khulnasoft commited on
Commit
3591e57
1 Parent(s): c6795cd

Create cvss.js

Browse files
Files changed (1) hide show
  1. cvss.js +608 -0
cvss.js ADDED
@@ -0,0 +1,608 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // work in progress
2
+
3
+ vectorMap4 = {
4
+ "attackVector": "AV",
5
+ "attackComplexity": "AC",
6
+ "attackRequirements": "AT",
7
+ "privilegesRequired": "PR",
8
+ "userInteraction": "UI",
9
+ "vulnConfidentialityImpact": "VC",
10
+ "vulnIntegrityImpact": "VI",
11
+ "vulnAvailabilityImpact": "VA",
12
+ "subConfidentialityImpact": "SC",
13
+ "subIntegrityImpact": "SI",
14
+ "subAvailabilityImpact": "SA",
15
+ "Safety": "S",
16
+ "Automatable": "AU",
17
+ "Recovery": "R",
18
+ "valueDensity": "V",
19
+ "vulnerabilityResponseEffort": "RE",
20
+ "providerUrgency": "U",
21
+ "exploitMaturity": "E"
22
+ };
23
+
24
+ function invertObject(obj) {
25
+ const inverted = {};
26
+ for (const key in obj) {
27
+ inverted[obj[key]] = key;
28
+ }
29
+ return inverted;
30
+ }
31
+
32
+
33
+ var metricMap4 = invertObject(vectorMap4);
34
+
35
+ var valueMap = {
36
+ "UNDEFINED": "X",
37
+ "GREEN": "Green",
38
+ "RED": "Red",
39
+ "CLEAR": "Clear",
40
+ "AMBER": "Amber"
41
+ };
42
+
43
+ function vector(cv){
44
+ var v = "CVSS:4.0";
45
+ for(const key in metricMap4) {
46
+ if(cv[key])
47
+ v = v + '/' + key + ':' + cv[key]
48
+ }
49
+ return v;
50
+ }
51
+
52
+ function vectorize(c) {
53
+ var cv = {};
54
+ for(const key in c){
55
+ var m = vectorMap4[key];
56
+ var v = undefined;
57
+ console.log(key +'='+ c[key])
58
+ if(m && c[key]) {
59
+ v = valueMap[c[key]] || c[key].charAt(0);
60
+ }
61
+ if(v) {
62
+ cv[m]=v;
63
+ }
64
+ }
65
+ return cv;
66
+ }
67
+
68
+ function vectorizeString(s) {
69
+ var cv = {};
70
+ var metrics = s.split("/");
71
+ for(index in metrics) {
72
+ var [key, value] = metrics[index].split(":");
73
+ cv[key] = value;
74
+ }
75
+ return cv;
76
+ }
77
+
78
+ function macroVector(cvss) {
79
+ var c = vectorize(cvss);
80
+
81
+ var N='N', P='P', X='X', H='H', L='L', R='R', S = 'S';
82
+
83
+ var av = c.AV,
84
+ ac = c.AC,
85
+ ui = c.UI,
86
+ at = c.AT,
87
+ pr = c.PR,
88
+ vc = c.VC,
89
+ va = c.VA,
90
+ vi = c.VI,
91
+ sc = c.SC,
92
+ si = c.SI,
93
+ sa = c.SA,
94
+ e = e,
95
+ cr = c.CR,
96
+ ir = c.IR,
97
+ ar = c.AR,
98
+ msi = c.MSI,
99
+ msa = c.MSA
100
+ ;
101
+
102
+ if([vc, vi, va, sc, si, sa].every((met) => met == N)) {
103
+ return 0;
104
+ }
105
+
106
+
107
+ // Compute EQs
108
+ // => EQ1 - Table 25
109
+ var eq = [];
110
+ eq[1] = 0;
111
+ if(av == N && pr == N && ui == N) {
112
+ eq[1] = 0
113
+ } else if ((av == N || pr == N || ui == N) && !(av == N && pr == N && ui == N) && !(av == P)) {
114
+ eq[1] = 1
115
+ } else if (av == P || !(av == N || pr == N || ui == N)) {
116
+ eq[1] = 2
117
+ } else {
118
+ console.log("EQ1 invalid CVSS configuration: AV:%s/PR:%s/UI:%s\n", av, pr, ui);
119
+ return undefined;
120
+ }
121
+ // => EQ2 - Table 26
122
+ eq[2] = 0
123
+ if (ac == L && at == N) {
124
+ eq[2] = 0
125
+ } else if (!(ac == L && at == N)) {
126
+ eq[2] = 1
127
+ } else {
128
+ console.log("EQ2 invalid CVSS configuration: AC:%s/AT:%s\n", ac, at)
129
+ return undefined;
130
+ }
131
+ // => EQ3 - Table 27
132
+ eq[3] = 0;
133
+ if(vc == H && vi == H){
134
+ eq[3] = 0
135
+ } else if (!(vc == H && vi == H) && (vc == H || vi == H || va == H)) {
136
+ eq[3] = 1
137
+ } else if (!(vc == H || vi == H || va == H)) {
138
+ eq[3] = 2
139
+ } else {
140
+ console.log("EQ3 invalid CVSS configuration: VC:%s/VI:%s/VA:%s\n", vc, vi, va)
141
+ return undefined;
142
+
143
+ }
144
+ // => EQ4 - Table 28
145
+ eq[4] = 0
146
+ if (msi == S || msa == S) {
147
+ eq[4] = 0
148
+ } else if (!(msi == S && msa == S) && (sc == H || si == H || sa == H)) {
149
+ eq[4] = 1
150
+ } else if (!(msi == S && msa == S) && !(sc == H || si == H || sa == H)) {
151
+ eq[4] = 2
152
+ } else {
153
+ console.log("EQ4 invalid CVSS configuration: MSI:%s/MSA:%s/SC:%s/SI:%s/SA:%s\n", msi, msa, cvss40.get("SC"), cvss40.get("SI"), cvss40.get("SA"))
154
+ return undefined;
155
+ }
156
+ // => EQ5 - Table 29
157
+ eq[5] = 0
158
+ if (e == "A" || e == X || e == undefined) {
159
+ eq[5] = 0
160
+ } else if (e == "P") {
161
+ eq[5] = 1
162
+ } else if (e == "U") {
163
+ eq[5] = 2
164
+ } else {
165
+ console.log("EQ5 invalid CVSS configuration: E:%s\n", e)
166
+ return undefined;
167
+ }
168
+ // => EQ6 - Table 30
169
+ eq[6] = 0
170
+ if (av == N && pr == N && ui == N) {
171
+ eq[6] = 0
172
+ } else if ((cr == H && vc == H) || (c.IR == H && vi == H) || (c.AR == H && va == H) ){
173
+ eq[6] = 1
174
+ } else {
175
+ console.log("EQ6 invalid CVSS configuration: AV:%s/PR:%s/UI:%s/CR:%s/VC:%s/IR:%s/VI:%s/AR:%s/VA:%s\n", av, pr, ui, cr, vc, c.IR, vi)
176
+ return undefined;
177
+
178
+ }
179
+ // => EQ3+EQ6 - Table 31
180
+ eq[7]= 0
181
+ if (vc == H && vi == H && (cr == H || ir == H || (ar == H && va == H))) {
182
+ eq[7] = '00';
183
+ } else if (vc == H && vi == H && !(cr == H || ir == H) && !(ar == H && va == H)) {
184
+ eq[7] = '01';
185
+ } else if (!(vc == H && vi == H) && (vc == H || vi == H || va == H) && (cr == H && vc == H) || (ir == H && vi == H) || (ar == H && va == H)) {
186
+ eq[7] = 10;
187
+ } else if (!(vc == H && vi == H) && (vc == H || vi == H || va == H) && !(cr == H && vc == H) && !(ir == H && vi == H) && !(ar == H && va == H)) {
188
+ eq[7] = 11;
189
+ } else if (!(vc == H || vi == H || va == H) && (cr == H && vc == H) || (ir == H && vi == H) || (ar == H && va == H)){
190
+ eq[7] = 20;
191
+ } else if (!(vc == H || vi == H || va == H) && !(cr == H && vc == H) && !(ir == H && vi == H) && !(ar == H && va == H)) {
192
+ eq[7] = 21;
193
+ } else {
194
+ console.log("EQ36 invalid CVSS configuration: CR:%s/VC:%s/IR:%s/VI:%s/AR:%s/VA:%s\n", cr, vc, ir, vi, ar, va)
195
+ return undefined;
196
+ }
197
+ var current = eq;
198
+ var diff = [];
199
+ var currentScore = lookup(eq);
200
+ for(const eqSet = 1; eqSet < 7; eqSet++) {
201
+ var lowSet = Array.from(originalArray);
202
+ lowSet[eqSet] = lowSet[eqSet]+1;
203
+ var lowScore = lookup(lowSet);
204
+ var maxDiff = currentScore - lowScore;
205
+ var mV = maxVectors(eqSet);
206
+ var hammingDistance = 0;
207
+ for(const m in mV) {
208
+ var hd = getHammingDistance(c, vectorizeString(m));
209
+ if(hd > hammingDistance) {
210
+ hammingDistance = hd;
211
+ }
212
+ }
213
+ var prop = hammingDistance/depth;
214
+ diff[eqSet] = maxDiff * prop;
215
+ }
216
+ }
217
+
218
+ function getHammingDistance(a, b) {
219
+ var dist = {};
220
+ for(const key in a) {
221
+ dist[key] = levels[key][a[key]] - levels[key][b[key]];
222
+ }
223
+ if(a.MSI == 'S') {
224
+ dist.SI = levels.SI['S'] - levels.SI[b.SI]
225
+ }
226
+ if(a.MSA == 'S') {
227
+ dist.SI = levels.SA['S'] - levels.SA[b.SA]
228
+ }
229
+ var ret = 0;
230
+ for(const key in dist) {
231
+ ret = ret + Math.abs(dist[key]);
232
+ }
233
+ return ret;
234
+ }
235
+
236
+ const maxHamming = {
237
+ "eq1" : {
238
+ "0" : 1,
239
+ "1" : 4,
240
+ "2" : 5
241
+ },
242
+ "eq2" : {
243
+ "0" : 1,
244
+ "1" : 2
245
+ },
246
+ "eq3" : {
247
+ "00": 7,
248
+ "01": 6,
249
+ "10": 8,
250
+ "11": 8,
251
+ "21": 10
252
+ },
253
+ "eq4" : {
254
+ "0" : 6,
255
+ "1" : 5,
256
+ "2" : 4
257
+
258
+ },
259
+ "eq5" : {
260
+ "0" : 1,
261
+ "1" : 1,
262
+ "2" : 1
263
+ },
264
+ }
265
+
266
+ function maxVectors(eqSet, eqVal) {
267
+ return maxComposed[eqSet-1][eqVal];
268
+ }
269
+
270
+ const maxComposed = [
271
+ {
272
+ "0": ["AV:N/PR:N/UI:N/"],
273
+ "1" : ["AV:A/PR:N/UI:N/","AV:N/PR:L/UI:N/","AV:N/PR:N/UI:P/"],
274
+ "2": ["AV:P/PR:N/UI:N/","AV:A/PR:L/UI:P/"]
275
+ },
276
+ {
277
+ "0" : ["AC:L/AT:N/"],
278
+ "1" : ["AC:H/AT:N/","AC:L/AT:P/"]
279
+ },
280
+ {
281
+ "00": ["VC:H/VI:H/VA:H/CR:H/IR:H/AR:H/"],
282
+ "01": ["VC:H/VI:H/VA:L/CR:M/IR:M/AR:H/","VC:H/VI:H/VA:H/CR:M/IR:M/AR:M/"],
283
+ "10": ["VC:L/VI:H/VA:H/CR:H/IR:H/AR:H/","VC:H/VI:L/VA:H/CR:H/IR:H/AR:H/"],
284
+ "11": ["VC:L/VI:H/VA:L/CR:H/IR:M/AR:H/","VC:L/VI:H/VA:H/CR:H/IR:M/AR:M/","VC:H/VI:L/VA:H/CR:M/IR:H/AR:M/","VC:H/VI:L/VA:L/CR:M/IR:H/AR:H/","VC:L/VI:L/VA:H/CR:H/IR:H/AR:M/"],
285
+ "21": ["VC:L/VI:L/VA:L/CR:H/IR:H/AR:H/"]
286
+ },
287
+ {
288
+ "0" : ["SC:H/SI:S/SA:S/"],
289
+ "1" : ["SC:H/SI:H/SA:H/"],
290
+ "2" : ["SC:L/SI:L/SA:L/"]
291
+
292
+ },
293
+ {
294
+ "0" : ["E:A/"],
295
+ "1" : ["E:P/"],
296
+ "2" : ["E:U/"],
297
+ },
298
+ ]
299
+
300
+ function lookup(m) {
301
+ var score = lookuptable[m.join('');
302
+ return score;
303
+ }
304
+
305
+ const lookuptable = {
306
+ "000000": 10,
307
+ "000001": 9.9,
308
+ "000010": 9.8,
309
+ "000011": 9.5,
310
+ "000020": 9.5,
311
+ "000021": 9.2,
312
+ "000100": 10,
313
+ "000101": 9.6,
314
+ "000110": 9.3,
315
+ "000111": 8.7,
316
+ "000120": 9.1,
317
+ "000121": 8.1,
318
+ "000200": 9.3,
319
+ "000201": 9,
320
+ "000210": 8.9,
321
+ "000211": 8,
322
+ "000220": 8.1,
323
+ "000221": 6.8,
324
+ "001000": 9.8,
325
+ "001001": 9.5,
326
+ "001010": 9.5,
327
+ "001011": 9.2,
328
+ "001020": 9,
329
+ "001021": 8.4,
330
+ "001100": 9.3,
331
+ "001101": 9.2,
332
+ "001110": 8.9,
333
+ "001111": 8.1,
334
+ "001120": 8.1,
335
+ "001121": 6.5,
336
+ "001200": 8.8,
337
+ "001201": 8,
338
+ "001210": 7.8,
339
+ "001211": 7,
340
+ "001220": 6.9,
341
+ "001221": 4.8,
342
+ "002001": 9.2,
343
+ "002011": 8.2,
344
+ "002021": 7.2,
345
+ "002101": 7.9,
346
+ "002111": 6.9,
347
+ "002121": 5,
348
+ "002201": 6.9,
349
+ "002211": 5.5,
350
+ "002221": 2.7,
351
+ "010000": 9.9,
352
+ "010001": 9.7,
353
+ "010010": 9.5,
354
+ "010011": 9.2,
355
+ "010020": 9.2,
356
+ "010021": 8.5,
357
+ "010100": 9.5,
358
+ "010101": 9.1,
359
+ "010110": 9,
360
+ "010111": 8.3,
361
+ "010120": 8.4,
362
+ "010121": 7.1,
363
+ "010200": 9.2,
364
+ "010201": 8.1,
365
+ "010210": 8.2,
366
+ "010211": 7.1,
367
+ "010220": 7.2,
368
+ "010221": 5.3,
369
+ "011000": 9.5,
370
+ "011001": 9.3,
371
+ "011010": 9.2,
372
+ "011011": 8.5,
373
+ "011020": 8.5,
374
+ "011021": 7.3,
375
+ "011100": 9.2,
376
+ "011101": 8.2,
377
+ "011110": 8,
378
+ "011111": 7.2,
379
+ "011120": 7,
380
+ "011121": 5.9,
381
+ "011200": 8.4,
382
+ "011201": 7,
383
+ "011210": 7.1,
384
+ "011211": 5.2,
385
+ "011220": 5,
386
+ "011221": 3,
387
+ "012001": 8.6,
388
+ "012011": 7.5,
389
+ "012021": 5.2,
390
+ "012101": 7.1,
391
+ "012111": 5.2,
392
+ "012121": 2.9,
393
+ "012201": 6.3,
394
+ "012211": 2.9,
395
+ "012221": 1.7,
396
+ "100000": 9.8,
397
+ "100001": 9.5,
398
+ "100010": 9.4,
399
+ "100011": 8.7,
400
+ "100020": 9.1,
401
+ "100021": 8.1,
402
+ "100100": 9.4,
403
+ "100101": 8.9,
404
+ "100110": 8.6,
405
+ "100111": 7.4,
406
+ "100120": 7.7,
407
+ "100121": 6.4,
408
+ "100200": 8.7,
409
+ "100201": 7.5,
410
+ "100210": 7.4,
411
+ "100211": 6.3,
412
+ "100220": 6.3,
413
+ "100221": 4.9,
414
+ "101000": 9.4,
415
+ "101001": 8.9,
416
+ "101010": 8.8,
417
+ "101011": 7.7,
418
+ "101020": 7.6,
419
+ "101021": 6.7,
420
+ "101100": 8.6,
421
+ "101101": 7.6,
422
+ "101110": 7.4,
423
+ "101111": 5.8,
424
+ "101120": 5.9,
425
+ "101121": 5,
426
+ "101200": 7.2,
427
+ "101201": 5.7,
428
+ "101210": 5.7,
429
+ "101211": 5.2,
430
+ "101220": 5.2,
431
+ "101221": 2.5,
432
+ "102001": 8.3,
433
+ "102011": 7,
434
+ "102021": 5.4,
435
+ "102101": 6.5,
436
+ "102111": 5.8,
437
+ "102121": 2.6,
438
+ "102201": 5.3,
439
+ "102211": 2.1,
440
+ "102221": 1.3,
441
+ "110000": 9.5,
442
+ "110001": 9,
443
+ "110010": 8.8,
444
+ "110011": 7.6,
445
+ "110020": 7.6,
446
+ "110021": 7,
447
+ "110100": 9,
448
+ "110101": 7.7,
449
+ "110110": 7.5,
450
+ "110111": 6.2,
451
+ "110120": 6.1,
452
+ "110121": 5.3,
453
+ "110200": 7.7,
454
+ "110201": 6.6,
455
+ "110210": 6.8,
456
+ "110211": 5.9,
457
+ "110220": 5.2,
458
+ "110221": 3,
459
+ "111000": 8.9,
460
+ "111001": 7.8,
461
+ "111010": 7.6,
462
+ "111011": 6.7,
463
+ "111020": 6.2,
464
+ "111021": 5.8,
465
+ "111100": 7.4,
466
+ "111101": 5.9,
467
+ "111110": 5.7,
468
+ "111111": 5.7,
469
+ "111120": 4.7,
470
+ "111121": 2.3,
471
+ "111200": 6.1,
472
+ "111201": 5.2,
473
+ "111210": 5.7,
474
+ "111211": 2.9,
475
+ "111220": 2.4,
476
+ "111221": 1.6,
477
+ "112001": 7.1,
478
+ "112011": 5.9,
479
+ "112021": 3,
480
+ "112101": 5.8,
481
+ "112111": 2.6,
482
+ "112121": 1.5,
483
+ "112201": 2.3,
484
+ "112211": 1.3,
485
+ "112221": 0.6,
486
+ "200000": 9.3,
487
+ "200001": 8.7,
488
+ "200010": 8.6,
489
+ "200011": 7.2,
490
+ "200020": 7.5,
491
+ "200021": 5.8,
492
+ "200100": 8.6,
493
+ "200101": 7.4,
494
+ "200110": 7.4,
495
+ "200111": 6.1,
496
+ "200120": 5.6,
497
+ "200121": 3.4,
498
+ "200200": 7,
499
+ "200201": 5.4,
500
+ "200210": 5.2,
501
+ "200211": 4,
502
+ "200220": 4,
503
+ "200221": 2.2,
504
+ "201000": 8.5,
505
+ "201001": 7.5,
506
+ "201010": 7.4,
507
+ "201011": 5.5,
508
+ "201020": 6.2,
509
+ "201021": 5.1,
510
+ "201100": 7.2,
511
+ "201101": 5.7,
512
+ "201110": 5.5,
513
+ "201111": 4.1,
514
+ "201120": 4.6,
515
+ "201121": 1.9,
516
+ "201200": 5.3,
517
+ "201201": 3.6,
518
+ "201210": 3.4,
519
+ "201211": 1.9,
520
+ "201220": 1.9,
521
+ "201221": 0.8,
522
+ "202001": 6.4,
523
+ "202011": 5.1,
524
+ "202021": 2,
525
+ "202101": 4.7,
526
+ "202111": 2.1,
527
+ "202121": 1.1,
528
+ "202201": 2.4,
529
+ "202211": 0.9,
530
+ "202221": 0.4,
531
+ "210000": 8.8,
532
+ "210001": 7.5,
533
+ "210010": 7.3,
534
+ "210011": 5.3,
535
+ "210020": 6,
536
+ "210021": 5,
537
+ "210100": 7.3,
538
+ "210101": 5.5,
539
+ "210110": 5.9,
540
+ "210111": 4,
541
+ "210120": 4.1,
542
+ "210121": 2,
543
+ "210200": 5.4,
544
+ "210201": 4.3,
545
+ "210210": 4.5,
546
+ "210211": 2.2,
547
+ "210220": 2,
548
+ "210221": 1.1,
549
+ "211000": 7.5,
550
+ "211001": 5.5,
551
+ "211010": 5.8,
552
+ "211011": 4.5,
553
+ "211020": 4,
554
+ "211021": 2.1,
555
+ "211100": 6.1,
556
+ "211101": 5.1,
557
+ "211110": 4.8,
558
+ "211111": 1.8,
559
+ "211120": 2,
560
+ "211121": 0.9,
561
+ "211200": 4.6,
562
+ "211201": 1.8,
563
+ "211210": 1.7,
564
+ "211211": 0.7,
565
+ "211220": 0.8,
566
+ "211221": 0.2,
567
+ "212001": 5.3,
568
+ "212011": 2.4,
569
+ "212021": 1.4,
570
+ "212101": 2.4,
571
+ "212111": 1.2,
572
+ "212121": 0.5,
573
+ "212201": 1,
574
+ "212211": 0.3,
575
+ "212221": 0.1
576
+ }
577
+
578
+ function getLevel(m,v) {
579
+ return levels[m][v]
580
+ }
581
+
582
+ const levels = {
583
+ 'AV': {"N": 0.0, "A": 0.1, "L": 0.2, "P": 0.3},
584
+ 'PR': {"N": 0.0, "L": 0.1, "H": 0.2},
585
+ 'UI': {"N": 0.0, "P": 0.1, "A": 0.2},
586
+ 'AC': {'L':0.0, 'H':0.1},
587
+ 'AT': {'N':0.0, 'P':0.1},
588
+ 'VC': {'H':0.0, 'L':0.1, 'N':0.2},
589
+ 'VI': {'H':0.0, 'L':0.1, 'N':0.2},
590
+ 'VA': {'H':0.0, 'L':0.1, 'N':0.2},
591
+ 'SC': {'H':0.1, 'L':0.2, 'N':0.3},
592
+ 'SI': {'S':0.0, 'H':0.1, 'L':0.2, 'N':0.3},
593
+ 'SA': {'S':0.0, 'H':0.1, 'L':0.2, 'N':0.3},
594
+ 'CR': {'H':0.0, 'M':0.1, 'L':0.2},
595
+ 'IR': {'H':0.0, 'M':0.1, 'L':0.2},
596
+ 'AR': {'H':0.0, 'M':0.1, 'L':0.2},
597
+ 'E': {'U': 0.2, 'P': 0.1, 'A': 0}
598
+ }
599
+
600
+ function score(mv) {
601
+ var eq1 = mv[0],
602
+ eq2 = mv[1],
603
+ eq3 = mv[2],
604
+ eq4 = mv[3],
605
+ eq5 = mv[4],
606
+ eq6 = mv[5],
607
+ eq36 = mv[6];
608
+ }