convert-csv-to-json 4.13.0 → 4.14.0

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 (65) hide show
  1. package/.github/workflows/ci-cd.yml +1 -1
  2. package/docs/api/BrowserApi.html +1255 -1028
  3. package/docs/api/BrowserApiError.html +326 -179
  4. package/docs/api/ConfigurationError.html +375 -224
  5. package/docs/api/CsvFormatError.html +334 -187
  6. package/docs/api/CsvParsingError.html +259 -132
  7. package/docs/api/CsvToJson.html +1545 -1314
  8. package/docs/api/CsvToJsonAsync.html +1356 -1148
  9. package/docs/api/FileOperationError.html +213 -101
  10. package/docs/api/FileUtils.html +568 -430
  11. package/docs/api/InputValidationError.html +229 -115
  12. package/docs/api/JsonUtil.html +222 -110
  13. package/docs/api/JsonValidationError.html +197 -87
  14. package/docs/api/StringUtils.html +833 -0
  15. package/docs/api/global.html +1537 -1354
  16. package/docs/api/index.html +114 -26
  17. package/docs/api/index.js.html +137 -31
  18. package/docs/api/scripts/app.min.js +1 -0
  19. package/docs/api/scripts/linenumber.js +10 -9
  20. package/docs/api/scripts/search.js +39 -0
  21. package/docs/api/src_browserApi.js.html +120 -29
  22. package/docs/api/src_csvToJson.js.html +119 -28
  23. package/docs/api/src_csvToJsonAsync.js.html +118 -27
  24. package/docs/api/src_util_errors.js.html +126 -28
  25. package/docs/api/src_util_fileUtils.js.html +117 -26
  26. package/docs/api/src_util_jsonUtils.js.html +117 -26
  27. package/docs/api/src_util_stringUtils.js.html +121 -27
  28. package/docs/api/styles/app.min.css +1 -0
  29. package/docs/api/styles/iframe.css +13 -0
  30. package/docs/api/styles/reset.css +44 -0
  31. package/eslint.config.js +115 -0
  32. package/index.js +21 -5
  33. package/jsdoc.json +29 -4
  34. package/package.json +5 -3
  35. package/src/browserApi.js +4 -3
  36. package/src/csvToJson.js +3 -2
  37. package/src/csvToJsonAsync.js +2 -1
  38. package/src/util/errors.js +10 -2
  39. package/src/util/fileUtils.js +1 -0
  40. package/src/util/jsonUtils.js +1 -0
  41. package/src/util/stringUtils.js +5 -1
  42. package/.eslintignore +0 -3
  43. package/.eslintrc.json +0 -48
  44. package/docs/api/fonts/OpenSans-Bold-webfont.eot +0 -0
  45. package/docs/api/fonts/OpenSans-Bold-webfont.svg +0 -1830
  46. package/docs/api/fonts/OpenSans-Bold-webfont.woff +0 -0
  47. package/docs/api/fonts/OpenSans-BoldItalic-webfont.eot +0 -0
  48. package/docs/api/fonts/OpenSans-BoldItalic-webfont.svg +0 -1830
  49. package/docs/api/fonts/OpenSans-BoldItalic-webfont.woff +0 -0
  50. package/docs/api/fonts/OpenSans-Italic-webfont.eot +0 -0
  51. package/docs/api/fonts/OpenSans-Italic-webfont.svg +0 -1830
  52. package/docs/api/fonts/OpenSans-Italic-webfont.woff +0 -0
  53. package/docs/api/fonts/OpenSans-Light-webfont.eot +0 -0
  54. package/docs/api/fonts/OpenSans-Light-webfont.svg +0 -1831
  55. package/docs/api/fonts/OpenSans-Light-webfont.woff +0 -0
  56. package/docs/api/fonts/OpenSans-LightItalic-webfont.eot +0 -0
  57. package/docs/api/fonts/OpenSans-LightItalic-webfont.svg +0 -1835
  58. package/docs/api/fonts/OpenSans-LightItalic-webfont.woff +0 -0
  59. package/docs/api/fonts/OpenSans-Regular-webfont.eot +0 -0
  60. package/docs/api/fonts/OpenSans-Regular-webfont.svg +0 -1831
  61. package/docs/api/fonts/OpenSans-Regular-webfont.woff +0 -0
  62. package/docs/api/scripts/prettify/Apache-License-2.0.txt +0 -202
  63. package/docs/api/scripts/prettify/lang-css.js +0 -2
  64. package/docs/api/scripts/prettify/prettify.js +0 -28
  65. package/docs/api/styles/jsdoc-default.css +0 -358
@@ -0,0 +1,833 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+
4
+ <head>
5
+
6
+ <meta charset="utf-8">
7
+ <meta name="viewport" content="width=device-width, initial-scale=1">
8
+ <title> StringUtils</title>
9
+
10
+ <script src="https://cdn.jsdelivr.net/gh/google/code-prettify@master/loader/run_prettify.js"></script>
11
+ <script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
12
+ <script src="./build/entry.js"></script>
13
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
14
+ <!--[if lt IE 9]>
15
+ <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
16
+ <![endif]-->
17
+ <link href="https://fonts.googleapis.com/css?family=Roboto:100,400,700|Inconsolata,700" rel="stylesheet">
18
+ <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.3/css/all.css" integrity="sha384-UHRtZLI+pbxtHCWp1t77Bi1L4ZtiqrqD80Kn4Z8NTSRyMA2Fd33n5dQ8lWUE00s/" crossorigin="anonymous">
19
+ <link type="text/css" rel="stylesheet" href="https://jmblog.github.io/color-themes-for-google-code-prettify/themes/tomorrow-night.min.css">
20
+ <link type="text/css" rel="stylesheet" href="styles/app.min.css">
21
+ <link type="text/css" rel="stylesheet" href="styles/iframe.css">
22
+ <link type="text/css" rel="stylesheet" href="./node_modules/better-docs/css/better-docs.css">
23
+ <script async defer src="https://buttons.github.io/buttons.js"></script>
24
+
25
+
26
+ </head>
27
+
28
+
29
+
30
+ <body class="layout small-header">
31
+ <div id="stickyNavbarOverlay"></div>
32
+
33
+
34
+ <div class="top-nav">
35
+ <div class="inner">
36
+ <a id="hamburger" role="button" class="navbar-burger" aria-label="menu" aria-expanded="false">
37
+ <span aria-hidden="true"></span>
38
+ <span aria-hidden="true"></span>
39
+ <span aria-hidden="true"></span>
40
+ </a>
41
+ <div class="logo">
42
+
43
+ <a class="image" href="index.html">
44
+ <img src="https://raw.githubusercontent.com/iuccio/CSVtoJSON/master/CSVtoJSON.png" alt="logo">
45
+ </a>
46
+
47
+
48
+ <a href="index.html">
49
+ <h1 class="navbar-item">Convert CSV to JSON</h1>
50
+ </a>
51
+
52
+ </div>
53
+ <div class="menu">
54
+
55
+ <div class="navigation">
56
+ <a
57
+ href="index.html"
58
+ class="link"
59
+ >
60
+ Documentation
61
+ </a>
62
+
63
+
64
+
65
+ <a
66
+ class="link user-link "
67
+ href="https://github.com/iuccio/CSVtoJSON"
68
+ >
69
+ GitHub
70
+ </a>
71
+
72
+ <a
73
+ class="link user-link "
74
+ href="https://www.npmjs.com/package/convert-csv-to-json"
75
+ >
76
+ NPM
77
+ </a>
78
+
79
+
80
+
81
+ </div>
82
+ </div>
83
+ </div>
84
+ </div>
85
+ <div id="main">
86
+ <div
87
+ class="sidebar "
88
+ id="sidebarNav"
89
+ >
90
+
91
+ <nav>
92
+
93
+ <h2><a href="index.html">Documentation</a></h2><div class="category"></div><div class="category"><h2>1-Core API</h2><h3>Global</h3><ul><li><a href="global.html#asciiEncoding">asciiEncoding</a></li><li><a href="global.html#base64Encoding">base64Encoding</a></li><li><a href="global.html#csvStringToJson">csvStringToJson</a></li><li><a href="global.html#csvStringToJsonStringified">csvStringToJsonStringified</a></li><li><a href="global.html#csvToJsonAsync">csvToJsonAsync</a></li><li><a href="global.html#customEncoding">customEncoding</a></li><li><a href="global.html#fieldDelimiter">fieldDelimiter</a></li><li><a href="global.html#formatValueByType">formatValueByType</a></li><li><a href="global.html#generateJsonFileFromCsv">generateJsonFileFromCsv</a></li><li><a href="global.html#getJsonFromCsv">getJsonFromCsv</a></li><li><a href="global.html#hexEncoding">hexEncoding</a></li><li><a href="global.html#indexHeader">indexHeader</a></li><li><a href="global.html#latin1Encoding">latin1Encoding</a></li><li><a href="global.html#mapRows">mapRows</a></li><li><a href="global.html#parseSubArray">parseSubArray</a></li><li><a href="global.html#supportQuotedField">supportQuotedField</a></li><li><a href="global.html#trimHeaderFieldWhiteSpace">trimHeaderFieldWhiteSpace</a></li><li><a href="global.html#ucs2Encoding">ucs2Encoding</a></li><li><a href="global.html#utf16leEncoding">utf16leEncoding</a></li><li><a href="global.html#utf8Encoding">utf8Encoding</a></li></ul></div><div class="category"><h2>2-Sync</h2><h3>Classes</h3><ul><li><a href="CsvToJson.html">CsvToJson</a></li></ul></div><div class="category"><h2>3-Async</h2><h3>Classes</h3><ul><li><a href="CsvToJsonAsync.html">CsvToJsonAsync</a></li></ul></div><div class="category"><h2>4-Browser</h2><h3>Classes</h3><ul><li><a href="BrowserApi.html">BrowserApi</a></li></ul></div><div class="category"><h2>Error Classes</h2><h3>Classes</h3><ul><li><a href="BrowserApiError.html">BrowserApiError</a></li><li><a href="ConfigurationError.html">ConfigurationError</a></li><li><a href="CsvFormatError.html">CsvFormatError</a></li><li><a href="CsvParsingError.html">CsvParsingError</a></li><li><a href="FileOperationError.html">FileOperationError</a></li><li><a href="InputValidationError.html">InputValidationError</a></li><li><a href="JsonValidationError.html">JsonValidationError</a></li></ul></div><div class="category"><h2>Utilities</h2><h3>Classes</h3><ul><li><a href="FileUtils.html">FileUtils</a></li><li><a href="JsonUtil.html">JsonUtil</a></li><li><a href="StringUtils.html">StringUtils</a></li></ul></div>
94
+
95
+ </nav>
96
+ </div>
97
+ <div class="core" id="main-content-wrapper">
98
+ <div class="content">
99
+ <header class="page-title">
100
+ <p>Class</p>
101
+ <h1>StringUtils</h1>
102
+ </header>
103
+
104
+
105
+
106
+
107
+
108
+ <section>
109
+
110
+ <header>
111
+
112
+ <h2><span class="attribs"><span class="type-signature"></span></span>StringUtils<span class="signature">()</span><span class="type-signature"></span></h2>
113
+
114
+ <div class="class-description"><p>String processing utilities for CSV parsing</p></div>
115
+
116
+
117
+ </header>
118
+
119
+ <article>
120
+ <div class="container-overview">
121
+
122
+
123
+ <div class='vertical-section'>
124
+ <div class="members">
125
+ <div class="member">
126
+ <div class=name>
127
+ <span class="tag">Constructor</span>
128
+ </div>
129
+
130
+
131
+
132
+
133
+ <h4 class="name" id="StringUtils">
134
+ <a class="href-link" href="#StringUtils">#</a>
135
+
136
+ <span class="code-name">
137
+
138
+ new StringUtils<span class="signature">()</span><span class="type-signature"></span>
139
+
140
+ </span>
141
+ </h4>
142
+
143
+
144
+
145
+
146
+
147
+
148
+
149
+
150
+
151
+
152
+
153
+
154
+
155
+
156
+
157
+
158
+
159
+ <dl class="details">
160
+
161
+
162
+
163
+
164
+
165
+
166
+
167
+
168
+
169
+
170
+
171
+
172
+
173
+
174
+
175
+
176
+
177
+
178
+
179
+
180
+
181
+
182
+
183
+
184
+
185
+
186
+
187
+
188
+
189
+
190
+
191
+ <p class="tag-source">
192
+ <a href="src_util_stringUtils.js.html" class="button">View Source</a>
193
+ <span>
194
+ <a href="src_util_stringUtils.js.html">src/util/stringUtils.js</a>, <a href="src_util_stringUtils.js.html#line7">line 7</a>
195
+ </span>
196
+ </p>
197
+
198
+ </dl>
199
+
200
+
201
+
202
+
203
+
204
+
205
+
206
+
207
+
208
+
209
+
210
+
211
+
212
+
213
+
214
+
215
+
216
+
217
+
218
+
219
+
220
+
221
+ </div>
222
+ </div>
223
+ </div>
224
+
225
+
226
+ </div>
227
+
228
+
229
+
230
+
231
+
232
+
233
+
234
+
235
+
236
+
237
+
238
+
239
+
240
+
241
+
242
+
243
+ <div class='vertical-section'>
244
+ <h1>Methods</h1>
245
+ <div class="members">
246
+
247
+ <div class="member">
248
+
249
+
250
+
251
+ <h4 class="name" id="getValueFormatByType">
252
+ <a class="href-link" href="#getValueFormatByType">#</a>
253
+
254
+ <span class="code-name">
255
+
256
+ getValueFormatByType<span class="signature">(value)</span><span class="type-signature"> &rarr; {string|number|boolean}</span>
257
+
258
+ </span>
259
+ </h4>
260
+
261
+
262
+
263
+
264
+ <div class="description">
265
+ <p>Converts a string value to its appropriate type while preserving data integrity</p>
266
+ </div>
267
+
268
+
269
+
270
+
271
+
272
+
273
+
274
+
275
+
276
+
277
+ <h5>Parameters:</h5>
278
+
279
+ <div class="table-container">
280
+ <table class="params table">
281
+ <thead>
282
+ <tr>
283
+
284
+ <th>Name</th>
285
+
286
+
287
+ <th>Type</th>
288
+
289
+
290
+
291
+
292
+
293
+ <th class="last">Description</th>
294
+ </tr>
295
+ </thead>
296
+
297
+ <tbody>
298
+
299
+
300
+
301
+ <tr class="deep-level-0">
302
+
303
+ <td class="name"><code>value</code></td>
304
+
305
+
306
+ <td class="type">
307
+
308
+
309
+ <code class="param-type">string</code>
310
+
311
+
312
+
313
+ </td>
314
+
315
+
316
+
317
+
318
+
319
+ <td class="description last"><p>The input value to convert</p></td>
320
+ </tr>
321
+
322
+
323
+
324
+ </tbody>
325
+ </table>
326
+ </div>
327
+
328
+
329
+
330
+
331
+
332
+ <dl class="details">
333
+
334
+
335
+
336
+
337
+
338
+
339
+
340
+
341
+
342
+
343
+
344
+
345
+
346
+
347
+
348
+
349
+
350
+
351
+
352
+
353
+
354
+
355
+
356
+
357
+
358
+
359
+
360
+
361
+
362
+
363
+
364
+ <p class="tag-source">
365
+ <a href="src_util_stringUtils.js.html" class="button">View Source</a>
366
+ <span>
367
+ <a href="src_util_stringUtils.js.html">src/util/stringUtils.js</a>, <a href="src_util_stringUtils.js.html#line40">line 40</a>
368
+ </span>
369
+ </p>
370
+
371
+ </dl>
372
+
373
+
374
+
375
+
376
+
377
+
378
+
379
+
380
+
381
+
382
+
383
+
384
+
385
+
386
+
387
+
388
+
389
+
390
+ <div class='columns method-parameter'>
391
+ <div class="column is-2"><label>Returns:</label></div>
392
+ <div class="column is-10">
393
+
394
+
395
+
396
+ <div class="columns">
397
+
398
+ <div class='param-desc column is-7'><p>The converted value</p></div>
399
+
400
+
401
+ <div class='column is-5 has-text-left'>
402
+ <label>Type: </label>
403
+
404
+ <code class="param-type">string</code>
405
+ |
406
+
407
+ <code class="param-type">number</code>
408
+ |
409
+
410
+ <code class="param-type">boolean</code>
411
+
412
+
413
+ </div>
414
+
415
+ </div>
416
+
417
+
418
+ </div>
419
+ </div>
420
+
421
+
422
+
423
+
424
+ </div>
425
+
426
+ <div class="member">
427
+
428
+
429
+
430
+ <h4 class="name" id="hasContent">
431
+ <a class="href-link" href="#hasContent">#</a>
432
+
433
+ <span class="code-name">
434
+
435
+ hasContent<span class="signature">(values)</span><span class="type-signature"> &rarr; {boolean}</span>
436
+
437
+ </span>
438
+ </h4>
439
+
440
+
441
+
442
+
443
+ <div class="description">
444
+ <p>Checks if a value array contains any non-empty values</p>
445
+ </div>
446
+
447
+
448
+
449
+
450
+
451
+
452
+
453
+
454
+
455
+
456
+ <h5>Parameters:</h5>
457
+
458
+ <div class="table-container">
459
+ <table class="params table">
460
+ <thead>
461
+ <tr>
462
+
463
+ <th>Name</th>
464
+
465
+
466
+ <th>Type</th>
467
+
468
+
469
+
470
+
471
+
472
+ <th class="last">Description</th>
473
+ </tr>
474
+ </thead>
475
+
476
+ <tbody>
477
+
478
+
479
+
480
+ <tr class="deep-level-0">
481
+
482
+ <td class="name"><code>values</code></td>
483
+
484
+
485
+ <td class="type">
486
+
487
+
488
+ <code class="param-type">Array</code>
489
+
490
+
491
+
492
+ </td>
493
+
494
+
495
+
496
+
497
+
498
+ <td class="description last"><p>Array to check for content</p></td>
499
+ </tr>
500
+
501
+
502
+
503
+ </tbody>
504
+ </table>
505
+ </div>
506
+
507
+
508
+
509
+
510
+
511
+ <dl class="details">
512
+
513
+
514
+
515
+
516
+
517
+
518
+
519
+
520
+
521
+
522
+
523
+
524
+
525
+
526
+
527
+
528
+
529
+
530
+
531
+
532
+
533
+
534
+
535
+
536
+
537
+
538
+
539
+
540
+
541
+
542
+
543
+ <p class="tag-source">
544
+ <a href="src_util_stringUtils.js.html" class="button">View Source</a>
545
+ <span>
546
+ <a href="src_util_stringUtils.js.html">src/util/stringUtils.js</a>, <a href="src_util_stringUtils.js.html#line65">line 65</a>
547
+ </span>
548
+ </p>
549
+
550
+ </dl>
551
+
552
+
553
+
554
+
555
+
556
+
557
+
558
+
559
+
560
+
561
+
562
+
563
+
564
+
565
+
566
+
567
+
568
+
569
+ <div class='columns method-parameter'>
570
+ <div class="column is-2"><label>Returns:</label></div>
571
+ <div class="column is-10">
572
+
573
+
574
+
575
+ <div class="columns">
576
+
577
+ <div class='param-desc column is-7'><p>True if array has any non-empty values</p></div>
578
+
579
+
580
+ <div class='column is-5 has-text-left'>
581
+ <label>Type: </label>
582
+
583
+ <code class="param-type">boolean</code>
584
+
585
+
586
+ </div>
587
+
588
+ </div>
589
+
590
+
591
+ </div>
592
+ </div>
593
+
594
+
595
+
596
+
597
+ </div>
598
+
599
+ <div class="member">
600
+
601
+
602
+
603
+ <h4 class="name" id="trimPropertyName">
604
+ <a class="href-link" href="#trimPropertyName">#</a>
605
+
606
+ <span class="code-name">
607
+
608
+ trimPropertyName<span class="signature">(shouldTrimAll, propertyName)</span><span class="type-signature"> &rarr; {string}</span>
609
+
610
+ </span>
611
+ </h4>
612
+
613
+
614
+
615
+
616
+ <div class="description">
617
+ <p>Removes whitespace from property names based on configuration</p>
618
+ </div>
619
+
620
+
621
+
622
+
623
+
624
+
625
+
626
+
627
+
628
+
629
+ <h5>Parameters:</h5>
630
+
631
+ <div class="table-container">
632
+ <table class="params table">
633
+ <thead>
634
+ <tr>
635
+
636
+ <th>Name</th>
637
+
638
+
639
+ <th>Type</th>
640
+
641
+
642
+
643
+
644
+
645
+ <th class="last">Description</th>
646
+ </tr>
647
+ </thead>
648
+
649
+ <tbody>
650
+
651
+
652
+
653
+ <tr class="deep-level-0">
654
+
655
+ <td class="name"><code>shouldTrimAll</code></td>
656
+
657
+
658
+ <td class="type">
659
+
660
+
661
+ <code class="param-type">boolean</code>
662
+
663
+
664
+
665
+ </td>
666
+
667
+
668
+
669
+
670
+
671
+ <td class="description last"><p>If true, removes all whitespace, otherwise only trims edges</p></td>
672
+ </tr>
673
+
674
+
675
+
676
+
677
+
678
+ <tr class="deep-level-0">
679
+
680
+ <td class="name"><code>propertyName</code></td>
681
+
682
+
683
+ <td class="type">
684
+
685
+
686
+ <code class="param-type">string</code>
687
+
688
+
689
+
690
+ </td>
691
+
692
+
693
+
694
+
695
+
696
+ <td class="description last"><p>The property name to process</p></td>
697
+ </tr>
698
+
699
+
700
+
701
+ </tbody>
702
+ </table>
703
+ </div>
704
+
705
+
706
+
707
+
708
+
709
+ <dl class="details">
710
+
711
+
712
+
713
+
714
+
715
+
716
+
717
+
718
+
719
+
720
+
721
+
722
+
723
+
724
+
725
+
726
+
727
+
728
+
729
+
730
+
731
+
732
+
733
+
734
+
735
+
736
+
737
+
738
+
739
+
740
+
741
+ <p class="tag-source">
742
+ <a href="src_util_stringUtils.js.html" class="button">View Source</a>
743
+ <span>
744
+ <a href="src_util_stringUtils.js.html">src/util/stringUtils.js</a>, <a href="src_util_stringUtils.js.html#line26">line 26</a>
745
+ </span>
746
+ </p>
747
+
748
+ </dl>
749
+
750
+
751
+
752
+
753
+
754
+
755
+
756
+
757
+
758
+
759
+
760
+
761
+
762
+
763
+
764
+
765
+
766
+
767
+ <div class='columns method-parameter'>
768
+ <div class="column is-2"><label>Returns:</label></div>
769
+ <div class="column is-10">
770
+
771
+
772
+
773
+ <div class="columns">
774
+
775
+ <div class='param-desc column is-7'><p>The processed property name</p></div>
776
+
777
+
778
+ <div class='column is-5 has-text-left'>
779
+ <label>Type: </label>
780
+
781
+ <code class="param-type">string</code>
782
+
783
+
784
+ </div>
785
+
786
+ </div>
787
+
788
+
789
+ </div>
790
+ </div>
791
+
792
+
793
+
794
+
795
+ </div>
796
+
797
+ </div>
798
+ </div>
799
+
800
+
801
+
802
+
803
+
804
+ </article>
805
+
806
+ </section>
807
+
808
+
809
+
810
+
811
+ </div>
812
+
813
+ <footer class="footer">
814
+ <div class="content has-text-centered">
815
+ <p>Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a></p>
816
+ <p class="sidebar-created-by">
817
+ <a href="https://github.com/SoftwareBrothers/better-docs" target="_blank">BetterDocs theme</a> provided with <i class="fas fa-heart"></i> by
818
+ <a href="http://softwarebrothers.co" target="_blank">SoftwareBrothers - JavaScript Development Agency</a>
819
+ </p>
820
+ </div>
821
+ </footer>
822
+
823
+ </div>
824
+ <div id="side-nav" class="side-nav">
825
+ </div>
826
+ </div>
827
+ <script src="scripts/app.min.js"></script>
828
+ <script>PR.prettyPrint();</script>
829
+ <script src="scripts/linenumber.js"> </script>
830
+
831
+
832
+ </body>
833
+ </html>