grnsight 3.0.0 → 5.1.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 (489) hide show
  1. package/.eslintignore +1 -0
  2. package/.travis.yml +1 -1
  3. package/GRNsight - Beta.html +194 -0
  4. package/Gemfile.lock +259 -0
  5. package/README.md +1 -1
  6. package/_gh_pages/about.html +360 -45
  7. package/_gh_pages/assets/css/footer.css +3 -0
  8. package/_gh_pages/assets/css/main.css +28 -14
  9. package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_estimation_output_binary-no-targetless-genes_sif.png +0 -0
  10. package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_estimation_output_binary_sif.png +0 -0
  11. package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_graphml_3-edges-and-footer.png +0 -0
  12. package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_graphml_header-and-3-nodes.png +0 -0
  13. package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_graphml_output_3-edges-and-footer.png +0 -0
  14. package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_graphml_output_header-and-3-nodes.png +0 -0
  15. package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_input_binary-no-targetless-genes_sif.png +0 -0
  16. package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_input_binary_sif.png +0 -0
  17. package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_input_concatenated-no-targetless-genes_sif.png +0 -0
  18. package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_input_concatenated_sif.png +0 -0
  19. package/_gh_pages/assets/images/Choe-Shin_CMSI402-poster-session_20180430.jpg +0 -0
  20. package/_gh_pages/assets/images/Choe_SCCUR_2017.jpg +0 -0
  21. package/_gh_pages/assets/images/Dahlquist-Choe-Shin_CMSI402-poster-session_20180430.jpg +0 -0
  22. package/_gh_pages/assets/images/Dionisio-Dahlquist_GRNsight-shades_20170506.jpg +0 -0
  23. package/_gh_pages/assets/images/Klein_Samdarshi_TriBeta_2018_20180317.jpg +0 -0
  24. package/_gh_pages/assets/images/Shin_SCCUR_2017.jpg +0 -0
  25. package/{documents/manuscripts/peerj-computerscience-2016/figures/submitted-versions/Figure1_zoom145_900pix-wide.png → _gh_pages/assets/images/demo-3_network-sheet.png} +0 -0
  26. package/{documents/manuscripts/peerj-computerscience-2016/figures/submitted-versions/Figure2_zoom145_900pix-wide.png → _gh_pages/assets/images/demo-4_network-optimized-weights-sheet.png} +0 -0
  27. package/_gh_pages/assets/images/gene-pages-0.png +0 -0
  28. package/_gh_pages/assets/images/gene-pages-1.png +0 -0
  29. package/_gh_pages/assets/images/gene-pages-2.png +0 -0
  30. package/_gh_pages/assets/images/gene-pages-3.png +0 -0
  31. package/_gh_pages/assets/images/grnsight2020.png +0 -0
  32. package/_gh_pages/assets/images/v3demo2-grid+nodecoloring.png +0 -0
  33. package/_gh_pages/assets/images/v3demo2-nodecoloring.png +0 -0
  34. package/_gh_pages/assets/images/v3demo2.png +0 -0
  35. package/_gh_pages/assets/js/ga-report.js +11 -11
  36. package/_gh_pages/assets/js/iframeResizer.min.js +9 -0
  37. package/_gh_pages/assets/js/main.js +43 -43
  38. package/_gh_pages/beta.html +29 -24
  39. package/_gh_pages/contact.html +31 -31
  40. package/_gh_pages/coverage/coverage.json +1 -0
  41. package/_gh_pages/coverage/coverage.raw.json +1 -0
  42. package/_gh_pages/coverage/lcov-report/base.css +223 -0
  43. package/_gh_pages/coverage/lcov-report/block-navigation.js +63 -0
  44. package/_gh_pages/coverage/lcov-report/controllers/additional-sheet-parser.js.html +330 -0
  45. package/_gh_pages/coverage/lcov-report/controllers/constants.js.html +243 -0
  46. package/_gh_pages/coverage/lcov-report/controllers/export-controller.js.html +285 -0
  47. package/_gh_pages/coverage/lcov-report/controllers/exporters/graphml.js.html +405 -0
  48. package/_gh_pages/coverage/lcov-report/controllers/exporters/index.html +110 -0
  49. package/_gh_pages/coverage/lcov-report/controllers/exporters/sif.js.html +150 -0
  50. package/_gh_pages/coverage/lcov-report/controllers/helpers.js.html +114 -0
  51. package/_gh_pages/coverage/lcov-report/controllers/import-controller.js.html +233 -0
  52. package/_gh_pages/coverage/lcov-report/controllers/importers/graphml.js.html +716 -0
  53. package/_gh_pages/coverage/lcov-report/controllers/importers/index.html +106 -0
  54. package/_gh_pages/coverage/lcov-report/controllers/importers/sif.js.html +488 -0
  55. package/_gh_pages/coverage/lcov-report/controllers/index.html +162 -0
  56. package/_gh_pages/coverage/lcov-report/controllers/semantic-checker.js.html +810 -0
  57. package/_gh_pages/coverage/lcov-report/controllers/spreadsheet-controller.js.html +1779 -0
  58. package/_gh_pages/coverage/lcov-report/index.html +136 -0
  59. package/_gh_pages/coverage/lcov-report/prettify.css +1 -0
  60. package/_gh_pages/coverage/lcov-report/prettify.js +1 -0
  61. package/_gh_pages/coverage/lcov-report/server/controllers/additional-sheet-parser.js.html +330 -0
  62. package/_gh_pages/coverage/lcov-report/server/controllers/constants.js.html +243 -0
  63. package/_gh_pages/coverage/lcov-report/server/controllers/export-controller.js.html +285 -0
  64. package/_gh_pages/coverage/lcov-report/server/controllers/exporters/graphml.js.html +405 -0
  65. package/_gh_pages/coverage/lcov-report/server/controllers/exporters/index.html +110 -0
  66. package/_gh_pages/coverage/lcov-report/server/controllers/exporters/sif.js.html +150 -0
  67. package/_gh_pages/coverage/lcov-report/server/controllers/graphml-constants.js.html +585 -0
  68. package/_gh_pages/coverage/lcov-report/server/controllers/helpers.js.html +114 -0
  69. package/_gh_pages/coverage/lcov-report/server/controllers/import-controller.js.html +237 -0
  70. package/_gh_pages/coverage/lcov-report/server/controllers/importers/graphml.js.html +585 -0
  71. package/_gh_pages/coverage/lcov-report/server/controllers/importers/index.html +110 -0
  72. package/_gh_pages/coverage/lcov-report/server/controllers/importers/sif.js.html +492 -0
  73. package/_gh_pages/coverage/lcov-report/server/controllers/index.html +188 -0
  74. package/_gh_pages/coverage/lcov-report/server/controllers/semantic-checker.js.html +810 -0
  75. package/_gh_pages/coverage/lcov-report/server/controllers/spreadsheet-controller.js.html +1779 -0
  76. package/_gh_pages/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  77. package/_gh_pages/coverage/lcov-report/sorter.js +158 -0
  78. package/_gh_pages/coverage/lcov-report/web-client/public/js/grnstate.js.html +225 -0
  79. package/_gh_pages/coverage/lcov-report/web-client/public/js/index.html +97 -0
  80. package/_gh_pages/coverage/lcov.info +49 -0
  81. package/_gh_pages/documentation.html +998 -320
  82. package/_gh_pages/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.aux +47 -0
  83. package/_gh_pages/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.bbl +73 -0
  84. package/_gh_pages/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.blg +52 -0
  85. package/_gh_pages/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.log +1056 -0
  86. package/_gh_pages/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.out +7 -0
  87. package/_gh_pages/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.synctex.gz +0 -0
  88. package/_gh_pages/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_manuscript_2016_text-only_revised-Dondi.docx +0 -0
  89. package/_gh_pages/encryption/server.cert +21 -0
  90. package/_gh_pages/encryption/server.key +28 -0
  91. package/_gh_pages/favicon.ico +0 -0
  92. package/_gh_pages/index.html +45 -22
  93. package/_gh_pages/links.html +47 -28
  94. package/_gh_pages/news.html +103 -21
  95. package/_gh_pages/onlyfooter.html +78 -0
  96. package/_gh_pages/onlyheader.html +64 -0
  97. package/_gh_pages/onlysidebar.html +73 -0
  98. package/_gh_pages/package-lock.json +14048 -0
  99. package/_gh_pages/people.html +129 -40
  100. package/_gh_pages/privacy.html +23 -17
  101. package/_gh_pages/publications.html +75 -33
  102. package/_gh_pages/robots.txt +1 -0
  103. package/_gh_pages/sitemap.xml +87 -74
  104. package/_gh_pages/test-files/import-samples/attributes.graphml +40 -0
  105. package/_gh_pages/test-files/import-samples/port.graphml +32 -0
  106. package/_gh_pages/test-files/import-samples/simple.graphml +31 -0
  107. package/_gh_pages/web-client/public/js/grnsight.min.js +2347 -0
  108. package/_gh_pages/web-client/public/stylesheets/grnsight.css +443 -0
  109. package/coverage/coverage.json +1 -1
  110. package/coverage/coverage.raw.json +1 -0
  111. package/coverage/lcov-report/base.css +18 -8
  112. package/coverage/lcov-report/block-navigation.js +63 -0
  113. package/coverage/lcov-report/controllers/additional-sheet-parser.js.html +330 -0
  114. package/coverage/lcov-report/controllers/constants.js.html +65 -61
  115. package/coverage/lcov-report/controllers/export-controller.js.html +96 -92
  116. package/coverage/lcov-report/controllers/exporters/graphml.js.html +168 -164
  117. package/coverage/lcov-report/controllers/exporters/index.html +36 -32
  118. package/coverage/lcov-report/controllers/exporters/sif.js.html +65 -61
  119. package/coverage/lcov-report/controllers/helpers.js.html +25 -21
  120. package/coverage/lcov-report/controllers/index.html +49 -45
  121. package/coverage/lcov-report/controllers/semantic-checker.js.html +403 -396
  122. package/coverage/lcov-report/controllers/spreadsheet-controller.js.html +973 -879
  123. package/coverage/lcov-report/index.html +45 -28
  124. package/coverage/lcov-report/server/controllers/additional-sheet-parser.js.html +330 -0
  125. package/coverage/lcov-report/server/controllers/constants.js.html +243 -0
  126. package/coverage/lcov-report/server/controllers/export-controller.js.html +285 -0
  127. package/coverage/lcov-report/server/controllers/exporters/graphml.js.html +405 -0
  128. package/coverage/lcov-report/server/controllers/exporters/index.html +110 -0
  129. package/coverage/lcov-report/server/controllers/exporters/sif.js.html +150 -0
  130. package/coverage/lcov-report/server/controllers/graphml-constants.js.html +585 -0
  131. package/coverage/lcov-report/server/controllers/helpers.js.html +114 -0
  132. package/coverage/lcov-report/server/controllers/import-controller.js.html +237 -0
  133. package/coverage/lcov-report/server/controllers/importers/graphml.js.html +585 -0
  134. package/coverage/lcov-report/server/controllers/importers/index.html +110 -0
  135. package/coverage/lcov-report/server/controllers/importers/sif.js.html +492 -0
  136. package/coverage/lcov-report/server/controllers/index.html +188 -0
  137. package/coverage/lcov-report/server/controllers/semantic-checker.js.html +810 -0
  138. package/coverage/lcov-report/server/controllers/spreadsheet-controller.js.html +1779 -0
  139. package/coverage/lcov-report/web-client/public/js/grnstate.js.html +225 -0
  140. package/coverage/lcov-report/web-client/public/js/index.html +97 -0
  141. package/coverage/lcov.info +1758 -876
  142. package/encryption/server.cert +21 -0
  143. package/encryption/server.key +28 -0
  144. package/package.json +46 -22
  145. package/server/app.js +6 -2
  146. package/server/config/config.js +16 -7
  147. package/server/controllers/additional-sheet-parser.js +292 -55
  148. package/server/controllers/api-controllers.js +36 -0
  149. package/server/controllers/constants.js +4 -37
  150. package/server/controllers/database-controller.js +129 -0
  151. package/server/controllers/demo-workbooks.js +5973 -0
  152. package/server/controllers/export-constants.js +78 -0
  153. package/server/controllers/export-controller.js +25 -3
  154. package/server/controllers/exporters/graphml.js +15 -15
  155. package/server/controllers/exporters/sif.js +7 -7
  156. package/server/controllers/exporters/xlsx.js +183 -0
  157. package/server/controllers/expression-sheet-parser.js +170 -0
  158. package/server/controllers/ga-controller.js +1 -1
  159. package/server/controllers/graphml-constants.js +0 -17
  160. package/server/controllers/helpers.js +25 -1
  161. package/server/controllers/import-controller.js +2 -2
  162. package/server/controllers/importers/graphml.js +17 -20
  163. package/server/controllers/importers/sif.js +22 -18
  164. package/server/controllers/network-sheet-parser.js +307 -0
  165. package/server/controllers/semantic-checker.js +30 -162
  166. package/server/controllers/sif-constants.js +36 -0
  167. package/server/controllers/spreadsheet-controller.js +277 -424
  168. package/server/controllers/workbook-constants.js +521 -0
  169. package/test/additional-sheet-parser-tests.js +147 -38
  170. package/test/api-tests.js +245 -0
  171. package/test/errors-adjacency-matrix-modifications.js +30 -29
  172. package/test/errors-gene-name-modifications.js +9 -0
  173. package/test/errors-graph-tests.js +4 -4
  174. package/test/errors-sheet-modifications.js +10 -2
  175. package/test/export-tests.js +431 -24
  176. package/test/expression-data-import-tests.js +113 -0
  177. package/test/grnstate-tests.js +29 -0
  178. package/test/import-graphml-tests.js +59 -40
  179. package/test/import-sif-tests.js +50 -37
  180. package/test/test.js +557 -93
  181. package/test/warnings-adjacency-matrix-modifications.js +8 -7
  182. package/test-files/additional-sheet-test-files/optimization-diagnostics-default.xlsx +0 -0
  183. package/test-files/additional-sheet-test-files/optimization-diagnostics-extraneous-data.xlsx +0 -0
  184. package/test-files/additional-sheet-test-files/optimization-diagnostics-incorrect-MSE-gene-header.xlsx +0 -0
  185. package/test-files/additional-sheet-test-files/optimization-diagnostics-incorrect-MSE-header.xlsx +0 -0
  186. package/test-files/additional-sheet-test-files/optimization-diagnostics-incorrect-column-headers.xlsx +0 -0
  187. package/test-files/additional-sheet-test-files/optimization-diagnostics-invalid-MSE-data.xlsx +0 -0
  188. package/test-files/additional-sheet-test-files/optimization-diagnostics-invalid-value.xlsx +0 -0
  189. package/test-files/additional-sheet-test-files/optimization-diagnostics-missing-MSE-data.xlsx +0 -0
  190. package/test-files/additional-sheet-test-files/optimization-diagnostics-missing-column-headers.xlsx +0 -0
  191. package/test-files/additional-sheet-test-files/optimization-diagnostics-missing-header.xlsx +0 -0
  192. package/test-files/additional-sheet-test-files/optimization-diagnostics-unknown-parameter.xlsx +0 -0
  193. package/test-files/additional-sheet-test-files/optimization-parameters-default.xlsx +0 -0
  194. package/test-files/additional-sheet-test-files/optimization-parameters-incorrect-headers.xlsx +0 -0
  195. package/test-files/additional-sheet-test-files/optimization-parameters-invalid-optimization-parameter.xlsx +0 -0
  196. package/test-files/additional-sheet-test-files/optimization-parameters-missing-headers.xlsx +0 -0
  197. package/test-files/additional-sheet-test-files/optimization-parameters-unknown-parameter.xlsx +0 -0
  198. package/test-files/additional-sheet-test-files/two-column-sheets-extraneous-data.xlsx +0 -0
  199. package/test-files/additional-sheet-test-files/two-column-sheets-incorrect-cell-A1.xlsx +0 -0
  200. package/test-files/additional-sheet-test-files/two-column-sheets-incorrect-column-header.xlsx +0 -0
  201. package/test-files/additional-sheet-test-files/two-column-sheets-invalid-gene-length.xlsx +0 -0
  202. package/test-files/additional-sheet-test-files/two-column-sheets-invalid-gene-type.xlsx +0 -0
  203. package/test-files/additional-sheet-test-files/two-column-sheets-invalid-value.xlsx +0 -0
  204. package/test-files/additional-sheet-test-files/two-column-sheets-missing-column-header.xlsx +0 -0
  205. package/test-files/additional-sheet-test-files/two-column-sheets-special-character.xlsx +0 -0
  206. package/test-files/adjacency-matrix-modifications/asymmetric-gene-order-input.xlsx +0 -0
  207. package/test-files/adjacency-matrix-modifications/asymmetric-gene-order-output.xlsx +0 -0
  208. package/test-files/adjacency-matrix-modifications/extra-column-adjacent-input.xlsx +0 -0
  209. package/test-files/adjacency-matrix-modifications/extra-column-adjacent-output.xlsx +0 -0
  210. package/test-files/adjacency-matrix-modifications/extra-column-end-of-sheet-input.xlsx +0 -0
  211. package/test-files/adjacency-matrix-modifications/extra-column-end-of-sheet-output.xlsx +0 -0
  212. package/test-files/adjacency-matrix-modifications/extra-data-random-cell-both-output.xlsx +0 -0
  213. package/test-files/adjacency-matrix-modifications/extra-data-random-cell-network-only-input.xlsx +0 -0
  214. package/test-files/adjacency-matrix-modifications/extra-data-random-cell-network-only-output.xlsx +0 -0
  215. package/test-files/adjacency-matrix-modifications/extra-data-random-cell-network-optimized-only-output.xlsx +0 -0
  216. package/test-files/adjacency-matrix-modifications/extra-row-end-of-sheet-input.xlsx +0 -0
  217. package/test-files/adjacency-matrix-modifications/extra-row-end-of-sheet-output.xlsx +0 -0
  218. package/test-files/adjacency-matrix-modifications/incorrect-network-cell-A1.xlsx +0 -0
  219. package/test-files/adjacency-matrix-modifications/missing-column-end-input.xlsx +0 -0
  220. package/test-files/adjacency-matrix-modifications/missing-column-end-output.xlsx +0 -0
  221. package/test-files/adjacency-matrix-modifications/missing-data-input.xlsx +0 -0
  222. package/test-files/adjacency-matrix-modifications/missing-data-output.xlsx +0 -0
  223. package/test-files/adjacency-matrix-modifications/missing-row-end-input.xlsx +0 -0
  224. package/test-files/adjacency-matrix-modifications/missing-row-end-output.xlsx +0 -0
  225. package/test-files/adjacency-matrix-modifications/missing-row-middle-input.xlsx +0 -0
  226. package/test-files/adjacency-matrix-modifications/missing-row-middle-output.xlsx +0 -0
  227. package/test-files/adjacency-matrix-modifications/missing-value-bottom-corner-input.xlsx +0 -0
  228. package/test-files/adjacency-matrix-modifications/missing-value-bottom-corner-output.xlsx +0 -0
  229. package/test-files/adjacency-matrix-modifications/value-replaced-w-spaces-both-output.xlsx +0 -0
  230. package/test-files/adjacency-matrix-modifications/value-replaced-w-spaces-net-only-input.xlsx +0 -0
  231. package/test-files/adjacency-matrix-modifications/value-replaced-w-spaces-net-op-only-output.xlsx +0 -0
  232. package/test-files/adjacency-matrix-modifications/value-replaced/342/200/223w-spaces-net-only-output.xlsx +0 -0
  233. package/test-files/demo-files/15-genes_28-edges_db5_Dahlquist-data_estimation_output.xlsx +0 -0
  234. package/test-files/demo-files/15-genes_28-edges_db5_Dahlquist-data_input.xlsx +0 -0
  235. package/test-files/expression-data-test-sheets/expression_sheet_correct_numbering.xlsx +0 -0
  236. package/test-files/expression-data-test-sheets/expression_sheet_different_number_of_columns.xlsx +0 -0
  237. package/test-files/expression-data-test-sheets/expression_sheet_empty_column.xlsx +0 -0
  238. package/test-files/expression-data-test-sheets/expression_sheet_empty_row.xlsx +0 -0
  239. package/test-files/expression-data-test-sheets/expression_sheet_erroneous_data.xlsx +0 -0
  240. package/test-files/expression-data-test-sheets/expression_sheet_extra_gene_name.xlsx +0 -0
  241. package/test-files/expression-data-test-sheets/expression_sheet_incorrectly_ordered_time_points.xlsx +0 -0
  242. package/test-files/expression-data-test-sheets/expression_sheet_mismatched_case_gene_names.xlsx +0 -0
  243. package/test-files/expression-data-test-sheets/expression_sheet_mismatched_gene_names.xlsx +0 -0
  244. package/test-files/expression-data-test-sheets/expression_sheet_missing_column_header.xlsx +0 -0
  245. package/test-files/expression-data-test-sheets/expression_sheet_missing_data_error.xlsx +0 -0
  246. package/test-files/expression-data-test-sheets/expression_sheet_missing_data_ok.xlsx +0 -0
  247. package/test-files/expression-data-test-sheets/expression_sheet_missing_data_ok_export_exact.xlsx +0 -0
  248. package/test-files/expression-data-test-sheets/expression_sheet_missing_gene_name.xlsx +0 -0
  249. package/test-files/expression-data-test-sheets/expression_sheet_name_not_in_optparams.xlsx +0 -0
  250. package/test-files/expression-data-test-sheets/expression_sheet_name_not_present.xlsx +0 -0
  251. package/test-files/expression-data-test-sheets/expression_sheet_negative_time_points.xlsx +0 -0
  252. package/test-files/expression-data-test-sheets/expression_sheet_non_numerical_time_points.xlsx +0 -0
  253. package/test-files/expression-data-test-sheets/expression_sheet_not_existing.xlsx +0 -0
  254. package/test-files/expression-data-test-sheets/expression_sheet_wrong_id_label.xlsx +0 -0
  255. package/test-files/expression-data-test-sheets/expression_sheet_wrong_order_gene_names.xlsx +0 -0
  256. package/test-files/expression-data-test-sheets/expression_sheet_wrong_sheet_name_case.xlsx +0 -0
  257. package/test-files/expression-data-test-sheets/expression_sheet_wrong_sheet_name_convention.xlsx +0 -0
  258. package/test-files/gene-name-modifications/NaN-as-gene-name-input.xlsx +0 -0
  259. package/test-files/gene-name-modifications/NaN-as-gene-name-output.xlsx +0 -0
  260. package/test-files/gene-name-modifications/mismatched-case-related-input.xlsx +0 -0
  261. package/test-files/gene-name-modifications/mismatched-case-related-output.xlsx +0 -0
  262. package/test-files/gene-name-modifications/mismatched-case-unrelated-input.xlsx +0 -0
  263. package/test-files/gene-name-modifications/mismatched-case-unrelated-output.xlsx +0 -0
  264. package/test-files/gene-name-modifications/numbers-as-gene-name-related-input.xlsx +0 -0
  265. package/test-files/gene-name-modifications/numbers-as-gene-name-related-output.xlsx +0 -0
  266. package/test-files/gene-name-modifications/numbers-as-gene-name-unrelated-input.xlsx +0 -0
  267. package/test-files/gene-name-modifications/numbers-as-gene-name-unrelated-output.xlsx +0 -0
  268. package/test-files/graph-tests/different-sized-networks/{80-genes-0-edges.xlsx → 134-genes-0-edges.xlsx} +0 -0
  269. package/test-files/graph-tests/different-sized-networks/{45-genes-max-edges.xlsx → 44-source-genes-45-target-genes-max-edges.xlsx} +0 -0
  270. package/test-files/graph-tests/different-sized-networks/{1-gene-0-edges.xlsx → unused-files/1-gene-0-edges.xlsx} +0 -0
  271. package/test-files/graph-tests/different-sized-networks/{1-gene-1-edges.xlsx → unused-files/1-gene-1-edges.xlsx} +0 -0
  272. package/test-files/graph-tests/different-sized-networks/{10-genes-50-edges.xlsx → unused-files/10-genes-50-edges.xlsx} +0 -0
  273. package/test-files/graph-tests/different-sized-networks/{10-genes-90-edges.xlsx → unused-files/10-genes-90-edges.xlsx} +0 -0
  274. package/test-files/graph-tests/different-sized-networks/{100-genes-0-edges.xlsx → unused-files/100-genes-0-edges.xlsx} +0 -0
  275. package/test-files/graph-tests/different-sized-networks/{110-genes-0-edges.xlsx → unused-files/110-genes-0-edges.xlsx} +0 -0
  276. package/test-files/graph-tests/different-sized-networks/{120-genes-0-edges.xlsx → unused-files/120-genes-0-edges.xlsx} +0 -0
  277. package/test-files/graph-tests/different-sized-networks/{130-genes-0-edges.xlsx → unused-files/130-genes-0-edges.xlsx} +0 -0
  278. package/test-files/graph-tests/different-sized-networks/{140-genes-0-edges.xlsx → unused-files/140-genes-0-edges.xlsx} +0 -0
  279. package/test-files/graph-tests/different-sized-networks/{150-genes-10000-edges.xlsx → unused-files/150-genes-10000-edges.xlsx} +0 -0
  280. package/test-files/graph-tests/different-sized-networks/{150-genes-20000-edges.xlsx → unused-files/150-genes-20000-edges.xlsx} +0 -0
  281. package/test-files/graph-tests/different-sized-networks/{150-genes-max-edges.xlsx → unused-files/150-genes-max-edges.xlsx} +0 -0
  282. package/test-files/graph-tests/different-sized-networks/{160-genes-max-edges.xlsx → unused-files/160-genes-max-edges.xlsx} +0 -0
  283. package/test-files/graph-tests/different-sized-networks/{20-genes-max-edges.xlsx → unused-files/20-genes-max-edges.xlsx} +0 -0
  284. package/test-files/graph-tests/different-sized-networks/{25-genes-max-edges.xlsx → unused-files/25-genes-max-edges.xlsx} +0 -0
  285. package/test-files/graph-tests/different-sized-networks/{30-genes-max-edges.xlsx → unused-files/30-genes-max-edges.xlsx} +0 -0
  286. package/test-files/graph-tests/different-sized-networks/{34-genes-0-edges.xlsx → unused-files/34-genes-0-edges.xlsx} +0 -0
  287. package/test-files/graph-tests/different-sized-networks/{34-genes-40-edges.xlsx → unused-files/34-genes-40-edges.xlsx} +0 -0
  288. package/test-files/graph-tests/different-sized-networks/{34-genes-65-edges.xlsx → unused-files/34-genes-65-edges.xlsx} +0 -0
  289. package/test-files/graph-tests/different-sized-networks/{34-genes-90-edges.xlsx → unused-files/34-genes-90-edges.xlsx} +0 -0
  290. package/test-files/graph-tests/different-sized-networks/{5-genes-max-edges.xlsx → unused-files/5-genes-max-edges.xlsx} +0 -0
  291. package/test-files/graph-tests/different-sized-networks/{51-genes-max-edges.xlsx → unused-files/51-genes-max-edges.xlsx} +0 -0
  292. package/test-files/graph-tests/different-sized-networks/{52-genes-max-edges.xlsx → unused-files/52-genes-max-edges.xlsx} +0 -0
  293. package/test-files/graph-tests/different-sized-networks/{55-genes-0-edges.xlsx → unused-files/55-genes-0-edges.xlsx} +0 -0
  294. package/test-files/graph-tests/different-sized-networks/{55-genes-max-edges.xlsx → unused-files/55-genes-max-edges.xlsx} +0 -0
  295. package/test-files/graph-tests/different-sized-networks/{65-genes-0-edges.xlsx → unused-files/65-genes-0-edges.xlsx} +0 -0
  296. package/test-files/graph-tests/different-sized-networks/{7-genes-max-edges.xlsx → unused-files/7-genes-max-edges.xlsx} +0 -0
  297. package/test-files/graph-tests/different-sized-networks/{70-genes-0-edges.xlsx → unused-files/70-genes-0-edges.xlsx} +0 -0
  298. package/test-files/graph-tests/different-sized-networks/{9-genes-max-edges.xlsx → unused-files/9-genes-max-edges.xlsx} +0 -0
  299. package/test-files/graph-tests/different-sized-networks/{90-genes-0-edges.xlsx → unused-files/90-genes-0-edges.xlsx} +0 -0
  300. package/test-files/graph-tests/different-sized-networks/{regulation-matrix-documented-20140709-AllTF-all-targets.xlsx → unused-files/regulation-matrix-documented-20140709-AllTF-all-targets.xlsx} +0 -0
  301. package/test-files/node-tests/long-gene-name-no-spaces-first.xlsx +0 -0
  302. package/test-files/node-tests/long-gene-name-no-spaces-second.xlsx +0 -0
  303. package/test-files/node-tests/long-gene-name-spaces.xlsx +0 -0
  304. package/test-files/species-test-data/15-genes_28-edges_db5_Dahlquist-data_input_no-species.xlsx +0 -0
  305. package/test-files/species-test-data/15-genes_28-edges_db5_Dahlquist-data_input_with-species.xlsx +0 -0
  306. package/test-files/species-test-data/3-gene_7-edge_elegans.xlsx +0 -0
  307. package/test-files/species-test-data/3-gene_7-edge_melanogaster.xlsx +0 -0
  308. package/test-files/species-test-data/3-gene_7-edge_musculus.xlsx +0 -0
  309. package/test-files/species-test-data/3-gene_7-edge_sapiens.xlsx +0 -0
  310. package/test-files/species-test-data/kev-fake-data-sapiens-no-exp-data.xlsx +0 -0
  311. package/test-files/spreadsheet-controller-test-files/sheet-name-capitalized-network-optimized-weights.xlsx +0 -0
  312. package/test-files/spreadsheet-controller-test-files/sheet-name-capitalized-network.xlsx +0 -0
  313. package/web-client/app.js +1 -1
  314. package/web-client/config/config.js +5 -5
  315. package/web-client/controllers/main.js +5 -1
  316. package/web-client/public/favicon.ico +0 -0
  317. package/web-client/public/gene/GRNSight.svg +689 -0
  318. package/web-client/public/gene/PageDesignREADME.md +1 -0
  319. package/web-client/public/gene/api.js +442 -0
  320. package/web-client/public/gene/info.css +181 -0
  321. package/web-client/public/gene/info.js +334 -0
  322. package/web-client/public/gene/integrationREADME.md +52 -0
  323. package/web-client/public/js/constants.js +182 -0
  324. package/web-client/public/js/getGeneInformationREADME.md +4 -0
  325. package/web-client/public/js/graph-statistics.js +7 -7
  326. package/web-client/public/js/graph.js +480 -476
  327. package/web-client/public/js/grnsight.js +10 -9
  328. package/web-client/public/js/grnsight.min.js +2335 -0
  329. package/web-client/public/js/grnstate.js +147 -0
  330. package/web-client/public/js/iframe-coordination.js +55 -0
  331. package/web-client/public/js/setup-handlers.js +617 -0
  332. package/web-client/public/js/setup-load-and-import-handlers.js +180 -0
  333. package/web-client/public/js/update-app.js +980 -0
  334. package/web-client/public/js/upload.js +352 -578
  335. package/web-client/public/js/warnings.js +60 -0
  336. package/web-client/public/lib/iframeSizer.contentWindow.min.js +10 -0
  337. package/{documents/SDF/CMSI_402/spring_2018/writtenStatusReport4 → web-client/public/lib/jaspar-front.html} +0 -0
  338. package/web-client/public/stylesheets/grnsight.styl +176 -26
  339. package/web-client/public/stylesheets/print.styl +10 -4
  340. package/web-client/views/{graph.jade → graph.pug} +1 -3
  341. package/web-client/views/info.pug +215 -0
  342. package/web-client/views/upload.pug +587 -0
  343. package/_gh_pages/Gemfile +0 -7
  344. package/_gh_pages/Gemfile.lock +0 -129
  345. package/documents/SDF/CMSI_402/spring_2014/Southwick_CMSI402_Spring2014_software-development-plan.md +0 -71
  346. package/documents/SDF/CMSI_402/spring_2014/Southwick_CMSI402_Spring2014_software-requirements-specification.md +0 -71
  347. package/documents/SDF/CMSI_402/spring_2014/use-case-diagram-spring-2014.jpg +0 -0
  348. package/documents/SDF/CMSI_402/spring_2017/Anguiano_402_Final_Presentation.pptx +0 -0
  349. package/documents/SDF/CMSI_402/spring_2017/Anguiano_402_Presentation_Final_Poster.pdf +0 -0
  350. package/documents/SDF/CMSI_402/spring_2017/Anguiano_CMSI402_Spring2017_project-proposal-presentation.pptx +0 -0
  351. package/documents/SDF/CMSI_402/spring_2017/Anguiano_CMSI402_Spring2017_project-proposal.docx +0 -0
  352. package/documents/SDF/CMSI_402/spring_2017/Anguiano_CMSI402_Spring2017_software-development-plan.docx +0 -0
  353. package/documents/SDF/CMSI_402/spring_2017/Anguiano_CMSI402_Spring2017_software-requirements-specification.docx +0 -0
  354. package/documents/SDF/CMSI_402/spring_2017/Design Review Presentation.pptx +0 -0
  355. package/documents/SDF/CMSI_402/spring_2018/0402report.docx +0 -0
  356. package/documents/SDF/CMSI_402/spring_2018/0409report.docx +0 -0
  357. package/documents/SDF/CMSI_402/spring_2018/402-gantt.png +0 -0
  358. package/documents/SDF/CMSI_402/spring_2018/402SRS_GRNSightFeedback01.txt +0 -28
  359. package/documents/SDF/CMSI_402/spring_2018/402_SPD.md +0 -223
  360. package/documents/SDF/CMSI_402/spring_2018/ChoeShinCMSI402_Final.pptx +0 -0
  361. package/documents/SDF/CMSI_402/spring_2018/ProjectProposal.md +0 -22
  362. package/documents/SDF/CMSI_402/spring_2018/SoftwareRequirementsSpecification.md +0 -88
  363. package/documents/SDF/CMSI_402/spring_2018/homework/choe_eileen/Choe_Eileen_CMSI 402_HW1.pdf +0 -0
  364. package/documents/SDF/CMSI_402/spring_2018/homework/choe_eileen/Choe_Eileen_CMSI402_HW2.pdf +0 -0
  365. package/documents/SDF/CMSI_402/spring_2018/homework/shin_jen/402hw2.docx +0 -0
  366. package/documents/SDF/CMSI_402/spring_2018/homework/shin_jen/Jen - 402Hw1.docx +0 -0
  367. package/documents/SDF/CMSI_402/spring_2018/homework/shin_jen/Jen - hw3.docx +0 -0
  368. package/documents/SDF/CMSI_402/spring_2018/writtenStatusReport.docx +0 -0
  369. package/documents/Varshneya_Samdarshi_LMU_Symposium_2016.pptx +0 -0
  370. package/documents/abstracts/Anguiano_Varshneya_Undergraduate-Research-Symposium_2017_abstract.pdf +0 -0
  371. package/documents/abstracts/SIGGRAPH 2017 Abstract/ACM-Reference-Format.bst +0 -3478
  372. package/documents/abstracts/SIGGRAPH 2017 Abstract/Figure1_zoom100.png +0 -0
  373. package/documents/abstracts/SIGGRAPH 2017 Abstract/acmart.cls +0 -2352
  374. package/documents/abstracts/SIGGRAPH 2017 Abstract/acmart.ins +0 -29
  375. package/documents/abstracts/SIGGRAPH 2017 Abstract/always-weights.png +0 -0
  376. package/documents/abstracts/SIGGRAPH 2017 Abstract/auto.png +0 -0
  377. package/documents/abstracts/SIGGRAPH 2017 Abstract/networkA.png +0 -0
  378. package/documents/abstracts/SIGGRAPH 2017 Abstract/networkB-normalized.png +0 -0
  379. package/documents/abstracts/SIGGRAPH 2017 Abstract/networkB.png +0 -0
  380. package/documents/abstracts/SIGGRAPH 2017 Abstract/never-weights.png +0 -0
  381. package/documents/abstracts/SIGGRAPH 2017 Abstract/representative-image/screenshot.jpg +0 -0
  382. package/documents/abstracts/SIGGRAPH 2017 Abstract/representative-image/screenshot3x2.png +0 -0
  383. package/documents/abstracts/SIGGRAPH 2017 Abstract/representative-image/withweights3x2.png +0 -0
  384. package/documents/abstracts/SIGGRAPH 2017 Abstract/screenshot-auto.png +0 -0
  385. package/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.bib +0 -85
  386. package/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.pdf +0 -0
  387. package/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.tex +0 -235
  388. package/documents/abstracts/SWE Collegiate Competition 2017.md +0 -9
  389. package/documents/abstracts/Varshneya_Samdarshi_Southern-California-Systems-Biology_2017_abstract.docx +0 -0
  390. package/documents/developer_documents/State Diagram.graphml +0 -3525
  391. package/documents/developer_documents/graphml/State Diagram.graphml +0 -3115
  392. package/documents/developer_documents/older_versions/GRNsight State Diagram old.png +0 -0
  393. package/documents/developer_documents/older_versions/GRNsight State Diagram.png +0 -0
  394. package/documents/developer_documents/testing_script_generator/GRNsightTestingDocument.md +0 -998
  395. package/documents/developer_documents/testing_script_generator/featureList.json +0 -486
  396. package/documents/developer_documents/testing_script_generator/testing-script-generator.js +0 -149
  397. package/documents/manuscripts/peerj-computerscience-2016/GRNsight_PeerJ-CS_conference-presentations_2016.docx +0 -0
  398. package/documents/manuscripts/peerj-computerscience-2016/GRNsight_PeerJ-CS_manuscript_2016.docx +0 -0
  399. package/documents/manuscripts/peerj-computerscience-2016/GRNsight_PeerJ-CS_manuscript_2016_Table1.docx +0 -0
  400. package/documents/manuscripts/peerj-computerscience-2016/GRNsight_PeerJ-CS_manuscript_2016_references.rtf +0 -264
  401. package/documents/manuscripts/peerj-computerscience-2016/GRNsight_PeerJ-CS_manuscript_2016_text-only.docx +0 -0
  402. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/21-genes_31-edges_Schade-data_for-screenshots.xlsx +0 -0
  403. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure1_zoom100.jpg +0 -0
  404. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure1_zoom100.png +0 -0
  405. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure1_zoom100.psd +0 -0
  406. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure1_zoom145.jpg +0 -0
  407. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure1_zoom145.png +0 -0
  408. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure1_zoom145.psd +0 -0
  409. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure1_zoom145_900pix-wide.psd +0 -0
  410. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure2_zoom100.jpg +0 -0
  411. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure2_zoom100.png +0 -0
  412. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure2_zoom100.psd +0 -0
  413. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure2_zoom145.jpg +0 -0
  414. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure2_zoom145.png +0 -0
  415. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure2_zoom145.psd +0 -0
  416. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure2_zoom145_900pix-wide.psd +0 -0
  417. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure5A.pdf +0 -0
  418. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure5B.pdf +0 -0
  419. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure5C.eps +0 -0
  420. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure5D.pdf +0 -0
  421. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure5E.pdf +0 -0
  422. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure5F.eps +0 -0
  423. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure5_compiled.png +0 -0
  424. package/documents/manuscripts/peerj-computerscience-2016/figures/submitted-versions/Figure3_GRNsight-Architecture.pdf +0 -0
  425. package/documents/manuscripts/peerj-computerscience-2016/figures/submitted-versions/Figure4_GRNsight-Screenshot.pdf +0 -0
  426. package/documents/manuscripts/peerj-computerscience-2016/figures/submitted-versions/Figure5_compiled.pdf +12 -5383
  427. package/documents/manuscripts/peerj-computerscience-2016/peerj-reviewing-10823-v0.pdf +0 -0
  428. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_conference-presentations_2016_revised.docx +0 -0
  429. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_cover-letter-and-response_2016.pdf +0 -0
  430. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_cover-letter_2016.docx +0 -0
  431. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_cover-letter_2016.pdf +0 -0
  432. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_manuscript_2016_Table1.docx +0 -0
  433. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_manuscript_2016_references_revised.rtf +0 -385
  434. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_manuscript_2016_text-only_revised.docx +0 -0
  435. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_manuscript_2016_text-only_revised_marked.docx +0 -0
  436. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_response-to-reviewers_2016.docx +0 -0
  437. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_response-to-reviewers_2016.pdf +0 -0
  438. package/documents/manuscripts/peerj-computerscience-2016/revisions/figures/Figure3_GRNsight-Architecture.pdf +0 -0
  439. package/documents/manuscripts/peerj-computerscience-2016/revisions/figures/Figure4_GRNsight-Screenshot-auto.pdf +0 -0
  440. package/documents/manuscripts/peerj-computerscience-2016/revisions/figures/Figure4_GRNsight-Screenshot.pdf +0 -0
  441. package/documents/manuscripts/peerj-computerscience-2016/revisions/peerj-reviewing-10823-v1.pdf +0 -0
  442. package/documents/posters/Anguiano_402_Presentation_Draft_Poster.pdf +0 -0
  443. package/documents/posters/Anguiano_402_Presentation_Draft_Poster.pptx +0 -0
  444. package/documents/posters/Anguiano_Varshneya_LMU-Symposium_2015_poster.pptx +0 -0
  445. package/documents/posters/Anguiano_Varshneya_SCCUR-Poster_20141122_poster.pptx +0 -0
  446. package/documents/posters/ChoeShinCMSI402-2.pptx +0 -0
  447. package/documents/posters/ChoeShinCMSI402.pptx +0 -0
  448. package/documents/posters/ChoeShinCMSI402Final.pptx +0 -0
  449. package/documents/posters/Dahlquist-et-al_BOSC_ISMB_2016_poster.pptx +0 -0
  450. package/documents/posters/Samdarshi et al. LMU Symposium 2017-finalDraft.pptx +0 -0
  451. package/documents/posters/Samdarshi et al. LMU Symposium 2018-firstDraft.pptx +0 -0
  452. package/documents/posters/Shin et al. SCCUR 2017 FinalDraft.pptx +0 -0
  453. package/documents/posters/Southwick_CMSI402_2014_poster.pptx +0 -0
  454. package/documents/posters/Varshneya_Samdarshi_LMU-Symposium_2016_poster.pptx +0 -0
  455. package/documents/posters/Varshneya_Samdarshi_Southern-California-Systems-Biology-Conference_2017_poster.pptx +0 -0
  456. package/documents/posters/~$Samdarshi et al. LMU Symposium 2018-firstDraft.pptx +0 -0
  457. package/documents/presentations/Anguiano_402_Final_Presentation.pptx +0 -0
  458. package/documents/presentations/Choe_SCCUR2017.pptx +0 -0
  459. package/documents/presentations/Choe_SWERapidFire2017_final.pptx +0 -0
  460. package/documents/presentations/Dahlquist_BOSC_20160709.pptx +0 -0
  461. package/documents/presentations/Dahlquist_ExperimentalBiology_20160404_talk.pptx +0 -0
  462. package/documents/presentations/Dahlquist_SoCalSysBio_20150131_talk.pptx +0 -0
  463. package/documents/presentations/Samdarshi et al. LMU Symposium 2017-draft.pptx +0 -0
  464. package/documents/presentations/Southwick_Anguiano_LMU-Symposium_20140329_talk.pptx +0 -0
  465. package/documents/presentations/Southwick_CMSI402_Presentation_20140508_talk.pptx +0 -0
  466. package/documents/presentations/Varshneya-Anguiano-LMU Symposium-201703.pptx +0 -0
  467. package/documents/presentations/~$Choe_SWERapidFire2017_final.pptx +0 -0
  468. package/documents/reports/Varshneya-201701-AnnotatedBibliography.docx +0 -0
  469. package/documents/reports/Varshneya-201702-Introduction.docx +0 -0
  470. package/documents/reports/Varshneya-201702-Outline.docx +0 -0
  471. package/documents/reports/Varshneya-201703-Discussion.docx +0 -0
  472. package/documents/reports/Varshneya-201703-MMResults.docx +0 -0
  473. package/documents/reports/Varshneya-201704-Draft-1.docx +0 -0
  474. package/documents/reports/Varshneya-201704-Final.docx +0 -0
  475. package/test/graph-library-tests.js +0 -165
  476. package/test-files/demo-files/21-genes_50-edges_Dahlquist-data_estimation_output.xlsx +0 -0
  477. package/test-files/demo-files/21-genes_50-edges_Dahlquist-data_input.xlsx +0 -0
  478. package/test-files/graph-tests/different-sized-networks/10-genes-max-edges.xlsx +0 -0
  479. package/test-files/graph-tests/different-sized-networks/12-genes-max-edges.xlsx +0 -0
  480. package/test-files/graph-tests/different-sized-networks/35-genes-max-edges.xlsx +0 -0
  481. package/test-files/graph-tests/different-sized-networks/40-genes-0-edges.xlsx +0 -0
  482. package/test-files/graph-tests/different-sized-networks/40-genes-max-edges.xlsx +0 -0
  483. package/test-files/graph-tests/different-sized-networks/42-genes-max-edges.xlsx +0 -0
  484. package/test-files/graph-tests/different-sized-networks/50-genes-max-edges.xlsx +0 -0
  485. package/test-files/graph-tests/different-sized-networks/75-genes-150-edges.xlsx +0 -0
  486. package/web-client/public/js/container.js +0 -121
  487. package/web-client/public/js/node-coloring.js +0 -306
  488. package/web-client/public/js/sliders.js +0 -197
  489. package/web-client/views/upload.jade +0 -458
@@ -16,588 +16,642 @@
16
16
  <div class='wrapper'>
17
17
  <div class='pad1'>
18
18
  <h1>
19
- <a href="../index.html">all files</a> / <a href="index.html">controllers/</a> spreadsheet-controller.js
19
+ <a href="../index.html">All files</a> / <a href="index.html">controllers</a> spreadsheet-controller.js
20
20
  </h1>
21
21
  <div class='clearfix'>
22
22
  <div class='fl pad1y space-right2'>
23
- <span class="strong">70.15% </span>
23
+ <span class="strong">9.74% </span>
24
24
  <span class="quiet">Statements</span>
25
- <span class='fraction'>141/201</span>
25
+ <span class='fraction'>19/195</span>
26
26
  </div>
27
27
  <div class='fl pad1y space-right2'>
28
- <span class="strong">84.29% </span>
28
+ <span class="strong">1.43% </span>
29
29
  <span class="quiet">Branches</span>
30
- <span class='fraction'>59/70</span>
30
+ <span class='fraction'>1/70</span>
31
31
  </div>
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">48.28% </span>
33
+ <span class="strong">3.45% </span>
34
34
  <span class="quiet">Functions</span>
35
- <span class='fraction'>14/29</span>
35
+ <span class='fraction'>1/29</span>
36
36
  </div>
37
37
  <div class='fl pad1y space-right2'>
38
- <span class="strong">70.15% </span>
38
+ <span class="strong">9.74% </span>
39
39
  <span class="quiet">Lines</span>
40
- <span class='fraction'>141/201</span>
40
+ <span class='fraction'>19/195</span>
41
41
  </div>
42
42
  </div>
43
+ <p class="quiet">
44
+ Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
45
+ </p>
43
46
  </div>
44
- <div class='status-line medium'></div>
47
+ <div class='status-line low'></div>
45
48
  <pre><table class="coverage">
46
- <tr><td class="line-count quiet">1
47
- 2
48
- 3
49
- 4
50
- 5
51
- 6
52
- 7
53
- 8
54
- 9
55
- 10
56
- 11
57
- 12
58
- 13
59
- 14
60
- 15
61
- 16
62
- 17
63
- 18
64
- 19
65
- 20
66
- 21
67
- 22
68
- 23
69
- 24
70
- 25
71
- 26
72
- 27
73
- 28
74
- 29
75
- 30
76
- 31
77
- 32
78
- 33
79
- 34
80
- 35
81
- 36
82
- 37
83
- 38
84
- 39
85
- 40
86
- 41
87
- 42
88
- 43
89
- 44
90
- 45
91
- 46
92
- 47
93
- 48
94
- 49
95
- 50
96
- 51
97
- 52
98
- 53
99
- 54
100
- 55
101
- 56
102
- 57
103
- 58
104
- 59
105
- 60
106
- 61
107
- 62
108
- 63
109
- 64
110
- 65
111
- 66
112
- 67
113
- 68
114
- 69
115
- 70
116
- 71
117
- 72
118
- 73
119
- 74
120
- 75
121
- 76
122
- 77
123
- 78
124
- 79
125
- 80
126
- 81
127
- 82
128
- 83
129
- 84
130
- 85
131
- 86
132
- 87
133
- 88
134
- 89
135
- 90
136
- 91
137
- 92
138
- 93
139
- 94
140
- 95
141
- 96
142
- 97
143
- 98
144
- 99
145
- 100
146
- 101
147
- 102
148
- 103
149
- 104
150
- 105
151
- 106
152
- 107
153
- 108
154
- 109
155
- 110
156
- 111
157
- 112
158
- 113
159
- 114
160
- 115
161
- 116
162
- 117
163
- 118
164
- 119
165
- 120
166
- 121
167
- 122
168
- 123
169
- 124
170
- 125
171
- 126
172
- 127
173
- 128
174
- 129
175
- 130
176
- 131
177
- 132
178
- 133
179
- 134
180
- 135
181
- 136
182
- 137
183
- 138
184
- 139
185
- 140
186
- 141
187
- 142
188
- 143
189
- 144
190
- 145
191
- 146
192
- 147
193
- 148
194
- 149
195
- 150
196
- 151
197
- 152
198
- 153
199
- 154
200
- 155
201
- 156
202
- 157
203
- 158
204
- 159
205
- 160
206
- 161
207
- 162
208
- 163
209
- 164
210
- 165
211
- 166
212
- 167
213
- 168
214
- 169
215
- 170
216
- 171
217
- 172
218
- 173
219
- 174
220
- 175
221
- 176
222
- 177
223
- 178
224
- 179
225
- 180
226
- 181
227
- 182
228
- 183
229
- 184
230
- 185
231
- 186
232
- 187
233
- 188
234
- 189
235
- 190
236
- 191
237
- 192
238
- 193
239
- 194
240
- 195
241
- 196
242
- 197
243
- 198
244
- 199
245
- 200
246
- 201
247
- 202
248
- 203
249
- 204
250
- 205
251
- 206
252
- 207
253
- 208
254
- 209
255
- 210
256
- 211
257
- 212
258
- 213
259
- 214
260
- 215
261
- 216
262
- 217
263
- 218
264
- 219
265
- 220
266
- 221
267
- 222
268
- 223
269
- 224
270
- 225
271
- 226
272
- 227
273
- 228
274
- 229
275
- 230
276
- 231
277
- 232
278
- 233
279
- 234
280
- 235
281
- 236
282
- 237
283
- 238
284
- 239
285
- 240
286
- 241
287
- 242
288
- 243
289
- 244
290
- 245
291
- 246
292
- 247
293
- 248
294
- 249
295
- 250
296
- 251
297
- 252
298
- 253
299
- 254
300
- 255
301
- 256
302
- 257
303
- 258
304
- 259
305
- 260
306
- 261
307
- 262
308
- 263
309
- 264
310
- 265
311
- 266
312
- 267
313
- 268
314
- 269
315
- 270
316
- 271
317
- 272
318
- 273
319
- 274
320
- 275
321
- 276
322
- 277
323
- 278
324
- 279
325
- 280
326
- 281
327
- 282
328
- 283
329
- 284
330
- 285
331
- 286
332
- 287
333
- 288
334
- 289
335
- 290
336
- 291
337
- 292
338
- 293
339
- 294
340
- 295
341
- 296
342
- 297
343
- 298
344
- 299
345
- 300
346
- 301
347
- 302
348
- 303
349
- 304
350
- 305
351
- 306
352
- 307
353
- 308
354
- 309
355
- 310
356
- 311
357
- 312
358
- 313
359
- 314
360
- 315
361
- 316
362
- 317
363
- 318
364
- 319
365
- 320
366
- 321
367
- 322
368
- 323
369
- 324
370
- 325
371
- 326
372
- 327
373
- 328
374
- 329
375
- 330
376
- 331
377
- 332
378
- 333
379
- 334
380
- 335
381
- 336
382
- 337
383
- 338
384
- 339
385
- 340
386
- 341
387
- 342
388
- 343
389
- 344
390
- 345
391
- 346
392
- 347
393
- 348
394
- 349
395
- 350
396
- 351
397
- 352
398
- 353
399
- 354
400
- 355
401
- 356
402
- 357
403
- 358
404
- 359
405
- 360
406
- 361
407
- 362
408
- 363
409
- 364
410
- 365
411
- 366
412
- 367
413
- 368
414
- 369
415
- 370
416
- 371
417
- 372
418
- 373
419
- 374
420
- 375
421
- 376
422
- 377
423
- 378
424
- 379
425
- 380
426
- 381
427
- 382
428
- 383
429
- 384
430
- 385
431
- 386
432
- 387
433
- 388
434
- 389
435
- 390
436
- 391
437
- 392
438
- 393
439
- 394
440
- 395
441
- 396
442
- 397
443
- 398
444
- 399
445
- 400
446
- 401
447
- 402
448
- 403
449
- 404
450
- 405
451
- 406
452
- 407
453
- 408
454
- 409
455
- 410
456
- 411
457
- 412
458
- 413
459
- 414
460
- 415
461
- 416
462
- 417
463
- 418
464
- 419
465
- 420
466
- 421
467
- 422
468
- 423
469
- 424
470
- 425
471
- 426
472
- 427
473
- 428
474
- 429
475
- 430
476
- 431
477
- 432
478
- 433
479
- 434
480
- 435
481
- 436
482
- 437
483
- 438
484
- 439
485
- 440
486
- 441
487
- 442
488
- 443
489
- 444
490
- 445
491
- 446
492
- 447
493
- 448
494
- 449
495
- 450
496
- 451
497
- 452
498
- 453
499
- 454
500
- 455
501
- 456
502
- 457
503
- 458
504
- 459
505
- 460
506
- 461
507
- 462
508
- 463
509
- 464
510
- 465
511
- 466
512
- 467
513
- 468
514
- 469
515
- 470
516
- 471
517
- 472
518
- 473
519
- 474
520
- 475
521
- 476
522
- 477
523
- 478
524
- 479
525
- 480
526
- 481
527
- 482
528
- 483
529
- 484
530
- 485
531
- 486
532
- 487
533
- 488
534
- 489
535
- 490
536
- 491
537
- 492
538
- 493
539
- 494
540
- 495
541
- 496
542
- 497
543
- 498
544
- 499
545
- 500
546
- 501
547
- 502
548
- 503
549
- 504
550
- 505
551
- 506
552
- 507
553
- 508
554
- 509
555
- 510
556
- 511
557
- 512
558
- 513
559
- 514
560
- 515
561
- 516
562
- 517
563
- 518
564
- 519
565
- 520
566
- 521
567
- 522
568
- 523
569
- 524
570
- 525
571
- 526
572
- 527
573
- 528
574
- 529
575
- 530
576
- 531
577
- 532
578
- 533
579
- 534
580
- 535
581
- 536
582
- 537
583
- 538
584
- 539
585
- 540
586
- 541</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
587
- <span class="cline-any cline-yes">1×</span>
49
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
50
+ <a name='L2'></a><a href='#L2'>2</a>
51
+ <a name='L3'></a><a href='#L3'>3</a>
52
+ <a name='L4'></a><a href='#L4'>4</a>
53
+ <a name='L5'></a><a href='#L5'>5</a>
54
+ <a name='L6'></a><a href='#L6'>6</a>
55
+ <a name='L7'></a><a href='#L7'>7</a>
56
+ <a name='L8'></a><a href='#L8'>8</a>
57
+ <a name='L9'></a><a href='#L9'>9</a>
58
+ <a name='L10'></a><a href='#L10'>10</a>
59
+ <a name='L11'></a><a href='#L11'>11</a>
60
+ <a name='L12'></a><a href='#L12'>12</a>
61
+ <a name='L13'></a><a href='#L13'>13</a>
62
+ <a name='L14'></a><a href='#L14'>14</a>
63
+ <a name='L15'></a><a href='#L15'>15</a>
64
+ <a name='L16'></a><a href='#L16'>16</a>
65
+ <a name='L17'></a><a href='#L17'>17</a>
66
+ <a name='L18'></a><a href='#L18'>18</a>
67
+ <a name='L19'></a><a href='#L19'>19</a>
68
+ <a name='L20'></a><a href='#L20'>20</a>
69
+ <a name='L21'></a><a href='#L21'>21</a>
70
+ <a name='L22'></a><a href='#L22'>22</a>
71
+ <a name='L23'></a><a href='#L23'>23</a>
72
+ <a name='L24'></a><a href='#L24'>24</a>
73
+ <a name='L25'></a><a href='#L25'>25</a>
74
+ <a name='L26'></a><a href='#L26'>26</a>
75
+ <a name='L27'></a><a href='#L27'>27</a>
76
+ <a name='L28'></a><a href='#L28'>28</a>
77
+ <a name='L29'></a><a href='#L29'>29</a>
78
+ <a name='L30'></a><a href='#L30'>30</a>
79
+ <a name='L31'></a><a href='#L31'>31</a>
80
+ <a name='L32'></a><a href='#L32'>32</a>
81
+ <a name='L33'></a><a href='#L33'>33</a>
82
+ <a name='L34'></a><a href='#L34'>34</a>
83
+ <a name='L35'></a><a href='#L35'>35</a>
84
+ <a name='L36'></a><a href='#L36'>36</a>
85
+ <a name='L37'></a><a href='#L37'>37</a>
86
+ <a name='L38'></a><a href='#L38'>38</a>
87
+ <a name='L39'></a><a href='#L39'>39</a>
88
+ <a name='L40'></a><a href='#L40'>40</a>
89
+ <a name='L41'></a><a href='#L41'>41</a>
90
+ <a name='L42'></a><a href='#L42'>42</a>
91
+ <a name='L43'></a><a href='#L43'>43</a>
92
+ <a name='L44'></a><a href='#L44'>44</a>
93
+ <a name='L45'></a><a href='#L45'>45</a>
94
+ <a name='L46'></a><a href='#L46'>46</a>
95
+ <a name='L47'></a><a href='#L47'>47</a>
96
+ <a name='L48'></a><a href='#L48'>48</a>
97
+ <a name='L49'></a><a href='#L49'>49</a>
98
+ <a name='L50'></a><a href='#L50'>50</a>
99
+ <a name='L51'></a><a href='#L51'>51</a>
100
+ <a name='L52'></a><a href='#L52'>52</a>
101
+ <a name='L53'></a><a href='#L53'>53</a>
102
+ <a name='L54'></a><a href='#L54'>54</a>
103
+ <a name='L55'></a><a href='#L55'>55</a>
104
+ <a name='L56'></a><a href='#L56'>56</a>
105
+ <a name='L57'></a><a href='#L57'>57</a>
106
+ <a name='L58'></a><a href='#L58'>58</a>
107
+ <a name='L59'></a><a href='#L59'>59</a>
108
+ <a name='L60'></a><a href='#L60'>60</a>
109
+ <a name='L61'></a><a href='#L61'>61</a>
110
+ <a name='L62'></a><a href='#L62'>62</a>
111
+ <a name='L63'></a><a href='#L63'>63</a>
112
+ <a name='L64'></a><a href='#L64'>64</a>
113
+ <a name='L65'></a><a href='#L65'>65</a>
114
+ <a name='L66'></a><a href='#L66'>66</a>
115
+ <a name='L67'></a><a href='#L67'>67</a>
116
+ <a name='L68'></a><a href='#L68'>68</a>
117
+ <a name='L69'></a><a href='#L69'>69</a>
118
+ <a name='L70'></a><a href='#L70'>70</a>
119
+ <a name='L71'></a><a href='#L71'>71</a>
120
+ <a name='L72'></a><a href='#L72'>72</a>
121
+ <a name='L73'></a><a href='#L73'>73</a>
122
+ <a name='L74'></a><a href='#L74'>74</a>
123
+ <a name='L75'></a><a href='#L75'>75</a>
124
+ <a name='L76'></a><a href='#L76'>76</a>
125
+ <a name='L77'></a><a href='#L77'>77</a>
126
+ <a name='L78'></a><a href='#L78'>78</a>
127
+ <a name='L79'></a><a href='#L79'>79</a>
128
+ <a name='L80'></a><a href='#L80'>80</a>
129
+ <a name='L81'></a><a href='#L81'>81</a>
130
+ <a name='L82'></a><a href='#L82'>82</a>
131
+ <a name='L83'></a><a href='#L83'>83</a>
132
+ <a name='L84'></a><a href='#L84'>84</a>
133
+ <a name='L85'></a><a href='#L85'>85</a>
134
+ <a name='L86'></a><a href='#L86'>86</a>
135
+ <a name='L87'></a><a href='#L87'>87</a>
136
+ <a name='L88'></a><a href='#L88'>88</a>
137
+ <a name='L89'></a><a href='#L89'>89</a>
138
+ <a name='L90'></a><a href='#L90'>90</a>
139
+ <a name='L91'></a><a href='#L91'>91</a>
140
+ <a name='L92'></a><a href='#L92'>92</a>
141
+ <a name='L93'></a><a href='#L93'>93</a>
142
+ <a name='L94'></a><a href='#L94'>94</a>
143
+ <a name='L95'></a><a href='#L95'>95</a>
144
+ <a name='L96'></a><a href='#L96'>96</a>
145
+ <a name='L97'></a><a href='#L97'>97</a>
146
+ <a name='L98'></a><a href='#L98'>98</a>
147
+ <a name='L99'></a><a href='#L99'>99</a>
148
+ <a name='L100'></a><a href='#L100'>100</a>
149
+ <a name='L101'></a><a href='#L101'>101</a>
150
+ <a name='L102'></a><a href='#L102'>102</a>
151
+ <a name='L103'></a><a href='#L103'>103</a>
152
+ <a name='L104'></a><a href='#L104'>104</a>
153
+ <a name='L105'></a><a href='#L105'>105</a>
154
+ <a name='L106'></a><a href='#L106'>106</a>
155
+ <a name='L107'></a><a href='#L107'>107</a>
156
+ <a name='L108'></a><a href='#L108'>108</a>
157
+ <a name='L109'></a><a href='#L109'>109</a>
158
+ <a name='L110'></a><a href='#L110'>110</a>
159
+ <a name='L111'></a><a href='#L111'>111</a>
160
+ <a name='L112'></a><a href='#L112'>112</a>
161
+ <a name='L113'></a><a href='#L113'>113</a>
162
+ <a name='L114'></a><a href='#L114'>114</a>
163
+ <a name='L115'></a><a href='#L115'>115</a>
164
+ <a name='L116'></a><a href='#L116'>116</a>
165
+ <a name='L117'></a><a href='#L117'>117</a>
166
+ <a name='L118'></a><a href='#L118'>118</a>
167
+ <a name='L119'></a><a href='#L119'>119</a>
168
+ <a name='L120'></a><a href='#L120'>120</a>
169
+ <a name='L121'></a><a href='#L121'>121</a>
170
+ <a name='L122'></a><a href='#L122'>122</a>
171
+ <a name='L123'></a><a href='#L123'>123</a>
172
+ <a name='L124'></a><a href='#L124'>124</a>
173
+ <a name='L125'></a><a href='#L125'>125</a>
174
+ <a name='L126'></a><a href='#L126'>126</a>
175
+ <a name='L127'></a><a href='#L127'>127</a>
176
+ <a name='L128'></a><a href='#L128'>128</a>
177
+ <a name='L129'></a><a href='#L129'>129</a>
178
+ <a name='L130'></a><a href='#L130'>130</a>
179
+ <a name='L131'></a><a href='#L131'>131</a>
180
+ <a name='L132'></a><a href='#L132'>132</a>
181
+ <a name='L133'></a><a href='#L133'>133</a>
182
+ <a name='L134'></a><a href='#L134'>134</a>
183
+ <a name='L135'></a><a href='#L135'>135</a>
184
+ <a name='L136'></a><a href='#L136'>136</a>
185
+ <a name='L137'></a><a href='#L137'>137</a>
186
+ <a name='L138'></a><a href='#L138'>138</a>
187
+ <a name='L139'></a><a href='#L139'>139</a>
188
+ <a name='L140'></a><a href='#L140'>140</a>
189
+ <a name='L141'></a><a href='#L141'>141</a>
190
+ <a name='L142'></a><a href='#L142'>142</a>
191
+ <a name='L143'></a><a href='#L143'>143</a>
192
+ <a name='L144'></a><a href='#L144'>144</a>
193
+ <a name='L145'></a><a href='#L145'>145</a>
194
+ <a name='L146'></a><a href='#L146'>146</a>
195
+ <a name='L147'></a><a href='#L147'>147</a>
196
+ <a name='L148'></a><a href='#L148'>148</a>
197
+ <a name='L149'></a><a href='#L149'>149</a>
198
+ <a name='L150'></a><a href='#L150'>150</a>
199
+ <a name='L151'></a><a href='#L151'>151</a>
200
+ <a name='L152'></a><a href='#L152'>152</a>
201
+ <a name='L153'></a><a href='#L153'>153</a>
202
+ <a name='L154'></a><a href='#L154'>154</a>
203
+ <a name='L155'></a><a href='#L155'>155</a>
204
+ <a name='L156'></a><a href='#L156'>156</a>
205
+ <a name='L157'></a><a href='#L157'>157</a>
206
+ <a name='L158'></a><a href='#L158'>158</a>
207
+ <a name='L159'></a><a href='#L159'>159</a>
208
+ <a name='L160'></a><a href='#L160'>160</a>
209
+ <a name='L161'></a><a href='#L161'>161</a>
210
+ <a name='L162'></a><a href='#L162'>162</a>
211
+ <a name='L163'></a><a href='#L163'>163</a>
212
+ <a name='L164'></a><a href='#L164'>164</a>
213
+ <a name='L165'></a><a href='#L165'>165</a>
214
+ <a name='L166'></a><a href='#L166'>166</a>
215
+ <a name='L167'></a><a href='#L167'>167</a>
216
+ <a name='L168'></a><a href='#L168'>168</a>
217
+ <a name='L169'></a><a href='#L169'>169</a>
218
+ <a name='L170'></a><a href='#L170'>170</a>
219
+ <a name='L171'></a><a href='#L171'>171</a>
220
+ <a name='L172'></a><a href='#L172'>172</a>
221
+ <a name='L173'></a><a href='#L173'>173</a>
222
+ <a name='L174'></a><a href='#L174'>174</a>
223
+ <a name='L175'></a><a href='#L175'>175</a>
224
+ <a name='L176'></a><a href='#L176'>176</a>
225
+ <a name='L177'></a><a href='#L177'>177</a>
226
+ <a name='L178'></a><a href='#L178'>178</a>
227
+ <a name='L179'></a><a href='#L179'>179</a>
228
+ <a name='L180'></a><a href='#L180'>180</a>
229
+ <a name='L181'></a><a href='#L181'>181</a>
230
+ <a name='L182'></a><a href='#L182'>182</a>
231
+ <a name='L183'></a><a href='#L183'>183</a>
232
+ <a name='L184'></a><a href='#L184'>184</a>
233
+ <a name='L185'></a><a href='#L185'>185</a>
234
+ <a name='L186'></a><a href='#L186'>186</a>
235
+ <a name='L187'></a><a href='#L187'>187</a>
236
+ <a name='L188'></a><a href='#L188'>188</a>
237
+ <a name='L189'></a><a href='#L189'>189</a>
238
+ <a name='L190'></a><a href='#L190'>190</a>
239
+ <a name='L191'></a><a href='#L191'>191</a>
240
+ <a name='L192'></a><a href='#L192'>192</a>
241
+ <a name='L193'></a><a href='#L193'>193</a>
242
+ <a name='L194'></a><a href='#L194'>194</a>
243
+ <a name='L195'></a><a href='#L195'>195</a>
244
+ <a name='L196'></a><a href='#L196'>196</a>
245
+ <a name='L197'></a><a href='#L197'>197</a>
246
+ <a name='L198'></a><a href='#L198'>198</a>
247
+ <a name='L199'></a><a href='#L199'>199</a>
248
+ <a name='L200'></a><a href='#L200'>200</a>
249
+ <a name='L201'></a><a href='#L201'>201</a>
250
+ <a name='L202'></a><a href='#L202'>202</a>
251
+ <a name='L203'></a><a href='#L203'>203</a>
252
+ <a name='L204'></a><a href='#L204'>204</a>
253
+ <a name='L205'></a><a href='#L205'>205</a>
254
+ <a name='L206'></a><a href='#L206'>206</a>
255
+ <a name='L207'></a><a href='#L207'>207</a>
256
+ <a name='L208'></a><a href='#L208'>208</a>
257
+ <a name='L209'></a><a href='#L209'>209</a>
258
+ <a name='L210'></a><a href='#L210'>210</a>
259
+ <a name='L211'></a><a href='#L211'>211</a>
260
+ <a name='L212'></a><a href='#L212'>212</a>
261
+ <a name='L213'></a><a href='#L213'>213</a>
262
+ <a name='L214'></a><a href='#L214'>214</a>
263
+ <a name='L215'></a><a href='#L215'>215</a>
264
+ <a name='L216'></a><a href='#L216'>216</a>
265
+ <a name='L217'></a><a href='#L217'>217</a>
266
+ <a name='L218'></a><a href='#L218'>218</a>
267
+ <a name='L219'></a><a href='#L219'>219</a>
268
+ <a name='L220'></a><a href='#L220'>220</a>
269
+ <a name='L221'></a><a href='#L221'>221</a>
270
+ <a name='L222'></a><a href='#L222'>222</a>
271
+ <a name='L223'></a><a href='#L223'>223</a>
272
+ <a name='L224'></a><a href='#L224'>224</a>
273
+ <a name='L225'></a><a href='#L225'>225</a>
274
+ <a name='L226'></a><a href='#L226'>226</a>
275
+ <a name='L227'></a><a href='#L227'>227</a>
276
+ <a name='L228'></a><a href='#L228'>228</a>
277
+ <a name='L229'></a><a href='#L229'>229</a>
278
+ <a name='L230'></a><a href='#L230'>230</a>
279
+ <a name='L231'></a><a href='#L231'>231</a>
280
+ <a name='L232'></a><a href='#L232'>232</a>
281
+ <a name='L233'></a><a href='#L233'>233</a>
282
+ <a name='L234'></a><a href='#L234'>234</a>
283
+ <a name='L235'></a><a href='#L235'>235</a>
284
+ <a name='L236'></a><a href='#L236'>236</a>
285
+ <a name='L237'></a><a href='#L237'>237</a>
286
+ <a name='L238'></a><a href='#L238'>238</a>
287
+ <a name='L239'></a><a href='#L239'>239</a>
288
+ <a name='L240'></a><a href='#L240'>240</a>
289
+ <a name='L241'></a><a href='#L241'>241</a>
290
+ <a name='L242'></a><a href='#L242'>242</a>
291
+ <a name='L243'></a><a href='#L243'>243</a>
292
+ <a name='L244'></a><a href='#L244'>244</a>
293
+ <a name='L245'></a><a href='#L245'>245</a>
294
+ <a name='L246'></a><a href='#L246'>246</a>
295
+ <a name='L247'></a><a href='#L247'>247</a>
296
+ <a name='L248'></a><a href='#L248'>248</a>
297
+ <a name='L249'></a><a href='#L249'>249</a>
298
+ <a name='L250'></a><a href='#L250'>250</a>
299
+ <a name='L251'></a><a href='#L251'>251</a>
300
+ <a name='L252'></a><a href='#L252'>252</a>
301
+ <a name='L253'></a><a href='#L253'>253</a>
302
+ <a name='L254'></a><a href='#L254'>254</a>
303
+ <a name='L255'></a><a href='#L255'>255</a>
304
+ <a name='L256'></a><a href='#L256'>256</a>
305
+ <a name='L257'></a><a href='#L257'>257</a>
306
+ <a name='L258'></a><a href='#L258'>258</a>
307
+ <a name='L259'></a><a href='#L259'>259</a>
308
+ <a name='L260'></a><a href='#L260'>260</a>
309
+ <a name='L261'></a><a href='#L261'>261</a>
310
+ <a name='L262'></a><a href='#L262'>262</a>
311
+ <a name='L263'></a><a href='#L263'>263</a>
312
+ <a name='L264'></a><a href='#L264'>264</a>
313
+ <a name='L265'></a><a href='#L265'>265</a>
314
+ <a name='L266'></a><a href='#L266'>266</a>
315
+ <a name='L267'></a><a href='#L267'>267</a>
316
+ <a name='L268'></a><a href='#L268'>268</a>
317
+ <a name='L269'></a><a href='#L269'>269</a>
318
+ <a name='L270'></a><a href='#L270'>270</a>
319
+ <a name='L271'></a><a href='#L271'>271</a>
320
+ <a name='L272'></a><a href='#L272'>272</a>
321
+ <a name='L273'></a><a href='#L273'>273</a>
322
+ <a name='L274'></a><a href='#L274'>274</a>
323
+ <a name='L275'></a><a href='#L275'>275</a>
324
+ <a name='L276'></a><a href='#L276'>276</a>
325
+ <a name='L277'></a><a href='#L277'>277</a>
326
+ <a name='L278'></a><a href='#L278'>278</a>
327
+ <a name='L279'></a><a href='#L279'>279</a>
328
+ <a name='L280'></a><a href='#L280'>280</a>
329
+ <a name='L281'></a><a href='#L281'>281</a>
330
+ <a name='L282'></a><a href='#L282'>282</a>
331
+ <a name='L283'></a><a href='#L283'>283</a>
332
+ <a name='L284'></a><a href='#L284'>284</a>
333
+ <a name='L285'></a><a href='#L285'>285</a>
334
+ <a name='L286'></a><a href='#L286'>286</a>
335
+ <a name='L287'></a><a href='#L287'>287</a>
336
+ <a name='L288'></a><a href='#L288'>288</a>
337
+ <a name='L289'></a><a href='#L289'>289</a>
338
+ <a name='L290'></a><a href='#L290'>290</a>
339
+ <a name='L291'></a><a href='#L291'>291</a>
340
+ <a name='L292'></a><a href='#L292'>292</a>
341
+ <a name='L293'></a><a href='#L293'>293</a>
342
+ <a name='L294'></a><a href='#L294'>294</a>
343
+ <a name='L295'></a><a href='#L295'>295</a>
344
+ <a name='L296'></a><a href='#L296'>296</a>
345
+ <a name='L297'></a><a href='#L297'>297</a>
346
+ <a name='L298'></a><a href='#L298'>298</a>
347
+ <a name='L299'></a><a href='#L299'>299</a>
348
+ <a name='L300'></a><a href='#L300'>300</a>
349
+ <a name='L301'></a><a href='#L301'>301</a>
350
+ <a name='L302'></a><a href='#L302'>302</a>
351
+ <a name='L303'></a><a href='#L303'>303</a>
352
+ <a name='L304'></a><a href='#L304'>304</a>
353
+ <a name='L305'></a><a href='#L305'>305</a>
354
+ <a name='L306'></a><a href='#L306'>306</a>
355
+ <a name='L307'></a><a href='#L307'>307</a>
356
+ <a name='L308'></a><a href='#L308'>308</a>
357
+ <a name='L309'></a><a href='#L309'>309</a>
358
+ <a name='L310'></a><a href='#L310'>310</a>
359
+ <a name='L311'></a><a href='#L311'>311</a>
360
+ <a name='L312'></a><a href='#L312'>312</a>
361
+ <a name='L313'></a><a href='#L313'>313</a>
362
+ <a name='L314'></a><a href='#L314'>314</a>
363
+ <a name='L315'></a><a href='#L315'>315</a>
364
+ <a name='L316'></a><a href='#L316'>316</a>
365
+ <a name='L317'></a><a href='#L317'>317</a>
366
+ <a name='L318'></a><a href='#L318'>318</a>
367
+ <a name='L319'></a><a href='#L319'>319</a>
368
+ <a name='L320'></a><a href='#L320'>320</a>
369
+ <a name='L321'></a><a href='#L321'>321</a>
370
+ <a name='L322'></a><a href='#L322'>322</a>
371
+ <a name='L323'></a><a href='#L323'>323</a>
372
+ <a name='L324'></a><a href='#L324'>324</a>
373
+ <a name='L325'></a><a href='#L325'>325</a>
374
+ <a name='L326'></a><a href='#L326'>326</a>
375
+ <a name='L327'></a><a href='#L327'>327</a>
376
+ <a name='L328'></a><a href='#L328'>328</a>
377
+ <a name='L329'></a><a href='#L329'>329</a>
378
+ <a name='L330'></a><a href='#L330'>330</a>
379
+ <a name='L331'></a><a href='#L331'>331</a>
380
+ <a name='L332'></a><a href='#L332'>332</a>
381
+ <a name='L333'></a><a href='#L333'>333</a>
382
+ <a name='L334'></a><a href='#L334'>334</a>
383
+ <a name='L335'></a><a href='#L335'>335</a>
384
+ <a name='L336'></a><a href='#L336'>336</a>
385
+ <a name='L337'></a><a href='#L337'>337</a>
386
+ <a name='L338'></a><a href='#L338'>338</a>
387
+ <a name='L339'></a><a href='#L339'>339</a>
388
+ <a name='L340'></a><a href='#L340'>340</a>
389
+ <a name='L341'></a><a href='#L341'>341</a>
390
+ <a name='L342'></a><a href='#L342'>342</a>
391
+ <a name='L343'></a><a href='#L343'>343</a>
392
+ <a name='L344'></a><a href='#L344'>344</a>
393
+ <a name='L345'></a><a href='#L345'>345</a>
394
+ <a name='L346'></a><a href='#L346'>346</a>
395
+ <a name='L347'></a><a href='#L347'>347</a>
396
+ <a name='L348'></a><a href='#L348'>348</a>
397
+ <a name='L349'></a><a href='#L349'>349</a>
398
+ <a name='L350'></a><a href='#L350'>350</a>
399
+ <a name='L351'></a><a href='#L351'>351</a>
400
+ <a name='L352'></a><a href='#L352'>352</a>
401
+ <a name='L353'></a><a href='#L353'>353</a>
402
+ <a name='L354'></a><a href='#L354'>354</a>
403
+ <a name='L355'></a><a href='#L355'>355</a>
404
+ <a name='L356'></a><a href='#L356'>356</a>
405
+ <a name='L357'></a><a href='#L357'>357</a>
406
+ <a name='L358'></a><a href='#L358'>358</a>
407
+ <a name='L359'></a><a href='#L359'>359</a>
408
+ <a name='L360'></a><a href='#L360'>360</a>
409
+ <a name='L361'></a><a href='#L361'>361</a>
410
+ <a name='L362'></a><a href='#L362'>362</a>
411
+ <a name='L363'></a><a href='#L363'>363</a>
412
+ <a name='L364'></a><a href='#L364'>364</a>
413
+ <a name='L365'></a><a href='#L365'>365</a>
414
+ <a name='L366'></a><a href='#L366'>366</a>
415
+ <a name='L367'></a><a href='#L367'>367</a>
416
+ <a name='L368'></a><a href='#L368'>368</a>
417
+ <a name='L369'></a><a href='#L369'>369</a>
418
+ <a name='L370'></a><a href='#L370'>370</a>
419
+ <a name='L371'></a><a href='#L371'>371</a>
420
+ <a name='L372'></a><a href='#L372'>372</a>
421
+ <a name='L373'></a><a href='#L373'>373</a>
422
+ <a name='L374'></a><a href='#L374'>374</a>
423
+ <a name='L375'></a><a href='#L375'>375</a>
424
+ <a name='L376'></a><a href='#L376'>376</a>
425
+ <a name='L377'></a><a href='#L377'>377</a>
426
+ <a name='L378'></a><a href='#L378'>378</a>
427
+ <a name='L379'></a><a href='#L379'>379</a>
428
+ <a name='L380'></a><a href='#L380'>380</a>
429
+ <a name='L381'></a><a href='#L381'>381</a>
430
+ <a name='L382'></a><a href='#L382'>382</a>
431
+ <a name='L383'></a><a href='#L383'>383</a>
432
+ <a name='L384'></a><a href='#L384'>384</a>
433
+ <a name='L385'></a><a href='#L385'>385</a>
434
+ <a name='L386'></a><a href='#L386'>386</a>
435
+ <a name='L387'></a><a href='#L387'>387</a>
436
+ <a name='L388'></a><a href='#L388'>388</a>
437
+ <a name='L389'></a><a href='#L389'>389</a>
438
+ <a name='L390'></a><a href='#L390'>390</a>
439
+ <a name='L391'></a><a href='#L391'>391</a>
440
+ <a name='L392'></a><a href='#L392'>392</a>
441
+ <a name='L393'></a><a href='#L393'>393</a>
442
+ <a name='L394'></a><a href='#L394'>394</a>
443
+ <a name='L395'></a><a href='#L395'>395</a>
444
+ <a name='L396'></a><a href='#L396'>396</a>
445
+ <a name='L397'></a><a href='#L397'>397</a>
446
+ <a name='L398'></a><a href='#L398'>398</a>
447
+ <a name='L399'></a><a href='#L399'>399</a>
448
+ <a name='L400'></a><a href='#L400'>400</a>
449
+ <a name='L401'></a><a href='#L401'>401</a>
450
+ <a name='L402'></a><a href='#L402'>402</a>
451
+ <a name='L403'></a><a href='#L403'>403</a>
452
+ <a name='L404'></a><a href='#L404'>404</a>
453
+ <a name='L405'></a><a href='#L405'>405</a>
454
+ <a name='L406'></a><a href='#L406'>406</a>
455
+ <a name='L407'></a><a href='#L407'>407</a>
456
+ <a name='L408'></a><a href='#L408'>408</a>
457
+ <a name='L409'></a><a href='#L409'>409</a>
458
+ <a name='L410'></a><a href='#L410'>410</a>
459
+ <a name='L411'></a><a href='#L411'>411</a>
460
+ <a name='L412'></a><a href='#L412'>412</a>
461
+ <a name='L413'></a><a href='#L413'>413</a>
462
+ <a name='L414'></a><a href='#L414'>414</a>
463
+ <a name='L415'></a><a href='#L415'>415</a>
464
+ <a name='L416'></a><a href='#L416'>416</a>
465
+ <a name='L417'></a><a href='#L417'>417</a>
466
+ <a name='L418'></a><a href='#L418'>418</a>
467
+ <a name='L419'></a><a href='#L419'>419</a>
468
+ <a name='L420'></a><a href='#L420'>420</a>
469
+ <a name='L421'></a><a href='#L421'>421</a>
470
+ <a name='L422'></a><a href='#L422'>422</a>
471
+ <a name='L423'></a><a href='#L423'>423</a>
472
+ <a name='L424'></a><a href='#L424'>424</a>
473
+ <a name='L425'></a><a href='#L425'>425</a>
474
+ <a name='L426'></a><a href='#L426'>426</a>
475
+ <a name='L427'></a><a href='#L427'>427</a>
476
+ <a name='L428'></a><a href='#L428'>428</a>
477
+ <a name='L429'></a><a href='#L429'>429</a>
478
+ <a name='L430'></a><a href='#L430'>430</a>
479
+ <a name='L431'></a><a href='#L431'>431</a>
480
+ <a name='L432'></a><a href='#L432'>432</a>
481
+ <a name='L433'></a><a href='#L433'>433</a>
482
+ <a name='L434'></a><a href='#L434'>434</a>
483
+ <a name='L435'></a><a href='#L435'>435</a>
484
+ <a name='L436'></a><a href='#L436'>436</a>
485
+ <a name='L437'></a><a href='#L437'>437</a>
486
+ <a name='L438'></a><a href='#L438'>438</a>
487
+ <a name='L439'></a><a href='#L439'>439</a>
488
+ <a name='L440'></a><a href='#L440'>440</a>
489
+ <a name='L441'></a><a href='#L441'>441</a>
490
+ <a name='L442'></a><a href='#L442'>442</a>
491
+ <a name='L443'></a><a href='#L443'>443</a>
492
+ <a name='L444'></a><a href='#L444'>444</a>
493
+ <a name='L445'></a><a href='#L445'>445</a>
494
+ <a name='L446'></a><a href='#L446'>446</a>
495
+ <a name='L447'></a><a href='#L447'>447</a>
496
+ <a name='L448'></a><a href='#L448'>448</a>
497
+ <a name='L449'></a><a href='#L449'>449</a>
498
+ <a name='L450'></a><a href='#L450'>450</a>
499
+ <a name='L451'></a><a href='#L451'>451</a>
500
+ <a name='L452'></a><a href='#L452'>452</a>
501
+ <a name='L453'></a><a href='#L453'>453</a>
502
+ <a name='L454'></a><a href='#L454'>454</a>
503
+ <a name='L455'></a><a href='#L455'>455</a>
504
+ <a name='L456'></a><a href='#L456'>456</a>
505
+ <a name='L457'></a><a href='#L457'>457</a>
506
+ <a name='L458'></a><a href='#L458'>458</a>
507
+ <a name='L459'></a><a href='#L459'>459</a>
508
+ <a name='L460'></a><a href='#L460'>460</a>
509
+ <a name='L461'></a><a href='#L461'>461</a>
510
+ <a name='L462'></a><a href='#L462'>462</a>
511
+ <a name='L463'></a><a href='#L463'>463</a>
512
+ <a name='L464'></a><a href='#L464'>464</a>
513
+ <a name='L465'></a><a href='#L465'>465</a>
514
+ <a name='L466'></a><a href='#L466'>466</a>
515
+ <a name='L467'></a><a href='#L467'>467</a>
516
+ <a name='L468'></a><a href='#L468'>468</a>
517
+ <a name='L469'></a><a href='#L469'>469</a>
518
+ <a name='L470'></a><a href='#L470'>470</a>
519
+ <a name='L471'></a><a href='#L471'>471</a>
520
+ <a name='L472'></a><a href='#L472'>472</a>
521
+ <a name='L473'></a><a href='#L473'>473</a>
522
+ <a name='L474'></a><a href='#L474'>474</a>
523
+ <a name='L475'></a><a href='#L475'>475</a>
524
+ <a name='L476'></a><a href='#L476'>476</a>
525
+ <a name='L477'></a><a href='#L477'>477</a>
526
+ <a name='L478'></a><a href='#L478'>478</a>
527
+ <a name='L479'></a><a href='#L479'>479</a>
528
+ <a name='L480'></a><a href='#L480'>480</a>
529
+ <a name='L481'></a><a href='#L481'>481</a>
530
+ <a name='L482'></a><a href='#L482'>482</a>
531
+ <a name='L483'></a><a href='#L483'>483</a>
532
+ <a name='L484'></a><a href='#L484'>484</a>
533
+ <a name='L485'></a><a href='#L485'>485</a>
534
+ <a name='L486'></a><a href='#L486'>486</a>
535
+ <a name='L487'></a><a href='#L487'>487</a>
536
+ <a name='L488'></a><a href='#L488'>488</a>
537
+ <a name='L489'></a><a href='#L489'>489</a>
538
+ <a name='L490'></a><a href='#L490'>490</a>
539
+ <a name='L491'></a><a href='#L491'>491</a>
540
+ <a name='L492'></a><a href='#L492'>492</a>
541
+ <a name='L493'></a><a href='#L493'>493</a>
542
+ <a name='L494'></a><a href='#L494'>494</a>
543
+ <a name='L495'></a><a href='#L495'>495</a>
544
+ <a name='L496'></a><a href='#L496'>496</a>
545
+ <a name='L497'></a><a href='#L497'>497</a>
546
+ <a name='L498'></a><a href='#L498'>498</a>
547
+ <a name='L499'></a><a href='#L499'>499</a>
548
+ <a name='L500'></a><a href='#L500'>500</a>
549
+ <a name='L501'></a><a href='#L501'>501</a>
550
+ <a name='L502'></a><a href='#L502'>502</a>
551
+ <a name='L503'></a><a href='#L503'>503</a>
552
+ <a name='L504'></a><a href='#L504'>504</a>
553
+ <a name='L505'></a><a href='#L505'>505</a>
554
+ <a name='L506'></a><a href='#L506'>506</a>
555
+ <a name='L507'></a><a href='#L507'>507</a>
556
+ <a name='L508'></a><a href='#L508'>508</a>
557
+ <a name='L509'></a><a href='#L509'>509</a>
558
+ <a name='L510'></a><a href='#L510'>510</a>
559
+ <a name='L511'></a><a href='#L511'>511</a>
560
+ <a name='L512'></a><a href='#L512'>512</a>
561
+ <a name='L513'></a><a href='#L513'>513</a>
562
+ <a name='L514'></a><a href='#L514'>514</a>
563
+ <a name='L515'></a><a href='#L515'>515</a>
564
+ <a name='L516'></a><a href='#L516'>516</a>
565
+ <a name='L517'></a><a href='#L517'>517</a>
566
+ <a name='L518'></a><a href='#L518'>518</a>
567
+ <a name='L519'></a><a href='#L519'>519</a>
568
+ <a name='L520'></a><a href='#L520'>520</a>
569
+ <a name='L521'></a><a href='#L521'>521</a>
570
+ <a name='L522'></a><a href='#L522'>522</a>
571
+ <a name='L523'></a><a href='#L523'>523</a>
572
+ <a name='L524'></a><a href='#L524'>524</a>
573
+ <a name='L525'></a><a href='#L525'>525</a>
574
+ <a name='L526'></a><a href='#L526'>526</a>
575
+ <a name='L527'></a><a href='#L527'>527</a>
576
+ <a name='L528'></a><a href='#L528'>528</a>
577
+ <a name='L529'></a><a href='#L529'>529</a>
578
+ <a name='L530'></a><a href='#L530'>530</a>
579
+ <a name='L531'></a><a href='#L531'>531</a>
580
+ <a name='L532'></a><a href='#L532'>532</a>
581
+ <a name='L533'></a><a href='#L533'>533</a>
582
+ <a name='L534'></a><a href='#L534'>534</a>
583
+ <a name='L535'></a><a href='#L535'>535</a>
584
+ <a name='L536'></a><a href='#L536'>536</a>
585
+ <a name='L537'></a><a href='#L537'>537</a>
586
+ <a name='L538'></a><a href='#L538'>538</a>
587
+ <a name='L539'></a><a href='#L539'>539</a>
588
+ <a name='L540'></a><a href='#L540'>540</a>
589
+ <a name='L541'></a><a href='#L541'>541</a>
590
+ <a name='L542'></a><a href='#L542'>542</a>
591
+ <a name='L543'></a><a href='#L543'>543</a>
592
+ <a name='L544'></a><a href='#L544'>544</a>
593
+ <a name='L545'></a><a href='#L545'>545</a>
594
+ <a name='L546'></a><a href='#L546'>546</a>
595
+ <a name='L547'></a><a href='#L547'>547</a>
596
+ <a name='L548'></a><a href='#L548'>548</a>
597
+ <a name='L549'></a><a href='#L549'>549</a>
598
+ <a name='L550'></a><a href='#L550'>550</a>
599
+ <a name='L551'></a><a href='#L551'>551</a>
600
+ <a name='L552'></a><a href='#L552'>552</a>
601
+ <a name='L553'></a><a href='#L553'>553</a>
602
+ <a name='L554'></a><a href='#L554'>554</a>
603
+ <a name='L555'></a><a href='#L555'>555</a>
604
+ <a name='L556'></a><a href='#L556'>556</a>
605
+ <a name='L557'></a><a href='#L557'>557</a>
606
+ <a name='L558'></a><a href='#L558'>558</a>
607
+ <a name='L559'></a><a href='#L559'>559</a>
608
+ <a name='L560'></a><a href='#L560'>560</a>
609
+ <a name='L561'></a><a href='#L561'>561</a>
610
+ <a name='L562'></a><a href='#L562'>562</a>
611
+ <a name='L563'></a><a href='#L563'>563</a>
612
+ <a name='L564'></a><a href='#L564'>564</a>
613
+ <a name='L565'></a><a href='#L565'>565</a>
614
+ <a name='L566'></a><a href='#L566'>566</a>
615
+ <a name='L567'></a><a href='#L567'>567</a>
616
+ <a name='L568'></a><a href='#L568'>568</a>
617
+ <a name='L569'></a><a href='#L569'>569</a>
618
+ <a name='L570'></a><a href='#L570'>570</a>
619
+ <a name='L571'></a><a href='#L571'>571</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
620
+ <span class="cline-any cline-yes">1x</span>
621
+ <span class="cline-any cline-neutral">&nbsp;</span>
622
+ <span class="cline-any cline-yes">1x</span>
623
+ <span class="cline-any cline-yes">1x</span>
624
+ <span class="cline-any cline-neutral">&nbsp;</span>
625
+ <span class="cline-any cline-neutral">&nbsp;</span>
626
+ <span class="cline-any cline-yes">1x</span>
627
+ <span class="cline-any cline-neutral">&nbsp;</span>
628
+ <span class="cline-any cline-yes">1x</span>
629
+ <span class="cline-any cline-neutral">&nbsp;</span>
630
+ <span class="cline-any cline-neutral">&nbsp;</span>
631
+ <span class="cline-any cline-yes">1x</span>
632
+ <span class="cline-any cline-neutral">&nbsp;</span>
633
+ <span class="cline-any cline-neutral">&nbsp;</span>
634
+ <span class="cline-any cline-neutral">&nbsp;</span>
635
+ <span class="cline-any cline-neutral">&nbsp;</span>
636
+ <span class="cline-any cline-neutral">&nbsp;</span>
637
+ <span class="cline-any cline-neutral">&nbsp;</span>
638
+ <span class="cline-any cline-neutral">&nbsp;</span>
639
+ <span class="cline-any cline-neutral">&nbsp;</span>
640
+ <span class="cline-any cline-neutral">&nbsp;</span>
641
+ <span class="cline-any cline-neutral">&nbsp;</span>
642
+ <span class="cline-any cline-yes">1x</span>
588
643
  <span class="cline-any cline-neutral">&nbsp;</span>
589
- <span class="cline-any cline-yes">1×</span>
590
644
  <span class="cline-any cline-neutral">&nbsp;</span>
591
645
  <span class="cline-any cline-neutral">&nbsp;</span>
592
- <span class="cline-any cline-yes">1×</span>
593
646
  <span class="cline-any cline-neutral">&nbsp;</span>
594
- <span class="cline-any cline-yes">1×</span>
595
647
  <span class="cline-any cline-neutral">&nbsp;</span>
596
648
  <span class="cline-any cline-neutral">&nbsp;</span>
597
- <span class="cline-any cline-yes">1×</span>
598
649
  <span class="cline-any cline-neutral">&nbsp;</span>
599
650
  <span class="cline-any cline-neutral">&nbsp;</span>
600
651
  <span class="cline-any cline-neutral">&nbsp;</span>
652
+ <span class="cline-any cline-no">&nbsp;</span>
653
+ <span class="cline-any cline-no">&nbsp;</span>
654
+ <span class="cline-any cline-no">&nbsp;</span>
601
655
  <span class="cline-any cline-neutral">&nbsp;</span>
602
656
  <span class="cline-any cline-neutral">&nbsp;</span>
603
657
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -605,7 +659,9 @@
605
659
  <span class="cline-any cline-neutral">&nbsp;</span>
606
660
  <span class="cline-any cline-neutral">&nbsp;</span>
607
661
  <span class="cline-any cline-neutral">&nbsp;</span>
608
- <span class="cline-any cline-yes">1×</span>
662
+ <span class="cline-any cline-no">&nbsp;</span>
663
+ <span class="cline-any cline-no">&nbsp;</span>
664
+ <span class="cline-any cline-no">&nbsp;</span>
609
665
  <span class="cline-any cline-neutral">&nbsp;</span>
610
666
  <span class="cline-any cline-neutral">&nbsp;</span>
611
667
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -615,8 +671,6 @@
615
671
  <span class="cline-any cline-neutral">&nbsp;</span>
616
672
  <span class="cline-any cline-neutral">&nbsp;</span>
617
673
  <span class="cline-any cline-no">&nbsp;</span>
618
- <span class="cline-any cline-no">&nbsp;</span>
619
- <span class="cline-any cline-no">&nbsp;</span>
620
674
  <span class="cline-any cline-neutral">&nbsp;</span>
621
675
  <span class="cline-any cline-neutral">&nbsp;</span>
622
676
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -634,7 +688,8 @@
634
688
  <span class="cline-any cline-neutral">&nbsp;</span>
635
689
  <span class="cline-any cline-neutral">&nbsp;</span>
636
690
  <span class="cline-any cline-neutral">&nbsp;</span>
637
- <span class="cline-any cline-yes">16×</span>
691
+ <span class="cline-any cline-no">&nbsp;</span>
692
+ <span class="cline-any cline-no">&nbsp;</span>
638
693
  <span class="cline-any cline-neutral">&nbsp;</span>
639
694
  <span class="cline-any cline-neutral">&nbsp;</span>
640
695
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -642,18 +697,16 @@
642
697
  <span class="cline-any cline-neutral">&nbsp;</span>
643
698
  <span class="cline-any cline-neutral">&nbsp;</span>
644
699
  <span class="cline-any cline-neutral">&nbsp;</span>
645
- <span class="cline-any cline-yes">2×</span>
646
- <span class="cline-any cline-yes">2×</span>
647
- <span class="cline-any cline-yes">2×</span>
648
700
  <span class="cline-any cline-neutral">&nbsp;</span>
649
701
  <span class="cline-any cline-neutral">&nbsp;</span>
702
+ <span class="cline-any cline-no">&nbsp;</span>
703
+ <span class="cline-any cline-no">&nbsp;</span>
704
+ <span class="cline-any cline-no">&nbsp;</span>
650
705
  <span class="cline-any cline-neutral">&nbsp;</span>
651
706
  <span class="cline-any cline-neutral">&nbsp;</span>
652
707
  <span class="cline-any cline-neutral">&nbsp;</span>
653
708
  <span class="cline-any cline-neutral">&nbsp;</span>
654
709
  <span class="cline-any cline-neutral">&nbsp;</span>
655
- <span class="cline-any cline-yes">168×</span>
656
- <span class="cline-any cline-yes">168×</span>
657
710
  <span class="cline-any cline-neutral">&nbsp;</span>
658
711
  <span class="cline-any cline-neutral">&nbsp;</span>
659
712
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -663,9 +716,6 @@
663
716
  <span class="cline-any cline-neutral">&nbsp;</span>
664
717
  <span class="cline-any cline-neutral">&nbsp;</span>
665
718
  <span class="cline-any cline-neutral">&nbsp;</span>
666
- <span class="cline-any cline-no">&nbsp;</span>
667
- <span class="cline-any cline-no">&nbsp;</span>
668
- <span class="cline-any cline-no">&nbsp;</span>
669
719
  <span class="cline-any cline-neutral">&nbsp;</span>
670
720
  <span class="cline-any cline-neutral">&nbsp;</span>
671
721
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -689,51 +739,55 @@
689
739
  <span class="cline-any cline-neutral">&nbsp;</span>
690
740
  <span class="cline-any cline-neutral">&nbsp;</span>
691
741
  <span class="cline-any cline-neutral">&nbsp;</span>
742
+ <span class="cline-any cline-yes">1x</span>
692
743
  <span class="cline-any cline-neutral">&nbsp;</span>
744
+ <span class="cline-any cline-no">&nbsp;</span>
745
+ <span class="cline-any cline-no">&nbsp;</span>
746
+ <span class="cline-any cline-no">&nbsp;</span>
693
747
  <span class="cline-any cline-neutral">&nbsp;</span>
694
748
  <span class="cline-any cline-neutral">&nbsp;</span>
695
749
  <span class="cline-any cline-neutral">&nbsp;</span>
696
750
  <span class="cline-any cline-neutral">&nbsp;</span>
697
751
  <span class="cline-any cline-neutral">&nbsp;</span>
698
752
  <span class="cline-any cline-neutral">&nbsp;</span>
753
+ <span class="cline-any cline-no">&nbsp;</span>
754
+ <span class="cline-any cline-no">&nbsp;</span>
755
+ <span class="cline-any cline-no">&nbsp;</span>
756
+ <span class="cline-any cline-neutral">&nbsp;</span>
699
757
  <span class="cline-any cline-neutral">&nbsp;</span>
700
758
  <span class="cline-any cline-neutral">&nbsp;</span>
701
759
  <span class="cline-any cline-neutral">&nbsp;</span>
702
760
  <span class="cline-any cline-neutral">&nbsp;</span>
703
761
  <span class="cline-any cline-neutral">&nbsp;</span>
762
+ <span class="cline-any cline-no">&nbsp;</span>
763
+ <span class="cline-any cline-no">&nbsp;</span>
764
+ <span class="cline-any cline-no">&nbsp;</span>
704
765
  <span class="cline-any cline-neutral">&nbsp;</span>
705
- <span class="cline-any cline-yes">1×</span>
706
766
  <span class="cline-any cline-neutral">&nbsp;</span>
707
- <span class="cline-any cline-yes">20×</span>
708
- <span class="cline-any cline-yes">20×</span>
709
- <span class="cline-any cline-yes">20×</span>
710
767
  <span class="cline-any cline-neutral">&nbsp;</span>
711
768
  <span class="cline-any cline-neutral">&nbsp;</span>
712
769
  <span class="cline-any cline-neutral">&nbsp;</span>
713
770
  <span class="cline-any cline-neutral">&nbsp;</span>
771
+ <span class="cline-any cline-no">&nbsp;</span>
772
+ <span class="cline-any cline-no">&nbsp;</span>
773
+ <span class="cline-any cline-no">&nbsp;</span>
714
774
  <span class="cline-any cline-neutral">&nbsp;</span>
715
775
  <span class="cline-any cline-neutral">&nbsp;</span>
716
- <span class="cline-any cline-yes">28×</span>
717
- <span class="cline-any cline-yes">28×</span>
718
- <span class="cline-any cline-yes">28×</span>
719
776
  <span class="cline-any cline-neutral">&nbsp;</span>
720
777
  <span class="cline-any cline-neutral">&nbsp;</span>
721
778
  <span class="cline-any cline-neutral">&nbsp;</span>
722
779
  <span class="cline-any cline-neutral">&nbsp;</span>
723
780
  <span class="cline-any cline-neutral">&nbsp;</span>
781
+ <span class="cline-any cline-no">&nbsp;</span>
782
+ <span class="cline-any cline-no">&nbsp;</span>
724
783
  <span class="cline-any cline-neutral">&nbsp;</span>
725
- <span class="cline-any cline-yes">98398×</span>
726
- <span class="cline-any cline-yes">98398×</span>
727
- <span class="cline-any cline-yes">98398×</span>
728
784
  <span class="cline-any cline-neutral">&nbsp;</span>
729
785
  <span class="cline-any cline-neutral">&nbsp;</span>
730
786
  <span class="cline-any cline-neutral">&nbsp;</span>
731
787
  <span class="cline-any cline-neutral">&nbsp;</span>
732
788
  <span class="cline-any cline-neutral">&nbsp;</span>
789
+ <span class="cline-any cline-no">&nbsp;</span>
733
790
  <span class="cline-any cline-neutral">&nbsp;</span>
734
- <span class="cline-any cline-yes">43×</span>
735
- <span class="cline-any cline-yes">43×</span>
736
- <span class="cline-any cline-yes">43×</span>
737
791
  <span class="cline-any cline-neutral">&nbsp;</span>
738
792
  <span class="cline-any cline-neutral">&nbsp;</span>
739
793
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -741,256 +795,257 @@
741
795
  <span class="cline-any cline-neutral">&nbsp;</span>
742
796
  <span class="cline-any cline-neutral">&nbsp;</span>
743
797
  <span class="cline-any cline-no">&nbsp;</span>
744
- <span class="cline-any cline-no">&nbsp;</span>
745
798
  <span class="cline-any cline-neutral">&nbsp;</span>
746
799
  <span class="cline-any cline-neutral">&nbsp;</span>
747
800
  <span class="cline-any cline-neutral">&nbsp;</span>
748
801
  <span class="cline-any cline-neutral">&nbsp;</span>
749
802
  <span class="cline-any cline-neutral">&nbsp;</span>
750
803
  <span class="cline-any cline-neutral">&nbsp;</span>
751
- <span class="cline-any cline-no">&nbsp;</span>
752
804
  <span class="cline-any cline-neutral">&nbsp;</span>
753
805
  <span class="cline-any cline-neutral">&nbsp;</span>
754
806
  <span class="cline-any cline-neutral">&nbsp;</span>
807
+ <span class="cline-any cline-yes">1x</span>
808
+ <span class="cline-any cline-no">&nbsp;</span>
755
809
  <span class="cline-any cline-neutral">&nbsp;</span>
756
810
  <span class="cline-any cline-neutral">&nbsp;</span>
811
+ <span class="cline-any cline-yes">1x</span>
812
+ <span class="cline-any cline-no">&nbsp;</span>
813
+ <span class="cline-any cline-no">&nbsp;</span>
814
+ <span class="cline-any cline-no">&nbsp;</span>
815
+ <span class="cline-any cline-no">&nbsp;</span>
757
816
  <span class="cline-any cline-neutral">&nbsp;</span>
758
- <span class="cline-any cline-yes">63×</span>
817
+ <span class="cline-any cline-no">&nbsp;</span>
818
+ <span class="cline-any cline-no">&nbsp;</span>
759
819
  <span class="cline-any cline-neutral">&nbsp;</span>
760
820
  <span class="cline-any cline-neutral">&nbsp;</span>
761
821
  <span class="cline-any cline-neutral">&nbsp;</span>
822
+ <span class="cline-any cline-yes">1x</span>
823
+ <span class="cline-any cline-no">&nbsp;</span>
824
+ <span class="cline-any cline-no">&nbsp;</span>
825
+ <span class="cline-any cline-no">&nbsp;</span>
826
+ <span class="cline-any cline-no">&nbsp;</span>
762
827
  <span class="cline-any cline-neutral">&nbsp;</span>
828
+ <span class="cline-any cline-no">&nbsp;</span>
829
+ <span class="cline-any cline-no">&nbsp;</span>
763
830
  <span class="cline-any cline-neutral">&nbsp;</span>
764
831
  <span class="cline-any cline-neutral">&nbsp;</span>
765
- <span class="cline-any cline-yes">1×</span>
766
- <span class="cline-any cline-yes">98724×</span>
767
832
  <span class="cline-any cline-neutral">&nbsp;</span>
833
+ <span class="cline-any cline-yes">1x</span>
768
834
  <span class="cline-any cline-neutral">&nbsp;</span>
769
- <span class="cline-any cline-yes">1×</span>
770
- <span class="cline-any cline-yes">98552×</span>
771
- <span class="cline-any cline-yes">98552×</span>
772
- <span class="cline-any cline-yes">98552×</span>
773
- <span class="cline-any cline-yes">428×</span>
835
+ <span class="cline-any cline-no">&nbsp;</span>
836
+ <span class="cline-any cline-no">&nbsp;</span>
837
+ <span class="cline-any cline-no">&nbsp;</span>
774
838
  <span class="cline-any cline-neutral">&nbsp;</span>
775
- <span class="cline-any cline-yes">98124×</span>
776
- <span class="cline-any cline-yes">98124×</span>
777
839
  <span class="cline-any cline-neutral">&nbsp;</span>
778
840
  <span class="cline-any cline-neutral">&nbsp;</span>
841
+ <span class="cline-any cline-no">&nbsp;</span>
842
+ <span class="cline-any cline-no">&nbsp;</span>
843
+ <span class="cline-any cline-no">&nbsp;</span>
779
844
  <span class="cline-any cline-neutral">&nbsp;</span>
780
- <span class="cline-any cline-yes">1×</span>
781
- <span class="cline-any cline-yes">172×</span>
782
- <span class="cline-any cline-yes">172×</span>
783
- <span class="cline-any cline-yes">172×</span>
784
- <span class="cline-any cline-yes">168×</span>
785
845
  <span class="cline-any cline-neutral">&nbsp;</span>
786
- <span class="cline-any cline-yes">4×</span>
787
- <span class="cline-any cline-yes">4×</span>
788
846
  <span class="cline-any cline-neutral">&nbsp;</span>
789
847
  <span class="cline-any cline-neutral">&nbsp;</span>
848
+ <span class="cline-any cline-yes">1x</span>
790
849
  <span class="cline-any cline-neutral">&nbsp;</span>
791
- <span class="cline-any cline-yes">1×</span>
850
+ <span class="cline-any cline-no">&nbsp;</span>
792
851
  <span class="cline-any cline-neutral">&nbsp;</span>
793
- <span class="cline-any cline-yes">401×</span>
794
- <span class="cline-any cline-yes">5642×</span>
795
- <span class="cline-any cline-yes">8×</span>
796
852
  <span class="cline-any cline-neutral">&nbsp;</span>
797
853
  <span class="cline-any cline-neutral">&nbsp;</span>
798
854
  <span class="cline-any cline-neutral">&nbsp;</span>
799
- <span class="cline-any cline-yes">401×</span>
800
- <span class="cline-any cline-yes">5641×</span>
801
- <span class="cline-any cline-yes">8×</span>
802
855
  <span class="cline-any cline-neutral">&nbsp;</span>
803
856
  <span class="cline-any cline-neutral">&nbsp;</span>
804
857
  <span class="cline-any cline-neutral">&nbsp;</span>
805
858
  <span class="cline-any cline-neutral">&nbsp;</span>
806
- <span class="cline-any cline-yes">1×</span>
807
- <span class="cline-any cline-yes">409×</span>
808
- <span class="cline-any cline-yes">409×</span>
809
859
  <span class="cline-any cline-neutral">&nbsp;</span>
810
860
  <span class="cline-any cline-neutral">&nbsp;</span>
811
861
  <span class="cline-any cline-neutral">&nbsp;</span>
812
862
  <span class="cline-any cline-neutral">&nbsp;</span>
813
863
  <span class="cline-any cline-neutral">&nbsp;</span>
814
864
  <span class="cline-any cline-neutral">&nbsp;</span>
865
+ <span class="cline-any cline-no">&nbsp;</span>
866
+ <span class="cline-any cline-no">&nbsp;</span>
867
+ <span class="cline-any cline-no">&nbsp;</span>
815
868
  <span class="cline-any cline-neutral">&nbsp;</span>
816
869
  <span class="cline-any cline-neutral">&nbsp;</span>
817
- <span class="cline-any cline-yes">409×</span>
818
- <span class="cline-any cline-yes">409×</span>
819
- <span class="cline-any cline-yes">409×</span>
820
- <span class="cline-any cline-yes">409×</span>
821
- <span class="cline-any cline-yes">409×</span>
822
- <span class="cline-any cline-yes">409×</span>
823
- <span class="cline-any cline-yes">409×</span>
824
- <span class="cline-any cline-yes">409×</span>
825
- <span class="cline-any cline-yes">409×</span>
870
+ <span class="cline-any cline-no">&nbsp;</span>
871
+ <span class="cline-any cline-no">&nbsp;</span>
826
872
  <span class="cline-any cline-neutral">&nbsp;</span>
827
873
  <span class="cline-any cline-neutral">&nbsp;</span>
828
- <span class="cline-any cline-yes">409×</span>
829
- <span class="cline-any cline-yes">3028×</span>
874
+ <span class="cline-any cline-no">&nbsp;</span>
875
+ <span class="cline-any cline-no">&nbsp;</span>
830
876
  <span class="cline-any cline-neutral">&nbsp;</span>
831
877
  <span class="cline-any cline-neutral">&nbsp;</span>
832
- <span class="cline-any cline-yes">345×</span>
833
- <span class="cline-any cline-yes">2683×</span>
878
+ <span class="cline-any cline-no">&nbsp;</span>
879
+ <span class="cline-any cline-no">&nbsp;</span>
880
+ <span class="cline-any cline-no">&nbsp;</span>
881
+ <span class="cline-any cline-neutral">&nbsp;</span>
834
882
  <span class="cline-any cline-neutral">&nbsp;</span>
835
883
  <span class="cline-any cline-neutral">&nbsp;</span>
836
- <span class="cline-any cline-yes">202×</span>
837
- <span class="cline-any cline-yes">202×</span>
838
- <span class="cline-any cline-yes">202×</span>
839
884
  <span class="cline-any cline-neutral">&nbsp;</span>
840
885
  <span class="cline-any cline-neutral">&nbsp;</span>
841
886
  <span class="cline-any cline-neutral">&nbsp;</span>
887
+ <span class="cline-any cline-no">&nbsp;</span>
888
+ <span class="cline-any cline-no">&nbsp;</span>
889
+ <span class="cline-any cline-no">&nbsp;</span>
842
890
  <span class="cline-any cline-neutral">&nbsp;</span>
843
891
  <span class="cline-any cline-neutral">&nbsp;</span>
892
+ <span class="cline-any cline-no">&nbsp;</span>
893
+ <span class="cline-any cline-no">&nbsp;</span>
894
+ <span class="cline-any cline-no">&nbsp;</span>
895
+ <span class="cline-any cline-no">&nbsp;</span>
844
896
  <span class="cline-any cline-neutral">&nbsp;</span>
845
- <span class="cline-any cline-yes">409×</span>
846
- <span class="cline-any cline-yes">2×</span>
847
- <span class="cline-any cline-yes">2×</span>
848
897
  <span class="cline-any cline-neutral">&nbsp;</span>
849
898
  <span class="cline-any cline-neutral">&nbsp;</span>
850
- <span class="cline-any cline-yes">407×</span>
851
- <span class="cline-any cline-yes">6663×</span>
852
- <span class="cline-any cline-yes">168×</span>
853
- <span class="cline-any cline-yes">4×</span>
854
899
  <span class="cline-any cline-neutral">&nbsp;</span>
855
900
  <span class="cline-any cline-neutral">&nbsp;</span>
901
+ <span class="cline-any cline-no">&nbsp;</span>
902
+ <span class="cline-any cline-no">&nbsp;</span>
856
903
  <span class="cline-any cline-neutral">&nbsp;</span>
904
+ <span class="cline-any cline-no">&nbsp;</span>
857
905
  <span class="cline-any cline-neutral">&nbsp;</span>
906
+ <span class="cline-any cline-no">&nbsp;</span>
907
+ <span class="cline-any cline-no">&nbsp;</span>
858
908
  <span class="cline-any cline-neutral">&nbsp;</span>
859
- <span class="cline-any cline-yes">6495×</span>
860
- <span class="cline-any cline-yes">6495×</span>
861
- <span class="cline-any cline-yes">231319×</span>
909
+ <span class="cline-any cline-no">&nbsp;</span>
910
+ <span class="cline-any cline-no">&nbsp;</span>
911
+ <span class="cline-any cline-no">&nbsp;</span>
912
+ <span class="cline-any cline-no">&nbsp;</span>
862
913
  <span class="cline-any cline-neutral">&nbsp;</span>
863
- <span class="cline-any cline-yes">6117×</span>
864
- <span class="cline-any cline-yes">6117×</span>
865
914
  <span class="cline-any cline-neutral">&nbsp;</span>
866
- <span class="cline-any cline-yes">6117×</span>
867
- <span class="cline-any cline-yes">20×</span>
868
- <span class="cline-any cline-yes">6097×</span>
869
915
  <span class="cline-any cline-no">&nbsp;</span>
916
+ <span class="cline-any cline-no">&nbsp;</span>
917
+ <span class="cline-any cline-no">&nbsp;</span>
918
+ <span class="cline-any cline-no">&nbsp;</span>
919
+ <span class="cline-any cline-neutral">&nbsp;</span>
870
920
  <span class="cline-any cline-neutral">&nbsp;</span>
871
- <span class="cline-any cline-yes">6097×</span>
872
- <span class="cline-any cline-yes">6097×</span>
873
- <span class="cline-any cline-yes">6097×</span>
874
- <span class="cline-any cline-yes">6097×</span>
921
+ <span class="cline-any cline-no">&nbsp;</span>
922
+ <span class="cline-any cline-no">&nbsp;</span>
875
923
  <span class="cline-any cline-neutral">&nbsp;</span>
924
+ <span class="cline-any cline-no">&nbsp;</span>
876
925
  <span class="cline-any cline-neutral">&nbsp;</span>
877
926
  <span class="cline-any cline-no">&nbsp;</span>
878
927
  <span class="cline-any cline-no">&nbsp;</span>
928
+ <span class="cline-any cline-no">&nbsp;</span>
929
+ <span class="cline-any cline-no">&nbsp;</span>
930
+ <span class="cline-any cline-no">&nbsp;</span>
931
+ <span class="cline-any cline-no">&nbsp;</span>
879
932
  <span class="cline-any cline-neutral">&nbsp;</span>
880
- <span class="cline-any cline-yes">225202×</span>
881
933
  <span class="cline-any cline-neutral">&nbsp;</span>
882
- <span class="cline-any cline-yes">6088×</span>
883
- <span class="cline-any cline-yes">6088×</span>
884
- <span class="cline-any cline-yes">6088×</span>
885
- <span class="cline-any cline-yes">28×</span>
886
- <span class="cline-any cline-yes">6060×</span>
934
+ <span class="cline-any cline-no">&nbsp;</span>
887
935
  <span class="cline-any cline-no">&nbsp;</span>
888
936
  <span class="cline-any cline-neutral">&nbsp;</span>
889
- <span class="cline-any cline-yes">6060×</span>
890
937
  <span class="cline-any cline-neutral">&nbsp;</span>
891
938
  <span class="cline-any cline-neutral">&nbsp;</span>
892
939
  <span class="cline-any cline-neutral">&nbsp;</span>
940
+ <span class="cline-any cline-no">&nbsp;</span>
941
+ <span class="cline-any cline-no">&nbsp;</span>
942
+ <span class="cline-any cline-no">&nbsp;</span>
943
+ <span class="cline-any cline-neutral">&nbsp;</span>
893
944
  <span class="cline-any cline-neutral">&nbsp;</span>
894
- <span class="cline-any cline-yes">6060×</span>
895
- <span class="cline-any cline-yes">87×</span>
896
- <span class="cline-any cline-yes">87×</span>
897
- <span class="cline-any cline-yes">87×</span>
945
+ <span class="cline-any cline-neutral">&nbsp;</span>
946
+ <span class="cline-any cline-no">&nbsp;</span>
947
+ <span class="cline-any cline-no">&nbsp;</span>
948
+ <span class="cline-any cline-no">&nbsp;</span>
949
+ <span class="cline-any cline-no">&nbsp;</span>
898
950
  <span class="cline-any cline-neutral">&nbsp;</span>
899
951
  <span class="cline-any cline-neutral">&nbsp;</span>
952
+ <span class="cline-any cline-no">&nbsp;</span>
953
+ <span class="cline-any cline-no">&nbsp;</span>
900
954
  <span class="cline-any cline-neutral">&nbsp;</span>
901
955
  <span class="cline-any cline-no">&nbsp;</span>
902
956
  <span class="cline-any cline-no">&nbsp;</span>
957
+ <span class="cline-any cline-neutral">&nbsp;</span>
903
958
  <span class="cline-any cline-no">&nbsp;</span>
904
959
  <span class="cline-any cline-no">&nbsp;</span>
905
960
  <span class="cline-any cline-neutral">&nbsp;</span>
961
+ <span class="cline-any cline-no">&nbsp;</span>
906
962
  <span class="cline-any cline-neutral">&nbsp;</span>
907
- <span class="cline-any cline-yes">219114×</span>
908
- <span class="cline-any cline-yes">219114×</span>
963
+ <span class="cline-any cline-no">&nbsp;</span>
964
+ <span class="cline-any cline-no">&nbsp;</span>
965
+ <span class="cline-any cline-no">&nbsp;</span>
966
+ <span class="cline-any cline-no">&nbsp;</span>
967
+ <span class="cline-any cline-no">&nbsp;</span>
909
968
  <span class="cline-any cline-neutral">&nbsp;</span>
910
- <span class="cline-any cline-yes">98398×</span>
911
- <span class="cline-any cline-yes">120716×</span>
912
- <span class="cline-any cline-yes">2×</span>
913
- <span class="cline-any cline-yes">2×</span>
969
+ <span class="cline-any cline-no">&nbsp;</span>
914
970
  <span class="cline-any cline-neutral">&nbsp;</span>
915
- <span class="cline-any cline-yes">120714×</span>
916
971
  <span class="cline-any cline-neutral">&nbsp;</span>
917
- <span class="cline-any cline-yes">11264×</span>
918
- <span class="cline-any cline-yes">11264×</span>
919
- <span class="cline-any cline-yes">11264×</span>
920
- <span class="cline-any cline-yes">43×</span>
921
- <span class="cline-any cline-yes">11221×</span>
972
+ <span class="cline-any cline-no">&nbsp;</span>
973
+ <span class="cline-any cline-no">&nbsp;</span>
922
974
  <span class="cline-any cline-no">&nbsp;</span>
923
975
  <span class="cline-any cline-neutral">&nbsp;</span>
924
976
  <span class="cline-any cline-neutral">&nbsp;</span>
925
- <span class="cline-any cline-yes">11221×</span>
926
- <span class="cline-any cline-yes">11221×</span>
927
- <span class="cline-any cline-yes">11221×</span>
928
977
  <span class="cline-any cline-neutral">&nbsp;</span>
929
- <span class="cline-any cline-yes">11221×</span>
930
- <span class="cline-any cline-yes">4540×</span>
931
- <span class="cline-any cline-yes">2250×</span>
932
- <span class="cline-any cline-yes">2250×</span>
933
- <span class="cline-any cline-yes">2250×</span>
978
+ <span class="cline-any cline-no">&nbsp;</span>
979
+ <span class="cline-any cline-no">&nbsp;</span>
934
980
  <span class="cline-any cline-neutral">&nbsp;</span>
935
- <span class="cline-any cline-yes">2290×</span>
936
- <span class="cline-any cline-yes">2290×</span>
937
- <span class="cline-any cline-yes">2290×</span>
981
+ <span class="cline-any cline-no">&nbsp;</span>
938
982
  <span class="cline-any cline-neutral">&nbsp;</span>
939
- <span class="cline-any cline-yes">6681×</span>
940
- <span class="cline-any cline-yes">6681×</span>
941
- <span class="cline-any cline-yes">6681×</span>
942
- <span class="cline-any cline-yes">6681×</span>
943
- <span class="cline-any cline-yes">63×</span>
944
- <span class="cline-any cline-yes">63×</span>
945
983
  <span class="cline-any cline-neutral">&nbsp;</span>
946
- <span class="cline-any cline-yes">6681×</span>
947
984
  <span class="cline-any cline-neutral">&nbsp;</span>
948
- <span class="cline-any cline-yes">11221×</span>
985
+ <span class="cline-any cline-no">&nbsp;</span>
986
+ <span class="cline-any cline-no">&nbsp;</span>
949
987
  <span class="cline-any cline-neutral">&nbsp;</span>
988
+ <span class="cline-any cline-no">&nbsp;</span>
950
989
  <span class="cline-any cline-neutral">&nbsp;</span>
951
990
  <span class="cline-any cline-neutral">&nbsp;</span>
991
+ <span class="cline-any cline-no">&nbsp;</span>
992
+ <span class="cline-any cline-no">&nbsp;</span>
952
993
  <span class="cline-any cline-neutral">&nbsp;</span>
994
+ <span class="cline-any cline-no">&nbsp;</span>
995
+ <span class="cline-any cline-no">&nbsp;</span>
996
+ <span class="cline-any cline-no">&nbsp;</span>
997
+ <span class="cline-any cline-no">&nbsp;</span>
998
+ <span class="cline-any cline-no">&nbsp;</span>
999
+ <span class="cline-any cline-no">&nbsp;</span>
953
1000
  <span class="cline-any cline-neutral">&nbsp;</span>
954
1001
  <span class="cline-any cline-no">&nbsp;</span>
955
1002
  <span class="cline-any cline-neutral">&nbsp;</span>
956
1003
  <span class="cline-any cline-no">&nbsp;</span>
957
1004
  <span class="cline-any cline-neutral">&nbsp;</span>
958
1005
  <span class="cline-any cline-neutral">&nbsp;</span>
959
- <span class="cline-any cline-yes">231317×</span>
960
1006
  <span class="cline-any cline-neutral">&nbsp;</span>
961
- <span class="cline-any cline-yes">6493×</span>
962
1007
  <span class="cline-any cline-neutral">&nbsp;</span>
963
1008
  <span class="cline-any cline-neutral">&nbsp;</span>
964
1009
  <span class="cline-any cline-no">&nbsp;</span>
1010
+ <span class="cline-any cline-neutral">&nbsp;</span>
965
1011
  <span class="cline-any cline-no">&nbsp;</span>
966
1012
  <span class="cline-any cline-neutral">&nbsp;</span>
967
1013
  <span class="cline-any cline-neutral">&nbsp;</span>
1014
+ <span class="cline-any cline-no">&nbsp;</span>
968
1015
  <span class="cline-any cline-neutral">&nbsp;</span>
1016
+ <span class="cline-any cline-no">&nbsp;</span>
969
1017
  <span class="cline-any cline-neutral">&nbsp;</span>
970
1018
  <span class="cline-any cline-neutral">&nbsp;</span>
1019
+ <span class="cline-any cline-no">&nbsp;</span>
1020
+ <span class="cline-any cline-no">&nbsp;</span>
971
1021
  <span class="cline-any cline-neutral">&nbsp;</span>
972
1022
  <span class="cline-any cline-neutral">&nbsp;</span>
973
1023
  <span class="cline-any cline-neutral">&nbsp;</span>
974
1024
  <span class="cline-any cline-neutral">&nbsp;</span>
975
- <span class="cline-any cline-yes">401×</span>
976
- <span class="cline-any cline-yes">401×</span>
977
1025
  <span class="cline-any cline-neutral">&nbsp;</span>
978
1026
  <span class="cline-any cline-neutral">&nbsp;</span>
979
- <span class="cline-any cline-yes">401×</span>
980
1027
  <span class="cline-any cline-neutral">&nbsp;</span>
981
1028
  <span class="cline-any cline-neutral">&nbsp;</span>
982
1029
  <span class="cline-any cline-neutral">&nbsp;</span>
1030
+ <span class="cline-any cline-no">&nbsp;</span>
1031
+ <span class="cline-any cline-no">&nbsp;</span>
1032
+ <span class="cline-any cline-neutral">&nbsp;</span>
1033
+ <span class="cline-any cline-neutral">&nbsp;</span>
1034
+ <span class="cline-any cline-no">&nbsp;</span>
1035
+ <span class="cline-any cline-neutral">&nbsp;</span>
983
1036
  <span class="cline-any cline-neutral">&nbsp;</span>
984
1037
  <span class="cline-any cline-neutral">&nbsp;</span>
985
1038
  <span class="cline-any cline-neutral">&nbsp;</span>
986
1039
  <span class="cline-any cline-neutral">&nbsp;</span>
987
- <span class="cline-any cline-yes">401×</span>
988
1040
  <span class="cline-any cline-neutral">&nbsp;</span>
989
1041
  <span class="cline-any cline-neutral">&nbsp;</span>
990
- <span class="cline-any cline-yes">1×</span>
991
- <span class="cline-any cline-no">&nbsp;</span>
992
1042
  <span class="cline-any cline-no">&nbsp;</span>
993
1043
  <span class="cline-any cline-neutral">&nbsp;</span>
1044
+ <span class="cline-any cline-neutral">&nbsp;</span>
1045
+ <span class="cline-any cline-yes">1x</span>
1046
+ <span class="cline-any cline-neutral">&nbsp;</span>
1047
+ <span class="cline-any cline-neutral">&nbsp;</span>
1048
+ <span class="cline-any cline-neutral">&nbsp;</span>
994
1049
  <span class="cline-any cline-no">&nbsp;</span>
995
1050
  <span class="cline-any cline-neutral">&nbsp;</span>
996
1051
  <span class="cline-any cline-no">&nbsp;</span>
@@ -1002,6 +1057,10 @@
1002
1057
  <span class="cline-any cline-no">&nbsp;</span>
1003
1058
  <span class="cline-any cline-no">&nbsp;</span>
1004
1059
  <span class="cline-any cline-neutral">&nbsp;</span>
1060
+ <span class="cline-any cline-neutral">&nbsp;</span>
1061
+ <span class="cline-any cline-no">&nbsp;</span>
1062
+ <span class="cline-any cline-no">&nbsp;</span>
1063
+ <span class="cline-any cline-neutral">&nbsp;</span>
1005
1064
  <span class="cline-any cline-no">&nbsp;</span>
1006
1065
  <span class="cline-any cline-neutral">&nbsp;</span>
1007
1066
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1009,7 +1068,7 @@
1009
1068
  <span class="cline-any cline-neutral">&nbsp;</span>
1010
1069
  <span class="cline-any cline-neutral">&nbsp;</span>
1011
1070
  <span class="cline-any cline-neutral">&nbsp;</span>
1012
- <span class="cline-any cline-yes">1×</span>
1071
+ <span class="cline-any cline-yes">1x</span>
1013
1072
  <span class="cline-any cline-no">&nbsp;</span>
1014
1073
  <span class="cline-any cline-no">&nbsp;</span>
1015
1074
  <span class="cline-any cline-no">&nbsp;</span>
@@ -1071,8 +1130,8 @@
1071
1130
  <span class="cline-any cline-neutral">&nbsp;</span>
1072
1131
  <span class="cline-any cline-neutral">&nbsp;</span>
1073
1132
  <span class="cline-any cline-neutral">&nbsp;</span>
1074
- <span class="cline-any cline-yes">1×</span>
1075
- <span class="cline-any cline-yes">2×</span>
1133
+ <span class="cline-any cline-yes">1x</span>
1134
+ <span class="cline-any cline-yes">2x</span>
1076
1135
  <span class="cline-any cline-neutral">&nbsp;</span>
1077
1136
  <span class="cline-any cline-neutral">&nbsp;</span>
1078
1137
  <span class="cline-any cline-no">&nbsp;</span>
@@ -1095,6 +1154,8 @@
1095
1154
  <span class="cline-any cline-neutral">&nbsp;</span>
1096
1155
  <span class="cline-any cline-neutral">&nbsp;</span>
1097
1156
  <span class="cline-any cline-neutral">&nbsp;</span>
1157
+ <span class="cline-any cline-neutral">&nbsp;</span>
1158
+ <span class="cline-any cline-neutral">&nbsp;</span>
1098
1159
  <span class="cline-any cline-no">&nbsp;</span>
1099
1160
  <span class="cline-any cline-neutral">&nbsp;</span>
1100
1161
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1108,6 +1169,7 @@
1108
1169
  <span class="cline-any cline-no">&nbsp;</span>
1109
1170
  <span class="cline-any cline-neutral">&nbsp;</span>
1110
1171
  <span class="cline-any cline-neutral">&nbsp;</span>
1172
+ <span class="cline-any cline-neutral">&nbsp;</span>
1111
1173
  <span class="cline-any cline-no">&nbsp;</span>
1112
1174
  <span class="cline-any cline-no">&nbsp;</span>
1113
1175
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1118,7 +1180,8 @@
1118
1180
  <span class="cline-any cline-neutral">&nbsp;</span>
1119
1181
  <span class="cline-any cline-neutral">&nbsp;</span>
1120
1182
  <span class="cline-any cline-neutral">&nbsp;</span>
1121
- <span class="cline-any cline-yes">2×</span>
1183
+ <span class="cline-any cline-neutral">&nbsp;</span>
1184
+ <span class="cline-any cline-yes">2x</span>
1122
1185
  <span class="cline-any cline-neutral">&nbsp;</span>
1123
1186
  <span class="cline-any cline-neutral">&nbsp;</span>
1124
1187
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1127,6 +1190,7 @@
1127
1190
  var xlsx = require("node-xlsx");
1128
1191
  // var util = require("util");
1129
1192
  var path = require("path");
1193
+ var parseAdditionalSheets = require(__dirname + "/additional-sheet-parser");
1130
1194
  // var cytoscape = require("cytoscape"); //NOTE: Commented out for issue #474
1131
1195
  &nbsp;
1132
1196
  var helpers = require(__dirname + "/helpers");
@@ -1149,13 +1213,14 @@ var errorList = {
1149
1213
  missingNetworkError: {
1150
1214
  errorCode: "MISSING_NETWORK",
1151
1215
  possibleCause: "This file does not have a 'network' sheet or a 'network_optimized_weights' sheet.",
1152
- suggestedFix: "Please select another file, or rename the sheet containing the adjacency matrix accordingly. Please refer to the " +
1153
- "&lt;a href='http://dondi.github.io/GRNsight/documentation.html#section1' target='_blank'&gt;Documentation page&lt;/a&gt; for more information."
1216
+ suggestedFix: "Please select another file, or rename the sheet containing the adjacency matrix accordingly. \
1217
+ Please refer to the " + "&lt;a href='http://dondi.github.io/GRNsight/documentation.html#section1' \
1218
+ target='_blank'&gt;Documentation page&lt;/a&gt; for more information."
1154
1219
  },
1155
1220
  &nbsp;
1156
- corruptGeneError: <span class="fstat-no" title="function not covered" >function (row, column) {</span>
1157
- <span class="cstat-no" title="statement not covered" > var colLetter = numbersToLetters[column];</span>
1158
- <span class="cstat-no" title="statement not covered" > var rowNum = row + 1;</span>
1221
+ corruptGeneError: <span class="fstat-no" title="function not covered" >fu</span>nction (row, column) {
1222
+ var colLetter = <span class="cstat-no" title="statement not covered" >numbersToLetters[column];</span>
1223
+ var rowNum = <span class="cstat-no" title="statement not covered" >row + 1;</span>
1159
1224
  <span class="cstat-no" title="statement not covered" > return {</span>
1160
1225
  errorCode: "CORRUPT_GENE",
1161
1226
  possibleCause: "The gene name in cell " + colLetter + rowNum + " appears to be invalid.",
@@ -1163,37 +1228,38 @@ var errorList = {
1163
1228
  };
1164
1229
  },
1165
1230
  &nbsp;
1166
- missingValueError: <span class="fstat-no" title="function not covered" >function (row, column) {</span>
1167
- <span class="cstat-no" title="statement not covered" > var colLetter = numbersToLetters[column];</span>
1168
- <span class="cstat-no" title="statement not covered" > var rowNum = row + 1;</span>
1231
+ missingValueError: <span class="fstat-no" title="function not covered" >fu</span>nction (row, column) {
1232
+ var colLetter = <span class="cstat-no" title="statement not covered" >numbersToLetters[column];</span>
1233
+ var rowNum = <span class="cstat-no" title="statement not covered" >row + 1;</span>
1169
1234
  <span class="cstat-no" title="statement not covered" > return {</span>
1170
1235
  errorCode: "MISSING_VALUE",
1171
- possibleCause: "The value in the cell " + colLetter + rowNum + " in the adjacency matrix appears to have a missing value.",
1236
+ possibleCause: "The value in the cell " + colLetter + rowNum +
1237
+ " in the adjacency matrix appears to have a missing value.",
1172
1238
  suggestedFix: "Please ensure that all cells have a value, then upload the file again."
1173
1239
  };
1174
1240
  },
1175
1241
  &nbsp;
1176
- duplicateGeneError: function(geneType, geneName) {
1177
- return {
1242
+ duplicateGeneError: <span class="fstat-no" title="function not covered" >fu</span>nction (geneType, geneName) {
1243
+ <span class="cstat-no" title="statement not covered" > return {</span>
1178
1244
  errorCode: "DUPLICATE_GENE",
1179
1245
  possibleCause: "There exists a duplicate for " + geneType + " gene " + geneName + ".",
1180
1246
  suggestedFix: "Please remove the duplicate gene and submit again."
1181
1247
  };
1182
1248
  },
1183
1249
  &nbsp;
1184
- dataTypeError: function (row, column) {
1185
- var colLetter = numbersToLetters[column];
1186
- var rowNum = row + 1;
1187
- return {
1250
+ dataTypeError: <span class="fstat-no" title="function not covered" >fu</span>nction (row, column) {
1251
+ var colLetter = <span class="cstat-no" title="statement not covered" >numbersToLetters[column];</span>
1252
+ var rowNum = <span class="cstat-no" title="statement not covered" >row + 1;</span>
1253
+ <span class="cstat-no" title="statement not covered" > return {</span>
1188
1254
  errorCode: "INVALID_CELL_DATA_TYPE",
1189
1255
  possibleCause: "The value in cell " + colLetter + rowNum + " is not a number.",
1190
1256
  suggestedFix: "Please ensure all values in the data matrix are numbers and try again."
1191
1257
  };
1192
1258
  },
1193
1259
  &nbsp;
1194
- emptyRowError: function (row) {
1195
- var rowNum = row + 1;
1196
- return {
1260
+ emptyRowError: <span class="fstat-no" title="function not covered" >fu</span>nction (row) {
1261
+ var rowNum = <span class="cstat-no" title="statement not covered" >row + 1;</span>
1262
+ <span class="cstat-no" title="statement not covered" > return {</span>
1197
1263
  errorCode: "EMPTY_ROW",
1198
1264
  possibleCause: "Row " + rowNum + " does not contain any data.",
1199
1265
  suggestedFix: "Please ensure all rows contain data and all empty rows are removed. " +
@@ -1202,9 +1268,9 @@ var errorList = {
1202
1268
  };
1203
1269
  },
1204
1270
  &nbsp;
1205
- outsideCellError: <span class="fstat-no" title="function not covered" >function (row, column) {</span>
1206
- <span class="cstat-no" title="statement not covered" > var colLetter = numbersToLetters[column];</span>
1207
- <span class="cstat-no" title="statement not covered" > var rowNum = row + 1;</span>
1271
+ outsideCellError: <span class="fstat-no" title="function not covered" >fu</span>nction (row, column) {
1272
+ var colLetter = <span class="cstat-no" title="statement not covered" >numbersToLetters[column];</span>
1273
+ var rowNum = <span class="cstat-no" title="statement not covered" >row + 1;</span>
1208
1274
  <span class="cstat-no" title="statement not covered" > return {</span>
1209
1275
  errorCode: "EMPTY_CELL",
1210
1276
  possibleCause: "The cell at " + colLetter + rowNum + " contains data that is outside the matrix.",
@@ -1234,7 +1300,8 @@ var errorList = {
1234
1300
  unknownError: {
1235
1301
  errorCode: "UNKNOWN_ERROR",
1236
1302
  possibleCause: "An unexpected error occurred.",
1237
- suggestedFix: "Please contact the GRNsight team at kdahlquist@lmu.edu, and attach the spreadsheet you attempted to upload."
1303
+ suggestedFix: "Please contact the GRNsight team at kdahlquist@lmu.edu, \
1304
+ and attach the spreadsheet you attempted to upload."
1238
1305
  }
1239
1306
  &nbsp;
1240
1307
  };
@@ -1243,109 +1310,114 @@ var errorList = {
1243
1310
  // This is the list of warnings.
1244
1311
  // The graph will still load if warnings are detected, but these will be reported to the user.
1245
1312
  var warningsList = {
1246
- missingSourceGeneWarning: function (row, column) {
1247
- var colLetter = numbersToLetters[column];
1248
- var rowNum = row + 1;
1249
- return {
1313
+ missingSourceGeneWarning: <span class="fstat-no" title="function not covered" >fu</span>nction (row, column) {
1314
+ var colLetter = <span class="cstat-no" title="statement not covered" >numbersToLetters[column];</span>
1315
+ var rowNum = <span class="cstat-no" title="statement not covered" >row + 1;</span>
1316
+ <span class="cstat-no" title="statement not covered" > return {</span>
1250
1317
  warningCode: "MISSING_SOURCE",
1251
1318
  errorDescription: "A source gene name is missing in cell " + colLetter + rowNum + "."
1252
1319
  };
1253
1320
  },
1254
1321
  &nbsp;
1255
- missingTargetGeneWarning: function (row, column) {
1256
- var colLetter = numbersToLetters[column];
1257
- var rowNum = row + 1;
1258
- return {
1322
+ missingTargetGeneWarning: <span class="fstat-no" title="function not covered" >fu</span>nction (row, column) {
1323
+ var colLetter = <span class="cstat-no" title="statement not covered" >numbersToLetters[column];</span>
1324
+ var rowNum = <span class="cstat-no" title="statement not covered" >row + 1;</span>
1325
+ <span class="cstat-no" title="statement not covered" > return {</span>
1259
1326
  warningCode: "MISSING_TARGET",
1260
1327
  errorDescription: "A target gene name is missing in cell " + colLetter + rowNum + "."
1261
1328
  };
1262
1329
  },
1263
1330
  &nbsp;
1264
- invalidMatrixDataWarning: function (row, column) {
1265
- var colLetter = numbersToLetters[column];
1266
- var rowNum = row + 1;
1267
- return {
1331
+ invalidMatrixDataWarning: <span class="fstat-no" title="function not covered" >fu</span>nction (row, column) {
1332
+ var colLetter = <span class="cstat-no" title="statement not covered" >numbersToLetters[column];</span>
1333
+ var rowNum = <span class="cstat-no" title="statement not covered" >row + 1;</span>
1334
+ <span class="cstat-no" title="statement not covered" > return {</span>
1268
1335
  warningCode: "INVALID_DATA",
1269
1336
  errorDescription: "The value in cell " + colLetter + rowNum + ", is undefined."
1270
1337
  };
1271
1338
  },
1272
1339
  &nbsp;
1273
- randomDataWarning: function (type, row, column) {
1274
- var colLetter = numbersToLetters[column];
1275
- var rowNum = row + 1;
1276
- return {
1340
+ randomDataWarning: <span class="fstat-no" title="function not covered" >fu</span>nction (type, row, column) {
1341
+ var colLetter = <span class="cstat-no" title="statement not covered" >numbersToLetters[column];</span>
1342
+ var rowNum = <span class="cstat-no" title="statement not covered" >row + 1;</span>
1343
+ <span class="cstat-no" title="statement not covered" > return {</span>
1277
1344
  warningCode: "RANDOM_DATA",
1278
- errorDescription: "The value in cell " + colLetter + rowNum + ", has a corresponding source and/or target gene that is detected as " + type + "."
1345
+ errorDescription: "The value in cell " + colLetter + rowNum +
1346
+ ", has a corresponding source and/or target gene that is detected as " + type + "."
1279
1347
  };
1280
1348
  },
1281
1349
  &nbsp;
1282
- emptyRowWarning: <span class="fstat-no" title="function not covered" >function (row) {</span>
1283
- <span class="cstat-no" title="statement not covered" > var rowNum = row + 1;</span>
1350
+ emptyRowWarning: <span class="fstat-no" title="function not covered" >fu</span>nction (row) {
1351
+ var rowNum = <span class="cstat-no" title="statement not covered" >row + 1;</span>
1284
1352
  <span class="cstat-no" title="statement not covered" > return {</span>
1285
1353
  warningCode: "EMPTY_ROW",
1286
1354
  errorDescription: "Row " + rowNum + " was found to contain no data."
1287
1355
  };
1288
1356
  },
1289
1357
  &nbsp;
1290
- networkSizeWarning: <span class="fstat-no" title="function not covered" >function (genesLength, edgesLength) {</span>
1358
+ networkSizeWarning: <span class="fstat-no" title="function not covered" >fu</span>nction (genesLength, edgesLength) {
1291
1359
  <span class="cstat-no" title="statement not covered" > return {</span>
1292
1360
  warningCode: "INVALID_NETWORK_SIZE",
1293
- errorDescription: "Your network has " + genesLength + " genes, and " + edgesLength + " edges. Please note that networks are recommended to have less than 50 genes and 100 edges."
1361
+ errorDescription: "Your network has " + genesLength + " genes, and " + edgesLength +
1362
+ " edges. Please note that networks are recommended to have less than 50 genes and 100 edges."
1294
1363
  };
1295
1364
  },
1296
1365
  &nbsp;
1297
- incorrectlyNamedSheetWarning: function() {
1298
- return {
1366
+ incorrectlyNamedSheetWarning: <span class="fstat-no" title="function not covered" >fu</span>nction () {
1367
+ <span class="cstat-no" title="statement not covered" > return {</span>
1299
1368
  warningCode: "INCORRECTLY_NAMED_SHEET",
1300
- errorDescription: "The uploaded file appears to contain a weighted network, but contains no 'network_optimized_weights' sheet. A weighted network must be contained in a sheet called 'network_optimized_weights' in order to be drawn as a weighted graph. Please check if the sheet(s) in the uploaded spreadsheet have been named properly."
1369
+ errorDescription: "The uploaded file appears to contain a weighted network, but contains no \
1370
+ 'network_optimized_weights' sheet. A weighted network must be contained in a sheet called \
1371
+ 'network_optimized_weights' in order to be drawn as a weighted graph. \
1372
+ Please check if the sheet(s) in the uploaded spreadsheet have been named properly."
1301
1373
  };
1302
1374
  }
1303
1375
  };
1304
1376
  &nbsp;
1305
- var addMessageToArray = function (messageArray, message) {
1306
- messageArray.push(message);
1377
+ var addMessageToArray = <span class="fstat-no" title="function not covered" >fu</span>nction (messageArray, message) {
1378
+ <span class="cstat-no" title="statement not covered" > messageArray.push(message);</span>
1307
1379
  };
1308
1380
  &nbsp;
1309
- var addWarning = function (network, message) {
1310
- var warningsCount = network.warnings.length;
1311
- var MAX_WARNINGS = 75;
1312
- if (warningsCount &lt; MAX_WARNINGS) {
1313
- addMessageToArray(network.warnings, message);
1381
+ var addWarning = <span class="fstat-no" title="function not covered" >fu</span>nction (network, message) {
1382
+ var warningsCount = <span class="cstat-no" title="statement not covered" >network.warnings.length;</span>
1383
+ var MAX_WARNINGS = <span class="cstat-no" title="statement not covered" >75;</span>
1384
+ <span class="cstat-no" title="statement not covered" > if (warningsCount &lt; MAX_WARNINGS) {</span>
1385
+ <span class="cstat-no" title="statement not covered" > addMessageToArray(network.warnings, message);</span>
1314
1386
  } else {
1315
- addMessageToArray(network.errors, errorList.warningsCountError);
1316
- return false;
1387
+ <span class="cstat-no" title="statement not covered" > addMessageToArray(network.errors, errorList.warningsCountError);</span>
1388
+ <span class="cstat-no" title="statement not covered" > return false;</span>
1317
1389
  }
1318
- }
1390
+ };
1319
1391
  &nbsp;
1320
- var addError = function (network, message) {
1321
- var errorsCount = network.errors.length;
1322
- var MAX_ERRORS = 20;
1323
- if (errorsCount &lt; MAX_ERRORS) {
1324
- addMessageToArray(network.errors, message);
1392
+ var addError = <span class="fstat-no" title="function not covered" >fu</span>nction (network, message) {
1393
+ var errorsCount = <span class="cstat-no" title="statement not covered" >network.errors.length;</span>
1394
+ var MAX_ERRORS = <span class="cstat-no" title="statement not covered" >20;</span>
1395
+ <span class="cstat-no" title="statement not covered" > if (errorsCount &lt; MAX_ERRORS) {</span>
1396
+ <span class="cstat-no" title="statement not covered" > addMessageToArray(network.errors, message);</span>
1325
1397
  } else {
1326
- addMessageToArray(network.errors, errorList.errorsCountError);
1327
- return false;
1398
+ <span class="cstat-no" title="statement not covered" > addMessageToArray(network.errors, errorList.errorsCountError);</span>
1399
+ <span class="cstat-no" title="statement not covered" > return false;</span>
1328
1400
  }
1329
1401
  };
1330
1402
  &nbsp;
1331
- var checkDuplicates = function(errorArray, sourceGenes, targetGenes) {
1403
+ var checkDuplicates = <span class="fstat-no" title="function not covered" >fu</span>nction (errorArray, sourceGenes, targetGenes) {
1332
1404
  // Run through the source genes and check if the gene in slot i is the same as the one next to it
1333
- for (var i = 0; i &lt; sourceGenes.length - 1; i++) {
1334
- if (sourceGenes[i] === sourceGenes[i + 1]) {
1335
- errorArray.push(errorList.duplicateGeneError("source", sourceGenes[i]));
1405
+ <span class="cstat-no" title="statement not covered" > for (var i = 0; i &lt; sourceGenes.length - 1; i++) {</span>
1406
+ <span class="cstat-no" title="statement not covered" > if (sourceGenes[i] === sourceGenes[i + 1]) {</span>
1407
+ <span class="cstat-no" title="statement not covered" > errorArray.push(errorList.duplicateGeneError("source", sourceGenes[i]));</span>
1336
1408
  }
1337
1409
  }
1338
1410
  // Run through the target genes and check if the gene in slot j is the same as the one next to it
1339
- for (var j = 0; j &lt; targetGenes.length - 1; j++) {
1340
- if (targetGenes[j] === targetGenes[j + 1]) {
1341
- errorArray.push(errorList.duplicateGeneError("target", targetGenes[j]));
1411
+ <span class="cstat-no" title="statement not covered" > for (var j = 0; j &lt; targetGenes.length - 1; j++) {</span>
1412
+ <span class="cstat-no" title="statement not covered" > if (targetGenes[j] === targetGenes[j + 1]) {</span>
1413
+ <span class="cstat-no" title="statement not covered" > errorArray.push(errorList.duplicateGeneError("target", targetGenes[j]));</span>
1342
1414
  }
1343
1415
  }
1344
1416
  };
1345
1417
  &nbsp;
1346
- var parseSheet = function(sheet) {
1418
+ var parseSheet = <span class="fstat-no" title="function not covered" >fu</span>nction (sheet) {
1347
1419
  var currentSheet;
1348
- var network = {
1420
+ var network = <span class="cstat-no" title="statement not covered" >{</span>
1349
1421
  genes: [],
1350
1422
  links: [],
1351
1423
  errors: [],
@@ -1360,81 +1432,84 @@ var parseSheet = function(sheet) {
1360
1432
  var targetGene;
1361
1433
  var sourceGeneNumber;
1362
1434
  var targetGeneNumber;
1363
- var genesList = []; // This will contain all of the genes in upper case for use in error checking
1364
- var sourceGenes = [];
1365
- var targetGenes = [];
1435
+ var genesList = <span class="cstat-no" title="statement not covered" >[];</span> // This will contain all of the genes in upper case for use in error checking
1436
+ var sourceGenes = <span class="cstat-no" title="statement not covered" >[];</span>
1437
+ var targetGenes = <span class="cstat-no" title="statement not covered" >[];</span>
1366
1438
  &nbsp;
1367
1439
  // Look for the worksheet containing the network data
1368
- for (var i = 0; i &lt; sheet.length; i++) {
1369
- if (sheet[i].name === "network") {
1440
+ <span class="cstat-no" title="statement not covered" > for (var i = 0; i &lt; sheet.length; i++) {</span>
1441
+ <span class="cstat-no" title="statement not covered" > if (sheet[i].name === "network") {</span>
1370
1442
  // Here we have found a sheet containing simple data. We keep looking
1371
1443
  // in case there is also a sheet with optimized weights
1372
- currentSheet = sheet[i];
1373
- } else if (sheet[i].name === "network_optimized_weights") {
1444
+ <span class="cstat-no" title="statement not covered" > currentSheet = sheet[i];</span>
1445
+ } else <span class="cstat-no" title="statement not covered" >if (sheet[i].name === "network_optimized_weights") {</span>
1374
1446
  // We found a sheet with optimized weights, which is the ideal data source.
1375
1447
  // So we stop looking.
1376
- currentSheet = sheet[i];
1377
- network.sheetType = "weighted";
1378
- break;
1448
+ <span class="cstat-no" title="statement not covered" > currentSheet = sheet[i];</span>
1449
+ <span class="cstat-no" title="statement not covered" > network.sheetType = "weighted";</span>
1450
+ <span class="cstat-no" title="statement not covered" > break;</span>
1379
1451
  }
1380
1452
  }
1381
1453
  &nbsp;
1382
1454
  // If it didn't find a network/network_optimized_weights sheet
1383
1455
  // TODO For expediency, we are wrapping every `return network` statement in `semanticChecker`.
1384
1456
  // Some refactoring may be desirable to prevent excessive repetition.
1385
- if (currentSheet === undefined) {
1386
- addError(network, errorList.missingNetworkError);
1387
- return network;
1457
+ <span class="cstat-no" title="statement not covered" > if (currentSheet === undefined) {</span>
1458
+ <span class="cstat-no" title="statement not covered" > addError(network, errorList.missingNetworkError);</span>
1459
+ <span class="cstat-no" title="statement not covered" > return network;</span>
1388
1460
  }
1389
1461
  &nbsp;
1390
- for (var row = 0, column = 1; row &lt; currentSheet.data.length; row++) {
1391
- if (currentSheet.data[row].length === 0) { // if the current row is empty
1392
- if (addError(network, errorList.emptyRowError(row)) === false) {
1393
- return network;
1462
+ <span class="cstat-no" title="statement not covered" > for (var row = 0, column = 1; row &lt; currentSheet.data.length; row++) {</span>
1463
+ <span class="cstat-no" title="statement not covered" > if (currentSheet.data[row].length === 0) { // if the current row is empty</span>
1464
+ <span class="cstat-no" title="statement not covered" > if (addError(network, errorList.emptyRowError(row)) === false) {</span>
1465
+ <span class="cstat-no" title="statement not covered" > return network;</span>
1394
1466
  }
1395
1467
  } else { // if the row has data...
1396
1468
  // Genes found when row = 0 are targets. Genes found when column = 0 are source genes.
1397
1469
  // We set column = 1 in the for loop so it skips row 0 column 0, since that contains no matrix data.
1398
1470
  // Yes, the rows and columns use array numbering. That is, they start at 0, not 1.
1399
- try { // This prevents the server from crashing if something goes wrong anywhere in here
1400
- while (column &lt; currentSheet.data[row].length) { // While we haven't gone through all of the columns in this row...
1401
- if (row === 0) { // If we are at the top of a new column...
1471
+ <span class="cstat-no" title="statement not covered" > try { // This prevents the server from crashing if something goes wrong anywhere in here</span>
1472
+ <span class="cstat-no" title="statement not covered" > while (column &lt; currentSheet.data[row].length) {</span>
1473
+ // While we haven't gone through all of the columns in this row...
1474
+ <span class="cstat-no" title="statement not covered" > if (row === 0) { // If we are at the top of a new column...</span>
1402
1475
  // These genes are the source genes
1403
- try {
1404
- currentGene = {name: currentSheet.data[0][column]};
1405
- // Set genes to upper case so case doesn't matter in error checking; ie: Cin5 is the same as cin5
1406
- if (currentGene.name === undefined) {
1407
- addWarning(network, warningsList.missingSourceGeneWarning(row, column));
1408
- } else <span class="missing-if-branch" title="if path not taken" >I</span>if (isNaN(currentGene.name) &amp;&amp; typeof currentGene.name !== "string") {
1476
+ <span class="cstat-no" title="statement not covered" > try {</span>
1477
+ <span class="cstat-no" title="statement not covered" > currentGene = {name: currentSheet.data[0][column]};</span>
1478
+ // ie: Cin5 is the same as cin5
1479
+ <span class="cstat-no" title="statement not covered" > if (currentGene.name === undefined) {</span>
1480
+ <span class="cstat-no" title="statement not covered" > addWarning(network, warningsList.missingSourceGeneWarning(row, column));</span>
1481
+ } else <span class="cstat-no" title="statement not covered" >if (isNaN(currentGene.name) &amp;&amp; typeof currentGene.name !== "string") {</span>
1409
1482
  <span class="cstat-no" title="statement not covered" > addWarning(network, warningsList.missingSourceGeneWarning(row, column));</span>
1410
1483
  } else {
1411
- sourceGenes.push(String(currentGene.name.toUpperCase()));
1412
- genesList.push(String(currentGene.name.toUpperCase()));
1413
- currentGene.name = currentGene.name;
1414
- network.genes.push(currentGene);
1484
+ // set currentGeneName to a String so toUpperCase doesn't mess up
1485
+ <span class="cstat-no" title="statement not covered" > currentGene.name = currentGene.name.toString();</span>
1486
+ <span class="cstat-no" title="statement not covered" > sourceGenes.push(String(currentGene.name.toUpperCase()));</span>
1487
+ <span class="cstat-no" title="statement not covered" > genesList.push(String(currentGene.name.toUpperCase()));</span>
1488
+ <span class="cstat-no" title="statement not covered" > network.genes.push(currentGene);</span>
1415
1489
  }
1416
1490
  } catch (err) {
1417
1491
  <span class="cstat-no" title="statement not covered" > addError(network, errorList.corruptGeneError(row, column));</span>
1418
1492
  <span class="cstat-no" title="statement not covered" > return network;</span>
1419
1493
  }
1420
- } else if (column === 0) { // If we are at the far left of a new row...
1494
+ } else <span class="cstat-no" title="statement not covered" >if (column === 0) { // If we are at the far left of a new row...</span>
1421
1495
  // These genes are the target genes
1422
- try {
1423
- currentGene = {name: currentSheet.data[row][0]};
1424
- if (currentGene.name === undefined) {
1425
- addWarning(network, warningsList.missingTargetGeneWarning(row, column));
1426
- } else <span class="missing-if-branch" title="if path not taken" >I</span>if (isNaN(currentGene.name) &amp;&amp; typeof currentGene.name !== "string") {
1496
+ <span class="cstat-no" title="statement not covered" > try {</span>
1497
+ <span class="cstat-no" title="statement not covered" > currentGene = {name: currentSheet.data[row][0]};</span>
1498
+ <span class="cstat-no" title="statement not covered" > if (currentGene.name === undefined) {</span>
1499
+ <span class="cstat-no" title="statement not covered" > addWarning(network, warningsList.missingTargetGeneWarning(row, column));</span>
1500
+ } else <span class="cstat-no" title="statement not covered" >if (isNaN(currentGene.name) &amp;&amp; typeof currentGene.name !== "string") {</span>
1427
1501
  <span class="cstat-no" title="statement not covered" > addWarning(network, warningsList.missingTargetGeneWarning(row, column));</span>
1428
1502
  } else {
1429
- targetGenes.push(String(currentGene.name.toUpperCase()));
1503
+ // set currentGeneName to a String so toUpperCase doesn't mess up
1504
+ <span class="cstat-no" title="statement not covered" > currentGene.name = currentGene.name.toString();</span>
1505
+ <span class="cstat-no" title="statement not covered" > targetGenes.push(String(currentGene.name.toUpperCase()));</span>
1430
1506
  // Here we check to see if we've already seen the gene name that we're about to store
1431
1507
  // Genes may or may not be present due to asymmetry or unorderedness
1432
1508
  // If it's in the genesList, it will return a number &gt; 0, so we won't store it
1433
1509
  // If it's not there, it will return -1, so we add it.
1434
- if (genesList.indexOf(String(currentGene.name.toUpperCase())) === -1) {
1435
- genesList.push(String(currentGene.name.toUpperCase()));
1436
- currentGene.name = currentGene.name;
1437
- network.genes.push(currentGene);
1510
+ <span class="cstat-no" title="statement not covered" > if (genesList.indexOf(String(currentGene.name.toUpperCase())) === -1) {</span>
1511
+ <span class="cstat-no" title="statement not covered" > genesList.push(String(currentGene.name.toUpperCase()));</span>
1512
+ <span class="cstat-no" title="statement not covered" > network.genes.push(currentGene);</span>
1438
1513
  }
1439
1514
  }
1440
1515
  } catch (err) {
@@ -1444,48 +1519,58 @@ var parseSheet = function(sheet) {
1444
1519
  <span class="cstat-no" title="statement not covered" > return network;</span>
1445
1520
  }
1446
1521
  } else { // If we're within the matrix and lookin' at the data...
1447
- try {
1448
- if (currentSheet.data[row][column] === undefined) {
1522
+ <span class="cstat-no" title="statement not covered" > try {</span>
1523
+ <span class="cstat-no" title="statement not covered" > if (currentSheet.data[row][column] === undefined) {</span>
1449
1524
  // SHOULD BE: addError(network, errorList.missingValueError(row, column));
1450
- addWarning(network, warningsList.invalidMatrixDataWarning(row, column));
1451
- } else if (isNaN(+("" + currentSheet.data[row][column])) || typeof currentSheet.data[row][column] !== "number") {
1452
- addError(network, errorList.dataTypeError(row, column));
1453
- return network;
1525
+ <span class="cstat-no" title="statement not covered" > addWarning(network, warningsList.invalidMatrixDataWarning(row, column));</span>
1526
+ } else <span class="cstat-no" title="statement not covered" >if (isNaN(+("" + currentSheet.data[row][column])) ||</span>
1527
+ typeof currentSheet.data[row][column] !== "number") {
1528
+ <span class="cstat-no" title="statement not covered" > addError(network, errorList.dataTypeError(row, column));</span>
1529
+ <span class="cstat-no" title="statement not covered" > return network;</span>
1454
1530
  } else {
1455
- if (currentSheet.data[row][column] !== 0) { // We only care about non-zero values
1531
+ <span class="cstat-no" title="statement not covered" > if (currentSheet.data[row][column] !== 0) { // We only care about non-zero values</span>
1456
1532
  // Grab the source and target genes' names
1457
- sourceGene = currentSheet.data[0][column];
1458
- targetGene = currentSheet.data[row][0];
1459
- if (sourceGene === undefined || targetGene === undefined) {
1460
- addWarning(network, warningsList.randomDataWarning("undefined", row, column));
1461
- } else <span class="missing-if-branch" title="if path not taken" >I</span>if ((isNaN(sourceGene) &amp;&amp; typeof sourceGene !== "string") || (isNaN(targetGene) &amp;&amp; typeof targetGene !== "string")) {
1533
+ <span class="cstat-no" title="statement not covered" > sourceGene = currentSheet.data[0][column];</span>
1534
+ <span class="cstat-no" title="statement not covered" > targetGene = currentSheet.data[row][0];</span>
1535
+ <span class="cstat-no" title="statement not covered" > if (sourceGene === undefined || targetGene === undefined) {</span>
1536
+ <span class="cstat-no" title="statement not covered" > addWarning(network, warningsList.randomDataWarning("undefined", row, column));</span>
1537
+ } else <span class="cstat-no" title="statement not covered" >if ((isNaN(sourceGene) &amp;&amp; typeof sourceGene !== "string") ||</span>
1538
+ (isNaN(targetGene) &amp;&amp; typeof targetGene !== "string")) {
1462
1539
  <span class="cstat-no" title="statement not covered" > addWarning(network, warningsList.randomDataWarning("NaN", row, column));</span>
1463
1540
  } else {
1464
1541
  // Grab the source and target genes' numbers
1465
- sourceGeneNumber = genesList.indexOf(sourceGene.toUpperCase());
1466
- targetGeneNumber = genesList.indexOf(targetGene.toUpperCase());
1467
- currentLink = {source: sourceGeneNumber, target: targetGeneNumber, value: currentSheet.data[row][column]};
1468
- // Here we set the properties of the current link before we push them to the network
1469
- if (network.sheetType === "weighted") {
1470
- if (currentLink.value &gt; 0) { // If it's a positive number, mark it as an activator
1471
- currentLink.type = "arrowhead";
1472
- currentLink.stroke = "MediumVioletRed";
1473
- network.positiveWeights.push(currentLink.value);
1542
+ <span class="cstat-no" title="statement not covered" > sourceGeneNumber = genesList.indexOf(sourceGene.toString().toUpperCase());</span>
1543
+ <span class="cstat-no" title="statement not covered" > targetGeneNumber = genesList.indexOf(targetGene.toString().toUpperCase());</span>
1544
+ <span class="cstat-no" title="statement not covered" > currentLink = {source: sourceGeneNumber, target: targetGeneNumber,</span>
1545
+ value: currentSheet.data[row][column]};
1546
+ // Here we set the properties of the current link
1547
+ // before we push them to the network
1548
+ <span class="cstat-no" title="statement not covered" > if (network.sheetType === "weighted") {</span>
1549
+ <span class="cstat-no" title="statement not covered" > if (currentLink.value &gt; 0) {</span>
1550
+ // If it's a positive number, mark it as an activator
1551
+ <span class="cstat-no" title="statement not covered" > currentLink.type = "arrowhead";</span>
1552
+ // GRNsight v1 magenta edge color
1553
+ // currentLink.stroke = "MediumVioletRed";
1554
+ // Node coloring-consistent red edge color
1555
+ <span class="cstat-no" title="statement not covered" > currentLink.stroke = "rgb(195, 61, 61)";</span>
1556
+ <span class="cstat-no" title="statement not covered" > network.positiveWeights.push(currentLink.value);</span>
1474
1557
  } else { // if it's a negative number, mark it as a repressor
1475
- currentLink.type = "repressor";
1476
- currentLink.stroke = "DarkTurquoise";
1477
- network.negativeWeights.push(currentLink.value);
1558
+ <span class="cstat-no" title="statement not covered" > currentLink.type = "repressor";</span>
1559
+ // currentLink.stroke = "DarkTurquoise"; // GRNsight v1 cyan edge color
1560
+ // Node coloring-consistent blue edge color
1561
+ <span class="cstat-no" title="statement not covered" > currentLink.stroke = "rgb(51, 124, 183)";</span>
1562
+ <span class="cstat-no" title="statement not covered" > network.negativeWeights.push(currentLink.value);</span>
1478
1563
  }
1479
- } else <span class="missing-if-branch" title="else path not taken" >E</span>if (network.sheetType === "unweighted") {
1480
- currentLink.type = "arrowhead";
1481
- currentLink.stroke = "black";
1482
- if (currentLink.value !== 1) {
1483
- addWarning(network, warningsList.incorrectlyNamedSheetWarning());
1484
- currentLink.value = 1;
1564
+ } else <span class="cstat-no" title="statement not covered" >if (network.sheetType === "unweighted") {</span>
1565
+ <span class="cstat-no" title="statement not covered" > currentLink.type = "arrowhead";</span>
1566
+ <span class="cstat-no" title="statement not covered" > currentLink.stroke = "black";</span>
1567
+ <span class="cstat-no" title="statement not covered" > if (currentLink.value !== 1) {</span>
1568
+ <span class="cstat-no" title="statement not covered" > addWarning(network, warningsList.incorrectlyNamedSheetWarning());</span>
1569
+ <span class="cstat-no" title="statement not covered" > currentLink.value = 1;</span>
1485
1570
  }
1486
- network.positiveWeights.push(currentLink.value);
1571
+ <span class="cstat-no" title="statement not covered" > network.positiveWeights.push(currentLink.value);</span>
1487
1572
  }
1488
- network.links.push(currentLink);
1573
+ <span class="cstat-no" title="statement not covered" > network.links.push(currentLink);</span>
1489
1574
  }
1490
1575
  }
1491
1576
  }
@@ -1496,9 +1581,9 @@ var parseSheet = function(sheet) {
1496
1581
  <span class="cstat-no" title="statement not covered" > return network;</span>
1497
1582
  }
1498
1583
  }
1499
- column++; // Let's move on to the next column!
1584
+ <span class="cstat-no" title="statement not covered" > column++; </span>// Let's move on to the next column!
1500
1585
  } // Once we finish with the current row...
1501
- column = 0; // let's go back to column 0 on the next row!
1586
+ <span class="cstat-no" title="statement not covered" > column = 0; </span>// let's go back to column 0 on the next row!
1502
1587
  } catch (err) {
1503
1588
  // We only get here if something goes drastically wrong. We don't want to get here.
1504
1589
  <span class="cstat-no" title="statement not covered" > addError(network, errorList.unknownError);</span>
@@ -1512,11 +1597,11 @@ var parseSheet = function(sheet) {
1512
1597
  &nbsp;
1513
1598
  // We sort them here because gene order is not relevant before this point
1514
1599
  // Sorting them now means duplicates will be right next to each other
1515
- sourceGenes.sort();
1516
- targetGenes.sort();
1600
+ <span class="cstat-no" title="statement not covered" > sourceGenes.sort();</span>
1601
+ <span class="cstat-no" title="statement not covered" > targetGenes.sort();</span>
1517
1602
  &nbsp;
1518
1603
  // syntactic duplicate checker for both columns and rows
1519
- checkDuplicates(network.errors, sourceGenes, targetGenes);
1604
+ <span class="cstat-no" title="statement not covered" > checkDuplicates(network.errors, sourceGenes, targetGenes);</span>
1520
1605
  &nbsp;
1521
1606
  // NOTE: Temporarily commented out pending resolution of #474, and other related issues
1522
1607
  // try {
@@ -1524,12 +1609,12 @@ var parseSheet = function(sheet) {
1524
1609
  // } catch (err) {
1525
1610
  // console.log ("Graph statistics report failed to be complete.");
1526
1611
  // }
1527
- return semanticChecker(network);
1612
+ <span class="cstat-no" title="statement not covered" > return semanticChecker(network);</span>
1528
1613
  };
1529
1614
  &nbsp;
1530
- var processGRNmap = <span class="fstat-no" title="function not covered" >function (path, res, app) {</span>
1531
- <span class="cstat-no" title="statement not covered" > var sheet;</span>
1532
- <span class="cstat-no" title="statement not covered" > var network;</span>
1615
+ var processGRNmap = <span class="fstat-no" title="function not covered" >fu</span>nction (path, res, app) {
1616
+ var sheet;
1617
+ var network;
1533
1618
  &nbsp;
1534
1619
  <span class="cstat-no" title="statement not covered" > helpers.attachCorsHeader(res, app);</span>
1535
1620
  &nbsp;
@@ -1541,17 +1626,21 @@ var processGRNmap = <span class="fstat-no" title="function not covered" >functio
1541
1626
  &nbsp;
1542
1627
  <span class="cstat-no" title="statement not covered" > helpers.attachFileHeaders(res, path);</span>
1543
1628
  <span class="cstat-no" title="statement not covered" > network = parseSheet(sheet);</span>
1629
+ &nbsp;
1630
+ // Parse expression and 2-column data, then add to network object
1631
+ var additionalData = <span class="cstat-no" title="statement not covered" >parseAdditionalSheets(sheet);</span>
1632
+ <span class="cstat-no" title="statement not covered" > Object.assign(network, additionalData);</span>
1544
1633
  &nbsp;
1545
1634
  <span class="cstat-no" title="statement not covered" > return (network.errors.length === 0) ?</span>
1546
- // If all looks well, return the network with an all clear
1547
- res.json(network) :
1548
- // If all does not look well, return the network with an error 400
1549
- res.json(400, network);
1635
+ // If all looks well, return the network with an all clear
1636
+ res.json(network) :
1637
+ // If all does not look well, return the network with an error 400
1638
+ res.status(400).json(network);
1550
1639
  };
1551
1640
  &nbsp;
1552
- var grnSightToCytoscape = <span class="fstat-no" title="function not covered" >function (network) {</span>
1553
- <span class="cstat-no" title="statement not covered" > var result = [];</span>
1554
- <span class="cstat-no" title="statement not covered" > network.genes.forEach(<span class="fstat-no" title="function not covered" >function (gene) {</span></span>
1641
+ var grnSightToCytoscape = <span class="fstat-no" title="function not covered" >fu</span>nction (network) {
1642
+ var result = <span class="cstat-no" title="statement not covered" >[];</span>
1643
+ <span class="cstat-no" title="statement not covered" > network.genes.forEach(<span class="fstat-no" title="function not covered" >fu</span>nction (gene) {</span>
1555
1644
  <span class="cstat-no" title="statement not covered" > result.push({</span>
1556
1645
  data: {
1557
1646
  id: gene.name
@@ -1559,9 +1648,9 @@ var grnSightToCytoscape = <span class="fstat-no" title="function not covered" >f
1559
1648
  });
1560
1649
  });
1561
1650
  &nbsp;
1562
- <span class="cstat-no" title="statement not covered" > network.links.forEach(<span class="fstat-no" title="function not covered" >function (link) {</span></span>
1563
- <span class="cstat-no" title="statement not covered" > var sourceGene = network.genes[link.source];</span>
1564
- <span class="cstat-no" title="statement not covered" > var targetGene = network.genes[link.target];</span>
1651
+ <span class="cstat-no" title="statement not covered" > network.links.forEach(<span class="fstat-no" title="function not covered" >fu</span>nction (link) {</span>
1652
+ var sourceGene = <span class="cstat-no" title="statement not covered" >network.genes[link.source];</span>
1653
+ var targetGene = <span class="cstat-no" title="statement not covered" >network.genes[link.target];</span>
1565
1654
  <span class="cstat-no" title="statement not covered" > result.push({</span>
1566
1655
  data: {
1567
1656
  id: sourceGene.name + targetGene.name,
@@ -1615,24 +1704,26 @@ module.exports = function (app) {
1615
1704
  <span class="missing-if-branch" title="if path not taken" >I</span>if (app) {
1616
1705
  &nbsp;
1617
1706
  // parse the incoming form data, then parse the spreadsheet. Finally, send back json.
1618
- <span class="cstat-no" title="statement not covered" > app.post("/upload", <span class="fstat-no" title="function not covered" >function (req, res) {</span></span>
1707
+ <span class="cstat-no" title="statement not covered" > app.post("/upload", <span class="fstat-no" title="function not covered" >fu</span>nction (req, res) {</span>
1619
1708
  // TODO: Add file validation
1620
- <span class="cstat-no" title="statement not covered" > (new multiparty.Form()).parse(req, <span class="fstat-no" title="function not covered" >function (err, fields, files) {</span></span>
1709
+ <span class="cstat-no" title="statement not covered" > (new multiparty.Form()).parse(req, <span class="fstat-no" title="function not covered" >fu</span>nction (err, fields, files) {</span>
1621
1710
  <span class="cstat-no" title="statement not covered" > if (err) {</span>
1622
1711
  <span class="cstat-no" title="statement not covered" > return res.json(400, "There was a problem uploading your file. Please try again.");</span>
1623
1712
  }
1624
- &nbsp;
1713
+ var input;
1625
1714
  <span class="cstat-no" title="statement not covered" > try {</span>
1626
- <span class="cstat-no" title="statement not covered" > var input = files.file[0].path;</span>
1715
+ <span class="cstat-no" title="statement not covered" > input = files.file[0].path;</span>
1627
1716
  } catch (err) {
1628
1717
  <span class="cstat-no" title="statement not covered" > return res.json(400, "No upload file selected.");</span>
1629
1718
  }
1630
1719
  &nbsp;
1631
1720
  <span class="cstat-no" title="statement not covered" > if (path.extname(input) !== ".xlsx") {</span>
1632
- <span class="cstat-no" title="statement not covered" > return res.json(400, "This file cannot be loaded because:&lt;br&gt;&lt;br&gt; The file is not in a format GRNsight can read." +</span>
1633
- "&lt;br&gt;Please select an Excel Workbook (.xlsx) file. Note that Excel 97-2003 Workbook (.xls) files are not " +
1634
- " able to be read by GRNsight. &lt;br&gt;&lt;br&gt;SIF and GraphML files can be loaded using the importer under File &gt; Import." +
1635
- " Additional information about file types that GRNsight supports is in the Documentation.");
1721
+ <span class="cstat-no" title="statement not covered" > return res.json(400, "This file cannot be loaded because:&lt;br&gt;&lt;br&gt; The file is \</span>
1722
+ not in a format GRNsight can read." + "&lt;br&gt;Please select an Excel Workbook \
1723
+ (.xlsx) file. Note that Excel 97-2003 Workbook (.xls) files are not " +
1724
+ " able to be read by GRNsight. &lt;br&gt;&lt;br&gt;SIF and GraphML files can be loaded \
1725
+ using the importer under File &gt; Import." + " Additional information about file \
1726
+ types that GRNsight supports is in the Documentation.");
1636
1727
  }
1637
1728
  &nbsp;
1638
1729
  <span class="cstat-no" title="statement not covered" > return processGRNmap(input, res, app);</span>
@@ -1640,20 +1731,22 @@ module.exports = function (app) {
1640
1731
  });
1641
1732
  &nbsp;
1642
1733
  // Load the demos
1643
- <span class="cstat-no" title="statement not covered" > app.get("/demo/unweighted", <span class="fstat-no" title="function not covered" >function (req, res) {</span></span>
1644
- <span class="cstat-no" title="statement not covered" > return processGRNmap("test-files/demo-files/21-genes_50-edges_Dahlquist-data_input.xlsx", res, app);</span>
1734
+ <span class="cstat-no" title="statement not covered" > app.get("/demo/unweighted", <span class="fstat-no" title="function not covered" >fu</span>nction (req, res) {</span>
1735
+ <span class="cstat-no" title="statement not covered" > return processGRNmap("test-files/demo-files/15-genes_28-edges_db5_Dahlquist-data_input.xlsx", res, app);</span>
1645
1736
  });
1646
1737
  &nbsp;
1647
- <span class="cstat-no" title="statement not covered" > app.get("/demo/weighted", <span class="fstat-no" title="function not covered" >function (req, res) {</span></span>
1648
- <span class="cstat-no" title="statement not covered" > return processGRNmap("test-files/demo-files/21-genes_50-edges_Dahlquist-data_estimation_output.xlsx", res, app);</span>
1738
+ <span class="cstat-no" title="statement not covered" > app.get("/demo/weighted", <span class="fstat-no" title="function not covered" >fu</span>nction (req, res) {</span>
1739
+ <span class="cstat-no" title="statement not covered" > return processGRNmap("test-files/demo-files/15-genes_28-edges_db5_Dahlquist-data_estimation_output.xlsx",</span>
1740
+ res, app);
1649
1741
  });
1650
1742
  &nbsp;
1651
- <span class="cstat-no" title="statement not covered" > app.get("/demo/schadeInput", <span class="fstat-no" title="function not covered" >function (req, res) {</span></span>
1743
+ <span class="cstat-no" title="statement not covered" > app.get("/demo/schadeInput", <span class="fstat-no" title="function not covered" >fu</span>nction (req, res) {</span>
1652
1744
  <span class="cstat-no" title="statement not covered" > return processGRNmap("test-files/demo-files/21-genes_31-edges_Schade-data_input.xlsx", res, app);</span>
1653
1745
  });
1654
1746
  &nbsp;
1655
- <span class="cstat-no" title="statement not covered" > app.get("/demo/schadeOutput", <span class="fstat-no" title="function not covered" >function (req, res) {</span></span>
1656
- <span class="cstat-no" title="statement not covered" > return processGRNmap("test-files/demo-files/21-genes_31-edges_Schade-data_estimation_output.xlsx", res, app);</span>
1747
+ <span class="cstat-no" title="statement not covered" > app.get("/demo/schadeOutput", <span class="fstat-no" title="function not covered" >fu</span>nction (req, res) {</span>
1748
+ <span class="cstat-no" title="statement not covered" > return processGRNmap("test-files/demo-files/21-genes_31-edges_Schade-data_estimation_output.xlsx",</span>
1749
+ res, app);
1657
1750
  });
1658
1751
  }
1659
1752
  &nbsp;
@@ -1669,7 +1762,7 @@ module.exports = function (app) {
1669
1762
  </div><!-- /wrapper -->
1670
1763
  <div class='footer quiet pad2 space-top1 center small'>
1671
1764
  Code coverage
1672
- generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Fri Sep 29 2017 00:22:47 GMT-0700 (PDT)
1765
+ generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at Thu May 31 2018 15:29:17 GMT-0700 (PDT)
1673
1766
  </div>
1674
1767
  </div>
1675
1768
  <script src="../prettify.js"></script>
@@ -1681,5 +1774,6 @@ window.onload = function () {
1681
1774
  };
1682
1775
  </script>
1683
1776
  <script src="../sorter.js"></script>
1777
+ <script src="../block-navigation.js"></script>
1684
1778
  </body>
1685
1779
  </html>