zkjson 0.6.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (187) hide show
  1. package/README.md +537 -0
  2. package/assets/collection.png +0 -0
  3. package/assets/db.png +0 -0
  4. package/assets/encode.png +0 -0
  5. package/assets/query.png +0 -0
  6. package/assets/rollup.png +0 -0
  7. package/assets/structure.png +0 -0
  8. package/assets/weavedb.png +0 -0
  9. package/assets/zkjson.png +0 -0
  10. package/benchmark/components/ui/avatar.jsx +49 -0
  11. package/benchmark/components/ui/checkbox.jsx +17 -0
  12. package/benchmark/components/ui/close-button.jsx +20 -0
  13. package/benchmark/components/ui/color-mode.jsx +89 -0
  14. package/benchmark/components/ui/dialog.jsx +54 -0
  15. package/benchmark/components/ui/drawer.jsx +44 -0
  16. package/benchmark/components/ui/field.jsx +22 -0
  17. package/benchmark/components/ui/input-group.jsx +39 -0
  18. package/benchmark/components/ui/popover.jsx +49 -0
  19. package/benchmark/components/ui/provider.jsx +12 -0
  20. package/benchmark/components/ui/radio.jsx +17 -0
  21. package/benchmark/components/ui/slider.jsx +107 -0
  22. package/benchmark/components/ui/tooltip.jsx +35 -0
  23. package/benchmark/jsconfig.json +7 -0
  24. package/benchmark/lib/cbor.js +387 -0
  25. package/benchmark/lib/msgpack.js +651 -0
  26. package/benchmark/next.config.mjs +6 -0
  27. package/benchmark/package.json +22 -0
  28. package/benchmark/pages/_app.js +9 -0
  29. package/benchmark/pages/_document.js +13 -0
  30. package/benchmark/pages/api/hello.js +5 -0
  31. package/benchmark/pages/index.js +438 -0
  32. package/benchmark/public/favicon.ico +0 -0
  33. package/benchmark/public/file.svg +1 -0
  34. package/benchmark/public/globe.svg +1 -0
  35. package/benchmark/public/next.svg +1 -0
  36. package/benchmark/public/vercel.svg +1 -0
  37. package/benchmark/public/window.svg +1 -0
  38. package/benchmark/yarn.lock +2448 -0
  39. package/circom/collection/collection.circom +32 -0
  40. package/circom/collection/compile.sh +10 -0
  41. package/circom/collection/gen.js +34 -0
  42. package/circom/collection/generateInput.js +10 -0
  43. package/circom/collection/index.circom +4 -0
  44. package/circom/collection/test.js +21 -0
  45. package/circom/collection/verifier.sol +247 -0
  46. package/circom/db/compile.sh +10 -0
  47. package/circom/db/db.circom +39 -0
  48. package/circom/db/gen.js +30 -0
  49. package/circom/db/generateInput.js +10 -0
  50. package/circom/db/index.circom +4 -0
  51. package/circom/db/test.js +21 -0
  52. package/circom/db/verifier.sol +261 -0
  53. package/circom/ipfs/calculate_total.circom +17 -0
  54. package/circom/ipfs/compile.sh +10 -0
  55. package/circom/ipfs/gen.js +18 -0
  56. package/circom/ipfs/generateInput.js +10 -0
  57. package/circom/ipfs/index.circom +4 -0
  58. package/circom/ipfs/ipfs.circom +62 -0
  59. package/circom/ipfs/parse.circom +289 -0
  60. package/circom/ipfs/sha256.circom +99 -0
  61. package/circom/ipfs/test.js +167 -0
  62. package/circom/ipfs/verifier.sol +261 -0
  63. package/circom/json/compile.sh +10 -0
  64. package/circom/json/gen.js +22 -0
  65. package/circom/json/gen2.js +21 -0
  66. package/circom/json/generateInput.js +20 -0
  67. package/circom/json/index.circom +4 -0
  68. package/circom/json/json.circom +81 -0
  69. package/circom/json/test.js +100 -0
  70. package/circom/json/verifier.sol +247 -0
  71. package/circom/query/compile.sh +10 -0
  72. package/circom/query/gen.js +28 -0
  73. package/circom/query/generateInput.js +11 -0
  74. package/circom/query/index.circom +4 -0
  75. package/circom/query/query.circom +58 -0
  76. package/circom/query/test.js +20 -0
  77. package/circom/query/verifier.sol +177 -0
  78. package/circom/rollup/compile.sh +10 -0
  79. package/circom/rollup/gen.js +36 -0
  80. package/circom/rollup/generateInput.js +11 -0
  81. package/circom/rollup/index.circom +4 -0
  82. package/circom/rollup/rollup.circom +43 -0
  83. package/circom/rollup/test.js +35 -0
  84. package/circom/rollup/verifier.sol +240 -0
  85. package/circom/scripts/ceremony.js +39 -0
  86. package/circom/scripts/ceremony.sh +6 -0
  87. package/circom/scripts/compile.js +113 -0
  88. package/circom/scripts/compile.sh +16 -0
  89. package/circom/utils/uint.circom +512 -0
  90. package/circom/utils/utils.circom +628 -0
  91. package/demos/arweave/jsconfig.json +7 -0
  92. package/demos/arweave/lib/ZKArweave.json +617 -0
  93. package/demos/arweave/lib/encoder.js +375 -0
  94. package/demos/arweave/next.config.js +6 -0
  95. package/demos/arweave/package.json +26 -0
  96. package/demos/arweave/pages/_app.js +9 -0
  97. package/demos/arweave/pages/_document.js +19 -0
  98. package/demos/arweave/pages/api/arweave.js +31 -0
  99. package/demos/arweave/pages/api/hello.js +5 -0
  100. package/demos/arweave/pages/index.js +869 -0
  101. package/demos/arweave/public/circuit.wasm +0 -0
  102. package/demos/arweave/public/circuit_final.zkey +0 -0
  103. package/demos/arweave/public/verification_key.json +149 -0
  104. package/demos/arweave/vercel.json +7 -0
  105. package/demos/arweave/yarn.lock +2510 -0
  106. package/demos/simple/jsconfig.json +7 -0
  107. package/demos/simple/lib/encoder.js +375 -0
  108. package/demos/simple/next.config.js +6 -0
  109. package/demos/simple/package.json +24 -0
  110. package/demos/simple/pages/_app.js +9 -0
  111. package/demos/simple/pages/_document.js +13 -0
  112. package/demos/simple/pages/api/hello.js +5 -0
  113. package/demos/simple/pages/index.js +342 -0
  114. package/demos/simple/public/circuit.wasm +0 -0
  115. package/demos/simple/public/circuit_final.zkey +0 -0
  116. package/demos/simple/public/verification_key.json +149 -0
  117. package/demos/simple/yarn.lock +2519 -0
  118. package/docs/README.md +17 -0
  119. package/docs/simple-zkjson.md +210 -0
  120. package/docs/solidity-contracts.md +216 -0
  121. package/docs/zk-circuits.md +125 -0
  122. package/docs/zkdb-rollup.md +218 -0
  123. package/docs/zkjson-sdk.md +254 -0
  124. package/docs/zkjson-v1_5.md +365 -0
  125. package/package.json +16 -7
  126. package/{contracts → sdk/contracts}/NORollup.sol +0 -2
  127. package/sdk/package.json +15 -0
  128. package/sdk/yarn.lock +881 -0
  129. package/solidity/README.md +13 -0
  130. package/solidity/arguments.js +4 -0
  131. package/solidity/contracts/NORollup.sol +13 -0
  132. package/solidity/contracts/OPRollup.sol +14 -0
  133. package/solidity/contracts/ZKIPFS.sol +95 -0
  134. package/solidity/contracts/ZKJson.sol +21 -0
  135. package/solidity/contracts/ZKQuery.sol +286 -0
  136. package/solidity/contracts/ZKRollup.sol +35 -0
  137. package/solidity/contracts/apps/NORU.sol +66 -0
  138. package/solidity/contracts/apps/SimpleJSON.sol +64 -0
  139. package/solidity/contracts/apps/SimpleOPRU.sol +67 -0
  140. package/solidity/contracts/apps/SimpleRU.sol +67 -0
  141. package/solidity/contracts/apps/Token.sol +12 -0
  142. package/solidity/contracts/apps/ZKArweave.sol +89 -0
  143. package/solidity/contracts/apps/ZKBridge.sol +74 -0
  144. package/solidity/contracts/apps/ZKNFT.sol +63 -0
  145. package/solidity/contracts/verifiers/verifier_db.sol +275 -0
  146. package/solidity/contracts/verifiers/verifier_ipfs.sol +464 -0
  147. package/solidity/contracts/verifiers/verifier_json.sol +261 -0
  148. package/solidity/contracts/verifiers/verifier_rollup.sol +240 -0
  149. package/solidity/package.json +27 -0
  150. package/solidity/scripts/deploy.js +33 -0
  151. package/solidity/test/NORU.js +66 -0
  152. package/solidity/test/ZKArweave.js +97 -0
  153. package/solidity/test/arweave.js +55 -0
  154. package/solidity/test/bridge.js +71 -0
  155. package/solidity/test/simple.js +76 -0
  156. package/solidity/test/simpleOPRU.js +98 -0
  157. package/solidity/test/simpleRU.js +94 -0
  158. package/solidity/test/zknft.js +98 -0
  159. package/solidity/yarn.lock +4152 -0
  160. package/test/test.js +304 -0
  161. /package/{circomlibjs.js → sdk/circomlibjs.js} +0 -0
  162. /package/{collection.js → sdk/collection.js} +0 -0
  163. /package/{contracts → sdk/contracts}/OPRollup.sol +0 -0
  164. /package/{contracts → sdk/contracts}/ZKIPFS.sol +0 -0
  165. /package/{contracts → sdk/contracts}/ZKJson.sol +0 -0
  166. /package/{contracts → sdk/contracts}/ZKQuery.sol +0 -0
  167. /package/{contracts → sdk/contracts}/ZKRollup.sol +0 -0
  168. /package/{contracts → sdk/contracts}/apps/SimpleJSON.sol +0 -0
  169. /package/{contracts → sdk/contracts}/apps/SimpleOPRU.sol +0 -0
  170. /package/{contracts → sdk/contracts}/apps/SimpleRU.sol +0 -0
  171. /package/{contracts → sdk/contracts}/apps/Token.sol +0 -0
  172. /package/{contracts → sdk/contracts}/apps/ZKArweave.sol +0 -0
  173. /package/{contracts → sdk/contracts}/apps/ZKBridge.sol +0 -0
  174. /package/{contracts → sdk/contracts}/apps/ZKNFT.sol +0 -0
  175. /package/{contracts → sdk/contracts}/verifiers/verifier_db.sol +0 -0
  176. /package/{contracts → sdk/contracts}/verifiers/verifier_ipfs.sol +0 -0
  177. /package/{contracts → sdk/contracts}/verifiers/verifier_json.sol +0 -0
  178. /package/{contracts → sdk/contracts}/verifiers/verifier_rollup.sol +0 -0
  179. /package/{db.js → sdk/db.js} +0 -0
  180. /package/{doc.js → sdk/doc.js} +0 -0
  181. /package/{encoder-v1_5.js → sdk/encoder-v1_5.js} +0 -0
  182. /package/{encoder.js → sdk/encoder.js} +0 -0
  183. /package/{index.js → sdk/index.js} +0 -0
  184. /package/{json.js → sdk/json.js} +0 -0
  185. /package/{nft.js → sdk/nft.js} +0 -0
  186. /package/{parse.js → sdk/parse.js} +0 -0
  187. /package/{uint.js → sdk/uint.js} +0 -0
@@ -0,0 +1,512 @@
1
+ pragma circom 2.1.5;
2
+
3
+ function digits2(x) {
4
+ if (x == 0) return 1;
5
+ var p = 0;
6
+ while (x > 0) {
7
+ x = x \ 10;
8
+ p++;
9
+ }
10
+ return p;
11
+ }
12
+
13
+
14
+ function next(json, c) {
15
+ if (c[5] == 1) {
16
+ return [0, c[1], 0, 0, 0, 1, c[6], c[7], c[8]];
17
+ }
18
+ var prev = 0;
19
+ for (var j = c[2]; j < c[1]; j++) {
20
+ var d = digits2(json[j]);
21
+ if (json[j] > 0) {
22
+ var p = c[4] == 0 ? digits2(json[j]) : c[4];
23
+ var x = c[4] == 0 ? json[j] : c[3];
24
+ var cur = 0;
25
+ var num = 0;
26
+ var on = c[4] == 0 ? 0 : c[7];
27
+ var len = c[4] == 0 ? 0 : c[8];
28
+ while (p > 0) {
29
+ var n = x \ 10 ** (p - 1);
30
+ if (on == 0) {
31
+ on = 1;
32
+ } else if (on == 1) {
33
+ if (n == 0) {
34
+ on = 4;
35
+ } else {
36
+ if (n == 9) {
37
+ len = 8;
38
+ on = 3;
39
+ } else {
40
+ on = 2;
41
+ len = n;
42
+ }
43
+ cur = 0;
44
+ }
45
+ } else if (on == 4) {
46
+ on = 5;
47
+ len = n;
48
+ } else {
49
+ num += n * 10 ** (len - cur - 1);
50
+ cur++;
51
+ if (on == 5) {
52
+ num = n;
53
+ len--;
54
+ x -= 10 ** (p - 1) * n;
55
+ p--;
56
+ var done = 0;
57
+ if (p == 0) {
58
+ j++;
59
+ if (c[1] == j || json[j] == 0) {
60
+ x = 0;
61
+ done = 1;
62
+ } else {
63
+ x = json[j];
64
+ }
65
+ }
66
+ if (len == 0) on = 1;
67
+ return [num, c[1], j, x, p, done, c[6], on, len];
68
+ } else if (cur == len) {
69
+ prev *= 10 ** len;
70
+ if (on == 3) {
71
+ prev += num;
72
+ } else {
73
+ num += prev;
74
+ x -= 10 ** (p - 1) * n;
75
+ p--;
76
+ var done = 0;
77
+ if (p == 0) {
78
+ j++;
79
+ if (c[1] == j || json[j] == 0) {
80
+ x = 0;
81
+ done = 1;
82
+ } else {
83
+ x = json[j];
84
+ }
85
+ }
86
+ return [num, c[1], j, x, p, done, c[6], 1, len];
87
+ }
88
+ cur = 0;
89
+ on = 1;
90
+ len = 0;
91
+ num = 0;
92
+ }
93
+ }
94
+ x -= 10 ** (p - 1) * n;
95
+ p--;
96
+ }
97
+ } else {
98
+ return [0, c[1], 0, 0, 0, 1, c[6], 0, 0];
99
+ }
100
+ }
101
+ return [0, c[1], 0, 0, 0, 1, c[6], 0, 0];
102
+ }
103
+
104
+ function get(json, size, index) {
105
+ var c[9] = [0, size, 0, 0, 0, 0, 0, 0, 0];
106
+ var i = 0;
107
+ while (c[5] == 0) {
108
+ c = next(json, c);
109
+ if (i == index) return c[0];
110
+ i++;
111
+ }
112
+ return c[100];
113
+ }
114
+
115
+ function length(json, size) {
116
+ var _len = 0;
117
+ var c[9] = [0, size, 0, 0, 0, 0, 0, 0, 0];
118
+ while (c[5] == 0) {
119
+ c = next(json, c);
120
+ _len++;
121
+ }
122
+ if (json[0] != 0) {
123
+ return _len;
124
+ } else {
125
+ return 0;
126
+ }
127
+ }
128
+
129
+ function sum(json, size, digit, start, end) {
130
+ var c[9] = [0, size, 0, 0, 0, 0, 0, 0, 0];
131
+ var _sum = 0;
132
+ var i = 0;
133
+ while (c[5] == 0) {
134
+ c = next(json, c);
135
+ if (i >= start && i < end) _sum += c[0];
136
+ i++;
137
+ }
138
+ return _sum;
139
+ }
140
+
141
+ function mul(json, size, digit, start, end) {
142
+ var c[9] = [0, size, 0, 0, 0, 0, 0, 0, 0];
143
+ var _mul = 0;
144
+ var i = 0;
145
+ while (c[5] == 0) {
146
+ c = next(json, c);
147
+ if (i >= start && i < end) _mul *= c[0];
148
+ i++;
149
+ }
150
+ return _mul;
151
+ }
152
+
153
+ function push(json, size, digit, c) {
154
+ var overflow = 8;
155
+ var i4 = 0;
156
+ for (var i = i4; i < size; i++) {
157
+ if (json[i] != 0) i4 = i;
158
+ }
159
+ var init = 0;
160
+ while (c > 0 || init == 0) {
161
+ init = 1;
162
+ var len = digits2(c);
163
+ var _len = len;
164
+ var _len2 = len;
165
+ var _c = c;
166
+ if (overflow < len) {
167
+ _len = overflow;
168
+ _len2 = overflow + 1;
169
+ _c = c \ 10 ** (len - overflow);
170
+ c -= _c * 10 ** (len - overflow);
171
+ } else {
172
+ c = 0;
173
+ }
174
+ var appended = 0;
175
+ for (var i = i4; i < size; i++) {
176
+ var d = digits2(json[i]);
177
+ var one = 0;
178
+ var ones = 0;
179
+ var nums = 0;
180
+ if (_len == 1 && digit > d) {
181
+ var x = json[i] - 10 ** (d - 1);
182
+ var i2 = 1;
183
+ while (i2 < d) {
184
+ var len = x \ 10 ** (d - i2 - 1);
185
+ x = x - len * 10 ** (d - i2 - 1);
186
+ if (len == 1) {
187
+ if (ones == 0) one = i2;
188
+ ones++;
189
+ } else if (len != 0) {
190
+ ones = 0;
191
+ nums = 0;
192
+ } else {
193
+ one = i2;
194
+ }
195
+ i2++;
196
+ if (len == 0) {
197
+ var len3 = x \ 10 ** (d - i2 - 1);
198
+ x = x - len3 * 10 ** (d - i2 - 1);
199
+ i2++;
200
+ ones = len3;
201
+ for (var i3 = 0; i3 < len3; i3++) {
202
+ var len2 = x \ 10 ** (d - i2 - 1);
203
+ x = x - len2 * 10 ** (d - i2 - 1);
204
+ nums = nums * 10 + len2;
205
+ i2++;
206
+ }
207
+ } else {
208
+ for (var i3 = 0; i3 < len; i3++) {
209
+ var len2 = x \ 10 ** (d - i2 - 1);
210
+ x = x - len2 * 10 ** (d - i2 - 1);
211
+ if (len == 1) nums = nums * 10 + len2;
212
+ i2++;
213
+ }
214
+ }
215
+ }
216
+ if (ones == 2) nums = nums * 10 + _c;
217
+ }
218
+ if (ones > 2 && ones < 9) {
219
+ var x = json[i] \ 10 ** (d - one - 1);
220
+ x = x * 10 + ones + 1;
221
+ x = x * 10 ** ones + nums;
222
+ x = x * 10 + _c;
223
+ json[i] = x;
224
+ i4 = i;
225
+ appended = 1;
226
+ } else if (ones == 2) {
227
+ var x = json[i] \ 10 ** (d - one);
228
+ x = x * 10 + 0;
229
+ x = x * 10 + ones + 1;
230
+ x = x * 10 ** (ones + 1) + nums;
231
+ json[i] = x;
232
+ i4 = i;
233
+ appended = 1;
234
+ } else if (digit > d + _len && appended == 0) {
235
+ if (json[i] == 0) json[i] = 1;
236
+ json[i] = json[i] * 10 + _len2;
237
+ json[i] = json[i] * 10 ** _len + _c;
238
+ i4 = i;
239
+ appended = 1;
240
+ }
241
+ }
242
+ }
243
+ return json;
244
+ }
245
+
246
+ function insert(json, size, digit, at, val, _arr) {
247
+ var c[9] = [0, size, 0, 0, 0, 0, 0, 0, 0];
248
+ var i = 0;
249
+ if (at == 0) {
250
+ _arr = push(_arr, size, digit, val);
251
+ }
252
+ while (c[5] == 0) {
253
+ c = next(json, c);
254
+ _arr = push(_arr, size, digit, c[0]);
255
+ i++;
256
+ if (at == i){
257
+ _arr = push(_arr, size, digit, val);
258
+ }
259
+ }
260
+ return _arr;
261
+ }
262
+
263
+ function arrPush(json, size, digit, index, val, _arr) {
264
+ var len = get(json, size, 0);
265
+ var _sum = sum(json, size, digit, 1, index + 2);
266
+ var at = _sum + 1 + len;
267
+ json = insert(json, size, digit, at, val, _arr);
268
+ var alen = get(json, size, index + 1);
269
+ json = replace(json, size, digit, index + 1, alen + 1, _arr);
270
+ return json;
271
+ }
272
+
273
+ function arrGet(json, size, digit, index, index2) {
274
+ var len = get(json, size, 0);
275
+ var _sum = sum(json, size, digit, 1, index + 1);
276
+ var at = _sum + 1 + len + index2;
277
+ return get(json, size, at);
278
+ }
279
+
280
+ function replace(json, size, digit, at, val, _arr) {
281
+ var c[9] = [0, size, 0, 0, 0, 0, 0, 0, 0];
282
+ var i = 0;
283
+ while (c[5] == 0) {
284
+ c = next(json, c);
285
+ if (at == i) {
286
+ _arr = push(_arr, size, digit, val);
287
+ } else {
288
+ _arr = push(_arr, size, digit, c[0]);
289
+ }
290
+ i++;
291
+ }
292
+ return _arr;
293
+ }
294
+
295
+ function pushArray(json, size, digit, _arr, asize, _arr2) {
296
+ var jlen = length(json, size);
297
+ var alen = 0;
298
+ if (jlen == 0) {
299
+ json = push(json, size, digit, 1);
300
+ } else {
301
+ alen = get(json, size, 0);
302
+ json = replace(json, size, digit, 0, alen + 1, _arr2);
303
+ }
304
+ var len = length(_arr, size);
305
+ json = insert(json, size, digit, alen + 1, len, _arr2);
306
+ var c[9] = [0, asize, 0, 0, 0, 0, 0, 0, 0];
307
+ while (c[5] == 0) {
308
+ c = next(_arr, c);
309
+ json = push(json, size, digit, c[0]);
310
+ }
311
+ return json;
312
+ }
313
+
314
+ function remove(json, size, digit, start, end, _arr) {
315
+ var c[9] = [0, size, 0, 0, 0, 0, 0, 0, 0];
316
+ var i = 0;
317
+ while (c[5] == 0) {
318
+ c = next(json, c);
319
+ if (i < start || i >= end) {
320
+ _arr = push(_arr, size, digit, c[0]);
321
+ }
322
+ i++;
323
+ }
324
+ return _arr;
325
+ }
326
+
327
+ function popArray(json, size, digit, _arr) {
328
+ var jlen = length(json, size);
329
+ var alen = 0;
330
+ if (jlen == 0) {
331
+ //throw Error()
332
+ } else {
333
+ alen = get(json, size, 0);
334
+ }
335
+ //if (alen == 1) return [];
336
+ var len = get(json, size, alen);
337
+ json = replace(json, size, digit, 0, alen - 1, _arr);
338
+ var _sum = sum(json, size, digit, 1, alen);
339
+ var start = alen + 1 + _sum;
340
+ var end = start + len + 1;
341
+ json = remove(json, size, digit, start, end, _arr);
342
+ json = remove(json, size, digit, alen, alen + 1, _arr);
343
+ return json;
344
+ }
345
+
346
+ function slice(json, size, digit, start, end, _arr) {
347
+ var c[9] = [0, size, 0, 0, 0, 0, 0, 0, 0];
348
+ var i = 0;
349
+ while (c[5] == 0) {
350
+ c = next(json, c);
351
+ if (i >= start && i < end) _arr = push(_arr, size, digit, c[0]);
352
+ i++;
353
+ }
354
+ return _arr;
355
+ }
356
+
357
+ function last(json, size) {
358
+ var val = 0;
359
+ var c[9] = [0, size, 0, 0, 0, 0, 0, 0, 0];
360
+ while (c[5] == 0) {
361
+ c = next(json, c);
362
+ val = c[0];
363
+ }
364
+ return val;
365
+ }
366
+
367
+ function lastRow(json, size) {
368
+ var v = 0;
369
+ for (var j = 0; j < size; j++) {
370
+ if (json[j] != 0) v = j;
371
+ }
372
+ return v;
373
+ }
374
+
375
+ function shift(json, size, digit, _arr) {
376
+ var c[9] = [0, size, 0, 0, 0, 0, 0, 0, 0];
377
+ var i = 0;
378
+ while (c[5] == 0) {
379
+ c = next(json, c);
380
+ if (i > 0) _arr = push(_arr, size, digit, c[0]);
381
+ i++;
382
+ }
383
+ return _arr;
384
+ }
385
+
386
+ function unshift(json, size, digit, num, _arr) {
387
+ _arr = push(_arr, size, digit, num);
388
+ var c[9] = [0, size, 0, 0, 0, 0, 0, 0, 0];
389
+ var i = 0;
390
+ if (json[0] != 0) {
391
+ while (c[5] == 0) {
392
+ c = next(json, c);
393
+ _arr = push(_arr, size, digit, c[0]);
394
+ i++;
395
+ }
396
+ }
397
+ return _arr;
398
+ }
399
+
400
+ function concat(json, json2, size, digit) {
401
+ var c[9] = [0, size, 0, 0, 0, 0, 0, 0, 0];
402
+ var i = 0;
403
+ if (json2[0] != 0) {
404
+ while (c[5] == 0) {
405
+ c = next(json2, c);
406
+ json = push(json, size, digit, c[0]);
407
+ i++;
408
+ }
409
+ }
410
+ return json;
411
+ }
412
+
413
+ function pop(json, size) {
414
+ var overflow = 8;
415
+ var l = 0;
416
+ var ll = 0;
417
+ var lnum = 0;
418
+ var series = 0;
419
+ var snum = 0;
420
+ var link = 0;
421
+ var _l = 0;
422
+ var _d = 0;
423
+ for (var l2 = 0; l2 < size; l2++) {
424
+ if (json[l2] != 0) {
425
+ _l = l2;
426
+ var x = json[l2];
427
+ var d = digits2(x);
428
+ var p = d;
429
+ var on = 0;
430
+ var i = 0;
431
+ while (x > 0) {
432
+ var n = x \ 10 ** (p - 1);
433
+ x -= 10 ** (p - 1) * n;
434
+ p--;
435
+ i++;
436
+ if (on == 0) {
437
+ on = 1;
438
+ } else {
439
+ var len = n;
440
+ if (link == 0) {
441
+ ll = i - 1;
442
+ l = l2;
443
+ _d = d;
444
+ }
445
+ lnum = len;
446
+ snum = 0;
447
+ if (len == 0) {
448
+ var n = x \ 10 ** (p - 1);
449
+ var len2 = x \ 10 ** (p - 1);
450
+ series = len2;
451
+ x -= 10 ** (p - 1) * n;
452
+ p--;
453
+ i++;
454
+ for (var i2 = 0; i2 < len2; i2++) {
455
+ var n = x \ 10 ** (p - 1);
456
+ snum = snum * 10 + n;
457
+ x -= 10 ** (p - 1) * n;
458
+ p--;
459
+ i++;
460
+ }
461
+ } else {
462
+ var _len = len;
463
+ if (len == overflow + 1) {
464
+ link = 2;
465
+ _len = overflow;
466
+ } else if (link > 0) {
467
+ link--;
468
+ }
469
+ series = 0;
470
+ for (var i2 = 0; i2 < _len; i2++) {
471
+ var n = x \ 10 ** (p - 1);
472
+ x -= 10 ** (p - 1) * n;
473
+ p--;
474
+ i++;
475
+ }
476
+ }
477
+ }
478
+ }
479
+ }
480
+ }
481
+
482
+ if (link == 1) {
483
+ for (var i = l + 1; i <= _l; i++) {
484
+ json[i] = 0;
485
+ }
486
+ if (ll < 2) {
487
+ json[l] = 0;
488
+ } else {
489
+ json[l] = json[l] \ 10 ** (_d - ll);
490
+ }
491
+ } else if (series != 0) {
492
+ if (series == 3) {
493
+ json[l] = json[l] \ 10 ** (_d - ll);
494
+ json[l] = json[l] * 10 + 1;
495
+ var n = snum \ 10 ** 2;
496
+ json[l] = json[l] * 10 + n;
497
+ json[l] = json[l] * 10 + 1;
498
+ var n2 = (snum \ 10) - n * 10;
499
+ json[l] = json[l] * 10 + n2;
500
+ } else {
501
+ json[l] = json[l] \ 10 ** (_d - ll - 1);
502
+ json[l] = json[l] * 10 + (series - 1);
503
+ snum = snum \ 10;
504
+ json[l] = json[l] * 10 ** (series - 1) + snum;
505
+ }
506
+ } else if (ll < 2) {
507
+ json[l] = 0;
508
+ } else {
509
+ json[l] = json[l] \ 10 ** (_d - ll);
510
+ }
511
+ return json;
512
+ }