Socket
Book a DemoInstallSign in
Socket

jsonrepair

Package Overview
Dependencies
Maintainers
1
Versions
35
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

jsonrepair - npm Package Compare versions

Comparing version

to
3.2.1

24

lib/cjs/jsonrepair.js

@@ -300,3 +300,3 @@ "use strict";

i++;
while (i < text.length && !isEndQuote(text.charCodeAt(i))) {
while (i < text.length && !isEndQuote(text.charCodeAt(i)) && text.charCodeAt(i) !== _stringUtils.codeNewline) {
if (text.charCodeAt(i) === _stringUtils.codeBackslash) {

@@ -354,3 +354,10 @@ const char = text[i + 1];

// repair missing end quote
output += '"';
// walk back and insert the missing end quote before any
// trailing comma (or other delimiter) and whitespaces
let steps = 0;
while (i > 0 && ((0, _stringUtils.isDelimiter)(text[i - 1]) || (0, _stringUtils.isWhitespace)(text.charCodeAt(i - 1)))) {
i--;
steps++;
}
output = output.substring(0, output.length - steps) + '"';
}

@@ -398,2 +405,3 @@ parseConcatenatedString();

i++;
expectNoDigit(i - 1); // check against leading zeros
} else if ((0, _stringUtils.isNonZeroDigit)(text.charCodeAt(i))) {

@@ -479,2 +487,3 @@ i++;

// repair unquoted string
// also, repair undefined into null

@@ -487,2 +496,6 @@ // first, go back to prevent getting trailing whitespaces in the string

output += symbol === 'undefined' ? 'null' : JSON.stringify(symbol);
if (text.charCodeAt(i) === _stringUtils.codeDoubleQuote) {
// we had a missing start quote, but now we encountered the end quote, so we can skip that one
i++;
}
return true;

@@ -495,5 +508,10 @@ }

const numSoFar = text.slice(start, i);
throw new _JSONRepairError.JSONRepairError("Invalid number '".concat(numSoFar, "', expecting a digit ").concat(got()), 2);
throw new _JSONRepairError.JSONRepairError("Invalid number '".concat(numSoFar, "', expecting a digit ").concat(got()), i);
}
}
function expectNoDigit(start) {
if ((0, _stringUtils.isDigit)(text.charCodeAt(i))) {
throw new _JSONRepairError.JSONRepairError('Invalid number, unexpected leading zero', start);
}
}
function expectDigitOrRepair(start) {

@@ -500,0 +518,0 @@ if (i >= text.length) {

@@ -294,3 +294,3 @@ import { JSONRepairError } from './JSONRepairError.js';

i++;
while (i < text.length && !isEndQuote(text.charCodeAt(i))) {
while (i < text.length && !isEndQuote(text.charCodeAt(i)) && text.charCodeAt(i) !== codeNewline) {
if (text.charCodeAt(i) === codeBackslash) {

@@ -348,3 +348,10 @@ const char = text[i + 1];

// repair missing end quote
output += '"';
// walk back and insert the missing end quote before any
// trailing comma (or other delimiter) and whitespaces
let steps = 0;
while (i > 0 && (isDelimiter(text[i - 1]) || isWhitespace(text.charCodeAt(i - 1)))) {
i--;
steps++;
}
output = output.substring(0, output.length - steps) + '"';
}

@@ -392,2 +399,3 @@ parseConcatenatedString();

i++;
expectNoDigit(i - 1); // check against leading zeros
} else if (isNonZeroDigit(text.charCodeAt(i))) {

@@ -473,2 +481,3 @@ i++;

// repair unquoted string
// also, repair undefined into null

@@ -481,2 +490,6 @@ // first, go back to prevent getting trailing whitespaces in the string

output += symbol === 'undefined' ? 'null' : JSON.stringify(symbol);
if (text.charCodeAt(i) === codeDoubleQuote) {
// we had a missing start quote, but now we encountered the end quote, so we can skip that one
i++;
}
return true;

@@ -489,5 +502,10 @@ }

const numSoFar = text.slice(start, i);
throw new JSONRepairError("Invalid number '".concat(numSoFar, "', expecting a digit ").concat(got()), 2);
throw new JSONRepairError("Invalid number '".concat(numSoFar, "', expecting a digit ").concat(got()), i);
}
}
function expectNoDigit(start) {
if (isDigit(text.charCodeAt(i))) {
throw new JSONRepairError('Invalid number, unexpected leading zero', start);
}
}
function expectDigitOrRepair(start) {

@@ -494,0 +512,0 @@ if (i >= text.length) {

@@ -457,3 +457,3 @@ (function (global, factory) {

i++;
while (i < text.length && !isEndQuote(text.charCodeAt(i))) {
while (i < text.length && !isEndQuote(text.charCodeAt(i)) && text.charCodeAt(i) !== codeNewline) {
if (text.charCodeAt(i) === codeBackslash) {

@@ -506,3 +506,10 @@ const char = text[i + 1];

// repair missing end quote
output += '"';
// walk back and insert the missing end quote before any
// trailing comma (or other delimiter) and whitespaces
let steps = 0;
while (i > 0 && (isDelimiter(text[i - 1]) || isWhitespace(text.charCodeAt(i - 1)))) {
i--;
steps++;
}
output = output.substring(0, output.length - steps) + '"';
}

@@ -550,2 +557,3 @@ parseConcatenatedString();

i++;
expectNoDigit(i - 1); // check against leading zeros
} else if (isNonZeroDigit(text.charCodeAt(i))) {

@@ -631,2 +639,3 @@ i++;

// repair unquoted string
// also, repair undefined into null

@@ -639,2 +648,6 @@ // first, go back to prevent getting trailing whitespaces in the string

output += symbol === 'undefined' ? 'null' : JSON.stringify(symbol);
if (text.charCodeAt(i) === codeDoubleQuote) {
// we had a missing start quote, but now we encountered the end quote, so we can skip that one
i++;
}
return true;

@@ -647,5 +660,10 @@ }

const numSoFar = text.slice(start, i);
throw new JSONRepairError("Invalid number '".concat(numSoFar, "', expecting a digit ").concat(got()), 2);
throw new JSONRepairError("Invalid number '".concat(numSoFar, "', expecting a digit ").concat(got()), i);
}
}
function expectNoDigit(start) {
if (isDigit(text.charCodeAt(i))) {
throw new JSONRepairError('Invalid number, unexpected leading zero', start);
}
}
function expectDigitOrRepair(start) {

@@ -652,0 +670,0 @@ if (i >= text.length) {

2

lib/umd/jsonrepair.min.js

@@ -1,1 +0,1 @@

!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).JSONRepair={})}(this,function(t){"use strict";class A extends Error{constructor(t,e){super(t+" at position "+e),this.position=e}}const e=32,g=10,v=9,b=13,p=8,w=12,x=34,r=39,y=48,O=49,N=57,n=65,o=97,c=70,i=102,J=160,S=8192,j=8202,I=8239,k=8287,m=12288,f=8220,a=8221,u=8216,d=8217,h=96,l=180;function T(t){return t>=y&&t<=N||t>=n&&t<=c||t>=o&&t<=i}function $(t){return t>=y&&t<=N}const G=/^[,:[\]{}()\n]$/;function E(t){return s.test(t)||t&&U(t.charCodeAt(0))}const s=/^[[{\w-]$/;function R(t){return t===e||t===g||t===v||t===b}function U(t){return F(t)||z(t)}function F(t){return t===x||t===f||t===a}function q(t){return t===x}function z(t){return t===r||t===u||t===d||t===h||t===l}function B(t,e,r){r=2<arguments.length&&void 0!==r&&r,e=t.lastIndexOf(e);return-1!==e?t.substring(0,e)+(r?"":t.substring(e+1)):t}function D(t,e){let r=t.length;if(!R(t.charCodeAt(r-1)))return t+e;for(;R(t.charCodeAt(r-1));)r--;return t.substring(0,r)+e+t.substring(r)}const H={"\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r","\t":"\\t"},K={'"':'"',"\\":"\\","/":"/",b:"\b",f:"\f",n:"\n",r:"\r",t:"\t"};t.JSONRepairError=A,t.jsonrepair=function(i){let f=0,a="";if(!o())throw new A("Unexpected end of json string",i.length);var t=c(44);if(t&&u(),E(i[f])&&/[,\n][ \t\r]*$/.test(a)){t||(a=D(a,","));{let t=!0,e=!0;for(;e;)t?t=!1:c(44)||(a=D(a,",")),e=o();e||(a=B(a,","));a="[\n".concat(a,"\n]")}}else t&&(a=B(a,","));if(f>=i.length)return a;throw new A("Unexpected character "+JSON.stringify(i[f]),f);function o(){u();var t=function(){if(123!==i.charCodeAt(f))return!1;{a+="{",f++,u();let e=!0;for(;f<i.length&&125!==i.charCodeAt(f);){let t;if(e?(t=!0,e=!1):((t=c(44))||(a=D(a,",")),u()),!(h()||l())){125===i.charCodeAt(f)||123===i.charCodeAt(f)||93===i.charCodeAt(f)||91===i.charCodeAt(f)||void 0===i[f]?a=B(a,","):function(){throw new A("Object key expected",f)}();break}u();var r=c(58),n=(r||(E(i[f])?a=D(a,":"):C()),o());n||(r?a+="null":C())}return 125===i.charCodeAt(f)?(a+="}",f++):a=D(a,"}"),!0}}()||function(){if(91!==i.charCodeAt(f))return!1;{a+="[",f++,u();let t=!0;for(;f<i.length&&93!==i.charCodeAt(f);){t?t=!1:c(44)||(a=D(a,","));var e=o();if(!e){a=B(a,",");break}}return 93===i.charCodeAt(f)?(a+="]",f++):a=D(a,"]"),!0}}()||h()||function(){var t=f;if(45===i.charCodeAt(f)&&(f++,s(t)))return!0;if(i.charCodeAt(f)===y)f++;else if(function(t){return t>=O&&t<=N}(i.charCodeAt(f)))for(f++;$(i.charCodeAt(f));)f++;if(46===i.charCodeAt(f)){if(f++,s(t))return!0;for(;$(i.charCodeAt(f));)f++}if(101===i.charCodeAt(f)||69===i.charCodeAt(f)){if(f++,45!==i.charCodeAt(f)&&43!==i.charCodeAt(f)||f++,s(t))return!0;for(;$(i.charCodeAt(f));)f++}if(f>t)return a+=i.slice(t,f),!0;return!1}()||r("true","true")||r("false","false")||r("null","null")||r("True","true")||r("False","false")||r("None","null")||l();return u(),t}function u(){f;let t=e();for(;t=(t=function(){if(47===i.charCodeAt(f)&&42===i.charCodeAt(f+1)){for(;f<i.length&&!function(t,e){return"*"===t[e]&&"/"===t[e+1]}(i,f);)f++;f+=2}else{if(47!==i.charCodeAt(f)||47!==i.charCodeAt(f+1))return!1;for(;f<i.length&&i.charCodeAt(f)!==g;)f++}return!0}())&&e(););f}function e(){let t="";for(var e,r;(e=R(i.charCodeAt(f)))||(r=i.charCodeAt(f))===J||r>=S&&r<=j||r===I||r===k||r===m;)t+=e?i[f]:" ",f++;return 0<t.length&&(a+=t,!0)}function c(t){return i.charCodeAt(f)===t&&(a+=i[f],f++,!0)}function d(){92===i.charCodeAt(f)&&f++}function h(){let t=92===i.charCodeAt(f);if(t&&(f++,t=!0),U(i.charCodeAt(f))){var e=z(i.charCodeAt(f))?z:q(i.charCodeAt(f))?q:F;for(a+='"',f++;f<i.length&&!e(i.charCodeAt(f));){if(92===i.charCodeAt(f)){var r=i[f+1];if(void 0!==K[r])a+=i.slice(f,f+2),f+=2;else if("u"===r){if(!(T(i.charCodeAt(f+2))&&T(i.charCodeAt(f+3))&&T(i.charCodeAt(f+4))&&T(i.charCodeAt(f+5)))){n=void 0;var n=f;let t=n+2;for(;/\w/.test(i[t]);)t++;n=i.slice(n,t);throw new A('Invalid unicode character "'.concat(n,'"'),f)}a+=i.slice(f,f+6),f+=6}else a+=r,f+=2}else{n=i[f],r=i.charCodeAt(f);if(r===x&&92!==i.charCodeAt(f-1))a+="\\"+n;else if((c=r)===g||c===b||c===v||c===p||c===w)a+=H[n];else{if(!(32<=(c=r)&&c<=1114111))throw c=void 0,c=n,new A("Invalid character "+JSON.stringify(c),f);a+=n}f++}t&&d()}U(i.charCodeAt(f))?(i.charCodeAt(f),x,a+='"',f++):a+='"';{let t=!1;u();for(;43===i.charCodeAt(f);){t=!0,f++,u();var o=(a=B(a,'"',!0)).length;h(),a=function(t,e,r){return t.substring(0,e)+t.substring(e+r)}(a,o,1)}t}return!0}var c;return!1}function r(t,e){return i.slice(f,f+t.length)===t&&(a+=e,f+=t.length,!0)}function l(){for(var t,e=f;f<i.length&&(t=i[f],!(G.test(t)||t&&U(t.charCodeAt(0))));)f++;if(f>e){if(40===i.charCodeAt(f))f++,o(),41===i.charCodeAt(f)&&(f++,59===i.charCodeAt(f))&&f++;else{for(;R(i.charCodeAt(f-1))&&0<f;)f--;e=i.slice(e,f);a+="undefined"===e?"null":JSON.stringify(e)}return!0}}function n(t){if(!$(i.charCodeAt(f)))throw t=i.slice(t,f),new A("Invalid number '".concat(t,"', expecting a digit ").concat(i[f]?"but got '".concat(i[f],"'"):"but reached end of input"),2)}function s(t){if(f>=i.length)return a+=i.slice(t,f)+"0",1;n(t)}function C(){throw new A("Colon expected",f)}}});
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).JSONRepair={})}(this,function(t){"use strict";class A extends Error{constructor(t,e){super(t+" at position "+e),this.position=e}}const e=32,g=10,b=9,v=13,p=8,w=12,x=34,r=39,y=48,O=49,N=57,n=65,o=97,c=70,i=102,I=160,J=8192,S=8202,j=8239,m=8287,k=12288,f=8220,a=8221,u=8216,d=8217,h=96,l=180;function T(t){return t>=y&&t<=N||t>=n&&t<=c||t>=o&&t<=i}function $(t){return t>=y&&t<=N}function E(t){return s.test(t)||t&&z(t.charCodeAt(0))}const s=/^[,:[\]{}()\n]$/;function R(t){return C.test(t)||t&&z(t.charCodeAt(0))}const C=/^[[{\w-]$/;function U(t){return t===e||t===g||t===b||t===v}function z(t){return F(t)||B(t)}function F(t){return t===x||t===f||t===a}function q(t){return t===x}function B(t){return t===r||t===u||t===d||t===h||t===l}function D(t,e,r){r=2<arguments.length&&void 0!==r&&r,e=t.lastIndexOf(e);return-1!==e?t.substring(0,e)+(r?"":t.substring(e+1)):t}function G(t,e){let r=t.length;if(!U(t.charCodeAt(r-1)))return t+e;for(;U(t.charCodeAt(r-1));)r--;return t.substring(0,r)+e+t.substring(r)}const H={"\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r","\t":"\\t"},K={'"':'"',"\\":"\\","/":"/",b:"\b",f:"\f",n:"\n",r:"\r",t:"\t"};t.JSONRepairError=A,t.jsonrepair=function(i){let f=0,a="";if(!o())throw new A("Unexpected end of json string",i.length);var t=c(44);if(t&&u(),R(i[f])&&/[,\n][ \t\r]*$/.test(a)){t||(a=G(a,","));{let t=!0,e=!0;for(;e;)t?t=!1:c(44)||(a=G(a,",")),e=o();e||(a=D(a,","));a="[\n".concat(a,"\n]")}}else t&&(a=D(a,","));if(f>=i.length)return a;throw new A("Unexpected character "+JSON.stringify(i[f]),f);function o(){u();var t=function(){if(123!==i.charCodeAt(f))return!1;{a+="{",f++,u();let e=!0;for(;f<i.length&&125!==i.charCodeAt(f);){let t;if(e?(t=!0,e=!1):((t=c(44))||(a=G(a,",")),u()),!(h()||l())){125===i.charCodeAt(f)||123===i.charCodeAt(f)||93===i.charCodeAt(f)||91===i.charCodeAt(f)||void 0===i[f]?a=D(a,","):function(){throw new A("Object key expected",f)}();break}u();var r=c(58),n=(r||(R(i[f])?a=G(a,":"):C()),o());n||(r?a+="null":C())}return 125===i.charCodeAt(f)?(a+="}",f++):a=G(a,"}"),!0}}()||function(){if(91!==i.charCodeAt(f))return!1;{a+="[",f++,u();let t=!0;for(;f<i.length&&93!==i.charCodeAt(f);){t?t=!1:c(44)||(a=G(a,","));var e=o();if(!e){a=D(a,",");break}}return 93===i.charCodeAt(f)?(a+="]",f++):a=G(a,"]"),!0}}()||h()||function(){var t=f;if(45===i.charCodeAt(f)&&(f++,s(t)))return!0;if(i.charCodeAt(f)===y)!function(t){if($(i.charCodeAt(f)))throw new A("Invalid number, unexpected leading zero",t)}(++f-1);else if(function(t){return t>=O&&t<=N}(i.charCodeAt(f)))for(f++;$(i.charCodeAt(f));)f++;if(46===i.charCodeAt(f)){if(f++,s(t))return!0;for(;$(i.charCodeAt(f));)f++}if(101===i.charCodeAt(f)||69===i.charCodeAt(f)){if(f++,45!==i.charCodeAt(f)&&43!==i.charCodeAt(f)||f++,s(t))return!0;for(;$(i.charCodeAt(f));)f++}if(f>t)return a+=i.slice(t,f),!0;return!1}()||r("true","true")||r("false","false")||r("null","null")||r("True","true")||r("False","false")||r("None","null")||l();return u(),t}function u(){f;let t=e();for(;t=(t=function(){if(47===i.charCodeAt(f)&&42===i.charCodeAt(f+1)){for(;f<i.length&&!function(t,e){return"*"===t[e]&&"/"===t[e+1]}(i,f);)f++;f+=2}else{if(47!==i.charCodeAt(f)||47!==i.charCodeAt(f+1))return!1;for(;f<i.length&&i.charCodeAt(f)!==g;)f++}return!0}())&&e(););f}function e(){let t="";for(var e,r;(e=U(i.charCodeAt(f)))||(r=i.charCodeAt(f))===I||r>=J&&r<=S||r===j||r===m||r===k;)t+=e?i[f]:" ",f++;return 0<t.length&&(a+=t,!0)}function c(t){return i.charCodeAt(f)===t&&(a+=i[f],f++,!0)}function d(){92===i.charCodeAt(f)&&f++}function h(){let t=92===i.charCodeAt(f);if(t&&(f++,t=!0),z(i.charCodeAt(f))){var e=B(i.charCodeAt(f))?B:q(i.charCodeAt(f))?q:F;for(a+='"',f++;f<i.length&&!e(i.charCodeAt(f))&&i.charCodeAt(f)!==g;){if(92===i.charCodeAt(f)){var r=i[f+1];if(void 0!==K[r])a+=i.slice(f,f+2),f+=2;else if("u"===r){if(!(T(i.charCodeAt(f+2))&&T(i.charCodeAt(f+3))&&T(i.charCodeAt(f+4))&&T(i.charCodeAt(f+5)))){n=void 0;var n=f;let t=n+2;for(;/\w/.test(i[t]);)t++;n=i.slice(n,t);throw new A('Invalid unicode character "'.concat(n,'"'),f)}a+=i.slice(f,f+6),f+=6}else a+=r,f+=2}else{n=i[f],r=i.charCodeAt(f);if(r===x&&92!==i.charCodeAt(f-1))a+="\\"+n;else if((c=r)===g||c===v||c===b||c===p||c===w)a+=H[n];else{if(!(32<=(c=r)&&c<=1114111))throw c=void 0,c=n,new A("Invalid character "+JSON.stringify(c),f);a+=n}f++}t&&d()}if(z(i.charCodeAt(f)))i.charCodeAt(f),x,a+='"',f++;else{let t=0;for(;0<f&&(E(i[f-1])||U(i.charCodeAt(f-1)));)f--,t++;a=a.substring(0,a.length-t)+'"'}{let t=!1;u();for(;43===i.charCodeAt(f);){t=!0,f++,u();var o=(a=D(a,'"',!0)).length;h(),a=function(t,e,r){return t.substring(0,e)+t.substring(e+r)}(a,o,1)}t}return!0}var c;return!1}function r(t,e){return i.slice(f,f+t.length)===t&&(a+=e,f+=t.length,!0)}function l(){for(var t=f;f<i.length&&!E(i[f]);)f++;if(f>t){if(40===i.charCodeAt(f))f++,o(),41===i.charCodeAt(f)&&(f++,59===i.charCodeAt(f))&&f++;else{for(;U(i.charCodeAt(f-1))&&0<f;)f--;t=i.slice(t,f);a+="undefined"===t?"null":JSON.stringify(t),i.charCodeAt(f)===x&&f++}return!0}}function n(t){if(!$(i.charCodeAt(f)))throw t=i.slice(t,f),new A("Invalid number '".concat(t,"', expecting a digit ").concat(i[f]?"but got '".concat(i[f],"'"):"but reached end of input"),f)}function s(t){if(f>=i.length)return a+=i.slice(t,f)+"0",1;n(t)}function C(){throw new A("Colon expected",f)}}});
{
"name": "jsonrepair",
"version": "3.2.0",
"version": "3.2.1",
"description": "Repair broken JSON documents",

@@ -62,20 +62,20 @@ "repository": {

"devDependencies": {
"@babel/cli": "7.22.5",
"@babel/core": "7.22.5",
"@babel/plugin-transform-typescript": "7.22.5",
"@babel/preset-env": "7.22.5",
"@babel/preset-typescript": "7.22.5",
"@commitlint/cli": "17.6.5",
"@commitlint/config-conventional": "17.6.5",
"@babel/cli": "7.22.15",
"@babel/core": "7.22.20",
"@babel/plugin-transform-typescript": "7.22.15",
"@babel/preset-env": "7.22.20",
"@babel/preset-typescript": "7.22.15",
"@commitlint/cli": "17.7.1",
"@commitlint/config-conventional": "17.7.0",
"@types/mocha": "10.0.1",
"@types/node": "20.3.1",
"@typescript-eslint/eslint-plugin": "5.59.11",
"@typescript-eslint/parser": "5.59.11",
"@types/node": "20.6.3",
"@typescript-eslint/eslint-plugin": "6.7.2",
"@typescript-eslint/parser": "6.7.2",
"benchmark": "2.1.4",
"cpy-cli": "4.2.0",
"del-cli": "5.0.0",
"eslint": "8.42.0",
"cpy-cli": "5.0.0",
"del-cli": "5.1.0",
"eslint": "8.49.0",
"eslint-config-standard": "17.1.0",
"eslint-plugin-import": "2.27.5",
"eslint-plugin-n": "16.0.0",
"eslint-plugin-import": "2.28.1",
"eslint-plugin-n": "16.1.0",
"eslint-plugin-node": "11.1.0",

@@ -86,9 +86,9 @@ "eslint-plugin-promise": "6.1.1",

"npm-run-all": "4.1.5",
"prettier": "2.8.8",
"rollup": "3.25.1",
"prettier": "3.0.3",
"rollup": "3.29.2",
"standard-version": "9.5.0",
"ts-node": "10.9.1",
"typescript": "5.1.3",
"typescript": "5.2.2",
"uglify-js": "3.17.4"
}
}

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

About

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.

  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc

U.S. Patent No. 12,346,443 & 12,314,394. Other pending.