summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2011-12-10 17:26:15 -0800
committerAlon Zakai <alonzakai@gmail.com>2011-12-10 17:26:15 -0800
commitf59ffc338e2c1df792709a823be1c1d2735e88bf (patch)
tree7268bc264e4364f9766f1b137882870bf7b90569
parent0162cc4bdc1955b442bec1a185d024d3d30cec0e (diff)
parent3a35fd9389a18707abd51dc71e2096c64413d510 (diff)
Merge branch 'ta2bydefault'
-rw-r--r--src/intertyper.js9
-rw-r--r--src/jsifier.js6
-rw-r--r--src/library.js65
-rw-r--r--src/modules.js31
-rw-r--r--src/parseTools.js107
-rw-r--r--src/preamble.js221
-rw-r--r--src/runtime.js8
-rw-r--r--src/settings.js30
-rw-r--r--system/include/emscripten.h1
-rw-r--r--system/include/libc/sys/_types.h4
-rw-r--r--tests/bullet/output2.txt270
-rw-r--r--tests/cases/aliasbitcast2.ll27
-rw-r--r--tests/cases/aliasbitcast3.ll29
-rw-r--r--tests/cases/i64toi8star.ll32
-rw-r--r--tests/cases/i64toi8star.txt3
-rw-r--r--tests/gl/sdl_ogl.c12
-rw-r--r--tests/openjpeg/opj_config.h22
-rw-r--r--tests/parseInt/output.txt24
-rw-r--r--tests/printf/output_i64_1.txt8278
-rw-r--r--tests/runner.py341
-rw-r--r--tests/stat/src.c24
-rw-r--r--tools/js-optimizer.js5
-rw-r--r--tools/shared.py21
23 files changed, 9258 insertions, 312 deletions
diff --git a/src/intertyper.js b/src/intertyper.js
index 19eb658e..f3d68ac4 100644
--- a/src/intertyper.js
+++ b/src/intertyper.js
@@ -123,6 +123,12 @@ function intertyper(data, sidePass, baseLineNums) {
inFunction = false;
if (mainPass) {
var func = funcHeader.processItem(tokenizer.processItem({ lineText: currFunctionLines[0], lineNum: currFunctionLineNum }, true))[0];
+
+ if (SKIP_STACK_IN_SMALL && /emscripten_autodebug/.exec(func.ident)) {
+ warn('Disabling SKIP_STACK_IN_SMALL because we are apparently processing autodebugger data');
+ SKIP_STACK_IN_SMALL = 0;
+ }
+
unparsedBundles.push({
intertype: 'unparsedFunction',
// We need this early, to know basic function info - ident, params, varargs
@@ -797,6 +803,9 @@ function intertyper(data, sidePass, baseLineNums) {
var segments = splitTokenList(item.tokens.slice(1));
for (var i = 1; i <= 4; i++) {
if (segments[i-1]) {
+ if (i > 1 && segments[i-1].length == 1 && segments[0].length > 1) {
+ segments[i-1].unshift(segments[0][0]); // Add the type from the first segment, they are all alike
+ }
item['param'+i] = parseLLVMSegment(segments[i-1]);
}
}
diff --git a/src/jsifier.js b/src/jsifier.js
index a2ca03eb..b02164f6 100644
--- a/src/jsifier.js
+++ b/src/jsifier.js
@@ -341,7 +341,7 @@ function JSify(data, functionsOnly, givenFunctions) {
var ret = [item];
item.JS = 'var ' + item.ident + ';';
// Set the actual value in a postset, since it may be a global variable. We also order by dependencies there
- var value = finalizeLLVMParameter(item.value, true); // do *not* indexize functions here
+ var value = Variables.globals[item.ident].resolvedAlias = finalizeLLVMParameter(item.value);
ret.push({
intertype: 'GlobalVariablePostSet',
ident: item.ident,
@@ -632,10 +632,6 @@ function JSify(data, functionsOnly, givenFunctions) {
var local = funcData.variables[ident];
if (local) return local;
var global = Variables.globals[ident];
- // FIXME: Currently, if something is an alias, we assume it is not a simple variable, so no need for
- // FUNCTION_TABLE when calling it (which we do need for a normal simple global variable). In
- // theory though an alias could be simple, we should probably check the type if this ever becomes a problem.
- if (global && global.alias) global = null;
return global || null;
}
diff --git a/src/library.js b/src/library.js
index 1d296981..e1121c2f 100644
--- a/src/library.js
+++ b/src/library.js
@@ -706,9 +706,8 @@ LibraryManager.library = {
mode = obj.link === undefined ? 0x8000 : 0xA000; // S_IFREG, S_IFLNK.
}
}
- {{{ makeSetValue('buf', 'offsets.st_dev', makeI64('dev'), 'i64') }}};
- {{{ makeSetValue('buf', 'offsets.st_rdev', makeI64('rdev'), 'i64') }}};
- // NOTE: These two may be i64, depending on compilation options.
+ {{{ makeSetValue('buf', 'offsets.st_dev', 'dev', 'i32') }}};
+ {{{ makeSetValue('buf', 'offsets.st_rdev', 'rdev', 'i32') }}};
{{{ makeSetValue('buf', 'offsets.st_size', 'size', 'i32') }}}
{{{ makeSetValue('buf', 'offsets.st_blocks', 'blocks', 'i32') }}}
if (obj.read) mode |= 0x16D; // S_IRUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH.
@@ -3841,9 +3840,57 @@ LibraryManager.library = {
return 0;
},
- // Compiled from newlib; for the original source and licensing, see library_strtok_r.c XXX will not work with typed arrays
- strtok_r: function(b,j,f){var a;a=null;var c,e;b=b;var i=b!=0;a:do if(i)a=0;else{b=HEAP[f];if(b!=0){a=0;break a}c=0;a=3;break a}while(0);if(a==0){a:for(;;){e=HEAP[b];b+=1;a=j;var g=e;i=a;a=2;b:for(;;){d=a==5?d:0;a=HEAP[i+d];if(a!=0==0){a=9;break a}var d=d+1;if(g==a)break b;else a=5}a=2}if(a==9)if(g==0)c=HEAP[f]=0;else{c=b+-1;a:for(;;){e=HEAP[b];b+=1;a=j;g=e;d=a;a=10;b:for(;;){h=a==13?h:0;a=HEAP[d+h];if(a==g!=0)break a;var h=h+1;if(a!=0)a=13;else break b}}if(e==0)b=0;else HEAP[b+-1]=0; HEAP[f]=b;c=c}else if(a==7){HEAP[f]=b;HEAP[b+-1]=0;c=b+-1}}return c},
- // TODO: Compile strtok() from source.
+ // Translated from newlib; for the original source and licensing, see library_strtok_r.c
+ strtok_r: function(s, delim, lasts) {
+ var skip_leading_delim = 1;
+ var spanp;
+ var c, sc;
+ var tok;
+
+
+ if (s == 0 && (s = getValue(lasts, 'i8*')) == 0) {
+ return 0;
+ }
+
+ cont: while (1) {
+ c = getValue(s++, 'i8');
+ for (spanp = delim; (sc = getValue(spanp++, 'i8')) != 0;) {
+ if (c == sc) {
+ if (skip_leading_delim) {
+ continue cont;
+ } else {
+ setValue(lasts, s, 'i8*');
+ setValue(s - 1, 0, 'i8');
+ return s - 1;
+ }
+ }
+ }
+ break;
+ }
+
+ if (c == 0) {
+ setValue(lasts, 0, 'i8*');
+ return 0;
+ }
+ tok = s - 1;
+
+ for (;;) {
+ c = getValue(s++, 'i8');
+ spanp = delim;
+ do {
+ if ((sc = getValue(spanp++, 'i8')) == c) {
+ if (c == 0) {
+ s = 0;
+ } else {
+ setValue(s - 1, 0, 'i8');
+ }
+ setValue(lasts, s, 'i8*');
+ return tok;
+ }
+ } while (sc != 0);
+ }
+ abort('strtok_r error!');
+ },
strerror_r__deps: ['$ERRNO_CODES', '$ERRNO_MESSAGES', '__setErrNo'],
strerror_r: function(errnum, strerrbuf, buflen) {
@@ -5057,7 +5104,7 @@ LibraryManager.library = {
// var indexes = Runtime.calculateStructAlignment({ fields: ['i32', 'i32'] });
var me = _localeconv;
if (!me.ret) {
- me.ret = allocate([allocate(intArrayFromString('.'), 'i8', ALLOC_NORMAL)], 'i8', ALLOC_NORMAL); // just decimal point, for now
+ me.ret = allocate([allocate(intArrayFromString('.'), 'i8', ALLOC_NORMAL)], 'i8*', ALLOC_NORMAL); // just decimal point, for now
}
return me.ret;
},
@@ -5493,8 +5540,8 @@ LibraryManager.library = {
eval(Pointer_stringify(ptr));
},
- _Z21emscripten_run_scriptPKc: function(ptr) {
- eval(Pointer_stringify(ptr));
+ emscripten_run_script_int: function(ptr) {
+ return eval(Pointer_stringify(ptr));
},
$Profiling: {
diff --git a/src/modules.js b/src/modules.js
index 3ce4a541..49f93e61 100644
--- a/src/modules.js
+++ b/src/modules.js
@@ -254,22 +254,37 @@ var Functions = {
// All the function idents seen so far
allIdents: [],
- indexedFunctions: [0, 0], // Start at a non-0 (even, see below) value
+ indexedFunctions: {},
+ nextIndex: 2, // Start at a non-0 (even, see below) value
// Mark a function as needing indexing, and returns the index
getIndex: function(ident) {
- var key = this.indexedFunctions.indexOf(ident);
- if (key < 0) {
- key = this.indexedFunctions.length;
- this.indexedFunctions[key] = ident;
- this.indexedFunctions[key+1] = 0; // Need to have keys be even numbers, see |polymorph| test
+ var ret = this.indexedFunctions[ident];
+ if (!ret) {
+ ret = this.nextIndex;
+ this.nextIndex += 2; // Need to have indexes be even numbers, see |polymorph| test
+ this.indexedFunctions[ident] = ret;
}
- return key.toString();
+ return ret.toString();
},
// Generate code for function indexing
generateIndexing: function() {
- var indices = this.indexedFunctions.toString().replace('"', '');
+ var vals = zeros(this.nextIndex);
+ for (var ident in this.indexedFunctions) {
+ vals[this.indexedFunctions[ident]] = ident;
+ }
+
+ // Resolve multi-level aliases all the way down
+ for (var i = 0; i < vals.length; i++) {
+ while (1) {
+ var varData = Variables.globals[vals[i]];
+ if (!(varData && varData.resolvedAlias)) break;
+ vals[i] = vals[varData.resolvedAlias];
+ }
+ }
+
+ var indices = vals.toString().replace('"', '');
if (BUILD_AS_SHARED_LIB) {
// Shared libraries reuse the parent's function table.
return 'FUNCTION_TABLE = FUNCTION_TABLE.concat([' + indices + ']);';
diff --git a/src/parseTools.js b/src/parseTools.js
index 3eaf3577..024026c8 100644
--- a/src/parseTools.js
+++ b/src/parseTools.js
@@ -95,9 +95,9 @@ function toNiceIdentCarefully(ident) {
// is true, then also allow () and spaces.
function isNiceIdent(ident, loose) {
if (loose) {
- return /^[\w$_ ()]+$/.test(ident);
+ return /^\(?[$_]+[\w$_\d ]*\)?$/.test(ident);
} else {
- return /^[\w$_]+$/.test(ident);
+ return /^[$_]+[\w$_\d]*$/.test(ident);
}
}
@@ -559,17 +559,23 @@ function makeInlineCalculation(expression, value, tempVar) {
return '(' + expression.replace(/VALUE/g, value) + ')';
}
-// Makes a proper runtime value for a 64-bit value from low and high i32s.
+// Given two 32-bit unsigned parts of an emulated 64-bit number, combine them into a JS number (double).
+// Rounding is inevitable if the number is large. This is a particular problem for small negative numbers
+// (-1 will be rounded!), so handle negatives separately and carefully
+function makeBigInt(low, high) {
+ // here VALUE will be the big part
+ return '(' + high + ' <= 2147483648 ? (' + makeSignOp(low, 'i32', 'un', 1, 1) + '+(' + makeSignOp(high, 'i32', 'un', 1, 1) + '*4294967296))' +
+ ' : (' + makeSignOp(low, 'i32', 're', 1, 1) + '+(1+' + makeSignOp(high, 'i32', 're', 1, 1) + ')*4294967296))';
+}
+
+// Makes a proper runtime value for a 64-bit value from low and high i32s. low and high are assumed to be unsigned.
function makeI64(low, high) {
+ high = high || '0';
if (I64_MODE == 1) {
- return '[' + low + ',' + (high || '0') + ']';
- // FIXME with this? return '[unSign(' + low + ',32),' + (high ? ('unSign(' + high + ',32)') : '0') + ']';
+ return '[' + makeSignOp(low, 'i32', 'un', 1, 1) + ',' + makeSignOp(high, 'i32', 'un', 1, 1) + ']';
} else {
- var ret = low;
- if (high) {
- ret = '(' + low + '+(4294967296*' + high + '))';
- }
- return ret;
+ if (high) return makeBigInt(low, high);
+ return low;
}
}
@@ -577,24 +583,25 @@ function makeI64(low, high) {
// Will suffer from rounding. margeI64 does the opposite.
// TODO: optimize I64 calcs. For example, saving their parts as signed 32 as opposed to unsigned would help
function splitI64(value) {
- assert(I64_MODE == 1);
- return makeInlineCalculation(makeI64('VALUE>>>0', 'Math.floor(VALUE/4294967296)'), value, 'tempBigInt');
+ // We need to min here, since our input might be a double, and large values are rounded, so they can
+ // be slightly higher than expected. And if we get 4294967296, that will turn into a 0 if put into a
+ // HEAP32 or |0'd, etc.
+ return makeInlineCalculation(makeI64('VALUE>>>0', 'Math.min(Math.floor(VALUE/4294967296), 4294967295)'), value, 'tempBigIntP');
}
function mergeI64(value) {
assert(I64_MODE == 1);
- return '(tempI64=' + value + ',tempI64[0]+tempI64[1]*4294967296)';
+ return makeInlineCalculation(makeBigInt('VALUE[0]', 'VALUE[1]'), value, 'tempI64');
}
// Takes an i64 value and changes it into the [low, high] form used in i64 mode 1. In that
// mode, this is a no-op
function ensureI64_1(value) {
if (I64_MODE == 1) return value;
- return makeInlineCalculation('[VALUE>>>0, Math.floor(VALUE/4294967296)]', value, 'tempBigInt');
+ return splitI64(value, 1);
}
function makeCopyI64(value) {
assert(I64_MODE == 1);
-
return value + '.slice(0)';
}
@@ -889,7 +896,7 @@ function getHeapOffset(offset, type) {
}
// See makeSetValue
-function makeGetValue(ptr, pos, type, noNeedFirst, unsigned, ignore, align) {
+function makeGetValue(ptr, pos, type, noNeedFirst, unsigned, ignore, align, noSafe) {
if (isStructType(type)) {
var typeData = Types.types[type];
var ret = [];
@@ -899,6 +906,12 @@ function makeGetValue(ptr, pos, type, noNeedFirst, unsigned, ignore, align) {
return '{ ' + ret.join(', ') + ' }';
}
+ if (DOUBLE_MODE == 1 && USE_TYPED_ARRAYS == 2 && type == 'double') {
+ return '(tempDoubleI32[0]=' + makeGetValue(ptr, pos, 'i32', noNeedFirst, unsigned, ignore, align) + ',' +
+ 'tempDoubleI32[1]=' + makeGetValue(ptr, getFastValue(pos, '+', Runtime.getNativeTypeSize('i32')), 'i32', noNeedFirst, unsigned, ignore, align) + ',' +
+ 'tempDoubleF64[0])';
+ }
+
if (EMULATE_UNALIGNED_ACCESSES && USE_TYPED_ARRAYS == 2 && align && isIntImplemented(type)) { // TODO: support unaligned doubles and floats
// Alignment is important here. May need to split this up
var bytes = Runtime.getNativeTypeSize(type);
@@ -923,12 +936,12 @@ function makeGetValue(ptr, pos, type, noNeedFirst, unsigned, ignore, align) {
}
if (type == 'i64' && I64_MODE == 1) {
- return '[' + makeGetValue(ptr, pos, 'i32', noNeedFirst, unsigned, ignore) + ','
- + makeGetValue(ptr, getFastValue(pos, '+', Runtime.getNativeTypeSize('i32')), 'i32', noNeedFirst, unsigned, ignore) + ']';
+ return '[' + makeGetValue(ptr, pos, 'i32', noNeedFirst, 1, ignore) + ','
+ + makeGetValue(ptr, getFastValue(pos, '+', Runtime.getNativeTypeSize('i32')), 'i32', noNeedFirst, 1, ignore) + ']';
}
var offset = calcFastOffset(ptr, pos, noNeedFirst);
- if (SAFE_HEAP) {
+ if (SAFE_HEAP && !noSafe) {
if (type !== 'null' && type[0] !== '#') type = '"' + safeQuote(type) + '"';
if (type[0] === '#') type = type.substr(1);
return 'SAFE_HEAP_LOAD(' + offset + ', ' + type + ', ' + (!!unsigned+0) + ', ' + ((!checkSafeHeap() || ignore)|0) + ')';
@@ -938,8 +951,8 @@ function makeGetValue(ptr, pos, type, noNeedFirst, unsigned, ignore, align) {
}
function indexizeFunctions(value, type) {
- assert((type && type !== '?') || (typeof value === 'string' && value.substr(0, 6) === 'CHECK_'), 'No type given for function indexizing: ' + [value, type]);
- assert(value !== type, 'Type set to value: ' + [value, type]);
+ assert((type && type !== '?') || (typeof value === 'string' && value.substr(0, 6) === 'CHECK_'), 'No type given for function indexizing');
+ assert(value !== type, 'Type set to value');
if (type && isFunctionType(type) && value[0] === '_') { // checking for _ differentiates from $ (local vars)
if (BUILD_AS_SHARED_LIB) {
return '(FUNCTION_TABLE_OFFSET + ' + Functions.getIndex(value) + ')';
@@ -960,7 +973,7 @@ function indexizeFunctions(value, type) {
//! 'null' means, in the context of SAFE_HEAP, that we should accept all types;
//! which means we should write to all slabs, ignore type differences if any on reads, etc.
//! @param noNeedFirst Whether to ignore the offset in the pointer itself.
-function makeSetValue(ptr, pos, value, type, noNeedFirst, ignore, align) {
+function makeSetValue(ptr, pos, value, type, noNeedFirst, ignore, align, noSafe) {
if (isStructType(type)) {
var typeData = Types.types[type];
var ret = [];
@@ -975,6 +988,12 @@ function makeSetValue(ptr, pos, value, type, noNeedFirst, ignore, align) {
return ret.join('; ');
}
+ if (DOUBLE_MODE == 1 && USE_TYPED_ARRAYS == 2 && type == 'double') {
+ return '(tempDoubleF64[0]=' + value + ',' +
+ makeSetValue(ptr, pos, 'tempDoubleI32[0]', 'i32', noNeedFirst, ignore, align) + ',' +
+ makeSetValue(ptr, getFastValue(pos, '+', Runtime.getNativeTypeSize('i32')), 'tempDoubleI32[1]', 'i32', noNeedFirst, ignore, align) + ')';
+ }
+
if (EMULATE_UNALIGNED_ACCESSES && USE_TYPED_ARRAYS == 2 && align && isIntImplemented(type)) { // TODO: support unaligned doubles and floats
// Alignment is important here. May need to split this up
var bytes = Runtime.getNativeTypeSize(type);
@@ -1003,7 +1022,7 @@ function makeSetValue(ptr, pos, value, type, noNeedFirst, ignore, align) {
value = indexizeFunctions(value, type);
var offset = calcFastOffset(ptr, pos, noNeedFirst);
- if (SAFE_HEAP) {
+ if (SAFE_HEAP && !noSafe) {
if (type !== 'null' && type[0] !== '#') type = '"' + safeQuote(type) + '"';
if (type[0] === '#') type = type.substr(1);
return 'SAFE_HEAP_STORE(' + offset + ', ' + value + ', ' + type + ', ' + ((!checkSafeHeap() || ignore)|0) + ')';
@@ -1219,7 +1238,7 @@ function makeGetPos(ptr) {
return ptr;
}
-var IHEAP_FHEAP = set('IHEAP', 'FHEAP');
+var IHEAP_FHEAP = set('IHEAP', 'IHEAPU', 'FHEAP');
function makePointer(slab, pos, allocator, type) {
assert(type, 'makePointer requires type info');
@@ -1259,7 +1278,7 @@ function makeGetSlabs(ptr, type, allowMultiple, unsigned) {
if (type in Runtime.FLOAT_TYPES || type === 'int64') { // XXX should be i64, no?
return ['FHEAP']; // If USE_FHEAP is false, will fail at runtime. At compiletime we do need it for library stuff.
} else if (type in Runtime.INT_TYPES || isPointerType(type)) {
- return ['IHEAP'];
+ return [unsigned ? 'IHEAPU' : 'IHEAP'];
} else {
assert(allowMultiple, 'Unknown slab type and !allowMultiple: ' + type);
if (USE_FHEAP) {
@@ -1320,10 +1339,7 @@ function finalizeLLVMFunctionCall(item, noIndexizeFunctions) {
// from one file to another, would be enough to fix this), or, do not pass structs by value (which in general
// is inefficient, and worth avoiding if you can).
}
- case 'inttoptr':
- case 'ptrtoint':
- return finalizeLLVMParameter(item.params[0], noIndexizeFunctions);
- case 'icmp': case 'mul': case 'zext': case 'add': case 'sub': case 'div':
+ case 'icmp': case 'mul': case 'zext': case 'add': case 'sub': case 'div': case 'inttoptr': case 'ptrtoint':
var temp = {
op: item.intertype,
variant: item.variant,
@@ -1457,10 +1473,9 @@ function finalizeLLVMParameter(param, noIndexizeFunctions) {
return ret;
}
-function makeSignOp(value, type, op, force) {
- // XXX this is not quite right. both parts should always be unsigned (or, perhaps always signed, we should move to that - separate issue though)
+function makeSignOp(value, type, op, force, ignore) {
if (I64_MODE == 1 && type == 'i64') {
- return '(tempPair=' + value + ',[' + makeSignOp('tempPair[0]', 'i32', op, force) + ',' + makeSignOp('tempPair[1]', 'i32', op, force) + '])';
+ return value; // these are always assumed to be two 32-bit unsigneds.
}
if (isPointerType(type)) type = 'i32'; // Pointers are treated as 32-bit ints
@@ -1469,7 +1484,7 @@ function makeSignOp(value, type, op, force) {
if (type in Runtime.INT_TYPES) {
bits = parseInt(type.substr(1));
full = op + 'Sign(' + value + ', ' + bits + ', ' + Math.floor(correctSpecificSign() && !PGO) + (
- PGO ? ', "' + Debugging.getIdentifier() + '"' : ''
+ PGO ? ', "' + (ignore ? '' : Debugging.getIdentifier()) + '"' : ''
) + ')';
// Always sign/unsign constants at compile time, regardless of CHECK/CORRECT
if (isNumber(value)) {
@@ -1479,7 +1494,7 @@ function makeSignOp(value, type, op, force) {
if (!correctSigns() && !CHECK_SIGNS && !force) return value;
if (type in Runtime.INT_TYPES) {
// shortcuts
- if (!CHECK_SIGNS) {
+ if (!CHECK_SIGNS || ignore) {
if (bits === 32) {
if (op === 're') {
return '((' + value + ')|0)';
@@ -1497,9 +1512,9 @@ function makeSignOp(value, type, op, force) {
}
} else { // bits > 32
if (op === 're') {
- return makeInlineCalculation('VALUE >= ' + Math.pow(2, bits-1) + ' ? VALUE-' + Math.pow(2, bits) + ' : VALUE', value, 'tempBigInt');
+ return makeInlineCalculation('VALUE >= ' + Math.pow(2, bits-1) + ' ? VALUE-' + Math.pow(2, bits) + ' : VALUE', value, 'tempBigIntS');
} else {
- return makeInlineCalculation('VALUE >= 0 ? VALUE : ' + Math.pow(2, bits) + '+VALUE', value, 'tempBigInt');
+ return makeInlineCalculation('VALUE >= 0 ? VALUE : ' + Math.pow(2, bits) + '+VALUE', value, 'tempBigIntS');
}
}
}
@@ -1524,7 +1539,7 @@ function makeRounding(value, bits, signed, floatConversion) {
// Note that if converting a float, we may have the wrong sign at this point! But, we have
// been rounded properly regardless, and we will be sign-corrected later when actually used, if
// necessary.
- return makeInlineCalculation('VALUE >= 0 ? Math.floor(VALUE) : Math.ceil(VALUE)', value, 'tempBigInt');
+ return makeInlineCalculation('VALUE >= 0 ? Math.floor(VALUE) : Math.ceil(VALUE)', value, 'tempBigIntR');
}
// fptoui and fptosi are not in these, because we need to be careful about what we do there. We can't
@@ -1571,10 +1586,10 @@ function processMathop(item) {
if (item.type[0] === 'i') {
bits = parseInt(item.type.substr(1));
}
- var bitsLeft = ident2 ? ident2.substr(2, ident2.length-3) : null; // remove (i and ), to leave number. This value is important in float ops
+ var bitsLeft = item.param2 ? item.param2.ident.substr(1) : null; // remove i to leave number. This value is important in float ops
function integerizeBignum(value) {
- return makeInlineCalculation('VALUE-VALUE%1', value, 'tempBigInt');
+ return makeInlineCalculation('VALUE-VALUE%1', value, 'tempBigIntI');
}
if ((type == 'i64' || paramTypes[0] == 'i64' || paramTypes[1] == 'i64' || ident2 == '(i64)') && I64_MODE == 1) {
@@ -1594,14 +1609,14 @@ function processMathop(item) {
}
case 'shl': {
return '[' + ident1 + '[0] << ' + ident2 + ', ' +
- '('+ident1 + '[1] << ' + ident2 + ') | ((' + ident1 + '[0]&((Math.pow(2, ' + ident2 + ')-1)<<(32-' + ident2 + '))) >> (32-' + ident2 + '))]';
+ '('+ident1 + '[1] << ' + ident2 + ') | ((' + ident1 + '[0]&((Math.pow(2, ' + ident2 + ')-1)<<(32-' + ident2 + '))) >>> (32-' + ident2 + '))]';
}
case 'ashr': {
- return '[('+ident1 + '[0] >> ' + ident2 + ') | ((' + ident1 + '[1]&((Math.pow(2, ' + ident2 + ')-1)<<(32-' + ident2 + '))) >> (32-' + ident2 + ')),' +
- ident1 + '[1] >> ' + ident2 + ']';
+ return '[('+ident1 + '[0] >>> ' + ident2 + ') | ((' + ident1 + '[1]&(Math.pow(2, ' + ident2 + ')-1))<<(32-' + ident2 + ')),' +
+ ident1 + '[1] >>> ' + ident2 + ']';
}
case 'lshr': {
- return '[('+ident1 + '[0] >>> ' + ident2 + ') | ((' + ident1 + '[1]&((Math.pow(2, ' + ident2 + ')-1)<<(32-' + ident2 + '))) >> (32-' + ident2 + ')),' +
+ return '[('+ident1 + '[0] >>> ' + ident2 + ') | ((' + ident1 + '[1]&(Math.pow(2, ' + ident2 + ')-1))<<(32-' + ident2 + ')),' +
ident1 + '[1] >>> ' + ident2 + ']';
}
case 'uitofp': case 'sitofp': return ident1 + '[0] + ' + ident1 + '[1]*4294967296';
@@ -1632,12 +1647,13 @@ function processMathop(item) {
}
}
case 'zext': return makeI64(ident1, 0);
- case 'sext': return makeInlineCalculation(makeI64('VALUE', 'VALUE<0 ? 4294967295 : 0'), ident1, 'tempBigInt');
+ case 'sext': return makeInlineCalculation(makeI64('VALUE', 'VALUE<0 ? 4294967295 : 0'), ident1, 'tempBigIntD');
case 'trunc': {
return '((' + ident1 + '[0]) & ' + (Math.pow(2, bitsLeft)-1) + ')';
}
case 'select': return ident1 + ' ? ' + makeCopyI64(ident2) + ' : ' + makeCopyI64(ident3);
- case 'ptrtoint': case 'inttoptr': throw 'Pointers cannot be 64-bit!';
+ case 'ptrtoint': throw 'Pointers cannot be 64-bit!';
+ case 'inttoptr': return '(' + ident1 + '[0])'; // just directly truncate the i64 to a 'pointer', which is an i32
// Dangerous, rounded operations. TODO: Fully emulate
case 'add': warnI64_1(); return handleOverflow(splitI64(mergeI64(ident1) + '+' + mergeI64(ident2)), bits);
case 'sub': warnI64_1(); return handleOverflow(splitI64(mergeI64(ident1) + '-' + mergeI64(ident2)), bits);
@@ -1772,6 +1788,7 @@ function processMathop(item) {
}
return ident1 + ret;
}
+ case 'bitcast': return ident1;
default: throw 'Unknown mathcmp op: ' + item.op;
}
}
diff --git a/src/preamble.js b/src/preamble.js
index 3fcdf1f8..a6556095 100644
--- a/src/preamble.js
+++ b/src/preamble.js
@@ -86,93 +86,50 @@ function SAFE_HEAP_STORE(dest, value, type, ignore) {
print((new Error()).stack);
throw "Bad store!" + dest;
}
-#if USE_TYPED_ARRAYS == 1
- if (type === null) {
- IHEAP[dest] = value;
-#if USE_FHEAP
- FHEAP[dest] = value;
-#endif
- } else if (type in Runtime.FLOAT_TYPES) {
- FHEAP[dest] = value;
- } else {
- IHEAP[dest] = value;
- }
-#else
+
#if USE_TYPED_ARRAYS == 2
- assert(type != 'null', 'typed arrays 2 with null type!');
- if (type[type.length-1] === '*') type = 'i32'; // hardcoded pointers as 32-bit
+ // Check alignment
switch(type) {
- case 'i1': case 'i8': HEAP8[dest] = value; break;
- case 'i16': assert(dest % 2 === 0, type + ' stores must be aligned: ' + dest); HEAP16[dest>>1] = value; break;
- case 'i32': assert(dest % 4 === 0, type + ' stores must be aligned: ' + dest); HEAP32[dest>>2] = value; break;
- case 'i64': assert(dest % 4 === 0, type + ' stores must be aligned: ' + dest); warn64(); HEAP32[dest>>2] = value; break; // XXX store int64 as int32
- case 'float': assert(dest % 4 === 0, type + ' stores must be aligned: ' + dest); HEAPF32[dest>>2] = value; break;
- case 'double': assert(dest % 4 === 0, type + ' stores must be aligned: ' + dest); warn64(); HEAPF32[dest>>2] = value; break; // XXX store doubles as floats
- default: throw 'weird type for typed array II: ' + type + new Error().stack;
- }
+ case 'i16': assert(dest % 2 == 0); break;
+ case 'i32': assert(dest % 4 == 0); break;
+ case 'i64': assert(dest % 8 == 0); break;
+ case 'float': assert(dest % 4 == 0); break;
+#if DOUBLE_MODE == 1
+ case 'double': assert(dest % 4 == 0); break;
#else
- HEAP[dest] = value;
+ case 'double': assert(dest % 4 == 0); warn64(); break;
#endif
+ }
#endif
+
+ setValue(dest, value, type, 1);
}
function SAFE_HEAP_LOAD(dest, type, unsigned, ignore) {
SAFE_HEAP_ACCESS(dest, type, ignore);
-#if USE_TYPED_ARRAYS == 1
- if (type in Runtime.FLOAT_TYPES) {
#if SAFE_HEAP_LOG
- print('SAFE_HEAP load: ' + [dest, type, FHEAP[dest], ignore]);
+ print('SAFE_HEAP load: ' + [dest, type, getValue(dest, type, 1), ignore]);
#endif
- return FHEAP[dest];
- } else {
-#if SAFE_HEAP_LOG
- print('SAFE_HEAP load: ' + [dest, type, IHEAP[dest], ignore]);
-#endif
- return IHEAP[dest];
- }
-#else
+
#if USE_TYPED_ARRAYS == 2
-#if SAFE_HEAP_LOG
- var originalType = type;
-#endif
- var ret;
- if (type[type.length-1] === '*') type = 'i32'; // hardcoded pointers as 32-bit
+ // Check alignment
switch(type) {
- case 'i1': case 'i8': {
- ret = (unsigned ? HEAPU8 : HEAP8)[dest];
- break;
- }
- case 'i16': {
- assert(dest % 2 === 0, type + ' loads must be aligned: ' + dest);
- ret = (unsigned ? HEAPU16 : HEAP16)[dest>>1];
- break;
- }
- case 'i32': case 'i64': { // XXX store int64 as int32
- assert(dest % 4 === 0, type + ' loads must be aligned: ' + dest);
- if (type === 'i64') warn64();
- ret = (unsigned ? HEAPU32 : HEAP32)[dest>>2];
- break;
- }
- case 'float': case 'double': { // XXX store doubles as floats
- assert(dest % 4 === 0, type + ' loads must be aligned: ' + dest);
- if (type === 'double') warn64();
- ret = HEAPF32[dest>>2];
- break;
- }
- default: throw 'weird type for typed array II: ' + type;
- }
-#if SAFE_HEAP_LOG
- print('SAFE_HEAP load: ' + [dest, originalType, ret, unsigned, ignore]);
-#endif
- return ret;
+ case 'i16': assert(dest % 2 == 0); break;
+ case 'i32': assert(dest % 4 == 0); break;
+ case 'i64': assert(dest % 8 == 0); break;
+ case 'float': assert(dest % 4 == 0); break;
+#if DOUBLE_MODE == 1
+ case 'double': assert(dest % 4 == 0); break;
#else
-#if SAFE_HEAP_LOG
- print('SAFE_HEAP load: ' + [dest, type, HEAP[dest], ignore]);
-#endif
- return HEAP[dest];
+ case 'double': assert(dest % 4 == 0); warn64(); break;
#endif
+ }
#endif
+
+ var ret = getValue(dest, type, 1);
+ if (unsigned) ret = unSign(ret, parseInt(type.substr(1)), 1);
+ return ret;
}
function SAFE_HEAP_COPY_HISTORY(dest, src) {
@@ -377,10 +334,17 @@ var ABORT = false;
var undef = 0;
// tempInt is used for 32-bit signed values or smaller. tempBigInt is used
// for 32-bit unsigned values or more than 32 bits. TODO: audit all uses of tempInt
-var tempValue, tempInt, tempBigInt, tempInt2, tempBigInt2, tempPair;
+var tempValue, tempInt, tempBigInt, tempInt2, tempBigInt2, tempPair, tempBigIntI, tempBigIntR, tempBigIntS, tempBigIntP, tempBigIntD;
#if I64_MODE == 1
var tempI64, tempI64b;
#endif
+#if DOUBLE_MODE == 1
+#if USE_TYPED_ARRAYS == 2
+var tempDoubleBuffer = new ArrayBuffer(8);
+var tempDoubleI32 = new Int32Array(tempDoubleBuffer);
+var tempDoubleF64 = new Float64Array(tempDoubleBuffer);
+#endif
+#endif
function abort(text) {
print(text + ':\n' + (new Error).stack);
@@ -400,35 +364,71 @@ function assert(condition, text) {
// code then, whereas this function picks the right code at
// run-time.
-function setValue(ptr, value, type) {
+function setValue(ptr, value, type, noSafe) {
+ type = type || 'i8';
if (type[type.length-1] === '*') type = 'i32'; // pointers are 32-bit
- switch(type) {
- case 'i1': {{{ makeSetValue('ptr', '0', 'value', 'i1') }}}; break;
- case 'i8': {{{ makeSetValue('ptr', '0', 'value', 'i8') }}}; break;
- case 'i16': {{{ makeSetValue('ptr', '0', 'value', 'i16') }}}; break;
- case 'i32': {{{ makeSetValue('ptr', '0', 'value', 'i32') }}}; break;
- case 'i64': {{{ makeSetValue('ptr', '0', 'value', 'i64') }}}; break;
- case 'float': {{{ makeSetValue('ptr', '0', 'value', 'float') }}}; break;
- case 'double': {{{ makeSetValue('ptr', '0', 'value', 'double') }}}; break;
- default: abort('invalid type for setValue: ' + type);
+#if SAFE_HEAP
+ if (noSafe) {
+ switch(type) {
+ case 'i1': {{{ makeSetValue('ptr', '0', 'value', 'i1', undefined, undefined, undefined, '1') }}}; break;
+ case 'i8': {{{ makeSetValue('ptr', '0', 'value', 'i8', undefined, undefined, undefined, '1') }}}; break;
+ case 'i16': {{{ makeSetValue('ptr', '0', 'value', 'i16', undefined, undefined, undefined, '1') }}}; break;
+ case 'i32': {{{ makeSetValue('ptr', '0', 'value', 'i32', undefined, undefined, undefined, '1') }}}; break;
+ case 'i64': {{{ makeSetValue('ptr', '0', 'value', 'i64', undefined, undefined, undefined, '1') }}}; break;
+ case 'float': {{{ makeSetValue('ptr', '0', 'value', 'float', undefined, undefined, undefined, '1') }}}; break;
+ case 'double': {{{ makeSetValue('ptr', '0', 'value', 'double', undefined, undefined, undefined, '1') }}}; break;
+ default: abort('invalid type for setValue: ' + type);
+ }
+ } else {
+#endif
+ switch(type) {
+ case 'i1': {{{ makeSetValue('ptr', '0', 'value', 'i1') }}}; break;
+ case 'i8': {{{ makeSetValue('ptr', '0', 'value', 'i8') }}}; break;
+ case 'i16': {{{ makeSetValue('ptr', '0', 'value', 'i16') }}}; break;
+ case 'i32': {{{ makeSetValue('ptr', '0', 'value', 'i32') }}}; break;
+ case 'i64': {{{ makeSetValue('ptr', '0', 'value', 'i64') }}}; break;
+ case 'float': {{{ makeSetValue('ptr', '0', 'value', 'float') }}}; break;
+ case 'double': {{{ makeSetValue('ptr', '0', 'value', 'double') }}}; break;
+ default: abort('invalid type for setValue: ' + type);
+ }
+#if SAFE_HEAP
}
+#endif
}
Module['setValue'] = setValue;
// Parallel to setValue.
-function getValue(ptr, type) {
+function getValue(ptr, type, noSafe) {
+ type = type || 'i8';
if (type[type.length-1] === '*') type = 'i32'; // pointers are 32-bit
- switch(type) {
- case 'i1': return {{{ makeGetValue('ptr', '0', 'i1') }}};
- case 'i8': return {{{ makeGetValue('ptr', '0', 'i8') }}};
- case 'i16': return {{{ makeGetValue('ptr', '0', 'i16') }}};
- case 'i32': return {{{ makeGetValue('ptr', '0', 'i32') }}};
- case 'i64': return {{{ makeGetValue('ptr', '0', 'i64') }}};
- case 'float': return {{{ makeGetValue('ptr', '0', 'float') }}};
- case 'double': return {{{ makeGetValue('ptr', '0', 'double') }}};
- default: abort('invalid type for setValue: ' + type);
+#if SAFE_HEAP
+ if (noSafe) {
+ switch(type) {
+ case 'i1': return {{{ makeGetValue('ptr', '0', 'i1', undefined, undefined, undefined, undefined, '1') }}};
+ case 'i8': return {{{ makeGetValue('ptr', '0', 'i8', undefined, undefined, undefined, undefined, '1') }}};
+ case 'i16': return {{{ makeGetValue('ptr', '0', 'i16', undefined, undefined, undefined, undefined, '1') }}};
+ case 'i32': return {{{ makeGetValue('ptr', '0', 'i32', undefined, undefined, undefined, undefined, '1') }}};
+ case 'i64': return {{{ makeGetValue('ptr', '0', 'i64', undefined, undefined, undefined, undefined, '1') }}};
+ case 'float': return {{{ makeGetValue('ptr', '0', 'float', undefined, undefined, undefined, undefined, '1') }}};
+ case 'double': return {{{ makeGetValue('ptr', '0', 'double', undefined, undefined, undefined, undefined, '1') }}};
+ default: abort('invalid type for setValue: ' + type);
+ }
+ } else {
+#endif
+ switch(type) {
+ case 'i1': return {{{ makeGetValue('ptr', '0', 'i1') }}};
+ case 'i8': return {{{ makeGetValue('ptr', '0', 'i8') }}};
+ case 'i16': return {{{ makeGetValue('ptr', '0', 'i16') }}};
+ case 'i32': return {{{ makeGetValue('ptr', '0', 'i32') }}};
+ case 'i64': return {{{ makeGetValue('ptr', '0', 'i64') }}};
+ case 'float': return {{{ makeGetValue('ptr', '0', 'float') }}};
+ case 'double': return {{{ makeGetValue('ptr', '0', 'double') }}};
+ default: abort('invalid type for setValue: ' + type);
+ }
+#if SAFE_HEAP
}
+#endif
return null;
}
Module['getValue'] = getValue;
@@ -521,7 +521,7 @@ function alignMemoryPage(x) {
var HEAP;
#if USE_TYPED_ARRAYS == 1
-var IHEAP;
+var IHEAP, IHEAPU;
#if USE_FHEAP
var FHEAP;
#endif
@@ -532,6 +532,42 @@ var HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32;
var STACK_ROOT, STACKTOP, STACK_MAX;
var STATICTOP;
+#if USE_TYPED_ARRAYS
+var LAST_STATICTOP;
+function enlargeMemory() {
+ // LAST_STATICTOP is the previous top, TOTAL_MEMORY is the current size of the actual array, and STATICTOP is the new top.
+#if ASSERTIONS
+ assert(STATICTOP >= TOTAL_MEMORY && LAST_STATICTOP < TOTAL_MEMORY);
+ assert(TOTAL_MEMORY > 4); // So the loop below will not be infinite
+#endif
+ while (TOTAL_MEMORY <= STATICTOP) { // Simple heuristic. Override enlargeMemory() if your program has something more optimal for it
+ TOTAL_MEMORY = alignMemoryPage(TOTAL_MEMORY*1.25);
+ }
+#if USE_TYPED_ARRAYS == 1
+ var oldIHEAP = IHEAP;
+ HEAP = IHEAP = new Int32Array(TOTAL_MEMORY);
+ IHEAP.set(oldIHEAP);
+ IHEAPU = new Uint32Array(IHEAP.buffer);
+#if USE_FHEAP
+ var oldFHEAP = FHEAP;
+ FHEAP = new Float64Array(TOTAL_MEMORY);
+ FHEAP.set(oldFHEAP);
+#endif
+#endif
+#if USE_TYPED_ARRAYS == 2
+ var oldHEAP8 = HEAP8;
+ var buffer = new ArrayBuffer(TOTAL_MEMORY);
+ HEAP8 = new Int8Array(buffer);
+ HEAP16 = new Int16Array(buffer);
+ HEAP32 = new Int32Array(buffer);
+ HEAPU8 = new Uint8Array(buffer);
+ HEAPU16 = new Uint16Array(buffer);
+ HEAPU32 = new Uint32Array(buffer);
+ HEAPF32 = new Float32Array(buffer);
+ HEAP8.set(oldHEAP8);
+#endif
+}
+#endif
var TOTAL_MEMORY = Module['TOTAL_MEMORY'] || {{{ TOTAL_MEMORY }}};
var FAST_MEMORY = Module['FAST_MEMORY'] || {{{ FAST_MEMORY }}};
@@ -544,6 +580,7 @@ var FAST_MEMORY = Module['FAST_MEMORY'] || {{{ FAST_MEMORY }}};
#if USE_TYPED_ARRAYS == 1
HEAP = IHEAP = new Int32Array(TOTAL_MEMORY);
+ IHEAPU = new Uint32Array(IHEAP.buffer);
#if USE_FHEAP
FHEAP = new Float64Array(TOTAL_MEMORY);
#endif
diff --git a/src/runtime.js b/src/runtime.js
index a6261c74..0b36f967 100644
--- a/src/runtime.js
+++ b/src/runtime.js
@@ -56,7 +56,11 @@ var RuntimeGenerator = {
// An allocation that cannot be free'd
staticAlloc: function(size) {
- return RuntimeGenerator.alloc(size, 'STATIC', INIT_HEAP);
+ var ret = '';
+ if (USE_TYPED_ARRAYS) ret += 'LAST_STATICTOP = STATICTOP;'
+ ret += RuntimeGenerator.alloc(size, 'STATIC', INIT_HEAP);
+ if (USE_TYPED_ARRAYS) ret += '; if (STATICTOP >= TOTAL_MEMORY) enlargeMemory();'
+ return ret;
},
alignMemory: function(target, quantum) {
@@ -301,6 +305,8 @@ function reSign(value, bits, ignore, sig) {
var noted = false;
#endif
if (value >= half && (bits <= 32 || value > half)) { // for huge values, we can hit the precision limit and always get true here. so don't do that
+ // but, in general there is no perfect solution here. With 64-bit ints, we get rounding and errors
+ // TODO: In i64 mode 1, resign the two parts separately and safely
#if CHECK_SIGNS
if (!ignore) {
CorrectionsMonitor.note('ReSign', 0, sig);
diff --git a/src/settings.js b/src/settings.js
index 0964d4bb..1e041508 100644
--- a/src/settings.js
+++ b/src/settings.js
@@ -29,19 +29,18 @@ var ASSERTIONS = 1; // Whether we should add runtime assertions, for example to
var INVOKE_RUN = 1; // Whether we will call run(). Disable if you embed the generated
// code in your own, and will call run() yourself at the right time
-var INIT_STACK = 1; // Whether to initialize memory on the stack to 0.
+var INIT_STACK = 0; // Whether to initialize memory on the stack to 0.
var INIT_HEAP = 0; // Whether to initialize memory anywhere other than the stack to 0.
var FAST_MEMORY = 2*1024*1024; // The amount of memory to initialize to 0. This ensures it will be
// in a flat array. This only matters in non-typed array builds.
-var TOTAL_MEMORY = 50*1024*1024; // The total amount of memory to use. This mainly matters in
- // typed array builds - accessing memory about this value will
- // return undefined values and lead to serious problems, and there
- // is currently no warning about that!
+var TOTAL_MEMORY = 10*1024*1024; // The total amount of memory to use. Using more memory than this will
+ // cause us to expand the heap, which can be costly with typed arrays:
+ // we need to copy the old heap into a new one in that case.
// Code embetterments
-var MICRO_OPTS = 0; // Various micro-optimizations, like nativizing variables
+var MICRO_OPTS = 1; // Various micro-optimizations, like nativizing variables
var RELOOP = 0; // Recreate js native loops from llvm data
-var USE_TYPED_ARRAYS = 0; // Try to use typed arrays for the heap
+var USE_TYPED_ARRAYS = 2; // Use typed arrays for the heap
// 1 has two heaps, IHEAP (int32) and FHEAP (double),
// and addresses there are a match for normal addresses. This wastes memory but can be fast.
// 2 is a single heap, accessible through views as int8, int32, etc. This saves memory but
@@ -52,12 +51,24 @@ var USE_TYPED_ARRAYS = 0; // Try to use typed arrays for the heap
// TODO: require compiling with -malign-double, which does align doubles
var USE_FHEAP = 1; // Relevant in USE_TYPED_ARRAYS == 1. If this is disabled, only IHEAP will be used, and FHEAP
// not generated at all. This is useful if your code is 100% ints without floats or doubles
-var I64_MODE = 0; // How to implement 64-bit integers:
+var I64_MODE = 1; // How to implement 64-bit integers:
// 0: As doubles. This will work up to about 53 bits.
// 1: As [low, high]. This will support all 64 bits for bit ops, etc. properly, but will still
// use doubles for addition etc., like mode 0. This mode is slower than
// mode 0, so its only benefit is proper support for 64 bit bitops.
// TODO: Full bignum support
+var DOUBLE_MODE = 1; // How to load and store 64-bit doubles. Without typed arrays or in typed array mode 1,
+ // this doesn't matter - these values are just values like any other. In typed array mode 2,
+ // a potentialy risk is that doubles may be only 32-bit aligned. Forcing 64-bit alignment
+ // in Clang itself should be able to solve that, or as a workaround in DOUBLE_MODE 1 we
+ // will carefully load in parts, in a way that requires only 32-bit alignment. In DOUBLE_MODE
+ // 0 we will simply store and load doubles as 32-bit floats, so when they are stored/loaded
+ // they will truncate from 64 to 32 bits, and lose precision. This is faster, and might
+ // work for some code (but probably that code should just use floats and not doubles anyhow).
+ // Note that a downside of DOUBLE_MODE 1 is that we currently store the double in parts,
+ // then load it aligned, and that load-store will make JS engines alter it if it is being
+ // stored to a typed array for security reasons. That will 'fix' the number from being a
+ // NaN or an infinite number.
var EMULATE_UNALIGNED_ACCESSES = 1; // If set, the compiler will 'emulate' loads and stores that are not known to
// be sufficiently aligned, by working on individual bytes. This can be
// important in USE_TYPED_ARRAYS == 2, where unaligned accesses do not work,
@@ -74,7 +85,8 @@ var SKIP_STACK_IN_SMALL = 1; // When enabled, does not push/pop the stack at all
// may allocate stack later, and in a loop, this can be
// very bad. In particular, when debugging, printf()ing
// a lot can exhaust the stack very fast, with this option.
- // In particular, be careful with the autodebugger!
+ // In particular, be careful with the autodebugger! (We do turn
+ // this off automatically in that case, though.)
var INLINE_LIBRARY_FUNCS = 1; // Will inline library functions that have __inline defined
var CLOSURE_INLINE_PREVENTION_LINES = 50; // Functions of this number of lines or larger will have
// code generated that tells the closure compiler not to
diff --git a/system/include/emscripten.h b/system/include/emscripten.h
index 482f7ef3..7b135c5a 100644
--- a/system/include/emscripten.h
+++ b/system/include/emscripten.h
@@ -16,6 +16,7 @@ extern "C" {
* eval() the given script.
*/
extern void emscripten_run_script(const char *script);
+extern int emscripten_run_script_int(const char *script);
/*
* This macro-looking function will cause Emscripten to
diff --git a/system/include/libc/sys/_types.h b/system/include/libc/sys/_types.h
index 44f0db87..c56fbd58 100644
--- a/system/include/libc/sys/_types.h
+++ b/system/include/libc/sys/_types.h
@@ -21,7 +21,7 @@ typedef long _off_t;
typedef unsigned long long __dev_t;
#else
#ifndef __dev_t_defined
-typedef unsigned long long __dev_t; /* XXX Emscripten */
+typedef unsigned __dev_t; /* XXX Emscripten */
#endif
#endif
@@ -33,7 +33,7 @@ typedef unsigned __gid_t; /* XXX Emscripten */
#endif
#ifndef __off64_t_defined
-__extension__ typedef long long _off64_t;
+__extension__ typedef unsigned _off64_t; /* XXX Emscripten */
#endif
/*
diff --git a/tests/bullet/output2.txt b/tests/bullet/output2.txt
new file mode 100644
index 00000000..d74a1031
--- /dev/null
+++ b/tests/bullet/output2.txt
@@ -0,0 +1,270 @@
+world pos = 2.00,10.00,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,9.99,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,9.98,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,9.97,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,9.96,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,9.94,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,9.92,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,9.90,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,9.88,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,9.85,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,9.82,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,9.78,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,9.75,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,9.71,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,9.67,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,9.62,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,9.57,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,9.52,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,9.47,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,9.42,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,9.36,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,9.30,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,9.23,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,9.17,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,9.10,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,9.02,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,8.95,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,8.87,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,8.79,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,8.71,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,8.62,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,8.53,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,8.44,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,8.35,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,8.25,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,8.15,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,8.05,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,7.94,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,7.83,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,7.72,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,7.61,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,7.49,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,7.37,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,7.25,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,7.13,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,7.00,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,6.87,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,6.73,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,6.60,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,6.46,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,6.32,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,6.17,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,6.03,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,5.88,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,5.72,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,5.57,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,5.41,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,5.25,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,5.08,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,4.92,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,4.75,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,4.58,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,4.40,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,4.22,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,4.04,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,3.86,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,3.67,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,3.48,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,3.29,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,3.10,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,2.90,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,2.70,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,2.50,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,2.29,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,2.08,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,1.87,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,1.66,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,1.44,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,1.22,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,1.00,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,0.77,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,0.55,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,0.32,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,0.08,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,-0.15,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,-0.39,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,-0.63,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,-0.88,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,-1.13,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,-1.38,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,-1.63,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,-1.88,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,-2.14,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,-2.40,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,-2.67,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,-2.93,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,-3.20,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,-3.48,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,-3.75,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,-4.03,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,-4.31,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,-4.59,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,-4.88,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,-5.17,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,-5.13,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,-5.10,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,-5.08,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,-5.05,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,-5.03,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,-5.01,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,-4.99,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,-4.98,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,-4.97,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,-4.96,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,-4.95,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,-4.95,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,-4.95,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,-4.95,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,-4.96,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,-4.97,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,-4.98,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,-4.99,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,-5.00,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,-5.00,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,-5.00,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,-5.00,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,-5.00,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,-5.00,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,-5.00,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,-5.00,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,-5.00,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,-5.00,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,-5.00,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,-5.00,0.00
+world pos = 0.00,-56.00,0.00
+world pos = 2.00,-5.00,0.00
+world pos = 0.00,-56.00,0.00
diff --git a/tests/cases/aliasbitcast2.ll b/tests/cases/aliasbitcast2.ll
new file mode 100644
index 00000000..8537e272
--- /dev/null
+++ b/tests/cases/aliasbitcast2.ll
@@ -0,0 +1,27 @@
+; ModuleID = '/tmp/emscripten/tmp/src.cpp.o'
+target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32-n8:16:32"
+target triple = "i386-pc-linux-gnu"
+
+@.str = private constant [14 x i8] c"hello, world!\00", align 1 ; [#uses=1]
+
+@othername = alias bitcast (void ()* @original to void (i32)*) ; [#uses=1]
+
+; [#uses=2]
+define void @original() {
+entry:
+ %0 = call i32 bitcast (i32 (i8*)* @puts to i32 (i32*)*)(i8* getelementptr inbounds ([14 x i8]* @.str, i32 0, i32 0)) ; [#uses=0]
+ br label %return
+
+return: ; preds = %entry
+ ret void
+}
+
+; [#uses=1]
+declare i32 @puts(i8*)
+
+; [#uses=0]
+define i32 @main() {
+entry:
+ call void @othername(i32 5)
+ ret i32 0
+}
diff --git a/tests/cases/aliasbitcast3.ll b/tests/cases/aliasbitcast3.ll
new file mode 100644
index 00000000..4ff969e3
--- /dev/null
+++ b/tests/cases/aliasbitcast3.ll
@@ -0,0 +1,29 @@
+; ModuleID = '/tmp/emscripten/tmp/src.cpp.o'
+target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32-n8:16:32"
+target triple = "i386-pc-linux-gnu"
+
+@.str = private constant [14 x i8] c"hello, world!\00", align 1 ; [#uses=1]
+
+@thriceremoved = alias bitcast (void ()* @twiceremoved to void (i32)*) ; [#uses=1]
+@othername = alias bitcast (void ()* @original to void (i32)*) ; [#uses=1]
+@twiceremoved = alias bitcast (void (i32)* @othername to void ()*) ; [#uses=1]
+
+; [#uses=2]
+define void @original() {
+entry:
+ %0 = call i32 bitcast (i32 (i8*)* @puts to i32 (i32*)*)(i8* getelementptr inbounds ([14 x i8]* @.str, i32 0, i32 0)) ; [#uses=0]
+ br label %return
+
+return: ; preds = %entry
+ ret void
+}
+
+; [#uses=1]
+declare i32 @puts(i8*)
+
+; [#uses=0]
+define i32 @main() {
+entry:
+ call void @thriceremoved()
+ ret i32 0
+}
diff --git a/tests/cases/i64toi8star.ll b/tests/cases/i64toi8star.ll
new file mode 100644
index 00000000..53a31d02
--- /dev/null
+++ b/tests/cases/i64toi8star.ll
@@ -0,0 +1,32 @@
+; ModuleID = '/tmp/emscripten/tmp/src.cpp.o'
+target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32-n8:16:32"
+target triple = "i386-pc-linux-gnu"
+
+@.str = private constant [14 x i8] c"hello, world!\00", align 1 ; [#uses=1]
+@.str2 = private unnamed_addr constant [9 x i8] c"*%d...*\0A\00", align 1 ; [#uses=1 type=[9 x i8]*]
+
+; [#uses=1]
+declare i32 @puts(i8*)
+
+declare i32 @printf(i8* nocapture, ...) nounwind
+
+define i32 @PyLong_FromVoidPtr(i8* %p) nounwind {
+entry:
+ %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([9 x i8]* @.str2, i32 0, i32 0), i8* %p) ; [#uses=0]
+ br label %return
+
+return: ; preds = %entry
+ ret i32 0
+}
+
+; [#uses=0]
+define i32 @main() {
+entry:
+ %retval = alloca i32 ; [#uses=2]
+ %0 = alloca i32 ; [#uses=2]
+ %"alloca point" = bitcast i32 0 to i32 ; [#uses=0]
+ %5 = call i32 @PyLong_FromVoidPtr(i8* null) nounwind ; [#uses=0]
+ %13 = call i32 @PyLong_FromVoidPtr(i8* inttoptr (i64 1 to i8*)) nounwind ; [#uses=0]
+ %0 = call i32 bitcast (i32 (i8*)* @puts to i32 (i32*)*)(i8* getelementptr inbounds ([14 x i8]* @.str, i32 0, i32 0)) ; [#uses=0]
+ ret i32 0
+}
diff --git a/tests/cases/i64toi8star.txt b/tests/cases/i64toi8star.txt
new file mode 100644
index 00000000..286b2451
--- /dev/null
+++ b/tests/cases/i64toi8star.txt
@@ -0,0 +1,3 @@
+*0...*
+*1...*
+hello, world!
diff --git a/tests/gl/sdl_ogl.c b/tests/gl/sdl_ogl.c
index 829213d8..6f81c7ff 100644
--- a/tests/gl/sdl_ogl.c
+++ b/tests/gl/sdl_ogl.c
@@ -11,12 +11,24 @@
/*
Combined with opengl.org tutorial #2,
http://www.opengl.org/wiki/Tutorial2:_VAOs,_VBOs,_Vertex_and_Fragment_Shaders_%28C_/_SDL%29
+
+ Build with
+
+ gcc sdl_ogl.c -lSDL -lGL
+
+ g++ will fail!
+
+ Or, to JS:
+
+ ~/Dev/emscripten/tools/emmaken.py sdl_ogl.c -o sdl_ogl.o
+ ~/Dev/emscripten/emscripten.py sdl_ogl.o > sdl_ogl.js
*/
#include "SDL/SDL.h"
#include "SDL/SDL_opengl.h"
#include <stdio.h>
+#include <stdlib.h>
char* filetobuf(char *file)
{
diff --git a/tests/openjpeg/opj_config.h b/tests/openjpeg/opj_config.h
new file mode 100644
index 00000000..1996a415
--- /dev/null
+++ b/tests/openjpeg/opj_config.h
@@ -0,0 +1,22 @@
+/* create config.h for CMake */
+#define PACKAGE_VERSION "1.4.0"
+#
+#define HAVE_INTTYPES_H 1
+#define HAVE_MEMORY_H 1
+#define HAVE_STDINT_H 1
+#define HAVE_STDLIB_H 1
+#define HAVE_STRINGS_H 1
+#define HAVE_STRING_H 1
+#define HAVE_SYS_STAT_H 1
+#define HAVE_SYS_TYPES_H 1
+#define HAVE_UNISTD_H 1
+#define HAVE_LIBPNG 1
+#define HAVE_PNG_H 1
+#define HAVE_LIBTIFF 1
+#define HAVE_TIFF_H 1
+#
+/* #undef HAVE_LIBLCMS1 */
+/* #undef HAVE_LIBLCMS2 */
+/* #undef HAVE_LCMS1_H */
+/* #undef HAVE_LCMS2_H */
+#
diff --git a/tests/parseInt/output.txt b/tests/parseInt/output.txt
index f487db74..e345e2ac 100644
--- a/tests/parseInt/output.txt
+++ b/tests/parseInt/output.txt
@@ -1,6 +1,6 @@
strtol("-9223372036854775809") = -2147483648
ERR 34
-strtoll("-9223372036854775809") = -9223372036854776000
+strtoll("-9223372036854775809") = 9223372036854776000
ERR 34
strtoul("-9223372036854775809") = 4294967295
ERR 34
@@ -8,7 +8,7 @@ strtoull("-9223372036854775809") = 9223372036854774000
strtol("-9223372036854775808") = -2147483648
ERR 34
-strtoll("-9223372036854775808") = -9223372036854776000
+strtoll("-9223372036854775808") = 9223372036854776000
ERR 34
strtoul("-9223372036854775808") = 4294967295
ERR 34
@@ -16,7 +16,7 @@ strtoull("-9223372036854775808") = 9223372036854774000
strtol("-9223372036854775807") = -2147483648
ERR 34
-strtoll("-9223372036854775807") = -9223372036854776000
+strtoll("-9223372036854775807") = 9223372036854776000
ERR 34
strtoul("-9223372036854775807") = 4294967295
ERR 34
@@ -24,7 +24,7 @@ strtoull("-9223372036854775807") = 9223372036854774000
strtol("-2147483649") = -2147483648
ERR 34
-strtoll("-2147483649") = -2147483649
+strtoll("-2147483649") = -2147483648
strtoul("-2147483649") = 2147483647
strtoull("-2147483649") = 18446744071562068000
@@ -34,19 +34,19 @@ strtoul("-2147483648") = 2147483648
strtoull("-2147483648") = 18446744071562068000
strtol("-2147483647") = -2147483647
-strtoll("-2147483647") = -2147483647
+strtoll("-2147483647") = -2147483648
strtoul("-2147483647") = 2147483649
strtoull("-2147483647") = 18446744071562068000
strtol("-5") = -5
-strtoll("-5") = -5
+strtoll("-5") = 0
strtoul("-5") = 4294967291
-strtoull("-5") = 18446744073709552000
+strtoull("-5") = 18446744069414584000
strtol("-1") = -1
-strtoll("-1") = -1
+strtoll("-1") = 0
strtoul("-1") = 4294967295
-strtoull("-1") = 18446744073709552000
+strtoull("-1") = 18446744069414584000
strtol("0") = 0
strtoll("0") = 0
@@ -104,7 +104,7 @@ strtoll("18446744073709551614") = 9223372036854776000
ERR 34
strtoul("18446744073709551614") = 4294967295
ERR 34
-strtoull("18446744073709551614") = 18446744073709552000
+strtoull("18446744073709551614") = 18446744069414584000
strtol("18446744073709551615") = 2147483647
ERR 34
@@ -112,7 +112,7 @@ strtoll("18446744073709551615") = 9223372036854776000
ERR 34
strtoul("18446744073709551615") = 4294967295
ERR 34
-strtoull("18446744073709551615") = 18446744073709552000
+strtoull("18446744073709551615") = 18446744069414584000
strtol("18446744073709551616") = 2147483647
ERR 34
@@ -120,7 +120,7 @@ strtoll("18446744073709551616") = 9223372036854776000
ERR 34
strtoul("18446744073709551616") = 4294967295
ERR 34
-strtoull("18446744073709551616") = 18446744073709552000
+strtoull("18446744073709551616") = 18446744069414584000
strtol("0x12", 0, 0) = 18
strtol("0x12", 0, 10) = 0
diff --git a/tests/printf/output_i64_1.txt b/tests/printf/output_i64_1.txt
new file mode 100644
index 00000000..775f3f8d
--- /dev/null
+++ b/tests/printf/output_i64_1.txt
@@ -0,0 +1,8278 @@
+ab1.23cd
+n=7
+
+Characters: a A
+Decimals: 1977 650000 12 4
+Preceding with blanks: 1977
+Preceding with zeros: 0000001977
+Some different radixes: 100 64 144 0x64 0144
+floats: 3.14 +3e+00 3.141600E+00
+Width trick: 10
+A string %
+Null string: (null)
+Null pointer: (nil)
+inf
+INF
+-inf
+-INF
+nan
+NAN
+ nan
+nan
+ nan
+nan
+ inf
+-inf
+in%3.5valid
+123
+456
+0
+0
+0.0
+0.00
+0.00000
+1
+1
+1.0
+1.00
+1.00000
+1
+12
+123
+1234
+12345
+123456
+1.23457e+06
+1.23457e+07
+1.23457e+08
+1.23457e+09
+1.23457e+10
+1.23457e+11
+1.23457e+12
+1.23457e+13
+1.23457e+14
+1.23457e+15
+1.23457e+16
+1.23457e+17
+1.23457e+26
+1.12346
+12.1235
+123.123
+1234.12
+12345.1
+123456
+1.23457e+06
+1.23457e+07
+1.23457e+17
+ 1
+ 12
+ 123
+ 1234
+ 12345
+1.2346e+05
+1.2346e+06
+1.2346e+07
+1.2346e+08
+1.2346e+09
+1.2346e+10
+1.2346e+11
+1.2346e+12
+1.2346e+13
+1.2346e+14
+1.2346e+15
+1.2346e+16
+1.2346e+17
+1.2346e+26
+ 1.1235
+ 12.123
+ 123.12
+ 1234.1
+ 12345
+1.2346e+05
+1.2346e+06
+1.2346e+07
+1.2346e+17
+1.
+1.e+01
+1.e+02
+1.e+03
+1.e+04
+1.e+05
+1.e+06
+1.e+07
+1.e+08
+1.e+09
+1.e+10
+1.e+11
+1.e+12
+1.e+13
+1.e+14
+1.e+15
+1.e+16
+1.e+17
+1.e+26
+1.
+1.e+01
+1.e+02
+1.e+03
+1.e+04
+1.e+05
+1.e+06
+1.e+07
+1.e+17
+1e-10
+1.2e-09
+1.23e-08
+1.234e-07
+1.2345e-06
+1.23456e-05
+0.000123457
+0.00123457
+0.0123457
+ 1e-10
+ 1.2e-09
+ 1.23e-08
+ 1.234e-07
+1.2345e-06
+1.2346e-05
+0.00012346
+ 0.0012346
+ 0.012346
+1.e-10
+1.e-09
+1.e-08
+1.e-07
+1.e-06
+1.e-05
+0.0001
+0.001
+0
+0.123
+0.123457
+ 0
+ 0.123
+ 0.12346
+0.
+0.1
+0.1
+
+%+d : +8127534
+%+.d : +8127534
+%+.0d : +8127534
+%+.1d : +8127534
+%+.2d : +8127534
+%+.5d : +8127534
+%+.10d : +0008127534
+%+.30d : +000000000000000000000008127534
+%+0d : +8127534
+%+1d : +8127534
+%+1.d : +8127534
+%+1.0d : +8127534
+%+1.1d : +8127534
+%+1.2d : +8127534
+%+1.5d : +8127534
+%+1.10d : +0008127534
+%+1.30d : +000000000000000000000008127534
+%+2d : +8127534
+%+2.d : +8127534
+%+2.0d : +8127534
+%+2.1d : +8127534
+%+2.2d : +8127534
+%+2.5d : +8127534
+%+2.10d : +0008127534
+%+2.30d : +000000000000000000000008127534
+%+5d : +8127534
+%+5.d : +8127534
+%+5.0d : +8127534
+%+5.1d : +8127534
+%+5.2d : +8127534
+%+5.5d : +8127534
+%+5.10d : +0008127534
+%+5.30d : +000000000000000000000008127534
+%+10d : +8127534
+%+10.d : +8127534
+%+10.0d : +8127534
+%+10.1d : +8127534
+%+10.2d : +8127534
+%+10.5d : +8127534
+%+10.10d : +0008127534
+%+10.30d : +000000000000000000000008127534
+%+30d : +8127534
+%+30.d : +8127534
+%+30.0d : +8127534
+%+30.1d : +8127534
+%+30.2d : +8127534
+%+30.5d : +8127534
+%+30.10d : +0008127534
+%+30.30d : +000000000000000000000008127534
+%-d : 8127534
+%-.d : 8127534
+%-.0d : 8127534
+%-.1d : 8127534
+%-.2d : 8127534
+%-.5d : 8127534
+%-.10d : 0008127534
+%-.30d : 000000000000000000000008127534
+%-1d : 8127534
+%-1.d : 8127534
+%-1.0d : 8127534
+%-1.1d : 8127534
+%-1.2d : 8127534
+%-1.5d : 8127534
+%-1.10d : 0008127534
+%-1.30d : 000000000000000000000008127534
+%-2d : 8127534
+%-2.d : 8127534
+%-2.0d : 8127534
+%-2.1d : 8127534
+%-2.2d : 8127534
+%-2.5d : 8127534
+%-2.10d : 0008127534
+%-2.30d : 000000000000000000000008127534
+%-5d : 8127534
+%-5.d : 8127534
+%-5.0d : 8127534
+%-5.1d : 8127534
+%-5.2d : 8127534
+%-5.5d : 8127534
+%-5.10d : 0008127534
+%-5.30d : 000000000000000000000008127534
+%-10d : 8127534
+%-10.d : 8127534
+%-10.0d : 8127534
+%-10.1d : 8127534
+%-10.2d : 8127534
+%-10.5d : 8127534
+%-10.10d : 0008127534
+%-10.30d : 000000000000000000000008127534
+%-30d : 8127534
+%-30.d : 8127534
+%-30.0d : 8127534
+%-30.1d : 8127534
+%-30.2d : 8127534
+%-30.5d : 8127534
+%-30.10d : 0008127534
+%-30.30d : 000000000000000000000008127534
+%0d : 8127534
+%01d : 8127534
+%02d : 8127534
+%05d : 8127534
+%010d : 0008127534
+%030d : 000000000000000000000008127534
+%-+d : +8127534
+%-+.d : +8127534
+%-+.0d : +8127534
+%-+.1d : +8127534
+%-+.2d : +8127534
+%-+.5d : +8127534
+%-+.10d : +0008127534
+%-+.30d : +000000000000000000000008127534
+%-+1d : +8127534
+%-+1.d : +8127534
+%-+1.0d : +8127534
+%-+1.1d : +8127534
+%-+1.2d : +8127534
+%-+1.5d : +8127534
+%-+1.10d : +0008127534
+%-+1.30d : +000000000000000000000008127534
+%-+2d : +8127534
+%-+2.d : +8127534
+%-+2.0d : +8127534
+%-+2.1d : +8127534
+%-+2.2d : +8127534
+%-+2.5d : +8127534
+%-+2.10d : +0008127534
+%-+2.30d : +000000000000000000000008127534
+%-+5d : +8127534
+%-+5.d : +8127534
+%-+5.0d : +8127534
+%-+5.1d : +8127534
+%-+5.2d : +8127534
+%-+5.5d : +8127534
+%-+5.10d : +0008127534
+%-+5.30d : +000000000000000000000008127534
+%-+10d : +8127534
+%-+10.d : +8127534
+%-+10.0d : +8127534
+%-+10.1d : +8127534
+%-+10.2d : +8127534
+%-+10.5d : +8127534
+%-+10.10d : +0008127534
+%-+10.30d : +000000000000000000000008127534
+%-+30d : +8127534
+%-+30.d : +8127534
+%-+30.0d : +8127534
+%-+30.1d : +8127534
+%-+30.2d : +8127534
+%-+30.5d : +8127534
+%-+30.10d : +0008127534
+%-+30.30d : +000000000000000000000008127534
+%+0d : +8127534
+%+01d : +8127534
+%+02d : +8127534
+%+05d : +8127534
+%+010d : +008127534
+%+030d : +00000000000000000000008127534
+%+-d : +8127534
+%+-.d : +8127534
+%+-.0d : +8127534
+%+-.1d : +8127534
+%+-.2d : +8127534
+%+-.5d : +8127534
+%+-.10d : +0008127534
+%+-.30d : +000000000000000000000008127534
+%+-1d : +8127534
+%+-1.d : +8127534
+%+-1.0d : +8127534
+%+-1.1d : +8127534
+%+-1.2d : +8127534
+%+-1.5d : +8127534
+%+-1.10d : +0008127534
+%+-1.30d : +000000000000000000000008127534
+%+-2d : +8127534
+%+-2.d : +8127534
+%+-2.0d : +8127534
+%+-2.1d : +8127534
+%+-2.2d : +8127534
+%+-2.5d : +8127534
+%+-2.10d : +0008127534
+%+-2.30d : +000000000000000000000008127534
+%+-5d : +8127534
+%+-5.d : +8127534
+%+-5.0d : +8127534
+%+-5.1d : +8127534
+%+-5.2d : +8127534
+%+-5.5d : +8127534
+%+-5.10d : +0008127534
+%+-5.30d : +000000000000000000000008127534
+%+-10d : +8127534
+%+-10.d : +8127534
+%+-10.0d : +8127534
+%+-10.1d : +8127534
+%+-10.2d : +8127534
+%+-10.5d : +8127534
+%+-10.10d : +0008127534
+%+-10.30d : +000000000000000000000008127534
+%+-30d : +8127534
+%+-30.d : +8127534
+%+-30.0d : +8127534
+%+-30.1d : +8127534
+%+-30.2d : +8127534
+%+-30.5d : +8127534
+%+-30.10d : +0008127534
+%+-30.30d : +000000000000000000000008127534
+%+0d : +8127534
+%+01d : +8127534
+%+02d : +8127534
+%+05d : +8127534
+%+010d : +008127534
+%+030d : +00000000000000000000008127534
+%+i : +8127534
+%+.i : +8127534
+%+.0i : +8127534
+%+.1i : +8127534
+%+.2i : +8127534
+%+.5i : +8127534
+%+.10i : +0008127534
+%+.30i : +000000000000000000000008127534
+%+0i : +8127534
+%+1i : +8127534
+%+1.i : +8127534
+%+1.0i : +8127534
+%+1.1i : +8127534
+%+1.2i : +8127534
+%+1.5i : +8127534
+%+1.10i : +0008127534
+%+1.30i : +000000000000000000000008127534
+%+2i : +8127534
+%+2.i : +8127534
+%+2.0i : +8127534
+%+2.1i : +8127534
+%+2.2i : +8127534
+%+2.5i : +8127534
+%+2.10i : +0008127534
+%+2.30i : +000000000000000000000008127534
+%+5i : +8127534
+%+5.i : +8127534
+%+5.0i : +8127534
+%+5.1i : +8127534
+%+5.2i : +8127534
+%+5.5i : +8127534
+%+5.10i : +0008127534
+%+5.30i : +000000000000000000000008127534
+%+10i : +8127534
+%+10.i : +8127534
+%+10.0i : +8127534
+%+10.1i : +8127534
+%+10.2i : +8127534
+%+10.5i : +8127534
+%+10.10i : +0008127534
+%+10.30i : +000000000000000000000008127534
+%+30i : +8127534
+%+30.i : +8127534
+%+30.0i : +8127534
+%+30.1i : +8127534
+%+30.2i : +8127534
+%+30.5i : +8127534
+%+30.10i : +0008127534
+%+30.30i : +000000000000000000000008127534
+%-i : 8127534
+%-.i : 8127534
+%-.0i : 8127534
+%-.1i : 8127534
+%-.2i : 8127534
+%-.5i : 8127534
+%-.10i : 0008127534
+%-.30i : 000000000000000000000008127534
+%-1i : 8127534
+%-1.i : 8127534
+%-1.0i : 8127534
+%-1.1i : 8127534
+%-1.2i : 8127534
+%-1.5i : 8127534
+%-1.10i : 0008127534
+%-1.30i : 000000000000000000000008127534
+%-2i : 8127534
+%-2.i : 8127534
+%-2.0i : 8127534
+%-2.1i : 8127534
+%-2.2i : 8127534
+%-2.5i : 8127534
+%-2.10i : 0008127534
+%-2.30i : 000000000000000000000008127534
+%-5i : 8127534
+%-5.i : 8127534
+%-5.0i : 8127534
+%-5.1i : 8127534
+%-5.2i : 8127534
+%-5.5i : 8127534
+%-5.10i : 0008127534
+%-5.30i : 000000000000000000000008127534
+%-10i : 8127534
+%-10.i : 8127534
+%-10.0i : 8127534
+%-10.1i : 8127534
+%-10.2i : 8127534
+%-10.5i : 8127534
+%-10.10i : 0008127534
+%-10.30i : 000000000000000000000008127534
+%-30i : 8127534
+%-30.i : 8127534
+%-30.0i : 8127534
+%-30.1i : 8127534
+%-30.2i : 8127534
+%-30.5i : 8127534
+%-30.10i : 0008127534
+%-30.30i : 000000000000000000000008127534
+%0i : 8127534
+%01i : 8127534
+%02i : 8127534
+%05i : 8127534
+%010i : 0008127534
+%030i : 000000000000000000000008127534
+%-+i : +8127534
+%-+.i : +8127534
+%-+.0i : +8127534
+%-+.1i : +8127534
+%-+.2i : +8127534
+%-+.5i : +8127534
+%-+.10i : +0008127534
+%-+.30i : +000000000000000000000008127534
+%-+1i : +8127534
+%-+1.i : +8127534
+%-+1.0i : +8127534
+%-+1.1i : +8127534
+%-+1.2i : +8127534
+%-+1.5i : +8127534
+%-+1.10i : +0008127534
+%-+1.30i : +000000000000000000000008127534
+%-+2i : +8127534
+%-+2.i : +8127534
+%-+2.0i : +8127534
+%-+2.1i : +8127534
+%-+2.2i : +8127534
+%-+2.5i : +8127534
+%-+2.10i : +0008127534
+%-+2.30i : +000000000000000000000008127534
+%-+5i : +8127534
+%-+5.i : +8127534
+%-+5.0i : +8127534
+%-+5.1i : +8127534
+%-+5.2i : +8127534
+%-+5.5i : +8127534
+%-+5.10i : +0008127534
+%-+5.30i : +000000000000000000000008127534
+%-+10i : +8127534
+%-+10.i : +8127534
+%-+10.0i : +8127534
+%-+10.1i : +8127534
+%-+10.2i : +8127534
+%-+10.5i : +8127534
+%-+10.10i : +0008127534
+%-+10.30i : +000000000000000000000008127534
+%-+30i : +8127534
+%-+30.i : +8127534
+%-+30.0i : +8127534
+%-+30.1i : +8127534
+%-+30.2i : +8127534
+%-+30.5i : +8127534
+%-+30.10i : +0008127534
+%-+30.30i : +000000000000000000000008127534
+%+0i : +8127534
+%+01i : +8127534
+%+02i : +8127534
+%+05i : +8127534
+%+010i : +008127534
+%+030i : +00000000000000000000008127534
+%+-i : +8127534
+%+-.i : +8127534
+%+-.0i : +8127534
+%+-.1i : +8127534
+%+-.2i : +8127534
+%+-.5i : +8127534
+%+-.10i : +0008127534
+%+-.30i : +000000000000000000000008127534
+%+-1i : +8127534
+%+-1.i : +8127534
+%+-1.0i : +8127534
+%+-1.1i : +8127534
+%+-1.2i : +8127534
+%+-1.5i : +8127534
+%+-1.10i : +0008127534
+%+-1.30i : +000000000000000000000008127534
+%+-2i : +8127534
+%+-2.i : +8127534
+%+-2.0i : +8127534
+%+-2.1i : +8127534
+%+-2.2i : +8127534
+%+-2.5i : +8127534
+%+-2.10i : +0008127534
+%+-2.30i : +000000000000000000000008127534
+%+-5i : +8127534
+%+-5.i : +8127534
+%+-5.0i : +8127534
+%+-5.1i : +8127534
+%+-5.2i : +8127534
+%+-5.5i : +8127534
+%+-5.10i : +0008127534
+%+-5.30i : +000000000000000000000008127534
+%+-10i : +8127534
+%+-10.i : +8127534
+%+-10.0i : +8127534
+%+-10.1i : +8127534
+%+-10.2i : +8127534
+%+-10.5i : +8127534
+%+-10.10i : +0008127534
+%+-10.30i : +000000000000000000000008127534
+%+-30i : +8127534
+%+-30.i : +8127534
+%+-30.0i : +8127534
+%+-30.1i : +8127534
+%+-30.2i : +8127534
+%+-30.5i : +8127534
+%+-30.10i : +0008127534
+%+-30.30i : +000000000000000000000008127534
+%+0i : +8127534
+%+01i : +8127534
+%+02i : +8127534
+%+05i : +8127534
+%+010i : +008127534
+%+030i : +00000000000000000000008127534
+%-u : 8127534
+%-.u : 8127534
+%-.0u : 8127534
+%-.1u : 8127534
+%-.2u : 8127534
+%-.5u : 8127534
+%-.10u : 0008127534
+%-.30u : 000000000000000000000008127534
+%-1u : 8127534
+%-1.u : 8127534
+%-1.0u : 8127534
+%-1.1u : 8127534
+%-1.2u : 8127534
+%-1.5u : 8127534
+%-1.10u : 0008127534
+%-1.30u : 000000000000000000000008127534
+%-2u : 8127534
+%-2.u : 8127534
+%-2.0u : 8127534
+%-2.1u : 8127534
+%-2.2u : 8127534
+%-2.5u : 8127534
+%-2.10u : 0008127534
+%-2.30u : 000000000000000000000008127534
+%-5u : 8127534
+%-5.u : 8127534
+%-5.0u : 8127534
+%-5.1u : 8127534
+%-5.2u : 8127534
+%-5.5u : 8127534
+%-5.10u : 0008127534
+%-5.30u : 000000000000000000000008127534
+%-10u : 8127534
+%-10.u : 8127534
+%-10.0u : 8127534
+%-10.1u : 8127534
+%-10.2u : 8127534
+%-10.5u : 8127534
+%-10.10u : 0008127534
+%-10.30u : 000000000000000000000008127534
+%-30u : 8127534
+%-30.u : 8127534
+%-30.0u : 8127534
+%-30.1u : 8127534
+%-30.2u : 8127534
+%-30.5u : 8127534
+%-30.10u : 0008127534
+%-30.30u : 000000000000000000000008127534
+%0u : 8127534
+%01u : 8127534
+%02u : 8127534
+%05u : 8127534
+%010u : 0008127534
+%030u : 000000000000000000000008127534
+%+ld : +8127534
+%+.ld : +8127534
+%+.0ld : +8127534
+%+.1ld : +8127534
+%+.2ld : +8127534
+%+.5ld : +8127534
+%+.10ld : +0008127534
+%+.30ld : +000000000000000000000008127534
+%+0ld : +8127534
+%+1ld : +8127534
+%+1.ld : +8127534
+%+1.0ld : +8127534
+%+1.1ld : +8127534
+%+1.2ld : +8127534
+%+1.5ld : +8127534
+%+1.10ld : +0008127534
+%+1.30ld : +000000000000000000000008127534
+%+2ld : +8127534
+%+2.ld : +8127534
+%+2.0ld : +8127534
+%+2.1ld : +8127534
+%+2.2ld : +8127534
+%+2.5ld : +8127534
+%+2.10ld : +0008127534
+%+2.30ld : +000000000000000000000008127534
+%+5ld : +8127534
+%+5.ld : +8127534
+%+5.0ld : +8127534
+%+5.1ld : +8127534
+%+5.2ld : +8127534
+%+5.5ld : +8127534
+%+5.10ld : +0008127534
+%+5.30ld : +000000000000000000000008127534
+%+10ld : +8127534
+%+10.ld : +8127534
+%+10.0ld : +8127534
+%+10.1ld : +8127534
+%+10.2ld : +8127534
+%+10.5ld : +8127534
+%+10.10ld : +0008127534
+%+10.30ld : +000000000000000000000008127534
+%+30ld : +8127534
+%+30.ld : +8127534
+%+30.0ld : +8127534
+%+30.1ld : +8127534
+%+30.2ld : +8127534
+%+30.5ld : +8127534
+%+30.10ld : +0008127534
+%+30.30ld : +000000000000000000000008127534
+%-ld : 8127534
+%-.ld : 8127534
+%-.0ld : 8127534
+%-.1ld : 8127534
+%-.2ld : 8127534
+%-.5ld : 8127534
+%-.10ld : 0008127534
+%-.30ld : 000000000000000000000008127534
+%-1ld : 8127534
+%-1.ld : 8127534
+%-1.0ld : 8127534
+%-1.1ld : 8127534
+%-1.2ld : 8127534
+%-1.5ld : 8127534
+%-1.10ld : 0008127534
+%-1.30ld : 000000000000000000000008127534
+%-2ld : 8127534
+%-2.ld : 8127534
+%-2.0ld : 8127534
+%-2.1ld : 8127534
+%-2.2ld : 8127534
+%-2.5ld : 8127534
+%-2.10ld : 0008127534
+%-2.30ld : 000000000000000000000008127534
+%-5ld : 8127534
+%-5.ld : 8127534
+%-5.0ld : 8127534
+%-5.1ld : 8127534
+%-5.2ld : 8127534
+%-5.5ld : 8127534
+%-5.10ld : 0008127534
+%-5.30ld : 000000000000000000000008127534
+%-10ld : 8127534
+%-10.ld : 8127534
+%-10.0ld : 8127534
+%-10.1ld : 8127534
+%-10.2ld : 8127534
+%-10.5ld : 8127534
+%-10.10ld : 0008127534
+%-10.30ld : 000000000000000000000008127534
+%-30ld : 8127534
+%-30.ld : 8127534
+%-30.0ld : 8127534
+%-30.1ld : 8127534
+%-30.2ld : 8127534
+%-30.5ld : 8127534
+%-30.10ld : 0008127534
+%-30.30ld : 000000000000000000000008127534
+%0ld : 8127534
+%01ld : 8127534
+%02ld : 8127534
+%05ld : 8127534
+%010ld : 0008127534
+%030ld : 000000000000000000000008127534
+%-+ld : +8127534
+%-+.ld : +8127534
+%-+.0ld : +8127534
+%-+.1ld : +8127534
+%-+.2ld : +8127534
+%-+.5ld : +8127534
+%-+.10ld : +0008127534
+%-+.30ld : +000000000000000000000008127534
+%-+1ld : +8127534
+%-+1.ld : +8127534
+%-+1.0ld : +8127534
+%-+1.1ld : +8127534
+%-+1.2ld : +8127534
+%-+1.5ld : +8127534
+%-+1.10ld : +0008127534
+%-+1.30ld : +000000000000000000000008127534
+%-+2ld : +8127534
+%-+2.ld : +8127534
+%-+2.0ld : +8127534
+%-+2.1ld : +8127534
+%-+2.2ld : +8127534
+%-+2.5ld : +8127534
+%-+2.10ld : +0008127534
+%-+2.30ld : +000000000000000000000008127534
+%-+5ld : +8127534
+%-+5.ld : +8127534
+%-+5.0ld : +8127534
+%-+5.1ld : +8127534
+%-+5.2ld : +8127534
+%-+5.5ld : +8127534
+%-+5.10ld : +0008127534
+%-+5.30ld : +000000000000000000000008127534
+%-+10ld : +8127534
+%-+10.ld : +8127534
+%-+10.0ld : +8127534
+%-+10.1ld : +8127534
+%-+10.2ld : +8127534
+%-+10.5ld : +8127534
+%-+10.10ld : +0008127534
+%-+10.30ld : +000000000000000000000008127534
+%-+30ld : +8127534
+%-+30.ld : +8127534
+%-+30.0ld : +8127534
+%-+30.1ld : +8127534
+%-+30.2ld : +8127534
+%-+30.5ld : +8127534
+%-+30.10ld : +0008127534
+%-+30.30ld : +000000000000000000000008127534
+%+0ld : +8127534
+%+01ld : +8127534
+%+02ld : +8127534
+%+05ld : +8127534
+%+010ld : +008127534
+%+030ld : +00000000000000000000008127534
+%+-ld : +8127534
+%+-.ld : +8127534
+%+-.0ld : +8127534
+%+-.1ld : +8127534
+%+-.2ld : +8127534
+%+-.5ld : +8127534
+%+-.10ld : +0008127534
+%+-.30ld : +000000000000000000000008127534
+%+-1ld : +8127534
+%+-1.ld : +8127534
+%+-1.0ld : +8127534
+%+-1.1ld : +8127534
+%+-1.2ld : +8127534
+%+-1.5ld : +8127534
+%+-1.10ld : +0008127534
+%+-1.30ld : +000000000000000000000008127534
+%+-2ld : +8127534
+%+-2.ld : +8127534
+%+-2.0ld : +8127534
+%+-2.1ld : +8127534
+%+-2.2ld : +8127534
+%+-2.5ld : +8127534
+%+-2.10ld : +0008127534
+%+-2.30ld : +000000000000000000000008127534
+%+-5ld : +8127534
+%+-5.ld : +8127534
+%+-5.0ld : +8127534
+%+-5.1ld : +8127534
+%+-5.2ld : +8127534
+%+-5.5ld : +8127534
+%+-5.10ld : +0008127534
+%+-5.30ld : +000000000000000000000008127534
+%+-10ld : +8127534
+%+-10.ld : +8127534
+%+-10.0ld : +8127534
+%+-10.1ld : +8127534
+%+-10.2ld : +8127534
+%+-10.5ld : +8127534
+%+-10.10ld : +0008127534
+%+-10.30ld : +000000000000000000000008127534
+%+-30ld : +8127534
+%+-30.ld : +8127534
+%+-30.0ld : +8127534
+%+-30.1ld : +8127534
+%+-30.2ld : +8127534
+%+-30.5ld : +8127534
+%+-30.10ld : +0008127534
+%+-30.30ld : +000000000000000000000008127534
+%+0ld : +8127534
+%+01ld : +8127534
+%+02ld : +8127534
+%+05ld : +8127534
+%+010ld : +008127534
+%+030ld : +00000000000000000000008127534
+%+lld : +8127534
+%+.lld : +8127534
+%+.0lld : +8127534
+%+.1lld : +8127534
+%+.2lld : +8127534
+%+.5lld : +8127534
+%+.10lld : +0008127534
+%+.30lld : +000000000000000000000008127534
+%+0lld : +8127534
+%+1lld : +8127534
+%+1.lld : +8127534
+%+1.0lld : +8127534
+%+1.1lld : +8127534
+%+1.2lld : +8127534
+%+1.5lld : +8127534
+%+1.10lld : +0008127534
+%+1.30lld : +000000000000000000000008127534
+%+2lld : +8127534
+%+2.lld : +8127534
+%+2.0lld : +8127534
+%+2.1lld : +8127534
+%+2.2lld : +8127534
+%+2.5lld : +8127534
+%+2.10lld : +0008127534
+%+2.30lld : +000000000000000000000008127534
+%+5lld : +8127534
+%+5.lld : +8127534
+%+5.0lld : +8127534
+%+5.1lld : +8127534
+%+5.2lld : +8127534
+%+5.5lld : +8127534
+%+5.10lld : +0008127534
+%+5.30lld : +000000000000000000000008127534
+%+10lld : +8127534
+%+10.lld : +8127534
+%+10.0lld : +8127534
+%+10.1lld : +8127534
+%+10.2lld : +8127534
+%+10.5lld : +8127534
+%+10.10lld : +0008127534
+%+10.30lld : +000000000000000000000008127534
+%+30lld : +8127534
+%+30.lld : +8127534
+%+30.0lld : +8127534
+%+30.1lld : +8127534
+%+30.2lld : +8127534
+%+30.5lld : +8127534
+%+30.10lld : +0008127534
+%+30.30lld : +000000000000000000000008127534
+%-lld : 8127534
+%-.lld : 8127534
+%-.0lld : 8127534
+%-.1lld : 8127534
+%-.2lld : 8127534
+%-.5lld : 8127534
+%-.10lld : 0008127534
+%-.30lld : 000000000000000000000008127534
+%-1lld : 8127534
+%-1.lld : 8127534
+%-1.0lld : 8127534
+%-1.1lld : 8127534
+%-1.2lld : 8127534
+%-1.5lld : 8127534
+%-1.10lld : 0008127534
+%-1.30lld : 000000000000000000000008127534
+%-2lld : 8127534
+%-2.lld : 8127534
+%-2.0lld : 8127534
+%-2.1lld : 8127534
+%-2.2lld : 8127534
+%-2.5lld : 8127534
+%-2.10lld : 0008127534
+%-2.30lld : 000000000000000000000008127534
+%-5lld : 8127534
+%-5.lld : 8127534
+%-5.0lld : 8127534
+%-5.1lld : 8127534
+%-5.2lld : 8127534
+%-5.5lld : 8127534
+%-5.10lld : 0008127534
+%-5.30lld : 000000000000000000000008127534
+%-10lld : 8127534
+%-10.lld : 8127534
+%-10.0lld : 8127534
+%-10.1lld : 8127534
+%-10.2lld : 8127534
+%-10.5lld : 8127534
+%-10.10lld : 0008127534
+%-10.30lld : 000000000000000000000008127534
+%-30lld : 8127534
+%-30.lld : 8127534
+%-30.0lld : 8127534
+%-30.1lld : 8127534
+%-30.2lld : 8127534
+%-30.5lld : 8127534
+%-30.10lld : 0008127534
+%-30.30lld : 000000000000000000000008127534
+%0lld : 8127534
+%01lld : 8127534
+%02lld : 8127534
+%05lld : 8127534
+%010lld : 0008127534
+%030lld : 000000000000000000000008127534
+%-+lld : +8127534
+%-+.lld : +8127534
+%-+.0lld : +8127534
+%-+.1lld : +8127534
+%-+.2lld : +8127534
+%-+.5lld : +8127534
+%-+.10lld : +0008127534
+%-+.30lld : +000000000000000000000008127534
+%-+1lld : +8127534
+%-+1.lld : +8127534
+%-+1.0lld : +8127534
+%-+1.1lld : +8127534
+%-+1.2lld : +8127534
+%-+1.5lld : +8127534
+%-+1.10lld : +0008127534
+%-+1.30lld : +000000000000000000000008127534
+%-+2lld : +8127534
+%-+2.lld : +8127534
+%-+2.0lld : +8127534
+%-+2.1lld : +8127534
+%-+2.2lld : +8127534
+%-+2.5lld : +8127534
+%-+2.10lld : +0008127534
+%-+2.30lld : +000000000000000000000008127534
+%-+5lld : +8127534
+%-+5.lld : +8127534
+%-+5.0lld : +8127534
+%-+5.1lld : +8127534
+%-+5.2lld : +8127534
+%-+5.5lld : +8127534
+%-+5.10lld : +0008127534
+%-+5.30lld : +000000000000000000000008127534
+%-+10lld : +8127534
+%-+10.lld : +8127534
+%-+10.0lld : +8127534
+%-+10.1lld : +8127534
+%-+10.2lld : +8127534
+%-+10.5lld : +8127534
+%-+10.10lld : +0008127534
+%-+10.30lld : +000000000000000000000008127534
+%-+30lld : +8127534
+%-+30.lld : +8127534
+%-+30.0lld : +8127534
+%-+30.1lld : +8127534
+%-+30.2lld : +8127534
+%-+30.5lld : +8127534
+%-+30.10lld : +0008127534
+%-+30.30lld : +000000000000000000000008127534
+%+0lld : +8127534
+%+01lld : +8127534
+%+02lld : +8127534
+%+05lld : +8127534
+%+010lld : +008127534
+%+030lld : +00000000000000000000008127534
+%+-lld : +8127534
+%+-.lld : +8127534
+%+-.0lld : +8127534
+%+-.1lld : +8127534
+%+-.2lld : +8127534
+%+-.5lld : +8127534
+%+-.10lld : +0008127534
+%+-.30lld : +000000000000000000000008127534
+%+-1lld : +8127534
+%+-1.lld : +8127534
+%+-1.0lld : +8127534
+%+-1.1lld : +8127534
+%+-1.2lld : +8127534
+%+-1.5lld : +8127534
+%+-1.10lld : +0008127534
+%+-1.30lld : +000000000000000000000008127534
+%+-2lld : +8127534
+%+-2.lld : +8127534
+%+-2.0lld : +8127534
+%+-2.1lld : +8127534
+%+-2.2lld : +8127534
+%+-2.5lld : +8127534
+%+-2.10lld : +0008127534
+%+-2.30lld : +000000000000000000000008127534
+%+-5lld : +8127534
+%+-5.lld : +8127534
+%+-5.0lld : +8127534
+%+-5.1lld : +8127534
+%+-5.2lld : +8127534
+%+-5.5lld : +8127534
+%+-5.10lld : +0008127534
+%+-5.30lld : +000000000000000000000008127534
+%+-10lld : +8127534
+%+-10.lld : +8127534
+%+-10.0lld : +8127534
+%+-10.1lld : +8127534
+%+-10.2lld : +8127534
+%+-10.5lld : +8127534
+%+-10.10lld : +0008127534
+%+-10.30lld : +000000000000000000000008127534
+%+-30lld : +8127534
+%+-30.lld : +8127534
+%+-30.0lld : +8127534
+%+-30.1lld : +8127534
+%+-30.2lld : +8127534
+%+-30.5lld : +8127534
+%+-30.10lld : +0008127534
+%+-30.30lld : +000000000000000000000008127534
+%+0lld : +8127534
+%+01lld : +8127534
+%+02lld : +8127534
+%+05lld : +8127534
+%+010lld : +008127534
+%+030lld : +00000000000000000000008127534
+%+f : +8127.534180
+%+.f : +8128
+%+.0f : +8128
+%+.1f : +8127.5
+%+.2f : +8127.53
+%+.5f : +8127.53418
+%+.10f : +8127.5341796875
+%+.30f : +8127.534179687500000000000000000000
+%+0f : +8127.534180
+%+0.f : +8128
+%+0.0f : +8128
+%+0.1f : +8127.5
+%+0.2f : +8127.53
+%+0.5f : +8127.53418
+%+0.10f : +8127.5341796875
+%+0.30f : +8127.534179687500000000000000000000
+%+1f : +8127.534180
+%+1.f : +8128
+%+1.0f : +8128
+%+1.1f : +8127.5
+%+1.2f : +8127.53
+%+1.5f : +8127.53418
+%+1.10f : +8127.5341796875
+%+1.30f : +8127.534179687500000000000000000000
+%+2f : +8127.534180
+%+2.f : +8128
+%+2.0f : +8128
+%+2.1f : +8127.5
+%+2.2f : +8127.53
+%+2.5f : +8127.53418
+%+2.10f : +8127.5341796875
+%+2.30f : +8127.534179687500000000000000000000
+%+5f : +8127.534180
+%+5.f : +8128
+%+5.0f : +8128
+%+5.1f : +8127.5
+%+5.2f : +8127.53
+%+5.5f : +8127.53418
+%+5.10f : +8127.5341796875
+%+5.30f : +8127.534179687500000000000000000000
+%+10f : +8127.534180
+%+10.f : +8128
+%+10.0f : +8128
+%+10.1f : +8127.5
+%+10.2f : +8127.53
+%+10.5f : +8127.53418
+%+10.10f : +8127.5341796875
+%+10.30f : +8127.534179687500000000000000000000
+%+30f : +8127.534180
+%+30.f : +8128
+%+30.0f : +8128
+%+30.1f : +8127.5
+%+30.2f : +8127.53
+%+30.5f : +8127.53418
+%+30.10f : +8127.5341796875
+%+30.30f : +8127.534179687500000000000000000000
+%-f : 8127.534180
+%-.f : 8128
+%-.0f : 8128
+%-.1f : 8127.5
+%-.2f : 8127.53
+%-.5f : 8127.53418
+%-.10f : 8127.5341796875
+%-.30f : 8127.534179687500000000000000000000
+%-1f : 8127.534180
+%-1.f : 8128
+%-1.0f : 8128
+%-1.1f : 8127.5
+%-1.2f : 8127.53
+%-1.5f : 8127.53418
+%-1.10f : 8127.5341796875
+%-1.30f : 8127.534179687500000000000000000000
+%-2f : 8127.534180
+%-2.f : 8128
+%-2.0f : 8128
+%-2.1f : 8127.5
+%-2.2f : 8127.53
+%-2.5f : 8127.53418
+%-2.10f : 8127.5341796875
+%-2.30f : 8127.534179687500000000000000000000
+%-5f : 8127.534180
+%-5.f : 8128
+%-5.0f : 8128
+%-5.1f : 8127.5
+%-5.2f : 8127.53
+%-5.5f : 8127.53418
+%-5.10f : 8127.5341796875
+%-5.30f : 8127.534179687500000000000000000000
+%-10f : 8127.534180
+%-10.f : 8128
+%-10.0f : 8128
+%-10.1f : 8127.5
+%-10.2f : 8127.53
+%-10.5f : 8127.53418
+%-10.10f : 8127.5341796875
+%-10.30f : 8127.534179687500000000000000000000
+%-30f : 8127.534180
+%-30.f : 8128
+%-30.0f : 8128
+%-30.1f : 8127.5
+%-30.2f : 8127.53
+%-30.5f : 8127.53418
+%-30.10f : 8127.5341796875
+%-30.30f : 8127.534179687500000000000000000000
+%#f : 8127.534180
+%#.f : 8128.
+%#.0f : 8128.
+%#.1f : 8127.5
+%#.2f : 8127.53
+%#.5f : 8127.53418
+%#.10f : 8127.5341796875
+%#.30f : 8127.534179687500000000000000000000
+%#0f : 8127.534180
+%#0.f : 8128.
+%#0.0f : 8128.
+%#0.1f : 8127.5
+%#0.2f : 8127.53
+%#0.5f : 8127.53418
+%#0.10f : 8127.5341796875
+%#0.30f : 8127.534179687500000000000000000000
+%#1f : 8127.534180
+%#1.f : 8128.
+%#1.0f : 8128.
+%#1.1f : 8127.5
+%#1.2f : 8127.53
+%#1.5f : 8127.53418
+%#1.10f : 8127.5341796875
+%#1.30f : 8127.534179687500000000000000000000
+%#2f : 8127.534180
+%#2.f : 8128.
+%#2.0f : 8128.
+%#2.1f : 8127.5
+%#2.2f : 8127.53
+%#2.5f : 8127.53418
+%#2.10f : 8127.5341796875
+%#2.30f : 8127.534179687500000000000000000000
+%#5f : 8127.534180
+%#5.f : 8128.
+%#5.0f : 8128.
+%#5.1f : 8127.5
+%#5.2f : 8127.53
+%#5.5f : 8127.53418
+%#5.10f : 8127.5341796875
+%#5.30f : 8127.534179687500000000000000000000
+%#10f : 8127.534180
+%#10.f : 8128.
+%#10.0f : 8128.
+%#10.1f : 8127.5
+%#10.2f : 8127.53
+%#10.5f : 8127.53418
+%#10.10f : 8127.5341796875
+%#10.30f : 8127.534179687500000000000000000000
+%#30f : 8127.534180
+%#30.f : 8128.
+%#30.0f : 8128.
+%#30.1f : 8127.5
+%#30.2f : 8127.53
+%#30.5f : 8127.53418
+%#30.10f : 8127.5341796875
+%#30.30f : 8127.534179687500000000000000000000
+%0f : 8127.534180
+%0.f : 8128
+%0.0f : 8128
+%0.1f : 8127.5
+%0.2f : 8127.53
+%0.5f : 8127.53418
+%0.10f : 8127.5341796875
+%0.30f : 8127.534179687500000000000000000000
+%01f : 8127.534180
+%01.f : 8128
+%01.0f : 8128
+%01.1f : 8127.5
+%01.2f : 8127.53
+%01.5f : 8127.53418
+%01.10f : 8127.5341796875
+%01.30f : 8127.534179687500000000000000000000
+%02f : 8127.534180
+%02.f : 8128
+%02.0f : 8128
+%02.1f : 8127.5
+%02.2f : 8127.53
+%02.5f : 8127.53418
+%02.10f : 8127.5341796875
+%02.30f : 8127.534179687500000000000000000000
+%05f : 8127.534180
+%05.f : 08128
+%05.0f : 08128
+%05.1f : 8127.5
+%05.2f : 8127.53
+%05.5f : 8127.53418
+%05.10f : 8127.5341796875
+%05.30f : 8127.534179687500000000000000000000
+%010f : 8127.534180
+%010.f : 0000008128
+%010.0f : 0000008128
+%010.1f : 00008127.5
+%010.2f : 0008127.53
+%010.5f : 8127.53418
+%010.10f : 8127.5341796875
+%010.30f : 8127.534179687500000000000000000000
+%030f : 00000000000000000008127.534180
+%030.f : 000000000000000000000000008128
+%030.0f : 000000000000000000000000008128
+%030.1f : 0000000000000000000000008127.5
+%030.2f : 000000000000000000000008127.53
+%030.5f : 000000000000000000008127.53418
+%030.10f : 0000000000000008127.5341796875
+%030.30f : 8127.534179687500000000000000000000
+%-+f : +8127.534180
+%-+.f : +8128
+%-+.0f : +8128
+%-+.1f : +8127.5
+%-+.2f : +8127.53
+%-+.5f : +8127.53418
+%-+.10f : +8127.5341796875
+%-+.30f : +8127.534179687500000000000000000000
+%-+1f : +8127.534180
+%-+1.f : +8128
+%-+1.0f : +8128
+%-+1.1f : +8127.5
+%-+1.2f : +8127.53
+%-+1.5f : +8127.53418
+%-+1.10f : +8127.5341796875
+%-+1.30f : +8127.534179687500000000000000000000
+%-+2f : +8127.534180
+%-+2.f : +8128
+%-+2.0f : +8128
+%-+2.1f : +8127.5
+%-+2.2f : +8127.53
+%-+2.5f : +8127.53418
+%-+2.10f : +8127.5341796875
+%-+2.30f : +8127.534179687500000000000000000000
+%-+5f : +8127.534180
+%-+5.f : +8128
+%-+5.0f : +8128
+%-+5.1f : +8127.5
+%-+5.2f : +8127.53
+%-+5.5f : +8127.53418
+%-+5.10f : +8127.5341796875
+%-+5.30f : +8127.534179687500000000000000000000
+%-+10f : +8127.534180
+%-+10.f : +8128
+%-+10.0f : +8128
+%-+10.1f : +8127.5
+%-+10.2f : +8127.53
+%-+10.5f : +8127.53418
+%-+10.10f : +8127.5341796875
+%-+10.30f : +8127.534179687500000000000000000000
+%-+30f : +8127.534180
+%-+30.f : +8128
+%-+30.0f : +8128
+%-+30.1f : +8127.5
+%-+30.2f : +8127.53
+%-+30.5f : +8127.53418
+%-+30.10f : +8127.5341796875
+%-+30.30f : +8127.534179687500000000000000000000
+%#+f : +8127.534180
+%#+.f : +8128.
+%#+.0f : +8128.
+%#+.1f : +8127.5
+%#+.2f : +8127.53
+%#+.5f : +8127.53418
+%#+.10f : +8127.5341796875
+%#+.30f : +8127.534179687500000000000000000000
+%#+0f : +8127.534180
+%#+0.f : +8128.
+%#+0.0f : +8128.
+%#+0.1f : +8127.5
+%#+0.2f : +8127.53
+%#+0.5f : +8127.53418
+%#+0.10f : +8127.5341796875
+%#+0.30f : +8127.534179687500000000000000000000
+%#+1f : +8127.534180
+%#+1.f : +8128.
+%#+1.0f : +8128.
+%#+1.1f : +8127.5
+%#+1.2f : +8127.53
+%#+1.5f : +8127.53418
+%#+1.10f : +8127.5341796875
+%#+1.30f : +8127.534179687500000000000000000000
+%#+2f : +8127.534180
+%#+2.f : +8128.
+%#+2.0f : +8128.
+%#+2.1f : +8127.5
+%#+2.2f : +8127.53
+%#+2.5f : +8127.53418
+%#+2.10f : +8127.5341796875
+%#+2.30f : +8127.534179687500000000000000000000
+%#+5f : +8127.534180
+%#+5.f : +8128.
+%#+5.0f : +8128.
+%#+5.1f : +8127.5
+%#+5.2f : +8127.53
+%#+5.5f : +8127.53418
+%#+5.10f : +8127.5341796875
+%#+5.30f : +8127.534179687500000000000000000000
+%#+10f : +8127.534180
+%#+10.f : +8128.
+%#+10.0f : +8128.
+%#+10.1f : +8127.5
+%#+10.2f : +8127.53
+%#+10.5f : +8127.53418
+%#+10.10f : +8127.5341796875
+%#+10.30f : +8127.534179687500000000000000000000
+%#+30f : +8127.534180
+%#+30.f : +8128.
+%#+30.0f : +8128.
+%#+30.1f : +8127.5
+%#+30.2f : +8127.53
+%#+30.5f : +8127.53418
+%#+30.10f : +8127.5341796875
+%#+30.30f : +8127.534179687500000000000000000000
+%+0f : +8127.534180
+%+0.f : +8128
+%+0.0f : +8128
+%+0.1f : +8127.5
+%+0.2f : +8127.53
+%+0.5f : +8127.53418
+%+0.10f : +8127.5341796875
+%+0.30f : +8127.534179687500000000000000000000
+%+01f : +8127.534180
+%+01.f : +8128
+%+01.0f : +8128
+%+01.1f : +8127.5
+%+01.2f : +8127.53
+%+01.5f : +8127.53418
+%+01.10f : +8127.5341796875
+%+01.30f : +8127.534179687500000000000000000000
+%+02f : +8127.534180
+%+02.f : +8128
+%+02.0f : +8128
+%+02.1f : +8127.5
+%+02.2f : +8127.53
+%+02.5f : +8127.53418
+%+02.10f : +8127.5341796875
+%+02.30f : +8127.534179687500000000000000000000
+%+05f : +8127.534180
+%+05.f : +8128
+%+05.0f : +8128
+%+05.1f : +8127.5
+%+05.2f : +8127.53
+%+05.5f : +8127.53418
+%+05.10f : +8127.5341796875
+%+05.30f : +8127.534179687500000000000000000000
+%+010f : +8127.534180
+%+010.f : +000008128
+%+010.0f : +000008128
+%+010.1f : +0008127.5
+%+010.2f : +008127.53
+%+010.5f : +8127.53418
+%+010.10f : +8127.5341796875
+%+010.30f : +8127.534179687500000000000000000000
+%+030f : +0000000000000000008127.534180
+%+030.f : +00000000000000000000000008128
+%+030.0f : +00000000000000000000000008128
+%+030.1f : +000000000000000000000008127.5
+%+030.2f : +00000000000000000000008127.53
+%+030.5f : +00000000000000000008127.53418
+%+030.10f : +000000000000008127.5341796875
+%+030.30f : +8127.534179687500000000000000000000
+%+-f : +8127.534180
+%+-.f : +8128
+%+-.0f : +8128
+%+-.1f : +8127.5
+%+-.2f : +8127.53
+%+-.5f : +8127.53418
+%+-.10f : +8127.5341796875
+%+-.30f : +8127.534179687500000000000000000000
+%+-1f : +8127.534180
+%+-1.f : +8128
+%+-1.0f : +8128
+%+-1.1f : +8127.5
+%+-1.2f : +8127.53
+%+-1.5f : +8127.53418
+%+-1.10f : +8127.5341796875
+%+-1.30f : +8127.534179687500000000000000000000
+%+-2f : +8127.534180
+%+-2.f : +8128
+%+-2.0f : +8128
+%+-2.1f : +8127.5
+%+-2.2f : +8127.53
+%+-2.5f : +8127.53418
+%+-2.10f : +8127.5341796875
+%+-2.30f : +8127.534179687500000000000000000000
+%+-5f : +8127.534180
+%+-5.f : +8128
+%+-5.0f : +8128
+%+-5.1f : +8127.5
+%+-5.2f : +8127.53
+%+-5.5f : +8127.53418
+%+-5.10f : +8127.5341796875
+%+-5.30f : +8127.534179687500000000000000000000
+%+-10f : +8127.534180
+%+-10.f : +8128
+%+-10.0f : +8128
+%+-10.1f : +8127.5
+%+-10.2f : +8127.53
+%+-10.5f : +8127.53418
+%+-10.10f : +8127.5341796875
+%+-10.30f : +8127.534179687500000000000000000000
+%+-30f : +8127.534180
+%+-30.f : +8128
+%+-30.0f : +8128
+%+-30.1f : +8127.5
+%+-30.2f : +8127.53
+%+-30.5f : +8127.53418
+%+-30.10f : +8127.5341796875
+%+-30.30f : +8127.534179687500000000000000000000
+%#-f : 8127.534180
+%#-.f : 8128.
+%#-.0f : 8128.
+%#-.1f : 8127.5
+%#-.2f : 8127.53
+%#-.5f : 8127.53418
+%#-.10f : 8127.5341796875
+%#-.30f : 8127.534179687500000000000000000000
+%#-1f : 8127.534180
+%#-1.f : 8128.
+%#-1.0f : 8128.
+%#-1.1f : 8127.5
+%#-1.2f : 8127.53
+%#-1.5f : 8127.53418
+%#-1.10f : 8127.5341796875
+%#-1.30f : 8127.534179687500000000000000000000
+%#-2f : 8127.534180
+%#-2.f : 8128.
+%#-2.0f : 8128.
+%#-2.1f : 8127.5
+%#-2.2f : 8127.53
+%#-2.5f : 8127.53418
+%#-2.10f : 8127.5341796875
+%#-2.30f : 8127.534179687500000000000000000000
+%#-5f : 8127.534180
+%#-5.f : 8128.
+%#-5.0f : 8128.
+%#-5.1f : 8127.5
+%#-5.2f : 8127.53
+%#-5.5f : 8127.53418
+%#-5.10f : 8127.5341796875
+%#-5.30f : 8127.534179687500000000000000000000
+%#-10f : 8127.534180
+%#-10.f : 8128.
+%#-10.0f : 8128.
+%#-10.1f : 8127.5
+%#-10.2f : 8127.53
+%#-10.5f : 8127.53418
+%#-10.10f : 8127.5341796875
+%#-10.30f : 8127.534179687500000000000000000000
+%#-30f : 8127.534180
+%#-30.f : 8128.
+%#-30.0f : 8128.
+%#-30.1f : 8127.5
+%#-30.2f : 8127.53
+%#-30.5f : 8127.53418
+%#-30.10f : 8127.5341796875
+%#-30.30f : 8127.534179687500000000000000000000
+%+#f : +8127.534180
+%+#.f : +8128.
+%+#.0f : +8128.
+%+#.1f : +8127.5
+%+#.2f : +8127.53
+%+#.5f : +8127.53418
+%+#.10f : +8127.5341796875
+%+#.30f : +8127.534179687500000000000000000000
+%+#0f : +8127.534180
+%+#0.f : +8128.
+%+#0.0f : +8128.
+%+#0.1f : +8127.5
+%+#0.2f : +8127.53
+%+#0.5f : +8127.53418
+%+#0.10f : +8127.5341796875
+%+#0.30f : +8127.534179687500000000000000000000
+%+#1f : +8127.534180
+%+#1.f : +8128.
+%+#1.0f : +8128.
+%+#1.1f : +8127.5
+%+#1.2f : +8127.53
+%+#1.5f : +8127.53418
+%+#1.10f : +8127.5341796875
+%+#1.30f : +8127.534179687500000000000000000000
+%+#2f : +8127.534180
+%+#2.f : +8128.
+%+#2.0f : +8128.
+%+#2.1f : +8127.5
+%+#2.2f : +8127.53
+%+#2.5f : +8127.53418
+%+#2.10f : +8127.5341796875
+%+#2.30f : +8127.534179687500000000000000000000
+%+#5f : +8127.534180
+%+#5.f : +8128.
+%+#5.0f : +8128.
+%+#5.1f : +8127.5
+%+#5.2f : +8127.53
+%+#5.5f : +8127.53418
+%+#5.10f : +8127.5341796875
+%+#5.30f : +8127.534179687500000000000000000000
+%+#10f : +8127.534180
+%+#10.f : +8128.
+%+#10.0f : +8128.
+%+#10.1f : +8127.5
+%+#10.2f : +8127.53
+%+#10.5f : +8127.53418
+%+#10.10f : +8127.5341796875
+%+#10.30f : +8127.534179687500000000000000000000
+%+#30f : +8127.534180
+%+#30.f : +8128.
+%+#30.0f : +8128.
+%+#30.1f : +8127.5
+%+#30.2f : +8127.53
+%+#30.5f : +8127.53418
+%+#30.10f : +8127.5341796875
+%+#30.30f : +8127.534179687500000000000000000000
+%-#f : 8127.534180
+%-#.f : 8128.
+%-#.0f : 8128.
+%-#.1f : 8127.5
+%-#.2f : 8127.53
+%-#.5f : 8127.53418
+%-#.10f : 8127.5341796875
+%-#.30f : 8127.534179687500000000000000000000
+%-#1f : 8127.534180
+%-#1.f : 8128.
+%-#1.0f : 8128.
+%-#1.1f : 8127.5
+%-#1.2f : 8127.53
+%-#1.5f : 8127.53418
+%-#1.10f : 8127.5341796875
+%-#1.30f : 8127.534179687500000000000000000000
+%-#2f : 8127.534180
+%-#2.f : 8128.
+%-#2.0f : 8128.
+%-#2.1f : 8127.5
+%-#2.2f : 8127.53
+%-#2.5f : 8127.53418
+%-#2.10f : 8127.5341796875
+%-#2.30f : 8127.534179687500000000000000000000
+%-#5f : 8127.534180
+%-#5.f : 8128.
+%-#5.0f : 8128.
+%-#5.1f : 8127.5
+%-#5.2f : 8127.53
+%-#5.5f : 8127.53418
+%-#5.10f : 8127.5341796875
+%-#5.30f : 8127.534179687500000000000000000000
+%-#10f : 8127.534180
+%-#10.f : 8128.
+%-#10.0f : 8128.
+%-#10.1f : 8127.5
+%-#10.2f : 8127.53
+%-#10.5f : 8127.53418
+%-#10.10f : 8127.5341796875
+%-#10.30f : 8127.534179687500000000000000000000
+%-#30f : 8127.534180
+%-#30.f : 8128.
+%-#30.0f : 8128.
+%-#30.1f : 8127.5
+%-#30.2f : 8127.53
+%-#30.5f : 8127.53418
+%-#30.10f : 8127.5341796875
+%-#30.30f : 8127.534179687500000000000000000000
+%0#f : 8127.534180
+%0#.f : 8128.
+%0#.0f : 8128.
+%0#.1f : 8127.5
+%0#.2f : 8127.53
+%0#.5f : 8127.53418
+%0#.10f : 8127.5341796875
+%0#.30f : 8127.534179687500000000000000000000
+%0#1f : 8127.534180
+%0#1.f : 8128.
+%0#1.0f : 8128.
+%0#1.1f : 8127.5
+%0#1.2f : 8127.53
+%0#1.5f : 8127.53418
+%0#1.10f : 8127.5341796875
+%0#1.30f : 8127.534179687500000000000000000000
+%0#2f : 8127.534180
+%0#2.f : 8128.
+%0#2.0f : 8128.
+%0#2.1f : 8127.5
+%0#2.2f : 8127.53
+%0#2.5f : 8127.53418
+%0#2.10f : 8127.5341796875
+%0#2.30f : 8127.534179687500000000000000000000
+%0#5f : 8127.534180
+%0#5.f : 8128.
+%0#5.0f : 8128.
+%0#5.1f : 8127.5
+%0#5.2f : 8127.53
+%0#5.5f : 8127.53418
+%0#5.10f : 8127.5341796875
+%0#5.30f : 8127.534179687500000000000000000000
+%0#10f : 8127.534180
+%0#10.f : 000008128.
+%0#10.0f : 000008128.
+%0#10.1f : 00008127.5
+%0#10.2f : 0008127.53
+%0#10.5f : 8127.53418
+%0#10.10f : 8127.5341796875
+%0#10.30f : 8127.534179687500000000000000000000
+%0#30f : 00000000000000000008127.534180
+%0#30.f : 00000000000000000000000008128.
+%0#30.0f : 00000000000000000000000008128.
+%0#30.1f : 0000000000000000000000008127.5
+%0#30.2f : 000000000000000000000008127.53
+%0#30.5f : 000000000000000000008127.53418
+%0#30.10f : 0000000000000008127.5341796875
+%0#30.30f : 8127.534179687500000000000000000000
+%+0f : +8127.534180
+%+0.f : +8128
+%+0.0f : +8128
+%+0.1f : +8127.5
+%+0.2f : +8127.53
+%+0.5f : +8127.53418
+%+0.10f : +8127.5341796875
+%+0.30f : +8127.534179687500000000000000000000
+%+01f : +8127.534180
+%+01.f : +8128
+%+01.0f : +8128
+%+01.1f : +8127.5
+%+01.2f : +8127.53
+%+01.5f : +8127.53418
+%+01.10f : +8127.5341796875
+%+01.30f : +8127.534179687500000000000000000000
+%+02f : +8127.534180
+%+02.f : +8128
+%+02.0f : +8128
+%+02.1f : +8127.5
+%+02.2f : +8127.53
+%+02.5f : +8127.53418
+%+02.10f : +8127.5341796875
+%+02.30f : +8127.534179687500000000000000000000
+%+05f : +8127.534180
+%+05.f : +8128
+%+05.0f : +8128
+%+05.1f : +8127.5
+%+05.2f : +8127.53
+%+05.5f : +8127.53418
+%+05.10f : +8127.5341796875
+%+05.30f : +8127.534179687500000000000000000000
+%+010f : +8127.534180
+%+010.f : +000008128
+%+010.0f : +000008128
+%+010.1f : +0008127.5
+%+010.2f : +008127.53
+%+010.5f : +8127.53418
+%+010.10f : +8127.5341796875
+%+010.30f : +8127.534179687500000000000000000000
+%+030f : +0000000000000000008127.534180
+%+030.f : +00000000000000000000000008128
+%+030.0f : +00000000000000000000000008128
+%+030.1f : +000000000000000000000008127.5
+%+030.2f : +00000000000000000000008127.53
+%+030.5f : +00000000000000000008127.53418
+%+030.10f : +000000000000008127.5341796875
+%+030.30f : +8127.534179687500000000000000000000
+%#0f : 8127.534180
+%#0.f : 8128.
+%#0.0f : 8128.
+%#0.1f : 8127.5
+%#0.2f : 8127.53
+%#0.5f : 8127.53418
+%#0.10f : 8127.5341796875
+%#0.30f : 8127.534179687500000000000000000000
+%#01f : 8127.534180
+%#01.f : 8128.
+%#01.0f : 8128.
+%#01.1f : 8127.5
+%#01.2f : 8127.53
+%#01.5f : 8127.53418
+%#01.10f : 8127.5341796875
+%#01.30f : 8127.534179687500000000000000000000
+%#02f : 8127.534180
+%#02.f : 8128.
+%#02.0f : 8128.
+%#02.1f : 8127.5
+%#02.2f : 8127.53
+%#02.5f : 8127.53418
+%#02.10f : 8127.5341796875
+%#02.30f : 8127.534179687500000000000000000000
+%#05f : 8127.534180
+%#05.f : 8128.
+%#05.0f : 8128.
+%#05.1f : 8127.5
+%#05.2f : 8127.53
+%#05.5f : 8127.53418
+%#05.10f : 8127.5341796875
+%#05.30f : 8127.534179687500000000000000000000
+%#010f : 8127.534180
+%#010.f : 000008128.
+%#010.0f : 000008128.
+%#010.1f : 00008127.5
+%#010.2f : 0008127.53
+%#010.5f : 8127.53418
+%#010.10f : 8127.5341796875
+%#010.30f : 8127.534179687500000000000000000000
+%#030f : 00000000000000000008127.534180
+%#030.f : 00000000000000000000000008128.
+%#030.0f : 00000000000000000000000008128.
+%#030.1f : 0000000000000000000000008127.5
+%#030.2f : 000000000000000000000008127.53
+%#030.5f : 000000000000000000008127.53418
+%#030.10f : 0000000000000008127.5341796875
+%#030.30f : 8127.534179687500000000000000000000
+%-+#f : +8127.534180
+%-+#.f : +8128.
+%-+#.0f : +8128.
+%-+#.1f : +8127.5
+%-+#.2f : +8127.53
+%-+#.5f : +8127.53418
+%-+#.10f : +8127.5341796875
+%-+#.30f : +8127.534179687500000000000000000000
+%-+#1f : +8127.534180
+%-+#1.f : +8128.
+%-+#1.0f : +8128.
+%-+#1.1f : +8127.5
+%-+#1.2f : +8127.53
+%-+#1.5f : +8127.53418
+%-+#1.10f : +8127.5341796875
+%-+#1.30f : +8127.534179687500000000000000000000
+%-+#2f : +8127.534180
+%-+#2.f : +8128.
+%-+#2.0f : +8128.
+%-+#2.1f : +8127.5
+%-+#2.2f : +8127.53
+%-+#2.5f : +8127.53418
+%-+#2.10f : +8127.5341796875
+%-+#2.30f : +8127.534179687500000000000000000000
+%-+#5f : +8127.534180
+%-+#5.f : +8128.
+%-+#5.0f : +8128.
+%-+#5.1f : +8127.5
+%-+#5.2f : +8127.53
+%-+#5.5f : +8127.53418
+%-+#5.10f : +8127.5341796875
+%-+#5.30f : +8127.534179687500000000000000000000
+%-+#10f : +8127.534180
+%-+#10.f : +8128.
+%-+#10.0f : +8128.
+%-+#10.1f : +8127.5
+%-+#10.2f : +8127.53
+%-+#10.5f : +8127.53418
+%-+#10.10f : +8127.5341796875
+%-+#10.30f : +8127.534179687500000000000000000000
+%-+#30f : +8127.534180
+%-+#30.f : +8128.
+%-+#30.0f : +8128.
+%-+#30.1f : +8127.5
+%-+#30.2f : +8127.53
+%-+#30.5f : +8127.53418
+%-+#30.10f : +8127.5341796875
+%-+#30.30f : +8127.534179687500000000000000000000
+%0+#f : +8127.534180
+%0+#.f : +8128.
+%0+#.0f : +8128.
+%0+#.1f : +8127.5
+%0+#.2f : +8127.53
+%0+#.5f : +8127.53418
+%0+#.10f : +8127.5341796875
+%0+#.30f : +8127.534179687500000000000000000000
+%0+#1f : +8127.534180
+%0+#1.f : +8128.
+%0+#1.0f : +8128.
+%0+#1.1f : +8127.5
+%0+#1.2f : +8127.53
+%0+#1.5f : +8127.53418
+%0+#1.10f : +8127.5341796875
+%0+#1.30f : +8127.534179687500000000000000000000
+%0+#2f : +8127.534180
+%0+#2.f : +8128.
+%0+#2.0f : +8128.
+%0+#2.1f : +8127.5
+%0+#2.2f : +8127.53
+%0+#2.5f : +8127.53418
+%0+#2.10f : +8127.5341796875
+%0+#2.30f : +8127.534179687500000000000000000000
+%0+#5f : +8127.534180
+%0+#5.f : +8128.
+%0+#5.0f : +8128.
+%0+#5.1f : +8127.5
+%0+#5.2f : +8127.53
+%0+#5.5f : +8127.53418
+%0+#5.10f : +8127.5341796875
+%0+#5.30f : +8127.534179687500000000000000000000
+%0+#10f : +8127.534180
+%0+#10.f : +00008128.
+%0+#10.0f : +00008128.
+%0+#10.1f : +0008127.5
+%0+#10.2f : +008127.53
+%0+#10.5f : +8127.53418
+%0+#10.10f : +8127.5341796875
+%0+#10.30f : +8127.534179687500000000000000000000
+%0+#30f : +0000000000000000008127.534180
+%0+#30.f : +0000000000000000000000008128.
+%0+#30.0f : +0000000000000000000000008128.
+%0+#30.1f : +000000000000000000000008127.5
+%0+#30.2f : +00000000000000000000008127.53
+%0+#30.5f : +00000000000000000008127.53418
+%0+#30.10f : +000000000000008127.5341796875
+%0+#30.30f : +8127.534179687500000000000000000000
+%#-+f : +8127.534180
+%#-+.f : +8128.
+%#-+.0f : +8128.
+%#-+.1f : +8127.5
+%#-+.2f : +8127.53
+%#-+.5f : +8127.53418
+%#-+.10f : +8127.5341796875
+%#-+.30f : +8127.534179687500000000000000000000
+%#-+1f : +8127.534180
+%#-+1.f : +8128.
+%#-+1.0f : +8128.
+%#-+1.1f : +8127.5
+%#-+1.2f : +8127.53
+%#-+1.5f : +8127.53418
+%#-+1.10f : +8127.5341796875
+%#-+1.30f : +8127.534179687500000000000000000000
+%#-+2f : +8127.534180
+%#-+2.f : +8128.
+%#-+2.0f : +8128.
+%#-+2.1f : +8127.5
+%#-+2.2f : +8127.53
+%#-+2.5f : +8127.53418
+%#-+2.10f : +8127.5341796875
+%#-+2.30f : +8127.534179687500000000000000000000
+%#-+5f : +8127.534180
+%#-+5.f : +8128.
+%#-+5.0f : +8128.
+%#-+5.1f : +8127.5
+%#-+5.2f : +8127.53
+%#-+5.5f : +8127.53418
+%#-+5.10f : +8127.5341796875
+%#-+5.30f : +8127.534179687500000000000000000000
+%#-+10f : +8127.534180
+%#-+10.f : +8128.
+%#-+10.0f : +8128.
+%#-+10.1f : +8127.5
+%#-+10.2f : +8127.53
+%#-+10.5f : +8127.53418
+%#-+10.10f : +8127.5341796875
+%#-+10.30f : +8127.534179687500000000000000000000
+%#-+30f : +8127.534180
+%#-+30.f : +8128.
+%#-+30.0f : +8128.
+%#-+30.1f : +8127.5
+%#-+30.2f : +8127.53
+%#-+30.5f : +8127.53418
+%#-+30.10f : +8127.5341796875
+%#-+30.30f : +8127.534179687500000000000000000000
+%+#-f : +8127.534180
+%+#-.f : +8128.
+%+#-.0f : +8128.
+%+#-.1f : +8127.5
+%+#-.2f : +8127.53
+%+#-.5f : +8127.53418
+%+#-.10f : +8127.5341796875
+%+#-.30f : +8127.534179687500000000000000000000
+%+#-1f : +8127.534180
+%+#-1.f : +8128.
+%+#-1.0f : +8128.
+%+#-1.1f : +8127.5
+%+#-1.2f : +8127.53
+%+#-1.5f : +8127.53418
+%+#-1.10f : +8127.5341796875
+%+#-1.30f : +8127.534179687500000000000000000000
+%+#-2f : +8127.534180
+%+#-2.f : +8128.
+%+#-2.0f : +8128.
+%+#-2.1f : +8127.5
+%+#-2.2f : +8127.53
+%+#-2.5f : +8127.53418
+%+#-2.10f : +8127.5341796875
+%+#-2.30f : +8127.534179687500000000000000000000
+%+#-5f : +8127.534180
+%+#-5.f : +8128.
+%+#-5.0f : +8128.
+%+#-5.1f : +8127.5
+%+#-5.2f : +8127.53
+%+#-5.5f : +8127.53418
+%+#-5.10f : +8127.5341796875
+%+#-5.30f : +8127.534179687500000000000000000000
+%+#-10f : +8127.534180
+%+#-10.f : +8128.
+%+#-10.0f : +8128.
+%+#-10.1f : +8127.5
+%+#-10.2f : +8127.53
+%+#-10.5f : +8127.53418
+%+#-10.10f : +8127.5341796875
+%+#-10.30f : +8127.534179687500000000000000000000
+%+#-30f : +8127.534180
+%+#-30.f : +8128.
+%+#-30.0f : +8128.
+%+#-30.1f : +8127.5
+%+#-30.2f : +8127.53
+%+#-30.5f : +8127.53418
+%+#-30.10f : +8127.5341796875
+%+#-30.30f : +8127.534179687500000000000000000000
+%+lf : +8127.534000
+%+.lf : +8128
+%+.0lf : +8128
+%+.1lf : +8127.5
+%+.2lf : +8127.53
+%+.5lf : +8127.53400
+%+.10lf : +8127.5340000000
+%+.30lf : +8127.533999999999650754030000000000
+%+0lf : +8127.534000
+%+0.lf : +8128
+%+0.0lf : +8128
+%+0.1lf : +8127.5
+%+0.2lf : +8127.53
+%+0.5lf : +8127.53400
+%+0.10lf : +8127.5340000000
+%+0.30lf : +8127.533999999999650754030000000000
+%+1lf : +8127.534000
+%+1.lf : +8128
+%+1.0lf : +8128
+%+1.1lf : +8127.5
+%+1.2lf : +8127.53
+%+1.5lf : +8127.53400
+%+1.10lf : +8127.5340000000
+%+1.30lf : +8127.533999999999650754030000000000
+%+2lf : +8127.534000
+%+2.lf : +8128
+%+2.0lf : +8128
+%+2.1lf : +8127.5
+%+2.2lf : +8127.53
+%+2.5lf : +8127.53400
+%+2.10lf : +8127.5340000000
+%+2.30lf : +8127.533999999999650754030000000000
+%+5lf : +8127.534000
+%+5.lf : +8128
+%+5.0lf : +8128
+%+5.1lf : +8127.5
+%+5.2lf : +8127.53
+%+5.5lf : +8127.53400
+%+5.10lf : +8127.5340000000
+%+5.30lf : +8127.533999999999650754030000000000
+%+10lf : +8127.534000
+%+10.lf : +8128
+%+10.0lf : +8128
+%+10.1lf : +8127.5
+%+10.2lf : +8127.53
+%+10.5lf : +8127.53400
+%+10.10lf : +8127.5340000000
+%+10.30lf : +8127.533999999999650754030000000000
+%+30lf : +8127.534000
+%+30.lf : +8128
+%+30.0lf : +8128
+%+30.1lf : +8127.5
+%+30.2lf : +8127.53
+%+30.5lf : +8127.53400
+%+30.10lf : +8127.5340000000
+%+30.30lf : +8127.533999999999650754030000000000
+%-lf : 8127.534000
+%-.lf : 8128
+%-.0lf : 8128
+%-.1lf : 8127.5
+%-.2lf : 8127.53
+%-.5lf : 8127.53400
+%-.10lf : 8127.5340000000
+%-.30lf : 8127.533999999999650754030000000000
+%-1lf : 8127.534000
+%-1.lf : 8128
+%-1.0lf : 8128
+%-1.1lf : 8127.5
+%-1.2lf : 8127.53
+%-1.5lf : 8127.53400
+%-1.10lf : 8127.5340000000
+%-1.30lf : 8127.533999999999650754030000000000
+%-2lf : 8127.534000
+%-2.lf : 8128
+%-2.0lf : 8128
+%-2.1lf : 8127.5
+%-2.2lf : 8127.53
+%-2.5lf : 8127.53400
+%-2.10lf : 8127.5340000000
+%-2.30lf : 8127.533999999999650754030000000000
+%-5lf : 8127.534000
+%-5.lf : 8128
+%-5.0lf : 8128
+%-5.1lf : 8127.5
+%-5.2lf : 8127.53
+%-5.5lf : 8127.53400
+%-5.10lf : 8127.5340000000
+%-5.30lf : 8127.533999999999650754030000000000
+%-10lf : 8127.534000
+%-10.lf : 8128
+%-10.0lf : 8128
+%-10.1lf : 8127.5
+%-10.2lf : 8127.53
+%-10.5lf : 8127.53400
+%-10.10lf : 8127.5340000000
+%-10.30lf : 8127.533999999999650754030000000000
+%-30lf : 8127.534000
+%-30.lf : 8128
+%-30.0lf : 8128
+%-30.1lf : 8127.5
+%-30.2lf : 8127.53
+%-30.5lf : 8127.53400
+%-30.10lf : 8127.5340000000
+%-30.30lf : 8127.533999999999650754030000000000
+%#lf : 8127.534000
+%#.lf : 8128.
+%#.0lf : 8128.
+%#.1lf : 8127.5
+%#.2lf : 8127.53
+%#.5lf : 8127.53400
+%#.10lf : 8127.5340000000
+%#.30lf : 8127.533999999999650754030000000000
+%#0lf : 8127.534000
+%#0.lf : 8128.
+%#0.0lf : 8128.
+%#0.1lf : 8127.5
+%#0.2lf : 8127.53
+%#0.5lf : 8127.53400
+%#0.10lf : 8127.5340000000
+%#0.30lf : 8127.533999999999650754030000000000
+%#1lf : 8127.534000
+%#1.lf : 8128.
+%#1.0lf : 8128.
+%#1.1lf : 8127.5
+%#1.2lf : 8127.53
+%#1.5lf : 8127.53400
+%#1.10lf : 8127.5340000000
+%#1.30lf : 8127.533999999999650754030000000000
+%#2lf : 8127.534000
+%#2.lf : 8128.
+%#2.0lf : 8128.
+%#2.1lf : 8127.5
+%#2.2lf : 8127.53
+%#2.5lf : 8127.53400
+%#2.10lf : 8127.5340000000
+%#2.30lf : 8127.533999999999650754030000000000
+%#5lf : 8127.534000
+%#5.lf : 8128.
+%#5.0lf : 8128.
+%#5.1lf : 8127.5
+%#5.2lf : 8127.53
+%#5.5lf : 8127.53400
+%#5.10lf : 8127.5340000000
+%#5.30lf : 8127.533999999999650754030000000000
+%#10lf : 8127.534000
+%#10.lf : 8128.
+%#10.0lf : 8128.
+%#10.1lf : 8127.5
+%#10.2lf : 8127.53
+%#10.5lf : 8127.53400
+%#10.10lf : 8127.5340000000
+%#10.30lf : 8127.533999999999650754030000000000
+%#30lf : 8127.534000
+%#30.lf : 8128.
+%#30.0lf : 8128.
+%#30.1lf : 8127.5
+%#30.2lf : 8127.53
+%#30.5lf : 8127.53400
+%#30.10lf : 8127.5340000000
+%#30.30lf : 8127.533999999999650754030000000000
+%0lf : 8127.534000
+%0.lf : 8128
+%0.0lf : 8128
+%0.1lf : 8127.5
+%0.2lf : 8127.53
+%0.5lf : 8127.53400
+%0.10lf : 8127.5340000000
+%0.30lf : 8127.533999999999650754030000000000
+%01lf : 8127.534000
+%01.lf : 8128
+%01.0lf : 8128
+%01.1lf : 8127.5
+%01.2lf : 8127.53
+%01.5lf : 8127.53400
+%01.10lf : 8127.5340000000
+%01.30lf : 8127.533999999999650754030000000000
+%02lf : 8127.534000
+%02.lf : 8128
+%02.0lf : 8128
+%02.1lf : 8127.5
+%02.2lf : 8127.53
+%02.5lf : 8127.53400
+%02.10lf : 8127.5340000000
+%02.30lf : 8127.533999999999650754030000000000
+%05lf : 8127.534000
+%05.lf : 08128
+%05.0lf : 08128
+%05.1lf : 8127.5
+%05.2lf : 8127.53
+%05.5lf : 8127.53400
+%05.10lf : 8127.5340000000
+%05.30lf : 8127.533999999999650754030000000000
+%010lf : 8127.534000
+%010.lf : 0000008128
+%010.0lf : 0000008128
+%010.1lf : 00008127.5
+%010.2lf : 0008127.53
+%010.5lf : 8127.53400
+%010.10lf : 8127.5340000000
+%010.30lf : 8127.533999999999650754030000000000
+%030lf : 00000000000000000008127.534000
+%030.lf : 000000000000000000000000008128
+%030.0lf : 000000000000000000000000008128
+%030.1lf : 0000000000000000000000008127.5
+%030.2lf : 000000000000000000000008127.53
+%030.5lf : 000000000000000000008127.53400
+%030.10lf : 0000000000000008127.5340000000
+%030.30lf : 8127.533999999999650754030000000000
+%-+lf : +8127.534000
+%-+.lf : +8128
+%-+.0lf : +8128
+%-+.1lf : +8127.5
+%-+.2lf : +8127.53
+%-+.5lf : +8127.53400
+%-+.10lf : +8127.5340000000
+%-+.30lf : +8127.533999999999650754030000000000
+%-+1lf : +8127.534000
+%-+1.lf : +8128
+%-+1.0lf : +8128
+%-+1.1lf : +8127.5
+%-+1.2lf : +8127.53
+%-+1.5lf : +8127.53400
+%-+1.10lf : +8127.5340000000
+%-+1.30lf : +8127.533999999999650754030000000000
+%-+2lf : +8127.534000
+%-+2.lf : +8128
+%-+2.0lf : +8128
+%-+2.1lf : +8127.5
+%-+2.2lf : +8127.53
+%-+2.5lf : +8127.53400
+%-+2.10lf : +8127.5340000000
+%-+2.30lf : +8127.533999999999650754030000000000
+%-+5lf : +8127.534000
+%-+5.lf : +8128
+%-+5.0lf : +8128
+%-+5.1lf : +8127.5
+%-+5.2lf : +8127.53
+%-+5.5lf : +8127.53400
+%-+5.10lf : +8127.5340000000
+%-+5.30lf : +8127.533999999999650754030000000000
+%-+10lf : +8127.534000
+%-+10.lf : +8128
+%-+10.0lf : +8128
+%-+10.1lf : +8127.5
+%-+10.2lf : +8127.53
+%-+10.5lf : +8127.53400
+%-+10.10lf : +8127.5340000000
+%-+10.30lf : +8127.533999999999650754030000000000
+%-+30lf : +8127.534000
+%-+30.lf : +8128
+%-+30.0lf : +8128
+%-+30.1lf : +8127.5
+%-+30.2lf : +8127.53
+%-+30.5lf : +8127.53400
+%-+30.10lf : +8127.5340000000
+%-+30.30lf : +8127.533999999999650754030000000000
+%#+lf : +8127.534000
+%#+.lf : +8128.
+%#+.0lf : +8128.
+%#+.1lf : +8127.5
+%#+.2lf : +8127.53
+%#+.5lf : +8127.53400
+%#+.10lf : +8127.5340000000
+%#+.30lf : +8127.533999999999650754030000000000
+%#+0lf : +8127.534000
+%#+0.lf : +8128.
+%#+0.0lf : +8128.
+%#+0.1lf : +8127.5
+%#+0.2lf : +8127.53
+%#+0.5lf : +8127.53400
+%#+0.10lf : +8127.5340000000
+%#+0.30lf : +8127.533999999999650754030000000000
+%#+1lf : +8127.534000
+%#+1.lf : +8128.
+%#+1.0lf : +8128.
+%#+1.1lf : +8127.5
+%#+1.2lf : +8127.53
+%#+1.5lf : +8127.53400
+%#+1.10lf : +8127.5340000000
+%#+1.30lf : +8127.533999999999650754030000000000
+%#+2lf : +8127.534000
+%#+2.lf : +8128.
+%#+2.0lf : +8128.
+%#+2.1lf : +8127.5
+%#+2.2lf : +8127.53
+%#+2.5lf : +8127.53400
+%#+2.10lf : +8127.5340000000
+%#+2.30lf : +8127.533999999999650754030000000000
+%#+5lf : +8127.534000
+%#+5.lf : +8128.
+%#+5.0lf : +8128.
+%#+5.1lf : +8127.5
+%#+5.2lf : +8127.53
+%#+5.5lf : +8127.53400
+%#+5.10lf : +8127.5340000000
+%#+5.30lf : +8127.533999999999650754030000000000
+%#+10lf : +8127.534000
+%#+10.lf : +8128.
+%#+10.0lf : +8128.
+%#+10.1lf : +8127.5
+%#+10.2lf : +8127.53
+%#+10.5lf : +8127.53400
+%#+10.10lf : +8127.5340000000
+%#+10.30lf : +8127.533999999999650754030000000000
+%#+30lf : +8127.534000
+%#+30.lf : +8128.
+%#+30.0lf : +8128.
+%#+30.1lf : +8127.5
+%#+30.2lf : +8127.53
+%#+30.5lf : +8127.53400
+%#+30.10lf : +8127.5340000000
+%#+30.30lf : +8127.533999999999650754030000000000
+%+0lf : +8127.534000
+%+0.lf : +8128
+%+0.0lf : +8128
+%+0.1lf : +8127.5
+%+0.2lf : +8127.53
+%+0.5lf : +8127.53400
+%+0.10lf : +8127.5340000000
+%+0.30lf : +8127.533999999999650754030000000000
+%+01lf : +8127.534000
+%+01.lf : +8128
+%+01.0lf : +8128
+%+01.1lf : +8127.5
+%+01.2lf : +8127.53
+%+01.5lf : +8127.53400
+%+01.10lf : +8127.5340000000
+%+01.30lf : +8127.533999999999650754030000000000
+%+02lf : +8127.534000
+%+02.lf : +8128
+%+02.0lf : +8128
+%+02.1lf : +8127.5
+%+02.2lf : +8127.53
+%+02.5lf : +8127.53400
+%+02.10lf : +8127.5340000000
+%+02.30lf : +8127.533999999999650754030000000000
+%+05lf : +8127.534000
+%+05.lf : +8128
+%+05.0lf : +8128
+%+05.1lf : +8127.5
+%+05.2lf : +8127.53
+%+05.5lf : +8127.53400
+%+05.10lf : +8127.5340000000
+%+05.30lf : +8127.533999999999650754030000000000
+%+010lf : +8127.534000
+%+010.lf : +000008128
+%+010.0lf : +000008128
+%+010.1lf : +0008127.5
+%+010.2lf : +008127.53
+%+010.5lf : +8127.53400
+%+010.10lf : +8127.5340000000
+%+010.30lf : +8127.533999999999650754030000000000
+%+030lf : +0000000000000000008127.534000
+%+030.lf : +00000000000000000000000008128
+%+030.0lf : +00000000000000000000000008128
+%+030.1lf : +000000000000000000000008127.5
+%+030.2lf : +00000000000000000000008127.53
+%+030.5lf : +00000000000000000008127.53400
+%+030.10lf : +000000000000008127.5340000000
+%+030.30lf : +8127.533999999999650754030000000000
+%+-lf : +8127.534000
+%+-.lf : +8128
+%+-.0lf : +8128
+%+-.1lf : +8127.5
+%+-.2lf : +8127.53
+%+-.5lf : +8127.53400
+%+-.10lf : +8127.5340000000
+%+-.30lf : +8127.533999999999650754030000000000
+%+-1lf : +8127.534000
+%+-1.lf : +8128
+%+-1.0lf : +8128
+%+-1.1lf : +8127.5
+%+-1.2lf : +8127.53
+%+-1.5lf : +8127.53400
+%+-1.10lf : +8127.5340000000
+%+-1.30lf : +8127.533999999999650754030000000000
+%+-2lf : +8127.534000
+%+-2.lf : +8128
+%+-2.0lf : +8128
+%+-2.1lf : +8127.5
+%+-2.2lf : +8127.53
+%+-2.5lf : +8127.53400
+%+-2.10lf : +8127.5340000000
+%+-2.30lf : +8127.533999999999650754030000000000
+%+-5lf : +8127.534000
+%+-5.lf : +8128
+%+-5.0lf : +8128
+%+-5.1lf : +8127.5
+%+-5.2lf : +8127.53
+%+-5.5lf : +8127.53400
+%+-5.10lf : +8127.5340000000
+%+-5.30lf : +8127.533999999999650754030000000000
+%+-10lf : +8127.534000
+%+-10.lf : +8128
+%+-10.0lf : +8128
+%+-10.1lf : +8127.5
+%+-10.2lf : +8127.53
+%+-10.5lf : +8127.53400
+%+-10.10lf : +8127.5340000000
+%+-10.30lf : +8127.533999999999650754030000000000
+%+-30lf : +8127.534000
+%+-30.lf : +8128
+%+-30.0lf : +8128
+%+-30.1lf : +8127.5
+%+-30.2lf : +8127.53
+%+-30.5lf : +8127.53400
+%+-30.10lf : +8127.5340000000
+%+-30.30lf : +8127.533999999999650754030000000000
+%#-lf : 8127.534000
+%#-.lf : 8128.
+%#-.0lf : 8128.
+%#-.1lf : 8127.5
+%#-.2lf : 8127.53
+%#-.5lf : 8127.53400
+%#-.10lf : 8127.5340000000
+%#-.30lf : 8127.533999999999650754030000000000
+%#-1lf : 8127.534000
+%#-1.lf : 8128.
+%#-1.0lf : 8128.
+%#-1.1lf : 8127.5
+%#-1.2lf : 8127.53
+%#-1.5lf : 8127.53400
+%#-1.10lf : 8127.5340000000
+%#-1.30lf : 8127.533999999999650754030000000000
+%#-2lf : 8127.534000
+%#-2.lf : 8128.
+%#-2.0lf : 8128.
+%#-2.1lf : 8127.5
+%#-2.2lf : 8127.53
+%#-2.5lf : 8127.53400
+%#-2.10lf : 8127.5340000000
+%#-2.30lf : 8127.533999999999650754030000000000
+%#-5lf : 8127.534000
+%#-5.lf : 8128.
+%#-5.0lf : 8128.
+%#-5.1lf : 8127.5
+%#-5.2lf : 8127.53
+%#-5.5lf : 8127.53400
+%#-5.10lf : 8127.5340000000
+%#-5.30lf : 8127.533999999999650754030000000000
+%#-10lf : 8127.534000
+%#-10.lf : 8128.
+%#-10.0lf : 8128.
+%#-10.1lf : 8127.5
+%#-10.2lf : 8127.53
+%#-10.5lf : 8127.53400
+%#-10.10lf : 8127.5340000000
+%#-10.30lf : 8127.533999999999650754030000000000
+%#-30lf : 8127.534000
+%#-30.lf : 8128.
+%#-30.0lf : 8128.
+%#-30.1lf : 8127.5
+%#-30.2lf : 8127.53
+%#-30.5lf : 8127.53400
+%#-30.10lf : 8127.5340000000
+%#-30.30lf : 8127.533999999999650754030000000000
+%+#lf : +8127.534000
+%+#.lf : +8128.
+%+#.0lf : +8128.
+%+#.1lf : +8127.5
+%+#.2lf : +8127.53
+%+#.5lf : +8127.53400
+%+#.10lf : +8127.5340000000
+%+#.30lf : +8127.533999999999650754030000000000
+%+#0lf : +8127.534000
+%+#0.lf : +8128.
+%+#0.0lf : +8128.
+%+#0.1lf : +8127.5
+%+#0.2lf : +8127.53
+%+#0.5lf : +8127.53400
+%+#0.10lf : +8127.5340000000
+%+#0.30lf : +8127.533999999999650754030000000000
+%+#1lf : +8127.534000
+%+#1.lf : +8128.
+%+#1.0lf : +8128.
+%+#1.1lf : +8127.5
+%+#1.2lf : +8127.53
+%+#1.5lf : +8127.53400
+%+#1.10lf : +8127.5340000000
+%+#1.30lf : +8127.533999999999650754030000000000
+%+#2lf : +8127.534000
+%+#2.lf : +8128.
+%+#2.0lf : +8128.
+%+#2.1lf : +8127.5
+%+#2.2lf : +8127.53
+%+#2.5lf : +8127.53400
+%+#2.10lf : +8127.5340000000
+%+#2.30lf : +8127.533999999999650754030000000000
+%+#5lf : +8127.534000
+%+#5.lf : +8128.
+%+#5.0lf : +8128.
+%+#5.1lf : +8127.5
+%+#5.2lf : +8127.53
+%+#5.5lf : +8127.53400
+%+#5.10lf : +8127.5340000000
+%+#5.30lf : +8127.533999999999650754030000000000
+%+#10lf : +8127.534000
+%+#10.lf : +8128.
+%+#10.0lf : +8128.
+%+#10.1lf : +8127.5
+%+#10.2lf : +8127.53
+%+#10.5lf : +8127.53400
+%+#10.10lf : +8127.5340000000
+%+#10.30lf : +8127.533999999999650754030000000000
+%+#30lf : +8127.534000
+%+#30.lf : +8128.
+%+#30.0lf : +8128.
+%+#30.1lf : +8127.5
+%+#30.2lf : +8127.53
+%+#30.5lf : +8127.53400
+%+#30.10lf : +8127.5340000000
+%+#30.30lf : +8127.533999999999650754030000000000
+%-#lf : 8127.534000
+%-#.lf : 8128.
+%-#.0lf : 8128.
+%-#.1lf : 8127.5
+%-#.2lf : 8127.53
+%-#.5lf : 8127.53400
+%-#.10lf : 8127.5340000000
+%-#.30lf : 8127.533999999999650754030000000000
+%-#1lf : 8127.534000
+%-#1.lf : 8128.
+%-#1.0lf : 8128.
+%-#1.1lf : 8127.5
+%-#1.2lf : 8127.53
+%-#1.5lf : 8127.53400
+%-#1.10lf : 8127.5340000000
+%-#1.30lf : 8127.533999999999650754030000000000
+%-#2lf : 8127.534000
+%-#2.lf : 8128.
+%-#2.0lf : 8128.
+%-#2.1lf : 8127.5
+%-#2.2lf : 8127.53
+%-#2.5lf : 8127.53400
+%-#2.10lf : 8127.5340000000
+%-#2.30lf : 8127.533999999999650754030000000000
+%-#5lf : 8127.534000
+%-#5.lf : 8128.
+%-#5.0lf : 8128.
+%-#5.1lf : 8127.5
+%-#5.2lf : 8127.53
+%-#5.5lf : 8127.53400
+%-#5.10lf : 8127.5340000000
+%-#5.30lf : 8127.533999999999650754030000000000
+%-#10lf : 8127.534000
+%-#10.lf : 8128.
+%-#10.0lf : 8128.
+%-#10.1lf : 8127.5
+%-#10.2lf : 8127.53
+%-#10.5lf : 8127.53400
+%-#10.10lf : 8127.5340000000
+%-#10.30lf : 8127.533999999999650754030000000000
+%-#30lf : 8127.534000
+%-#30.lf : 8128.
+%-#30.0lf : 8128.
+%-#30.1lf : 8127.5
+%-#30.2lf : 8127.53
+%-#30.5lf : 8127.53400
+%-#30.10lf : 8127.5340000000
+%-#30.30lf : 8127.533999999999650754030000000000
+%0#lf : 8127.534000
+%0#.lf : 8128.
+%0#.0lf : 8128.
+%0#.1lf : 8127.5
+%0#.2lf : 8127.53
+%0#.5lf : 8127.53400
+%0#.10lf : 8127.5340000000
+%0#.30lf : 8127.533999999999650754030000000000
+%0#1lf : 8127.534000
+%0#1.lf : 8128.
+%0#1.0lf : 8128.
+%0#1.1lf : 8127.5
+%0#1.2lf : 8127.53
+%0#1.5lf : 8127.53400
+%0#1.10lf : 8127.5340000000
+%0#1.30lf : 8127.533999999999650754030000000000
+%0#2lf : 8127.534000
+%0#2.lf : 8128.
+%0#2.0lf : 8128.
+%0#2.1lf : 8127.5
+%0#2.2lf : 8127.53
+%0#2.5lf : 8127.53400
+%0#2.10lf : 8127.5340000000
+%0#2.30lf : 8127.533999999999650754030000000000
+%0#5lf : 8127.534000
+%0#5.lf : 8128.
+%0#5.0lf : 8128.
+%0#5.1lf : 8127.5
+%0#5.2lf : 8127.53
+%0#5.5lf : 8127.53400
+%0#5.10lf : 8127.5340000000
+%0#5.30lf : 8127.533999999999650754030000000000
+%0#10lf : 8127.534000
+%0#10.lf : 000008128.
+%0#10.0lf : 000008128.
+%0#10.1lf : 00008127.5
+%0#10.2lf : 0008127.53
+%0#10.5lf : 8127.53400
+%0#10.10lf : 8127.5340000000
+%0#10.30lf : 8127.533999999999650754030000000000
+%0#30lf : 00000000000000000008127.534000
+%0#30.lf : 00000000000000000000000008128.
+%0#30.0lf : 00000000000000000000000008128.
+%0#30.1lf : 0000000000000000000000008127.5
+%0#30.2lf : 000000000000000000000008127.53
+%0#30.5lf : 000000000000000000008127.53400
+%0#30.10lf : 0000000000000008127.5340000000
+%0#30.30lf : 8127.533999999999650754030000000000
+%+0lf : +8127.534000
+%+0.lf : +8128
+%+0.0lf : +8128
+%+0.1lf : +8127.5
+%+0.2lf : +8127.53
+%+0.5lf : +8127.53400
+%+0.10lf : +8127.5340000000
+%+0.30lf : +8127.533999999999650754030000000000
+%+01lf : +8127.534000
+%+01.lf : +8128
+%+01.0lf : +8128
+%+01.1lf : +8127.5
+%+01.2lf : +8127.53
+%+01.5lf : +8127.53400
+%+01.10lf : +8127.5340000000
+%+01.30lf : +8127.533999999999650754030000000000
+%+02lf : +8127.534000
+%+02.lf : +8128
+%+02.0lf : +8128
+%+02.1lf : +8127.5
+%+02.2lf : +8127.53
+%+02.5lf : +8127.53400
+%+02.10lf : +8127.5340000000
+%+02.30lf : +8127.533999999999650754030000000000
+%+05lf : +8127.534000
+%+05.lf : +8128
+%+05.0lf : +8128
+%+05.1lf : +8127.5
+%+05.2lf : +8127.53
+%+05.5lf : +8127.53400
+%+05.10lf : +8127.5340000000
+%+05.30lf : +8127.533999999999650754030000000000
+%+010lf : +8127.534000
+%+010.lf : +000008128
+%+010.0lf : +000008128
+%+010.1lf : +0008127.5
+%+010.2lf : +008127.53
+%+010.5lf : +8127.53400
+%+010.10lf : +8127.5340000000
+%+010.30lf : +8127.533999999999650754030000000000
+%+030lf : +0000000000000000008127.534000
+%+030.lf : +00000000000000000000000008128
+%+030.0lf : +00000000000000000000000008128
+%+030.1lf : +000000000000000000000008127.5
+%+030.2lf : +00000000000000000000008127.53
+%+030.5lf : +00000000000000000008127.53400
+%+030.10lf : +000000000000008127.5340000000
+%+030.30lf : +8127.533999999999650754030000000000
+%#0lf : 8127.534000
+%#0.lf : 8128.
+%#0.0lf : 8128.
+%#0.1lf : 8127.5
+%#0.2lf : 8127.53
+%#0.5lf : 8127.53400
+%#0.10lf : 8127.5340000000
+%#0.30lf : 8127.533999999999650754030000000000
+%#01lf : 8127.534000
+%#01.lf : 8128.
+%#01.0lf : 8128.
+%#01.1lf : 8127.5
+%#01.2lf : 8127.53
+%#01.5lf : 8127.53400
+%#01.10lf : 8127.5340000000
+%#01.30lf : 8127.533999999999650754030000000000
+%#02lf : 8127.534000
+%#02.lf : 8128.
+%#02.0lf : 8128.
+%#02.1lf : 8127.5
+%#02.2lf : 8127.53
+%#02.5lf : 8127.53400
+%#02.10lf : 8127.5340000000
+%#02.30lf : 8127.533999999999650754030000000000
+%#05lf : 8127.534000
+%#05.lf : 8128.
+%#05.0lf : 8128.
+%#05.1lf : 8127.5
+%#05.2lf : 8127.53
+%#05.5lf : 8127.53400
+%#05.10lf : 8127.5340000000
+%#05.30lf : 8127.533999999999650754030000000000
+%#010lf : 8127.534000
+%#010.lf : 000008128.
+%#010.0lf : 000008128.
+%#010.1lf : 00008127.5
+%#010.2lf : 0008127.53
+%#010.5lf : 8127.53400
+%#010.10lf : 8127.5340000000
+%#010.30lf : 8127.533999999999650754030000000000
+%#030lf : 00000000000000000008127.534000
+%#030.lf : 00000000000000000000000008128.
+%#030.0lf : 00000000000000000000000008128.
+%#030.1lf : 0000000000000000000000008127.5
+%#030.2lf : 000000000000000000000008127.53
+%#030.5lf : 000000000000000000008127.53400
+%#030.10lf : 0000000000000008127.5340000000
+%#030.30lf : 8127.533999999999650754030000000000
+%-+#lf : +8127.534000
+%-+#.lf : +8128.
+%-+#.0lf : +8128.
+%-+#.1lf : +8127.5
+%-+#.2lf : +8127.53
+%-+#.5lf : +8127.53400
+%-+#.10lf : +8127.5340000000
+%-+#.30lf : +8127.533999999999650754030000000000
+%-+#1lf : +8127.534000
+%-+#1.lf : +8128.
+%-+#1.0lf : +8128.
+%-+#1.1lf : +8127.5
+%-+#1.2lf : +8127.53
+%-+#1.5lf : +8127.53400
+%-+#1.10lf : +8127.5340000000
+%-+#1.30lf : +8127.533999999999650754030000000000
+%-+#2lf : +8127.534000
+%-+#2.lf : +8128.
+%-+#2.0lf : +8128.
+%-+#2.1lf : +8127.5
+%-+#2.2lf : +8127.53
+%-+#2.5lf : +8127.53400
+%-+#2.10lf : +8127.5340000000
+%-+#2.30lf : +8127.533999999999650754030000000000
+%-+#5lf : +8127.534000
+%-+#5.lf : +8128.
+%-+#5.0lf : +8128.
+%-+#5.1lf : +8127.5
+%-+#5.2lf : +8127.53
+%-+#5.5lf : +8127.53400
+%-+#5.10lf : +8127.5340000000
+%-+#5.30lf : +8127.533999999999650754030000000000
+%-+#10lf : +8127.534000
+%-+#10.lf : +8128.
+%-+#10.0lf : +8128.
+%-+#10.1lf : +8127.5
+%-+#10.2lf : +8127.53
+%-+#10.5lf : +8127.53400
+%-+#10.10lf : +8127.5340000000
+%-+#10.30lf : +8127.533999999999650754030000000000
+%-+#30lf : +8127.534000
+%-+#30.lf : +8128.
+%-+#30.0lf : +8128.
+%-+#30.1lf : +8127.5
+%-+#30.2lf : +8127.53
+%-+#30.5lf : +8127.53400
+%-+#30.10lf : +8127.5340000000
+%-+#30.30lf : +8127.533999999999650754030000000000
+%0+#lf : +8127.534000
+%0+#.lf : +8128.
+%0+#.0lf : +8128.
+%0+#.1lf : +8127.5
+%0+#.2lf : +8127.53
+%0+#.5lf : +8127.53400
+%0+#.10lf : +8127.5340000000
+%0+#.30lf : +8127.533999999999650754030000000000
+%0+#1lf : +8127.534000
+%0+#1.lf : +8128.
+%0+#1.0lf : +8128.
+%0+#1.1lf : +8127.5
+%0+#1.2lf : +8127.53
+%0+#1.5lf : +8127.53400
+%0+#1.10lf : +8127.5340000000
+%0+#1.30lf : +8127.533999999999650754030000000000
+%0+#2lf : +8127.534000
+%0+#2.lf : +8128.
+%0+#2.0lf : +8128.
+%0+#2.1lf : +8127.5
+%0+#2.2lf : +8127.53
+%0+#2.5lf : +8127.53400
+%0+#2.10lf : +8127.5340000000
+%0+#2.30lf : +8127.533999999999650754030000000000
+%0+#5lf : +8127.534000
+%0+#5.lf : +8128.
+%0+#5.0lf : +8128.
+%0+#5.1lf : +8127.5
+%0+#5.2lf : +8127.53
+%0+#5.5lf : +8127.53400
+%0+#5.10lf : +8127.5340000000
+%0+#5.30lf : +8127.533999999999650754030000000000
+%0+#10lf : +8127.534000
+%0+#10.lf : +00008128.
+%0+#10.0lf : +00008128.
+%0+#10.1lf : +0008127.5
+%0+#10.2lf : +008127.53
+%0+#10.5lf : +8127.53400
+%0+#10.10lf : +8127.5340000000
+%0+#10.30lf : +8127.533999999999650754030000000000
+%0+#30lf : +0000000000000000008127.534000
+%0+#30.lf : +0000000000000000000000008128.
+%0+#30.0lf : +0000000000000000000000008128.
+%0+#30.1lf : +000000000000000000000008127.5
+%0+#30.2lf : +00000000000000000000008127.53
+%0+#30.5lf : +00000000000000000008127.53400
+%0+#30.10lf : +000000000000008127.5340000000
+%0+#30.30lf : +8127.533999999999650754030000000000
+%#-+lf : +8127.534000
+%#-+.lf : +8128.
+%#-+.0lf : +8128.
+%#-+.1lf : +8127.5
+%#-+.2lf : +8127.53
+%#-+.5lf : +8127.53400
+%#-+.10lf : +8127.5340000000
+%#-+.30lf : +8127.533999999999650754030000000000
+%#-+1lf : +8127.534000
+%#-+1.lf : +8128.
+%#-+1.0lf : +8128.
+%#-+1.1lf : +8127.5
+%#-+1.2lf : +8127.53
+%#-+1.5lf : +8127.53400
+%#-+1.10lf : +8127.5340000000
+%#-+1.30lf : +8127.533999999999650754030000000000
+%#-+2lf : +8127.534000
+%#-+2.lf : +8128.
+%#-+2.0lf : +8128.
+%#-+2.1lf : +8127.5
+%#-+2.2lf : +8127.53
+%#-+2.5lf : +8127.53400
+%#-+2.10lf : +8127.5340000000
+%#-+2.30lf : +8127.533999999999650754030000000000
+%#-+5lf : +8127.534000
+%#-+5.lf : +8128.
+%#-+5.0lf : +8128.
+%#-+5.1lf : +8127.5
+%#-+5.2lf : +8127.53
+%#-+5.5lf : +8127.53400
+%#-+5.10lf : +8127.5340000000
+%#-+5.30lf : +8127.533999999999650754030000000000
+%#-+10lf : +8127.534000
+%#-+10.lf : +8128.
+%#-+10.0lf : +8128.
+%#-+10.1lf : +8127.5
+%#-+10.2lf : +8127.53
+%#-+10.5lf : +8127.53400
+%#-+10.10lf : +8127.5340000000
+%#-+10.30lf : +8127.533999999999650754030000000000
+%#-+30lf : +8127.534000
+%#-+30.lf : +8128.
+%#-+30.0lf : +8128.
+%#-+30.1lf : +8127.5
+%#-+30.2lf : +8127.53
+%#-+30.5lf : +8127.53400
+%#-+30.10lf : +8127.5340000000
+%#-+30.30lf : +8127.533999999999650754030000000000
+%+#-lf : +8127.534000
+%+#-.lf : +8128.
+%+#-.0lf : +8128.
+%+#-.1lf : +8127.5
+%+#-.2lf : +8127.53
+%+#-.5lf : +8127.53400
+%+#-.10lf : +8127.5340000000
+%+#-.30lf : +8127.533999999999650754030000000000
+%+#-1lf : +8127.534000
+%+#-1.lf : +8128.
+%+#-1.0lf : +8128.
+%+#-1.1lf : +8127.5
+%+#-1.2lf : +8127.53
+%+#-1.5lf : +8127.53400
+%+#-1.10lf : +8127.5340000000
+%+#-1.30lf : +8127.533999999999650754030000000000
+%+#-2lf : +8127.534000
+%+#-2.lf : +8128.
+%+#-2.0lf : +8128.
+%+#-2.1lf : +8127.5
+%+#-2.2lf : +8127.53
+%+#-2.5lf : +8127.53400
+%+#-2.10lf : +8127.5340000000
+%+#-2.30lf : +8127.533999999999650754030000000000
+%+#-5lf : +8127.534000
+%+#-5.lf : +8128.
+%+#-5.0lf : +8128.
+%+#-5.1lf : +8127.5
+%+#-5.2lf : +8127.53
+%+#-5.5lf : +8127.53400
+%+#-5.10lf : +8127.5340000000
+%+#-5.30lf : +8127.533999999999650754030000000000
+%+#-10lf : +8127.534000
+%+#-10.lf : +8128.
+%+#-10.0lf : +8128.
+%+#-10.1lf : +8127.5
+%+#-10.2lf : +8127.53
+%+#-10.5lf : +8127.53400
+%+#-10.10lf : +8127.5340000000
+%+#-10.30lf : +8127.533999999999650754030000000000
+%+#-30lf : +8127.534000
+%+#-30.lf : +8128.
+%+#-30.0lf : +8128.
+%+#-30.1lf : +8127.5
+%+#-30.2lf : +8127.53
+%+#-30.5lf : +8127.53400
+%+#-30.10lf : +8127.5340000000
+%+#-30.30lf : +8127.533999999999650754030000000000
+%+F : +8127.534180
+%+.F : +8128
+%+.0F : +8128
+%+.1F : +8127.5
+%+.2F : +8127.53
+%+.5F : +8127.53418
+%+.10F : +8127.5341796875
+%+.30F : +8127.534179687500000000000000000000
+%+0F : +8127.534180
+%+0.F : +8128
+%+0.0F : +8128
+%+0.1F : +8127.5
+%+0.2F : +8127.53
+%+0.5F : +8127.53418
+%+0.10F : +8127.5341796875
+%+0.30F : +8127.534179687500000000000000000000
+%+1F : +8127.534180
+%+1.F : +8128
+%+1.0F : +8128
+%+1.1F : +8127.5
+%+1.2F : +8127.53
+%+1.5F : +8127.53418
+%+1.10F : +8127.5341796875
+%+1.30F : +8127.534179687500000000000000000000
+%+2F : +8127.534180
+%+2.F : +8128
+%+2.0F : +8128
+%+2.1F : +8127.5
+%+2.2F : +8127.53
+%+2.5F : +8127.53418
+%+2.10F : +8127.5341796875
+%+2.30F : +8127.534179687500000000000000000000
+%+5F : +8127.534180
+%+5.F : +8128
+%+5.0F : +8128
+%+5.1F : +8127.5
+%+5.2F : +8127.53
+%+5.5F : +8127.53418
+%+5.10F : +8127.5341796875
+%+5.30F : +8127.534179687500000000000000000000
+%+10F : +8127.534180
+%+10.F : +8128
+%+10.0F : +8128
+%+10.1F : +8127.5
+%+10.2F : +8127.53
+%+10.5F : +8127.53418
+%+10.10F : +8127.5341796875
+%+10.30F : +8127.534179687500000000000000000000
+%+30F : +8127.534180
+%+30.F : +8128
+%+30.0F : +8128
+%+30.1F : +8127.5
+%+30.2F : +8127.53
+%+30.5F : +8127.53418
+%+30.10F : +8127.5341796875
+%+30.30F : +8127.534179687500000000000000000000
+%-F : 8127.534180
+%-.F : 8128
+%-.0F : 8128
+%-.1F : 8127.5
+%-.2F : 8127.53
+%-.5F : 8127.53418
+%-.10F : 8127.5341796875
+%-.30F : 8127.534179687500000000000000000000
+%-1F : 8127.534180
+%-1.F : 8128
+%-1.0F : 8128
+%-1.1F : 8127.5
+%-1.2F : 8127.53
+%-1.5F : 8127.53418
+%-1.10F : 8127.5341796875
+%-1.30F : 8127.534179687500000000000000000000
+%-2F : 8127.534180
+%-2.F : 8128
+%-2.0F : 8128
+%-2.1F : 8127.5
+%-2.2F : 8127.53
+%-2.5F : 8127.53418
+%-2.10F : 8127.5341796875
+%-2.30F : 8127.534179687500000000000000000000
+%-5F : 8127.534180
+%-5.F : 8128
+%-5.0F : 8128
+%-5.1F : 8127.5
+%-5.2F : 8127.53
+%-5.5F : 8127.53418
+%-5.10F : 8127.5341796875
+%-5.30F : 8127.534179687500000000000000000000
+%-10F : 8127.534180
+%-10.F : 8128
+%-10.0F : 8128
+%-10.1F : 8127.5
+%-10.2F : 8127.53
+%-10.5F : 8127.53418
+%-10.10F : 8127.5341796875
+%-10.30F : 8127.534179687500000000000000000000
+%-30F : 8127.534180
+%-30.F : 8128
+%-30.0F : 8128
+%-30.1F : 8127.5
+%-30.2F : 8127.53
+%-30.5F : 8127.53418
+%-30.10F : 8127.5341796875
+%-30.30F : 8127.534179687500000000000000000000
+%#F : 8127.534180
+%#.F : 8128.
+%#.0F : 8128.
+%#.1F : 8127.5
+%#.2F : 8127.53
+%#.5F : 8127.53418
+%#.10F : 8127.5341796875
+%#.30F : 8127.534179687500000000000000000000
+%#0F : 8127.534180
+%#0.F : 8128.
+%#0.0F : 8128.
+%#0.1F : 8127.5
+%#0.2F : 8127.53
+%#0.5F : 8127.53418
+%#0.10F : 8127.5341796875
+%#0.30F : 8127.534179687500000000000000000000
+%#1F : 8127.534180
+%#1.F : 8128.
+%#1.0F : 8128.
+%#1.1F : 8127.5
+%#1.2F : 8127.53
+%#1.5F : 8127.53418
+%#1.10F : 8127.5341796875
+%#1.30F : 8127.534179687500000000000000000000
+%#2F : 8127.534180
+%#2.F : 8128.
+%#2.0F : 8128.
+%#2.1F : 8127.5
+%#2.2F : 8127.53
+%#2.5F : 8127.53418
+%#2.10F : 8127.5341796875
+%#2.30F : 8127.534179687500000000000000000000
+%#5F : 8127.534180
+%#5.F : 8128.
+%#5.0F : 8128.
+%#5.1F : 8127.5
+%#5.2F : 8127.53
+%#5.5F : 8127.53418
+%#5.10F : 8127.5341796875
+%#5.30F : 8127.534179687500000000000000000000
+%#10F : 8127.534180
+%#10.F : 8128.
+%#10.0F : 8128.
+%#10.1F : 8127.5
+%#10.2F : 8127.53
+%#10.5F : 8127.53418
+%#10.10F : 8127.5341796875
+%#10.30F : 8127.534179687500000000000000000000
+%#30F : 8127.534180
+%#30.F : 8128.
+%#30.0F : 8128.
+%#30.1F : 8127.5
+%#30.2F : 8127.53
+%#30.5F : 8127.53418
+%#30.10F : 8127.5341796875
+%#30.30F : 8127.534179687500000000000000000000
+%0F : 8127.534180
+%0.F : 8128
+%0.0F : 8128
+%0.1F : 8127.5
+%0.2F : 8127.53
+%0.5F : 8127.53418
+%0.10F : 8127.5341796875
+%0.30F : 8127.534179687500000000000000000000
+%01F : 8127.534180
+%01.F : 8128
+%01.0F : 8128
+%01.1F : 8127.5
+%01.2F : 8127.53
+%01.5F : 8127.53418
+%01.10F : 8127.5341796875
+%01.30F : 8127.534179687500000000000000000000
+%02F : 8127.534180
+%02.F : 8128
+%02.0F : 8128
+%02.1F : 8127.5
+%02.2F : 8127.53
+%02.5F : 8127.53418
+%02.10F : 8127.5341796875
+%02.30F : 8127.534179687500000000000000000000
+%05F : 8127.534180
+%05.F : 08128
+%05.0F : 08128
+%05.1F : 8127.5
+%05.2F : 8127.53
+%05.5F : 8127.53418
+%05.10F : 8127.5341796875
+%05.30F : 8127.534179687500000000000000000000
+%010F : 8127.534180
+%010.F : 0000008128
+%010.0F : 0000008128
+%010.1F : 00008127.5
+%010.2F : 0008127.53
+%010.5F : 8127.53418
+%010.10F : 8127.5341796875
+%010.30F : 8127.534179687500000000000000000000
+%030F : 00000000000000000008127.534180
+%030.F : 000000000000000000000000008128
+%030.0F : 000000000000000000000000008128
+%030.1F : 0000000000000000000000008127.5
+%030.2F : 000000000000000000000008127.53
+%030.5F : 000000000000000000008127.53418
+%030.10F : 0000000000000008127.5341796875
+%030.30F : 8127.534179687500000000000000000000
+%-+F : +8127.534180
+%-+.F : +8128
+%-+.0F : +8128
+%-+.1F : +8127.5
+%-+.2F : +8127.53
+%-+.5F : +8127.53418
+%-+.10F : +8127.5341796875
+%-+.30F : +8127.534179687500000000000000000000
+%-+1F : +8127.534180
+%-+1.F : +8128
+%-+1.0F : +8128
+%-+1.1F : +8127.5
+%-+1.2F : +8127.53
+%-+1.5F : +8127.53418
+%-+1.10F : +8127.5341796875
+%-+1.30F : +8127.534179687500000000000000000000
+%-+2F : +8127.534180
+%-+2.F : +8128
+%-+2.0F : +8128
+%-+2.1F : +8127.5
+%-+2.2F : +8127.53
+%-+2.5F : +8127.53418
+%-+2.10F : +8127.5341796875
+%-+2.30F : +8127.534179687500000000000000000000
+%-+5F : +8127.534180
+%-+5.F : +8128
+%-+5.0F : +8128
+%-+5.1F : +8127.5
+%-+5.2F : +8127.53
+%-+5.5F : +8127.53418
+%-+5.10F : +8127.5341796875
+%-+5.30F : +8127.534179687500000000000000000000
+%-+10F : +8127.534180
+%-+10.F : +8128
+%-+10.0F : +8128
+%-+10.1F : +8127.5
+%-+10.2F : +8127.53
+%-+10.5F : +8127.53418
+%-+10.10F : +8127.5341796875
+%-+10.30F : +8127.534179687500000000000000000000
+%-+30F : +8127.534180
+%-+30.F : +8128
+%-+30.0F : +8128
+%-+30.1F : +8127.5
+%-+30.2F : +8127.53
+%-+30.5F : +8127.53418
+%-+30.10F : +8127.5341796875
+%-+30.30F : +8127.534179687500000000000000000000
+%#+F : +8127.534180
+%#+.F : +8128.
+%#+.0F : +8128.
+%#+.1F : +8127.5
+%#+.2F : +8127.53
+%#+.5F : +8127.53418
+%#+.10F : +8127.5341796875
+%#+.30F : +8127.534179687500000000000000000000
+%#+0F : +8127.534180
+%#+0.F : +8128.
+%#+0.0F : +8128.
+%#+0.1F : +8127.5
+%#+0.2F : +8127.53
+%#+0.5F : +8127.53418
+%#+0.10F : +8127.5341796875
+%#+0.30F : +8127.534179687500000000000000000000
+%#+1F : +8127.534180
+%#+1.F : +8128.
+%#+1.0F : +8128.
+%#+1.1F : +8127.5
+%#+1.2F : +8127.53
+%#+1.5F : +8127.53418
+%#+1.10F : +8127.5341796875
+%#+1.30F : +8127.534179687500000000000000000000
+%#+2F : +8127.534180
+%#+2.F : +8128.
+%#+2.0F : +8128.
+%#+2.1F : +8127.5
+%#+2.2F : +8127.53
+%#+2.5F : +8127.53418
+%#+2.10F : +8127.5341796875
+%#+2.30F : +8127.534179687500000000000000000000
+%#+5F : +8127.534180
+%#+5.F : +8128.
+%#+5.0F : +8128.
+%#+5.1F : +8127.5
+%#+5.2F : +8127.53
+%#+5.5F : +8127.53418
+%#+5.10F : +8127.5341796875
+%#+5.30F : +8127.534179687500000000000000000000
+%#+10F : +8127.534180
+%#+10.F : +8128.
+%#+10.0F : +8128.
+%#+10.1F : +8127.5
+%#+10.2F : +8127.53
+%#+10.5F : +8127.53418
+%#+10.10F : +8127.5341796875
+%#+10.30F : +8127.534179687500000000000000000000
+%#+30F : +8127.534180
+%#+30.F : +8128.
+%#+30.0F : +8128.
+%#+30.1F : +8127.5
+%#+30.2F : +8127.53
+%#+30.5F : +8127.53418
+%#+30.10F : +8127.5341796875
+%#+30.30F : +8127.534179687500000000000000000000
+%+0F : +8127.534180
+%+0.F : +8128
+%+0.0F : +8128
+%+0.1F : +8127.5
+%+0.2F : +8127.53
+%+0.5F : +8127.53418
+%+0.10F : +8127.5341796875
+%+0.30F : +8127.534179687500000000000000000000
+%+01F : +8127.534180
+%+01.F : +8128
+%+01.0F : +8128
+%+01.1F : +8127.5
+%+01.2F : +8127.53
+%+01.5F : +8127.53418
+%+01.10F : +8127.5341796875
+%+01.30F : +8127.534179687500000000000000000000
+%+02F : +8127.534180
+%+02.F : +8128
+%+02.0F : +8128
+%+02.1F : +8127.5
+%+02.2F : +8127.53
+%+02.5F : +8127.53418
+%+02.10F : +8127.5341796875
+%+02.30F : +8127.534179687500000000000000000000
+%+05F : +8127.534180
+%+05.F : +8128
+%+05.0F : +8128
+%+05.1F : +8127.5
+%+05.2F : +8127.53
+%+05.5F : +8127.53418
+%+05.10F : +8127.5341796875
+%+05.30F : +8127.534179687500000000000000000000
+%+010F : +8127.534180
+%+010.F : +000008128
+%+010.0F : +000008128
+%+010.1F : +0008127.5
+%+010.2F : +008127.53
+%+010.5F : +8127.53418
+%+010.10F : +8127.5341796875
+%+010.30F : +8127.534179687500000000000000000000
+%+030F : +0000000000000000008127.534180
+%+030.F : +00000000000000000000000008128
+%+030.0F : +00000000000000000000000008128
+%+030.1F : +000000000000000000000008127.5
+%+030.2F : +00000000000000000000008127.53
+%+030.5F : +00000000000000000008127.53418
+%+030.10F : +000000000000008127.5341796875
+%+030.30F : +8127.534179687500000000000000000000
+%+-F : +8127.534180
+%+-.F : +8128
+%+-.0F : +8128
+%+-.1F : +8127.5
+%+-.2F : +8127.53
+%+-.5F : +8127.53418
+%+-.10F : +8127.5341796875
+%+-.30F : +8127.534179687500000000000000000000
+%+-1F : +8127.534180
+%+-1.F : +8128
+%+-1.0F : +8128
+%+-1.1F : +8127.5
+%+-1.2F : +8127.53
+%+-1.5F : +8127.53418
+%+-1.10F : +8127.5341796875
+%+-1.30F : +8127.534179687500000000000000000000
+%+-2F : +8127.534180
+%+-2.F : +8128
+%+-2.0F : +8128
+%+-2.1F : +8127.5
+%+-2.2F : +8127.53
+%+-2.5F : +8127.53418
+%+-2.10F : +8127.5341796875
+%+-2.30F : +8127.534179687500000000000000000000
+%+-5F : +8127.534180
+%+-5.F : +8128
+%+-5.0F : +8128
+%+-5.1F : +8127.5
+%+-5.2F : +8127.53
+%+-5.5F : +8127.53418
+%+-5.10F : +8127.5341796875
+%+-5.30F : +8127.534179687500000000000000000000
+%+-10F : +8127.534180
+%+-10.F : +8128
+%+-10.0F : +8128
+%+-10.1F : +8127.5
+%+-10.2F : +8127.53
+%+-10.5F : +8127.53418
+%+-10.10F : +8127.5341796875
+%+-10.30F : +8127.534179687500000000000000000000
+%+-30F : +8127.534180
+%+-30.F : +8128
+%+-30.0F : +8128
+%+-30.1F : +8127.5
+%+-30.2F : +8127.53
+%+-30.5F : +8127.53418
+%+-30.10F : +8127.5341796875
+%+-30.30F : +8127.534179687500000000000000000000
+%#-F : 8127.534180
+%#-.F : 8128.
+%#-.0F : 8128.
+%#-.1F : 8127.5
+%#-.2F : 8127.53
+%#-.5F : 8127.53418
+%#-.10F : 8127.5341796875
+%#-.30F : 8127.534179687500000000000000000000
+%#-1F : 8127.534180
+%#-1.F : 8128.
+%#-1.0F : 8128.
+%#-1.1F : 8127.5
+%#-1.2F : 8127.53
+%#-1.5F : 8127.53418
+%#-1.10F : 8127.5341796875
+%#-1.30F : 8127.534179687500000000000000000000
+%#-2F : 8127.534180
+%#-2.F : 8128.
+%#-2.0F : 8128.
+%#-2.1F : 8127.5
+%#-2.2F : 8127.53
+%#-2.5F : 8127.53418
+%#-2.10F : 8127.5341796875
+%#-2.30F : 8127.534179687500000000000000000000
+%#-5F : 8127.534180
+%#-5.F : 8128.
+%#-5.0F : 8128.
+%#-5.1F : 8127.5
+%#-5.2F : 8127.53
+%#-5.5F : 8127.53418
+%#-5.10F : 8127.5341796875
+%#-5.30F : 8127.534179687500000000000000000000
+%#-10F : 8127.534180
+%#-10.F : 8128.
+%#-10.0F : 8128.
+%#-10.1F : 8127.5
+%#-10.2F : 8127.53
+%#-10.5F : 8127.53418
+%#-10.10F : 8127.5341796875
+%#-10.30F : 8127.534179687500000000000000000000
+%#-30F : 8127.534180
+%#-30.F : 8128.
+%#-30.0F : 8128.
+%#-30.1F : 8127.5
+%#-30.2F : 8127.53
+%#-30.5F : 8127.53418
+%#-30.10F : 8127.5341796875
+%#-30.30F : 8127.534179687500000000000000000000
+%+#F : +8127.534180
+%+#.F : +8128.
+%+#.0F : +8128.
+%+#.1F : +8127.5
+%+#.2F : +8127.53
+%+#.5F : +8127.53418
+%+#.10F : +8127.5341796875
+%+#.30F : +8127.534179687500000000000000000000
+%+#0F : +8127.534180
+%+#0.F : +8128.
+%+#0.0F : +8128.
+%+#0.1F : +8127.5
+%+#0.2F : +8127.53
+%+#0.5F : +8127.53418
+%+#0.10F : +8127.5341796875
+%+#0.30F : +8127.534179687500000000000000000000
+%+#1F : +8127.534180
+%+#1.F : +8128.
+%+#1.0F : +8128.
+%+#1.1F : +8127.5
+%+#1.2F : +8127.53
+%+#1.5F : +8127.53418
+%+#1.10F : +8127.5341796875
+%+#1.30F : +8127.534179687500000000000000000000
+%+#2F : +8127.534180
+%+#2.F : +8128.
+%+#2.0F : +8128.
+%+#2.1F : +8127.5
+%+#2.2F : +8127.53
+%+#2.5F : +8127.53418
+%+#2.10F : +8127.5341796875
+%+#2.30F : +8127.534179687500000000000000000000
+%+#5F : +8127.534180
+%+#5.F : +8128.
+%+#5.0F : +8128.
+%+#5.1F : +8127.5
+%+#5.2F : +8127.53
+%+#5.5F : +8127.53418
+%+#5.10F : +8127.5341796875
+%+#5.30F : +8127.534179687500000000000000000000
+%+#10F : +8127.534180
+%+#10.F : +8128.
+%+#10.0F : +8128.
+%+#10.1F : +8127.5
+%+#10.2F : +8127.53
+%+#10.5F : +8127.53418
+%+#10.10F : +8127.5341796875
+%+#10.30F : +8127.534179687500000000000000000000
+%+#30F : +8127.534180
+%+#30.F : +8128.
+%+#30.0F : +8128.
+%+#30.1F : +8127.5
+%+#30.2F : +8127.53
+%+#30.5F : +8127.53418
+%+#30.10F : +8127.5341796875
+%+#30.30F : +8127.534179687500000000000000000000
+%-#F : 8127.534180
+%-#.F : 8128.
+%-#.0F : 8128.
+%-#.1F : 8127.5
+%-#.2F : 8127.53
+%-#.5F : 8127.53418
+%-#.10F : 8127.5341796875
+%-#.30F : 8127.534179687500000000000000000000
+%-#1F : 8127.534180
+%-#1.F : 8128.
+%-#1.0F : 8128.
+%-#1.1F : 8127.5
+%-#1.2F : 8127.53
+%-#1.5F : 8127.53418
+%-#1.10F : 8127.5341796875
+%-#1.30F : 8127.534179687500000000000000000000
+%-#2F : 8127.534180
+%-#2.F : 8128.
+%-#2.0F : 8128.
+%-#2.1F : 8127.5
+%-#2.2F : 8127.53
+%-#2.5F : 8127.53418
+%-#2.10F : 8127.5341796875
+%-#2.30F : 8127.534179687500000000000000000000
+%-#5F : 8127.534180
+%-#5.F : 8128.
+%-#5.0F : 8128.
+%-#5.1F : 8127.5
+%-#5.2F : 8127.53
+%-#5.5F : 8127.53418
+%-#5.10F : 8127.5341796875
+%-#5.30F : 8127.534179687500000000000000000000
+%-#10F : 8127.534180
+%-#10.F : 8128.
+%-#10.0F : 8128.
+%-#10.1F : 8127.5
+%-#10.2F : 8127.53
+%-#10.5F : 8127.53418
+%-#10.10F : 8127.5341796875
+%-#10.30F : 8127.534179687500000000000000000000
+%-#30F : 8127.534180
+%-#30.F : 8128.
+%-#30.0F : 8128.
+%-#30.1F : 8127.5
+%-#30.2F : 8127.53
+%-#30.5F : 8127.53418
+%-#30.10F : 8127.5341796875
+%-#30.30F : 8127.534179687500000000000000000000
+%0#F : 8127.534180
+%0#.F : 8128.
+%0#.0F : 8128.
+%0#.1F : 8127.5
+%0#.2F : 8127.53
+%0#.5F : 8127.53418
+%0#.10F : 8127.5341796875
+%0#.30F : 8127.534179687500000000000000000000
+%0#1F : 8127.534180
+%0#1.F : 8128.
+%0#1.0F : 8128.
+%0#1.1F : 8127.5
+%0#1.2F : 8127.53
+%0#1.5F : 8127.53418
+%0#1.10F : 8127.5341796875
+%0#1.30F : 8127.534179687500000000000000000000
+%0#2F : 8127.534180
+%0#2.F : 8128.
+%0#2.0F : 8128.
+%0#2.1F : 8127.5
+%0#2.2F : 8127.53
+%0#2.5F : 8127.53418
+%0#2.10F : 8127.5341796875
+%0#2.30F : 8127.534179687500000000000000000000
+%0#5F : 8127.534180
+%0#5.F : 8128.
+%0#5.0F : 8128.
+%0#5.1F : 8127.5
+%0#5.2F : 8127.53
+%0#5.5F : 8127.53418
+%0#5.10F : 8127.5341796875
+%0#5.30F : 8127.534179687500000000000000000000
+%0#10F : 8127.534180
+%0#10.F : 000008128.
+%0#10.0F : 000008128.
+%0#10.1F : 00008127.5
+%0#10.2F : 0008127.53
+%0#10.5F : 8127.53418
+%0#10.10F : 8127.5341796875
+%0#10.30F : 8127.534179687500000000000000000000
+%0#30F : 00000000000000000008127.534180
+%0#30.F : 00000000000000000000000008128.
+%0#30.0F : 00000000000000000000000008128.
+%0#30.1F : 0000000000000000000000008127.5
+%0#30.2F : 000000000000000000000008127.53
+%0#30.5F : 000000000000000000008127.53418
+%0#30.10F : 0000000000000008127.5341796875
+%0#30.30F : 8127.534179687500000000000000000000
+%+0F : +8127.534180
+%+0.F : +8128
+%+0.0F : +8128
+%+0.1F : +8127.5
+%+0.2F : +8127.53
+%+0.5F : +8127.53418
+%+0.10F : +8127.5341796875
+%+0.30F : +8127.534179687500000000000000000000
+%+01F : +8127.534180
+%+01.F : +8128
+%+01.0F : +8128
+%+01.1F : +8127.5
+%+01.2F : +8127.53
+%+01.5F : +8127.53418
+%+01.10F : +8127.5341796875
+%+01.30F : +8127.534179687500000000000000000000
+%+02F : +8127.534180
+%+02.F : +8128
+%+02.0F : +8128
+%+02.1F : +8127.5
+%+02.2F : +8127.53
+%+02.5F : +8127.53418
+%+02.10F : +8127.5341796875
+%+02.30F : +8127.534179687500000000000000000000
+%+05F : +8127.534180
+%+05.F : +8128
+%+05.0F : +8128
+%+05.1F : +8127.5
+%+05.2F : +8127.53
+%+05.5F : +8127.53418
+%+05.10F : +8127.5341796875
+%+05.30F : +8127.534179687500000000000000000000
+%+010F : +8127.534180
+%+010.F : +000008128
+%+010.0F : +000008128
+%+010.1F : +0008127.5
+%+010.2F : +008127.53
+%+010.5F : +8127.53418
+%+010.10F : +8127.5341796875
+%+010.30F : +8127.534179687500000000000000000000
+%+030F : +0000000000000000008127.534180
+%+030.F : +00000000000000000000000008128
+%+030.0F : +00000000000000000000000008128
+%+030.1F : +000000000000000000000008127.5
+%+030.2F : +00000000000000000000008127.53
+%+030.5F : +00000000000000000008127.53418
+%+030.10F : +000000000000008127.5341796875
+%+030.30F : +8127.534179687500000000000000000000
+%#0F : 8127.534180
+%#0.F : 8128.
+%#0.0F : 8128.
+%#0.1F : 8127.5
+%#0.2F : 8127.53
+%#0.5F : 8127.53418
+%#0.10F : 8127.5341796875
+%#0.30F : 8127.534179687500000000000000000000
+%#01F : 8127.534180
+%#01.F : 8128.
+%#01.0F : 8128.
+%#01.1F : 8127.5
+%#01.2F : 8127.53
+%#01.5F : 8127.53418
+%#01.10F : 8127.5341796875
+%#01.30F : 8127.534179687500000000000000000000
+%#02F : 8127.534180
+%#02.F : 8128.
+%#02.0F : 8128.
+%#02.1F : 8127.5
+%#02.2F : 8127.53
+%#02.5F : 8127.53418
+%#02.10F : 8127.5341796875
+%#02.30F : 8127.534179687500000000000000000000
+%#05F : 8127.534180
+%#05.F : 8128.
+%#05.0F : 8128.
+%#05.1F : 8127.5
+%#05.2F : 8127.53
+%#05.5F : 8127.53418
+%#05.10F : 8127.5341796875
+%#05.30F : 8127.534179687500000000000000000000
+%#010F : 8127.534180
+%#010.F : 000008128.
+%#010.0F : 000008128.
+%#010.1F : 00008127.5
+%#010.2F : 0008127.53
+%#010.5F : 8127.53418
+%#010.10F : 8127.5341796875
+%#010.30F : 8127.534179687500000000000000000000
+%#030F : 00000000000000000008127.534180
+%#030.F : 00000000000000000000000008128.
+%#030.0F : 00000000000000000000000008128.
+%#030.1F : 0000000000000000000000008127.5
+%#030.2F : 000000000000000000000008127.53
+%#030.5F : 000000000000000000008127.53418
+%#030.10F : 0000000000000008127.5341796875
+%#030.30F : 8127.534179687500000000000000000000
+%-+#F : +8127.534180
+%-+#.F : +8128.
+%-+#.0F : +8128.
+%-+#.1F : +8127.5
+%-+#.2F : +8127.53
+%-+#.5F : +8127.53418
+%-+#.10F : +8127.5341796875
+%-+#.30F : +8127.534179687500000000000000000000
+%-+#1F : +8127.534180
+%-+#1.F : +8128.
+%-+#1.0F : +8128.
+%-+#1.1F : +8127.5
+%-+#1.2F : +8127.53
+%-+#1.5F : +8127.53418
+%-+#1.10F : +8127.5341796875
+%-+#1.30F : +8127.534179687500000000000000000000
+%-+#2F : +8127.534180
+%-+#2.F : +8128.
+%-+#2.0F : +8128.
+%-+#2.1F : +8127.5
+%-+#2.2F : +8127.53
+%-+#2.5F : +8127.53418
+%-+#2.10F : +8127.5341796875
+%-+#2.30F : +8127.534179687500000000000000000000
+%-+#5F : +8127.534180
+%-+#5.F : +8128.
+%-+#5.0F : +8128.
+%-+#5.1F : +8127.5
+%-+#5.2F : +8127.53
+%-+#5.5F : +8127.53418
+%-+#5.10F : +8127.5341796875
+%-+#5.30F : +8127.534179687500000000000000000000
+%-+#10F : +8127.534180
+%-+#10.F : +8128.
+%-+#10.0F : +8128.
+%-+#10.1F : +8127.5
+%-+#10.2F : +8127.53
+%-+#10.5F : +8127.53418
+%-+#10.10F : +8127.5341796875
+%-+#10.30F : +8127.534179687500000000000000000000
+%-+#30F : +8127.534180
+%-+#30.F : +8128.
+%-+#30.0F : +8128.
+%-+#30.1F : +8127.5
+%-+#30.2F : +8127.53
+%-+#30.5F : +8127.53418
+%-+#30.10F : +8127.5341796875
+%-+#30.30F : +8127.534179687500000000000000000000
+%0+#F : +8127.534180
+%0+#.F : +8128.
+%0+#.0F : +8128.
+%0+#.1F : +8127.5
+%0+#.2F : +8127.53
+%0+#.5F : +8127.53418
+%0+#.10F : +8127.5341796875
+%0+#.30F : +8127.534179687500000000000000000000
+%0+#1F : +8127.534180
+%0+#1.F : +8128.
+%0+#1.0F : +8128.
+%0+#1.1F : +8127.5
+%0+#1.2F : +8127.53
+%0+#1.5F : +8127.53418
+%0+#1.10F : +8127.5341796875
+%0+#1.30F : +8127.534179687500000000000000000000
+%0+#2F : +8127.534180
+%0+#2.F : +8128.
+%0+#2.0F : +8128.
+%0+#2.1F : +8127.5
+%0+#2.2F : +8127.53
+%0+#2.5F : +8127.53418
+%0+#2.10F : +8127.5341796875
+%0+#2.30F : +8127.534179687500000000000000000000
+%0+#5F : +8127.534180
+%0+#5.F : +8128.
+%0+#5.0F : +8128.
+%0+#5.1F : +8127.5
+%0+#5.2F : +8127.53
+%0+#5.5F : +8127.53418
+%0+#5.10F : +8127.5341796875
+%0+#5.30F : +8127.534179687500000000000000000000
+%0+#10F : +8127.534180
+%0+#10.F : +00008128.
+%0+#10.0F : +00008128.
+%0+#10.1F : +0008127.5
+%0+#10.2F : +008127.53
+%0+#10.5F : +8127.53418
+%0+#10.10F : +8127.5341796875
+%0+#10.30F : +8127.534179687500000000000000000000
+%0+#30F : +0000000000000000008127.534180
+%0+#30.F : +0000000000000000000000008128.
+%0+#30.0F : +0000000000000000000000008128.
+%0+#30.1F : +000000000000000000000008127.5
+%0+#30.2F : +00000000000000000000008127.53
+%0+#30.5F : +00000000000000000008127.53418
+%0+#30.10F : +000000000000008127.5341796875
+%0+#30.30F : +8127.534179687500000000000000000000
+%#-+F : +8127.534180
+%#-+.F : +8128.
+%#-+.0F : +8128.
+%#-+.1F : +8127.5
+%#-+.2F : +8127.53
+%#-+.5F : +8127.53418
+%#-+.10F : +8127.5341796875
+%#-+.30F : +8127.534179687500000000000000000000
+%#-+1F : +8127.534180
+%#-+1.F : +8128.
+%#-+1.0F : +8128.
+%#-+1.1F : +8127.5
+%#-+1.2F : +8127.53
+%#-+1.5F : +8127.53418
+%#-+1.10F : +8127.5341796875
+%#-+1.30F : +8127.534179687500000000000000000000
+%#-+2F : +8127.534180
+%#-+2.F : +8128.
+%#-+2.0F : +8128.
+%#-+2.1F : +8127.5
+%#-+2.2F : +8127.53
+%#-+2.5F : +8127.53418
+%#-+2.10F : +8127.5341796875
+%#-+2.30F : +8127.534179687500000000000000000000
+%#-+5F : +8127.534180
+%#-+5.F : +8128.
+%#-+5.0F : +8128.
+%#-+5.1F : +8127.5
+%#-+5.2F : +8127.53
+%#-+5.5F : +8127.53418
+%#-+5.10F : +8127.5341796875
+%#-+5.30F : +8127.534179687500000000000000000000
+%#-+10F : +8127.534180
+%#-+10.F : +8128.
+%#-+10.0F : +8128.
+%#-+10.1F : +8127.5
+%#-+10.2F : +8127.53
+%#-+10.5F : +8127.53418
+%#-+10.10F : +8127.5341796875
+%#-+10.30F : +8127.534179687500000000000000000000
+%#-+30F : +8127.534180
+%#-+30.F : +8128.
+%#-+30.0F : +8128.
+%#-+30.1F : +8127.5
+%#-+30.2F : +8127.53
+%#-+30.5F : +8127.53418
+%#-+30.10F : +8127.5341796875
+%#-+30.30F : +8127.534179687500000000000000000000
+%+#-F : +8127.534180
+%+#-.F : +8128.
+%+#-.0F : +8128.
+%+#-.1F : +8127.5
+%+#-.2F : +8127.53
+%+#-.5F : +8127.53418
+%+#-.10F : +8127.5341796875
+%+#-.30F : +8127.534179687500000000000000000000
+%+#-1F : +8127.534180
+%+#-1.F : +8128.
+%+#-1.0F : +8128.
+%+#-1.1F : +8127.5
+%+#-1.2F : +8127.53
+%+#-1.5F : +8127.53418
+%+#-1.10F : +8127.5341796875
+%+#-1.30F : +8127.534179687500000000000000000000
+%+#-2F : +8127.534180
+%+#-2.F : +8128.
+%+#-2.0F : +8128.
+%+#-2.1F : +8127.5
+%+#-2.2F : +8127.53
+%+#-2.5F : +8127.53418
+%+#-2.10F : +8127.5341796875
+%+#-2.30F : +8127.534179687500000000000000000000
+%+#-5F : +8127.534180
+%+#-5.F : +8128.
+%+#-5.0F : +8128.
+%+#-5.1F : +8127.5
+%+#-5.2F : +8127.53
+%+#-5.5F : +8127.53418
+%+#-5.10F : +8127.5341796875
+%+#-5.30F : +8127.534179687500000000000000000000
+%+#-10F : +8127.534180
+%+#-10.F : +8128.
+%+#-10.0F : +8128.
+%+#-10.1F : +8127.5
+%+#-10.2F : +8127.53
+%+#-10.5F : +8127.53418
+%+#-10.10F : +8127.5341796875
+%+#-10.30F : +8127.534179687500000000000000000000
+%+#-30F : +8127.534180
+%+#-30.F : +8128.
+%+#-30.0F : +8128.
+%+#-30.1F : +8127.5
+%+#-30.2F : +8127.53
+%+#-30.5F : +8127.53418
+%+#-30.10F : +8127.5341796875
+%+#-30.30F : +8127.534179687500000000000000000000
+%+e : +8.127534e+03
+%+.e : +8e+03
+%+.0e : +8e+03
+%+.1e : +8.1e+03
+%+.2e : +8.13e+03
+%+.5e : +8.12753e+03
+%+.10e : +8.1275341797e+03
+%+.30e : +8.127534179687500000000000000000e+03
+%+0e : +8.127534e+03
+%+0.e : +8e+03
+%+0.0e : +8e+03
+%+0.1e : +8.1e+03
+%+0.2e : +8.13e+03
+%+0.5e : +8.12753e+03
+%+0.10e : +8.1275341797e+03
+%+0.30e : +8.127534179687500000000000000000e+03
+%+1e : +8.127534e+03
+%+1.e : +8e+03
+%+1.0e : +8e+03
+%+1.1e : +8.1e+03
+%+1.2e : +8.13e+03
+%+1.5e : +8.12753e+03
+%+1.10e : +8.1275341797e+03
+%+1.30e : +8.127534179687500000000000000000e+03
+%+2e : +8.127534e+03
+%+2.e : +8e+03
+%+2.0e : +8e+03
+%+2.1e : +8.1e+03
+%+2.2e : +8.13e+03
+%+2.5e : +8.12753e+03
+%+2.10e : +8.1275341797e+03
+%+2.30e : +8.127534179687500000000000000000e+03
+%+5e : +8.127534e+03
+%+5.e : +8e+03
+%+5.0e : +8e+03
+%+5.1e : +8.1e+03
+%+5.2e : +8.13e+03
+%+5.5e : +8.12753e+03
+%+5.10e : +8.1275341797e+03
+%+5.30e : +8.127534179687500000000000000000e+03
+%+10e : +8.127534e+03
+%+10.e : +8e+03
+%+10.0e : +8e+03
+%+10.1e : +8.1e+03
+%+10.2e : +8.13e+03
+%+10.5e : +8.12753e+03
+%+10.10e : +8.1275341797e+03
+%+10.30e : +8.127534179687500000000000000000e+03
+%+30e : +8.127534e+03
+%+30.e : +8e+03
+%+30.0e : +8e+03
+%+30.1e : +8.1e+03
+%+30.2e : +8.13e+03
+%+30.5e : +8.12753e+03
+%+30.10e : +8.1275341797e+03
+%+30.30e : +8.127534179687500000000000000000e+03
+%-e : 8.127534e+03
+%-.e : 8e+03
+%-.0e : 8e+03
+%-.1e : 8.1e+03
+%-.2e : 8.13e+03
+%-.5e : 8.12753e+03
+%-.10e : 8.1275341797e+03
+%-.30e : 8.127534179687500000000000000000e+03
+%-1e : 8.127534e+03
+%-1.e : 8e+03
+%-1.0e : 8e+03
+%-1.1e : 8.1e+03
+%-1.2e : 8.13e+03
+%-1.5e : 8.12753e+03
+%-1.10e : 8.1275341797e+03
+%-1.30e : 8.127534179687500000000000000000e+03
+%-2e : 8.127534e+03
+%-2.e : 8e+03
+%-2.0e : 8e+03
+%-2.1e : 8.1e+03
+%-2.2e : 8.13e+03
+%-2.5e : 8.12753e+03
+%-2.10e : 8.1275341797e+03
+%-2.30e : 8.127534179687500000000000000000e+03
+%-5e : 8.127534e+03
+%-5.e : 8e+03
+%-5.0e : 8e+03
+%-5.1e : 8.1e+03
+%-5.2e : 8.13e+03
+%-5.5e : 8.12753e+03
+%-5.10e : 8.1275341797e+03
+%-5.30e : 8.127534179687500000000000000000e+03
+%-10e : 8.127534e+03
+%-10.e : 8e+03
+%-10.0e : 8e+03
+%-10.1e : 8.1e+03
+%-10.2e : 8.13e+03
+%-10.5e : 8.12753e+03
+%-10.10e : 8.1275341797e+03
+%-10.30e : 8.127534179687500000000000000000e+03
+%-30e : 8.127534e+03
+%-30.e : 8e+03
+%-30.0e : 8e+03
+%-30.1e : 8.1e+03
+%-30.2e : 8.13e+03
+%-30.5e : 8.12753e+03
+%-30.10e : 8.1275341797e+03
+%-30.30e : 8.127534179687500000000000000000e+03
+%#e : 8.127534e+03
+%#.e : 8.e+03
+%#.0e : 8.e+03
+%#.1e : 8.1e+03
+%#.2e : 8.13e+03
+%#.5e : 8.12753e+03
+%#.10e : 8.1275341797e+03
+%#.30e : 8.127534179687500000000000000000e+03
+%#0e : 8.127534e+03
+%#0.e : 8.e+03
+%#0.0e : 8.e+03
+%#0.1e : 8.1e+03
+%#0.2e : 8.13e+03
+%#0.5e : 8.12753e+03
+%#0.10e : 8.1275341797e+03
+%#0.30e : 8.127534179687500000000000000000e+03
+%#1e : 8.127534e+03
+%#1.e : 8.e+03
+%#1.0e : 8.e+03
+%#1.1e : 8.1e+03
+%#1.2e : 8.13e+03
+%#1.5e : 8.12753e+03
+%#1.10e : 8.1275341797e+03
+%#1.30e : 8.127534179687500000000000000000e+03
+%#2e : 8.127534e+03
+%#2.e : 8.e+03
+%#2.0e : 8.e+03
+%#2.1e : 8.1e+03
+%#2.2e : 8.13e+03
+%#2.5e : 8.12753e+03
+%#2.10e : 8.1275341797e+03
+%#2.30e : 8.127534179687500000000000000000e+03
+%#5e : 8.127534e+03
+%#5.e : 8.e+03
+%#5.0e : 8.e+03
+%#5.1e : 8.1e+03
+%#5.2e : 8.13e+03
+%#5.5e : 8.12753e+03
+%#5.10e : 8.1275341797e+03
+%#5.30e : 8.127534179687500000000000000000e+03
+%#10e : 8.127534e+03
+%#10.e : 8.e+03
+%#10.0e : 8.e+03
+%#10.1e : 8.1e+03
+%#10.2e : 8.13e+03
+%#10.5e : 8.12753e+03
+%#10.10e : 8.1275341797e+03
+%#10.30e : 8.127534179687500000000000000000e+03
+%#30e : 8.127534e+03
+%#30.e : 8.e+03
+%#30.0e : 8.e+03
+%#30.1e : 8.1e+03
+%#30.2e : 8.13e+03
+%#30.5e : 8.12753e+03
+%#30.10e : 8.1275341797e+03
+%#30.30e : 8.127534179687500000000000000000e+03
+%0e : 8.127534e+03
+%0.e : 8e+03
+%0.0e : 8e+03
+%0.1e : 8.1e+03
+%0.2e : 8.13e+03
+%0.5e : 8.12753e+03
+%0.10e : 8.1275341797e+03
+%0.30e : 8.127534179687500000000000000000e+03
+%01e : 8.127534e+03
+%01.e : 8e+03
+%01.0e : 8e+03
+%01.1e : 8.1e+03
+%01.2e : 8.13e+03
+%01.5e : 8.12753e+03
+%01.10e : 8.1275341797e+03
+%01.30e : 8.127534179687500000000000000000e+03
+%02e : 8.127534e+03
+%02.e : 8e+03
+%02.0e : 8e+03
+%02.1e : 8.1e+03
+%02.2e : 8.13e+03
+%02.5e : 8.12753e+03
+%02.10e : 8.1275341797e+03
+%02.30e : 8.127534179687500000000000000000e+03
+%05e : 8.127534e+03
+%05.e : 8e+03
+%05.0e : 8e+03
+%05.1e : 8.1e+03
+%05.2e : 8.13e+03
+%05.5e : 8.12753e+03
+%05.10e : 8.1275341797e+03
+%05.30e : 8.127534179687500000000000000000e+03
+%010e : 8.127534e+03
+%010.e : 000008e+03
+%010.0e : 000008e+03
+%010.1e : 0008.1e+03
+%010.2e : 008.13e+03
+%010.5e : 8.12753e+03
+%010.10e : 8.1275341797e+03
+%010.30e : 8.127534179687500000000000000000e+03
+%030e : 0000000000000000008.127534e+03
+%030.e : 00000000000000000000000008e+03
+%030.0e : 00000000000000000000000008e+03
+%030.1e : 000000000000000000000008.1e+03
+%030.2e : 00000000000000000000008.13e+03
+%030.5e : 00000000000000000008.12753e+03
+%030.10e : 000000000000008.1275341797e+03
+%030.30e : 8.127534179687500000000000000000e+03
+%-+e : +8.127534e+03
+%-+.e : +8e+03
+%-+.0e : +8e+03
+%-+.1e : +8.1e+03
+%-+.2e : +8.13e+03
+%-+.5e : +8.12753e+03
+%-+.10e : +8.1275341797e+03
+%-+.30e : +8.127534179687500000000000000000e+03
+%-+1e : +8.127534e+03
+%-+1.e : +8e+03
+%-+1.0e : +8e+03
+%-+1.1e : +8.1e+03
+%-+1.2e : +8.13e+03
+%-+1.5e : +8.12753e+03
+%-+1.10e : +8.1275341797e+03
+%-+1.30e : +8.127534179687500000000000000000e+03
+%-+2e : +8.127534e+03
+%-+2.e : +8e+03
+%-+2.0e : +8e+03
+%-+2.1e : +8.1e+03
+%-+2.2e : +8.13e+03
+%-+2.5e : +8.12753e+03
+%-+2.10e : +8.1275341797e+03
+%-+2.30e : +8.127534179687500000000000000000e+03
+%-+5e : +8.127534e+03
+%-+5.e : +8e+03
+%-+5.0e : +8e+03
+%-+5.1e : +8.1e+03
+%-+5.2e : +8.13e+03
+%-+5.5e : +8.12753e+03
+%-+5.10e : +8.1275341797e+03
+%-+5.30e : +8.127534179687500000000000000000e+03
+%-+10e : +8.127534e+03
+%-+10.e : +8e+03
+%-+10.0e : +8e+03
+%-+10.1e : +8.1e+03
+%-+10.2e : +8.13e+03
+%-+10.5e : +8.12753e+03
+%-+10.10e : +8.1275341797e+03
+%-+10.30e : +8.127534179687500000000000000000e+03
+%-+30e : +8.127534e+03
+%-+30.e : +8e+03
+%-+30.0e : +8e+03
+%-+30.1e : +8.1e+03
+%-+30.2e : +8.13e+03
+%-+30.5e : +8.12753e+03
+%-+30.10e : +8.1275341797e+03
+%-+30.30e : +8.127534179687500000000000000000e+03
+%#+e : +8.127534e+03
+%#+.e : +8.e+03
+%#+.0e : +8.e+03
+%#+.1e : +8.1e+03
+%#+.2e : +8.13e+03
+%#+.5e : +8.12753e+03
+%#+.10e : +8.1275341797e+03
+%#+.30e : +8.127534179687500000000000000000e+03
+%#+0e : +8.127534e+03
+%#+0.e : +8.e+03
+%#+0.0e : +8.e+03
+%#+0.1e : +8.1e+03
+%#+0.2e : +8.13e+03
+%#+0.5e : +8.12753e+03
+%#+0.10e : +8.1275341797e+03
+%#+0.30e : +8.127534179687500000000000000000e+03
+%#+1e : +8.127534e+03
+%#+1.e : +8.e+03
+%#+1.0e : +8.e+03
+%#+1.1e : +8.1e+03
+%#+1.2e : +8.13e+03
+%#+1.5e : +8.12753e+03
+%#+1.10e : +8.1275341797e+03
+%#+1.30e : +8.127534179687500000000000000000e+03
+%#+2e : +8.127534e+03
+%#+2.e : +8.e+03
+%#+2.0e : +8.e+03
+%#+2.1e : +8.1e+03
+%#+2.2e : +8.13e+03
+%#+2.5e : +8.12753e+03
+%#+2.10e : +8.1275341797e+03
+%#+2.30e : +8.127534179687500000000000000000e+03
+%#+5e : +8.127534e+03
+%#+5.e : +8.e+03
+%#+5.0e : +8.e+03
+%#+5.1e : +8.1e+03
+%#+5.2e : +8.13e+03
+%#+5.5e : +8.12753e+03
+%#+5.10e : +8.1275341797e+03
+%#+5.30e : +8.127534179687500000000000000000e+03
+%#+10e : +8.127534e+03
+%#+10.e : +8.e+03
+%#+10.0e : +8.e+03
+%#+10.1e : +8.1e+03
+%#+10.2e : +8.13e+03
+%#+10.5e : +8.12753e+03
+%#+10.10e : +8.1275341797e+03
+%#+10.30e : +8.127534179687500000000000000000e+03
+%#+30e : +8.127534e+03
+%#+30.e : +8.e+03
+%#+30.0e : +8.e+03
+%#+30.1e : +8.1e+03
+%#+30.2e : +8.13e+03
+%#+30.5e : +8.12753e+03
+%#+30.10e : +8.1275341797e+03
+%#+30.30e : +8.127534179687500000000000000000e+03
+%+0e : +8.127534e+03
+%+0.e : +8e+03
+%+0.0e : +8e+03
+%+0.1e : +8.1e+03
+%+0.2e : +8.13e+03
+%+0.5e : +8.12753e+03
+%+0.10e : +8.1275341797e+03
+%+0.30e : +8.127534179687500000000000000000e+03
+%+01e : +8.127534e+03
+%+01.e : +8e+03
+%+01.0e : +8e+03
+%+01.1e : +8.1e+03
+%+01.2e : +8.13e+03
+%+01.5e : +8.12753e+03
+%+01.10e : +8.1275341797e+03
+%+01.30e : +8.127534179687500000000000000000e+03
+%+02e : +8.127534e+03
+%+02.e : +8e+03
+%+02.0e : +8e+03
+%+02.1e : +8.1e+03
+%+02.2e : +8.13e+03
+%+02.5e : +8.12753e+03
+%+02.10e : +8.1275341797e+03
+%+02.30e : +8.127534179687500000000000000000e+03
+%+05e : +8.127534e+03
+%+05.e : +8e+03
+%+05.0e : +8e+03
+%+05.1e : +8.1e+03
+%+05.2e : +8.13e+03
+%+05.5e : +8.12753e+03
+%+05.10e : +8.1275341797e+03
+%+05.30e : +8.127534179687500000000000000000e+03
+%+010e : +8.127534e+03
+%+010.e : +00008e+03
+%+010.0e : +00008e+03
+%+010.1e : +008.1e+03
+%+010.2e : +08.13e+03
+%+010.5e : +8.12753e+03
+%+010.10e : +8.1275341797e+03
+%+010.30e : +8.127534179687500000000000000000e+03
+%+030e : +000000000000000008.127534e+03
+%+030.e : +0000000000000000000000008e+03
+%+030.0e : +0000000000000000000000008e+03
+%+030.1e : +00000000000000000000008.1e+03
+%+030.2e : +0000000000000000000008.13e+03
+%+030.5e : +0000000000000000008.12753e+03
+%+030.10e : +00000000000008.1275341797e+03
+%+030.30e : +8.127534179687500000000000000000e+03
+%+-e : +8.127534e+03
+%+-.e : +8e+03
+%+-.0e : +8e+03
+%+-.1e : +8.1e+03
+%+-.2e : +8.13e+03
+%+-.5e : +8.12753e+03
+%+-.10e : +8.1275341797e+03
+%+-.30e : +8.127534179687500000000000000000e+03
+%+-1e : +8.127534e+03
+%+-1.e : +8e+03
+%+-1.0e : +8e+03
+%+-1.1e : +8.1e+03
+%+-1.2e : +8.13e+03
+%+-1.5e : +8.12753e+03
+%+-1.10e : +8.1275341797e+03
+%+-1.30e : +8.127534179687500000000000000000e+03
+%+-2e : +8.127534e+03
+%+-2.e : +8e+03
+%+-2.0e : +8e+03
+%+-2.1e : +8.1e+03
+%+-2.2e : +8.13e+03
+%+-2.5e : +8.12753e+03
+%+-2.10e : +8.1275341797e+03
+%+-2.30e : +8.127534179687500000000000000000e+03
+%+-5e : +8.127534e+03
+%+-5.e : +8e+03
+%+-5.0e : +8e+03
+%+-5.1e : +8.1e+03
+%+-5.2e : +8.13e+03
+%+-5.5e : +8.12753e+03
+%+-5.10e : +8.1275341797e+03
+%+-5.30e : +8.127534179687500000000000000000e+03
+%+-10e : +8.127534e+03
+%+-10.e : +8e+03
+%+-10.0e : +8e+03
+%+-10.1e : +8.1e+03
+%+-10.2e : +8.13e+03
+%+-10.5e : +8.12753e+03
+%+-10.10e : +8.1275341797e+03
+%+-10.30e : +8.127534179687500000000000000000e+03
+%+-30e : +8.127534e+03
+%+-30.e : +8e+03
+%+-30.0e : +8e+03
+%+-30.1e : +8.1e+03
+%+-30.2e : +8.13e+03
+%+-30.5e : +8.12753e+03
+%+-30.10e : +8.1275341797e+03
+%+-30.30e : +8.127534179687500000000000000000e+03
+%#-e : 8.127534e+03
+%#-.e : 8.e+03
+%#-.0e : 8.e+03
+%#-.1e : 8.1e+03
+%#-.2e : 8.13e+03
+%#-.5e : 8.12753e+03
+%#-.10e : 8.1275341797e+03
+%#-.30e : 8.127534179687500000000000000000e+03
+%#-1e : 8.127534e+03
+%#-1.e : 8.e+03
+%#-1.0e : 8.e+03
+%#-1.1e : 8.1e+03
+%#-1.2e : 8.13e+03
+%#-1.5e : 8.12753e+03
+%#-1.10e : 8.1275341797e+03
+%#-1.30e : 8.127534179687500000000000000000e+03
+%#-2e : 8.127534e+03
+%#-2.e : 8.e+03
+%#-2.0e : 8.e+03
+%#-2.1e : 8.1e+03
+%#-2.2e : 8.13e+03
+%#-2.5e : 8.12753e+03
+%#-2.10e : 8.1275341797e+03
+%#-2.30e : 8.127534179687500000000000000000e+03
+%#-5e : 8.127534e+03
+%#-5.e : 8.e+03
+%#-5.0e : 8.e+03
+%#-5.1e : 8.1e+03
+%#-5.2e : 8.13e+03
+%#-5.5e : 8.12753e+03
+%#-5.10e : 8.1275341797e+03
+%#-5.30e : 8.127534179687500000000000000000e+03
+%#-10e : 8.127534e+03
+%#-10.e : 8.e+03
+%#-10.0e : 8.e+03
+%#-10.1e : 8.1e+03
+%#-10.2e : 8.13e+03
+%#-10.5e : 8.12753e+03
+%#-10.10e : 8.1275341797e+03
+%#-10.30e : 8.127534179687500000000000000000e+03
+%#-30e : 8.127534e+03
+%#-30.e : 8.e+03
+%#-30.0e : 8.e+03
+%#-30.1e : 8.1e+03
+%#-30.2e : 8.13e+03
+%#-30.5e : 8.12753e+03
+%#-30.10e : 8.1275341797e+03
+%#-30.30e : 8.127534179687500000000000000000e+03
+%+#e : +8.127534e+03
+%+#.e : +8.e+03
+%+#.0e : +8.e+03
+%+#.1e : +8.1e+03
+%+#.2e : +8.13e+03
+%+#.5e : +8.12753e+03
+%+#.10e : +8.1275341797e+03
+%+#.30e : +8.127534179687500000000000000000e+03
+%+#0e : +8.127534e+03
+%+#0.e : +8.e+03
+%+#0.0e : +8.e+03
+%+#0.1e : +8.1e+03
+%+#0.2e : +8.13e+03
+%+#0.5e : +8.12753e+03
+%+#0.10e : +8.1275341797e+03
+%+#0.30e : +8.127534179687500000000000000000e+03
+%+#1e : +8.127534e+03
+%+#1.e : +8.e+03
+%+#1.0e : +8.e+03
+%+#1.1e : +8.1e+03
+%+#1.2e : +8.13e+03
+%+#1.5e : +8.12753e+03
+%+#1.10e : +8.1275341797e+03
+%+#1.30e : +8.127534179687500000000000000000e+03
+%+#2e : +8.127534e+03
+%+#2.e : +8.e+03
+%+#2.0e : +8.e+03
+%+#2.1e : +8.1e+03
+%+#2.2e : +8.13e+03
+%+#2.5e : +8.12753e+03
+%+#2.10e : +8.1275341797e+03
+%+#2.30e : +8.127534179687500000000000000000e+03
+%+#5e : +8.127534e+03
+%+#5.e : +8.e+03
+%+#5.0e : +8.e+03
+%+#5.1e : +8.1e+03
+%+#5.2e : +8.13e+03
+%+#5.5e : +8.12753e+03
+%+#5.10e : +8.1275341797e+03
+%+#5.30e : +8.127534179687500000000000000000e+03
+%+#10e : +8.127534e+03
+%+#10.e : +8.e+03
+%+#10.0e : +8.e+03
+%+#10.1e : +8.1e+03
+%+#10.2e : +8.13e+03
+%+#10.5e : +8.12753e+03
+%+#10.10e : +8.1275341797e+03
+%+#10.30e : +8.127534179687500000000000000000e+03
+%+#30e : +8.127534e+03
+%+#30.e : +8.e+03
+%+#30.0e : +8.e+03
+%+#30.1e : +8.1e+03
+%+#30.2e : +8.13e+03
+%+#30.5e : +8.12753e+03
+%+#30.10e : +8.1275341797e+03
+%+#30.30e : +8.127534179687500000000000000000e+03
+%-#e : 8.127534e+03
+%-#.e : 8.e+03
+%-#.0e : 8.e+03
+%-#.1e : 8.1e+03
+%-#.2e : 8.13e+03
+%-#.5e : 8.12753e+03
+%-#.10e : 8.1275341797e+03
+%-#.30e : 8.127534179687500000000000000000e+03
+%-#1e : 8.127534e+03
+%-#1.e : 8.e+03
+%-#1.0e : 8.e+03
+%-#1.1e : 8.1e+03
+%-#1.2e : 8.13e+03
+%-#1.5e : 8.12753e+03
+%-#1.10e : 8.1275341797e+03
+%-#1.30e : 8.127534179687500000000000000000e+03
+%-#2e : 8.127534e+03
+%-#2.e : 8.e+03
+%-#2.0e : 8.e+03
+%-#2.1e : 8.1e+03
+%-#2.2e : 8.13e+03
+%-#2.5e : 8.12753e+03
+%-#2.10e : 8.1275341797e+03
+%-#2.30e : 8.127534179687500000000000000000e+03
+%-#5e : 8.127534e+03
+%-#5.e : 8.e+03
+%-#5.0e : 8.e+03
+%-#5.1e : 8.1e+03
+%-#5.2e : 8.13e+03
+%-#5.5e : 8.12753e+03
+%-#5.10e : 8.1275341797e+03
+%-#5.30e : 8.127534179687500000000000000000e+03
+%-#10e : 8.127534e+03
+%-#10.e : 8.e+03
+%-#10.0e : 8.e+03
+%-#10.1e : 8.1e+03
+%-#10.2e : 8.13e+03
+%-#10.5e : 8.12753e+03
+%-#10.10e : 8.1275341797e+03
+%-#10.30e : 8.127534179687500000000000000000e+03
+%-#30e : 8.127534e+03
+%-#30.e : 8.e+03
+%-#30.0e : 8.e+03
+%-#30.1e : 8.1e+03
+%-#30.2e : 8.13e+03
+%-#30.5e : 8.12753e+03
+%-#30.10e : 8.1275341797e+03
+%-#30.30e : 8.127534179687500000000000000000e+03
+%0#e : 8.127534e+03
+%0#.e : 8.e+03
+%0#.0e : 8.e+03
+%0#.1e : 8.1e+03
+%0#.2e : 8.13e+03
+%0#.5e : 8.12753e+03
+%0#.10e : 8.1275341797e+03
+%0#.30e : 8.127534179687500000000000000000e+03
+%0#1e : 8.127534e+03
+%0#1.e : 8.e+03
+%0#1.0e : 8.e+03
+%0#1.1e : 8.1e+03
+%0#1.2e : 8.13e+03
+%0#1.5e : 8.12753e+03
+%0#1.10e : 8.1275341797e+03
+%0#1.30e : 8.127534179687500000000000000000e+03
+%0#2e : 8.127534e+03
+%0#2.e : 8.e+03
+%0#2.0e : 8.e+03
+%0#2.1e : 8.1e+03
+%0#2.2e : 8.13e+03
+%0#2.5e : 8.12753e+03
+%0#2.10e : 8.1275341797e+03
+%0#2.30e : 8.127534179687500000000000000000e+03
+%0#5e : 8.127534e+03
+%0#5.e : 8.e+03
+%0#5.0e : 8.e+03
+%0#5.1e : 8.1e+03
+%0#5.2e : 8.13e+03
+%0#5.5e : 8.12753e+03
+%0#5.10e : 8.1275341797e+03
+%0#5.30e : 8.127534179687500000000000000000e+03
+%0#10e : 8.127534e+03
+%0#10.e : 00008.e+03
+%0#10.0e : 00008.e+03
+%0#10.1e : 0008.1e+03
+%0#10.2e : 008.13e+03
+%0#10.5e : 8.12753e+03
+%0#10.10e : 8.1275341797e+03
+%0#10.30e : 8.127534179687500000000000000000e+03
+%0#30e : 0000000000000000008.127534e+03
+%0#30.e : 0000000000000000000000008.e+03
+%0#30.0e : 0000000000000000000000008.e+03
+%0#30.1e : 000000000000000000000008.1e+03
+%0#30.2e : 00000000000000000000008.13e+03
+%0#30.5e : 00000000000000000008.12753e+03
+%0#30.10e : 000000000000008.1275341797e+03
+%0#30.30e : 8.127534179687500000000000000000e+03
+%+0e : +8.127534e+03
+%+0.e : +8e+03
+%+0.0e : +8e+03
+%+0.1e : +8.1e+03
+%+0.2e : +8.13e+03
+%+0.5e : +8.12753e+03
+%+0.10e : +8.1275341797e+03
+%+0.30e : +8.127534179687500000000000000000e+03
+%+01e : +8.127534e+03
+%+01.e : +8e+03
+%+01.0e : +8e+03
+%+01.1e : +8.1e+03
+%+01.2e : +8.13e+03
+%+01.5e : +8.12753e+03
+%+01.10e : +8.1275341797e+03
+%+01.30e : +8.127534179687500000000000000000e+03
+%+02e : +8.127534e+03
+%+02.e : +8e+03
+%+02.0e : +8e+03
+%+02.1e : +8.1e+03
+%+02.2e : +8.13e+03
+%+02.5e : +8.12753e+03
+%+02.10e : +8.1275341797e+03
+%+02.30e : +8.127534179687500000000000000000e+03
+%+05e : +8.127534e+03
+%+05.e : +8e+03
+%+05.0e : +8e+03
+%+05.1e : +8.1e+03
+%+05.2e : +8.13e+03
+%+05.5e : +8.12753e+03
+%+05.10e : +8.1275341797e+03
+%+05.30e : +8.127534179687500000000000000000e+03
+%+010e : +8.127534e+03
+%+010.e : +00008e+03
+%+010.0e : +00008e+03
+%+010.1e : +008.1e+03
+%+010.2e : +08.13e+03
+%+010.5e : +8.12753e+03
+%+010.10e : +8.1275341797e+03
+%+010.30e : +8.127534179687500000000000000000e+03
+%+030e : +000000000000000008.127534e+03
+%+030.e : +0000000000000000000000008e+03
+%+030.0e : +0000000000000000000000008e+03
+%+030.1e : +00000000000000000000008.1e+03
+%+030.2e : +0000000000000000000008.13e+03
+%+030.5e : +0000000000000000008.12753e+03
+%+030.10e : +00000000000008.1275341797e+03
+%+030.30e : +8.127534179687500000000000000000e+03
+%#0e : 8.127534e+03
+%#0.e : 8.e+03
+%#0.0e : 8.e+03
+%#0.1e : 8.1e+03
+%#0.2e : 8.13e+03
+%#0.5e : 8.12753e+03
+%#0.10e : 8.1275341797e+03
+%#0.30e : 8.127534179687500000000000000000e+03
+%#01e : 8.127534e+03
+%#01.e : 8.e+03
+%#01.0e : 8.e+03
+%#01.1e : 8.1e+03
+%#01.2e : 8.13e+03
+%#01.5e : 8.12753e+03
+%#01.10e : 8.1275341797e+03
+%#01.30e : 8.127534179687500000000000000000e+03
+%#02e : 8.127534e+03
+%#02.e : 8.e+03
+%#02.0e : 8.e+03
+%#02.1e : 8.1e+03
+%#02.2e : 8.13e+03
+%#02.5e : 8.12753e+03
+%#02.10e : 8.1275341797e+03
+%#02.30e : 8.127534179687500000000000000000e+03
+%#05e : 8.127534e+03
+%#05.e : 8.e+03
+%#05.0e : 8.e+03
+%#05.1e : 8.1e+03
+%#05.2e : 8.13e+03
+%#05.5e : 8.12753e+03
+%#05.10e : 8.1275341797e+03
+%#05.30e : 8.127534179687500000000000000000e+03
+%#010e : 8.127534e+03
+%#010.e : 00008.e+03
+%#010.0e : 00008.e+03
+%#010.1e : 0008.1e+03
+%#010.2e : 008.13e+03
+%#010.5e : 8.12753e+03
+%#010.10e : 8.1275341797e+03
+%#010.30e : 8.127534179687500000000000000000e+03
+%#030e : 0000000000000000008.127534e+03
+%#030.e : 0000000000000000000000008.e+03
+%#030.0e : 0000000000000000000000008.e+03
+%#030.1e : 000000000000000000000008.1e+03
+%#030.2e : 00000000000000000000008.13e+03
+%#030.5e : 00000000000000000008.12753e+03
+%#030.10e : 000000000000008.1275341797e+03
+%#030.30e : 8.127534179687500000000000000000e+03
+%-+#e : +8.127534e+03
+%-+#.e : +8.e+03
+%-+#.0e : +8.e+03
+%-+#.1e : +8.1e+03
+%-+#.2e : +8.13e+03
+%-+#.5e : +8.12753e+03
+%-+#.10e : +8.1275341797e+03
+%-+#.30e : +8.127534179687500000000000000000e+03
+%-+#1e : +8.127534e+03
+%-+#1.e : +8.e+03
+%-+#1.0e : +8.e+03
+%-+#1.1e : +8.1e+03
+%-+#1.2e : +8.13e+03
+%-+#1.5e : +8.12753e+03
+%-+#1.10e : +8.1275341797e+03
+%-+#1.30e : +8.127534179687500000000000000000e+03
+%-+#2e : +8.127534e+03
+%-+#2.e : +8.e+03
+%-+#2.0e : +8.e+03
+%-+#2.1e : +8.1e+03
+%-+#2.2e : +8.13e+03
+%-+#2.5e : +8.12753e+03
+%-+#2.10e : +8.1275341797e+03
+%-+#2.30e : +8.127534179687500000000000000000e+03
+%-+#5e : +8.127534e+03
+%-+#5.e : +8.e+03
+%-+#5.0e : +8.e+03
+%-+#5.1e : +8.1e+03
+%-+#5.2e : +8.13e+03
+%-+#5.5e : +8.12753e+03
+%-+#5.10e : +8.1275341797e+03
+%-+#5.30e : +8.127534179687500000000000000000e+03
+%-+#10e : +8.127534e+03
+%-+#10.e : +8.e+03
+%-+#10.0e : +8.e+03
+%-+#10.1e : +8.1e+03
+%-+#10.2e : +8.13e+03
+%-+#10.5e : +8.12753e+03
+%-+#10.10e : +8.1275341797e+03
+%-+#10.30e : +8.127534179687500000000000000000e+03
+%-+#30e : +8.127534e+03
+%-+#30.e : +8.e+03
+%-+#30.0e : +8.e+03
+%-+#30.1e : +8.1e+03
+%-+#30.2e : +8.13e+03
+%-+#30.5e : +8.12753e+03
+%-+#30.10e : +8.1275341797e+03
+%-+#30.30e : +8.127534179687500000000000000000e+03
+%0+#e : +8.127534e+03
+%0+#.e : +8.e+03
+%0+#.0e : +8.e+03
+%0+#.1e : +8.1e+03
+%0+#.2e : +8.13e+03
+%0+#.5e : +8.12753e+03
+%0+#.10e : +8.1275341797e+03
+%0+#.30e : +8.127534179687500000000000000000e+03
+%0+#1e : +8.127534e+03
+%0+#1.e : +8.e+03
+%0+#1.0e : +8.e+03
+%0+#1.1e : +8.1e+03
+%0+#1.2e : +8.13e+03
+%0+#1.5e : +8.12753e+03
+%0+#1.10e : +8.1275341797e+03
+%0+#1.30e : +8.127534179687500000000000000000e+03
+%0+#2e : +8.127534e+03
+%0+#2.e : +8.e+03
+%0+#2.0e : +8.e+03
+%0+#2.1e : +8.1e+03
+%0+#2.2e : +8.13e+03
+%0+#2.5e : +8.12753e+03
+%0+#2.10e : +8.1275341797e+03
+%0+#2.30e : +8.127534179687500000000000000000e+03
+%0+#5e : +8.127534e+03
+%0+#5.e : +8.e+03
+%0+#5.0e : +8.e+03
+%0+#5.1e : +8.1e+03
+%0+#5.2e : +8.13e+03
+%0+#5.5e : +8.12753e+03
+%0+#5.10e : +8.1275341797e+03
+%0+#5.30e : +8.127534179687500000000000000000e+03
+%0+#10e : +8.127534e+03
+%0+#10.e : +0008.e+03
+%0+#10.0e : +0008.e+03
+%0+#10.1e : +008.1e+03
+%0+#10.2e : +08.13e+03
+%0+#10.5e : +8.12753e+03
+%0+#10.10e : +8.1275341797e+03
+%0+#10.30e : +8.127534179687500000000000000000e+03
+%0+#30e : +000000000000000008.127534e+03
+%0+#30.e : +000000000000000000000008.e+03
+%0+#30.0e : +000000000000000000000008.e+03
+%0+#30.1e : +00000000000000000000008.1e+03
+%0+#30.2e : +0000000000000000000008.13e+03
+%0+#30.5e : +0000000000000000008.12753e+03
+%0+#30.10e : +00000000000008.1275341797e+03
+%0+#30.30e : +8.127534179687500000000000000000e+03
+%#-+e : +8.127534e+03
+%#-+.e : +8.e+03
+%#-+.0e : +8.e+03
+%#-+.1e : +8.1e+03
+%#-+.2e : +8.13e+03
+%#-+.5e : +8.12753e+03
+%#-+.10e : +8.1275341797e+03
+%#-+.30e : +8.127534179687500000000000000000e+03
+%#-+1e : +8.127534e+03
+%#-+1.e : +8.e+03
+%#-+1.0e : +8.e+03
+%#-+1.1e : +8.1e+03
+%#-+1.2e : +8.13e+03
+%#-+1.5e : +8.12753e+03
+%#-+1.10e : +8.1275341797e+03
+%#-+1.30e : +8.127534179687500000000000000000e+03
+%#-+2e : +8.127534e+03
+%#-+2.e : +8.e+03
+%#-+2.0e : +8.e+03
+%#-+2.1e : +8.1e+03
+%#-+2.2e : +8.13e+03
+%#-+2.5e : +8.12753e+03
+%#-+2.10e : +8.1275341797e+03
+%#-+2.30e : +8.127534179687500000000000000000e+03
+%#-+5e : +8.127534e+03
+%#-+5.e : +8.e+03
+%#-+5.0e : +8.e+03
+%#-+5.1e : +8.1e+03
+%#-+5.2e : +8.13e+03
+%#-+5.5e : +8.12753e+03
+%#-+5.10e : +8.1275341797e+03
+%#-+5.30e : +8.127534179687500000000000000000e+03
+%#-+10e : +8.127534e+03
+%#-+10.e : +8.e+03
+%#-+10.0e : +8.e+03
+%#-+10.1e : +8.1e+03
+%#-+10.2e : +8.13e+03
+%#-+10.5e : +8.12753e+03
+%#-+10.10e : +8.1275341797e+03
+%#-+10.30e : +8.127534179687500000000000000000e+03
+%#-+30e : +8.127534e+03
+%#-+30.e : +8.e+03
+%#-+30.0e : +8.e+03
+%#-+30.1e : +8.1e+03
+%#-+30.2e : +8.13e+03
+%#-+30.5e : +8.12753e+03
+%#-+30.10e : +8.1275341797e+03
+%#-+30.30e : +8.127534179687500000000000000000e+03
+%+#-e : +8.127534e+03
+%+#-.e : +8.e+03
+%+#-.0e : +8.e+03
+%+#-.1e : +8.1e+03
+%+#-.2e : +8.13e+03
+%+#-.5e : +8.12753e+03
+%+#-.10e : +8.1275341797e+03
+%+#-.30e : +8.127534179687500000000000000000e+03
+%+#-1e : +8.127534e+03
+%+#-1.e : +8.e+03
+%+#-1.0e : +8.e+03
+%+#-1.1e : +8.1e+03
+%+#-1.2e : +8.13e+03
+%+#-1.5e : +8.12753e+03
+%+#-1.10e : +8.1275341797e+03
+%+#-1.30e : +8.127534179687500000000000000000e+03
+%+#-2e : +8.127534e+03
+%+#-2.e : +8.e+03
+%+#-2.0e : +8.e+03
+%+#-2.1e : +8.1e+03
+%+#-2.2e : +8.13e+03
+%+#-2.5e : +8.12753e+03
+%+#-2.10e : +8.1275341797e+03
+%+#-2.30e : +8.127534179687500000000000000000e+03
+%+#-5e : +8.127534e+03
+%+#-5.e : +8.e+03
+%+#-5.0e : +8.e+03
+%+#-5.1e : +8.1e+03
+%+#-5.2e : +8.13e+03
+%+#-5.5e : +8.12753e+03
+%+#-5.10e : +8.1275341797e+03
+%+#-5.30e : +8.127534179687500000000000000000e+03
+%+#-10e : +8.127534e+03
+%+#-10.e : +8.e+03
+%+#-10.0e : +8.e+03
+%+#-10.1e : +8.1e+03
+%+#-10.2e : +8.13e+03
+%+#-10.5e : +8.12753e+03
+%+#-10.10e : +8.1275341797e+03
+%+#-10.30e : +8.127534179687500000000000000000e+03
+%+#-30e : +8.127534e+03
+%+#-30.e : +8.e+03
+%+#-30.0e : +8.e+03
+%+#-30.1e : +8.1e+03
+%+#-30.2e : +8.13e+03
+%+#-30.5e : +8.12753e+03
+%+#-30.10e : +8.1275341797e+03
+%+#-30.30e : +8.127534179687500000000000000000e+03
+%+E : +8.127534E+03
+%+.E : +8E+03
+%+.0E : +8E+03
+%+.1E : +8.1E+03
+%+.2E : +8.13E+03
+%+.5E : +8.12753E+03
+%+.10E : +8.1275341797E+03
+%+.30E : +8.127534179687500000000000000000E+03
+%+0E : +8.127534E+03
+%+0.E : +8E+03
+%+0.0E : +8E+03
+%+0.1E : +8.1E+03
+%+0.2E : +8.13E+03
+%+0.5E : +8.12753E+03
+%+0.10E : +8.1275341797E+03
+%+0.30E : +8.127534179687500000000000000000E+03
+%+1E : +8.127534E+03
+%+1.E : +8E+03
+%+1.0E : +8E+03
+%+1.1E : +8.1E+03
+%+1.2E : +8.13E+03
+%+1.5E : +8.12753E+03
+%+1.10E : +8.1275341797E+03
+%+1.30E : +8.127534179687500000000000000000E+03
+%+2E : +8.127534E+03
+%+2.E : +8E+03
+%+2.0E : +8E+03
+%+2.1E : +8.1E+03
+%+2.2E : +8.13E+03
+%+2.5E : +8.12753E+03
+%+2.10E : +8.1275341797E+03
+%+2.30E : +8.127534179687500000000000000000E+03
+%+5E : +8.127534E+03
+%+5.E : +8E+03
+%+5.0E : +8E+03
+%+5.1E : +8.1E+03
+%+5.2E : +8.13E+03
+%+5.5E : +8.12753E+03
+%+5.10E : +8.1275341797E+03
+%+5.30E : +8.127534179687500000000000000000E+03
+%+10E : +8.127534E+03
+%+10.E : +8E+03
+%+10.0E : +8E+03
+%+10.1E : +8.1E+03
+%+10.2E : +8.13E+03
+%+10.5E : +8.12753E+03
+%+10.10E : +8.1275341797E+03
+%+10.30E : +8.127534179687500000000000000000E+03
+%+30E : +8.127534E+03
+%+30.E : +8E+03
+%+30.0E : +8E+03
+%+30.1E : +8.1E+03
+%+30.2E : +8.13E+03
+%+30.5E : +8.12753E+03
+%+30.10E : +8.1275341797E+03
+%+30.30E : +8.127534179687500000000000000000E+03
+%-E : 8.127534E+03
+%-.E : 8E+03
+%-.0E : 8E+03
+%-.1E : 8.1E+03
+%-.2E : 8.13E+03
+%-.5E : 8.12753E+03
+%-.10E : 8.1275341797E+03
+%-.30E : 8.127534179687500000000000000000E+03
+%-1E : 8.127534E+03
+%-1.E : 8E+03
+%-1.0E : 8E+03
+%-1.1E : 8.1E+03
+%-1.2E : 8.13E+03
+%-1.5E : 8.12753E+03
+%-1.10E : 8.1275341797E+03
+%-1.30E : 8.127534179687500000000000000000E+03
+%-2E : 8.127534E+03
+%-2.E : 8E+03
+%-2.0E : 8E+03
+%-2.1E : 8.1E+03
+%-2.2E : 8.13E+03
+%-2.5E : 8.12753E+03
+%-2.10E : 8.1275341797E+03
+%-2.30E : 8.127534179687500000000000000000E+03
+%-5E : 8.127534E+03
+%-5.E : 8E+03
+%-5.0E : 8E+03
+%-5.1E : 8.1E+03
+%-5.2E : 8.13E+03
+%-5.5E : 8.12753E+03
+%-5.10E : 8.1275341797E+03
+%-5.30E : 8.127534179687500000000000000000E+03
+%-10E : 8.127534E+03
+%-10.E : 8E+03
+%-10.0E : 8E+03
+%-10.1E : 8.1E+03
+%-10.2E : 8.13E+03
+%-10.5E : 8.12753E+03
+%-10.10E : 8.1275341797E+03
+%-10.30E : 8.127534179687500000000000000000E+03
+%-30E : 8.127534E+03
+%-30.E : 8E+03
+%-30.0E : 8E+03
+%-30.1E : 8.1E+03
+%-30.2E : 8.13E+03
+%-30.5E : 8.12753E+03
+%-30.10E : 8.1275341797E+03
+%-30.30E : 8.127534179687500000000000000000E+03
+%#E : 8.127534E+03
+%#.E : 8.E+03
+%#.0E : 8.E+03
+%#.1E : 8.1E+03
+%#.2E : 8.13E+03
+%#.5E : 8.12753E+03
+%#.10E : 8.1275341797E+03
+%#.30E : 8.127534179687500000000000000000E+03
+%#0E : 8.127534E+03
+%#0.E : 8.E+03
+%#0.0E : 8.E+03
+%#0.1E : 8.1E+03
+%#0.2E : 8.13E+03
+%#0.5E : 8.12753E+03
+%#0.10E : 8.1275341797E+03
+%#0.30E : 8.127534179687500000000000000000E+03
+%#1E : 8.127534E+03
+%#1.E : 8.E+03
+%#1.0E : 8.E+03
+%#1.1E : 8.1E+03
+%#1.2E : 8.13E+03
+%#1.5E : 8.12753E+03
+%#1.10E : 8.1275341797E+03
+%#1.30E : 8.127534179687500000000000000000E+03
+%#2E : 8.127534E+03
+%#2.E : 8.E+03
+%#2.0E : 8.E+03
+%#2.1E : 8.1E+03
+%#2.2E : 8.13E+03
+%#2.5E : 8.12753E+03
+%#2.10E : 8.1275341797E+03
+%#2.30E : 8.127534179687500000000000000000E+03
+%#5E : 8.127534E+03
+%#5.E : 8.E+03
+%#5.0E : 8.E+03
+%#5.1E : 8.1E+03
+%#5.2E : 8.13E+03
+%#5.5E : 8.12753E+03
+%#5.10E : 8.1275341797E+03
+%#5.30E : 8.127534179687500000000000000000E+03
+%#10E : 8.127534E+03
+%#10.E : 8.E+03
+%#10.0E : 8.E+03
+%#10.1E : 8.1E+03
+%#10.2E : 8.13E+03
+%#10.5E : 8.12753E+03
+%#10.10E : 8.1275341797E+03
+%#10.30E : 8.127534179687500000000000000000E+03
+%#30E : 8.127534E+03
+%#30.E : 8.E+03
+%#30.0E : 8.E+03
+%#30.1E : 8.1E+03
+%#30.2E : 8.13E+03
+%#30.5E : 8.12753E+03
+%#30.10E : 8.1275341797E+03
+%#30.30E : 8.127534179687500000000000000000E+03
+%0E : 8.127534E+03
+%0.E : 8E+03
+%0.0E : 8E+03
+%0.1E : 8.1E+03
+%0.2E : 8.13E+03
+%0.5E : 8.12753E+03
+%0.10E : 8.1275341797E+03
+%0.30E : 8.127534179687500000000000000000E+03
+%01E : 8.127534E+03
+%01.E : 8E+03
+%01.0E : 8E+03
+%01.1E : 8.1E+03
+%01.2E : 8.13E+03
+%01.5E : 8.12753E+03
+%01.10E : 8.1275341797E+03
+%01.30E : 8.127534179687500000000000000000E+03
+%02E : 8.127534E+03
+%02.E : 8E+03
+%02.0E : 8E+03
+%02.1E : 8.1E+03
+%02.2E : 8.13E+03
+%02.5E : 8.12753E+03
+%02.10E : 8.1275341797E+03
+%02.30E : 8.127534179687500000000000000000E+03
+%05E : 8.127534E+03
+%05.E : 8E+03
+%05.0E : 8E+03
+%05.1E : 8.1E+03
+%05.2E : 8.13E+03
+%05.5E : 8.12753E+03
+%05.10E : 8.1275341797E+03
+%05.30E : 8.127534179687500000000000000000E+03
+%010E : 8.127534E+03
+%010.E : 000008E+03
+%010.0E : 000008E+03
+%010.1E : 0008.1E+03
+%010.2E : 008.13E+03
+%010.5E : 8.12753E+03
+%010.10E : 8.1275341797E+03
+%010.30E : 8.127534179687500000000000000000E+03
+%030E : 0000000000000000008.127534E+03
+%030.E : 00000000000000000000000008E+03
+%030.0E : 00000000000000000000000008E+03
+%030.1E : 000000000000000000000008.1E+03
+%030.2E : 00000000000000000000008.13E+03
+%030.5E : 00000000000000000008.12753E+03
+%030.10E : 000000000000008.1275341797E+03
+%030.30E : 8.127534179687500000000000000000E+03
+%-+E : +8.127534E+03
+%-+.E : +8E+03
+%-+.0E : +8E+03
+%-+.1E : +8.1E+03
+%-+.2E : +8.13E+03
+%-+.5E : +8.12753E+03
+%-+.10E : +8.1275341797E+03
+%-+.30E : +8.127534179687500000000000000000E+03
+%-+1E : +8.127534E+03
+%-+1.E : +8E+03
+%-+1.0E : +8E+03
+%-+1.1E : +8.1E+03
+%-+1.2E : +8.13E+03
+%-+1.5E : +8.12753E+03
+%-+1.10E : +8.1275341797E+03
+%-+1.30E : +8.127534179687500000000000000000E+03
+%-+2E : +8.127534E+03
+%-+2.E : +8E+03
+%-+2.0E : +8E+03
+%-+2.1E : +8.1E+03
+%-+2.2E : +8.13E+03
+%-+2.5E : +8.12753E+03
+%-+2.10E : +8.1275341797E+03
+%-+2.30E : +8.127534179687500000000000000000E+03
+%-+5E : +8.127534E+03
+%-+5.E : +8E+03
+%-+5.0E : +8E+03
+%-+5.1E : +8.1E+03
+%-+5.2E : +8.13E+03
+%-+5.5E : +8.12753E+03
+%-+5.10E : +8.1275341797E+03
+%-+5.30E : +8.127534179687500000000000000000E+03
+%-+10E : +8.127534E+03
+%-+10.E : +8E+03
+%-+10.0E : +8E+03
+%-+10.1E : +8.1E+03
+%-+10.2E : +8.13E+03
+%-+10.5E : +8.12753E+03
+%-+10.10E : +8.1275341797E+03
+%-+10.30E : +8.127534179687500000000000000000E+03
+%-+30E : +8.127534E+03
+%-+30.E : +8E+03
+%-+30.0E : +8E+03
+%-+30.1E : +8.1E+03
+%-+30.2E : +8.13E+03
+%-+30.5E : +8.12753E+03
+%-+30.10E : +8.1275341797E+03
+%-+30.30E : +8.127534179687500000000000000000E+03
+%#+E : +8.127534E+03
+%#+.E : +8.E+03
+%#+.0E : +8.E+03
+%#+.1E : +8.1E+03
+%#+.2E : +8.13E+03
+%#+.5E : +8.12753E+03
+%#+.10E : +8.1275341797E+03
+%#+.30E : +8.127534179687500000000000000000E+03
+%#+0E : +8.127534E+03
+%#+0.E : +8.E+03
+%#+0.0E : +8.E+03
+%#+0.1E : +8.1E+03
+%#+0.2E : +8.13E+03
+%#+0.5E : +8.12753E+03
+%#+0.10E : +8.1275341797E+03
+%#+0.30E : +8.127534179687500000000000000000E+03
+%#+1E : +8.127534E+03
+%#+1.E : +8.E+03
+%#+1.0E : +8.E+03
+%#+1.1E : +8.1E+03
+%#+1.2E : +8.13E+03
+%#+1.5E : +8.12753E+03
+%#+1.10E : +8.1275341797E+03
+%#+1.30E : +8.127534179687500000000000000000E+03
+%#+2E : +8.127534E+03
+%#+2.E : +8.E+03
+%#+2.0E : +8.E+03
+%#+2.1E : +8.1E+03
+%#+2.2E : +8.13E+03
+%#+2.5E : +8.12753E+03
+%#+2.10E : +8.1275341797E+03
+%#+2.30E : +8.127534179687500000000000000000E+03
+%#+5E : +8.127534E+03
+%#+5.E : +8.E+03
+%#+5.0E : +8.E+03
+%#+5.1E : +8.1E+03
+%#+5.2E : +8.13E+03
+%#+5.5E : +8.12753E+03
+%#+5.10E : +8.1275341797E+03
+%#+5.30E : +8.127534179687500000000000000000E+03
+%#+10E : +8.127534E+03
+%#+10.E : +8.E+03
+%#+10.0E : +8.E+03
+%#+10.1E : +8.1E+03
+%#+10.2E : +8.13E+03
+%#+10.5E : +8.12753E+03
+%#+10.10E : +8.1275341797E+03
+%#+10.30E : +8.127534179687500000000000000000E+03
+%#+30E : +8.127534E+03
+%#+30.E : +8.E+03
+%#+30.0E : +8.E+03
+%#+30.1E : +8.1E+03
+%#+30.2E : +8.13E+03
+%#+30.5E : +8.12753E+03
+%#+30.10E : +8.1275341797E+03
+%#+30.30E : +8.127534179687500000000000000000E+03
+%+0E : +8.127534E+03
+%+0.E : +8E+03
+%+0.0E : +8E+03
+%+0.1E : +8.1E+03
+%+0.2E : +8.13E+03
+%+0.5E : +8.12753E+03
+%+0.10E : +8.1275341797E+03
+%+0.30E : +8.127534179687500000000000000000E+03
+%+01E : +8.127534E+03
+%+01.E : +8E+03
+%+01.0E : +8E+03
+%+01.1E : +8.1E+03
+%+01.2E : +8.13E+03
+%+01.5E : +8.12753E+03
+%+01.10E : +8.1275341797E+03
+%+01.30E : +8.127534179687500000000000000000E+03
+%+02E : +8.127534E+03
+%+02.E : +8E+03
+%+02.0E : +8E+03
+%+02.1E : +8.1E+03
+%+02.2E : +8.13E+03
+%+02.5E : +8.12753E+03
+%+02.10E : +8.1275341797E+03
+%+02.30E : +8.127534179687500000000000000000E+03
+%+05E : +8.127534E+03
+%+05.E : +8E+03
+%+05.0E : +8E+03
+%+05.1E : +8.1E+03
+%+05.2E : +8.13E+03
+%+05.5E : +8.12753E+03
+%+05.10E : +8.1275341797E+03
+%+05.30E : +8.127534179687500000000000000000E+03
+%+010E : +8.127534E+03
+%+010.E : +00008E+03
+%+010.0E : +00008E+03
+%+010.1E : +008.1E+03
+%+010.2E : +08.13E+03
+%+010.5E : +8.12753E+03
+%+010.10E : +8.1275341797E+03
+%+010.30E : +8.127534179687500000000000000000E+03
+%+030E : +000000000000000008.127534E+03
+%+030.E : +0000000000000000000000008E+03
+%+030.0E : +0000000000000000000000008E+03
+%+030.1E : +00000000000000000000008.1E+03
+%+030.2E : +0000000000000000000008.13E+03
+%+030.5E : +0000000000000000008.12753E+03
+%+030.10E : +00000000000008.1275341797E+03
+%+030.30E : +8.127534179687500000000000000000E+03
+%+-E : +8.127534E+03
+%+-.E : +8E+03
+%+-.0E : +8E+03
+%+-.1E : +8.1E+03
+%+-.2E : +8.13E+03
+%+-.5E : +8.12753E+03
+%+-.10E : +8.1275341797E+03
+%+-.30E : +8.127534179687500000000000000000E+03
+%+-1E : +8.127534E+03
+%+-1.E : +8E+03
+%+-1.0E : +8E+03
+%+-1.1E : +8.1E+03
+%+-1.2E : +8.13E+03
+%+-1.5E : +8.12753E+03
+%+-1.10E : +8.1275341797E+03
+%+-1.30E : +8.127534179687500000000000000000E+03
+%+-2E : +8.127534E+03
+%+-2.E : +8E+03
+%+-2.0E : +8E+03
+%+-2.1E : +8.1E+03
+%+-2.2E : +8.13E+03
+%+-2.5E : +8.12753E+03
+%+-2.10E : +8.1275341797E+03
+%+-2.30E : +8.127534179687500000000000000000E+03
+%+-5E : +8.127534E+03
+%+-5.E : +8E+03
+%+-5.0E : +8E+03
+%+-5.1E : +8.1E+03
+%+-5.2E : +8.13E+03
+%+-5.5E : +8.12753E+03
+%+-5.10E : +8.1275341797E+03
+%+-5.30E : +8.127534179687500000000000000000E+03
+%+-10E : +8.127534E+03
+%+-10.E : +8E+03
+%+-10.0E : +8E+03
+%+-10.1E : +8.1E+03
+%+-10.2E : +8.13E+03
+%+-10.5E : +8.12753E+03
+%+-10.10E : +8.1275341797E+03
+%+-10.30E : +8.127534179687500000000000000000E+03
+%+-30E : +8.127534E+03
+%+-30.E : +8E+03
+%+-30.0E : +8E+03
+%+-30.1E : +8.1E+03
+%+-30.2E : +8.13E+03
+%+-30.5E : +8.12753E+03
+%+-30.10E : +8.1275341797E+03
+%+-30.30E : +8.127534179687500000000000000000E+03
+%#-E : 8.127534E+03
+%#-.E : 8.E+03
+%#-.0E : 8.E+03
+%#-.1E : 8.1E+03
+%#-.2E : 8.13E+03
+%#-.5E : 8.12753E+03
+%#-.10E : 8.1275341797E+03
+%#-.30E : 8.127534179687500000000000000000E+03
+%#-1E : 8.127534E+03
+%#-1.E : 8.E+03
+%#-1.0E : 8.E+03
+%#-1.1E : 8.1E+03
+%#-1.2E : 8.13E+03
+%#-1.5E : 8.12753E+03
+%#-1.10E : 8.1275341797E+03
+%#-1.30E : 8.127534179687500000000000000000E+03
+%#-2E : 8.127534E+03
+%#-2.E : 8.E+03
+%#-2.0E : 8.E+03
+%#-2.1E : 8.1E+03
+%#-2.2E : 8.13E+03
+%#-2.5E : 8.12753E+03
+%#-2.10E : 8.1275341797E+03
+%#-2.30E : 8.127534179687500000000000000000E+03
+%#-5E : 8.127534E+03
+%#-5.E : 8.E+03
+%#-5.0E : 8.E+03
+%#-5.1E : 8.1E+03
+%#-5.2E : 8.13E+03
+%#-5.5E : 8.12753E+03
+%#-5.10E : 8.1275341797E+03
+%#-5.30E : 8.127534179687500000000000000000E+03
+%#-10E : 8.127534E+03
+%#-10.E : 8.E+03
+%#-10.0E : 8.E+03
+%#-10.1E : 8.1E+03
+%#-10.2E : 8.13E+03
+%#-10.5E : 8.12753E+03
+%#-10.10E : 8.1275341797E+03
+%#-10.30E : 8.127534179687500000000000000000E+03
+%#-30E : 8.127534E+03
+%#-30.E : 8.E+03
+%#-30.0E : 8.E+03
+%#-30.1E : 8.1E+03
+%#-30.2E : 8.13E+03
+%#-30.5E : 8.12753E+03
+%#-30.10E : 8.1275341797E+03
+%#-30.30E : 8.127534179687500000000000000000E+03
+%+#E : +8.127534E+03
+%+#.E : +8.E+03
+%+#.0E : +8.E+03
+%+#.1E : +8.1E+03
+%+#.2E : +8.13E+03
+%+#.5E : +8.12753E+03
+%+#.10E : +8.1275341797E+03
+%+#.30E : +8.127534179687500000000000000000E+03
+%+#0E : +8.127534E+03
+%+#0.E : +8.E+03
+%+#0.0E : +8.E+03
+%+#0.1E : +8.1E+03
+%+#0.2E : +8.13E+03
+%+#0.5E : +8.12753E+03
+%+#0.10E : +8.1275341797E+03
+%+#0.30E : +8.127534179687500000000000000000E+03
+%+#1E : +8.127534E+03
+%+#1.E : +8.E+03
+%+#1.0E : +8.E+03
+%+#1.1E : +8.1E+03
+%+#1.2E : +8.13E+03
+%+#1.5E : +8.12753E+03
+%+#1.10E : +8.1275341797E+03
+%+#1.30E : +8.127534179687500000000000000000E+03
+%+#2E : +8.127534E+03
+%+#2.E : +8.E+03
+%+#2.0E : +8.E+03
+%+#2.1E : +8.1E+03
+%+#2.2E : +8.13E+03
+%+#2.5E : +8.12753E+03
+%+#2.10E : +8.1275341797E+03
+%+#2.30E : +8.127534179687500000000000000000E+03
+%+#5E : +8.127534E+03
+%+#5.E : +8.E+03
+%+#5.0E : +8.E+03
+%+#5.1E : +8.1E+03
+%+#5.2E : +8.13E+03
+%+#5.5E : +8.12753E+03
+%+#5.10E : +8.1275341797E+03
+%+#5.30E : +8.127534179687500000000000000000E+03
+%+#10E : +8.127534E+03
+%+#10.E : +8.E+03
+%+#10.0E : +8.E+03
+%+#10.1E : +8.1E+03
+%+#10.2E : +8.13E+03
+%+#10.5E : +8.12753E+03
+%+#10.10E : +8.1275341797E+03
+%+#10.30E : +8.127534179687500000000000000000E+03
+%+#30E : +8.127534E+03
+%+#30.E : +8.E+03
+%+#30.0E : +8.E+03
+%+#30.1E : +8.1E+03
+%+#30.2E : +8.13E+03
+%+#30.5E : +8.12753E+03
+%+#30.10E : +8.1275341797E+03
+%+#30.30E : +8.127534179687500000000000000000E+03
+%-#E : 8.127534E+03
+%-#.E : 8.E+03
+%-#.0E : 8.E+03
+%-#.1E : 8.1E+03
+%-#.2E : 8.13E+03
+%-#.5E : 8.12753E+03
+%-#.10E : 8.1275341797E+03
+%-#.30E : 8.127534179687500000000000000000E+03
+%-#1E : 8.127534E+03
+%-#1.E : 8.E+03
+%-#1.0E : 8.E+03
+%-#1.1E : 8.1E+03
+%-#1.2E : 8.13E+03
+%-#1.5E : 8.12753E+03
+%-#1.10E : 8.1275341797E+03
+%-#1.30E : 8.127534179687500000000000000000E+03
+%-#2E : 8.127534E+03
+%-#2.E : 8.E+03
+%-#2.0E : 8.E+03
+%-#2.1E : 8.1E+03
+%-#2.2E : 8.13E+03
+%-#2.5E : 8.12753E+03
+%-#2.10E : 8.1275341797E+03
+%-#2.30E : 8.127534179687500000000000000000E+03
+%-#5E : 8.127534E+03
+%-#5.E : 8.E+03
+%-#5.0E : 8.E+03
+%-#5.1E : 8.1E+03
+%-#5.2E : 8.13E+03
+%-#5.5E : 8.12753E+03
+%-#5.10E : 8.1275341797E+03
+%-#5.30E : 8.127534179687500000000000000000E+03
+%-#10E : 8.127534E+03
+%-#10.E : 8.E+03
+%-#10.0E : 8.E+03
+%-#10.1E : 8.1E+03
+%-#10.2E : 8.13E+03
+%-#10.5E : 8.12753E+03
+%-#10.10E : 8.1275341797E+03
+%-#10.30E : 8.127534179687500000000000000000E+03
+%-#30E : 8.127534E+03
+%-#30.E : 8.E+03
+%-#30.0E : 8.E+03
+%-#30.1E : 8.1E+03
+%-#30.2E : 8.13E+03
+%-#30.5E : 8.12753E+03
+%-#30.10E : 8.1275341797E+03
+%-#30.30E : 8.127534179687500000000000000000E+03
+%0#E : 8.127534E+03
+%0#.E : 8.E+03
+%0#.0E : 8.E+03
+%0#.1E : 8.1E+03
+%0#.2E : 8.13E+03
+%0#.5E : 8.12753E+03
+%0#.10E : 8.1275341797E+03
+%0#.30E : 8.127534179687500000000000000000E+03
+%0#1E : 8.127534E+03
+%0#1.E : 8.E+03
+%0#1.0E : 8.E+03
+%0#1.1E : 8.1E+03
+%0#1.2E : 8.13E+03
+%0#1.5E : 8.12753E+03
+%0#1.10E : 8.1275341797E+03
+%0#1.30E : 8.127534179687500000000000000000E+03
+%0#2E : 8.127534E+03
+%0#2.E : 8.E+03
+%0#2.0E : 8.E+03
+%0#2.1E : 8.1E+03
+%0#2.2E : 8.13E+03
+%0#2.5E : 8.12753E+03
+%0#2.10E : 8.1275341797E+03
+%0#2.30E : 8.127534179687500000000000000000E+03
+%0#5E : 8.127534E+03
+%0#5.E : 8.E+03
+%0#5.0E : 8.E+03
+%0#5.1E : 8.1E+03
+%0#5.2E : 8.13E+03
+%0#5.5E : 8.12753E+03
+%0#5.10E : 8.1275341797E+03
+%0#5.30E : 8.127534179687500000000000000000E+03
+%0#10E : 8.127534E+03
+%0#10.E : 00008.E+03
+%0#10.0E : 00008.E+03
+%0#10.1E : 0008.1E+03
+%0#10.2E : 008.13E+03
+%0#10.5E : 8.12753E+03
+%0#10.10E : 8.1275341797E+03
+%0#10.30E : 8.127534179687500000000000000000E+03
+%0#30E : 0000000000000000008.127534E+03
+%0#30.E : 0000000000000000000000008.E+03
+%0#30.0E : 0000000000000000000000008.E+03
+%0#30.1E : 000000000000000000000008.1E+03
+%0#30.2E : 00000000000000000000008.13E+03
+%0#30.5E : 00000000000000000008.12753E+03
+%0#30.10E : 000000000000008.1275341797E+03
+%0#30.30E : 8.127534179687500000000000000000E+03
+%+0E : +8.127534E+03
+%+0.E : +8E+03
+%+0.0E : +8E+03
+%+0.1E : +8.1E+03
+%+0.2E : +8.13E+03
+%+0.5E : +8.12753E+03
+%+0.10E : +8.1275341797E+03
+%+0.30E : +8.127534179687500000000000000000E+03
+%+01E : +8.127534E+03
+%+01.E : +8E+03
+%+01.0E : +8E+03
+%+01.1E : +8.1E+03
+%+01.2E : +8.13E+03
+%+01.5E : +8.12753E+03
+%+01.10E : +8.1275341797E+03
+%+01.30E : +8.127534179687500000000000000000E+03
+%+02E : +8.127534E+03
+%+02.E : +8E+03
+%+02.0E : +8E+03
+%+02.1E : +8.1E+03
+%+02.2E : +8.13E+03
+%+02.5E : +8.12753E+03
+%+02.10E : +8.1275341797E+03
+%+02.30E : +8.127534179687500000000000000000E+03
+%+05E : +8.127534E+03
+%+05.E : +8E+03
+%+05.0E : +8E+03
+%+05.1E : +8.1E+03
+%+05.2E : +8.13E+03
+%+05.5E : +8.12753E+03
+%+05.10E : +8.1275341797E+03
+%+05.30E : +8.127534179687500000000000000000E+03
+%+010E : +8.127534E+03
+%+010.E : +00008E+03
+%+010.0E : +00008E+03
+%+010.1E : +008.1E+03
+%+010.2E : +08.13E+03
+%+010.5E : +8.12753E+03
+%+010.10E : +8.1275341797E+03
+%+010.30E : +8.127534179687500000000000000000E+03
+%+030E : +000000000000000008.127534E+03
+%+030.E : +0000000000000000000000008E+03
+%+030.0E : +0000000000000000000000008E+03
+%+030.1E : +00000000000000000000008.1E+03
+%+030.2E : +0000000000000000000008.13E+03
+%+030.5E : +0000000000000000008.12753E+03
+%+030.10E : +00000000000008.1275341797E+03
+%+030.30E : +8.127534179687500000000000000000E+03
+%#0E : 8.127534E+03
+%#0.E : 8.E+03
+%#0.0E : 8.E+03
+%#0.1E : 8.1E+03
+%#0.2E : 8.13E+03
+%#0.5E : 8.12753E+03
+%#0.10E : 8.1275341797E+03
+%#0.30E : 8.127534179687500000000000000000E+03
+%#01E : 8.127534E+03
+%#01.E : 8.E+03
+%#01.0E : 8.E+03
+%#01.1E : 8.1E+03
+%#01.2E : 8.13E+03
+%#01.5E : 8.12753E+03
+%#01.10E : 8.1275341797E+03
+%#01.30E : 8.127534179687500000000000000000E+03
+%#02E : 8.127534E+03
+%#02.E : 8.E+03
+%#02.0E : 8.E+03
+%#02.1E : 8.1E+03
+%#02.2E : 8.13E+03
+%#02.5E : 8.12753E+03
+%#02.10E : 8.1275341797E+03
+%#02.30E : 8.127534179687500000000000000000E+03
+%#05E : 8.127534E+03
+%#05.E : 8.E+03
+%#05.0E : 8.E+03
+%#05.1E : 8.1E+03
+%#05.2E : 8.13E+03
+%#05.5E : 8.12753E+03
+%#05.10E : 8.1275341797E+03
+%#05.30E : 8.127534179687500000000000000000E+03
+%#010E : 8.127534E+03
+%#010.E : 00008.E+03
+%#010.0E : 00008.E+03
+%#010.1E : 0008.1E+03
+%#010.2E : 008.13E+03
+%#010.5E : 8.12753E+03
+%#010.10E : 8.1275341797E+03
+%#010.30E : 8.127534179687500000000000000000E+03
+%#030E : 0000000000000000008.127534E+03
+%#030.E : 0000000000000000000000008.E+03
+%#030.0E : 0000000000000000000000008.E+03
+%#030.1E : 000000000000000000000008.1E+03
+%#030.2E : 00000000000000000000008.13E+03
+%#030.5E : 00000000000000000008.12753E+03
+%#030.10E : 000000000000008.1275341797E+03
+%#030.30E : 8.127534179687500000000000000000E+03
+%-+#E : +8.127534E+03
+%-+#.E : +8.E+03
+%-+#.0E : +8.E+03
+%-+#.1E : +8.1E+03
+%-+#.2E : +8.13E+03
+%-+#.5E : +8.12753E+03
+%-+#.10E : +8.1275341797E+03
+%-+#.30E : +8.127534179687500000000000000000E+03
+%-+#1E : +8.127534E+03
+%-+#1.E : +8.E+03
+%-+#1.0E : +8.E+03
+%-+#1.1E : +8.1E+03
+%-+#1.2E : +8.13E+03
+%-+#1.5E : +8.12753E+03
+%-+#1.10E : +8.1275341797E+03
+%-+#1.30E : +8.127534179687500000000000000000E+03
+%-+#2E : +8.127534E+03
+%-+#2.E : +8.E+03
+%-+#2.0E : +8.E+03
+%-+#2.1E : +8.1E+03
+%-+#2.2E : +8.13E+03
+%-+#2.5E : +8.12753E+03
+%-+#2.10E : +8.1275341797E+03
+%-+#2.30E : +8.127534179687500000000000000000E+03
+%-+#5E : +8.127534E+03
+%-+#5.E : +8.E+03
+%-+#5.0E : +8.E+03
+%-+#5.1E : +8.1E+03
+%-+#5.2E : +8.13E+03
+%-+#5.5E : +8.12753E+03
+%-+#5.10E : +8.1275341797E+03
+%-+#5.30E : +8.127534179687500000000000000000E+03
+%-+#10E : +8.127534E+03
+%-+#10.E : +8.E+03
+%-+#10.0E : +8.E+03
+%-+#10.1E : +8.1E+03
+%-+#10.2E : +8.13E+03
+%-+#10.5E : +8.12753E+03
+%-+#10.10E : +8.1275341797E+03
+%-+#10.30E : +8.127534179687500000000000000000E+03
+%-+#30E : +8.127534E+03
+%-+#30.E : +8.E+03
+%-+#30.0E : +8.E+03
+%-+#30.1E : +8.1E+03
+%-+#30.2E : +8.13E+03
+%-+#30.5E : +8.12753E+03
+%-+#30.10E : +8.1275341797E+03
+%-+#30.30E : +8.127534179687500000000000000000E+03
+%0+#E : +8.127534E+03
+%0+#.E : +8.E+03
+%0+#.0E : +8.E+03
+%0+#.1E : +8.1E+03
+%0+#.2E : +8.13E+03
+%0+#.5E : +8.12753E+03
+%0+#.10E : +8.1275341797E+03
+%0+#.30E : +8.127534179687500000000000000000E+03
+%0+#1E : +8.127534E+03
+%0+#1.E : +8.E+03
+%0+#1.0E : +8.E+03
+%0+#1.1E : +8.1E+03
+%0+#1.2E : +8.13E+03
+%0+#1.5E : +8.12753E+03
+%0+#1.10E : +8.1275341797E+03
+%0+#1.30E : +8.127534179687500000000000000000E+03
+%0+#2E : +8.127534E+03
+%0+#2.E : +8.E+03
+%0+#2.0E : +8.E+03
+%0+#2.1E : +8.1E+03
+%0+#2.2E : +8.13E+03
+%0+#2.5E : +8.12753E+03
+%0+#2.10E : +8.1275341797E+03
+%0+#2.30E : +8.127534179687500000000000000000E+03
+%0+#5E : +8.127534E+03
+%0+#5.E : +8.E+03
+%0+#5.0E : +8.E+03
+%0+#5.1E : +8.1E+03
+%0+#5.2E : +8.13E+03
+%0+#5.5E : +8.12753E+03
+%0+#5.10E : +8.1275341797E+03
+%0+#5.30E : +8.127534179687500000000000000000E+03
+%0+#10E : +8.127534E+03
+%0+#10.E : +0008.E+03
+%0+#10.0E : +0008.E+03
+%0+#10.1E : +008.1E+03
+%0+#10.2E : +08.13E+03
+%0+#10.5E : +8.12753E+03
+%0+#10.10E : +8.1275341797E+03
+%0+#10.30E : +8.127534179687500000000000000000E+03
+%0+#30E : +000000000000000008.127534E+03
+%0+#30.E : +000000000000000000000008.E+03
+%0+#30.0E : +000000000000000000000008.E+03
+%0+#30.1E : +00000000000000000000008.1E+03
+%0+#30.2E : +0000000000000000000008.13E+03
+%0+#30.5E : +0000000000000000008.12753E+03
+%0+#30.10E : +00000000000008.1275341797E+03
+%0+#30.30E : +8.127534179687500000000000000000E+03
+%#-+E : +8.127534E+03
+%#-+.E : +8.E+03
+%#-+.0E : +8.E+03
+%#-+.1E : +8.1E+03
+%#-+.2E : +8.13E+03
+%#-+.5E : +8.12753E+03
+%#-+.10E : +8.1275341797E+03
+%#-+.30E : +8.127534179687500000000000000000E+03
+%#-+1E : +8.127534E+03
+%#-+1.E : +8.E+03
+%#-+1.0E : +8.E+03
+%#-+1.1E : +8.1E+03
+%#-+1.2E : +8.13E+03
+%#-+1.5E : +8.12753E+03
+%#-+1.10E : +8.1275341797E+03
+%#-+1.30E : +8.127534179687500000000000000000E+03
+%#-+2E : +8.127534E+03
+%#-+2.E : +8.E+03
+%#-+2.0E : +8.E+03
+%#-+2.1E : +8.1E+03
+%#-+2.2E : +8.13E+03
+%#-+2.5E : +8.12753E+03
+%#-+2.10E : +8.1275341797E+03
+%#-+2.30E : +8.127534179687500000000000000000E+03
+%#-+5E : +8.127534E+03
+%#-+5.E : +8.E+03
+%#-+5.0E : +8.E+03
+%#-+5.1E : +8.1E+03
+%#-+5.2E : +8.13E+03
+%#-+5.5E : +8.12753E+03
+%#-+5.10E : +8.1275341797E+03
+%#-+5.30E : +8.127534179687500000000000000000E+03
+%#-+10E : +8.127534E+03
+%#-+10.E : +8.E+03
+%#-+10.0E : +8.E+03
+%#-+10.1E : +8.1E+03
+%#-+10.2E : +8.13E+03
+%#-+10.5E : +8.12753E+03
+%#-+10.10E : +8.1275341797E+03
+%#-+10.30E : +8.127534179687500000000000000000E+03
+%#-+30E : +8.127534E+03
+%#-+30.E : +8.E+03
+%#-+30.0E : +8.E+03
+%#-+30.1E : +8.1E+03
+%#-+30.2E : +8.13E+03
+%#-+30.5E : +8.12753E+03
+%#-+30.10E : +8.1275341797E+03
+%#-+30.30E : +8.127534179687500000000000000000E+03
+%+#-E : +8.127534E+03
+%+#-.E : +8.E+03
+%+#-.0E : +8.E+03
+%+#-.1E : +8.1E+03
+%+#-.2E : +8.13E+03
+%+#-.5E : +8.12753E+03
+%+#-.10E : +8.1275341797E+03
+%+#-.30E : +8.127534179687500000000000000000E+03
+%+#-1E : +8.127534E+03
+%+#-1.E : +8.E+03
+%+#-1.0E : +8.E+03
+%+#-1.1E : +8.1E+03
+%+#-1.2E : +8.13E+03
+%+#-1.5E : +8.12753E+03
+%+#-1.10E : +8.1275341797E+03
+%+#-1.30E : +8.127534179687500000000000000000E+03
+%+#-2E : +8.127534E+03
+%+#-2.E : +8.E+03
+%+#-2.0E : +8.E+03
+%+#-2.1E : +8.1E+03
+%+#-2.2E : +8.13E+03
+%+#-2.5E : +8.12753E+03
+%+#-2.10E : +8.1275341797E+03
+%+#-2.30E : +8.127534179687500000000000000000E+03
+%+#-5E : +8.127534E+03
+%+#-5.E : +8.E+03
+%+#-5.0E : +8.E+03
+%+#-5.1E : +8.1E+03
+%+#-5.2E : +8.13E+03
+%+#-5.5E : +8.12753E+03
+%+#-5.10E : +8.1275341797E+03
+%+#-5.30E : +8.127534179687500000000000000000E+03
+%+#-10E : +8.127534E+03
+%+#-10.E : +8.E+03
+%+#-10.0E : +8.E+03
+%+#-10.1E : +8.1E+03
+%+#-10.2E : +8.13E+03
+%+#-10.5E : +8.12753E+03
+%+#-10.10E : +8.1275341797E+03
+%+#-10.30E : +8.127534179687500000000000000000E+03
+%+#-30E : +8.127534E+03
+%+#-30.E : +8.E+03
+%+#-30.0E : +8.E+03
+%+#-30.1E : +8.1E+03
+%+#-30.2E : +8.13E+03
+%+#-30.5E : +8.12753E+03
+%+#-30.10E : +8.1275341797E+03
+%+#-30.30E : +8.127534179687500000000000000000E+03
+%+g : +8127.53
+%+.g : +8e+03
+%+.0g : +8e+03
+%+.1g : +8e+03
+%+.2g : +8.1e+03
+%+.5g : +8127.5
+%+.10g : +8127.53418
+%+.30g : +8127.5341796875
+%+0g : +8127.53
+%+0.g : +8e+03
+%+0.0g : +8e+03
+%+0.1g : +8e+03
+%+0.2g : +8.1e+03
+%+0.5g : +8127.5
+%+0.10g : +8127.53418
+%+0.30g : +8127.5341796875
+%+1g : +8127.53
+%+1.g : +8e+03
+%+1.0g : +8e+03
+%+1.1g : +8e+03
+%+1.2g : +8.1e+03
+%+1.5g : +8127.5
+%+1.10g : +8127.53418
+%+1.30g : +8127.5341796875
+%+2g : +8127.53
+%+2.g : +8e+03
+%+2.0g : +8e+03
+%+2.1g : +8e+03
+%+2.2g : +8.1e+03
+%+2.5g : +8127.5
+%+2.10g : +8127.53418
+%+2.30g : +8127.5341796875
+%+5g : +8127.53
+%+5.g : +8e+03
+%+5.0g : +8e+03
+%+5.1g : +8e+03
+%+5.2g : +8.1e+03
+%+5.5g : +8127.5
+%+5.10g : +8127.53418
+%+5.30g : +8127.5341796875
+%+10g : +8127.53
+%+10.g : +8e+03
+%+10.0g : +8e+03
+%+10.1g : +8e+03
+%+10.2g : +8.1e+03
+%+10.5g : +8127.5
+%+10.10g : +8127.53418
+%+10.30g : +8127.5341796875
+%+30g : +8127.53
+%+30.g : +8e+03
+%+30.0g : +8e+03
+%+30.1g : +8e+03
+%+30.2g : +8.1e+03
+%+30.5g : +8127.5
+%+30.10g : +8127.53418
+%+30.30g : +8127.5341796875
+%-g : 8127.53
+%-.g : 8e+03
+%-.0g : 8e+03
+%-.1g : 8e+03
+%-.2g : 8.1e+03
+%-.5g : 8127.5
+%-.10g : 8127.53418
+%-.30g : 8127.5341796875
+%-1g : 8127.53
+%-1.g : 8e+03
+%-1.0g : 8e+03
+%-1.1g : 8e+03
+%-1.2g : 8.1e+03
+%-1.5g : 8127.5
+%-1.10g : 8127.53418
+%-1.30g : 8127.5341796875
+%-2g : 8127.53
+%-2.g : 8e+03
+%-2.0g : 8e+03
+%-2.1g : 8e+03
+%-2.2g : 8.1e+03
+%-2.5g : 8127.5
+%-2.10g : 8127.53418
+%-2.30g : 8127.5341796875
+%-5g : 8127.53
+%-5.g : 8e+03
+%-5.0g : 8e+03
+%-5.1g : 8e+03
+%-5.2g : 8.1e+03
+%-5.5g : 8127.5
+%-5.10g : 8127.53418
+%-5.30g : 8127.5341796875
+%-10g : 8127.53
+%-10.g : 8e+03
+%-10.0g : 8e+03
+%-10.1g : 8e+03
+%-10.2g : 8.1e+03
+%-10.5g : 8127.5
+%-10.10g : 8127.53418
+%-10.30g : 8127.5341796875
+%-30g : 8127.53
+%-30.g : 8e+03
+%-30.0g : 8e+03
+%-30.1g : 8e+03
+%-30.2g : 8.1e+03
+%-30.5g : 8127.5
+%-30.10g : 8127.53418
+%-30.30g : 8127.5341796875
+%#g : 8127.53
+%#.g : 8.e+03
+%#.0g : 8.e+03
+%#.1g : 8.e+03
+%#.2g : 8.1e+03
+%#.5g : 8127.5
+%#.10g : 8127.534180
+%#.30g : 8127.53417968750000000000000000
+%#0g : 8127.53
+%#0.g : 8.e+03
+%#0.0g : 8.e+03
+%#0.1g : 8.e+03
+%#0.2g : 8.1e+03
+%#0.5g : 8127.5
+%#0.10g : 8127.534180
+%#0.30g : 8127.53417968750000000000000000
+%#1g : 8127.53
+%#1.g : 8.e+03
+%#1.0g : 8.e+03
+%#1.1g : 8.e+03
+%#1.2g : 8.1e+03
+%#1.5g : 8127.5
+%#1.10g : 8127.534180
+%#1.30g : 8127.53417968750000000000000000
+%#2g : 8127.53
+%#2.g : 8.e+03
+%#2.0g : 8.e+03
+%#2.1g : 8.e+03
+%#2.2g : 8.1e+03
+%#2.5g : 8127.5
+%#2.10g : 8127.534180
+%#2.30g : 8127.53417968750000000000000000
+%#5g : 8127.53
+%#5.g : 8.e+03
+%#5.0g : 8.e+03
+%#5.1g : 8.e+03
+%#5.2g : 8.1e+03
+%#5.5g : 8127.5
+%#5.10g : 8127.534180
+%#5.30g : 8127.53417968750000000000000000
+%#10g : 8127.53
+%#10.g : 8.e+03
+%#10.0g : 8.e+03
+%#10.1g : 8.e+03
+%#10.2g : 8.1e+03
+%#10.5g : 8127.5
+%#10.10g : 8127.534180
+%#10.30g : 8127.53417968750000000000000000
+%#30g : 8127.53
+%#30.g : 8.e+03
+%#30.0g : 8.e+03
+%#30.1g : 8.e+03
+%#30.2g : 8.1e+03
+%#30.5g : 8127.5
+%#30.10g : 8127.534180
+%#30.30g : 8127.53417968750000000000000000
+%0g : 8127.53
+%0.g : 8e+03
+%0.0g : 8e+03
+%0.1g : 8e+03
+%0.2g : 8.1e+03
+%0.5g : 8127.5
+%0.10g : 8127.53418
+%0.30g : 8127.5341796875
+%01g : 8127.53
+%01.g : 8e+03
+%01.0g : 8e+03
+%01.1g : 8e+03
+%01.2g : 8.1e+03
+%01.5g : 8127.5
+%01.10g : 8127.53418
+%01.30g : 8127.5341796875
+%02g : 8127.53
+%02.g : 8e+03
+%02.0g : 8e+03
+%02.1g : 8e+03
+%02.2g : 8.1e+03
+%02.5g : 8127.5
+%02.10g : 8127.53418
+%02.30g : 8127.5341796875
+%05g : 8127.53
+%05.g : 8e+03
+%05.0g : 8e+03
+%05.1g : 8e+03
+%05.2g : 8.1e+03
+%05.5g : 8127.5
+%05.10g : 8127.53418
+%05.30g : 8127.5341796875
+%010g : 0008127.53
+%010.g : 000008e+03
+%010.0g : 000008e+03
+%010.1g : 000008e+03
+%010.2g : 0008.1e+03
+%010.5g : 00008127.5
+%010.10g : 8127.53418
+%010.30g : 8127.5341796875
+%030g : 000000000000000000000008127.53
+%030.g : 00000000000000000000000008e+03
+%030.0g : 00000000000000000000000008e+03
+%030.1g : 00000000000000000000000008e+03
+%030.2g : 000000000000000000000008.1e+03
+%030.5g : 0000000000000000000000008127.5
+%030.10g : 000000000000000000008127.53418
+%030.30g : 0000000000000008127.5341796875
+%-+g : +8127.53
+%-+.g : +8e+03
+%-+.0g : +8e+03
+%-+.1g : +8e+03
+%-+.2g : +8.1e+03
+%-+.5g : +8127.5
+%-+.10g : +8127.53418
+%-+.30g : +8127.5341796875
+%-+1g : +8127.53
+%-+1.g : +8e+03
+%-+1.0g : +8e+03
+%-+1.1g : +8e+03
+%-+1.2g : +8.1e+03
+%-+1.5g : +8127.5
+%-+1.10g : +8127.53418
+%-+1.30g : +8127.5341796875
+%-+2g : +8127.53
+%-+2.g : +8e+03
+%-+2.0g : +8e+03
+%-+2.1g : +8e+03
+%-+2.2g : +8.1e+03
+%-+2.5g : +8127.5
+%-+2.10g : +8127.53418
+%-+2.30g : +8127.5341796875
+%-+5g : +8127.53
+%-+5.g : +8e+03
+%-+5.0g : +8e+03
+%-+5.1g : +8e+03
+%-+5.2g : +8.1e+03
+%-+5.5g : +8127.5
+%-+5.10g : +8127.53418
+%-+5.30g : +8127.5341796875
+%-+10g : +8127.53
+%-+10.g : +8e+03
+%-+10.0g : +8e+03
+%-+10.1g : +8e+03
+%-+10.2g : +8.1e+03
+%-+10.5g : +8127.5
+%-+10.10g : +8127.53418
+%-+10.30g : +8127.5341796875
+%-+30g : +8127.53
+%-+30.g : +8e+03
+%-+30.0g : +8e+03
+%-+30.1g : +8e+03
+%-+30.2g : +8.1e+03
+%-+30.5g : +8127.5
+%-+30.10g : +8127.53418
+%-+30.30g : +8127.5341796875
+%#+g : +8127.53
+%#+.g : +8.e+03
+%#+.0g : +8.e+03
+%#+.1g : +8.e+03
+%#+.2g : +8.1e+03
+%#+.5g : +8127.5
+%#+.10g : +8127.534180
+%#+.30g : +8127.53417968750000000000000000
+%#+0g : +8127.53
+%#+0.g : +8.e+03
+%#+0.0g : +8.e+03
+%#+0.1g : +8.e+03
+%#+0.2g : +8.1e+03
+%#+0.5g : +8127.5
+%#+0.10g : +8127.534180
+%#+0.30g : +8127.53417968750000000000000000
+%#+1g : +8127.53
+%#+1.g : +8.e+03
+%#+1.0g : +8.e+03
+%#+1.1g : +8.e+03
+%#+1.2g : +8.1e+03
+%#+1.5g : +8127.5
+%#+1.10g : +8127.534180
+%#+1.30g : +8127.53417968750000000000000000
+%#+2g : +8127.53
+%#+2.g : +8.e+03
+%#+2.0g : +8.e+03
+%#+2.1g : +8.e+03
+%#+2.2g : +8.1e+03
+%#+2.5g : +8127.5
+%#+2.10g : +8127.534180
+%#+2.30g : +8127.53417968750000000000000000
+%#+5g : +8127.53
+%#+5.g : +8.e+03
+%#+5.0g : +8.e+03
+%#+5.1g : +8.e+03
+%#+5.2g : +8.1e+03
+%#+5.5g : +8127.5
+%#+5.10g : +8127.534180
+%#+5.30g : +8127.53417968750000000000000000
+%#+10g : +8127.53
+%#+10.g : +8.e+03
+%#+10.0g : +8.e+03
+%#+10.1g : +8.e+03
+%#+10.2g : +8.1e+03
+%#+10.5g : +8127.5
+%#+10.10g : +8127.534180
+%#+10.30g : +8127.53417968750000000000000000
+%#+30g : +8127.53
+%#+30.g : +8.e+03
+%#+30.0g : +8.e+03
+%#+30.1g : +8.e+03
+%#+30.2g : +8.1e+03
+%#+30.5g : +8127.5
+%#+30.10g : +8127.534180
+%#+30.30g : +8127.53417968750000000000000000
+%+0g : +8127.53
+%+0.g : +8e+03
+%+0.0g : +8e+03
+%+0.1g : +8e+03
+%+0.2g : +8.1e+03
+%+0.5g : +8127.5
+%+0.10g : +8127.53418
+%+0.30g : +8127.5341796875
+%+01g : +8127.53
+%+01.g : +8e+03
+%+01.0g : +8e+03
+%+01.1g : +8e+03
+%+01.2g : +8.1e+03
+%+01.5g : +8127.5
+%+01.10g : +8127.53418
+%+01.30g : +8127.5341796875
+%+02g : +8127.53
+%+02.g : +8e+03
+%+02.0g : +8e+03
+%+02.1g : +8e+03
+%+02.2g : +8.1e+03
+%+02.5g : +8127.5
+%+02.10g : +8127.53418
+%+02.30g : +8127.5341796875
+%+05g : +8127.53
+%+05.g : +8e+03
+%+05.0g : +8e+03
+%+05.1g : +8e+03
+%+05.2g : +8.1e+03
+%+05.5g : +8127.5
+%+05.10g : +8127.53418
+%+05.30g : +8127.5341796875
+%+010g : +008127.53
+%+010.g : +00008e+03
+%+010.0g : +00008e+03
+%+010.1g : +00008e+03
+%+010.2g : +008.1e+03
+%+010.5g : +0008127.5
+%+010.10g : +8127.53418
+%+010.30g : +8127.5341796875
+%+030g : +00000000000000000000008127.53
+%+030.g : +0000000000000000000000008e+03
+%+030.0g : +0000000000000000000000008e+03
+%+030.1g : +0000000000000000000000008e+03
+%+030.2g : +00000000000000000000008.1e+03
+%+030.5g : +000000000000000000000008127.5
+%+030.10g : +00000000000000000008127.53418
+%+030.30g : +000000000000008127.5341796875
+%+-g : +8127.53
+%+-.g : +8e+03
+%+-.0g : +8e+03
+%+-.1g : +8e+03
+%+-.2g : +8.1e+03
+%+-.5g : +8127.5
+%+-.10g : +8127.53418
+%+-.30g : +8127.5341796875
+%+-1g : +8127.53
+%+-1.g : +8e+03
+%+-1.0g : +8e+03
+%+-1.1g : +8e+03
+%+-1.2g : +8.1e+03
+%+-1.5g : +8127.5
+%+-1.10g : +8127.53418
+%+-1.30g : +8127.5341796875
+%+-2g : +8127.53
+%+-2.g : +8e+03
+%+-2.0g : +8e+03
+%+-2.1g : +8e+03
+%+-2.2g : +8.1e+03
+%+-2.5g : +8127.5
+%+-2.10g : +8127.53418
+%+-2.30g : +8127.5341796875
+%+-5g : +8127.53
+%+-5.g : +8e+03
+%+-5.0g : +8e+03
+%+-5.1g : +8e+03
+%+-5.2g : +8.1e+03
+%+-5.5g : +8127.5
+%+-5.10g : +8127.53418
+%+-5.30g : +8127.5341796875
+%+-10g : +8127.53
+%+-10.g : +8e+03
+%+-10.0g : +8e+03
+%+-10.1g : +8e+03
+%+-10.2g : +8.1e+03
+%+-10.5g : +8127.5
+%+-10.10g : +8127.53418
+%+-10.30g : +8127.5341796875
+%+-30g : +8127.53
+%+-30.g : +8e+03
+%+-30.0g : +8e+03
+%+-30.1g : +8e+03
+%+-30.2g : +8.1e+03
+%+-30.5g : +8127.5
+%+-30.10g : +8127.53418
+%+-30.30g : +8127.5341796875
+%#-g : 8127.53
+%#-.g : 8.e+03
+%#-.0g : 8.e+03
+%#-.1g : 8.e+03
+%#-.2g : 8.1e+03
+%#-.5g : 8127.5
+%#-.10g : 8127.534180
+%#-.30g : 8127.53417968750000000000000000
+%#-1g : 8127.53
+%#-1.g : 8.e+03
+%#-1.0g : 8.e+03
+%#-1.1g : 8.e+03
+%#-1.2g : 8.1e+03
+%#-1.5g : 8127.5
+%#-1.10g : 8127.534180
+%#-1.30g : 8127.53417968750000000000000000
+%#-2g : 8127.53
+%#-2.g : 8.e+03
+%#-2.0g : 8.e+03
+%#-2.1g : 8.e+03
+%#-2.2g : 8.1e+03
+%#-2.5g : 8127.5
+%#-2.10g : 8127.534180
+%#-2.30g : 8127.53417968750000000000000000
+%#-5g : 8127.53
+%#-5.g : 8.e+03
+%#-5.0g : 8.e+03
+%#-5.1g : 8.e+03
+%#-5.2g : 8.1e+03
+%#-5.5g : 8127.5
+%#-5.10g : 8127.534180
+%#-5.30g : 8127.53417968750000000000000000
+%#-10g : 8127.53
+%#-10.g : 8.e+03
+%#-10.0g : 8.e+03
+%#-10.1g : 8.e+03
+%#-10.2g : 8.1e+03
+%#-10.5g : 8127.5
+%#-10.10g : 8127.534180
+%#-10.30g : 8127.53417968750000000000000000
+%#-30g : 8127.53
+%#-30.g : 8.e+03
+%#-30.0g : 8.e+03
+%#-30.1g : 8.e+03
+%#-30.2g : 8.1e+03
+%#-30.5g : 8127.5
+%#-30.10g : 8127.534180
+%#-30.30g : 8127.53417968750000000000000000
+%+#g : +8127.53
+%+#.g : +8.e+03
+%+#.0g : +8.e+03
+%+#.1g : +8.e+03
+%+#.2g : +8.1e+03
+%+#.5g : +8127.5
+%+#.10g : +8127.534180
+%+#.30g : +8127.53417968750000000000000000
+%+#0g : +8127.53
+%+#0.g : +8.e+03
+%+#0.0g : +8.e+03
+%+#0.1g : +8.e+03
+%+#0.2g : +8.1e+03
+%+#0.5g : +8127.5
+%+#0.10g : +8127.534180
+%+#0.30g : +8127.53417968750000000000000000
+%+#1g : +8127.53
+%+#1.g : +8.e+03
+%+#1.0g : +8.e+03
+%+#1.1g : +8.e+03
+%+#1.2g : +8.1e+03
+%+#1.5g : +8127.5
+%+#1.10g : +8127.534180
+%+#1.30g : +8127.53417968750000000000000000
+%+#2g : +8127.53
+%+#2.g : +8.e+03
+%+#2.0g : +8.e+03
+%+#2.1g : +8.e+03
+%+#2.2g : +8.1e+03
+%+#2.5g : +8127.5
+%+#2.10g : +8127.534180
+%+#2.30g : +8127.53417968750000000000000000
+%+#5g : +8127.53
+%+#5.g : +8.e+03
+%+#5.0g : +8.e+03
+%+#5.1g : +8.e+03
+%+#5.2g : +8.1e+03
+%+#5.5g : +8127.5
+%+#5.10g : +8127.534180
+%+#5.30g : +8127.53417968750000000000000000
+%+#10g : +8127.53
+%+#10.g : +8.e+03
+%+#10.0g : +8.e+03
+%+#10.1g : +8.e+03
+%+#10.2g : +8.1e+03
+%+#10.5g : +8127.5
+%+#10.10g : +8127.534180
+%+#10.30g : +8127.53417968750000000000000000
+%+#30g : +8127.53
+%+#30.g : +8.e+03
+%+#30.0g : +8.e+03
+%+#30.1g : +8.e+03
+%+#30.2g : +8.1e+03
+%+#30.5g : +8127.5
+%+#30.10g : +8127.534180
+%+#30.30g : +8127.53417968750000000000000000
+%-#g : 8127.53
+%-#.g : 8.e+03
+%-#.0g : 8.e+03
+%-#.1g : 8.e+03
+%-#.2g : 8.1e+03
+%-#.5g : 8127.5
+%-#.10g : 8127.534180
+%-#.30g : 8127.53417968750000000000000000
+%-#1g : 8127.53
+%-#1.g : 8.e+03
+%-#1.0g : 8.e+03
+%-#1.1g : 8.e+03
+%-#1.2g : 8.1e+03
+%-#1.5g : 8127.5
+%-#1.10g : 8127.534180
+%-#1.30g : 8127.53417968750000000000000000
+%-#2g : 8127.53
+%-#2.g : 8.e+03
+%-#2.0g : 8.e+03
+%-#2.1g : 8.e+03
+%-#2.2g : 8.1e+03
+%-#2.5g : 8127.5
+%-#2.10g : 8127.534180
+%-#2.30g : 8127.53417968750000000000000000
+%-#5g : 8127.53
+%-#5.g : 8.e+03
+%-#5.0g : 8.e+03
+%-#5.1g : 8.e+03
+%-#5.2g : 8.1e+03
+%-#5.5g : 8127.5
+%-#5.10g : 8127.534180
+%-#5.30g : 8127.53417968750000000000000000
+%-#10g : 8127.53
+%-#10.g : 8.e+03
+%-#10.0g : 8.e+03
+%-#10.1g : 8.e+03
+%-#10.2g : 8.1e+03
+%-#10.5g : 8127.5
+%-#10.10g : 8127.534180
+%-#10.30g : 8127.53417968750000000000000000
+%-#30g : 8127.53
+%-#30.g : 8.e+03
+%-#30.0g : 8.e+03
+%-#30.1g : 8.e+03
+%-#30.2g : 8.1e+03
+%-#30.5g : 8127.5
+%-#30.10g : 8127.534180
+%-#30.30g : 8127.53417968750000000000000000
+%0#g : 8127.53
+%0#.g : 8.e+03
+%0#.0g : 8.e+03
+%0#.1g : 8.e+03
+%0#.2g : 8.1e+03
+%0#.5g : 8127.5
+%0#.10g : 8127.534180
+%0#.30g : 8127.53417968750000000000000000
+%0#1g : 8127.53
+%0#1.g : 8.e+03
+%0#1.0g : 8.e+03
+%0#1.1g : 8.e+03
+%0#1.2g : 8.1e+03
+%0#1.5g : 8127.5
+%0#1.10g : 8127.534180
+%0#1.30g : 8127.53417968750000000000000000
+%0#2g : 8127.53
+%0#2.g : 8.e+03
+%0#2.0g : 8.e+03
+%0#2.1g : 8.e+03
+%0#2.2g : 8.1e+03
+%0#2.5g : 8127.5
+%0#2.10g : 8127.534180
+%0#2.30g : 8127.53417968750000000000000000
+%0#5g : 8127.53
+%0#5.g : 8.e+03
+%0#5.0g : 8.e+03
+%0#5.1g : 8.e+03
+%0#5.2g : 8.1e+03
+%0#5.5g : 8127.5
+%0#5.10g : 8127.534180
+%0#5.30g : 8127.53417968750000000000000000
+%0#10g : 0008127.53
+%0#10.g : 00008.e+03
+%0#10.0g : 00008.e+03
+%0#10.1g : 00008.e+03
+%0#10.2g : 0008.1e+03
+%0#10.5g : 00008127.5
+%0#10.10g : 8127.534180
+%0#10.30g : 8127.53417968750000000000000000
+%0#30g : 000000000000000000000008127.53
+%0#30.g : 0000000000000000000000008.e+03
+%0#30.0g : 0000000000000000000000008.e+03
+%0#30.1g : 0000000000000000000000008.e+03
+%0#30.2g : 000000000000000000000008.1e+03
+%0#30.5g : 0000000000000000000000008127.5
+%0#30.10g : 00000000000000000008127.534180
+%0#30.30g : 8127.53417968750000000000000000
+%+0g : +8127.53
+%+0.g : +8e+03
+%+0.0g : +8e+03
+%+0.1g : +8e+03
+%+0.2g : +8.1e+03
+%+0.5g : +8127.5
+%+0.10g : +8127.53418
+%+0.30g : +8127.5341796875
+%+01g : +8127.53
+%+01.g : +8e+03
+%+01.0g : +8e+03
+%+01.1g : +8e+03
+%+01.2g : +8.1e+03
+%+01.5g : +8127.5
+%+01.10g : +8127.53418
+%+01.30g : +8127.5341796875
+%+02g : +8127.53
+%+02.g : +8e+03
+%+02.0g : +8e+03
+%+02.1g : +8e+03
+%+02.2g : +8.1e+03
+%+02.5g : +8127.5
+%+02.10g : +8127.53418
+%+02.30g : +8127.5341796875
+%+05g : +8127.53
+%+05.g : +8e+03
+%+05.0g : +8e+03
+%+05.1g : +8e+03
+%+05.2g : +8.1e+03
+%+05.5g : +8127.5
+%+05.10g : +8127.53418
+%+05.30g : +8127.5341796875
+%+010g : +008127.53
+%+010.g : +00008e+03
+%+010.0g : +00008e+03
+%+010.1g : +00008e+03
+%+010.2g : +008.1e+03
+%+010.5g : +0008127.5
+%+010.10g : +8127.53418
+%+010.30g : +8127.5341796875
+%+030g : +00000000000000000000008127.53
+%+030.g : +0000000000000000000000008e+03
+%+030.0g : +0000000000000000000000008e+03
+%+030.1g : +0000000000000000000000008e+03
+%+030.2g : +00000000000000000000008.1e+03
+%+030.5g : +000000000000000000000008127.5
+%+030.10g : +00000000000000000008127.53418
+%+030.30g : +000000000000008127.5341796875
+%#0g : 8127.53
+%#0.g : 8.e+03
+%#0.0g : 8.e+03
+%#0.1g : 8.e+03
+%#0.2g : 8.1e+03
+%#0.5g : 8127.5
+%#0.10g : 8127.534180
+%#0.30g : 8127.53417968750000000000000000
+%#01g : 8127.53
+%#01.g : 8.e+03
+%#01.0g : 8.e+03
+%#01.1g : 8.e+03
+%#01.2g : 8.1e+03
+%#01.5g : 8127.5
+%#01.10g : 8127.534180
+%#01.30g : 8127.53417968750000000000000000
+%#02g : 8127.53
+%#02.g : 8.e+03
+%#02.0g : 8.e+03
+%#02.1g : 8.e+03
+%#02.2g : 8.1e+03
+%#02.5g : 8127.5
+%#02.10g : 8127.534180
+%#02.30g : 8127.53417968750000000000000000
+%#05g : 8127.53
+%#05.g : 8.e+03
+%#05.0g : 8.e+03
+%#05.1g : 8.e+03
+%#05.2g : 8.1e+03
+%#05.5g : 8127.5
+%#05.10g : 8127.534180
+%#05.30g : 8127.53417968750000000000000000
+%#010g : 0008127.53
+%#010.g : 00008.e+03
+%#010.0g : 00008.e+03
+%#010.1g : 00008.e+03
+%#010.2g : 0008.1e+03
+%#010.5g : 00008127.5
+%#010.10g : 8127.534180
+%#010.30g : 8127.53417968750000000000000000
+%#030g : 000000000000000000000008127.53
+%#030.g : 0000000000000000000000008.e+03
+%#030.0g : 0000000000000000000000008.e+03
+%#030.1g : 0000000000000000000000008.e+03
+%#030.2g : 000000000000000000000008.1e+03
+%#030.5g : 0000000000000000000000008127.5
+%#030.10g : 00000000000000000008127.534180
+%#030.30g : 8127.53417968750000000000000000
+%-+#g : +8127.53
+%-+#.g : +8.e+03
+%-+#.0g : +8.e+03
+%-+#.1g : +8.e+03
+%-+#.2g : +8.1e+03
+%-+#.5g : +8127.5
+%-+#.10g : +8127.534180
+%-+#.30g : +8127.53417968750000000000000000
+%-+#1g : +8127.53
+%-+#1.g : +8.e+03
+%-+#1.0g : +8.e+03
+%-+#1.1g : +8.e+03
+%-+#1.2g : +8.1e+03
+%-+#1.5g : +8127.5
+%-+#1.10g : +8127.534180
+%-+#1.30g : +8127.53417968750000000000000000
+%-+#2g : +8127.53
+%-+#2.g : +8.e+03
+%-+#2.0g : +8.e+03
+%-+#2.1g : +8.e+03
+%-+#2.2g : +8.1e+03
+%-+#2.5g : +8127.5
+%-+#2.10g : +8127.534180
+%-+#2.30g : +8127.53417968750000000000000000
+%-+#5g : +8127.53
+%-+#5.g : +8.e+03
+%-+#5.0g : +8.e+03
+%-+#5.1g : +8.e+03
+%-+#5.2g : +8.1e+03
+%-+#5.5g : +8127.5
+%-+#5.10g : +8127.534180
+%-+#5.30g : +8127.53417968750000000000000000
+%-+#10g : +8127.53
+%-+#10.g : +8.e+03
+%-+#10.0g : +8.e+03
+%-+#10.1g : +8.e+03
+%-+#10.2g : +8.1e+03
+%-+#10.5g : +8127.5
+%-+#10.10g : +8127.534180
+%-+#10.30g : +8127.53417968750000000000000000
+%-+#30g : +8127.53
+%-+#30.g : +8.e+03
+%-+#30.0g : +8.e+03
+%-+#30.1g : +8.e+03
+%-+#30.2g : +8.1e+03
+%-+#30.5g : +8127.5
+%-+#30.10g : +8127.534180
+%-+#30.30g : +8127.53417968750000000000000000
+%0+#g : +8127.53
+%0+#.g : +8.e+03
+%0+#.0g : +8.e+03
+%0+#.1g : +8.e+03
+%0+#.2g : +8.1e+03
+%0+#.5g : +8127.5
+%0+#.10g : +8127.534180
+%0+#.30g : +8127.53417968750000000000000000
+%0+#1g : +8127.53
+%0+#1.g : +8.e+03
+%0+#1.0g : +8.e+03
+%0+#1.1g : +8.e+03
+%0+#1.2g : +8.1e+03
+%0+#1.5g : +8127.5
+%0+#1.10g : +8127.534180
+%0+#1.30g : +8127.53417968750000000000000000
+%0+#2g : +8127.53
+%0+#2.g : +8.e+03
+%0+#2.0g : +8.e+03
+%0+#2.1g : +8.e+03
+%0+#2.2g : +8.1e+03
+%0+#2.5g : +8127.5
+%0+#2.10g : +8127.534180
+%0+#2.30g : +8127.53417968750000000000000000
+%0+#5g : +8127.53
+%0+#5.g : +8.e+03
+%0+#5.0g : +8.e+03
+%0+#5.1g : +8.e+03
+%0+#5.2g : +8.1e+03
+%0+#5.5g : +8127.5
+%0+#5.10g : +8127.534180
+%0+#5.30g : +8127.53417968750000000000000000
+%0+#10g : +008127.53
+%0+#10.g : +0008.e+03
+%0+#10.0g : +0008.e+03
+%0+#10.1g : +0008.e+03
+%0+#10.2g : +008.1e+03
+%0+#10.5g : +0008127.5
+%0+#10.10g : +8127.534180
+%0+#10.30g : +8127.53417968750000000000000000
+%0+#30g : +00000000000000000000008127.53
+%0+#30.g : +000000000000000000000008.e+03
+%0+#30.0g : +000000000000000000000008.e+03
+%0+#30.1g : +000000000000000000000008.e+03
+%0+#30.2g : +00000000000000000000008.1e+03
+%0+#30.5g : +000000000000000000000008127.5
+%0+#30.10g : +0000000000000000008127.534180
+%0+#30.30g : +8127.53417968750000000000000000
+%#-+g : +8127.53
+%#-+.g : +8.e+03
+%#-+.0g : +8.e+03
+%#-+.1g : +8.e+03
+%#-+.2g : +8.1e+03
+%#-+.5g : +8127.5
+%#-+.10g : +8127.534180
+%#-+.30g : +8127.53417968750000000000000000
+%#-+1g : +8127.53
+%#-+1.g : +8.e+03
+%#-+1.0g : +8.e+03
+%#-+1.1g : +8.e+03
+%#-+1.2g : +8.1e+03
+%#-+1.5g : +8127.5
+%#-+1.10g : +8127.534180
+%#-+1.30g : +8127.53417968750000000000000000
+%#-+2g : +8127.53
+%#-+2.g : +8.e+03
+%#-+2.0g : +8.e+03
+%#-+2.1g : +8.e+03
+%#-+2.2g : +8.1e+03
+%#-+2.5g : +8127.5
+%#-+2.10g : +8127.534180
+%#-+2.30g : +8127.53417968750000000000000000
+%#-+5g : +8127.53
+%#-+5.g : +8.e+03
+%#-+5.0g : +8.e+03
+%#-+5.1g : +8.e+03
+%#-+5.2g : +8.1e+03
+%#-+5.5g : +8127.5
+%#-+5.10g : +8127.534180
+%#-+5.30g : +8127.53417968750000000000000000
+%#-+10g : +8127.53
+%#-+10.g : +8.e+03
+%#-+10.0g : +8.e+03
+%#-+10.1g : +8.e+03
+%#-+10.2g : +8.1e+03
+%#-+10.5g : +8127.5
+%#-+10.10g : +8127.534180
+%#-+10.30g : +8127.53417968750000000000000000
+%#-+30g : +8127.53
+%#-+30.g : +8.e+03
+%#-+30.0g : +8.e+03
+%#-+30.1g : +8.e+03
+%#-+30.2g : +8.1e+03
+%#-+30.5g : +8127.5
+%#-+30.10g : +8127.534180
+%#-+30.30g : +8127.53417968750000000000000000
+%+#-g : +8127.53
+%+#-.g : +8.e+03
+%+#-.0g : +8.e+03
+%+#-.1g : +8.e+03
+%+#-.2g : +8.1e+03
+%+#-.5g : +8127.5
+%+#-.10g : +8127.534180
+%+#-.30g : +8127.53417968750000000000000000
+%+#-1g : +8127.53
+%+#-1.g : +8.e+03
+%+#-1.0g : +8.e+03
+%+#-1.1g : +8.e+03
+%+#-1.2g : +8.1e+03
+%+#-1.5g : +8127.5
+%+#-1.10g : +8127.534180
+%+#-1.30g : +8127.53417968750000000000000000
+%+#-2g : +8127.53
+%+#-2.g : +8.e+03
+%+#-2.0g : +8.e+03
+%+#-2.1g : +8.e+03
+%+#-2.2g : +8.1e+03
+%+#-2.5g : +8127.5
+%+#-2.10g : +8127.534180
+%+#-2.30g : +8127.53417968750000000000000000
+%+#-5g : +8127.53
+%+#-5.g : +8.e+03
+%+#-5.0g : +8.e+03
+%+#-5.1g : +8.e+03
+%+#-5.2g : +8.1e+03
+%+#-5.5g : +8127.5
+%+#-5.10g : +8127.534180
+%+#-5.30g : +8127.53417968750000000000000000
+%+#-10g : +8127.53
+%+#-10.g : +8.e+03
+%+#-10.0g : +8.e+03
+%+#-10.1g : +8.e+03
+%+#-10.2g : +8.1e+03
+%+#-10.5g : +8127.5
+%+#-10.10g : +8127.534180
+%+#-10.30g : +8127.53417968750000000000000000
+%+#-30g : +8127.53
+%+#-30.g : +8.e+03
+%+#-30.0g : +8.e+03
+%+#-30.1g : +8.e+03
+%+#-30.2g : +8.1e+03
+%+#-30.5g : +8127.5
+%+#-30.10g : +8127.534180
+%+#-30.30g : +8127.53417968750000000000000000
+%+G : +8127.53
+%+.G : +8E+03
+%+.0G : +8E+03
+%+.1G : +8E+03
+%+.2G : +8.1E+03
+%+.5G : +8127.5
+%+.10G : +8127.53418
+%+.30G : +8127.5341796875
+%+0G : +8127.53
+%+0.G : +8E+03
+%+0.0G : +8E+03
+%+0.1G : +8E+03
+%+0.2G : +8.1E+03
+%+0.5G : +8127.5
+%+0.10G : +8127.53418
+%+0.30G : +8127.5341796875
+%+1G : +8127.53
+%+1.G : +8E+03
+%+1.0G : +8E+03
+%+1.1G : +8E+03
+%+1.2G : +8.1E+03
+%+1.5G : +8127.5
+%+1.10G : +8127.53418
+%+1.30G : +8127.5341796875
+%+2G : +8127.53
+%+2.G : +8E+03
+%+2.0G : +8E+03
+%+2.1G : +8E+03
+%+2.2G : +8.1E+03
+%+2.5G : +8127.5
+%+2.10G : +8127.53418
+%+2.30G : +8127.5341796875
+%+5G : +8127.53
+%+5.G : +8E+03
+%+5.0G : +8E+03
+%+5.1G : +8E+03
+%+5.2G : +8.1E+03
+%+5.5G : +8127.5
+%+5.10G : +8127.53418
+%+5.30G : +8127.5341796875
+%+10G : +8127.53
+%+10.G : +8E+03
+%+10.0G : +8E+03
+%+10.1G : +8E+03
+%+10.2G : +8.1E+03
+%+10.5G : +8127.5
+%+10.10G : +8127.53418
+%+10.30G : +8127.5341796875
+%+30G : +8127.53
+%+30.G : +8E+03
+%+30.0G : +8E+03
+%+30.1G : +8E+03
+%+30.2G : +8.1E+03
+%+30.5G : +8127.5
+%+30.10G : +8127.53418
+%+30.30G : +8127.5341796875
+%-G : 8127.53
+%-.G : 8E+03
+%-.0G : 8E+03
+%-.1G : 8E+03
+%-.2G : 8.1E+03
+%-.5G : 8127.5
+%-.10G : 8127.53418
+%-.30G : 8127.5341796875
+%-1G : 8127.53
+%-1.G : 8E+03
+%-1.0G : 8E+03
+%-1.1G : 8E+03
+%-1.2G : 8.1E+03
+%-1.5G : 8127.5
+%-1.10G : 8127.53418
+%-1.30G : 8127.5341796875
+%-2G : 8127.53
+%-2.G : 8E+03
+%-2.0G : 8E+03
+%-2.1G : 8E+03
+%-2.2G : 8.1E+03
+%-2.5G : 8127.5
+%-2.10G : 8127.53418
+%-2.30G : 8127.5341796875
+%-5G : 8127.53
+%-5.G : 8E+03
+%-5.0G : 8E+03
+%-5.1G : 8E+03
+%-5.2G : 8.1E+03
+%-5.5G : 8127.5
+%-5.10G : 8127.53418
+%-5.30G : 8127.5341796875
+%-10G : 8127.53
+%-10.G : 8E+03
+%-10.0G : 8E+03
+%-10.1G : 8E+03
+%-10.2G : 8.1E+03
+%-10.5G : 8127.5
+%-10.10G : 8127.53418
+%-10.30G : 8127.5341796875
+%-30G : 8127.53
+%-30.G : 8E+03
+%-30.0G : 8E+03
+%-30.1G : 8E+03
+%-30.2G : 8.1E+03
+%-30.5G : 8127.5
+%-30.10G : 8127.53418
+%-30.30G : 8127.5341796875
+%#G : 8127.53
+%#.G : 8.E+03
+%#.0G : 8.E+03
+%#.1G : 8.E+03
+%#.2G : 8.1E+03
+%#.5G : 8127.5
+%#.10G : 8127.534180
+%#.30G : 8127.53417968750000000000000000
+%#0G : 8127.53
+%#0.G : 8.E+03
+%#0.0G : 8.E+03
+%#0.1G : 8.E+03
+%#0.2G : 8.1E+03
+%#0.5G : 8127.5
+%#0.10G : 8127.534180
+%#0.30G : 8127.53417968750000000000000000
+%#1G : 8127.53
+%#1.G : 8.E+03
+%#1.0G : 8.E+03
+%#1.1G : 8.E+03
+%#1.2G : 8.1E+03
+%#1.5G : 8127.5
+%#1.10G : 8127.534180
+%#1.30G : 8127.53417968750000000000000000
+%#2G : 8127.53
+%#2.G : 8.E+03
+%#2.0G : 8.E+03
+%#2.1G : 8.E+03
+%#2.2G : 8.1E+03
+%#2.5G : 8127.5
+%#2.10G : 8127.534180
+%#2.30G : 8127.53417968750000000000000000
+%#5G : 8127.53
+%#5.G : 8.E+03
+%#5.0G : 8.E+03
+%#5.1G : 8.E+03
+%#5.2G : 8.1E+03
+%#5.5G : 8127.5
+%#5.10G : 8127.534180
+%#5.30G : 8127.53417968750000000000000000
+%#10G : 8127.53
+%#10.G : 8.E+03
+%#10.0G : 8.E+03
+%#10.1G : 8.E+03
+%#10.2G : 8.1E+03
+%#10.5G : 8127.5
+%#10.10G : 8127.534180
+%#10.30G : 8127.53417968750000000000000000
+%#30G : 8127.53
+%#30.G : 8.E+03
+%#30.0G : 8.E+03
+%#30.1G : 8.E+03
+%#30.2G : 8.1E+03
+%#30.5G : 8127.5
+%#30.10G : 8127.534180
+%#30.30G : 8127.53417968750000000000000000
+%0G : 8127.53
+%0.G : 8E+03
+%0.0G : 8E+03
+%0.1G : 8E+03
+%0.2G : 8.1E+03
+%0.5G : 8127.5
+%0.10G : 8127.53418
+%0.30G : 8127.5341796875
+%01G : 8127.53
+%01.G : 8E+03
+%01.0G : 8E+03
+%01.1G : 8E+03
+%01.2G : 8.1E+03
+%01.5G : 8127.5
+%01.10G : 8127.53418
+%01.30G : 8127.5341796875
+%02G : 8127.53
+%02.G : 8E+03
+%02.0G : 8E+03
+%02.1G : 8E+03
+%02.2G : 8.1E+03
+%02.5G : 8127.5
+%02.10G : 8127.53418
+%02.30G : 8127.5341796875
+%05G : 8127.53
+%05.G : 8E+03
+%05.0G : 8E+03
+%05.1G : 8E+03
+%05.2G : 8.1E+03
+%05.5G : 8127.5
+%05.10G : 8127.53418
+%05.30G : 8127.5341796875
+%010G : 0008127.53
+%010.G : 000008E+03
+%010.0G : 000008E+03
+%010.1G : 000008E+03
+%010.2G : 0008.1E+03
+%010.5G : 00008127.5
+%010.10G : 8127.53418
+%010.30G : 8127.5341796875
+%030G : 000000000000000000000008127.53
+%030.G : 00000000000000000000000008E+03
+%030.0G : 00000000000000000000000008E+03
+%030.1G : 00000000000000000000000008E+03
+%030.2G : 000000000000000000000008.1E+03
+%030.5G : 0000000000000000000000008127.5
+%030.10G : 000000000000000000008127.53418
+%030.30G : 0000000000000008127.5341796875
+%-+G : +8127.53
+%-+.G : +8E+03
+%-+.0G : +8E+03
+%-+.1G : +8E+03
+%-+.2G : +8.1E+03
+%-+.5G : +8127.5
+%-+.10G : +8127.53418
+%-+.30G : +8127.5341796875
+%-+1G : +8127.53
+%-+1.G : +8E+03
+%-+1.0G : +8E+03
+%-+1.1G : +8E+03
+%-+1.2G : +8.1E+03
+%-+1.5G : +8127.5
+%-+1.10G : +8127.53418
+%-+1.30G : +8127.5341796875
+%-+2G : +8127.53
+%-+2.G : +8E+03
+%-+2.0G : +8E+03
+%-+2.1G : +8E+03
+%-+2.2G : +8.1E+03
+%-+2.5G : +8127.5
+%-+2.10G : +8127.53418
+%-+2.30G : +8127.5341796875
+%-+5G : +8127.53
+%-+5.G : +8E+03
+%-+5.0G : +8E+03
+%-+5.1G : +8E+03
+%-+5.2G : +8.1E+03
+%-+5.5G : +8127.5
+%-+5.10G : +8127.53418
+%-+5.30G : +8127.5341796875
+%-+10G : +8127.53
+%-+10.G : +8E+03
+%-+10.0G : +8E+03
+%-+10.1G : +8E+03
+%-+10.2G : +8.1E+03
+%-+10.5G : +8127.5
+%-+10.10G : +8127.53418
+%-+10.30G : +8127.5341796875
+%-+30G : +8127.53
+%-+30.G : +8E+03
+%-+30.0G : +8E+03
+%-+30.1G : +8E+03
+%-+30.2G : +8.1E+03
+%-+30.5G : +8127.5
+%-+30.10G : +8127.53418
+%-+30.30G : +8127.5341796875
+%#+G : +8127.53
+%#+.G : +8.E+03
+%#+.0G : +8.E+03
+%#+.1G : +8.E+03
+%#+.2G : +8.1E+03
+%#+.5G : +8127.5
+%#+.10G : +8127.534180
+%#+.30G : +8127.53417968750000000000000000
+%#+0G : +8127.53
+%#+0.G : +8.E+03
+%#+0.0G : +8.E+03
+%#+0.1G : +8.E+03
+%#+0.2G : +8.1E+03
+%#+0.5G : +8127.5
+%#+0.10G : +8127.534180
+%#+0.30G : +8127.53417968750000000000000000
+%#+1G : +8127.53
+%#+1.G : +8.E+03
+%#+1.0G : +8.E+03
+%#+1.1G : +8.E+03
+%#+1.2G : +8.1E+03
+%#+1.5G : +8127.5
+%#+1.10G : +8127.534180
+%#+1.30G : +8127.53417968750000000000000000
+%#+2G : +8127.53
+%#+2.G : +8.E+03
+%#+2.0G : +8.E+03
+%#+2.1G : +8.E+03
+%#+2.2G : +8.1E+03
+%#+2.5G : +8127.5
+%#+2.10G : +8127.534180
+%#+2.30G : +8127.53417968750000000000000000
+%#+5G : +8127.53
+%#+5.G : +8.E+03
+%#+5.0G : +8.E+03
+%#+5.1G : +8.E+03
+%#+5.2G : +8.1E+03
+%#+5.5G : +8127.5
+%#+5.10G : +8127.534180
+%#+5.30G : +8127.53417968750000000000000000
+%#+10G : +8127.53
+%#+10.G : +8.E+03
+%#+10.0G : +8.E+03
+%#+10.1G : +8.E+03
+%#+10.2G : +8.1E+03
+%#+10.5G : +8127.5
+%#+10.10G : +8127.534180
+%#+10.30G : +8127.53417968750000000000000000
+%#+30G : +8127.53
+%#+30.G : +8.E+03
+%#+30.0G : +8.E+03
+%#+30.1G : +8.E+03
+%#+30.2G : +8.1E+03
+%#+30.5G : +8127.5
+%#+30.10G : +8127.534180
+%#+30.30G : +8127.53417968750000000000000000
+%+0G : +8127.53
+%+0.G : +8E+03
+%+0.0G : +8E+03
+%+0.1G : +8E+03
+%+0.2G : +8.1E+03
+%+0.5G : +8127.5
+%+0.10G : +8127.53418
+%+0.30G : +8127.5341796875
+%+01G : +8127.53
+%+01.G : +8E+03
+%+01.0G : +8E+03
+%+01.1G : +8E+03
+%+01.2G : +8.1E+03
+%+01.5G : +8127.5
+%+01.10G : +8127.53418
+%+01.30G : +8127.5341796875
+%+02G : +8127.53
+%+02.G : +8E+03
+%+02.0G : +8E+03
+%+02.1G : +8E+03
+%+02.2G : +8.1E+03
+%+02.5G : +8127.5
+%+02.10G : +8127.53418
+%+02.30G : +8127.5341796875
+%+05G : +8127.53
+%+05.G : +8E+03
+%+05.0G : +8E+03
+%+05.1G : +8E+03
+%+05.2G : +8.1E+03
+%+05.5G : +8127.5
+%+05.10G : +8127.53418
+%+05.30G : +8127.5341796875
+%+010G : +008127.53
+%+010.G : +00008E+03
+%+010.0G : +00008E+03
+%+010.1G : +00008E+03
+%+010.2G : +008.1E+03
+%+010.5G : +0008127.5
+%+010.10G : +8127.53418
+%+010.30G : +8127.5341796875
+%+030G : +00000000000000000000008127.53
+%+030.G : +0000000000000000000000008E+03
+%+030.0G : +0000000000000000000000008E+03
+%+030.1G : +0000000000000000000000008E+03
+%+030.2G : +00000000000000000000008.1E+03
+%+030.5G : +000000000000000000000008127.5
+%+030.10G : +00000000000000000008127.53418
+%+030.30G : +000000000000008127.5341796875
+%+-G : +8127.53
+%+-.G : +8E+03
+%+-.0G : +8E+03
+%+-.1G : +8E+03
+%+-.2G : +8.1E+03
+%+-.5G : +8127.5
+%+-.10G : +8127.53418
+%+-.30G : +8127.5341796875
+%+-1G : +8127.53
+%+-1.G : +8E+03
+%+-1.0G : +8E+03
+%+-1.1G : +8E+03
+%+-1.2G : +8.1E+03
+%+-1.5G : +8127.5
+%+-1.10G : +8127.53418
+%+-1.30G : +8127.5341796875
+%+-2G : +8127.53
+%+-2.G : +8E+03
+%+-2.0G : +8E+03
+%+-2.1G : +8E+03
+%+-2.2G : +8.1E+03
+%+-2.5G : +8127.5
+%+-2.10G : +8127.53418
+%+-2.30G : +8127.5341796875
+%+-5G : +8127.53
+%+-5.G : +8E+03
+%+-5.0G : +8E+03
+%+-5.1G : +8E+03
+%+-5.2G : +8.1E+03
+%+-5.5G : +8127.5
+%+-5.10G : +8127.53418
+%+-5.30G : +8127.5341796875
+%+-10G : +8127.53
+%+-10.G : +8E+03
+%+-10.0G : +8E+03
+%+-10.1G : +8E+03
+%+-10.2G : +8.1E+03
+%+-10.5G : +8127.5
+%+-10.10G : +8127.53418
+%+-10.30G : +8127.5341796875
+%+-30G : +8127.53
+%+-30.G : +8E+03
+%+-30.0G : +8E+03
+%+-30.1G : +8E+03
+%+-30.2G : +8.1E+03
+%+-30.5G : +8127.5
+%+-30.10G : +8127.53418
+%+-30.30G : +8127.5341796875
+%#-G : 8127.53
+%#-.G : 8.E+03
+%#-.0G : 8.E+03
+%#-.1G : 8.E+03
+%#-.2G : 8.1E+03
+%#-.5G : 8127.5
+%#-.10G : 8127.534180
+%#-.30G : 8127.53417968750000000000000000
+%#-1G : 8127.53
+%#-1.G : 8.E+03
+%#-1.0G : 8.E+03
+%#-1.1G : 8.E+03
+%#-1.2G : 8.1E+03
+%#-1.5G : 8127.5
+%#-1.10G : 8127.534180
+%#-1.30G : 8127.53417968750000000000000000
+%#-2G : 8127.53
+%#-2.G : 8.E+03
+%#-2.0G : 8.E+03
+%#-2.1G : 8.E+03
+%#-2.2G : 8.1E+03
+%#-2.5G : 8127.5
+%#-2.10G : 8127.534180
+%#-2.30G : 8127.53417968750000000000000000
+%#-5G : 8127.53
+%#-5.G : 8.E+03
+%#-5.0G : 8.E+03
+%#-5.1G : 8.E+03
+%#-5.2G : 8.1E+03
+%#-5.5G : 8127.5
+%#-5.10G : 8127.534180
+%#-5.30G : 8127.53417968750000000000000000
+%#-10G : 8127.53
+%#-10.G : 8.E+03
+%#-10.0G : 8.E+03
+%#-10.1G : 8.E+03
+%#-10.2G : 8.1E+03
+%#-10.5G : 8127.5
+%#-10.10G : 8127.534180
+%#-10.30G : 8127.53417968750000000000000000
+%#-30G : 8127.53
+%#-30.G : 8.E+03
+%#-30.0G : 8.E+03
+%#-30.1G : 8.E+03
+%#-30.2G : 8.1E+03
+%#-30.5G : 8127.5
+%#-30.10G : 8127.534180
+%#-30.30G : 8127.53417968750000000000000000
+%+#G : +8127.53
+%+#.G : +8.E+03
+%+#.0G : +8.E+03
+%+#.1G : +8.E+03
+%+#.2G : +8.1E+03
+%+#.5G : +8127.5
+%+#.10G : +8127.534180
+%+#.30G : +8127.53417968750000000000000000
+%+#0G : +8127.53
+%+#0.G : +8.E+03
+%+#0.0G : +8.E+03
+%+#0.1G : +8.E+03
+%+#0.2G : +8.1E+03
+%+#0.5G : +8127.5
+%+#0.10G : +8127.534180
+%+#0.30G : +8127.53417968750000000000000000
+%+#1G : +8127.53
+%+#1.G : +8.E+03
+%+#1.0G : +8.E+03
+%+#1.1G : +8.E+03
+%+#1.2G : +8.1E+03
+%+#1.5G : +8127.5
+%+#1.10G : +8127.534180
+%+#1.30G : +8127.53417968750000000000000000
+%+#2G : +8127.53
+%+#2.G : +8.E+03
+%+#2.0G : +8.E+03
+%+#2.1G : +8.E+03
+%+#2.2G : +8.1E+03
+%+#2.5G : +8127.5
+%+#2.10G : +8127.534180
+%+#2.30G : +8127.53417968750000000000000000
+%+#5G : +8127.53
+%+#5.G : +8.E+03
+%+#5.0G : +8.E+03
+%+#5.1G : +8.E+03
+%+#5.2G : +8.1E+03
+%+#5.5G : +8127.5
+%+#5.10G : +8127.534180
+%+#5.30G : +8127.53417968750000000000000000
+%+#10G : +8127.53
+%+#10.G : +8.E+03
+%+#10.0G : +8.E+03
+%+#10.1G : +8.E+03
+%+#10.2G : +8.1E+03
+%+#10.5G : +8127.5
+%+#10.10G : +8127.534180
+%+#10.30G : +8127.53417968750000000000000000
+%+#30G : +8127.53
+%+#30.G : +8.E+03
+%+#30.0G : +8.E+03
+%+#30.1G : +8.E+03
+%+#30.2G : +8.1E+03
+%+#30.5G : +8127.5
+%+#30.10G : +8127.534180
+%+#30.30G : +8127.53417968750000000000000000
+%-#G : 8127.53
+%-#.G : 8.E+03
+%-#.0G : 8.E+03
+%-#.1G : 8.E+03
+%-#.2G : 8.1E+03
+%-#.5G : 8127.5
+%-#.10G : 8127.534180
+%-#.30G : 8127.53417968750000000000000000
+%-#1G : 8127.53
+%-#1.G : 8.E+03
+%-#1.0G : 8.E+03
+%-#1.1G : 8.E+03
+%-#1.2G : 8.1E+03
+%-#1.5G : 8127.5
+%-#1.10G : 8127.534180
+%-#1.30G : 8127.53417968750000000000000000
+%-#2G : 8127.53
+%-#2.G : 8.E+03
+%-#2.0G : 8.E+03
+%-#2.1G : 8.E+03
+%-#2.2G : 8.1E+03
+%-#2.5G : 8127.5
+%-#2.10G : 8127.534180
+%-#2.30G : 8127.53417968750000000000000000
+%-#5G : 8127.53
+%-#5.G : 8.E+03
+%-#5.0G : 8.E+03
+%-#5.1G : 8.E+03
+%-#5.2G : 8.1E+03
+%-#5.5G : 8127.5
+%-#5.10G : 8127.534180
+%-#5.30G : 8127.53417968750000000000000000
+%-#10G : 8127.53
+%-#10.G : 8.E+03
+%-#10.0G : 8.E+03
+%-#10.1G : 8.E+03
+%-#10.2G : 8.1E+03
+%-#10.5G : 8127.5
+%-#10.10G : 8127.534180
+%-#10.30G : 8127.53417968750000000000000000
+%-#30G : 8127.53
+%-#30.G : 8.E+03
+%-#30.0G : 8.E+03
+%-#30.1G : 8.E+03
+%-#30.2G : 8.1E+03
+%-#30.5G : 8127.5
+%-#30.10G : 8127.534180
+%-#30.30G : 8127.53417968750000000000000000
+%0#G : 8127.53
+%0#.G : 8.E+03
+%0#.0G : 8.E+03
+%0#.1G : 8.E+03
+%0#.2G : 8.1E+03
+%0#.5G : 8127.5
+%0#.10G : 8127.534180
+%0#.30G : 8127.53417968750000000000000000
+%0#1G : 8127.53
+%0#1.G : 8.E+03
+%0#1.0G : 8.E+03
+%0#1.1G : 8.E+03
+%0#1.2G : 8.1E+03
+%0#1.5G : 8127.5
+%0#1.10G : 8127.534180
+%0#1.30G : 8127.53417968750000000000000000
+%0#2G : 8127.53
+%0#2.G : 8.E+03
+%0#2.0G : 8.E+03
+%0#2.1G : 8.E+03
+%0#2.2G : 8.1E+03
+%0#2.5G : 8127.5
+%0#2.10G : 8127.534180
+%0#2.30G : 8127.53417968750000000000000000
+%0#5G : 8127.53
+%0#5.G : 8.E+03
+%0#5.0G : 8.E+03
+%0#5.1G : 8.E+03
+%0#5.2G : 8.1E+03
+%0#5.5G : 8127.5
+%0#5.10G : 8127.534180
+%0#5.30G : 8127.53417968750000000000000000
+%0#10G : 0008127.53
+%0#10.G : 00008.E+03
+%0#10.0G : 00008.E+03
+%0#10.1G : 00008.E+03
+%0#10.2G : 0008.1E+03
+%0#10.5G : 00008127.5
+%0#10.10G : 8127.534180
+%0#10.30G : 8127.53417968750000000000000000
+%0#30G : 000000000000000000000008127.53
+%0#30.G : 0000000000000000000000008.E+03
+%0#30.0G : 0000000000000000000000008.E+03
+%0#30.1G : 0000000000000000000000008.E+03
+%0#30.2G : 000000000000000000000008.1E+03
+%0#30.5G : 0000000000000000000000008127.5
+%0#30.10G : 00000000000000000008127.534180
+%0#30.30G : 8127.53417968750000000000000000
+%+0G : +8127.53
+%+0.G : +8E+03
+%+0.0G : +8E+03
+%+0.1G : +8E+03
+%+0.2G : +8.1E+03
+%+0.5G : +8127.5
+%+0.10G : +8127.53418
+%+0.30G : +8127.5341796875
+%+01G : +8127.53
+%+01.G : +8E+03
+%+01.0G : +8E+03
+%+01.1G : +8E+03
+%+01.2G : +8.1E+03
+%+01.5G : +8127.5
+%+01.10G : +8127.53418
+%+01.30G : +8127.5341796875
+%+02G : +8127.53
+%+02.G : +8E+03
+%+02.0G : +8E+03
+%+02.1G : +8E+03
+%+02.2G : +8.1E+03
+%+02.5G : +8127.5
+%+02.10G : +8127.53418
+%+02.30G : +8127.5341796875
+%+05G : +8127.53
+%+05.G : +8E+03
+%+05.0G : +8E+03
+%+05.1G : +8E+03
+%+05.2G : +8.1E+03
+%+05.5G : +8127.5
+%+05.10G : +8127.53418
+%+05.30G : +8127.5341796875
+%+010G : +008127.53
+%+010.G : +00008E+03
+%+010.0G : +00008E+03
+%+010.1G : +00008E+03
+%+010.2G : +008.1E+03
+%+010.5G : +0008127.5
+%+010.10G : +8127.53418
+%+010.30G : +8127.5341796875
+%+030G : +00000000000000000000008127.53
+%+030.G : +0000000000000000000000008E+03
+%+030.0G : +0000000000000000000000008E+03
+%+030.1G : +0000000000000000000000008E+03
+%+030.2G : +00000000000000000000008.1E+03
+%+030.5G : +000000000000000000000008127.5
+%+030.10G : +00000000000000000008127.53418
+%+030.30G : +000000000000008127.5341796875
+%#0G : 8127.53
+%#0.G : 8.E+03
+%#0.0G : 8.E+03
+%#0.1G : 8.E+03
+%#0.2G : 8.1E+03
+%#0.5G : 8127.5
+%#0.10G : 8127.534180
+%#0.30G : 8127.53417968750000000000000000
+%#01G : 8127.53
+%#01.G : 8.E+03
+%#01.0G : 8.E+03
+%#01.1G : 8.E+03
+%#01.2G : 8.1E+03
+%#01.5G : 8127.5
+%#01.10G : 8127.534180
+%#01.30G : 8127.53417968750000000000000000
+%#02G : 8127.53
+%#02.G : 8.E+03
+%#02.0G : 8.E+03
+%#02.1G : 8.E+03
+%#02.2G : 8.1E+03
+%#02.5G : 8127.5
+%#02.10G : 8127.534180
+%#02.30G : 8127.53417968750000000000000000
+%#05G : 8127.53
+%#05.G : 8.E+03
+%#05.0G : 8.E+03
+%#05.1G : 8.E+03
+%#05.2G : 8.1E+03
+%#05.5G : 8127.5
+%#05.10G : 8127.534180
+%#05.30G : 8127.53417968750000000000000000
+%#010G : 0008127.53
+%#010.G : 00008.E+03
+%#010.0G : 00008.E+03
+%#010.1G : 00008.E+03
+%#010.2G : 0008.1E+03
+%#010.5G : 00008127.5
+%#010.10G : 8127.534180
+%#010.30G : 8127.53417968750000000000000000
+%#030G : 000000000000000000000008127.53
+%#030.G : 0000000000000000000000008.E+03
+%#030.0G : 0000000000000000000000008.E+03
+%#030.1G : 0000000000000000000000008.E+03
+%#030.2G : 000000000000000000000008.1E+03
+%#030.5G : 0000000000000000000000008127.5
+%#030.10G : 00000000000000000008127.534180
+%#030.30G : 8127.53417968750000000000000000
+%-+#G : +8127.53
+%-+#.G : +8.E+03
+%-+#.0G : +8.E+03
+%-+#.1G : +8.E+03
+%-+#.2G : +8.1E+03
+%-+#.5G : +8127.5
+%-+#.10G : +8127.534180
+%-+#.30G : +8127.53417968750000000000000000
+%-+#1G : +8127.53
+%-+#1.G : +8.E+03
+%-+#1.0G : +8.E+03
+%-+#1.1G : +8.E+03
+%-+#1.2G : +8.1E+03
+%-+#1.5G : +8127.5
+%-+#1.10G : +8127.534180
+%-+#1.30G : +8127.53417968750000000000000000
+%-+#2G : +8127.53
+%-+#2.G : +8.E+03
+%-+#2.0G : +8.E+03
+%-+#2.1G : +8.E+03
+%-+#2.2G : +8.1E+03
+%-+#2.5G : +8127.5
+%-+#2.10G : +8127.534180
+%-+#2.30G : +8127.53417968750000000000000000
+%-+#5G : +8127.53
+%-+#5.G : +8.E+03
+%-+#5.0G : +8.E+03
+%-+#5.1G : +8.E+03
+%-+#5.2G : +8.1E+03
+%-+#5.5G : +8127.5
+%-+#5.10G : +8127.534180
+%-+#5.30G : +8127.53417968750000000000000000
+%-+#10G : +8127.53
+%-+#10.G : +8.E+03
+%-+#10.0G : +8.E+03
+%-+#10.1G : +8.E+03
+%-+#10.2G : +8.1E+03
+%-+#10.5G : +8127.5
+%-+#10.10G : +8127.534180
+%-+#10.30G : +8127.53417968750000000000000000
+%-+#30G : +8127.53
+%-+#30.G : +8.E+03
+%-+#30.0G : +8.E+03
+%-+#30.1G : +8.E+03
+%-+#30.2G : +8.1E+03
+%-+#30.5G : +8127.5
+%-+#30.10G : +8127.534180
+%-+#30.30G : +8127.53417968750000000000000000
+%0+#G : +8127.53
+%0+#.G : +8.E+03
+%0+#.0G : +8.E+03
+%0+#.1G : +8.E+03
+%0+#.2G : +8.1E+03
+%0+#.5G : +8127.5
+%0+#.10G : +8127.534180
+%0+#.30G : +8127.53417968750000000000000000
+%0+#1G : +8127.53
+%0+#1.G : +8.E+03
+%0+#1.0G : +8.E+03
+%0+#1.1G : +8.E+03
+%0+#1.2G : +8.1E+03
+%0+#1.5G : +8127.5
+%0+#1.10G : +8127.534180
+%0+#1.30G : +8127.53417968750000000000000000
+%0+#2G : +8127.53
+%0+#2.G : +8.E+03
+%0+#2.0G : +8.E+03
+%0+#2.1G : +8.E+03
+%0+#2.2G : +8.1E+03
+%0+#2.5G : +8127.5
+%0+#2.10G : +8127.534180
+%0+#2.30G : +8127.53417968750000000000000000
+%0+#5G : +8127.53
+%0+#5.G : +8.E+03
+%0+#5.0G : +8.E+03
+%0+#5.1G : +8.E+03
+%0+#5.2G : +8.1E+03
+%0+#5.5G : +8127.5
+%0+#5.10G : +8127.534180
+%0+#5.30G : +8127.53417968750000000000000000
+%0+#10G : +008127.53
+%0+#10.G : +0008.E+03
+%0+#10.0G : +0008.E+03
+%0+#10.1G : +0008.E+03
+%0+#10.2G : +008.1E+03
+%0+#10.5G : +0008127.5
+%0+#10.10G : +8127.534180
+%0+#10.30G : +8127.53417968750000000000000000
+%0+#30G : +00000000000000000000008127.53
+%0+#30.G : +000000000000000000000008.E+03
+%0+#30.0G : +000000000000000000000008.E+03
+%0+#30.1G : +000000000000000000000008.E+03
+%0+#30.2G : +00000000000000000000008.1E+03
+%0+#30.5G : +000000000000000000000008127.5
+%0+#30.10G : +0000000000000000008127.534180
+%0+#30.30G : +8127.53417968750000000000000000
+%#-+G : +8127.53
+%#-+.G : +8.E+03
+%#-+.0G : +8.E+03
+%#-+.1G : +8.E+03
+%#-+.2G : +8.1E+03
+%#-+.5G : +8127.5
+%#-+.10G : +8127.534180
+%#-+.30G : +8127.53417968750000000000000000
+%#-+1G : +8127.53
+%#-+1.G : +8.E+03
+%#-+1.0G : +8.E+03
+%#-+1.1G : +8.E+03
+%#-+1.2G : +8.1E+03
+%#-+1.5G : +8127.5
+%#-+1.10G : +8127.534180
+%#-+1.30G : +8127.53417968750000000000000000
+%#-+2G : +8127.53
+%#-+2.G : +8.E+03
+%#-+2.0G : +8.E+03
+%#-+2.1G : +8.E+03
+%#-+2.2G : +8.1E+03
+%#-+2.5G : +8127.5
+%#-+2.10G : +8127.534180
+%#-+2.30G : +8127.53417968750000000000000000
+%#-+5G : +8127.53
+%#-+5.G : +8.E+03
+%#-+5.0G : +8.E+03
+%#-+5.1G : +8.E+03
+%#-+5.2G : +8.1E+03
+%#-+5.5G : +8127.5
+%#-+5.10G : +8127.534180
+%#-+5.30G : +8127.53417968750000000000000000
+%#-+10G : +8127.53
+%#-+10.G : +8.E+03
+%#-+10.0G : +8.E+03
+%#-+10.1G : +8.E+03
+%#-+10.2G : +8.1E+03
+%#-+10.5G : +8127.5
+%#-+10.10G : +8127.534180
+%#-+10.30G : +8127.53417968750000000000000000
+%#-+30G : +8127.53
+%#-+30.G : +8.E+03
+%#-+30.0G : +8.E+03
+%#-+30.1G : +8.E+03
+%#-+30.2G : +8.1E+03
+%#-+30.5G : +8127.5
+%#-+30.10G : +8127.534180
+%#-+30.30G : +8127.53417968750000000000000000
+%+#-G : +8127.53
+%+#-.G : +8.E+03
+%+#-.0G : +8.E+03
+%+#-.1G : +8.E+03
+%+#-.2G : +8.1E+03
+%+#-.5G : +8127.5
+%+#-.10G : +8127.534180
+%+#-.30G : +8127.53417968750000000000000000
+%+#-1G : +8127.53
+%+#-1.G : +8.E+03
+%+#-1.0G : +8.E+03
+%+#-1.1G : +8.E+03
+%+#-1.2G : +8.1E+03
+%+#-1.5G : +8127.5
+%+#-1.10G : +8127.534180
+%+#-1.30G : +8127.53417968750000000000000000
+%+#-2G : +8127.53
+%+#-2.G : +8.E+03
+%+#-2.0G : +8.E+03
+%+#-2.1G : +8.E+03
+%+#-2.2G : +8.1E+03
+%+#-2.5G : +8127.5
+%+#-2.10G : +8127.534180
+%+#-2.30G : +8127.53417968750000000000000000
+%+#-5G : +8127.53
+%+#-5.G : +8.E+03
+%+#-5.0G : +8.E+03
+%+#-5.1G : +8.E+03
+%+#-5.2G : +8.1E+03
+%+#-5.5G : +8127.5
+%+#-5.10G : +8127.534180
+%+#-5.30G : +8127.53417968750000000000000000
+%+#-10G : +8127.53
+%+#-10.G : +8.E+03
+%+#-10.0G : +8.E+03
+%+#-10.1G : +8.E+03
+%+#-10.2G : +8.1E+03
+%+#-10.5G : +8127.5
+%+#-10.10G : +8127.534180
+%+#-10.30G : +8127.53417968750000000000000000
+%+#-30G : +8127.53
+%+#-30.G : +8.E+03
+%+#-30.0G : +8.E+03
+%+#-30.1G : +8.E+03
+%+#-30.2G : +8.1E+03
+%+#-30.5G : +8127.5
+%+#-30.10G : +8127.534180
+%+#-30.30G : +8127.53417968750000000000000000
+%-x : 7c042e
+%-.x : 7c042e
+%-.0x : 7c042e
+%-.1x : 7c042e
+%-.2x : 7c042e
+%-.5x : 7c042e
+%-.10x : 00007c042e
+%-.30x : 0000000000000000000000007c042e
+%-1x : 7c042e
+%-1.x : 7c042e
+%-1.0x : 7c042e
+%-1.1x : 7c042e
+%-1.2x : 7c042e
+%-1.5x : 7c042e
+%-1.10x : 00007c042e
+%-1.30x : 0000000000000000000000007c042e
+%-2x : 7c042e
+%-2.x : 7c042e
+%-2.0x : 7c042e
+%-2.1x : 7c042e
+%-2.2x : 7c042e
+%-2.5x : 7c042e
+%-2.10x : 00007c042e
+%-2.30x : 0000000000000000000000007c042e
+%-5x : 7c042e
+%-5.x : 7c042e
+%-5.0x : 7c042e
+%-5.1x : 7c042e
+%-5.2x : 7c042e
+%-5.5x : 7c042e
+%-5.10x : 00007c042e
+%-5.30x : 0000000000000000000000007c042e
+%-10x : 7c042e
+%-10.x : 7c042e
+%-10.0x : 7c042e
+%-10.1x : 7c042e
+%-10.2x : 7c042e
+%-10.5x : 7c042e
+%-10.10x : 00007c042e
+%-10.30x : 0000000000000000000000007c042e
+%-30x : 7c042e
+%-30.x : 7c042e
+%-30.0x : 7c042e
+%-30.1x : 7c042e
+%-30.2x : 7c042e
+%-30.5x : 7c042e
+%-30.10x : 00007c042e
+%-30.30x : 0000000000000000000000007c042e
+%#x : 0x7c042e
+%#.x : 0x7c042e
+%#.0x : 0x7c042e
+%#.1x : 0x7c042e
+%#.2x : 0x7c042e
+%#.5x : 0x7c042e
+%#.10x : 0x00007c042e
+%#.30x : 0x0000000000000000000000007c042e
+%#0x : 0x7c042e
+%#1x : 0x7c042e
+%#1.x : 0x7c042e
+%#1.0x : 0x7c042e
+%#1.1x : 0x7c042e
+%#1.2x : 0x7c042e
+%#1.5x : 0x7c042e
+%#1.10x : 0x00007c042e
+%#1.30x : 0x0000000000000000000000007c042e
+%#2x : 0x7c042e
+%#2.x : 0x7c042e
+%#2.0x : 0x7c042e
+%#2.1x : 0x7c042e
+%#2.2x : 0x7c042e
+%#2.5x : 0x7c042e
+%#2.10x : 0x00007c042e
+%#2.30x : 0x0000000000000000000000007c042e
+%#5x : 0x7c042e
+%#5.x : 0x7c042e
+%#5.0x : 0x7c042e
+%#5.1x : 0x7c042e
+%#5.2x : 0x7c042e
+%#5.5x : 0x7c042e
+%#5.10x : 0x00007c042e
+%#5.30x : 0x0000000000000000000000007c042e
+%#10x : 0x7c042e
+%#10.x : 0x7c042e
+%#10.0x : 0x7c042e
+%#10.1x : 0x7c042e
+%#10.2x : 0x7c042e
+%#10.5x : 0x7c042e
+%#10.10x : 0x00007c042e
+%#10.30x : 0x0000000000000000000000007c042e
+%#30x : 0x7c042e
+%#30.x : 0x7c042e
+%#30.0x : 0x7c042e
+%#30.1x : 0x7c042e
+%#30.2x : 0x7c042e
+%#30.5x : 0x7c042e
+%#30.10x : 0x00007c042e
+%#30.30x : 0x0000000000000000000000007c042e
+%0x : 7c042e
+%01x : 7c042e
+%02x : 7c042e
+%05x : 7c042e
+%010x : 00007c042e
+%030x : 0000000000000000000000007c042e
+%#-x : 0x7c042e
+%#-.x : 0x7c042e
+%#-.0x : 0x7c042e
+%#-.1x : 0x7c042e
+%#-.2x : 0x7c042e
+%#-.5x : 0x7c042e
+%#-.10x : 0x00007c042e
+%#-.30x : 0x0000000000000000000000007c042e
+%#-1x : 0x7c042e
+%#-1.x : 0x7c042e
+%#-1.0x : 0x7c042e
+%#-1.1x : 0x7c042e
+%#-1.2x : 0x7c042e
+%#-1.5x : 0x7c042e
+%#-1.10x : 0x00007c042e
+%#-1.30x : 0x0000000000000000000000007c042e
+%#-2x : 0x7c042e
+%#-2.x : 0x7c042e
+%#-2.0x : 0x7c042e
+%#-2.1x : 0x7c042e
+%#-2.2x : 0x7c042e
+%#-2.5x : 0x7c042e
+%#-2.10x : 0x00007c042e
+%#-2.30x : 0x0000000000000000000000007c042e
+%#-5x : 0x7c042e
+%#-5.x : 0x7c042e
+%#-5.0x : 0x7c042e
+%#-5.1x : 0x7c042e
+%#-5.2x : 0x7c042e
+%#-5.5x : 0x7c042e
+%#-5.10x : 0x00007c042e
+%#-5.30x : 0x0000000000000000000000007c042e
+%#-10x : 0x7c042e
+%#-10.x : 0x7c042e
+%#-10.0x : 0x7c042e
+%#-10.1x : 0x7c042e
+%#-10.2x : 0x7c042e
+%#-10.5x : 0x7c042e
+%#-10.10x : 0x00007c042e
+%#-10.30x : 0x0000000000000000000000007c042e
+%#-30x : 0x7c042e
+%#-30.x : 0x7c042e
+%#-30.0x : 0x7c042e
+%#-30.1x : 0x7c042e
+%#-30.2x : 0x7c042e
+%#-30.5x : 0x7c042e
+%#-30.10x : 0x00007c042e
+%#-30.30x : 0x0000000000000000000000007c042e
+%-#x : 0x7c042e
+%-#.x : 0x7c042e
+%-#.0x : 0x7c042e
+%-#.1x : 0x7c042e
+%-#.2x : 0x7c042e
+%-#.5x : 0x7c042e
+%-#.10x : 0x00007c042e
+%-#.30x : 0x0000000000000000000000007c042e
+%-#1x : 0x7c042e
+%-#1.x : 0x7c042e
+%-#1.0x : 0x7c042e
+%-#1.1x : 0x7c042e
+%-#1.2x : 0x7c042e
+%-#1.5x : 0x7c042e
+%-#1.10x : 0x00007c042e
+%-#1.30x : 0x0000000000000000000000007c042e
+%-#2x : 0x7c042e
+%-#2.x : 0x7c042e
+%-#2.0x : 0x7c042e
+%-#2.1x : 0x7c042e
+%-#2.2x : 0x7c042e
+%-#2.5x : 0x7c042e
+%-#2.10x : 0x00007c042e
+%-#2.30x : 0x0000000000000000000000007c042e
+%-#5x : 0x7c042e
+%-#5.x : 0x7c042e
+%-#5.0x : 0x7c042e
+%-#5.1x : 0x7c042e
+%-#5.2x : 0x7c042e
+%-#5.5x : 0x7c042e
+%-#5.10x : 0x00007c042e
+%-#5.30x : 0x0000000000000000000000007c042e
+%-#10x : 0x7c042e
+%-#10.x : 0x7c042e
+%-#10.0x : 0x7c042e
+%-#10.1x : 0x7c042e
+%-#10.2x : 0x7c042e
+%-#10.5x : 0x7c042e
+%-#10.10x : 0x00007c042e
+%-#10.30x : 0x0000000000000000000000007c042e
+%-#30x : 0x7c042e
+%-#30.x : 0x7c042e
+%-#30.0x : 0x7c042e
+%-#30.1x : 0x7c042e
+%-#30.2x : 0x7c042e
+%-#30.5x : 0x7c042e
+%-#30.10x : 0x00007c042e
+%-#30.30x : 0x0000000000000000000000007c042e
+%0#x : 0x7c042e
+%0#1x : 0x7c042e
+%0#2x : 0x7c042e
+%0#5x : 0x7c042e
+%0#10x : 0x007c042e
+%0#30x : 0x00000000000000000000007c042e
+%#0x : 0x7c042e
+%#01x : 0x7c042e
+%#02x : 0x7c042e
+%#05x : 0x7c042e
+%#010x : 0x007c042e
+%#030x : 0x00000000000000000000007c042e
+%-X : 7C042E
+%-.X : 7C042E
+%-.0X : 7C042E
+%-.1X : 7C042E
+%-.2X : 7C042E
+%-.5X : 7C042E
+%-.10X : 00007C042E
+%-.30X : 0000000000000000000000007C042E
+%-1X : 7C042E
+%-1.X : 7C042E
+%-1.0X : 7C042E
+%-1.1X : 7C042E
+%-1.2X : 7C042E
+%-1.5X : 7C042E
+%-1.10X : 00007C042E
+%-1.30X : 0000000000000000000000007C042E
+%-2X : 7C042E
+%-2.X : 7C042E
+%-2.0X : 7C042E
+%-2.1X : 7C042E
+%-2.2X : 7C042E
+%-2.5X : 7C042E
+%-2.10X : 00007C042E
+%-2.30X : 0000000000000000000000007C042E
+%-5X : 7C042E
+%-5.X : 7C042E
+%-5.0X : 7C042E
+%-5.1X : 7C042E
+%-5.2X : 7C042E
+%-5.5X : 7C042E
+%-5.10X : 00007C042E
+%-5.30X : 0000000000000000000000007C042E
+%-10X : 7C042E
+%-10.X : 7C042E
+%-10.0X : 7C042E
+%-10.1X : 7C042E
+%-10.2X : 7C042E
+%-10.5X : 7C042E
+%-10.10X : 00007C042E
+%-10.30X : 0000000000000000000000007C042E
+%-30X : 7C042E
+%-30.X : 7C042E
+%-30.0X : 7C042E
+%-30.1X : 7C042E
+%-30.2X : 7C042E
+%-30.5X : 7C042E
+%-30.10X : 00007C042E
+%-30.30X : 0000000000000000000000007C042E
+%#X : 0X7C042E
+%#.X : 0X7C042E
+%#.0X : 0X7C042E
+%#.1X : 0X7C042E
+%#.2X : 0X7C042E
+%#.5X : 0X7C042E
+%#.10X : 0X00007C042E
+%#.30X : 0X0000000000000000000000007C042E
+%#0X : 0X7C042E
+%#1X : 0X7C042E
+%#1.X : 0X7C042E
+%#1.0X : 0X7C042E
+%#1.1X : 0X7C042E
+%#1.2X : 0X7C042E
+%#1.5X : 0X7C042E
+%#1.10X : 0X00007C042E
+%#1.30X : 0X0000000000000000000000007C042E
+%#2X : 0X7C042E
+%#2.X : 0X7C042E
+%#2.0X : 0X7C042E
+%#2.1X : 0X7C042E
+%#2.2X : 0X7C042E
+%#2.5X : 0X7C042E
+%#2.10X : 0X00007C042E
+%#2.30X : 0X0000000000000000000000007C042E
+%#5X : 0X7C042E
+%#5.X : 0X7C042E
+%#5.0X : 0X7C042E
+%#5.1X : 0X7C042E
+%#5.2X : 0X7C042E
+%#5.5X : 0X7C042E
+%#5.10X : 0X00007C042E
+%#5.30X : 0X0000000000000000000000007C042E
+%#10X : 0X7C042E
+%#10.X : 0X7C042E
+%#10.0X : 0X7C042E
+%#10.1X : 0X7C042E
+%#10.2X : 0X7C042E
+%#10.5X : 0X7C042E
+%#10.10X : 0X00007C042E
+%#10.30X : 0X0000000000000000000000007C042E
+%#30X : 0X7C042E
+%#30.X : 0X7C042E
+%#30.0X : 0X7C042E
+%#30.1X : 0X7C042E
+%#30.2X : 0X7C042E
+%#30.5X : 0X7C042E
+%#30.10X : 0X00007C042E
+%#30.30X : 0X0000000000000000000000007C042E
+%0X : 7C042E
+%01X : 7C042E
+%02X : 7C042E
+%05X : 7C042E
+%010X : 00007C042E
+%030X : 0000000000000000000000007C042E
+%#-X : 0X7C042E
+%#-.X : 0X7C042E
+%#-.0X : 0X7C042E
+%#-.1X : 0X7C042E
+%#-.2X : 0X7C042E
+%#-.5X : 0X7C042E
+%#-.10X : 0X00007C042E
+%#-.30X : 0X0000000000000000000000007C042E
+%#-1X : 0X7C042E
+%#-1.X : 0X7C042E
+%#-1.0X : 0X7C042E
+%#-1.1X : 0X7C042E
+%#-1.2X : 0X7C042E
+%#-1.5X : 0X7C042E
+%#-1.10X : 0X00007C042E
+%#-1.30X : 0X0000000000000000000000007C042E
+%#-2X : 0X7C042E
+%#-2.X : 0X7C042E
+%#-2.0X : 0X7C042E
+%#-2.1X : 0X7C042E
+%#-2.2X : 0X7C042E
+%#-2.5X : 0X7C042E
+%#-2.10X : 0X00007C042E
+%#-2.30X : 0X0000000000000000000000007C042E
+%#-5X : 0X7C042E
+%#-5.X : 0X7C042E
+%#-5.0X : 0X7C042E
+%#-5.1X : 0X7C042E
+%#-5.2X : 0X7C042E
+%#-5.5X : 0X7C042E
+%#-5.10X : 0X00007C042E
+%#-5.30X : 0X0000000000000000000000007C042E
+%#-10X : 0X7C042E
+%#-10.X : 0X7C042E
+%#-10.0X : 0X7C042E
+%#-10.1X : 0X7C042E
+%#-10.2X : 0X7C042E
+%#-10.5X : 0X7C042E
+%#-10.10X : 0X00007C042E
+%#-10.30X : 0X0000000000000000000000007C042E
+%#-30X : 0X7C042E
+%#-30.X : 0X7C042E
+%#-30.0X : 0X7C042E
+%#-30.1X : 0X7C042E
+%#-30.2X : 0X7C042E
+%#-30.5X : 0X7C042E
+%#-30.10X : 0X00007C042E
+%#-30.30X : 0X0000000000000000000000007C042E
+%-#X : 0X7C042E
+%-#.X : 0X7C042E
+%-#.0X : 0X7C042E
+%-#.1X : 0X7C042E
+%-#.2X : 0X7C042E
+%-#.5X : 0X7C042E
+%-#.10X : 0X00007C042E
+%-#.30X : 0X0000000000000000000000007C042E
+%-#1X : 0X7C042E
+%-#1.X : 0X7C042E
+%-#1.0X : 0X7C042E
+%-#1.1X : 0X7C042E
+%-#1.2X : 0X7C042E
+%-#1.5X : 0X7C042E
+%-#1.10X : 0X00007C042E
+%-#1.30X : 0X0000000000000000000000007C042E
+%-#2X : 0X7C042E
+%-#2.X : 0X7C042E
+%-#2.0X : 0X7C042E
+%-#2.1X : 0X7C042E
+%-#2.2X : 0X7C042E
+%-#2.5X : 0X7C042E
+%-#2.10X : 0X00007C042E
+%-#2.30X : 0X0000000000000000000000007C042E
+%-#5X : 0X7C042E
+%-#5.X : 0X7C042E
+%-#5.0X : 0X7C042E
+%-#5.1X : 0X7C042E
+%-#5.2X : 0X7C042E
+%-#5.5X : 0X7C042E
+%-#5.10X : 0X00007C042E
+%-#5.30X : 0X0000000000000000000000007C042E
+%-#10X : 0X7C042E
+%-#10.X : 0X7C042E
+%-#10.0X : 0X7C042E
+%-#10.1X : 0X7C042E
+%-#10.2X : 0X7C042E
+%-#10.5X : 0X7C042E
+%-#10.10X : 0X00007C042E
+%-#10.30X : 0X0000000000000000000000007C042E
+%-#30X : 0X7C042E
+%-#30.X : 0X7C042E
+%-#30.0X : 0X7C042E
+%-#30.1X : 0X7C042E
+%-#30.2X : 0X7C042E
+%-#30.5X : 0X7C042E
+%-#30.10X : 0X00007C042E
+%-#30.30X : 0X0000000000000000000000007C042E
+%0#X : 0X7C042E
+%0#1X : 0X7C042E
+%0#2X : 0X7C042E
+%0#5X : 0X7C042E
+%0#10X : 0X007C042E
+%0#30X : 0X00000000000000000000007C042E
+%#0X : 0X7C042E
+%#01X : 0X7C042E
+%#02X : 0X7C042E
+%#05X : 0X7C042E
+%#010X : 0X007C042E
+%#030X : 0X00000000000000000000007C042E
+%-o : 37002056
+%-.o : 37002056
+%-.0o : 37002056
+%-.1o : 37002056
+%-.2o : 37002056
+%-.5o : 37002056
+%-.10o : 0037002056
+%-.30o : 000000000000000000000037002056
+%-1o : 37002056
+%-1.o : 37002056
+%-1.0o : 37002056
+%-1.1o : 37002056
+%-1.2o : 37002056
+%-1.5o : 37002056
+%-1.10o : 0037002056
+%-1.30o : 000000000000000000000037002056
+%-2o : 37002056
+%-2.o : 37002056
+%-2.0o : 37002056
+%-2.1o : 37002056
+%-2.2o : 37002056
+%-2.5o : 37002056
+%-2.10o : 0037002056
+%-2.30o : 000000000000000000000037002056
+%-5o : 37002056
+%-5.o : 37002056
+%-5.0o : 37002056
+%-5.1o : 37002056
+%-5.2o : 37002056
+%-5.5o : 37002056
+%-5.10o : 0037002056
+%-5.30o : 000000000000000000000037002056
+%-10o : 37002056
+%-10.o : 37002056
+%-10.0o : 37002056
+%-10.1o : 37002056
+%-10.2o : 37002056
+%-10.5o : 37002056
+%-10.10o : 0037002056
+%-10.30o : 000000000000000000000037002056
+%-30o : 37002056
+%-30.o : 37002056
+%-30.0o : 37002056
+%-30.1o : 37002056
+%-30.2o : 37002056
+%-30.5o : 37002056
+%-30.10o : 0037002056
+%-30.30o : 000000000000000000000037002056
+%#o : 037002056
+%#.o : 037002056
+%#.0o : 037002056
+%#.1o : 037002056
+%#.2o : 037002056
+%#.5o : 037002056
+%#.10o : 0037002056
+%#.30o : 000000000000000000000037002056
+%#0o : 037002056
+%#1o : 037002056
+%#1.o : 037002056
+%#1.0o : 037002056
+%#1.1o : 037002056
+%#1.2o : 037002056
+%#1.5o : 037002056
+%#1.10o : 0037002056
+%#1.30o : 000000000000000000000037002056
+%#2o : 037002056
+%#2.o : 037002056
+%#2.0o : 037002056
+%#2.1o : 037002056
+%#2.2o : 037002056
+%#2.5o : 037002056
+%#2.10o : 0037002056
+%#2.30o : 000000000000000000000037002056
+%#5o : 037002056
+%#5.o : 037002056
+%#5.0o : 037002056
+%#5.1o : 037002056
+%#5.2o : 037002056
+%#5.5o : 037002056
+%#5.10o : 0037002056
+%#5.30o : 000000000000000000000037002056
+%#10o : 037002056
+%#10.o : 037002056
+%#10.0o : 037002056
+%#10.1o : 037002056
+%#10.2o : 037002056
+%#10.5o : 037002056
+%#10.10o : 0037002056
+%#10.30o : 000000000000000000000037002056
+%#30o : 037002056
+%#30.o : 037002056
+%#30.0o : 037002056
+%#30.1o : 037002056
+%#30.2o : 037002056
+%#30.5o : 037002056
+%#30.10o : 0037002056
+%#30.30o : 000000000000000000000037002056
+%0o : 37002056
+%01o : 37002056
+%02o : 37002056
+%05o : 37002056
+%010o : 0037002056
+%030o : 000000000000000000000037002056
+%#-o : 037002056
+%#-.o : 037002056
+%#-.0o : 037002056
+%#-.1o : 037002056
+%#-.2o : 037002056
+%#-.5o : 037002056
+%#-.10o : 0037002056
+%#-.30o : 000000000000000000000037002056
+%#-1o : 037002056
+%#-1.o : 037002056
+%#-1.0o : 037002056
+%#-1.1o : 037002056
+%#-1.2o : 037002056
+%#-1.5o : 037002056
+%#-1.10o : 0037002056
+%#-1.30o : 000000000000000000000037002056
+%#-2o : 037002056
+%#-2.o : 037002056
+%#-2.0o : 037002056
+%#-2.1o : 037002056
+%#-2.2o : 037002056
+%#-2.5o : 037002056
+%#-2.10o : 0037002056
+%#-2.30o : 000000000000000000000037002056
+%#-5o : 037002056
+%#-5.o : 037002056
+%#-5.0o : 037002056
+%#-5.1o : 037002056
+%#-5.2o : 037002056
+%#-5.5o : 037002056
+%#-5.10o : 0037002056
+%#-5.30o : 000000000000000000000037002056
+%#-10o : 037002056
+%#-10.o : 037002056
+%#-10.0o : 037002056
+%#-10.1o : 037002056
+%#-10.2o : 037002056
+%#-10.5o : 037002056
+%#-10.10o : 0037002056
+%#-10.30o : 000000000000000000000037002056
+%#-30o : 037002056
+%#-30.o : 037002056
+%#-30.0o : 037002056
+%#-30.1o : 037002056
+%#-30.2o : 037002056
+%#-30.5o : 037002056
+%#-30.10o : 0037002056
+%#-30.30o : 000000000000000000000037002056
+%-#o : 037002056
+%-#.o : 037002056
+%-#.0o : 037002056
+%-#.1o : 037002056
+%-#.2o : 037002056
+%-#.5o : 037002056
+%-#.10o : 0037002056
+%-#.30o : 000000000000000000000037002056
+%-#1o : 037002056
+%-#1.o : 037002056
+%-#1.0o : 037002056
+%-#1.1o : 037002056
+%-#1.2o : 037002056
+%-#1.5o : 037002056
+%-#1.10o : 0037002056
+%-#1.30o : 000000000000000000000037002056
+%-#2o : 037002056
+%-#2.o : 037002056
+%-#2.0o : 037002056
+%-#2.1o : 037002056
+%-#2.2o : 037002056
+%-#2.5o : 037002056
+%-#2.10o : 0037002056
+%-#2.30o : 000000000000000000000037002056
+%-#5o : 037002056
+%-#5.o : 037002056
+%-#5.0o : 037002056
+%-#5.1o : 037002056
+%-#5.2o : 037002056
+%-#5.5o : 037002056
+%-#5.10o : 0037002056
+%-#5.30o : 000000000000000000000037002056
+%-#10o : 037002056
+%-#10.o : 037002056
+%-#10.0o : 037002056
+%-#10.1o : 037002056
+%-#10.2o : 037002056
+%-#10.5o : 037002056
+%-#10.10o : 0037002056
+%-#10.30o : 000000000000000000000037002056
+%-#30o : 037002056
+%-#30.o : 037002056
+%-#30.0o : 037002056
+%-#30.1o : 037002056
+%-#30.2o : 037002056
+%-#30.5o : 037002056
+%-#30.10o : 0037002056
+%-#30.30o : 000000000000000000000037002056
+%0#o : 037002056
+%0#1o : 037002056
+%0#2o : 037002056
+%0#5o : 037002056
+%0#10o : 0037002056
+%0#30o : 000000000000000000000037002056
+%#0o : 037002056
+%#01o : 037002056
+%#02o : 037002056
+%#05o : 037002056
+%#010o : 0037002056
+%#030o : 000000000000000000000037002056
+%-s : test
+%-.s :
+%-.0s :
+%-.1s : t
+%-.2s : te
+%-.5s : test
+%-.10s : test
+%-.30s : test
+%-1s : test
+%-1.s :
+%-1.0s :
+%-1.1s : t
+%-1.2s : te
+%-1.5s : test
+%-1.10s : test
+%-1.30s : test
+%-2s : test
+%-2.s :
+%-2.0s :
+%-2.1s : t
+%-2.2s : te
+%-2.5s : test
+%-2.10s : test
+%-2.30s : test
+%-5s : test
+%-5.s :
+%-5.0s :
+%-5.1s : t
+%-5.2s : te
+%-5.5s : test
+%-5.10s : test
+%-5.30s : test
+%-10s : test
+%-10.s :
+%-10.0s :
+%-10.1s : t
+%-10.2s : te
+%-10.5s : test
+%-10.10s : test
+%-10.30s : test
+%-30s : test
+%-30.s :
+%-30.0s :
+%-30.1s : t
+%-30.2s : te
+%-30.5s : test
+%-30.10s : test
+%-30.30s : test
+%-c : x
+%-1c : x
+%-2c : x
+%-5c : x
+%-10c : x
+%-30c : x
+%-p : 0x4f318
+%-1p : 0x4f318
+%-2p : 0x4f318
+%-5p : 0x4f318
+%-10p : 0x4f318
+%-30p : 0x4f318
+
+de
+bcde
+789abcde
+789abcde
+
+de
+bcde
+789abcde
+789abcde
+
+de
+bcde
+789abcde
+789abcde
+123456789abcde
+123456789abcde
+
+789abcde
+123456789abcde
+789abcde
+123456789abcde
+789abcde
+
+-34
+-17186
+2023406814
+2023406814
+
+-34
+-17186
+2023406814
+2023406814
+
+-34
+-17186
+2023406814
+2023406814
+5124095576030430
+5124095576030430
+
+2023406814
+5124095576030430
+2023406814
+5124095576030430
+2023406814
+
+222
+48350
+2023406814
+2023406814
+
+222
+48350
+2023406814
+2023406814
+
+222
+48350
+2023406814
+2023406814
+5124095576030430
+5124095576030430
+
+2023406814
+5124095576030430
+2023406814
+5124095576030430
+2023406814
+
+22
+4322
+87654322
+87654322
+
+22
+4322
+87654322
+87654322
+
+22
+4322
+87654322
+87654322
+ffedcba987654000
+ffedcba987654000
+
+87654322
+ffedcba987654000
+87654322
+ffedcba987654000
+87654322
+
+34
+17186
+-2023406814
+-2023406814
+
+34
+17186
+-2023406814
+-2023406814
+
+34
+17186
+-2023406814
+-2023406814
+-5124095576031232
+-5124095576031232
+
+-2023406814
+-5124095576031232
+-2023406814
+-5124095576031232
+-2023406814
+
+34
+17186
+2271560482
+2271560482
+
+34
+17186
+2271560482
+2271560482
+
+34
+17186
+2271560482
+2271560482
+18441619978133520000
+18441619978133520000
+
+2271560482
+18441619978133520000
+2271560482
+18441619978133520000
+2271560482
+
+1234567.890123
+1234567.890123
+1234567.890123
+1234567.890123
+
+-1234567.890123
+-1234567.890123
+-1234567.890123
+-1234567.890123
+
+1234567.875000
+1234567.875000
+1234567.875000
+1234567.875000
+
+-1234567.875000
+-1234567.875000
+-1234567.875000
+-1234567.875000
+
+0
+0
+0
+0
+0
+0
+0
+0
+
+1
+1
+1
+1
+1
+1
+1
+1
+
+255
+65535
+4294967295
+18446744073709552000
+ff
+ffff
+ffffffff
+10000000000000000
+
+126
+32766
+2147483646
+140737488355326
+7e
+7ffe
+7ffffffe
+7ffffffffffe
+
+127
+32767
+2147483647
+140737488355327
+7f
+7fff
+7fffffff
+7fffffffffff
+
+128
+32768
+134217728
+549755813888
+80
+8000
+8000000
+8000000000
+
+255
+65535
+4294967295
+281474976710655
+ff
+ffff
+ffffffff
+
+130
+32770
+2147483650
+18446603336221196000
+82
+8002
+80000002
+ffff800000000000
+
+129
+32769
+2147483649
+18446603336221196000
+81
+8001
+80000001
+ffff800000000000
+
+128
+32768
+4160749568
+18446743523953738000
+80
+8000
+f8000000
+ffffff8000000000
+
+1
+1
+1
+18446462598732840000
+1
+1
+1
+
+no_new_line
diff --git a/tests/runner.py b/tests/runner.py
index e2fd2be8..9a430037 100644
--- a/tests/runner.py
+++ b/tests/runner.py
@@ -35,6 +35,7 @@ class RunnerCore(unittest.TestCase):
save_JS = 0
def setUp(self):
+ Settings.reset()
self.banned_js_engines = []
if not self.save_dir:
dirname = tempfile.mkdtemp(prefix="ems_" + self.__class__.__name__ + "_", dir=TEMP_DIR)
@@ -169,14 +170,15 @@ class RunnerCore(unittest.TestCase):
limit_size(''.join([a.rstrip()+'\n' for a in difflib.unified_diff(x.split('\n'), y.split('\n'), fromfile='expected', tofile='actual')]))
))
- def assertContained(self, value, string):
- if type(value) is not str: value = value() # lazy loading
- if type(string) is not str: string = string()
- if value not in string:
- raise Exception("Expected to find '%s' in '%s', diff:\n\n%s" % (
- limit_size(value), limit_size(string),
- limit_size(''.join([a.rstrip()+'\n' for a in difflib.unified_diff(value.split('\n'), string.split('\n'), fromfile='expected', tofile='actual')]))
- ))
+ def assertContained(self, values, string):
+ if type(values) not in [list, tuple]: values = [values]
+ for value in values:
+ if type(string) is not str: string = string()
+ if value in string: return # success
+ raise Exception("Expected to find '%s' in '%s', diff:\n\n%s" % (
+ limit_size(values[0]), limit_size(string),
+ limit_size(''.join([a.rstrip()+'\n' for a in difflib.unified_diff(values[0].split('\n'), string.split('\n'), fromfile='expected', tofile='actual')]))
+ ))
def assertNotContained(self, value, string):
if type(value) is not str: value = value() # lazy loading
@@ -211,6 +213,8 @@ class RunnerCore(unittest.TestCase):
###################################################################################################
+sys.argv = map(lambda arg: arg if not arg.startswith('test_') else 'default.' + arg, sys.argv)
+
if 'benchmark' not in str(sys.argv):
# Tests
@@ -280,8 +284,6 @@ if 'benchmark' not in str(sys.argv):
self.do_run(src, 'hello, world!')
def test_intvars(self):
- Settings.I64_MODE = 0 # We do not support 64-bit addition etc. in mode 1
-
src = '''
#include <stdio.h>
int global = 20;
@@ -509,6 +511,36 @@ if 'benchmark' not in str(sys.argv):
def test_unaligned(self):
if Settings.QUANTUM_SIZE == 1: return self.skip('No meaning to unaligned addresses in q1')
+
+ src = r'''
+ #include<stdio.h>
+
+ struct S {
+ double x;
+ int y;
+ };
+
+ int main() {
+ // the 64-bit value here will not always be 8-byte aligned
+ S s[3] = { {0x12a751f430142, 22}, {0x17a5c85bad144, 98}, {1, 1}};
+ printf("*%d : %d : %d\n", sizeof(S), ((unsigned int)&s[0]) % 8 != ((unsigned int)&s[1]) % 8,
+ ((unsigned int)&s[1]) - ((unsigned int)&s[0]));
+ s[0].x++;
+ s[0].y++;
+ s[1].x++;
+ s[1].y++;
+ printf("%.1f,%d,%.1f,%d\n", s[0].x, s[0].y, s[1].x, s[1].y);
+ return 0;
+ }
+ '''
+
+ # TODO: A version of this with int64s as well
+ self.do_run(src, '*12 : 1 : 12\n328157500735811.0,23,416012775903557.0,99\n')
+
+ return # TODO: continue to the next part here
+
+ # Test for undefined behavior in C. This is not legitimate code, but does exist
+
if Settings.USE_TYPED_ARRAYS != 2: return self.skip('No meaning to unaligned addresses without t2')
src = r'''
@@ -693,7 +725,7 @@ if 'benchmark' not in str(sys.argv):
#include <cmath>
int main()
{
- printf("*%.2f,%.2f,%f,%f", M_PI, -M_PI, 1/0.0, -1/0.0);
+ printf("*%.2f,%.2f,%d", M_PI, -M_PI, (1/0.0) > 1e300); // could end up as infinity, or just a very very big number
printf(",%d", finite(NAN) != 0);
printf(",%d", finite(INFINITY) != 0);
printf(",%d", finite(-INFINITY) != 0);
@@ -706,7 +738,7 @@ if 'benchmark' not in str(sys.argv):
return 0;
}
'''
- self.do_run(src, '*3.14,-3.14,inf,-inf,0,0,0,1,0,1,1,0*')
+ self.do_run(src, '*3.14,-3.14,1,0,0,0,1,0,1,1,0*')
def test_math_hyperbolic(self):
src = open(path_from_root('tests', 'hyperbolic', 'src.c'), 'r').read()
@@ -1578,13 +1610,14 @@ if 'benchmark' not in str(sys.argv):
def test_emscripten_api(self):
#if Settings.MICRO_OPTS or Settings.RELOOP or Building.LLVM_OPTS: return self.skip('FIXME')
- src = '''
+ src = r'''
#include <stdio.h>
#include "emscripten.h"
int main() {
// EMSCRIPTEN_COMMENT("hello from the source");
emscripten_run_script("print('hello world' + '!')");
+ printf("*%d*\n", emscripten_run_script_int("5*20"));
return 0;
}
'''
@@ -1593,7 +1626,47 @@ if 'benchmark' not in str(sys.argv):
src = open(filename, 'r').read()
# TODO: restore this (see comment in emscripten.h) assert '// hello from the source' in src
- self.do_run(src, 'hello world!', post_build=check)
+ self.do_run(src, 'hello world!\n*100*', post_build=check)
+
+ def test_memorygrowth(self):
+ # With typed arrays in particular, it is dangerous to use more memory than TOTAL_MEMORY,
+ # since we then need to enlarge the heap(s).
+ src = r'''
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
+ #include <assert.h>
+ #include "emscripten.h"
+
+ int main()
+ {
+ char *buf1 = (char*)malloc(100);
+ char *data1 = "hello";
+ memcpy(buf1, data1, strlen(data1)+1);
+
+ float *buf2 = (float*)malloc(100);
+ float pie = 4.955;
+ memcpy(buf2, &pie, sizeof(float));
+
+ printf("*pre: %s,%.3f*\n", buf1, buf2[0]);
+
+ int totalMemory = emscripten_run_script_int("TOTAL_MEMORY");
+ char *buf3 = (char*)malloc(totalMemory+1);
+ char *buf4 = (char*)malloc(100);
+ float *buf5 = (float*)malloc(100);
+ //printf("totalMemory: %d bufs: %d,%d,%d,%d,%d\n", totalMemory, buf1, buf2, buf3, buf4, buf5);
+ assert((int)buf4 > (int)totalMemory && (int)buf5 > (int)totalMemory);
+
+ printf("*%s,%.3f*\n", buf1, buf2[0]); // the old heap data should still be there
+
+ memcpy(buf4, buf1, strlen(data1)+1);
+ memcpy(buf5, buf2, sizeof(float));
+ printf("*%s,%.3f*\n", buf4, buf5[0]); // and the new heap space should work too
+
+ return 0;
+ }
+ '''
+ self.do_run(src, '*pre: hello,4.955*\n*hello,4.955*\n*hello,4.955*')
def test_ssr(self): # struct self-ref
src = '''
@@ -1964,7 +2037,6 @@ if 'benchmark' not in str(sys.argv):
def test_time(self):
# XXX Not sure what the right output is here. Looks like the test started failing with daylight savings changes. Modified it to pass again.
- if Settings.USE_TYPED_ARRAYS == 2: return self.skip('Typed arrays = 2 truncate i64s')
src = open(path_from_root('tests', 'time', 'src.c'), 'r').read()
expected = open(path_from_root('tests', 'time', 'output.txt'), 'r').read()
self.do_run(src, expected,
@@ -2610,7 +2682,6 @@ if 'benchmark' not in str(sys.argv):
self.do_run(src, re.sub(r'(^|\n)\s+', r'\1', expected))
def test_strtod(self):
- if Settings.USE_TYPED_ARRAYS == 2: return self.skip('Typed arrays = 2 truncate doubles')
src = r'''
#include <stdio.h>
#include <stdlib.h>
@@ -2631,7 +2702,6 @@ if 'benchmark' not in str(sys.argv):
printf("%g\n", strtod("1234567891234567890", &endptr));
printf("%g\n", strtod("1234567891234567890e+50", &endptr));
printf("%g\n", strtod("84e+220", &endptr));
- printf("%g\n", strtod("84e+420", &endptr));
printf("%g\n", strtod("123e-50", &endptr));
printf("%g\n", strtod("123e-250", &endptr));
printf("%g\n", strtod("123e-450", &endptr));
@@ -2639,6 +2709,7 @@ if 'benchmark' not in str(sys.argv):
char str[] = " 12.34e56end";
printf("%g\n", strtod(str, &endptr));
printf("%d\n", endptr - str);
+ printf("%g\n", strtod("84e+420", &endptr));
return 0;
}
'''
@@ -2655,28 +2726,88 @@ if 'benchmark' not in str(sys.argv):
1.23457e+18
1.23457e+68
8.4e+221
- inf
1.23e-48
1.23e-248
0
1.234e+57
10
+ inf
'''
+
self.do_run(src, re.sub(r'\n\s+', '\n', expected))
+ def test_strtok(self):
+ src = r'''
+ #include<stdio.h>
+ #include<string.h>
+
+ int main() {
+ char test[80], blah[80];
+ char *sep = "\\/:;=-";
+ char *word, *phrase, *brkt, *brkb;
+
+ strcpy(test, "This;is.a:test:of=the/string\\tokenizer-function.");
+
+ for (word = strtok_r(test, sep, &brkt); word; word = strtok_r(NULL, sep, &brkt)) {
+ strcpy(blah, "blah:blat:blab:blag");
+ for (phrase = strtok_r(blah, sep, &brkb); phrase; phrase = strtok_r(NULL, sep, &brkb)) {
+ printf("at %s:%s\n", word, phrase);
+ }
+ }
+ return 1;
+ }
+ '''
+
+ expected = '''at This:blah
+at This:blat
+at This:blab
+at This:blag
+at is.a:blah
+at is.a:blat
+at is.a:blab
+at is.a:blag
+at test:blah
+at test:blat
+at test:blab
+at test:blag
+at of:blah
+at of:blat
+at of:blab
+at of:blag
+at the:blah
+at the:blat
+at the:blab
+at the:blag
+at string:blah
+at string:blat
+at string:blab
+at string:blag
+at tokenizer:blah
+at tokenizer:blat
+at tokenizer:blab
+at tokenizer:blag
+at function.:blah
+at function.:blat
+at function.:blab
+at function.:blag
+'''
+ self.do_run(src, expected)
+
def test_parseInt(self):
- if Settings.USE_TYPED_ARRAYS != 0: return self.skip('Typed arrays truncate i64')
+ if Settings.QUANTUM_SIZE == 1: return self.skip('Q1 and I64_1 do not mix well yet')
+ Settings.I64_MODE = 1 # Necessary to prevent i64s being truncated into i32s, but we do still get doubling
+ # FIXME: The output here is wrong, due to double rounding of i64s!
src = open(path_from_root('tests', 'parseInt', 'src.c'), 'r').read()
- if Settings.I64_MODE == 0:
- expected = open(path_from_root('tests', 'parseInt', 'output.txt'), 'r').read()
- else:
- expected = open(path_from_root('tests', 'parseInt', 'output_i64mode1.txt'), 'r').read() # some rounding issues, etc.
+ expected = open(path_from_root('tests', 'parseInt', 'output.txt'), 'r').read()
self.do_run(src, expected)
def test_printf(self):
- if Settings.USE_TYPED_ARRAYS != 0: return self.skip('Typed arrays truncate i64')
+ if Settings.QUANTUM_SIZE == 1: return self.skip('Q1 and I64_1 do not mix well yet')
+ Settings.I64_MODE = 1
+ self.banned_js_engines = [NODE_JS, V8_ENGINE] # SpiderMonkey and V8 do different things to float64 typed arrays, un-NaNing, etc.
src = open(path_from_root('tests', 'printf', 'test.c'), 'r').read()
- expected = open(path_from_root('tests', 'printf', 'output.txt'), 'r').read()
+ expected = [open(path_from_root('tests', 'printf', 'output.txt'), 'r').read(),
+ open(path_from_root('tests', 'printf', 'output_i64_1.txt'), 'r').read()]
self.do_run(src, expected)
def test_printf_types(self):
@@ -2878,8 +3009,6 @@ if 'benchmark' not in str(sys.argv):
self.do_run(src, re.sub('(^|\n)\s+', '\\1', expected), post_build=add_pre_run)
def test_stat(self):
- if Settings.I64_MODE == 1: return self.skip('TODO')
-
def add_pre_run(filename):
src = open(filename, 'r').read().replace(
'// {{PRE_RUN_ADDITIONS}}',
@@ -3399,7 +3528,7 @@ if 'benchmark' not in str(sys.argv):
self.do_run(src, 'Pfannkuchen(%d) = %d.' % (i,j), [str(i)], no_build=i>1)
def test_raytrace(self):
- if Settings.USE_TYPED_ARRAYS == 2: return self.skip('Relies on double values')
+ if Settings.USE_TYPED_ARRAYS == 2: return self.skip('Relies on double value rounding, extremely sensitive')
src = open(path_from_root('tests', 'raytrace.cpp'), 'r').read().replace('double', 'float')
output = open(path_from_root('tests', 'raytrace.ppm'), 'r').read()
@@ -3579,8 +3708,6 @@ if 'benchmark' not in str(sys.argv):
def test_the_bullet(self): # Called thus so it runs late in the alphabetical cycle... it is long
if Building.LLVM_OPTS: Settings.SAFE_HEAP = 0 # Optimizations make it so we do not have debug info on the line we need to ignore
- if Settings.USE_TYPED_ARRAYS == 2: return self.skip('We have slightly different rounding here for some reason. TODO: activate this')
-
# Note: this is also a good test of per-file and per-line changes (since we have multiple files, and correct specific lines)
if Settings.SAFE_HEAP:
# Ignore bitfield warnings
@@ -3589,7 +3716,8 @@ if 'benchmark' not in str(sys.argv):
'btVoronoiSimplexSolver.h:42', 'btVoronoiSimplexSolver.h:43']
self.do_run(open(path_from_root('tests', 'bullet', 'Demos', 'HelloWorld', 'HelloWorld.cpp'), 'r').read(),
- open(path_from_root('tests', 'bullet', 'output.txt'), 'r').read(),
+ [open(path_from_root('tests', 'bullet', 'output.txt'), 'r').read(), # different roundings
+ open(path_from_root('tests', 'bullet', 'output2.txt'), 'r').read()],
libraries=[self.get_library('bullet', [os.path.join('src', '.libs', 'libBulletCollision.a.bc'),
os.path.join('src', '.libs', 'libBulletDynamics.a.bc'),
os.path.join('src', '.libs', 'libLinearMath.a.bc')],
@@ -3598,30 +3726,12 @@ if 'benchmark' not in str(sys.argv):
js_engines=[SPIDERMONKEY_ENGINE]) # V8 issue 1407
def test_poppler(self):
- # llvm-link failure when using clang, LLVM bug 9498, still relevant?
- if Settings.RELOOP or Building.LLVM_OPTS: return self.skip('TODO')
- if Settings.USE_TYPED_ARRAYS == 2 or Settings.QUANTUM_SIZE == 1: return self.skip('TODO: Figure out and try to fix')
-
- Settings.USE_TYPED_ARRAYS = 0 # XXX bug - we fail with this FIXME
+ if not self.use_defaults: return self.skip('very slow, we only do this in default')
Settings.SAFE_HEAP = 0 # Has variable object
- Settings.CHECK_OVERFLOWS = 0
-
+ Settings.CORRECT_OVERFLOWS = 1
Settings.CORRECT_SIGNS = 1
- Settings.CORRECT_SIGNS_LINES = ['parseargs.cc:171', 'BuiltinFont.cc:64', 'NameToCharCode.cc:115', 'GooHash.cc:368',
- 'Stream.h:469', 'PDFDoc.cc:1064', 'Lexer.cc:201', 'Splash.cc:1130', 'XRef.cc:997',
- 'vector:714', 'Lexer.cc:259', 'Splash.cc:438', 'Splash.cc:532', 'GfxFont.cc:1152',
- 'Gfx.cc:3838', 'Splash.cc:3162', 'Splash.cc:3163', 'Splash.cc:3164', 'Splash.cc:3153',
- 'Splash.cc:3159', 'SplashBitmap.cc:80', 'SplashBitmap.cc:81', 'SplashBitmap.cc:82',
- 'Splash.cc:809', 'Splash.cc:805', 'GooHash.cc:379',
- # FreeType
- 't1load.c:1850', 'psconv.c:104', 'psconv.c:185', 'psconv.c:366', 'psconv.c:399',
- 'ftcalc.c:308', 't1parse.c:405', 'psconv.c:431', 'ftcalc.c:555', 't1objs.c:458',
- 't1decode.c:595', 't1decode.c:606', 'pstables.h:4048', 'pstables.h:4055', 'pstables.h:4066',
- 'pshglob.c:166', 'ftobjs.c:2548', 'ftgrays.c:1190', 'psmodule.c:116', 'psmodule.c:119',
- 'psobjs.c:195', 'pshglob.c:165', 'ttload.c:694', 'ttmtx.c:195', 'sfobjs.c:957',
- 'sfobjs.c:958', 'ftstream.c:369', 'ftstream.c:372', 'ttobjs.c:1007'] # And many more...
Building.COMPILER_TEST_OPTS += [
'-I' + path_from_root('tests', 'libcxx', 'include'), # Avoid libstdc++ linking issue, see libcxx test
@@ -3646,7 +3756,7 @@ if 'benchmark' not in str(sys.argv):
FS.root.write = true;
FS.ignorePermissions = false;
run();
- print("Data: " + JSON.stringify(FS.root.contents['filename-1.ppm'].contents));
+ print("Data: " + JSON.stringify(FS.root.contents['filename-1.ppm'].contents.map(function(x) { return unSign(x, 8) })));
'''
)
src.close()
@@ -3670,10 +3780,10 @@ if 'benchmark' not in str(sys.argv):
Building.link([freetype, poppler], combined)
self.do_ll_run(combined,
- lambda: map(ord, open(path_from_root('tests', 'poppler', 'ref.ppm'), 'r').read()).__str__().replace(' ', ''),
- args='-scale-to 512 paper.pdf filename'.split(' '),
- post_build=post)
- #, build_ll_hook=self.do_autodebug)
+ map(ord, open(path_from_root('tests', 'poppler', 'ref.ppm'), 'r').read()).__str__().replace(' ', ''),
+ args='-scale-to 512 paper.pdf filename'.split(' '),
+ post_build=post)
+ #, build_ll_hook=self.do_autodebug)
def test_openjpeg(self):
if Settings.USE_TYPED_ARRAYS == 2:
@@ -3696,6 +3806,8 @@ if 'benchmark' not in str(sys.argv):
)
open(filename, 'w').write(src)
+ shutil.copy(path_from_root('tests', 'openjpeg', 'opj_config.h'), self.get_dir())
+
lib = self.get_library('openjpeg',
[os.path.join('bin', 'libopenjpeg.so.1.4.0.bc'),
os.path.sep.join('codec/CMakeFiles/j2k_to_image.dir/index.c.o'.split('/')),
@@ -3704,8 +3816,7 @@ if 'benchmark' not in str(sys.argv):
os.path.sep.join('codec/CMakeFiles/j2k_to_image.dir/__/common/getopt.c.o'.split('/'))],
configure=['cmake', '.'],
#configure_args=['--enable-tiff=no', '--enable-jp3d=no', '--enable-png=no'],
- make_args=[], # no -j 2, since parallel builds can fail
- cache=False) # We need opj_config.h and other generated files, so cannot cache just the .bc
+ make_args=[]) # no -j 2, since parallel builds can fail
# We use doubles in JS, so we get slightly different values than native code. So we
# check our output by comparing the average pixel difference
@@ -3756,7 +3867,7 @@ if 'benchmark' not in str(sys.argv):
output_nicerizer=image_compare)#, build_ll_hook=self.do_autodebug)
def test_python(self):
- if Settings.QUANTUM_SIZE == 1 or Settings.USE_TYPED_ARRAYS == 2: return self.skip('TODO: make this work')
+ if Settings.QUANTUM_SIZE == 1: return self.skip('TODO: make this work')
# Overflows in string_hash
Settings.CORRECT_OVERFLOWS = 1
@@ -3902,8 +4013,6 @@ Block 0: ''', post_build=post1)
# Part 2: old JS version
- if Settings.USE_TYPED_ARRAYS == 2: return self.skip('LLVM opts inline out the inner func')
-
Settings.PROFILE = 1
Settings.INVOKE_RUN = 0
@@ -3950,7 +4059,7 @@ Block 0: ''', post_build=post1)
''')
src.close()
- self.do_run(src, ': __Z6inner1i (5000)\n*ok*', post_build=post)
+ self.do_run(src, ': __Z6inner1i (5000)\n', post_build=post)
### Integration tests
@@ -4188,7 +4297,6 @@ Child2:9
def test_typeinfo(self):
Settings.RUNTIME_TYPE_INFO = 1
if Settings.QUANTUM_SIZE != 4: return self.skip('We assume normal sizes in the output here')
- if Settings.USE_TYPED_ARRAYS == 2: return self.skip('LLVM unsafe opts optimize out the type info')
src = '''
#include<stdio.h>
@@ -4277,8 +4385,8 @@ Child2:9
self.do_run(src, '*closured*\ndata: 100,1,50,25\n', post_build=post)
def test_safe_heap(self):
- if Settings.USE_TYPED_ARRAYS == 2: return self.skip('It is ok to violate the load-store assumption with TA2')
if not Settings.SAFE_HEAP: return self.skip('We need SAFE_HEAP to test SAFE_HEAP')
+ if Settings.USE_TYPED_ARRAYS == 2: return self.skip('It is ok to violate the load-store assumption with TA2')
if Building.LLVM_OPTS: return self.skip('LLVM can optimize away the intermediate |x|')
src = '''
@@ -4457,8 +4565,6 @@ Child2:9
Settings.CHECK_SIGNS = 0
Settings.CHECK_OVERFLOWS = 0
- if Settings.USE_TYPED_ARRAYS == 2: return self.skip('LLVM opts optimize out the things we check')
-
# Signs
src = '''
@@ -4579,37 +4685,37 @@ Child2:9
}
'''
- Settings.CORRECT_ROUNDINGS = 0
- self.do_run(src.replace('TYPE', 'long long'), '*-3**2**-6**5*') # JS floor operations, always to the negative. This is an undetected error here!
- self.do_run(src.replace('TYPE', 'int'), '*-2**2**-5**5*') # We get these right, since they are 32-bit and we can shortcut using the |0 trick
- self.do_run(src.replace('TYPE', 'unsigned int'), '*-3**2**-6**5*') # We fail, since no fast shortcut for 32-bit unsigneds
+ if Settings.I64_MODE == 0: # the errors here are very specific to non-i64 mode 1
+ Settings.CORRECT_ROUNDINGS = 0
+ self.do_run(src.replace('TYPE', 'long long'), '*-3**2**-6**5*') # JS floor operations, always to the negative. This is an undetected error here!
+ self.do_run(src.replace('TYPE', 'int'), '*-2**2**-5**5*') # We get these right, since they are 32-bit and we can shortcut using the |0 trick
+ self.do_run(src.replace('TYPE', 'unsigned int'), '*-3**2**-6**5*') # We fail, since no fast shortcut for 32-bit unsigneds
Settings.CORRECT_ROUNDINGS = 1
+ Settings.CORRECT_SIGNS = 1 # To be correct here, we need sign corrections as well
self.do_run(src.replace('TYPE', 'long long'), '*-2**2**-5**5*') # Correct
self.do_run(src.replace('TYPE', 'int'), '*-2**2**-5**5*') # Correct
- Settings.CORRECT_SIGNS = 1 # To be correct here, we need sign corrections as well
self.do_run(src.replace('TYPE', 'unsigned int'), '*2147483645**2**-5**5*') # Correct
- return
Settings.CORRECT_SIGNS = 0
- Settings.CORRECT_ROUNDINGS = 2
- Settings.CORRECT_ROUNDINGS_LINES = ["src.cpp:13"] # Fix just the last mistake
- self.do_run(src.replace('TYPE', 'long long'), '*-3**2**-5**5*')
- self.do_run(src.replace('TYPE', 'int'), '*-2**2**-5**5*') # Here we are lucky and also get the first one right
- self.do_run(src.replace('TYPE', 'unsigned int'), '*-3**2**-5**5*') # No such luck here
+ if Settings.I64_MODE == 0: # the errors here are very specific to non-i64 mode 1
+ Settings.CORRECT_ROUNDINGS = 2
+ Settings.CORRECT_ROUNDINGS_LINES = ["src.cpp:13"] # Fix just the last mistake
+ self.do_run(src.replace('TYPE', 'long long'), '*-3**2**-5**5*')
+ self.do_run(src.replace('TYPE', 'int'), '*-2**2**-5**5*') # Here we are lucky and also get the first one right
+ self.do_run(src.replace('TYPE', 'unsigned int'), '*-3**2**-5**5*') # No such luck here
# And reverse the check with = 2
- Settings.CORRECT_ROUNDINGS = 3
- Settings.CORRECT_ROUNDINGS_LINES = ["src.cpp:999"]
- self.do_run(src.replace('TYPE', 'long long'), '*-2**2**-5**5*')
- self.do_run(src.replace('TYPE', 'int'), '*-2**2**-5**5*')
- Settings.CORRECT_SIGNS = 1 # To be correct here, we need sign corrections as well
- self.do_run(src.replace('TYPE', 'unsigned int'), '*2147483645**2**-5**5*')
- Settings.CORRECT_SIGNS = 0
+ if Settings.I64_MODE == 0: # the errors here are very specific to non-i64 mode 1
+ Settings.CORRECT_ROUNDINGS = 3
+ Settings.CORRECT_ROUNDINGS_LINES = ["src.cpp:999"]
+ self.do_run(src.replace('TYPE', 'long long'), '*-2**2**-5**5*')
+ self.do_run(src.replace('TYPE', 'int'), '*-2**2**-5**5*')
+ Settings.CORRECT_SIGNS = 1 # To be correct here, we need sign corrections as well
+ self.do_run(src.replace('TYPE', 'unsigned int'), '*2147483645**2**-5**5*')
+ Settings.CORRECT_SIGNS = 0
def test_pgo(self):
- if Settings.USE_TYPED_ARRAYS == 2: return self.skip('LLVM opts optimize out the things we check')
-
Settings.PGO = Settings.CHECK_OVERFLOWS = Settings.CORRECT_OVERFLOWS = Settings.CHECK_SIGNS = Settings.CORRECT_SIGNS = 1
src = '''
@@ -4673,8 +4779,8 @@ Child2:9
'''
self.do_run(src, 'hello, world!\nExit Status: 118')
- # Generate tests for all our compilers
- def make_run(name, compiler, llvm_opts, embetter, quantum_size, typed_arrays):
+ # Generate tests for everything
+ def make_run(name=-1, compiler=-1, llvm_opts=0, embetter=0, quantum_size=0, typed_arrays=0, defaults=False):
exec('''
class %s(T):
def tearDown(self):
@@ -4682,8 +4788,17 @@ class %s(T):
def setUp(self):
super(%s, self).setUp()
-
+
+ Building.COMPILER_TEST_OPTS = ['-g']
+ os.chdir(self.get_dir()) # Ensure the directory exists and go there
Building.COMPILER = %r
+
+ self.use_defaults = %d
+ if self.use_defaults:
+ Settings.load_defaults()
+ Building.LLVM_OPTS = 0
+ return
+
llvm_opts = %d # 1 is yes, 2 is yes and unsafe
embetter = %d
quantum_size = %d
@@ -4712,40 +4827,40 @@ class %s(T):
Settings.CATCH_EXIT_CODE = 0
Settings.TOTAL_MEMORY = Settings.FAST_MEMORY = None
Settings.EMULATE_UNALIGNED_ACCESSES = Settings.USE_TYPED_ARRAYS == 2 and Building.LLVM_OPTS == 2
+ Settings.DOUBLE_MODE = 1 if Settings.USE_TYPED_ARRAYS and Building.LLVM_OPTS == 0 else 0
if Settings.USE_TYPED_ARRAYS == 2:
Settings.I64_MODE = 1
Settings.SAFE_HEAP = 1 # only checks for alignment problems, which is very important with unsafe opts
else:
Settings.I64_MODE = 0
- if Settings.QUANTUM_SIZE == 1 or Settings.USE_TYPED_ARRAYS == 2:
+ if Settings.USE_TYPED_ARRAYS != 2 or Building.LLVM_OPTS == 2:
Settings.RELOOP = 0 # XXX Would be better to use this, but it isn't really what we test in these cases, and is very slow
Building.pick_llvm_opts(3, safe=Building.LLVM_OPTS != 2)
- Building.COMPILER_TEST_OPTS = ['-g']
-
- os.chdir(self.get_dir()) # Ensure the directory exists and go there
-
TT = %s
-''' % (fullname, fullname, fullname, compiler, llvm_opts, embetter, quantum_size, typed_arrays, fullname))
+''' % (fullname, fullname, fullname, compiler, defaults, llvm_opts, embetter, quantum_size, typed_arrays, fullname))
return TT
- for name, compiler, quantum, embetter, typed_arrays, llvm_opts in [
- ('clang', CLANG, 1, 0, 0, 0),
- ('clang', CLANG, 1, 0, 0, 1),
- ('clang', CLANG, 4, 0, 0, 0),
- ('clang', CLANG, 4, 0, 0, 1),
- ('clang', CLANG, 1, 1, 1, 0),
- ('clang', CLANG, 1, 1, 1, 1),
- ('clang', CLANG, 4, 1, 1, 0),
- ('clang', CLANG, 4, 1, 1, 1),
- ('clang', CLANG, 4, 1, 2, 0),
- ('clang', CLANG, 4, 1, 2, 1),
- #('clang', CLANG, 4, 1, 2, 2),
+ # Make one run with the defaults
+ fullname = 'default'
+ exec(fullname + ' = make_run(compiler=CLANG, defaults=True)')
+
+ # Make custom runs with various options
+ for compiler, quantum, embetter, typed_arrays, llvm_opts in [
+ (CLANG, 1, 1, 0, 0),
+ (CLANG, 1, 1, 1, 1),
+ (CLANG, 4, 0, 0, 0),
+ (CLANG, 4, 0, 0, 1),
+ (CLANG, 4, 1, 1, 0),
+ (CLANG, 4, 1, 1, 1),
+ (CLANG, 4, 1, 2, 0),
+ (CLANG, 4, 1, 2, 1),
+ #(CLANG, 4, 1, 2, 2),
]:
- fullname = '%s_%d_%d%s%s' % (
- name, llvm_opts, embetter, '' if quantum == 4 else '_q' + str(quantum), '' if typed_arrays in [0, 1] else '_t' + str(typed_arrays)
+ fullname = 's_%d_%d%s%s' % (
+ llvm_opts, embetter, '' if quantum == 4 else '_q' + str(quantum), '' if typed_arrays in [0, 1] else '_t' + str(typed_arrays)
)
exec('%s = make_run(%r,%r,%d,%d,%d,%d)' % (fullname, fullname, compiler, llvm_opts, embetter, quantum, typed_arrays))
@@ -4821,7 +4936,8 @@ else:
print 'Benchmarking JS engine:', JS_ENGINE
Building.COMPILER_TEST_OPTS = []
- POST_OPTIMIZATIONS = [['js-optimizer', 'loopOptimizer'], 'eliminator', 'closure', ['js-optimizer', 'unGlobalize', 'removeAssignsToUndefined', 'simplifyExpressions']]
+ # TODO: Use other js optimizer options, like remove assigns to undefined (seems to slow us down more than speed us up)
+ POST_OPTIMIZATIONS = [['js-optimizer', 'loopOptimizer'], 'eliminator', 'closure', ['js-optimizer', 'simplifyExpressions']]
TEST_REPS = 10
TOTAL_TESTS = 7
@@ -4832,10 +4948,13 @@ else:
class benchmark(RunnerCore):
def setUp(self):
+ super(benchmark, self).setUp()
+
Settings.RELOOP = Settings.MICRO_OPTS = 1
Settings.USE_TYPED_ARRAYS = 1
Settings.QUANTUM_SIZE = 1
Settings.I64_MODE = 0
+ Settings.DOUBLE_MODE = 0
Settings.ASSERTIONS = Settings.SAFE_HEAP = Settings.CHECK_OVERFLOWS = Settings.CORRECT_OVERFLOWS = Settings.CHECK_SIGNS = Settings.INIT_STACK = Settings.PGO = Settings.RUNTIME_TYPE_INFO = 0
Settings.INVOKE_RUN = 1
Settings.CORRECT_SIGNS = 0
@@ -4849,8 +4968,6 @@ else:
Building.LLVM_OPTS = 1 if Settings.USE_TYPED_ARRAYS != 2 else 2
Building.pick_llvm_opts(2, safe=Building.LLVM_OPTS != 2)
- super(benchmark, self).setUp()
-
def print_stats(self, times, native_times, last=False):
mean = sum(times)/len(times)
squared_times = map(lambda x: x*x, times)
diff --git a/tests/stat/src.c b/tests/stat/src.c
index bdf27ca2..dc5a0198 100644
--- a/tests/stat/src.c
+++ b/tests/stat/src.c
@@ -15,11 +15,11 @@ int main() {
printf("--stat FOLDER--\n");
printf("ret: %d\n", stat("/test", &s));
printf("errno: %d\n", errno);
- printf("st_dev: %llu\n", s.st_dev);
+ printf("st_dev: %lu\n", s.st_dev);
printf("st_ino: %lu\n", s.st_ino);
printf("st_mode: 0%o\n", s.st_mode);
printf("st_nlink: %d\n", s.st_nlink);
- printf("st_rdev: %llu\n", s.st_rdev);
+ printf("st_rdev: %lu\n", s.st_rdev);
printf("st_size: %ld\n", s.st_size);
printf("st_atime: %ld\n", s.st_atime);
printf("st_mtime: %ld\n", s.st_mtime);
@@ -38,11 +38,11 @@ int main() {
printf("\n--stat FILE--\n");
printf("ret: %d\n", stat("/test/file", &s));
printf("errno: %d\n", errno);
- printf("st_dev: %llu\n", s.st_dev);
+ printf("st_dev: %lu\n", s.st_dev);
printf("st_ino: %lu\n", s.st_ino);
printf("st_mode: 0%o\n", s.st_mode);
printf("st_nlink: %d\n", s.st_nlink);
- printf("st_rdev: %llu\n", s.st_rdev);
+ printf("st_rdev: %lu\n", s.st_rdev);
printf("st_size: %ld\n", s.st_size);
printf("st_atime: %ld\n", s.st_atime);
printf("st_mtime: %ld\n", s.st_mtime);
@@ -61,11 +61,11 @@ int main() {
printf("\n--stat DEVICE--\n");
printf("ret: %d\n", stat("/test/device", &s));
printf("errno: %d\n", errno);
- printf("st_dev: %llu\n", s.st_dev);
+ printf("st_dev: %lu\n", s.st_dev);
printf("st_ino: %lu\n", s.st_ino);
printf("st_mode: 0%o\n", s.st_mode);
printf("st_nlink: %d\n", s.st_nlink);
- printf("st_rdev: %llu\n", s.st_rdev);
+ printf("st_rdev: %lu\n", s.st_rdev);
printf("st_size: %ld\n", s.st_size);
printf("st_atime: %ld\n", s.st_atime);
printf("st_mtime: %ld\n", s.st_mtime);
@@ -84,11 +84,11 @@ int main() {
printf("\n--stat LINK--\n");
printf("ret: %d\n", stat("/test/link", &s));
printf("errno: %d\n", errno);
- printf("st_dev: %llu\n", s.st_dev);
+ printf("st_dev: %lu\n", s.st_dev);
printf("st_ino: %lu\n", s.st_ino);
printf("st_mode: 0%o\n", s.st_mode);
printf("st_nlink: %d\n", s.st_nlink);
- printf("st_rdev: %llu\n", s.st_rdev);
+ printf("st_rdev: %lu\n", s.st_rdev);
printf("st_size: %ld\n", s.st_size);
printf("st_atime: %ld\n", s.st_atime);
printf("st_mtime: %ld\n", s.st_mtime);
@@ -107,11 +107,11 @@ int main() {
printf("\n--lstat LINK--\n");
printf("ret: %d\n", lstat("/test/link", &s));
printf("errno: %d\n", errno);
- printf("st_dev: %llu\n", s.st_dev);
+ printf("st_dev: %lu\n", s.st_dev);
printf("st_ino: %lu\n", s.st_ino);
printf("st_mode: 0%o\n", s.st_mode);
printf("st_nlink: %d\n", s.st_nlink);
- printf("st_rdev: %llu\n", s.st_rdev);
+ printf("st_rdev: %lu\n", s.st_rdev);
printf("st_size: %ld\n", s.st_size);
printf("st_atime: %ld\n", s.st_atime);
printf("st_mtime: %ld\n", s.st_mtime);
@@ -130,11 +130,11 @@ int main() {
printf("\n--fstat FILE--\n");
printf("ret: %d\n", fstat(open("/test/file", O_RDONLY, 0777), &s));
printf("errno: %d\n", errno);
- printf("st_dev: %llu\n", s.st_dev);
+ printf("st_dev: %lu\n", s.st_dev);
printf("st_ino: %lu\n", s.st_ino);
printf("st_mode: 0%o\n", s.st_mode);
printf("st_nlink: %d\n", s.st_nlink);
- printf("st_rdev: %llu\n", s.st_rdev);
+ printf("st_rdev: %lu\n", s.st_rdev);
printf("st_size: %ld\n", s.st_size);
printf("st_atime: %ld\n", s.st_atime);
printf("st_mtime: %ld\n", s.st_mtime);
diff --git a/tools/js-optimizer.js b/tools/js-optimizer.js
index e889c7a3..d22de39c 100644
--- a/tools/js-optimizer.js
+++ b/tools/js-optimizer.js
@@ -193,6 +193,11 @@ function unGlobalize(ast) {
// - and in library/shell code too! - we should never rely on
// undefined being assigned. So we can simply remove those assignments.
//
+// Note: An inlined function that kept a large value referenced, may
+// keep that references when inlined, if we remove the setting to
+// undefined. This is not dangerous in compiled code, but might be
+// in supporting code (for example, holding on to the HEAP when copying).
+//
// This pass assumes that unGlobalize has been run, so undefined
// is now explicit.
function removeAssignsToUndefined(ast) {
diff --git a/tools/shared.py b/tools/shared.py
index 632cf633..0aead08a 100644
--- a/tools/shared.py
+++ b/tools/shared.py
@@ -144,11 +144,22 @@ def read_pgo_data(filename):
'overflows_lines': overflows_lines
}
-# Settings
-
-class Dummy: pass
-
-Settings = Dummy() # A global singleton. Not pretty, but nicer than passing |, settings| everywhere
+# Settings. A global singleton. Not pretty, but nicer than passing |, settings| everywhere
+
+class Settings:
+ @classmethod
+ def reset(self):
+ global Settings
+ class Settings2:
+ reset = Settings.reset
+ load_defaults = Settings.load_defaults
+ Settings = Settings2
+
+ @classmethod
+ def load_defaults(self):
+ ''' Load the JS settings into Python '''
+ settings = open(path_from_root('src', 'settings.js')).read().replace('var ', 'Settings.').replace('//', '#')
+ exec(settings)
# Building