changeset 9:f8c7138cfc35 draft

planemo upload commit 92144072ce2bd29bf437bde994b9700e03d79f1b-dirty
author mingchen0919
date Thu, 26 Apr 2018 11:47:37 -0400
parents 32ed0a8df05c
children fda07562f04a
files deseq2.Rmd deseq2.sh deseq2.xml deseq2_render.R example-data/column_data.csv example-data/count_data.csv expose-outputs.sh getopt_specification.csv helper.R vakata-jstree-3.3.5/.gitignore vakata-jstree-3.3.5/LICENSE-MIT vakata-jstree-3.3.5/README.md vakata-jstree-3.3.5/bower.json vakata-jstree-3.3.5/component.json vakata-jstree-3.3.5/composer.json vakata-jstree-3.3.5/demo/README.md vakata-jstree-3.3.5/demo/basic/index.html vakata-jstree-3.3.5/demo/basic/root.json vakata-jstree-3.3.5/dist/jstree.js vakata-jstree-3.3.5/dist/jstree.min.js vakata-jstree-3.3.5/dist/themes/default-dark/32px.png vakata-jstree-3.3.5/dist/themes/default-dark/40px.png vakata-jstree-3.3.5/dist/themes/default-dark/style.css vakata-jstree-3.3.5/dist/themes/default-dark/style.min.css vakata-jstree-3.3.5/dist/themes/default-dark/throbber.gif vakata-jstree-3.3.5/dist/themes/default/32px.png vakata-jstree-3.3.5/dist/themes/default/40px.png vakata-jstree-3.3.5/dist/themes/default/style.css vakata-jstree-3.3.5/dist/themes/default/style.min.css vakata-jstree-3.3.5/dist/themes/default/throbber.gif vakata-jstree-3.3.5/gruntfile.js vakata-jstree-3.3.5/jstree.jquery.json vakata-jstree-3.3.5/package.json vakata-jstree-3.3.5/src/intro.js vakata-jstree-3.3.5/src/jstree.changed.js vakata-jstree-3.3.5/src/jstree.checkbox.js vakata-jstree-3.3.5/src/jstree.conditionalselect.js vakata-jstree-3.3.5/src/jstree.contextmenu.js vakata-jstree-3.3.5/src/jstree.dnd.js vakata-jstree-3.3.5/src/jstree.js vakata-jstree-3.3.5/src/jstree.massload.js vakata-jstree-3.3.5/src/jstree.search.js vakata-jstree-3.3.5/src/jstree.sort.js vakata-jstree-3.3.5/src/jstree.state.js vakata-jstree-3.3.5/src/jstree.types.js vakata-jstree-3.3.5/src/jstree.unique.js vakata-jstree-3.3.5/src/jstree.wholerow.js vakata-jstree-3.3.5/src/misc.js vakata-jstree-3.3.5/src/outro.js vakata-jstree-3.3.5/src/sample.js vakata-jstree-3.3.5/src/themes/base.less vakata-jstree-3.3.5/src/themes/default-dark/32px.png vakata-jstree-3.3.5/src/themes/default-dark/40px.png vakata-jstree-3.3.5/src/themes/default-dark/style.css vakata-jstree-3.3.5/src/themes/default-dark/style.less vakata-jstree-3.3.5/src/themes/default-dark/throbber.gif vakata-jstree-3.3.5/src/themes/default/32px.png vakata-jstree-3.3.5/src/themes/default/40px.png vakata-jstree-3.3.5/src/themes/default/style.css vakata-jstree-3.3.5/src/themes/default/style.less vakata-jstree-3.3.5/src/themes/default/throbber.gif vakata-jstree-3.3.5/src/themes/main.less vakata-jstree-3.3.5/src/themes/mixins.less vakata-jstree-3.3.5/src/themes/responsive.less vakata-jstree-3.3.5/src/vakata-jstree.js vakata-jstree-3.3.5/test/unit/index.html vakata-jstree-3.3.5/test/unit/libs/qunit.css vakata-jstree-3.3.5/test/unit/libs/qunit.js vakata-jstree-3.3.5/test/unit/test.js vakata-jstree-3.3.5/test/visual/desktop/index.html vakata-jstree-3.3.5/test/visual/mobile/index.html vakata-jstree-3.3.5/test/visual/screenshots/desktop/.png vakata-jstree-3.3.5/test/visual/screenshots/desktop/desktop.png vakata-jstree-3.3.5/test/visual/screenshots/desktop/home.png vakata-jstree-3.3.5/test/visual/screenshots/mobile/.png vakata-jstree-3.3.5/test/visual/screenshots/mobile/home.png vakata-jstree-3.3.5/test/visual/screenshots/mobile/mobile.png
diffstat 77 files changed, 41787 insertions(+), 138 deletions(-) [+]
line wrap: on
line diff
--- a/deseq2.Rmd	Fri Mar 09 01:22:06 2018 -0500
+++ b/deseq2.Rmd	Thu Apr 26 11:47:37 2018 -0400
@@ -1,67 +1,114 @@
 ---
 title: 'DESeq2 Analysis'
-output: html_document
+output:
+    html_document:
+      highlight: pygments
 ---
 
-```{r setup, include=FALSE, warning=FALSE, message=FALSE}
-knitr::opts_chunk$set(
-  echo = as.logical(opt$X_e), 
-  error = TRUE
-)
+```{css echo=FALSE}
+# code chunks scrollable
+pre code, pre, code {
+  white-space: pre !important;
+  overflow-x: scroll !important;
+  word-break: keep-all !important;
+  word-wrap: initial !important;
+}
 ```
 
 
+```{r setup, include=FALSE, warning=FALSE, message=FALSE}
+knitr::opts_knit$set(progress = FALSE)
+knitr::opts_chunk$set(error = TRUE, echo = TRUE)
+```
+
+```{r, echo=FALSE}
+# to make the css theme to work, <link></link> tags cannot be added directly 
+# as <script></script> tags as below.
+# it has to be added using a code chunk with the htmltool functions!!!
+css_link = tags$link()
+css_link$attribs = list(rel="stylesheet", href="vakata-jstree-3.3.5/dist/themes/default/style.min.css")
+css_link
+```
+
+```{r, eval=FALSE, echo=FALSE}
+# this code chunk is purely for adding comments
+# below is to add jQuery and jstree javascripts
+```
+<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
+<script src="vakata-jstree-3.3.5/dist/jstree.min.js"></script>
+
+```{r, eval=FALSE, echo=FALSE}
+# this code chunk is purely for adding comments
+# javascript code below is to build the file tree interface
+# see this for how to implement opening hyperlink: https://stackoverflow.com/questions/18611317/how-to-get-i-get-leaf-nodes-in-jstree-to-open-their-hyperlink-when-clicked-when
+```
+<script>
+  $(function () {
+    // create an instance when the DOM is ready
+    $('#jstree').jstree().bind("select_node.jstree", function (e, data) {
+     window.open( data.node.a_attr.href, data.node.a_attr.target )
+    });
+  });
+</script>
+-----------------------------------------
+
 ## DESeq2 analysis
 
-```{r}
-# load count data
-load(opt$X_A)
-# load column data
+```{r echo=FALSE}
+# import count data
+count_data = read.csv(opt$X_A, row.names = 1, header = TRUE)
+# import column data
 coldata = read.csv(opt$X_B, row.names = 1, header = TRUE)[colnames(count_data), ]
+```
+
+```{r echo=FALSE}
 dds = DESeqDataSetFromMatrix(countData = count_data,
                              colData = coldata,
                              design = formula(opt$X_C))
 dds = DESeq(dds, test = opt$X_G, fitType = opt$X_H)
+## Differential expression test results
+res = results(dds, contrast = c(opt$X_D, opt$X_E, opt$X_F), alpha = opt$X_I)
+res
 ```
 
 
-## Results
-
-```{r}
-res = results(dds, contrast = c(opt$X_D, opt$X_E, opt$X_F), alpha = opt$X_I)
-DT::datatable(as.data.frame(res))
-```
+```{r echo=FALSE}
+# save all padj sorted res to tool output directory
+padj_sorted_res = res[order(res$padj), ]
+write.table(padj_sorted_res,
+            file = paste0(opt$X_d, '/padj-sorted-genes.txt'),
+            quote = FALSE)
 
-```{r}
-# significant genes
+# save significant genes to a file in tool output directory
 sig_res = res[(res$padj < opt$X_I) & !is.na(res$padj), ]
-write.csv(sig_res, file = paste0(opt$X_d, '/significant_genes.csv'), quote = FALSE)
-```
-
-```{bash echo=FALSE}
-cp ${X_d}/significant_genes.csv ${X_J}
+sig_res_sorted = sig_res[order(sig_res$padj), ]
+write.table(sig_res_sorted, 
+            file = paste0(opt$X_d, '/padj-sorted-significant-genes.txt'), 
+            quote = FALSE)
 ```
 
 ## MA-plot
 
-```{r warning=FALSE, message=FALSE}
-df = data.frame(ID = rownames(res),
-                mean = res$baseMean,
-                lfc = res$log2FoldChange,
-                padj = res$padj,
-                stringsAsFactors = FALSE)
-cols = vector(mode='character', length = nrow(res))
-cols[(res$padj < opt$X_I) & !is.na(res$padj)] = paste0('< ', opt$X_I)
-cols[(res$padj >= opt$X_I) & !is.na(res$padj)] = paste0('>= ', opt$X_I)
-cols[cols == ''] = 'NA'
-df$col = cols
-p = ggplot(data = df) +
-  geom_point(mapping = aes(x = log(mean), y = lfc, col = cols, key = ID)) +
-  scale_x_continuous(name = 'Log(mean)') +
-  scale_y_continuous(name = 'Log fold change') +
-  scale_color_discrete(name = 'Adjusted P')+
+```{r warning=FALSE}
+log_fold_change = res$log2FoldChange
+base_mean = res$baseMean
+significant = res$padj
+significant[significant < 0.1] = 'yes'
+significant[significant != 'yes'] = 'no'
+
+maplot_df = data.frame(log_fold_change, base_mean, significant)
+maplot_df = maplot_df[!is.na(maplot_df$significant), ]
+p = ggplot(data = maplot_df) +
+  geom_point(mapping = aes(log(base_mean), log_fold_change, color = significant),
+             size = 0.5) +
+  scale_color_manual(name = 'Significant',
+                     values = c('no' = 'black', 'yes' = 'red'),
+                     labels = c('No', 'Yes')) +
+  xlab('Log base mean') +
+  ylab('Log fold change') +
   theme_classic()
-ggplotly(p)
+
+plotly::ggplotly(p)
 ```
 
 
@@ -76,7 +123,7 @@
 ```
 
 
-## Principle component plot
+## Principle component analysis plot
 
 ```{r}
 vsd <- vst(dds, blind=FALSE)
@@ -86,3 +133,13 @@
 ggplotly(p)
 ```
 
+-----------------------------------------
+## Output
+
+```{r, echo=FALSE}
+# create a div container to store the file tree interface
+tags$div(
+  id="jstree",
+  file_tree(Sys.getenv('REPORT_FILES_PATH'))
+)
+```
--- a/deseq2.sh	Fri Mar 09 01:22:06 2018 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,18 +0,0 @@
-Rscript '${__tool_directory__}/deseq2_render.R'
-
-  -e $echo
-  -o $report
-  -d $report.files_path
-  -s $sink_message
-  -t '${__tool_directory__}' 
-  
-  -A '$count_data'
-  -B '$column_data'
-  -C '$design_formula'
-  -D '$treatment_name'
-  -E '$treated'
-  -F '$untreated'
-  -G '$test_type'
-  -H '$fit_type'
-  -I '$alpha'
-  -J '$significant_genes'
\ No newline at end of file
--- a/deseq2.xml	Fri Mar 09 01:22:06 2018 -0500
+++ b/deseq2.xml	Thu Apr 26 11:47:37 2018 -0400
@@ -1,4 +1,4 @@
-<tool id="aurora_deseq2" name="Aurora DESeq2" version="2.2.0">
+<tool id="aurora_deseq2" name="aurora_deseq2" version="2.2.0">
     <description>Differential analysis of count data with the DESeq2 package</description>
     <requirements>
         <requirement type="package" version="1.15.0.6-0">pandoc</requirement>
@@ -14,32 +14,44 @@
         <regex match="XXX" source="stderr" level="warning"
                description="Check the warnings_and_errors.txt file for more details."/>
     </stdio>
-    <command><![CDATA[Rscript '${__tool_directory__}/deseq2_render.R'
+    <command><![CDATA[
+
+        ######### each aurora tool generates a html file and have an files path directory associated with it.
+        mkdir -p $report.files_path &&
+
+        ######### three important paths:
+        #########   1. path to tool installation directory
+        #########   2. path to report html
+        #########   3. path to files_path directory associated with the report output.
+        export TOOL_INSTALL_DIR='${__tool_directory__}' &&
+        export REPORT='$report' &&
+        export REPORT_FILES_PATH='$report.files_path' &&
+
+        ############ create a hidden file to store r markdown rendering log
+        touch $report.files_path/.r_rendering.log.txt &&
+
 
-  -e $echo
-  -o $report
-  -d $report.files_path
-  -s $sink_message
-  -t '${__tool_directory__}' 
-  
-  -A '$count_data'
-  -B '$column_data'
-  -C '$design_formula'
-  -D '$treatment_name'
-  -E '$treated'
-  -F '$untreated'
-  -G '$test_type'
-  -H '$fit_type'
-  -I '$alpha'
-  -J '$significant_genes']]></command>
+        Rscript '${__tool_directory__}/deseq2_render.R'
+
+              -o $report
+              -d $report.files_path
+
+              -A '$count_data'
+              -B '$column_data'
+              -C '$design_formula'
+              -D '$treatment_name'
+              -E '$treated'
+              -F '$untreated'
+              -G '$test_type'
+              -H '$fit_type'
+              -I '$alpha'
+              -J '$significant_genes']]></command>
     <inputs>
-        <param type="boolean" name="echo" truevalue="TRUE" falsevalue="FALSE" checked="true"
-               label="Display analysis code in report?"/>
         <param type="data" name="count_data" label="Count data"
                help="an RData file that stores the count matrix data. The file is generated from the aurora_htseq tool."
-               optional="False" format="rdata"/>
+               optional="False" format="csv"/>
         <param type="data" name="column_data" label="Column data"
-               help="A table file that stores column data for DESeq2 analysis. The first columns are the column names from the count matrix data. The remaining columns are experimental treatments."
+               help="A table file that stores column data for DESeq2 analysis. The first column are the column names from the count data matrix. The remaining columns are experimental treatments."
                optional="False" format="csv"/>
         <param type="text" name="design_formula" label="Design formula"
                help="The design formula expresses the variables which will be used in modeling. The formula should be a tilde (~) followed by the variables with plus signs between them, e.g., ~ condition1 + condition2"
@@ -75,9 +87,8 @@
                optional="False" value="0.1" min="0" max="1"/>
     </inputs>
     <outputs>
-        <data format="html" name="report" label="Aurora DESeq2"/>
-        <data format="txt" name="sink_message" label="Warnings and Errors" from_work_dir="warnings_and_errors.txt"/>
-        <data name="significant_genes" format="csv" label="signficant genes from ${on_string} " hidden="false"/>
+        <data format="html" name="report" label="${tool.name} on ${on_string}"/>
+        <data name="significant_genes" format="tabular" label="${tool.name} signficant genes on ${on_string} " hidden="false"/>
     </outputs>
     <citations>
         <citation type="bibtex"><![CDATA[
--- a/deseq2_render.R	Fri Mar 09 01:22:06 2018 -0500
+++ b/deseq2_render.R	Thu Apr 26 11:47:37 2018 -0400
@@ -1,69 +1,54 @@
 ##============ Sink warnings and errors to a file ==============
 ## use the sink() function to wrap all code within it.
 ##==============================================================
-zz = file('warnings_and_errors.txt')
+zz = file(paste0(Sys.getenv('REPORT_FILES_PATH'), '/.r_rendering.log.txt'))
 sink(zz)
 sink(zz, type = 'message')
 
-#------------import libraries--------------------
+#============== preparation ====================================
 options(stringsAsFactors = FALSE)
+# import libraries
+#------------------------------------------------------------------
+# ADD MORE LIBRARIES HERE IF YOUR TOOL DEPENDS ON OTHER R LIBRARIES
+#------------------------------------------------------------------
+library('getopt')
+library('rmarkdown')
+library('htmltools')
+library('ggplot2')
+library('plotly')
+library('DESeq2')
+library('pheatmap')
+library('DT')
 
-library(getopt)
-library(rmarkdown)
-library(ggplot2)
-library(plotly)
-library(htmltools)
-library(DESeq2)
-library(pheatmap)
-library(DT)
-#------------------------------------------------
-
-
-#------------get arguments into R--------------------
-# library(dplyr)
-# getopt_specification_matrix(extract_short_flags('deseq2.xml')) %>%
-#   write.table(file = 'spec.txt', sep = ',', row.names = FALSE, col.names = TRUE, quote = FALSE)
+# load helper functions
+source(paste0(Sys.getenv('TOOL_INSTALL_DIR'), '/helper.R'))
+# import getopt specification matrix from a csv file
+opt = getopt(getopt_specification_matrix('getopt_specification.csv', 
+                                         tool_dir=Sys.getenv('TOOL_INSTALL_DIR')))
+# define environment variables for all input values. this is useful when we 
+# want to use input values by other programming language in r markdown
+do.call(Sys.setenv, opt[-1])
+#===============================================================
 
 
-spec_matrix = as.matrix(
-  data.frame(stringsAsFactors=FALSE,
-              long_flags = c("X_e", "X_o", "X_d", "X_s", "X_t", "X_A", "X_B",
-                             "X_C", "X_D", "X_E", "X_F", "X_G", "X_H", "X_I", "X_J"),
-             short_flags = c("e", "o", "d", "s", "t", "A", "B", "C", "D", "E",
-                             "F", "G", "H", "I", "J"),
-     argument_mask_flags = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-                             1L, 1L),
-         data_type_flags = c("character", "character", "character", "character",
-                             "character", "character", "character", "character",
-                             "character", "character", "character", "character",
-                             "character", "double", "character")
-  )
-)
-opt = getopt(spec_matrix)
-#----------------------------------------------------
+#======================== render Rmd files =========================
+# NOTICE: 
+#       we should copy all rmarkdown files from tool install directory to REPORT_FILES_PATH directory.
+#       and render rmarkdown files in the REPORT_FILES_PATH directory.
+file.copy(from = paste0(Sys.getenv('TOOL_INSTALL_DIR'), '/vakata-jstree-3.3.5'),
+          to = Sys.getenv('REPORT_FILES_PATH'), recursive = TRUE)
+system(command = 'cp -r ${TOOL_INSTALL_DIR}/*.Rmd ${REPORT_FILES_PATH}')
+
+#----------------BELOW IS WHERE YOU NEED TO CUSTOMIZE ---------------------
+render(input = paste0(Sys.getenv('REPORT_FILES_PATH'), '/deseq2.Rmd'))
+# add more lines below if there are more Rmd files to be rendered
+
+#===============================================================
 
 
-#-----------using passed arguments in R 
-#           to define system environment variables---
-do.call(Sys.setenv, opt[-1])
-#----------------------------------------------------
-
-#---------- often used variables ----------------
-# OUTPUT_DIR: path to the output associated directory, which stores all outputs
-# TOOL_DIR: path to the tool installation directory
-OUTPUT_DIR = opt$X_d
-TOOL_DIR =   opt$X_t
-RMD_NAME = 'deseq2.Rmd'
-OUTPUT_REPORT = opt$X_o
-
-# create the output associated directory to store all outputs
-dir.create(OUTPUT_DIR, recursive = TRUE)
-
-#-----------------render Rmd--------------
-render(paste0(TOOL_DIR, '/', RMD_NAME), output_file = OUTPUT_REPORT)
-#------------------------------------------
-
-#==============the end==============
+#============== expose outputs to galaxy history ===============
+system(command = 'sh ${TOOL_INSTALL_DIR}/expose-outputs.sh')
+#===============================================================
 
 
 ##--------end of code rendering .Rmd templates----------------
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example-data/column_data.csv	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,8 @@
+sample,condition,type
+treated1,treated,single_read
+treated2,treated,paired_end
+treated3,treated,paired_end
+untreated1,untreated,single_read
+untreated2,untreated,single_read
+untreated3,untreated,paired_end
+untreated4,untreated,paired_end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example-data/count_data.csv	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,14600 @@
+feature_id,untreated1,untreated2,untreated3,untreated4,treated1,treated2,treated3
+FBgn0000003,0,0,0,0,0,0,1
+FBgn0000008,92,161,76,70,140,88,70
+FBgn0000014,5,1,0,0,4,0,0
+FBgn0000015,0,2,1,2,1,0,0
+FBgn0000017,4664,8714,3564,3150,6205,3072,3334
+FBgn0000018,583,761,245,310,722,299,308
+FBgn0000022,0,1,0,0,0,0,0
+FBgn0000024,10,11,3,3,10,7,5
+FBgn0000028,0,1,0,0,0,1,1
+FBgn0000032,1446,1713,615,672,1698,696,757
+FBgn0000036,2,1,0,0,1,0,1
+FBgn0000037,15,25,9,5,20,14,17
+FBgn0000038,0,0,0,0,0,0,0
+FBgn0000039,0,1,0,0,0,1,1
+FBgn0000042,101664,120163,45880,53201,127363,76099,83164
+FBgn0000043,33402,41118,16007,18360,56048,31421,34344
+FBgn0000044,21,63,15,13,64,28,16
+FBgn0000045,9,15,1,5,14,4,6
+FBgn0000046,12,50,13,14,53,31,13
+FBgn0000047,7,21,4,4,31,9,4
+FBgn0000052,3026,3587,1624,1944,3169,1843,1912
+FBgn0000053,2253,2882,1281,1575,3265,1954,2069
+FBgn0000054,860,1111,445,488,988,475,535
+FBgn0000055,0,0,0,0,1,0,0
+FBgn0000056,0,0,0,0,0,0,0
+FBgn0000057,805,1144,445,539,977,553,589
+FBgn0000061,0,1,1,3,4,1,1
+FBgn0000063,468,732,220,269,735,339,352
+FBgn0000064,7764,12370,5009,5553,13068,6941,7905
+FBgn0000071,82,192,74,92,972,512,594
+FBgn0000075,1,5,2,2,4,1,1
+FBgn0000077,282,391,126,188,337,166,196
+FBgn0000078,37,49,25,37,19,17,18
+FBgn0000079,145,254,192,193,82,86,110
+FBgn0000083,6266,8483,3604,4539,7392,4422,4952
+FBgn0000084,1849,2627,1283,1515,2010,1366,1472
+FBgn0000092,9,14,7,10,28,12,13
+FBgn0000094,18,28,21,8,52,16,17
+FBgn0000097,3062,5949,2212,2070,5223,2340,2415
+FBgn0000099,1,2,3,1,4,1,0
+FBgn0000100,27837,44313,17596,22693,32829,20076,20779
+FBgn0000108,21,96,43,38,84,42,46
+FBgn0000109,228,204,69,112,269,69,86
+FBgn0000114,0,13,4,1,6,2,4
+FBgn0000115,665,1014,339,429,880,444,536
+FBgn0000116,467,658,302,288,1142,936,879
+FBgn0000117,11083,17643,7034,8130,16020,9446,10212
+FBgn0000119,792,1040,444,524,993,482,506
+FBgn0000120,0,0,0,0,0,0,0
+FBgn0000121,10,22,6,4,23,6,5
+FBgn0000137,0,0,0,0,1,0,0
+FBgn0000139,850,1313,421,573,894,407,466
+FBgn0000140,1222,1739,571,585,1687,795,704
+FBgn0000142,2181,3621,1383,1337,2786,1425,1601
+FBgn0000146,1613,2332,839,1027,3298,1425,1474
+FBgn0000147,456,579,213,301,779,394,385
+FBgn0000150,9288,12107,5421,7180,13822,8400,8610
+FBgn0000152,619,752,327,371,781,419,490
+FBgn0000153,29,30,15,30,30,18,22
+FBgn0000157,1,2,0,0,0,0,0
+FBgn0000158,8,13,3,3,11,6,4
+FBgn0000163,873,1562,759,683,1292,702,704
+FBgn0000166,4,15,8,6,8,11,4
+FBgn0000171,6690,10789,5725,5171,9396,5728,5830
+FBgn0000173,1792,2460,852,1235,2867,1211,1312
+FBgn0000179,0,3,1,0,3,0,2
+FBgn0000180,30,24,21,19,41,30,25
+FBgn0000181,14904,27979,8541,10972,19843,9772,10617
+FBgn0000182,4,5,2,5,3,4,3
+FBgn0000183,3162,4665,1706,1960,4403,1993,2144
+FBgn0000206,0,0,0,0,0,0,0
+FBgn0000210,1545,2785,1212,1091,2199,1422,1309
+FBgn0000212,3593,5807,2168,2272,4973,2694,3062
+FBgn0000216,0,0,0,1,0,0,0
+FBgn0000221,244,362,143,195,276,155,160
+FBgn0000227,0,0,0,0,0,0,0
+FBgn0000228,820,1560,550,587,1098,614,643
+FBgn0000229,1183,1819,565,625,1872,572,584
+FBgn0000233,7,20,2,4,7,1,4
+FBgn0000239,3033,4238,1634,1854,4136,1918,1925
+FBgn0000241,4,17,4,10,12,12,2
+FBgn0000242,187,290,102,103,286,134,128
+FBgn0000244,650,1007,427,366,707,318,370
+FBgn0000246,212,413,94,82,470,104,117
+FBgn0000247,3057,4677,2067,2018,3596,2061,2142
+FBgn0000250,2437,4478,1502,1744,3231,1682,1918
+FBgn0000251,1,3,2,1,3,2,2
+FBgn0000253,12631,20940,5651,6551,20479,7239,8182
+FBgn0000256,2315,4834,1784,1801,2784,1413,1549
+FBgn0000257,759,1198,528,612,1072,645,673
+FBgn0000258,1585,2208,545,585,2793,640,639
+FBgn0000259,2299,4764,1145,1349,4016,1299,1512
+FBgn0000261,2072,3344,1480,1514,2582,1359,1649
+FBgn0000273,1991,4588,1598,1468,3433,1479,1626
+FBgn0000274,0,0,0,0,0,0,0
+FBgn0000276,147,105,26,28,164,42,55
+FBgn0000277,88,34,15,20,53,20,16
+FBgn0000278,80,85,30,37,61,22,28
+FBgn0000279,96,166,49,63,246,84,76
+FBgn0000280,0,0,1,0,1,1,0
+FBgn0000281,2,2,1,0,2,1,0
+FBgn0000283,3988,7671,2291,2475,5580,2630,2678
+FBgn0000286,589,1069,394,385,585,293,349
+FBgn0000287,0,2,0,1,0,0,2
+FBgn0000289,4298,6212,2455,2635,4773,2653,2675
+FBgn0000299,41809,71772,30542,30486,90326,56187,52094
+FBgn0000303,1,6,1,2,9,1,3
+FBgn0000307,1765,3544,1139,1051,3239,1079,1185
+FBgn0000308,18201,37290,9205,11513,31250,11790,13687
+FBgn0000313,64,112,37,42,93,45,51
+FBgn0000316,6,3,0,1,4,2,0
+FBgn0000317,1905,2598,938,980,2503,1083,1027
+FBgn0000318,934,1548,469,707,1420,754,951
+FBgn0000319,17870,21165,9366,10371,21977,11606,11514
+FBgn0000320,3,0,1,1,0,2,0
+FBgn0000326,272,507,175,176,486,223,225
+FBgn0000330,323,348,159,175,319,165,186
+FBgn0000337,25,32,21,23,44,18,20
+FBgn0000338,1411,3337,1392,1254,3191,1508,1654
+FBgn0000339,769,976,318,414,1141,371,430
+FBgn0000346,103,138,47,46,173,88,113
+FBgn0000351,36,39,21,28,67,27,34
+FBgn0000352,908,1465,596,585,1405,663,684
+FBgn0000355,1,2,0,0,1,0,0
+FBgn0000356,0,0,0,0,0,0,0
+FBgn0000357,2,6,2,3,7,2,4
+FBgn0000358,0,1,0,0,0,0,0
+FBgn0000359,1,1,1,0,1,0,0
+FBgn0000360,0,0,0,2,1,1,0
+FBgn0000363,2,8,1,4,7,2,2
+FBgn0000370,14660,20536,6749,8461,19329,7787,8541
+FBgn0000376,1206,2049,863,1005,1855,1113,1072
+FBgn0000377,924,1490,609,674,1369,710,835
+FBgn0000382,695,1463,569,557,1170,528,566
+FBgn0000384,867,888,383,402,1064,442,482
+FBgn0000392,1019,1758,609,674,1934,1072,1050
+FBgn0000394,761,1048,440,522,854,434,529
+FBgn0000395,422,1147,450,378,748,313,336
+FBgn0000404,2988,4150,1538,1674,4292,1849,2014
+FBgn0000405,2585,3374,1245,1299,4614,2239,2221
+FBgn0000406,236,744,266,405,141,64,98
+FBgn0000409,4742,8183,2549,3502,5880,3213,3566
+FBgn0000411,0,0,0,0,0,0,0
+FBgn0000412,2586,5079,1761,1952,5223,2368,2396
+FBgn0000413,2606,4403,2207,2045,3904,2197,2356
+FBgn0000414,3130,4260,1679,1739,3356,1640,1793
+FBgn0000416,49160,73644,28018,32770,52959,25468,27780
+FBgn0000422,6,10,5,4,16,3,8
+FBgn0000426,721,1405,357,496,1299,503,671
+FBgn0000427,0,0,0,1,0,0,0
+FBgn0000439,0,0,0,0,0,0,0
+FBgn0000442,2,7,3,2,6,1,6
+FBgn0000447,551,978,320,424,1308,537,622
+FBgn0000448,7,10,4,7,12,7,8
+FBgn0000449,0,0,0,0,0,0,0
+FBgn0000451,1,2,0,0,2,0,1
+FBgn0000454,3147,4114,1863,2176,3613,2200,2475
+FBgn0000455,595,787,415,486,723,411,433
+FBgn0000459,3,7,1,6,9,6,3
+FBgn0000463,1,0,1,1,1,1,3
+FBgn0000464,1654,2928,1168,1081,2446,1183,1204
+FBgn0000472,2067,6534,1974,1850,4639,1704,1998
+FBgn0000473,9,40,11,11,18,17,15
+FBgn0000477,1,1,2,2,0,1,2
+FBgn0000479,990,1751,619,718,1151,663,702
+FBgn0000482,1156,1731,711,784,1360,825,902
+FBgn0000489,124,162,79,83,174,95,100
+FBgn0000490,112,302,115,114,444,213,215
+FBgn0000492,1,1,0,1,1,0,0
+FBgn0000497,8,9,2,0,1,0,0
+FBgn0000499,959,1706,713,708,1416,762,880
+FBgn0000500,3,7,1,4,4,6,7
+FBgn0000504,10,19,0,2,32,5,1
+FBgn0000520,599,868,417,504,737,538,600
+FBgn0000524,901,1399,550,594,1486,869,817
+FBgn0000527,178,242,113,129,150,104,77
+FBgn0000529,2,1,0,0,0,0,1
+FBgn0000533,2,15,3,7,13,4,8
+FBgn0000535,155,393,188,157,203,105,106
+FBgn0000536,1173,1592,483,585,1669,638,668
+FBgn0000541,5941,11241,3252,2889,9965,3240,3052
+FBgn0000542,126,311,123,123,238,130,146
+FBgn0000543,740,1166,457,566,989,616,766
+FBgn0000546,990,1871,730,643,1513,704,683
+FBgn0000547,225,528,248,208,648,302,374
+FBgn0000551,1,4,2,0,0,3,1
+FBgn0000552,0,0,0,0,0,0,0
+FBgn0000556,232141,360330,131242,167116,253500,146390,164148
+FBgn0000557,40,77,27,30,91,29,44
+FBgn0000559,122803,171656,70067,87334,156921,86253,96004
+FBgn0000560,0,2,0,0,0,0,1
+FBgn0000562,1655,2821,1073,1041,2126,1129,1139
+FBgn0000564,0,0,0,0,0,0,0
+FBgn0000565,407,865,309,415,1012,628,752
+FBgn0000566,966,1349,424,600,1300,736,645
+FBgn0000567,352,600,267,250,265,118,103
+FBgn0000568,2549,7702,3323,2825,5275,2659,2729
+FBgn0000575,1297,2586,950,838,3321,1037,1169
+FBgn0000576,0,0,0,0,0,0,0
+FBgn0000577,0,2,0,1,0,0,0
+FBgn0000578,6212,11069,4433,4067,7719,3694,3921
+FBgn0000579,7956,12276,5310,6039,14036,8739,9264
+FBgn0000581,3723,6730,2674,2468,5150,2655,2558
+FBgn0000588,413,570,235,289,444,289,251
+FBgn0000591,1,0,0,0,0,0,0
+FBgn0000592,7,3,2,2,7,0,4
+FBgn0000594,21,32,22,21,45,8,12
+FBgn0000606,1,2,1,0,0,2,0
+FBgn0000611,1781,2790,863,1065,2245,955,978
+FBgn0000615,604,627,207,265,683,294,268
+FBgn0000617,932,1104,560,691,1184,697,733
+FBgn0000618,152,263,68,124,274,117,159
+FBgn0000625,1,1,0,0,1,0,1
+FBgn0000629,1375,1820,819,875,1505,845,952
+FBgn0000630,9,36,21,20,30,15,17
+FBgn0000633,12,35,13,13,56,23,34
+FBgn0000634,420,538,202,202,694,313,318
+FBgn0000635,56,260,123,110,259,140,169
+FBgn0000636,50,103,37,45,83,30,35
+FBgn0000639,2,1,0,2,0,0,1
+FBgn0000640,0,8,0,0,1,0,2
+FBgn0000644,11,12,5,5,5,1,6
+FBgn0000658,5,7,2,1,10,4,3
+FBgn0000659,2,5,0,1,7,2,2
+FBgn0000662,1383,2283,834,841,1843,859,910
+FBgn0000667,1485,2510,1148,1294,1910,1220,1282
+FBgn0000709,2350,4163,1779,1772,3364,1635,1804
+FBgn0000711,1191,2045,630,751,2012,767,821
+FBgn0000715,0,1,0,0,1,0,0
+FBgn0000719,2303,3958,1616,1496,3164,1484,1775
+FBgn0000721,950,1662,644,659,1557,746,792
+FBgn0000723,2085,3499,1526,1579,2930,1528,1720
+FBgn0000808,123,264,79,112,212,96,111
+FBgn0000810,321,739,166,173,597,205,191
+FBgn0000826,122,169,72,74,199,130,147
+FBgn0000927,27,36,31,26,51,32,32
+FBgn0000928,716,880,402,443,1218,661,668
+FBgn0000964,0,0,0,1,1,0,0
+FBgn0000986,2997,3829,1629,1572,3955,1941,1905
+FBgn0000996,1395,2540,814,945,1854,845,879
+FBgn0001075,34,84,38,33,75,36,32
+FBgn0001077,0,0,0,0,0,0,0
+FBgn0001078,1009,2008,942,852,1693,957,943
+FBgn0001079,467,622,254,277,558,298,323
+FBgn0001083,248,236,135,137,280,164,169
+FBgn0001084,64,113,38,50,139,52,69
+FBgn0001085,6,25,3,6,18,14,7
+FBgn0001086,1413,2001,738,792,1899,870,925
+FBgn0001087,1751,2725,1179,1333,2670,1365,1548
+FBgn0001089,41,93,33,44,76,40,56
+FBgn0001090,37,50,31,20,78,39,47
+FBgn0001091,3920,5045,2383,2763,6998,4686,5186
+FBgn0001092,10447,12387,5021,6445,13829,8575,9816
+FBgn0001098,511,975,377,429,665,344,389
+FBgn0001099,0,0,0,0,0,0,0
+FBgn0001104,7783,12144,4475,4755,11824,5257,5848
+FBgn0001105,4159,7751,2722,3062,6707,3340,3644
+FBgn0001108,2628,3903,1668,1772,3156,1721,1837
+FBgn0001112,1,0,1,0,5,0,0
+FBgn0001114,45281,85736,30000,34366,43241,25666,27946
+FBgn0001120,0,4,1,1,6,1,2
+FBgn0001122,869,1793,504,479,2560,846,934
+FBgn0001123,939,2236,559,589,1893,579,679
+FBgn0001124,1065,1642,704,821,2485,1257,1383
+FBgn0001125,3064,3921,1665,1997,3132,1864,2024
+FBgn0001128,314,504,205,237,372,164,211
+FBgn0001133,588,764,311,415,640,387,435
+FBgn0001134,2,18,6,12,9,8,5
+FBgn0001137,890,1047,388,505,525,185,216
+FBgn0001138,1,2,0,0,0,0,0
+FBgn0001139,3700,7811,3026,3249,5583,2992,3367
+FBgn0001142,196,645,289,368,654,288,305
+FBgn0001145,246,800,315,339,632,377,403
+FBgn0001147,1,0,0,0,0,0,0
+FBgn0001148,0,0,0,0,0,0,0
+FBgn0001149,2253,3641,1289,1723,2986,1517,1766
+FBgn0001150,41,97,33,40,58,28,38
+FBgn0001168,1958,6380,1985,2066,5181,2098,2363
+FBgn0001169,1593,2706,1008,945,2314,1072,1129
+FBgn0001170,1,5,3,1,2,2,1
+FBgn0001174,0,1,0,2,1,0,0
+FBgn0001179,993,1649,586,670,1660,773,846
+FBgn0001180,2,9,4,6,4,1,2
+FBgn0001185,533,944,283,336,872,318,411
+FBgn0001186,2388,4792,1719,1866,4097,2011,2216
+FBgn0001187,8,15,7,6,9,5,16
+FBgn0001189,1561,2200,819,916,2230,1176,1210
+FBgn0001197,3484,5247,1799,2264,6030,2857,3154
+FBgn0001202,904,1198,449,587,1208,502,578
+FBgn0001203,215,695,323,318,634,298,376
+FBgn0001205,524,591,314,323,600,356,373
+FBgn0001206,567,960,325,370,1129,561,581
+FBgn0001208,1,0,0,0,1,1,0
+FBgn0001215,7515,11119,4534,4659,8608,4538,5226
+FBgn0001216,2,2,1,1,4,1,4
+FBgn0001217,2,2,2,4,2,3,2
+FBgn0001218,31354,57711,19583,24203,44630,23146,27826
+FBgn0001219,94034,131418,50403,67285,115180,76338,85947
+FBgn0001220,7660,10141,3643,4532,9701,4797,5209
+FBgn0001222,1187,1987,706,800,1693,731,868
+FBgn0001223,0,0,0,0,0,0,0
+FBgn0001224,375,569,192,309,1505,669,866
+FBgn0001225,282,396,159,226,952,477,599
+FBgn0001226,540,1147,442,662,3177,1700,2012
+FBgn0001227,24,40,23,21,47,32,34
+FBgn0001228,0,0,0,0,0,0,0
+FBgn0001229,1,9,0,1,1,6,3
+FBgn0001230,162,355,130,142,283,150,180
+FBgn0001233,48696,67942,28189,35377,73108,39101,40420
+FBgn0001234,999,1982,934,750,2052,579,653
+FBgn0001235,0,0,1,0,1,1,0
+FBgn0001247,1320,2298,750,887,2292,1011,1094
+FBgn0001248,3356,4249,1735,2200,4256,2636,2831
+FBgn0001250,36,75,30,34,60,29,38
+FBgn0001253,2,1,2,4,2,3,1
+FBgn0001254,0,2,0,1,1,2,0
+FBgn0001255,28,32,9,17,34,20,7
+FBgn0001256,1,1,2,1,2,0,0
+FBgn0001257,5180,13897,4455,5038,15916,7710,9082
+FBgn0001258,1226,1832,705,888,2932,1683,1892
+FBgn0001259,14,19,14,13,31,10,18
+FBgn0001263,40,86,31,33,53,34,30
+FBgn0001269,0,0,0,0,1,0,0
+FBgn0001276,179,344,78,132,269,111,123
+FBgn0001280,613,971,262,358,1050,393,483
+FBgn0001281,1,1,0,0,2,0,0
+FBgn0001285,0,0,0,0,0,0,0
+FBgn0001291,1333,2391,804,924,1790,875,1033
+FBgn0001296,52,125,56,55,82,57,73
+FBgn0001297,12165,22605,9192,8952,14950,7364,7828
+FBgn0001301,1338,1690,753,794,1956,947,960
+FBgn0001308,4494,6973,3115,3201,5369,3126,3426
+FBgn0001311,10,17,10,7,24,14,16
+FBgn0001313,0,0,0,0,0,0,0
+FBgn0001314,0,0,0,0,0,0,0
+FBgn0001315,0,0,0,0,0,0,0
+FBgn0001316,12299,21313,8581,8472,19717,10422,11274
+FBgn0001319,0,5,1,1,2,1,2
+FBgn0001320,0,0,0,0,0,0,0
+FBgn0001321,7,23,6,4,20,5,15
+FBgn0001323,1,0,0,0,1,0,0
+FBgn0001324,2839,4214,1807,1894,3593,2051,2075
+FBgn0001325,2,0,0,0,0,1,1
+FBgn0001330,559,748,311,334,688,331,330
+FBgn0001332,1417,2329,925,1002,1522,724,750
+FBgn0001337,748,1199,443,443,1143,555,582
+FBgn0001341,468,651,209,238,591,280,251
+FBgn0001404,1381,2464,816,786,2464,999,1146
+FBgn0001491,340,621,140,196,500,176,188
+FBgn0001560,0,0,0,0,0,0,0
+FBgn0001565,2637,3587,1538,2003,3310,1626,1876
+FBgn0001612,1017,1217,464,559,1447,619,670
+FBgn0001624,6913,11881,4437,4276,8959,4141,4572
+FBgn0001941,4001,6011,1732,2110,4601,1859,2134
+FBgn0001942,65591,96296,39415,51799,69927,42217,47425
+FBgn0001961,7286,10095,4732,5718,8386,5549,6037
+FBgn0001965,2044,3202,1303,1336,2510,1406,1542
+FBgn0001967,18,26,17,20,6,4,7
+FBgn0001970,711,820,380,442,771,404,420
+FBgn0001974,364,620,248,251,505,253,304
+FBgn0001977,662,1147,378,508,1492,656,679
+FBgn0001978,5667,10148,4199,4588,8450,4702,5223
+FBgn0001981,5,3,0,0,5,2,1
+FBgn0001983,0,0,0,0,0,0,0
+FBgn0001986,1818,2414,997,1153,1890,1098,1109
+FBgn0001987,709,808,369,373,1003,503,568
+FBgn0001989,860,1600,567,724,1251,615,603
+FBgn0001990,485,814,274,330,662,292,346
+FBgn0001991,3,9,3,3,5,2,3
+FBgn0001992,6,7,3,8,9,7,6
+FBgn0001994,2064,6180,2082,1970,4976,2193,2365
+FBgn0001995,597,851,318,408,706,404,430
+FBgn0002021,309,463,158,191,478,206,246
+FBgn0002022,1638,2305,793,1056,1974,1027,1128
+FBgn0002023,1,7,1,3,2,1,3
+FBgn0002031,3694,4504,2103,2593,5032,3057,3163
+FBgn0002036,98,107,40,62,100,47,61
+FBgn0002044,2966,5295,1945,2078,4293,2120,2086
+FBgn0002069,3977,6005,2542,3217,6017,3385,3717
+FBgn0002121,3845,7067,2304,1945,6167,1848,1876
+FBgn0002174,1161,1680,813,914,1369,965,986
+FBgn0002183,7975,13485,4852,5695,10611,5695,6427
+FBgn0002283,439,541,233,267,445,257,309
+FBgn0002284,1968,2430,978,1212,2721,1444,1517
+FBgn0002306,3,12,13,3,13,7,3
+FBgn0002354,193,230,74,136,302,105,136
+FBgn0002413,3240,5724,2087,2255,4809,2207,2362
+FBgn0002431,7350,11695,3900,3974,10618,4366,3874
+FBgn0002440,67,40,22,27,79,29,31
+FBgn0002441,2036,3155,1149,1296,2586,1337,1409
+FBgn0002466,2676,3974,1445,1551,3980,1812,1766
+FBgn0002521,685,926,218,195,1127,188,212
+FBgn0002522,0,1,1,1,0,0,0
+FBgn0002524,6568,9002,3394,3896,8881,3964,3981
+FBgn0002525,5585,8349,3214,3304,7414,4101,4191
+FBgn0002526,94805,153771,56715,57978,136813,68356,64462
+FBgn0002527,48821,87970,30421,33243,46825,21218,21010
+FBgn0002528,14851,23041,9876,10644,19929,11700,11909
+FBgn0002531,5,6,11,5,10,4,3
+FBgn0002533,0,0,0,0,1,0,0
+FBgn0002534,1,1,1,0,0,0,2
+FBgn0002535,1,3,0,0,0,1,0
+FBgn0002542,1493,2181,831,921,2139,997,1018
+FBgn0002543,395,1282,643,557,1833,967,981
+FBgn0002552,1294,1675,785,881,1351,916,1016
+FBgn0002561,0,0,0,0,0,0,0
+FBgn0002562,0,0,0,0,0,0,0
+FBgn0002563,4,8,1,3,4,5,4
+FBgn0002564,13,30,14,10,35,21,11
+FBgn0002565,2,5,1,2,0,1,2
+FBgn0002566,2515,3316,1071,956,4075,992,964
+FBgn0002567,39,55,21,29,96,56,61
+FBgn0002569,9,7,4,6,10,2,5
+FBgn0002570,7,11,5,3,10,5,5
+FBgn0002571,2,2,2,3,1,2,1
+FBgn0002573,0,0,0,0,0,0,0
+FBgn0002576,121,477,268,226,362,253,231
+FBgn0002577,177,266,101,120,219,110,137
+FBgn0002578,2,3,0,1,11,4,4
+FBgn0002579,11729,23091,6688,9210,17152,7692,8734
+FBgn0002590,35242,47803,22531,31029,40026,25306,29880
+FBgn0002592,1,22,10,6,10,8,11
+FBgn0002593,28091,38321,15456,20852,34520,18315,18656
+FBgn0002607,39497,51197,22100,30578,42679,26240,29443
+FBgn0002609,95,93,38,35,40,17,13
+FBgn0002622,45990,71385,29207,41148,54921,36281,41385
+FBgn0002626,44015,57347,23529,34520,39432,28504,34335
+FBgn0002629,0,0,0,0,0,0,0
+FBgn0002631,0,0,0,0,1,1,0
+FBgn0002632,0,0,0,0,0,0,0
+FBgn0002633,0,1,0,0,0,0,0
+FBgn0002638,3106,4845,2009,2296,3771,2087,2195
+FBgn0002641,444,653,246,301,809,338,338
+FBgn0002643,3200,5798,2587,2271,4426,2279,2362
+FBgn0002645,7532,12506,4368,3945,13956,4727,4837
+FBgn0002652,323,852,187,192,747,253,243
+FBgn0002673,114,166,68,60,138,63,65
+FBgn0002707,345,561,180,213,528,247,256
+FBgn0002709,5,8,0,1,8,3,2
+FBgn0002715,195,292,85,112,356,158,136
+FBgn0002716,44,86,42,41,82,31,39
+FBgn0002719,6433,13682,5910,6703,11262,6360,7156
+FBgn0002723,385,1001,451,443,609,393,449
+FBgn0002732,6,10,2,3,4,2,3
+FBgn0002733,387,489,195,230,516,257,295
+FBgn0002734,12,34,11,3,10,7,10
+FBgn0002735,5,5,5,5,5,2,4
+FBgn0002736,702,1190,319,408,892,391,482
+FBgn0002772,1,5,1,2,4,0,4
+FBgn0002773,42,91,32,59,35,15,26
+FBgn0002774,1108,1696,580,682,1661,687,719
+FBgn0002775,474,814,250,338,546,280,328
+FBgn0002778,1970,2341,869,986,1620,639,710
+FBgn0002780,5143,8215,2441,2739,7038,2079,2253
+FBgn0002781,4627,7625,3049,3472,6037,3535,3906
+FBgn0002783,3998,7215,2732,2866,5771,3010,3182
+FBgn0002787,1853,2797,1144,1301,2661,1437,1611
+FBgn0002789,0,2,0,0,2,0,0
+FBgn0002791,499,686,220,265,800,324,326
+FBgn0002838,0,0,1,1,4,2,0
+FBgn0002842,2,4,0,2,8,4,2
+FBgn0002855,0,0,0,0,0,0,0
+FBgn0002856,0,0,0,0,0,0,0
+FBgn0002862,0,0,0,0,1,0,0
+FBgn0002863,7,3,0,0,7,1,0
+FBgn0002865,0,1,0,1,0,0,1
+FBgn0002868,229,300,66,97,66,23,26
+FBgn0002869,0,0,0,0,0,0,0
+FBgn0002872,725,1220,409,392,1350,530,568
+FBgn0002873,2336,3334,1393,1177,3949,1642,1730
+FBgn0002878,1086,1475,608,604,1116,661,658
+FBgn0002887,0,0,0,0,0,0,0
+FBgn0002891,946,1611,625,634,1845,864,926
+FBgn0002899,517,693,233,299,720,315,281
+FBgn0002901,241,367,122,121,379,147,142
+FBgn0002905,794,1220,434,503,1181,564,537
+FBgn0002906,657,1181,335,403,868,345,364
+FBgn0002909,0,0,0,0,0,0,0
+FBgn0002914,2561,4173,1316,1565,3444,1547,1646
+FBgn0002917,82,86,44,46,95,67,46
+FBgn0002921,14456,22779,8985,9893,21777,11921,12697
+FBgn0002922,5,43,21,19,18,8,11
+FBgn0002924,4933,8161,3138,3731,6995,4144,4523
+FBgn0002926,139,156,74,53,178,90,77
+FBgn0002930,4,6,0,1,2,5,3
+FBgn0002931,100,189,60,58,149,50,58
+FBgn0002932,818,1129,419,490,1084,497,525
+FBgn0002933,0,0,0,0,0,0,0
+FBgn0002936,3,6,3,6,5,3,3
+FBgn0002937,1,0,0,0,1,0,0
+FBgn0002938,1,1,0,1,0,2,0
+FBgn0002939,8,22,6,6,6,4,3
+FBgn0002940,1,2,2,1,3,1,1
+FBgn0002941,0,2,0,3,0,1,1
+FBgn0002945,47,144,64,49,66,24,26
+FBgn0002948,329,473,186,201,473,260,232
+FBgn0002962,9,20,10,8,20,10,9
+FBgn0002968,4246,7111,2521,2817,5567,2700,3040
+FBgn0002973,176,358,136,137,301,130,140
+FBgn0002985,4,17,0,0,0,1,4
+FBgn0002989,447,596,226,240,475,266,286
+FBgn0003002,3,0,0,1,1,1,0
+FBgn0003008,170,293,71,109,261,106,118
+FBgn0003009,0,1,0,2,1,0,1
+FBgn0003011,13,19,2,7,22,4,7
+FBgn0003013,11413,20386,9416,8061,15940,9808,9432
+FBgn0003015,27,53,17,25,74,18,19
+FBgn0003016,262,574,205,211,523,227,257
+FBgn0003022,1450,2145,851,1003,2038,1119,1271
+FBgn0003023,11,29,14,23,29,11,19
+FBgn0003028,2,9,1,10,13,4,5
+FBgn0003031,29214,74087,29558,33758,56839,28203,31312
+FBgn0003034,0,1,0,0,0,0,0
+FBgn0003041,1814,2339,897,1049,3195,1438,1513
+FBgn0003042,242,335,154,132,321,121,176
+FBgn0003044,1981,3337,1237,1267,2547,1491,1531
+FBgn0003046,4,9,3,6,5,2,3
+FBgn0003048,4820,7586,3443,3009,7657,4081,3947
+FBgn0003053,46,160,83,74,260,126,148
+FBgn0003057,0,1,0,0,0,0,0
+FBgn0003060,0,0,0,0,0,0,0
+FBgn0003062,2594,3033,1803,1971,2512,2380,2279
+FBgn0003065,0,1,1,1,0,1,1
+FBgn0003067,699,2378,1044,1114,1631,944,988
+FBgn0003068,173,268,142,150,222,139,165
+FBgn0003071,1296,2356,1091,1163,1899,1073,1343
+FBgn0003074,2027,2914,1160,1342,3888,2283,2323
+FBgn0003076,1316,2127,730,930,2909,1478,1721
+FBgn0003079,779,1164,409,513,1225,519,570
+FBgn0003082,757,803,434,520,877,572,580
+FBgn0003086,0,0,0,0,0,0,0
+FBgn0003087,147,179,36,33,276,59,49
+FBgn0003089,4,18,13,9,15,5,7
+FBgn0003090,4,10,3,8,4,2,9
+FBgn0003091,2,13,4,2,3,1,3
+FBgn0003093,1424,3053,1185,1311,2025,1089,1249
+FBgn0003114,1,0,1,1,1,1,0
+FBgn0003116,171,240,98,105,284,104,110
+FBgn0003117,7837,9804,4378,4575,6826,4121,4255
+FBgn0003118,6193,13295,4722,4654,11037,5304,5459
+FBgn0003124,2568,3967,1347,1525,4351,1879,2018
+FBgn0003129,0,0,1,2,1,1,1
+FBgn0003130,1,1,0,0,2,0,0
+FBgn0003132,0,2,0,0,2,0,1
+FBgn0003134,1293,2528,798,956,1958,920,1001
+FBgn0003137,3742,5787,2269,2312,9542,5123,4983
+FBgn0003138,2350,4015,1617,1732,3180,1775,2079
+FBgn0003139,791,1018,372,507,1084,553,602
+FBgn0003140,0,0,0,0,0,0,0
+FBgn0003141,449,859,182,276,648,250,285
+FBgn0003145,1,0,0,0,0,0,1
+FBgn0003149,9,9,9,5,19,12,12
+FBgn0003159,685,1682,526,509,1422,607,640
+FBgn0003162,57,151,52,62,176,73,75
+FBgn0003165,3429,9340,3780,3448,8440,4303,4394
+FBgn0003169,1828,2820,1020,1096,2229,1024,1095
+FBgn0003174,3,6,1,0,7,2,4
+FBgn0003175,2037,4058,1587,1520,2696,1576,1680
+FBgn0003177,3354,6535,2743,2379,6353,3275,3562
+FBgn0003178,7016,8522,4225,4885,8758,5255,5707
+FBgn0003187,11,11,6,5,23,10,17
+FBgn0003189,5454,6315,3073,3255,5429,3421,3294
+FBgn0003200,492,739,329,346,789,425,422
+FBgn0003204,1423,1845,928,1032,1513,923,969
+FBgn0003205,2996,4128,1510,1737,3777,1716,1908
+FBgn0003206,958,1439,435,563,1467,546,599
+FBgn0003209,1070,1627,648,733,1693,810,873
+FBgn0003210,1609,2539,942,1029,2633,1151,1250
+FBgn0003218,922,1236,583,613,1171,641,620
+FBgn0003227,231,350,154,164,424,189,221
+FBgn0003231,3239,6318,2019,2320,4768,1998,2344
+FBgn0003248,1,1,2,0,1,2,2
+FBgn0003249,0,1,0,0,1,0,2
+FBgn0003250,1,2,0,0,2,1,0
+FBgn0003254,3,9,0,2,8,1,1
+FBgn0003255,11,19,12,14,28,10,26
+FBgn0003257,773,1049,427,470,1076,646,599
+FBgn0003261,15469,29492,11373,12470,22116,11138,11684
+FBgn0003267,2,13,1,2,9,7,1
+FBgn0003268,3044,3950,1452,1619,4065,1908,1844
+FBgn0003270,0,1,0,0,0,0,0
+FBgn0003274,31662,37748,15468,21484,45586,20639,20438
+FBgn0003275,758,1123,363,535,1025,505,555
+FBgn0003276,2861,3248,1332,1671,3680,1779,1744
+FBgn0003277,11664,18924,7678,7882,15404,8824,8876
+FBgn0003278,840,1270,408,469,1171,450,482
+FBgn0003279,67223,99910,48480,60554,66285,51494,54039
+FBgn0003285,11,17,13,13,25,20,16
+FBgn0003292,4,4,2,1,4,3,0
+FBgn0003295,1,2,4,0,1,0,0
+FBgn0003300,1,7,0,3,0,0,0
+FBgn0003301,1151,1638,942,830,1393,983,1050
+FBgn0003302,72,181,70,58,99,59,58
+FBgn0003308,362,385,184,210,255,167,184
+FBgn0003310,1384,1880,939,879,1901,988,1151
+FBgn0003312,1,5,2,0,1,2,2
+FBgn0003313,0,0,0,0,0,0,0
+FBgn0003317,1373,1906,703,885,2790,1258,1308
+FBgn0003319,12,14,9,7,26,11,5
+FBgn0003321,1515,2607,926,960,2060,893,980
+FBgn0003326,3,3,3,4,8,2,3
+FBgn0003328,1089,1471,599,652,1145,497,602
+FBgn0003330,688,1030,387,517,838,566,602
+FBgn0003334,1679,2842,1158,1155,2237,1089,1232
+FBgn0003339,0,0,0,0,0,0,0
+FBgn0003345,2600,5154,1587,1699,4254,1807,1873
+FBgn0003346,1657,2255,795,984,2217,975,1185
+FBgn0003353,134,228,76,68,246,101,105
+FBgn0003356,0,0,0,0,0,0,0
+FBgn0003357,0,0,0,0,0,0,1
+FBgn0003358,0,1,0,1,0,3,0
+FBgn0003360,9518,13588,3744,4790,1282,608,618
+FBgn0003366,22,50,15,23,7,7,8
+FBgn0003371,2873,5310,2162,2005,4485,2012,2146
+FBgn0003372,1,2,5,3,6,1,0
+FBgn0003373,1,1,2,0,0,0,0
+FBgn0003374,0,1,0,0,0,0,0
+FBgn0003375,0,0,0,0,0,0,0
+FBgn0003377,1,1,1,0,1,1,0
+FBgn0003378,1,2,0,0,0,1,1
+FBgn0003380,1,3,0,1,5,0,1
+FBgn0003382,0,5,1,1,4,2,3
+FBgn0003383,3,7,5,1,5,6,6
+FBgn0003386,11,25,11,10,25,10,8
+FBgn0003388,5,13,6,5,14,2,8
+FBgn0003390,45,85,28,36,107,70,63
+FBgn0003391,1292,1613,659,713,1290,737,769
+FBgn0003392,3446,4667,1857,2076,4348,1872,1986
+FBgn0003396,3790,8517,3040,2666,5665,2552,2580
+FBgn0003401,226,372,120,174,411,202,221
+FBgn0003410,983,1610,574,572,1596,625,640
+FBgn0003411,0,1,0,1,0,1,2
+FBgn0003415,2349,4420,1778,1512,3618,1705,1656
+FBgn0003416,1545,1806,799,793,2092,897,934
+FBgn0003423,737,959,348,380,923,420,456
+FBgn0003425,4242,6543,3158,3072,5711,3355,3266
+FBgn0003429,0,3,2,1,3,0,0
+FBgn0003430,0,1,1,0,0,0,0
+FBgn0003435,124,285,112,103,252,118,102
+FBgn0003444,534,1034,310,354,1123,378,375
+FBgn0003447,12,33,9,16,102,46,56
+FBgn0003448,0,1,0,0,0,1,1
+FBgn0003449,544,1037,293,386,970,368,429
+FBgn0003450,5,6,0,2,5,2,0
+FBgn0003459,745,1414,444,460,1173,460,525
+FBgn0003460,1,2,0,2,2,0,0
+FBgn0003462,1955,2455,1011,1384,2243,1326,1419
+FBgn0003463,1223,2420,1003,1101,1920,1007,1179
+FBgn0003464,4489,5894,3067,3229,5460,3467,3792
+FBgn0003475,2626,4554,2173,1945,4244,2374,2669
+FBgn0003479,490,699,286,354,708,359,427
+FBgn0003480,63,108,30,49,108,40,43
+FBgn0003482,47,67,18,20,78,25,28
+FBgn0003483,875,1134,431,464,1217,543,537
+FBgn0003486,0,2,0,0,2,0,0
+FBgn0003495,5340,10089,2562,3007,9359,3283,3759
+FBgn0003499,21,60,29,27,56,30,28
+FBgn0003501,94,230,85,80,792,414,388
+FBgn0003502,956,1734,642,722,2591,1182,1272
+FBgn0003507,6816,11390,4358,4466,6724,4012,3959
+FBgn0003510,114,155,50,59,129,74,94
+FBgn0003511,350,674,228,276,448,271,335
+FBgn0003512,1041,1647,684,844,1290,830,851
+FBgn0003513,1,0,1,2,1,1,3
+FBgn0003514,5243,6727,2586,3218,7093,3467,3915
+FBgn0003515,6,3,3,3,9,3,2
+FBgn0003517,96729,137257,59692,80293,107475,80366,82768
+FBgn0003520,2022,4440,1457,1380,3878,1563,1663
+FBgn0003525,1643,3576,1036,1140,1724,757,833
+FBgn0003527,45,50,25,24,43,18,20
+FBgn0003545,898,1114,374,450,1053,443,484
+FBgn0003557,3179,5189,2062,2095,3779,1775,1867
+FBgn0003567,1156,1798,582,637,1465,663,701
+FBgn0003575,968,1921,724,755,1276,639,672
+FBgn0003598,1032,1539,597,675,1362,737,749
+FBgn0003600,3898,5323,2032,2557,4953,2698,3013
+FBgn0003607,2492,4997,1513,1780,4311,1661,1861
+FBgn0003612,2113,3290,1186,1318,2737,1330,1426
+FBgn0003638,1103,2156,855,861,1481,795,844
+FBgn0003651,1,1,0,1,0,0,0
+FBgn0003654,538,870,460,528,593,419,436
+FBgn0003655,214,270,116,131,187,110,117
+FBgn0003656,1454,2563,1040,1100,2344,1210,1412
+FBgn0003659,307,580,95,96,824,132,105
+FBgn0003660,3129,5382,1706,2300,4021,1925,2348
+FBgn0003676,5349,6403,2737,3488,7385,3929,4365
+FBgn0003683,1,0,0,0,0,0,0
+FBgn0003687,384,591,205,259,519,258,307
+FBgn0003701,800,1161,417,439,1177,424,427
+FBgn0003710,8,16,6,3,9,3,7
+FBgn0003714,288,556,149,173,472,237,253
+FBgn0003715,0,0,0,0,0,0,0
+FBgn0003716,724,1036,412,526,1073,485,502
+FBgn0003717,5285,7476,2719,2730,7074,3169,3098
+FBgn0003719,1,1,2,0,1,2,1
+FBgn0003720,0,1,1,1,2,0,1
+FBgn0003721,4934,8120,2387,2517,7699,2364,2564
+FBgn0003731,100,262,107,122,182,108,124
+FBgn0003732,6977,10342,3533,3806,11782,4899,4900
+FBgn0003733,15,18,6,3,16,3,4
+FBgn0003741,131,264,74,110,237,108,128
+FBgn0003742,421,646,265,312,575,305,322
+FBgn0003744,1009,1726,580,697,1199,626,672
+FBgn0003747,8,23,14,4,17,14,8
+FBgn0003748,924,1380,452,522,2650,1199,1253
+FBgn0003749,4,12,2,2,5,3,3
+FBgn0003751,28,38,8,18,49,18,18
+FBgn0003861,0,0,0,0,0,1,0
+FBgn0003862,4185,9026,3161,2703,5971,2253,2276
+FBgn0003863,0,0,0,0,0,0,1
+FBgn0003865,0,4,1,2,2,0,1
+FBgn0003866,2632,5360,1605,1672,4139,1624,1688
+FBgn0003867,2,5,1,0,10,1,4
+FBgn0003870,1651,3245,1122,1156,2216,1063,1044
+FBgn0003882,1174,1857,610,724,1547,700,788
+FBgn0003884,47500,44703,22547,27132,62704,41346,45618
+FBgn0003885,2534,3307,1340,1523,3349,2017,1973
+FBgn0003886,462,399,211,244,646,438,543
+FBgn0003887,26444,31821,14018,16444,33713,24210,26965
+FBgn0003888,7266,9074,3973,4480,10406,6760,7594
+FBgn0003889,1,6,1,3,11,2,6
+FBgn0003890,2459,2437,1358,1425,1578,1149,1263
+FBgn0003891,15454,29134,10299,9803,20102,7972,8161
+FBgn0003892,920,1697,640,611,1204,606,592
+FBgn0003896,0,0,0,0,1,1,0
+FBgn0003900,0,1,0,0,0,0,0
+FBgn0003916,0,0,0,0,0,0,0
+FBgn0003920,0,0,0,0,0,0,0
+FBgn0003922,0,0,1,1,0,1,8
+FBgn0003923,0,0,0,3,0,0,0
+FBgn0003926,4,11,9,10,14,9,5
+FBgn0003930,1,36,1,1,52,0,2
+FBgn0003931,0,0,1,0,4,0,0
+FBgn0003933,0,0,1,0,0,0,0
+FBgn0003934,0,0,0,0,1,0,0
+FBgn0003935,1,11,0,0,7,0,0
+FBgn0003936,0,0,0,0,0,0,0
+FBgn0003938,0,8,2,0,19,0,0
+FBgn0003941,25030,46367,12763,19429,33940,16312,19179
+FBgn0003942,22796,43386,11679,19339,33763,15116,17861
+FBgn0003943,1814,3069,6520,7101,3023,7404,9878
+FBgn0003944,1,1,0,0,0,0,0
+FBgn0003950,289,415,183,188,316,167,178
+FBgn0003961,4,4,2,4,7,3,5
+FBgn0003963,2938,6076,2241,2363,5329,2889,2887
+FBgn0003964,1455,2348,1005,1118,1936,1060,1136
+FBgn0003965,0,0,0,1,0,0,0
+FBgn0003969,2828,3443,1288,1484,3790,1603,1645
+FBgn0003970,0,3,0,1,7,3,1
+FBgn0003975,5,8,1,2,9,3,4
+FBgn0003977,2013,2910,1407,1420,2476,1558,1625
+FBgn0003978,627,897,380,410,679,459,436
+FBgn0003979,1,0,0,4,2,1,0
+FBgn0003980,1,0,0,0,1,1,0
+FBgn0003983,3,2,1,1,2,1,3
+FBgn0003984,56,97,37,35,71,38,24
+FBgn0003986,0,3,1,1,2,1,0
+FBgn0003996,45,96,34,69,166,79,90
+FBgn0003997,47,359,112,99,215,54,82
+FBgn0004003,3,4,0,1,3,0,2
+FBgn0004009,0,3,0,2,3,0,2
+FBgn0004028,9,6,4,7,16,5,8
+FBgn0004034,190,460,111,182,638,204,230
+FBgn0004045,3,7,0,1,1,1,2
+FBgn0004047,32,78,40,42,54,42,41
+FBgn0004049,1115,2134,695,634,1729,628,763
+FBgn0004050,647,1441,564,581,1227,641,724
+FBgn0004052,3,7,2,1,6,5,0
+FBgn0004053,0,1,0,0,0,0,0
+FBgn0004054,0,0,0,0,0,0,0
+FBgn0004055,1690,2420,823,976,2315,952,1066
+FBgn0004057,1269,1324,706,807,1034,716,850
+FBgn0004066,1985,4259,1776,2265,5056,2535,2815
+FBgn0004087,276,371,131,210,413,161,206
+FBgn0004101,389,667,268,271,557,343,300
+FBgn0004102,1,2,1,0,5,1,0
+FBgn0004103,6189,10340,2953,3646,7845,3596,3737
+FBgn0004106,677,841,285,327,1029,339,334
+FBgn0004107,284,448,112,142,382,180,184
+FBgn0004108,567,698,345,418,1210,725,796
+FBgn0004110,6,3,2,6,15,5,4
+FBgn0004117,1,5,0,2,2,1,0
+FBgn0004118,38,41,14,18,45,18,20
+FBgn0004132,652,1246,361,472,986,466,572
+FBgn0004133,1439,2354,861,951,1584,785,982
+FBgn0004143,0,0,0,0,0,0,0
+FBgn0004145,21238,34667,9472,10778,32125,12170,12739
+FBgn0004167,50056,93054,35895,33133,72930,37361,33419
+FBgn0004168,0,0,0,3,3,1,1
+FBgn0004169,15,37,22,16,45,25,29
+FBgn0004170,0,0,0,0,0,0,0
+FBgn0004171,1,1,0,1,2,1,0
+FBgn0004172,0,0,0,0,0,0,0
+FBgn0004173,0,0,0,0,0,0,0
+FBgn0004174,0,0,0,0,0,0,0
+FBgn0004175,0,0,0,0,0,0,0
+FBgn0004177,5505,10219,3333,3639,9109,3542,4205
+FBgn0004179,1446,2198,691,858,2211,806,839
+FBgn0004181,0,0,0,0,0,0,0
+FBgn0004183,0,1,0,0,5,1,2
+FBgn0004185,0,0,0,0,0,0,0
+FBgn0004186,0,0,0,0,0,0,0
+FBgn0004187,0,0,1,0,1,0,0
+FBgn0004188,0,0,15,21,0,8,19
+FBgn0004189,0,0,0,0,0,0,0
+FBgn0004190,0,0,0,1,2,1,0
+FBgn0004191,1,21,1,0,38,0,0
+FBgn0004192,0,0,0,0,1,0,0
+FBgn0004197,1645,2236,1029,1113,1546,880,890
+FBgn0004198,3323,9433,3541,3276,5814,2827,2945
+FBgn0004227,1329,1983,780,837,1644,796,868
+FBgn0004228,1,2,2,1,2,0,0
+FBgn0004237,5320,8122,3813,3634,6625,3905,4488
+FBgn0004240,2,1,0,2,1,0,0
+FBgn0004242,0,2,3,0,4,1,4
+FBgn0004244,0,0,1,0,0,0,1
+FBgn0004359,47,140,51,55,170,87,82
+FBgn0004360,3,22,7,3,9,5,6
+FBgn0004362,4093,6807,1856,2120,6450,2614,2658
+FBgn0004363,8113,9632,3531,4796,9933,5177,5487
+FBgn0004364,55,120,63,59,158,78,98
+FBgn0004366,0,1,0,0,2,0,0
+FBgn0004367,801,992,425,475,1125,593,625
+FBgn0004368,2250,2841,1201,1267,2872,1693,1850
+FBgn0004369,1033,1873,738,738,1049,420,474
+FBgn0004370,2064,3550,1535,1465,3252,1632,1687
+FBgn0004372,0,0,0,0,2,0,1
+FBgn0004373,3908,6501,2478,2313,6113,2751,2771
+FBgn0004374,1086,1347,645,757,1265,741,782
+FBgn0004377,7,6,1,7,5,1,5
+FBgn0004378,2211,3312,1233,1370,3145,1436,1571
+FBgn0004379,772,1243,430,503,1234,573,600
+FBgn0004380,811,1203,495,592,1090,533,612
+FBgn0004381,566,859,312,388,824,381,455
+FBgn0004387,2796,4071,1677,1703,2917,1517,1600
+FBgn0004389,1,0,0,0,0,0,0
+FBgn0004390,2833,4373,1733,1638,4544,2291,2582
+FBgn0004391,1643,2226,1000,1090,2069,1259,1324
+FBgn0004394,0,3,1,0,1,1,1
+FBgn0004395,875,1529,555,560,1300,490,562
+FBgn0004396,1489,3861,1160,990,6878,2343,2595
+FBgn0004397,3605,5650,2548,2446,4316,2424,2466
+FBgn0004399,3429,6435,2732,2471,5168,2695,2642
+FBgn0004400,282,443,131,148,727,169,195
+FBgn0004401,6778,11953,5199,5177,10992,5954,6434
+FBgn0004403,14460,20218,9729,14194,17548,11532,13438
+FBgn0004404,4758,6900,2827,3907,5429,3294,3214
+FBgn0004406,760,1066,487,518,1035,607,681
+FBgn0004407,0,0,0,0,0,0,0
+FBgn0004413,38636,66344,27680,40187,43668,33412,34638
+FBgn0004414,0,1,0,1,0,0,1
+FBgn0004419,1800,2802,806,925,3153,948,981
+FBgn0004425,1,0,0,1,1,0,0
+FBgn0004426,0,0,0,0,0,0,0
+FBgn0004427,0,0,0,0,0,0,0
+FBgn0004428,0,0,0,0,1,1,0
+FBgn0004429,0,0,0,0,0,0,0
+FBgn0004430,0,0,0,0,0,0,0
+FBgn0004431,6,10,4,4,7,7,10
+FBgn0004432,9138,11377,4304,6089,13441,6470,7156
+FBgn0004435,1209,1637,528,518,2409,630,654
+FBgn0004436,2009,4278,936,1046,3283,862,970
+FBgn0004449,2598,4496,1877,1744,3462,1859,1753
+FBgn0004456,5475,6947,2576,2796,5418,2509,2659
+FBgn0004462,485,849,317,347,681,298,378
+FBgn0004463,874,1034,416,495,1101,523,559
+FBgn0004465,872,933,458,518,909,602,634
+FBgn0004507,1123,2674,909,1075,3469,2038,2251
+FBgn0004509,1580,2491,1095,1133,2094,1179,1303
+FBgn0004510,627,1126,391,453,871,480,499
+FBgn0004511,10,24,10,10,21,13,15
+FBgn0004512,402,748,311,388,875,450,518
+FBgn0004513,1,3,1,2,3,1,1
+FBgn0004514,4,4,2,0,4,0,4
+FBgn0004516,0,3,1,2,1,1,2
+FBgn0004551,10978,14355,5540,6051,11338,5952,6171
+FBgn0004552,4,5,3,1,7,3,4
+FBgn0004554,0,0,0,1,0,0,0
+FBgn0004556,404,787,253,256,610,232,257
+FBgn0004567,0,0,2,1,1,0,1
+FBgn0004569,319,612,197,196,494,185,211
+FBgn0004572,0,0,0,0,0,0,0
+FBgn0004573,2,8,1,0,4,5,3
+FBgn0004574,4356,4931,2323,2727,3939,2619,2869
+FBgn0004575,0,4,0,0,0,0,1
+FBgn0004577,3,3,1,2,4,2,3
+FBgn0004579,1,4,0,0,1,0,2
+FBgn0004580,4,5,0,2,4,3,2
+FBgn0004581,20,33,8,7,13,13,18
+FBgn0004583,3521,6382,2000,1917,5284,2331,2411
+FBgn0004584,1522,3262,1049,1262,3530,1629,1748
+FBgn0004587,4519,6548,2903,3321,5635,3736,3647
+FBgn0004588,0,0,1,0,0,0,0
+FBgn0004589,0,0,0,0,0,0,0
+FBgn0004590,0,0,0,0,0,0,0
+FBgn0004591,0,0,0,0,0,0,0
+FBgn0004592,0,0,0,0,0,0,0
+FBgn0004593,0,0,0,0,0,0,0
+FBgn0004594,0,0,0,0,0,0,0
+FBgn0004595,25,68,36,25,75,54,60
+FBgn0004597,277,317,143,163,505,213,269
+FBgn0004598,4415,6190,2661,2820,5057,2946,2946
+FBgn0004603,2069,3482,1051,1183,3162,1427,1352
+FBgn0004606,13081,26963,12056,10534,15757,9841,10481
+FBgn0004607,15,25,7,9,14,9,6
+FBgn0004611,393,749,316,299,760,292,324
+FBgn0004618,2,0,0,1,6,1,1
+FBgn0004619,2,2,2,1,0,1,0
+FBgn0004620,0,1,0,0,0,0,0
+FBgn0004622,0,1,0,2,1,0,0
+FBgn0004623,2,2,1,2,6,3,6
+FBgn0004624,1193,1576,446,459,2014,462,446
+FBgn0004625,1258,2454,929,896,2341,952,1023
+FBgn0004629,997,2236,763,1168,2265,943,1158
+FBgn0004635,847,1321,586,476,1066,414,498
+FBgn0004636,5619,11275,3382,3734,10379,4268,4558
+FBgn0004638,1862,2959,800,845,3318,875,892
+FBgn0004643,1361,1760,825,966,1950,1134,1279
+FBgn0004644,4,11,5,5,5,2,4
+FBgn0004646,25,85,25,37,111,50,48
+FBgn0004647,5185,8011,3620,3788,6647,3725,3757
+FBgn0004648,1629,2341,802,849,2252,986,1013
+FBgn0004649,1,4,0,0,1,4,1
+FBgn0004650,168,341,102,120,159,68,91
+FBgn0004652,1923,4402,1916,1676,2230,1160,1243
+FBgn0004654,2450,3018,1462,1698,2499,1780,1960
+FBgn0004655,2239,3816,1535,1480,2752,1683,1506
+FBgn0004656,6659,15851,7210,6178,12362,6304,6271
+FBgn0004657,8836,12267,4769,4959,9960,4949,5281
+FBgn0004666,0,1,0,0,0,1,0
+FBgn0004687,3018,4883,1677,1962,4074,1553,1670
+FBgn0004698,2935,4863,1688,1876,5155,1951,2131
+FBgn0004777,0,0,0,0,0,0,0
+FBgn0004778,0,0,0,0,0,0,0
+FBgn0004779,0,0,0,0,0,0,0
+FBgn0004780,0,0,0,0,0,0,0
+FBgn0004781,0,0,0,0,0,0,0
+FBgn0004782,0,0,0,0,0,0,0
+FBgn0004783,0,0,0,0,0,0,0
+FBgn0004784,0,0,0,0,2,0,0
+FBgn0004795,2,6,3,1,3,5,3
+FBgn0004797,249,418,142,142,324,97,84
+FBgn0004811,841,1365,461,565,1149,550,631
+FBgn0004828,7176,11228,4506,5752,10320,5735,6652
+FBgn0004832,300,435,172,201,383,228,229
+FBgn0004834,1487,3040,1020,959,3011,1213,1149
+FBgn0004837,466,695,231,266,599,234,251
+FBgn0004838,9229,20403,7632,7238,15749,7296,7743
+FBgn0004839,7,37,5,10,5,1,8
+FBgn0004841,0,0,0,0,0,0,1
+FBgn0004842,0,0,0,0,1,0,0
+FBgn0004852,158,206,104,103,179,104,91
+FBgn0004854,1,3,2,0,0,0,0
+FBgn0004855,487,655,213,290,535,306,368
+FBgn0004856,1273,2137,865,1064,1919,1085,1167
+FBgn0004858,43,87,37,31,51,23,23
+FBgn0004859,410,511,106,105,459,99,117
+FBgn0004860,414,724,349,345,561,416,456
+FBgn0004861,528,924,437,365,572,353,410
+FBgn0004862,0,0,0,0,0,0,0
+FBgn0004863,0,1,0,0,0,2,1
+FBgn0004864,1426,2205,828,866,1797,930,947
+FBgn0004865,70,88,48,59,48,28,33
+FBgn0004867,44111,51885,26275,38329,41167,36228,39417
+FBgn0004868,3649,5926,2332,2901,4608,2439,2640
+FBgn0004870,71,145,57,45,211,95,90
+FBgn0004872,1085,1576,563,571,2272,854,775
+FBgn0004873,4292,6967,2858,2898,6341,2909,2961
+FBgn0004875,3564,7061,2747,2370,5229,2742,2957
+FBgn0004876,1093,2064,848,755,2004,989,949
+FBgn0004878,5,6,4,3,11,2,2
+FBgn0004880,0,1,0,0,0,2,1
+FBgn0004882,69,99,40,35,79,32,25
+FBgn0004885,7,15,6,5,15,4,4
+FBgn0004888,2731,3717,1551,1989,3538,2077,2201
+FBgn0004889,2069,3326,1064,1140,3397,1309,1372
+FBgn0004892,0,0,0,0,0,0,0
+FBgn0004893,622,1017,434,432,545,247,284
+FBgn0004895,0,1,0,0,1,0,1
+FBgn0004896,6,17,8,5,12,4,2
+FBgn0004897,0,0,0,0,0,0,0
+FBgn0004898,0,0,0,0,0,0,0
+FBgn0004901,860,1535,520,638,1243,646,601
+FBgn0004903,1005,1315,494,509,1361,540,634
+FBgn0004907,9054,14303,4302,5520,14141,4777,5364
+FBgn0004908,193,258,83,91,331,98,97
+FBgn0004910,2,2,1,1,5,0,2
+FBgn0004911,1,0,0,0,0,0,0
+FBgn0004913,2018,3232,1156,1198,2839,1095,1239
+FBgn0004914,1207,2056,895,874,1626,824,940
+FBgn0004915,663,966,275,437,929,444,494
+FBgn0004919,80,210,45,60,217,95,73
+FBgn0004921,2723,4377,1170,1441,3559,1400,1341
+FBgn0004922,51586,78819,33201,49249,53021,38402,43142
+FBgn0004924,3566,6733,2350,2549,5360,2581,2876
+FBgn0004925,4311,6368,2480,3246,5283,3216,3635
+FBgn0004926,4466,6380,2287,3053,6114,3026,3568
+FBgn0004956,0,1,0,1,0,0,0
+FBgn0004957,387,441,193,211,454,267,278
+FBgn0004959,1,1,1,0,2,2,2
+FBgn0005198,1007,1537,657,648,1359,784,737
+FBgn0005278,2809,4526,1480,1746,4547,1743,1902
+FBgn0005322,1159,1779,616,757,1545,665,716
+FBgn0005355,864,1032,425,558,1198,651,669
+FBgn0005386,884,1766,600,584,1331,538,533
+FBgn0005390,1,0,0,0,1,1,0
+FBgn0005391,1,2,3,0,2,4,1
+FBgn0005410,2132,3551,1313,1315,3229,1294,1348
+FBgn0005411,1346,2411,768,1012,1981,1019,1158
+FBgn0005427,396,756,253,248,855,332,351
+FBgn0005511,0,0,1,0,0,0,0
+FBgn0005533,15049,27561,10597,15442,18596,12093,14666
+FBgn0005536,4426,6851,2877,2834,5947,3136,3273
+FBgn0005558,9,23,13,16,22,20,16
+FBgn0005561,7,15,6,4,11,5,3
+FBgn0005563,532,997,303,310,1089,327,347
+FBgn0005564,3,11,4,8,14,2,3
+FBgn0005585,20619,33442,12364,16419,34413,18169,21264
+FBgn0005586,7,14,4,4,8,3,3
+FBgn0005590,1,0,0,1,1,0,0
+FBgn0005592,62,72,25,34,67,31,51
+FBgn0005593,39819,59672,25991,36687,33291,21076,24228
+FBgn0005596,1040,1880,800,758,1510,811,891
+FBgn0005612,721,1462,498,528,1201,595,688
+FBgn0005613,7,20,3,7,11,9,2
+FBgn0005614,32,138,60,54,103,46,46
+FBgn0005616,1095,1692,597,655,1571,691,721
+FBgn0005617,1474,3100,938,988,2149,904,934
+FBgn0005619,15,31,13,18,18,10,17
+FBgn0005624,1064,2218,786,687,1713,667,787
+FBgn0005626,5,6,6,4,8,1,1
+FBgn0005629,132,205,76,79,245,65,59
+FBgn0005630,10167,22061,8452,8256,18838,9277,9731
+FBgn0005631,1999,3312,1248,1138,3325,1446,1464
+FBgn0005632,9326,15239,6228,5939,13019,6478,6501
+FBgn0005633,0,0,1,1,0,0,0
+FBgn0005634,21546,35323,13789,13925,34563,16519,17394
+FBgn0005636,309,822,431,381,465,236,269
+FBgn0005638,7,9,4,1,3,3,2
+FBgn0005640,1322,2220,943,896,3115,1504,1766
+FBgn0005642,977,1862,704,768,1376,790,814
+FBgn0005648,1241,2808,816,932,2392,929,993
+FBgn0005649,2630,4204,1715,1721,4240,2095,2152
+FBgn0005654,0,0,0,0,0,0,0
+FBgn0005655,2984,3887,1358,1780,3639,2217,2365
+FBgn0005658,0,0,0,0,0,2,0
+FBgn0005659,1,1,0,0,3,1,1
+FBgn0005660,115,144,74,80,272,179,182
+FBgn0005664,0,1,1,0,0,0,0
+FBgn0005666,506,632,147,149,842,207,229
+FBgn0005670,107,174,87,99,137,90,84
+FBgn0005671,5620,7203,2949,3388,6207,3782,3878
+FBgn0005672,5059,8963,2989,3374,7475,3271,3667
+FBgn0005674,5638,8478,3234,3369,7396,3667,3586
+FBgn0005677,4,5,7,3,8,6,6
+FBgn0005683,346,585,194,224,472,237,281
+FBgn0005694,1025,1769,670,665,1195,592,630
+FBgn0005695,294,439,165,176,439,197,214
+FBgn0005696,862,1357,488,630,937,584,584
+FBgn0005771,17,33,20,14,21,10,10
+FBgn0005775,3,1,0,1,3,1,1
+FBgn0005777,1688,2779,875,1002,2520,938,1078
+FBgn0005778,1,2,0,0,0,0,0
+FBgn0005779,0,1,0,0,0,0,0
+FBgn0008635,6898,9233,4305,4868,7456,5245,5798
+FBgn0008636,0,0,0,0,0,0,0
+FBgn0008646,3,1,1,1,0,0,0
+FBgn0008649,288,491,156,176,613,258,297
+FBgn0008651,0,0,0,0,0,0,0
+FBgn0008654,1401,2693,884,791,1974,836,805
+FBgn0010014,4,6,4,2,11,1,2
+FBgn0010015,18,86,39,25,52,25,32
+FBgn0010019,1,0,0,0,0,1,0
+FBgn0010038,74,78,40,41,99,39,52
+FBgn0010039,871,1376,353,591,1578,522,645
+FBgn0010040,12,19,9,5,12,5,4
+FBgn0010041,83,161,43,66,183,70,97
+FBgn0010042,6,14,2,3,16,2,8
+FBgn0010043,99,204,75,105,185,64,63
+FBgn0010044,3,10,2,2,19,4,4
+FBgn0010051,2780,4801,1902,1902,3886,2056,1920
+FBgn0010052,22,44,11,16,31,16,18
+FBgn0010053,193,413,115,183,278,89,116
+FBgn0010078,22917,52076,17634,23734,37121,20399,23890
+FBgn0010083,919,1359,547,598,1224,791,669
+FBgn0010097,91,120,45,61,204,110,161
+FBgn0010100,6786,9695,3750,4613,6897,4154,4689
+FBgn0010105,4,5,2,3,4,1,6
+FBgn0010109,0,4,0,5,4,1,2
+FBgn0010110,4114,7166,2934,2783,5910,3163,3092
+FBgn0010113,3163,8748,3759,3103,7134,3357,3826
+FBgn0010114,5,5,4,4,7,2,4
+FBgn0010173,3380,5741,1969,2242,5263,2375,2584
+FBgn0010194,1225,2016,662,769,2247,986,1035
+FBgn0010197,0,2,0,0,2,0,0
+FBgn0010198,39769,59665,27544,39109,54437,31537,39664
+FBgn0010213,1348,1690,647,845,1826,941,926
+FBgn0010215,2433,3006,1004,968,4068,1028,974
+FBgn0010217,10690,9462,3931,5602,11687,5219,5469
+FBgn0010218,3,1,1,0,2,1,0
+FBgn0010220,657,1197,441,474,1042,424,469
+FBgn0010222,720,907,425,533,572,342,410
+FBgn0010223,118,167,53,60,56,26,26
+FBgn0010225,15301,26008,9522,11947,17497,7960,8403
+FBgn0010226,167,259,89,136,263,144,155
+FBgn0010228,1225,2440,711,795,2982,1176,1116
+FBgn0010235,2847,4718,1771,2089,3825,1873,2059
+FBgn0010238,1918,3600,1248,1325,3430,1716,2009
+FBgn0010240,145,203,41,74,181,82,87
+FBgn0010241,9,11,8,2,8,5,8
+FBgn0010246,9770,11906,5322,5652,8395,4867,5452
+FBgn0010256,3834,7419,2255,2503,5923,2341,2455
+FBgn0010258,8,11,3,7,16,9,7
+FBgn0010263,10,23,10,14,18,12,9
+FBgn0010265,27524,52733,17638,25972,37678,21314,24872
+FBgn0010269,289,613,236,265,529,289,311
+FBgn0010278,3867,7102,2569,3073,6353,3257,3728
+FBgn0010280,3893,7292,2899,2971,5062,2847,3103
+FBgn0010282,1245,2377,795,995,2362,1122,1238
+FBgn0010287,246,286,111,145,256,161,135
+FBgn0010288,1519,2230,817,1075,2351,935,1237
+FBgn0010292,761,1063,351,466,787,424,434
+FBgn0010294,0,0,0,0,0,0,0
+FBgn0010295,0,0,0,0,1,0,0
+FBgn0010296,0,0,0,0,0,0,0
+FBgn0010300,5916,9563,4055,3782,6358,3377,3514
+FBgn0010303,5093,9304,3747,3838,7711,4140,4298
+FBgn0010309,405,517,248,291,567,332,357
+FBgn0010313,40,87,44,26,100,38,41
+FBgn0010314,412,494,164,194,847,315,298
+FBgn0010315,777,1168,414,444,1148,479,518
+FBgn0010316,706,1171,357,332,688,229,232
+FBgn0010317,9,5,2,5,7,2,6
+FBgn0010323,1,1,0,1,1,0,0
+FBgn0010328,7864,12170,5131,5178,9359,5276,5365
+FBgn0010329,37,65,35,30,78,46,41
+FBgn0010333,3505,6276,1902,2161,5139,2179,2536
+FBgn0010339,891,1217,409,579,1225,616,675
+FBgn0010340,163,274,70,74,216,77,63
+FBgn0010341,6327,11517,3423,4212,8709,4217,4621
+FBgn0010342,1054,1685,588,616,1462,715,784
+FBgn0010348,4311,7791,2145,2743,7739,2614,2915
+FBgn0010349,10519,12775,5885,5815,13454,7392,6650
+FBgn0010350,865,1233,410,525,1285,421,435
+FBgn0010352,4181,5599,2443,2693,4977,2864,3114
+FBgn0010355,2207,3584,1449,1563,3069,1606,1683
+FBgn0010356,637,764,304,333,717,348,402
+FBgn0010357,0,0,0,0,0,0,0
+FBgn0010358,0,0,0,1,0,0,0
+FBgn0010359,0,0,0,0,0,0,0
+FBgn0010379,2353,4472,1503,1518,3304,1385,1457
+FBgn0010380,4270,5485,2576,2830,4533,3039,3113
+FBgn0010381,19,10,5,7,19,8,9
+FBgn0010382,1369,2477,1031,987,1460,752,748
+FBgn0010383,25,52,27,28,31,20,14
+FBgn0010385,0,1,2,1,3,2,1
+FBgn0010387,14,19,2,8,2,1,2
+FBgn0010388,126,98,23,18,89,52,42
+FBgn0010389,5,19,6,12,7,7,7
+FBgn0010391,2555,3411,1666,1963,3118,2219,2449
+FBgn0010395,1361,1034,432,427,2718,967,1044
+FBgn0010397,630,847,489,433,903,539,534
+FBgn0010398,176,206,67,94,207,90,113
+FBgn0010399,7,6,4,1,15,4,8
+FBgn0010401,0,5,0,0,0,0,0
+FBgn0010403,0,1,1,0,3,1,0
+FBgn0010406,1174,1801,532,718,1881,741,844
+FBgn0010407,49,68,27,27,113,37,31
+FBgn0010408,27326,23328,13817,21932,24849,17442,18558
+FBgn0010409,31030,43123,15231,24434,33151,20995,22969
+FBgn0010410,33121,37512,18350,31093,40904,27485,28858
+FBgn0010411,26942,48967,14797,22615,28673,20491,24235
+FBgn0010412,45242,72695,30132,44285,48197,37116,41233
+FBgn0010414,1,3,1,0,0,1,1
+FBgn0010415,1722,3290,1238,1200,2820,1372,1598
+FBgn0010416,1460,2492,818,959,2172,1050,1181
+FBgn0010417,455,974,308,363,783,370,430
+FBgn0010421,320,583,134,186,477,208,193
+FBgn0010422,958,1894,551,654,1574,697,840
+FBgn0010423,1,1,0,1,0,0,0
+FBgn0010424,0,1,0,0,1,1,0
+FBgn0010425,0,0,0,0,0,0,0
+FBgn0010426,571,952,273,329,851,387,381
+FBgn0010431,5,0,1,1,3,1,4
+FBgn0010433,0,0,0,0,0,0,0
+FBgn0010434,17916,30775,12057,12408,27188,14566,15764
+FBgn0010435,79,119,35,55,102,38,46
+FBgn0010438,742,1652,429,574,1083,543,681
+FBgn0010441,972,1532,570,619,1057,576,664
+FBgn0010452,0,1,0,1,0,1,0
+FBgn0010453,1,3,4,2,1,0,1
+FBgn0010470,4407,6951,2663,3285,8846,4435,4992
+FBgn0010473,28,56,29,27,31,15,18
+FBgn0010482,3,8,6,3,32,13,7
+FBgn0010488,12758,26407,9659,9481,19571,9130,9934
+FBgn0010497,180,200,89,95,244,128,143
+FBgn0010501,221,355,137,131,377,201,193
+FBgn0010504,665,1246,420,437,1035,516,528
+FBgn0010516,2375,3291,1301,1690,2531,1398,1544
+FBgn0010520,205,246,80,126,199,92,75
+FBgn0010531,189,319,83,143,295,151,176
+FBgn0010548,2232,3798,1453,1772,2610,1517,1744
+FBgn0010549,604,788,299,359,568,248,271
+FBgn0010551,3399,4678,1938,2303,5430,2697,3237
+FBgn0010575,2846,7712,2987,2757,5560,2779,2959
+FBgn0010583,2098,2832,1099,1173,2328,1125,1129
+FBgn0010590,1499,1785,651,892,1543,951,1133
+FBgn0010591,2388,3231,1224,1486,1876,963,1064
+FBgn0010602,1992,3417,1088,1407,2655,1314,1511
+FBgn0010607,224,454,109,155,324,126,154
+FBgn0010609,5844,7479,2802,3021,7451,3102,3180
+FBgn0010611,2383,3468,1498,1858,3454,1822,2054
+FBgn0010612,1627,2253,710,1042,2376,1081,1058
+FBgn0010620,19,44,8,14,59,21,18
+FBgn0010621,11791,12688,5875,7791,12080,8782,9771
+FBgn0010622,223,336,138,172,334,200,233
+FBgn0010638,1555,2480,742,907,2634,1128,1076
+FBgn0010651,784,1179,476,573,1094,578,611
+FBgn0010660,2634,4490,1428,1500,3944,1769,1708
+FBgn0010704,2225,3836,1064,1408,3516,1401,1571
+FBgn0010709,257,396,133,178,322,139,176
+FBgn0010741,1249,1735,579,771,2088,830,965
+FBgn0010747,2243,3194,1135,1442,2655,1318,1542
+FBgn0010750,928,1813,555,752,1255,752,799
+FBgn0010762,2129,4858,2208,1930,3811,2023,2341
+FBgn0010768,435,716,261,269,413,217,250
+FBgn0010770,585,1032,342,406,697,375,402
+FBgn0010772,1132,2135,732,857,1605,715,817
+FBgn0010774,1685,3097,1149,1238,2515,1278,1188
+FBgn0010786,3782,4824,2115,2392,6054,3515,3663
+FBgn0010803,1633,2767,939,1164,2567,1156,1309
+FBgn0010808,1123,1638,642,789,1415,722,778
+FBgn0010812,921,1586,572,642,1736,742,796
+FBgn0010825,1540,3559,1658,1255,3272,1806,1807
+FBgn0010830,539,932,344,362,733,351,440
+FBgn0010877,3295,5027,2203,2303,3867,2130,2247
+FBgn0010894,192,254,75,84,527,161,167
+FBgn0010905,1606,3927,1714,1461,3558,1934,2045
+FBgn0010909,14645,25210,10840,10655,17528,10016,10010
+FBgn0010926,742,1277,436,448,983,445,488
+FBgn0011016,1914,2549,871,1163,3657,1508,1643
+FBgn0011020,382,734,226,241,596,313,319
+FBgn0011202,1577,2902,1125,1133,2728,1230,1281
+FBgn0011204,1668,2652,1085,1212,2001,1092,1209
+FBgn0011205,360,664,193,219,450,198,222
+FBgn0011206,286,706,236,228,369,138,167
+FBgn0011207,944,1307,506,552,1247,600,711
+FBgn0011211,15673,15706,8362,10108,14578,10227,10587
+FBgn0011217,6475,10513,3169,3571,10038,3590,3883
+FBgn0011219,9792,16821,4562,5073,14983,4497,5239
+FBgn0011224,1346,2290,814,806,1912,775,836
+FBgn0011225,1043,1562,615,628,1536,750,803
+FBgn0011227,688,1017,192,278,907,315,391
+FBgn0011230,21515,31792,12912,11911,27443,12967,12023
+FBgn0011232,674,1102,334,438,1053,500,550
+FBgn0011236,2042,4145,1671,1656,2837,1375,1658
+FBgn0011239,0,0,0,0,1,0,0
+FBgn0011241,136,233,57,78,304,96,94
+FBgn0011244,0,1,0,0,0,0,0
+FBgn0011259,184,420,152,142,620,242,282
+FBgn0011260,82,253,50,50,807,243,257
+FBgn0011270,0,0,0,0,0,0,0
+FBgn0011272,31728,60737,22666,29572,40099,24624,27002
+FBgn0011273,0,1,0,0,0,0,0
+FBgn0011274,1178,1906,544,624,972,437,421
+FBgn0011276,4,19,14,7,12,15,6
+FBgn0011277,1,3,0,1,1,2,0
+FBgn0011278,0,0,0,0,0,0,0
+FBgn0011279,1,0,0,0,1,0,0
+FBgn0011280,5,13,8,4,12,8,12
+FBgn0011281,0,0,0,0,0,1,0
+FBgn0011282,0,0,0,0,1,0,0
+FBgn0011283,2,3,5,6,5,5,0
+FBgn0011284,46777,66578,28500,40739,46787,34833,41640
+FBgn0011285,629,1166,468,424,976,417,458
+FBgn0011286,22,25,12,13,31,21,13
+FBgn0011288,23,47,12,11,81,16,20
+FBgn0011289,2300,3848,1299,1527,2731,1416,1568
+FBgn0011290,684,1135,327,423,954,484,526
+FBgn0011291,258,407,130,140,279,160,189
+FBgn0011293,0,1,0,0,1,1,2
+FBgn0011294,0,0,0,0,0,0,0
+FBgn0011296,0,1,1,1,1,1,2
+FBgn0011297,708,974,409,538,888,507,576
+FBgn0011300,1338,2625,819,933,2091,757,820
+FBgn0011305,573,1050,404,434,1252,582,551
+FBgn0011327,516,951,309,394,842,355,422
+FBgn0011335,392,579,208,243,528,189,223
+FBgn0011336,4984,5397,2396,2799,5740,3133,3255
+FBgn0011361,2046,2597,993,1400,2402,1328,1497
+FBgn0011455,1065,2089,606,770,1477,777,836
+FBgn0011474,1126,2163,740,727,1800,729,832
+FBgn0011476,63,112,21,35,84,42,39
+FBgn0011481,990,2492,890,730,1721,820,759
+FBgn0011509,829,1518,391,524,1310,502,548
+FBgn0011554,0,0,0,0,0,0,0
+FBgn0011555,0,0,0,0,0,0,0
+FBgn0011556,0,0,0,0,0,0,0
+FBgn0011559,1,1,0,0,2,0,3
+FBgn0011566,395,475,220,292,462,323,393
+FBgn0011569,0,0,0,0,0,0,0
+FBgn0011570,2608,4585,1604,1729,3601,1651,1826
+FBgn0011571,3307,4471,2686,2542,4311,3468,3367
+FBgn0011573,2142,3449,1124,1597,3176,1572,1948
+FBgn0011576,82,183,83,77,169,58,69
+FBgn0011577,3325,4248,1874,1763,4660,2177,2431
+FBgn0011581,2,1,0,0,1,0,1
+FBgn0011582,0,0,0,1,2,0,0
+FBgn0011584,2250,3894,1114,1463,3170,1174,1451
+FBgn0011586,3706,4881,1640,1873,4204,1849,2360
+FBgn0011589,3,18,7,6,23,15,19
+FBgn0011591,47,110,40,49,161,59,68
+FBgn0011592,557,778,269,289,1143,445,442
+FBgn0011596,57,121,42,46,171,43,51
+FBgn0011603,9,14,1,7,6,7,3
+FBgn0011604,3787,6033,1915,2249,6018,2394,2535
+FBgn0011606,1846,2653,1029,1081,3215,1687,1745
+FBgn0011638,3978,7144,2392,2998,5771,2633,2958
+FBgn0011640,2025,2949,1289,1461,2550,1587,1583
+FBgn0011642,659,948,245,196,1133,235,222
+FBgn0011648,1257,1635,852,883,1459,840,1028
+FBgn0011653,3,28,9,2,6,5,5
+FBgn0011655,1312,2683,1172,1137,2092,1171,1292
+FBgn0011656,944,1501,551,627,1294,593,580
+FBgn0011659,728,1103,432,463,799,419,410
+FBgn0011660,470,837,250,278,714,297,271
+FBgn0011661,25180,38557,17540,19650,36450,21758,23463
+FBgn0011666,1162,2727,1082,923,2545,1056,1071
+FBgn0011668,0,1,0,0,4,0,1
+FBgn0011669,1,2,0,0,6,0,0
+FBgn0011670,1,3,0,0,8,0,0
+FBgn0011672,1311,1601,728,858,1530,735,755
+FBgn0011674,86,135,50,72,242,121,125
+FBgn0011676,98,237,111,109,310,145,192
+FBgn0011692,2322,3117,1166,1304,3393,1650,1751
+FBgn0011693,2,7,0,1,6,2,0
+FBgn0011694,0,0,0,0,0,0,0
+FBgn0011695,10,26,10,3,14,7,6
+FBgn0011701,0,4,0,1,2,0,2
+FBgn0011703,3562,4889,1735,1951,4308,1799,2013
+FBgn0011704,3115,3991,1524,2066,4149,2114,2310
+FBgn0011705,2130,2734,1009,1080,3547,1095,1186
+FBgn0011706,21,69,10,20,84,25,32
+FBgn0011708,1549,3344,917,1174,2295,1037,1200
+FBgn0011710,2611,3985,1482,1692,4785,2334,2469
+FBgn0011715,1190,1912,649,812,1587,870,978
+FBgn0011722,17951,24394,10665,11854,14403,8863,8700
+FBgn0011723,0,1,0,0,0,0,0
+FBgn0011725,786,1132,505,551,992,546,589
+FBgn0011726,10154,16927,4390,5367,18617,5632,6219
+FBgn0011737,748,1121,388,491,1038,563,588
+FBgn0011739,2410,4645,1708,1664,3546,1542,1648
+FBgn0011740,854,1200,461,504,1102,556,653
+FBgn0011741,895,1407,521,679,1337,754,744
+FBgn0011742,2593,3573,1311,1473,4056,1663,1892
+FBgn0011743,0,2,1,0,0,0,0
+FBgn0011744,3092,5083,1912,2370,5228,2677,2951
+FBgn0011745,1684,2688,1028,1326,2667,1254,1443
+FBgn0011746,3,27,5,9,14,4,7
+FBgn0011747,6951,8550,2839,2436,10427,2747,2631
+FBgn0011754,567,1154,394,441,1282,552,716
+FBgn0011758,0,1,0,0,0,0,0
+FBgn0011760,7237,10753,3108,3757,9051,3698,4407
+FBgn0011761,0,2,0,0,1,1,4
+FBgn0011762,293,334,127,165,347,123,145
+FBgn0011763,2460,3630,1260,1513,3151,1478,1646
+FBgn0011764,1881,2691,1092,1142,2968,1145,1241
+FBgn0011766,6147,11092,4151,4377,7670,3936,4351
+FBgn0011768,2177,2655,1235,1559,2740,1759,1823
+FBgn0011769,107,283,74,92,278,133,122
+FBgn0011770,312,418,130,202,550,234,257
+FBgn0011771,2086,2914,1006,1172,3066,1202,1223
+FBgn0011774,599,1073,348,488,1020,473,555
+FBgn0011785,2512,4381,1782,1779,3597,2168,2146
+FBgn0011787,886,1461,441,576,1233,595,656
+FBgn0011802,352,600,147,192,644,204,218
+FBgn0011812,0,0,0,0,0,1,0
+FBgn0011817,305,1057,285,290,1006,384,492
+FBgn0011818,744,1078,420,458,1025,447,513
+FBgn0011822,0,0,0,0,0,0,0
+FBgn0011823,6055,8348,3249,3669,10190,5274,5795
+FBgn0011824,1240,1411,725,792,1472,966,925
+FBgn0011826,1117,2489,937,887,1833,864,978
+FBgn0011828,56105,74916,32744,36360,60356,42863,39484
+FBgn0011829,70,171,75,67,194,95,102
+FBgn0011832,0,0,0,0,0,0,0
+FBgn0011834,0,0,0,0,0,0,0
+FBgn0011836,695,1107,432,466,985,481,488
+FBgn0011837,2303,5581,2090,1972,3976,2017,2261
+FBgn0011840,0,0,0,0,0,0,0
+FBgn0011844,0,0,0,0,0,0,0
+FBgn0011845,0,0,0,0,0,1,0
+FBgn0011848,0,0,0,0,0,0,0
+FBgn0011849,0,0,0,0,0,0,0
+FBgn0011850,0,0,0,0,0,0,0
+FBgn0011851,0,0,0,0,0,0,0
+FBgn0011852,0,0,0,0,0,0,0
+FBgn0011853,0,0,0,0,0,0,0
+FBgn0011854,0,0,0,0,0,0,0
+FBgn0011855,0,0,0,0,0,0,0
+FBgn0011858,0,1,0,0,1,0,1
+FBgn0011859,1,5,0,1,0,0,0
+FBgn0011860,0,0,0,0,1,0,0
+FBgn0011861,0,0,0,0,0,0,0
+FBgn0011862,0,0,0,0,0,0,0
+FBgn0011863,0,0,0,0,0,0,0
+FBgn0011864,0,0,0,0,0,0,0
+FBgn0011865,0,0,0,0,0,0,0
+FBgn0011866,0,0,0,0,0,0,0
+FBgn0011867,0,0,0,0,0,0,0
+FBgn0011868,0,0,0,0,0,0,0
+FBgn0011869,0,0,0,0,0,0,0
+FBgn0011870,0,0,0,0,0,0,0
+FBgn0011871,0,0,0,0,0,0,0
+FBgn0011872,0,0,0,0,0,0,0
+FBgn0011877,1,0,0,0,1,0,0
+FBgn0011878,0,0,0,0,0,0,1
+FBgn0011879,0,0,0,0,0,0,0
+FBgn0011880,0,0,0,0,0,0,0
+FBgn0011881,0,0,0,0,0,0,0
+FBgn0011882,0,0,2,0,0,0,0
+FBgn0011883,0,1,1,0,0,0,0
+FBgn0011884,0,1,0,0,1,1,0
+FBgn0011885,0,1,0,0,0,0,0
+FBgn0011887,0,0,0,0,0,0,0
+FBgn0011888,0,0,0,0,0,0,0
+FBgn0011889,0,0,0,0,0,0,0
+FBgn0011890,0,0,0,0,0,0,0
+FBgn0011891,0,0,0,0,0,0,0
+FBgn0011892,0,0,0,0,0,0,0
+FBgn0011893,0,0,0,0,0,0,0
+FBgn0011894,0,0,0,0,0,0,1
+FBgn0011895,0,0,0,0,0,0,0
+FBgn0011896,0,0,0,0,0,0,0
+FBgn0011897,1,0,0,0,0,0,0
+FBgn0011902,0,0,0,0,0,0,0
+FBgn0011904,0,0,0,0,0,0,0
+FBgn0011905,0,0,0,0,0,0,0
+FBgn0011906,0,0,0,0,0,0,0
+FBgn0011909,0,0,0,0,1,0,0
+FBgn0011910,0,0,0,0,2,0,0
+FBgn0011915,0,0,0,0,0,0,0
+FBgn0011916,0,0,0,0,0,0,0
+FBgn0011919,0,0,0,0,0,0,0
+FBgn0011921,0,0,0,0,0,0,0
+FBgn0011927,0,0,0,0,0,0,0
+FBgn0011928,0,0,0,0,0,0,0
+FBgn0011931,0,2,0,0,0,0,0
+FBgn0011932,0,0,0,0,0,0,0
+FBgn0011933,0,0,0,0,0,0,0
+FBgn0011934,0,0,0,0,0,0,0
+FBgn0011935,0,0,0,0,0,0,0
+FBgn0011936,0,0,0,0,1,0,0
+FBgn0011937,0,0,0,0,0,0,0
+FBgn0011938,0,0,0,0,0,0,0
+FBgn0011944,0,0,0,0,0,0,0
+FBgn0011945,0,0,0,0,0,0,0
+FBgn0011948,0,0,0,0,0,0,0
+FBgn0011949,0,0,0,0,0,0,0
+FBgn0011950,0,0,0,0,0,0,0
+FBgn0011951,0,0,0,0,0,0,0
+FBgn0011952,0,0,0,0,0,0,0
+FBgn0011953,0,0,0,0,0,0,0
+FBgn0011954,0,0,1,0,0,0,0
+FBgn0011955,0,0,0,0,0,0,0
+FBgn0011956,0,0,0,0,0,0,0
+FBgn0011957,0,0,0,0,0,0,0
+FBgn0011958,0,0,0,0,0,0,0
+FBgn0011959,0,0,0,0,0,0,0
+FBgn0011960,0,0,0,0,0,0,0
+FBgn0011961,0,0,0,0,0,0,0
+FBgn0011962,0,0,0,0,0,0,0
+FBgn0011963,0,1,0,0,0,0,0
+FBgn0011965,0,0,0,0,0,0,0
+FBgn0011966,0,0,1,0,0,0,0
+FBgn0011970,0,0,0,0,0,0,0
+FBgn0011971,1,0,0,0,0,0,0
+FBgn0011974,0,0,0,0,0,0,0
+FBgn0011975,0,0,0,0,0,0,0
+FBgn0011976,0,0,0,0,0,0,0
+FBgn0011977,0,0,0,0,0,0,0
+FBgn0011980,0,0,0,0,0,0,0
+FBgn0011981,0,1,0,0,0,0,0
+FBgn0011982,0,0,0,0,0,0,0
+FBgn0011983,0,0,0,0,0,0,0
+FBgn0011984,0,0,0,0,1,0,0
+FBgn0011985,0,0,0,0,0,0,0
+FBgn0011986,0,0,0,0,0,0,0
+FBgn0011987,1,6,0,0,7,0,0
+FBgn0011993,0,0,0,0,0,0,0
+FBgn0011994,0,0,0,0,0,0,0
+FBgn0011998,0,0,0,0,0,0,0
+FBgn0011999,0,0,0,0,0,0,0
+FBgn0012000,0,0,0,0,1,0,0
+FBgn0012001,0,0,0,0,0,0,0
+FBgn0012002,0,0,0,0,0,0,0
+FBgn0012003,0,0,1,0,1,0,0
+FBgn0012004,0,0,0,0,0,0,0
+FBgn0012009,0,0,0,0,0,0,0
+FBgn0012010,0,0,0,0,0,0,0
+FBgn0012011,1,0,0,0,4,0,0
+FBgn0012016,0,0,0,0,0,0,0
+FBgn0012017,0,0,1,0,0,0,0
+FBgn0012018,0,0,0,0,0,0,0
+FBgn0012024,0,0,0,0,0,0,0
+FBgn0012025,0,0,0,0,0,0,0
+FBgn0012026,0,0,0,0,0,0,0
+FBgn0012027,0,0,0,0,0,0,0
+FBgn0012028,0,0,0,0,0,0,0
+FBgn0012034,2539,3072,1229,1500,2341,1224,1313
+FBgn0012036,5964,9864,3566,4679,7874,3897,4445
+FBgn0012037,1110,1119,432,616,1258,723,855
+FBgn0012042,31,17,7,9,30,20,12
+FBgn0012049,3029,4938,2301,2159,4402,2437,2600
+FBgn0012051,1923,2795,984,1166,2990,1190,1273
+FBgn0012058,1193,2250,833,875,1685,933,929
+FBgn0012066,906,1050,403,478,1055,405,421
+FBgn0012344,5,7,5,5,7,4,2
+FBgn0013263,189,198,29,29,299,33,35
+FBgn0013269,3211,4378,1665,2090,4133,2093,2348
+FBgn0013272,19633,29518,9892,11335,19902,8499,9020
+FBgn0013275,0,0,0,0,0,0,0
+FBgn0013276,0,9,1,2,3,3,2
+FBgn0013277,0,0,7,1,1,4,0
+FBgn0013278,0,4,3,4,5,8,7
+FBgn0013279,1,1,10,4,1,3,10
+FBgn0013300,0,0,0,0,0,0,0
+FBgn0013301,0,0,0,0,0,0,0
+FBgn0013303,159,249,62,68,341,63,69
+FBgn0013305,4354,5799,2101,2643,5341,2055,2309
+FBgn0013307,0,0,0,0,0,0,0
+FBgn0013308,0,1,0,0,0,0,0
+FBgn0013323,1,6,5,3,5,2,3
+FBgn0013325,25879,35948,15569,23195,33495,19708,22009
+FBgn0013334,1128,2423,916,871,1913,753,832
+FBgn0013342,4,5,4,2,3,1,7
+FBgn0013343,1863,5779,1694,1679,4853,1931,2374
+FBgn0013347,684,1052,271,392,1314,473,572
+FBgn0013348,2,2,1,1,5,2,0
+FBgn0013432,415,808,196,271,755,313,364
+FBgn0013433,0,0,0,0,1,1,0
+FBgn0013435,113,192,68,79,203,100,83
+FBgn0013442,11,12,10,10,17,9,6
+FBgn0013467,0,0,0,0,1,1,0
+FBgn0013469,4,26,6,5,16,7,13
+FBgn0013531,343,533,148,208,432,205,254
+FBgn0013548,1007,1432,674,696,844,575,608
+FBgn0013563,302,441,162,188,411,170,202
+FBgn0013576,3260,5268,1961,2051,3483,1578,1652
+FBgn0013591,5774,8805,3880,4012,8551,4660,4675
+FBgn0013717,443,604,239,291,567,283,304
+FBgn0013718,352,572,238,205,473,181,227
+FBgn0013720,388,530,191,262,635,349,385
+FBgn0013725,0,0,0,0,0,0,0
+FBgn0013726,2528,4180,1637,1705,3841,1891,1972
+FBgn0013732,139,272,69,74,298,113,117
+FBgn0013733,34774,56166,23714,20563,42492,21476,20159
+FBgn0013745,1,1,0,0,0,0,0
+FBgn0013746,1611,2611,833,954,2512,885,983
+FBgn0013749,625,657,252,276,861,212,249
+FBgn0013750,2336,3971,1248,1559,3824,1231,1388
+FBgn0013751,0,0,0,0,3,0,0
+FBgn0013753,595,913,342,492,802,501,542
+FBgn0013755,0,0,2,0,1,1,0
+FBgn0013756,5505,10101,3697,3510,9083,4050,4024
+FBgn0013759,3395,5073,2294,2263,4197,2501,2724
+FBgn0013762,411,553,200,234,555,259,312
+FBgn0013763,32770,50502,22175,30825,30345,16869,19322
+FBgn0013764,1051,1738,760,862,1284,844,928
+FBgn0013765,2505,4284,1557,1689,5877,2361,2553
+FBgn0013767,1,0,0,1,3,2,1
+FBgn0013770,34027,51658,23246,28753,37560,21863,24654
+FBgn0013771,64,102,45,41,169,72,62
+FBgn0013772,8,10,4,4,20,5,7
+FBgn0013773,142,278,86,85,304,137,131
+FBgn0013799,936,1437,571,639,1097,640,715
+FBgn0013809,22,45,11,8,46,4,4
+FBgn0013810,545,690,270,312,1036,411,391
+FBgn0013811,393,748,337,351,348,193,209
+FBgn0013812,3,16,7,5,9,4,6
+FBgn0013813,14,35,17,9,45,17,22
+FBgn0013948,226,822,300,265,882,348,394
+FBgn0013949,1,3,2,2,3,2,3
+FBgn0013953,58,64,29,38,47,23,35
+FBgn0013954,5097,7692,2720,3641,7203,4115,4476
+FBgn0013955,2134,4035,1327,1448,3332,1513,1595
+FBgn0013972,6,25,11,10,11,6,5
+FBgn0013973,0,0,0,0,1,0,0
+FBgn0013981,4929,7497,2170,3157,5688,2734,3271
+FBgn0013983,657,923,340,443,913,499,502
+FBgn0013984,3850,10521,3660,3174,8811,3181,3371
+FBgn0013987,2869,4774,1783,2022,3773,2035,2272
+FBgn0013988,3160,4177,2081,2347,2895,1927,2171
+FBgn0013995,18,4,2,4,14,5,9
+FBgn0013997,2168,2981,1153,1135,4013,1731,1645
+FBgn0013998,1333,2125,803,991,1875,931,1086
+FBgn0014000,1,0,1,0,1,1,0
+FBgn0014001,2273,3952,1469,1664,3156,1610,1801
+FBgn0014002,17643,28635,10631,12665,27002,14219,15689
+FBgn0014006,1766,2576,997,1010,2488,1149,1293
+FBgn0014007,1748,3426,975,890,3154,948,942
+FBgn0014009,2226,3782,1265,1498,2667,1196,1504
+FBgn0014010,2976,5936,1792,2090,4635,1705,2013
+FBgn0014011,1227,1938,675,682,2067,804,939
+FBgn0014018,3008,5052,1794,2166,4051,1977,2153
+FBgn0014019,1,3,0,1,1,3,2
+FBgn0014020,14948,21567,6186,7107,20282,6952,7577
+FBgn0014022,303,607,139,174,506,192,185
+FBgn0014023,620,873,343,425,917,444,473
+FBgn0014024,1638,2141,973,1137,1911,1117,1135
+FBgn0014026,40636,72554,28061,38212,54673,32185,36551
+FBgn0014028,2419,4138,1665,1818,2608,1939,2058
+FBgn0014029,3238,4114,2074,2505,5223,3387,3841
+FBgn0014031,13,31,18,16,30,37,24
+FBgn0014032,207,335,98,153,365,143,180
+FBgn0014033,11612,12500,3981,4908,8638,3980,4266
+FBgn0014037,4182,9817,3575,3786,7530,4080,4673
+FBgn0014073,4,6,4,3,5,1,1
+FBgn0014075,3279,4573,1620,1808,4544,1871,1839
+FBgn0014076,0,0,0,0,0,0,0
+FBgn0014092,299,562,116,171,591,187,193
+FBgn0014127,1124,1692,605,682,2044,850,866
+FBgn0014133,3690,6336,2440,2661,4447,2605,2832
+FBgn0014135,49,345,76,89,248,112,93
+FBgn0014141,33636,37138,18616,17848,26192,18079,17072
+FBgn0014143,0,0,0,0,0,0,0
+FBgn0014163,2217,6682,2282,2422,8701,3212,3789
+FBgn0014179,0,2,1,0,0,0,3
+FBgn0014184,9045,10448,3757,4587,10478,4228,4609
+FBgn0014189,4977,6588,2821,3165,5393,3054,3398
+FBgn0014269,778,1406,475,589,897,586,623
+FBgn0014340,726,1203,417,447,1077,500,491
+FBgn0014342,232,319,107,139,360,164,182
+FBgn0014343,11,46,13,15,17,5,6
+FBgn0014362,1161,2000,620,601,1912,686,700
+FBgn0014366,647,1084,359,430,1034,460,449
+FBgn0014368,0,0,0,0,0,0,1
+FBgn0014380,1540,2294,655,925,1979,863,987
+FBgn0014388,21077,55919,18417,17750,41589,15729,17421
+FBgn0014391,845,1330,404,595,1414,585,694
+FBgn0014395,42,52,27,21,55,16,26
+FBgn0014396,1,6,1,1,6,2,3
+FBgn0014411,2079,4211,1305,1449,3104,1564,1691
+FBgn0014417,1941,2654,893,1069,1864,905,979
+FBgn0014427,148,240,74,121,197,94,113
+FBgn0014454,0,0,0,0,0,0,0
+FBgn0014455,4482,4986,2221,2800,4550,2927,3109
+FBgn0014462,0,1,0,0,1,0,0
+FBgn0014464,3,7,3,1,4,2,4
+FBgn0014465,3,5,5,1,11,2,1
+FBgn0014466,7,10,3,1,9,5,4
+FBgn0014467,700,1158,571,560,859,636,652
+FBgn0014469,1017,1697,618,667,1301,541,581
+FBgn0014848,0,0,0,0,0,0,0
+FBgn0014849,0,0,0,0,0,0,0
+FBgn0014850,0,0,0,0,0,0,0
+FBgn0014851,0,0,0,0,0,0,0
+FBgn0014857,1904,2769,1121,1432,2118,1208,1355
+FBgn0014859,8,21,7,11,29,8,10
+FBgn0014861,1998,2760,1045,1236,2602,1427,1404
+FBgn0014863,10,11,2,9,15,9,9
+FBgn0014865,10,15,2,0,10,5,3
+FBgn0014868,4201,5976,2526,3235,5346,3237,3492
+FBgn0014869,1487,2237,839,1032,2639,1606,1712
+FBgn0014870,937,1825,763,629,1621,712,738
+FBgn0014877,453,724,245,275,695,272,348
+FBgn0014879,1237,2042,582,750,1999,841,993
+FBgn0014903,0,0,0,0,0,0,0
+FBgn0014906,4857,6889,2612,3265,4593,2390,2665
+FBgn0014930,332,446,160,244,466,229,263
+FBgn0014931,393,486,160,242,433,162,180
+FBgn0014949,4,11,1,5,18,2,1
+FBgn0014963,3359,6438,2497,2294,5010,2445,2383
+FBgn0015000,1122,1658,563,733,1367,691,779
+FBgn0015001,1,5,1,6,4,2,1
+FBgn0015008,0,0,0,0,0,0,0
+FBgn0015010,3,4,3,2,12,2,5
+FBgn0015011,1,0,0,2,2,1,2
+FBgn0015014,977,1772,554,657,1639,868,830
+FBgn0015019,8494,11101,5057,6177,9038,6372,7032
+FBgn0015024,2668,5425,1586,1748,4403,1727,1927
+FBgn0015025,73,193,44,65,165,47,66
+FBgn0015031,1602,1714,519,881,2475,909,927
+FBgn0015032,2,3,2,1,11,3,1
+FBgn0015033,2,1,1,0,6,3,2
+FBgn0015034,11,20,7,12,20,12,11
+FBgn0015035,2,12,2,4,6,1,1
+FBgn0015036,81,144,48,53,125,62,71
+FBgn0015037,179,285,84,110,280,108,111
+FBgn0015038,1,7,3,1,0,1,0
+FBgn0015039,0,1,0,0,0,0,0
+FBgn0015040,73,422,118,141,427,193,232
+FBgn0015075,635,742,358,431,784,488,501
+FBgn0015129,0,0,0,0,0,0,0
+FBgn0015218,3011,5617,1595,1868,4186,1723,2026
+FBgn0015221,36,81,46,29,83,36,51
+FBgn0015222,9544,17028,6684,8168,14679,7838,8889
+FBgn0015229,485,1162,336,378,1219,383,411
+FBgn0015230,0,0,0,0,0,0,0
+FBgn0015239,520,992,360,419,768,437,424
+FBgn0015240,681,1009,393,440,716,374,424
+FBgn0015245,10662,12445,6230,7571,12556,9171,10322
+FBgn0015247,2072,2970,1196,1523,2655,1390,1590
+FBgn0015268,7465,13257,4935,6521,9181,5192,5776
+FBgn0015269,1506,2310,796,776,2281,899,921
+FBgn0015270,513,662,245,309,565,261,289
+FBgn0015271,239,360,138,176,347,124,164
+FBgn0015277,860,1159,543,673,866,625,642
+FBgn0015278,2145,3131,1236,1270,2926,1394,1448
+FBgn0015279,3006,4384,1651,1854,3970,1998,2120
+FBgn0015282,2357,3454,1203,1506,2932,1679,1839
+FBgn0015283,1315,1702,672,817,1612,888,977
+FBgn0015286,693,1140,427,484,964,365,430
+FBgn0015288,8261,11762,5847,6560,8223,5686,4628
+FBgn0015295,963,1534,575,684,1475,796,873
+FBgn0015296,1462,2292,834,1018,2048,1132,1306
+FBgn0015298,544,842,241,297,785,333,356
+FBgn0015299,990,1791,370,553,1648,493,536
+FBgn0015300,0,0,0,1,0,0,0
+FBgn0015316,27,30,15,14,39,15,20
+FBgn0015320,1187,2132,798,826,1845,885,917
+FBgn0015321,729,1007,400,437,952,510,576
+FBgn0015323,2,1,1,0,1,0,0
+FBgn0015324,5408,8041,2515,2826,7198,2698,3081
+FBgn0015331,986,1602,545,631,1349,651,752
+FBgn0015336,5,16,7,4,14,4,13
+FBgn0015338,958,1358,405,575,1250,550,565
+FBgn0015350,0,0,0,0,0,0,0
+FBgn0015351,0,0,0,0,0,0,0
+FBgn0015359,824,1136,425,539,943,523,562
+FBgn0015360,1139,1677,642,668,1245,625,634
+FBgn0015371,502,937,351,310,418,187,182
+FBgn0015372,439,649,259,283,578,314,336
+FBgn0015374,737,1447,390,493,1327,513,534
+FBgn0015376,489,707,218,262,508,217,213
+FBgn0015379,691,1024,448,556,1075,657,640
+FBgn0015380,1,3,3,2,12,4,8
+FBgn0015381,1,2,3,1,1,2,1
+FBgn0015391,3249,5295,1834,2028,5175,2182,2227
+FBgn0015393,1524,1707,593,917,1460,806,852
+FBgn0015396,1519,2257,751,855,2753,1056,978
+FBgn0015399,3184,9857,3561,3679,9237,4200,4825
+FBgn0015400,0,0,0,0,2,0,0
+FBgn0015402,704,1287,485,500,1050,549,610
+FBgn0015477,4687,6910,2682,2657,5653,2592,2519
+FBgn0015509,2822,5551,1689,1963,5090,2366,2610
+FBgn0015513,4692,6121,2308,2525,5925,2921,2880
+FBgn0015519,0,9,3,4,13,8,6
+FBgn0015520,206,402,116,150,463,194,190
+FBgn0015521,15946,28308,9832,14993,19717,11679,13086
+FBgn0015522,156,318,133,122,175,65,66
+FBgn0015524,0,0,0,0,2,0,0
+FBgn0015527,2261,3572,1473,1638,2659,1612,1759
+FBgn0015541,1738,2702,903,1133,3475,1627,1810
+FBgn0015542,2282,4431,1868,1725,4116,2253,2359
+FBgn0015543,18,9,10,7,24,11,4
+FBgn0015544,404,728,227,251,612,279,344
+FBgn0015546,756,1117,429,471,1079,528,522
+FBgn0015550,0,1,1,0,0,0,0
+FBgn0015553,239,475,126,141,383,133,135
+FBgn0015558,31,61,24,29,36,19,24
+FBgn0015561,0,0,2,1,2,2,1
+FBgn0015562,651,993,311,377,1036,482,576
+FBgn0015565,247,741,277,339,630,304,332
+FBgn0015567,2150,3874,1209,1296,3751,1477,1434
+FBgn0015568,165,259,74,126,471,234,255
+FBgn0015569,445,709,247,255,844,335,355
+FBgn0015570,2,2,2,5,11,1,4
+FBgn0015571,125,238,90,133,237,92,99
+FBgn0015572,9,20,3,8,22,12,8
+FBgn0015574,1,5,0,2,2,1,0
+FBgn0015575,550,1285,433,493,1376,653,651
+FBgn0015576,323,352,135,152,213,86,89
+FBgn0015577,547,799,272,275,671,260,241
+FBgn0015582,272,398,146,189,448,207,220
+FBgn0015583,0,0,0,0,1,1,1
+FBgn0015584,1,1,0,0,0,0,0
+FBgn0015585,1,1,0,0,1,0,0
+FBgn0015586,0,3,0,0,1,0,0
+FBgn0015589,6570,10970,4137,3873,9104,4400,4369
+FBgn0015591,0,7,1,1,5,2,0
+FBgn0015600,970,2482,885,964,1572,749,728
+FBgn0015602,640,895,285,383,791,336,375
+FBgn0015609,12,19,8,5,25,11,14
+FBgn0015610,2950,4342,1488,1867,3282,1741,1933
+FBgn0015614,1147,1991,573,676,1643,691,730
+FBgn0015615,1887,3268,1147,1190,2522,1158,1312
+FBgn0015617,445,629,215,277,684,362,407
+FBgn0015618,124,214,63,99,171,93,100
+FBgn0015621,636,848,378,433,787,484,544
+FBgn0015622,8832,13983,4996,6035,10632,5501,6166
+FBgn0015623,5338,8199,3230,3663,6738,3800,4416
+FBgn0015624,6357,12915,6278,5334,9247,5299,4901
+FBgn0015625,317,457,173,185,480,243,253
+FBgn0015657,2179,4328,1635,1805,3302,1419,1538
+FBgn0015663,233,325,114,121,269,95,133
+FBgn0015664,2089,2622,930,1077,2116,1064,1179
+FBgn0015714,1109,2515,763,968,1886,677,771
+FBgn0015721,1,0,0,0,2,0,0
+FBgn0015737,5559,7673,2957,3298,7130,4306,4807
+FBgn0015754,2026,2785,1014,1265,2990,1287,1299
+FBgn0015756,33650,41004,16438,25821,35015,21839,25262
+FBgn0015765,317,549,149,191,507,180,232
+FBgn0015766,11,33,16,9,13,4,11
+FBgn0015770,0,0,0,0,1,0,0
+FBgn0015772,862,1482,494,562,1190,538,560
+FBgn0015773,21,49,32,27,43,22,19
+FBgn0015774,121,227,91,78,251,125,124
+FBgn0015776,4779,8335,2519,2982,6990,2702,2933
+FBgn0015777,1097,1467,602,613,2173,917,1053
+FBgn0015778,8678,16237,6197,6183,16374,7879,8307
+FBgn0015781,343,352,140,208,367,213,218
+FBgn0015789,2166,3212,1041,1199,3076,1263,1392
+FBgn0015790,6775,9616,4155,3865,7045,3797,4349
+FBgn0015791,1418,2741,865,981,2026,886,1158
+FBgn0015793,199,432,106,154,287,104,132
+FBgn0015794,712,1046,359,599,925,454,553
+FBgn0015795,2625,4946,1376,1718,3127,1195,1319
+FBgn0015796,1092,2248,551,581,1772,627,636
+FBgn0015797,2257,3479,1172,1420,2767,1279,1474
+FBgn0015799,1017,1531,574,584,1307,675,690
+FBgn0015801,976,1705,613,697,1055,539,588
+FBgn0015803,2190,3440,1343,1377,2846,1328,1518
+FBgn0015805,2465,2794,1025,1279,2940,1600,1657
+FBgn0015806,5628,10986,3544,3745,8188,3333,3603
+FBgn0015808,599,1057,440,608,968,568,668
+FBgn0015816,983,1506,593,709,1392,742,852
+FBgn0015818,1125,1807,690,715,1546,901,928
+FBgn0015828,1492,1969,826,972,1527,975,1051
+FBgn0015829,205,341,108,168,351,133,183
+FBgn0015831,0,0,0,0,1,0,0
+FBgn0015834,6142,8621,3297,4510,6506,3806,4504
+FBgn0015838,1784,3194,1054,1147,2845,1137,1219
+FBgn0015844,799,791,402,471,954,541,591
+FBgn0015872,14,34,16,12,23,4,11
+FBgn0015903,996,1349,445,461,896,384,437
+FBgn0015904,0,0,0,1,0,1,0
+FBgn0015905,768,1271,451,520,1181,520,520
+FBgn0015907,2569,3588,1541,1726,3029,1636,1829
+FBgn0015919,0,0,0,0,0,0,0
+FBgn0015924,2128,3375,1060,1251,3010,1134,1181
+FBgn0015925,763,1167,393,453,1194,512,551
+FBgn0015926,277,342,140,154,414,247,212
+FBgn0015929,1980,3141,1078,1302,2680,1547,1618
+FBgn0015946,0,0,0,0,0,0,0
+FBgn0015949,4046,6402,2183,2277,5247,2114,2327
+FBgn0016013,5,10,3,4,5,4,5
+FBgn0016031,1526,2047,749,823,2110,876,949
+FBgn0016032,496,439,241,295,821,415,423
+FBgn0016034,536,894,292,280,719,323,346
+FBgn0016036,2,5,1,2,5,2,1
+FBgn0016038,291,503,157,177,444,154,204
+FBgn0016041,1178,1920,645,817,1957,969,1033
+FBgn0016047,3,2,0,0,2,1,0
+FBgn0016053,0,2,0,0,0,0,0
+FBgn0016054,383,583,212,240,522,220,248
+FBgn0016059,4268,6118,2077,2289,6056,2467,2636
+FBgn0016061,0,2,0,0,0,1,0
+FBgn0016070,930,1390,500,516,1117,503,532
+FBgn0016075,31354,50152,22076,23146,57255,39830,35726
+FBgn0016076,431,923,389,397,883,406,468
+FBgn0016078,535,571,241,318,637,287,334
+FBgn0016080,57,168,55,60,174,109,101
+FBgn0016081,6126,8284,3869,3745,6596,3770,3795
+FBgn0016119,2175,4193,1043,1604,3510,1598,1738
+FBgn0016120,2472,4508,1420,1755,3141,1752,2003
+FBgn0016122,411,556,210,236,490,254,261
+FBgn0016123,100,258,99,135,300,145,159
+FBgn0016126,501,619,186,176,839,177,181
+FBgn0016131,525,683,213,307,643,297,321
+FBgn0016641,796,1294,466,430,987,491,529
+FBgn0016650,1,1,2,1,1,0,4
+FBgn0016660,0,0,0,0,0,0,0
+FBgn0016672,464,481,232,313,629,366,417
+FBgn0016675,2,10,2,1,9,5,4
+FBgn0016684,26,52,16,16,40,23,15
+FBgn0016685,3065,5124,1689,2018,4749,2078,2330
+FBgn0016687,2716,3215,1124,1639,3022,1688,1848
+FBgn0016691,2492,3321,1261,1677,3474,1805,2001
+FBgn0016693,6921,11347,4712,5413,7044,4755,5124
+FBgn0016694,1270,3480,885,885,1995,610,697
+FBgn0016696,990,2212,794,821,1959,831,961
+FBgn0016697,1258,1284,622,796,1770,967,1008
+FBgn0016698,491,787,245,328,741,358,406
+FBgn0016700,4827,6809,2431,2879,7159,2956,3286
+FBgn0016701,781,1360,423,560,1120,498,526
+FBgn0016715,209,417,147,182,79,49,49
+FBgn0016726,8740,18761,4697,7525,13076,5244,6886
+FBgn0016754,975,1866,732,717,1261,638,683
+FBgn0016756,693,1180,326,413,1044,430,494
+FBgn0016762,283,441,142,205,404,184,250
+FBgn0016792,1313,2019,647,664,1524,620,634
+FBgn0016794,2845,4310,1846,2026,3772,2167,2327
+FBgn0016797,59,121,42,55,131,65,58
+FBgn0016917,7180,10082,3479,3708,8403,3813,3804
+FBgn0016919,80,193,49,57,119,40,59
+FBgn0016920,4,13,4,2,2,2,1
+FBgn0016926,1398,1743,598,765,1323,591,586
+FBgn0016930,1413,2253,1003,939,2318,1001,1080
+FBgn0016940,646,1177,294,367,920,377,415
+FBgn0016970,123,174,51,90,219,92,92
+FBgn0016974,15,30,13,14,25,8,16
+FBgn0016975,0,0,0,0,0,0,0
+FBgn0016976,0,0,0,0,0,0,0
+FBgn0016977,8801,26742,8902,6678,19450,6975,6754
+FBgn0016978,1068,1847,880,916,1333,859,838
+FBgn0016983,2612,4172,1494,1689,4061,1735,1952
+FBgn0016984,2916,4599,1748,1904,4020,2003,2108
+FBgn0017397,1319,2516,773,754,2441,896,997
+FBgn0017414,86,173,44,67,200,100,78
+FBgn0017418,1129,1688,638,701,1443,648,755
+FBgn0017429,450,729,267,348,657,353,335
+FBgn0017430,193,349,103,134,291,114,162
+FBgn0017448,2,10,3,2,5,6,4
+FBgn0017453,2331,3379,1430,1521,2729,1548,1657
+FBgn0017456,13,42,12,13,50,18,23
+FBgn0017457,857,1531,452,560,935,510,600
+FBgn0017482,126,177,67,76,151,60,77
+FBgn0017545,42238,38165,15557,21214,62307,17965,17715
+FBgn0017549,807,1389,473,497,1646,586,621
+FBgn0017550,2232,3917,1619,1722,2795,1571,1677
+FBgn0017551,278,406,168,199,510,259,317
+FBgn0017556,0,0,0,1,1,0,0
+FBgn0017557,1,0,0,0,0,0,0
+FBgn0017558,584,1401,403,404,1105,479,495
+FBgn0017561,2,4,5,2,6,5,6
+FBgn0017566,3258,4465,2274,2548,3506,2361,2612
+FBgn0017567,1362,1651,676,934,1465,828,950
+FBgn0017572,1887,2895,990,1128,2448,1091,1152
+FBgn0017577,1644,2012,780,915,2404,1232,1228
+FBgn0017578,210,415,89,133,368,77,103
+FBgn0017579,26421,35107,16075,22569,27889,18216,22423
+FBgn0017581,22518,49625,17615,18174,37186,17262,20531
+FBgn0017590,0,0,0,0,1,0,0
+FBgn0019624,3119,3608,1646,2118,3494,2343,2345
+FBgn0019637,1318,1957,836,914,1751,1058,1157
+FBgn0019643,11,38,10,12,44,13,17
+FBgn0019644,2698,2641,1287,1774,3071,1847,1990
+FBgn0019650,4,17,5,7,9,5,7
+FBgn0019660,549,291,104,123,763,121,151
+FBgn0019661,19,454,96,95,367,61,98
+FBgn0019662,1510,2634,757,954,2111,798,929
+FBgn0019686,854,1392,462,564,1402,578,668
+FBgn0019809,4,1,0,0,1,0,1
+FBgn0019828,0,0,0,0,0,0,0
+FBgn0019830,777,969,431,499,922,524,551
+FBgn0019886,2343,3483,1306,1461,3315,1689,1931
+FBgn0019890,2394,4082,1658,1802,3573,1729,1861
+FBgn0019925,1644,2088,746,925,2052,1020,1061
+FBgn0019928,3,7,2,4,9,6,4
+FBgn0019929,0,0,0,0,0,1,0
+FBgn0019932,493,511,177,191,651,162,156
+FBgn0019936,15134,24758,7985,10806,21478,10030,11688
+FBgn0019938,2624,3175,1128,1311,2863,1240,1208
+FBgn0019940,0,1,1,0,1,1,1
+FBgn0019947,1876,2285,985,1300,2243,1194,1358
+FBgn0019948,2579,4833,1474,1847,3433,1571,1800
+FBgn0019949,331,574,198,264,513,258,301
+FBgn0019952,2269,2125,1010,1254,1810,1103,1064
+FBgn0019957,1495,1868,837,1143,1506,759,912
+FBgn0019960,2077,2774,1221,1370,2454,1345,1495
+FBgn0019968,2460,3522,1546,1509,3303,1734,1776
+FBgn0019972,1235,1686,708,814,1586,768,804
+FBgn0019982,670,745,379,541,854,465,520
+FBgn0019985,195,273,61,65,256,61,63
+FBgn0019990,2933,3662,1404,1483,2957,1526,1600
+FBgn0020018,251,427,137,191,413,218,260
+FBgn0020224,1101,1849,610,701,1604,737,845
+FBgn0020235,10514,12699,5025,6911,11437,6649,7292
+FBgn0020236,6772,8378,3586,3919,7320,3972,3980
+FBgn0020238,16289,27703,7488,9423,23949,10905,12008
+FBgn0020240,2522,3277,1312,1330,5238,2281,2450
+FBgn0020245,2233,3223,1122,1200,2957,1252,1336
+FBgn0020248,15,27,11,10,95,49,57
+FBgn0020249,1001,1307,576,766,1749,921,974
+FBgn0020251,439,662,218,230,591,221,238
+FBgn0020255,8462,9246,3324,4274,12042,5710,5998
+FBgn0020257,1387,2282,933,921,1365,603,650
+FBgn0020258,2,7,5,3,3,3,0
+FBgn0020261,829,1119,517,530,1013,650,689
+FBgn0020269,7,16,3,5,9,5,5
+FBgn0020270,824,1376,497,605,1479,708,760
+FBgn0020272,696,939,419,471,886,515,503
+FBgn0020277,5,4,2,1,3,2,2
+FBgn0020278,1725,2839,1161,1311,2556,1382,1544
+FBgn0020279,11823,16699,9417,8486,12461,9270,9340
+FBgn0020280,0,0,0,0,0,0,0
+FBgn0020294,8,8,9,6,31,6,17
+FBgn0020299,8,21,3,5,10,3,2
+FBgn0020300,0,2,0,0,0,0,0
+FBgn0020303,187,521,144,160,280,117,142
+FBgn0020304,4002,8542,3254,3506,6901,3526,3897
+FBgn0020305,654,1091,352,408,925,424,464
+FBgn0020306,8643,12650,4812,4739,10584,5284,5094
+FBgn0020307,9,18,9,5,2,7,3
+FBgn0020309,9082,14621,6390,6052,15584,8135,8558
+FBgn0020312,1992,2384,1008,1174,2265,1291,1265
+FBgn0020367,4520,5484,2413,2971,5720,3327,3683
+FBgn0020368,210,229,99,124,249,122,128
+FBgn0020369,3387,4295,1315,1853,4884,2133,2165
+FBgn0020370,3186,4305,1824,2094,3525,1973,2120
+FBgn0020371,1,0,1,1,1,0,0
+FBgn0020372,38,84,29,28,63,28,27
+FBgn0020376,79,73,35,47,36,10,20
+FBgn0020377,1,1,1,0,3,1,3
+FBgn0020378,1,1,0,0,1,1,0
+FBgn0020379,511,778,396,448,746,389,398
+FBgn0020381,174,239,79,112,266,142,141
+FBgn0020385,250,426,164,211,296,136,184
+FBgn0020386,3399,5688,2438,2461,4148,1967,2028
+FBgn0020388,1328,2198,895,1007,2002,1077,1106
+FBgn0020389,630,789,389,459,699,446,479
+FBgn0020391,188,310,117,149,430,237,220
+FBgn0020392,886,1347,419,557,1148,639,640
+FBgn0020399,0,5,1,1,5,1,1
+FBgn0020407,356,648,201,254,472,239,264
+FBgn0020412,1501,3327,1135,1206,3034,1241,1243
+FBgn0020414,11059,22217,6211,7554,13740,5483,6365
+FBgn0020415,14011,27554,8374,11606,22255,8744,9441
+FBgn0020416,10026,18723,5713,7799,13895,5323,5916
+FBgn0020429,0,2,0,0,0,0,0
+FBgn0020439,5,7,4,4,3,3,6
+FBgn0020440,997,1584,523,519,1438,549,580
+FBgn0020443,6299,9572,3463,3786,8208,3815,4177
+FBgn0020445,14,25,12,8,33,13,15
+FBgn0020493,594,700,237,269,409,180,192
+FBgn0020496,2092,3629,1605,1662,3936,2032,2252
+FBgn0020497,6638,11085,3729,3868,9783,3911,4200
+FBgn0020503,1432,2904,967,871,2550,809,816
+FBgn0020506,1,0,0,0,1,0,1
+FBgn0020508,2,0,1,0,1,1,1
+FBgn0020509,0,1,1,1,1,0,1
+FBgn0020510,2023,3271,1164,1202,2583,1386,1461
+FBgn0020513,7346,8316,3377,4336,8916,4545,5147
+FBgn0020517,0,0,0,0,0,0,0
+FBgn0020518,0,0,0,1,2,0,0
+FBgn0020521,4,13,4,7,12,5,4
+FBgn0020545,1557,1986,1057,1225,1578,977,1170
+FBgn0020546,0,0,0,0,0,0,0
+FBgn0020556,0,0,0,0,0,0,0
+FBgn0020611,1415,2099,792,923,2012,819,985
+FBgn0020616,1498,2189,815,854,2013,840,865
+FBgn0020617,0,0,0,1,0,0,0
+FBgn0020618,32309,51682,20715,26670,28565,20545,23095
+FBgn0020620,3260,4636,1685,1942,3690,1865,2018
+FBgn0020621,1890,2871,1193,1287,2964,1326,1394
+FBgn0020622,1086,1658,635,657,1622,577,572
+FBgn0020623,17,25,6,19,30,8,9
+FBgn0020626,1536,2609,1138,1278,1992,1261,1325
+FBgn0020633,2074,2751,1043,1273,3092,1765,1856
+FBgn0020637,0,2,1,0,0,0,2
+FBgn0020638,0,0,0,0,0,0,1
+FBgn0020639,0,0,1,0,3,2,1
+FBgn0020640,0,0,0,0,0,0,0
+FBgn0020641,0,2,0,0,0,1,1
+FBgn0020642,2,0,0,0,0,0,0
+FBgn0020643,0,0,0,0,0,0,0
+FBgn0020644,0,0,0,0,0,0,0
+FBgn0020645,0,0,0,0,0,0,0
+FBgn0020646,0,0,0,0,0,0,0
+FBgn0020647,4301,6221,3156,3024,5787,3161,3590
+FBgn0020653,5322,7162,3160,3852,7518,4587,5063
+FBgn0020655,1148,1847,747,812,1553,818,857
+FBgn0020756,2828,3733,1524,1655,3208,1624,1491
+FBgn0020762,1119,2246,900,988,1631,693,797
+FBgn0020764,1051,1480,589,737,928,570,657
+FBgn0020765,0,0,1,0,0,0,0
+FBgn0020766,766,1088,412,488,887,466,493
+FBgn0020767,1266,2385,932,1014,2013,937,971
+FBgn0020880,3,3,0,1,3,0,3
+FBgn0020887,1507,2082,783,806,1521,737,817
+FBgn0020906,0,0,0,1,1,0,0
+FBgn0020907,0,0,0,0,0,0,0
+FBgn0020909,632,749,317,365,658,344,313
+FBgn0020910,43208,41936,24552,32554,36647,29380,33654
+FBgn0020912,0,0,1,0,1,0,0
+FBgn0020930,761,949,441,529,932,508,541
+FBgn0021738,2,4,7,2,3,5,7
+FBgn0021742,1,0,1,0,0,0,0
+FBgn0021750,328,496,179,228,475,269,267
+FBgn0021760,3202,5163,1788,1911,4443,1943,2106
+FBgn0021761,2883,4148,1316,1469,3705,1614,1741
+FBgn0021764,670,1157,453,426,1120,491,487
+FBgn0021765,1814,1882,1031,1280,1776,1372,1394
+FBgn0021767,5,19,12,10,13,7,9
+FBgn0021768,1032,1464,426,601,1521,578,660
+FBgn0021776,5,11,7,8,16,6,6
+FBgn0021795,2268,2935,1198,1580,3790,2032,2245
+FBgn0021796,2645,3896,1546,1742,3843,2049,2041
+FBgn0021800,374,902,330,327,841,337,345
+FBgn0021814,781,1285,417,595,952,547,551
+FBgn0021818,1936,2954,1143,1254,2714,1325,1365
+FBgn0021825,1769,2652,1054,1291,2366,1399,1469
+FBgn0021847,655,777,346,402,740,395,428
+FBgn0021856,683,1170,345,445,1107,522,581
+FBgn0021872,18733,26294,9562,11720,21099,11538,13248
+FBgn0021873,1872,3233,1380,1310,2688,1467,1483
+FBgn0021874,607,958,346,391,794,359,420
+FBgn0021875,266,633,179,231,530,259,286
+FBgn0021895,2705,4666,1540,1602,4389,1771,1687
+FBgn0021906,2367,3362,1643,2016,2605,1783,1864
+FBgn0021944,1438,2375,910,1012,1811,951,1119
+FBgn0021953,1647,1838,833,971,2050,1121,1284
+FBgn0021967,988,1445,569,859,1131,818,879
+FBgn0021979,1658,2774,1087,1443,2277,1360,1497
+FBgn0021995,1401,2278,763,913,1770,856,942
+FBgn0022023,7880,11035,4366,5778,8836,5059,5807
+FBgn0022027,362,585,219,272,504,270,294
+FBgn0022029,1258,1975,588,726,1872,883,934
+FBgn0022063,1803,3131,1303,1297,2615,1334,1341
+FBgn0022069,1293,1802,667,803,1546,786,772
+FBgn0022070,468,717,238,278,599,267,309
+FBgn0022085,5395,8866,3719,3515,6076,3544,3561
+FBgn0022097,1145,1638,537,739,1940,813,914
+FBgn0022131,1155,1878,796,775,1706,858,939
+FBgn0022153,3416,4610,1823,2019,4379,2156,2381
+FBgn0022160,1178,2709,1341,1469,1146,779,829
+FBgn0022201,3358,4851,2201,2222,3990,2100,2251
+FBgn0022213,3642,5437,1766,1867,6687,2427,2440
+FBgn0022224,213,272,32,76,280,93,80
+FBgn0022238,724,1567,346,394,1276,413,455
+FBgn0022246,74,128,31,45,135,53,52
+FBgn0022268,4111,4934,1713,2520,4963,2356,2689
+FBgn0022288,841,1153,408,578,791,488,565
+FBgn0022338,1311,2254,751,892,1345,651,748
+FBgn0022343,1261,1801,715,895,1705,908,933
+FBgn0022344,517,741,271,362,728,344,356
+FBgn0022349,2632,5546,1830,1930,4063,1715,1777
+FBgn0022355,12,21,15,14,40,23,31
+FBgn0022359,218,344,140,202,354,242,247
+FBgn0022361,117,190,58,63,209,48,59
+FBgn0022382,901,1216,431,501,834,378,375
+FBgn0022699,519,763,349,408,614,420,460
+FBgn0022700,3,3,1,1,2,1,0
+FBgn0022702,405,300,176,192,541,371,404
+FBgn0022708,2035,3263,1083,1382,3022,1364,1528
+FBgn0022709,114,179,67,70,189,95,104
+FBgn0022710,82,231,96,72,158,81,73
+FBgn0022720,2023,3449,1211,1472,2900,1465,1635
+FBgn0022724,275,497,180,189,408,215,253
+FBgn0022740,0,0,0,1,0,0,0
+FBgn0022764,6138,10771,4018,3940,7718,4056,4095
+FBgn0022768,2383,4432,1818,1796,3269,1732,1793
+FBgn0022770,9,20,9,12,28,24,11
+FBgn0022772,503,717,262,324,675,400,360
+FBgn0022774,1039,1136,535,667,1404,818,891
+FBgn0022786,737,905,396,466,1068,485,516
+FBgn0022787,5234,7678,3058,3331,8093,3820,3919
+FBgn0022800,57,104,39,43,105,43,38
+FBgn0022893,15564,25770,8805,10547,29818,11507,12502
+FBgn0022935,694,1167,474,512,873,554,547
+FBgn0022936,314,500,149,190,472,204,243
+FBgn0022942,1708,2427,903,1130,2478,1190,1234
+FBgn0022943,338,500,170,211,461,237,255
+FBgn0022959,3649,7518,2837,2879,5846,3134,3214
+FBgn0022960,1518,2342,892,968,2251,1155,1186
+FBgn0022981,1,1,2,0,5,1,2
+FBgn0022984,478,997,276,341,801,418,348
+FBgn0022985,1503,2071,814,921,2217,1144,1163
+FBgn0022986,372,614,251,212,503,240,281
+FBgn0022987,945,1648,506,548,1332,554,632
+FBgn0023000,536,637,280,253,816,275,308
+FBgn0023001,1,1,1,3,2,3,4
+FBgn0023023,412,522,216,250,584,290,253
+FBgn0023076,2,2,1,0,4,1,0
+FBgn0023081,1738,2834,989,1152,2711,1207,1253
+FBgn0023083,1242,2343,750,805,1939,833,920
+FBgn0023090,6,19,5,4,26,4,7
+FBgn0023091,3,11,5,3,14,19,19
+FBgn0023094,284,412,146,201,354,187,206
+FBgn0023095,89,187,61,64,161,69,61
+FBgn0023096,35,63,20,20,74,20,24
+FBgn0023097,1423,2595,1013,982,1962,1074,959
+FBgn0023129,417,693,273,345,478,243,233
+FBgn0023130,450,697,258,311,584,347,318
+FBgn0023143,10634,15746,5787,6539,14306,7084,7199
+FBgn0023167,824,1516,521,541,1346,678,686
+FBgn0023169,997,1437,629,767,1008,640,648
+FBgn0023170,12085,11331,3522,7066,16192,7283,7194
+FBgn0023171,448,699,243,308,725,336,363
+FBgn0023172,4600,8327,3084,2925,7092,3276,3323
+FBgn0023174,1962,2771,903,1296,2654,1367,1615
+FBgn0023175,1444,2087,735,976,2245,1059,1172
+FBgn0023177,2048,2591,1095,1327,2515,1414,1588
+FBgn0023178,1,1,2,0,0,0,0
+FBgn0023179,4,3,4,3,3,4,2
+FBgn0023180,254,386,114,180,300,119,124
+FBgn0023181,489,727,293,346,545,270,296
+FBgn0023197,1,2,0,2,2,1,3
+FBgn0023211,765,991,337,568,1094,533,525
+FBgn0023212,1536,2709,857,987,1882,1002,1105
+FBgn0023213,12260,19546,5774,5162,18178,5126,5042
+FBgn0023214,468,1260,335,355,1310,448,502
+FBgn0023215,755,2150,812,754,1461,710,842
+FBgn0023216,433,722,238,285,609,262,307
+FBgn0023388,1748,2729,1003,1099,2337,1066,1124
+FBgn0023395,486,730,283,268,659,251,351
+FBgn0023407,1733,3044,1266,1324,2680,1465,1513
+FBgn0023415,3,4,5,1,6,2,4
+FBgn0023416,497,819,285,326,987,366,381
+FBgn0023417,2,0,1,0,2,0,0
+FBgn0023423,1997,2593,1097,1245,2651,1257,1374
+FBgn0023441,25,81,25,35,48,22,22
+FBgn0023444,2027,2948,1066,1196,2741,1185,1228
+FBgn0023458,7495,9622,4864,4562,8325,5403,5107
+FBgn0023477,1880,2261,1017,1269,3004,1765,1928
+FBgn0023479,3871,8654,3075,3164,2498,1176,1166
+FBgn0023489,2,3,0,0,4,1,3
+FBgn0023495,6,11,4,4,6,7,5
+FBgn0023496,0,0,0,0,0,0,0
+FBgn0023506,242,419,142,142,300,152,160
+FBgn0023507,1076,1348,759,875,938,663,729
+FBgn0023508,2395,3513,1388,1613,2695,1628,1807
+FBgn0023509,1163,2009,843,940,1746,1070,1082
+FBgn0023510,2482,3702,1617,1558,3417,1718,1837
+FBgn0023511,1925,2735,1090,1105,2828,1332,1310
+FBgn0023512,1687,1874,986,1171,2147,1449,1529
+FBgn0023513,959,1170,506,572,1225,637,585
+FBgn0023514,1140,1673,617,740,1588,772,815
+FBgn0023515,645,1082,359,437,1003,517,523
+FBgn0023516,544,809,368,418,713,381,443
+FBgn0023517,707,1156,424,537,1122,624,656
+FBgn0023518,2890,5025,2019,1941,3838,2123,2054
+FBgn0023519,768,840,357,453,846,510,526
+FBgn0023520,185,269,84,105,306,144,143
+FBgn0023521,143,217,88,108,237,124,138
+FBgn0023522,967,1697,491,550,1611,679,793
+FBgn0023523,13,21,10,2,11,9,9
+FBgn0023524,11,28,16,10,43,18,25
+FBgn0023525,80,101,41,66,110,64,67
+FBgn0023526,343,690,288,290,525,265,314
+FBgn0023527,664,920,347,437,769,384,409
+FBgn0023528,1356,2408,882,907,2271,902,993
+FBgn0023529,6120,13260,3988,4631,10095,4219,4575
+FBgn0023530,496,681,270,354,645,434,398
+FBgn0023531,807,1161,496,462,1037,632,658
+FBgn0023534,1,3,6,0,5,5,2
+FBgn0023535,114,296,106,112,275,155,208
+FBgn0023536,116,127,57,56,135,72,69
+FBgn0023537,2305,3269,1164,1641,2201,1297,1371
+FBgn0023540,179,360,103,124,272,137,151
+FBgn0023541,17,53,15,30,27,19,17
+FBgn0023542,903,1599,446,658,1185,590,652
+FBgn0023545,1109,1581,632,861,1967,911,1075
+FBgn0023546,0,0,0,0,0,0,0
+FBgn0023549,228,585,218,261,146,83,90
+FBgn0023550,2,12,4,2,3,2,1
+FBgn0024150,3415,3824,1800,1779,2433,1391,1476
+FBgn0024177,635,639,184,275,1021,422,392
+FBgn0024179,5,15,4,2,8,0,5
+FBgn0024182,0,0,0,0,0,0,0
+FBgn0024183,3853,6706,2612,2694,5450,2861,3063
+FBgn0024184,1,0,0,0,1,0,0
+FBgn0024187,1189,1705,780,778,1438,803,839
+FBgn0024188,629,1043,284,375,994,398,454
+FBgn0024189,2,9,1,1,9,0,1
+FBgn0024191,320,455,173,237,439,205,268
+FBgn0024194,662,774,302,468,985,412,458
+FBgn0024196,1263,1496,500,727,1574,699,783
+FBgn0024222,863,1378,403,503,1210,406,454
+FBgn0024227,958,1257,533,689,1122,702,712
+FBgn0024230,321,563,146,206,462,157,183
+FBgn0024232,0,1,1,0,0,0,1
+FBgn0024234,2295,2451,1338,1504,2617,1966,2042
+FBgn0024236,5245,6816,2508,3125,5784,2882,3138
+FBgn0024238,5067,7128,2686,2861,5674,2574,3008
+FBgn0024244,1,8,0,1,2,0,0
+FBgn0024245,351,449,148,168,420,187,207
+FBgn0024248,1076,2046,605,644,1579,527,549
+FBgn0024249,0,2,0,1,0,0,0
+FBgn0024250,442,937,363,311,499,211,230
+FBgn0024251,6,3,2,1,10,2,1
+FBgn0024252,1734,2208,831,869,2288,892,892
+FBgn0024273,1804,2753,1310,1296,1868,1096,1263
+FBgn0024277,7277,9902,4247,4275,11643,5556,5976
+FBgn0024285,2097,3624,1516,1734,2828,1768,1934
+FBgn0024288,92,179,73,79,4,5,4
+FBgn0024289,1,0,0,0,2,1,0
+FBgn0024290,0,0,1,1,7,1,2
+FBgn0024291,1039,2011,706,731,1490,639,690
+FBgn0024293,0,0,1,0,2,0,0
+FBgn0024294,0,0,0,0,0,0,0
+FBgn0024308,22741,50285,21535,19031,30452,17470,18410
+FBgn0024314,1747,2226,989,1211,2076,1290,1415
+FBgn0024315,161,235,97,103,46,21,25
+FBgn0024319,0,0,0,0,0,0,0
+FBgn0024320,2797,3939,1433,1569,3707,1311,1252
+FBgn0024321,852,1919,647,688,1411,629,768
+FBgn0024326,1307,2579,854,931,2407,866,952
+FBgn0024329,3299,4997,2036,2190,4879,2528,2476
+FBgn0024330,374,628,230,226,477,248,252
+FBgn0024332,1615,1751,836,1009,1762,1206,1291
+FBgn0024352,4265,7742,2081,2803,6856,2767,3115
+FBgn0024360,244,320,149,172,312,219,191
+FBgn0024361,24,25,19,20,28,12,24
+FBgn0024362,696,1027,376,404,922,445,508
+FBgn0024364,498,1072,431,448,781,440,480
+FBgn0024365,1295,1648,718,812,1488,888,916
+FBgn0024366,25,58,22,33,43,31,34
+FBgn0024368,1,1,3,2,3,1,0
+FBgn0024371,853,1292,487,586,1026,493,522
+FBgn0024432,2103,3573,1045,1338,2539,1201,1378
+FBgn0024491,437,853,264,317,1094,508,512
+FBgn0024509,3133,3832,1651,2209,3507,2335,2688
+FBgn0024510,254,370,131,159,403,212,186
+FBgn0024542,194,308,105,122,280,135,151
+FBgn0024555,3412,5769,1888,1871,4983,2046,2047
+FBgn0024556,2321,2915,1397,1593,2568,1803,1940
+FBgn0024558,1075,1219,505,697,1234,696,739
+FBgn0024689,931,1452,491,611,1363,704,716
+FBgn0024698,2624,3236,1193,1247,3058,1111,1149
+FBgn0024728,1136,1694,479,471,1580,468,481
+FBgn0024732,540,840,263,287,958,338,370
+FBgn0024733,21620,19699,8409,11439,34023,10747,11447
+FBgn0024734,3470,6493,1670,1539,5715,1426,1491
+FBgn0024740,0,0,0,0,0,0,0
+FBgn0024753,780,1168,453,508,1114,466,532
+FBgn0024754,2036,2846,1426,1614,2480,1531,1694
+FBgn0024806,1890,2828,1013,963,2507,957,959
+FBgn0024807,1838,2454,1352,1409,2526,1439,1649
+FBgn0024811,410,689,149,160,731,132,169
+FBgn0024814,1823,3167,1185,1379,2968,1285,1391
+FBgn0024832,1599,2384,849,1060,1858,1064,1134
+FBgn0024833,1590,2643,839,1136,1808,1002,1201
+FBgn0024836,8,17,10,4,36,17,28
+FBgn0024841,720,1105,372,469,1174,649,674
+FBgn0024846,815,1171,414,489,1051,473,486
+FBgn0024887,304,476,185,210,464,192,203
+FBgn0024889,764,1251,375,482,1055,523,594
+FBgn0024891,1391,2341,848,1109,2457,1325,1620
+FBgn0024897,189,168,70,89,151,92,107
+FBgn0024909,356,593,172,228,504,198,204
+FBgn0024912,112,213,66,80,249,78,92
+FBgn0024913,12,11,2,3,17,3,2
+FBgn0024920,1960,2835,1146,1434,2061,1267,1291
+FBgn0024921,2621,3608,1402,1414,3643,1421,1481
+FBgn0024939,60257,75608,38613,55770,42286,36066,36841
+FBgn0024941,1,1,0,0,6,0,1
+FBgn0024943,7,43,17,15,36,15,13
+FBgn0024944,1,5,1,2,3,4,2
+FBgn0024945,567,834,304,365,701,360,392
+FBgn0024947,3852,4883,2291,2665,5027,2813,3230
+FBgn0024956,485,936,265,359,772,319,395
+FBgn0024957,1350,1807,874,985,1860,1041,1121
+FBgn0024958,1241,1349,574,765,1461,788,812
+FBgn0024963,1,12,1,7,7,2,4
+FBgn0024973,777,1198,532,631,1115,771,862
+FBgn0024975,214,357,139,151,317,182,180
+FBgn0024977,19,40,14,12,56,38,32
+FBgn0024980,840,951,371,429,959,366,427
+FBgn0024983,256,351,133,149,286,184,197
+FBgn0024984,80,115,42,55,266,155,172
+FBgn0024985,868,1494,552,529,1159,591,589
+FBgn0024986,292,512,160,209,358,189,205
+FBgn0024987,1570,2257,826,812,1774,984,1055
+FBgn0024989,6,8,1,1,7,5,2
+FBgn0024991,603,731,274,322,719,400,432
+FBgn0024992,1797,2707,1209,1390,2845,1636,1900
+FBgn0024993,157,234,72,120,239,123,132
+FBgn0024994,905,931,407,497,840,454,501
+FBgn0024995,7,4,1,1,13,2,3
+FBgn0024996,771,905,389,521,1004,545,635
+FBgn0024997,367,577,285,306,516,344,372
+FBgn0024998,279,500,215,191,437,213,228
+FBgn0025109,452,598,226,267,501,278,307
+FBgn0025111,451,653,279,306,4186,2381,2686
+FBgn0025115,0,0,0,0,0,0,1
+FBgn0025117,2636,3827,1512,1836,2940,1723,1911
+FBgn0025118,0,0,0,0,0,0,0
+FBgn0025140,1038,1630,611,674,1407,662,653
+FBgn0025185,269,527,180,183,491,232,286
+FBgn0025186,454,827,286,296,681,327,359
+FBgn0025286,24480,33029,12499,19869,27200,15953,17021
+FBgn0025334,0,0,0,0,0,0,0
+FBgn0025335,1384,1469,709,902,1104,899,865
+FBgn0025336,626,1079,349,355,882,421,450
+FBgn0025352,2579,4255,1768,2184,2889,1721,2063
+FBgn0025355,358,599,183,185,414,214,188
+FBgn0025360,0,0,0,0,0,0,0
+FBgn0025366,7011,15508,4170,5990,10366,3847,4828
+FBgn0025373,800,1250,425,530,1157,514,598
+FBgn0025378,0,1,0,0,0,0,0
+FBgn0025381,7596,10982,4851,5557,9359,5690,6045
+FBgn0025382,205,277,157,137,250,176,180
+FBgn0025383,91,129,81,101,71,40,63
+FBgn0025387,21,22,5,7,25,7,7
+FBgn0025388,446,844,276,308,666,304,372
+FBgn0025390,90,312,85,96,332,171,145
+FBgn0025391,2,2,0,1,4,2,0
+FBgn0025393,1,4,0,0,1,2,1
+FBgn0025394,1984,3677,1095,1282,2805,1259,1488
+FBgn0025454,6,8,0,4,10,6,2
+FBgn0025455,2608,5977,2234,2116,4263,2076,2229
+FBgn0025456,38,40,18,21,107,39,22
+FBgn0025457,1643,2107,754,913,1918,980,1129
+FBgn0025458,1679,2557,817,879,2410,840,909
+FBgn0025463,2660,4092,1589,1860,3771,1803,2029
+FBgn0025469,311,386,146,216,393,243,231
+FBgn0025519,624,914,317,398,942,469,522
+FBgn0025525,39,104,35,29,125,68,53
+FBgn0025549,424,919,238,246,741,247,298
+FBgn0025558,234,474,128,209,464,147,171
+FBgn0025571,1946,3290,1419,1549,2215,1452,1428
+FBgn0025573,0,0,0,0,0,0,1
+FBgn0025574,357,733,234,239,883,373,350
+FBgn0025578,5,2,4,2,3,1,3
+FBgn0025582,5650,7696,2853,3972,6433,3546,4049
+FBgn0025583,0,0,0,0,0,0,0
+FBgn0025592,844,1296,431,501,1170,542,540
+FBgn0025593,6,5,6,3,26,21,9
+FBgn0025595,1,5,1,1,3,2,3
+FBgn0025608,1755,2914,1044,1271,2399,1174,1352
+FBgn0025612,0,0,0,0,1,0,0
+FBgn0025613,0,0,0,0,0,1,0
+FBgn0025615,1396,2781,741,966,2108,888,1035
+FBgn0025616,38,26,7,13,21,11,5
+FBgn0025620,2,4,4,2,6,1,3
+FBgn0025621,596,817,366,391,728,414,486
+FBgn0025624,1255,1364,521,766,1381,673,782
+FBgn0025625,383,540,303,260,406,245,280
+FBgn0025626,1798,2659,1187,1293,2410,1466,1727
+FBgn0025627,26,39,13,16,36,15,16
+FBgn0025628,4579,6402,2647,3398,4156,2263,2542
+FBgn0025629,735,1067,433,589,869,565,567
+FBgn0025630,361,532,236,251,495,329,336
+FBgn0025631,1155,1678,608,573,1329,663,661
+FBgn0025632,105,154,58,63,156,92,76
+FBgn0025633,918,1457,608,615,1375,687,709
+FBgn0025634,199,391,147,197,263,168,172
+FBgn0025635,127,193,87,98,206,104,109
+FBgn0025637,1337,2497,718,935,2201,862,1043
+FBgn0025638,615,939,304,433,1040,467,532
+FBgn0025639,1141,1989,809,792,1613,818,894
+FBgn0025640,349,631,247,285,558,291,306
+FBgn0025641,1058,1035,491,498,1319,816,841
+FBgn0025642,101,127,55,62,129,81,76
+FBgn0025643,18,19,8,11,25,16,13
+FBgn0025644,2,3,0,0,1,1,0
+FBgn0025645,0,2,0,0,0,1,1
+FBgn0025674,2406,3890,1273,1496,3593,1630,1756
+FBgn0025676,341,877,226,223,807,245,259
+FBgn0025678,9518,14023,5661,7064,19051,9835,10848
+FBgn0025679,0,0,0,0,0,1,0
+FBgn0025680,1,1,0,0,0,0,1
+FBgn0025681,4626,6340,2867,2959,3857,2383,2503
+FBgn0025682,10199,17830,6085,7971,11004,6090,7051
+FBgn0025683,5574,8668,3010,3614,6617,2875,3229
+FBgn0025684,1057,1274,517,641,1202,604,671
+FBgn0025686,5,4,0,2,3,0,3
+FBgn0025687,6869,7910,3509,4324,6099,3380,3611
+FBgn0025692,71,115,43,32,138,43,64
+FBgn0025693,1267,1757,565,631,1393,532,524
+FBgn0025697,109,129,50,60,117,48,46
+FBgn0025698,4729,7741,3045,3389,6064,2961,3389
+FBgn0025700,1251,1896,557,782,1836,944,1091
+FBgn0025701,5223,7283,2752,2883,6284,2695,2807
+FBgn0025702,104,189,60,63,240,85,99
+FBgn0025709,1,5,0,2,5,5,3
+FBgn0025712,17,27,9,18,35,7,14
+FBgn0025716,1066,1522,551,748,1502,699,732
+FBgn0025720,751,1284,478,529,1082,460,573
+FBgn0025724,4731,6606,2862,3378,6106,3368,3607
+FBgn0025725,7493,9401,4054,4699,7949,4956,5130
+FBgn0025726,3993,7063,2056,1699,9415,2276,2206
+FBgn0025739,471,839,305,328,818,467,545
+FBgn0025740,1397,1833,621,535,1501,445,392
+FBgn0025741,4146,5021,1592,1348,6609,1579,1426
+FBgn0025742,1277,1709,733,932,1526,978,1136
+FBgn0025743,960,1494,665,705,1429,697,824
+FBgn0025776,1,0,0,0,1,2,0
+FBgn0025777,832,1345,485,489,1038,545,579
+FBgn0025781,415,598,216,214,706,237,296
+FBgn0025790,1116,1467,613,778,1307,736,745
+FBgn0025800,1851,3500,1323,1236,2783,1225,1283
+FBgn0025802,1758,2723,948,1084,2423,1126,1039
+FBgn0025803,2844,4447,2246,2128,3837,2466,2588
+FBgn0025806,586,1064,231,289,925,281,329
+FBgn0025807,139,279,83,91,235,79,87
+FBgn0025808,175,247,82,94,307,116,116
+FBgn0025809,195,346,106,118,427,137,144
+FBgn0025814,1024,1352,725,938,1082,928,1017
+FBgn0025815,2428,3070,1358,1608,3012,1943,1944
+FBgn0025820,210,244,92,151,382,190,169
+FBgn0025821,0,0,1,0,1,0,0
+FBgn0025825,949,1215,451,568,1267,623,666
+FBgn0025827,1,1,0,0,0,0,0
+FBgn0025830,578,777,272,334,709,321,369
+FBgn0025832,632,750,285,343,781,299,342
+FBgn0025833,0,0,0,3,1,2,1
+FBgn0025835,5,13,5,3,11,4,1
+FBgn0025836,192,218,62,78,118,39,36
+FBgn0025837,0,0,0,0,0,0,0
+FBgn0025838,4,11,10,5,17,5,5
+FBgn0025839,420,710,260,340,666,374,456
+FBgn0025864,4782,6578,3219,3346,5894,3963,3952
+FBgn0025865,5075,7268,3202,3423,8448,4421,5019
+FBgn0025866,1295,1969,877,885,1754,984,961
+FBgn0025874,320,568,169,202,566,207,237
+FBgn0025878,0,4,3,0,1,1,1
+FBgn0025879,6,7,11,5,8,5,4
+FBgn0025881,3,1,0,0,8,0,0
+FBgn0025882,3,8,0,1,4,0,0
+FBgn0025885,19080,24494,11277,13702,26955,17144,19181
+FBgn0025936,1470,2170,576,576,2778,618,663
+FBgn0026015,1447,2182,1052,1155,2018,1305,1459
+FBgn0026056,333,586,203,253,564,262,252
+FBgn0026058,1,0,0,0,0,0,0
+FBgn0026059,1148,1895,863,796,1769,920,1002
+FBgn0026060,451,721,238,283,774,309,299
+FBgn0026061,6,10,5,8,10,1,1
+FBgn0026063,0,0,0,0,0,0,0
+FBgn0026064,0,0,0,0,0,0,0
+FBgn0026076,606,1268,340,424,947,367,400
+FBgn0026077,0,0,1,1,1,2,3
+FBgn0026079,747,1043,441,534,927,581,626
+FBgn0026080,531,914,301,379,720,348,415
+FBgn0026083,3885,6952,3092,3002,6513,4165,4152
+FBgn0026084,967,1549,400,458,1862,674,799
+FBgn0026085,167,367,96,133,271,129,155
+FBgn0026086,1005,1422,527,516,1475,510,498
+FBgn0026087,1,4,0,1,10,2,2
+FBgn0026088,533,736,221,317,873,362,408
+FBgn0026089,420,886,230,352,646,325,359
+FBgn0026090,794,1506,452,600,1130,443,550
+FBgn0026136,0,1,0,0,0,0,0
+FBgn0026141,0,0,0,0,0,0,0
+FBgn0026143,395,534,245,289,383,213,240
+FBgn0026144,9,36,14,5,18,5,9
+FBgn0026147,970,1362,450,485,1268,525,506
+FBgn0026148,57,113,24,35,116,39,51
+FBgn0026149,304,438,156,199,558,213,222
+FBgn0026150,1044,1458,553,655,1898,858,920
+FBgn0026160,1107,3955,1498,1471,2272,1220,1351
+FBgn0026162,0,0,0,0,0,0,0
+FBgn0026163,0,0,0,0,0,0,0
+FBgn0026164,0,0,0,0,0,0,0
+FBgn0026169,1,7,0,1,3,3,0
+FBgn0026170,5798,9001,2035,3032,7446,2968,3423
+FBgn0026174,13,45,10,15,45,20,22
+FBgn0026175,198,426,155,220,352,222,273
+FBgn0026176,21,16,8,11,23,10,6
+FBgn0026179,317,737,285,266,878,512,481
+FBgn0026181,4064,6352,2876,2752,5420,2873,3158
+FBgn0026189,12911,17028,6798,6845,22569,10185,10548
+FBgn0026190,0,1,0,0,1,0,0
+FBgn0026192,1709,2768,780,938,2822,1045,1150
+FBgn0026196,2333,3013,1379,1546,2700,1504,1631
+FBgn0026197,18,171,51,38,142,30,45
+FBgn0026199,2130,2873,780,761,3176,659,707
+FBgn0026206,1893,3904,1619,1481,3520,1708,1811
+FBgn0026207,651,926,317,421,951,418,464
+FBgn0026208,1769,3479,999,1321,2976,1310,1543
+FBgn0026238,875,1209,420,396,1609,330,418
+FBgn0026239,76,132,44,64,108,57,59
+FBgn0026250,3482,7374,2499,2989,5638,2803,3379
+FBgn0026252,10089,14925,5469,6435,12634,6424,6837
+FBgn0026255,11,13,6,10,35,8,13
+FBgn0026257,126,271,71,70,300,79,86
+FBgn0026259,6658,12014,4970,5133,10267,4941,5520
+FBgn0026261,424,667,172,248,670,257,275
+FBgn0026262,1351,2675,642,627,2459,517,570
+FBgn0026263,179,335,102,123,350,139,154
+FBgn0026268,3,6,6,3,4,2,4
+FBgn0026309,508,747,238,298,713,288,330
+FBgn0026313,2600,3746,1413,1715,3365,1782,1839
+FBgn0026314,2,5,1,1,4,3,0
+FBgn0026315,1504,2495,744,869,2211,735,771
+FBgn0026316,616,1169,300,392,962,426,390
+FBgn0026317,851,1402,543,574,1195,730,707
+FBgn0026318,162,349,132,112,297,147,151
+FBgn0026319,432,922,355,390,1056,512,546
+FBgn0026320,0,0,0,0,2,0,0
+FBgn0026323,1840,2768,1150,1216,1926,1077,1287
+FBgn0026324,330,359,118,193,387,175,200
+FBgn0026326,662,977,338,377,915,420,426
+FBgn0026361,323,433,184,200,487,230,285
+FBgn0026369,1692,2587,1060,1171,2089,1066,1068
+FBgn0026370,2834,5798,1897,1830,4662,1841,1946
+FBgn0026371,449,645,210,211,721,237,248
+FBgn0026372,68513,113692,46955,56465,70220,48492,49788
+FBgn0026373,497,743,285,378,665,405,423
+FBgn0026374,308,440,184,214,433,248,252
+FBgn0026375,2909,6429,2318,2257,5686,2446,2606
+FBgn0026376,1540,4083,1277,1160,1696,606,691
+FBgn0026378,584,801,255,335,859,390,449
+FBgn0026379,468,492,180,158,876,169,168
+FBgn0026380,1312,1768,626,846,2130,1105,1059
+FBgn0026384,0,0,0,0,0,0,0
+FBgn0026385,0,1,0,1,0,0,0
+FBgn0026386,0,0,0,0,0,0,0
+FBgn0026388,4,3,2,2,5,0,2
+FBgn0026389,0,0,0,0,0,0,0
+FBgn0026390,0,0,1,0,0,0,0
+FBgn0026391,0,1,0,0,0,0,0
+FBgn0026392,0,1,0,0,0,0,0
+FBgn0026393,141,258,84,97,230,126,124
+FBgn0026394,0,0,0,0,0,0,0
+FBgn0026395,0,0,0,0,0,0,0
+FBgn0026396,5,11,5,1,2,3,1
+FBgn0026397,0,1,0,0,0,0,0
+FBgn0026398,0,0,1,0,2,0,0
+FBgn0026399,0,0,0,0,0,0,0
+FBgn0026400,779,1118,426,507,1171,501,588
+FBgn0026401,3763,5367,1429,1261,7816,1390,1310
+FBgn0026402,326,513,169,215,414,199,228
+FBgn0026403,4,7,5,1,3,4,2
+FBgn0026404,538,1003,343,409,916,422,425
+FBgn0026409,11688,13814,6232,7766,10789,6471,6869
+FBgn0026411,2,1,0,0,6,2,1
+FBgn0026415,34,53,19,26,111,59,50
+FBgn0026417,287,285,121,153,546,165,183
+FBgn0026418,10311,15242,6344,7369,11442,6279,7273
+FBgn0026427,2741,5372,1769,1479,5050,1523,1612
+FBgn0026428,754,975,438,477,790,538,548
+FBgn0026430,1242,1450,620,682,1722,928,1019
+FBgn0026431,314,422,135,161,584,162,177
+FBgn0026432,555,870,255,283,902,342,326
+FBgn0026433,387,485,214,273,580,325,353
+FBgn0026438,0,1,0,2,3,0,0
+FBgn0026439,320,556,211,248,420,163,182
+FBgn0026441,1083,2100,747,768,1584,788,814
+FBgn0026479,2030,3005,1274,1488,2798,1643,1775
+FBgn0026533,4818,7663,3417,3494,6884,3356,3772
+FBgn0026562,58459,91503,50116,66671,14809,11191,12797
+FBgn0026563,0,2,0,0,2,0,0
+FBgn0026565,0,0,0,0,0,0,0
+FBgn0026566,815,1191,447,611,1216,667,690
+FBgn0026567,1310,2311,777,934,2063,1046,1218
+FBgn0026570,756,1111,347,380,995,440,463
+FBgn0026573,1134,2267,723,693,1870,693,780
+FBgn0026575,6727,11974,4873,4775,9398,5183,5535
+FBgn0026576,1138,1697,521,584,1110,482,547
+FBgn0026577,4027,9010,3230,2915,7485,3057,3152
+FBgn0026582,387,583,241,284,389,211,268
+FBgn0026585,1966,3141,1035,1283,3694,1893,2189
+FBgn0026592,19,39,14,22,22,7,10
+FBgn0026593,103,163,68,91,146,83,83
+FBgn0026597,1748,2966,1150,1154,2641,1238,1282
+FBgn0026598,451,620,205,270,738,328,392
+FBgn0026602,160,351,161,156,317,188,210
+FBgn0026611,4959,10430,3757,3403,7372,3214,3513
+FBgn0026616,380,493,222,233,559,270,282
+FBgn0026619,378,516,165,220,475,229,249
+FBgn0026620,3593,5910,1952,1994,5778,2151,2192
+FBgn0026630,1373,2025,671,735,1934,670,751
+FBgn0026634,441,631,194,235,608,247,239
+FBgn0026666,202,307,113,146,339,137,185
+FBgn0026679,905,1160,552,636,1040,717,670
+FBgn0026702,431,566,288,294,471,313,345
+FBgn0026713,2173,3048,1566,1633,2549,1875,1920
+FBgn0026718,43,124,38,63,160,57,51
+FBgn0026721,3623,8013,3241,4269,4109,2386,2457
+FBgn0026722,639,1014,369,413,1063,458,472
+FBgn0026737,197,461,145,174,457,184,190
+FBgn0026738,303,607,168,205,474,226,218
+FBgn0026741,277,447,126,159,379,146,155
+FBgn0026749,349,664,212,235,525,238,291
+FBgn0026751,854,1350,493,604,1348,540,674
+FBgn0026753,1765,2916,1245,1555,2906,1603,1841
+FBgn0026754,1,0,0,0,1,0,1
+FBgn0026755,0,0,0,0,1,0,1
+FBgn0026756,0,0,0,0,0,2,0
+FBgn0026758,1728,4529,1351,1365,4155,1418,1594
+FBgn0026760,29,62,16,17,17,11,8
+FBgn0026761,1585,2370,776,1020,1701,924,948
+FBgn0026777,1096,1669,468,469,1658,479,508
+FBgn0026778,0,0,0,0,0,0,0
+FBgn0026781,0,0,0,0,0,1,1
+FBgn0026787,352,509,159,216,387,164,183
+FBgn0026869,3473,5889,1709,1527,5135,1600,1656
+FBgn0026872,266,276,132,180,188,137,161
+FBgn0026873,470,768,266,353,777,424,426
+FBgn0026874,50,66,32,35,52,22,31
+FBgn0026876,282,441,148,195,455,223,208
+FBgn0026878,7,8,5,9,14,3,8
+FBgn0026879,297,689,169,221,586,211,230
+FBgn0027052,340,557,135,164,576,166,165
+FBgn0027053,867,1314,447,567,1356,667,684
+FBgn0027054,614,1032,377,445,851,504,500
+FBgn0027055,955,1525,542,609,1213,659,689
+FBgn0027057,633,982,330,443,922,399,465
+FBgn0027066,5155,7261,2374,2733,8005,2900,2834
+FBgn0027070,20,64,14,18,68,22,39
+FBgn0027073,5,9,2,4,7,2,2
+FBgn0027074,2,1,0,1,1,0,0
+FBgn0027079,3230,5020,2224,2384,4809,2783,3039
+FBgn0027080,1759,2441,1023,1225,2187,1122,1267
+FBgn0027081,5981,7667,3285,3995,7486,3793,4409
+FBgn0027082,254,323,140,162,363,154,170
+FBgn0027083,239,389,175,159,312,161,204
+FBgn0027084,2312,2997,1260,1672,2738,1662,1769
+FBgn0027085,491,754,261,301,743,325,339
+FBgn0027086,4256,5377,2113,2224,5109,1952,2022
+FBgn0027087,2763,3903,1754,2076,3572,2289,2559
+FBgn0027088,2919,3895,1615,1974,4288,2312,2306
+FBgn0027090,1442,2139,823,933,1965,982,1059
+FBgn0027091,1749,2301,921,1044,1394,708,742
+FBgn0027093,1551,1830,696,736,1885,816,855
+FBgn0027094,7127,9794,4052,4805,9492,5241,5500
+FBgn0027095,2050,3002,983,1458,3482,1352,1768
+FBgn0027101,848,1174,313,298,1420,277,285
+FBgn0027103,339,447,177,195,530,223,226
+FBgn0027106,2,3,1,0,0,3,1
+FBgn0027107,0,0,0,0,1,0,1
+FBgn0027108,722,777,324,331,660,320,313
+FBgn0027109,0,0,0,0,0,0,0
+FBgn0027111,27,66,18,18,35,8,6
+FBgn0027259,384,588,191,239,596,273,291
+FBgn0027279,4288,7357,2601,2782,2931,1280,1362
+FBgn0027280,5402,10753,3769,4575,8273,4236,4806
+FBgn0027287,1488,2540,1018,1039,2005,1016,1031
+FBgn0027291,2400,3279,1538,1849,2791,1782,1981
+FBgn0027296,309,388,161,143,343,164,163
+FBgn0027329,7648,9959,3866,4922,8844,5411,5997
+FBgn0027330,916,1323,502,557,1084,586,664
+FBgn0027334,563,895,356,436,601,377,367
+FBgn0027335,11578,17851,7383,7623,15702,8444,8904
+FBgn0027338,4123,6786,2107,2559,5504,2491,2761
+FBgn0027339,1401,3185,1172,1046,2093,960,913
+FBgn0027342,407,470,222,271,517,236,278
+FBgn0027343,2,11,3,3,9,4,5
+FBgn0027348,303,292,147,191,138,82,91
+FBgn0027356,662,1206,441,472,1129,394,488
+FBgn0027358,0,0,0,0,0,0,0
+FBgn0027359,503,842,241,313,788,317,355
+FBgn0027360,1,0,0,0,2,0,0
+FBgn0027363,1935,3230,1362,1441,2557,1408,1549
+FBgn0027364,0,1,0,0,0,0,0
+FBgn0027375,1360,2633,639,688,1870,438,516
+FBgn0027376,0,14,0,7,4,1,0
+FBgn0027378,527,779,258,326,669,311,353
+FBgn0027453,1057,1460,548,618,1308,671,714
+FBgn0027490,588,991,348,405,820,365,369
+FBgn0027491,14,23,14,16,38,20,15
+FBgn0027492,5510,10977,3734,3886,8900,3817,4026
+FBgn0027493,5536,7698,4104,5085,7602,5120,5773
+FBgn0027494,1,9,0,1,5,2,6
+FBgn0027495,985,1652,526,604,1215,631,747
+FBgn0027496,1289,1386,604,794,1335,794,869
+FBgn0027497,1573,2457,1125,1157,1981,1415,1575
+FBgn0027498,244,305,154,147,377,195,218
+FBgn0027499,843,1992,649,670,1629,590,664
+FBgn0027500,783,1245,441,531,1082,613,589
+FBgn0027503,810,1736,543,567,1342,656,619
+FBgn0027504,1544,3024,1015,1138,2483,1264,1286
+FBgn0027505,493,712,243,295,678,333,327
+FBgn0027506,601,1048,351,450,745,354,381
+FBgn0027507,1025,1448,415,458,1482,428,405
+FBgn0027508,869,1238,513,552,1034,627,668
+FBgn0027509,2067,2760,1057,1208,2967,1384,1337
+FBgn0027512,918,1176,434,506,1212,547,563
+FBgn0027513,330,528,168,204,402,185,198
+FBgn0027514,309,363,173,211,456,255,284
+FBgn0027515,345,609,203,261,1060,460,474
+FBgn0027518,1121,1469,620,729,1216,650,711
+FBgn0027521,35,49,15,25,54,29,23
+FBgn0027524,338,404,152,157,458,217,216
+FBgn0027525,3658,6318,2459,3102,4276,2162,2557
+FBgn0027526,380,376,162,241,535,260,307
+FBgn0027527,0,1,0,0,2,0,0
+FBgn0027528,2,3,3,3,6,3,4
+FBgn0027529,1340,1881,749,862,2048,1019,1204
+FBgn0027532,967,1993,638,741,1478,663,757
+FBgn0027534,1267,2178,961,926,1646,941,1032
+FBgn0027535,1182,1577,599,628,1512,690,656
+FBgn0027537,4589,6619,2470,2870,5341,2880,3246
+FBgn0027538,214,364,110,126,335,118,121
+FBgn0027539,611,745,288,340,940,358,392
+FBgn0027544,13,25,6,6,18,7,10
+FBgn0027546,0,1,0,0,0,0,0
+FBgn0027547,1111,1795,603,716,1488,725,827
+FBgn0027548,1696,2376,923,1068,1900,1059,1131
+FBgn0027549,1475,1972,770,943,1583,842,909
+FBgn0027550,245,399,190,197,251,152,180
+FBgn0027552,1183,2399,681,919,1102,654,784
+FBgn0027553,567,722,288,348,610,334,345
+FBgn0027554,1037,2046,728,861,1677,795,891
+FBgn0027556,336,796,307,292,791,306,343
+FBgn0027558,1501,1923,781,895,1716,862,1003
+FBgn0027559,376,751,228,277,608,237,278
+FBgn0027560,9,11,3,5,16,4,10
+FBgn0027561,2520,3726,1833,1861,2399,1438,1612
+FBgn0027562,0,1,0,0,0,0,0
+FBgn0027563,16,24,9,12,25,6,13
+FBgn0027564,409,529,207,313,571,347,314
+FBgn0027565,412,689,193,271,684,205,237
+FBgn0027567,3112,4674,1988,2108,3948,2330,2585
+FBgn0027568,2254,3040,1230,1503,2697,1505,1626
+FBgn0027569,2211,3246,1412,1582,2822,1383,1465
+FBgn0027570,27,48,28,26,32,10,14
+FBgn0027571,77313,106653,45724,44957,116686,64834,62304
+FBgn0027572,1054,1304,509,629,1287,642,724
+FBgn0027574,474,872,316,291,706,285,320
+FBgn0027575,25,56,27,21,44,22,26
+FBgn0027578,1960,2664,970,1192,1697,878,942
+FBgn0027579,1393,2237,943,1046,1663,891,936
+FBgn0027580,1878,2372,1214,1222,1193,739,835
+FBgn0027581,1698,2565,941,1031,2270,1205,1252
+FBgn0027582,2707,4008,1385,1581,3408,1565,1629
+FBgn0027583,1061,1272,532,677,1418,677,819
+FBgn0027584,3,24,3,2,14,1,8
+FBgn0027585,33,118,56,47,57,32,23
+FBgn0027586,0,1,1,0,0,0,0
+FBgn0027587,1142,2421,734,797,1810,730,696
+FBgn0027588,6325,9081,3457,4038,6574,3814,4225
+FBgn0027589,1,0,0,0,0,1,0
+FBgn0027590,657,923,346,391,542,292,322
+FBgn0027592,1536,2542,912,940,1955,910,1004
+FBgn0027594,8529,12722,6148,6168,7677,4645,5012
+FBgn0027596,823,1645,720,725,778,447,415
+FBgn0027597,396,582,208,267,824,413,450
+FBgn0027598,6476,12180,4644,4937,12091,5965,6821
+FBgn0027599,408,734,262,246,709,283,333
+FBgn0027600,2,0,1,0,0,0,2
+FBgn0027601,587,784,374,357,656,294,332
+FBgn0027602,732,1020,357,405,846,472,492
+FBgn0027603,2302,3925,1270,1256,3363,1321,1331
+FBgn0027604,400,657,229,189,497,152,129
+FBgn0027605,3528,6257,2665,3083,4939,2779,3119
+FBgn0027607,2850,3936,1443,1671,3025,1524,1671
+FBgn0027608,2,2,6,4,1,5,2
+FBgn0027609,843,1197,485,564,1001,501,617
+FBgn0027610,2098,2988,1097,1392,2339,1158,1306
+FBgn0027611,3436,5058,1772,2131,5126,2289,2326
+FBgn0027615,371,434,129,188,424,207,227
+FBgn0027616,1667,3099,1271,1381,2658,1420,1570
+FBgn0027617,223,419,134,180,419,170,173
+FBgn0027619,2072,4397,1022,1313,3610,1257,1494
+FBgn0027620,2521,4307,1503,1496,3234,1346,1382
+FBgn0027621,1023,1339,667,670,996,555,605
+FBgn0027654,31,90,17,33,74,18,21
+FBgn0027655,3272,5197,2282,2117,4417,2394,2317
+FBgn0027657,522,870,250,360,574,227,274
+FBgn0027660,152,146,64,77,155,68,78
+FBgn0027779,2560,3240,1392,1747,2996,1531,1784
+FBgn0027780,505,679,217,289,682,279,318
+FBgn0027783,1900,3152,1075,1118,2826,1049,1127
+FBgn0027784,152,224,95,106,197,122,146
+FBgn0027785,1167,1897,653,864,1697,934,993
+FBgn0027786,1473,1997,675,840,2124,907,982
+FBgn0027788,1,2,1,0,0,0,4
+FBgn0027790,0,1,0,1,0,0,0
+FBgn0027791,835,1190,638,712,873,713,667
+FBgn0027793,30,34,17,25,30,30,22
+FBgn0027794,851,1130,580,624,1003,667,710
+FBgn0027795,85,119,37,59,87,63,83
+FBgn0027796,5,7,2,2,6,3,4
+FBgn0027835,11760,17469,5958,6689,14393,7304,7477
+FBgn0027836,3177,4259,1865,2154,5347,3372,3766
+FBgn0027841,199,415,148,179,401,211,206
+FBgn0027842,1481,1813,839,940,1595,810,892
+FBgn0027843,563,1175,373,538,1521,688,772
+FBgn0027844,5,16,1,2,9,1,1
+FBgn0027864,141,258,57,74,195,48,70
+FBgn0027865,372,747,203,197,1130,359,309
+FBgn0027866,2130,3919,1277,1426,3338,1365,1407
+FBgn0027868,2130,2605,1303,1545,2100,1469,1528
+FBgn0027872,183,273,57,114,304,107,145
+FBgn0027873,801,1125,418,551,1152,513,560
+FBgn0027885,2295,4449,1322,1445,4737,1845,2016
+FBgn0027889,1362,2058,711,882,2101,1078,1098
+FBgn0027903,705,899,335,369,784,400,436
+FBgn0027914,231,331,112,140,374,167,178
+FBgn0027929,498,553,312,359,806,469,542
+FBgn0027930,1398,2058,717,911,2027,967,1081
+FBgn0027932,13018,25477,8577,9388,25581,11461,13187
+FBgn0027934,0,0,0,0,0,0,0
+FBgn0027936,823,1420,381,404,1365,540,590
+FBgn0027945,220,375,94,100,466,160,216
+FBgn0027948,8210,14524,4895,4673,16177,6644,6233
+FBgn0027949,1273,2167,728,911,2770,1469,1544
+FBgn0027950,469,665,230,316,600,352,414
+FBgn0027951,2369,4288,1666,1650,3288,1707,1739
+FBgn0028274,938,1437,591,716,1162,702,756
+FBgn0028292,569,840,304,359,662,397,389
+FBgn0028325,3248,4799,1962,2413,3121,1975,2112
+FBgn0028327,3286,5906,1885,2433,7048,3749,4041
+FBgn0028331,5097,8718,3483,3819,5270,3021,3622
+FBgn0028336,1808,2496,1019,1225,2192,1349,1521
+FBgn0028341,1143,1667,823,792,1358,844,838
+FBgn0028342,1778,2417,868,1129,2134,1298,1480
+FBgn0028343,2165,2949,1312,1500,3040,1636,1782
+FBgn0028360,695,1237,398,381,1154,608,629
+FBgn0028369,6,4,2,7,8,2,4
+FBgn0028370,3,3,3,1,8,7,3
+FBgn0028371,1,2,0,0,1,0,2
+FBgn0028372,306,478,155,191,520,203,231
+FBgn0028373,13,57,17,26,105,44,57
+FBgn0028374,0,0,0,0,1,0,0
+FBgn0028375,969,1316,448,452,1546,616,636
+FBgn0028377,0,0,0,0,0,0,0
+FBgn0028379,4,21,9,6,19,4,8
+FBgn0028380,684,927,312,354,928,325,339
+FBgn0028381,2,2,1,0,2,1,1
+FBgn0028382,295,519,125,202,431,203,212
+FBgn0028386,6085,13112,5675,5292,7486,4470,4847
+FBgn0028387,416,858,252,283,708,262,295
+FBgn0028394,215,289,111,147,202,69,99
+FBgn0028396,11,9,5,5,6,3,2
+FBgn0028397,431,934,308,256,510,173,187
+FBgn0028398,334,591,109,135,342,123,148
+FBgn0028399,3824,4507,2168,2794,4060,2088,2452
+FBgn0028400,0,0,0,0,1,0,0
+FBgn0028401,871,1360,606,684,1129,629,727
+FBgn0028402,381,567,211,257,519,267,288
+FBgn0028406,259,416,129,134,413,147,139
+FBgn0028407,1,2,1,0,2,0,0
+FBgn0028408,41,79,30,36,65,29,19
+FBgn0028410,0,0,0,0,2,0,0
+FBgn0028411,546,816,200,332,756,365,419
+FBgn0028412,0,0,0,0,0,0,0
+FBgn0028415,0,0,0,0,0,0,0
+FBgn0028416,0,0,0,0,0,0,0
+FBgn0028418,8,12,4,5,15,5,15
+FBgn0028419,2440,3196,1069,1365,2919,1399,1522
+FBgn0028420,1439,2750,1254,1117,1958,946,1019
+FBgn0028421,816,1125,465,509,1129,544,595
+FBgn0028422,1,3,0,3,2,0,1
+FBgn0028424,936,2081,658,864,1957,795,1044
+FBgn0028425,4773,6550,2383,2784,5209,2478,2782
+FBgn0028426,781,1300,379,455,995,399,470
+FBgn0028427,962,1596,490,644,1499,709,794
+FBgn0028428,92,140,56,64,181,92,90
+FBgn0028429,667,1290,368,397,1064,380,440
+FBgn0028430,3317,4012,690,912,4113,824,909
+FBgn0028431,0,0,0,0,0,0,0
+FBgn0028433,158,240,77,83,86,32,44
+FBgn0028434,72,119,25,49,191,87,101
+FBgn0028436,256,383,120,167,304,185,184
+FBgn0028467,1447,2015,765,822,1726,838,830
+FBgn0028468,1495,1416,603,853,1647,757,849
+FBgn0028470,1599,2605,919,924,2266,995,1057
+FBgn0028471,766,1482,486,546,1244,554,606
+FBgn0028473,24964,43635,17235,22369,24738,14177,16279
+FBgn0028474,1776,2895,1244,1274,2370,1340,1421
+FBgn0028475,1728,2733,930,1066,2412,1177,1350
+FBgn0028476,1205,1715,686,707,1690,757,786
+FBgn0028479,3687,4511,2180,2540,3922,2242,2249
+FBgn0028480,2360,3057,1346,1547,2397,1464,1631
+FBgn0028481,0,2,2,0,3,1,0
+FBgn0028482,49,162,67,85,98,49,47
+FBgn0028484,1361,2255,917,992,1939,1017,1172
+FBgn0028485,1007,2068,756,718,1411,703,666
+FBgn0028487,501,716,252,311,554,256,311
+FBgn0028490,8660,16852,6609,7180,9346,5592,6444
+FBgn0028491,101,237,105,122,325,174,175
+FBgn0028494,981,1782,682,649,1441,651,667
+FBgn0028496,3,9,1,4,1,0,1
+FBgn0028497,1621,2766,1020,1192,2125,1150,1252
+FBgn0028499,208,263,129,159,281,183,211
+FBgn0028500,1599,2395,943,1010,1862,971,1009
+FBgn0028504,216,298,90,106,290,111,117
+FBgn0028506,541,981,276,289,968,306,312
+FBgn0028507,593,849,384,465,909,482,593
+FBgn0028509,1369,1861,818,808,1610,841,861
+FBgn0028513,8,122,57,31,130,30,23
+FBgn0028514,1127,1424,443,461,694,278,270
+FBgn0028515,1724,2739,900,1087,2224,1067,1129
+FBgn0028516,0,0,0,0,1,0,0
+FBgn0028517,0,0,0,0,0,0,0
+FBgn0028518,0,0,0,0,0,0,0
+FBgn0028519,7,15,10,7,19,10,14
+FBgn0028520,0,0,0,0,0,0,0
+FBgn0028523,803,1025,391,440,1410,456,480
+FBgn0028525,9,13,2,3,17,1,1
+FBgn0028526,2,2,2,1,8,0,0
+FBgn0028527,1,9,1,4,9,4,5
+FBgn0028530,309,397,127,189,439,205,245
+FBgn0028531,2,2,0,1,1,1,0
+FBgn0028532,1,3,0,1,1,0,2
+FBgn0028533,6,6,0,0,8,3,2
+FBgn0028534,4,8,5,1,4,1,2
+FBgn0028535,309,416,156,245,352,237,254
+FBgn0028537,0,0,0,0,0,0,0
+FBgn0028538,2211,2814,1142,1275,2605,1407,1383
+FBgn0028539,2601,4312,1552,1602,3891,1670,1671
+FBgn0028540,200,261,68,106,141,55,67
+FBgn0028541,2174,2952,1109,1235,2908,1286,1429
+FBgn0028542,1819,1844,931,1364,883,647,736
+FBgn0028543,846,1099,566,727,759,451,492
+FBgn0028544,7,6,4,3,2,3,4
+FBgn0028546,919,1281,446,628,1416,615,678
+FBgn0028550,148,360,111,104,298,131,109
+FBgn0028552,689,790,282,387,822,352,424
+FBgn0028554,1549,2014,849,967,2166,1098,1029
+FBgn0028560,2,4,0,2,1,3,1
+FBgn0028561,6,13,4,3,3,0,7
+FBgn0028562,11,10,6,8,13,2,6
+FBgn0028563,1539,1956,822,933,1297,632,674
+FBgn0028567,0,2,2,0,2,1,1
+FBgn0028569,0,0,0,0,0,0,0
+FBgn0028570,0,0,0,0,0,0,0
+FBgn0028572,412,592,284,310,427,291,312
+FBgn0028573,52,151,73,63,169,103,109
+FBgn0028577,2542,4993,2021,2142,3484,2046,2214
+FBgn0028579,653,1094,391,433,988,447,495
+FBgn0028581,0,0,0,0,0,0,0
+FBgn0028582,2391,4517,1410,1435,3928,1383,1615
+FBgn0028583,10,2,2,1,14,0,1
+FBgn0028622,5,11,6,4,18,2,12
+FBgn0028642,0,0,0,0,1,0,2
+FBgn0028644,4,2,1,1,1,1,2
+FBgn0028645,3,8,0,5,8,3,2
+FBgn0028646,798,1308,515,563,946,491,479
+FBgn0028647,222,416,147,137,429,166,172
+FBgn0028648,291,568,165,199,417,203,268
+FBgn0028658,36,60,16,24,66,24,31
+FBgn0028662,3374,3318,1353,1848,3572,1902,1896
+FBgn0028663,1158,1403,544,709,1501,584,777
+FBgn0028664,176,319,79,92,244,62,84
+FBgn0028665,2951,3590,1453,1937,3500,1850,2117
+FBgn0028667,4,0,0,0,0,0,1
+FBgn0028668,0,0,0,0,0,0,0
+FBgn0028669,0,0,0,0,0,0,1
+FBgn0028670,4382,5423,2276,2841,5888,3416,3777
+FBgn0028671,2924,4614,2106,2236,3593,1939,2128
+FBgn0028675,155,368,141,139,334,151,177
+FBgn0028683,272,319,79,123,378,105,110
+FBgn0028684,1166,1477,592,726,1870,865,949
+FBgn0028685,2107,3128,1258,1489,2636,1657,1823
+FBgn0028686,2665,3380,1350,1782,3659,2125,2111
+FBgn0028687,3366,4667,1671,2144,4397,2322,2581
+FBgn0028688,1701,2283,869,1094,1994,1180,1383
+FBgn0028689,2699,3823,1482,1720,3838,1793,1932
+FBgn0028690,1883,3158,986,1184,3226,1428,1587
+FBgn0028691,1116,1593,534,696,1775,777,857
+FBgn0028692,4326,5614,2440,2730,6039,3377,3709
+FBgn0028693,1159,1521,536,686,1488,834,821
+FBgn0028694,1830,2408,894,1163,2667,1420,1552
+FBgn0028695,3535,4234,1808,2066,4102,2534,2852
+FBgn0028696,16061,31358,8766,12830,22733,11690,11234
+FBgn0028699,1,2,0,1,1,0,1
+FBgn0028700,422,562,214,274,416,256,291
+FBgn0028703,692,919,418,483,803,388,422
+FBgn0028704,31,60,14,18,50,25,26
+FBgn0028707,71,85,31,45,89,37,34
+FBgn0028708,281,449,141,179,386,179,181
+FBgn0028717,1559,2631,1060,1207,1936,1022,1070
+FBgn0028734,4303,6482,2724,2585,6126,3054,3151
+FBgn0028737,10472,14552,5320,7112,11943,6904,7226
+FBgn0028738,86,127,48,67,102,64,80
+FBgn0028740,66,139,51,45,136,75,81
+FBgn0028741,0,3,0,0,0,1,1
+FBgn0028743,23,56,15,21,38,18,21
+FBgn0028744,1480,2281,815,897,1641,840,928
+FBgn0028746,108,264,49,68,209,80,85
+FBgn0028789,0,0,0,0,1,0,0
+FBgn0028833,0,0,0,0,0,0,0
+FBgn0028836,491,845,288,361,854,335,420
+FBgn0028837,557,784,297,347,649,404,431
+FBgn0028838,0,0,0,0,0,0,0
+FBgn0028841,1,0,0,0,0,0,0
+FBgn0028844,1,2,0,0,0,0,0
+FBgn0028847,0,0,0,0,0,0,0
+FBgn0028848,0,0,0,0,0,0,0
+FBgn0028850,0,0,0,0,0,0,0
+FBgn0028852,1,2,1,0,1,0,0
+FBgn0028853,0,0,0,0,0,0,0
+FBgn0028855,0,0,0,0,0,0,1
+FBgn0028856,0,1,0,0,4,0,0
+FBgn0028857,0,3,1,0,4,1,1
+FBgn0028858,0,0,0,1,1,0,1
+FBgn0028859,10,18,14,8,31,10,14
+FBgn0028862,2,6,1,1,4,3,2
+FBgn0028863,94,298,95,119,266,134,127
+FBgn0028864,0,0,0,0,0,0,0
+FBgn0028866,0,0,0,0,0,0,0
+FBgn0028867,0,0,0,0,0,0,0
+FBgn0028868,0,0,0,0,0,0,0
+FBgn0028870,0,0,0,0,0,0,0
+FBgn0028871,3,2,10,2,6,3,1
+FBgn0028872,0,0,0,0,0,0,0
+FBgn0028873,0,0,0,0,0,0,0
+FBgn0028875,0,3,2,0,8,2,0
+FBgn0028878,0,0,0,1,1,0,0
+FBgn0028879,0,0,0,0,0,0,0
+FBgn0028880,0,0,1,0,0,0,0
+FBgn0028882,0,0,0,0,0,0,0
+FBgn0028884,0,0,0,0,0,0,0
+FBgn0028886,136,197,73,93,219,88,98
+FBgn0028887,0,1,0,0,1,0,0
+FBgn0028888,0,2,4,2,5,2,2
+FBgn0028889,0,0,0,0,0,0,0
+FBgn0028891,0,0,0,0,0,0,0
+FBgn0028892,0,0,0,0,0,0,0
+FBgn0028893,0,0,0,1,0,0,0
+FBgn0028894,914,1374,386,492,1211,427,446
+FBgn0028895,88,123,43,59,104,54,58
+FBgn0028896,1,4,1,3,9,2,6
+FBgn0028897,115,149,54,99,142,88,89
+FBgn0028899,11,40,7,6,63,9,16
+FBgn0028900,0,0,0,0,0,0,0
+FBgn0028901,1,1,0,0,1,0,0
+FBgn0028902,1,9,3,2,7,5,4
+FBgn0028903,4,12,1,4,21,9,6
+FBgn0028904,0,0,1,0,0,0,0
+FBgn0028905,6,13,9,6,12,6,4
+FBgn0028906,27,45,38,37,35,28,25
+FBgn0028909,0,0,0,0,0,0,0
+FBgn0028910,0,0,0,0,0,0,0
+FBgn0028911,0,0,0,0,0,0,0
+FBgn0028912,0,0,0,0,0,0,0
+FBgn0028913,0,0,0,0,0,0,0
+FBgn0028916,1223,1436,655,685,1165,596,661
+FBgn0028917,3,1,1,0,1,0,2
+FBgn0028919,217,344,119,139,292,144,230
+FBgn0028920,4,7,0,2,8,5,8
+FBgn0028925,179,272,86,133,252,103,114
+FBgn0028926,342,538,199,255,403,243,261
+FBgn0028931,125,166,72,94,169,97,99
+FBgn0028932,90,150,48,62,141,73,67
+FBgn0028935,0,0,0,0,0,0,0
+FBgn0028936,1785,1459,659,911,1284,693,720
+FBgn0028938,1,1,0,0,2,1,0
+FBgn0028939,22,39,22,36,8,4,6
+FBgn0028940,670,924,256,363,672,284,321
+FBgn0028941,7,21,5,7,35,16,8
+FBgn0028942,1,7,6,3,13,4,6
+FBgn0028943,2,6,2,0,10,2,5
+FBgn0028944,0,0,0,0,0,0,0
+FBgn0028945,0,0,0,0,0,0,0
+FBgn0028946,0,0,0,0,0,0,0
+FBgn0028947,0,0,0,0,0,0,0
+FBgn0028948,0,0,0,0,0,0,0
+FBgn0028949,0,0,0,0,0,0,0
+FBgn0028950,1,0,0,0,2,0,0
+FBgn0028952,77,168,37,57,165,61,63
+FBgn0028953,1782,3807,1209,1301,2668,1172,1434
+FBgn0028954,1832,3127,916,1086,3698,1510,1410
+FBgn0028955,72,121,34,44,62,31,28
+FBgn0028956,533,658,283,339,627,270,321
+FBgn0028961,6,3,3,2,7,2,3
+FBgn0028962,558,773,327,352,611,349,383
+FBgn0028963,0,0,0,0,2,0,0
+FBgn0028965,648,1101,389,476,839,479,520
+FBgn0028968,4113,5217,2297,2767,4730,2607,2868
+FBgn0028969,4843,7532,3172,3732,6157,3698,4275
+FBgn0028970,595,732,371,427,426,330,383
+FBgn0028974,859,1247,470,515,1121,517,537
+FBgn0028978,483,891,358,362,772,486,538
+FBgn0028979,548,729,285,286,655,296,319
+FBgn0028980,276,440,138,138,427,160,192
+FBgn0028981,0,2,2,2,1,1,2
+FBgn0028982,4164,6302,2811,2921,5138,3019,3127
+FBgn0028983,364,571,217,270,527,266,331
+FBgn0028984,7043,9515,4050,5368,9616,4707,5391
+FBgn0028985,880,1470,477,586,1560,677,743
+FBgn0028986,1,2,0,1,2,1,0
+FBgn0028987,0,1,0,0,0,0,0
+FBgn0028988,16,27,11,10,23,22,20
+FBgn0028990,1575,2914,1060,1423,1376,798,915
+FBgn0028991,305,584,246,257,437,319,311
+FBgn0028992,780,1092,369,427,1329,439,497
+FBgn0028996,65,94,27,19,78,28,27
+FBgn0028997,272,382,109,158,410,155,192
+FBgn0028999,0,2,0,0,2,0,0
+FBgn0029002,578,2017,617,815,4244,1764,2111
+FBgn0029003,1,0,0,0,0,3,0
+FBgn0029006,2557,4035,1432,1578,2958,1487,1510
+FBgn0029067,1491,2516,715,749,2241,666,752
+FBgn0029079,640,758,273,360,669,366,416
+FBgn0029082,0,2,0,0,1,2,0
+FBgn0029084,3,7,1,2,7,2,0
+FBgn0029088,1470,2073,677,706,2189,859,893
+FBgn0029090,53,100,44,52,29,19,19
+FBgn0029091,0,3,1,1,1,0,0
+FBgn0029092,7977,16728,5996,7397,10760,4834,5420
+FBgn0029093,14327,19605,8588,11727,16759,9893,11299
+FBgn0029094,868,1296,452,547,1120,537,507
+FBgn0029095,5060,7193,3414,3832,4751,2752,3156
+FBgn0029105,1,1,1,0,1,2,0
+FBgn0029113,2634,4290,1437,1755,3963,1926,2137
+FBgn0029114,1913,2911,1045,1018,2157,828,879
+FBgn0029117,199,294,88,123,227,124,148
+FBgn0029118,591,948,317,383,940,475,532
+FBgn0029121,223,265,111,144,317,140,200
+FBgn0029123,3,5,2,2,4,2,1
+FBgn0029128,7,22,5,4,7,5,4
+FBgn0029131,1691,2220,1019,1122,1707,965,1095
+FBgn0029133,3062,5156,1514,1873,4823,1902,2042
+FBgn0029134,2013,2806,1072,1273,2689,1506,1773
+FBgn0029137,43,41,15,18,35,28,27
+FBgn0029147,1197,1256,498,619,1765,999,1030
+FBgn0029148,908,879,298,467,1163,468,520
+FBgn0029152,751,1147,445,445,1243,472,484
+FBgn0029153,0,0,0,0,0,0,0
+FBgn0029154,0,0,0,0,0,0,0
+FBgn0029155,5124,7274,2716,2956,5661,2768,3017
+FBgn0029157,1175,2052,860,882,1552,986,994
+FBgn0029158,253,373,135,158,303,165,185
+FBgn0029161,0,4,0,0,2,0,0
+FBgn0029167,6272,9801,3843,4063,2050,973,927
+FBgn0029170,0,0,0,0,1,0,0
+FBgn0029172,0,0,0,0,0,0,0
+FBgn0029173,337,402,164,220,450,218,225
+FBgn0029174,2531,3458,1269,1652,3567,1669,1885
+FBgn0029175,0,0,0,0,0,0,0
+FBgn0029176,30428,42557,18858,23782,35417,21724,23610
+FBgn0029501,1,1,0,0,0,0,0
+FBgn0029502,422,734,267,333,638,346,366
+FBgn0029503,420,614,188,271,526,238,248
+FBgn0029504,1254,2512,849,774,1737,660,676
+FBgn0029506,14652,16691,5864,7451,26229,9339,10312
+FBgn0029507,1687,2299,1071,1348,2157,1192,1560
+FBgn0029508,23,79,97,100,87,80,114
+FBgn0029512,1175,1944,607,724,1741,797,817
+FBgn0029514,214,329,98,140,349,149,193
+FBgn0029518,4,7,2,1,2,2,2
+FBgn0029521,115,144,55,52,254,83,86
+FBgn0029522,36,66,23,23,68,37,41
+FBgn0029523,19,22,11,15,34,14,20
+FBgn0029524,6,16,6,16,26,13,22
+FBgn0029525,416,595,233,255,569,278,290
+FBgn0029526,43,50,31,36,90,48,57
+FBgn0029529,97,143,61,65,147,94,82
+FBgn0029531,2,6,1,1,4,2,3
+FBgn0029532,2,4,2,1,6,2,4
+FBgn0029535,0,2,1,0,0,0,1
+FBgn0029538,59,91,51,40,69,45,56
+FBgn0029539,0,0,0,0,0,0,0
+FBgn0029552,0,0,0,0,0,0,0
+FBgn0029568,11,23,5,8,19,12,16
+FBgn0029573,15,36,7,18,17,14,31
+FBgn0029580,16,36,10,15,24,20,17
+FBgn0029587,9,16,11,3,15,6,9
+FBgn0029588,35,35,14,17,63,23,23
+FBgn0029589,3,3,0,1,8,2,7
+FBgn0029590,0,7,1,1,3,3,1
+FBgn0029594,448,660,191,282,728,353,382
+FBgn0029596,46,79,36,28,97,56,46
+FBgn0029603,2,2,0,0,0,1,0
+FBgn0029606,1,1,1,1,0,1,1
+FBgn0029608,906,1192,454,585,697,390,483
+FBgn0029629,5934,11309,3992,5173,8537,4816,5535
+FBgn0029639,1,2,1,1,4,2,1
+FBgn0029642,2,0,1,0,3,0,0
+FBgn0029643,5,11,5,5,8,9,5
+FBgn0029644,0,0,1,0,1,1,1
+FBgn0029645,0,1,0,1,1,0,0
+FBgn0029646,0,0,0,0,0,0,0
+FBgn0029647,0,0,0,0,1,0,0
+FBgn0029648,46,60,27,32,81,28,32
+FBgn0029649,0,0,0,0,0,0,0
+FBgn0029656,2,18,3,3,16,1,4
+FBgn0029657,3,11,3,4,12,1,10
+FBgn0029658,28,21,7,10,33,11,15
+FBgn0029659,32,107,25,32,167,50,51
+FBgn0029660,35,211,71,46,209,40,48
+FBgn0029661,26,191,45,41,188,39,46
+FBgn0029662,322,835,325,282,727,349,415
+FBgn0029663,60,110,42,34,162,31,48
+FBgn0029664,494,972,333,406,1297,520,616
+FBgn0029665,126,277,79,88,250,116,98
+FBgn0029666,460,915,300,310,903,297,382
+FBgn0029667,7,57,17,11,59,20,15
+FBgn0029669,11,34,18,7,47,7,14
+FBgn0029672,408,727,176,219,640,186,214
+FBgn0029676,150,493,107,97,595,121,164
+FBgn0029679,1,0,0,0,1,0,0
+FBgn0029681,2,4,0,3,4,2,0
+FBgn0029685,1889,2253,966,1130,1993,934,1034
+FBgn0029686,108,131,85,86,149,80,117
+FBgn0029687,2711,4703,1305,1381,4757,1448,1700
+FBgn0029688,3903,6575,2635,2705,5247,2712,2827
+FBgn0029689,402,504,225,249,472,250,287
+FBgn0029690,0,3,0,0,0,0,2
+FBgn0029692,3,2,0,2,4,2,1
+FBgn0029693,702,1030,354,468,1191,554,579
+FBgn0029694,0,3,0,1,3,0,0
+FBgn0029696,0,0,1,0,1,1,2
+FBgn0029697,3,6,10,4,11,10,10
+FBgn0029700,2,7,1,0,4,1,1
+FBgn0029701,0,1,2,1,3,0,1
+FBgn0029702,0,5,1,3,12,3,0
+FBgn0029703,0,0,1,1,6,1,0
+FBgn0029704,749,1073,339,392,989,441,470
+FBgn0029705,1,6,0,0,8,2,5
+FBgn0029706,1248,1678,713,858,1375,759,790
+FBgn0029707,0,0,0,0,2,0,1
+FBgn0029708,2,2,4,0,8,1,3
+FBgn0029709,1823,2754,1080,1409,2324,1437,1634
+FBgn0029710,29,70,20,22,57,12,28
+FBgn0029711,186,321,116,138,228,137,174
+FBgn0029712,34,26,11,20,48,23,13
+FBgn0029713,518,871,293,394,934,479,496
+FBgn0029714,305,369,129,195,370,168,193
+FBgn0029715,784,1580,475,505,1222,507,557
+FBgn0029716,3,5,2,1,2,2,3
+FBgn0029717,0,0,0,0,0,0,0
+FBgn0029718,251,600,142,201,487,177,214
+FBgn0029719,15,31,21,20,42,26,22
+FBgn0029720,0,1,1,0,3,1,1
+FBgn0029722,21,24,9,10,18,11,10
+FBgn0029723,0,2,1,1,2,3,0
+FBgn0029724,0,0,0,0,0,0,0
+FBgn0029725,0,0,0,0,0,0,0
+FBgn0029726,0,0,0,0,0,0,0
+FBgn0029727,0,0,0,0,0,0,0
+FBgn0029728,0,5,0,0,21,2,3
+FBgn0029729,0,0,0,0,0,0,0
+FBgn0029730,0,1,0,0,0,0,0
+FBgn0029733,1,4,1,1,2,1,0
+FBgn0029736,1128,1548,724,852,1465,910,992
+FBgn0029737,1497,1505,878,1099,1641,1134,1069
+FBgn0029738,2846,6476,1941,1997,4532,1980,2355
+FBgn0029740,0,1,0,0,2,0,0
+FBgn0029745,0,16,6,4,16,2,0
+FBgn0029746,2,4,4,5,29,3,2
+FBgn0029747,6,32,10,6,24,4,7
+FBgn0029748,1,4,3,0,2,1,1
+FBgn0029749,0,0,0,0,2,0,1
+FBgn0029750,20,30,9,5,21,6,7
+FBgn0029751,0,3,1,0,2,2,1
+FBgn0029752,0,1,0,1,3,0,0
+FBgn0029753,0,0,0,0,0,0,0
+FBgn0029754,3,7,3,1,9,7,3
+FBgn0029755,551,653,276,394,552,362,402
+FBgn0029756,209,253,102,117,219,125,123
+FBgn0029761,11,31,12,8,53,22,19
+FBgn0029762,8,53,27,16,32,13,19
+FBgn0029763,1235,1833,909,854,1673,909,1045
+FBgn0029764,4605,7688,2577,2666,7680,3052,3198
+FBgn0029765,13,22,8,7,27,13,12
+FBgn0029766,12798,43254,17308,20514,19853,12070,14521
+FBgn0029768,0,0,0,0,0,1,0
+FBgn0029769,0,0,0,0,0,0,0
+FBgn0029770,0,0,0,1,0,0,0
+FBgn0029771,623,827,307,309,886,409,428
+FBgn0029775,1,6,0,0,2,0,0
+FBgn0029778,487,805,390,408,749,517,585
+FBgn0029783,105,171,53,88,130,77,72
+FBgn0029785,22753,44579,13988,21702,39761,17071,19265
+FBgn0029789,500,593,251,272,531,305,345
+FBgn0029791,45,269,178,156,134,121,116
+FBgn0029795,9,33,16,9,13,15,9
+FBgn0029798,835,1101,393,507,850,398,444
+FBgn0029799,74,110,46,48,110,43,79
+FBgn0029800,106,202,71,82,154,53,61
+FBgn0029801,1802,3677,1256,1313,1628,788,917
+FBgn0029803,82,183,47,54,143,46,61
+FBgn0029804,3,12,10,1,15,6,5
+FBgn0029807,5,4,8,6,9,7,2
+FBgn0029808,163,350,136,138,257,154,159
+FBgn0029809,1,17,1,0,6,0,1
+FBgn0029810,1,3,1,2,0,2,3
+FBgn0029811,0,0,0,0,1,0,0
+FBgn0029812,0,2,1,0,0,0,0
+FBgn0029813,79,105,35,42,109,48,49
+FBgn0029814,1,1,0,0,0,0,0
+FBgn0029815,0,3,0,0,0,0,0
+FBgn0029816,0,0,0,0,0,0,0
+FBgn0029817,0,0,1,0,2,1,0
+FBgn0029818,1518,1861,850,1018,2066,1002,1147
+FBgn0029819,858,997,437,490,980,537,599
+FBgn0029820,1309,2199,953,1124,1623,911,985
+FBgn0029821,92,157,58,77,151,56,73
+FBgn0029822,657,1215,483,465,965,495,533
+FBgn0029823,2366,2915,1400,1736,3485,2385,2465
+FBgn0029824,218,478,207,246,466,263,239
+FBgn0029825,78,121,52,56,232,65,77
+FBgn0029826,8,11,5,7,19,9,13
+FBgn0029827,2,2,1,1,1,0,2
+FBgn0029828,0,0,0,0,1,0,0
+FBgn0029830,4,11,7,9,11,6,7
+FBgn0029831,0,7,0,2,2,1,0
+FBgn0029833,561,726,327,421,677,420,459
+FBgn0029834,22,30,11,16,32,13,20
+FBgn0029835,1,2,0,0,1,0,0
+FBgn0029836,0,0,0,0,0,0,0
+FBgn0029837,0,5,2,0,4,3,2
+FBgn0029838,2,3,0,1,4,0,3
+FBgn0029839,0,0,0,0,0,0,0
+FBgn0029840,1165,1741,874,875,1240,836,875
+FBgn0029843,5,5,2,1,2,3,3
+FBgn0029846,2,10,6,6,15,4,4
+FBgn0029848,11,17,4,5,40,13,17
+FBgn0029849,708,744,296,361,738,284,326
+FBgn0029850,1241,2570,1006,934,2425,1238,1327
+FBgn0029851,22,48,26,23,40,21,28
+FBgn0029853,864,1412,474,563,1215,677,745
+FBgn0029854,380,662,220,291,793,312,351
+FBgn0029856,310,258,1742,2147,404,1450,2638
+FBgn0029857,707,1054,413,528,799,465,554
+FBgn0029858,240,226,134,139,255,183,164
+FBgn0029859,0,0,0,0,0,0,0
+FBgn0029860,0,0,0,0,0,0,0
+FBgn0029861,575,966,439,435,1140,624,697
+FBgn0029863,1,0,1,0,3,1,2
+FBgn0029864,3,5,2,6,3,1,5
+FBgn0029866,21,26,18,15,22,12,20
+FBgn0029867,1782,2897,1115,1256,2310,1150,1303
+FBgn0029868,1261,1917,705,927,1459,882,931
+FBgn0029870,2538,4739,1799,1979,3317,1659,1811
+FBgn0029873,832,1894,596,714,1393,720,857
+FBgn0029874,385,507,250,292,467,340,347
+FBgn0029877,21,26,11,14,22,13,13
+FBgn0029878,1843,3671,1268,1373,3652,1455,1619
+FBgn0029879,32,39,8,19,38,14,28
+FBgn0029880,10,27,10,12,37,8,13
+FBgn0029881,4593,10047,3617,3204,6122,2484,2727
+FBgn0029882,1359,1907,571,882,1705,833,970
+FBgn0029885,480,728,237,302,594,273,293
+FBgn0029887,1451,2410,982,1074,2028,1092,1262
+FBgn0029888,694,985,359,509,850,482,518
+FBgn0029890,50,104,66,79,67,71,92
+FBgn0029891,1478,2018,881,1031,1483,903,996
+FBgn0029892,74,108,50,67,119,86,86
+FBgn0029893,2275,4404,1747,1789,2735,1505,1745
+FBgn0029894,249,698,238,209,459,194,222
+FBgn0029895,65,177,72,90,228,117,126
+FBgn0029896,739,1460,539,544,246,96,113
+FBgn0029897,38594,45862,24440,35776,34447,28811,31451
+FBgn0029898,4,4,7,9,10,3,6
+FBgn0029899,3447,6236,2354,2272,5507,2647,2753
+FBgn0029903,4800,7149,2677,2545,7356,3242,3186
+FBgn0029905,688,1313,503,544,866,562,615
+FBgn0029906,0,0,0,0,0,0,0
+FBgn0029907,0,0,0,0,0,0,0
+FBgn0029909,7,12,3,3,18,6,11
+FBgn0029911,712,1510,528,551,1180,530,585
+FBgn0029912,821,1207,639,672,933,625,670
+FBgn0029913,122,144,57,80,185,85,91
+FBgn0029914,383,606,211,281,525,284,298
+FBgn0029915,391,478,179,283,721,311,345
+FBgn0029920,0,2,1,1,1,0,0
+FBgn0029922,7,13,4,4,6,5,5
+FBgn0029924,148,157,89,98,201,123,128
+FBgn0029925,277,395,133,186,440,183,201
+FBgn0029928,37,42,21,19,55,30,24
+FBgn0029929,373,610,240,288,473,274,307
+FBgn0029930,0,2,3,0,1,1,0
+FBgn0029931,0,0,0,0,0,0,0
+FBgn0029932,4,8,1,0,7,3,3
+FBgn0029933,0,0,0,0,0,0,0
+FBgn0029935,238,349,116,156,300,123,117
+FBgn0029936,224,341,163,155,314,186,190
+FBgn0029937,786,1376,571,648,1062,612,691
+FBgn0029939,5,14,8,7,9,4,6
+FBgn0029940,0,1,0,0,1,0,1
+FBgn0029941,2685,4292,1914,1912,3800,2401,2558
+FBgn0029942,187,377,133,154,399,126,160
+FBgn0029943,319,653,213,230,530,236,239
+FBgn0029944,538,969,317,349,1165,414,480
+FBgn0029945,14,30,11,9,44,10,25
+FBgn0029946,1,0,5,4,5,0,4
+FBgn0029947,0,1,0,0,0,0,0
+FBgn0029948,0,6,0,0,2,2,0
+FBgn0029949,1,14,5,3,7,1,0
+FBgn0029950,4,69,23,10,39,6,11
+FBgn0029951,12,57,19,14,43,6,4
+FBgn0029952,1,4,0,0,4,0,0
+FBgn0029955,6,9,3,5,12,6,2
+FBgn0029957,819,1048,528,567,947,662,802
+FBgn0029958,393,539,202,276,492,262,322
+FBgn0029959,410,699,221,273,542,246,270
+FBgn0029961,0,0,0,0,0,0,0
+FBgn0029962,0,1,0,0,2,0,1
+FBgn0029963,0,0,0,0,0,0,0
+FBgn0029964,0,0,0,0,0,0,0
+FBgn0029965,0,0,0,0,0,0,0
+FBgn0029966,0,0,0,0,2,0,0
+FBgn0029968,127,156,66,81,119,68,67
+FBgn0029969,617,773,341,367,670,331,360
+FBgn0029970,122,215,70,75,280,117,148
+FBgn0029971,1025,1610,476,717,1305,605,747
+FBgn0029974,39,47,19,26,62,32,26
+FBgn0029975,3108,3821,1448,1990,4666,2515,2676
+FBgn0029976,2908,4387,1599,1792,3313,1667,1770
+FBgn0029977,53,45,29,24,67,34,44
+FBgn0029979,2509,5454,1756,1546,4636,1617,1602
+FBgn0029980,451,457,190,276,431,239,233
+FBgn0029986,13,33,11,11,42,19,24
+FBgn0029987,1,3,2,1,3,6,3
+FBgn0029989,7,16,6,8,13,4,9
+FBgn0029990,18,45,18,13,31,9,11
+FBgn0029992,1121,1539,549,658,1470,729,831
+FBgn0029993,0,3,0,1,0,0,0
+FBgn0029994,20,22,10,12,16,17,14
+FBgn0029995,5,2,2,0,5,0,2
+FBgn0029996,1518,3108,901,1000,2337,727,866
+FBgn0029997,216,395,148,184,293,180,164
+FBgn0029999,607,928,344,412,914,497,528
+FBgn0030000,506,639,263,315,506,292,311
+FBgn0030001,36,44,32,26,77,53,38
+FBgn0030003,597,1082,382,494,834,480,510
+FBgn0030004,90,121,57,55,110,74,81
+FBgn0030005,9,5,3,2,15,6,4
+FBgn0030006,115,213,76,100,188,85,106
+FBgn0030007,858,1217,536,630,1089,661,756
+FBgn0030008,211,336,142,174,313,172,195
+FBgn0030009,0,2,0,1,0,0,1
+FBgn0030010,83,125,42,58,111,61,64
+FBgn0030011,28,23,11,16,44,30,20
+FBgn0030012,206,349,154,171,303,218,257
+FBgn0030013,532,728,248,365,562,312,374
+FBgn0030014,0,3,0,1,1,0,0
+FBgn0030015,0,2,0,1,1,0,1
+FBgn0030016,4,5,5,7,8,2,0
+FBgn0030017,99,146,81,83,127,86,96
+FBgn0030018,1636,2561,1104,1101,2110,1105,1230
+FBgn0030025,274,586,144,194,555,231,218
+FBgn0030026,195,215,125,167,341,206,250
+FBgn0030027,2,7,6,3,9,2,2
+FBgn0030028,39,81,27,23,91,33,29
+FBgn0030029,6,12,4,1,17,5,6
+FBgn0030030,189,290,82,119,289,101,100
+FBgn0030033,0,2,0,0,0,0,0
+FBgn0030034,1488,2357,1121,898,2009,1016,913
+FBgn0030035,1705,2047,893,1099,2031,1317,1395
+FBgn0030037,628,1022,366,407,1465,731,761
+FBgn0030038,2257,2750,1103,1548,3144,1540,1814
+FBgn0030039,304,288,114,160,289,127,153
+FBgn0030040,2209,2951,1244,1580,3101,1987,2432
+FBgn0030041,87,275,99,128,40,10,15
+FBgn0030048,923,1307,359,457,1313,412,441
+FBgn0030049,2206,4915,2059,2082,3316,1927,2223
+FBgn0030050,12,19,1,1,4,0,2
+FBgn0030051,21,40,14,18,55,42,46
+FBgn0030052,7704,13118,5630,6007,7991,5106,5603
+FBgn0030053,562,683,286,360,784,467,508
+FBgn0030054,2428,5666,2015,1940,3501,1663,1884
+FBgn0030055,377,600,232,281,443,219,299
+FBgn0030056,1457,2407,900,976,2811,1131,1203
+FBgn0030057,359,588,187,251,651,282,350
+FBgn0030058,1,1,2,0,1,0,1
+FBgn0030060,710,1061,410,469,950,530,533
+FBgn0030061,785,1258,436,558,1016,492,556
+FBgn0030063,286,508,139,192,383,136,202
+FBgn0030065,2237,2240,1100,1138,1961,1347,1565
+FBgn0030066,253,437,149,217,356,135,178
+FBgn0030067,2284,3469,1306,1747,2400,1417,1656
+FBgn0030071,52,65,37,23,89,45,29
+FBgn0030073,1242,2151,888,993,1444,895,1032
+FBgn0030074,1,1,0,0,0,1,3
+FBgn0030077,372,640,325,377,370,269,350
+FBgn0030078,183,83,7,21,336,9,19
+FBgn0030079,3244,3053,1320,1952,4307,2294,2563
+FBgn0030080,1,1,2,3,1,1,0
+FBgn0030081,327,449,157,182,377,181,205
+FBgn0030082,560,990,321,372,878,382,414
+FBgn0030085,1,5,2,1,3,2,0
+FBgn0030086,8482,8936,4421,5380,9375,5938,6478
+FBgn0030087,2514,4128,1791,1871,3432,2194,2309
+FBgn0030088,195,296,97,114,312,137,111
+FBgn0030089,2646,3783,1772,1752,3371,1942,2091
+FBgn0030090,309,309,108,119,190,80,99
+FBgn0030091,1035,1675,657,693,1461,794,830
+FBgn0030092,209,285,101,122,233,141,167
+FBgn0030093,1788,3153,1432,1360,2480,1666,1533
+FBgn0030094,0,0,0,0,0,0,0
+FBgn0030096,553,800,354,420,684,390,440
+FBgn0030097,0,2,1,0,0,1,1
+FBgn0030098,3,1,1,0,2,1,1
+FBgn0030099,308,572,221,288,547,265,305
+FBgn0030100,67,87,28,37,92,39,52
+FBgn0030101,71,133,32,42,146,48,60
+FBgn0030102,1,2,0,0,5,1,0
+FBgn0030103,2,0,0,0,1,1,1
+FBgn0030104,0,0,0,0,1,0,0
+FBgn0030105,2,1,0,0,2,1,0
+FBgn0030107,3,1,1,0,2,3,3
+FBgn0030108,1,3,1,2,2,0,0
+FBgn0030109,3049,4724,1459,1747,4160,1820,1895
+FBgn0030114,873,1856,888,951,1272,702,855
+FBgn0030117,0,1,5,1,0,2,8
+FBgn0030120,15,56,20,16,25,13,6
+FBgn0030121,386,747,325,363,571,305,385
+FBgn0030122,501,540,281,330,588,323,382
+FBgn0030136,17856,40695,11281,16636,31327,12305,14389
+FBgn0030137,89,179,44,68,154,53,44
+FBgn0030141,753,1229,473,505,995,597,698
+FBgn0030142,579,875,314,358,925,417,481
+FBgn0030144,710,1015,504,473,805,499,580
+FBgn0030145,481,594,246,265,834,476,525
+FBgn0030148,3,6,3,2,3,3,2
+FBgn0030151,1697,2112,909,1055,2415,1212,1384
+FBgn0030156,1,1,1,0,0,0,1
+FBgn0030157,0,1,0,0,3,0,2
+FBgn0030158,1,0,0,1,1,1,0
+FBgn0030159,0,0,0,1,0,0,0
+FBgn0030160,20,31,10,16,51,30,26
+FBgn0030161,0,0,0,0,0,0,0
+FBgn0030162,0,0,0,0,0,0,0
+FBgn0030163,0,0,0,0,0,0,0
+FBgn0030164,0,0,0,0,0,0,0
+FBgn0030165,0,0,0,0,0,0,0
+FBgn0030166,0,0,0,0,0,0,0
+FBgn0030167,0,1,1,0,0,2,2
+FBgn0030170,362,460,152,149,370,156,176
+FBgn0030171,51,132,47,28,84,41,36
+FBgn0030172,0,2,1,0,4,2,3
+FBgn0030173,1,2,0,0,4,4,6
+FBgn0030174,1,12,6,4,14,3,4
+FBgn0030177,641,983,360,471,780,390,444
+FBgn0030178,124,177,52,72,156,66,80
+FBgn0030181,1,1,0,1,2,1,1
+FBgn0030182,1,7,3,2,4,2,4
+FBgn0030183,76,240,64,65,182,60,73
+FBgn0030186,1,1,0,2,4,0,2
+FBgn0030187,1,4,2,5,5,1,2
+FBgn0030189,296,546,210,284,627,317,343
+FBgn0030191,0,0,0,0,0,0,1
+FBgn0030192,0,0,0,1,1,0,0
+FBgn0030193,0,1,0,1,0,2,1
+FBgn0030195,21,28,15,10,23,11,10
+FBgn0030196,272,431,122,169,441,218,235
+FBgn0030200,1,0,0,0,1,1,1
+FBgn0030202,0,0,0,0,0,0,0
+FBgn0030204,0,2,0,0,1,1,0
+FBgn0030205,12944,20642,10469,9275,18066,11841,11342
+FBgn0030206,415,559,232,302,487,283,344
+FBgn0030207,1,6,2,1,8,4,4
+FBgn0030208,1178,1967,696,786,1926,841,887
+FBgn0030215,0,3,0,3,3,0,1
+FBgn0030217,134,158,75,82,176,95,91
+FBgn0030218,123,216,64,106,184,103,97
+FBgn0030219,0,4,0,2,3,2,2
+FBgn0030220,0,4,1,1,0,0,0
+FBgn0030221,0,0,0,0,0,0,0
+FBgn0030222,0,0,0,0,0,0,2
+FBgn0030223,0,2,1,0,3,2,2
+FBgn0030224,1,1,0,1,1,0,0
+FBgn0030228,398,681,290,290,539,292,342
+FBgn0030230,941,1128,591,660,1008,599,674
+FBgn0030234,170,299,102,98,343,122,145
+FBgn0030235,2362,7651,2501,2371,5887,2366,2556
+FBgn0030237,2714,4682,1499,2117,2137,928,1182
+FBgn0030239,329,516,167,232,518,245,249
+FBgn0030240,848,1399,567,617,873,555,640
+FBgn0030241,1238,1585,783,827,1812,1142,1233
+FBgn0030242,211,284,106,142,279,139,176
+FBgn0030243,1995,2870,1517,1471,2009,1423,1360
+FBgn0030244,5,5,3,2,10,7,15
+FBgn0030245,2470,4315,1502,1954,2853,1600,1900
+FBgn0030246,1508,2434,1025,1127,2256,1225,1272
+FBgn0030247,1,0,0,0,0,0,0
+FBgn0030248,2,0,0,0,0,0,1
+FBgn0030249,24,26,1,5,3,4,6
+FBgn0030251,0,0,1,0,1,0,1
+FBgn0030252,18,41,19,24,24,19,21
+FBgn0030254,0,0,0,0,0,0,0
+FBgn0030257,1,2,0,1,1,2,3
+FBgn0030258,0,0,0,0,0,0,1
+FBgn0030259,0,0,0,0,0,0,0
+FBgn0030260,0,0,0,0,0,1,0
+FBgn0030261,4,2,1,3,4,1,3
+FBgn0030262,28,34,9,24,22,6,7
+FBgn0030263,1727,2629,1015,1450,2524,1443,1611
+FBgn0030266,2198,4005,1959,1742,3029,2047,1996
+FBgn0030268,3863,5641,2473,2372,5133,3089,3350
+FBgn0030269,678,972,334,424,871,417,426
+FBgn0030270,11,10,6,9,9,6,4
+FBgn0030271,44,46,27,27,26,27,22
+FBgn0030272,9,11,4,4,15,5,10
+FBgn0030274,662,880,354,418,747,437,475
+FBgn0030276,1806,2955,1216,1284,2449,1211,1364
+FBgn0030277,0,2,0,0,2,0,0
+FBgn0030278,0,0,0,0,0,1,0
+FBgn0030280,0,0,0,0,0,0,0
+FBgn0030283,0,0,0,0,0,0,0
+FBgn0030286,2002,3236,1473,1552,2731,1485,1627
+FBgn0030289,1303,1512,735,827,1306,912,966
+FBgn0030290,0,3,0,4,1,1,0
+FBgn0030291,120,273,59,75,164,72,68
+FBgn0030292,264,382,142,156,352,171,166
+FBgn0030293,1899,2593,1123,1209,2229,1350,1315
+FBgn0030294,305,516,159,186,607,175,159
+FBgn0030296,0,2,1,2,4,1,2
+FBgn0030297,0,0,0,0,0,0,0
+FBgn0030298,0,5,3,1,3,0,0
+FBgn0030299,816,1604,667,680,1307,615,707
+FBgn0030300,138,203,94,85,152,69,80
+FBgn0030301,988,1925,673,679,1556,713,762
+FBgn0030302,0,4,1,0,1,3,3
+FBgn0030303,1,3,0,0,2,1,2
+FBgn0030304,1,0,1,1,2,0,1
+FBgn0030305,554,743,260,358,1029,508,468
+FBgn0030306,1240,1848,672,815,1632,794,853
+FBgn0030307,0,1,0,1,2,0,2
+FBgn0030309,10546,12374,4472,5806,9753,5469,6404
+FBgn0030310,2819,2745,1208,1760,3355,1778,2104
+FBgn0030311,643,1469,493,541,1022,560,601
+FBgn0030313,4,16,5,0,13,2,3
+FBgn0030314,572,995,409,479,830,486,547
+FBgn0030316,943,1336,643,767,1279,809,910
+FBgn0030317,67,90,28,45,79,37,49
+FBgn0030318,2445,3499,1237,1474,3850,2164,2239
+FBgn0030319,7,17,7,7,21,9,5
+FBgn0030320,873,1317,470,503,1455,594,630
+FBgn0030321,3106,5663,1937,2186,4941,2231,2497
+FBgn0030322,405,755,183,291,991,382,369
+FBgn0030323,172,279,103,118,242,125,128
+FBgn0030326,232,242,103,188,127,70,56
+FBgn0030327,422,699,290,327,579,292,353
+FBgn0030328,1927,3779,1434,1541,3013,1656,1819
+FBgn0030329,960,1490,520,702,1315,644,676
+FBgn0030330,416,516,254,274,498,302,341
+FBgn0030331,1333,1551,705,864,1476,835,946
+FBgn0030332,609,812,337,437,629,431,518
+FBgn0030334,11469,16390,5880,7289,15514,6967,8108
+FBgn0030336,1362,2016,1008,1081,1807,1210,1289
+FBgn0030338,3,3,4,1,5,1,2
+FBgn0030339,1,1,0,2,0,2,3
+FBgn0030340,1336,1583,760,805,1215,856,1007
+FBgn0030341,1257,1879,694,907,1898,942,1119
+FBgn0030342,762,850,416,441,843,415,497
+FBgn0030343,1657,2037,991,1003,2498,1625,1747
+FBgn0030344,1769,2347,830,952,2867,1170,1289
+FBgn0030345,278,375,140,216,422,197,232
+FBgn0030346,168,247,101,139,213,140,166
+FBgn0030347,362,464,190,242,315,210,212
+FBgn0030348,6,13,6,6,29,9,6
+FBgn0030349,2661,3555,1464,1560,2261,1146,1193
+FBgn0030350,806,1591,468,661,1502,650,692
+FBgn0030351,173,203,61,95,355,101,108
+FBgn0030352,300,409,151,227,382,223,218
+FBgn0030354,2225,3387,1383,1509,2623,1442,1585
+FBgn0030356,0,0,1,0,3,0,0
+FBgn0030357,132,166,46,60,192,50,54
+FBgn0030358,241,350,163,205,299,158,169
+FBgn0030359,4,4,6,3,6,4,7
+FBgn0030360,28,37,17,18,63,21,18
+FBgn0030361,120,201,58,91,274,114,150
+FBgn0030362,8313,11980,4554,6398,7815,4571,4960
+FBgn0030364,546,968,289,391,1063,449,519
+FBgn0030365,837,1175,541,644,1020,657,750
+FBgn0030366,4612,7721,2582,2895,7073,3019,3217
+FBgn0030367,69,102,40,61,112,51,65
+FBgn0030369,104,64,27,40,103,40,54
+FBgn0030370,0,0,0,0,0,0,0
+FBgn0030373,282,586,123,208,474,228,241
+FBgn0030374,0,1,0,0,0,0,0
+FBgn0030375,0,0,0,0,0,0,0
+FBgn0030376,0,0,0,0,0,0,0
+FBgn0030377,118,167,118,99,98,85,165
+FBgn0030384,0,0,0,0,0,0,0
+FBgn0030385,0,0,0,0,0,0,0
+FBgn0030386,0,0,0,0,0,0,0
+FBgn0030389,0,1,0,0,0,0,1
+FBgn0030390,1,0,1,0,0,1,1
+FBgn0030391,401,521,216,264,567,297,355
+FBgn0030394,6,17,7,7,5,3,8
+FBgn0030395,0,0,0,0,0,0,0
+FBgn0030396,32,40,14,25,52,27,42
+FBgn0030398,1,3,2,2,1,0,1
+FBgn0030399,5,6,10,6,9,10,6
+FBgn0030400,1233,2456,1100,952,2113,1130,1059
+FBgn0030403,1274,1627,830,975,1225,813,885
+FBgn0030406,247,387,126,139,387,135,165
+FBgn0030407,73,93,22,41,82,38,33
+FBgn0030408,1,1,0,0,0,0,0
+FBgn0030409,0,0,0,0,0,0,0
+FBgn0030410,121,167,68,68,145,86,116
+FBgn0030411,101,170,68,82,192,98,78
+FBgn0030412,1488,2697,984,1047,1905,898,913
+FBgn0030417,54,273,92,81,237,71,63
+FBgn0030418,390,570,237,272,649,233,267
+FBgn0030420,1243,2582,742,713,2097,640,663
+FBgn0030421,293,310,103,116,409,108,92
+FBgn0030425,5,15,2,5,14,7,3
+FBgn0030429,3,5,2,3,9,4,2
+FBgn0030431,665,811,329,411,703,389,418
+FBgn0030432,25,47,20,32,58,28,33
+FBgn0030433,621,613,252,361,877,452,471
+FBgn0030434,931,1422,591,687,1035,654,694
+FBgn0030435,976,1250,494,621,1307,642,650
+FBgn0030437,1,0,0,0,0,0,0
+FBgn0030438,10,14,4,1,8,3,7
+FBgn0030439,0,0,0,0,0,0,0
+FBgn0030440,0,0,0,0,0,0,0
+FBgn0030441,0,0,0,0,0,0,0
+FBgn0030443,0,1,0,0,1,0,1
+FBgn0030447,696,774,314,479,862,481,553
+FBgn0030448,507,720,416,390,805,478,485
+FBgn0030449,2,5,1,1,5,1,0
+FBgn0030451,1271,1745,673,887,1343,752,852
+FBgn0030452,1394,1787,733,887,1042,571,584
+FBgn0030455,2,6,6,2,5,1,4
+FBgn0030456,840,1048,397,444,1275,604,655
+FBgn0030457,666,862,318,355,868,400,437
+FBgn0030459,11,16,3,5,10,4,12
+FBgn0030460,509,527,249,375,671,353,414
+FBgn0030462,1,2,0,2,0,0,0
+FBgn0030465,700,1095,479,553,851,456,536
+FBgn0030466,2897,3958,1762,1806,4412,2627,2684
+FBgn0030467,957,1221,457,583,1411,730,769
+FBgn0030468,1919,2971,1218,1292,2321,1329,1482
+FBgn0030469,1662,3687,1568,1698,3239,1926,2199
+FBgn0030474,1036,1781,585,647,1718,742,885
+FBgn0030477,1,7,4,4,4,4,3
+FBgn0030478,1684,2462,1011,1295,2101,1117,1172
+FBgn0030479,258,533,201,195,374,178,167
+FBgn0030480,297,297,109,163,519,150,144
+FBgn0030481,519,689,261,343,657,382,399
+FBgn0030482,5369,7914,3047,3242,6071,2942,3221
+FBgn0030483,3,6,5,1,7,2,8
+FBgn0030484,1259,2294,746,932,1839,931,1013
+FBgn0030485,262,529,166,230,545,300,358
+FBgn0030486,2251,3936,1598,1574,3623,1812,1939
+FBgn0030491,0,2,1,0,0,1,0
+FBgn0030492,0,0,0,0,0,0,0
+FBgn0030493,0,0,0,0,0,1,0
+FBgn0030494,1,0,0,1,0,0,0
+FBgn0030495,2,0,0,0,1,0,0
+FBgn0030499,790,1230,571,581,1053,655,733
+FBgn0030500,644,1046,432,451,999,532,536
+FBgn0030501,1419,2967,804,955,2107,755,899
+FBgn0030502,3019,5218,2010,1987,4234,1796,1846
+FBgn0030503,126,270,103,138,249,152,139
+FBgn0030504,3657,4842,1958,2275,4264,2373,2303
+FBgn0030505,1804,3430,1402,1262,2306,1231,1292
+FBgn0030506,420,664,238,315,689,293,355
+FBgn0030507,513,601,190,328,502,239,279
+FBgn0030508,7,14,4,6,9,9,10
+FBgn0030509,3,1,0,0,0,1,0
+FBgn0030510,420,680,279,364,611,382,468
+FBgn0030511,244,316,111,130,314,158,163
+FBgn0030512,1558,2025,922,967,2069,996,1089
+FBgn0030514,1968,2911,1155,1331,2238,1245,1393
+FBgn0030518,376,435,172,202,432,202,245
+FBgn0030519,1282,1714,683,988,1259,764,938
+FBgn0030520,4426,8706,3520,3822,8467,4105,4537
+FBgn0030521,5252,7354,3531,4306,6976,3831,4679
+FBgn0030522,380,363,155,223,378,217,218
+FBgn0030524,11,22,8,4,17,4,5
+FBgn0030525,6,6,4,2,13,3,5
+FBgn0030528,185,191,101,129,168,89,127
+FBgn0030529,10805,20273,6729,7576,11184,5239,6004
+FBgn0030530,1801,2819,1246,1306,2149,1470,1730
+FBgn0030532,1953,3244,2102,1643,2005,1639,1793
+FBgn0030536,2,6,1,2,12,0,2
+FBgn0030537,0,0,0,1,0,1,0
+FBgn0030538,0,0,0,0,0,0,1
+FBgn0030539,0,1,2,0,0,0,1
+FBgn0030540,0,0,0,0,0,0,0
+FBgn0030541,1,0,0,0,0,0,0
+FBgn0030542,0,0,0,1,1,0,0
+FBgn0030543,1,0,1,0,1,0,1
+FBgn0030544,0,0,0,0,0,0,0
+FBgn0030545,367,435,149,219,532,277,339
+FBgn0030551,3,4,0,3,6,2,2
+FBgn0030552,578,778,332,396,739,387,493
+FBgn0030554,390,456,208,239,341,219,226
+FBgn0030555,260,341,149,180,323,185,200
+FBgn0030556,1542,2349,979,1204,1827,1166,1265
+FBgn0030558,1,4,2,0,3,0,5
+FBgn0030559,3,5,10,2,9,2,4
+FBgn0030562,48,78,26,25,82,23,27
+FBgn0030563,0,1,0,0,1,0,0
+FBgn0030566,0,0,0,0,0,0,0
+FBgn0030569,1,4,1,2,6,1,3
+FBgn0030570,0,0,0,0,0,0,0
+FBgn0030571,234,427,139,192,350,228,209
+FBgn0030572,387,626,203,256,511,244,266
+FBgn0030573,36,66,21,27,78,21,31
+FBgn0030574,12,21,10,9,36,11,19
+FBgn0030575,71,74,25,39,102,56,44
+FBgn0030576,376,604,211,222,325,186,188
+FBgn0030577,2,3,0,0,1,0,0
+FBgn0030578,0,1,1,0,0,0,0
+FBgn0030581,551,892,385,351,715,417,417
+FBgn0030582,1343,1773,610,756,1497,834,905
+FBgn0030583,43,55,23,31,100,36,37
+FBgn0030584,366,595,181,199,503,213,254
+FBgn0030586,2,12,8,5,13,4,2
+FBgn0030587,0,12,5,8,10,7,10
+FBgn0030588,168,286,86,137,402,138,219
+FBgn0030589,0,3,4,2,5,2,2
+FBgn0030590,15,45,22,25,81,35,26
+FBgn0030591,3,10,5,2,6,6,2
+FBgn0030592,4,37,6,10,34,11,5
+FBgn0030593,8,29,12,12,16,6,10
+FBgn0030594,4,34,10,7,29,6,10
+FBgn0030595,1,5,0,2,11,1,3
+FBgn0030596,13,55,18,20,35,12,12
+FBgn0030597,5,29,9,5,22,7,7
+FBgn0030598,20,32,7,12,120,57,46
+FBgn0030599,7,9,5,5,4,4,3
+FBgn0030600,2480,3905,1985,2021,3513,2202,2167
+FBgn0030603,793,1126,425,469,934,509,569
+FBgn0030605,784,1031,456,571,828,501,601
+FBgn0030606,628,763,306,390,806,452,524
+FBgn0030607,6,43,18,16,54,16,28
+FBgn0030608,0,0,0,0,0,0,0
+FBgn0030610,277,476,163,219,379,217,226
+FBgn0030611,178,222,70,110,165,97,111
+FBgn0030612,617,618,274,373,510,231,282
+FBgn0030613,8,13,10,10,14,7,12
+FBgn0030614,2,2,0,0,5,2,0
+FBgn0030615,79,142,60,60,134,57,49
+FBgn0030616,23736,45897,16343,22672,30069,17863,20746
+FBgn0030617,0,2,1,0,1,3,2
+FBgn0030618,0,4,1,1,1,2,1
+FBgn0030619,1,0,0,0,2,0,2
+FBgn0030620,0,0,0,0,0,0,0
+FBgn0030621,0,0,0,0,0,0,0
+FBgn0030622,0,0,0,0,0,0,0
+FBgn0030623,1,0,0,0,0,0,0
+FBgn0030624,0,0,0,0,0,0,0
+FBgn0030625,320,501,158,192,570,204,188
+FBgn0030626,455,864,333,309,768,313,354
+FBgn0030627,967,1351,759,714,1156,785,869
+FBgn0030628,666,941,308,355,793,426,486
+FBgn0030629,101,191,105,89,228,128,152
+FBgn0030630,542,849,406,498,847,457,599
+FBgn0030631,1444,2142,940,1057,1730,995,1005
+FBgn0030634,13,38,6,8,4,1,0
+FBgn0030636,13,38,17,17,14,14,11
+FBgn0030638,1227,1351,578,713,1553,856,929
+FBgn0030640,0,0,0,0,0,0,0
+FBgn0030641,5,12,5,2,16,3,0
+FBgn0030642,24,34,20,10,27,20,22
+FBgn0030643,10,22,8,8,10,6,7
+FBgn0030645,114,156,56,66,151,70,74
+FBgn0030646,246,370,122,162,383,194,219
+FBgn0030647,13,35,9,5,17,9,8
+FBgn0030648,429,734,271,296,590,302,339
+FBgn0030653,148,295,139,164,329,214,207
+FBgn0030654,141,177,98,80,157,67,88
+FBgn0030655,369,535,187,238,447,209,243
+FBgn0030657,100,159,39,75,146,57,68
+FBgn0030658,1490,1815,736,912,1535,902,916
+FBgn0030659,474,870,288,366,685,354,381
+FBgn0030660,184,204,102,117,319,154,136
+FBgn0030661,28,22,19,15,53,23,26
+FBgn0030662,516,978,453,490,1104,735,832
+FBgn0030663,1,2,4,3,3,4,3
+FBgn0030664,5,20,7,14,24,9,14
+FBgn0030665,11,14,3,5,4,4,7
+FBgn0030666,12,17,20,15,12,7,7
+FBgn0030667,124,274,65,71,282,99,106
+FBgn0030668,308,388,137,193,359,179,206
+FBgn0030669,271,389,128,178,395,149,170
+FBgn0030670,987,1168,418,472,1010,413,471
+FBgn0030671,356,482,204,246,501,217,232
+FBgn0030672,8004,10111,4526,5260,7551,4112,4589
+FBgn0030673,115,182,49,75,150,68,78
+FBgn0030674,10493,15404,7453,6627,12855,8313,7908
+FBgn0030675,85,94,45,60,117,54,77
+FBgn0030676,5,21,8,7,31,5,8
+FBgn0030678,276,316,150,178,287,177,188
+FBgn0030679,571,840,253,353,554,320,384
+FBgn0030680,669,1120,409,387,908,410,494
+FBgn0030683,385,384,159,204,357,202,186
+FBgn0030684,9,11,6,3,9,3,4
+FBgn0030685,2568,4760,1512,1532,3234,1337,1524
+FBgn0030686,577,859,266,373,630,349,373
+FBgn0030687,1075,1171,524,553,1106,653,673
+FBgn0030688,5,5,1,4,8,5,5
+FBgn0030691,29,48,16,13,59,21,17
+FBgn0030692,967,1388,491,584,1161,628,670
+FBgn0030693,488,655,235,282,732,236,252
+FBgn0030694,240,439,135,174,380,151,181
+FBgn0030695,183,514,136,145,330,129,168
+FBgn0030696,34,29,19,13,40,15,23
+FBgn0030697,6,1,1,5,7,3,1
+FBgn0030699,875,1364,478,577,1077,530,543
+FBgn0030700,59,94,26,44,102,30,38
+FBgn0030701,1586,2223,963,992,1859,1014,978
+FBgn0030703,2112,3796,1077,1311,3513,1139,1249
+FBgn0030704,240,321,96,133,350,116,139
+FBgn0030706,21,19,19,13,21,7,13
+FBgn0030707,2,2,0,0,0,0,0
+FBgn0030710,239,421,125,121,411,178,178
+FBgn0030711,310,529,124,163,424,109,140
+FBgn0030715,3,5,0,2,2,1,0
+FBgn0030716,798,1397,542,499,1348,705,751
+FBgn0030717,450,492,213,233,487,254,259
+FBgn0030718,1345,1480,589,745,1636,837,946
+FBgn0030719,3033,5552,1576,1679,5442,1742,1938
+FBgn0030720,1711,2245,886,1036,1798,985,1040
+FBgn0030721,91,144,71,45,186,46,54
+FBgn0030722,37,38,12,14,62,18,21
+FBgn0030723,36,52,20,16,81,33,31
+FBgn0030724,540,791,232,284,777,281,350
+FBgn0030725,17,29,11,3,21,8,5
+FBgn0030729,0,6,1,2,2,0,2
+FBgn0030731,1654,2180,979,1102,1732,1143,1213
+FBgn0030733,0,0,0,0,0,0,0
+FBgn0030734,3756,7077,2026,2495,5569,2177,2601
+FBgn0030735,1491,2062,864,949,1878,838,898
+FBgn0030737,133,183,76,80,163,106,117
+FBgn0030738,810,1337,387,412,1128,392,369
+FBgn0030739,432,602,205,254,571,270,258
+FBgn0030740,5518,5825,2010,2630,5914,2645,2748
+FBgn0030742,24,26,14,11,36,15,15
+FBgn0030743,282,292,97,162,332,149,159
+FBgn0030744,879,1288,359,557,1061,451,485
+FBgn0030745,926,1278,412,581,1280,541,664
+FBgn0030746,71,59,27,24,56,22,24
+FBgn0030747,1604,2208,908,964,2150,1154,1177
+FBgn0030748,1154,1790,610,721,1502,638,772
+FBgn0030749,1088,1772,737,812,1440,845,934
+FBgn0030752,4419,6046,2655,3109,4222,2310,2619
+FBgn0030753,2091,3678,1156,1354,2892,1349,1546
+FBgn0030755,53,76,149,138,64,104,181
+FBgn0030756,3,4,4,2,5,1,2
+FBgn0030757,171,378,118,119,360,137,132
+FBgn0030758,1192,2711,1367,1210,1874,1032,1215
+FBgn0030759,565,565,302,388,581,416,433
+FBgn0030761,510,710,287,336,617,334,392
+FBgn0030763,7,12,3,4,1,1,1
+FBgn0030764,17,52,11,8,29,10,9
+FBgn0030765,881,1406,413,785,1340,692,787
+FBgn0030766,661,947,436,434,951,430,466
+FBgn0030768,746,810,405,472,1075,665,697
+FBgn0030769,1,3,1,1,1,2,0
+FBgn0030770,2,9,4,2,4,4,5
+FBgn0030773,0,0,0,0,0,0,0
+FBgn0030774,0,0,0,0,0,0,0
+FBgn0030775,1,1,0,1,2,0,0
+FBgn0030776,0,0,1,1,0,0,1
+FBgn0030777,1,1,0,1,3,2,1
+FBgn0030778,1,1,1,0,3,2,4
+FBgn0030780,0,1,0,0,1,0,0
+FBgn0030786,725,1199,473,563,819,478,578
+FBgn0030787,196,308,128,148,302,147,182
+FBgn0030788,500,1030,269,348,783,325,344
+FBgn0030789,272,430,148,174,423,191,202
+FBgn0030790,662,1301,443,494,1203,502,519
+FBgn0030791,793,1492,464,471,1231,487,488
+FBgn0030792,801,1240,522,676,1181,676,806
+FBgn0030793,544,815,315,434,745,406,454
+FBgn0030794,75,108,46,50,95,71,53
+FBgn0030795,137,249,95,107,229,100,125
+FBgn0030796,10788,15751,5979,6828,15707,8511,9158
+FBgn0030797,484,947,291,321,710,292,315
+FBgn0030798,0,4,0,2,10,0,2
+FBgn0030799,113,212,70,108,270,120,146
+FBgn0030800,490,660,254,301,536,279,317
+FBgn0030801,156,297,71,80,222,81,98
+FBgn0030802,345,388,119,189,429,178,215
+FBgn0030803,513,739,239,259,628,274,323
+FBgn0030804,0,0,0,1,0,0,0
+FBgn0030805,245,355,164,196,640,403,449
+FBgn0030806,253,465,189,200,475,231,230
+FBgn0030807,5,21,10,5,23,8,11
+FBgn0030808,2686,4975,2001,2060,3822,2042,2139
+FBgn0030809,4119,5815,2542,2471,5235,2741,2747
+FBgn0030810,1,0,1,2,3,0,0
+FBgn0030811,0,0,0,0,0,0,0
+FBgn0030812,2028,3735,1553,1575,2815,1599,1564
+FBgn0030813,82,103,40,41,144,49,48
+FBgn0030814,1,0,0,0,0,1,0
+FBgn0030815,1,2,0,3,3,1,2
+FBgn0030816,139,176,76,90,166,60,74
+FBgn0030817,12,4,3,7,14,4,11
+FBgn0030823,1,0,0,0,0,3,1
+FBgn0030824,0,1,1,0,1,0,0
+FBgn0030826,0,0,1,0,0,0,0
+FBgn0030827,0,2,0,0,1,0,0
+FBgn0030828,14,34,18,16,33,15,13
+FBgn0030829,0,0,0,0,0,0,0
+FBgn0030830,0,2,1,2,0,0,2
+FBgn0030832,0,0,0,0,0,0,0
+FBgn0030833,182,281,112,117,268,131,114
+FBgn0030834,467,719,244,300,555,298,341
+FBgn0030835,0,1,1,0,0,0,1
+FBgn0030836,1,2,0,1,1,0,0
+FBgn0030837,1,1,0,1,0,0,0
+FBgn0030838,647,1062,347,441,888,383,434
+FBgn0030839,242,263,126,140,188,88,122
+FBgn0030840,0,0,0,0,1,0,0
+FBgn0030841,0,4,1,0,0,0,0
+FBgn0030842,953,2327,1077,916,1909,1015,1052
+FBgn0030843,0,4,0,0,0,0,0
+FBgn0030844,2,2,0,2,0,2,0
+FBgn0030846,5,6,4,4,4,6,2
+FBgn0030847,30,36,16,16,37,19,22
+FBgn0030850,1387,1608,641,720,1802,789,799
+FBgn0030851,181,223,84,104,297,105,110
+FBgn0030852,30,75,15,11,64,20,25
+FBgn0030853,1098,1362,603,835,1302,823,851
+FBgn0030854,862,1306,342,459,1466,564,580
+FBgn0030855,857,1478,506,599,1275,581,648
+FBgn0030858,1273,1697,752,933,1598,1007,1066
+FBgn0030859,13,21,5,2,42,4,6
+FBgn0030863,1685,3046,895,949,3497,1284,1450
+FBgn0030864,604,902,282,341,1019,407,464
+FBgn0030868,0,0,0,0,0,0,1
+FBgn0030869,1731,3440,1473,1415,2523,1562,1858
+FBgn0030870,2,0,2,1,1,1,4
+FBgn0030871,754,871,381,511,1057,674,662
+FBgn0030872,446,558,318,309,561,390,423
+FBgn0030873,1849,2615,916,1224,2133,1129,1295
+FBgn0030874,209,299,113,162,263,162,171
+FBgn0030876,97,229,60,91,150,80,93
+FBgn0030877,791,1120,502,577,1094,630,707
+FBgn0030878,1236,1504,739,795,1297,888,965
+FBgn0030880,103,1,0,0,0,0,0
+FBgn0030881,4,9,3,4,12,6,4
+FBgn0030882,0,0,2,2,0,2,3
+FBgn0030883,207,326,107,120,282,147,144
+FBgn0030884,56,124,45,46,156,88,89
+FBgn0030886,0,1,0,0,2,0,0
+FBgn0030887,2,3,3,0,4,0,1
+FBgn0030889,0,0,0,0,0,0,0
+FBgn0030890,1364,1646,631,733,1847,830,853
+FBgn0030891,639,888,392,453,848,481,554
+FBgn0030892,406,726,254,291,553,264,292
+FBgn0030893,2133,3056,1169,1358,2800,1668,1864
+FBgn0030894,1156,1888,713,709,1617,699,833
+FBgn0030895,3,12,2,2,4,1,2
+FBgn0030897,0,1,1,0,0,0,0
+FBgn0030898,0,0,0,0,0,0,0
+FBgn0030899,0,0,0,0,0,0,1
+FBgn0030900,0,0,0,0,1,0,0
+FBgn0030904,13,26,15,15,8,2,9
+FBgn0030905,0,0,0,0,0,0,0
+FBgn0030908,0,1,0,0,0,0,0
+FBgn0030912,1,1,0,3,1,2,0
+FBgn0030913,2,2,0,1,1,0,0
+FBgn0030914,2,4,1,2,3,2,2
+FBgn0030915,236,338,144,165,308,190,206
+FBgn0030918,9,16,4,5,32,10,10
+FBgn0030921,0,0,0,0,0,0,0
+FBgn0030925,34,66,21,14,59,32,33
+FBgn0030926,1,3,0,1,6,1,1
+FBgn0030927,17,22,12,19,26,17,14
+FBgn0030928,22,46,16,17,58,35,28
+FBgn0030929,10,14,3,5,13,5,7
+FBgn0030930,2091,2822,1159,1300,2849,1504,1591
+FBgn0030931,35,20,21,16,53,16,16
+FBgn0030932,7,12,6,10,9,13,11
+FBgn0030933,9,11,4,3,13,5,6
+FBgn0030935,0,1,1,2,1,2,4
+FBgn0030936,8,7,6,1,14,3,4
+FBgn0030937,0,0,0,0,0,0,0
+FBgn0030938,20,21,13,17,50,24,33
+FBgn0030940,0,3,5,4,1,3,4
+FBgn0030941,1446,2577,1053,1082,1858,1033,1106
+FBgn0030943,950,1199,411,434,1175,562,572
+FBgn0030944,554,978,351,422,879,446,480
+FBgn0030945,369,459,277,312,357,328,300
+FBgn0030946,2725,3423,1723,1804,3397,2151,2359
+FBgn0030947,2,1,2,2,0,1,2
+FBgn0030949,0,0,0,0,0,0,0
+FBgn0030951,0,0,0,0,0,0,0
+FBgn0030952,0,0,1,0,1,0,0
+FBgn0030954,8,13,9,7,33,23,26
+FBgn0030955,4890,5671,2674,3644,5032,3571,4237
+FBgn0030956,120,216,94,111,244,102,129
+FBgn0030958,62,37,14,17,34,18,15
+FBgn0030959,217,276,201,204,279,219,335
+FBgn0030960,346,538,164,221,383,145,161
+FBgn0030961,12,28,14,10,35,17,18
+FBgn0030963,146,151,65,82,105,80,108
+FBgn0030964,0,1,1,1,6,3,3
+FBgn0030966,218,354,136,166,408,282,293
+FBgn0030968,129,146,49,88,141,100,112
+FBgn0030969,707,873,347,440,869,460,499
+FBgn0030970,511,678,308,331,668,351,411
+FBgn0030973,792,1393,597,661,1200,672,795
+FBgn0030974,1513,2355,1222,1314,1600,1146,1188
+FBgn0030975,1,1,0,0,0,0,0
+FBgn0030976,4,4,3,4,5,0,1
+FBgn0030979,0,0,0,0,0,0,0
+FBgn0030980,0,1,0,0,0,0,0
+FBgn0030981,0,0,0,0,0,0,0
+FBgn0030982,0,0,0,0,0,0,0
+FBgn0030983,0,0,1,0,1,1,2
+FBgn0030984,1,1,0,0,2,0,1
+FBgn0030985,27,50,16,17,85,21,23
+FBgn0030989,26,30,14,20,32,19,16
+FBgn0030990,2387,4058,1612,1958,3211,1619,1940
+FBgn0030991,4056,5562,2491,2493,5325,3052,3626
+FBgn0030992,165,262,134,158,216,132,144
+FBgn0030993,4303,5277,2926,3606,3947,2660,2892
+FBgn0030994,59,179,41,50,120,58,53
+FBgn0030995,117,163,71,82,135,85,106
+FBgn0030996,1232,1539,585,746,1482,837,960
+FBgn0030997,9,18,7,4,33,6,8
+FBgn0030998,3,5,2,4,2,1,2
+FBgn0030999,0,5,2,3,3,0,0
+FBgn0031000,1,2,1,2,5,1,0
+FBgn0031001,1,8,4,1,5,5,4
+FBgn0031002,316,923,371,514,866,449,512
+FBgn0031003,327,473,200,211,532,279,303
+FBgn0031004,0,1,3,2,2,4,0
+FBgn0031005,3,2,1,0,1,2,3
+FBgn0031006,1857,2849,1421,1312,2360,1384,1359
+FBgn0031008,800,1008,492,617,794,604,666
+FBgn0031010,7,14,8,6,7,5,2
+FBgn0031011,5244,7205,3320,3309,6347,3394,3643
+FBgn0031012,1294,1893,660,795,1174,594,676
+FBgn0031016,137,227,115,104,138,83,87
+FBgn0031018,37,55,24,13,96,44,45
+FBgn0031020,2611,3417,1496,1734,2772,1861,1915
+FBgn0031021,378,712,315,357,507,282,292
+FBgn0031022,228,362,168,200,309,209,229
+FBgn0031023,1851,3367,1618,1603,2928,1998,1970
+FBgn0031026,0,2,0,0,0,0,0
+FBgn0031030,4846,7503,3343,3455,5996,3597,3843
+FBgn0031031,30,47,32,29,46,30,24
+FBgn0031032,59,87,35,36,70,37,39
+FBgn0031033,25,51,25,19,59,16,35
+FBgn0031034,117,114,64,74,101,51,69
+FBgn0031035,29673,47527,20137,28037,33082,22282,22686
+FBgn0031036,412,599,232,345,454,269,305
+FBgn0031037,557,696,286,356,770,381,443
+FBgn0031038,0,0,0,0,0,0,0
+FBgn0031039,26,87,9,12,42,14,7
+FBgn0031040,161,366,59,93,239,85,73
+FBgn0031041,0,0,0,0,0,0,0
+FBgn0031042,96,96,41,46,64,43,48
+FBgn0031043,606,1107,294,336,872,325,402
+FBgn0031044,548,757,302,356,623,307,354
+FBgn0031045,86,103,53,56,80,47,43
+FBgn0031047,1528,2398,882,1061,2381,1413,1652
+FBgn0031048,944,1234,532,666,1375,897,993
+FBgn0031049,611,575,163,264,1254,398,400
+FBgn0031050,531,738,302,425,661,380,429
+FBgn0031051,2040,2890,1394,1413,2612,1669,1720
+FBgn0031052,2054,2859,1263,1282,2703,1588,1611
+FBgn0031053,412,489,268,259,428,347,430
+FBgn0031054,654,1018,362,384,792,394,443
+FBgn0031055,4006,4830,2267,2850,2971,1851,2220
+FBgn0031057,4099,7392,2711,2744,6509,2763,2821
+FBgn0031058,101,172,68,81,139,68,88
+FBgn0031059,139,297,48,99,260,108,135
+FBgn0031060,351,481,261,249,376,315,289
+FBgn0031061,516,953,400,480,637,488,547
+FBgn0031062,502,891,316,401,670,330,382
+FBgn0031064,0,2,0,1,2,0,2
+FBgn0031065,2,7,4,4,6,2,5
+FBgn0031066,2958,6178,1410,1919,4535,2093,2358
+FBgn0031068,349,805,250,284,703,369,464
+FBgn0031069,3594,3840,1712,2019,3688,2267,2493
+FBgn0031070,818,899,468,510,1232,825,854
+FBgn0031074,13,13,14,11,9,9,13
+FBgn0031077,1654,1699,950,1046,1674,1267,1206
+FBgn0031078,7146,7067,3701,3942,7018,4920,5049
+FBgn0031079,3426,5553,2730,2472,6108,3846,3814
+FBgn0031080,843,1109,715,883,1136,865,1118
+FBgn0031081,9,27,10,14,22,8,9
+FBgn0031082,0,0,1,0,4,0,1
+FBgn0031085,0,2,0,0,4,1,0
+FBgn0031086,8,7,3,3,6,8,7
+FBgn0031088,3,9,5,6,7,12,0
+FBgn0031089,253,282,202,207,188,185,186
+FBgn0031090,2119,4374,1245,1368,3279,1437,1533
+FBgn0031091,702,710,353,397,787,521,456
+FBgn0031092,597,914,347,402,778,424,412
+FBgn0031093,458,628,271,319,553,376,378
+FBgn0031094,220,313,118,148,310,181,204
+FBgn0031097,114,170,78,90,98,57,67
+FBgn0031098,584,598,298,389,585,371,365
+FBgn0031099,52,90,30,38,75,49,50
+FBgn0031100,1,0,0,0,0,0,0
+FBgn0031101,0,0,0,0,0,0,0
+FBgn0031103,0,0,0,0,0,0,0
+FBgn0031104,2,1,0,0,1,1,0
+FBgn0031106,493,714,339,421,498,381,451
+FBgn0031107,2973,4031,2179,1968,3866,2833,2569
+FBgn0031108,6,2,2,1,4,2,1
+FBgn0031109,0,0,0,0,0,0,0
+FBgn0031110,0,0,1,0,0,1,0
+FBgn0031111,3,4,3,1,4,1,3
+FBgn0031114,867,1830,642,770,1573,855,955
+FBgn0031115,504,797,330,363,757,397,477
+FBgn0031116,22,36,16,22,28,15,19
+FBgn0031117,260,350,144,196,602,355,454
+FBgn0031118,2373,4567,2122,1914,3164,2054,2184
+FBgn0031119,286,401,167,160,454,203,247
+FBgn0031126,446,737,269,300,503,209,240
+FBgn0031127,14,18,13,10,6,4,4
+FBgn0031128,10,20,8,3,14,7,5
+FBgn0031129,0,0,0,0,0,0,0
+FBgn0031130,0,0,0,0,0,0,0
+FBgn0031132,0,0,0,0,0,0,0
+FBgn0031134,0,0,0,0,0,0,0
+FBgn0031135,0,2,0,0,0,0,0
+FBgn0031138,0,0,0,0,0,0,0
+FBgn0031139,0,0,0,0,0,0,0
+FBgn0031140,0,0,0,1,1,0,0
+FBgn0031141,0,0,0,0,0,0,0
+FBgn0031142,30,79,29,27,74,30,52
+FBgn0031143,655,1027,306,499,1109,551,660
+FBgn0031144,843,1508,516,536,1350,573,718
+FBgn0031145,2112,4420,969,1306,3285,1183,1369
+FBgn0031146,84,164,51,65,188,68,81
+FBgn0031148,2752,3344,1461,1935,4131,2769,3251
+FBgn0031149,5818,7295,2960,3482,7601,4093,4458
+FBgn0031150,635,1042,306,338,2351,778,873
+FBgn0031155,11,12,6,11,11,7,12
+FBgn0031157,350,621,214,269,594,343,345
+FBgn0031159,0,0,0,0,0,0,0
+FBgn0031161,713,1050,395,450,1165,513,574
+FBgn0031163,0,1,0,0,0,0,0
+FBgn0031164,1,6,3,1,6,6,3
+FBgn0031168,1,46,10,14,34,6,2
+FBgn0031169,2514,3434,1425,1543,3319,1624,1729
+FBgn0031170,1105,1977,738,731,1349,626,618
+FBgn0031171,5,11,2,6,4,5,5
+FBgn0031174,2019,3286,1447,1623,2712,1531,1675
+FBgn0031176,0,0,0,1,0,0,0
+FBgn0031178,0,1,1,0,0,0,0
+FBgn0031181,5,2,2,4,6,3,4
+FBgn0031182,19,19,9,13,37,4,15
+FBgn0031183,601,746,303,357,548,296,325
+FBgn0031184,78,141,43,57,151,73,92
+FBgn0031186,1777,3044,992,1137,2550,1028,1152
+FBgn0031187,2817,4453,1902,1897,4040,2220,2379
+FBgn0031188,455,742,245,296,610,267,354
+FBgn0031189,155,262,97,112,215,117,141
+FBgn0031190,1745,2722,1068,1145,2295,1084,1156
+FBgn0031191,510,736,280,305,644,331,292
+FBgn0031194,843,1399,550,600,1229,567,642
+FBgn0031195,193,257,123,128,264,160,155
+FBgn0031196,15,40,15,21,39,24,18
+FBgn0031197,1,3,2,2,5,1,1
+FBgn0031201,59,103,35,45,85,36,42
+FBgn0031208,0,5,4,1,11,2,2
+FBgn0031209,2,2,1,0,2,0,2
+FBgn0031213,970,1224,522,551,1621,492,528
+FBgn0031214,11,16,6,2,19,7,5
+FBgn0031216,964,1476,449,398,1617,399,389
+FBgn0031217,1139,1208,436,654,1235,602,747
+FBgn0031219,25,72,36,17,45,26,20
+FBgn0031220,2825,4796,1534,1635,5963,2056,2076
+FBgn0031224,363,656,182,254,567,270,282
+FBgn0031227,165,232,53,69,234,64,52
+FBgn0031228,478,833,254,369,766,342,377
+FBgn0031229,546,871,244,317,832,255,309
+FBgn0031231,251,316,88,159,345,154,176
+FBgn0031232,3,11,3,4,11,7,2
+FBgn0031233,318,591,202,203,521,197,189
+FBgn0031235,3,8,2,3,4,0,3
+FBgn0031238,258,450,143,183,379,202,227
+FBgn0031239,9,23,9,9,22,12,3
+FBgn0031240,8,8,4,4,8,8,6
+FBgn0031244,239,279,116,159,277,148,166
+FBgn0031245,163,256,93,140,423,177,204
+FBgn0031247,117,265,66,99,295,116,132
+FBgn0031248,1,4,2,1,1,3,3
+FBgn0031249,0,1,1,2,2,1,1
+FBgn0031250,590,810,328,364,798,344,339
+FBgn0031251,1,13,2,8,11,4,7
+FBgn0031252,477,897,252,282,694,273,298
+FBgn0031253,270,287,83,135,336,138,134
+FBgn0031254,77,182,53,62,141,45,51
+FBgn0031255,33,65,33,30,30,18,25
+FBgn0031256,1554,2095,955,1221,2184,1137,1355
+FBgn0031257,1290,2434,978,1019,2137,1222,1256
+FBgn0031258,143,289,121,81,109,41,43
+FBgn0031260,2853,3395,1376,1756,3298,1887,2016
+FBgn0031261,3235,4771,2295,2860,2434,1814,2092
+FBgn0031263,1334,2467,856,1105,2852,1243,1454
+FBgn0031264,5,15,5,9,6,4,5
+FBgn0031265,507,911,285,352,818,356,393
+FBgn0031266,1642,2496,988,1029,2179,1057,1063
+FBgn0031267,632,842,314,423,731,337,374
+FBgn0031268,124,156,65,64,318,111,135
+FBgn0031270,46,90,12,23,82,14,28
+FBgn0031273,0,0,0,1,0,0,1
+FBgn0031275,2,4,1,1,4,1,0
+FBgn0031276,0,0,0,0,1,0,0
+FBgn0031277,0,0,0,0,0,0,0
+FBgn0031279,2,1,0,0,0,0,0
+FBgn0031281,208,325,111,131,295,146,189
+FBgn0031282,170,233,72,115,206,89,99
+FBgn0031283,10,17,5,8,15,3,6
+FBgn0031284,216,314,83,125,355,121,138
+FBgn0031285,3964,6451,2328,3024,4050,2171,2333
+FBgn0031286,301,557,215,253,450,268,282
+FBgn0031287,249,455,142,196,333,176,210
+FBgn0031288,3,6,0,5,2,2,1
+FBgn0031289,3,7,4,2,4,3,3
+FBgn0031292,13,31,12,9,29,13,13
+FBgn0031294,1,3,2,3,2,1,0
+FBgn0031295,0,0,0,0,0,0,0
+FBgn0031296,13,30,14,13,25,17,22
+FBgn0031298,930,1620,641,745,1469,753,886
+FBgn0031299,83,126,58,73,114,64,67
+FBgn0031300,1128,1783,672,790,1634,833,878
+FBgn0031301,8,7,3,3,3,3,5
+FBgn0031302,65,114,38,45,177,47,55
+FBgn0031304,1815,2860,1186,1430,1959,1169,1374
+FBgn0031305,0,0,1,1,1,1,1
+FBgn0031306,1,3,1,6,5,1,2
+FBgn0031307,1078,2365,1004,1214,3355,1879,2174
+FBgn0031308,274,399,130,195,336,185,210
+FBgn0031309,432,803,291,317,532,322,436
+FBgn0031310,901,1601,507,625,1276,689,819
+FBgn0031312,1475,2037,912,1158,1740,1151,1302
+FBgn0031313,1958,2453,1247,1472,1531,897,971
+FBgn0031314,444,692,240,335,573,318,345
+FBgn0031315,197,451,101,169,406,156,167
+FBgn0031317,598,1477,423,546,1226,552,658
+FBgn0031318,1404,2555,987,1088,2118,1154,1355
+FBgn0031319,729,989,447,507,1074,536,568
+FBgn0031320,284,288,121,135,293,176,167
+FBgn0031321,323,416,203,233,331,196,241
+FBgn0031322,547,950,341,472,246,153,219
+FBgn0031323,1,0,2,0,1,0,0
+FBgn0031324,0,0,0,0,0,0,0
+FBgn0031327,384,829,358,433,1796,894,912
+FBgn0031331,0,0,0,0,0,0,0
+FBgn0031332,0,0,0,0,0,0,0
+FBgn0031333,0,0,0,0,0,0,0
+FBgn0031335,0,0,1,0,0,0,0
+FBgn0031337,0,1,0,1,1,0,1
+FBgn0031343,3,11,0,2,7,2,2
+FBgn0031344,221,332,151,167,284,145,153
+FBgn0031345,0,0,0,0,1,0,0
+FBgn0031347,1,6,2,2,4,3,2
+FBgn0031351,102,136,37,62,195,66,59
+FBgn0031356,1668,1996,834,996,1814,1038,1087
+FBgn0031357,303,400,152,227,341,219,242
+FBgn0031359,648,1114,524,559,536,305,340
+FBgn0031360,867,819,371,518,1044,527,649
+FBgn0031361,122,236,59,74,170,85,83
+FBgn0031362,240,366,203,211,466,211,286
+FBgn0031364,1,5,1,0,1,0,0
+FBgn0031365,3,5,0,2,5,0,0
+FBgn0031367,0,0,0,0,0,0,0
+FBgn0031372,0,0,0,0,0,0,0
+FBgn0031373,0,0,0,0,0,0,0
+FBgn0031374,3089,3912,1761,1642,2187,1122,1133
+FBgn0031375,0,1,0,0,0,0,0
+FBgn0031376,1725,1920,716,938,1815,842,974
+FBgn0031377,641,1052,459,485,746,503,554
+FBgn0031378,121,201,67,92,148,97,110
+FBgn0031379,1349,1925,662,859,1640,809,954
+FBgn0031381,4775,4855,2238,3192,5912,3055,3392
+FBgn0031384,99,144,41,61,154,96,69
+FBgn0031388,7,10,5,8,10,1,1
+FBgn0031389,3621,3666,1113,1542,3642,1065,1076
+FBgn0031390,2874,4085,1726,1864,3876,1881,1951
+FBgn0031391,284,450,115,144,465,203,180
+FBgn0031392,1076,1682,559,611,1495,640,706
+FBgn0031393,2,4,2,0,8,2,1
+FBgn0031395,656,963,347,388,1042,453,527
+FBgn0031397,31,36,20,24,27,11,12
+FBgn0031398,105,200,50,75,188,68,96
+FBgn0031399,912,1409,553,622,1003,524,605
+FBgn0031401,963,1626,520,605,1531,647,746
+FBgn0031403,162,275,56,71,315,87,88
+FBgn0031405,322,266,118,147,205,105,116
+FBgn0031406,0,0,0,0,0,0,0
+FBgn0031407,0,0,0,0,0,0,0
+FBgn0031408,4356,6718,2500,2827,5542,2954,3101
+FBgn0031409,1,0,0,1,0,2,0
+FBgn0031410,0,1,0,0,1,0,0
+FBgn0031412,0,4,0,6,15,7,8
+FBgn0031413,116,199,68,67,149,99,86
+FBgn0031414,23,59,31,23,53,31,35
+FBgn0031417,2,6,3,4,1,3,3
+FBgn0031418,1430,2198,1008,1255,1548,1040,1286
+FBgn0031419,41,73,20,24,57,18,17
+FBgn0031420,642,1042,447,487,788,473,524
+FBgn0031421,312,429,167,187,454,239,283
+FBgn0031422,92,75,34,40,133,33,46
+FBgn0031423,0,0,0,0,0,0,0
+FBgn0031424,1,0,0,0,0,0,0
+FBgn0031426,1,2,0,0,0,0,1
+FBgn0031428,90,132,53,46,158,56,77
+FBgn0031429,9,26,3,5,14,6,7
+FBgn0031430,0,0,0,0,0,0,0
+FBgn0031431,0,0,0,0,0,0,0
+FBgn0031432,3,8,3,4,8,3,5
+FBgn0031434,33,68,23,35,53,29,34
+FBgn0031435,35,72,18,28,52,41,35
+FBgn0031436,662,1055,397,537,983,577,707
+FBgn0031437,1114,2002,658,803,1540,767,917
+FBgn0031440,0,0,0,0,0,0,0
+FBgn0031441,0,0,0,0,0,0,0
+FBgn0031442,0,0,0,0,0,0,0
+FBgn0031443,0,0,0,0,0,0,0
+FBgn0031444,0,0,0,0,0,0,0
+FBgn0031446,2,1,1,0,0,1,0
+FBgn0031449,1278,2010,767,847,964,485,555
+FBgn0031450,1881,2665,1182,1240,2152,1327,1513
+FBgn0031451,12,22,6,13,34,17,14
+FBgn0031452,437,1250,332,397,856,299,369
+FBgn0031453,1643,3148,1181,1313,3925,1318,1384
+FBgn0031454,0,0,0,0,0,0,0
+FBgn0031455,0,0,0,0,0,0,0
+FBgn0031456,536,801,330,387,741,396,434
+FBgn0031457,471,896,333,359,802,408,483
+FBgn0031458,881,995,375,529,1073,534,587
+FBgn0031459,1408,2191,681,940,2093,1237,1223
+FBgn0031460,52,60,30,41,84,59,56
+FBgn0031461,428,835,313,341,1108,556,536
+FBgn0031462,0,0,0,1,1,0,0
+FBgn0031463,0,1,0,0,0,0,0
+FBgn0031464,34,62,30,31,34,13,12
+FBgn0031465,1,3,2,1,1,2,0
+FBgn0031466,1,1,4,0,1,3,2
+FBgn0031467,3,6,2,5,6,5,5
+FBgn0031468,0,12,6,3,3,2,4
+FBgn0031469,2,7,0,2,8,2,2
+FBgn0031470,302,281,81,133,252,123,126
+FBgn0031471,67,51,22,32,41,19,25
+FBgn0031472,0,0,0,0,0,0,0
+FBgn0031473,2,7,1,2,4,2,4
+FBgn0031474,3755,4830,2220,2352,4821,2223,2442
+FBgn0031476,18,6,5,5,10,0,5
+FBgn0031478,598,1057,325,355,731,326,392
+FBgn0031479,347,566,175,227,504,229,268
+FBgn0031483,614,1171,396,445,1313,545,595
+FBgn0031484,658,1208,314,396,929,384,446
+FBgn0031485,278,341,135,196,375,177,205
+FBgn0031488,186,347,145,136,337,207,189
+FBgn0031489,913,1380,617,707,1924,974,1027
+FBgn0031490,897,1371,583,749,1447,880,980
+FBgn0031491,736,993,354,462,1026,440,501
+FBgn0031492,1117,1829,679,697,1659,757,871
+FBgn0031493,1551,2926,985,1176,2464,1100,1285
+FBgn0031494,159,181,45,46,242,58,62
+FBgn0031495,1278,1594,690,822,1605,885,1072
+FBgn0031496,19,32,13,13,36,15,15
+FBgn0031497,3753,4801,2239,2651,4924,3078,3345
+FBgn0031498,141,262,89,125,265,89,80
+FBgn0031500,107,180,58,78,150,95,94
+FBgn0031501,3,9,4,3,4,3,3
+FBgn0031504,0,1,0,0,0,0,0
+FBgn0031505,722,1057,340,557,1370,550,551
+FBgn0031512,0,0,0,0,0,0,0
+FBgn0031513,12,25,5,3,26,9,5
+FBgn0031514,5,8,3,3,7,0,2
+FBgn0031515,8,17,8,8,12,5,8
+FBgn0031516,630,1306,488,519,1863,840,942
+FBgn0031517,4,10,10,4,11,8,2
+FBgn0031518,23,22,12,7,37,13,13
+FBgn0031519,88,99,26,32,101,50,49
+FBgn0031520,1,3,0,0,0,0,0
+FBgn0031522,0,0,0,0,1,0,0
+FBgn0031523,0,0,1,0,0,0,0
+FBgn0031526,0,3,0,1,1,1,0
+FBgn0031528,1,2,1,2,10,1,0
+FBgn0031529,491,697,258,344,736,343,405
+FBgn0031530,117,622,228,232,628,294,362
+FBgn0031531,0,0,0,0,0,0,0
+FBgn0031533,2,0,0,3,2,1,0
+FBgn0031534,1449,2049,720,888,1875,836,853
+FBgn0031535,333,595,204,321,472,255,317
+FBgn0031536,638,976,329,451,872,409,490
+FBgn0031537,626,1060,436,434,958,520,520
+FBgn0031538,168,257,108,165,380,225,262
+FBgn0031540,327,408,158,175,289,144,137
+FBgn0031542,4,2,1,2,3,0,3
+FBgn0031544,1835,2663,995,1268,2077,1087,1207
+FBgn0031545,2,8,3,0,7,3,4
+FBgn0031546,2,8,4,1,3,1,1
+FBgn0031547,565,483,186,296,275,89,105
+FBgn0031548,123,118,43,56,37,11,20
+FBgn0031549,590,1122,348,410,1055,369,410
+FBgn0031550,0,1,0,0,0,0,0
+FBgn0031554,1,0,0,0,1,0,0
+FBgn0031558,0,0,0,0,0,0,0
+FBgn0031559,0,0,0,0,1,0,0
+FBgn0031560,12,12,4,3,3,0,2
+FBgn0031561,9,11,5,3,18,3,1
+FBgn0031562,0,0,0,1,0,0,0
+FBgn0031563,1,0,0,0,1,1,0
+FBgn0031564,1,0,0,0,0,0,0
+FBgn0031566,541,899,298,318,962,403,459
+FBgn0031568,36,97,30,33,50,18,23
+FBgn0031571,43,74,30,27,68,38,25
+FBgn0031573,113,246,75,83,203,93,92
+FBgn0031574,358,397,164,183,367,183,237
+FBgn0031575,433,647,215,252,540,272,267
+FBgn0031579,2,3,3,2,4,2,4
+FBgn0031580,14,17,8,5,12,6,17
+FBgn0031581,14,8,3,6,8,2,6
+FBgn0031585,0,0,0,0,0,0,0
+FBgn0031589,1816,2635,1063,1120,2749,1244,1429
+FBgn0031590,3132,4090,1439,1795,3674,1846,1894
+FBgn0031591,0,0,0,0,0,0,0
+FBgn0031592,1,2,1,0,0,1,1
+FBgn0031596,1,1,0,0,0,0,0
+FBgn0031597,142,221,70,79,287,85,81
+FBgn0031598,504,744,269,328,795,365,391
+FBgn0031599,173,219,79,99,222,97,113
+FBgn0031600,466,826,249,345,730,345,365
+FBgn0031601,247,257,79,132,323,122,132
+FBgn0031602,0,1,1,0,1,1,2
+FBgn0031603,153,368,89,108,352,141,148
+FBgn0031604,1293,1861,726,867,1672,871,997
+FBgn0031606,873,1383,592,634,1245,758,824
+FBgn0031607,804,978,459,572,989,533,637
+FBgn0031608,180,288,93,127,271,119,171
+FBgn0031609,252,331,115,186,366,188,225
+FBgn0031610,99,132,53,53,152,55,62
+FBgn0031611,323,361,167,184,376,203,257
+FBgn0031613,0,0,0,0,5,0,1
+FBgn0031617,0,0,0,0,1,0,0
+FBgn0031619,0,0,0,0,0,1,0
+FBgn0031620,0,12,5,1,12,3,5
+FBgn0031621,0,3,0,0,3,2,1
+FBgn0031622,7,17,5,12,20,7,9
+FBgn0031623,4,3,5,1,12,1,4
+FBgn0031626,0,0,0,0,0,0,0
+FBgn0031627,3,0,0,0,0,1,0
+FBgn0031628,103,146,62,62,146,76,71
+FBgn0031629,0,1,1,0,1,0,1
+FBgn0031630,6,12,7,7,25,9,9
+FBgn0031631,118,216,63,73,190,85,101
+FBgn0031632,6,14,4,5,12,0,2
+FBgn0031633,1166,1285,582,830,1304,687,836
+FBgn0031634,5,7,3,5,18,9,3
+FBgn0031635,1041,1235,583,645,1037,680,685
+FBgn0031636,1,3,1,2,6,0,5
+FBgn0031637,1436,2368,950,1091,1592,856,881
+FBgn0031638,397,733,225,266,615,278,300
+FBgn0031639,362,401,170,181,415,200,249
+FBgn0031640,420,778,297,292,669,256,350
+FBgn0031643,1843,3836,1383,1585,3110,1585,1871
+FBgn0031644,203,288,119,149,295,175,178
+FBgn0031645,384,527,218,253,627,264,270
+FBgn0031646,7,18,8,3,10,0,5
+FBgn0031649,2,5,1,0,2,2,0
+FBgn0031650,7,9,1,7,9,3,4
+FBgn0031651,435,773,217,303,701,271,286
+FBgn0031652,97,160,59,76,123,66,65
+FBgn0031653,1,1,0,0,1,1,1
+FBgn0031654,0,0,1,0,0,0,0
+FBgn0031655,301,453,129,164,371,173,173
+FBgn0031656,364,661,222,263,636,277,301
+FBgn0031657,461,509,206,216,469,251,257
+FBgn0031659,757,1044,347,502,936,438,500
+FBgn0031660,1377,1751,819,1108,2259,1133,1293
+FBgn0031661,683,1027,302,385,778,428,475
+FBgn0031662,1081,1371,449,614,1262,589,593
+FBgn0031663,717,1234,356,493,935,397,533
+FBgn0031664,396,711,269,342,703,405,438
+FBgn0031668,0,0,0,0,0,0,0
+FBgn0031670,1799,2490,800,1139,2304,949,1084
+FBgn0031673,1953,2976,1080,1291,2460,1267,1502
+FBgn0031674,7,5,1,2,10,2,2
+FBgn0031675,38,82,29,33,58,53,51
+FBgn0031676,372,455,151,193,477,203,206
+FBgn0031677,70,78,14,30,73,27,37
+FBgn0031678,1988,3785,1118,1275,3735,1279,1423
+FBgn0031681,2946,4452,1614,1633,3715,1596,1697
+FBgn0031682,311,527,222,279,492,329,325
+FBgn0031683,270,395,158,194,404,167,191
+FBgn0031684,520,773,237,351,629,370,371
+FBgn0031685,0,1,2,0,2,0,1
+FBgn0031688,18,34,6,16,101,40,30
+FBgn0031689,260,351,113,137,686,256,319
+FBgn0031690,14,18,1,8,17,5,11
+FBgn0031692,0,1,0,0,4,1,1
+FBgn0031693,216,389,144,134,535,174,179
+FBgn0031694,12,29,11,8,38,7,12
+FBgn0031695,16,23,7,12,24,6,6
+FBgn0031696,1199,1971,723,771,1441,737,796
+FBgn0031697,2,5,2,1,4,0,2
+FBgn0031698,3483,8107,3118,2850,5383,2912,3027
+FBgn0031700,1,1,0,1,0,0,0
+FBgn0031701,0,1,0,1,1,1,0
+FBgn0031702,0,1,1,0,0,0,1
+FBgn0031703,97,256,93,117,63,28,28
+FBgn0031707,8,3,2,11,6,4,10
+FBgn0031708,277,427,145,162,405,190,218
+FBgn0031710,367,724,218,252,666,227,235
+FBgn0031711,975,1420,504,637,1188,634,679
+FBgn0031713,778,822,387,501,898,599,619
+FBgn0031715,0,0,0,0,0,0,0
+FBgn0031716,0,1,4,0,0,3,3
+FBgn0031717,75,72,37,48,114,36,56
+FBgn0031718,0,0,0,1,0,1,0
+FBgn0031719,0,0,0,0,0,0,0
+FBgn0031720,0,0,0,0,1,0,0
+FBgn0031721,0,0,0,0,0,0,0
+FBgn0031722,0,0,0,0,0,0,0
+FBgn0031723,0,0,0,0,0,0,0
+FBgn0031724,0,0,0,0,1,1,0
+FBgn0031725,0,0,0,0,0,0,1
+FBgn0031726,0,0,0,0,0,0,0
+FBgn0031728,0,0,1,1,2,0,0
+FBgn0031729,0,0,0,0,0,0,0
+FBgn0031730,0,0,0,0,0,0,0
+FBgn0031731,0,0,0,0,0,1,0
+FBgn0031732,0,3,0,0,0,0,0
+FBgn0031733,1,4,0,2,2,0,0
+FBgn0031734,5,6,4,4,5,2,1
+FBgn0031735,11,7,3,6,12,3,7
+FBgn0031736,906,1614,472,603,1241,623,654
+FBgn0031737,14,15,6,5,12,7,4
+FBgn0031738,834,1715,615,610,1997,897,987
+FBgn0031739,206,379,168,160,292,155,175
+FBgn0031740,625,1156,424,603,957,590,622
+FBgn0031741,2,1,1,1,3,0,1
+FBgn0031745,5,1,2,0,3,1,2
+FBgn0031746,0,0,0,0,0,0,0
+FBgn0031747,13,14,5,10,8,4,4
+FBgn0031749,10,11,2,2,11,3,5
+FBgn0031751,0,0,0,0,1,1,0
+FBgn0031752,1392,2328,888,913,1792,778,835
+FBgn0031753,0,1,1,0,3,1,1
+FBgn0031756,22,34,9,10,34,15,16
+FBgn0031757,6,15,4,3,8,6,10
+FBgn0031758,22,57,12,26,84,31,30
+FBgn0031759,3888,8536,3408,3418,6381,3461,3606
+FBgn0031760,654,716,271,308,974,306,326
+FBgn0031762,350,408,181,194,334,183,199
+FBgn0031763,0,0,0,0,0,0,0
+FBgn0031764,591,913,320,458,689,381,476
+FBgn0031765,0,3,0,1,1,2,1
+FBgn0031766,0,1,0,0,0,0,0
+FBgn0031768,379,616,236,283,523,330,376
+FBgn0031769,1331,1946,757,859,2283,1150,1237
+FBgn0031770,7,8,4,3,8,5,6
+FBgn0031771,2087,3213,1243,1599,2369,1260,1478
+FBgn0031772,187,436,86,179,350,165,154
+FBgn0031773,154,292,111,116,265,144,163
+FBgn0031774,241,291,87,162,311,181,176
+FBgn0031775,7,15,3,7,28,8,8
+FBgn0031776,940,1676,443,603,1479,604,610
+FBgn0031777,81,157,49,71,133,66,83
+FBgn0031778,1,2,4,1,1,1,1
+FBgn0031779,792,956,488,586,868,613,600
+FBgn0031781,1730,1937,764,1092,1473,1084,1085
+FBgn0031782,596,983,410,543,908,529,635
+FBgn0031783,3,2,0,1,1,1,2
+FBgn0031784,0,3,1,0,1,0,0
+FBgn0031785,0,2,0,0,1,0,0
+FBgn0031786,0,0,0,0,0,0,0
+FBgn0031791,0,1,0,1,1,1,0
+FBgn0031792,0,0,0,0,0,0,0
+FBgn0031799,875,1332,547,553,945,519,574
+FBgn0031800,3,7,4,3,8,4,2
+FBgn0031801,5,1,3,2,3,3,2
+FBgn0031802,1,1,0,0,0,1,1
+FBgn0031803,0,2,1,0,1,1,0
+FBgn0031804,0,0,0,0,1,0,2
+FBgn0031805,3283,7111,2784,3193,2965,1723,1917
+FBgn0031808,4,6,4,3,0,2,3
+FBgn0031811,117,137,42,67,162,74,78
+FBgn0031812,430,621,223,280,486,211,246
+FBgn0031813,489,616,285,335,548,323,332
+FBgn0031814,819,1028,459,533,1148,706,737
+FBgn0031815,759,1119,426,557,823,432,515
+FBgn0031816,147,172,72,100,248,153,167
+FBgn0031817,158,252,83,120,236,135,163
+FBgn0031818,1168,1527,603,712,1147,703,797
+FBgn0031820,8,18,2,2,12,2,5
+FBgn0031821,0,0,0,0,0,0,0
+FBgn0031822,294,325,126,182,368,201,206
+FBgn0031824,304,386,162,194,308,182,231
+FBgn0031826,3,5,0,1,2,1,1
+FBgn0031829,5,16,2,11,11,5,5
+FBgn0031830,1459,2944,637,850,2496,929,1058
+FBgn0031831,8,25,9,14,22,10,13
+FBgn0031832,262,500,147,194,460,190,196
+FBgn0031834,119,143,37,52,134,43,56
+FBgn0031835,1,1,0,1,2,2,3
+FBgn0031836,1213,1651,650,770,1731,877,921
+FBgn0031837,1,2,1,0,4,1,3
+FBgn0031842,2825,4422,1669,1822,3784,1715,1837
+FBgn0031844,49,71,31,38,99,61,45
+FBgn0031845,787,1070,426,535,790,440,456
+FBgn0031848,171,288,100,124,220,129,109
+FBgn0031849,1,0,0,0,1,0,0
+FBgn0031850,9,13,8,6,15,13,9
+FBgn0031851,639,1207,356,519,962,382,462
+FBgn0031853,2,1,2,1,2,1,0
+FBgn0031854,0,0,1,1,0,1,1
+FBgn0031855,0,0,1,0,1,2,0
+FBgn0031856,0,0,1,1,1,0,0
+FBgn0031857,22,25,18,11,27,14,9
+FBgn0031858,2,3,0,2,2,0,1
+FBgn0031859,0,0,0,0,0,0,0
+FBgn0031860,0,0,0,0,0,0,0
+FBgn0031861,0,0,0,0,0,0,0
+FBgn0031865,22,41,10,9,21,14,8
+FBgn0031866,4,2,2,1,3,1,1
+FBgn0031868,1147,1794,601,720,1541,763,796
+FBgn0031869,8,13,5,3,11,5,6
+FBgn0031871,531,915,316,368,898,449,515
+FBgn0031872,517,786,299,332,937,434,466
+FBgn0031873,176,326,71,111,275,130,129
+FBgn0031874,173,215,68,102,249,79,80
+FBgn0031875,790,991,316,447,927,374,443
+FBgn0031876,190,403,105,150,372,147,180
+FBgn0031877,156,168,76,108,142,114,85
+FBgn0031878,2061,3400,1114,1350,3575,1506,1681
+FBgn0031879,5,7,3,0,3,4,3
+FBgn0031880,15,24,19,20,29,8,11
+FBgn0031881,234,484,141,159,453,134,195
+FBgn0031882,363,480,188,242,495,222,219
+FBgn0031883,1587,2539,1026,1184,1886,1173,1285
+FBgn0031885,664,1303,442,441,942,326,384
+FBgn0031886,460,761,243,287,842,301,305
+FBgn0031887,20,33,6,2,54,7,7
+FBgn0031888,2761,3883,1567,1808,5201,2349,2837
+FBgn0031893,525,954,278,330,735,313,315
+FBgn0031894,153,275,90,88,295,124,136
+FBgn0031895,71,124,49,44,141,83,65
+FBgn0031896,729,1028,410,441,1222,502,579
+FBgn0031897,1182,1979,696,752,1978,760,857
+FBgn0031900,0,0,0,0,1,0,0
+FBgn0031902,0,2,0,0,2,4,0
+FBgn0031903,0,0,0,0,0,0,0
+FBgn0031904,527,846,285,324,886,358,357
+FBgn0031905,0,1,0,0,1,1,0
+FBgn0031906,1,2,1,2,4,6,4
+FBgn0031907,11,9,7,7,9,4,8
+FBgn0031908,2,0,0,1,1,2,0
+FBgn0031909,352,451,177,208,492,231,227
+FBgn0031910,3,6,2,3,12,4,1
+FBgn0031912,1878,2537,1240,1376,1156,638,732
+FBgn0031913,1442,1620,717,998,1077,549,578
+FBgn0031914,692,859,272,310,604,219,277
+FBgn0031918,6,7,1,5,7,1,3
+FBgn0031920,23,30,17,13,26,6,4
+FBgn0031923,3,17,2,1,0,0,0
+FBgn0031925,1,0,1,0,1,1,0
+FBgn0031926,0,1,0,0,0,3,0
+FBgn0031927,0,0,0,0,5,1,1
+FBgn0031929,2,1,2,1,0,0,2
+FBgn0031930,0,1,0,0,0,0,1
+FBgn0031934,0,0,0,0,0,0,1
+FBgn0031935,0,0,3,0,2,1,0
+FBgn0031936,8,11,5,6,29,6,11
+FBgn0031937,313,709,323,345,1116,312,369
+FBgn0031939,6,9,5,1,11,3,5
+FBgn0031940,1,0,1,0,0,1,0
+FBgn0031941,0,0,0,0,0,0,0
+FBgn0031942,0,0,0,0,0,0,0
+FBgn0031943,0,0,0,0,0,0,0
+FBgn0031944,0,0,0,0,0,0,0
+FBgn0031945,2,6,2,1,5,1,2
+FBgn0031946,0,0,0,0,2,0,0
+FBgn0031947,1011,2121,662,766,1617,731,850
+FBgn0031948,161,202,65,78,228,68,71
+FBgn0031950,857,1097,414,501,995,479,516
+FBgn0031951,413,743,219,263,684,244,279
+FBgn0031952,523,809,330,320,586,240,302
+FBgn0031954,0,0,0,0,0,0,0
+FBgn0031955,9,22,10,17,13,3,16
+FBgn0031957,51,78,27,24,42,18,12
+FBgn0031959,1,5,3,1,5,0,5
+FBgn0031961,6,16,3,5,16,4,6
+FBgn0031962,690,1167,295,467,1121,485,492
+FBgn0031966,5,4,1,3,4,2,2
+FBgn0031968,57,87,41,44,157,70,91
+FBgn0031969,5644,6867,2980,3559,6829,3201,3391
+FBgn0031970,18,20,17,10,26,11,13
+FBgn0031971,274,568,141,186,509,208,203
+FBgn0031972,461,555,238,320,458,249,251
+FBgn0031973,1198,2273,942,1159,1514,891,1055
+FBgn0031974,74,115,46,55,150,44,49
+FBgn0031975,20,42,23,25,36,12,21
+FBgn0031976,83,274,31,22,162,18,19
+FBgn0031977,1792,2653,771,1174,3251,1193,1153
+FBgn0031979,69,76,21,53,72,69,63
+FBgn0031980,16353,26727,9570,16418,24781,13176,16109
+FBgn0031981,1096,1387,606,598,1493,805,779
+FBgn0031985,2219,3094,1231,1372,2951,1534,1631
+FBgn0031986,0,3,0,1,1,2,0
+FBgn0031987,305,669,186,234,391,185,201
+FBgn0031988,2131,3970,1406,1519,2694,1224,1303
+FBgn0031990,5108,9656,2868,2857,6558,2645,2804
+FBgn0031992,203,366,66,101,541,146,160
+FBgn0031993,17122,21513,9724,9696,17821,9403,9314
+FBgn0031995,1489,2138,748,852,2147,972,1052
+FBgn0031996,534,824,288,383,995,408,514
+FBgn0031997,368,388,185,246,482,249,242
+FBgn0031998,908,971,470,523,1250,424,487
+FBgn0031999,83,130,45,64,137,48,67
+FBgn0032000,518,671,256,353,587,335,365
+FBgn0032001,333,467,221,273,452,280,290
+FBgn0032002,54,103,41,38,95,34,38
+FBgn0032003,18,30,8,24,18,7,16
+FBgn0032004,1846,2013,721,909,1000,387,456
+FBgn0032005,4930,8106,3006,3459,5238,2543,3113
+FBgn0032006,13593,19822,8042,8581,19411,10985,11114
+FBgn0032008,0,0,1,0,0,0,0
+FBgn0032010,40,48,18,19,65,26,36
+FBgn0032013,85,156,57,72,193,89,101
+FBgn0032014,645,1021,334,422,919,403,425
+FBgn0032015,2615,3688,1290,1709,3631,1649,1866
+FBgn0032016,469,906,286,306,759,334,329
+FBgn0032017,113,179,54,63,230,70,68
+FBgn0032018,2490,3170,1266,1252,2657,1133,1212
+FBgn0032019,135,164,40,52,241,84,83
+FBgn0032020,632,812,292,362,940,394,432
+FBgn0032021,5,10,1,3,9,4,3
+FBgn0032022,5,6,1,6,3,2,3
+FBgn0032023,1,1,0,0,1,0,0
+FBgn0032024,1506,1847,695,877,1377,750,892
+FBgn0032025,418,379,131,163,335,187,228
+FBgn0032026,2905,3770,1554,1691,4887,2266,2326
+FBgn0032029,539,773,244,320,329,167,211
+FBgn0032030,799,1317,358,504,1004,511,594
+FBgn0032031,273,428,176,208,391,199,240
+FBgn0032032,230,399,143,227,504,191,253
+FBgn0032033,104,229,70,72,167,78,76
+FBgn0032034,238,437,96,112,298,102,150
+FBgn0032035,1343,1984,522,799,1972,776,862
+FBgn0032036,10970,14013,5801,6534,9696,4548,4941
+FBgn0032037,2,5,5,2,6,2,2
+FBgn0032039,2,6,2,1,3,0,4
+FBgn0032040,962,1537,652,791,1699,895,1052
+FBgn0032042,523,1058,361,344,938,291,319
+FBgn0032045,2,7,2,1,2,1,2
+FBgn0032047,72,86,26,46,121,56,55
+FBgn0032048,1,1,1,4,2,4,0
+FBgn0032049,5,5,0,0,0,2,2
+FBgn0032050,2791,3619,1493,1652,3039,1590,1848
+FBgn0032051,1316,2416,694,903,1806,819,858
+FBgn0032052,1232,1819,596,744,1918,685,766
+FBgn0032053,314,575,127,195,478,229,239
+FBgn0032054,779,991,404,499,876,491,562
+FBgn0032055,0,2,1,0,1,0,1
+FBgn0032057,3,7,3,3,13,2,6
+FBgn0032058,5,4,0,1,2,4,1
+FBgn0032059,413,598,177,207,568,228,262
+FBgn0032061,5,10,4,6,9,7,5
+FBgn0032065,0,0,0,0,0,0,1
+FBgn0032066,0,1,1,0,0,1,0
+FBgn0032067,0,0,0,0,0,0,0
+FBgn0032068,0,0,1,1,1,0,0
+FBgn0032069,0,1,0,1,0,1,0
+FBgn0032072,0,1,0,0,1,0,0
+FBgn0032074,7,11,1,3,12,6,2
+FBgn0032075,4,5,0,6,8,4,1
+FBgn0032076,0,0,0,0,0,0,0
+FBgn0032077,0,0,0,0,0,0,0
+FBgn0032078,5118,6863,2701,3156,8417,4309,4706
+FBgn0032079,725,1227,351,366,975,318,304
+FBgn0032080,10,28,7,5,14,9,6
+FBgn0032082,290,674,226,238,821,289,343
+FBgn0032083,25,20,19,18,56,29,24
+FBgn0032084,44,42,20,12,78,25,21
+FBgn0032085,20,14,3,5,29,9,8
+FBgn0032086,3,4,1,1,3,3,2
+FBgn0032087,0,0,0,0,0,0,1
+FBgn0032088,4,6,3,4,25,3,4
+FBgn0032089,0,0,0,0,0,0,0
+FBgn0032090,0,0,0,0,0,0,0
+FBgn0032094,0,0,0,0,1,0,0
+FBgn0032095,1,5,3,2,5,1,2
+FBgn0032096,1,1,2,0,8,0,2
+FBgn0032100,3,1,2,2,3,1,1
+FBgn0032101,621,1397,362,469,1218,455,503
+FBgn0032104,0,1,0,1,1,0,0
+FBgn0032105,488,830,330,399,1072,562,568
+FBgn0032109,1,1,0,0,0,0,0
+FBgn0032110,0,0,0,0,0,0,0
+FBgn0032111,0,0,0,0,0,0,0
+FBgn0032115,4,5,4,3,6,1,4
+FBgn0032116,1,4,1,2,0,2,2
+FBgn0032117,186,186,79,83,233,82,95
+FBgn0032119,0,2,1,0,1,0,0
+FBgn0032120,2622,3299,1347,1374,3629,1699,1614
+FBgn0032122,0,1,1,0,2,0,0
+FBgn0032123,290,760,297,290,755,342,309
+FBgn0032124,4,12,0,3,4,4,2
+FBgn0032125,0,0,0,0,0,1,0
+FBgn0032126,0,0,0,0,0,0,0
+FBgn0032127,0,0,0,0,0,0,0
+FBgn0032129,7,13,12,6,5,4,5
+FBgn0032130,512,891,260,339,607,255,318
+FBgn0032131,1,0,0,0,1,0,0
+FBgn0032132,0,0,0,0,0,0,0
+FBgn0032135,208,226,115,95,283,130,160
+FBgn0032136,168,613,196,208,629,286,275
+FBgn0032138,4995,8106,3277,4071,5961,3351,4144
+FBgn0032139,152,186,62,96,141,57,82
+FBgn0032140,2615,3120,1158,1344,4377,1749,2051
+FBgn0032142,41,32,9,7,46,8,9
+FBgn0032143,8,7,1,2,16,4,10
+FBgn0032144,1,1,0,0,2,2,0
+FBgn0032145,1,1,1,0,0,0,0
+FBgn0032147,318,624,231,253,533,214,231
+FBgn0032149,325,578,183,263,576,259,275
+FBgn0032150,42,109,38,43,76,31,38
+FBgn0032151,2,4,2,0,2,0,1
+FBgn0032153,32,53,13,14,55,12,23
+FBgn0032154,235,408,123,186,366,164,199
+FBgn0032156,1933,3057,1010,1137,2061,901,966
+FBgn0032157,1188,1626,648,644,1710,778,824
+FBgn0032160,701,990,336,483,900,413,530
+FBgn0032161,47,83,26,35,87,31,40
+FBgn0032162,119,156,53,60,153,59,91
+FBgn0032163,29,15,8,15,19,5,9
+FBgn0032166,436,510,158,219,488,220,209
+FBgn0032167,988,1215,539,636,884,476,611
+FBgn0032168,263,352,120,160,318,158,175
+FBgn0032169,198,399,125,160,354,160,182
+FBgn0032170,1071,1189,589,650,1119,529,622
+FBgn0032171,157,231,81,108,166,107,120
+FBgn0032172,2418,2579,1169,1368,2490,1322,1374
+FBgn0032175,0,0,0,0,0,0,0
+FBgn0032176,0,0,0,0,0,0,0
+FBgn0032178,88,59,23,34,85,28,43
+FBgn0032180,0,3,0,1,0,2,1
+FBgn0032181,0,0,0,0,0,0,0
+FBgn0032182,0,0,0,0,0,0,0
+FBgn0032184,0,0,0,0,0,0,0
+FBgn0032186,0,0,0,0,0,0,0
+FBgn0032187,0,6,2,3,2,2,1
+FBgn0032188,0,0,0,0,0,0,0
+FBgn0032189,186,312,108,132,334,102,104
+FBgn0032191,1524,1862,822,991,1605,921,1082
+FBgn0032192,57,94,25,30,87,37,22
+FBgn0032193,89,273,41,67,214,59,71
+FBgn0032194,681,886,300,422,840,427,442
+FBgn0032195,185,317,117,116,304,116,134
+FBgn0032196,540,697,167,202,875,183,181
+FBgn0032197,642,947,195,210,1048,253,246
+FBgn0032198,2274,4061,1062,1520,4391,1450,1591
+FBgn0032200,515,860,200,279,1024,305,307
+FBgn0032202,607,1149,280,398,881,254,269
+FBgn0032204,270,288,115,159,374,147,184
+FBgn0032205,132,250,62,59,205,57,58
+FBgn0032208,9252,15013,5410,5534,13074,5706,5752
+FBgn0032209,0,0,0,0,0,0,0
+FBgn0032210,492,871,202,268,734,183,215
+FBgn0032211,1,4,2,1,2,1,2
+FBgn0032213,5364,8033,2838,3653,6931,3170,3572
+FBgn0032214,446,914,229,247,798,265,357
+FBgn0032215,311,558,135,137,645,181,168
+FBgn0032216,2063,2619,1057,1275,2869,1293,1402
+FBgn0032217,1753,2759,729,782,2828,865,831
+FBgn0032218,547,961,259,244,760,223,219
+FBgn0032219,8,12,6,9,22,7,12
+FBgn0032221,54,83,31,25,102,26,31
+FBgn0032222,676,1018,372,456,760,390,455
+FBgn0032223,655,1312,311,346,1166,345,355
+FBgn0032224,351,484,161,211,679,206,204
+FBgn0032225,3,6,0,1,6,4,1
+FBgn0032228,456,883,239,313,876,264,341
+FBgn0032229,844,1357,456,584,995,598,669
+FBgn0032230,11,23,12,6,20,7,7
+FBgn0032231,406,448,156,228,474,186,244
+FBgn0032233,15,28,15,12,32,21,15
+FBgn0032234,612,667,255,293,842,291,306
+FBgn0032235,32,43,17,14,54,17,17
+FBgn0032236,705,1285,315,403,1128,377,445
+FBgn0032237,2789,3353,1580,2166,4404,2474,2830
+FBgn0032240,0,0,0,0,0,0,0
+FBgn0032242,2172,2848,1092,1256,3178,1269,1326
+FBgn0032243,450,774,257,237,734,264,263
+FBgn0032244,373,404,169,201,503,178,191
+FBgn0032246,3443,3896,1559,2013,4399,2048,2237
+FBgn0032247,136,208,37,46,176,57,69
+FBgn0032248,302,509,135,195,604,246,256
+FBgn0032249,134,163,65,63,166,73,91
+FBgn0032250,200,427,118,145,420,159,156
+FBgn0032251,141,251,67,77,189,60,79
+FBgn0032252,95,188,67,72,225,94,102
+FBgn0032253,451,464,198,216,666,307,286
+FBgn0032256,234,478,148,127,411,121,121
+FBgn0032258,1252,1739,726,794,2058,859,904
+FBgn0032259,153,195,78,78,180,101,121
+FBgn0032260,5,6,6,6,4,1,2
+FBgn0032261,149,245,93,102,196,115,126
+FBgn0032262,16,34,12,13,35,12,16
+FBgn0032264,1706,2105,730,900,2283,942,1204
+FBgn0032265,1,2,0,0,0,0,1
+FBgn0032266,0,0,0,0,0,0,0
+FBgn0032268,0,0,0,0,0,0,0
+FBgn0032269,0,0,0,0,0,0,1
+FBgn0032271,0,0,0,0,0,0,0
+FBgn0032275,0,1,0,0,0,0,0
+FBgn0032276,0,0,0,0,0,0,0
+FBgn0032280,0,0,0,0,0,0,0
+FBgn0032281,0,0,0,0,0,0,0
+FBgn0032282,0,0,0,0,0,0,0
+FBgn0032283,0,0,0,0,0,0,0
+FBgn0032284,0,0,0,1,0,0,0
+FBgn0032285,0,1,0,0,0,0,0
+FBgn0032286,0,0,0,0,1,0,0
+FBgn0032287,0,0,1,0,0,0,0
+FBgn0032289,0,0,0,0,1,0,0
+FBgn0032290,321,505,152,181,459,198,252
+FBgn0032291,4,6,3,4,5,3,7
+FBgn0032292,860,1289,507,657,1056,584,650
+FBgn0032293,230,502,128,181,335,174,201
+FBgn0032294,0,2,0,0,0,0,0
+FBgn0032295,1070,1789,719,820,1419,928,940
+FBgn0032296,638,772,328,448,877,491,544
+FBgn0032297,173,391,110,138,361,113,137
+FBgn0032298,1065,1367,509,683,1008,609,711
+FBgn0032299,0,1,0,0,0,0,0
+FBgn0032301,0,0,0,0,0,0,0
+FBgn0032303,1,0,1,1,1,0,0
+FBgn0032304,0,0,0,0,0,0,0
+FBgn0032305,1995,3558,1200,1254,3234,1184,1078
+FBgn0032309,3,2,2,2,2,1,1
+FBgn0032310,12,20,9,9,10,8,9
+FBgn0032311,0,1,1,0,0,0,0
+FBgn0032312,0,0,0,0,0,0,0
+FBgn0032313,0,0,0,0,0,0,2
+FBgn0032314,0,0,0,0,0,0,0
+FBgn0032315,0,0,0,0,0,0,0
+FBgn0032318,0,1,0,0,0,0,0
+FBgn0032321,637,1237,332,445,874,380,453
+FBgn0032322,212,369,163,161,387,209,270
+FBgn0032329,330,422,140,189,401,184,168
+FBgn0032330,398,677,328,297,321,211,252
+FBgn0032331,3,12,8,3,8,2,3
+FBgn0032335,0,0,0,0,2,0,0
+FBgn0032336,0,0,0,0,0,0,0
+FBgn0032337,1,1,1,0,0,0,0
+FBgn0032338,0,0,0,0,2,0,0
+FBgn0032339,586,799,277,350,718,335,350
+FBgn0032340,3201,5507,1828,1973,5173,2341,2472
+FBgn0032341,1446,2042,895,913,1908,1027,1122
+FBgn0032343,69,98,46,45,94,41,47
+FBgn0032345,12,10,3,13,9,9,5
+FBgn0032346,286,327,102,124,338,134,124
+FBgn0032348,1146,1998,755,767,1706,937,1004
+FBgn0032350,15,16,5,10,30,13,16
+FBgn0032354,168,301,107,126,298,125,142
+FBgn0032358,97,204,49,89,165,69,71
+FBgn0032359,0,3,2,3,1,0,0
+FBgn0032360,0,0,0,0,0,0,0
+FBgn0032361,343,484,185,229,358,213,239
+FBgn0032362,3,6,2,1,2,0,3
+FBgn0032363,3299,5754,2271,2161,4780,2273,2328
+FBgn0032364,2,2,1,1,6,0,0
+FBgn0032365,0,0,0,0,0,0,0
+FBgn0032366,0,0,0,0,0,0,0
+FBgn0032367,0,0,0,0,0,0,0
+FBgn0032368,0,0,0,0,0,0,0
+FBgn0032369,0,0,0,0,0,0,0
+FBgn0032370,0,0,0,0,0,0,0
+FBgn0032371,0,0,0,0,0,0,0
+FBgn0032372,0,0,0,0,0,0,0
+FBgn0032373,56,122,56,55,105,46,55
+FBgn0032374,3,6,2,2,10,3,6
+FBgn0032375,3,6,1,1,2,1,1
+FBgn0032376,1,0,1,1,3,2,4
+FBgn0032377,22,64,24,25,76,23,40
+FBgn0032378,2483,3539,1429,1481,2935,1575,1619
+FBgn0032381,1,5,0,2,1,0,0
+FBgn0032382,246,393,142,176,286,135,171
+FBgn0032385,0,0,0,0,0,0,0
+FBgn0032387,541,770,283,316,740,320,354
+FBgn0032388,1996,4249,1633,1648,3505,1627,1767
+FBgn0032390,374,738,225,307,724,330,384
+FBgn0032391,151,232,89,110,255,113,129
+FBgn0032393,912,1339,625,715,1317,785,807
+FBgn0032394,867,997,338,599,1009,577,635
+FBgn0032395,697,970,394,420,794,390,375
+FBgn0032397,925,1482,487,540,1206,626,679
+FBgn0032398,1457,2084,751,1051,1962,878,993
+FBgn0032399,83,144,45,73,120,68,65
+FBgn0032400,434,1393,317,375,646,182,229
+FBgn0032401,77,104,45,30,119,46,46
+FBgn0032402,39,70,23,35,81,40,36
+FBgn0032404,0,2,0,0,0,0,0
+FBgn0032405,25,41,19,18,255,113,129
+FBgn0032406,0,0,0,0,0,0,0
+FBgn0032407,963,1455,609,753,1585,784,858
+FBgn0032408,609,1110,284,408,769,345,352
+FBgn0032409,951,1379,547,600,1532,788,890
+FBgn0032412,0,2,0,1,1,1,1
+FBgn0032413,0,2,0,0,2,0,0
+FBgn0032414,5,8,2,3,3,2,3
+FBgn0032415,1,0,0,1,0,0,0
+FBgn0032416,0,0,0,0,0,0,0
+FBgn0032419,0,0,0,0,1,1,0
+FBgn0032420,138,177,61,72,308,125,149
+FBgn0032421,190,189,87,122,391,156,209
+FBgn0032422,42,42,22,20,65,58,51
+FBgn0032424,0,0,0,0,0,0,0
+FBgn0032428,23,29,9,20,29,17,12
+FBgn0032429,760,1665,373,495,1403,597,664
+FBgn0032430,815,1085,418,532,998,508,557
+FBgn0032431,9,9,4,3,8,4,2
+FBgn0032433,14,35,11,15,32,12,19
+FBgn0032434,0,3,3,6,5,1,2
+FBgn0032435,3,6,2,2,9,2,2
+FBgn0032436,6,12,6,3,50,35,16
+FBgn0032437,0,5,2,0,8,1,4
+FBgn0032439,0,0,0,0,0,0,0
+FBgn0032442,0,0,0,0,1,0,0
+FBgn0032444,6809,7558,3369,4286,8490,5162,5549
+FBgn0032445,276,419,100,143,371,163,162
+FBgn0032446,74,69,27,38,106,38,46
+FBgn0032447,55,58,26,32,65,44,52
+FBgn0032448,10,13,0,5,5,4,1
+FBgn0032449,82,56,26,39,74,42,44
+FBgn0032450,512,538,243,296,592,270,310
+FBgn0032451,615,671,263,363,1104,588,702
+FBgn0032452,35,67,22,27,71,25,37
+FBgn0032453,1285,2345,721,887,2347,1068,1137
+FBgn0032454,2667,4214,1475,1610,3989,2024,2084
+FBgn0032455,1021,1614,529,571,1543,537,646
+FBgn0032456,9455,13079,5363,5835,12048,5702,5668
+FBgn0032457,0,0,0,3,1,1,2
+FBgn0032462,0,0,0,0,0,0,0
+FBgn0032464,8,4,2,4,4,1,0
+FBgn0032465,1185,1572,626,770,1240,746,891
+FBgn0032467,1980,3030,1124,1323,2557,1438,1502
+FBgn0032469,2862,5460,2647,2134,3780,2164,2182
+FBgn0032470,14,48,21,13,41,15,13
+FBgn0032471,1,8,1,4,12,2,0
+FBgn0032472,1,1,1,0,1,0,0
+FBgn0032473,7,16,5,12,18,5,11
+FBgn0032474,330,504,182,261,509,275,293
+FBgn0032475,1836,3030,1109,1228,2330,1129,1188
+FBgn0032476,888,1217,447,540,1134,569,571
+FBgn0032477,660,918,305,388,714,360,419
+FBgn0032478,78,114,30,46,87,30,36
+FBgn0032479,5264,7615,2887,3222,7048,3548,3654
+FBgn0032480,1565,2232,928,1010,1916,1053,1072
+FBgn0032481,808,1269,409,430,995,483,477
+FBgn0032482,4844,6775,2487,3095,5312,2278,2673
+FBgn0032483,13,19,9,10,22,9,5
+FBgn0032484,2,6,0,1,7,2,1
+FBgn0032485,930,1119,481,528,1324,644,628
+FBgn0032486,183,264,114,126,231,135,162
+FBgn0032487,176,254,79,86,185,109,102
+FBgn0032488,514,1030,355,431,908,397,475
+FBgn0032489,0,0,0,1,0,0,0
+FBgn0032490,1,2,0,1,0,1,0
+FBgn0032491,0,0,0,1,0,0,3
+FBgn0032492,0,0,0,0,0,0,0
+FBgn0032493,0,0,0,0,0,0,0
+FBgn0032494,0,0,0,0,0,1,0
+FBgn0032495,3,5,2,0,4,1,3
+FBgn0032497,162,416,139,154,372,171,193
+FBgn0032498,37,75,34,24,157,46,72
+FBgn0032499,567,907,371,449,754,451,465
+FBgn0032502,0,2,0,2,2,2,1
+FBgn0032503,0,0,0,0,0,0,0
+FBgn0032504,29,6,4,8,11,16,1
+FBgn0032505,0,0,0,0,0,0,0
+FBgn0032506,0,2,0,0,0,1,0
+FBgn0032507,0,0,0,0,0,0,0
+FBgn0032509,786,1400,444,543,1396,588,659
+FBgn0032511,917,1520,481,655,1418,638,726
+FBgn0032512,981,1831,534,657,1611,661,799
+FBgn0032513,805,1329,435,478,1043,452,547
+FBgn0032514,2969,4183,1421,1808,4394,1884,2144
+FBgn0032515,216,331,133,165,361,159,146
+FBgn0032516,328,593,179,227,487,216,270
+FBgn0032517,676,885,408,401,888,444,440
+FBgn0032518,19386,32419,16321,20918,24253,16822,18319
+FBgn0032519,3,0,1,2,1,0,0
+FBgn0032520,102,117,49,55,71,41,48
+FBgn0032521,1078,1773,567,717,1742,710,831
+FBgn0032522,2,0,0,0,0,0,0
+FBgn0032523,1,1,0,2,0,0,1
+FBgn0032524,375,461,184,180,535,262,278
+FBgn0032525,0,3,0,1,0,0,0
+FBgn0032526,0,0,0,0,0,0,0
+FBgn0032527,1,0,0,0,1,0,0
+FBgn0032530,2,20,3,4,26,11,6
+FBgn0032533,64,87,26,47,149,58,74
+FBgn0032535,13,18,7,7,9,4,7
+FBgn0032536,1,0,0,0,0,0,0
+FBgn0032538,0,4,0,0,2,3,0
+FBgn0032546,1,2,0,1,3,1,1
+FBgn0032549,0,0,0,0,0,0,0
+FBgn0032551,0,0,1,0,0,0,0
+FBgn0032553,0,0,0,0,0,0,0
+FBgn0032554,0,0,0,0,1,0,0
+FBgn0032563,0,0,0,0,0,0,0
+FBgn0032577,0,1,0,0,2,1,0
+FBgn0032582,1,2,0,1,6,2,1
+FBgn0032585,0,1,0,0,0,1,0
+FBgn0032586,4141,6397,2378,2825,5605,2807,3269
+FBgn0032587,2523,4646,2112,1887,3488,1651,1881
+FBgn0032588,0,1,0,0,5,0,0
+FBgn0032590,33,177,72,48,209,35,45
+FBgn0032593,2,13,3,2,10,2,2
+FBgn0032595,173,295,81,106,292,111,127
+FBgn0032596,1595,2090,535,822,2392,935,989
+FBgn0032597,715,1219,406,576,1350,537,643
+FBgn0032598,239,365,136,171,656,382,378
+FBgn0032600,1305,2140,1003,962,1586,1001,978
+FBgn0032601,531,382,189,220,296,110,152
+FBgn0032602,11,16,9,8,32,5,7
+FBgn0032603,303,502,184,210,377,169,138
+FBgn0032609,2,1,0,0,1,3,1
+FBgn0032612,11,17,0,6,13,0,2
+FBgn0032613,924,1042,318,361,1164,312,373
+FBgn0032614,2,1,0,2,7,2,1
+FBgn0032615,0,0,0,0,0,0,0
+FBgn0032618,0,0,0,0,0,0,0
+FBgn0032620,346,598,150,183,614,189,217
+FBgn0032621,1700,2700,1013,927,2044,991,912
+FBgn0032622,3044,4282,1607,1681,3689,1665,1677
+FBgn0032624,0,0,0,0,0,0,0
+FBgn0032625,0,0,0,0,0,0,0
+FBgn0032626,0,0,0,0,1,0,0
+FBgn0032627,0,0,0,0,0,0,1
+FBgn0032629,4,3,1,1,3,4,2
+FBgn0032631,0,0,0,0,1,0,0
+FBgn0032632,0,0,0,0,0,0,0
+FBgn0032633,3158,4737,1676,1814,4199,1861,2000
+FBgn0032634,432,835,169,284,784,286,273
+FBgn0032635,531,889,331,398,1207,597,626
+FBgn0032636,1,1,1,0,1,0,1
+FBgn0032637,53,75,27,26,91,32,30
+FBgn0032638,271,295,103,123,133,51,42
+FBgn0032639,11,11,2,4,15,1,4
+FBgn0032640,2450,3595,1310,1706,3295,1731,1920
+FBgn0032642,377,627,148,230,461,186,239
+FBgn0032643,6105,9589,3928,4804,9478,5173,5806
+FBgn0032644,334,393,115,180,357,154,173
+FBgn0032645,0,2,0,1,4,2,3
+FBgn0032646,926,1454,489,589,1159,620,683
+FBgn0032647,33,31,14,23,77,18,18
+FBgn0032648,2,1,3,1,4,3,1
+FBgn0032649,2,0,0,0,1,0,0
+FBgn0032650,0,0,0,0,0,0,0
+FBgn0032651,0,0,0,0,0,0,0
+FBgn0032652,2,6,2,3,7,1,2
+FBgn0032654,0,0,0,0,0,0,0
+FBgn0032655,0,1,1,1,0,1,0
+FBgn0032656,514,982,322,333,868,315,362
+FBgn0032658,0,1,0,0,2,0,0
+FBgn0032660,1,1,1,1,0,0,0
+FBgn0032663,0,1,0,0,0,0,0
+FBgn0032664,0,0,0,0,0,0,0
+FBgn0032665,0,1,0,0,1,0,0
+FBgn0032666,8,15,9,5,21,9,11
+FBgn0032668,6,7,3,4,20,4,4
+FBgn0032669,0,2,0,1,5,1,1
+FBgn0032670,99,103,29,43,144,51,47
+FBgn0032671,230,441,103,136,416,146,167
+FBgn0032673,0,1,0,0,0,0,0
+FBgn0032677,0,0,0,0,0,0,0
+FBgn0032679,3553,6152,2052,2235,5232,2359,2558
+FBgn0032680,182,175,9,37,168,26,14
+FBgn0032681,32,91,40,37,126,57,73
+FBgn0032682,1,2,0,0,0,0,1
+FBgn0032683,1291,2070,671,625,1962,677,645
+FBgn0032684,4,11,4,10,13,3,4
+FBgn0032685,7,26,9,14,33,11,10
+FBgn0032688,761,1193,374,476,988,479,432
+FBgn0032689,1602,2466,819,910,2296,924,920
+FBgn0032690,1111,1934,661,702,1839,762,837
+FBgn0032691,444,763,224,275,844,345,367
+FBgn0032692,1,5,1,2,10,5,4
+FBgn0032693,63,133,68,66,121,35,22
+FBgn0032694,2266,3427,1275,1391,3043,1438,1502
+FBgn0032698,492,970,292,314,532,240,292
+FBgn0032699,1595,3035,932,1076,3324,1345,1531
+FBgn0032700,446,578,179,253,525,218,286
+FBgn0032701,660,1100,357,441,777,380,456
+FBgn0032702,2267,3127,1019,1145,2831,1146,1206
+FBgn0032703,270,461,127,151,433,146,173
+FBgn0032704,3150,4914,1288,1639,4123,1521,1654
+FBgn0032705,518,718,308,277,602,303,310
+FBgn0032706,4,8,3,1,3,3,3
+FBgn0032707,2,6,3,5,12,4,5
+FBgn0032709,0,0,0,0,0,0,0
+FBgn0032713,13,7,8,6,11,4,4
+FBgn0032715,126,255,108,155,200,121,169
+FBgn0032717,1644,4452,1362,1402,2817,1244,1346
+FBgn0032719,21,34,10,19,34,16,27
+FBgn0032720,132,208,69,89,220,80,98
+FBgn0032721,1257,1778,574,715,1864,812,842
+FBgn0032723,481,1047,319,301,1095,337,371
+FBgn0032724,339,590,148,216,546,178,210
+FBgn0032725,284,746,108,165,747,188,193
+FBgn0032726,22,82,29,36,38,27,22
+FBgn0032727,253,417,159,186,329,146,169
+FBgn0032728,310,481,112,135,480,125,119
+FBgn0032729,414,569,205,292,431,204,220
+FBgn0032730,100,57,19,32,295,34,29
+FBgn0032731,3389,7978,2590,2904,7639,3325,3581
+FBgn0032732,220,344,75,121,226,102,121
+FBgn0032733,5,6,0,4,6,1,1
+FBgn0032734,0,0,0,1,0,0,0
+FBgn0032740,0,0,0,0,1,0,0
+FBgn0032741,0,0,1,3,1,0,1
+FBgn0032744,84,120,61,63,223,69,72
+FBgn0032746,325,707,159,210,566,210,262
+FBgn0032748,2052,3634,1270,1317,2495,1271,1403
+FBgn0032749,4,4,0,5,12,3,0
+FBgn0032750,182,191,61,80,221,101,119
+FBgn0032751,59,167,29,47,103,47,38
+FBgn0032752,101,144,43,52,202,89,73
+FBgn0032753,1,3,0,1,2,1,1
+FBgn0032754,1,8,2,1,6,7,1
+FBgn0032755,0,1,1,0,0,0,1
+FBgn0032763,118,186,58,78,192,72,96
+FBgn0032768,0,0,0,0,0,0,0
+FBgn0032769,0,0,0,0,0,0,0
+FBgn0032770,0,1,0,1,8,3,7
+FBgn0032771,0,1,0,0,0,1,0
+FBgn0032772,109,162,64,67,206,109,99
+FBgn0032773,3146,3694,1556,1967,3633,2084,2344
+FBgn0032774,248,438,261,275,315,214,285
+FBgn0032775,5207,5342,2471,2886,3376,1817,1892
+FBgn0032779,2807,3608,1681,1945,2866,1671,1936
+FBgn0032780,135,299,36,57,154,32,36
+FBgn0032781,1407,2017,926,1097,1826,1246,1354
+FBgn0032782,408,535,237,251,375,224,234
+FBgn0032783,95,136,73,87,103,56,79
+FBgn0032785,262,480,160,182,314,110,135
+FBgn0032787,247,380,110,173,438,156,171
+FBgn0032788,3,7,2,2,2,2,1
+FBgn0032789,5,5,1,1,8,1,2
+FBgn0032790,172,296,88,121,270,118,129
+FBgn0032791,64,125,40,41,138,50,53
+FBgn0032793,383,640,169,285,714,300,338
+FBgn0032796,710,1307,469,541,1023,478,459
+FBgn0032797,28,53,22,36,45,31,33
+FBgn0032798,54,130,53,59,146,80,81
+FBgn0032799,709,1164,372,498,1029,487,519
+FBgn0032800,351,364,159,182,397,216,226
+FBgn0032801,256,384,146,141,402,144,177
+FBgn0032803,7,8,3,5,8,2,5
+FBgn0032804,0,0,0,0,1,1,0
+FBgn0032805,291,305,85,91,495,153,156
+FBgn0032808,46,75,14,35,33,13,9
+FBgn0032809,7,12,5,5,8,7,6
+FBgn0032810,47,151,32,34,172,77,75
+FBgn0032811,283,410,131,183,390,191,179
+FBgn0032812,548,946,456,449,762,537,500
+FBgn0032813,43,47,25,24,47,17,29
+FBgn0032814,522,738,294,288,665,335,397
+FBgn0032815,1702,3328,970,1091,2847,963,1038
+FBgn0032816,263,543,104,173,471,192,223
+FBgn0032817,3140,5447,2049,1910,4105,1979,1921
+FBgn0032818,349,560,216,279,598,308,319
+FBgn0032819,362,533,214,264,433,228,282
+FBgn0032820,297,480,177,212,671,311,354
+FBgn0032821,2421,4087,1634,1602,3797,1939,1960
+FBgn0032822,120,139,32,51,138,44,59
+FBgn0032824,1,0,0,0,0,1,1
+FBgn0032825,1,0,0,0,0,0,0
+FBgn0032827,1,4,1,0,2,1,0
+FBgn0032833,4123,4544,2473,2995,4917,3134,3270
+FBgn0032834,0,1,0,0,0,0,0
+FBgn0032835,0,2,0,0,2,2,4
+FBgn0032836,0,0,0,0,0,0,0
+FBgn0032838,1,1,0,1,1,0,1
+FBgn0032839,3,13,3,5,4,8,6
+FBgn0032840,0,2,0,3,1,1,2
+FBgn0032843,54,54,12,28,62,24,22
+FBgn0032845,142,201,59,103,177,74,67
+FBgn0032846,253,361,133,165,370,165,161
+FBgn0032847,553,1214,252,390,1102,370,371
+FBgn0032848,1232,1384,608,685,1405,786,833
+FBgn0032849,353,503,178,242,524,254,241
+FBgn0032850,2,3,1,0,1,0,0
+FBgn0032851,0,0,0,0,0,1,0
+FBgn0032853,0,0,0,0,1,0,0
+FBgn0032856,2,4,0,2,2,0,1
+FBgn0032857,6,6,1,5,10,8,5
+FBgn0032858,290,486,168,201,427,201,231
+FBgn0032859,4661,7286,2501,2738,5311,1967,2100
+FBgn0032860,0,2,0,0,0,0,0
+FBgn0032863,404,562,280,321,547,373,488
+FBgn0032864,9957,18725,6525,8281,13309,7436,8405
+FBgn0032865,0,0,0,0,0,0,0
+FBgn0032867,0,0,0,0,0,0,0
+FBgn0032868,0,0,0,0,0,1,0
+FBgn0032869,88,95,39,50,87,45,54
+FBgn0032870,634,909,341,368,852,397,403
+FBgn0032871,193,271,83,107,265,126,155
+FBgn0032872,2262,3774,1368,1419,3181,1491,1533
+FBgn0032873,808,934,360,492,1119,447,440
+FBgn0032876,564,1004,333,335,976,390,431
+FBgn0032877,192,219,74,108,252,126,144
+FBgn0032878,0,2,1,0,0,0,0
+FBgn0032879,16,36,12,10,29,31,33
+FBgn0032880,4871,5956,2366,2673,6850,2801,2823
+FBgn0032881,177,355,113,142,499,197,231
+FBgn0032882,702,1428,456,513,1222,618,705
+FBgn0032883,887,1425,469,546,1155,512,525
+FBgn0032884,1171,1903,598,805,1727,946,949
+FBgn0032886,2274,3724,1357,1290,3020,1127,1197
+FBgn0032888,2,6,2,4,14,2,3
+FBgn0032889,3049,5003,2138,2727,4978,2618,2927
+FBgn0032891,57,79,26,50,99,40,51
+FBgn0032894,1,0,0,0,1,0,0
+FBgn0032895,5,19,2,9,25,7,10
+FBgn0032896,0,1,0,0,2,0,0
+FBgn0032897,55,107,42,64,89,37,48
+FBgn0032898,3,10,2,0,6,1,0
+FBgn0032899,1193,2181,784,1193,1326,617,843
+FBgn0032900,36,57,26,33,32,13,19
+FBgn0032901,2571,5871,1555,1572,5773,1869,1966
+FBgn0032904,661,993,344,417,1154,472,498
+FBgn0032906,1554,2360,905,1151,2007,1033,1265
+FBgn0032907,256,364,138,168,479,143,198
+FBgn0032908,20,53,23,27,99,33,36
+FBgn0032910,15,18,5,5,23,9,6
+FBgn0032911,4,4,0,2,3,0,4
+FBgn0032913,1,5,2,0,3,0,1
+FBgn0032914,2,3,0,0,2,2,0
+FBgn0032915,2088,2990,1039,1208,2502,1050,1117
+FBgn0032916,449,673,177,232,557,247,271
+FBgn0032919,1603,2919,875,1018,2268,999,1012
+FBgn0032921,132,246,60,66,222,63,86
+FBgn0032922,147,176,52,93,223,90,110
+FBgn0032923,2017,3295,1032,1363,3075,1387,1614
+FBgn0032924,580,925,303,407,848,337,421
+FBgn0032925,1493,2581,754,900,2102,756,860
+FBgn0032926,637,1022,367,467,1162,466,547
+FBgn0032929,670,1122,365,380,951,360,314
+FBgn0032934,173,320,105,123,321,147,169
+FBgn0032935,687,1097,461,469,824,400,420
+FBgn0032938,1381,2975,901,1010,3009,1264,1329
+FBgn0032940,3523,6070,2102,2262,4997,2240,2406
+FBgn0032943,905,736,293,377,1333,440,346
+FBgn0032945,4,3,5,3,11,7,3
+FBgn0032946,74,219,55,60,294,58,67
+FBgn0032949,11059,18785,4620,5325,17705,4712,5501
+FBgn0032955,757,1169,341,397,1265,422,430
+FBgn0032956,2880,4792,1339,1475,7220,2360,2370
+FBgn0032957,1294,2154,879,861,1747,740,911
+FBgn0032961,3948,5837,1673,2461,5565,2062,2332
+FBgn0032964,4,16,5,0,15,7,6
+FBgn0032965,93,184,62,63,127,62,72
+FBgn0032966,0,0,0,0,0,0,0
+FBgn0032967,73,147,52,59,115,32,43
+FBgn0032968,159,211,61,66,215,78,56
+FBgn0032969,3,7,0,1,1,1,1
+FBgn0032971,0,0,0,0,0,0,0
+FBgn0032972,30,36,4,11,47,14,13
+FBgn0032973,34,42,10,14,41,14,17
+FBgn0032974,2409,4500,1493,1637,3907,1707,1939
+FBgn0032976,3586,6516,2289,2390,5302,2486,2521
+FBgn0032978,23,45,17,25,53,17,16
+FBgn0032979,3468,5692,1811,1974,4268,1783,2011
+FBgn0032981,965,1409,485,594,1340,621,747
+FBgn0032986,1192,1904,622,673,2216,631,673
+FBgn0032987,38436,83458,21073,30914,66621,23634,28429
+FBgn0032988,2163,2410,749,840,3531,834,841
+FBgn0032997,754,884,234,260,920,211,214
+FBgn0033000,267,315,75,83,647,103,99
+FBgn0033005,1998,2132,572,584,3121,532,547
+FBgn0033010,588,889,220,243,1237,223,204
+FBgn0033015,1072,1376,419,522,1454,546,575
+FBgn0033017,834,1231,293,338,1640,379,311
+FBgn0033019,168,275,57,56,361,62,73
+FBgn0033020,0,4,4,0,1,1,1
+FBgn0033021,1923,2364,783,779,3411,896,893
+FBgn0033027,19,35,16,10,57,16,15
+FBgn0033028,2144,3052,968,1155,2986,1102,1085
+FBgn0033029,3278,5234,1751,1797,4479,1869,1932
+FBgn0033031,0,0,0,0,0,0,0
+FBgn0033032,379,525,138,170,717,239,241
+FBgn0033033,2178,3774,1346,1378,2593,1125,1265
+FBgn0033038,649,1085,391,489,1156,603,601
+FBgn0033039,5040,7762,2405,2452,7015,2407,2395
+FBgn0033041,1,2,0,1,2,0,0
+FBgn0033042,0,0,0,0,0,0,0
+FBgn0033043,0,0,0,0,0,0,0
+FBgn0033045,0,1,0,0,1,0,0
+FBgn0033046,1,0,1,1,3,0,1
+FBgn0033047,1,3,0,0,2,0,1
+FBgn0033048,4,4,2,3,6,3,4
+FBgn0033049,239,661,220,161,438,169,224
+FBgn0033050,1622,2453,886,1052,1991,831,1048
+FBgn0033051,951,1391,517,538,1194,543,604
+FBgn0033052,3933,7760,2802,2882,6008,2699,2819
+FBgn0033054,1,4,1,1,5,1,4
+FBgn0033055,1135,1661,569,647,1587,622,656
+FBgn0033056,0,0,1,0,1,1,0
+FBgn0033058,1,1,2,1,5,0,0
+FBgn0033059,535,821,229,334,684,253,340
+FBgn0033060,142,227,72,103,154,90,96
+FBgn0033061,15,20,6,12,18,12,15
+FBgn0033062,2440,4481,1430,1515,3971,1468,1703
+FBgn0033063,3,7,3,5,10,9,4
+FBgn0033065,3,16,5,8,96,51,45
+FBgn0033067,0,0,0,0,0,0,0
+FBgn0033068,9,16,12,4,23,6,8
+FBgn0033069,0,0,0,0,2,0,0
+FBgn0033072,2,4,2,1,3,6,7
+FBgn0033073,2834,5238,2191,2068,4376,2337,2426
+FBgn0033074,12,22,12,6,22,5,6
+FBgn0033075,893,1370,508,567,1151,537,545
+FBgn0033076,0,0,0,0,0,0,1
+FBgn0033079,531,851,279,317,420,233,248
+FBgn0033081,1315,2121,667,788,1667,786,838
+FBgn0033083,933,1548,524,771,1288,723,785
+FBgn0033085,0,1,0,0,0,0,0
+FBgn0033086,2,4,1,0,1,0,0
+FBgn0033087,346,517,217,234,469,227,239
+FBgn0033088,443,403,196,254,536,269,311
+FBgn0033089,202,311,88,119,307,166,172
+FBgn0033090,12,24,4,8,13,6,5
+FBgn0033092,113,311,85,82,195,75,82
+FBgn0033093,35,74,22,33,49,28,38
+FBgn0033095,1267,2152,758,829,3265,1483,1579
+FBgn0033096,1,2,1,1,1,3,1
+FBgn0033097,0,0,0,0,0,0,0
+FBgn0033100,212,370,76,126,332,117,121
+FBgn0033101,826,1139,520,577,1138,756,714
+FBgn0033104,143,373,85,140,257,112,147
+FBgn0033107,732,1068,398,454,1063,520,510
+FBgn0033108,11,16,8,6,33,13,9
+FBgn0033109,2362,3645,1375,1442,3481,1703,1891
+FBgn0033110,25,32,19,13,62,23,20
+FBgn0033112,0,6,2,2,13,5,3
+FBgn0033113,433,433,115,190,804,429,425
+FBgn0033115,131,269,93,119,349,149,172
+FBgn0033117,258,366,146,186,364,173,207
+FBgn0033121,518,762,260,316,714,323,361
+FBgn0033122,561,968,452,453,793,511,509
+FBgn0033124,10,16,5,7,12,4,7
+FBgn0033127,1132,1490,545,821,1617,823,914
+FBgn0033128,624,986,296,414,679,245,263
+FBgn0033129,6,8,4,6,8,1,4
+FBgn0033130,10,11,6,7,13,0,5
+FBgn0033131,5,6,0,3,7,1,3
+FBgn0033132,56,62,32,39,48,36,36
+FBgn0033133,11,27,10,10,17,3,10
+FBgn0033134,203,246,79,142,189,82,84
+FBgn0033135,5,6,3,1,5,3,2
+FBgn0033136,17,14,7,3,24,14,13
+FBgn0033137,11,10,14,13,23,5,12
+FBgn0033138,0,2,1,1,0,0,0
+FBgn0033139,0,0,0,1,1,0,0
+FBgn0033140,0,0,0,0,0,0,0
+FBgn0033141,0,0,0,0,0,0,0
+FBgn0033142,0,0,0,0,0,0,0
+FBgn0033145,0,0,0,0,0,0,0
+FBgn0033149,0,0,1,0,0,0,0
+FBgn0033153,177,423,146,158,513,249,278
+FBgn0033154,3,2,0,1,2,1,0
+FBgn0033155,1657,2579,1133,1117,1891,1201,1153
+FBgn0033158,0,2,0,0,1,0,0
+FBgn0033159,3344,6932,2791,2470,5801,3011,3052
+FBgn0033160,2055,2825,1094,1329,2109,1262,1331
+FBgn0033162,1036,1591,565,856,1570,928,1054
+FBgn0033164,2,0,2,1,4,0,1
+FBgn0033165,2,0,0,0,2,0,0
+FBgn0033166,1289,2018,739,869,1483,908,958
+FBgn0033167,0,0,0,0,0,0,0
+FBgn0033168,0,0,0,0,0,0,0
+FBgn0033169,1087,1716,591,696,1477,640,765
+FBgn0033170,30,43,22,30,65,39,50
+FBgn0033174,396,881,318,349,592,286,320
+FBgn0033177,1325,2124,942,1061,1735,965,1180
+FBgn0033178,1271,1692,679,897,1602,965,1027
+FBgn0033179,2597,3819,1622,1892,3207,2039,2092
+FBgn0033182,271,552,216,218,401,211,264
+FBgn0033183,1086,1805,642,816,1667,1008,1081
+FBgn0033184,390,629,209,272,600,257,296
+FBgn0033185,356,496,198,220,504,235,259
+FBgn0033186,108,131,61,82,156,82,101
+FBgn0033187,958,1118,407,504,1029,519,578
+FBgn0033188,1695,2570,1132,1219,1731,837,907
+FBgn0033189,1969,3252,916,1270,2445,1126,1319
+FBgn0033190,40,78,29,38,76,32,54
+FBgn0033191,782,945,408,494,1008,574,648
+FBgn0033192,497,712,368,313,467,311,288
+FBgn0033194,3504,6050,2320,2234,5986,2619,2614
+FBgn0033195,91,180,51,70,119,58,56
+FBgn0033196,1888,2824,1205,1310,2724,1631,1744
+FBgn0033199,228,446,164,158,358,149,190
+FBgn0033202,2,1,0,1,2,0,0
+FBgn0033203,3,3,3,2,4,1,5
+FBgn0033204,453,639,248,278,430,225,235
+FBgn0033205,1615,2425,854,1084,3141,1288,1385
+FBgn0033206,576,790,308,391,651,358,397
+FBgn0033207,3,0,1,2,0,0,0
+FBgn0033208,281,391,114,160,445,192,201
+FBgn0033209,380,705,219,259,606,265,292
+FBgn0033210,477,893,301,343,710,337,347
+FBgn0033212,2462,3743,1602,1613,4154,2041,2193
+FBgn0033214,15,13,3,7,15,7,9
+FBgn0033215,2,2,3,1,6,3,2
+FBgn0033216,2,0,0,2,0,0,0
+FBgn0033221,13,19,13,9,31,12,14
+FBgn0033222,1,1,1,4,3,4,1
+FBgn0033224,1586,2880,1202,1232,2016,1031,1086
+FBgn0033225,768,1106,466,540,1028,635,660
+FBgn0033226,1210,2120,818,969,1969,989,1182
+FBgn0033229,1,0,0,0,3,1,0
+FBgn0033232,443,734,295,325,695,343,426
+FBgn0033233,181,329,92,103,312,125,110
+FBgn0033234,22,29,17,14,28,10,12
+FBgn0033235,1645,2383,951,1185,1821,1210,1356
+FBgn0033236,1034,1467,535,594,1400,528,536
+FBgn0033238,3,2,0,1,0,0,3
+FBgn0033240,129,241,61,80,245,89,104
+FBgn0033241,2583,4051,1361,1626,3484,1683,1814
+FBgn0033243,12,26,9,13,14,7,7
+FBgn0033244,841,1480,433,484,1391,504,481
+FBgn0033246,9560,12474,5415,5545,9944,5675,5599
+FBgn0033247,769,1181,365,532,998,435,462
+FBgn0033248,0,1,0,0,0,0,0
+FBgn0033249,0,0,0,0,0,0,0
+FBgn0033250,0,0,0,0,0,0,0
+FBgn0033252,9,11,8,4,16,6,4
+FBgn0033257,21,25,11,12,30,7,4
+FBgn0033258,64,114,89,37,95,38,41
+FBgn0033259,1352,1788,656,764,1591,672,717
+FBgn0033260,1622,2507,808,865,2374,925,962
+FBgn0033261,267,604,113,180,416,126,139
+FBgn0033264,1017,1730,577,686,1414,695,717
+FBgn0033265,331,654,150,159,629,156,180
+FBgn0033266,706,1186,427,511,892,410,444
+FBgn0033268,49,94,35,56,150,92,117
+FBgn0033269,2511,3725,1551,1716,2462,1533,1580
+FBgn0033271,5,7,5,4,7,8,5
+FBgn0033272,768,1309,431,595,1142,532,577
+FBgn0033273,115,161,56,81,213,74,83
+FBgn0033274,66,81,30,42,72,50,56
+FBgn0033275,0,1,1,0,1,0,0
+FBgn0033277,8,46,21,11,7,11,5
+FBgn0033278,1,1,0,0,1,0,0
+FBgn0033279,1,0,0,0,0,0,0
+FBgn0033280,0,0,0,0,0,0,0
+FBgn0033282,1,6,6,4,9,7,10
+FBgn0033283,0,0,0,1,4,0,1
+FBgn0033285,0,5,0,1,2,1,1
+FBgn0033286,4,10,9,7,22,4,3
+FBgn0033287,1,10,2,2,10,2,2
+FBgn0033288,9,21,5,5,29,21,22
+FBgn0033289,0,0,0,0,1,0,0
+FBgn0033292,135,160,66,79,101,50,30
+FBgn0033294,2,3,1,1,0,1,0
+FBgn0033296,2,10,3,4,12,3,5
+FBgn0033297,1,0,0,0,1,0,0
+FBgn0033301,2,0,1,0,1,0,1
+FBgn0033302,1006,1615,572,686,1213,537,578
+FBgn0033303,4,6,2,3,7,1,2
+FBgn0033304,510,1101,392,434,1141,421,478
+FBgn0033307,1,3,0,1,1,1,2
+FBgn0033308,40,83,31,29,75,36,56
+FBgn0033309,724,991,407,486,867,488,605
+FBgn0033310,990,1965,898,860,2104,1055,1153
+FBgn0033312,11,26,15,24,39,22,24
+FBgn0033313,3060,4915,2225,2222,4907,2979,3016
+FBgn0033315,236,267,114,142,233,104,157
+FBgn0033316,522,824,301,328,767,322,354
+FBgn0033317,1141,1875,631,788,1544,811,953
+FBgn0033320,10,20,5,6,14,10,14
+FBgn0033321,4,23,12,8,19,8,10
+FBgn0033322,0,0,0,1,0,0,1
+FBgn0033323,0,0,1,0,1,1,0
+FBgn0033324,1,0,0,0,0,0,0
+FBgn0033326,2,1,1,1,3,1,0
+FBgn0033327,0,0,0,0,0,0,0
+FBgn0033330,0,0,0,0,0,1,0
+FBgn0033337,210,276,102,122,245,132,124
+FBgn0033339,5343,8018,2971,3442,6894,3820,4068
+FBgn0033340,522,1435,242,380,1064,362,399
+FBgn0033341,343,730,274,296,562,281,322
+FBgn0033342,6892,8985,3672,4668,9665,5919,6427
+FBgn0033344,15,17,5,10,14,4,5
+FBgn0033347,12,17,9,5,8,8,9
+FBgn0033348,208,320,105,130,331,152,131
+FBgn0033349,1353,2188,896,966,1842,981,1035
+FBgn0033350,509,882,254,365,817,387,404
+FBgn0033351,556,865,347,473,894,458,478
+FBgn0033352,2353,3620,1366,1566,3102,1580,1518
+FBgn0033353,41,62,27,42,52,16,17
+FBgn0033354,817,1264,420,405,1227,439,460
+FBgn0033355,2,0,0,0,2,1,2
+FBgn0033356,1119,2204,497,720,1385,482,539
+FBgn0033357,510,690,237,337,999,338,408
+FBgn0033358,2,3,1,1,2,1,1
+FBgn0033359,418,898,329,311,344,217,246
+FBgn0033362,183,218,124,126,130,75,70
+FBgn0033363,92,112,78,68,61,39,41
+FBgn0033364,137,210,63,67,109,42,54
+FBgn0033365,1,1,3,0,1,1,0
+FBgn0033366,37,79,42,33,86,46,40
+FBgn0033367,6151,18102,6429,7296,30913,22288,19977
+FBgn0033368,29,92,24,30,150,71,90
+FBgn0033369,0,0,0,0,0,0,0
+FBgn0033371,1,6,4,2,14,5,3
+FBgn0033372,54,39,18,19,63,22,18
+FBgn0033373,533,749,299,397,541,305,384
+FBgn0033374,2,8,3,1,7,7,5
+FBgn0033375,173,312,80,123,214,117,153
+FBgn0033376,508,675,278,276,676,302,278
+FBgn0033377,2004,3323,1125,1318,3128,1604,1797
+FBgn0033378,905,1485,480,639,1328,623,748
+FBgn0033379,1122,1605,566,724,1391,616,705
+FBgn0033380,423,734,244,320,592,305,338
+FBgn0033381,253,312,91,149,355,181,183
+FBgn0033382,632,546,265,338,627,358,358
+FBgn0033387,139,200,75,89,164,75,84
+FBgn0033388,181,287,123,108,248,104,109
+FBgn0033389,17,38,7,11,38,11,15
+FBgn0033391,1603,2819,925,979,2494,1039,1135
+FBgn0033392,184,260,101,112,238,107,135
+FBgn0033393,3894,5252,2300,2457,4440,2429,2754
+FBgn0033395,0,3,0,1,3,0,2
+FBgn0033397,100,113,30,43,111,31,28
+FBgn0033400,435,896,275,348,778,313,392
+FBgn0033401,494,664,264,302,702,305,431
+FBgn0033402,1413,2292,793,909,1422,703,836
+FBgn0033403,6,15,9,5,7,4,4
+FBgn0033404,0,0,0,0,2,0,0
+FBgn0033405,2,20,14,10,18,8,9
+FBgn0033408,1,2,4,0,6,1,2
+FBgn0033412,4,3,1,1,1,2,5
+FBgn0033413,882,1539,459,607,1368,569,615
+FBgn0033421,672,848,289,462,1062,522,556
+FBgn0033422,28,63,31,26,38,27,22
+FBgn0033423,27,60,24,19,26,15,18
+FBgn0033426,454,836,287,365,374,152,208
+FBgn0033427,211,289,92,123,372,136,146
+FBgn0033428,1023,1269,555,682,1419,797,838
+FBgn0033429,70,106,32,58,155,55,84
+FBgn0033431,292,575,253,322,542,299,320
+FBgn0033434,1256,1709,616,761,1647,754,723
+FBgn0033437,57,84,33,33,78,41,46
+FBgn0033438,2233,2104,789,776,2646,1145,1299
+FBgn0033439,0,0,1,0,0,0,0
+FBgn0033440,0,0,0,0,0,0,1
+FBgn0033442,1,4,0,1,6,1,1
+FBgn0033443,1,2,1,0,1,0,1
+FBgn0033446,117,228,73,61,79,37,42
+FBgn0033447,7,2,8,6,3,3,7
+FBgn0033448,1280,1465,609,716,994,490,584
+FBgn0033449,120,217,60,67,146,58,74
+FBgn0033450,49,112,23,41,120,38,30
+FBgn0033451,455,493,195,271,632,315,326
+FBgn0033452,951,1274,481,597,1375,613,760
+FBgn0033453,773,1421,462,605,1600,578,685
+FBgn0033454,1075,1294,554,643,1207,722,733
+FBgn0033457,281,352,125,184,437,176,189
+FBgn0033458,22,72,13,22,102,44,49
+FBgn0033459,80,159,35,48,192,64,68
+FBgn0033460,3020,4912,1740,1847,3905,1929,2043
+FBgn0033461,1,3,1,0,1,0,0
+FBgn0033463,1741,3281,1175,1339,2819,1210,1359
+FBgn0033464,1,3,0,2,0,0,1
+FBgn0033465,666,1055,388,464,819,418,458
+FBgn0033466,841,1323,453,563,877,509,541
+FBgn0033467,35,30,9,6,65,7,6
+FBgn0033468,655,1065,331,392,972,382,436
+FBgn0033469,345,192,61,108,183,99,100
+FBgn0033471,568,702,242,335,645,311,378
+FBgn0033473,465,729,224,287,571,262,280
+FBgn0033474,1407,1608,603,732,1575,740,783
+FBgn0033475,298,466,131,203,588,185,239
+FBgn0033476,5390,8234,2766,2938,8020,3300,3581
+FBgn0033477,1415,2368,539,826,2205,727,843
+FBgn0033478,45,76,33,40,113,45,64
+FBgn0033479,378,404,170,188,498,219,213
+FBgn0033480,226,479,94,150,379,170,181
+FBgn0033481,5,13,2,6,16,13,9
+FBgn0033482,3884,4936,1761,2019,4299,2050,2170
+FBgn0033483,6065,9503,3368,4033,6929,3266,3692
+FBgn0033484,6,9,5,7,10,2,0
+FBgn0033485,887,1295,377,575,1061,422,496
+FBgn0033486,790,1576,653,644,1117,615,720
+FBgn0033490,0,5,2,0,3,0,0
+FBgn0033491,226,525,156,181,457,170,165
+FBgn0033494,102,225,83,90,181,82,94
+FBgn0033495,45,224,78,82,47,16,18
+FBgn0033497,0,1,0,0,4,0,0
+FBgn0033498,1,1,1,3,2,1,1
+FBgn0033499,1,4,1,5,1,1,2
+FBgn0033500,2,3,4,5,5,8,4
+FBgn0033501,4,5,4,9,9,4,7
+FBgn0033502,78,145,73,81,73,37,45
+FBgn0033504,2148,4616,1921,1863,2487,1160,1319
+FBgn0033507,437,803,233,284,642,227,295
+FBgn0033508,1,2,0,0,0,0,0
+FBgn0033512,0,0,0,0,0,0,0
+FBgn0033513,0,0,0,0,0,0,0
+FBgn0033515,0,0,0,0,0,0,0
+FBgn0033516,0,0,0,0,0,0,0
+FBgn0033517,3,2,0,0,1,0,0
+FBgn0033518,9,28,16,7,7,4,5
+FBgn0033519,3,8,8,9,14,9,7
+FBgn0033520,2,13,1,9,0,2,1
+FBgn0033521,0,0,3,1,0,0,2
+FBgn0033523,138,221,52,81,250,72,95
+FBgn0033524,16,35,24,13,53,35,36
+FBgn0033526,601,1042,380,362,702,338,425
+FBgn0033527,105,183,42,67,178,81,70
+FBgn0033528,543,582,225,354,905,356,377
+FBgn0033529,1679,2001,725,968,2264,959,1206
+FBgn0033538,667,902,691,391,737,324,346
+FBgn0033539,781,1318,449,487,1304,663,720
+FBgn0033540,429,617,238,263,806,280,314
+FBgn0033541,20,27,8,12,58,25,25
+FBgn0033542,0,0,0,0,2,0,1
+FBgn0033543,97,123,48,71,126,72,88
+FBgn0033544,651,1272,313,373,1209,358,394
+FBgn0033547,156,252,76,71,231,74,77
+FBgn0033548,250,406,43,79,377,64,44
+FBgn0033549,74,91,33,41,83,42,36
+FBgn0033550,182,270,87,129,240,93,119
+FBgn0033551,895,1661,506,536,1378,464,573
+FBgn0033554,45,61,20,24,56,21,22
+FBgn0033555,10060,2929,2174,5812,7953,4968,4498
+FBgn0033556,237,375,149,165,369,127,144
+FBgn0033557,652,909,276,353,730,274,283
+FBgn0033558,7,9,5,2,9,2,5
+FBgn0033562,1613,2284,768,1021,1602,854,968
+FBgn0033564,0,0,0,0,0,0,0
+FBgn0033566,405,545,194,233,434,232,230
+FBgn0033569,235,376,139,166,379,170,161
+FBgn0033570,723,995,319,445,894,458,447
+FBgn0033571,793,1213,386,551,970,511,586
+FBgn0033572,0,1,0,0,0,0,0
+FBgn0033573,0,1,0,0,0,1,0
+FBgn0033574,0,1,1,0,0,0,0
+FBgn0033578,8,10,4,3,15,2,8
+FBgn0033579,2,10,6,6,13,12,8
+FBgn0033580,0,0,0,0,1,0,0
+FBgn0033581,1181,1902,743,846,1437,721,788
+FBgn0033582,1,2,0,0,0,0,0
+FBgn0033584,478,655,252,310,566,259,286
+FBgn0033587,0,0,0,0,0,0,0
+FBgn0033588,0,0,0,0,0,0,1
+FBgn0033589,0,0,0,0,0,0,0
+FBgn0033590,1,0,0,0,0,0,0
+FBgn0033591,0,0,0,0,0,0,0
+FBgn0033592,0,0,0,0,1,0,1
+FBgn0033593,0,0,1,0,1,0,0
+FBgn0033594,0,0,0,0,0,0,0
+FBgn0033597,0,0,0,0,0,0,0
+FBgn0033598,1,0,1,0,1,0,0
+FBgn0033599,0,0,0,0,0,0,0
+FBgn0033600,0,0,0,0,0,0,0
+FBgn0033601,0,0,0,0,0,0,0
+FBgn0033602,1,6,0,1,0,1,1
+FBgn0033603,0,0,0,0,0,0,1
+FBgn0033605,91,137,41,59,153,37,66
+FBgn0033607,689,966,389,448,899,468,504
+FBgn0033608,649,883,241,347,844,352,390
+FBgn0033609,737,1253,475,477,982,463,473
+FBgn0033610,19,16,7,11,23,8,12
+FBgn0033614,0,0,0,0,0,0,0
+FBgn0033615,362,509,155,209,601,214,176
+FBgn0033616,233,396,134,162,294,143,153
+FBgn0033623,0,1,0,0,0,1,0
+FBgn0033624,748,1054,380,479,680,362,457
+FBgn0033627,94,142,67,51,113,74,85
+FBgn0033628,2,3,1,1,0,2,10
+FBgn0033629,0,0,0,0,0,0,0
+FBgn0033631,14,26,8,9,29,15,10
+FBgn0033633,0,8,1,2,6,2,6
+FBgn0033635,1195,2144,1353,1551,5757,2905,3083
+FBgn0033636,6859,13258,5323,4876,10763,5308,5188
+FBgn0033638,792,1686,757,714,1567,693,756
+FBgn0033639,601,1321,433,462,1040,404,465
+FBgn0033640,0,1,1,0,1,0,1
+FBgn0033644,2,17,34,26,13,20,40
+FBgn0033645,55,79,36,43,95,53,46
+FBgn0033648,1,0,0,0,0,0,1
+FBgn0033649,1141,1622,511,452,963,353,356
+FBgn0033650,0,0,0,0,1,0,0
+FBgn0033651,0,0,0,0,0,0,1
+FBgn0033652,6,7,4,3,13,4,4
+FBgn0033653,396,535,212,276,439,250,276
+FBgn0033654,5,11,3,4,25,4,8
+FBgn0033656,833,1106,425,617,1197,528,630
+FBgn0033657,1,2,4,3,1,2,4
+FBgn0033658,0,1,0,0,0,1,0
+FBgn0033659,0,1,1,1,6,0,2
+FBgn0033661,3234,5785,1802,1692,4498,1699,1458
+FBgn0033663,20277,27842,11639,14233,30558,17243,19325
+FBgn0033665,251,432,146,170,366,144,157
+FBgn0033667,0,1,0,0,0,0,1
+FBgn0033668,9,18,0,1,44,3,0
+FBgn0033669,1244,1699,627,768,1719,808,952
+FBgn0033672,429,652,249,311,721,349,431
+FBgn0033673,281,435,148,168,355,185,182
+FBgn0033674,2,4,0,2,3,0,1
+FBgn0033677,194,246,102,94,317,139,152
+FBgn0033679,0,3,0,0,0,0,0
+FBgn0033680,0,0,0,0,0,0,0
+FBgn0033683,543,827,253,421,670,319,313
+FBgn0033685,28,41,15,18,37,27,21
+FBgn0033686,98,179,57,66,161,66,45
+FBgn0033687,11,5,1,2,11,6,2
+FBgn0033688,7519,10200,3887,4290,8970,4779,4648
+FBgn0033690,296,333,156,183,302,191,220
+FBgn0033691,625,1342,217,291,1238,316,392
+FBgn0033692,350,726,261,302,599,269,316
+FBgn0033693,0,0,0,0,0,0,0
+FBgn0033696,16,33,8,21,47,18,18
+FBgn0033697,16,32,11,11,41,12,18
+FBgn0033698,1412,1845,801,817,2056,931,1019
+FBgn0033699,32237,51097,16944,24681,35343,20264,23711
+FBgn0033701,0,0,0,0,0,0,0
+FBgn0033702,4,5,3,3,10,12,13
+FBgn0033703,0,0,0,0,0,0,0
+FBgn0033704,0,0,0,0,0,0,0
+FBgn0033705,1,0,3,1,0,0,1
+FBgn0033706,32,36,15,11,33,20,20
+FBgn0033707,0,0,0,0,1,1,0
+FBgn0033708,0,1,0,0,1,0,0
+FBgn0033710,3,7,2,2,3,0,5
+FBgn0033712,152,184,53,73,170,44,79
+FBgn0033713,521,718,325,310,643,314,334
+FBgn0033714,2657,3796,1506,1626,3211,1669,1652
+FBgn0033715,292,457,121,167,477,216,232
+FBgn0033716,323,493,147,202,355,157,166
+FBgn0033717,7298,9543,4043,4990,7428,4215,4569
+FBgn0033718,1007,1231,520,498,1445,581,537
+FBgn0033720,3,5,2,5,11,15,13
+FBgn0033721,1,2,0,0,3,1,0
+FBgn0033723,1,3,0,0,2,0,0
+FBgn0033724,118,118,50,83,373,168,220
+FBgn0033725,29,20,10,13,41,30,31
+FBgn0033726,0,0,0,0,0,0,0
+FBgn0033727,0,0,0,0,0,0,0
+FBgn0033728,2,2,3,1,2,1,2
+FBgn0033729,1,0,0,0,0,0,0
+FBgn0033730,4,2,0,1,0,0,2
+FBgn0033731,0,0,0,0,0,0,0
+FBgn0033732,0,0,0,0,0,0,0
+FBgn0033733,4,6,0,2,8,7,10
+FBgn0033734,489,598,243,265,602,277,267
+FBgn0033735,342,455,172,225,442,214,249
+FBgn0033736,4,6,4,2,4,1,4
+FBgn0033737,735,1241,454,471,913,485,511
+FBgn0033738,1436,2231,847,861,2271,1182,1228
+FBgn0033739,562,1138,445,487,1036,468,546
+FBgn0033740,573,832,236,327,927,326,337
+FBgn0033741,2780,4191,1377,1631,3824,1611,1722
+FBgn0033742,2,7,0,3,3,1,2
+FBgn0033744,68,164,9,16,233,24,20
+FBgn0033748,18,38,7,13,49,7,21
+FBgn0033749,152,210,101,124,163,110,110
+FBgn0033750,215,360,128,167,353,167,165
+FBgn0033751,1305,1731,708,898,1896,962,1051
+FBgn0033752,232,429,130,171,375,187,208
+FBgn0033753,1,1,0,0,0,0,0
+FBgn0033754,68,121,13,23,81,14,20
+FBgn0033755,2396,2784,1022,1223,3524,1291,1276
+FBgn0033756,1262,1377,503,569,1534,461,497
+FBgn0033757,256,395,129,137,407,158,178
+FBgn0033760,1,1,3,3,16,6,8
+FBgn0033761,491,787,265,359,1013,367,388
+FBgn0033762,646,961,308,382,860,366,359
+FBgn0033763,100,152,64,66,114,30,62
+FBgn0033764,12,24,11,8,234,107,101
+FBgn0033765,1980,2288,850,990,2435,1227,1241
+FBgn0033766,1540,1971,679,661,1906,825,806
+FBgn0033767,13,32,10,9,28,15,11
+FBgn0033769,131,178,45,73,223,92,103
+FBgn0033770,2,2,1,1,3,1,0
+FBgn0033773,6,9,1,2,8,1,3
+FBgn0033774,2,5,0,2,2,3,1
+FBgn0033775,26,34,11,20,140,63,62
+FBgn0033777,869,1424,522,586,2078,811,846
+FBgn0033778,65,137,40,42,104,42,50
+FBgn0033781,215,336,131,143,258,136,125
+FBgn0033782,165,430,157,190,115,63,86
+FBgn0033783,1324,1805,822,904,1649,931,983
+FBgn0033784,454,786,250,273,620,254,289
+FBgn0033785,127,265,82,93,254,124,137
+FBgn0033786,2716,3626,1638,1949,3633,2394,2642
+FBgn0033787,59,73,24,43,47,46,47
+FBgn0033788,1,1,1,0,0,0,0
+FBgn0033789,0,0,0,0,0,0,0
+FBgn0033791,1,5,1,1,6,1,0
+FBgn0033792,1,3,1,2,4,2,1
+FBgn0033793,1,0,2,2,1,1,0
+FBgn0033794,4,6,0,1,0,1,2
+FBgn0033798,11,28,19,18,15,16,15
+FBgn0033799,203,256,94,113,297,102,140
+FBgn0033802,876,1480,553,535,1130,568,514
+FBgn0033806,348,695,175,220,668,186,232
+FBgn0033807,3,1,1,2,7,3,3
+FBgn0033808,131,146,42,63,152,71,71
+FBgn0033809,318,450,197,224,490,264,358
+FBgn0033810,307,389,150,214,448,203,196
+FBgn0033812,438,700,307,345,728,337,381
+FBgn0033813,102,202,56,84,175,82,93
+FBgn0033814,911,1070,438,480,1144,650,645
+FBgn0033815,3,5,1,2,13,3,7
+FBgn0033816,619,962,293,331,771,353,401
+FBgn0033817,0,0,0,1,0,1,0
+FBgn0033818,0,1,0,0,1,0,0
+FBgn0033819,1,0,0,0,1,0,1
+FBgn0033820,5,5,1,3,11,1,2
+FBgn0033821,11,28,6,5,15,4,2
+FBgn0033826,0,2,1,1,0,0,2
+FBgn0033827,0,2,0,0,1,2,1
+FBgn0033828,0,0,1,0,0,0,0
+FBgn0033830,8,2,1,3,3,0,4
+FBgn0033831,0,0,0,0,0,0,0
+FBgn0033832,0,0,0,0,0,0,0
+FBgn0033834,0,3,0,1,4,0,1
+FBgn0033835,0,0,0,0,0,0,0
+FBgn0033836,175,326,203,197,290,208,254
+FBgn0033842,428,510,235,312,461,255,341
+FBgn0033844,5888,9221,3624,3964,6921,3461,3733
+FBgn0033845,1435,2240,899,955,1988,1083,1139
+FBgn0033846,715,1180,385,407,861,436,478
+FBgn0033848,0,0,0,0,0,0,0
+FBgn0033850,1,5,3,2,2,1,4
+FBgn0033851,0,0,0,0,0,0,0
+FBgn0033853,549,830,298,360,759,392,472
+FBgn0033855,4,8,2,2,5,8,4
+FBgn0033856,0,0,0,0,2,0,0
+FBgn0033857,21,10,6,3,68,17,18
+FBgn0033859,948,1319,552,620,1356,722,745
+FBgn0033860,1,2,0,0,3,2,1
+FBgn0033861,0,0,0,0,0,0,0
+FBgn0033862,0,0,0,0,1,2,0
+FBgn0033863,2,0,0,0,1,0,1
+FBgn0033864,0,0,0,0,6,0,1
+FBgn0033865,0,2,0,1,0,0,0
+FBgn0033866,0,0,0,0,1,0,1
+FBgn0033867,1,0,0,0,1,1,0
+FBgn0033868,0,0,0,0,0,0,0
+FBgn0033869,21,21,7,14,21,13,18
+FBgn0033871,87,155,36,49,145,35,54
+FBgn0033872,8,16,4,6,18,6,13
+FBgn0033873,2,6,2,2,2,3,6
+FBgn0033874,4,10,3,4,6,4,2
+FBgn0033875,1801,4376,1074,1179,5271,1237,1441
+FBgn0033876,94,111,60,55,145,65,74
+FBgn0033879,2112,3181,1252,1588,2338,1469,1580
+FBgn0033880,70,70,26,36,56,31,32
+FBgn0033882,545,800,305,342,734,385,445
+FBgn0033883,273,486,157,239,443,222,236
+FBgn0033884,216,302,107,118,233,126,131
+FBgn0033885,4,12,2,3,17,4,4
+FBgn0033886,1622,2379,1006,1209,2121,1277,1358
+FBgn0033887,14,18,5,15,16,8,5
+FBgn0033888,11,19,13,6,14,4,6
+FBgn0033889,6873,11383,4027,4207,9667,4372,4657
+FBgn0033890,1576,2062,836,1000,1386,889,919
+FBgn0033891,191,314,88,129,293,130,139
+FBgn0033893,15,33,9,5,26,7,9
+FBgn0033897,1566,2466,891,939,2351,1044,1103
+FBgn0033899,654,950,290,332,880,398,400
+FBgn0033900,148,286,72,94,184,109,115
+FBgn0033901,1185,1661,523,640,1851,757,845
+FBgn0033902,7834,10813,4315,5812,9074,5061,5686
+FBgn0033903,255,413,124,146,367,158,179
+FBgn0033904,1,6,5,2,6,3,2
+FBgn0033905,229,364,112,140,358,160,172
+FBgn0033906,1446,1656,586,818,1864,822,915
+FBgn0033907,284,416,107,183,445,168,188
+FBgn0033911,0,1,1,0,1,1,0
+FBgn0033912,34332,47439,17790,28116,43945,24809,28843
+FBgn0033913,8388,11940,4490,4797,4510,2491,2614
+FBgn0033915,1262,2058,703,821,2080,900,918
+FBgn0033916,773,1286,433,494,1035,505,498
+FBgn0033917,29,41,22,16,48,30,28
+FBgn0033918,1957,3054,1095,1283,3153,1424,1594
+FBgn0033919,315,716,239,250,551,317,341
+FBgn0033921,55,52,14,30,58,23,22
+FBgn0033924,330,710,208,250,825,341,378
+FBgn0033925,245,401,141,170,346,177,204
+FBgn0033926,4519,10263,3961,3989,11560,6134,6635
+FBgn0033927,0,4,3,3,7,6,5
+FBgn0033928,786,1433,423,614,1136,499,533
+FBgn0033929,2603,4253,1580,1944,3605,1842,2152
+FBgn0033931,0,1,1,0,1,2,0
+FBgn0033932,1,1,0,0,0,1,2
+FBgn0033933,0,0,0,0,0,0,0
+FBgn0033934,1352,1991,621,836,1788,877,887
+FBgn0033935,357,510,211,257,508,232,240
+FBgn0033936,13,30,6,16,30,5,8
+FBgn0033937,0,0,0,0,0,1,0
+FBgn0033938,0,0,0,0,0,0,0
+FBgn0033939,0,2,1,0,3,0,0
+FBgn0033942,5,3,1,3,10,3,1
+FBgn0033943,4,12,2,1,18,5,10
+FBgn0033945,64,159,49,36,189,46,45
+FBgn0033948,208,368,105,100,321,131,127
+FBgn0033949,22,32,11,14,35,17,17
+FBgn0033950,0,0,0,0,0,0,0
+FBgn0033951,357,676,204,244,529,232,293
+FBgn0033952,0,0,0,0,0,0,0
+FBgn0033953,0,0,0,0,2,0,0
+FBgn0033954,0,0,0,0,0,0,0
+FBgn0033955,0,0,0,0,0,0,0
+FBgn0033957,0,0,0,0,0,0,0
+FBgn0033958,1,2,1,0,1,4,0
+FBgn0033960,28,26,13,16,22,14,16
+FBgn0033961,291,475,167,225,472,208,222
+FBgn0033962,169,286,81,117,269,121,124
+FBgn0033963,5,8,2,6,14,4,8
+FBgn0033968,0,1,1,0,0,0,0
+FBgn0033969,0,1,0,0,0,0,0
+FBgn0033970,0,0,0,1,0,1,0
+FBgn0033971,455,683,240,303,570,251,335
+FBgn0033972,533,1007,321,360,645,337,403
+FBgn0033973,151,161,86,91,151,96,96
+FBgn0033978,287,391,123,164,368,138,156
+FBgn0033979,16,26,8,8,25,9,10
+FBgn0033980,1296,2000,510,674,2290,741,775
+FBgn0033981,3,2,2,2,8,2,2
+FBgn0033982,20,16,5,6,13,4,5
+FBgn0033983,0,0,0,0,3,0,1
+FBgn0033984,753,1207,397,386,1316,531,547
+FBgn0033985,0,1,1,2,4,0,1
+FBgn0033987,15,47,26,29,45,33,43
+FBgn0033988,639,1407,566,544,1424,566,639
+FBgn0033989,468,701,295,301,711,322,376
+FBgn0033990,179,354,96,102,268,116,140
+FBgn0033993,101,138,31,38,142,34,35
+FBgn0033994,185,293,87,89,230,78,102
+FBgn0033995,370,337,128,134,477,141,147
+FBgn0033996,524,648,223,268,791,260,296
+FBgn0033997,2,2,0,1,2,1,0
+FBgn0033998,2122,3417,1266,1309,3065,1454,1493
+FBgn0033999,0,2,0,0,0,0,1
+FBgn0034000,102,332,78,92,236,75,107
+FBgn0034001,135,237,67,92,225,81,100
+FBgn0034002,259,459,153,184,420,184,228
+FBgn0034005,286,354,157,140,521,198,175
+FBgn0034007,2,10,3,4,2,0,4
+FBgn0034008,144,282,52,81,267,77,88
+FBgn0034009,1339,1971,709,786,1757,717,793
+FBgn0034010,724,1366,486,648,461,205,226
+FBgn0034011,50,87,42,38,52,26,30
+FBgn0034012,12,38,8,14,39,15,22
+FBgn0034013,1586,2289,961,979,2733,1432,1560
+FBgn0034020,0,0,0,0,0,0,0
+FBgn0034021,3,15,7,6,28,9,20
+FBgn0034022,2,1,1,0,2,0,0
+FBgn0034023,0,1,0,1,0,0,0
+FBgn0034025,988,1454,558,621,1254,656,710
+FBgn0034027,136,205,47,75,254,65,91
+FBgn0034029,552,739,219,319,1027,386,433
+FBgn0034030,9,17,5,10,22,15,13
+FBgn0034031,1,7,0,1,2,1,4
+FBgn0034032,357,402,158,161,432,150,157
+FBgn0034033,136,240,55,85,201,83,104
+FBgn0034035,515,815,253,346,756,339,369
+FBgn0034037,53,58,30,31,85,57,55
+FBgn0034045,1,2,0,0,1,0,1
+FBgn0034046,1091,1938,632,712,1612,697,765
+FBgn0034047,1,7,3,3,1,1,0
+FBgn0034049,3581,5543,2502,2795,4628,2359,2755
+FBgn0034050,937,1237,410,568,1353,555,672
+FBgn0034051,2799,4156,1606,1842,3817,1931,2220
+FBgn0034052,1,1,1,2,3,3,0
+FBgn0034053,9,12,6,5,14,6,11
+FBgn0034054,121,180,70,75,183,112,125
+FBgn0034056,3,1,1,0,1,0,0
+FBgn0034057,1454,1327,693,860,1399,866,891
+FBgn0034058,385,438,139,200,453,196,227
+FBgn0034059,0,0,0,0,0,0,0
+FBgn0034060,1974,2924,1108,1185,2465,1253,1233
+FBgn0034061,257,417,116,180,366,186,204
+FBgn0034062,124,215,53,64,172,80,98
+FBgn0034063,354,430,176,229,551,267,305
+FBgn0034065,193,260,83,100,217,100,125
+FBgn0034066,1931,3056,1062,1466,2650,1280,1427
+FBgn0034067,95,163,72,82,275,167,175
+FBgn0034068,1522,2566,894,1046,2185,976,1074
+FBgn0034069,0,0,1,0,0,0,0
+FBgn0034070,0,3,2,1,1,2,4
+FBgn0034071,1864,3639,1266,1290,2671,1379,1486
+FBgn0034072,5914,8746,3166,3413,8852,3995,4176
+FBgn0034073,696,1024,344,329,975,297,322
+FBgn0034075,148,227,94,89,193,83,113
+FBgn0034076,9,20,7,1,12,5,2
+FBgn0034081,0,0,0,0,0,0,0
+FBgn0034082,12,43,11,5,42,8,7
+FBgn0034083,1660,2892,1254,1295,2308,1116,1089
+FBgn0034084,265,443,149,199,362,192,259
+FBgn0034085,11,7,7,8,12,4,6
+FBgn0034086,208,504,124,162,409,173,162
+FBgn0034087,4163,5544,2081,2197,5539,2865,2920
+FBgn0034088,291,498,166,206,420,202,231
+FBgn0034089,1677,3172,1156,1328,2469,1188,1378
+FBgn0034091,1120,1339,525,632,1292,607,753
+FBgn0034092,1,1,1,0,1,2,0
+FBgn0034093,238,237,74,131,319,128,152
+FBgn0034094,381,310,138,179,224,123,160
+FBgn0034095,32,36,12,14,35,9,23
+FBgn0034096,0,0,0,0,0,0,0
+FBgn0034097,0,0,0,0,1,0,0
+FBgn0034098,904,1334,428,414,1258,497,504
+FBgn0034099,0,0,0,0,0,0,0
+FBgn0034100,0,0,1,0,0,0,0
+FBgn0034103,0,0,0,0,0,0,0
+FBgn0034104,0,0,0,0,0,0,0
+FBgn0034105,0,0,0,0,0,0,0
+FBgn0034106,0,3,1,0,0,2,0
+FBgn0034109,218,434,134,163,387,163,178
+FBgn0034110,1522,2160,1013,1226,1788,1019,1114
+FBgn0034113,364,859,253,257,798,299,301
+FBgn0034114,361,722,253,283,645,266,301
+FBgn0034117,977,1446,535,681,1618,657,779
+FBgn0034118,751,1329,378,531,1207,509,583
+FBgn0034120,0,0,0,0,1,0,0
+FBgn0034121,0,1,0,2,2,0,0
+FBgn0034122,0,0,0,0,0,0,0
+FBgn0034126,529,732,245,320,894,275,293
+FBgn0034127,29,33,14,24,19,10,6
+FBgn0034128,2,4,2,3,5,1,1
+FBgn0034129,0,0,0,0,0,0,0
+FBgn0034131,0,0,0,0,0,0,0
+FBgn0034132,0,0,1,0,0,0,0
+FBgn0034133,0,0,0,0,0,0,0
+FBgn0034135,0,1,1,1,2,2,0
+FBgn0034136,16,20,6,9,16,5,9
+FBgn0034137,27,32,22,17,27,10,11
+FBgn0034138,18969,31379,9904,14960,23458,13061,14271
+FBgn0034139,22,31,10,16,66,30,41
+FBgn0034140,14,24,5,9,26,19,13
+FBgn0034141,824,799,447,496,1024,500,577
+FBgn0034142,852,1331,454,523,1382,674,780
+FBgn0034143,1,2,0,0,0,1,0
+FBgn0034144,0,1,0,0,0,0,0
+FBgn0034145,2,3,2,1,4,1,0
+FBgn0034151,6,6,2,4,2,6,1
+FBgn0034152,0,0,0,0,0,0,0
+FBgn0034153,0,1,0,0,3,0,0
+FBgn0034154,9,10,4,3,16,6,4
+FBgn0034155,1042,1818,677,631,1477,580,669
+FBgn0034156,3,5,1,1,3,0,1
+FBgn0034157,3,4,0,0,2,2,1
+FBgn0034158,4962,9448,2952,3180,7978,3129,3419
+FBgn0034159,16,42,14,14,16,6,7
+FBgn0034160,38,121,49,30,54,16,20
+FBgn0034162,14,18,4,13,18,9,19
+FBgn0034165,0,0,0,0,0,0,0
+FBgn0034166,64,72,26,38,58,33,48
+FBgn0034168,0,0,0,0,1,0,0
+FBgn0034169,0,0,0,0,0,0,0
+FBgn0034172,268,399,170,190,416,178,220
+FBgn0034173,1,0,1,0,1,0,0
+FBgn0034175,91,100,28,49,81,35,24
+FBgn0034176,2248,2941,1048,1287,2583,1157,1205
+FBgn0034177,138,152,56,71,191,77,76
+FBgn0034179,874,1577,529,669,1442,661,727
+FBgn0034180,2355,3826,1328,1416,3760,1560,1628
+FBgn0034181,1416,2358,836,942,2193,1053,1109
+FBgn0034182,80,148,60,72,142,57,72
+FBgn0034183,1,2,0,0,1,0,0
+FBgn0034184,1019,1767,627,701,1672,758,888
+FBgn0034186,405,614,207,260,509,268,288
+FBgn0034187,55,117,33,40,113,58,44
+FBgn0034191,185,212,79,112,226,89,94
+FBgn0034194,578,677,275,308,720,342,371
+FBgn0034195,2,4,2,0,9,0,1
+FBgn0034196,0,1,0,0,1,0,1
+FBgn0034197,3,3,1,0,7,0,1
+FBgn0034198,1409,3564,998,1487,3658,1400,1628
+FBgn0034199,89,274,63,80,239,104,121
+FBgn0034200,56,196,59,65,238,73,107
+FBgn0034201,0,1,2,0,3,0,1
+FBgn0034202,1,0,1,0,0,1,0
+FBgn0034204,0,0,0,0,0,1,0
+FBgn0034205,0,0,0,0,0,0,0
+FBgn0034206,0,0,1,0,0,0,0
+FBgn0034210,301,450,169,162,399,163,232
+FBgn0034214,197,311,92,109,302,130,131
+FBgn0034215,568,750,248,319,549,307,309
+FBgn0034217,143,169,49,65,161,54,54
+FBgn0034218,2,1,3,2,2,1,1
+FBgn0034219,1336,1123,578,729,1027,440,519
+FBgn0034221,330,244,97,106,169,70,62
+FBgn0034223,945,1213,518,641,1245,643,656
+FBgn0034224,0,0,0,0,0,0,0
+FBgn0034225,61,104,52,55,48,24,15
+FBgn0034228,0,0,0,0,0,0,0
+FBgn0034229,1,2,2,1,3,0,2
+FBgn0034230,1562,2221,781,938,2405,1032,1072
+FBgn0034231,87,167,42,52,161,67,71
+FBgn0034232,195,319,85,118,315,111,111
+FBgn0034237,10019,16670,5631,6790,13106,6130,6839
+FBgn0034238,53,98,51,57,78,40,39
+FBgn0034239,66,129,44,47,76,50,41
+FBgn0034240,2399,4643,1512,1395,3608,1380,1468
+FBgn0034242,177,462,81,108,376,124,95
+FBgn0034243,1313,2255,665,850,2136,816,811
+FBgn0034245,744,402,155,341,882,342,279
+FBgn0034246,3506,5559,1974,1821,5685,2047,2018
+FBgn0034247,5,7,1,2,6,1,4
+FBgn0034248,309,718,189,255,575,206,245
+FBgn0034249,567,797,256,386,993,533,560
+FBgn0034251,8,6,3,6,5,4,1
+FBgn0034253,365,698,240,249,509,242,281
+FBgn0034255,492,1156,241,337,1190,311,390
+FBgn0034258,13022,18236,7471,8906,14876,8539,9464
+FBgn0034259,1205,1361,482,632,1704,761,923
+FBgn0034261,293,499,181,215,535,248,252
+FBgn0034262,9,3,3,3,15,4,1
+FBgn0034263,0,1,0,0,0,0,0
+FBgn0034264,18,22,6,5,26,8,13
+FBgn0034265,335,499,155,219,477,206,213
+FBgn0034266,8,5,1,0,9,5,1
+FBgn0034267,17,25,13,5,16,5,14
+FBgn0034269,1070,1583,581,692,1245,615,712
+FBgn0034270,206,211,71,109,289,123,148
+FBgn0034271,590,861,294,335,889,362,406
+FBgn0034272,5,2,0,1,4,0,3
+FBgn0034274,0,2,1,0,1,0,1
+FBgn0034275,10,9,3,5,7,2,2
+FBgn0034276,3,1,0,1,4,2,2
+FBgn0034277,6216,10020,3215,4063,9714,4356,4702
+FBgn0034278,0,1,0,0,0,0,1
+FBgn0034279,11,18,12,13,28,15,9
+FBgn0034281,11,39,8,3,26,3,9
+FBgn0034282,2728,4606,1353,1528,5316,1592,1857
+FBgn0034283,0,0,0,1,2,0,0
+FBgn0034284,0,0,0,0,1,0,0
+FBgn0034286,0,0,0,0,0,0,0
+FBgn0034288,0,0,0,0,0,0,0
+FBgn0034289,0,0,0,0,0,0,0
+FBgn0034290,8,29,15,21,3,6,9
+FBgn0034291,0,1,0,0,0,0,0
+FBgn0034292,0,0,0,0,0,0,0
+FBgn0034293,0,0,0,0,0,0,0
+FBgn0034294,0,1,0,1,0,1,1
+FBgn0034295,0,0,0,0,0,0,0
+FBgn0034296,0,1,1,0,0,0,0
+FBgn0034299,280,463,116,157,449,139,194
+FBgn0034300,909,1634,475,506,1329,575,590
+FBgn0034301,3,6,3,1,4,9,3
+FBgn0034304,510,801,304,364,775,398,366
+FBgn0034307,266,439,122,162,371,167,179
+FBgn0034308,805,1375,626,593,1001,582,669
+FBgn0034310,1018,1267,539,640,1234,665,668
+FBgn0034312,444,790,269,342,859,351,440
+FBgn0034313,1035,1531,617,633,1426,803,855
+FBgn0034314,125,184,61,71,161,49,56
+FBgn0034315,1299,2187,728,901,1915,889,1045
+FBgn0034317,0,2,0,0,1,0,1
+FBgn0034318,0,1,0,0,0,0,0
+FBgn0034321,10,55,17,8,73,25,21
+FBgn0034322,4,10,3,1,11,3,1
+FBgn0034323,1,13,1,5,4,0,0
+FBgn0034324,1,10,3,0,17,3,1
+FBgn0034325,3,12,5,1,10,2,1
+FBgn0034326,1,25,4,5,7,3,5
+FBgn0034327,1,58,18,14,41,12,12
+FBgn0034328,0,0,0,0,0,0,0
+FBgn0034329,0,0,0,2,0,0,2
+FBgn0034330,0,0,0,0,0,0,0
+FBgn0034331,1,1,0,2,0,1,0
+FBgn0034335,1,1,0,1,3,1,2
+FBgn0034345,1709,2930,901,1101,2731,983,1182
+FBgn0034346,1680,1862,758,845,1867,866,900
+FBgn0034350,0,0,0,0,0,0,0
+FBgn0034351,255,475,145,152,401,201,226
+FBgn0034352,0,0,0,0,0,1,0
+FBgn0034354,228,478,164,259,738,386,488
+FBgn0034355,0,0,0,0,0,0,0
+FBgn0034356,10,17,7,7,21,8,11
+FBgn0034360,126,123,49,76,137,52,74
+FBgn0034361,212,301,143,178,283,193,247
+FBgn0034362,583,762,248,355,854,387,442
+FBgn0034363,0,1,0,0,1,0,2
+FBgn0034364,0,0,0,0,0,0,0
+FBgn0034365,506,737,279,314,565,214,238
+FBgn0034366,311,365,131,141,492,185,216
+FBgn0034367,919,1099,449,555,1085,527,611
+FBgn0034368,1678,2458,789,1006,2303,932,1038
+FBgn0034371,1026,1065,520,625,1003,562,615
+FBgn0034372,1,0,0,0,0,0,0
+FBgn0034374,0,2,0,1,2,0,1
+FBgn0034376,716,1532,616,561,903,455,448
+FBgn0034377,3,8,2,0,4,1,1
+FBgn0034378,809,1555,651,618,989,447,524
+FBgn0034379,150,270,83,111,244,115,146
+FBgn0034380,266,333,136,158,366,176,215
+FBgn0034381,0,0,0,0,0,0,0
+FBgn0034382,1,0,1,0,0,0,0
+FBgn0034383,0,0,0,0,0,0,0
+FBgn0034387,5,5,2,5,2,1,0
+FBgn0034389,137,356,124,104,77,28,36
+FBgn0034390,675,1072,475,610,1293,776,800
+FBgn0034391,29,68,30,25,161,82,89
+FBgn0034392,1553,1957,782,984,1732,862,938
+FBgn0034394,2,4,0,1,6,6,3
+FBgn0034396,272,494,235,261,321,240,265
+FBgn0034397,37,116,76,61,70,39,49
+FBgn0034398,5937,9130,3427,4535,6740,2931,3552
+FBgn0034399,931,941,356,518,1523,571,588
+FBgn0034400,8419,12012,4696,4597,7618,3672,3876
+FBgn0034401,3278,4330,1767,1832,3999,2041,2201
+FBgn0034402,127,216,58,81,154,70,76
+FBgn0034403,40,92,26,46,192,59,78
+FBgn0034405,2105,3203,1153,1458,4926,2135,2387
+FBgn0034406,1,14,0,9,2,3,4
+FBgn0034407,67,27,6,14,33,30,17
+FBgn0034408,184,266,114,107,290,180,239
+FBgn0034410,552,962,378,363,987,434,492
+FBgn0034411,237,302,99,116,294,154,149
+FBgn0034412,0,1,1,0,0,1,0
+FBgn0034413,0,0,0,0,0,0,0
+FBgn0034415,0,0,0,0,0,0,0
+FBgn0034416,0,0,0,0,0,0,0
+FBgn0034417,197,380,147,185,226,125,133
+FBgn0034418,968,1605,642,704,1774,858,1004
+FBgn0034419,612,858,334,386,776,362,373
+FBgn0034420,4439,6256,3028,3200,4751,3037,3318
+FBgn0034421,2128,3291,1554,1614,3426,1839,2062
+FBgn0034422,286,308,104,157,284,132,155
+FBgn0034423,0,0,0,0,0,0,0
+FBgn0034425,449,534,246,280,516,286,329
+FBgn0034426,0,0,0,0,0,0,0
+FBgn0034427,0,0,1,0,0,0,0
+FBgn0034428,0,0,0,0,0,0,0
+FBgn0034429,1,0,0,0,0,0,0
+FBgn0034430,527,677,218,307,872,313,376
+FBgn0034432,1890,2905,1002,1155,2191,1010,1088
+FBgn0034433,558,670,240,285,673,286,339
+FBgn0034434,195,304,130,163,26,9,14
+FBgn0034435,1,4,1,2,2,0,0
+FBgn0034436,2024,2948,994,1214,3197,1400,1471
+FBgn0034437,2,1,1,1,2,0,2
+FBgn0034438,33,64,22,30,242,99,88
+FBgn0034439,5,4,0,4,1,5,0
+FBgn0034440,1,2,1,1,2,1,1
+FBgn0034441,0,1,0,0,1,0,0
+FBgn0034442,60,124,39,42,113,43,33
+FBgn0034443,323,334,124,203,592,146,125
+FBgn0034446,3,3,2,1,4,1,2
+FBgn0034447,1517,1977,729,842,1516,695,793
+FBgn0034451,763,1229,382,448,1291,490,608
+FBgn0034452,62,75,31,23,86,41,45
+FBgn0034454,1,0,0,0,0,0,0
+FBgn0034455,603,864,327,372,705,342,364
+FBgn0034456,0,0,0,0,0,0,0
+FBgn0034457,0,0,0,0,1,0,0
+FBgn0034458,0,0,0,0,1,0,0
+FBgn0034459,0,0,4,0,5,0,1
+FBgn0034460,0,0,0,0,0,0,0
+FBgn0034461,0,0,0,0,0,0,0
+FBgn0034462,0,0,0,0,0,0,0
+FBgn0034463,0,0,0,0,0,0,0
+FBgn0034464,0,0,0,0,0,0,0
+FBgn0034467,7,8,4,4,11,3,7
+FBgn0034468,0,4,2,3,2,1,3
+FBgn0034470,0,0,0,0,0,0,0
+FBgn0034471,0,0,0,0,0,0,0
+FBgn0034472,0,0,0,0,0,0,0
+FBgn0034473,0,3,2,2,1,0,1
+FBgn0034474,1,1,0,0,1,0,0
+FBgn0034475,0,0,0,1,0,0,0
+FBgn0034476,157,373,160,166,183,80,82
+FBgn0034477,1,0,1,0,0,0,0
+FBgn0034478,0,0,0,0,0,0,0
+FBgn0034479,10,21,3,7,25,11,11
+FBgn0034480,1,0,0,0,0,0,0
+FBgn0034481,0,0,0,0,0,0,1
+FBgn0034483,0,0,0,0,0,0,0
+FBgn0034484,0,0,1,2,1,0,0
+FBgn0034485,0,0,0,0,0,0,0
+FBgn0034486,0,0,0,1,1,0,0
+FBgn0034487,6,8,1,5,7,1,3
+FBgn0034488,1299,1815,826,945,1433,964,1115
+FBgn0034489,0,2,1,2,2,2,1
+FBgn0034490,6,10,8,11,14,20,15
+FBgn0034491,1556,2244,877,950,1664,848,962
+FBgn0034493,489,582,198,314,498,248,245
+FBgn0034494,4888,4843,2137,2280,4556,1999,2175
+FBgn0034495,239,295,143,158,297,177,170
+FBgn0034496,596,851,334,380,835,395,439
+FBgn0034497,62,31,15,19,46,10,11
+FBgn0034498,1328,1721,758,876,1633,925,956
+FBgn0034499,0,0,0,0,0,0,0
+FBgn0034500,326,392,104,155,397,152,134
+FBgn0034501,4044,4448,2056,2305,3238,1761,1911
+FBgn0034502,0,0,0,0,2,2,1
+FBgn0034503,336,476,180,256,475,200,268
+FBgn0034504,1584,2222,1115,1117,2071,1248,1174
+FBgn0034505,0,0,0,0,0,0,0
+FBgn0034506,0,0,0,0,0,1,0
+FBgn0034507,0,0,0,0,0,0,0
+FBgn0034509,0,0,0,0,0,0,0
+FBgn0034510,0,0,0,0,0,0,0
+FBgn0034511,0,0,0,0,1,0,0
+FBgn0034512,0,0,0,1,1,0,0
+FBgn0034513,0,0,0,0,0,0,0
+FBgn0034514,0,0,0,0,0,0,0
+FBgn0034515,2,0,0,0,0,0,0
+FBgn0034517,0,0,0,0,0,0,0
+FBgn0034518,0,0,0,0,0,0,0
+FBgn0034519,0,0,0,0,0,0,0
+FBgn0034520,4,6,3,6,10,1,4
+FBgn0034521,633,866,349,430,766,515,500
+FBgn0034523,323,393,151,185,609,244,268
+FBgn0034527,445,763,282,333,603,365,426
+FBgn0034528,454,1222,290,321,1015,266,291
+FBgn0034529,437,599,177,182,690,259,233
+FBgn0034530,125,188,61,89,113,67,58
+FBgn0034532,35,63,18,23,38,16,15
+FBgn0034534,631,1141,407,557,995,447,498
+FBgn0034535,154,178,86,103,178,97,135
+FBgn0034537,557,1165,329,440,884,492,566
+FBgn0034538,0,0,1,0,1,0,0
+FBgn0034539,0,0,2,0,0,0,0
+FBgn0034540,9,12,1,3,10,4,5
+FBgn0034541,0,2,1,0,0,0,0
+FBgn0034542,711,936,374,430,903,428,511
+FBgn0034543,568,859,327,424,742,379,431
+FBgn0034545,0,0,0,0,0,0,0
+FBgn0034546,0,0,0,0,0,0,0
+FBgn0034548,0,1,0,0,0,0,0
+FBgn0034550,0,0,0,0,0,0,0
+FBgn0034551,0,0,0,0,0,0,0
+FBgn0034552,2,1,0,0,1,0,0
+FBgn0034553,0,1,0,0,2,0,2
+FBgn0034554,1,0,0,0,0,0,0
+FBgn0034558,1,11,2,2,4,1,8
+FBgn0034560,0,0,0,0,0,0,0
+FBgn0034563,0,0,0,0,0,0,0
+FBgn0034564,336,549,166,213,612,280,338
+FBgn0034565,1,4,1,1,0,0,2
+FBgn0034566,0,3,0,3,0,1,0
+FBgn0034567,0,0,0,0,0,0,0
+FBgn0034568,19,16,5,4,22,8,15
+FBgn0034569,463,696,245,267,733,336,409
+FBgn0034570,2845,6745,2670,2461,4255,2367,2578
+FBgn0034572,629,1042,378,447,944,419,453
+FBgn0034573,1254,1776,798,928,1367,831,958
+FBgn0034576,986,1329,561,741,1559,782,806
+FBgn0034577,3032,4543,1499,1785,3374,1655,1901
+FBgn0034578,66,76,18,32,95,29,42
+FBgn0034579,151,202,55,77,252,106,117
+FBgn0034580,6,10,3,2,6,8,3
+FBgn0034582,4,8,3,4,3,2,1
+FBgn0034583,2055,3101,1340,1607,1908,1252,1297
+FBgn0034585,849,1317,501,600,966,601,647
+FBgn0034588,1,0,0,1,0,0,1
+FBgn0034590,1757,2757,1298,1311,2209,1207,1388
+FBgn0034592,1,3,2,0,1,0,1
+FBgn0034595,3,25,6,10,23,9,6
+FBgn0034598,2230,4109,1613,1803,3264,1864,1943
+FBgn0034599,284,448,165,203,332,193,227
+FBgn0034601,4,10,1,2,4,0,3
+FBgn0034602,12,28,10,6,15,4,7
+FBgn0034603,518,995,378,319,1199,485,568
+FBgn0034605,17,14,6,10,8,8,3
+FBgn0034606,4,13,6,4,7,2,9
+FBgn0034611,1475,1686,792,983,1874,1040,1152
+FBgn0034612,10,21,9,13,25,12,11
+FBgn0034614,487,658,160,252,601,214,236
+FBgn0034617,207,421,129,126,448,205,190
+FBgn0034618,2384,3611,1373,1674,3009,1612,1777
+FBgn0034622,0,1,1,1,2,1,2
+FBgn0034623,0,0,0,0,1,0,0
+FBgn0034624,0,1,0,0,1,0,1
+FBgn0034626,549,786,292,322,536,287,340
+FBgn0034627,124,146,67,68,170,65,88
+FBgn0034628,731,990,369,492,1054,438,478
+FBgn0034629,86,102,39,52,97,46,62
+FBgn0034631,386,652,203,241,567,223,220
+FBgn0034634,71,179,47,72,138,66,76
+FBgn0034636,13,47,21,18,12,1,3
+FBgn0034638,2632,3288,1300,1639,1725,825,984
+FBgn0034639,17,42,8,9,28,18,18
+FBgn0034641,2436,3466,1312,1462,2902,1500,1562
+FBgn0034642,1,0,0,0,1,0,1
+FBgn0034643,1443,2647,995,1086,1807,982,975
+FBgn0034644,1732,2936,1150,1269,1846,1014,1291
+FBgn0034645,834,1243,485,645,982,695,767
+FBgn0034646,845,1523,490,563,1056,648,678
+FBgn0034647,13,16,5,8,31,18,10
+FBgn0034649,0,0,0,0,0,0,0
+FBgn0034650,262,447,149,213,335,214,218
+FBgn0034651,0,0,0,0,1,0,0
+FBgn0034654,3198,5395,1952,2569,3887,2170,2673
+FBgn0034655,49,48,11,24,47,23,27
+FBgn0034656,39,74,31,22,58,24,26
+FBgn0034657,1140,1357,601,608,1386,864,801
+FBgn0034658,0,0,0,0,0,0,0
+FBgn0034659,0,1,0,0,0,0,0
+FBgn0034660,0,0,0,1,0,1,0
+FBgn0034661,0,0,0,0,0,1,0
+FBgn0034662,5,9,4,8,25,5,8
+FBgn0034663,0,1,1,0,0,0,0
+FBgn0034664,0,0,0,2,1,0,0
+FBgn0034665,0,1,0,0,1,0,0
+FBgn0034666,0,1,0,0,0,0,0
+FBgn0034667,0,0,0,0,0,0,0
+FBgn0034670,3,1,0,1,4,0,2
+FBgn0034671,1,0,0,0,0,0,0
+FBgn0034674,1277,1816,650,754,1565,718,756
+FBgn0034681,0,1,0,0,0,0,0
+FBgn0034683,2,8,5,4,12,0,1
+FBgn0034684,48,73,34,37,82,24,41
+FBgn0034687,14,19,8,6,25,7,6
+FBgn0034688,387,593,196,270,432,221,191
+FBgn0034689,398,616,209,279,604,263,282
+FBgn0034691,2555,3950,1572,1642,2923,1649,1915
+FBgn0034692,3,4,1,1,2,0,0
+FBgn0034693,4,1,5,4,5,1,4
+FBgn0034694,500,893,299,409,560,232,255
+FBgn0034697,1410,2014,760,863,1582,890,900
+FBgn0034700,1,1,1,1,4,1,0
+FBgn0034703,252,362,109,138,366,107,126
+FBgn0034704,347,485,185,259,481,280,254
+FBgn0034705,214,235,98,138,306,134,123
+FBgn0034706,21,44,20,19,35,20,15
+FBgn0034707,444,658,262,319,666,311,411
+FBgn0034708,2345,3136,1296,1411,3289,1579,1643
+FBgn0034709,864,2131,821,1006,1288,831,839
+FBgn0034710,0,1,1,1,1,2,0
+FBgn0034711,0,1,0,0,0,0,0
+FBgn0034712,0,3,0,2,1,0,0
+FBgn0034713,0,0,0,0,3,1,0
+FBgn0034715,0,0,0,0,0,0,0
+FBgn0034716,1,1,1,0,2,1,0
+FBgn0034717,0,0,0,0,0,0,0
+FBgn0034718,172,586,216,272,1173,596,666
+FBgn0034720,6,3,0,1,5,5,3
+FBgn0034721,0,0,0,0,0,0,0
+FBgn0034722,973,1825,581,724,1553,640,677
+FBgn0034723,6,6,3,2,9,3,2
+FBgn0034724,16,27,12,8,28,11,10
+FBgn0034725,0,2,2,0,3,2,0
+FBgn0034726,217,558,99,121,334,97,124
+FBgn0034727,595,790,296,390,690,398,407
+FBgn0034728,1999,3858,1312,1324,3587,1214,1333
+FBgn0034729,77,120,33,49,131,50,46
+FBgn0034730,4,3,6,4,11,4,1
+FBgn0034731,0,1,0,0,0,1,0
+FBgn0034732,2,1,0,0,5,0,1
+FBgn0034733,26,65,27,28,83,29,49
+FBgn0034734,1759,2270,766,818,1850,850,822
+FBgn0034735,725,1172,423,524,882,435,539
+FBgn0034736,366,645,286,271,47,27,29
+FBgn0034737,2,1,0,0,0,0,0
+FBgn0034739,0,1,2,0,0,1,1
+FBgn0034740,0,1,3,2,6,3,4
+FBgn0034741,47,51,18,23,44,30,38
+FBgn0034742,796,1566,552,527,1383,521,577
+FBgn0034743,21473,22277,10684,16235,25646,13658,13719
+FBgn0034744,1061,1650,622,848,1202,680,797
+FBgn0034745,53,94,38,36,65,34,29
+FBgn0034748,371,614,200,278,543,258,292
+FBgn0034750,713,1121,408,559,1058,615,680
+FBgn0034751,21620,40324,12908,18292,15412,8091,8948
+FBgn0034753,7301,10180,4627,6166,11946,7348,8370
+FBgn0034755,2,0,1,0,2,0,1
+FBgn0034756,41,84,34,42,89,39,51
+FBgn0034758,35,94,40,37,54,31,33
+FBgn0034759,8,19,5,9,7,5,7
+FBgn0034761,1326,2572,695,973,2025,943,1083
+FBgn0034763,533,932,287,354,731,314,347
+FBgn0034766,0,0,0,0,2,0,0
+FBgn0034768,0,0,0,1,1,0,0
+FBgn0034769,0,0,0,0,0,0,0
+FBgn0034770,0,0,0,1,0,1,0
+FBgn0034774,0,0,0,0,0,0,0
+FBgn0034776,0,0,0,0,1,0,0
+FBgn0034782,0,0,0,0,1,0,0
+FBgn0034783,0,0,0,1,0,0,0
+FBgn0034784,0,1,0,1,0,0,1
+FBgn0034785,2,7,2,1,3,0,1
+FBgn0034786,836,1055,426,475,955,419,418
+FBgn0034788,1,2,0,2,2,0,0
+FBgn0034789,12,24,0,4,42,3,6
+FBgn0034791,464,988,258,297,765,340,353
+FBgn0034792,2138,3075,1246,1493,2793,1677,1750
+FBgn0034793,511,675,253,373,965,479,606
+FBgn0034794,166,246,60,107,241,99,130
+FBgn0034795,0,0,0,0,0,0,0
+FBgn0034796,0,0,0,0,0,0,0
+FBgn0034797,63,205,66,55,172,91,103
+FBgn0034800,63,145,44,60,92,44,57
+FBgn0034802,6078,15015,4181,4805,12435,5590,5957
+FBgn0034803,296,510,160,223,384,175,192
+FBgn0034804,88,71,29,41,32,13,17
+FBgn0034807,1,1,0,0,0,0,1
+FBgn0034808,6,8,4,3,3,0,1
+FBgn0034809,0,1,0,0,0,0,1
+FBgn0034810,0,1,0,0,2,0,2
+FBgn0034814,334,411,166,225,377,210,230
+FBgn0034816,47,61,28,29,64,51,54
+FBgn0034817,566,837,378,438,701,426,461
+FBgn0034819,0,0,0,0,0,0,0
+FBgn0034820,0,0,0,0,0,0,0
+FBgn0034821,0,0,0,0,0,0,1
+FBgn0034822,0,0,1,3,0,0,1
+FBgn0034824,0,0,0,0,0,0,0
+FBgn0034825,0,0,0,0,0,0,0
+FBgn0034826,0,0,0,0,0,0,0
+FBgn0034827,0,0,0,0,0,0,0
+FBgn0034828,0,1,0,0,0,0,0
+FBgn0034829,0,0,0,1,1,0,0
+FBgn0034833,0,0,0,0,0,0,0
+FBgn0034834,0,1,0,0,0,1,1
+FBgn0034835,0,0,0,0,0,0,0
+FBgn0034837,2,9,0,2,9,0,3
+FBgn0034838,0,0,0,1,1,0,0
+FBgn0034839,0,0,0,0,2,0,0
+FBgn0034840,2,4,3,2,2,2,5
+FBgn0034841,0,0,0,0,0,0,0
+FBgn0034842,0,0,0,0,0,0,0
+FBgn0034844,0,0,0,0,0,0,0
+FBgn0034846,1,0,0,1,1,0,0
+FBgn0034849,428,342,223,260,502,299,371
+FBgn0034850,3,7,5,10,6,8,3
+FBgn0034853,864,1366,482,513,1074,481,521
+FBgn0034854,2443,4404,1647,1708,3774,1735,1947
+FBgn0034856,83,90,40,35,91,34,53
+FBgn0034858,1463,2363,970,1086,1936,1345,1421
+FBgn0034859,720,844,339,399,911,552,523
+FBgn0034860,0,0,1,1,0,0,0
+FBgn0034861,0,2,1,2,0,0,1
+FBgn0034862,0,3,2,0,0,0,0
+FBgn0034863,0,0,0,0,0,0,0
+FBgn0034865,0,0,0,0,0,0,0
+FBgn0034866,0,0,0,0,0,0,0
+FBgn0034867,0,0,0,0,0,0,1
+FBgn0034869,0,0,0,0,0,0,0
+FBgn0034870,3,8,0,1,1,1,1
+FBgn0034871,0,0,0,0,0,0,0
+FBgn0034873,669,1162,403,449,872,445,473
+FBgn0034876,666,1275,418,545,946,587,577
+FBgn0034877,1538,2178,873,1015,2420,1245,1251
+FBgn0034878,1413,2226,960,1072,1870,1131,1219
+FBgn0034879,553,936,329,433,765,456,525
+FBgn0034880,24,38,9,12,43,22,25
+FBgn0034882,0,0,0,0,0,0,0
+FBgn0034883,3,1,0,3,1,1,1
+FBgn0034884,0,0,0,0,0,0,0
+FBgn0034885,100,109,75,58,359,210,239
+FBgn0034886,7134,11551,4995,4867,7340,4277,4573
+FBgn0034887,41,55,28,36,56,35,40
+FBgn0034888,6,4,1,4,17,4,9
+FBgn0034889,1,1,0,1,0,1,0
+FBgn0034893,238,376,120,158,298,158,156
+FBgn0034894,780,1086,462,422,723,308,407
+FBgn0034897,1125,2472,966,1024,583,274,262
+FBgn0034898,6,20,10,7,1,2,2
+FBgn0034899,0,0,0,0,1,0,0
+FBgn0034900,0,0,0,0,0,0,0
+FBgn0034901,0,0,0,0,0,0,0
+FBgn0034902,440,539,222,272,758,269,292
+FBgn0034903,2,5,1,6,4,2,1
+FBgn0034904,0,1,0,0,1,1,1
+FBgn0034906,8,30,8,6,37,13,8
+FBgn0034907,8,5,4,2,5,5,4
+FBgn0034908,499,830,295,405,660,365,374
+FBgn0034909,168,329,125,154,237,156,170
+FBgn0034910,0,0,0,0,0,0,0
+FBgn0034911,1,8,3,3,13,11,10
+FBgn0034913,623,1077,370,486,959,467,514
+FBgn0034914,2898,5417,1874,2127,5117,2743,3073
+FBgn0034915,1042,1777,734,827,1422,902,978
+FBgn0034918,266,415,126,148,354,157,187
+FBgn0034919,230,311,74,128,200,138,124
+FBgn0034920,0,2,1,0,1,1,0
+FBgn0034921,469,683,280,313,509,293,369
+FBgn0034922,972,1454,451,519,1123,492,560
+FBgn0034923,415,792,240,295,653,317,399
+FBgn0034924,22,27,3,11,30,6,13
+FBgn0034925,396,559,189,287,472,264,287
+FBgn0034926,676,1138,469,494,1095,578,572
+FBgn0034928,14,15,9,9,17,13,5
+FBgn0034931,11,8,6,13,13,5,11
+FBgn0034933,382,590,162,197,453,145,190
+FBgn0034935,5,4,3,4,8,8,7
+FBgn0034936,774,1113,410,547,1021,557,679
+FBgn0034937,36,38,10,19,39,24,24
+FBgn0034938,258,324,125,162,377,200,229
+FBgn0034939,622,1021,313,402,795,411,467
+FBgn0034940,264,433,143,202,402,212,240
+FBgn0034942,0,1,0,0,1,0,0
+FBgn0034943,1,1,2,0,1,1,0
+FBgn0034945,167,299,80,110,310,108,105
+FBgn0034946,709,1346,426,478,989,577,685
+FBgn0034948,1535,1884,704,939,2077,914,1003
+FBgn0034950,58,142,51,57,219,97,104
+FBgn0034951,392,666,191,222,518,196,213
+FBgn0034956,50,52,25,31,65,32,43
+FBgn0034957,0,3,1,3,1,0,1
+FBgn0034958,1161,1760,566,548,1667,617,660
+FBgn0034959,385,622,207,226,552,269,319
+FBgn0034961,235,455,142,148,379,170,174
+FBgn0034962,826,1322,404,485,1265,531,606
+FBgn0034963,225,285,67,101,260,119,130
+FBgn0034964,2735,3855,1445,1560,2950,1575,1558
+FBgn0034965,102,142,44,32,167,57,43
+FBgn0034966,78,92,38,46,115,47,45
+FBgn0034967,12807,22250,5562,8218,19367,6816,7919
+FBgn0034968,22458,43528,16039,21345,32843,17255,20143
+FBgn0034970,1471,2567,919,1039,1640,880,911
+FBgn0034971,2127,3270,1228,1511,3032,1423,1618
+FBgn0034972,1,2,5,1,3,0,0
+FBgn0034973,0,1,0,0,1,1,0
+FBgn0034974,3,10,1,1,6,1,3
+FBgn0034975,2419,4202,1465,1375,3321,1570,1483
+FBgn0034976,508,968,359,310,798,338,373
+FBgn0034978,0,0,0,0,4,0,1
+FBgn0034979,1,0,0,1,0,1,1
+FBgn0034982,789,1087,476,596,1068,600,641
+FBgn0034985,359,564,253,278,355,273,246
+FBgn0034986,370,518,206,241,519,260,266
+FBgn0034987,1567,2498,957,926,2135,1024,1050
+FBgn0034988,255,404,143,173,319,183,231
+FBgn0034989,1659,2783,1049,1142,2320,1157,1205
+FBgn0034990,1,0,0,0,0,1,0
+FBgn0034994,0,1,0,3,0,1,0
+FBgn0034996,3,0,1,0,0,0,1
+FBgn0034997,5574,7746,3206,3606,8406,4580,4768
+FBgn0034998,2,3,4,0,4,2,1
+FBgn0034999,4,17,8,5,21,7,8
+FBgn0035000,0,0,0,0,0,0,1
+FBgn0035001,9724,17399,6395,6653,11201,5452,5500
+FBgn0035002,460,696,199,292,576,279,319
+FBgn0035003,0,0,0,0,0,0,0
+FBgn0035004,0,0,0,0,0,0,0
+FBgn0035005,0,0,0,0,0,0,0
+FBgn0035006,0,0,0,0,0,0,0
+FBgn0035007,0,0,1,0,0,0,0
+FBgn0035008,0,1,0,0,0,0,0
+FBgn0035009,0,0,0,0,0,0,0
+FBgn0035010,0,2,0,0,2,0,2
+FBgn0035011,0,0,0,0,0,0,0
+FBgn0035012,0,0,0,0,0,1,0
+FBgn0035014,1,0,0,0,0,1,0
+FBgn0035016,1424,2813,966,961,2136,854,893
+FBgn0035019,1,3,3,0,3,1,2
+FBgn0035020,309,748,230,251,340,158,156
+FBgn0035021,316,592,194,213,501,231,242
+FBgn0035022,0,0,0,0,0,0,0
+FBgn0035023,1498,2926,786,714,1992,637,673
+FBgn0035024,1232,2129,755,862,1706,837,1008
+FBgn0035025,488,816,268,303,824,322,331
+FBgn0035026,641,1040,367,369,858,414,435
+FBgn0035027,458,798,286,300,632,315,345
+FBgn0035028,566,751,250,389,747,305,373
+FBgn0035031,7,10,1,0,11,0,3
+FBgn0035032,1662,3083,808,1206,2395,1216,1094
+FBgn0035033,438,986,394,426,890,404,424
+FBgn0035034,3,2,0,4,12,1,4
+FBgn0035035,508,743,267,335,607,319,403
+FBgn0035036,283,528,175,205,512,238,231
+FBgn0035039,367,590,216,246,556,294,267
+FBgn0035040,5,5,5,1,15,2,1
+FBgn0035041,1,3,1,2,9,4,7
+FBgn0035042,0,0,1,0,1,0,0
+FBgn0035043,0,1,0,0,1,0,1
+FBgn0035044,158,221,62,115,321,125,106
+FBgn0035046,576,820,257,390,796,399,411
+FBgn0035047,275,408,161,162,358,193,204
+FBgn0035049,3265,3596,1598,1466,3379,1819,2003
+FBgn0035050,0,0,0,0,1,1,0
+FBgn0035056,7,7,4,5,6,3,2
+FBgn0035057,2,7,3,6,7,6,3
+FBgn0035059,283,577,203,217,411,230,265
+FBgn0035060,2883,4432,1750,1895,3583,1964,2097
+FBgn0035063,248,469,164,165,345,173,207
+FBgn0035064,328,538,181,224,455,225,239
+FBgn0035065,383,529,173,262,409,234,223
+FBgn0035068,0,0,0,0,0,0,0
+FBgn0035069,0,0,0,0,0,0,0
+FBgn0035070,0,0,0,0,0,0,0
+FBgn0035073,535,788,282,313,928,434,430
+FBgn0035076,15,31,9,22,69,34,46
+FBgn0035077,11,19,11,6,8,13,19
+FBgn0035078,8,22,3,5,15,7,5
+FBgn0035082,278,519,130,196,488,195,184
+FBgn0035083,2984,4279,1548,2235,3190,1425,1843
+FBgn0035084,169,214,116,112,108,61,74
+FBgn0035085,1176,1579,651,785,245,135,150
+FBgn0035086,34,80,38,24,68,21,22
+FBgn0035087,4130,8364,2244,2427,6780,2617,2881
+FBgn0035088,644,1225,315,444,1065,421,464
+FBgn0035089,10,17,2,5,16,6,7
+FBgn0035090,1,5,0,3,2,1,4
+FBgn0035091,450,675,196,282,896,372,411
+FBgn0035092,1,1,1,1,2,3,2
+FBgn0035094,0,1,2,0,1,0,1
+FBgn0035097,6,29,8,5,27,7,9
+FBgn0035099,967,1288,520,591,1535,625,594
+FBgn0035100,14,19,15,9,15,8,7
+FBgn0035101,1390,2519,889,957,2244,1078,1260
+FBgn0035102,580,975,343,406,930,450,526
+FBgn0035103,3,9,0,3,13,5,5
+FBgn0035104,3,11,1,2,13,0,1
+FBgn0035106,3077,5987,2209,2007,4466,1958,1955
+FBgn0035107,961,1386,560,721,1303,726,843
+FBgn0035109,156,268,74,107,311,116,135
+FBgn0035110,370,727,158,239,611,245,279
+FBgn0035111,1135,1813,597,703,1585,723,719
+FBgn0035112,0,3,0,0,0,0,0
+FBgn0035113,76,156,52,64,217,105,119
+FBgn0035120,413,722,174,254,700,313,351
+FBgn0035121,8249,11854,4449,5014,10496,5115,5649
+FBgn0035122,513,571,253,329,615,331,312
+FBgn0035124,3,2,1,0,3,3,0
+FBgn0035131,25,42,23,29,56,21,28
+FBgn0035132,1096,1983,836,916,1369,691,769
+FBgn0035133,2279,3065,1382,1424,2981,1716,1764
+FBgn0035134,10,13,2,4,11,6,10
+FBgn0035136,1177,2216,822,888,1818,917,1053
+FBgn0035137,1215,2197,785,833,1553,747,788
+FBgn0035138,8,6,1,3,3,3,2
+FBgn0035139,0,5,1,1,3,1,1
+FBgn0035140,167,278,128,127,207,153,164
+FBgn0035141,654,911,361,410,688,386,442
+FBgn0035142,20542,37596,15114,13193,26650,14378,14157
+FBgn0035143,8,15,7,4,25,5,12
+FBgn0035144,419,525,195,176,383,199,217
+FBgn0035145,2407,3633,1389,1520,2999,1620,1715
+FBgn0035146,961,1533,491,533,1412,609,680
+FBgn0035147,28829,34981,16909,22099,14993,9755,10833
+FBgn0035148,1150,1808,500,613,2060,749,924
+FBgn0035149,2073,3561,1167,1445,3313,1643,1937
+FBgn0035150,2596,3966,1355,1555,5644,2377,2516
+FBgn0035151,82,166,36,45,218,74,77
+FBgn0035152,235,486,137,183,365,124,167
+FBgn0035153,1662,2940,1174,1262,2267,1230,1416
+FBgn0035154,101,154,54,59,213,85,106
+FBgn0035155,143,197,79,104,187,111,121
+FBgn0035157,14,39,8,17,36,19,20
+FBgn0035158,937,1571,541,654,1639,755,856
+FBgn0035159,202,432,126,156,472,139,190
+FBgn0035160,91,137,69,71,144,79,109
+FBgn0035161,113,149,46,54,151,34,35
+FBgn0035162,19954,21023,10178,11582,20152,12272,12805
+FBgn0035164,434,668,199,277,733,310,329
+FBgn0035165,3840,6544,2197,2703,7686,3147,3781
+FBgn0035166,432,579,209,243,697,274,295
+FBgn0035167,95,92,56,57,163,86,119
+FBgn0035168,17,46,21,21,29,15,29
+FBgn0035169,533,612,236,324,824,338,388
+FBgn0035170,6,18,6,7,18,46,10
+FBgn0035171,35,7,8,2,11,2,4
+FBgn0035173,487,771,317,299,1052,481,509
+FBgn0035176,1,1,1,1,0,0,0
+FBgn0035178,1,0,2,0,9,1,2
+FBgn0035179,0,1,0,0,1,0,1
+FBgn0035181,1708,1952,869,1132,1588,1143,1089
+FBgn0035186,7,6,1,2,11,4,1
+FBgn0035187,1,6,2,4,8,4,4
+FBgn0035189,37,117,48,36,576,404,339
+FBgn0035192,2,0,0,1,2,2,0
+FBgn0035193,0,1,1,0,4,2,0
+FBgn0035194,315,443,224,238,340,182,253
+FBgn0035195,2051,2958,1257,1491,2671,1492,1744
+FBgn0035196,3,6,3,2,3,5,3
+FBgn0035197,0,0,0,0,0,0,0
+FBgn0035198,0,0,0,0,0,0,0
+FBgn0035199,1,2,0,1,1,1,0
+FBgn0035202,988,1732,570,686,1500,681,737
+FBgn0035203,925,1019,456,572,1357,737,907
+FBgn0035204,839,1114,359,439,826,371,378
+FBgn0035205,3048,4848,1827,2018,4181,2072,2214
+FBgn0035206,841,1590,465,597,1349,496,565
+FBgn0035207,3427,4977,1776,2204,5117,2323,2430
+FBgn0035208,35,64,24,25,39,28,28
+FBgn0035209,373,508,166,262,476,260,308
+FBgn0035210,379,522,169,230,593,283,333
+FBgn0035211,114,153,67,82,179,92,125
+FBgn0035213,1317,2216,700,787,1807,669,732
+FBgn0035216,14,60,25,19,58,11,19
+FBgn0035217,0,2,0,0,2,0,0
+FBgn0035218,0,1,0,0,2,0,1
+FBgn0035227,1697,2992,1185,1256,2189,1173,1286
+FBgn0035228,2430,3060,1312,1525,2540,1470,1567
+FBgn0035229,1387,2363,937,1042,2064,1132,1138
+FBgn0035231,80,111,42,47,69,24,30
+FBgn0035232,2391,3265,1327,1497,2116,1076,1175
+FBgn0035233,236,364,116,160,303,139,140
+FBgn0035234,29,34,18,11,36,23,26
+FBgn0035235,733,1459,454,509,1069,436,513
+FBgn0035236,3085,3851,1359,1576,3229,1455,1452
+FBgn0035237,747,1642,687,682,1421,840,926
+FBgn0035238,781,1336,494,588,1159,566,711
+FBgn0035239,0,0,0,0,0,0,0
+FBgn0035240,0,0,0,0,0,0,0
+FBgn0035241,45,117,44,38,68,24,27
+FBgn0035243,345,721,187,255,619,257,319
+FBgn0035244,1781,2592,1121,1451,2122,1219,1333
+FBgn0035245,2,5,1,4,5,0,1
+FBgn0035246,41,116,39,43,99,55,39
+FBgn0035247,721,1188,374,529,880,409,448
+FBgn0035248,59,135,39,43,106,37,53
+FBgn0035249,273,539,177,210,429,182,207
+FBgn0035251,1357,2723,835,1032,1863,934,1081
+FBgn0035252,785,1157,330,452,895,468,491
+FBgn0035253,2128,6430,2546,2663,4754,2739,3015
+FBgn0035254,174,325,118,144,234,133,156
+FBgn0035255,0,0,0,0,0,0,0
+FBgn0035256,0,0,0,1,0,0,0
+FBgn0035257,0,4,2,1,5,0,3
+FBgn0035258,0,1,0,0,0,1,0
+FBgn0035259,0,0,0,0,0,0,0
+FBgn0035260,7,18,7,11,8,4,3
+FBgn0035262,324,696,312,309,492,206,211
+FBgn0035263,20,73,28,31,50,27,16
+FBgn0035264,78,54,25,26,57,34,27
+FBgn0035265,2,0,2,0,3,1,2
+FBgn0035266,328,379,162,219,698,455,516
+FBgn0035267,39,36,20,10,71,45,38
+FBgn0035268,946,1538,555,615,1137,635,701
+FBgn0035270,729,1068,374,422,840,441,415
+FBgn0035271,122,249,48,69,221,82,96
+FBgn0035272,281,431,141,159,383,176,176
+FBgn0035273,2,8,5,3,9,3,0
+FBgn0035279,0,0,0,0,0,0,1
+FBgn0035280,0,0,0,0,0,0,0
+FBgn0035281,1,5,2,1,4,2,4
+FBgn0035282,2,3,3,1,4,2,2
+FBgn0035283,383,764,221,268,502,244,244
+FBgn0035285,650,1205,408,464,1309,665,679
+FBgn0035286,42,72,34,29,52,25,42
+FBgn0035287,91,116,39,46,63,31,31
+FBgn0035289,2,4,2,3,2,1,0
+FBgn0035290,0,1,0,0,1,1,0
+FBgn0035293,0,3,1,0,2,0,2
+FBgn0035294,1193,1964,831,951,1419,892,1031
+FBgn0035295,553,911,279,358,1059,450,496
+FBgn0035296,1155,2079,833,811,1507,769,744
+FBgn0035297,335,683,268,213,467,232,225
+FBgn0035298,811,1051,422,526,1081,578,599
+FBgn0035299,0,0,0,1,1,0,0
+FBgn0035300,1,1,0,0,0,0,1
+FBgn0035308,17,44,19,15,43,21,18
+FBgn0035309,272,314,124,132,315,112,140
+FBgn0035311,28,53,35,22,32,17,28
+FBgn0035312,289,397,179,212,263,133,146
+FBgn0035313,0,1,0,2,1,0,1
+FBgn0035315,3,8,1,1,1,1,0
+FBgn0035316,0,2,1,1,2,1,1
+FBgn0035317,8,37,8,15,21,11,15
+FBgn0035318,606,912,329,423,795,468,498
+FBgn0035321,1928,2039,769,1019,2182,921,875
+FBgn0035323,247,513,155,202,457,213,241
+FBgn0035325,2,1,0,1,4,1,5
+FBgn0035328,1,0,4,1,5,1,6
+FBgn0035329,0,0,0,0,0,0,0
+FBgn0035330,0,0,0,0,0,0,0
+FBgn0035331,1,5,2,5,13,0,2
+FBgn0035332,0,0,0,0,0,1,0
+FBgn0035333,2773,3275,1464,1628,3321,1625,1737
+FBgn0035334,569,1202,371,512,877,450,495
+FBgn0035335,345,446,121,190,496,175,207
+FBgn0035336,452,728,247,293,708,293,270
+FBgn0035337,271,614,130,177,450,170,199
+FBgn0035338,790,2093,716,703,1192,558,587
+FBgn0035343,8,2,6,2,3,2,2
+FBgn0035344,117,199,78,77,53,30,28
+FBgn0035346,844,1273,521,522,1492,704,727
+FBgn0035347,802,1117,462,462,830,397,398
+FBgn0035348,855,1147,375,541,798,415,526
+FBgn0035355,164,219,49,65,217,72,75
+FBgn0035356,149,181,44,51,176,74,83
+FBgn0035357,118,236,45,48,234,50,39
+FBgn0035358,26,51,33,33,55,33,36
+FBgn0035359,45,81,57,51,68,43,47
+FBgn0035360,16,25,13,23,30,18,17
+FBgn0035364,7,7,3,1,3,5,3
+FBgn0035366,0,3,1,2,5,0,3
+FBgn0035367,4,14,11,2,14,7,5
+FBgn0035370,2812,5024,1706,1954,4293,1981,2429
+FBgn0035371,2051,2961,1390,1468,2462,1523,1706
+FBgn0035372,975,1773,539,765,1388,694,796
+FBgn0035374,782,927,377,521,1064,542,578
+FBgn0035375,1259,1604,694,797,1506,784,817
+FBgn0035376,4401,9306,4457,3509,5786,3493,3493
+FBgn0035377,0,23,8,6,10,5,6
+FBgn0035378,6,105,32,28,79,25,31
+FBgn0035379,0,3,2,0,4,1,1
+FBgn0035380,0,0,0,1,0,0,0
+FBgn0035381,0,0,0,0,1,2,1
+FBgn0035382,0,0,0,0,0,0,0
+FBgn0035383,828,1287,456,545,1083,513,589
+FBgn0035384,0,0,0,0,0,0,0
+FBgn0035385,2,2,2,0,3,0,0
+FBgn0035388,1619,2700,1008,1122,2151,1038,1157
+FBgn0035390,1248,1741,607,710,2207,1016,1040
+FBgn0035392,77,96,38,55,108,60,61
+FBgn0035393,326,585,139,259,567,216,308
+FBgn0035397,2574,5395,2163,2222,3958,2219,2570
+FBgn0035398,5,12,2,2,3,3,5
+FBgn0035399,8,12,6,5,9,3,6
+FBgn0035400,2059,2908,983,1113,2475,1110,1161
+FBgn0035401,1236,1487,638,840,1390,710,857
+FBgn0035402,918,1188,476,571,1274,662,684
+FBgn0035403,632,969,498,483,480,265,273
+FBgn0035404,1301,1385,597,858,1551,891,903
+FBgn0035405,618,827,327,411,849,459,527
+FBgn0035407,168,280,84,73,247,94,77
+FBgn0035409,20,25,16,18,32,6,9
+FBgn0035410,391,487,204,185,525,317,327
+FBgn0035411,1467,2476,841,928,2455,1046,1039
+FBgn0035412,4,7,3,4,5,2,3
+FBgn0035413,0,1,0,2,2,3,1
+FBgn0035414,192,394,102,112,431,121,127
+FBgn0035415,260,464,123,162,490,119,145
+FBgn0035416,2499,3552,1302,1517,3187,1546,1596
+FBgn0035420,2872,3741,1354,1378,3687,1559,1581
+FBgn0035421,322,504,198,223,525,271,284
+FBgn0035422,23428,45773,16852,22173,34412,17759,20940
+FBgn0035423,2529,3580,1203,1728,3639,1597,1783
+FBgn0035424,4306,7727,3553,2933,5632,3574,3566
+FBgn0035425,1430,1882,901,1000,1658,882,1022
+FBgn0035426,3,6,1,0,4,1,3
+FBgn0035427,0,4,0,0,3,0,1
+FBgn0035428,0,0,0,0,1,0,0
+FBgn0035429,0,0,0,0,1,1,0
+FBgn0035430,0,0,0,0,2,0,0
+FBgn0035431,1,1,1,1,2,0,4
+FBgn0035432,5314,5825,2624,2976,5109,2876,3319
+FBgn0035434,1,2,1,1,1,1,0
+FBgn0035435,148,155,68,63,161,67,81
+FBgn0035436,0,0,0,0,1,0,0
+FBgn0035437,3251,4743,1939,2212,3814,2190,2354
+FBgn0035438,3823,6498,2168,2839,6444,3059,3693
+FBgn0035439,345,957,334,382,771,395,518
+FBgn0035440,1506,2041,654,795,2227,805,889
+FBgn0035443,179,255,90,102,304,126,125
+FBgn0035444,637,936,373,401,939,381,398
+FBgn0035445,44,158,50,65,161,71,63
+FBgn0035449,1066,1186,457,569,1237,589,635
+FBgn0035452,585,796,259,336,882,363,376
+FBgn0035453,0,2,0,0,0,1,1
+FBgn0035454,6,23,1,2,1,4,1
+FBgn0035455,0,1,0,0,0,0,0
+FBgn0035458,1,1,1,1,2,1,1
+FBgn0035461,138,238,64,63,238,83,79
+FBgn0035462,225,365,113,121,407,140,153
+FBgn0035464,1390,1726,693,782,1972,919,946
+FBgn0035468,3,6,4,4,9,5,0
+FBgn0035469,272,471,136,146,404,153,176
+FBgn0035470,171,261,69,106,218,87,100
+FBgn0035471,1354,1822,756,952,1871,1072,1110
+FBgn0035473,1123,1766,566,704,1408,693,705
+FBgn0035475,103,204,58,68,146,64,91
+FBgn0035476,21,29,10,11,28,10,14
+FBgn0035477,151,239,100,118,205,114,119
+FBgn0035478,0,0,0,0,0,0,0
+FBgn0035479,0,0,0,0,0,0,0
+FBgn0035480,224,347,117,154,327,88,160
+FBgn0035481,4,2,2,3,1,2,6
+FBgn0035482,211,383,144,145,384,150,158
+FBgn0035483,197,237,92,129,235,149,158
+FBgn0035484,29,54,14,21,59,17,12
+FBgn0035486,0,0,0,0,0,0,0
+FBgn0035488,559,1143,370,431,892,363,407
+FBgn0035489,1208,2038,650,861,1735,851,933
+FBgn0035490,1,1,0,0,2,0,1
+FBgn0035491,0,0,0,0,0,0,0
+FBgn0035495,0,0,0,0,0,1,0
+FBgn0035496,293,627,162,225,352,121,148
+FBgn0035497,450,979,383,311,779,321,362
+FBgn0035498,1194,1851,687,720,1736,725,811
+FBgn0035499,6046,15329,4801,5403,13013,5715,6366
+FBgn0035500,5008,9243,3826,3594,5430,2651,2868
+FBgn0035501,11,24,9,13,17,10,6
+FBgn0035504,4,7,4,2,14,4,3
+FBgn0035505,2,2,3,3,6,1,4
+FBgn0035507,1036,1532,613,530,1284,541,501
+FBgn0035508,2,5,1,2,5,1,2
+FBgn0035509,68,142,45,42,82,42,39
+FBgn0035510,8,9,1,4,4,3,3
+FBgn0035511,3,3,0,1,4,1,0
+FBgn0035512,18,11,11,7,19,20,18
+FBgn0035513,22,16,10,16,13,12,10
+FBgn0035514,996,1462,440,447,1200,450,454
+FBgn0035515,256,361,133,157,455,204,226
+FBgn0035517,361,338,173,238,563,275,286
+FBgn0035518,477,538,228,267,578,305,355
+FBgn0035519,733,1068,353,491,963,462,547
+FBgn0035520,227,426,96,156,355,166,193
+FBgn0035521,0,0,0,0,0,0,0
+FBgn0035522,1,5,1,0,5,0,4
+FBgn0035523,21,68,10,24,154,69,39
+FBgn0035524,637,1247,336,453,867,331,416
+FBgn0035525,0,0,0,1,1,0,0
+FBgn0035526,1692,2645,891,1095,1991,941,1118
+FBgn0035528,1428,3073,678,898,2226,762,909
+FBgn0035529,252,348,116,188,300,140,150
+FBgn0035532,239,436,126,147,388,134,189
+FBgn0035533,4254,6109,2349,2532,4541,2302,2589
+FBgn0035534,99,256,53,73,175,74,95
+FBgn0035537,25,42,14,12,66,18,24
+FBgn0035538,3,8,4,3,8,3,2
+FBgn0035539,21,23,3,5,43,22,38
+FBgn0035540,246,466,168,189,345,128,170
+FBgn0035541,609,1273,354,359,910,297,313
+FBgn0035542,348,1470,578,538,513,269,329
+FBgn0035543,0,0,0,1,1,0,1
+FBgn0035544,0,0,0,0,0,0,0
+FBgn0035545,0,0,0,0,0,0,0
+FBgn0035546,0,1,0,0,1,0,0
+FBgn0035547,0,0,0,0,0,0,0
+FBgn0035548,1,0,0,0,0,0,0
+FBgn0035550,0,0,0,1,0,0,0
+FBgn0035551,0,0,0,0,0,0,0
+FBgn0035552,0,0,0,0,0,0,0
+FBgn0035553,0,3,0,1,2,1,3
+FBgn0035554,0,0,0,0,0,0,0
+FBgn0035555,0,0,0,0,0,0,0
+FBgn0035557,15,5,5,4,8,2,1
+FBgn0035558,8197,9843,3667,4134,8475,3596,3812
+FBgn0035562,3,0,1,0,0,1,0
+FBgn0035563,0,1,0,0,0,0,0
+FBgn0035567,0,0,0,0,0,0,0
+FBgn0035568,0,0,0,0,0,0,0
+FBgn0035569,0,0,0,1,0,0,0
+FBgn0035570,0,0,0,0,0,0,0
+FBgn0035571,4,9,3,1,7,2,5
+FBgn0035572,0,0,0,0,0,0,0
+FBgn0035574,1,0,3,1,2,0,0
+FBgn0035575,5,18,5,3,5,2,2
+FBgn0035577,8,18,5,7,23,11,7
+FBgn0035578,0,1,0,0,1,1,1
+FBgn0035581,5,27,8,8,28,11,10
+FBgn0035582,1,2,4,6,5,5,4
+FBgn0035583,0,0,0,1,0,0,0
+FBgn0035584,0,0,0,0,0,0,0
+FBgn0035585,0,0,0,0,0,0,0
+FBgn0035586,764,1168,468,555,946,540,576
+FBgn0035587,5,17,11,5,12,9,11
+FBgn0035588,303,332,117,219,430,213,206
+FBgn0035589,379,736,245,336,492,268,286
+FBgn0035590,200,299,109,156,347,195,206
+FBgn0035591,304,472,160,200,392,213,222
+FBgn0035592,407,438,144,195,526,191,253
+FBgn0035593,456,705,274,352,611,419,430
+FBgn0035594,0,0,0,0,2,0,0
+FBgn0035598,0,6,1,0,5,4,1
+FBgn0035600,3915,5036,2142,2463,4063,2323,2593
+FBgn0035601,3698,4896,1414,1804,5064,1747,2003
+FBgn0035603,527,838,290,411,1012,479,531
+FBgn0035604,0,0,0,0,0,0,0
+FBgn0035607,6,3,2,4,3,2,3
+FBgn0035608,3647,6038,2048,2059,8839,2619,2830
+FBgn0035610,0,5,1,0,1,0,1
+FBgn0035611,0,0,0,0,0,0,0
+FBgn0035612,18,30,13,6,24,5,9
+FBgn0035617,1241,2532,865,790,2202,803,925
+FBgn0035619,1,5,0,3,4,0,2
+FBgn0035620,2,3,0,1,0,2,1
+FBgn0035621,0,0,0,0,1,0,1
+FBgn0035622,2453,2582,1011,1314,3007,1425,1455
+FBgn0035623,720,463,169,210,735,307,331
+FBgn0035624,125,213,57,77,193,87,108
+FBgn0035625,2,4,3,2,1,1,2
+FBgn0035626,49,219,72,92,152,73,86
+FBgn0035627,207,328,88,126,326,101,144
+FBgn0035630,5119,7686,2829,3499,5889,3114,3657
+FBgn0035631,1095,1444,522,623,1331,661,735
+FBgn0035632,340,410,204,223,355,224,231
+FBgn0035636,0,2,0,2,6,1,1
+FBgn0035638,7,2,2,3,9,1,2
+FBgn0035639,803,969,449,561,762,462,612
+FBgn0035640,609,788,217,338,665,332,344
+FBgn0035641,302,516,180,134,614,176,183
+FBgn0035642,202,408,119,138,398,136,167
+FBgn0035643,2,5,4,1,3,1,0
+FBgn0035644,566,768,269,347,460,265,285
+FBgn0035645,0,1,0,0,2,2,2
+FBgn0035647,0,1,0,0,0,0,0
+FBgn0035648,0,1,0,0,0,0,0
+FBgn0035649,2,4,4,3,3,4,0
+FBgn0035656,1,2,1,0,0,1,1
+FBgn0035657,0,0,0,0,0,0,0
+FBgn0035661,0,1,0,0,1,0,0
+FBgn0035663,0,1,0,0,0,0,0
+FBgn0035665,2,7,1,1,4,1,3
+FBgn0035666,0,0,0,0,0,0,0
+FBgn0035667,1,0,1,2,0,2,2
+FBgn0035669,0,3,0,12,5,0,1
+FBgn0035670,73,98,32,57,91,48,47
+FBgn0035673,43,59,15,24,79,32,23
+FBgn0035674,381,503,195,224,629,204,278
+FBgn0035675,224,284,88,112,309,98,93
+FBgn0035676,29,34,17,15,17,9,17
+FBgn0035677,4,5,1,4,3,3,7
+FBgn0035678,139,181,82,71,158,61,58
+FBgn0035679,697,1008,308,435,779,362,395
+FBgn0035685,1,0,0,0,0,2,0
+FBgn0035686,0,1,0,1,1,0,0
+FBgn0035687,0,2,4,0,5,2,0
+FBgn0035688,2037,3735,1252,1352,3091,1294,1504
+FBgn0035689,371,536,169,229,689,262,239
+FBgn0035690,537,882,367,416,759,422,463
+FBgn0035691,60,88,27,28,81,32,37
+FBgn0035692,656,1050,284,357,1055,359,425
+FBgn0035693,16,34,17,28,30,30,38
+FBgn0035694,0,0,0,0,4,0,0
+FBgn0035695,2,4,0,0,3,1,2
+FBgn0035696,0,0,1,0,1,0,1
+FBgn0035697,3,3,0,2,9,1,1
+FBgn0035699,0,0,0,0,0,0,0
+FBgn0035700,0,0,0,0,0,0,0
+FBgn0035701,0,0,0,0,0,0,0
+FBgn0035702,87,153,32,37,105,42,42
+FBgn0035703,197,254,102,116,271,116,103
+FBgn0035704,696,856,339,430,895,378,406
+FBgn0035707,1145,1629,621,722,1431,639,672
+FBgn0035708,1692,2196,924,931,1525,781,867
+FBgn0035709,0,0,0,0,0,0,0
+FBgn0035710,2,19,3,6,55,25,25
+FBgn0035711,0,2,0,0,1,0,0
+FBgn0035713,2995,4710,2080,2069,3560,2340,2580
+FBgn0035714,421,832,237,303,781,341,364
+FBgn0035715,1324,2684,901,1063,1791,956,1113
+FBgn0035718,0,0,0,0,0,0,0
+FBgn0035719,67,149,55,47,118,61,73
+FBgn0035720,6007,10209,4187,4401,8273,4229,4420
+FBgn0035721,254,366,95,122,433,123,113
+FBgn0035722,179,297,63,97,224,92,91
+FBgn0035724,32,48,27,28,23,22,20
+FBgn0035725,301,429,125,197,451,182,217
+FBgn0035726,5170,8369,3112,3980,8077,3833,4252
+FBgn0035727,37,66,25,24,157,85,91
+FBgn0035730,0,0,0,0,0,0,0
+FBgn0035733,2,5,1,1,3,5,2
+FBgn0035734,0,0,0,0,0,0,0
+FBgn0035735,0,0,0,0,0,0,0
+FBgn0035736,0,0,0,2,1,1,0
+FBgn0035737,1,1,0,0,0,1,0
+FBgn0035741,1,4,1,3,3,1,2
+FBgn0035742,0,0,0,0,0,0,0
+FBgn0035743,1,0,0,0,0,0,1
+FBgn0035746,0,3,0,1,2,0,0
+FBgn0035750,0,1,1,0,1,1,1
+FBgn0035751,58,71,29,43,70,33,34
+FBgn0035753,18161,29702,11926,15525,20517,14369,14478
+FBgn0035754,219,316,109,170,300,137,161
+FBgn0035755,0,1,0,1,3,0,2
+FBgn0035756,0,1,0,0,0,1,0
+FBgn0035760,52,55,37,46,105,55,44
+FBgn0035761,558,813,268,344,1261,576,623
+FBgn0035762,490,784,270,334,716,329,352
+FBgn0035763,1760,2713,934,1156,2388,1013,1157
+FBgn0035765,449,816,242,254,1331,591,621
+FBgn0035766,2050,3447,1199,1349,2474,1134,1083
+FBgn0035767,907,1104,428,556,1011,606,659
+FBgn0035768,13,25,6,5,16,6,19
+FBgn0035769,1009,1645,597,628,1127,564,599
+FBgn0035770,383,537,261,244,518,246,234
+FBgn0035771,4312,6412,2568,2965,4909,2839,3234
+FBgn0035772,5129,9397,2544,2921,9710,3330,3845
+FBgn0035776,5,10,2,0,9,3,4
+FBgn0035777,4,17,5,3,9,6,8
+FBgn0035779,3,1,0,3,0,0,0
+FBgn0035780,0,1,1,0,1,0,1
+FBgn0035781,1,2,0,0,1,2,1
+FBgn0035782,3,9,3,1,6,4,1
+FBgn0035785,0,0,0,0,0,0,0
+FBgn0035786,0,0,0,0,0,0,0
+FBgn0035787,1,0,0,0,0,0,0
+FBgn0035788,0,0,0,0,0,0,0
+FBgn0035789,11,92,12,5,9,1,2
+FBgn0035790,0,0,0,2,0,0,0
+FBgn0035791,2,3,0,0,4,1,6
+FBgn0035792,0,0,0,0,0,0,0
+FBgn0035793,3277,5832,2235,2406,4328,2229,2360
+FBgn0035795,8,11,5,5,9,3,4
+FBgn0035797,0,2,0,0,0,0,1
+FBgn0035798,2,3,1,1,0,0,1
+FBgn0035799,0,0,0,0,0,0,0
+FBgn0035800,0,0,0,0,0,0,0
+FBgn0035802,42,176,84,80,108,51,38
+FBgn0035805,250,454,120,177,477,172,208
+FBgn0035806,20,18,5,9,16,5,2
+FBgn0035807,815,1202,518,565,1157,532,578
+FBgn0035811,874,1062,513,674,1950,1143,1257
+FBgn0035812,865,1399,554,562,1469,554,640
+FBgn0035813,0,0,0,0,1,1,0
+FBgn0035815,0,1,2,1,0,1,1
+FBgn0035816,0,0,0,0,0,0,0
+FBgn0035817,0,0,0,0,0,0,0
+FBgn0035823,0,2,1,0,6,0,0
+FBgn0035824,159,247,103,120,211,111,143
+FBgn0035825,597,665,350,384,690,400,489
+FBgn0035827,333,716,137,164,625,203,194
+FBgn0035829,678,929,284,380,1053,436,524
+FBgn0035830,1094,2315,778,894,2008,919,1081
+FBgn0035831,285,406,103,151,345,151,146
+FBgn0035832,86,139,100,92,110,84,70
+FBgn0035833,713,1021,416,434,1118,452,522
+FBgn0035838,164,281,88,85,270,113,103
+FBgn0035839,60,103,30,47,80,47,52
+FBgn0035842,507,873,289,252,862,306,267
+FBgn0035844,49,79,26,27,61,28,27
+FBgn0035845,0,1,0,1,2,0,0
+FBgn0035847,5,2,1,1,3,1,1
+FBgn0035848,420,630,222,267,545,220,230
+FBgn0035849,574,836,277,359,762,371,396
+FBgn0035850,1582,2154,1005,1166,1561,907,1047
+FBgn0035851,835,1166,402,505,1218,542,580
+FBgn0035852,16,21,2,5,22,11,8
+FBgn0035853,785,1458,374,511,1418,489,682
+FBgn0035854,203,309,128,156,289,148,146
+FBgn0035855,20,41,7,13,27,8,9
+FBgn0035856,5,8,9,2,8,3,8
+FBgn0035857,2,10,1,3,6,6,4
+FBgn0035858,0,0,1,0,0,0,0
+FBgn0035859,0,0,0,0,0,0,2
+FBgn0035860,2,1,0,0,0,0,1
+FBgn0035861,0,2,2,1,2,0,1
+FBgn0035865,1,0,0,0,1,1,0
+FBgn0035866,313,479,148,203,443,172,194
+FBgn0035867,1168,1625,555,611,1622,668,718
+FBgn0035868,118,189,46,64,217,58,60
+FBgn0035870,4,5,1,1,7,3,2
+FBgn0035871,2094,2665,971,1406,2824,1153,1427
+FBgn0035872,3435,5376,2512,2556,4582,2677,2635
+FBgn0035873,1,6,3,2,3,2,4
+FBgn0035875,0,0,0,0,0,1,0
+FBgn0035876,220,271,74,101,214,84,101
+FBgn0035877,297,612,223,301,395,194,239
+FBgn0035878,1868,2515,1045,1309,2067,1212,1315
+FBgn0035879,1749,2744,1100,1126,1682,875,982
+FBgn0035880,109,223,86,100,198,100,114
+FBgn0035886,0,0,1,0,0,0,0
+FBgn0035887,0,0,1,0,0,0,0
+FBgn0035888,202,258,146,124,224,127,140
+FBgn0035889,0,0,0,0,0,0,0
+FBgn0035890,274,363,120,153,387,181,188
+FBgn0035891,159,160,78,72,250,140,117
+FBgn0035892,648,959,332,357,948,360,390
+FBgn0035895,3833,8040,2881,3146,7316,3070,3452
+FBgn0035896,493,550,186,258,679,263,266
+FBgn0035898,19,31,31,23,26,20,20
+FBgn0035899,0,0,0,1,0,0,0
+FBgn0035900,228,339,139,162,342,159,195
+FBgn0035901,261,475,136,173,454,206,210
+FBgn0035902,66,89,31,46,104,50,41
+FBgn0035903,147,220,91,89,135,47,63
+FBgn0035904,2726,3128,973,1545,2771,1351,1562
+FBgn0035906,998,1862,520,686,1415,588,661
+FBgn0035907,86,199,45,60,168,61,88
+FBgn0035909,4680,7206,2304,2848,6295,2836,3048
+FBgn0035911,439,711,222,349,566,268,288
+FBgn0035914,5,5,3,3,3,2,4
+FBgn0035915,0,1,2,0,5,4,2
+FBgn0035916,314,644,163,188,594,191,215
+FBgn0035917,2,1,3,0,3,1,2
+FBgn0035918,429,625,270,276,616,296,355
+FBgn0035921,0,3,1,1,3,5,0
+FBgn0035922,1,8,5,5,15,6,3
+FBgn0035923,661,1179,421,436,986,416,388
+FBgn0035924,0,0,0,0,0,0,0
+FBgn0035926,1,2,0,0,1,0,0
+FBgn0035928,0,2,1,0,0,1,0
+FBgn0035929,0,1,0,0,1,0,0
+FBgn0035931,0,1,0,2,2,3,2
+FBgn0035932,13,32,5,17,64,37,37
+FBgn0035933,5,14,3,6,23,12,16
+FBgn0035934,0,5,1,0,0,2,3
+FBgn0035935,2,1,0,0,2,1,1
+FBgn0035936,31,49,18,19,42,23,26
+FBgn0035937,813,1330,542,553,1881,791,918
+FBgn0035938,585,941,410,417,771,394,479
+FBgn0035941,15,10,5,13,21,8,17
+FBgn0035942,201,281,100,108,256,122,108
+FBgn0035943,0,3,1,0,0,1,0
+FBgn0035944,1018,1615,469,603,1305,559,668
+FBgn0035945,825,1290,506,565,1132,581,573
+FBgn0035947,1242,1864,651,852,1697,837,1026
+FBgn0035948,11,16,3,12,22,7,6
+FBgn0035949,67,33,15,17,43,23,29
+FBgn0035950,721,923,384,477,1048,553,613
+FBgn0035951,688,1041,360,497,980,502,530
+FBgn0035952,5,9,3,2,11,2,1
+FBgn0035953,843,1289,451,520,1155,518,535
+FBgn0035954,1,1,1,1,1,2,0
+FBgn0035955,0,1,0,0,1,0,0
+FBgn0035956,0,0,0,0,0,0,1
+FBgn0035957,3,18,6,5,45,12,23
+FBgn0035959,665,1045,365,369,969,368,318
+FBgn0035960,61,67,15,34,70,36,47
+FBgn0035964,395,492,213,220,518,249,279
+FBgn0035965,85,151,33,44,150,56,63
+FBgn0035966,1,3,2,1,6,4,5
+FBgn0035967,2,3,0,2,10,4,1
+FBgn0035968,219,339,122,167,702,304,371
+FBgn0035969,6,8,2,10,34,13,22
+FBgn0035970,0,1,0,0,0,0,0
+FBgn0035971,0,0,0,0,0,0,1
+FBgn0035975,139,228,60,89,257,112,120
+FBgn0035976,364,530,180,249,549,264,248
+FBgn0035977,187,313,94,110,268,96,95
+FBgn0035978,917,1319,467,555,1460,599,680
+FBgn0035980,67,113,26,35,97,31,33
+FBgn0035981,521,854,278,373,680,347,394
+FBgn0035982,1,4,2,0,6,1,1
+FBgn0035983,254,453,166,210,364,182,193
+FBgn0035985,13,22,12,11,27,19,11
+FBgn0035986,699,1093,420,448,1164,525,632
+FBgn0035987,927,1620,509,660,1437,635,650
+FBgn0035988,16,29,16,9,13,13,11
+FBgn0035989,363,701,221,244,566,228,245
+FBgn0035993,496,788,264,296,662,347,409
+FBgn0035995,517,951,375,367,788,467,565
+FBgn0035996,92,163,55,53,205,67,57
+FBgn0035997,865,1428,625,606,1062,576,594
+FBgn0035998,78,96,41,47,94,44,64
+FBgn0035999,100,234,66,69,201,69,75
+FBgn0036000,307,569,160,185,460,203,215
+FBgn0036003,2,0,1,1,0,0,0
+FBgn0036004,2079,4338,1495,1441,3076,1407,1377
+FBgn0036005,233,321,110,134,297,123,155
+FBgn0036007,954,1814,675,721,3087,1293,1170
+FBgn0036008,184,274,87,90,273,72,85
+FBgn0036009,2,2,0,0,0,0,1
+FBgn0036010,1,0,0,0,0,0,1
+FBgn0036013,0,1,0,0,0,1,0
+FBgn0036014,1,2,1,4,1,0,0
+FBgn0036015,1,1,0,0,1,0,0
+FBgn0036016,0,0,0,0,1,1,0
+FBgn0036017,18,31,6,14,22,11,16
+FBgn0036018,515,830,267,284,688,249,263
+FBgn0036019,27,30,9,8,62,16,9
+FBgn0036020,269,568,190,205,455,201,248
+FBgn0036022,4,2,3,5,5,1,2
+FBgn0036023,1,0,1,0,2,2,1
+FBgn0036024,4,5,3,1,2,1,1
+FBgn0036028,161,211,78,96,230,112,119
+FBgn0036029,4,9,4,1,7,1,5
+FBgn0036030,545,871,285,367,788,329,342
+FBgn0036031,2,3,2,0,0,1,3
+FBgn0036032,642,1715,594,598,1090,583,650
+FBgn0036035,477,850,224,298,657,268,302
+FBgn0036036,80,151,29,60,160,61,60
+FBgn0036038,582,746,364,411,677,452,435
+FBgn0036039,345,554,190,216,464,212,240
+FBgn0036040,1,5,1,6,8,2,2
+FBgn0036043,2913,4576,1564,1587,3976,1630,1730
+FBgn0036044,0,0,0,0,0,0,1
+FBgn0036046,0,0,0,0,0,0,0
+FBgn0036052,284,534,189,191,456,231,260
+FBgn0036053,3746,4495,1749,1957,3704,1615,1749
+FBgn0036056,0,0,0,0,0,0,0
+FBgn0036057,0,0,0,0,0,0,0
+FBgn0036058,1683,2605,973,1116,2363,1111,1232
+FBgn0036059,991,1852,560,659,1290,417,487
+FBgn0036062,33,49,21,15,84,21,34
+FBgn0036063,95,203,47,68,153,62,61
+FBgn0036064,0,0,0,0,0,0,0
+FBgn0036066,0,0,0,1,0,0,0
+FBgn0036068,15,39,15,18,19,16,16
+FBgn0036070,0,0,0,0,0,0,0
+FBgn0036072,0,0,0,0,0,0,0
+FBgn0036075,0,0,0,0,2,0,0
+FBgn0036078,0,0,0,0,0,0,0
+FBgn0036080,0,0,0,0,0,0,0
+FBgn0036082,13,30,9,7,30,11,10
+FBgn0036083,8,59,38,6,56,6,3
+FBgn0036085,1,5,4,0,2,3,3
+FBgn0036089,0,1,0,0,0,0,0
+FBgn0036090,243,414,103,146,312,141,167
+FBgn0036091,5,5,2,4,7,3,3
+FBgn0036093,9,13,5,2,5,6,6
+FBgn0036094,8,19,8,5,17,4,5
+FBgn0036096,1046,1553,585,745,1519,821,946
+FBgn0036099,931,1902,546,620,1692,562,728
+FBgn0036101,276,515,148,150,354,95,137
+FBgn0036102,2,6,4,1,1,2,3
+FBgn0036104,694,1146,401,458,1032,494,557
+FBgn0036105,66,94,19,42,135,41,37
+FBgn0036106,1,2,0,1,4,1,1
+FBgn0036107,170,285,45,112,302,67,104
+FBgn0036108,0,0,0,0,0,0,0
+FBgn0036109,0,0,0,1,1,0,1
+FBgn0036110,63,91,49,69,46,32,45
+FBgn0036111,2984,4451,1671,1752,4202,1830,1962
+FBgn0036112,0,0,0,0,0,0,0
+FBgn0036115,2,2,1,2,3,0,2
+FBgn0036116,47,46,28,20,30,18,14
+FBgn0036117,243,281,88,105,353,99,103
+FBgn0036118,89,182,30,57,145,51,53
+FBgn0036121,1658,3065,790,1181,2524,1011,1273
+FBgn0036122,311,499,178,205,459,207,239
+FBgn0036124,887,1445,494,550,1160,475,523
+FBgn0036125,0,3,1,1,7,6,3
+FBgn0036126,136,298,59,82,367,82,77
+FBgn0036128,1,2,1,2,4,1,1
+FBgn0036131,0,0,0,0,0,0,1
+FBgn0036133,847,1018,432,578,899,541,550
+FBgn0036134,1372,2097,814,868,1614,795,980
+FBgn0036135,422,548,258,331,507,339,406
+FBgn0036136,521,806,299,374,775,389,462
+FBgn0036139,1,3,0,4,1,1,2
+FBgn0036141,1477,1863,732,900,1910,1028,1052
+FBgn0036142,86,90,39,42,96,45,44
+FBgn0036143,8,12,3,1,8,3,0
+FBgn0036144,2242,3822,1321,1472,3321,1530,1733
+FBgn0036145,37,66,12,23,38,9,9
+FBgn0036146,50,39,27,29,44,23,25
+FBgn0036147,2159,3109,1125,1372,2379,1106,1221
+FBgn0036150,14,20,6,9,21,13,14
+FBgn0036152,112,383,191,151,289,137,151
+FBgn0036153,47,43,28,15,46,19,19
+FBgn0036154,14,53,20,16,41,12,16
+FBgn0036155,30,171,79,85,82,45,57
+FBgn0036156,0,0,0,0,0,0,0
+FBgn0036157,2,6,1,3,9,4,1
+FBgn0036158,1,0,0,0,0,0,0
+FBgn0036159,402,606,201,241,671,238,282
+FBgn0036160,1,2,1,3,3,1,2
+FBgn0036161,0,2,2,1,2,0,0
+FBgn0036162,4,12,7,3,9,6,4
+FBgn0036164,0,1,0,1,1,0,0
+FBgn0036165,417,1116,328,277,1029,279,285
+FBgn0036168,0,1,1,2,2,0,2
+FBgn0036169,0,0,0,0,0,0,0
+FBgn0036170,0,0,0,0,0,0,0
+FBgn0036173,479,962,229,295,1002,314,347
+FBgn0036176,0,0,0,0,0,0,0
+FBgn0036177,0,0,0,0,0,1,0
+FBgn0036178,0,0,0,0,0,0,0
+FBgn0036179,2,2,1,2,1,1,1
+FBgn0036180,936,1357,595,608,1294,631,689
+FBgn0036181,38,143,118,112,54,57,62
+FBgn0036183,1,0,0,0,0,0,0
+FBgn0036184,283,312,137,169,365,164,189
+FBgn0036186,144,215,82,76,202,90,86
+FBgn0036187,484,675,255,273,561,262,257
+FBgn0036188,352,493,187,257,541,252,303
+FBgn0036191,841,1094,475,499,896,483,482
+FBgn0036192,37,65,15,16,58,14,20
+FBgn0036193,43,71,16,24,94,16,19
+FBgn0036194,1029,1633,673,860,1199,593,750
+FBgn0036195,1,1,0,0,3,1,1
+FBgn0036196,169,304,150,170,200,104,98
+FBgn0036198,104,186,40,70,172,95,127
+FBgn0036199,633,883,375,411,656,333,383
+FBgn0036202,0,2,2,0,5,6,1
+FBgn0036203,0,0,0,1,0,0,0
+FBgn0036204,0,0,0,0,1,0,0
+FBgn0036205,5,7,1,2,12,7,6
+FBgn0036206,1,2,0,4,4,1,3
+FBgn0036207,229,487,133,136,467,153,193
+FBgn0036208,0,1,1,0,0,0,0
+FBgn0036210,125,145,48,78,128,66,73
+FBgn0036211,941,1322,462,606,966,515,579
+FBgn0036212,35,23,10,11,48,20,14
+FBgn0036213,24129,23750,11226,18857,26756,15746,17031
+FBgn0036214,18,41,11,18,36,9,8
+FBgn0036217,0,0,0,0,0,0,0
+FBgn0036218,0,0,0,0,0,0,0
+FBgn0036219,0,0,0,0,0,0,1
+FBgn0036220,0,0,0,0,0,0,0
+FBgn0036221,0,0,0,0,0,0,0
+FBgn0036222,0,0,0,0,0,0,0
+FBgn0036223,0,0,0,0,0,0,0
+FBgn0036224,2,4,2,2,1,2,1
+FBgn0036225,0,0,0,0,0,0,0
+FBgn0036226,0,0,0,0,1,0,0
+FBgn0036227,0,0,0,0,0,0,0
+FBgn0036228,0,0,0,0,0,0,0
+FBgn0036229,2,1,1,0,0,0,0
+FBgn0036230,4,3,0,0,1,0,0
+FBgn0036232,1,0,0,0,0,0,1
+FBgn0036233,2,1,0,0,2,0,0
+FBgn0036234,0,1,0,2,0,0,0
+FBgn0036235,5,8,2,3,6,4,4
+FBgn0036236,0,1,0,1,1,0,1
+FBgn0036237,1261,1876,844,984,1486,1051,1118
+FBgn0036239,1596,2342,765,972,1852,923,1042
+FBgn0036240,344,374,169,208,444,231,244
+FBgn0036242,0,1,0,0,0,0,1
+FBgn0036246,0,0,0,0,0,0,0
+FBgn0036248,370,541,192,194,506,197,226
+FBgn0036249,152,280,90,117,227,113,139
+FBgn0036250,0,1,1,0,0,1,1
+FBgn0036254,430,939,261,275,652,218,249
+FBgn0036255,63,109,14,43,111,18,28
+FBgn0036257,1369,2268,750,869,1547,688,799
+FBgn0036258,4475,7166,2514,3257,6002,3191,3940
+FBgn0036259,8,7,2,3,5,4,4
+FBgn0036260,25,46,15,24,32,25,27
+FBgn0036262,7,19,3,14,16,6,8
+FBgn0036263,457,596,188,246,577,269,278
+FBgn0036264,1,1,1,2,1,1,1
+FBgn0036266,103,116,40,48,189,41,42
+FBgn0036271,650,712,285,358,869,386,429
+FBgn0036272,957,1353,480,592,1523,792,857
+FBgn0036273,142,259,101,102,206,97,110
+FBgn0036274,0,0,0,0,0,0,0
+FBgn0036277,351,510,152,242,656,271,272
+FBgn0036278,0,1,1,3,2,3,3
+FBgn0036279,1309,1626,683,772,1123,670,624
+FBgn0036282,17,13,9,9,27,14,19
+FBgn0036285,0,0,0,1,0,0,0
+FBgn0036286,744,880,384,497,876,427,567
+FBgn0036287,9,24,1,5,26,20,23
+FBgn0036288,125,191,62,75,161,56,82
+FBgn0036289,66,99,38,39,111,45,68
+FBgn0036290,1122,1939,606,850,2414,924,1156
+FBgn0036291,123,147,55,70,201,62,63
+FBgn0036292,213,327,95,134,282,141,163
+FBgn0036294,12,15,4,7,4,2,1
+FBgn0036298,918,1090,488,616,997,568,715
+FBgn0036299,522,710,325,397,1255,710,835
+FBgn0036300,509,573,161,279,629,274,314
+FBgn0036301,372,626,179,250,511,192,238
+FBgn0036302,1322,2485,1016,1091,1801,1031,1132
+FBgn0036305,515,992,309,343,865,317,381
+FBgn0036306,491,510,117,226,571,172,209
+FBgn0036309,1641,2223,768,795,2656,698,702
+FBgn0036310,0,5,4,1,2,0,0
+FBgn0036311,4,9,4,3,12,3,3
+FBgn0036312,612,1160,335,360,854,319,325
+FBgn0036314,807,1021,414,520,987,508,633
+FBgn0036316,5467,5258,2261,2713,7671,3579,3919
+FBgn0036317,530,928,304,350,1022,448,497
+FBgn0036318,2003,3046,1256,1407,2481,1193,1331
+FBgn0036319,9,18,3,6,12,7,8
+FBgn0036320,0,0,0,0,0,0,0
+FBgn0036321,0,1,0,0,0,1,0
+FBgn0036322,0,0,0,0,0,0,0
+FBgn0036323,0,0,0,0,1,0,0
+FBgn0036324,15,20,6,8,43,6,4
+FBgn0036325,0,0,0,0,1,0,0
+FBgn0036327,0,0,0,0,0,0,0
+FBgn0036328,0,0,0,0,0,0,0
+FBgn0036329,0,2,0,1,0,0,0
+FBgn0036330,3,5,3,1,7,0,2
+FBgn0036331,75,109,34,31,116,36,38
+FBgn0036332,794,1224,321,317,1231,278,271
+FBgn0036333,1140,1887,542,576,2031,640,605
+FBgn0036334,1343,2407,734,1037,1589,850,1112
+FBgn0036335,162,206,72,86,275,101,122
+FBgn0036336,443,486,185,227,487,248,275
+FBgn0036337,901,1440,440,555,1017,503,497
+FBgn0036338,26,40,18,14,39,15,17
+FBgn0036340,1775,3013,1280,1310,2659,1526,1522
+FBgn0036341,870,1278,500,606,996,565,587
+FBgn0036342,238,316,86,128,304,100,122
+FBgn0036343,0,0,0,0,0,0,0
+FBgn0036345,0,0,0,0,0,0,0
+FBgn0036346,0,0,0,0,0,0,0
+FBgn0036348,3,15,5,3,4,0,2
+FBgn0036349,0,0,0,0,0,0,0
+FBgn0036350,0,0,0,0,0,0,0
+FBgn0036351,1,2,0,0,4,3,0
+FBgn0036352,3,0,1,0,1,2,5
+FBgn0036353,507,512,249,271,789,343,370
+FBgn0036354,1452,1699,885,1000,1408,771,853
+FBgn0036356,136,188,64,100,221,101,132
+FBgn0036359,0,1,0,0,0,0,0
+FBgn0036360,0,1,1,0,3,0,0
+FBgn0036361,0,0,0,0,0,0,0
+FBgn0036362,0,0,0,0,0,0,0
+FBgn0036363,3,1,0,0,2,1,1
+FBgn0036364,0,0,3,0,3,1,1
+FBgn0036365,966,1600,629,719,1616,942,970
+FBgn0036366,230,314,105,154,295,128,204
+FBgn0036367,0,2,0,0,1,1,1
+FBgn0036368,56,104,37,54,109,51,56
+FBgn0036369,209,352,131,148,322,142,172
+FBgn0036372,1270,2420,802,903,2520,1069,1158
+FBgn0036373,3536,9149,3984,3926,3075,2156,2278
+FBgn0036374,1441,2300,906,891,1618,1028,1094
+FBgn0036376,2757,4048,1472,1720,3323,1646,1760
+FBgn0036377,0,1,0,1,0,1,0
+FBgn0036379,7,19,6,9,7,2,3
+FBgn0036380,0,1,0,0,1,0,0
+FBgn0036381,94,243,110,113,241,86,133
+FBgn0036382,22,62,22,27,57,28,28
+FBgn0036386,264,570,162,179,497,165,219
+FBgn0036389,2292,4172,1480,1527,4274,1961,2138
+FBgn0036390,2,0,0,0,2,0,0
+FBgn0036391,1,3,0,1,1,0,0
+FBgn0036393,0,0,0,0,1,0,0
+FBgn0036394,0,0,0,0,0,0,0
+FBgn0036395,54,156,33,53,111,42,54
+FBgn0036396,99,185,63,74,160,68,87
+FBgn0036397,289,327,151,163,343,218,242
+FBgn0036398,5275,10021,4062,3181,7157,3421,3299
+FBgn0036402,2028,2569,1001,1166,2600,1197,1348
+FBgn0036403,0,0,0,0,0,0,0
+FBgn0036405,326,536,170,245,384,277,302
+FBgn0036406,89,238,62,59,177,63,71
+FBgn0036410,17,39,14,8,36,16,8
+FBgn0036411,2,0,0,0,0,1,1
+FBgn0036414,0,1,0,0,0,0,0
+FBgn0036415,1,0,1,0,0,0,0
+FBgn0036416,2,2,0,1,1,1,1
+FBgn0036417,0,0,0,0,0,0,0
+FBgn0036419,9,15,6,7,5,4,3
+FBgn0036421,0,0,0,0,0,0,0
+FBgn0036422,4,7,6,1,4,2,2
+FBgn0036423,104,122,44,71,147,66,73
+FBgn0036426,0,0,0,0,0,0,0
+FBgn0036427,0,0,0,0,0,0,0
+FBgn0036428,139,382,116,122,282,87,99
+FBgn0036433,46,92,22,22,60,28,27
+FBgn0036436,0,0,0,0,0,0,0
+FBgn0036437,0,0,0,0,0,0,0
+FBgn0036438,0,0,0,0,0,0,0
+FBgn0036439,0,0,0,0,0,0,0
+FBgn0036440,0,0,0,0,1,0,1
+FBgn0036441,0,0,0,0,0,0,0
+FBgn0036442,3,7,5,2,4,2,1
+FBgn0036443,1,5,2,2,11,2,4
+FBgn0036446,613,927,340,334,1026,378,415
+FBgn0036447,2,12,0,1,1,1,3
+FBgn0036448,3517,6513,2288,2260,5475,2481,2563
+FBgn0036449,1527,2743,893,989,3199,1307,1502
+FBgn0036450,1132,1823,675,796,1493,856,938
+FBgn0036451,3122,7999,3239,3127,6127,3115,3396
+FBgn0036454,388,1489,703,636,989,517,605
+FBgn0036459,0,1,0,0,0,0,0
+FBgn0036460,843,1196,430,595,884,435,511
+FBgn0036461,10,25,6,6,26,5,6
+FBgn0036462,735,950,351,444,1039,491,575
+FBgn0036463,583,1033,413,468,1180,524,516
+FBgn0036465,0,1,0,1,1,0,1
+FBgn0036466,0,6,1,1,4,0,0
+FBgn0036467,1,1,0,2,1,1,0
+FBgn0036468,2,2,0,1,2,0,0
+FBgn0036469,0,0,0,0,1,0,0
+FBgn0036470,0,3,1,1,0,0,1
+FBgn0036471,0,0,0,0,0,0,0
+FBgn0036474,1,2,1,2,3,1,1
+FBgn0036476,314,572,171,166,461,214,202
+FBgn0036478,1517,2201,749,883,1696,775,852
+FBgn0036479,1,9,2,2,7,4,4
+FBgn0036480,594,1024,375,448,1041,494,550
+FBgn0036481,13,17,8,7,25,12,17
+FBgn0036482,1,1,1,1,4,0,2
+FBgn0036483,403,746,256,259,702,260,315
+FBgn0036484,984,1536,523,688,1299,699,730
+FBgn0036485,10,13,0,6,11,5,3
+FBgn0036486,1415,2060,756,762,1967,856,911
+FBgn0036487,868,1385,503,627,1334,665,763
+FBgn0036488,386,773,216,288,770,321,343
+FBgn0036489,459,713,253,307,535,301,337
+FBgn0036490,0,0,0,0,0,0,0
+FBgn0036491,2,0,0,1,1,0,0
+FBgn0036492,0,1,2,0,0,0,0
+FBgn0036493,107,273,103,100,255,74,107
+FBgn0036494,1,4,0,1,3,1,0
+FBgn0036495,0,0,0,0,0,0,0
+FBgn0036496,5,1,1,0,2,1,3
+FBgn0036497,0,0,0,0,0,0,0
+FBgn0036498,3,2,1,0,8,0,1
+FBgn0036499,0,0,0,0,1,0,0
+FBgn0036500,479,688,251,322,624,281,372
+FBgn0036501,668,1009,304,415,848,356,348
+FBgn0036502,137,249,90,97,229,85,111
+FBgn0036503,0,5,2,3,7,5,6
+FBgn0036504,0,0,0,0,0,0,0
+FBgn0036505,1653,2685,784,1025,2434,837,997
+FBgn0036509,1556,2196,732,898,2291,925,999
+FBgn0036510,489,957,243,378,796,374,354
+FBgn0036511,2369,3671,1567,1664,2888,1664,1748
+FBgn0036512,577,680,228,329,744,326,338
+FBgn0036514,658,1216,353,404,1113,369,403
+FBgn0036515,884,1081,379,533,1120,543,679
+FBgn0036516,952,1772,573,738,1456,739,903
+FBgn0036518,3209,6364,2548,2489,4367,2424,2598
+FBgn0036519,306,491,196,226,386,217,236
+FBgn0036520,8,25,9,12,13,8,8
+FBgn0036522,435,869,328,327,782,350,386
+FBgn0036527,0,0,0,0,0,0,0
+FBgn0036528,0,0,0,0,0,0,0
+FBgn0036529,0,0,0,0,1,0,0
+FBgn0036531,0,0,0,0,0,0,0
+FBgn0036532,0,1,1,0,1,0,0
+FBgn0036533,1001,1354,534,599,1442,650,696
+FBgn0036534,2789,4956,1678,1546,4221,1903,1865
+FBgn0036536,183,307,94,130,234,98,108
+FBgn0036537,467,914,210,270,804,231,313
+FBgn0036538,363,610,172,229,611,213,245
+FBgn0036541,0,0,0,0,0,0,0
+FBgn0036542,1,1,0,2,1,1,0
+FBgn0036544,7,8,4,3,10,7,7
+FBgn0036545,374,563,210,247,550,265,295
+FBgn0036546,212,310,133,151,368,187,223
+FBgn0036547,21,61,14,16,48,19,26
+FBgn0036548,5313,7591,3226,3360,7947,3779,3751
+FBgn0036549,238,364,143,182,266,130,174
+FBgn0036550,3,5,0,0,7,1,2
+FBgn0036551,120,177,65,77,153,78,89
+FBgn0036552,16,15,4,5,7,7,7
+FBgn0036553,3,8,3,3,6,3,2
+FBgn0036556,823,2172,504,544,1694,480,546
+FBgn0036557,479,867,269,374,764,353,361
+FBgn0036558,3847,4696,2688,2838,5488,3193,3751
+FBgn0036560,9,17,4,5,74,14,32
+FBgn0036563,0,3,3,0,4,1,0
+FBgn0036564,412,639,232,320,636,358,354
+FBgn0036565,1365,1720,552,560,2431,723,726
+FBgn0036566,3857,4772,1970,2093,5000,2284,2267
+FBgn0036567,807,1246,497,600,1265,604,708
+FBgn0036568,378,672,196,271,573,341,322
+FBgn0036569,266,342,126,137,357,139,129
+FBgn0036570,487,656,215,289,701,322,350
+FBgn0036571,388,619,193,202,664,201,206
+FBgn0036573,113,179,39,65,167,62,67
+FBgn0036574,957,1669,454,556,1217,561,519
+FBgn0036575,32,28,8,11,33,14,17
+FBgn0036576,1610,4307,1892,1778,1461,885,1065
+FBgn0036577,2,2,1,1,1,1,0
+FBgn0036578,388,516,170,207,481,201,178
+FBgn0036579,303,550,184,196,512,213,238
+FBgn0036580,459,550,172,233,683,218,280
+FBgn0036581,311,638,133,195,594,195,183
+FBgn0036583,0,0,0,0,0,0,0
+FBgn0036584,0,1,0,0,0,1,0
+FBgn0036585,0,0,0,0,0,0,0
+FBgn0036586,1,0,0,0,0,0,0
+FBgn0036587,0,5,0,0,1,1,0
+FBgn0036588,0,0,0,0,0,0,0
+FBgn0036589,0,0,0,0,0,0,0
+FBgn0036590,0,0,0,1,1,0,0
+FBgn0036591,0,0,0,0,0,0,0
+FBgn0036592,0,0,0,0,0,0,0
+FBgn0036593,0,1,0,0,0,0,0
+FBgn0036594,0,0,0,0,0,0,0
+FBgn0036595,1,3,0,0,1,0,0
+FBgn0036596,0,0,0,1,0,0,0
+FBgn0036597,0,0,0,0,0,0,0
+FBgn0036598,0,0,0,0,0,0,0
+FBgn0036599,0,0,0,0,0,0,0
+FBgn0036600,0,1,0,0,0,0,0
+FBgn0036601,0,0,0,1,0,0,0
+FBgn0036602,1,0,0,0,0,0,1
+FBgn0036603,0,0,0,0,0,0,0
+FBgn0036605,0,1,0,0,0,0,0
+FBgn0036606,0,0,0,0,0,0,0
+FBgn0036607,0,0,0,0,0,0,0
+FBgn0036608,0,0,0,0,0,0,0
+FBgn0036609,0,0,0,0,0,0,0
+FBgn0036610,1,1,0,1,0,0,0
+FBgn0036612,2,3,2,2,4,3,2
+FBgn0036614,295,567,196,184,473,196,198
+FBgn0036615,236,304,98,129,374,131,193
+FBgn0036616,198,234,83,111,144,47,74
+FBgn0036617,0,1,0,1,1,0,0
+FBgn0036618,0,0,0,0,0,0,0
+FBgn0036619,2,14,1,3,15,2,5
+FBgn0036620,23,66,22,27,94,35,46
+FBgn0036621,2142,3175,1206,1273,2652,1102,1240
+FBgn0036622,89,113,53,54,98,41,71
+FBgn0036623,2899,4166,1531,1846,4116,1837,2133
+FBgn0036624,860,1404,539,475,1190,523,540
+FBgn0036626,2,2,1,1,0,0,1
+FBgn0036627,6,9,2,2,13,2,3
+FBgn0036628,2,1,2,2,3,1,0
+FBgn0036629,109,123,48,58,128,55,58
+FBgn0036637,0,0,0,0,0,0,0
+FBgn0036638,0,0,0,1,0,0,0
+FBgn0036639,1,0,0,0,0,0,0
+FBgn0036640,289,400,155,196,531,225,228
+FBgn0036641,169,285,116,159,479,215,241
+FBgn0036643,331,459,149,270,368,186,191
+FBgn0036646,99,160,122,132,167,174,186
+FBgn0036648,168,274,128,196,239,173,182
+FBgn0036652,6,15,4,6,8,7,8
+FBgn0036654,8,14,10,4,29,5,8
+FBgn0036655,17,29,9,19,33,17,20
+FBgn0036656,0,1,1,5,6,6,1
+FBgn0036659,0,2,1,2,2,1,4
+FBgn0036660,260,395,146,156,420,192,207
+FBgn0036661,1871,3789,1040,1120,2961,1110,1315
+FBgn0036662,498,549,232,282,459,280,319
+FBgn0036663,10896,13344,6579,7023,8601,4734,4832
+FBgn0036665,2,10,5,0,7,5,5
+FBgn0036666,1518,3844,1062,1227,2666,1112,1230
+FBgn0036667,211,526,79,116,538,102,120
+FBgn0036668,2205,4102,1269,1385,3195,1385,1442
+FBgn0036670,2,4,3,0,7,1,1
+FBgn0036671,457,897,275,328,800,371,459
+FBgn0036676,0,0,0,0,1,1,0
+FBgn0036677,1,0,0,1,0,0,0
+FBgn0036678,2,4,1,1,5,2,2
+FBgn0036679,1,1,0,1,2,0,0
+FBgn0036680,2,3,5,0,8,8,6
+FBgn0036681,0,0,1,0,1,1,0
+FBgn0036684,1156,2185,787,805,1006,468,509
+FBgn0036685,1540,2716,943,1258,2551,1198,1414
+FBgn0036686,1882,2831,981,1179,2244,1058,1089
+FBgn0036687,1,7,4,4,7,2,4
+FBgn0036688,376,474,190,248,645,387,421
+FBgn0036689,173,187,70,80,203,76,107
+FBgn0036690,4,4,0,3,6,5,3
+FBgn0036691,348,451,143,242,346,217,273
+FBgn0036695,445,681,199,259,589,251,261
+FBgn0036696,167,238,78,112,270,129,137
+FBgn0036697,637,906,302,361,890,387,434
+FBgn0036698,1,1,2,1,0,3,4
+FBgn0036702,2847,5029,2009,2212,5299,2719,3008
+FBgn0036703,0,0,0,0,0,0,0
+FBgn0036704,0,0,0,0,0,0,0
+FBgn0036705,0,0,0,0,0,0,0
+FBgn0036706,0,2,0,0,2,1,0
+FBgn0036707,1,0,0,0,1,0,0
+FBgn0036708,0,0,0,0,0,0,0
+FBgn0036709,1,0,0,0,1,0,0
+FBgn0036710,925,1385,510,557,1219,565,633
+FBgn0036711,0,0,0,0,0,0,0
+FBgn0036712,0,0,0,0,0,0,0
+FBgn0036713,0,0,0,0,0,0,0
+FBgn0036714,409,776,253,283,711,292,317
+FBgn0036715,0,1,0,0,1,0,1
+FBgn0036716,1,2,0,0,3,1,1
+FBgn0036717,0,0,0,0,0,0,0
+FBgn0036723,45,70,26,23,71,27,33
+FBgn0036725,0,1,1,0,0,1,1
+FBgn0036726,578,870,274,373,874,334,363
+FBgn0036727,6,12,3,5,6,4,3
+FBgn0036728,1847,2348,772,1071,2160,1283,1468
+FBgn0036729,0,2,1,0,0,0,0
+FBgn0036730,1,3,2,1,4,3,0
+FBgn0036731,1,2,1,1,6,2,4
+FBgn0036732,2685,5245,2060,2178,3074,1477,1626
+FBgn0036733,562,827,315,362,731,386,457
+FBgn0036734,1013,1907,835,849,1280,835,811
+FBgn0036735,824,2044,742,646,1653,622,675
+FBgn0036738,1,0,2,1,0,1,0
+FBgn0036740,1105,1465,610,784,1598,725,845
+FBgn0036741,1548,1760,689,804,1598,734,775
+FBgn0036742,50,32,17,14,50,21,19
+FBgn0036745,1057,1710,486,752,1818,684,779
+FBgn0036746,1143,2462,1087,1076,1300,827,925
+FBgn0036747,1,0,1,1,1,0,0
+FBgn0036749,55,80,31,37,58,29,28
+FBgn0036750,1,1,1,1,0,0,0
+FBgn0036751,1,1,1,3,2,0,1
+FBgn0036752,7328,8456,3050,3316,12077,5223,5496
+FBgn0036754,248,359,124,185,315,160,165
+FBgn0036756,0,0,0,0,0,0,0
+FBgn0036757,0,0,0,0,0,0,0
+FBgn0036759,54,64,24,28,57,22,37
+FBgn0036760,252,421,151,187,407,148,191
+FBgn0036761,984,1762,615,720,1419,691,746
+FBgn0036762,4027,4628,2086,2552,3652,2209,2398
+FBgn0036763,594,806,319,392,787,394,430
+FBgn0036764,4127,4651,2028,2591,6566,3313,3677
+FBgn0036765,195,399,137,169,498,190,176
+FBgn0036766,1,3,1,4,1,3,3
+FBgn0036767,0,0,0,0,0,0,0
+FBgn0036768,0,1,0,1,2,1,0
+FBgn0036769,2,9,6,4,12,4,8
+FBgn0036770,2456,3022,1208,1407,2321,1125,1166
+FBgn0036771,199,323,94,133,321,176,160
+FBgn0036772,1064,1679,543,615,1374,553,563
+FBgn0036773,0,1,0,0,1,1,1
+FBgn0036774,552,811,301,376,656,351,458
+FBgn0036775,475,956,318,448,646,324,405
+FBgn0036777,79,148,37,45,98,46,41
+FBgn0036778,2,4,1,2,13,5,2
+FBgn0036780,0,0,0,0,0,0,0
+FBgn0036781,0,0,0,0,0,0,0
+FBgn0036782,2,4,2,2,5,3,0
+FBgn0036783,0,0,0,0,0,1,0
+FBgn0036784,0,0,0,0,0,0,0
+FBgn0036785,0,0,0,0,0,0,0
+FBgn0036786,0,0,0,0,1,0,1
+FBgn0036787,0,0,0,0,0,0,0
+FBgn0036789,0,0,0,0,0,0,0
+FBgn0036790,0,0,0,0,0,0,0
+FBgn0036791,0,0,0,0,0,0,0
+FBgn0036793,0,0,0,0,0,0,0
+FBgn0036794,1,0,0,0,1,0,0
+FBgn0036795,0,1,0,0,0,0,0
+FBgn0036796,0,0,0,0,0,0,0
+FBgn0036799,0,0,0,0,0,0,0
+FBgn0036801,60,68,26,31,25,20,20
+FBgn0036804,203,304,82,124,366,143,167
+FBgn0036805,849,1336,538,626,1170,530,605
+FBgn0036806,472,792,252,309,683,285,332
+FBgn0036807,0,0,0,0,0,0,0
+FBgn0036808,0,0,0,0,0,0,0
+FBgn0036809,26,40,21,19,48,26,36
+FBgn0036810,0,0,0,0,0,0,0
+FBgn0036811,197,236,96,143,354,126,163
+FBgn0036812,84,193,46,54,168,60,45
+FBgn0036813,540,933,371,429,741,354,452
+FBgn0036814,1567,4037,1304,1148,2864,1139,1193
+FBgn0036815,638,907,287,383,747,356,367
+FBgn0036816,5220,6214,2406,2894,5850,2706,2927
+FBgn0036817,37,62,13,21,44,30,36
+FBgn0036818,49,110,31,38,104,37,36
+FBgn0036819,40,67,31,29,77,21,37
+FBgn0036820,60,142,45,47,116,47,50
+FBgn0036821,275,1300,500,485,331,117,147
+FBgn0036822,6,8,0,0,25,4,4
+FBgn0036824,3709,5518,2362,3093,3170,1803,2171
+FBgn0036825,32409,49812,21151,28837,32385,23991,26646
+FBgn0036826,169,373,62,117,284,116,125
+FBgn0036827,260,543,182,193,498,184,228
+FBgn0036828,626,950,382,407,873,381,438
+FBgn0036829,0,0,0,0,0,0,0
+FBgn0036830,0,0,0,0,0,0,0
+FBgn0036831,0,0,0,0,0,0,0
+FBgn0036832,0,0,0,0,0,0,0
+FBgn0036833,0,0,0,0,0,0,0
+FBgn0036834,3,6,6,4,3,3,2
+FBgn0036835,0,0,0,0,1,0,0
+FBgn0036836,1,5,4,4,3,0,1
+FBgn0036837,46,173,49,59,99,54,44
+FBgn0036838,173,231,87,80,263,127,104
+FBgn0036839,0,0,0,0,0,0,0
+FBgn0036842,1573,2082,703,804,2106,840,938
+FBgn0036843,329,254,117,152,437,190,168
+FBgn0036844,1458,2668,1133,1094,2627,1167,1308
+FBgn0036846,548,887,273,374,678,318,354
+FBgn0036847,1142,1545,478,644,1763,680,716
+FBgn0036848,513,570,238,285,620,352,382
+FBgn0036849,57,59,28,37,74,27,39
+FBgn0036850,171,264,89,80,293,123,135
+FBgn0036851,1,0,1,1,0,1,0
+FBgn0036853,183,236,88,132,241,98,143
+FBgn0036856,0,0,0,0,0,0,0
+FBgn0036857,584,941,304,407,613,304,334
+FBgn0036858,0,0,0,0,0,0,0
+FBgn0036859,2,2,0,1,1,0,0
+FBgn0036860,1,0,0,0,1,2,1
+FBgn0036861,0,0,0,0,0,0,0
+FBgn0036862,102,382,155,124,664,261,310
+FBgn0036868,0,0,0,0,0,0,0
+FBgn0036870,0,9,1,4,1,3,3
+FBgn0036871,0,0,0,0,0,0,0
+FBgn0036872,0,2,0,0,3,0,0
+FBgn0036873,0,0,0,0,0,0,0
+FBgn0036874,0,1,0,0,1,0,0
+FBgn0036875,6,8,2,7,13,8,4
+FBgn0036876,1,0,0,0,0,0,0
+FBgn0036877,2,3,2,3,5,3,4
+FBgn0036878,0,0,0,0,0,0,0
+FBgn0036879,0,0,0,0,0,0,0
+FBgn0036880,0,2,0,0,1,0,0
+FBgn0036881,1,1,1,0,0,1,0
+FBgn0036882,41,70,24,15,40,22,20
+FBgn0036886,363,566,184,264,492,202,217
+FBgn0036887,223,359,98,137,347,130,131
+FBgn0036888,1874,2856,1044,1209,2582,1213,1370
+FBgn0036889,140,230,60,92,231,95,100
+FBgn0036890,0,2,0,0,3,0,0
+FBgn0036891,2982,5077,1682,1997,4258,2083,2205
+FBgn0036892,1084,1807,639,662,1755,722,773
+FBgn0036893,162,254,98,100,352,149,172
+FBgn0036895,3,4,2,2,4,1,2
+FBgn0036896,739,1648,565,566,799,312,347
+FBgn0036897,274,439,180,173,471,188,212
+FBgn0036899,1,1,1,1,0,1,1
+FBgn0036900,605,883,314,358,744,317,402
+FBgn0036904,0,0,0,0,0,0,1
+FBgn0036905,0,0,0,0,0,0,0
+FBgn0036906,67,91,25,32,115,33,24
+FBgn0036908,473,846,223,259,781,243,257
+FBgn0036909,107,152,27,67,197,65,83
+FBgn0036910,1,4,4,5,1,4,5
+FBgn0036911,205,304,100,122,309,119,165
+FBgn0036913,2281,3201,1405,1448,2426,1302,1509
+FBgn0036915,786,1270,436,556,937,486,547
+FBgn0036916,233,375,116,162,335,160,190
+FBgn0036918,657,1154,335,465,928,418,507
+FBgn0036919,944,1470,631,735,970,725,885
+FBgn0036920,288,410,128,174,385,178,228
+FBgn0036921,3383,5226,1480,1823,4571,1507,1587
+FBgn0036922,66,81,34,42,90,38,63
+FBgn0036923,3,5,2,1,2,1,5
+FBgn0036924,0,0,0,0,0,0,0
+FBgn0036925,0,0,0,0,0,0,0
+FBgn0036926,80,74,34,20,148,18,12
+FBgn0036927,103,163,52,66,144,43,44
+FBgn0036928,1188,1857,613,926,2061,823,894
+FBgn0036929,604,1021,281,319,1316,304,308
+FBgn0036931,52,98,26,37,112,36,49
+FBgn0036932,310,405,159,173,319,179,214
+FBgn0036934,0,1,0,2,0,1,0
+FBgn0036935,0,1,0,0,1,1,2
+FBgn0036936,0,0,0,0,0,0,0
+FBgn0036937,0,1,0,1,1,0,0
+FBgn0036938,0,0,0,0,0,0,0
+FBgn0036939,0,2,1,1,1,0,0
+FBgn0036940,3,4,3,2,4,0,2
+FBgn0036941,0,0,0,0,0,1,1
+FBgn0036942,22,43,12,20,50,16,14
+FBgn0036945,81,97,48,42,112,75,65
+FBgn0036947,1,0,0,0,0,0,0
+FBgn0036948,0,1,0,1,0,2,1
+FBgn0036949,1,2,1,1,1,2,1
+FBgn0036950,0,0,0,0,0,2,1
+FBgn0036951,1,2,2,1,1,2,1
+FBgn0036952,1,0,0,3,2,0,2
+FBgn0036953,0,1,0,1,0,0,0
+FBgn0036956,0,5,0,0,4,2,0
+FBgn0036958,1629,3226,1227,1235,2094,1246,1365
+FBgn0036959,44,56,15,29,40,17,25
+FBgn0036960,0,0,0,0,0,0,1
+FBgn0036962,0,1,1,1,2,1,0
+FBgn0036964,212,351,101,123,366,154,160
+FBgn0036967,583,1084,258,332,920,334,360
+FBgn0036968,1054,1763,572,710,841,327,397
+FBgn0036969,0,0,3,0,0,0,1
+FBgn0036970,3,3,1,1,1,0,1
+FBgn0036972,2,1,0,0,1,1,2
+FBgn0036973,229,389,141,194,298,146,166
+FBgn0036974,2511,4333,1439,1823,3396,1471,1704
+FBgn0036975,198,288,109,154,236,116,141
+FBgn0036977,1,7,3,6,4,2,3
+FBgn0036978,8,15,10,7,20,3,5
+FBgn0036979,7,9,1,3,8,4,5
+FBgn0036980,805,1320,559,620,1157,594,705
+FBgn0036984,74,137,57,68,195,81,117
+FBgn0036985,2265,6183,1681,1822,1713,791,827
+FBgn0036986,1,1,1,2,2,1,1
+FBgn0036987,178,313,116,147,270,133,140
+FBgn0036988,224,274,99,136,390,112,119
+FBgn0036990,255,503,102,178,359,185,168
+FBgn0036991,141,310,67,87,256,92,85
+FBgn0036992,20,42,14,15,45,19,17
+FBgn0036993,5,9,2,3,10,4,11
+FBgn0036994,227,376,143,167,333,194,193
+FBgn0036995,16,14,14,6,17,12,7
+FBgn0036996,6,4,0,3,11,1,5
+FBgn0036997,56,86,40,47,88,55,53
+FBgn0036998,236,322,66,95,386,99,106
+FBgn0036999,256,414,132,158,413,183,178
+FBgn0037000,67,123,34,44,112,49,56
+FBgn0037001,2341,2606,1217,1575,2325,1519,1671
+FBgn0037003,13,13,5,2,21,1,6
+FBgn0037004,12,9,4,0,17,9,6
+FBgn0037005,20,11,6,7,27,10,4
+FBgn0037007,778,1857,549,631,1529,495,587
+FBgn0037008,120,187,44,77,195,75,68
+FBgn0037009,495,768,212,356,706,301,338
+FBgn0037010,1055,1482,560,644,1260,644,693
+FBgn0037011,326,485,137,192,584,200,271
+FBgn0037012,165,365,84,73,318,70,109
+FBgn0037013,14,24,6,6,20,9,4
+FBgn0037014,0,0,0,0,1,0,0
+FBgn0037015,1,2,1,1,3,0,0
+FBgn0037016,222,600,214,202,634,251,270
+FBgn0037017,25,70,10,19,61,18,9
+FBgn0037018,206,329,111,143,324,143,159
+FBgn0037019,206,278,104,112,340,119,126
+FBgn0037020,422,657,219,292,571,270,283
+FBgn0037021,733,1184,428,471,927,410,429
+FBgn0037022,86,240,61,85,194,83,61
+FBgn0037023,1,2,1,2,0,2,0
+FBgn0037024,292,425,191,248,339,230,253
+FBgn0037025,879,1900,493,468,1837,633,593
+FBgn0037026,1056,1800,633,737,1525,768,938
+FBgn0037027,995,1845,627,671,1675,695,783
+FBgn0037028,356,525,138,200,676,257,362
+FBgn0037030,3,4,3,3,4,4,3
+FBgn0037031,120,114,39,48,133,61,71
+FBgn0037035,2,4,2,1,2,3,1
+FBgn0037036,2,6,2,2,6,1,0
+FBgn0037037,2,16,3,6,22,5,0
+FBgn0037038,1,3,1,1,2,2,0
+FBgn0037039,2,1,0,0,1,0,1
+FBgn0037040,3,7,3,1,8,0,3
+FBgn0037042,2,6,0,1,6,0,1
+FBgn0037044,395,553,249,281,539,317,341
+FBgn0037045,98,133,47,65,167,62,96
+FBgn0037046,16,30,9,8,94,30,18
+FBgn0037050,143,361,105,107,245,96,126
+FBgn0037051,3051,4983,1816,2273,4040,2005,2451
+FBgn0037057,482,536,243,294,493,210,247
+FBgn0037059,0,0,0,0,1,0,0
+FBgn0037060,2,4,0,2,10,0,3
+FBgn0037061,199,348,60,88,326,99,88
+FBgn0037063,559,749,298,405,831,405,459
+FBgn0037064,18,20,10,13,19,10,19
+FBgn0037065,11,17,3,8,9,3,5
+FBgn0037067,0,0,0,1,0,0,0
+FBgn0037068,0,0,0,0,1,0,0
+FBgn0037069,1,0,1,1,3,1,0
+FBgn0037070,270,398,130,178,378,154,143
+FBgn0037071,287,328,116,181,386,154,178
+FBgn0037073,1260,1901,641,770,1466,676,707
+FBgn0037074,3489,5659,2035,2150,4238,1872,1994
+FBgn0037076,213,299,101,136,266,108,127
+FBgn0037078,17,53,16,23,38,17,32
+FBgn0037081,691,1401,400,434,1183,402,445
+FBgn0037082,324,569,160,194,650,201,167
+FBgn0037083,0,0,0,2,1,1,2
+FBgn0037084,256,296,125,141,260,136,141
+FBgn0037085,0,0,0,0,0,0,0
+FBgn0037086,0,0,1,0,2,2,1
+FBgn0037087,201,369,111,140,336,154,179
+FBgn0037090,8,6,1,3,4,2,4
+FBgn0037092,173,219,65,85,297,97,123
+FBgn0037093,1582,2634,994,1100,2073,986,1096
+FBgn0037094,1490,2364,980,1075,1894,1025,1160
+FBgn0037097,901,1792,350,492,1369,509,523
+FBgn0037098,2039,3390,1047,1024,2302,1072,1055
+FBgn0037099,1,0,0,0,0,0,0
+FBgn0037100,1,0,0,1,1,2,0
+FBgn0037101,0,1,1,0,0,0,1
+FBgn0037102,332,628,169,248,585,206,263
+FBgn0037104,0,0,0,0,0,0,0
+FBgn0037105,392,667,145,178,567,196,199
+FBgn0037106,132,229,55,84,220,99,83
+FBgn0037107,7,9,0,2,15,5,3
+FBgn0037108,1392,1975,615,885,1771,750,809
+FBgn0037109,1143,2154,730,800,1854,906,879
+FBgn0037110,254,448,155,184,291,129,194
+FBgn0037114,0,0,0,0,0,0,0
+FBgn0037115,0,0,1,0,0,0,0
+FBgn0037116,955,1614,606,626,1174,547,570
+FBgn0037117,202,353,135,121,342,94,126
+FBgn0037120,681,1099,407,423,1024,409,473
+FBgn0037121,293,492,162,240,437,204,235
+FBgn0037122,4,13,4,5,12,1,7
+FBgn0037123,0,0,0,1,0,0,0
+FBgn0037124,0,0,0,0,0,0,0
+FBgn0037125,0,0,0,0,0,0,0
+FBgn0037126,47,60,26,18,70,27,32
+FBgn0037127,0,0,0,0,1,0,3
+FBgn0037128,0,2,0,0,0,0,0
+FBgn0037129,2,3,2,1,9,1,0
+FBgn0037130,477,670,321,345,786,366,380
+FBgn0037131,8,10,1,5,3,3,6
+FBgn0037133,37,55,14,13,63,11,12
+FBgn0037134,85,217,64,59,193,82,82
+FBgn0037135,5392,6691,3261,3840,6415,3897,4369
+FBgn0037137,3022,4458,1919,1927,3704,2025,2001
+FBgn0037138,1124,1761,588,653,1709,766,844
+FBgn0037139,1,0,0,2,0,1,0
+FBgn0037140,11,24,4,10,24,8,11
+FBgn0037141,358,747,217,271,690,282,266
+FBgn0037142,523,770,282,322,763,349,361
+FBgn0037143,0,1,0,0,7,1,4
+FBgn0037144,94,79,39,47,60,29,56
+FBgn0037146,0,9,0,2,7,2,4
+FBgn0037147,1,2,1,0,2,1,1
+FBgn0037149,229,345,122,161,384,187,224
+FBgn0037150,268,451,123,157,436,121,175
+FBgn0037151,153,238,64,103,243,109,132
+FBgn0037152,0,0,0,0,0,0,0
+FBgn0037153,45,82,40,39,280,140,140
+FBgn0037156,182,319,114,154,241,154,193
+FBgn0037162,0,0,0,0,0,0,0
+FBgn0037163,0,3,1,2,3,2,3
+FBgn0037164,0,0,0,0,0,1,0
+FBgn0037165,0,0,0,0,0,0,0
+FBgn0037166,1,2,0,2,3,3,0
+FBgn0037167,0,0,0,0,0,0,0
+FBgn0037168,0,0,0,0,0,0,0
+FBgn0037169,4,1,0,1,5,7,3
+FBgn0037170,1,3,0,1,1,6,8
+FBgn0037171,0,0,0,0,0,0,0
+FBgn0037172,0,0,0,0,0,0,0
+FBgn0037174,0,1,0,1,1,0,0
+FBgn0037175,0,0,0,0,0,0,0
+FBgn0037176,0,1,0,1,0,0,0
+FBgn0037177,0,0,0,0,0,0,0
+FBgn0037178,0,0,0,0,0,0,0
+FBgn0037179,0,0,0,0,0,0,0
+FBgn0037180,0,0,0,0,0,0,0
+FBgn0037181,1,4,0,0,4,0,1
+FBgn0037182,1627,2651,995,1188,2144,1096,1196
+FBgn0037183,74,126,38,72,98,48,53
+FBgn0037184,152,200,71,95,228,99,87
+FBgn0037185,204,272,109,137,257,106,138
+FBgn0037186,8,33,9,11,18,12,7
+FBgn0037188,353,619,262,215,529,247,278
+FBgn0037191,0,0,2,0,14,8,8
+FBgn0037195,4,11,2,1,2,4,1
+FBgn0037197,2,2,0,1,1,1,2
+FBgn0037199,290,619,138,198,421,162,178
+FBgn0037200,254,369,156,164,388,164,209
+FBgn0037202,309,544,194,275,568,295,319
+FBgn0037203,53,58,23,18,69,34,35
+FBgn0037204,2,3,3,2,2,2,0
+FBgn0037205,695,1020,346,371,927,384,387
+FBgn0037206,491,1004,338,404,905,457,451
+FBgn0037207,3921,6645,2549,2799,5578,2470,2740
+FBgn0037212,52,83,25,11,91,12,25
+FBgn0037213,569,742,318,294,931,450,577
+FBgn0037215,5952,8368,3194,3902,7232,3305,3533
+FBgn0037217,48,79,49,44,68,34,48
+FBgn0037218,2658,3766,1423,1523,3486,1633,1759
+FBgn0037220,1804,2652,997,1227,2209,1165,1301
+FBgn0037222,344,708,241,283,424,152,196
+FBgn0037223,45,82,22,27,8,5,7
+FBgn0037224,6,5,3,3,0,1,0
+FBgn0037225,58,142,38,57,136,59,55
+FBgn0037227,4,2,0,1,4,5,2
+FBgn0037228,13736,23240,6421,8663,25991,9291,10068
+FBgn0037229,41,81,20,39,90,25,26
+FBgn0037230,7,24,9,9,23,8,11
+FBgn0037231,447,1070,330,412,776,326,413
+FBgn0037232,349,461,157,195,457,150,181
+FBgn0037234,674,1192,388,403,1231,445,495
+FBgn0037235,816,1095,303,403,1230,379,458
+FBgn0037236,1239,1820,602,727,1739,690,757
+FBgn0037238,19,46,26,16,19,11,12
+FBgn0037239,1022,1632,604,735,822,389,420
+FBgn0037240,1459,3043,968,979,3856,1473,1631
+FBgn0037241,824,1105,351,454,1108,471,541
+FBgn0037242,618,977,398,426,1018,461,461
+FBgn0037244,321,489,159,227,403,193,216
+FBgn0037245,11841,19831,6969,8020,20786,8341,8867
+FBgn0037248,2309,4011,1158,1236,3085,1132,1159
+FBgn0037249,10987,14924,6845,7769,13237,7804,7804
+FBgn0037250,260,441,128,186,403,186,180
+FBgn0037251,269,295,110,176,376,209,201
+FBgn0037252,2063,3340,1176,1237,2729,1406,1493
+FBgn0037254,6,10,7,2,13,2,5
+FBgn0037255,1013,2264,880,961,1889,924,1024
+FBgn0037260,10,36,5,5,35,6,11
+FBgn0037261,1712,2411,1020,1040,2352,1174,1184
+FBgn0037262,564,1191,338,399,958,497,501
+FBgn0037263,19,16,8,5,17,9,9
+FBgn0037265,166,336,102,112,262,96,127
+FBgn0037270,5929,9348,3519,4831,7206,4604,4911
+FBgn0037273,0,0,0,0,0,0,0
+FBgn0037275,14,15,0,3,37,2,0
+FBgn0037276,0,5,1,1,2,0,1
+FBgn0037279,1494,1728,669,729,1800,701,716
+FBgn0037280,0,1,0,1,2,0,1
+FBgn0037282,1016,1414,578,625,1281,657,717
+FBgn0037283,0,0,0,1,0,0,0
+FBgn0037284,0,0,0,0,0,0,0
+FBgn0037288,0,1,2,4,1,2,0
+FBgn0037290,30,18,10,12,266,88,103
+FBgn0037291,2,2,1,1,3,0,0
+FBgn0037292,0,0,0,0,0,0,2
+FBgn0037293,820,1257,479,604,1160,495,543
+FBgn0037294,0,0,0,0,2,0,0
+FBgn0037295,0,2,1,1,2,0,0
+FBgn0037296,2,12,5,2,14,4,6
+FBgn0037297,312,559,195,252,518,208,265
+FBgn0037298,1362,2099,852,984,2027,1123,1252
+FBgn0037299,505,911,289,362,823,320,363
+FBgn0037301,1069,1557,548,626,1669,726,770
+FBgn0037304,6,17,5,6,10,7,7
+FBgn0037305,678,845,288,435,1130,411,496
+FBgn0037307,3,8,2,2,2,3,5
+FBgn0037309,26,64,19,19,77,30,31
+FBgn0037310,2,4,2,1,3,0,1
+FBgn0037312,1915,2745,1122,1455,1928,1356,1563
+FBgn0037313,1593,1957,897,1194,1620,937,1147
+FBgn0037315,1811,3487,1457,1600,3063,1535,1726
+FBgn0037317,166,352,75,136,249,117,142
+FBgn0037320,0,0,1,0,0,0,0
+FBgn0037321,1125,1844,629,676,1503,652,706
+FBgn0037322,11,9,2,3,24,1,5
+FBgn0037323,1,0,0,0,0,1,0
+FBgn0037324,0,0,0,0,0,1,1
+FBgn0037325,0,2,0,0,0,0,0
+FBgn0037326,0,3,0,0,2,1,0
+FBgn0037327,4458,7395,2597,3033,5816,2933,3225
+FBgn0037328,15882,32938,13403,16891,18855,14550,15996
+FBgn0037329,597,1001,385,484,676,434,475
+FBgn0037330,468,623,214,263,634,326,360
+FBgn0037332,512,781,267,304,745,312,354
+FBgn0037336,1583,2549,978,1030,2296,993,993
+FBgn0037338,292,488,143,170,517,176,161
+FBgn0037339,1129,2013,678,841,1947,894,925
+FBgn0037340,180,282,84,124,280,157,145
+FBgn0037341,328,481,154,192,325,182,193
+FBgn0037342,476,686,241,281,577,293,323
+FBgn0037344,3705,8170,2924,2659,5838,2917,3042
+FBgn0037345,129,283,67,78,333,81,101
+FBgn0037347,294,502,162,209,476,169,218
+FBgn0037350,136,269,66,74,161,69,64
+FBgn0037351,37870,57288,25107,35365,35339,31749,33802
+FBgn0037352,7,22,4,4,18,7,4
+FBgn0037354,515,722,318,357,584,341,395
+FBgn0037356,249,311,139,159,365,232,225
+FBgn0037357,4458,5695,2524,3033,4980,3105,3511
+FBgn0037358,938,1154,437,557,1208,563,564
+FBgn0037359,231,260,78,108,306,125,158
+FBgn0037360,1888,2962,1211,1503,2659,1383,1607
+FBgn0037363,1864,3447,1299,1315,2545,1094,1270
+FBgn0037364,471,694,212,255,738,311,300
+FBgn0037365,4,3,2,0,4,2,0
+FBgn0037368,70,126,35,55,118,56,49
+FBgn0037369,317,465,143,173,547,269,264
+FBgn0037370,584,904,312,402,916,449,493
+FBgn0037371,1002,1495,527,616,1543,630,705
+FBgn0037372,300,381,129,169,363,188,183
+FBgn0037374,1511,1741,637,741,1736,785,843
+FBgn0037375,41,82,27,45,32,28,30
+FBgn0037376,1274,1972,675,795,1824,694,785
+FBgn0037377,475,655,244,311,590,251,268
+FBgn0037378,505,629,234,297,610,316,366
+FBgn0037379,977,1744,620,645,1498,637,643
+FBgn0037380,1,3,1,2,1,2,0
+FBgn0037382,601,1098,316,449,1031,463,481
+FBgn0037383,207,323,127,147,283,145,150
+FBgn0037384,273,320,118,142,403,147,189
+FBgn0037385,0,3,2,1,2,0,0
+FBgn0037386,40,36,9,14,27,15,16
+FBgn0037387,16,18,14,19,17,10,9
+FBgn0037388,0,1,0,1,2,0,0
+FBgn0037389,0,1,0,2,1,0,0
+FBgn0037391,1254,2071,864,1058,1766,1017,1167
+FBgn0037395,0,0,1,0,0,0,0
+FBgn0037396,0,0,0,0,0,0,0
+FBgn0037397,0,0,0,0,0,0,0
+FBgn0037398,0,0,0,0,1,0,0
+FBgn0037399,1,0,0,0,0,0,0
+FBgn0037402,1,1,0,0,0,0,1
+FBgn0037405,32,72,17,41,74,29,49
+FBgn0037406,0,0,0,0,1,0,0
+FBgn0037408,3,1,0,1,0,0,0
+FBgn0037409,0,2,0,0,0,1,0
+FBgn0037410,0,0,0,0,0,0,0
+FBgn0037411,0,0,0,0,0,0,0
+FBgn0037412,0,0,0,1,0,0,0
+FBgn0037413,0,0,0,0,1,0,0
+FBgn0037414,0,1,0,1,1,0,0
+FBgn0037415,0,0,0,0,0,0,0
+FBgn0037416,0,0,0,0,0,0,0
+FBgn0037417,0,0,0,0,0,0,0
+FBgn0037418,0,0,0,0,0,0,0
+FBgn0037419,0,0,0,0,0,0,0
+FBgn0037420,0,0,0,0,0,0,1
+FBgn0037421,0,0,0,0,0,0,0
+FBgn0037422,0,0,0,0,0,0,0
+FBgn0037424,0,1,0,0,0,0,0
+FBgn0037427,0,0,0,0,0,0,0
+FBgn0037428,0,0,0,0,2,0,0
+FBgn0037429,121,204,85,103,171,118,101
+FBgn0037430,0,3,0,0,0,1,0
+FBgn0037431,3,7,1,3,9,2,1
+FBgn0037432,6,17,4,7,9,2,6
+FBgn0037433,22,36,10,19,32,14,20
+FBgn0037434,1062,1766,506,739,1952,856,897
+FBgn0037435,127,203,64,75,230,83,95
+FBgn0037436,0,3,3,2,0,2,1
+FBgn0037439,1185,2136,669,785,1836,707,810
+FBgn0037440,308,379,140,177,405,197,190
+FBgn0037442,2746,4509,1648,1891,3753,1707,2084
+FBgn0037443,1090,2777,1160,1210,2198,1133,1148
+FBgn0037445,1420,2899,1001,956,1801,825,776
+FBgn0037446,872,1672,601,735,1241,647,753
+FBgn0037447,1,0,0,0,0,1,0
+FBgn0037448,11,15,2,5,6,5,6
+FBgn0037449,16,37,20,11,22,17,18
+FBgn0037454,0,0,0,0,0,0,0
+FBgn0037455,0,0,0,0,0,0,0
+FBgn0037456,0,0,0,0,0,0,0
+FBgn0037459,0,0,0,0,0,0,0
+FBgn0037460,0,0,0,0,0,0,0
+FBgn0037461,0,0,0,0,0,0,0
+FBgn0037462,0,0,0,0,0,0,0
+FBgn0037463,1,0,0,0,0,0,0
+FBgn0037464,0,2,0,0,2,0,0
+FBgn0037465,552,643,239,354,726,373,402
+FBgn0037466,604,1053,383,398,892,351,409
+FBgn0037467,858,1254,431,571,1106,621,674
+FBgn0037468,2940,4765,1197,1584,8697,2951,3033
+FBgn0037469,190,304,103,145,301,160,139
+FBgn0037470,864,1445,576,628,1669,666,819
+FBgn0037472,263,358,153,199,378,211,196
+FBgn0037473,274,480,154,145,367,168,193
+FBgn0037475,0,0,0,0,1,0,0
+FBgn0037477,1,0,0,1,2,0,0
+FBgn0037478,269,490,161,206,373,234,231
+FBgn0037481,259,298,107,128,302,139,149
+FBgn0037482,969,1442,542,638,1109,649,675
+FBgn0037483,7,20,4,11,17,5,4
+FBgn0037485,0,3,1,0,0,0,0
+FBgn0037486,2,4,0,1,4,0,0
+FBgn0037487,5,10,1,3,5,4,6
+FBgn0037488,0,0,0,0,0,0,0
+FBgn0037489,875,1378,407,482,1199,503,534
+FBgn0037490,41,117,29,30,117,55,55
+FBgn0037491,172,287,93,115,237,100,105
+FBgn0037492,75,89,35,41,79,28,47
+FBgn0037493,0,0,0,0,0,0,0
+FBgn0037498,0,0,0,0,0,0,0
+FBgn0037500,0,0,0,0,1,0,0
+FBgn0037501,0,0,0,0,0,0,0
+FBgn0037502,0,0,0,0,0,0,0
+FBgn0037503,0,0,0,0,1,0,0
+FBgn0037504,292,589,138,201,505,167,230
+FBgn0037506,4,12,5,5,6,3,3
+FBgn0037512,0,1,0,0,0,0,0
+FBgn0037513,76,84,29,47,65,31,34
+FBgn0037514,0,0,1,0,0,0,0
+FBgn0037515,655,1261,485,598,1012,544,554
+FBgn0037516,0,0,0,1,0,1,1
+FBgn0037517,0,0,0,3,2,1,1
+FBgn0037518,204,378,110,128,362,177,193
+FBgn0037519,1,1,0,0,0,0,0
+FBgn0037520,0,0,0,0,0,0,0
+FBgn0037521,0,2,0,0,1,0,1
+FBgn0037525,11,27,9,8,30,13,14
+FBgn0037526,209,283,96,121,303,114,112
+FBgn0037529,590,1187,388,458,978,477,547
+FBgn0037530,4160,4987,2101,2357,4182,2170,2318
+FBgn0037531,264,465,165,164,574,209,198
+FBgn0037533,4820,7401,2754,3303,6728,3297,3730
+FBgn0037534,1,2,0,2,1,3,0
+FBgn0037535,173,219,61,90,221,71,81
+FBgn0037536,1029,1649,632,727,1765,650,741
+FBgn0037537,799,1293,464,591,1220,570,723
+FBgn0037538,583,781,295,438,719,409,444
+FBgn0037539,630,1213,426,463,715,362,425
+FBgn0037540,138,239,73,78,219,91,94
+FBgn0037541,2478,3651,1416,1504,3648,1757,1666
+FBgn0037543,228,354,117,136,290,127,123
+FBgn0037544,79,157,37,68,116,48,48
+FBgn0037546,0,0,2,0,4,0,0
+FBgn0037547,1,1,2,0,1,0,0
+FBgn0037548,245,277,84,99,198,85,95
+FBgn0037549,2547,3550,1398,1658,3335,1783,1841
+FBgn0037550,260,444,125,176,378,189,224
+FBgn0037551,951,1867,535,652,1475,538,672
+FBgn0037552,3050,4524,1089,1341,4031,1158,1130
+FBgn0037553,514,518,144,189,366,156,159
+FBgn0037554,663,1046,432,473,1193,593,647
+FBgn0037555,607,1231,420,479,965,475,548
+FBgn0037556,715,1139,357,413,1151,404,475
+FBgn0037560,748,1097,254,353,1352,301,320
+FBgn0037561,336,709,196,248,522,222,226
+FBgn0037562,5,19,4,5,30,7,5
+FBgn0037563,1,1,0,0,5,2,1
+FBgn0037565,5,3,3,1,6,1,1
+FBgn0037566,505,896,274,338,872,382,384
+FBgn0037567,211,215,88,106,263,132,131
+FBgn0037569,371,457,163,228,391,279,282
+FBgn0037570,0,0,0,0,1,0,1
+FBgn0037571,0,0,0,0,1,0,0
+FBgn0037572,0,0,0,0,0,0,0
+FBgn0037573,1230,1420,599,770,1311,768,903
+FBgn0037574,141,242,64,112,162,78,87
+FBgn0037576,1,1,0,1,3,0,0
+FBgn0037577,0,0,0,0,1,0,0
+FBgn0037578,249,496,112,159,445,138,154
+FBgn0037579,0,0,0,0,6,1,1
+FBgn0037580,2521,3202,1267,1619,3647,1980,2049
+FBgn0037581,76,113,43,46,141,60,63
+FBgn0037583,551,667,236,263,1118,294,310
+FBgn0037584,12,30,9,7,32,12,18
+FBgn0037589,0,1,0,0,0,1,0
+FBgn0037590,1,1,0,0,0,0,0
+FBgn0037591,0,0,0,1,1,0,0
+FBgn0037592,527,765,259,319,572,274,260
+FBgn0037594,0,1,0,0,2,0,1
+FBgn0037599,0,0,0,0,1,0,0
+FBgn0037600,0,1,0,0,0,0,0
+FBgn0037601,0,0,0,0,1,0,0
+FBgn0037602,52,101,30,43,77,48,53
+FBgn0037603,245,318,116,161,308,145,155
+FBgn0037606,334,559,195,222,409,168,209
+FBgn0037607,5174,6926,3052,3641,8590,5545,5987
+FBgn0037608,407,627,200,267,539,269,287
+FBgn0037609,829,1133,388,507,1112,480,531
+FBgn0037610,241,350,136,172,329,200,183
+FBgn0037611,78,137,27,40,130,41,34
+FBgn0037612,1272,1817,841,1041,1398,866,935
+FBgn0037613,148,255,69,89,231,94,114
+FBgn0037614,418,732,193,228,629,199,249
+FBgn0037615,3,9,3,2,7,1,2
+FBgn0037616,16,33,9,21,37,15,16
+FBgn0037617,255,424,119,177,424,150,161
+FBgn0037618,3,2,2,2,3,4,3
+FBgn0037619,151,196,63,94,201,84,116
+FBgn0037620,31,64,17,10,54,19,19
+FBgn0037621,985,1095,482,559,924,530,634
+FBgn0037622,960,1322,488,572,1523,591,614
+FBgn0037623,18,33,16,14,25,9,11
+FBgn0037624,1714,2777,942,1197,2883,1317,1498
+FBgn0037625,4,6,0,1,1,1,2
+FBgn0037626,1,8,4,2,12,4,9
+FBgn0037627,0,1,0,1,1,0,1
+FBgn0037630,27,47,14,16,63,26,22
+FBgn0037632,7807,9999,4293,5315,10965,6568,7067
+FBgn0037633,1247,2283,840,944,1870,789,833
+FBgn0037634,128,325,133,125,285,111,116
+FBgn0037635,229,378,139,181,167,71,92
+FBgn0037636,8177,42029,11796,12324,28522,9608,11765
+FBgn0037637,856,1016,495,619,1452,562,627
+FBgn0037638,1418,1841,635,813,1544,740,811
+FBgn0037640,0,21,2,4,17,6,7
+FBgn0037643,2803,3521,1546,1915,3424,1799,1972
+FBgn0037644,903,1282,568,731,1314,679,837
+FBgn0037645,3,3,0,1,4,3,2
+FBgn0037646,63,137,32,52,14,5,10
+FBgn0037647,465,600,225,305,801,296,328
+FBgn0037648,447,771,253,325,688,279,336
+FBgn0037650,0,0,0,0,1,0,0
+FBgn0037652,554,862,250,316,822,289,342
+FBgn0037653,715,1123,402,543,1068,512,650
+FBgn0037654,11,28,6,13,26,7,7
+FBgn0037655,2195,3068,1583,1624,2370,1544,1732
+FBgn0037656,159,262,87,109,280,114,116
+FBgn0037657,1250,1951,670,773,1605,808,831
+FBgn0037659,2354,4098,1636,1682,3177,1487,1644
+FBgn0037660,427,795,286,314,672,355,350
+FBgn0037661,231,246,83,144,299,127,122
+FBgn0037662,1,20,20,5,36,7,8
+FBgn0037664,2,2,1,4,4,6,1
+FBgn0037665,0,0,0,1,0,0,0
+FBgn0037666,0,0,0,0,0,0,0
+FBgn0037667,170,197,61,68,266,104,81
+FBgn0037668,1,2,2,2,4,2,2
+FBgn0037669,210,310,67,112,282,93,95
+FBgn0037670,104,266,55,75,252,65,69
+FBgn0037671,4258,5919,2433,3039,5962,3151,3696
+FBgn0037672,55,122,49,65,176,84,111
+FBgn0037675,0,0,0,0,0,0,0
+FBgn0037676,1,1,0,1,1,0,0
+FBgn0037677,1,1,0,0,0,1,0
+FBgn0037678,17,30,16,11,68,56,51
+FBgn0037679,154,321,89,121,295,131,162
+FBgn0037680,424,555,190,229,940,404,444
+FBgn0037683,1868,2848,1090,1641,1496,710,918
+FBgn0037684,18,48,33,35,37,16,23
+FBgn0037685,10,7,3,6,10,3,4
+FBgn0037686,14852,33527,10853,14058,22517,12030,12395
+FBgn0037687,349,390,145,211,424,192,226
+FBgn0037688,238,439,141,143,405,157,186
+FBgn0037689,0,0,0,0,0,0,0
+FBgn0037690,3,8,3,2,10,7,2
+FBgn0037696,139,227,67,74,240,88,88
+FBgn0037697,3,6,1,2,3,1,1
+FBgn0037698,1,13,8,8,14,8,6
+FBgn0037700,769,1513,399,533,1480,622,670
+FBgn0037702,5255,7551,3032,3115,6114,3039,3181
+FBgn0037703,553,930,298,352,675,314,350
+FBgn0037705,382,798,344,309,447,234,204
+FBgn0037707,760,1059,457,518,896,568,534
+FBgn0037708,122,174,42,64,197,55,66
+FBgn0037709,385,419,171,251,503,180,192
+FBgn0037710,625,1012,269,324,902,339,387
+FBgn0037712,89,126,38,59,84,40,59
+FBgn0037713,88,88,32,58,82,38,57
+FBgn0037714,65,60,29,27,58,32,34
+FBgn0037715,299,420,143,209,355,163,145
+FBgn0037716,327,777,251,303,545,291,281
+FBgn0037717,500,746,286,355,909,482,527
+FBgn0037718,3311,5490,1707,2196,3674,1758,1903
+FBgn0037719,535,1029,301,393,696,303,385
+FBgn0037720,1430,2276,950,963,1894,1088,1082
+FBgn0037721,10,11,4,4,13,7,7
+FBgn0037722,337,600,166,214,463,191,209
+FBgn0037723,280,337,115,175,473,193,202
+FBgn0037724,2,2,1,0,0,1,0
+FBgn0037726,15,12,7,6,17,5,12
+FBgn0037727,3,4,0,3,6,3,4
+FBgn0037728,4116,5780,1673,2313,6560,2680,2992
+FBgn0037730,12,23,9,5,23,8,10
+FBgn0037731,0,0,0,0,0,1,0
+FBgn0037734,1077,1302,686,734,1207,653,767
+FBgn0037735,1,0,1,1,0,1,0
+FBgn0037736,4,5,3,1,4,5,5
+FBgn0037737,278,542,151,173,566,137,181
+FBgn0037739,302,546,162,211,851,336,367
+FBgn0037741,386,571,220,244,590,269,256
+FBgn0037742,113,136,60,59,172,82,91
+FBgn0037743,586,975,312,343,991,384,423
+FBgn0037744,509,811,275,387,949,434,434
+FBgn0037746,698,1006,336,427,1047,447,533
+FBgn0037747,418,473,155,216,633,267,263
+FBgn0037749,387,593,202,270,529,257,259
+FBgn0037750,365,507,242,234,443,255,277
+FBgn0037751,240,286,107,141,232,159,160
+FBgn0037752,24919,61804,11413,14361,42137,12572,12412
+FBgn0037753,164,185,92,92,199,111,117
+FBgn0037754,640,764,228,231,159,56,59
+FBgn0037755,761,1005,309,381,986,322,325
+FBgn0037756,3079,6210,1687,2243,5699,1992,2345
+FBgn0037757,1081,1848,703,847,1829,1130,1196
+FBgn0037758,1738,2394,930,1125,1974,1093,1117
+FBgn0037759,507,619,225,262,813,302,387
+FBgn0037760,2115,3800,1412,1341,2561,1205,1258
+FBgn0037761,0,0,0,0,0,0,0
+FBgn0037762,0,0,0,0,0,0,0
+FBgn0037763,0,0,0,0,0,0,0
+FBgn0037764,0,0,0,0,0,0,0
+FBgn0037765,0,0,0,0,0,0,0
+FBgn0037766,1,0,1,0,0,0,0
+FBgn0037769,5,11,6,3,5,4,7
+FBgn0037770,1057,1494,547,612,1260,602,666
+FBgn0037772,4,6,3,1,5,0,2
+FBgn0037773,147,176,35,58,154,56,70
+FBgn0037777,61,91,28,32,87,27,35
+FBgn0037778,160,270,78,75,278,119,114
+FBgn0037779,351,659,239,273,424,234,253
+FBgn0037780,382,715,241,288,609,288,349
+FBgn0037781,107,117,36,56,127,40,52
+FBgn0037782,0,0,0,0,0,0,0
+FBgn0037783,1,0,1,0,3,1,1
+FBgn0037786,0,0,0,0,2,1,0
+FBgn0037788,56,277,101,108,237,89,98
+FBgn0037789,3,5,1,0,6,4,2
+FBgn0037792,767,1194,378,439,1115,491,485
+FBgn0037794,236,517,135,150,529,157,168
+FBgn0037796,0,0,0,2,2,1,1
+FBgn0037797,0,0,2,1,1,0,3
+FBgn0037798,0,0,0,0,0,0,0
+FBgn0037800,4,7,3,3,5,1,2
+FBgn0037801,6,10,6,8,9,4,9
+FBgn0037802,86,191,50,58,130,55,56
+FBgn0037804,918,1694,710,694,1452,789,843
+FBgn0037806,13,31,12,10,28,6,11
+FBgn0037807,7245,7631,3047,3886,8043,4252,4319
+FBgn0037808,10806,15307,6153,5862,13405,6237,5881
+FBgn0037809,143,351,127,103,316,106,112
+FBgn0037810,4161,7615,2706,2611,8159,2938,3251
+FBgn0037811,22,31,13,14,49,12,9
+FBgn0037812,9,20,6,5,42,15,15
+FBgn0037814,583,1032,324,353,1026,464,451
+FBgn0037815,199,320,96,127,286,128,141
+FBgn0037816,31,45,15,20,41,18,18
+FBgn0037817,32,45,11,16,80,24,30
+FBgn0037818,0,0,0,0,0,0,0
+FBgn0037819,0,1,0,0,0,0,2
+FBgn0037820,0,0,0,0,0,0,0
+FBgn0037822,978,1752,477,630,1491,598,700
+FBgn0037824,19,16,3,5,18,9,7
+FBgn0037826,0,0,0,0,0,0,0
+FBgn0037827,0,0,0,0,0,0,0
+FBgn0037828,0,0,0,0,0,0,0
+FBgn0037829,0,0,0,0,0,0,0
+FBgn0037831,628,989,302,328,836,274,280
+FBgn0037832,9,5,0,4,3,1,1
+FBgn0037834,2032,2532,956,1121,2421,1298,1366
+FBgn0037835,0,0,0,0,1,2,0
+FBgn0037836,1,5,0,1,2,0,0
+FBgn0037837,0,2,14,7,2,10,25
+FBgn0037838,114,148,52,76,176,75,93
+FBgn0037841,0,0,0,0,0,0,0
+FBgn0037842,280,536,153,189,434,184,211
+FBgn0037843,1705,2765,803,876,2502,985,1114
+FBgn0037844,214,363,125,150,501,271,246
+FBgn0037845,6,4,2,2,15,6,7
+FBgn0037846,106,130,36,53,133,72,65
+FBgn0037847,315,521,186,201,343,190,173
+FBgn0037848,760,923,371,449,1261,572,598
+FBgn0037849,9,4,2,2,5,5,4
+FBgn0037850,316,461,178,216,634,342,371
+FBgn0037852,645,1257,414,513,1363,662,708
+FBgn0037853,1165,2341,890,1046,2218,1057,1342
+FBgn0037855,588,996,392,402,867,462,518
+FBgn0037856,523,714,295,322,880,392,419
+FBgn0037857,0,0,0,0,1,0,0
+FBgn0037860,0,1,0,0,0,0,0
+FBgn0037862,1,2,1,1,3,0,0
+FBgn0037870,0,3,2,0,1,1,3
+FBgn0037872,500,958,310,381,474,189,236
+FBgn0037873,983,1135,489,704,1426,783,851
+FBgn0037874,18672,29476,10210,14449,25037,11569,13081
+FBgn0037875,1003,1086,549,589,1071,722,781
+FBgn0037876,105,220,66,81,182,112,114
+FBgn0037877,412,647,225,294,645,284,344
+FBgn0037878,1207,2041,615,816,1732,839,845
+FBgn0037879,6,6,2,5,5,5,7
+FBgn0037880,173,222,98,129,259,150,168
+FBgn0037881,1041,1474,614,744,1212,712,849
+FBgn0037882,191,361,136,171,346,190,207
+FBgn0037883,105,118,46,61,132,38,57
+FBgn0037884,1326,1574,587,756,1068,593,648
+FBgn0037885,159,198,68,102,228,99,146
+FBgn0037888,0,0,2,1,0,0,0
+FBgn0037889,4,4,2,2,0,2,3
+FBgn0037890,724,808,334,434,954,417,436
+FBgn0037891,2106,2044,1185,1259,1846,1433,1426
+FBgn0037892,204,380,116,184,338,165,199
+FBgn0037893,877,1893,543,691,1667,698,783
+FBgn0037894,2101,2831,971,1232,2701,1370,1366
+FBgn0037895,1,1,0,3,1,1,2
+FBgn0037896,55,95,40,38,158,75,86
+FBgn0037897,1322,1870,795,781,1644,749,819
+FBgn0037898,18,29,5,7,38,16,20
+FBgn0037899,2498,5724,2019,2574,3989,1817,2126
+FBgn0037900,383,559,197,263,403,251,223
+FBgn0037901,534,847,323,378,998,525,526
+FBgn0037902,82,120,48,63,125,88,77
+FBgn0037906,42,61,29,37,61,47,38
+FBgn0037908,0,0,0,0,0,0,0
+FBgn0037910,0,1,0,1,1,1,0
+FBgn0037911,248,372,120,122,340,168,155
+FBgn0037912,49,52,2,5,27,4,4
+FBgn0037913,1023,1141,104,215,1402,254,219
+FBgn0037915,105,122,47,50,146,62,60
+FBgn0037916,70,84,25,37,68,29,33
+FBgn0037917,778,1510,451,598,981,387,488
+FBgn0037918,1385,1964,837,874,1720,912,1082
+FBgn0037920,131,241,56,69,203,76,98
+FBgn0037921,43,55,20,25,51,24,24
+FBgn0037922,2,0,0,0,4,0,0
+FBgn0037923,46,48,15,16,67,26,34
+FBgn0037924,1129,2082,605,673,1489,707,736
+FBgn0037926,2296,2822,1287,1367,3260,1573,1684
+FBgn0037930,2313,4263,1262,1746,4227,1735,1945
+FBgn0037931,367,691,249,248,588,298,298
+FBgn0037933,264,420,111,147,386,125,148
+FBgn0037934,83,147,47,42,126,48,37
+FBgn0037935,17,65,27,21,31,10,8
+FBgn0037936,3,5,6,4,4,1,3
+FBgn0037937,6,10,7,7,10,5,2
+FBgn0037938,17,13,10,10,19,10,6
+FBgn0037939,5,6,0,0,6,3,2
+FBgn0037940,0,0,0,0,1,0,0
+FBgn0037941,0,6,1,3,5,2,3
+FBgn0037942,188,316,71,104,245,138,157
+FBgn0037943,690,1036,329,430,866,383,431
+FBgn0037944,1035,1642,617,637,1267,730,746
+FBgn0037949,379,691,261,229,530,240,201
+FBgn0037950,16,27,7,9,29,9,9
+FBgn0037955,783,1212,445,549,1097,515,622
+FBgn0037956,7,23,6,11,6,4,6
+FBgn0037958,592,777,259,309,734,341,369
+FBgn0037960,361,485,169,179,561,235,221
+FBgn0037962,1,0,0,2,1,0,0
+FBgn0037963,1246,1898,635,688,2042,915,910
+FBgn0037964,1,3,3,1,3,1,2
+FBgn0037970,13,2,5,5,10,2,3
+FBgn0037972,2,11,1,2,16,8,8
+FBgn0037973,336,505,152,231,388,196,231
+FBgn0037974,219,370,177,219,268,131,205
+FBgn0037975,380,400,207,232,442,271,357
+FBgn0037976,1,4,2,3,6,0,3
+FBgn0037978,439,500,211,264,503,283,299
+FBgn0037979,926,1565,498,593,1301,513,584
+FBgn0037980,219,296,111,150,227,137,154
+FBgn0037981,179,250,116,128,197,123,128
+FBgn0037985,0,2,1,0,0,0,0
+FBgn0037986,0,1,0,1,1,0,0
+FBgn0037987,0,0,0,0,0,0,0
+FBgn0037988,0,2,0,1,1,0,1
+FBgn0037989,11050,16162,7228,7639,14973,7682,7838
+FBgn0037992,0,0,0,1,0,1,0
+FBgn0037993,0,0,0,0,1,1,0
+FBgn0037994,0,0,0,0,0,0,0
+FBgn0037995,0,0,0,0,0,0,0
+FBgn0037996,2,5,0,1,3,2,4
+FBgn0037998,799,1255,454,533,1226,661,662
+FBgn0037999,921,1304,590,734,1437,789,892
+FBgn0038000,0,0,0,0,0,0,0
+FBgn0038001,0,0,0,0,0,0,0
+FBgn0038002,0,0,0,0,0,0,0
+FBgn0038003,0,0,0,0,0,0,0
+FBgn0038005,0,0,0,0,0,0,0
+FBgn0038006,0,0,0,0,0,0,0
+FBgn0038007,0,0,0,0,0,0,0
+FBgn0038008,0,0,0,0,0,0,0
+FBgn0038009,0,0,0,0,0,0,0
+FBgn0038011,1,0,0,0,0,0,0
+FBgn0038012,2,2,0,0,9,5,2
+FBgn0038013,380,644,194,222,636,244,286
+FBgn0038014,31,54,15,15,48,22,20
+FBgn0038016,2084,3649,1356,1485,2825,1467,1590
+FBgn0038017,0,1,1,0,1,0,0
+FBgn0038018,2,1,0,1,4,0,1
+FBgn0038020,909,1814,497,665,2370,717,852
+FBgn0038028,1,1,0,0,2,0,0
+FBgn0038029,0,1,0,0,1,0,0
+FBgn0038032,0,0,0,0,0,0,0
+FBgn0038033,0,0,0,0,0,0,0
+FBgn0038034,472,681,248,352,725,297,349
+FBgn0038035,456,890,288,365,943,352,352
+FBgn0038037,595,707,422,548,887,388,511
+FBgn0038038,900,1332,527,638,1012,644,650
+FBgn0038039,1198,1466,739,797,1246,740,911
+FBgn0038042,14,26,12,11,36,14,17
+FBgn0038043,372,493,198,253,577,357,446
+FBgn0038045,3,6,1,1,9,0,1
+FBgn0038046,530,802,290,357,820,422,506
+FBgn0038047,98,168,49,36,157,39,53
+FBgn0038049,684,889,422,534,1239,695,796
+FBgn0038051,6,6,2,4,16,2,7
+FBgn0038052,3,3,1,1,5,3,1
+FBgn0038053,968,1013,410,548,1070,558,574
+FBgn0038054,1,0,0,2,2,2,1
+FBgn0038055,296,463,195,198,425,260,267
+FBgn0038056,414,548,230,305,537,285,287
+FBgn0038057,166,252,73,113,271,100,92
+FBgn0038058,371,410,168,188,431,164,215
+FBgn0038063,4,10,3,6,8,4,2
+FBgn0038065,2465,4847,1470,1793,3603,1583,1695
+FBgn0038067,11,17,10,12,24,5,14
+FBgn0038068,0,1,0,1,7,5,2
+FBgn0038069,1,2,0,0,0,0,1
+FBgn0038070,1,0,1,0,0,0,1
+FBgn0038071,4,2,3,1,13,12,7
+FBgn0038072,3,4,1,1,4,3,4
+FBgn0038073,3,2,0,0,3,0,1
+FBgn0038074,8,21,12,14,29,17,17
+FBgn0038076,0,1,0,1,0,0,0
+FBgn0038078,0,0,0,0,1,0,0
+FBgn0038079,2,6,3,0,3,0,1
+FBgn0038080,288,551,106,163,473,167,173
+FBgn0038082,1,0,0,0,1,0,0
+FBgn0038083,10,15,5,5,10,3,2
+FBgn0038084,0,0,0,0,0,0,0
+FBgn0038087,0,0,0,0,0,0,0
+FBgn0038088,273,450,181,200,313,119,142
+FBgn0038089,0,0,0,0,0,0,0
+FBgn0038090,0,0,0,0,0,0,0
+FBgn0038092,15,28,6,8,37,15,14
+FBgn0038095,13,19,10,10,14,4,9
+FBgn0038097,2,1,0,0,2,1,4
+FBgn0038098,765,794,335,377,612,411,428
+FBgn0038099,964,952,438,528,858,537,525
+FBgn0038100,574,2004,531,665,1289,448,524
+FBgn0038102,59,74,27,28,84,22,24
+FBgn0038105,678,1086,386,497,882,424,525
+FBgn0038106,745,1123,358,465,963,507,513
+FBgn0038107,1087,2039,688,975,2238,1147,1366
+FBgn0038108,5511,10203,4358,4199,8028,4833,5063
+FBgn0038109,58,61,20,28,74,27,31
+FBgn0038110,635,747,290,368,766,405,464
+FBgn0038111,1652,2626,923,1006,2384,1163,1112
+FBgn0038113,0,3,2,1,2,1,0
+FBgn0038114,0,1,0,1,0,1,0
+FBgn0038115,9,8,5,5,6,2,6
+FBgn0038118,694,954,366,407,652,348,348
+FBgn0038122,0,0,0,1,0,0,0
+FBgn0038123,0,2,0,0,0,0,0
+FBgn0038124,0,0,0,0,1,0,0
+FBgn0038125,0,0,1,0,0,0,0
+FBgn0038126,0,0,1,0,0,1,1
+FBgn0038127,0,0,0,0,0,0,0
+FBgn0038128,132,266,67,96,209,87,101
+FBgn0038129,410,496,193,262,390,224,239
+FBgn0038130,1,0,0,1,0,0,0
+FBgn0038131,0,0,0,0,0,0,0
+FBgn0038132,0,0,0,0,0,0,0
+FBgn0038133,0,0,0,0,0,0,0
+FBgn0038134,0,1,0,0,0,0,0
+FBgn0038135,0,0,0,0,1,0,0
+FBgn0038136,0,0,0,0,0,0,0
+FBgn0038139,0,1,0,0,0,0,0
+FBgn0038140,0,0,0,0,0,0,0
+FBgn0038142,0,3,0,0,2,0,0
+FBgn0038143,26,40,12,12,61,30,35
+FBgn0038144,1,9,2,4,22,11,6
+FBgn0038145,6999,13298,4276,5181,8511,4214,4890
+FBgn0038146,1370,1756,673,794,1320,722,782
+FBgn0038147,0,0,0,0,2,0,0
+FBgn0038148,0,0,0,0,0,0,0
+FBgn0038149,749,1163,437,560,2035,1056,1331
+FBgn0038150,0,1,0,0,1,0,0
+FBgn0038151,1,0,0,0,1,0,0
+FBgn0038153,0,0,0,0,0,0,0
+FBgn0038156,75,116,46,62,114,59,79
+FBgn0038157,0,1,1,0,0,0,0
+FBgn0038158,0,0,0,1,0,0,0
+FBgn0038159,0,1,0,0,0,0,0
+FBgn0038160,0,0,0,0,0,0,0
+FBgn0038161,0,0,0,0,0,0,0
+FBgn0038162,0,0,0,0,0,1,0
+FBgn0038163,0,7,1,2,8,3,1
+FBgn0038165,3,1,0,2,3,1,2
+FBgn0038166,402,622,257,297,563,320,317
+FBgn0038167,832,1327,531,580,1022,566,632
+FBgn0038168,771,1244,453,558,1299,532,657
+FBgn0038170,9,18,2,9,13,3,4
+FBgn0038172,2,7,1,3,9,3,6
+FBgn0038173,0,4,1,2,5,1,1
+FBgn0038175,0,0,0,0,0,0,0
+FBgn0038179,4,6,3,1,7,2,3
+FBgn0038180,3,5,0,4,10,2,7
+FBgn0038181,1,2,1,0,0,1,0
+FBgn0038183,292,444,152,183,392,172,200
+FBgn0038186,0,0,0,0,0,0,0
+FBgn0038188,0,0,0,0,0,0,0
+FBgn0038189,0,0,0,0,0,0,0
+FBgn0038190,0,0,1,0,0,0,0
+FBgn0038191,2,2,1,4,6,0,2
+FBgn0038194,79,117,31,47,139,53,60
+FBgn0038195,2055,3573,1046,1239,2962,1273,1325
+FBgn0038196,545,995,259,340,903,276,378
+FBgn0038197,527,985,364,362,897,343,345
+FBgn0038198,32,36,19,8,169,82,114
+FBgn0038199,4,0,2,0,1,0,0
+FBgn0038200,1,1,1,0,2,1,0
+FBgn0038201,0,0,0,1,1,0,0
+FBgn0038202,3,8,2,0,7,3,1
+FBgn0038203,3,10,2,1,12,2,5
+FBgn0038204,5,10,1,3,10,3,2
+FBgn0038205,3,3,2,2,2,3,4
+FBgn0038206,635,928,383,505,803,487,592
+FBgn0038207,0,1,1,0,3,1,0
+FBgn0038208,2,0,0,0,3,1,0
+FBgn0038209,0,2,1,0,0,0,0
+FBgn0038210,0,0,0,0,0,0,0
+FBgn0038211,0,0,0,0,1,0,0
+FBgn0038213,6,3,1,2,2,1,1
+FBgn0038214,0,0,0,0,1,0,0
+FBgn0038217,0,1,0,0,0,0,0
+FBgn0038218,0,1,1,0,0,0,0
+FBgn0038219,1,1,0,0,1,0,0
+FBgn0038220,621,1081,387,404,982,451,492
+FBgn0038221,10,13,4,3,18,7,11
+FBgn0038223,594,966,355,309,795,345,366
+FBgn0038224,1219,1879,620,771,2209,827,898
+FBgn0038225,1,2,0,0,3,1,0
+FBgn0038233,151,231,91,107,190,94,122
+FBgn0038234,187,386,73,120,308,125,141
+FBgn0038235,82,194,39,45,161,39,50
+FBgn0038236,0,5,0,0,1,1,0
+FBgn0038237,21,80,26,22,9,3,3
+FBgn0038238,0,1,0,0,0,1,0
+FBgn0038239,0,0,0,0,0,0,0
+FBgn0038240,0,0,0,0,0,0,0
+FBgn0038241,1,0,0,0,0,1,1
+FBgn0038242,1,1,0,1,1,0,2
+FBgn0038243,829,1439,473,554,1500,503,585
+FBgn0038244,2475,3643,1511,1685,3535,1756,1793
+FBgn0038246,0,0,0,0,1,0,0
+FBgn0038247,5,9,2,3,6,1,5
+FBgn0038248,7,26,11,14,23,9,3
+FBgn0038250,464,341,176,241,316,194,206
+FBgn0038251,311,517,194,225,489,250,264
+FBgn0038252,3,4,0,2,6,2,0
+FBgn0038256,1745,1912,769,955,1105,711,723
+FBgn0038257,6,19,5,10,13,10,14
+FBgn0038258,22,71,26,28,83,23,23
+FBgn0038260,88,105,51,49,73,31,39
+FBgn0038261,19,19,16,11,60,41,39
+FBgn0038262,3,4,2,3,6,2,3
+FBgn0038266,1,0,0,0,0,0,0
+FBgn0038267,0,0,0,0,0,0,0
+FBgn0038268,242,335,119,124,358,160,161
+FBgn0038269,803,1474,449,540,1096,491,535
+FBgn0038271,5382,7968,3752,4362,5854,4185,4717
+FBgn0038272,561,1068,376,468,989,435,508
+FBgn0038273,7,12,4,4,16,3,3
+FBgn0038274,888,1177,503,583,1116,586,667
+FBgn0038275,310,664,176,213,441,181,211
+FBgn0038276,0,4,0,0,2,0,0
+FBgn0038277,13,15,6,11,19,9,16
+FBgn0038279,0,1,0,0,0,1,0
+FBgn0038280,0,0,0,0,0,0,0
+FBgn0038281,0,0,0,0,0,0,0
+FBgn0038282,1,1,1,2,11,5,7
+FBgn0038285,0,1,0,0,0,1,0
+FBgn0038286,1612,2972,1188,1343,2313,1128,1364
+FBgn0038289,278,583,227,213,612,300,286
+FBgn0038290,1137,1896,700,929,1273,633,720
+FBgn0038291,282,584,204,218,381,187,202
+FBgn0038292,5,8,5,9,11,6,5
+FBgn0038293,2885,4640,1842,2109,6037,3382,3504
+FBgn0038294,1,1,0,1,0,1,1
+FBgn0038295,0,0,0,0,3,0,0
+FBgn0038296,278,402,151,150,448,180,181
+FBgn0038299,16,26,11,9,18,9,11
+FBgn0038300,636,881,284,421,739,394,492
+FBgn0038301,251,426,176,167,389,195,233
+FBgn0038302,293,599,203,226,516,255,274
+FBgn0038303,794,1218,386,514,1197,467,482
+FBgn0038304,649,945,333,404,1001,503,536
+FBgn0038306,666,963,284,363,799,360,398
+FBgn0038307,0,0,0,0,0,0,0
+FBgn0038309,52,89,37,41,109,66,64
+FBgn0038311,57,121,33,31,102,36,39
+FBgn0038312,214,242,103,135,249,126,126
+FBgn0038313,306,466,145,209,504,202,242
+FBgn0038315,6,5,3,5,4,2,1
+FBgn0038316,342,604,232,264,441,250,325
+FBgn0038318,2357,3049,1266,1561,2929,1550,1692
+FBgn0038319,361,567,163,229,419,222,297
+FBgn0038320,6096,8455,3479,3725,7287,3829,4065
+FBgn0038321,173,238,109,119,230,139,150
+FBgn0038323,72,140,43,51,133,42,53
+FBgn0038324,273,316,108,162,417,215,194
+FBgn0038325,368,597,238,253,506,249,261
+FBgn0038326,790,1019,355,525,857,416,369
+FBgn0038327,322,566,190,231,673,225,274
+FBgn0038330,213,289,137,123,286,173,168
+FBgn0038331,657,1384,401,369,1420,360,440
+FBgn0038332,440,507,221,233,564,229,286
+FBgn0038333,0,1,1,0,0,0,1
+FBgn0038334,0,0,0,0,0,0,0
+FBgn0038337,2,6,5,4,6,0,5
+FBgn0038339,0,1,2,2,5,4,4
+FBgn0038341,315,509,234,251,838,488,488
+FBgn0038342,1,4,2,1,7,3,1
+FBgn0038343,1,4,1,3,4,0,2
+FBgn0038344,2176,3627,1481,1615,3686,1862,1874
+FBgn0038345,0,0,0,0,0,0,0
+FBgn0038346,801,1273,487,621,1114,509,565
+FBgn0038347,2901,4663,1919,2169,5074,2732,3007
+FBgn0038348,122,164,76,80,207,87,111
+FBgn0038349,3244,3943,1638,1884,3573,1537,1522
+FBgn0038350,2,11,4,4,9,4,6
+FBgn0038351,194,179,84,113,76,32,36
+FBgn0038353,138,415,130,191,293,113,142
+FBgn0038354,2,6,1,3,5,2,1
+FBgn0038355,0,0,0,0,0,0,0
+FBgn0038356,0,0,0,0,1,0,0
+FBgn0038357,0,1,0,0,0,0,0
+FBgn0038358,2,1,0,0,1,0,0
+FBgn0038359,1,1,0,3,0,0,0
+FBgn0038360,510,985,293,405,702,322,360
+FBgn0038361,11,15,6,5,14,6,6
+FBgn0038363,118,188,57,71,315,77,96
+FBgn0038364,4088,7462,2867,2832,5206,2781,2835
+FBgn0038365,41,111,23,37,92,41,42
+FBgn0038366,23,32,19,13,52,16,17
+FBgn0038368,2,3,1,1,6,4,3
+FBgn0038369,1218,1392,504,666,1399,705,765
+FBgn0038371,96,148,53,69,114,68,81
+FBgn0038373,40,60,28,21,55,28,31
+FBgn0038376,2599,3563,1452,1785,3276,1711,1890
+FBgn0038377,1,0,0,0,0,0,0
+FBgn0038380,0,3,0,0,0,0,0
+FBgn0038381,260,309,121,178,150,74,79
+FBgn0038385,5,17,6,3,8,3,5
+FBgn0038386,1,3,2,0,1,1,1
+FBgn0038387,365,619,198,242,563,235,260
+FBgn0038388,619,789,301,386,810,337,327
+FBgn0038389,222,384,134,159,323,144,182
+FBgn0038390,236,307,112,130,314,127,135
+FBgn0038391,553,685,416,347,537,292,287
+FBgn0038392,5,10,4,4,4,7,11
+FBgn0038394,4,12,2,6,13,6,9
+FBgn0038395,81,184,58,71,158,43,59
+FBgn0038396,241,498,165,194,472,195,195
+FBgn0038397,55,67,36,36,75,30,27
+FBgn0038398,1,0,0,0,2,0,0
+FBgn0038400,1847,3432,1125,1433,2909,1472,1582
+FBgn0038401,409,593,186,216,535,215,236
+FBgn0038402,7,18,4,3,11,3,7
+FBgn0038404,5,8,5,4,11,3,11
+FBgn0038405,3,7,4,0,7,10,8
+FBgn0038407,1046,935,420,509,988,564,535
+FBgn0038412,6,4,0,2,6,1,7
+FBgn0038414,34,90,26,19,136,36,43
+FBgn0038415,21,75,17,16,91,36,23
+FBgn0038416,26,87,25,10,121,40,36
+FBgn0038418,243,434,129,141,357,145,146
+FBgn0038419,10,17,4,8,13,5,3
+FBgn0038420,9,20,6,6,18,9,10
+FBgn0038421,66,125,14,14,124,22,22
+FBgn0038422,1,3,0,0,1,1,1
+FBgn0038423,0,0,0,0,0,0,0
+FBgn0038424,626,1085,410,533,770,460,529
+FBgn0038425,162,242,62,77,263,100,114
+FBgn0038426,242,276,95,147,286,142,169
+FBgn0038427,1131,1432,634,724,1500,769,684
+FBgn0038428,482,830,248,358,937,405,391
+FBgn0038429,147,217,41,78,210,79,92
+FBgn0038431,61,66,42,38,70,36,42
+FBgn0038432,331,461,165,160,585,196,218
+FBgn0038435,40,58,33,28,72,39,42
+FBgn0038436,557,795,352,385,1202,587,722
+FBgn0038437,69,109,35,44,119,45,41
+FBgn0038438,1251,1655,580,688,1451,626,791
+FBgn0038439,2,2,2,1,2,0,1
+FBgn0038440,0,0,0,0,0,0,0
+FBgn0038445,2,1,0,0,1,0,0
+FBgn0038446,141,223,62,82,241,71,85
+FBgn0038447,0,0,0,0,0,0,0
+FBgn0038448,1,2,0,0,1,0,2
+FBgn0038449,0,1,0,0,1,0,0
+FBgn0038450,0,0,0,1,1,0,0
+FBgn0038451,0,0,0,0,0,0,0
+FBgn0038452,0,1,0,1,4,1,2
+FBgn0038453,1026,1181,419,534,1631,639,699
+FBgn0038454,270,537,148,146,433,157,174
+FBgn0038455,0,0,0,0,0,0,0
+FBgn0038458,0,0,0,0,0,0,0
+FBgn0038460,12,19,10,13,9,3,4
+FBgn0038461,233,373,196,238,348,238,295
+FBgn0038462,273,309,233,333,582,297,417
+FBgn0038463,484,763,265,335,767,353,339
+FBgn0038464,1186,2124,708,776,1568,829,920
+FBgn0038465,8156,11273,4203,5263,9801,3690,4045
+FBgn0038466,10,26,8,6,15,11,8
+FBgn0038467,612,663,285,334,697,406,424
+FBgn0038468,1,1,3,0,2,0,1
+FBgn0038469,16,21,3,9,18,6,7
+FBgn0038470,693,890,261,255,1430,307,281
+FBgn0038471,302,444,151,205,460,172,175
+FBgn0038472,252,436,133,178,406,162,187
+FBgn0038473,1364,1887,631,754,1780,740,793
+FBgn0038474,317,514,115,159,513,177,193
+FBgn0038475,428,701,262,309,720,297,354
+FBgn0038476,1335,1870,693,808,3086,1298,1351
+FBgn0038478,493,735,257,291,825,314,344
+FBgn0038479,1,1,1,1,0,0,1
+FBgn0038481,2,4,1,1,3,0,0
+FBgn0038482,0,0,0,0,0,0,0
+FBgn0038484,57,47,22,29,24,14,8
+FBgn0038485,1,1,0,0,1,0,0
+FBgn0038486,0,0,0,0,0,0,0
+FBgn0038487,4,5,4,1,7,1,1
+FBgn0038488,596,881,348,376,741,396,463
+FBgn0038490,92,201,57,60,167,59,65
+FBgn0038491,449,545,307,350,467,393,423
+FBgn0038492,1,3,3,1,4,2,0
+FBgn0038494,2,2,0,1,2,1,1
+FBgn0038498,0,2,0,0,1,3,0
+FBgn0038499,1057,1422,583,648,1302,611,638
+FBgn0038500,1,0,0,0,2,0,0
+FBgn0038501,767,1424,468,498,1178,520,604
+FBgn0038504,6026,10003,3627,4014,9219,3772,4123
+FBgn0038505,0,0,0,0,0,0,0
+FBgn0038506,0,0,0,0,0,0,0
+FBgn0038507,0,0,0,0,0,0,0
+FBgn0038508,0,0,0,0,0,0,0
+FBgn0038509,0,0,0,0,0,0,0
+FBgn0038510,0,0,0,0,0,0,0
+FBgn0038511,1,0,0,0,0,0,1
+FBgn0038512,0,0,0,0,0,0,0
+FBgn0038515,555,1149,349,421,807,322,353
+FBgn0038516,216,346,134,174,295,123,200
+FBgn0038519,789,1111,376,479,1045,502,572
+FBgn0038522,0,0,0,0,0,0,0
+FBgn0038523,0,0,0,0,0,0,0
+FBgn0038524,496,707,233,288,670,306,331
+FBgn0038525,0,0,0,0,0,0,0
+FBgn0038526,0,0,0,0,0,0,0
+FBgn0038527,24,36,8,13,48,20,28
+FBgn0038528,90,149,64,77,415,158,203
+FBgn0038529,0,0,0,0,1,0,0
+FBgn0038530,32,43,13,14,91,22,35
+FBgn0038531,0,0,0,0,0,0,0
+FBgn0038532,570,966,264,238,957,285,321
+FBgn0038533,1234,2752,692,909,1850,798,835
+FBgn0038535,5252,10458,3588,3675,8709,3862,4229
+FBgn0038536,824,960,332,496,1020,494,535
+FBgn0038538,4,5,4,5,4,5,4
+FBgn0038539,0,0,0,0,0,0,0
+FBgn0038540,0,0,0,0,0,0,0
+FBgn0038541,1,0,1,1,0,0,0
+FBgn0038542,1,0,0,0,0,0,0
+FBgn0038543,2,2,5,4,6,1,5
+FBgn0038544,8,12,7,8,8,1,8
+FBgn0038545,84,100,26,43,246,72,85
+FBgn0038546,577,982,473,511,834,447,460
+FBgn0038547,39,77,22,17,61,17,32
+FBgn0038548,122,227,81,79,191,102,80
+FBgn0038549,138,261,76,90,230,100,97
+FBgn0038550,1,4,1,0,7,2,0
+FBgn0038551,556,951,313,373,717,331,343
+FBgn0038552,2602,3429,1453,1956,2535,1554,1794
+FBgn0038554,28,41,29,27,78,38,51
+FBgn0038558,0,0,0,0,0,0,0
+FBgn0038564,95,167,46,57,158,65,60
+FBgn0038565,3,8,4,4,8,4,4
+FBgn0038566,0,1,0,0,1,0,0
+FBgn0038567,0,1,0,0,0,0,0
+FBgn0038568,0,0,0,0,0,0,0
+FBgn0038569,645,954,354,397,793,495,461
+FBgn0038570,0,0,0,0,0,0,0
+FBgn0038571,0,0,0,0,0,0,0
+FBgn0038575,12,15,9,9,12,10,3
+FBgn0038576,507,845,305,367,780,407,427
+FBgn0038577,257,416,154,182,421,213,235
+FBgn0038578,659,831,318,394,758,417,482
+FBgn0038579,7,5,1,1,4,1,3
+FBgn0038581,11,10,6,8,9,9,4
+FBgn0038582,83,178,31,59,170,59,84
+FBgn0038583,201,339,119,123,265,140,166
+FBgn0038584,497,658,208,327,671,304,336
+FBgn0038585,605,912,290,409,711,375,380
+FBgn0038586,267,353,132,177,334,180,209
+FBgn0038587,2800,3665,1655,1999,3279,1797,1833
+FBgn0038588,148,229,86,103,269,138,131
+FBgn0038589,11,19,14,15,23,6,7
+FBgn0038590,97,154,58,77,135,83,86
+FBgn0038592,2,5,2,2,0,2,3
+FBgn0038593,677,961,336,400,940,437,460
+FBgn0038595,143,318,126,160,156,94,91
+FBgn0038596,0,2,1,0,1,0,0
+FBgn0038597,1016,1236,497,633,1134,629,658
+FBgn0038598,25,44,11,13,29,12,16
+FBgn0038601,471,625,226,250,571,229,280
+FBgn0038602,1,1,1,0,0,0,1
+FBgn0038603,33,41,21,17,16,10,9
+FBgn0038606,0,0,0,0,0,0,0
+FBgn0038607,5,2,3,1,4,0,2
+FBgn0038608,623,839,279,294,644,205,231
+FBgn0038609,521,583,239,346,528,311,354
+FBgn0038610,2,2,2,0,0,1,1
+FBgn0038611,2,3,1,0,1,0,0
+FBgn0038612,154,221,48,79,228,74,69
+FBgn0038613,10,6,4,6,9,3,4
+FBgn0038617,305,461,204,232,329,201,209
+FBgn0038619,180,230,86,143,198,108,132
+FBgn0038621,20,41,14,15,22,13,14
+FBgn0038626,1,2,3,0,1,0,0
+FBgn0038627,2,7,1,4,10,1,8
+FBgn0038628,2,7,0,1,8,2,2
+FBgn0038629,5,10,3,2,16,9,10
+FBgn0038630,0,0,0,0,0,0,0
+FBgn0038631,0,0,0,0,0,0,1
+FBgn0038632,0,0,0,0,1,0,0
+FBgn0038633,28,38,14,12,39,14,22
+FBgn0038638,969,1561,561,668,1089,567,640
+FBgn0038639,353,463,181,253,520,229,240
+FBgn0038640,224,410,137,150,360,181,163
+FBgn0038641,3,0,1,0,1,2,2
+FBgn0038642,0,0,0,1,1,1,0
+FBgn0038643,0,1,0,0,0,0,0
+FBgn0038645,0,5,1,4,3,0,1
+FBgn0038646,0,3,1,1,2,0,1
+FBgn0038647,9,10,3,1,8,3,4
+FBgn0038649,459,574,217,253,407,263,240
+FBgn0038651,3111,4942,1848,1790,3796,1683,1707
+FBgn0038652,242,413,194,157,401,176,210
+FBgn0038653,7,12,9,1,19,3,2
+FBgn0038654,3,4,0,2,4,0,3
+FBgn0038655,3,1,0,1,3,1,1
+FBgn0038656,0,0,0,0,1,0,0
+FBgn0038658,11,16,3,9,9,1,7
+FBgn0038659,1060,1841,603,637,1424,577,626
+FBgn0038660,1972,3147,1290,1516,1964,1036,1217
+FBgn0038662,391,630,170,226,484,223,222
+FBgn0038665,2,1,0,0,3,1,1
+FBgn0038666,454,679,226,255,465,293,250
+FBgn0038667,432,803,234,259,571,233,264
+FBgn0038672,197,236,85,87,225,98,116
+FBgn0038673,159,284,75,85,265,108,92
+FBgn0038674,10,18,6,7,8,4,6
+FBgn0038675,244,489,144,198,375,213,230
+FBgn0038676,0,2,1,1,4,0,0
+FBgn0038678,244,373,95,110,277,116,122
+FBgn0038679,124,144,77,58,192,74,108
+FBgn0038680,1009,1634,509,634,1734,508,535
+FBgn0038681,253,453,148,208,403,125,132
+FBgn0038682,47,82,20,26,64,22,18
+FBgn0038683,710,1251,442,450,1064,440,531
+FBgn0038685,1,2,1,0,0,0,1
+FBgn0038686,472,699,296,300,610,334,347
+FBgn0038690,39,34,18,21,35,12,22
+FBgn0038691,9,9,5,6,11,2,5
+FBgn0038692,235,358,142,138,345,166,188
+FBgn0038693,78,125,45,47,94,40,48
+FBgn0038694,1,0,0,0,0,0,0
+FBgn0038695,0,1,1,1,0,0,0
+FBgn0038697,1,2,1,0,3,1,0
+FBgn0038700,0,0,0,0,0,0,0
+FBgn0038701,0,0,1,0,1,0,1
+FBgn0038702,0,1,0,0,1,3,2
+FBgn0038704,595,1194,311,362,1049,373,416
+FBgn0038705,48,60,22,26,117,27,30
+FBgn0038706,0,1,0,0,1,0,0
+FBgn0038708,3,7,1,3,6,0,2
+FBgn0038709,0,0,0,0,1,1,0
+FBgn0038714,0,2,0,1,0,0,0
+FBgn0038715,0,0,0,0,1,2,0
+FBgn0038716,1,0,1,1,1,1,2
+FBgn0038717,17,25,7,18,35,12,13
+FBgn0038718,4,3,1,0,6,2,1
+FBgn0038719,3,1,0,0,2,1,0
+FBgn0038720,235,377,133,144,554,225,286
+FBgn0038721,1144,1626,576,558,1401,508,485
+FBgn0038722,610,939,334,402,779,445,436
+FBgn0038723,685,1018,388,519,1002,586,639
+FBgn0038725,30,61,26,17,40,18,30
+FBgn0038727,4,12,3,4,14,4,7
+FBgn0038730,0,0,0,0,0,0,0
+FBgn0038731,0,0,0,0,0,0,1
+FBgn0038732,1,1,0,0,3,1,1
+FBgn0038733,1,2,0,0,1,1,0
+FBgn0038734,0,7,2,2,4,4,7
+FBgn0038735,569,645,245,270,736,269,335
+FBgn0038736,2272,3539,1369,1426,3129,1382,1510
+FBgn0038737,191,230,81,127,242,126,147
+FBgn0038738,3085,4829,1563,2069,4063,1988,2223
+FBgn0038739,483,425,227,342,531,333,353
+FBgn0038740,5,8,3,2,5,2,5
+FBgn0038741,153,343,106,116,284,102,135
+FBgn0038742,1012,1556,582,795,1407,747,900
+FBgn0038744,58,81,30,36,47,25,27
+FBgn0038745,1696,3001,1070,1279,2059,999,1047
+FBgn0038746,797,1514,423,476,1144,405,482
+FBgn0038747,2469,3746,1583,1698,2838,1789,1941
+FBgn0038748,1,0,0,0,1,2,0
+FBgn0038749,0,0,0,0,0,0,0
+FBgn0038750,0,0,0,1,2,1,0
+FBgn0038751,2,2,1,1,0,1,0
+FBgn0038752,0,0,0,0,0,0,1
+FBgn0038753,0,2,0,0,2,2,1
+FBgn0038755,199,386,148,152,403,163,196
+FBgn0038756,0,0,0,0,1,0,0
+FBgn0038760,760,1274,469,472,953,513,554
+FBgn0038761,1,3,0,1,4,3,2
+FBgn0038762,6,1,2,3,5,1,0
+FBgn0038763,1015,1321,521,604,1228,609,672
+FBgn0038765,107,128,30,68,172,68,71
+FBgn0038766,80,123,28,57,134,54,60
+FBgn0038767,301,469,146,206,407,213,282
+FBgn0038768,922,1657,616,677,1135,685,773
+FBgn0038769,291,544,204,238,390,220,258
+FBgn0038771,1880,2989,1141,1443,2426,1376,1469
+FBgn0038772,357,707,199,243,592,211,245
+FBgn0038773,0,1,0,1,0,0,0
+FBgn0038774,0,1,0,0,0,0,0
+FBgn0038775,0,0,0,0,0,0,0
+FBgn0038780,1721,4008,1927,1591,2059,1410,1484
+FBgn0038783,1,2,0,0,1,0,0
+FBgn0038784,7,11,4,5,13,6,7
+FBgn0038787,5561,8272,3271,3281,7174,3856,4183
+FBgn0038788,605,1111,314,413,853,346,395
+FBgn0038789,0,0,0,0,0,2,0
+FBgn0038790,0,0,0,0,0,0,0
+FBgn0038795,0,0,1,0,0,0,0
+FBgn0038796,0,0,0,0,1,0,0
+FBgn0038797,0,0,0,0,0,0,0
+FBgn0038798,1,1,0,0,0,0,0
+FBgn0038799,0,0,1,0,1,0,0
+FBgn0038803,533,770,279,340,718,437,435
+FBgn0038804,90,166,50,64,219,120,123
+FBgn0038805,634,1068,348,471,1590,718,845
+FBgn0038806,311,457,171,202,363,229,220
+FBgn0038808,287,513,119,186,479,184,200
+FBgn0038809,2544,3454,1478,1616,3073,1468,1767
+FBgn0038810,981,1462,561,652,1295,704,807
+FBgn0038811,355,716,206,272,480,253,279
+FBgn0038814,2,3,0,0,3,2,2
+FBgn0038815,165,241,90,101,413,166,167
+FBgn0038816,559,688,299,315,654,308,263
+FBgn0038818,2,3,1,1,5,0,1
+FBgn0038819,0,1,1,0,0,0,1
+FBgn0038820,0,0,0,0,1,0,0
+FBgn0038821,41,46,18,16,74,27,28
+FBgn0038826,895,3073,1166,951,2364,907,952
+FBgn0038827,623,846,262,308,873,349,344
+FBgn0038828,9,10,4,2,22,8,8
+FBgn0038829,665,1170,476,521,1135,646,762
+FBgn0038830,118,197,63,75,188,70,74
+FBgn0038832,703,794,254,317,143,56,66
+FBgn0038833,0,0,0,0,2,0,0
+FBgn0038834,16179,31723,11559,17696,26378,13198,16686
+FBgn0038837,5,11,2,1,10,2,3
+FBgn0038838,0,0,0,0,0,0,0
+FBgn0038839,1,1,0,0,0,0,0
+FBgn0038840,0,1,0,0,0,0,0
+FBgn0038842,1679,3054,1120,1319,2560,1042,1112
+FBgn0038845,0,1,0,0,3,1,2
+FBgn0038846,11,25,9,10,22,12,8
+FBgn0038847,0,1,0,0,0,0,0
+FBgn0038849,1,3,1,1,3,0,1
+FBgn0038850,0,1,0,1,4,2,3
+FBgn0038851,13,40,19,15,27,20,17
+FBgn0038852,9,14,6,7,14,7,12
+FBgn0038853,2377,3574,1453,1509,2848,1558,1636
+FBgn0038854,1130,1793,674,742,1690,770,853
+FBgn0038855,757,1182,445,547,977,534,591
+FBgn0038856,606,779,267,350,790,373,385
+FBgn0038857,501,722,226,314,662,291,320
+FBgn0038858,144,188,72,104,284,110,129
+FBgn0038859,8,11,3,5,3,2,1
+FBgn0038860,188,330,136,194,330,143,116
+FBgn0038861,132,184,52,100,214,92,101
+FBgn0038862,909,1417,513,560,1156,574,644
+FBgn0038865,467,582,214,289,274,133,157
+FBgn0038866,35,76,27,28,102,26,29
+FBgn0038868,482,890,331,389,767,376,460
+FBgn0038869,548,812,322,444,607,383,392
+FBgn0038870,911,1247,482,593,1369,703,775
+FBgn0038871,174,227,89,130,264,99,130
+FBgn0038872,1828,3382,1241,1332,2361,1290,1343
+FBgn0038873,11,31,22,18,40,14,18
+FBgn0038874,83,230,102,103,106,60,73
+FBgn0038876,274,324,167,181,389,214,242
+FBgn0038877,1375,2306,678,882,1332,474,612
+FBgn0038878,4,11,1,5,8,4,7
+FBgn0038879,0,0,0,0,1,0,0
+FBgn0038880,1,2,0,0,1,1,1
+FBgn0038881,1340,2093,865,861,1726,884,914
+FBgn0038886,0,0,1,0,0,0,0
+FBgn0038887,0,0,0,0,0,0,0
+FBgn0038888,0,0,0,0,0,0,0
+FBgn0038889,508,754,227,249,668,248,274
+FBgn0038890,3224,3561,1325,1522,2992,1301,1450
+FBgn0038891,0,1,0,0,0,1,0
+FBgn0038892,0,4,0,0,1,0,0
+FBgn0038893,612,1031,289,437,1159,411,470
+FBgn0038894,11,12,5,12,8,1,8
+FBgn0038897,5,10,4,1,8,2,3
+FBgn0038901,0,0,0,1,0,0,0
+FBgn0038902,2,7,0,1,1,3,1
+FBgn0038903,124,191,43,67,147,62,74
+FBgn0038909,261,347,98,140,267,101,110
+FBgn0038912,849,1069,429,471,738,364,363
+FBgn0038914,2,2,0,0,0,0,1
+FBgn0038915,0,0,0,0,0,0,0
+FBgn0038916,12,8,2,6,14,2,9
+FBgn0038917,168,188,77,105,258,127,121
+FBgn0038918,0,0,0,0,0,0,0
+FBgn0038919,0,1,0,0,0,0,0
+FBgn0038921,0,3,3,1,3,1,0
+FBgn0038922,1069,1196,547,609,1183,621,703
+FBgn0038923,208,252,86,138,251,133,137
+FBgn0038924,354,463,164,234,453,230,282
+FBgn0038925,741,1079,353,483,883,515,533
+FBgn0038926,16,30,8,20,36,21,18
+FBgn0038927,1068,1589,628,696,1208,637,728
+FBgn0038928,280,353,122,123,336,125,160
+FBgn0038929,0,1,2,0,2,0,0
+FBgn0038930,0,1,0,0,1,0,0
+FBgn0038931,0,0,0,0,2,0,0
+FBgn0038934,0,4,4,2,7,4,3
+FBgn0038938,2,1,0,2,0,1,1
+FBgn0038941,0,1,0,0,0,0,0
+FBgn0038942,0,0,0,0,0,0,0
+FBgn0038943,1,0,0,0,0,0,1
+FBgn0038944,0,0,0,0,0,0,0
+FBgn0038945,0,2,0,0,0,0,0
+FBgn0038946,0,1,0,0,0,0,0
+FBgn0038947,2132,3927,1098,1422,3579,1292,1452
+FBgn0038948,791,1079,476,646,1070,634,747
+FBgn0038950,588,859,358,497,742,385,477
+FBgn0038951,134,141,72,81,218,114,111
+FBgn0038952,114,388,125,112,499,129,198
+FBgn0038953,935,1365,449,494,1774,663,623
+FBgn0038956,0,3,0,1,2,0,1
+FBgn0038957,49,108,30,44,61,23,32
+FBgn0038958,0,0,0,0,1,0,2
+FBgn0038959,0,0,0,0,0,0,0
+FBgn0038960,0,1,0,1,0,0,0
+FBgn0038961,381,477,186,239,493,217,223
+FBgn0038964,2372,3088,1022,1352,2928,1422,1537
+FBgn0038965,342,424,185,233,402,219,246
+FBgn0038966,429,721,217,287,520,206,242
+FBgn0038967,4,6,3,1,2,1,2
+FBgn0038968,1548,2144,810,728,2018,786,752
+FBgn0038972,387,648,220,262,798,300,354
+FBgn0038973,30,43,17,11,20,17,21
+FBgn0038974,186,265,100,131,270,145,130
+FBgn0038975,18,24,9,13,9,8,4
+FBgn0038976,597,1022,283,407,878,375,451
+FBgn0038977,5,10,8,8,11,9,9
+FBgn0038978,0,0,0,1,0,0,1
+FBgn0038979,0,0,0,0,1,0,0
+FBgn0038980,2,4,3,2,5,1,2
+FBgn0038981,1211,1727,647,765,1662,771,893
+FBgn0038983,0,1,0,1,1,0,0
+FBgn0038984,1759,2298,982,1157,2586,1127,1269
+FBgn0038986,0,0,0,0,1,0,0
+FBgn0038989,474,792,255,345,575,271,307
+FBgn0038993,12,17,7,4,16,4,9
+FBgn0038996,648,878,382,478,780,439,546
+FBgn0039000,664,919,381,429,563,293,303
+FBgn0039002,2,1,0,0,0,0,0
+FBgn0039003,697,1043,381,524,1006,518,587
+FBgn0039004,952,1247,449,529,1303,530,595
+FBgn0039005,14,20,2,6,26,14,11
+FBgn0039006,697,1008,365,374,1322,520,553
+FBgn0039007,0,0,0,0,0,0,1
+FBgn0039008,0,0,1,0,3,2,0
+FBgn0039009,0,2,0,0,1,1,1
+FBgn0039010,2,3,2,1,6,2,2
+FBgn0039013,222,292,134,192,261,160,173
+FBgn0039014,0,0,0,0,0,0,0
+FBgn0039015,4,7,3,3,10,4,3
+FBgn0039016,1332,2050,752,827,1856,963,999
+FBgn0039017,191,273,78,90,253,106,108
+FBgn0039018,402,574,210,231,590,237,268
+FBgn0039019,268,390,146,203,423,258,252
+FBgn0039020,113,167,43,72,131,60,73
+FBgn0039022,98,179,61,59,137,45,60
+FBgn0039023,137,256,93,68,191,67,67
+FBgn0039024,138,310,80,76,224,58,95
+FBgn0039025,241,379,135,146,292,132,154
+FBgn0039026,3401,5583,2357,2225,3571,1959,2042
+FBgn0039027,0,0,0,0,0,0,1
+FBgn0039028,0,1,0,0,0,0,0
+FBgn0039029,0,0,0,0,0,0,0
+FBgn0039030,0,0,0,0,0,0,0
+FBgn0039031,0,0,0,0,0,0,0
+FBgn0039033,0,1,0,0,0,0,0
+FBgn0039034,0,1,0,0,0,0,0
+FBgn0039038,1,0,0,0,1,0,0
+FBgn0039039,0,2,1,0,1,0,0
+FBgn0039040,1,0,0,0,1,0,0
+FBgn0039041,0,0,0,0,0,0,0
+FBgn0039042,0,1,0,1,0,1,0
+FBgn0039043,5,14,8,7,6,1,6
+FBgn0039044,306,400,163,188,437,229,239
+FBgn0039045,1552,1594,687,901,1260,651,750
+FBgn0039048,1,3,2,3,3,2,3
+FBgn0039049,334,323,142,190,377,199,216
+FBgn0039050,10,8,3,3,8,2,3
+FBgn0039051,28,46,23,22,61,25,25
+FBgn0039052,5,20,6,4,32,19,9
+FBgn0039053,2,1,1,0,1,1,0
+FBgn0039054,7,48,7,3,9,1,8
+FBgn0039055,1402,1965,689,817,1641,819,830
+FBgn0039056,1942,2821,1072,1302,2443,1292,1584
+FBgn0039058,53,45,36,21,54,22,23
+FBgn0039059,37,41,26,18,46,25,24
+FBgn0039060,132,179,90,67,88,45,47
+FBgn0039061,1429,1771,822,925,1267,712,784
+FBgn0039064,15,53,21,8,28,8,8
+FBgn0039065,258,395,112,121,433,133,158
+FBgn0039066,904,1540,575,568,1530,678,710
+FBgn0039067,375,578,182,251,498,227,250
+FBgn0039068,104,107,31,49,99,59,74
+FBgn0039069,51,81,26,34,43,9,19
+FBgn0039070,5,10,2,6,7,2,2
+FBgn0039071,10,23,4,8,24,6,10
+FBgn0039073,162,238,117,96,345,190,139
+FBgn0039074,1,2,0,0,4,2,0
+FBgn0039075,6,11,5,6,3,1,2
+FBgn0039077,0,0,0,0,0,0,0
+FBgn0039078,1,2,1,0,0,1,1
+FBgn0039079,0,0,0,0,0,0,0
+FBgn0039080,0,0,0,0,0,0,0
+FBgn0039081,0,0,0,0,0,0,0
+FBgn0039083,1,0,0,0,0,0,0
+FBgn0039084,0,0,0,1,1,0,0
+FBgn0039085,1,1,0,1,0,0,0
+FBgn0039086,0,0,1,0,0,0,0
+FBgn0039087,0,0,0,0,0,0,0
+FBgn0039088,0,0,0,0,0,0,0
+FBgn0039089,0,0,0,0,2,0,0
+FBgn0039091,0,1,0,1,1,0,1
+FBgn0039092,0,0,0,0,0,0,0
+FBgn0039093,0,0,0,0,0,0,0
+FBgn0039094,22,39,13,21,9,4,8
+FBgn0039098,559,661,210,295,320,142,168
+FBgn0039099,85,62,21,33,60,24,40
+FBgn0039101,584,589,214,242,315,134,166
+FBgn0039102,13,13,1,7,11,7,7
+FBgn0039104,0,0,0,0,0,0,0
+FBgn0039106,0,1,0,1,2,1,2
+FBgn0039107,0,2,0,1,1,0,0
+FBgn0039108,105,275,106,109,391,146,161
+FBgn0039109,795,1118,413,449,456,174,221
+FBgn0039110,982,1303,590,773,1157,891,948
+FBgn0039111,243,339,114,150,331,161,167
+FBgn0039112,328,563,191,250,532,285,345
+FBgn0039113,394,534,240,262,1108,443,582
+FBgn0039114,89,227,77,87,178,80,85
+FBgn0039115,233,262,90,96,226,125,114
+FBgn0039116,162,320,82,101,275,80,94
+FBgn0039117,496,842,220,289,798,330,371
+FBgn0039118,60,64,20,47,61,32,50
+FBgn0039120,4169,7708,2719,2713,6468,2965,3107
+FBgn0039124,2,5,4,2,18,6,2
+FBgn0039125,1329,1440,594,751,1867,1012,1065
+FBgn0039126,375,557,207,269,600,289,290
+FBgn0039127,51,119,32,34,111,31,36
+FBgn0039128,137,223,68,80,240,62,81
+FBgn0039129,19,65,18,13,78,30,29
+FBgn0039130,1938,3169,935,1219,2654,1246,1361
+FBgn0039131,4,3,2,4,9,3,3
+FBgn0039132,543,681,257,261,891,281,284
+FBgn0039135,953,1289,485,613,1190,443,580
+FBgn0039136,1304,1756,691,832,1713,839,933
+FBgn0039137,391,591,203,209,496,193,223
+FBgn0039139,239,369,146,162,416,216,227
+FBgn0039140,952,1475,567,636,1244,601,648
+FBgn0039141,757,1103,463,531,1087,585,627
+FBgn0039145,73,147,16,34,103,27,35
+FBgn0039147,0,2,1,0,0,0,0
+FBgn0039149,48,136,28,38,146,53,36
+FBgn0039150,597,714,293,376,618,375,376
+FBgn0039151,0,1,0,0,0,2,0
+FBgn0039152,7,20,9,5,16,3,4
+FBgn0039153,182,338,70,117,325,110,118
+FBgn0039154,4,9,5,4,7,1,2
+FBgn0039155,1527,2220,741,931,70,38,52
+FBgn0039156,564,773,283,354,601,311,313
+FBgn0039157,573,891,283,341,722,325,297
+FBgn0039158,145,175,51,84,189,68,77
+FBgn0039159,69,93,24,30,97,48,43
+FBgn0039160,755,1153,421,501,897,468,557
+FBgn0039161,0,3,0,1,1,0,1
+FBgn0039163,439,841,230,332,787,334,372
+FBgn0039164,675,1132,348,365,942,323,353
+FBgn0039165,241,408,130,156,374,127,141
+FBgn0039167,189,227,98,109,211,96,99
+FBgn0039169,497,871,284,355,559,292,306
+FBgn0039170,18,35,11,17,62,9,11
+FBgn0039172,1772,2807,781,1063,2671,1167,1409
+FBgn0039175,951,1122,440,556,1131,607,685
+FBgn0039177,2,1,0,1,4,1,0
+FBgn0039178,3,13,3,4,27,31,17
+FBgn0039179,398,725,259,284,601,298,292
+FBgn0039180,14,15,6,6,19,11,6
+FBgn0039182,1331,2055,727,780,1834,791,740
+FBgn0039183,1233,1614,592,750,1332,766,861
+FBgn0039184,1,3,0,2,2,2,5
+FBgn0039186,1714,2500,1308,1325,1984,1224,1293
+FBgn0039187,1372,1879,694,841,1705,833,821
+FBgn0039188,377,630,210,258,518,250,276
+FBgn0039189,161,261,99,85,222,106,124
+FBgn0039190,0,0,0,0,1,0,0
+FBgn0039192,0,0,0,0,0,0,0
+FBgn0039193,0,0,0,0,0,0,0
+FBgn0039194,0,0,0,0,0,0,0
+FBgn0039195,0,0,0,0,0,1,0
+FBgn0039196,0,0,0,0,0,0,0
+FBgn0039197,0,0,0,0,0,0,0
+FBgn0039198,0,0,0,0,0,0,0
+FBgn0039199,0,0,0,0,1,0,0
+FBgn0039200,0,0,0,0,0,0,0
+FBgn0039201,29,29,16,19,42,18,16
+FBgn0039202,2,0,0,3,1,1,0
+FBgn0039203,1,4,2,1,5,2,0
+FBgn0039204,525,938,366,480,775,486,549
+FBgn0039205,76,94,26,47,125,55,42
+FBgn0039206,866,1703,488,515,1322,520,594
+FBgn0039207,2684,3567,1288,1464,3383,1524,1612
+FBgn0039208,6245,8307,3051,3583,6324,2984,3263
+FBgn0039209,1683,4074,1370,1277,2350,889,1031
+FBgn0039210,289,621,183,208,471,202,260
+FBgn0039212,560,799,293,354,553,317,373
+FBgn0039213,1818,3170,1102,1247,2863,1337,1483
+FBgn0039214,3405,5736,2372,2195,4904,2669,2573
+FBgn0039215,1269,2039,899,1011,1676,1040,1178
+FBgn0039217,0,1,0,1,0,1,0
+FBgn0039218,222,328,78,162,474,122,109
+FBgn0039219,444,604,209,275,676,374,395
+FBgn0039223,848,1231,411,491,1206,537,621
+FBgn0039224,0,2,0,0,0,0,0
+FBgn0039225,1,1,1,2,2,0,0
+FBgn0039226,82,95,29,42,125,42,55
+FBgn0039227,1523,2562,937,948,2164,1041,1011
+FBgn0039228,5,1,3,3,5,1,1
+FBgn0039229,1797,2860,1140,1264,2224,1281,1364
+FBgn0039232,0,1,1,1,0,1,1
+FBgn0039233,320,457,128,187,352,167,187
+FBgn0039234,2352,3638,1238,1437,3415,1359,1426
+FBgn0039235,0,0,0,0,0,0,0
+FBgn0039237,0,1,0,0,0,0,0
+FBgn0039238,1,0,0,1,3,2,0
+FBgn0039239,0,0,0,1,2,0,0
+FBgn0039240,1259,1944,754,826,1446,822,929
+FBgn0039241,651,825,366,483,670,420,485
+FBgn0039244,2,3,1,0,2,1,0
+FBgn0039246,0,0,0,0,0,0,0
+FBgn0039249,242,377,136,177,284,131,180
+FBgn0039250,1465,2255,740,793,2190,823,856
+FBgn0039251,50,33,19,26,42,22,18
+FBgn0039252,769,1207,465,517,1187,502,531
+FBgn0039254,190,406,118,149,359,167,224
+FBgn0039255,49,78,34,27,42,17,25
+FBgn0039257,772,1261,446,461,513,237,289
+FBgn0039258,285,414,137,188,390,213,245
+FBgn0039259,114,183,48,67,182,74,71
+FBgn0039260,1351,2094,747,888,1718,753,743
+FBgn0039261,1052,1919,607,660,1736,720,725
+FBgn0039264,3,6,3,4,7,2,2
+FBgn0039265,580,987,302,388,943,314,383
+FBgn0039266,900,1730,479,548,1812,623,678
+FBgn0039269,280,450,178,224,392,168,227
+FBgn0039270,132,251,69,83,168,75,77
+FBgn0039271,103,192,44,66,214,61,51
+FBgn0039272,3,3,1,1,3,2,1
+FBgn0039273,278,394,123,118,564,189,174
+FBgn0039274,302,423,106,144,373,108,133
+FBgn0039277,0,9,1,3,8,2,1
+FBgn0039280,0,0,0,0,0,0,0
+FBgn0039282,1,4,1,0,1,3,3
+FBgn0039283,0,0,0,1,0,1,0
+FBgn0039284,0,0,0,0,0,0,0
+FBgn0039286,1,0,0,0,0,0,0
+FBgn0039288,0,0,0,0,0,0,0
+FBgn0039290,473,500,205,221,377,203,211
+FBgn0039291,114,180,44,47,189,35,51
+FBgn0039293,749,1183,358,367,1174,475,447
+FBgn0039294,62,61,21,28,48,17,31
+FBgn0039296,670,862,350,411,1185,470,538
+FBgn0039297,4,17,3,12,11,7,10
+FBgn0039298,0,0,0,0,1,0,0
+FBgn0039299,0,0,0,0,0,0,0
+FBgn0039300,11748,21302,6483,8582,18586,7428,8193
+FBgn0039301,319,385,143,196,343,194,220
+FBgn0039302,7377,13409,4277,4268,11108,4959,4725
+FBgn0039303,2033,3498,1014,1183,2906,1160,1259
+FBgn0039304,599,787,252,340,954,314,396
+FBgn0039305,148,317,62,90,306,142,140
+FBgn0039306,534,835,278,360,678,260,308
+FBgn0039307,0,1,0,0,4,1,0
+FBgn0039308,0,0,0,0,0,0,0
+FBgn0039309,0,0,0,0,0,0,0
+FBgn0039310,0,0,0,0,1,0,0
+FBgn0039311,0,0,0,0,0,0,0
+FBgn0039312,0,3,0,5,4,0,3
+FBgn0039313,1,6,0,2,7,1,0
+FBgn0039315,3,4,0,1,6,1,4
+FBgn0039316,7,8,3,0,7,1,1
+FBgn0039319,2,1,0,1,0,0,0
+FBgn0039321,164,244,82,97,155,70,86
+FBgn0039323,34,111,32,34,129,54,55
+FBgn0039324,0,4,0,0,2,1,0
+FBgn0039325,2,8,1,1,1,0,1
+FBgn0039326,1,22,3,0,4,0,1
+FBgn0039328,185,367,110,119,336,97,102
+FBgn0039329,76,128,58,66,137,76,76
+FBgn0039331,0,4,5,2,6,0,0
+FBgn0039332,0,5,3,4,9,1,1
+FBgn0039335,256,345,136,181,387,146,160
+FBgn0039336,129,180,64,75,189,84,91
+FBgn0039337,184,337,88,122,277,130,118
+FBgn0039338,3320,5057,1831,2088,4438,2086,2306
+FBgn0039339,244,417,147,138,330,175,163
+FBgn0039341,1326,1909,782,990,1991,1044,1182
+FBgn0039342,0,0,0,0,0,0,0
+FBgn0039343,0,2,1,1,2,1,2
+FBgn0039344,0,4,2,0,4,1,2
+FBgn0039346,2,2,4,2,4,1,2
+FBgn0039347,31,35,13,5,50,16,20
+FBgn0039348,918,1269,513,610,1179,716,715
+FBgn0039349,435,639,253,303,622,278,352
+FBgn0039350,210,365,109,145,348,152,169
+FBgn0039352,578,1181,318,311,807,270,274
+FBgn0039354,48,77,42,44,54,29,22
+FBgn0039355,107,154,53,65,175,95,73
+FBgn0039356,19,21,8,18,36,13,24
+FBgn0039357,84,131,33,53,151,60,50
+FBgn0039358,1281,1785,666,745,1369,742,805
+FBgn0039359,23705,36485,10292,17836,28710,14553,15403
+FBgn0039360,455,506,220,244,548,295,321
+FBgn0039366,0,0,0,0,0,0,0
+FBgn0039367,0,0,0,0,0,0,0
+FBgn0039368,0,0,0,0,0,0,0
+FBgn0039369,0,0,0,0,0,0,0
+FBgn0039370,0,0,0,0,0,0,0
+FBgn0039371,39,31,0,3,23,7,4
+FBgn0039373,3,3,1,0,3,0,1
+FBgn0039374,0,0,0,0,0,0,0
+FBgn0039376,3,1,0,0,1,1,1
+FBgn0039378,3,5,4,5,8,1,2
+FBgn0039379,763,1196,392,514,1366,585,649
+FBgn0039380,0,1,1,0,0,0,0
+FBgn0039381,703,854,418,499,1373,741,764
+FBgn0039385,643,1144,433,535,1357,656,685
+FBgn0039386,22,16,10,9,14,12,6
+FBgn0039387,5,9,4,7,7,4,9
+FBgn0039395,0,0,0,0,0,0,0
+FBgn0039396,0,0,1,2,1,0,0
+FBgn0039398,1,1,0,0,0,0,1
+FBgn0039402,1358,2091,738,1007,1940,858,999
+FBgn0039403,0,0,0,0,0,0,0
+FBgn0039404,232,385,116,157,333,156,176
+FBgn0039405,0,0,0,0,0,0,0
+FBgn0039406,3397,5202,1945,2749,5414,2524,2729
+FBgn0039407,180,266,90,128,244,118,113
+FBgn0039408,1,6,1,1,0,2,2
+FBgn0039411,2,5,0,1,1,2,1
+FBgn0039413,3,3,1,2,4,4,1
+FBgn0039415,15,46,9,24,50,23,15
+FBgn0039417,301,374,132,182,327,134,144
+FBgn0039419,2310,3552,1441,1482,1490,693,773
+FBgn0039420,35,49,22,15,60,23,38
+FBgn0039421,1,2,0,0,1,1,0
+FBgn0039424,0,1,0,0,4,0,0
+FBgn0039425,0,0,0,0,0,0,0
+FBgn0039427,758,1146,409,419,1094,462,487
+FBgn0039428,1,3,0,3,0,4,3
+FBgn0039429,7,11,6,6,18,12,5
+FBgn0039430,601,882,346,419,838,353,389
+FBgn0039431,3001,5329,1966,1741,4564,1719,1853
+FBgn0039434,0,0,0,0,0,1,1
+FBgn0039435,0,0,1,0,0,0,0
+FBgn0039436,0,0,0,0,0,0,0
+FBgn0039437,0,0,0,0,0,0,0
+FBgn0039438,1,0,0,0,0,0,0
+FBgn0039439,0,1,0,0,0,0,0
+FBgn0039440,0,0,0,0,0,0,0
+FBgn0039441,0,0,0,0,0,0,0
+FBgn0039443,0,0,0,0,0,0,0
+FBgn0039444,0,0,0,0,0,0,0
+FBgn0039448,0,0,0,0,0,0,0
+FBgn0039449,318,485,187,222,425,240,221
+FBgn0039450,1716,2341,841,1035,2097,1063,1168
+FBgn0039451,1598,2881,1222,1227,1944,1361,1327
+FBgn0039452,0,0,0,0,0,0,0
+FBgn0039453,2,0,1,0,3,1,2
+FBgn0039454,11,18,6,10,18,10,7
+FBgn0039459,258,349,118,146,312,164,170
+FBgn0039461,198,347,170,163,315,147,203
+FBgn0039462,95,151,43,49,185,66,73
+FBgn0039463,1,0,0,0,1,0,0
+FBgn0039464,499,944,385,467,1489,1037,1076
+FBgn0039465,575,632,288,315,876,403,418
+FBgn0039466,1999,3390,1326,1346,2639,1331,1388
+FBgn0039467,8486,10454,3591,4418,7930,3219,3636
+FBgn0039469,2,2,2,2,1,1,1
+FBgn0039470,0,0,0,0,1,0,0
+FBgn0039471,0,0,0,0,0,0,0
+FBgn0039472,0,0,0,0,0,0,0
+FBgn0039473,0,0,0,0,1,0,2
+FBgn0039474,2,1,3,1,3,1,0
+FBgn0039475,1,0,0,1,0,1,0
+FBgn0039476,0,1,0,0,2,0,1
+FBgn0039478,36,70,17,27,48,20,21
+FBgn0039479,84,160,76,81,394,229,250
+FBgn0039480,0,2,0,1,4,2,1
+FBgn0039481,2,1,0,3,1,0,2
+FBgn0039482,0,2,0,0,2,1,0
+FBgn0039483,1,3,2,0,0,2,0
+FBgn0039485,40,68,16,33,155,70,68
+FBgn0039486,6,4,0,5,6,6,8
+FBgn0039487,1461,1868,569,707,1998,819,934
+FBgn0039488,389,837,274,319,682,278,355
+FBgn0039489,247,231,85,99,330,117,137
+FBgn0039490,16,21,5,4,11,7,7
+FBgn0039491,3,1,1,0,5,1,3
+FBgn0039492,1471,2175,1114,1107,1898,1237,1422
+FBgn0039494,2585,3695,1737,2092,2414,1506,1855
+FBgn0039495,5,17,5,5,9,0,2
+FBgn0039498,16,28,1,6,18,6,6
+FBgn0039500,33,25,24,17,13,14,11
+FBgn0039501,215,321,104,133,234,127,153
+FBgn0039503,22,31,5,10,28,8,18
+FBgn0039504,22,33,9,9,23,12,9
+FBgn0039505,331,434,154,213,543,259,252
+FBgn0039507,1352,2379,966,1111,1626,990,1164
+FBgn0039508,2724,3361,1370,1765,3263,1676,1807
+FBgn0039509,532,1062,345,413,612,370,415
+FBgn0039510,23,67,18,26,58,25,27
+FBgn0039511,0,0,0,0,0,0,0
+FBgn0039518,0,0,0,0,0,0,0
+FBgn0039519,1,0,0,0,0,1,0
+FBgn0039520,0,0,0,0,0,0,0
+FBgn0039521,0,0,0,0,0,0,0
+FBgn0039522,0,0,0,0,0,0,0
+FBgn0039523,0,0,0,0,0,0,1
+FBgn0039525,320,455,196,261,664,297,361
+FBgn0039527,33,75,32,35,37,17,25
+FBgn0039528,4181,5663,2640,2655,4806,2608,2765
+FBgn0039529,0,0,1,2,2,1,0
+FBgn0039530,49,149,68,49,112,51,52
+FBgn0039531,189,251,98,140,272,145,149
+FBgn0039532,989,1906,539,543,1782,657,738
+FBgn0039536,11,18,9,4,7,6,6
+FBgn0039537,1045,1294,611,638,1308,743,764
+FBgn0039538,91,142,53,55,200,103,134
+FBgn0039540,117,182,51,78,203,97,103
+FBgn0039543,422,595,247,273,532,295,368
+FBgn0039544,1032,1905,707,838,1949,989,1152
+FBgn0039551,0,0,0,0,1,0,0
+FBgn0039552,0,0,0,0,0,0,0
+FBgn0039553,1,2,0,1,3,1,3
+FBgn0039554,891,1622,555,730,1339,688,770
+FBgn0039555,1572,2146,797,1072,1687,1056,1176
+FBgn0039557,562,1005,323,404,799,410,507
+FBgn0039558,323,499,201,255,563,274,289
+FBgn0039559,2732,3985,1546,1602,2999,1592,1624
+FBgn0039560,1457,2598,1112,1066,1986,1166,1332
+FBgn0039561,1362,2404,927,913,1806,962,1067
+FBgn0039562,20242,26666,11229,14075,27590,16999,18891
+FBgn0039563,691,1203,454,599,945,525,649
+FBgn0039564,76,62,34,41,61,30,33
+FBgn0039565,181,359,94,132,323,151,168
+FBgn0039566,1304,1547,595,858,1546,840,830
+FBgn0039568,2,1,1,1,1,0,2
+FBgn0039576,0,0,0,0,1,1,0
+FBgn0039577,0,0,0,0,0,0,0
+FBgn0039580,3130,3722,1817,2278,2699,1820,1961
+FBgn0039581,2238,4095,1600,1768,3422,1781,1797
+FBgn0039582,0,0,0,0,0,0,0
+FBgn0039584,0,1,1,0,0,1,0
+FBgn0039585,3,6,2,2,7,2,3
+FBgn0039588,183,291,96,123,271,139,132
+FBgn0039589,336,417,173,194,494,222,222
+FBgn0039590,1421,2231,952,846,2698,1316,1437
+FBgn0039591,2,0,5,0,2,0,0
+FBgn0039592,0,1,0,0,2,1,1
+FBgn0039593,21,40,7,18,126,50,66
+FBgn0039594,10,21,8,10,19,9,11
+FBgn0039595,0,0,0,1,0,0,0
+FBgn0039596,0,0,1,0,1,0,0
+FBgn0039597,0,0,0,0,0,0,0
+FBgn0039598,0,0,0,0,2,0,0
+FBgn0039599,0,0,0,0,0,0,0
+FBgn0039600,2335,3980,1498,1706,2952,1501,1709
+FBgn0039601,874,1460,500,690,1256,703,797
+FBgn0039602,535,869,287,305,886,349,382
+FBgn0039609,5,3,3,1,5,1,5
+FBgn0039611,3,18,9,5,17,5,9
+FBgn0039612,7260,9388,4142,5325,7912,3974,4349
+FBgn0039613,3326,6607,2039,2496,4138,1572,1806
+FBgn0039616,1,2,0,0,2,0,0
+FBgn0039617,0,0,0,1,2,1,2
+FBgn0039619,0,0,0,0,0,0,0
+FBgn0039620,25,69,20,30,40,16,27
+FBgn0039621,10,11,6,6,10,5,7
+FBgn0039622,136,175,59,48,203,89,84
+FBgn0039623,1090,1710,618,687,1489,635,664
+FBgn0039625,700,746,341,401,809,425,505
+FBgn0039626,635,1219,416,432,855,425,446
+FBgn0039627,229,327,121,115,289,128,140
+FBgn0039628,1,3,1,1,0,0,2
+FBgn0039629,2,10,1,2,4,1,6
+FBgn0039630,15,17,5,5,9,11,7
+FBgn0039631,153,265,89,111,292,128,114
+FBgn0039632,1221,2156,752,834,1911,855,981
+FBgn0039633,2793,6357,2511,2162,4186,2452,2358
+FBgn0039634,1430,2428,789,805,2108,863,881
+FBgn0039635,2108,2928,1274,1594,2289,1515,1637
+FBgn0039636,932,1549,581,665,1057,558,679
+FBgn0039637,4153,5773,2189,2769,3762,1944,2070
+FBgn0039638,768,1151,417,501,1121,569,588
+FBgn0039639,41,103,23,22,85,22,28
+FBgn0039640,92,209,68,85,51,23,23
+FBgn0039641,138,178,62,100,192,93,115
+FBgn0039642,193,294,103,136,296,154,163
+FBgn0039644,908,1741,632,700,2147,903,972
+FBgn0039645,3,6,2,3,5,1,2
+FBgn0039647,6,8,3,4,13,4,16
+FBgn0039648,1,1,1,0,2,0,0
+FBgn0039650,63,102,24,21,149,29,47
+FBgn0039651,44,75,44,39,164,91,83
+FBgn0039654,744,1195,505,544,1201,697,783
+FBgn0039655,3,18,12,8,13,6,6
+FBgn0039656,4,8,4,5,7,3,3
+FBgn0039659,4,5,1,5,4,3,3
+FBgn0039663,266,296,172,140,304,181,183
+FBgn0039664,85,125,53,70,119,67,82
+FBgn0039665,2167,2363,1383,1576,2421,1957,2277
+FBgn0039666,0,0,0,1,1,2,0
+FBgn0039667,7,31,15,12,19,9,12
+FBgn0039668,2586,3884,1819,1894,3011,1846,1991
+FBgn0039669,0,0,0,0,0,1,0
+FBgn0039670,0,1,0,0,1,0,0
+FBgn0039671,0,2,0,0,1,0,2
+FBgn0039673,3,11,7,6,9,4,4
+FBgn0039674,718,1177,432,479,1005,488,539
+FBgn0039675,0,0,0,0,0,0,0
+FBgn0039676,1,0,0,0,0,0,0
+FBgn0039677,1,0,0,2,0,0,0
+FBgn0039678,1,4,0,3,3,2,0
+FBgn0039679,19,86,3,1,62,4,1
+FBgn0039680,1654,2281,819,982,2418,1241,1234
+FBgn0039681,1,0,0,2,1,0,0
+FBgn0039682,92,312,87,120,187,104,120
+FBgn0039683,5,11,1,5,4,5,2
+FBgn0039684,0,0,0,0,0,0,0
+FBgn0039685,2,1,1,0,2,0,4
+FBgn0039686,0,4,0,1,4,0,1
+FBgn0039687,776,1264,302,457,1048,383,449
+FBgn0039688,7,16,7,7,13,10,8
+FBgn0039689,610,1058,332,498,993,532,622
+FBgn0039690,350,391,155,202,474,226,257
+FBgn0039691,3063,4840,1572,2020,4110,2059,2232
+FBgn0039694,105,212,79,69,123,60,71
+FBgn0039695,9,22,11,15,30,12,14
+FBgn0039696,803,1101,397,486,1231,657,696
+FBgn0039697,2276,3678,1568,1724,3617,1853,2045
+FBgn0039698,540,884,300,482,659,411,473
+FBgn0039702,444,639,252,303,602,305,345
+FBgn0039703,4,1,0,0,0,0,1
+FBgn0039704,11,10,10,10,12,9,6
+FBgn0039705,1316,2165,733,832,1743,933,934
+FBgn0039707,1,3,0,2,1,1,0
+FBgn0039709,9,6,8,3,5,3,1
+FBgn0039710,912,1358,634,744,1114,655,745
+FBgn0039711,514,850,281,360,869,394,395
+FBgn0039712,977,1680,573,738,1356,775,777
+FBgn0039713,91421,122479,54694,76063,91333,65723,69704
+FBgn0039714,2656,4632,1909,2254,2969,1344,1444
+FBgn0039718,0,0,0,0,2,0,0
+FBgn0039719,1,1,0,0,0,0,1
+FBgn0039722,1,0,1,1,1,0,0
+FBgn0039723,1,0,0,1,0,1,1
+FBgn0039726,395,580,169,266,597,271,278
+FBgn0039727,1649,2182,832,726,2347,911,890
+FBgn0039728,5,5,1,8,7,0,2
+FBgn0039730,364,847,306,324,723,296,349
+FBgn0039731,117,188,56,80,236,97,99
+FBgn0039732,139,235,87,108,266,96,84
+FBgn0039733,682,1196,452,562,884,489,563
+FBgn0039734,2,9,3,6,11,6,3
+FBgn0039735,1249,2313,656,943,2654,1109,1189
+FBgn0039736,31,54,20,25,41,18,24
+FBgn0039737,4906,6079,2801,3551,4821,3162,3574
+FBgn0039738,639,977,383,459,981,562,637
+FBgn0039739,0,0,0,0,1,0,0
+FBgn0039740,401,825,255,300,636,324,344
+FBgn0039741,710,947,361,405,715,381,387
+FBgn0039742,14,17,5,18,24,14,14
+FBgn0039743,1188,2145,702,837,1826,812,826
+FBgn0039744,1,4,1,1,4,3,2
+FBgn0039747,9,11,4,4,10,5,11
+FBgn0039748,0,0,0,1,1,0,0
+FBgn0039749,2,0,0,1,1,0,0
+FBgn0039751,236,394,127,143,349,166,198
+FBgn0039752,0,2,1,1,1,3,1
+FBgn0039754,2,4,2,6,14,3,4
+FBgn0039755,6,14,7,5,34,8,11
+FBgn0039756,1631,2432,1002,1272,2715,1596,1920
+FBgn0039757,43708,68285,26915,37131,49640,31582,35847
+FBgn0039758,1,2,0,1,2,0,2
+FBgn0039759,9,7,4,6,36,12,30
+FBgn0039760,4,4,0,1,4,3,3
+FBgn0039761,0,1,0,0,1,0,0
+FBgn0039764,131,290,47,62,233,51,52
+FBgn0039765,127,221,46,67,184,75,110
+FBgn0039766,37,178,36,35,166,49,47
+FBgn0039767,1250,2407,825,1062,1916,1053,1147
+FBgn0039768,1,1,4,0,2,1,0
+FBgn0039769,1,2,1,0,2,1,0
+FBgn0039770,0,0,0,1,0,1,0
+FBgn0039771,0,0,0,1,0,0,0
+FBgn0039773,357,636,216,299,491,272,351
+FBgn0039774,270,1048,348,426,770,411,452
+FBgn0039776,3778,5932,2553,3063,3728,2037,2485
+FBgn0039777,0,0,0,0,0,0,0
+FBgn0039778,1,0,0,0,0,0,0
+FBgn0039779,0,0,0,0,2,0,0
+FBgn0039780,0,0,1,0,0,0,0
+FBgn0039782,0,1,1,1,0,0,0
+FBgn0039783,1,0,0,0,0,0,0
+FBgn0039784,0,2,0,0,2,1,1
+FBgn0039787,0,4,0,0,2,0,0
+FBgn0039788,11,17,2,8,59,21,20
+FBgn0039789,225,305,121,171,323,168,161
+FBgn0039790,755,1091,444,564,955,491,538
+FBgn0039792,0,0,0,0,0,0,1
+FBgn0039795,0,6,0,0,2,2,1
+FBgn0039796,0,0,0,0,0,0,0
+FBgn0039797,333,514,193,176,312,166,160
+FBgn0039798,27,74,27,26,53,34,24
+FBgn0039799,6,13,1,4,13,5,4
+FBgn0039800,102,87,61,61,59,34,55
+FBgn0039801,183,219,112,164,168,88,105
+FBgn0039802,1105,1454,672,824,1533,759,759
+FBgn0039804,1038,1968,797,845,1290,621,719
+FBgn0039805,1,0,0,0,0,0,0
+FBgn0039806,2,3,1,2,0,0,0
+FBgn0039807,3,4,3,2,2,1,0
+FBgn0039808,44,95,40,30,33,15,29
+FBgn0039809,742,1380,453,589,756,260,312
+FBgn0039810,0,0,0,0,0,0,0
+FBgn0039811,0,0,0,0,0,0,0
+FBgn0039812,0,0,0,0,0,0,0
+FBgn0039816,0,0,0,0,0,0,0
+FBgn0039817,0,1,0,0,1,0,0
+FBgn0039818,1,7,0,3,5,7,4
+FBgn0039820,0,0,0,0,0,0,0
+FBgn0039821,1,9,2,3,14,4,0
+FBgn0039827,478,678,319,353,35,14,29
+FBgn0039828,882,1718,538,689,1137,578,686
+FBgn0039829,128,341,110,127,227,95,100
+FBgn0039830,14271,17177,5774,7983,15255,7875,8582
+FBgn0039831,1448,3724,1341,1384,2757,1339,1508
+FBgn0039832,6,3,2,1,5,6,5
+FBgn0039833,17,9,3,6,10,8,7
+FBgn0039835,249,310,69,140,503,136,149
+FBgn0039836,76,84,31,29,104,36,39
+FBgn0039838,0,3,0,0,0,0,0
+FBgn0039839,0,0,0,0,0,0,0
+FBgn0039840,1,1,1,3,3,3,2
+FBgn0039844,824,774,318,304,1221,483,539
+FBgn0039846,703,1024,417,480,759,413,460
+FBgn0039848,40,47,26,24,31,19,22
+FBgn0039849,882,1745,662,770,1391,738,814
+FBgn0039850,1,0,0,0,0,0,0
+FBgn0039851,1,2,3,2,7,1,7
+FBgn0039852,1,2,3,4,6,4,2
+FBgn0039854,289,391,134,177,393,193,189
+FBgn0039855,7,24,8,6,19,9,9
+FBgn0039856,30,16,12,12,20,9,11
+FBgn0039857,41812,83277,27843,39093,52397,30655,34461
+FBgn0039858,16905,35544,13203,13660,27274,13547,15519
+FBgn0039859,111,137,30,50,201,44,68
+FBgn0039860,178,252,83,123,237,126,130
+FBgn0039861,346,639,202,245,462,203,223
+FBgn0039862,28,41,27,18,55,26,25
+FBgn0039863,2277,4711,1475,1528,4084,1722,1838
+FBgn0039864,0,1,1,2,0,0,1
+FBgn0039867,412,601,230,239,495,249,289
+FBgn0039868,370,557,159,191,546,190,157
+FBgn0039869,1592,3191,880,1008,3547,1306,1565
+FBgn0039870,233,441,115,151,530,170,209
+FBgn0039872,6,11,8,2,6,5,5
+FBgn0039873,1,1,2,1,3,3,0
+FBgn0039874,1067,1809,620,745,1348,559,603
+FBgn0039875,1892,2705,1035,1180,2243,1197,1318
+FBgn0039876,304,405,148,162,559,233,299
+FBgn0039877,735,880,351,445,946,439,438
+FBgn0039879,5,8,2,2,10,3,4
+FBgn0039881,51,92,35,32,115,39,69
+FBgn0039882,259,422,154,192,351,162,227
+FBgn0039883,76,154,59,40,151,88,94
+FBgn0039886,1190,1925,653,843,1188,479,578
+FBgn0039887,2,7,2,2,3,0,1
+FBgn0039889,497,960,149,192,1013,174,181
+FBgn0039890,1963,2099,830,713,2789,633,631
+FBgn0039896,337,455,140,162,520,115,127
+FBgn0039897,1141,1572,461,459,1510,400,435
+FBgn0039900,12,10,2,2,19,2,2
+FBgn0039902,1025,1456,391,422,1617,391,389
+FBgn0039904,2711,3809,1194,1075,3864,1207,1102
+FBgn0039905,60,45,31,35,57,33,57
+FBgn0039907,1506,2698,743,762,2444,733,729
+FBgn0039908,219,308,84,94,385,117,112
+FBgn0039909,2083,2910,955,1250,2928,1269,1316
+FBgn0039911,44,110,33,32,121,42,43
+FBgn0039914,885,1527,272,283,1505,316,328
+FBgn0039915,18,25,9,12,24,4,6
+FBgn0039916,27,44,8,11,52,7,8
+FBgn0039920,821,1318,400,384,1374,427,407
+FBgn0039923,1391,1778,513,469,2235,483,418
+FBgn0039924,526,733,195,227,876,183,225
+FBgn0039925,8,29,4,7,33,4,7
+FBgn0039927,342,482,143,128,903,171,176
+FBgn0039928,1908,2126,687,626,3811,804,725
+FBgn0039929,669,1092,275,327,923,302,313
+FBgn0039930,508,1024,216,320,753,249,251
+FBgn0039932,294,330,96,116,468,108,133
+FBgn0039936,3978,5954,1787,1840,6138,1913,1879
+FBgn0039937,3,5,3,3,1,0,2
+FBgn0039938,471,559,179,192,543,199,218
+FBgn0039939,0,0,0,0,0,0,0
+FBgn0039965,418,784,206,261,744,228,243
+FBgn0039966,124,169,66,82,151,65,50
+FBgn0039969,720,625,231,244,1152,235,235
+FBgn0039970,994,1614,464,492,1534,433,484
+FBgn0039972,7651,12014,3523,3421,12218,3548,3338
+FBgn0039977,456,930,198,189,952,169,170
+FBgn0039979,39,38,15,15,36,25,27
+FBgn0039994,913,1180,360,382,1684,350,331
+FBgn0039997,1162,1709,429,416,1999,467,385
+FBgn0040002,490,709,211,273,777,233,262
+FBgn0040005,721,982,222,275,1226,247,243
+FBgn0040007,7628,5341,1063,1568,11874,1637,1275
+FBgn0040009,768,1071,329,333,910,210,215
+FBgn0040010,1353,2004,570,621,2634,664,625
+FBgn0040011,3424,5425,1606,1672,6018,1625,1732
+FBgn0040028,0,1,0,0,1,0,0
+FBgn0040037,1,0,0,0,2,1,0
+FBgn0040045,15,23,2,9,12,10,10
+FBgn0040056,719,992,276,276,1210,244,198
+FBgn0040060,4,2,1,2,2,1,1
+FBgn0040063,0,0,0,0,0,0,0
+FBgn0040064,1533,2314,933,1268,2227,1079,1284
+FBgn0040066,757,1794,617,755,1141,611,726
+FBgn0040068,1362,2080,822,930,1751,961,998
+FBgn0040069,1,1,0,0,0,0,2
+FBgn0040070,4207,5552,1948,2653,6689,3139,3485
+FBgn0040071,1215,2465,1098,995,1624,861,992
+FBgn0040074,0,1,0,0,0,0,0
+FBgn0040075,946,1492,545,649,1271,709,769
+FBgn0040076,0,0,0,0,0,0,0
+FBgn0040077,0,0,0,0,0,0,0
+FBgn0040078,1173,1305,497,645,1399,760,796
+FBgn0040079,718,1095,393,459,917,386,471
+FBgn0040080,2218,3345,1255,1333,3507,1646,1727
+FBgn0040087,1518,1971,896,1021,1927,1080,1167
+FBgn0040089,1244,2448,1016,1049,2056,1175,1217
+FBgn0040091,1891,2570,905,1278,849,413,413
+FBgn0040092,2,7,3,2,2,2,1
+FBgn0040093,0,1,0,1,0,0,0
+FBgn0040096,6,9,1,1,10,8,2
+FBgn0040097,0,0,0,0,0,0,1
+FBgn0040098,0,0,0,0,0,0,0
+FBgn0040099,1398,2748,776,962,839,228,269
+FBgn0040102,4,10,1,6,13,2,1
+FBgn0040104,10,15,4,6,14,1,5
+FBgn0040106,1,0,0,0,0,0,0
+FBgn0040107,0,1,0,0,0,0,0
+FBgn0040153,52,180,76,40,213,69,86
+FBgn0040206,1024,1817,526,623,1729,583,599
+FBgn0040207,1235,1923,677,775,1632,756,772
+FBgn0040208,1053,1705,683,713,1354,790,827
+FBgn0040211,1,1,0,0,0,0,0
+FBgn0040212,669,764,354,361,946,429,491
+FBgn0040227,4669,6882,2637,3209,5143,3042,3348
+FBgn0040228,249,370,115,181,304,152,225
+FBgn0040230,771,1350,444,518,1237,521,556
+FBgn0040232,2931,4502,1573,1411,4751,1535,1472
+FBgn0040233,0,0,0,0,0,0,0
+FBgn0040234,567,859,460,441,709,434,467
+FBgn0040235,460,694,290,338,495,293,342
+FBgn0040236,3275,4707,2096,2125,4794,2544,2668
+FBgn0040237,2446,3345,1370,1637,2648,1680,1742
+FBgn0040238,2370,2921,1210,1266,3629,1622,1816
+FBgn0040239,576,916,187,260,795,255,279
+FBgn0040250,125,205,73,84,239,82,75
+FBgn0040251,359,641,234,228,908,265,327
+FBgn0040252,23,77,16,24,61,21,21
+FBgn0040253,1,3,1,2,3,3,0
+FBgn0040255,2,6,3,1,2,0,2
+FBgn0040256,109,169,67,80,179,67,68
+FBgn0040257,23,39,7,12,25,7,4
+FBgn0040259,1796,3714,1291,1496,3567,1501,1692
+FBgn0040260,351,709,258,282,559,225,238
+FBgn0040261,1,8,2,0,5,1,2
+FBgn0040262,78,120,36,43,109,45,50
+FBgn0040268,2315,3796,1336,1559,3182,1466,1572
+FBgn0040271,865,1305,473,534,2333,1117,1041
+FBgn0040273,1968,2510,1071,1232,2356,1271,1416
+FBgn0040279,0,0,0,0,0,0,0
+FBgn0040281,10,29,6,12,33,13,19
+FBgn0040282,24,63,22,31,35,24,28
+FBgn0040283,1767,3100,1052,1164,2596,1047,1100
+FBgn0040284,2145,3052,1286,1353,3064,1710,1713
+FBgn0040285,2865,4371,1355,1628,4636,1641,1746
+FBgn0040286,1374,1710,874,996,1853,1106,1039
+FBgn0040290,943,1519,546,588,889,459,446
+FBgn0040291,0,0,0,0,0,0,0
+FBgn0040294,734,1303,474,500,1342,597,640
+FBgn0040296,0,0,0,0,0,0,1
+FBgn0040297,1922,2490,1138,1117,2198,1051,1121
+FBgn0040298,368,530,161,199,453,210,229
+FBgn0040299,645,618,211,209,571,255,255
+FBgn0040305,631,1198,398,414,794,394,449
+FBgn0040308,835,1074,375,494,1426,627,696
+FBgn0040309,12754,24195,7435,9728,20414,10046,11506
+FBgn0040318,0,0,0,0,1,0,0
+FBgn0040319,2101,3148,1230,1336,2364,1254,1420
+FBgn0040321,2103,3209,1214,1455,2914,1247,1535
+FBgn0040322,772,1336,410,579,1025,446,475
+FBgn0040323,388,606,218,271,680,296,332
+FBgn0040324,1415,1823,499,501,1986,516,487
+FBgn0040333,59,56,43,26,71,33,53
+FBgn0040334,903,1249,514,669,1081,651,707
+FBgn0040335,4242,5512,2986,2950,4660,3279,3247
+FBgn0040336,546,528,250,300,493,303,303
+FBgn0040337,176,311,133,117,327,153,185
+FBgn0040338,0,1,0,0,0,0,0
+FBgn0040339,136,254,57,77,222,81,83
+FBgn0040340,1015,1395,549,728,1305,789,881
+FBgn0040341,0,1,0,3,3,0,1
+FBgn0040342,16,11,6,8,9,7,7
+FBgn0040343,0,0,0,2,2,1,1
+FBgn0040344,571,756,320,322,699,347,329
+FBgn0040345,4,6,4,5,14,3,6
+FBgn0040346,323,521,184,193,399,241,246
+FBgn0040347,88,121,60,54,134,61,51
+FBgn0040348,53,86,32,34,95,49,44
+FBgn0040349,0,1,0,0,1,0,0
+FBgn0040350,0,1,0,0,0,1,2
+FBgn0040351,29,48,26,26,33,11,20
+FBgn0040352,0,3,0,0,2,0,1
+FBgn0040353,0,0,0,0,1,0,0
+FBgn0040354,1,2,3,0,2,0,1
+FBgn0040355,9,6,1,1,10,2,5
+FBgn0040356,2,1,0,0,2,1,1
+FBgn0040357,6,4,1,1,5,3,1
+FBgn0040358,3,5,2,5,1,1,0
+FBgn0040359,0,3,0,2,3,2,2
+FBgn0040360,3,1,1,0,4,0,1
+FBgn0040361,0,1,0,1,0,0,0
+FBgn0040362,0,4,0,0,1,0,0
+FBgn0040363,0,6,1,0,4,0,1
+FBgn0040364,100,91,51,56,162,63,102
+FBgn0040365,4,1,2,2,7,2,1
+FBgn0040366,59,76,33,33,87,35,38
+FBgn0040367,10,16,9,8,9,6,6
+FBgn0040368,0,0,0,0,2,0,0
+FBgn0040370,4,4,2,2,14,4,5
+FBgn0040371,0,0,0,1,1,1,1
+FBgn0040372,743,1447,434,442,1189,428,428
+FBgn0040373,81,112,46,45,225,72,75
+FBgn0040375,445,637,263,315,574,271,355
+FBgn0040376,8,18,8,10,17,8,9
+FBgn0040377,15,25,5,15,27,13,18
+FBgn0040382,415,660,238,232,626,338,358
+FBgn0040383,349,638,254,325,545,258,353
+FBgn0040384,292,428,154,199,306,143,141
+FBgn0040385,0,0,0,0,0,0,0
+FBgn0040387,5,2,1,0,3,0,2
+FBgn0040388,2798,3107,1190,1166,1502,725,753
+FBgn0040389,377,492,172,256,563,273,302
+FBgn0040390,6,4,2,1,3,1,2
+FBgn0040391,18,53,26,22,14,11,12
+FBgn0040392,17,33,13,12,18,8,15
+FBgn0040393,1,0,0,0,0,0,0
+FBgn0040394,1213,1824,857,970,1572,1078,1160
+FBgn0040395,2429,4476,1625,1785,4068,1939,2015
+FBgn0040396,178,254,87,129,299,113,172
+FBgn0040397,135,417,144,125,369,121,151
+FBgn0040398,6190,8073,3140,4311,4035,2363,2742
+FBgn0040465,43,61,37,28,63,46,25
+FBgn0040466,185,296,62,75,360,108,142
+FBgn0040467,56,59,16,31,48,38,41
+FBgn0040475,2387,3048,1421,1733,2639,1580,1643
+FBgn0040477,200,336,110,140,164,108,104
+FBgn0040487,0,0,0,0,0,0,0
+FBgn0040491,5,16,4,6,14,13,6
+FBgn0040493,2699,3533,1554,1858,2863,1517,1781
+FBgn0040496,3,3,0,0,3,1,2
+FBgn0040502,0,2,0,0,0,0,0
+FBgn0040503,8,20,6,6,7,2,3
+FBgn0040505,18,87,37,30,40,19,17
+FBgn0040506,6,18,3,5,7,4,3
+FBgn0040507,3,8,4,5,8,4,3
+FBgn0040508,2,1,0,1,4,0,4
+FBgn0040509,1,2,0,1,2,0,0
+FBgn0040510,0,3,1,0,1,0,0
+FBgn0040512,1385,1711,597,839,1659,882,953
+FBgn0040513,1,2,0,0,3,1,0
+FBgn0040519,1,6,1,4,4,2,2
+FBgn0040522,0,0,0,0,0,0,0
+FBgn0040524,0,1,1,0,1,1,1
+FBgn0040528,8,24,8,3,24,7,9
+FBgn0040529,1733,2080,692,984,2866,1067,1119
+FBgn0040531,0,0,0,0,0,0,0
+FBgn0040532,22,27,8,7,19,8,6
+FBgn0040534,171,357,64,94,299,113,118
+FBgn0040551,34,33,11,18,59,22,17
+FBgn0040553,0,0,0,0,0,0,0
+FBgn0040554,20,40,10,17,44,10,21
+FBgn0040565,0,0,0,0,0,0,0
+FBgn0040571,11,10,7,10,18,13,10
+FBgn0040573,0,0,0,0,0,1,0
+FBgn0040575,24,52,6,16,57,13,20
+FBgn0040582,0,0,1,0,0,0,0
+FBgn0040585,0,0,0,0,0,0,0
+FBgn0040587,0,0,0,0,0,0,0
+FBgn0040588,19,11,7,6,21,6,6
+FBgn0040590,4,9,2,3,4,2,1
+FBgn0040599,0,1,0,0,0,0,0
+FBgn0040600,593,1122,279,302,1108,373,366
+FBgn0040601,0,1,1,0,3,1,0
+FBgn0040602,428,430,181,272,801,282,279
+FBgn0040606,0,0,0,0,0,0,0
+FBgn0040607,0,0,0,0,0,0,0
+FBgn0040608,0,0,0,0,0,0,0
+FBgn0040609,305,482,142,194,336,174,190
+FBgn0040623,0,0,0,0,0,0,0
+FBgn0040625,1,2,1,1,5,2,3
+FBgn0040628,0,0,0,0,0,0,0
+FBgn0040629,1,2,1,0,0,0,1
+FBgn0040634,5,32,2,2,12,1,4
+FBgn0040636,59,82,30,34,86,25,25
+FBgn0040637,0,0,0,0,0,0,0
+FBgn0040645,3,13,2,5,13,3,5
+FBgn0040648,0,0,0,0,0,0,0
+FBgn0040649,3,9,2,4,5,2,2
+FBgn0040650,33,28,19,29,49,33,31
+FBgn0040651,0,1,0,0,4,4,1
+FBgn0040653,0,0,0,0,0,0,0
+FBgn0040658,19,37,10,8,22,3,13
+FBgn0040660,1344,2509,796,1032,1790,809,844
+FBgn0040666,300,407,145,199,482,193,270
+FBgn0040670,50,66,27,35,79,30,38
+FBgn0040673,0,3,1,1,3,2,2
+FBgn0040674,0,0,0,0,0,0,0
+FBgn0040679,0,0,0,0,0,0,0
+FBgn0040684,0,0,0,0,0,0,0
+FBgn0040687,94,86,26,56,109,32,42
+FBgn0040688,1,2,0,0,0,0,0
+FBgn0040694,0,0,0,0,0,0,0
+FBgn0040696,0,8,0,5,2,2,0
+FBgn0040697,4,1,4,3,2,0,0
+FBgn0040699,0,0,0,0,0,0,0
+FBgn0040705,2,4,0,2,3,2,3
+FBgn0040715,0,0,0,0,0,0,0
+FBgn0040717,0,0,1,0,0,2,2
+FBgn0040718,0,1,0,1,1,0,0
+FBgn0040719,0,1,0,0,0,0,0
+FBgn0040723,3,14,1,5,5,1,2
+FBgn0040725,0,0,0,0,0,0,0
+FBgn0040726,2,5,0,0,8,1,0
+FBgn0040729,0,3,2,0,0,0,0
+FBgn0040730,0,0,0,1,0,0,1
+FBgn0040732,0,1,1,0,4,0,0
+FBgn0040733,0,0,0,0,0,0,0
+FBgn0040734,0,0,0,0,0,0,0
+FBgn0040735,1,0,0,0,0,0,0
+FBgn0040736,0,0,0,0,0,0,0
+FBgn0040737,4,7,1,2,7,0,2
+FBgn0040743,0,1,0,0,0,0,0
+FBgn0040747,0,0,0,0,1,0,0
+FBgn0040751,34,75,25,33,101,45,40
+FBgn0040752,5293,10550,4998,4235,5117,2778,2786
+FBgn0040754,138,363,66,87,291,77,79
+FBgn0040755,0,0,0,0,0,0,0
+FBgn0040759,1,2,1,2,1,2,0
+FBgn0040763,17,14,5,13,23,10,13
+FBgn0040764,0,3,0,0,1,0,0
+FBgn0040765,1064,2451,919,868,2576,1191,1411
+FBgn0040766,7,30,20,6,20,8,17
+FBgn0040773,967,1476,402,685,1755,734,778
+FBgn0040775,0,0,0,0,1,0,0
+FBgn0040777,6491,8620,3528,4276,7587,4010,4540
+FBgn0040778,36,50,8,15,66,11,23
+FBgn0040780,38,70,20,33,76,15,24
+FBgn0040784,18,39,8,12,75,15,16
+FBgn0040786,34,56,3,13,37,12,7
+FBgn0040793,1465,1940,637,949,2103,973,1059
+FBgn0040794,0,0,0,0,0,0,0
+FBgn0040795,2,0,0,0,1,1,0
+FBgn0040796,0,0,0,0,0,0,0
+FBgn0040797,0,0,0,0,0,0,1
+FBgn0040798,0,0,0,0,0,0,0
+FBgn0040799,0,0,0,0,0,0,0
+FBgn0040801,0,0,0,0,0,0,0
+FBgn0040805,0,1,0,0,1,0,0
+FBgn0040809,0,0,0,0,0,0,0
+FBgn0040811,0,0,0,0,0,0,0
+FBgn0040812,0,0,0,0,0,0,0
+FBgn0040813,55553,139905,26102,42289,64462,18549,18340
+FBgn0040814,0,1,0,0,2,0,0
+FBgn0040816,0,0,0,0,0,0,0
+FBgn0040817,5,10,2,5,9,0,3
+FBgn0040823,1,2,1,0,2,1,1
+FBgn0040827,336,641,210,224,146,51,68
+FBgn0040828,0,0,0,0,0,0,0
+FBgn0040832,0,0,0,0,0,0,0
+FBgn0040837,162,421,130,177,286,158,144
+FBgn0040842,0,0,1,0,2,0,0
+FBgn0040843,0,2,0,0,2,0,0
+FBgn0040849,0,0,2,3,1,0,0
+FBgn0040850,39,48,14,16,62,19,17
+FBgn0040856,1,6,2,2,6,2,2
+FBgn0040859,0,0,0,0,0,0,0
+FBgn0040862,87,252,77,74,242,98,100
+FBgn0040871,0,0,0,0,0,0,0
+FBgn0040877,0,2,0,0,0,0,0
+FBgn0040890,214,310,100,152,266,139,189
+FBgn0040892,0,0,0,0,4,3,0
+FBgn0040895,0,0,0,0,1,0,1
+FBgn0040898,0,0,0,0,0,0,0
+FBgn0040899,221,421,124,199,434,182,229
+FBgn0040900,6,9,3,6,10,6,5
+FBgn0040904,0,5,2,1,9,1,2
+FBgn0040905,0,2,1,0,4,1,3
+FBgn0040906,8,13,6,6,20,8,19
+FBgn0040907,152,259,72,106,289,84,91
+FBgn0040910,0,0,0,0,1,0,0
+FBgn0040913,0,0,0,1,3,2,1
+FBgn0040918,4929,7246,2680,2914,6729,3130,3511
+FBgn0040922,1,7,4,3,2,1,4
+FBgn0040923,0,0,1,0,1,0,0
+FBgn0040928,58,101,27,25,101,23,32
+FBgn0040929,125,147,54,66,161,67,71
+FBgn0040931,358,450,136,216,417,206,228
+FBgn0040940,0,0,0,0,0,0,0
+FBgn0040941,2,1,0,1,1,0,0
+FBgn0040942,356,1069,174,194,1029,247,311
+FBgn0040949,0,0,2,0,0,0,0
+FBgn0040950,0,0,0,1,0,0,0
+FBgn0040954,742,2216,471,598,1665,556,650
+FBgn0040958,2,0,0,0,0,1,0
+FBgn0040959,3,10,2,9,4,3,1
+FBgn0040963,2,4,1,1,5,2,1
+FBgn0040964,132,209,71,92,243,118,112
+FBgn0040965,0,5,1,3,1,0,2
+FBgn0040967,0,4,4,2,5,0,0
+FBgn0040968,0,0,0,0,0,0,0
+FBgn0040972,0,0,0,0,0,0,0
+FBgn0040973,1,1,0,0,1,1,0
+FBgn0040984,0,0,0,0,3,0,0
+FBgn0040985,1680,2897,743,942,2829,1073,1205
+FBgn0040989,0,1,0,0,0,0,0
+FBgn0040992,0,0,0,0,0,0,0
+FBgn0040993,0,0,0,0,0,0,0
+FBgn0040994,0,1,0,0,4,1,0
+FBgn0040995,0,0,0,0,0,0,0
+FBgn0040996,0,0,0,0,1,0,0
+FBgn0040998,0,6,1,0,2,0,0
+FBgn0041004,1136,1874,605,529,2054,589,635
+FBgn0041005,50,55,28,19,109,27,16
+FBgn0041087,2240,1435,526,664,2661,1384,1579
+FBgn0041092,5194,11701,4950,4634,7904,4625,4842
+FBgn0041094,1776,4780,1458,1433,3266,1177,1384
+FBgn0041096,52,55,35,40,91,45,39
+FBgn0041097,2,0,0,0,0,0,3
+FBgn0041100,175,215,76,111,181,113,138
+FBgn0041102,1,2,0,0,3,0,0
+FBgn0041103,0,0,0,0,0,0,0
+FBgn0041105,1,1,2,0,2,2,1
+FBgn0041111,2361,4933,1922,1673,3482,1822,1873
+FBgn0041147,191,204,74,95,279,122,137
+FBgn0041150,4,18,11,10,24,10,14
+FBgn0041156,2,3,0,0,1,0,2
+FBgn0041160,3,4,3,3,4,4,3
+FBgn0041161,808,1142,411,526,1083,614,582
+FBgn0041164,3027,4043,1419,1648,4400,1690,1706
+FBgn0041171,2949,4181,1785,1986,3209,1844,1826
+FBgn0041174,84,132,48,66,125,66,85
+FBgn0041180,12991,16843,6139,7477,12430,5650,5775
+FBgn0041181,2,2,0,2,3,0,1
+FBgn0041182,3003,3560,1434,1522,4626,1866,2018
+FBgn0041183,263,337,116,133,216,86,96
+FBgn0041184,762,1320,616,585,1398,621,727
+FBgn0041186,761,1378,421,527,1077,447,487
+FBgn0041188,4721,11364,4190,3982,7052,3649,3863
+FBgn0041191,1020,1810,476,598,1180,452,507
+FBgn0041194,1,0,0,0,0,0,1
+FBgn0041195,0,2,0,1,7,2,2
+FBgn0041203,2599,3308,1429,1329,2866,1342,1319
+FBgn0041205,1601,2888,1095,1320,2561,1244,1390
+FBgn0041210,7718,13617,6997,6484,10490,6070,6693
+FBgn0041224,0,1,0,0,0,1,0
+FBgn0041225,42,55,12,24,72,39,34
+FBgn0041229,4,10,9,6,20,4,2
+FBgn0041231,0,0,1,0,0,0,0
+FBgn0041232,0,0,0,0,0,0,0
+FBgn0041233,2,0,1,1,2,3,1
+FBgn0041234,5,2,2,1,6,3,3
+FBgn0041235,0,0,0,0,0,0,0
+FBgn0041236,0,0,0,0,0,0,0
+FBgn0041237,0,1,1,0,1,0,1
+FBgn0041238,0,0,0,0,0,0,0
+FBgn0041239,0,0,0,0,0,0,0
+FBgn0041240,0,0,0,0,0,0,0
+FBgn0041241,21,17,6,11,22,10,6
+FBgn0041242,0,0,0,0,0,0,0
+FBgn0041243,5,9,3,9,4,7,8
+FBgn0041244,15,26,13,4,31,6,4
+FBgn0041245,0,1,0,0,0,0,0
+FBgn0041246,7,4,2,3,10,3,4
+FBgn0041247,0,0,0,0,0,0,0
+FBgn0041248,0,0,0,0,0,0,0
+FBgn0041249,0,0,0,1,0,0,0
+FBgn0041250,1,0,0,0,0,0,0
+FBgn0041252,1,1,0,2,5,1,2
+FBgn0041336,5,12,6,5,10,4,3
+FBgn0041337,1,1,1,2,1,2,0
+FBgn0041342,5010,6715,2901,3390,3980,2523,2716
+FBgn0041579,0,0,0,0,0,0,0
+FBgn0041581,71,50,31,24,64,45,50
+FBgn0041582,957,1490,651,613,1395,735,720
+FBgn0041585,1483,2262,771,846,2120,938,957
+FBgn0041588,814,1302,514,604,1476,753,815
+FBgn0041604,326,509,167,182,718,293,301
+FBgn0041605,18,67,24,17,112,40,40
+FBgn0041606,0,8,4,1,16,5,3
+FBgn0041607,1015,1604,514,621,1103,477,474
+FBgn0041621,6,20,6,10,20,4,5
+FBgn0041622,0,0,0,0,0,0,0
+FBgn0041623,0,0,0,0,1,0,0
+FBgn0041624,0,0,0,0,0,0,0
+FBgn0041625,0,0,0,0,0,0,0
+FBgn0041626,0,0,0,0,0,0,0
+FBgn0041627,456,859,302,347,993,449,515
+FBgn0041629,11660,15540,7641,9274,21077,13724,15063
+FBgn0041630,1003,1325,605,779,1409,810,854
+FBgn0041702,304,439,150,181,524,187,207
+FBgn0041706,0,2,0,2,1,1,1
+FBgn0041707,3,2,2,3,5,4,5
+FBgn0041709,3,6,2,6,9,6,7
+FBgn0041710,5760,6891,2407,3335,7551,3471,3857
+FBgn0041711,0,1,0,0,1,0,0
+FBgn0041712,152,169,69,81,130,84,76
+FBgn0041713,4,2,1,4,7,4,0
+FBgn0041717,1,17,0,1,40,0,0
+FBgn0041718,1,3,0,0,2,0,1
+FBgn0041719,0,0,0,0,0,0,0
+FBgn0041720,0,0,0,0,0,0,0
+FBgn0041721,31,60,7,4,95,15,11
+FBgn0041723,95,63,30,47,47,42,49
+FBgn0041775,4152,7460,3058,3065,5842,3112,3334
+FBgn0041780,2,1,1,0,4,1,2
+FBgn0041781,2434,3622,1368,1590,2677,1571,1616
+FBgn0041789,4008,5894,2195,2399,5128,2765,3092
+FBgn0042083,748,1169,397,561,1133,601,618
+FBgn0042085,3096,5266,1864,1920,3675,2032,2211
+FBgn0042086,0,0,0,0,0,0,0
+FBgn0042092,198,373,76,119,277,106,105
+FBgn0042094,161,294,89,93,141,57,53
+FBgn0042098,0,0,0,0,0,0,0
+FBgn0042101,0,1,0,1,1,0,0
+FBgn0042102,4,11,5,3,31,14,11
+FBgn0042103,0,0,0,0,0,0,0
+FBgn0042104,58,117,29,32,128,52,60
+FBgn0042105,0,3,1,0,1,1,2
+FBgn0042106,62,41,19,26,33,9,10
+FBgn0042110,3,4,0,2,11,3,1
+FBgn0042111,1045,1601,631,697,1202,631,772
+FBgn0042112,244,401,111,162,311,182,198
+FBgn0042118,0,0,0,0,0,0,0
+FBgn0042119,0,0,0,0,1,0,0
+FBgn0042125,36,53,34,43,61,41,49
+FBgn0042126,9,18,9,12,19,4,9
+FBgn0042127,26,25,10,19,20,10,22
+FBgn0042129,0,0,0,0,1,0,0
+FBgn0042131,1,7,4,3,9,2,2
+FBgn0042132,415,557,226,295,433,282,310
+FBgn0042133,127,106,30,54,108,35,43
+FBgn0042134,4740,8444,3272,3370,6988,3830,4043
+FBgn0042135,1776,2672,983,1110,2396,1069,1300
+FBgn0042137,1,4,2,0,1,0,2
+FBgn0042138,1326,1588,724,885,1410,770,814
+FBgn0042146,0,0,0,0,0,0,0
+FBgn0042173,0,0,1,0,0,0,1
+FBgn0042174,4569,5777,1847,2289,6649,2473,2460
+FBgn0042175,92,119,123,130,135,149,187
+FBgn0042177,427,611,339,369,563,451,511
+FBgn0042178,81,117,99,106,102,74,139
+FBgn0042179,0,5,2,1,5,3,2
+FBgn0042180,374,450,171,230,401,203,235
+FBgn0042182,0,0,0,0,0,0,0
+FBgn0042185,443,547,199,210,531,184,195
+FBgn0042186,1,0,0,0,0,0,0
+FBgn0042187,0,0,0,0,0,0,0
+FBgn0042189,1,0,0,0,0,0,0
+FBgn0042198,0,0,0,0,0,1,0
+FBgn0042199,0,0,0,0,0,0,0
+FBgn0042201,0,0,0,0,0,0,0
+FBgn0042205,59,107,32,30,122,23,48
+FBgn0042206,48,88,19,22,96,19,26
+FBgn0042207,14,21,7,10,19,14,13
+FBgn0042213,388,805,196,266,799,275,306
+FBgn0042627,95,170,71,76,104,71,60
+FBgn0042630,2,8,1,1,1,4,1
+FBgn0042641,0,0,0,0,0,0,0
+FBgn0042650,1,15,6,7,18,5,5
+FBgn0042693,1691,2614,921,987,2504,1059,1167
+FBgn0042696,43,50,13,16,43,13,9
+FBgn0042701,173,224,119,121,150,120,147
+FBgn0042710,4,1,0,1,1,4,1
+FBgn0042711,3,3,1,3,1,0,2
+FBgn0042712,1047,1666,664,727,1486,943,1032
+FBgn0043001,165,267,93,113,264,122,131
+FBgn0043002,0,0,0,0,0,0,0
+FBgn0043005,1,5,0,1,0,2,0
+FBgn0043010,423,670,223,294,613,277,323
+FBgn0043012,241,272,92,143,259,116,155
+FBgn0043021,0,0,0,0,0,0,0
+FBgn0043022,0,0,0,0,0,1,0
+FBgn0043025,63,81,28,26,80,39,22
+FBgn0043043,5,9,1,4,3,2,3
+FBgn0043069,1,0,0,0,0,1,1
+FBgn0043070,1061,1733,701,779,1686,934,1101
+FBgn0043362,1532,2472,1038,1078,1772,925,935
+FBgn0043364,1463,4080,891,1042,1444,423,506
+FBgn0043455,224,532,149,169,326,139,172
+FBgn0043456,3645,5443,2104,2485,4061,2320,2607
+FBgn0043457,142,342,120,128,255,132,165
+FBgn0043458,2068,2559,1276,1396,2583,1495,1539
+FBgn0043470,0,0,0,0,0,0,0
+FBgn0043471,0,0,0,0,0,0,0
+FBgn0043530,0,0,0,0,0,0,0
+FBgn0043532,0,0,0,0,0,0,0
+FBgn0043533,0,0,0,0,0,0,0
+FBgn0043534,0,0,0,0,0,0,0
+FBgn0043535,0,0,0,0,0,0,0
+FBgn0043536,0,0,0,0,0,0,0
+FBgn0043539,1,1,0,0,2,0,0
+FBgn0043550,2,2,1,1,15,7,6
+FBgn0043575,38,12,10,10,44,18,32
+FBgn0043576,0,0,0,0,0,0,0
+FBgn0043577,0,1,0,0,1,0,0
+FBgn0043578,5,4,1,4,1,3,2
+FBgn0043783,22,36,9,21,34,17,22
+FBgn0043791,13,26,11,5,15,11,11
+FBgn0043792,4,1,5,1,8,4,6
+FBgn0043796,404,630,251,288,528,321,347
+FBgn0043799,66,121,42,54,106,52,51
+FBgn0043806,1670,2268,837,1040,2350,1225,1481
+FBgn0043825,0,1,0,0,0,0,0
+FBgn0043841,16230,33262,11247,14609,18242,8303,9498
+FBgn0043853,7,24,10,1,32,11,8
+FBgn0043854,118,394,123,147,205,113,133
+FBgn0043865,1,2,0,0,5,4,1
+FBgn0043884,12248,22178,9147,7742,17164,9154,8769
+FBgn0043900,1117,2178,853,809,1774,857,798
+FBgn0043903,1926,2581,1205,1308,2623,1790,1716
+FBgn0043904,18,47,23,19,56,36,27
+FBgn0044011,0,0,0,0,1,0,0
+FBgn0044020,139,220,63,130,337,144,137
+FBgn0044028,948,1698,679,597,1488,698,710
+FBgn0044030,184,162,73,144,221,139,145
+FBgn0044046,1,0,0,0,0,0,0
+FBgn0044047,428,667,200,235,348,118,151
+FBgn0044048,1,0,0,0,0,0,0
+FBgn0044049,0,0,1,1,0,0,0
+FBgn0044050,1,0,0,0,0,0,0
+FBgn0044051,0,0,0,0,0,0,1
+FBgn0044323,3663,6225,2873,3033,4579,2793,3199
+FBgn0044324,1775,3312,1012,1094,2453,1137,1103
+FBgn0044328,0,0,0,0,0,0,0
+FBgn0044419,0,0,0,0,0,0,0
+FBgn0044452,2700,4200,1698,1848,3526,1593,1754
+FBgn0044508,5,4,0,0,7,2,1
+FBgn0044510,296,456,129,111,569,114,116
+FBgn0044511,242,339,84,152,466,135,153
+FBgn0044809,0,0,0,0,0,0,0
+FBgn0044810,0,0,0,0,0,0,0
+FBgn0044811,0,0,0,0,0,0,0
+FBgn0044812,0,1,0,0,1,0,0
+FBgn0044817,0,0,0,0,0,0,0
+FBgn0044823,191,308,112,98,353,145,119
+FBgn0044826,2650,4642,1647,1727,4041,1824,1949
+FBgn0044871,377,501,220,278,505,238,331
+FBgn0044872,32,65,14,28,57,24,30
+FBgn0045035,2468,4295,1463,1406,4065,1390,1367
+FBgn0045038,2,8,0,2,2,3,0
+FBgn0045063,3171,4792,1734,1830,4107,2070,2077
+FBgn0045064,1008,1341,475,609,1211,550,568
+FBgn0045073,2176,3361,1111,1347,2973,1258,1343
+FBgn0045202,0,3,0,0,1,1,0
+FBgn0045442,0,0,0,0,0,0,0
+FBgn0045443,0,2,0,1,7,0,0
+FBgn0045468,39,60,24,22,89,18,18
+FBgn0045469,52,41,29,14,66,30,19
+FBgn0045470,26,48,19,18,64,16,26
+FBgn0045471,0,0,0,0,0,0,0
+FBgn0045473,1,0,0,0,1,1,0
+FBgn0045474,6,17,7,5,26,5,9
+FBgn0045476,0,0,0,0,0,0,0
+FBgn0045477,0,1,0,0,0,0,0
+FBgn0045478,0,0,1,0,0,1,0
+FBgn0045479,1,0,1,0,2,0,0
+FBgn0045482,0,0,0,0,0,0,0
+FBgn0045483,0,0,0,0,0,0,0
+FBgn0045485,0,0,0,0,0,0,0
+FBgn0045486,0,0,0,0,0,0,0
+FBgn0045487,0,0,0,0,0,0,0
+FBgn0045495,16,54,15,22,32,20,28
+FBgn0045497,0,0,0,0,0,0,0
+FBgn0045498,0,1,0,0,0,0,0
+FBgn0045499,0,0,0,0,0,0,0
+FBgn0045500,0,0,0,0,0,0,0
+FBgn0045501,0,0,0,0,0,0,0
+FBgn0045502,0,3,0,1,2,0,2
+FBgn0045759,0,1,0,1,1,1,1
+FBgn0045761,717,1607,534,535,1497,564,595
+FBgn0045770,7,29,13,5,26,11,16
+FBgn0045800,136,110,54,59,288,47,69
+FBgn0045823,16477,19660,6859,7345,18231,9011,10167
+FBgn0045827,0,0,0,0,0,0,0
+FBgn0045842,2430,3410,1276,1455,2699,1352,1494
+FBgn0045843,0,1,0,0,0,0,0
+FBgn0045852,2222,4675,1735,1823,2188,1277,1276
+FBgn0045862,1000,1944,843,854,1398,919,994
+FBgn0045866,1632,2055,802,1157,2509,1275,1435
+FBgn0045980,4,11,8,8,22,6,11
+FBgn0046113,2,0,0,1,1,1,1
+FBgn0046114,504,669,266,347,591,337,405
+FBgn0046212,0,0,0,0,0,0,0
+FBgn0046214,3147,4576,2197,2401,4864,3131,3277
+FBgn0046222,868,1402,517,653,1198,625,662
+FBgn0046225,156,322,118,150,347,186,203
+FBgn0046247,530,912,308,371,783,330,364
+FBgn0046253,5,4,0,3,4,0,1
+FBgn0046258,3,5,3,5,29,13,14
+FBgn0046272,15,21,0,1,32,0,0
+FBgn0046294,0,1,0,0,0,0,0
+FBgn0046296,220,337,130,178,354,175,227
+FBgn0046297,0,0,0,0,0,0,0
+FBgn0046301,254,354,154,183,357,164,185
+FBgn0046302,7,3,2,0,7,4,1
+FBgn0046322,327,463,117,149,284,116,123
+FBgn0046323,0,0,0,0,0,0,0
+FBgn0046332,0,1,0,3,1,0,1
+FBgn0046685,1331,1869,832,972,1889,1145,1159
+FBgn0046687,2865,2625,1275,1548,1916,1115,1267
+FBgn0046689,2,2,0,2,4,5,3
+FBgn0046692,321,440,95,114,665,84,90
+FBgn0046696,41,90,31,34,72,33,34
+FBgn0046697,0,0,0,0,0,0,0
+FBgn0046698,0,0,0,0,0,0,1
+FBgn0046704,2261,3664,1803,1660,2926,1711,1826
+FBgn0046756,3,5,2,5,4,1,1
+FBgn0046763,3235,5492,1338,1584,3356,1259,1368
+FBgn0046776,637,1116,238,338,1063,360,381
+FBgn0046793,0,0,0,0,0,0,0
+FBgn0046814,1,4,3,0,1,2,1
+FBgn0046815,0,9,1,0,3,0,1
+FBgn0046816,0,0,1,0,0,0,0
+FBgn0046817,0,0,0,0,0,0,0
+FBgn0046818,0,0,0,0,0,0,0
+FBgn0046819,0,0,0,0,0,0,0
+FBgn0046820,0,0,0,0,0,0,0
+FBgn0046821,0,0,0,0,0,0,0
+FBgn0046822,0,0,0,0,0,0,0
+FBgn0046823,1,0,0,0,0,0,0
+FBgn0046824,0,0,0,0,0,0,0
+FBgn0046825,1,16,3,0,6,4,2
+FBgn0046826,1,0,1,0,1,0,0
+FBgn0046827,0,0,0,1,0,2,0
+FBgn0046828,0,0,0,0,0,0,0
+FBgn0046829,0,0,0,0,0,0,0
+FBgn0046830,0,0,0,1,0,0,1
+FBgn0046831,0,0,0,0,0,0,1
+FBgn0046832,0,0,0,1,0,0,0
+FBgn0046833,0,0,0,0,0,0,0
+FBgn0046834,0,0,0,0,0,0,0
+FBgn0046873,0,0,0,0,0,0,0
+FBgn0046874,0,0,0,0,0,0,0
+FBgn0046875,1,0,0,0,0,0,0
+FBgn0046876,0,1,0,0,0,0,0
+FBgn0046878,0,0,0,1,1,0,0
+FBgn0046879,0,0,0,0,0,0,0
+FBgn0046880,0,0,0,0,0,0,0
+FBgn0046885,0,0,0,0,0,0,0
+FBgn0046886,0,0,0,0,0,0,0
+FBgn0046887,0,0,0,1,0,0,0
+FBgn0046888,0,0,0,0,0,0,0
+FBgn0046999,0,4,1,1,0,1,1
+FBgn0047000,0,0,0,1,1,0,0
+FBgn0047038,806,1615,494,719,1185,613,735
+FBgn0047092,0,3,1,0,0,0,0
+FBgn0047095,12,13,7,4,9,4,2
+FBgn0047114,134,361,74,86,320,78,72
+FBgn0047133,1,6,5,1,3,1,2
+FBgn0047135,2238,3122,756,1228,3822,1196,1262
+FBgn0047178,183,259,100,141,319,113,137
+FBgn0047199,0,1,0,0,0,0,0
+FBgn0047205,783,1649,482,378,1352,334,308
+FBgn0047303,1,2,1,0,0,0,1
+FBgn0047330,0,2,0,0,1,0,0
+FBgn0047334,0,2,0,0,1,0,0
+FBgn0047338,1,3,2,0,1,0,0
+FBgn0047351,0,0,1,0,0,0,0
+FBgn0050000,731,1021,363,468,1290,486,540
+FBgn0050001,110,136,45,63,206,63,63
+FBgn0050005,254,330,132,163,366,140,177
+FBgn0050007,813,1375,412,397,1333,388,339
+FBgn0050008,11,20,9,8,12,7,7
+FBgn0050009,5,2,2,2,4,2,0
+FBgn0050010,29,39,21,16,56,16,19
+FBgn0050011,5586,10741,3346,3256,7348,2962,3011
+FBgn0050015,3527,6457,2403,2352,5368,2654,2838
+FBgn0050016,7,2,0,0,4,0,1
+FBgn0050018,0,0,0,0,0,0,0
+FBgn0050020,1537,2349,892,992,2029,1050,1009
+FBgn0050021,3,4,0,3,8,2,3
+FBgn0050022,388,909,281,324,781,302,380
+FBgn0050025,0,0,0,0,0,0,0
+FBgn0050026,0,0,0,0,0,0,0
+FBgn0050029,0,0,0,0,0,0,0
+FBgn0050031,0,0,0,0,0,0,0
+FBgn0050033,20,22,5,8,42,13,12
+FBgn0050034,0,0,0,0,0,0,0
+FBgn0050035,1426,1782,711,784,2351,1269,1358
+FBgn0050036,1,0,1,0,0,1,0
+FBgn0050037,0,1,0,0,0,0,1
+FBgn0050039,0,1,1,1,0,0,0
+FBgn0050042,0,0,0,0,0,1,0
+FBgn0050043,11,6,2,4,8,12,8
+FBgn0050044,59,78,35,32,52,23,27
+FBgn0050045,0,0,1,0,0,0,0
+FBgn0050046,1242,2106,806,908,1448,782,790
+FBgn0050047,14,25,11,11,33,14,8
+FBgn0050048,0,1,0,0,1,0,0
+FBgn0050049,4,6,0,1,3,3,2
+FBgn0050050,0,0,0,0,0,0,0
+FBgn0050051,136,115,23,50,203,32,37
+FBgn0050052,24,35,9,14,32,17,10
+FBgn0050053,1,0,1,0,0,0,0
+FBgn0050054,0,6,7,7,7,8,2
+FBgn0050055,228,415,114,137,313,102,114
+FBgn0050056,1,0,0,0,1,3,0
+FBgn0050058,0,0,0,0,0,0,0
+FBgn0050060,1,15,2,2,7,7,7
+FBgn0050062,31,42,28,8,43,27,12
+FBgn0050065,3,1,1,1,3,2,2
+FBgn0050066,6,3,1,2,7,2,1
+FBgn0050067,0,0,0,0,0,0,0
+FBgn0050069,1992,3479,1546,1234,1784,800,850
+FBgn0050072,0,0,0,0,0,0,0
+FBgn0050073,0,0,0,0,0,0,0
+FBgn0050074,0,2,0,0,0,0,0
+FBgn0050075,0,0,0,0,0,0,0
+FBgn0050076,1,2,2,1,1,5,1
+FBgn0050077,148,265,74,116,217,118,130
+FBgn0050080,0,0,0,0,0,0,0
+FBgn0050081,62,61,30,21,68,15,14
+FBgn0050082,1,7,3,1,5,1,0
+FBgn0050083,0,2,0,1,1,0,0
+FBgn0050085,3407,4666,1763,2105,3273,1690,1626
+FBgn0050087,20,36,6,7,15,9,7
+FBgn0050088,26,30,10,19,13,6,4
+FBgn0050089,228,1115,495,442,869,461,519
+FBgn0050090,576,687,276,350,656,309,330
+FBgn0050091,2,2,0,0,2,0,1
+FBgn0050093,2,0,0,1,1,0,4
+FBgn0050094,109,181,46,61,140,53,59
+FBgn0050095,8,19,6,3,20,8,3
+FBgn0050096,54,73,22,21,88,23,30
+FBgn0050098,0,0,0,0,0,0,0
+FBgn0050099,2,9,1,0,5,4,2
+FBgn0050100,0,0,0,0,0,0,0
+FBgn0050101,0,0,0,1,0,0,0
+FBgn0050103,0,0,0,0,1,0,0
+FBgn0050104,14,39,10,20,19,5,8
+FBgn0050105,104,221,36,62,196,38,56
+FBgn0050106,0,0,0,0,0,0,0
+FBgn0050108,0,0,0,0,0,0,0
+FBgn0050109,189,350,81,142,311,111,133
+FBgn0050110,0,0,0,0,1,0,0
+FBgn0050114,0,0,0,0,0,0,0
+FBgn0050115,824,1679,709,653,1578,869,901
+FBgn0050118,884,1729,561,683,1434,670,672
+FBgn0050120,0,0,0,0,0,0,0
+FBgn0050121,0,0,0,0,0,0,0
+FBgn0050122,7411,11367,4755,4828,9365,5026,5303
+FBgn0050125,0,0,0,0,0,0,0
+FBgn0050126,0,3,0,0,0,0,0
+FBgn0050127,0,4,0,0,3,1,3
+FBgn0050145,1,0,0,0,0,0,0
+FBgn0050147,1354,2169,805,957,996,478,557
+FBgn0050148,129,101,31,58,43,30,33
+FBgn0050151,0,0,0,0,0,0,0
+FBgn0050154,1,0,0,0,0,0,0
+FBgn0050155,0,0,0,0,0,0,0
+FBgn0050156,210,251,96,133,227,128,131
+FBgn0050157,36,86,28,45,71,41,34
+FBgn0050158,0,0,1,0,0,0,0
+FBgn0050159,607,1078,403,416,895,458,519
+FBgn0050160,0,0,0,0,0,0,0
+FBgn0050161,3,4,3,0,5,2,3
+FBgn0050163,7,6,2,3,6,0,3
+FBgn0050169,262,422,127,130,403,103,127
+FBgn0050172,2,3,0,0,0,0,2
+FBgn0050177,0,2,0,0,1,0,0
+FBgn0050178,8,16,6,2,10,3,7
+FBgn0050181,2,5,5,4,5,2,5
+FBgn0050183,372,577,241,244,535,274,297
+FBgn0050184,67,47,21,37,71,37,56
+FBgn0050185,455,704,222,291,875,414,424
+FBgn0050187,1239,2065,751,790,2242,768,846
+FBgn0050192,0,0,0,0,0,0,0
+FBgn0050194,1,8,3,2,7,1,10
+FBgn0050195,0,2,0,0,1,0,0
+FBgn0050196,2,19,6,7,16,5,14
+FBgn0050197,0,1,0,1,2,1,0
+FBgn0050198,0,0,0,0,0,0,0
+FBgn0050199,0,0,0,0,0,0,0
+FBgn0050200,0,0,0,0,0,0,0
+FBgn0050201,0,0,0,0,0,0,0
+FBgn0050202,0,0,0,0,0,0,0
+FBgn0050203,1,0,2,0,3,2,0
+FBgn0050206,0,0,0,0,0,0,0
+FBgn0050208,0,0,0,0,0,0,0
+FBgn0050209,0,0,0,0,0,0,0
+FBgn0050211,0,0,0,0,0,0,0
+FBgn0050212,0,0,0,0,0,0,0
+FBgn0050215,0,0,0,0,0,0,0
+FBgn0050217,44,74,24,31,60,31,39
+FBgn0050218,0,0,0,0,0,0,0
+FBgn0050220,0,0,0,0,0,0,0
+FBgn0050222,0,0,0,0,0,0,0
+FBgn0050223,0,0,0,0,0,0,0
+FBgn0050225,0,2,0,0,2,0,0
+FBgn0050227,0,0,0,0,0,0,0
+FBgn0050229,0,0,0,0,0,0,0
+FBgn0050231,0,0,0,0,0,0,0
+FBgn0050232,0,0,0,0,1,0,0
+FBgn0050234,0,0,0,0,0,0,0
+FBgn0050235,0,0,0,0,0,0,0
+FBgn0050237,0,2,0,0,2,0,2
+FBgn0050238,0,0,1,0,0,0,0
+FBgn0050239,2,1,0,3,2,3,0
+FBgn0050240,1,3,1,1,5,0,0
+FBgn0050241,0,0,0,0,0,0,0
+FBgn0050249,0,0,0,0,0,0,0
+FBgn0050250,0,0,0,0,0,0,0
+FBgn0050251,0,0,0,0,0,0,0
+FBgn0050254,1,0,0,0,0,0,0
+FBgn0050257,0,0,0,0,0,0,0
+FBgn0050259,0,0,0,1,0,0,2
+FBgn0050260,0,0,1,0,0,0,0
+FBgn0050263,1,5,1,4,8,3,7
+FBgn0050265,0,0,0,0,0,0,0
+FBgn0050268,0,2,0,0,2,0,2
+FBgn0050269,207,342,120,138,157,70,114
+FBgn0050271,2,0,0,0,0,2,1
+FBgn0050272,0,1,0,0,0,0,0
+FBgn0050273,184,344,100,85,158,60,87
+FBgn0050274,0,0,0,0,0,0,0
+FBgn0050275,0,1,0,0,0,0,0
+FBgn0050277,0,1,0,0,0,0,0
+FBgn0050278,0,0,0,0,0,0,0
+FBgn0050279,4,5,3,2,10,9,4
+FBgn0050280,6,9,1,1,13,3,6
+FBgn0050281,12,15,3,5,33,16,3
+FBgn0050284,18,19,14,12,30,12,9
+FBgn0050285,5,16,4,9,14,14,10
+FBgn0050286,5,10,7,4,5,4,3
+FBgn0050287,4,8,9,3,7,6,2
+FBgn0050288,0,3,0,1,0,1,0
+FBgn0050289,0,1,1,1,1,1,1
+FBgn0050290,0,0,0,0,0,0,0
+FBgn0050291,598,911,316,447,673,403,456
+FBgn0050293,1,1,0,1,1,0,3
+FBgn0050295,234,427,134,141,326,138,176
+FBgn0050296,0,3,2,2,3,1,2
+FBgn0050297,0,1,0,0,0,1,0
+FBgn0050298,0,0,0,0,0,0,0
+FBgn0050299,0,0,0,0,0,0,0
+FBgn0050316,0,0,0,0,0,0,0
+FBgn0050321,0,1,3,0,3,2,1
+FBgn0050323,280,264,138,106,260,109,106
+FBgn0050324,1,1,1,0,4,1,2
+FBgn0050325,0,0,0,0,0,0,0
+FBgn0050326,0,0,2,2,4,3,0
+FBgn0050333,0,0,0,0,0,0,0
+FBgn0050334,2,7,2,3,6,2,4
+FBgn0050338,66,113,32,35,100,30,43
+FBgn0050339,491,723,269,338,788,356,379
+FBgn0050340,172,257,84,108,272,76,103
+FBgn0050342,515,856,316,369,712,382,414
+FBgn0050343,1,1,1,0,1,0,0
+FBgn0050344,865,1162,450,522,941,388,447
+FBgn0050345,93,103,53,56,78,33,56
+FBgn0050349,1652,2695,877,1094,1729,921,1046
+FBgn0050350,0,0,0,0,0,0,0
+FBgn0050354,1,1,0,3,2,1,0
+FBgn0050355,8,7,3,4,10,4,0
+FBgn0050356,11,8,8,5,20,4,7
+FBgn0050357,54,80,23,28,86,26,32
+FBgn0050359,17,50,21,32,85,57,63
+FBgn0050360,4,8,2,3,4,1,3
+FBgn0050361,1,3,0,0,4,1,0
+FBgn0050362,1,3,0,2,7,1,2
+FBgn0050363,0,0,0,0,0,0,0
+FBgn0050364,0,3,2,2,4,2,3
+FBgn0050365,6,4,1,2,3,1,3
+FBgn0050366,0,0,0,0,0,0,0
+FBgn0050369,0,0,0,0,0,0,0
+FBgn0050371,0,0,0,0,0,0,0
+FBgn0050372,1711,2585,1065,1143,2500,1269,1327
+FBgn0050373,278,403,124,195,313,174,201
+FBgn0050374,2,8,0,1,2,1,5
+FBgn0050375,0,0,0,0,0,0,0
+FBgn0050376,0,0,0,0,0,0,0
+FBgn0050377,6,23,14,19,11,13,11
+FBgn0050378,2,2,1,0,1,1,1
+FBgn0050379,0,0,0,0,0,1,0
+FBgn0050380,1,0,0,0,0,0,0
+FBgn0050381,160,216,60,87,171,114,120
+FBgn0050382,0,0,0,0,0,0,1
+FBgn0050383,97,78,35,44,158,50,59
+FBgn0050384,0,0,0,0,1,0,0
+FBgn0050385,0,0,0,0,0,0,0
+FBgn0050389,3419,4694,1903,1865,4652,2567,2866
+FBgn0050390,229,272,102,159,224,119,172
+FBgn0050391,1,0,0,2,3,1,3
+FBgn0050392,216,407,113,166,378,146,152
+FBgn0050393,0,1,0,1,0,1,0
+FBgn0050394,847,1215,432,462,1411,496,533
+FBgn0050395,0,0,0,0,0,0,0
+FBgn0050398,4,8,5,7,18,1,9
+FBgn0050401,0,1,0,0,1,0,0
+FBgn0050403,41,51,15,26,70,29,44
+FBgn0050404,811,1258,416,446,1158,459,547
+FBgn0050406,0,0,0,0,0,0,0
+FBgn0050407,0,0,0,0,0,0,0
+FBgn0050409,3,7,0,4,5,4,3
+FBgn0050410,991,1328,568,785,1290,1012,958
+FBgn0050411,0,0,0,0,0,0,0
+FBgn0050412,0,0,0,0,0,0,0
+FBgn0050413,11,10,2,2,10,5,2
+FBgn0050414,80,130,41,55,138,76,67
+FBgn0050416,0,0,0,0,1,0,0
+FBgn0050417,0,0,0,0,1,0,0
+FBgn0050418,6,5,6,2,2,7,4
+FBgn0050419,0,1,0,0,0,0,1
+FBgn0050420,239,457,142,177,345,145,168
+FBgn0050421,1822,3059,1100,1185,2649,1339,1475
+FBgn0050423,1297,1959,637,738,1530,671,863
+FBgn0050424,3,11,6,5,18,8,8
+FBgn0050428,168,265,78,63,257,61,79
+FBgn0050429,0,0,0,0,0,0,0
+FBgn0050430,0,0,0,0,0,0,0
+FBgn0050431,3,1,1,1,2,0,2
+FBgn0050432,1,0,0,1,0,0,0
+FBgn0050438,239,354,145,166,422,163,160
+FBgn0050440,288,401,117,93,463,90,100
+FBgn0050441,2,0,0,0,2,0,0
+FBgn0050443,286,418,174,211,399,203,244
+FBgn0050446,11,16,9,6,12,4,6
+FBgn0050447,0,0,0,0,0,0,0
+FBgn0050449,0,0,0,0,1,0,0
+FBgn0050452,0,0,0,0,1,0,0
+FBgn0050454,0,0,0,0,0,0,0
+FBgn0050456,734,1295,520,622,1252,634,680
+FBgn0050457,0,0,0,0,0,0,0
+FBgn0050458,0,0,1,0,0,0,0
+FBgn0050459,4,10,1,0,12,2,1
+FBgn0050460,335,894,360,333,751,376,417
+FBgn0050461,0,0,0,0,0,0,0
+FBgn0050462,0,0,0,0,0,0,0
+FBgn0050463,15,23,9,10,163,65,47
+FBgn0050464,0,0,0,0,0,0,0
+FBgn0050466,109,133,37,29,190,40,27
+FBgn0050467,226,273,156,162,355,175,173
+FBgn0050468,0,1,0,1,0,0,0
+FBgn0050469,0,0,0,0,0,1,0
+FBgn0050470,0,0,0,0,0,0,1
+FBgn0050471,0,0,0,0,0,0,0
+FBgn0050472,0,0,0,0,1,0,1
+FBgn0050476,137,235,52,74,240,66,83
+FBgn0050479,0,1,0,0,0,0,0
+FBgn0050480,0,0,0,0,0,0,0
+FBgn0050481,0,0,0,0,0,0,0
+FBgn0050482,33,108,34,34,85,23,33
+FBgn0050484,25,48,18,21,55,7,10
+FBgn0050485,25,37,10,8,24,12,4
+FBgn0050486,0,0,1,0,2,0,1
+FBgn0050487,0,3,0,2,4,1,0
+FBgn0050488,0,3,1,1,7,1,0
+FBgn0050489,30,49,32,51,41,23,45
+FBgn0050490,4,17,8,8,10,6,3
+FBgn0050491,48,74,24,20,80,30,34
+FBgn0050492,1615,2668,1077,1105,2099,1128,1247
+FBgn0050493,134,156,61,57,203,61,104
+FBgn0050495,7,10,0,2,13,4,11
+FBgn0050496,328,484,164,192,527,224,256
+FBgn0050497,5248,14507,5377,4773,10778,4939,5674
+FBgn0050499,774,993,413,575,1177,686,699
+FBgn0050502,65,101,45,49,120,55,61
+FBgn0050503,0,0,0,0,0,0,0
+FBgn0050505,0,2,0,1,2,0,0
+FBgn0050506,0,0,0,0,0,0,0
+FBgn0050509,0,1,1,0,1,0,1
+FBgn0051002,2,0,0,2,5,0,0
+FBgn0051004,6,9,10,4,18,5,6
+FBgn0051005,427,696,221,250,420,188,197
+FBgn0051007,0,1,0,0,0,0,0
+FBgn0051008,0,0,0,0,0,0,0
+FBgn0051010,0,2,0,0,0,0,0
+FBgn0051013,0,0,0,0,2,0,0
+FBgn0051014,0,0,0,0,0,0,0
+FBgn0051015,0,1,2,0,0,0,0
+FBgn0051016,0,1,1,0,1,1,1
+FBgn0051017,0,0,1,3,2,4,1
+FBgn0051019,30,41,19,17,31,12,11
+FBgn0051021,0,9,2,1,4,0,1
+FBgn0051023,0,0,0,0,0,0,0
+FBgn0051025,7,18,5,5,9,12,6
+FBgn0051028,1,8,1,3,5,0,3
+FBgn0051029,32,76,32,28,73,41,34
+FBgn0051030,1,1,0,0,0,0,0
+FBgn0051031,6,11,6,2,12,3,6
+FBgn0051032,56,58,45,42,69,59,64
+FBgn0051036,2,8,3,7,9,1,5
+FBgn0051038,874,1478,698,695,645,394,407
+FBgn0051040,595,795,280,404,853,402,450
+FBgn0051041,7,5,3,6,4,2,3
+FBgn0051044,54,416,97,94,345,76,73
+FBgn0051048,1800,3281,1250,1269,2774,1338,1375
+FBgn0051050,0,0,0,0,0,0,0
+FBgn0051051,22,32,14,9,48,18,36
+FBgn0051052,4,9,3,4,9,3,4
+FBgn0051053,8,20,2,9,6,7,3
+FBgn0051054,0,0,0,0,0,0,0
+FBgn0051055,2,3,0,1,3,2,1
+FBgn0051057,0,5,0,1,4,0,0
+FBgn0051058,0,0,0,1,0,0,0
+FBgn0051063,789,954,393,490,1091,547,642
+FBgn0051064,815,1204,606,615,1137,664,638
+FBgn0051065,17,14,6,9,31,8,6
+FBgn0051068,56,73,22,26,60,29,26
+FBgn0051070,0,0,0,0,0,0,0
+FBgn0051071,0,0,0,0,0,0,0
+FBgn0051072,693,1143,422,498,1023,473,514
+FBgn0051075,2387,2525,1074,1339,2751,1498,1657
+FBgn0051076,0,1,0,0,1,0,0
+FBgn0051077,0,0,0,0,0,1,0
+FBgn0051080,0,0,0,0,0,0,1
+FBgn0051081,0,1,0,0,0,0,0
+FBgn0051082,51,135,47,42,46,25,30
+FBgn0051084,0,0,0,0,0,0,0
+FBgn0051086,0,0,0,0,0,0,0
+FBgn0051087,1,1,0,1,2,0,0
+FBgn0051088,2,15,6,7,16,2,3
+FBgn0051089,0,0,0,0,1,0,0
+FBgn0051091,0,0,0,0,4,1,0
+FBgn0051092,64,103,38,39,436,220,243
+FBgn0051093,0,1,0,0,2,0,0
+FBgn0051097,0,0,1,0,1,1,0
+FBgn0051098,193,386,131,158,214,102,89
+FBgn0051099,0,0,0,0,0,0,0
+FBgn0051100,1,4,2,2,6,3,2
+FBgn0051102,0,3,2,0,1,1,0
+FBgn0051103,0,0,0,0,0,1,0
+FBgn0051104,1,3,0,3,1,4,1
+FBgn0051105,0,2,2,1,2,1,0
+FBgn0051106,1,1,0,0,2,1,0
+FBgn0051108,373,657,236,204,591,184,207
+FBgn0051109,88,152,45,44,144,46,60
+FBgn0051111,53,105,28,28,114,27,29
+FBgn0051115,12,13,6,13,16,7,11
+FBgn0051116,166,230,85,98,366,167,173
+FBgn0051118,51,87,22,46,41,29,36
+FBgn0051119,27,41,15,21,45,30,32
+FBgn0051120,889,1247,475,653,1156,630,706
+FBgn0051121,2,10,2,3,5,4,1
+FBgn0051122,1645,2676,1074,1153,2469,1280,1419
+FBgn0051125,20,35,9,12,63,35,32
+FBgn0051126,104,165,27,26,116,45,32
+FBgn0051128,0,0,1,0,0,0,0
+FBgn0051130,0,5,0,0,0,0,0
+FBgn0051131,0,0,0,0,0,0,0
+FBgn0051133,102,155,43,74,214,76,71
+FBgn0051139,3,9,4,2,11,4,4
+FBgn0051140,419,707,343,311,706,344,378
+FBgn0051141,1,5,0,1,2,1,0
+FBgn0051143,0,0,0,0,0,0,0
+FBgn0051145,27,36,15,18,31,20,20
+FBgn0051146,0,0,0,0,0,0,1
+FBgn0051148,0,2,0,1,1,0,0
+FBgn0051150,10708,18109,6371,7273,11338,6237,6395
+FBgn0051151,2559,4142,1831,1778,3100,1901,1987
+FBgn0051155,368,633,159,238,452,182,193
+FBgn0051156,247,478,160,160,402,154,180
+FBgn0051157,0,1,0,0,3,0,0
+FBgn0051158,2629,3977,1805,1677,3607,2111,2157
+FBgn0051159,181,240,69,109,212,92,131
+FBgn0051161,24,37,6,15,50,13,15
+FBgn0051162,0,0,0,0,0,0,0
+FBgn0051163,6,12,4,5,35,16,15
+FBgn0051164,0,0,0,0,0,0,1
+FBgn0051165,0,0,0,0,0,0,0
+FBgn0051166,0,0,0,0,0,0,0
+FBgn0051167,0,0,0,0,0,0,0
+FBgn0051169,316,550,131,163,516,200,192
+FBgn0051174,10,13,5,3,23,1,6
+FBgn0051176,0,0,0,1,0,1,0
+FBgn0051183,5,8,1,4,3,3,3
+FBgn0051184,337,491,149,231,621,243,274
+FBgn0051189,0,0,0,0,0,0,0
+FBgn0051191,1,5,2,1,2,0,0
+FBgn0051195,783,1325,445,520,1990,943,1012
+FBgn0051198,0,0,1,0,0,0,1
+FBgn0051199,0,0,0,0,0,0,0
+FBgn0051200,0,1,0,0,0,0,0
+FBgn0051201,11,3,1,0,14,2,0
+FBgn0051202,4,6,3,0,3,3,3
+FBgn0051204,0,0,0,1,0,1,0
+FBgn0051205,1,0,0,0,0,0,0
+FBgn0051206,0,0,0,0,0,0,0
+FBgn0051207,0,1,0,0,0,0,0
+FBgn0051210,0,0,0,0,0,0,0
+FBgn0051211,1290,2321,1006,1077,1832,1063,1211
+FBgn0051213,28,46,16,11,41,13,16
+FBgn0051215,0,0,0,0,0,0,0
+FBgn0051216,1545,2237,835,900,2845,1116,1304
+FBgn0051217,80,122,48,59,96,50,38
+FBgn0051219,3426,2324,967,1230,4080,1467,1616
+FBgn0051220,0,0,0,0,3,0,3
+FBgn0051221,6,8,1,2,12,5,4
+FBgn0051223,218,335,97,134,316,152,141
+FBgn0051224,2615,4522,1622,1696,3635,1931,1940
+FBgn0051225,0,1,0,0,0,0,0
+FBgn0051226,0,0,0,0,1,0,0
+FBgn0051228,0,0,0,0,0,0,0
+FBgn0051229,226,377,138,171,336,180,195
+FBgn0051230,10,19,3,7,21,6,9
+FBgn0051231,6,21,4,7,13,13,7
+FBgn0051232,445,779,220,338,688,329,384
+FBgn0051233,0,0,0,0,1,0,0
+FBgn0051235,1,1,1,2,0,1,0
+FBgn0051242,0,0,0,0,0,0,0
+FBgn0051244,4,5,1,1,1,1,0
+FBgn0051245,0,2,1,0,6,2,0
+FBgn0051246,1,1,0,0,0,0,0
+FBgn0051248,0,0,2,1,3,0,0
+FBgn0051249,317,391,156,177,384,140,166
+FBgn0051251,104,217,52,74,199,79,82
+FBgn0051253,0,0,0,0,0,0,0
+FBgn0051259,10,8,2,7,4,2,3
+FBgn0051262,13,40,12,15,28,8,5
+FBgn0051265,2,2,0,0,2,0,0
+FBgn0051266,2,1,0,0,1,0,0
+FBgn0051267,0,2,0,2,0,0,1
+FBgn0051268,0,1,0,0,0,0,0
+FBgn0051269,0,1,0,0,2,0,0
+FBgn0051272,4,6,2,3,7,3,1
+FBgn0051274,0,0,0,0,0,2,1
+FBgn0051278,88,124,43,47,119,60,54
+FBgn0051279,5,4,0,0,5,1,2
+FBgn0051281,1,1,0,0,0,0,0
+FBgn0051282,0,0,0,0,0,0,0
+FBgn0051286,0,0,0,0,0,0,0
+FBgn0051287,2,0,1,1,5,0,1
+FBgn0051288,4,5,1,0,5,2,2
+FBgn0051291,0,1,2,2,2,3,2
+FBgn0051292,0,0,0,0,0,0,0
+FBgn0051294,1,0,0,0,1,0,0
+FBgn0051296,18,35,13,5,40,12,18
+FBgn0051300,1,2,0,0,1,1,2
+FBgn0051301,737,1111,340,454,983,431,473
+FBgn0051302,21,52,23,31,39,39,28
+FBgn0051304,698,1426,532,561,1354,728,755
+FBgn0051313,16,18,12,19,30,10,9
+FBgn0051314,5413,8345,3121,3153,9379,4573,4929
+FBgn0051315,0,0,0,0,0,0,0
+FBgn0051320,399,604,216,210,680,186,212
+FBgn0051321,7,6,5,3,11,1,4
+FBgn0051323,4,7,2,2,6,2,3
+FBgn0051324,933,1187,548,587,1449,814,824
+FBgn0051326,20,53,18,21,27,8,11
+FBgn0051327,0,0,0,0,0,0,0
+FBgn0051331,0,0,0,0,0,0,0
+FBgn0051333,0,0,0,0,0,0,0
+FBgn0051334,0,0,0,0,0,0,0
+FBgn0051337,937,2078,724,1021,886,428,567
+FBgn0051339,0,0,0,0,0,0,0
+FBgn0051342,3021,4038,1583,1721,3839,1800,1915
+FBgn0051343,0,2,0,0,2,1,2
+FBgn0051344,511,580,216,286,523,282,287
+FBgn0051345,0,0,0,0,0,0,0
+FBgn0051347,15,39,12,13,34,9,12
+FBgn0051352,251,559,382,308,762,412,525
+FBgn0051353,0,1,2,0,1,0,0
+FBgn0051354,0,1,3,3,3,5,2
+FBgn0051356,0,0,0,0,0,0,0
+FBgn0051357,478,750,278,372,659,334,399
+FBgn0051358,0,0,0,0,0,0,0
+FBgn0051360,101,87,30,52,230,56,51
+FBgn0051361,871,2092,846,840,2714,1311,1397
+FBgn0051363,6600,9949,3207,3348,18556,6694,7711
+FBgn0051365,493,1011,315,366,784,346,353
+FBgn0051367,736,1501,422,484,1029,424,470
+FBgn0051368,965,1612,621,629,1686,756,770
+FBgn0051370,355,413,201,184,501,128,129
+FBgn0051371,1,2,0,1,0,1,0
+FBgn0051373,0,1,0,0,0,0,0
+FBgn0051374,9,8,13,5,23,13,10
+FBgn0051380,0,0,0,0,2,0,1
+FBgn0051382,0,0,0,0,0,0,0
+FBgn0051383,0,0,0,0,0,0,0
+FBgn0051386,0,0,0,0,0,0,0
+FBgn0051388,125,241,58,109,188,72,111
+FBgn0051389,21,17,16,11,32,17,16
+FBgn0051390,247,387,139,148,422,179,168
+FBgn0051391,2,5,2,0,5,3,1
+FBgn0051392,143,214,77,91,212,102,100
+FBgn0051404,1,1,0,1,1,1,0
+FBgn0051406,1,0,0,2,1,0,1
+FBgn0051407,0,1,0,0,3,0,0
+FBgn0051410,0,1,0,1,0,0,1
+FBgn0051413,0,0,0,0,0,0,0
+FBgn0051414,0,2,0,2,2,2,1
+FBgn0051415,16,30,18,15,22,4,12
+FBgn0051416,0,0,0,0,5,0,0
+FBgn0051418,0,0,0,0,0,0,0
+FBgn0051419,0,0,0,0,0,0,0
+FBgn0051423,0,0,0,0,0,0,0
+FBgn0051424,0,0,0,0,0,0,0
+FBgn0051427,0,2,1,1,0,0,0
+FBgn0051431,3426,4667,1718,2074,2819,1179,1413
+FBgn0051432,0,0,0,0,0,0,0
+FBgn0051436,116,208,68,80,252,91,114
+FBgn0051437,1,2,0,3,2,1,0
+FBgn0051438,0,0,0,0,0,0,0
+FBgn0051439,6,14,13,5,6,7,5
+FBgn0051441,155,194,70,103,221,100,106
+FBgn0051445,78,86,25,27,76,42,37
+FBgn0051446,1,4,1,4,10,0,1
+FBgn0051450,268,395,124,190,335,156,189
+FBgn0051453,813,1229,485,555,1433,682,809
+FBgn0051454,9,11,1,2,4,6,1
+FBgn0051457,121,242,91,111,223,103,143
+FBgn0051459,0,0,0,0,0,0,0
+FBgn0051460,294,298,102,164,481,213,233
+FBgn0051461,0,0,1,0,0,0,0
+FBgn0051462,31,131,55,33,210,112,107
+FBgn0051463,0,0,0,1,1,0,0
+FBgn0051464,2,0,0,0,3,0,1
+FBgn0051465,5,9,2,1,3,1,0
+FBgn0051467,38,63,15,26,54,13,18
+FBgn0051469,9,3,0,1,10,1,3
+FBgn0051471,0,0,0,0,0,0,0
+FBgn0051472,40,94,42,39,116,50,60
+FBgn0051473,4,3,0,3,1,4,3
+FBgn0051475,1,2,0,0,1,1,1
+FBgn0051477,31,54,20,22,141,39,40
+FBgn0051480,0,0,0,0,0,0,0
+FBgn0051481,1,0,0,0,0,0,1
+FBgn0051482,0,0,0,0,0,0,0
+FBgn0051485,0,0,0,0,0,0,0
+FBgn0051491,0,0,0,0,0,0,0
+FBgn0051493,0,0,0,0,0,1,1
+FBgn0051494,0,1,0,0,0,0,0
+FBgn0051495,86,74,18,35,133,56,46
+FBgn0051496,0,0,0,0,0,0,0
+FBgn0051497,0,0,0,0,0,0,0
+FBgn0051498,0,0,0,0,0,0,0
+FBgn0051501,0,0,0,0,0,0,0
+FBgn0051506,0,1,0,0,0,0,1
+FBgn0051510,289,534,151,115,500,113,143
+FBgn0051515,0,0,0,0,0,0,0
+FBgn0051516,23,32,9,12,23,12,12
+FBgn0051518,0,0,0,0,0,0,0
+FBgn0051522,842,1408,477,463,1339,590,685
+FBgn0051523,7496,10887,3354,3586,6341,2250,2289
+FBgn0051524,0,0,0,0,0,0,1
+FBgn0051525,53,54,25,20,85,23,22
+FBgn0051526,6,13,14,4,24,3,9
+FBgn0051528,0,1,2,0,5,3,9
+FBgn0051530,2,4,0,0,2,1,3
+FBgn0051531,1059,2409,800,808,1944,876,902
+FBgn0051533,0,1,0,0,0,0,0
+FBgn0051534,790,1600,557,515,1361,600,702
+FBgn0051536,3281,6174,2254,2435,4874,2443,2640
+FBgn0051538,23,24,9,8,22,8,5
+FBgn0051542,0,0,0,0,0,0,0
+FBgn0051544,0,0,0,0,0,0,0
+FBgn0051546,45,52,23,38,83,45,46
+FBgn0051547,11,22,14,10,20,12,6
+FBgn0051548,625,693,301,358,554,311,356
+FBgn0051549,526,734,319,427,769,520,589
+FBgn0051550,1036,2321,899,896,1818,1012,1072
+FBgn0051551,8,34,14,12,34,13,7
+FBgn0051555,4,9,5,1,29,11,11
+FBgn0051556,0,1,1,0,0,0,0
+FBgn0051559,4,2,0,0,3,1,0
+FBgn0051560,0,0,0,0,1,0,0
+FBgn0051561,0,0,0,0,0,0,0
+FBgn0051562,0,0,1,0,0,0,0
+FBgn0051568,0,3,2,1,5,5,1
+FBgn0051569,0,0,0,0,0,0,0
+FBgn0051570,0,0,0,0,0,0,0
+FBgn0051573,0,0,0,0,0,0,0
+FBgn0051575,0,0,0,0,0,0,0
+FBgn0051576,0,0,0,0,0,0,0
+FBgn0051577,0,0,0,0,0,0,0
+FBgn0051578,0,0,0,0,0,1,0
+FBgn0051579,0,0,0,0,0,0,0
+FBgn0051580,0,0,0,0,2,0,0
+FBgn0051583,0,0,0,1,0,0,0
+FBgn0051588,0,0,0,0,0,0,0
+FBgn0051591,0,0,0,0,0,0,0
+FBgn0051600,81,106,53,33,159,49,36
+FBgn0051601,1533,2959,655,618,2658,594,647
+FBgn0051602,0,0,0,0,0,0,0
+FBgn0051603,0,1,0,0,0,0,0
+FBgn0051604,0,0,0,0,0,0,0
+FBgn0051606,2,3,4,1,9,0,1
+FBgn0051607,78,154,88,70,205,88,119
+FBgn0051609,0,2,1,1,4,2,0
+FBgn0051611,0,0,0,0,0,0,0
+FBgn0051612,269,524,136,137,537,170,169
+FBgn0051613,0,0,0,0,0,0,0
+FBgn0051614,87,78,52,52,210,98,104
+FBgn0051615,0,0,0,0,0,0,0
+FBgn0051616,0,0,0,0,0,0,0
+FBgn0051617,0,0,0,0,0,0,0
+FBgn0051618,0,0,0,0,0,0,0
+FBgn0051619,4194,6184,2689,2722,6418,3512,3776
+FBgn0051624,20,53,17,21,72,20,38
+FBgn0051626,0,0,0,0,0,0,0
+FBgn0051627,11,35,6,0,23,8,7
+FBgn0051630,105,162,61,64,103,50,47
+FBgn0051631,0,0,0,0,0,0,0
+FBgn0051632,0,0,1,0,0,0,0
+FBgn0051633,148,214,61,90,227,58,91
+FBgn0051634,10,20,9,11,14,7,15
+FBgn0051635,682,1377,516,509,1108,516,525
+FBgn0051636,4,9,0,4,5,3,3
+FBgn0051637,3635,4656,2078,2259,3490,1791,1876
+FBgn0051638,766,1235,511,560,1267,629,662
+FBgn0051639,0,0,0,0,0,0,0
+FBgn0051641,1503,3565,967,1084,2787,790,928
+FBgn0051642,51,71,46,30,294,172,144
+FBgn0051643,0,0,0,0,0,1,0
+FBgn0051644,1,0,0,0,0,0,0
+FBgn0051646,0,0,0,0,0,0,0
+FBgn0051647,1,1,0,0,1,0,0
+FBgn0051648,303,422,136,172,395,211,222
+FBgn0051658,179,344,91,158,400,148,199
+FBgn0051659,0,0,0,0,1,0,0
+FBgn0051660,9,19,4,6,7,1,4
+FBgn0051661,0,3,0,0,2,1,0
+FBgn0051663,1,9,3,4,22,12,7
+FBgn0051664,1,2,0,1,0,1,0
+FBgn0051665,0,1,0,0,1,0,0
+FBgn0051668,36,40,18,21,54,19,25
+FBgn0051669,0,0,0,0,0,0,0
+FBgn0051673,1646,2509,823,1118,2741,1119,1228
+FBgn0051674,136,221,72,82,248,100,96
+FBgn0051675,33,108,32,37,59,17,19
+FBgn0051676,5,7,3,1,4,5,4
+FBgn0051677,0,0,0,0,0,0,0
+FBgn0051678,3834,6315,2397,2288,5286,2557,2774
+FBgn0051679,1,0,1,0,0,0,0
+FBgn0051680,1,0,0,1,1,0,0
+FBgn0051681,0,1,0,0,0,0,1
+FBgn0051682,0,1,0,0,1,0,2
+FBgn0051683,0,2,3,3,0,3,5
+FBgn0051686,9,4,2,4,9,3,5
+FBgn0051687,5,19,16,23,14,12,17
+FBgn0051688,968,1543,777,764,1126,752,630
+FBgn0051690,1,1,1,1,3,2,1
+FBgn0051693,1,1,2,1,4,2,2
+FBgn0051694,2088,3288,1238,1483,3103,1433,1506
+FBgn0051697,5,11,6,5,13,6,4
+FBgn0051698,1,0,0,1,0,0,1
+FBgn0051700,0,0,0,0,0,0,0
+FBgn0051702,0,0,0,0,0,0,0
+FBgn0051703,0,0,0,0,0,0,0
+FBgn0051704,0,0,0,0,0,0,0
+FBgn0051706,1,2,2,1,0,1,0
+FBgn0051708,0,0,0,0,1,0,0
+FBgn0051709,0,0,0,0,0,0,0
+FBgn0051710,97,223,75,74,194,62,75
+FBgn0051712,486,1027,329,416,864,354,398
+FBgn0051713,64,139,39,63,125,47,70
+FBgn0051715,315,668,141,163,793,147,169
+FBgn0051716,2812,4982,1666,1822,4410,1725,1956
+FBgn0051717,805,1105,410,502,1132,421,476
+FBgn0051718,0,0,0,0,0,0,0
+FBgn0051719,9,21,15,5,14,10,10
+FBgn0051720,180,266,63,76,305,77,71
+FBgn0051721,1,6,3,0,6,4,6
+FBgn0051728,0,0,0,1,0,1,1
+FBgn0051729,3958,4635,1966,2157,4414,2277,2400
+FBgn0051730,0,0,0,0,0,0,0
+FBgn0051735,0,0,0,0,0,0,0
+FBgn0051739,2911,4693,1595,1718,4012,1747,1854
+FBgn0051740,0,0,0,0,0,0,0
+FBgn0051741,0,0,0,0,0,0,0
+FBgn0051742,0,0,0,0,0,0,0
+FBgn0051752,0,2,0,0,0,0,0
+FBgn0051754,0,0,1,1,0,0,0
+FBgn0051755,487,685,237,236,695,253,233
+FBgn0051759,163,181,72,58,240,58,64
+FBgn0051760,0,0,0,0,1,0,0
+FBgn0051763,6,12,5,6,11,6,2
+FBgn0051769,92,123,47,48,114,33,54
+FBgn0051772,3,3,1,0,2,0,1
+FBgn0051773,2,9,2,1,11,5,2
+FBgn0051774,8,13,11,2,17,10,9
+FBgn0051776,1,4,3,1,0,0,0
+FBgn0051777,623,731,145,222,493,214,299
+FBgn0051778,20,31,8,9,21,2,4
+FBgn0051779,0,0,0,0,0,0,0
+FBgn0051780,0,0,0,0,0,0,0
+FBgn0051781,1,3,0,0,4,0,1
+FBgn0051782,192,248,95,83,246,95,90
+FBgn0051784,0,0,0,0,0,0,0
+FBgn0051785,0,0,0,0,1,0,0
+FBgn0051786,0,0,0,0,0,0,0
+FBgn0051787,0,0,0,0,0,0,0
+FBgn0051788,0,0,0,0,0,0,0
+FBgn0051789,14,23,3,9,30,11,14
+FBgn0051790,54,65,27,30,70,31,39
+FBgn0051792,5,2,2,4,4,5,1
+FBgn0051793,433,750,259,336,675,310,330
+FBgn0051797,0,1,0,0,1,0,0
+FBgn0051798,86,55,25,28,41,18,17
+FBgn0051800,174,334,68,97,294,94,97
+FBgn0051802,0,1,0,0,0,0,0
+FBgn0051803,7,9,4,5,12,6,6
+FBgn0051804,0,0,0,0,1,0,0
+FBgn0051805,5,7,1,4,7,2,2
+FBgn0051806,0,0,0,0,0,0,0
+FBgn0051807,2,4,2,1,19,1,2
+FBgn0051809,0,0,0,0,0,0,0
+FBgn0051810,0,0,0,0,0,0,0
+FBgn0051812,32,62,16,17,72,13,17
+FBgn0051813,0,0,0,0,0,0,0
+FBgn0051814,4,0,2,0,4,1,1
+FBgn0051815,16,118,43,15,113,26,21
+FBgn0051816,19,26,8,17,45,10,12
+FBgn0051820,0,0,0,0,0,0,0
+FBgn0051821,1,4,4,0,1,1,1
+FBgn0051822,0,0,0,0,1,0,0
+FBgn0051823,0,0,0,0,0,0,0
+FBgn0051824,0,0,0,0,0,0,0
+FBgn0051826,0,0,0,0,0,0,0
+FBgn0051827,0,0,0,0,0,0,0
+FBgn0051828,0,0,0,0,0,0,0
+FBgn0051832,0,0,0,1,8,3,1
+FBgn0051835,0,0,0,0,0,0,0
+FBgn0051845,1,3,1,1,1,0,0
+FBgn0051846,1,1,0,2,1,0,0
+FBgn0051847,2,8,6,0,20,6,5
+FBgn0051848,0,0,0,1,1,1,1
+FBgn0051849,55,70,33,34,121,44,73
+FBgn0051851,0,0,0,0,0,0,0
+FBgn0051852,497,974,271,343,852,364,405
+FBgn0051855,328,741,173,235,652,252,273
+FBgn0051856,66,95,43,46,193,87,101
+FBgn0051858,14,44,13,6,33,6,7
+FBgn0051860,0,0,0,0,0,0,0
+FBgn0051862,0,0,0,0,0,0,0
+FBgn0051864,15,15,38,51,37,49,74
+FBgn0051865,6,8,16,23,15,13,7
+FBgn0051866,14,37,20,19,27,15,43
+FBgn0051867,0,0,0,0,0,0,0
+FBgn0051869,12,29,15,18,33,17,19
+FBgn0051870,0,0,0,0,0,0,1
+FBgn0051871,0,0,0,0,0,0,0
+FBgn0051872,0,0,0,0,0,0,0
+FBgn0051874,11,18,5,10,20,11,12
+FBgn0051875,56,70,28,35,64,35,36
+FBgn0051876,2,1,3,0,2,3,1
+FBgn0051882,1,2,0,0,0,0,1
+FBgn0051885,0,1,5,0,0,0,1
+FBgn0051888,0,0,0,0,0,0,0
+FBgn0051889,0,0,0,0,0,0,0
+FBgn0051890,0,0,0,0,0,0,0
+FBgn0051892,0,0,0,0,1,0,0
+FBgn0051895,0,1,0,2,0,0,0
+FBgn0051896,0,0,0,0,0,0,0
+FBgn0051897,16,34,14,8,40,11,4
+FBgn0051898,75,125,30,51,163,26,44
+FBgn0051900,13,27,18,17,27,10,12
+FBgn0051901,1,4,2,2,2,1,3
+FBgn0051902,2,6,1,2,10,2,4
+FBgn0051907,7,2,2,0,7,0,1
+FBgn0051908,1859,3024,1158,1266,2169,1178,1365
+FBgn0051909,3,0,1,1,20,5,2
+FBgn0051910,0,0,0,0,0,0,0
+FBgn0051913,0,4,4,2,1,4,2
+FBgn0051914,0,0,0,0,0,0,0
+FBgn0051915,1253,2043,602,696,2036,849,908
+FBgn0051920,1,4,0,1,3,0,2
+FBgn0051921,1,2,1,2,4,0,1
+FBgn0051922,46,79,16,13,108,21,26
+FBgn0051924,0,0,0,0,0,0,0
+FBgn0051926,0,1,0,1,1,0,0
+FBgn0051928,0,2,1,0,2,0,1
+FBgn0051933,0,0,0,0,0,0,0
+FBgn0051935,403,734,263,321,591,261,300
+FBgn0051939,0,0,0,0,0,0,0
+FBgn0051940,0,1,0,0,0,0,0
+FBgn0051942,0,0,0,0,0,0,0
+FBgn0051943,0,0,0,0,0,0,0
+FBgn0051944,0,0,0,0,0,0,0
+FBgn0051946,0,0,1,0,0,0,0
+FBgn0051948,0,0,0,0,0,0,0
+FBgn0051949,0,0,0,0,1,0,0
+FBgn0051950,140,166,65,86,184,96,88
+FBgn0051952,0,3,2,0,1,1,0
+FBgn0051953,0,0,0,5,0,2,4
+FBgn0051954,0,2,0,0,1,0,0
+FBgn0051955,595,1031,280,281,725,206,211
+FBgn0051956,3,5,2,4,3,2,0
+FBgn0051957,161,251,58,74,231,62,75
+FBgn0051958,0,0,0,0,0,0,0
+FBgn0051959,0,1,0,0,0,0,0
+FBgn0051960,0,0,0,0,0,1,0
+FBgn0051961,381,756,215,266,599,250,283
+FBgn0051963,0,0,0,0,0,0,0
+FBgn0051971,0,1,0,0,2,0,0
+FBgn0051973,67,110,43,39,103,39,50
+FBgn0051974,49,76,29,31,99,40,34
+FBgn0051975,0,0,0,0,0,0,0
+FBgn0051976,0,0,0,0,0,0,0
+FBgn0051988,0,1,0,0,3,0,1
+FBgn0051989,711,935,345,430,746,357,395
+FBgn0051992,6103,10268,3303,3359,9951,3606,3681
+FBgn0051997,776,1218,353,425,1358,344,374
+FBgn0051998,1764,2760,653,573,2689,682,642
+FBgn0051999,1882,2843,837,806,2788,714,770
+FBgn0052000,4297,5105,1338,1256,5432,1200,1072
+FBgn0052006,3,6,1,3,13,0,2
+FBgn0052009,5,2,2,1,9,1,2
+FBgn0052010,1,1,0,1,1,1,0
+FBgn0052011,0,0,26,20,0,11,16
+FBgn0052016,1767,3048,734,710,2783,658,694
+FBgn0052017,694,691,210,169,1261,176,181
+FBgn0052021,426,686,336,313,904,483,553
+FBgn0052022,320,461,114,187,528,207,240
+FBgn0052023,0,0,0,0,0,0,0
+FBgn0052024,5,12,8,6,39,9,13
+FBgn0052026,62,244,85,40,241,63,68
+FBgn0052027,148,231,93,79,234,100,122
+FBgn0052029,2,1,0,0,0,0,0
+FBgn0052034,0,0,0,0,0,0,0
+FBgn0052036,36,38,15,16,41,22,18
+FBgn0052037,160,260,93,85,189,91,127
+FBgn0052038,351,574,133,169,411,180,217
+FBgn0052039,134,221,58,79,274,61,81
+FBgn0052040,15,29,7,11,16,6,11
+FBgn0052043,128,291,104,108,247,124,154
+FBgn0052050,0,1,0,1,1,0,0
+FBgn0052053,0,0,0,0,1,0,0
+FBgn0052054,1,0,0,0,0,1,0
+FBgn0052055,2,2,2,0,9,1,0
+FBgn0052056,1485,1565,678,813,2068,1096,1333
+FBgn0052057,0,0,0,0,0,0,0
+FBgn0052058,11,40,14,11,22,3,7
+FBgn0052060,15,84,25,21,51,21,18
+FBgn0052061,1,1,0,0,1,0,0
+FBgn0052062,367,866,303,311,687,321,303
+FBgn0052064,2,4,2,1,4,0,3
+FBgn0052065,2,24,6,10,18,7,4
+FBgn0052066,3062,4700,1714,1824,4090,1783,2002
+FBgn0052068,636,1311,366,459,828,341,400
+FBgn0052069,108,107,40,68,187,64,95
+FBgn0052071,1,2,2,3,2,1,2
+FBgn0052072,1,5,0,0,2,2,1
+FBgn0052073,0,0,0,0,1,0,0
+FBgn0052074,0,0,0,0,0,0,0
+FBgn0052075,266,449,132,122,413,131,160
+FBgn0052076,529,582,250,319,605,320,334
+FBgn0052079,0,0,0,0,0,0,0
+FBgn0052081,0,0,0,0,0,0,0
+FBgn0052082,20,56,18,30,55,21,21
+FBgn0052085,5,7,1,4,14,2,11
+FBgn0052086,0,0,0,0,0,0,0
+FBgn0052087,0,0,0,0,0,0,0
+FBgn0052088,157,107,39,34,182,56,56
+FBgn0052091,41,87,33,26,71,35,36
+FBgn0052093,0,0,0,0,0,0,0
+FBgn0052095,270,358,140,177,378,163,163
+FBgn0052099,186,270,91,107,277,81,96
+FBgn0052100,149,258,86,110,192,109,128
+FBgn0052102,0,0,0,0,0,0,0
+FBgn0052103,2002,3815,1637,1631,3216,1596,1695
+FBgn0052104,253,311,144,116,360,152,141
+FBgn0052105,0,0,1,0,0,0,0
+FBgn0052106,1,3,0,0,1,0,0
+FBgn0052107,0,0,0,0,0,0,0
+FBgn0052109,188,272,67,79,388,81,99
+FBgn0052110,1,9,5,6,5,3,5
+FBgn0052111,0,0,0,0,0,0,0
+FBgn0052112,141,257,88,101,211,74,89
+FBgn0052113,1227,1767,573,517,1799,523,473
+FBgn0052115,490,768,178,207,1173,200,205
+FBgn0052117,2,7,0,2,3,1,2
+FBgn0052118,0,0,0,0,0,0,0
+FBgn0052119,1,5,1,0,1,0,1
+FBgn0052121,1,0,0,2,1,2,1
+FBgn0052123,0,0,0,0,0,0,0
+FBgn0052126,0,0,0,0,0,0,0
+FBgn0052127,0,1,0,0,0,0,0
+FBgn0052128,0,0,0,0,0,0,0
+FBgn0052129,0,0,0,0,0,0,0
+FBgn0052132,19,13,37,19,19,19,19
+FBgn0052133,2640,4065,1476,1376,2639,1386,1330
+FBgn0052135,199,292,86,89,785,249,241
+FBgn0052137,6,10,1,5,5,1,3
+FBgn0052138,11324,19666,9769,8767,18079,9414,10370
+FBgn0052141,0,0,0,0,0,0,0
+FBgn0052150,0,1,0,0,0,0,0
+FBgn0052152,12,55,16,14,52,14,18
+FBgn0052153,0,0,0,0,0,0,0
+FBgn0052154,4,4,2,1,8,0,3
+FBgn0052155,85,145,51,55,205,46,70
+FBgn0052159,5,14,5,6,13,6,6
+FBgn0052160,0,0,0,1,0,0,0
+FBgn0052161,1,0,0,0,2,2,0
+FBgn0052163,122,278,76,85,240,97,80
+FBgn0052170,77,115,68,62,68,51,45
+FBgn0052173,0,0,0,0,2,0,0
+FBgn0052174,0,1,0,1,2,0,0
+FBgn0052176,270,735,181,195,617,185,216
+FBgn0052177,560,785,276,340,775,249,304
+FBgn0052179,112,204,77,94,137,64,94
+FBgn0052181,74,74,28,23,109,18,27
+FBgn0052182,64,49,24,23,58,26,31
+FBgn0052183,2,4,2,2,1,1,2
+FBgn0052185,16,33,10,7,58,28,30
+FBgn0052186,3,7,5,1,12,4,3
+FBgn0052187,0,1,1,1,4,1,1
+FBgn0052188,0,0,0,0,0,0,2
+FBgn0052189,0,0,0,0,0,0,0
+FBgn0052190,4523,8764,3222,3750,6294,3608,4451
+FBgn0052191,0,0,0,1,0,0,1
+FBgn0052192,1,6,4,2,18,2,1
+FBgn0052193,2,11,9,6,16,3,1
+FBgn0052195,58,136,42,31,126,39,44
+FBgn0052196,16,23,11,9,34,11,16
+FBgn0052198,0,0,0,0,0,0,0
+FBgn0052199,1,0,0,0,0,0,0
+FBgn0052200,0,1,0,0,1,0,0
+FBgn0052201,0,1,0,0,0,0,0
+FBgn0052202,94,212,52,57,141,56,52
+FBgn0052203,0,0,0,0,0,0,0
+FBgn0052204,0,0,0,0,0,1,0
+FBgn0052205,3,3,0,0,5,0,0
+FBgn0052206,141,195,48,43,266,41,36
+FBgn0052207,36,90,54,63,92,60,78
+FBgn0052208,0,0,0,0,0,0,0
+FBgn0052210,1529,2160,728,764,2134,679,676
+FBgn0052212,0,0,0,0,0,0,1
+FBgn0052213,0,0,0,0,0,0,0
+FBgn0052214,1,0,0,0,1,0,0
+FBgn0052219,3,8,3,0,4,1,3
+FBgn0052220,0,0,0,0,0,0,0
+FBgn0052221,218,258,93,119,246,128,149
+FBgn0052225,6,7,3,8,3,0,3
+FBgn0052226,624,821,376,396,791,427,443
+FBgn0052227,14,21,6,7,18,14,10
+FBgn0052228,0,1,0,0,1,0,0
+FBgn0052230,822,1342,338,433,1358,384,423
+FBgn0052232,0,0,0,0,0,0,0
+FBgn0052237,1,2,0,0,0,0,1
+FBgn0052238,0,1,0,0,1,0,0
+FBgn0052240,2,0,0,0,2,0,0
+FBgn0052241,0,2,0,1,0,0,0
+FBgn0052243,971,1223,289,343,1605,352,383
+FBgn0052246,0,2,2,0,2,1,2
+FBgn0052248,0,0,0,0,0,0,0
+FBgn0052249,0,0,0,0,0,0,0
+FBgn0052250,241,327,149,170,293,189,180
+FBgn0052251,1097,2706,942,836,1850,623,719
+FBgn0052252,8,7,2,0,7,1,2
+FBgn0052255,1,3,2,1,0,1,2
+FBgn0052259,1,0,1,0,2,0,0
+FBgn0052260,2,5,2,3,6,4,6
+FBgn0052262,134,189,56,96,175,92,103
+FBgn0052263,2,0,0,1,0,0,0
+FBgn0052264,933,1767,866,747,1200,727,876
+FBgn0052266,0,0,0,0,1,0,1
+FBgn0052267,418,342,95,100,779,113,104
+FBgn0052268,22,24,8,10,24,8,8
+FBgn0052269,0,0,0,0,0,0,0
+FBgn0052270,0,0,0,0,0,0,0
+FBgn0052271,15,23,12,12,17,19,19
+FBgn0052272,0,0,0,0,0,0,0
+FBgn0052273,1,0,1,0,1,0,0
+FBgn0052274,0,0,0,0,2,0,1
+FBgn0052277,3,6,3,1,3,3,2
+FBgn0052278,382,595,150,196,473,191,185
+FBgn0052279,0,0,0,1,0,0,0
+FBgn0052280,389,491,207,243,826,280,354
+FBgn0052281,217,319,92,128,321,108,117
+FBgn0052282,0,0,0,0,0,1,0
+FBgn0052283,0,1,0,0,0,0,0
+FBgn0052284,0,5,2,1,7,1,3
+FBgn0052285,0,0,0,0,0,0,0
+FBgn0052286,0,0,0,0,0,0,0
+FBgn0052287,0,0,0,0,0,0,0
+FBgn0052288,0,0,0,0,0,0,0
+FBgn0052289,0,0,0,0,0,0,0
+FBgn0052296,658,1249,542,454,1055,608,631
+FBgn0052298,0,0,0,0,0,0,0
+FBgn0052299,1,2,0,0,2,0,0
+FBgn0052301,5,8,5,5,8,5,3
+FBgn0052302,17,13,6,6,6,4,10
+FBgn0052303,0,0,0,0,0,1,0
+FBgn0052304,0,0,0,0,1,0,0
+FBgn0052305,2,3,0,1,4,1,0
+FBgn0052311,1522,3198,1323,1164,1812,949,849
+FBgn0052312,0,0,0,0,1,0,0
+FBgn0052313,21,32,13,13,17,1,2
+FBgn0052318,0,0,11,9,0,13,0
+FBgn0052319,0,5,1,0,4,0,0
+FBgn0052320,0,1,0,0,0,0,0
+FBgn0052324,0,0,0,0,0,0,0
+FBgn0052328,0,0,0,0,0,0,0
+FBgn0052329,0,0,0,0,0,0,0
+FBgn0052330,0,0,0,0,0,0,1
+FBgn0052333,1,1,1,0,0,1,1
+FBgn0052334,1,1,1,0,6,2,0
+FBgn0052343,523,751,269,324,659,374,424
+FBgn0052344,1476,2610,802,931,1927,891,972
+FBgn0052350,367,431,111,126,623,95,111
+FBgn0052351,0,10,2,2,7,5,2
+FBgn0052352,42,42,24,20,46,23,18
+FBgn0052353,12,23,9,6,23,11,15
+FBgn0052354,18,25,13,9,19,19,11
+FBgn0052355,5,10,6,5,13,12,5
+FBgn0052357,0,0,0,0,0,0,0
+FBgn0052358,0,0,0,0,0,0,0
+FBgn0052359,0,0,0,0,0,0,0
+FBgn0052360,0,0,0,0,0,0,0
+FBgn0052361,0,0,0,0,0,0,0
+FBgn0052362,0,0,1,0,0,0,0
+FBgn0052363,0,0,0,0,0,0,0
+FBgn0052364,508,709,224,305,840,298,325
+FBgn0052365,8,26,7,8,18,7,6
+FBgn0052368,249,1004,178,199,1063,258,225
+FBgn0052369,1888,3946,1807,1662,3184,1806,2071
+FBgn0052370,0,0,0,1,0,0,0
+FBgn0052371,0,0,0,0,0,0,0
+FBgn0052372,12,25,6,6,19,9,18
+FBgn0052373,0,0,0,0,0,1,0
+FBgn0052374,0,1,1,0,0,0,0
+FBgn0052376,0,0,0,0,0,0,0
+FBgn0052377,0,3,0,1,1,0,0
+FBgn0052379,0,0,0,0,0,1,0
+FBgn0052380,1324,1900,672,822,1883,919,915
+FBgn0052382,0,6,2,1,9,3,5
+FBgn0052383,1,6,2,2,3,1,0
+FBgn0052391,0,0,0,0,1,0,0
+FBgn0052392,1,0,0,0,0,0,0
+FBgn0052393,527,863,377,306,732,431,417
+FBgn0052394,2953,6721,2415,2173,4495,2241,2339
+FBgn0052396,2,0,0,1,2,3,0
+FBgn0052397,17,40,28,12,68,29,22
+FBgn0052398,0,0,0,0,0,0,0
+FBgn0052404,2,0,0,2,0,0,0
+FBgn0052405,1,2,1,0,1,0,1
+FBgn0052406,0,0,0,0,1,0,0
+FBgn0052407,361,521,172,193,121,36,49
+FBgn0052409,769,1206,445,587,934,507,590
+FBgn0052412,1501,2240,810,1017,1259,652,686
+FBgn0052413,0,0,0,0,0,0,0
+FBgn0052418,268,554,160,191,371,176,181
+FBgn0052420,0,0,0,0,0,0,0
+FBgn0052421,0,0,0,0,0,0,0
+FBgn0052423,3589,10061,2810,2510,6825,2249,2550
+FBgn0052425,960,1789,619,721,1542,695,750
+FBgn0052428,366,646,194,231,445,194,221
+FBgn0052432,0,1,0,2,3,1,1
+FBgn0052436,509,525,251,216,831,384,369
+FBgn0052437,3,12,2,2,11,5,2
+FBgn0052438,1030,1821,529,544,1855,599,522
+FBgn0052440,2,5,1,4,4,3,1
+FBgn0052441,956,1271,442,581,1391,633,652
+FBgn0052442,75,129,32,38,134,33,48
+FBgn0052445,6,16,5,6,11,6,8
+FBgn0052446,131,176,88,92,245,116,115
+FBgn0052447,2,6,3,2,5,0,2
+FBgn0052448,71,152,22,21,127,48,51
+FBgn0052449,0,0,0,0,0,0,0
+FBgn0052450,0,5,2,0,2,1,0
+FBgn0052451,1439,2374,829,927,1962,941,951
+FBgn0052452,233,557,128,161,461,152,190
+FBgn0052453,0,0,0,0,0,0,0
+FBgn0052456,0,0,0,0,0,0,0
+FBgn0052457,9,19,1,5,25,6,7
+FBgn0052458,171,312,76,66,239,72,68
+FBgn0052459,3,0,1,1,0,0,0
+FBgn0052460,0,0,0,0,0,0,0
+FBgn0052461,7,10,5,6,7,2,6
+FBgn0052462,2,11,6,2,6,1,5
+FBgn0052463,0,0,1,0,1,1,0
+FBgn0052468,0,0,0,0,0,0,0
+FBgn0052473,658,949,399,430,900,418,498
+FBgn0052475,0,0,0,0,0,0,0
+FBgn0052476,13,21,5,6,36,9,10
+FBgn0052477,15922,29847,9636,9435,27848,9657,9707
+FBgn0052479,7261,12901,5044,4529,10343,5109,5323
+FBgn0052480,16,12,8,5,17,6,8
+FBgn0052481,1,16,5,4,6,2,3
+FBgn0052482,0,7,1,2,3,4,0
+FBgn0052483,34,97,26,43,68,37,45
+FBgn0052484,1064,1482,686,738,1211,732,775
+FBgn0052485,254,393,158,180,226,137,167
+FBgn0052486,1631,3191,1126,1255,3358,1398,1536
+FBgn0052487,0,0,0,0,0,0,0
+FBgn0052488,0,0,0,0,0,0,0
+FBgn0052493,0,0,0,1,1,0,0
+FBgn0052494,0,1,0,1,0,0,0
+FBgn0052495,0,0,81,53,0,23,55
+FBgn0052496,2,0,0,0,2,0,0
+FBgn0052499,5,30,10,8,24,8,11
+FBgn0052500,0,0,0,0,0,0,0
+FBgn0052506,5,6,0,1,6,3,4
+FBgn0052511,0,0,1,2,5,1,0
+FBgn0052512,709,1951,688,719,1336,659,753
+FBgn0052518,1,2,0,0,3,0,1
+FBgn0052520,0,0,0,0,0,0,0
+FBgn0052521,3001,5960,2706,2702,2385,1509,1639
+FBgn0052523,0,2,2,1,1,1,1
+FBgn0052525,0,0,0,0,0,0,0
+FBgn0052528,2038,2554,1022,1323,2687,1466,1616
+FBgn0052529,11795,20491,8199,7919,12921,7100,7492
+FBgn0052532,48,63,26,24,64,35,34
+FBgn0052533,168,229,96,104,201,153,163
+FBgn0052536,39,66,17,26,67,30,31
+FBgn0052537,256,349,187,208,298,193,222
+FBgn0052541,0,0,0,0,0,0,0
+FBgn0052544,4,9,2,0,5,3,3
+FBgn0052546,0,0,0,0,0,0,0
+FBgn0052547,4,6,3,4,8,2,4
+FBgn0052548,0,1,0,1,3,0,1
+FBgn0052549,3240,4414,1737,1920,3676,1948,2246
+FBgn0052551,0,0,0,0,0,0,0
+FBgn0052554,83,124,33,51,125,57,61
+FBgn0052556,19,68,23,30,76,31,35
+FBgn0052557,52,57,31,19,36,38,36
+FBgn0052563,0,0,0,0,1,0,0
+FBgn0052564,0,0,1,0,0,0,0
+FBgn0052568,0,0,0,0,0,0,0
+FBgn0052569,0,0,0,1,0,0,0
+FBgn0052570,0,0,1,0,0,0,0
+FBgn0052571,0,0,2,0,0,0,0
+FBgn0052572,33,95,28,28,64,36,43
+FBgn0052573,0,0,0,0,0,0,0
+FBgn0052574,0,0,0,0,0,0,0
+FBgn0052576,370,368,173,216,634,165,217
+FBgn0052579,336,414,178,234,422,211,228
+FBgn0052580,258,527,213,142,854,187,118
+FBgn0052581,1,0,65,34,2,35,28
+FBgn0052582,82,137,27,47,153,39,44
+FBgn0052588,0,0,0,0,0,0,0
+FBgn0052590,83,166,103,83,187,53,67
+FBgn0052591,2,3,0,2,2,1,1
+FBgn0052594,3915,4975,1741,1966,4484,2004,2131
+FBgn0052595,205,402,103,117,359,106,128
+FBgn0052598,0,0,0,0,2,0,1
+FBgn0052600,0,4,0,1,2,6,1
+FBgn0052601,0,0,0,0,0,1,0
+FBgn0052602,1,0,2,1,1,0,0
+FBgn0052603,0,1,1,1,0,1,0
+FBgn0052606,3,32,3,13,5,4,6
+FBgn0052613,13,162,44,18,148,25,42
+FBgn0052614,0,0,0,0,0,0,0
+FBgn0052625,85,162,41,79,548,156,181
+FBgn0052626,2954,3645,1439,1890,2959,1711,1836
+FBgn0052627,148,227,96,93,241,94,88
+FBgn0052628,64,129,52,52,122,55,65
+FBgn0052631,1,0,0,0,0,0,0
+FBgn0052633,1,1,0,0,1,0,0
+FBgn0052635,0,1,1,0,3,0,1
+FBgn0052638,2047,3555,962,1189,2599,1001,1162
+FBgn0052639,6,39,19,8,30,6,19
+FBgn0052640,18,25,8,21,21,22,22
+FBgn0052641,25,31,25,37,44,33,39
+FBgn0052642,0,0,0,0,0,0,0
+FBgn0052643,0,0,0,1,0,0,0
+FBgn0052644,0,1,0,0,0,0,0
+FBgn0052645,6,10,4,4,12,0,5
+FBgn0052647,7,7,1,2,14,6,7
+FBgn0052649,835,1142,499,592,1170,562,667
+FBgn0052650,57,75,33,57,62,51,59
+FBgn0052651,0,0,0,0,0,0,0
+FBgn0052652,0,0,0,0,0,0,0
+FBgn0052654,2897,4487,1937,1923,3646,1950,2070
+FBgn0052655,1,22,6,7,40,5,3
+FBgn0052656,2,4,5,1,2,2,3
+FBgn0052657,0,0,0,0,0,0,0
+FBgn0052660,1,1,0,0,2,0,0
+FBgn0052662,831,3339,1143,1072,2681,961,1148
+FBgn0052663,1564,3420,1897,1759,2439,1550,1761
+FBgn0052666,2433,3684,1484,1491,3354,1707,1945
+FBgn0052667,3,5,3,2,8,5,5
+FBgn0052668,16,25,9,19,32,16,18
+FBgn0052669,21,37,15,13,29,15,10
+FBgn0052670,0,0,0,0,0,0,0
+FBgn0052671,0,0,0,0,0,0,0
+FBgn0052672,2746,6011,1333,1697,4529,1371,1644
+FBgn0052673,0,0,0,0,0,0,0
+FBgn0052675,2597,5172,1839,2076,4081,2185,2283
+FBgn0052676,1686,3138,1350,1279,2810,1717,1752
+FBgn0052677,28,50,20,24,96,55,64
+FBgn0052679,1,1,0,1,1,3,2
+FBgn0052681,200,380,137,166,182,73,81
+FBgn0052683,0,0,1,0,2,0,0
+FBgn0052685,2873,6417,2243,2261,4774,2146,2286
+FBgn0052686,42,43,23,17,41,17,18
+FBgn0052687,404,687,251,296,409,202,214
+FBgn0052690,0,1,1,1,4,0,0
+FBgn0052691,0,0,0,0,0,0,0
+FBgn0052693,0,1,0,0,1,0,0
+FBgn0052694,1,1,0,0,0,0,0
+FBgn0052695,0,1,0,1,1,0,1
+FBgn0052698,2,7,1,7,8,3,3
+FBgn0052699,1713,2643,840,938,2657,1101,1188
+FBgn0052700,52,11,4,6,150,12,13
+FBgn0052702,750,1205,469,481,1126,590,611
+FBgn0052703,10,13,5,6,10,7,5
+FBgn0052704,1,6,1,3,1,2,3
+FBgn0052706,1,0,0,0,2,1,0
+FBgn0052707,312,436,186,178,431,232,261
+FBgn0052708,200,353,90,142,210,119,137
+FBgn0052710,0,0,0,1,0,1,0
+FBgn0052711,84,166,44,57,195,46,61
+FBgn0052712,3,8,0,2,9,3,2
+FBgn0052713,2,1,2,2,1,1,1
+FBgn0052718,0,0,0,0,0,0,0
+FBgn0052719,66,188,48,34,110,18,27
+FBgn0052720,6,26,7,6,17,4,4
+FBgn0052726,1,5,3,1,4,1,1
+FBgn0052727,0,2,0,0,1,0,0
+FBgn0052732,350,636,212,228,557,275,294
+FBgn0052733,0,0,0,0,0,1,0
+FBgn0052736,0,0,0,0,0,0,0
+FBgn0052740,0,0,0,0,0,0,0
+FBgn0052743,3947,5171,2526,2383,4548,2812,2685
+FBgn0052745,9,9,12,5,10,8,11
+FBgn0052748,0,0,0,0,0,0,0
+FBgn0052750,0,1,0,0,0,0,0
+FBgn0052751,0,0,0,0,0,0,0
+FBgn0052755,1,0,2,5,0,1,1
+FBgn0052756,72,98,45,35,141,36,49
+FBgn0052758,2456,4207,1498,1527,3539,1619,1701
+FBgn0052761,0,0,0,0,0,0,0
+FBgn0052762,1,0,0,0,0,0,0
+FBgn0052767,1906,4059,1648,1470,3177,1476,1705
+FBgn0052772,480,1101,402,421,743,356,396
+FBgn0052773,1,4,1,0,7,0,1
+FBgn0052774,3,4,4,5,9,5,8
+FBgn0052778,2,6,2,2,4,7,4
+FBgn0052779,0,0,0,0,0,0,0
+FBgn0052783,3,5,7,5,11,6,5
+FBgn0052785,0,0,0,0,0,0,0
+FBgn0052786,0,0,0,0,0,0,0
+FBgn0052790,2,7,1,0,4,0,0
+FBgn0052791,67,185,78,51,181,62,65
+FBgn0052792,7,11,4,6,11,3,3
+FBgn0052793,7,12,3,3,6,6,4
+FBgn0052797,0,0,0,0,0,0,1
+FBgn0052801,21,64,25,29,53,39,38
+FBgn0052803,329,443,154,226,612,260,334
+FBgn0052806,0,0,1,0,1,0,0
+FBgn0052808,22,47,28,22,44,22,25
+FBgn0052813,228,340,135,151,157,105,108
+FBgn0052815,6,17,5,10,12,4,4
+FBgn0052816,11,11,5,1,16,7,3
+FBgn0052817,0,4,0,2,1,4,3
+FBgn0052819,0,0,0,0,0,0,0
+FBgn0052820,0,0,0,0,0,0,0
+FBgn0052821,0,0,0,0,0,0,0
+FBgn0052823,31,94,60,38,81,44,54
+FBgn0052826,0,0,0,0,0,0,1
+FBgn0052829,11,24,4,5,8,3,8
+FBgn0052830,1,1,0,1,0,0,0
+FBgn0052831,1,0,3,0,0,1,0
+FBgn0052832,0,0,0,1,1,0,0
+FBgn0052833,1,0,0,1,2,1,1
+FBgn0052834,0,0,0,0,2,0,1
+FBgn0052835,0,0,0,0,0,0,0
+FBgn0052843,0,0,0,0,1,1,1
+FBgn0052845,4,8,3,1,14,9,10
+FBgn0052846,0,0,0,0,0,0,0
+FBgn0052847,3,2,1,0,6,0,0
+FBgn0052850,269,392,215,187,477,193,261
+FBgn0052855,4,3,5,0,1,0,1
+FBgn0052856,92,186,26,41,185,45,62
+FBgn0052857,0,0,0,0,0,0,0
+FBgn0052861,0,0,0,0,0,0,0
+FBgn0052865,4,27,4,4,9,1,8
+FBgn0052937,0,1,0,0,0,0,0
+FBgn0052939,0,0,35,31,0,14,0
+FBgn0052944,30,46,13,14,39,22,13
+FBgn0052945,0,0,1,0,1,0,0
+FBgn0052971,4,5,1,2,16,4,4
+FBgn0052982,1076,2450,949,970,2397,1186,1325
+FBgn0052983,0,0,0,0,1,0,0
+FBgn0052984,127,233,88,89,214,80,70
+FBgn0052985,46,106,44,40,235,55,60
+FBgn0052986,0,0,0,1,0,0,0
+FBgn0052987,0,0,0,0,0,0,1
+FBgn0052988,0,1,0,0,0,0,0
+FBgn0053002,274,399,160,233,422,221,298
+FBgn0053003,2,2,1,1,2,1,2
+FBgn0053007,164,225,104,95,135,60,66
+FBgn0053012,5,6,2,2,4,2,2
+FBgn0053013,0,1,0,0,1,0,0
+FBgn0053017,13,23,5,5,14,6,9
+FBgn0053051,126,239,66,78,239,75,93
+FBgn0053052,0,0,0,0,0,0,0
+FBgn0053054,47,113,37,36,86,39,48
+FBgn0053056,494,513,274,313,424,213,259
+FBgn0053057,100,236,67,63,198,80,94
+FBgn0053060,0,0,0,0,0,0,1
+FBgn0053061,0,1,1,0,0,0,0
+FBgn0053080,57,103,44,47,67,43,49
+FBgn0053082,20,27,3,5,21,9,6
+FBgn0053087,5309,8855,3952,3803,7907,4343,3976
+FBgn0053092,1,4,3,2,8,1,2
+FBgn0053093,0,0,0,0,0,0,0
+FBgn0053094,1866,2609,1063,1219,2222,1074,1096
+FBgn0053095,616,1172,259,256,1385,292,303
+FBgn0053096,434,680,247,252,713,360,329
+FBgn0053097,1016,2055,804,859,1426,735,807
+FBgn0053098,0,0,0,0,0,0,0
+FBgn0053099,9,16,1,6,20,5,9
+FBgn0053100,479,1021,349,294,1010,263,334
+FBgn0053105,96,108,330,285,132,317,444
+FBgn0053107,193,317,110,145,304,120,146
+FBgn0053108,24,50,14,17,81,31,28
+FBgn0053109,2,2,1,1,5,0,1
+FBgn0053110,2,0,0,0,1,0,0
+FBgn0053111,268,457,124,131,322,120,129
+FBgn0053113,3521,6214,2340,2432,5268,2332,2579
+FBgn0053116,1191,1495,525,571,1629,624,707
+FBgn0053117,1,0,0,0,0,0,0
+FBgn0053120,53,84,16,22,78,31,25
+FBgn0053121,3,9,3,1,5,3,0
+FBgn0053123,3313,4416,1635,1836,4007,1886,1898
+FBgn0053124,67,74,24,35,75,41,32
+FBgn0053125,0,0,0,0,0,0,0
+FBgn0053126,9,11,5,8,3,2,3
+FBgn0053127,10,12,7,2,15,10,11
+FBgn0053128,3,1,0,1,3,1,0
+FBgn0053129,3348,4800,1751,2000,5197,2106,2087
+FBgn0053136,0,2,1,0,0,1,0
+FBgn0053137,7,16,2,2,25,10,8
+FBgn0053138,1602,2036,919,1124,2516,1572,1686
+FBgn0053139,1427,1907,863,991,1627,985,1152
+FBgn0053140,0,0,1,0,0,0,0
+FBgn0053143,1,7,4,4,11,2,4
+FBgn0053144,1165,1785,977,934,1974,1217,1359
+FBgn0053145,509,809,247,271,791,322,281
+FBgn0053147,0,3,0,0,0,1,2
+FBgn0053155,4,5,2,2,3,2,0
+FBgn0053156,218,242,96,135,293,164,155
+FBgn0053158,670,1019,380,432,1076,494,459
+FBgn0053159,39,40,19,15,56,27,17
+FBgn0053160,1,7,3,1,8,3,4
+FBgn0053169,33,77,15,35,99,38,31
+FBgn0053170,202,440,80,97,487,123,121
+FBgn0053172,189,220,73,98,254,80,73
+FBgn0053173,88,108,46,57,100,44,50
+FBgn0053177,1,19,9,3,9,7,8
+FBgn0053178,11,33,12,16,28,9,12
+FBgn0053179,0,0,0,0,0,0,0
+FBgn0053180,1186,1537,535,645,1653,610,594
+FBgn0053181,296,694,262,261,402,186,199
+FBgn0053182,635,1091,444,390,997,467,479
+FBgn0053189,4,8,6,3,11,2,2
+FBgn0053191,4,5,0,2,2,2,3
+FBgn0053192,3,1,0,2,1,1,1
+FBgn0053193,310,487,198,213,552,330,372
+FBgn0053194,2,2,0,0,0,1,0
+FBgn0053196,34,77,44,34,85,59,40
+FBgn0053197,1379,3479,1116,921,3764,1262,1253
+FBgn0053198,195,298,100,101,347,92,88
+FBgn0053199,0,0,0,0,0,0,0
+FBgn0053200,2,0,0,0,2,0,2
+FBgn0053202,0,1,0,0,0,0,0
+FBgn0053203,17,34,10,7,29,11,6
+FBgn0053205,1,5,0,2,6,3,1
+FBgn0053207,626,1390,486,487,906,497,526
+FBgn0053208,2139,4117,1671,1583,3272,1777,1755
+FBgn0053213,214,314,120,150,271,150,156
+FBgn0053214,3412,4687,2023,2264,4228,2375,2398
+FBgn0053217,160,71,25,36,252,37,40
+FBgn0053218,7,4,6,3,3,0,4
+FBgn0053221,3,3,1,2,5,3,1
+FBgn0053222,2,5,1,2,1,1,2
+FBgn0053223,3,2,3,1,5,3,4
+FBgn0053225,75,100,40,40,86,29,38
+FBgn0053229,497,658,239,242,707,263,215
+FBgn0053230,478,933,240,290,734,248,245
+FBgn0053233,2,7,0,0,6,0,0
+FBgn0053234,4,3,1,0,10,1,0
+FBgn0053236,0,0,0,0,0,0,0
+FBgn0053237,0,0,0,0,0,0,0
+FBgn0053238,0,0,0,0,0,0,0
+FBgn0053239,0,0,0,0,0,0,0
+FBgn0053240,0,0,0,0,0,0,0
+FBgn0053241,0,0,0,0,0,0,0
+FBgn0053242,0,0,0,0,0,0,0
+FBgn0053243,0,0,0,0,0,0,0
+FBgn0053244,0,0,0,0,0,0,0
+FBgn0053245,0,0,0,0,0,0,0
+FBgn0053246,0,0,0,0,0,0,0
+FBgn0053247,0,0,0,0,0,0,0
+FBgn0053251,0,0,0,0,0,0,0
+FBgn0053252,2,1,0,0,0,0,0
+FBgn0053255,0,0,0,0,0,0,0
+FBgn0053257,2,1,0,0,2,2,0
+FBgn0053258,1,2,1,0,2,0,1
+FBgn0053260,15,52,8,10,50,10,5
+FBgn0053262,0,0,0,0,0,0,0
+FBgn0053263,0,0,0,0,0,0,0
+FBgn0053265,0,0,0,0,0,0,0
+FBgn0053267,13,24,13,13,13,13,18
+FBgn0053269,0,0,0,0,0,0,0
+FBgn0053270,0,1,0,0,0,0,0
+FBgn0053271,0,0,0,0,0,0,0
+FBgn0053272,0,1,0,0,0,0,0
+FBgn0053276,51,150,36,29,133,28,27
+FBgn0053278,3,10,3,9,16,8,7
+FBgn0053281,0,0,1,0,0,2,1
+FBgn0053282,0,0,0,0,0,0,0
+FBgn0053283,0,1,0,0,1,0,0
+FBgn0053284,0,0,0,0,0,0,0
+FBgn0053285,0,0,0,0,2,0,0
+FBgn0053286,1,4,0,2,5,1,1
+FBgn0053287,2,2,2,1,5,3,1
+FBgn0053288,16,19,8,2,19,7,9
+FBgn0053289,0,0,0,0,0,0,0
+FBgn0053290,1,1,2,0,6,1,0
+FBgn0053291,1,1,0,0,0,0,0
+FBgn0053292,0,0,0,0,0,0,0
+FBgn0053293,2,9,4,11,11,2,2
+FBgn0053294,62,140,36,35,152,23,47
+FBgn0053296,0,0,0,0,0,0,0
+FBgn0053299,0,0,0,0,0,0,0
+FBgn0053300,2,9,10,10,5,8,8
+FBgn0053301,0,0,0,0,0,0,0
+FBgn0053302,0,0,0,1,0,0,2
+FBgn0053303,5949,8944,3002,4093,7913,4355,4747
+FBgn0053306,0,5,4,1,3,3,3
+FBgn0053307,1365,3309,737,1047,1082,313,375
+FBgn0053309,0,0,0,0,0,0,0
+FBgn0053310,0,0,0,0,0,0,0
+FBgn0053315,0,0,1,0,0,1,0
+FBgn0053317,6,16,18,7,22,13,13
+FBgn0053318,1,4,1,1,8,5,11
+FBgn0053319,0,0,0,0,1,0,0
+FBgn0053322,2,1,0,0,1,0,0
+FBgn0053324,498,865,334,330,574,324,384
+FBgn0053325,0,0,0,0,0,0,0
+FBgn0053328,3303,6751,1382,1286,6181,1329,1279
+FBgn0053329,904,875,527,498,650,366,486
+FBgn0053330,173,377,127,132,243,94,120
+FBgn0053333,0,0,0,0,0,0,0
+FBgn0053337,0,0,0,0,0,0,0
+FBgn0053339,0,0,0,0,0,0,0
+FBgn0053340,0,1,1,0,0,0,0
+FBgn0053341,0,0,0,0,0,0,0
+FBgn0053346,5,20,2,4,43,18,10
+FBgn0053348,1,3,1,2,2,2,1
+FBgn0053349,2,5,5,1,11,5,4
+FBgn0053353,0,0,0,0,0,0,0
+FBgn0053354,0,0,0,0,0,0,0
+FBgn0053355,0,0,0,0,0,0,0
+FBgn0053356,0,0,0,0,0,0,0
+FBgn0053357,0,0,0,0,0,0,0
+FBgn0053358,0,0,0,0,0,0,0
+FBgn0053359,0,0,0,0,0,0,0
+FBgn0053360,0,0,0,0,0,0,0
+FBgn0053361,0,0,0,0,0,0,0
+FBgn0053362,0,0,0,0,0,0,0
+FBgn0053363,0,2,0,0,0,0,0
+FBgn0053364,0,0,0,0,0,0,0
+FBgn0053365,0,0,0,0,0,0,0
+FBgn0053366,0,0,0,0,0,0,0
+FBgn0053367,0,0,0,0,0,0,0
+FBgn0053368,0,0,0,0,0,0,0
+FBgn0053369,0,0,0,0,0,0,0
+FBgn0053370,0,0,0,0,0,0,0
+FBgn0053371,0,0,0,0,0,0,0
+FBgn0053372,0,0,0,0,0,0,0
+FBgn0053373,0,0,0,0,0,0,0
+FBgn0053374,0,0,0,0,0,0,0
+FBgn0053375,0,0,0,0,0,0,0
+FBgn0053376,0,0,0,0,0,0,0
+FBgn0053377,0,0,0,0,0,0,0
+FBgn0053378,0,0,0,0,0,0,0
+FBgn0053379,0,0,0,0,0,0,0
+FBgn0053380,0,0,0,0,0,0,0
+FBgn0053381,0,0,0,0,0,0,0
+FBgn0053382,0,0,0,0,0,0,0
+FBgn0053383,0,0,0,0,0,0,0
+FBgn0053384,0,0,0,0,0,0,0
+FBgn0053385,0,0,0,0,0,0,0
+FBgn0053386,0,0,0,0,0,0,0
+FBgn0053387,0,0,0,0,0,0,0
+FBgn0053388,0,0,0,0,0,0,0
+FBgn0053389,0,0,0,0,0,0,0
+FBgn0053390,0,0,0,0,0,0,0
+FBgn0053391,0,0,0,0,0,0,0
+FBgn0053392,0,0,0,0,0,0,0
+FBgn0053393,0,0,0,0,0,0,0
+FBgn0053394,0,0,0,0,0,0,0
+FBgn0053395,0,0,0,0,0,0,0
+FBgn0053396,0,0,0,0,0,0,0
+FBgn0053397,0,0,0,0,0,0,0
+FBgn0053398,0,0,0,0,0,0,0
+FBgn0053399,0,0,0,0,0,0,0
+FBgn0053400,0,0,0,0,0,0,0
+FBgn0053401,0,0,0,0,0,0,0
+FBgn0053402,0,0,0,0,0,0,0
+FBgn0053403,0,0,0,0,0,0,0
+FBgn0053404,0,0,0,0,0,0,0
+FBgn0053405,0,0,0,0,0,0,0
+FBgn0053406,0,0,0,0,0,0,0
+FBgn0053407,0,0,0,0,0,0,0
+FBgn0053408,0,0,0,0,0,0,0
+FBgn0053409,0,0,0,0,0,0,0
+FBgn0053410,0,0,0,0,0,0,0
+FBgn0053411,0,0,0,0,0,0,0
+FBgn0053412,0,0,0,0,0,0,0
+FBgn0053413,0,0,0,0,0,0,0
+FBgn0053414,0,0,0,0,0,0,0
+FBgn0053415,0,0,0,0,0,0,0
+FBgn0053416,0,0,0,0,1,0,0
+FBgn0053417,0,0,0,0,0,0,0
+FBgn0053418,0,0,0,0,0,0,0
+FBgn0053419,0,0,0,0,0,0,0
+FBgn0053420,0,0,0,0,0,0,0
+FBgn0053421,0,0,0,0,0,0,0
+FBgn0053422,0,0,0,0,0,0,0
+FBgn0053423,0,0,0,0,0,0,0
+FBgn0053424,0,0,0,0,0,0,0
+FBgn0053425,0,0,0,0,0,0,0
+FBgn0053426,0,0,0,0,0,0,0
+FBgn0053427,0,0,0,0,0,0,0
+FBgn0053428,0,0,0,0,0,0,0
+FBgn0053429,0,0,0,0,0,0,0
+FBgn0053430,0,0,0,0,0,0,0
+FBgn0053431,0,0,0,0,0,0,0
+FBgn0053432,0,0,0,0,0,0,0
+FBgn0053433,0,0,0,0,0,0,0
+FBgn0053434,0,0,0,0,0,0,0
+FBgn0053435,0,0,0,0,0,0,0
+FBgn0053436,0,0,0,0,0,0,0
+FBgn0053437,0,0,0,0,0,0,0
+FBgn0053438,0,0,0,0,0,0,0
+FBgn0053439,0,0,0,0,0,0,0
+FBgn0053440,0,0,0,0,0,0,0
+FBgn0053441,0,0,0,0,0,1,0
+FBgn0053442,0,0,0,0,0,0,0
+FBgn0053443,0,0,0,0,0,0,0
+FBgn0053444,0,0,0,0,0,0,0
+FBgn0053445,0,0,0,0,0,0,0
+FBgn0053446,0,0,0,0,0,0,0
+FBgn0053447,0,0,0,0,0,0,0
+FBgn0053448,0,0,0,0,0,0,0
+FBgn0053449,0,0,0,0,0,0,0
+FBgn0053450,0,0,0,0,0,0,0
+FBgn0053451,0,0,0,0,0,0,0
+FBgn0053452,0,0,0,0,0,0,0
+FBgn0053453,0,0,0,0,0,1,0
+FBgn0053454,0,0,0,0,0,0,0
+FBgn0053458,0,0,0,0,0,0,0
+FBgn0053459,0,0,0,2,2,0,2
+FBgn0053460,2903,3332,1180,1510,2777,1050,1288
+FBgn0053461,55,55,18,27,82,29,34
+FBgn0053462,4,6,2,4,7,5,2
+FBgn0053463,1,11,4,2,12,5,6
+FBgn0053464,993,2166,868,896,1421,946,913
+FBgn0053465,592,641,167,187,497,171,180
+FBgn0053467,0,0,0,0,0,0,0
+FBgn0053468,5,13,3,5,45,11,8
+FBgn0053469,0,0,1,2,5,0,0
+FBgn0053470,0,0,0,0,0,0,1
+FBgn0053471,0,1,0,0,1,0,0
+FBgn0053474,0,1,0,1,3,0,1
+FBgn0053475,0,0,0,0,0,0,0
+FBgn0053476,0,0,0,0,0,0,0
+FBgn0053477,0,0,0,0,0,0,0
+FBgn0053481,31,23,5,9,31,7,8
+FBgn0053483,0,1,0,0,0,1,0
+FBgn0053487,0,0,0,0,0,0,0
+FBgn0053489,1,1,0,0,0,0,0
+FBgn0053490,0,1,0,0,1,0,0
+FBgn0053491,0,0,0,2,0,1,1
+FBgn0053493,8,13,4,7,6,7,11
+FBgn0053494,1469,2282,566,748,2638,664,662
+FBgn0053496,0,0,0,0,0,0,0
+FBgn0053497,0,0,0,0,0,0,0
+FBgn0053498,0,0,29,0,0,0,0
+FBgn0053499,0,0,0,0,0,0,0
+FBgn0053500,0,0,0,0,0,0,0
+FBgn0053502,0,0,1,0,0,1,1
+FBgn0053503,43,52,58,67,48,33,50
+FBgn0053504,2,0,0,0,2,1,0
+FBgn0053505,409,554,187,263,435,220,271
+FBgn0053506,191,365,99,139,354,150,146
+FBgn0053507,0,1,0,0,0,0,1
+FBgn0053508,50,93,27,23,167,52,56
+FBgn0053509,60,105,36,34,198,40,48
+FBgn0053510,14,40,20,11,59,6,12
+FBgn0053511,9,34,10,3,58,1,9
+FBgn0053512,0,0,0,1,1,0,0
+FBgn0053513,46,102,54,55,90,48,58
+FBgn0053514,4,15,2,2,10,6,1
+FBgn0053516,902,1675,603,590,815,387,414
+FBgn0053517,1,4,2,0,9,4,2
+FBgn0053519,190,395,156,155,363,223,200
+FBgn0053520,338,455,190,204,431,216,218
+FBgn0053522,1107,2320,745,816,1571,764,905
+FBgn0053523,1082,1277,491,636,1232,636,681
+FBgn0053526,2325,4065,1505,1684,3640,1512,1651
+FBgn0053527,5,8,7,4,11,6,4
+FBgn0053530,0,0,0,0,1,1,0
+FBgn0053531,2,13,6,9,5,2,3
+FBgn0053532,6,3,6,4,3,1,2
+FBgn0053533,7,12,1,3,10,2,5
+FBgn0053534,0,0,0,0,0,0,0
+FBgn0053535,0,0,1,1,1,0,0
+FBgn0053536,0,0,0,0,0,0,0
+FBgn0053537,0,1,0,0,0,0,0
+FBgn0053538,0,0,0,0,0,0,0
+FBgn0053539,0,0,0,0,0,0,0
+FBgn0053541,1,0,4,1,3,2,2
+FBgn0053542,57,93,21,41,80,31,37
+FBgn0053543,2,4,2,2,1,2,2
+FBgn0053544,0,0,0,0,2,0,0
+FBgn0053547,2,3,1,2,2,2,1
+FBgn0053548,8,12,6,7,12,5,2
+FBgn0053551,0,1,0,1,2,0,1
+FBgn0053552,2,4,2,2,6,1,2
+FBgn0053554,4527,6297,1635,1390,8251,1587,1293
+FBgn0053555,50,84,38,41,130,62,71
+FBgn0053556,82,337,122,122,462,267,252
+FBgn0053557,0,0,0,0,0,0,0
+FBgn0053558,2124,4857,1842,1822,5126,2963,2970
+FBgn0053626,0,0,0,0,0,0,0
+FBgn0053627,0,0,0,0,0,0,0
+FBgn0053629,0,0,0,0,0,0,0
+FBgn0053630,0,0,0,0,0,0,0
+FBgn0053631,0,1,0,0,1,0,0
+FBgn0053632,0,0,1,0,0,0,0
+FBgn0053635,105,175,47,50,191,47,46
+FBgn0053639,0,1,0,0,0,0,0
+FBgn0053640,7,30,10,12,54,9,14
+FBgn0053641,15,38,11,7,83,13,20
+FBgn0053642,15,31,9,9,72,14,15
+FBgn0053643,12,20,3,4,71,10,10
+FBgn0053644,17,21,12,6,45,9,11
+FBgn0053645,9,11,12,4,41,6,7
+FBgn0053647,0,0,1,0,0,0,0
+FBgn0053648,0,0,0,0,0,0,0
+FBgn0053651,0,15,2,3,17,3,4
+FBgn0053653,82,147,46,47,198,44,46
+FBgn0053654,2,3,0,3,1,2,1
+FBgn0053658,1,0,0,0,0,0,0
+FBgn0053664,0,0,0,0,0,0,0
+FBgn0053665,0,0,0,0,0,0,1
+FBgn0053666,0,0,0,0,0,0,0
+FBgn0053667,0,0,0,0,0,0,0
+FBgn0053668,0,0,0,0,0,0,0
+FBgn0053669,0,0,0,0,0,0,0
+FBgn0053673,0,0,1,1,0,0,0
+FBgn0053678,0,4,0,0,1,0,0
+FBgn0053679,1,2,0,0,0,0,0
+FBgn0053680,0,0,0,0,0,0,0
+FBgn0053681,0,0,0,0,0,0,0
+FBgn0053687,0,1,0,0,0,0,0
+FBgn0053688,0,0,0,0,0,0,0
+FBgn0053689,0,0,0,0,0,0,0
+FBgn0053690,0,0,1,0,0,0,0
+FBgn0053696,3,8,7,8,5,4,7
+FBgn0053700,0,0,0,0,1,0,0
+FBgn0053701,0,0,0,0,0,0,0
+FBgn0053702,0,0,0,0,0,0,0
+FBgn0053703,0,0,0,0,0,0,0
+FBgn0053704,0,0,0,0,0,0,0
+FBgn0053710,0,0,0,1,0,0,0
+FBgn0053721,0,0,0,0,0,0,0
+FBgn0053723,0,0,0,0,0,0,0
+FBgn0053724,2,12,0,1,9,1,2
+FBgn0053725,2,0,0,0,1,0,1
+FBgn0053727,0,0,0,0,0,0,0
+FBgn0053728,0,0,0,0,0,0,0
+FBgn0053729,0,0,0,0,0,0,0
+FBgn0053730,0,0,0,0,0,0,0
+FBgn0053731,0,0,0,0,0,0,0
+FBgn0053732,0,0,0,0,0,0,0
+FBgn0053733,0,0,0,0,0,0,0
+FBgn0053734,0,0,0,0,0,0,0
+FBgn0053735,0,0,0,0,0,0,0
+FBgn0053736,0,0,0,0,0,0,0
+FBgn0053737,0,0,0,0,0,0,0
+FBgn0053738,0,0,0,0,0,0,0
+FBgn0053739,0,0,0,0,0,0,0
+FBgn0053740,0,0,0,0,0,0,0
+FBgn0053741,0,0,0,0,0,0,0
+FBgn0053742,0,0,0,0,0,0,0
+FBgn0053743,0,0,0,0,0,0,0
+FBgn0053744,0,0,0,0,0,0,0
+FBgn0053745,0,0,0,0,0,0,0
+FBgn0053746,0,0,0,0,0,0,0
+FBgn0053752,0,0,0,0,0,0,0
+FBgn0053757,11,21,12,4,30,1,6
+FBgn0053758,4,4,2,3,19,2,3
+FBgn0053764,0,0,0,0,0,0,0
+FBgn0053766,0,0,0,0,0,0,0
+FBgn0053767,0,0,0,0,0,0,0
+FBgn0053768,0,0,0,0,0,0,0
+FBgn0053769,1,0,0,0,0,0,0
+FBgn0053770,0,0,0,0,0,0,0
+FBgn0053771,0,0,0,0,0,0,0
+FBgn0053772,0,0,0,0,0,0,0
+FBgn0053773,0,0,0,0,1,0,0
+FBgn0053774,141,173,43,44,261,36,45
+FBgn0053775,0,0,0,0,1,0,3
+FBgn0053777,2,4,0,1,2,1,1
+FBgn0053783,0,1,0,0,0,0,0
+FBgn0053784,0,0,0,0,2,0,1
+FBgn0053792,1,0,0,0,0,0,0
+FBgn0053795,0,1,0,0,0,0,0
+FBgn0053796,0,0,0,0,0,0,0
+FBgn0053797,0,0,0,0,0,0,0
+FBgn0053798,0,0,0,0,0,0,0
+FBgn0053800,0,1,1,0,3,0,1
+FBgn0053801,0,0,0,0,0,0,1
+FBgn0053802,0,0,0,0,0,0,0
+FBgn0053803,0,0,0,0,0,0,0
+FBgn0053804,0,0,0,0,0,0,0
+FBgn0053805,0,0,5,4,1,3,6
+FBgn0053806,0,0,0,0,0,0,0
+FBgn0053807,0,0,0,0,0,0,0
+FBgn0053808,0,0,0,0,0,0,0
+FBgn0053809,0,0,0,0,0,0,0
+FBgn0053810,0,0,0,0,0,0,0
+FBgn0053811,0,0,0,0,0,0,0
+FBgn0053812,0,0,0,0,0,0,0
+FBgn0053813,0,0,0,0,0,0,0
+FBgn0053814,0,0,0,0,0,0,0
+FBgn0053815,0,0,0,0,0,0,0
+FBgn0053816,0,0,0,0,0,0,0
+FBgn0053817,0,0,0,0,0,0,0
+FBgn0053818,0,0,0,0,0,0,0
+FBgn0053819,0,0,0,0,0,0,0
+FBgn0053820,0,0,0,0,0,0,0
+FBgn0053821,0,0,0,0,0,0,0
+FBgn0053822,0,0,0,0,0,0,0
+FBgn0053823,0,0,0,0,0,0,0
+FBgn0053824,0,0,0,0,0,0,0
+FBgn0053825,0,0,0,0,0,0,0
+FBgn0053826,0,0,0,0,0,0,0
+FBgn0053827,0,0,0,0,0,0,0
+FBgn0053828,0,0,0,0,0,0,0
+FBgn0053829,0,0,0,0,0,0,0
+FBgn0053830,0,0,0,0,0,0,0
+FBgn0053831,0,0,0,0,0,0,0
+FBgn0053832,0,0,0,0,0,0,0
+FBgn0053833,0,0,0,0,0,0,0
+FBgn0053834,1,2,0,0,7,1,0
+FBgn0053835,0,0,0,0,0,0,0
+FBgn0053836,0,0,0,0,0,0,0
+FBgn0053837,0,0,0,0,0,0,0
+FBgn0053838,0,0,0,0,0,0,0
+FBgn0053839,0,0,0,0,0,0,0
+FBgn0053840,0,0,0,0,0,0,0
+FBgn0053841,0,0,0,0,0,0,0
+FBgn0053842,0,0,0,0,0,0,0
+FBgn0053843,0,0,0,0,0,0,0
+FBgn0053844,0,0,0,0,0,0,0
+FBgn0053845,0,0,0,0,0,0,0
+FBgn0053846,0,0,0,0,0,0,0
+FBgn0053847,0,0,0,0,0,0,0
+FBgn0053848,0,0,0,0,0,0,0
+FBgn0053849,0,0,0,0,0,0,0
+FBgn0053850,0,0,0,0,0,0,0
+FBgn0053851,0,0,0,0,0,0,0
+FBgn0053852,0,0,0,0,0,0,0
+FBgn0053853,0,0,0,0,0,0,0
+FBgn0053854,0,0,0,0,0,0,0
+FBgn0053855,0,0,0,0,0,0,0
+FBgn0053856,0,0,0,0,0,0,0
+FBgn0053857,0,0,0,0,0,0,0
+FBgn0053858,0,0,0,0,0,0,0
+FBgn0053859,0,0,0,0,0,0,0
+FBgn0053860,0,0,0,0,0,0,0
+FBgn0053861,0,0,0,0,0,0,0
+FBgn0053862,0,0,0,0,0,0,0
+FBgn0053863,0,0,0,0,0,0,0
+FBgn0053864,0,0,0,0,0,0,0
+FBgn0053865,0,0,0,0,0,0,0
+FBgn0053866,0,0,0,0,0,0,0
+FBgn0053867,60,76,26,36,120,51,26
+FBgn0053868,3,25,25,16,16,1,9
+FBgn0053869,0,0,0,0,0,0,0
+FBgn0053870,0,0,0,0,0,0,0
+FBgn0053871,0,0,0,0,0,0,0
+FBgn0053872,0,0,0,0,0,0,0
+FBgn0053873,0,0,0,0,0,0,0
+FBgn0053874,0,0,0,0,0,0,0
+FBgn0053875,0,0,0,0,0,0,0
+FBgn0053876,0,0,0,0,0,0,0
+FBgn0053877,0,0,0,0,0,0,0
+FBgn0053878,0,0,0,0,0,0,0
+FBgn0053879,0,0,0,0,0,0,0
+FBgn0053880,0,0,0,0,0,0,0
+FBgn0053881,0,0,0,0,0,0,0
+FBgn0053882,0,0,0,0,0,0,0
+FBgn0053883,0,0,0,0,0,0,0
+FBgn0053884,0,0,0,0,0,0,0
+FBgn0053885,0,0,0,0,0,0,0
+FBgn0053886,0,0,0,0,0,0,0
+FBgn0053887,0,0,0,0,0,0,0
+FBgn0053888,0,0,0,0,0,0,0
+FBgn0053889,0,0,0,0,0,0,0
+FBgn0053890,0,0,0,0,0,0,0
+FBgn0053891,0,0,0,0,0,0,0
+FBgn0053892,0,0,0,0,0,0,0
+FBgn0053893,0,0,0,0,0,0,0
+FBgn0053894,0,0,0,0,0,0,0
+FBgn0053895,0,0,0,0,0,0,0
+FBgn0053896,0,0,0,0,0,0,0
+FBgn0053897,0,0,0,0,0,0,0
+FBgn0053898,0,0,0,0,0,0,0
+FBgn0053899,0,0,0,0,0,0,0
+FBgn0053900,0,0,0,0,0,0,0
+FBgn0053901,0,0,0,0,0,0,0
+FBgn0053902,0,0,0,0,0,0,0
+FBgn0053903,0,0,0,0,0,0,0
+FBgn0053904,0,0,0,0,0,0,0
+FBgn0053905,0,0,0,0,0,0,0
+FBgn0053906,0,0,0,0,0,0,0
+FBgn0053907,0,0,0,0,2,0,0
+FBgn0053908,0,0,0,0,0,0,0
+FBgn0053909,0,0,181,165,0,117,270
+FBgn0053910,0,0,0,0,0,0,0
+FBgn0053911,1,0,0,0,1,0,0
+FBgn0053912,0,0,0,0,0,0,0
+FBgn0053914,8,14,3,5,14,4,5
+FBgn0053919,5,12,4,2,15,3,3
+FBgn0053920,7,9,8,3,15,2,3
+FBgn0053922,0,0,0,0,0,0,0
+FBgn0053923,0,0,0,0,0,0,0
+FBgn0053926,296,1218,489,617,1275,828,852
+FBgn0053927,0,1,1,1,2,0,0
+FBgn0053928,0,1,2,0,4,0,2
+FBgn0053929,0,0,0,0,0,0,0
+FBgn0053936,6539,17922,4286,4546,13541,4186,4717
+FBgn0053937,36,211,45,40,128,41,38
+FBgn0053958,0,0,0,0,0,0,0
+FBgn0053960,0,1,0,0,0,1,0
+FBgn0053963,39,98,34,19,61,17,13
+FBgn0053964,0,0,0,0,0,0,0
+FBgn0053965,0,0,0,0,0,1,0
+FBgn0053966,0,0,0,0,0,0,0
+FBgn0053967,3359,7687,2742,2563,4383,2073,2258
+FBgn0053969,427,469,172,262,623,304,329
+FBgn0053970,11,37,13,17,33,16,20
+FBgn0053971,225,317,127,120,215,118,110
+FBgn0053977,197,221,41,63,349,62,50
+FBgn0053978,337,461,131,84,626,110,97
+FBgn0053980,0,0,1,0,0,0,0
+FBgn0053983,9,10,2,4,13,7,12
+FBgn0053984,1,1,1,0,5,0,2
+FBgn0053985,4,1,1,0,1,4,1
+FBgn0053986,0,0,0,0,0,0,0
+FBgn0053987,144,242,51,58,203,48,61
+FBgn0053988,13,22,10,8,5,9,15
+FBgn0053993,2,2,0,0,1,0,2
+FBgn0053995,49,146,5,16,136,9,15
+FBgn0053998,0,0,0,0,0,0,0
+FBgn0054001,57,71,19,25,60,32,21
+FBgn0054002,3,5,2,8,1,2,15
+FBgn0054003,179,433,119,209,345,130,145
+FBgn0054005,0,0,0,0,0,0,0
+FBgn0054006,0,3,4,2,3,0,1
+FBgn0054007,0,0,0,0,0,0,0
+FBgn0054008,38,62,10,16,81,28,27
+FBgn0054010,2,9,2,3,20,1,1
+FBgn0054011,0,0,0,0,0,0,0
+FBgn0054012,0,2,1,0,0,0,0
+FBgn0054015,88,165,47,43,134,37,56
+FBgn0054016,1,0,0,0,1,0,0
+FBgn0054021,0,0,1,1,1,0,0
+FBgn0054022,0,0,0,2,1,2,0
+FBgn0054023,0,0,0,0,0,0,0
+FBgn0054024,0,0,0,0,0,0,0
+FBgn0054025,0,0,0,0,0,0,0
+FBgn0054026,0,0,0,0,0,0,0
+FBgn0054027,1,0,0,1,1,1,1
+FBgn0054028,0,2,0,0,1,0,0
+FBgn0054029,0,0,0,0,0,0,0
+FBgn0054030,1,0,0,0,1,0,0
+FBgn0054031,3,9,1,1,14,1,1
+FBgn0054032,0,0,0,0,0,0,1
+FBgn0054033,4,2,0,1,1,0,0
+FBgn0054034,5,3,5,1,17,3,7
+FBgn0054035,0,0,0,0,0,0,0
+FBgn0054038,0,0,0,0,0,0,0
+FBgn0054039,75,105,22,27,126,23,40
+FBgn0054040,0,0,0,1,1,0,0
+FBgn0054041,0,1,0,0,1,0,0
+FBgn0054043,2,0,2,0,2,0,1
+FBgn0054044,0,0,0,0,0,0,0
+FBgn0054045,0,0,0,0,0,0,0
+FBgn0054046,0,12,0,0,0,0,0
+FBgn0054047,0,0,0,0,0,0,0
+FBgn0054048,0,0,0,0,0,0,0
+FBgn0054049,0,0,0,0,0,0,0
+FBgn0054050,0,0,0,0,0,0,0
+FBgn0054051,3,3,0,1,2,0,2
+FBgn0054052,0,0,0,0,0,0,0
+FBgn0054053,0,0,0,0,0,0,0
+FBgn0054054,9,21,2,6,19,6,7
+FBgn0054056,99,200,56,64,84,39,40
+FBgn0054057,29,70,26,39,32,14,16
+FBgn0058005,1,33,1,3,14,3,15
+FBgn0058006,94,151,56,58,187,68,68
+FBgn0058045,1694,3397,788,830,3146,757,846
+FBgn0058053,0,13,0,1,16,6,0
+FBgn0058127,958,851,247,313,1097,229,219
+FBgn0058172,0,0,0,0,0,0,0
+FBgn0058174,0,0,0,0,0,0,0
+FBgn0058298,18,12,11,6,48,5,1
+FBgn0058439,858,1233,312,264,1323,245,296
+FBgn0058441,0,0,0,0,0,0,0
+FBgn0058463,0,0,0,0,1,0,0
+FBgn0058470,45,77,24,18,113,18,13
+FBgn0060291,1,2,0,0,2,0,0
+FBgn0060292,1,3,0,0,9,1,0
+FBgn0060296,106,134,41,62,233,90,84
+FBgn0061173,0,0,0,0,1,0,0
+FBgn0061188,0,0,0,0,0,0,0
+FBgn0061196,69,115,42,55,122,38,65
+FBgn0061197,0,1,1,0,0,0,0
+FBgn0061198,294,723,102,168,477,133,149
+FBgn0061200,4692,8143,2907,2863,5765,2927,3027
+FBgn0061209,0,1,0,0,0,0,0
+FBgn0061354,0,0,0,0,0,0,0
+FBgn0061355,0,0,0,0,0,0,0
+FBgn0061356,0,0,0,0,0,0,0
+FBgn0061359,0,0,0,0,0,0,0
+FBgn0061360,0,0,0,0,0,0,0
+FBgn0061361,0,0,0,0,0,0,0
+FBgn0061362,0,0,0,0,0,0,0
+FBgn0061435,0,0,0,0,0,0,0
+FBgn0061469,1061,1757,616,737,1640,869,861
+FBgn0061476,552,757,279,336,848,374,391
+FBgn0061492,551,542,242,313,711,351,406
+FBgn0061515,1232,3036,718,810,2615,999,1056
+FBgn0062411,0,0,0,0,1,0,0
+FBgn0062412,1,3,2,0,8,3,4
+FBgn0062413,1014,1336,539,639,1264,621,707
+FBgn0062440,396,645,166,256,427,185,196
+FBgn0062442,1121,1694,631,779,1624,751,799
+FBgn0062449,234,455,126,136,385,106,137
+FBgn0062463,614,2300,283,288,2266,271,278
+FBgn0062517,80,87,32,36,82,41,33
+FBgn0062565,4,7,3,3,9,10,9
+FBgn0062928,40,59,44,50,98,50,67
+FBgn0062961,0,0,0,0,0,0,0
+FBgn0062978,28,59,13,16,15,5,6
+FBgn0063083,0,0,0,0,0,0,0
+FBgn0063127,0,0,0,0,0,0,0
+FBgn0063261,0,0,0,0,0,0,0
+FBgn0063356,0,0,0,0,0,0,0
+FBgn0063373,0,0,0,0,1,0,1
+FBgn0063374,0,1,0,0,0,0,0
+FBgn0063375,1,0,0,0,0,0,0
+FBgn0063376,0,0,0,0,1,0,0
+FBgn0063377,0,0,0,0,1,0,0
+FBgn0063378,0,0,0,0,1,0,1
+FBgn0063379,1,0,0,0,0,0,0
+FBgn0063380,0,0,0,0,0,0,0
+FBgn0063381,0,0,0,0,1,0,0
+FBgn0063382,0,1,0,0,1,0,0
+FBgn0063383,0,0,0,0,0,0,0
+FBgn0063384,0,0,0,0,1,0,0
+FBgn0063385,1,5,1,1,8,0,0
+FBgn0063386,0,1,0,0,2,0,0
+FBgn0063387,0,0,0,0,3,0,0
+FBgn0063388,0,0,0,0,0,0,0
+FBgn0063389,1,1,0,0,2,0,0
+FBgn0063391,0,0,0,0,5,0,0
+FBgn0063392,0,1,0,0,4,0,0
+FBgn0063449,136,270,48,76,224,58,58
+FBgn0063485,5013,9121,2956,2923,6589,3035,3233
+FBgn0063491,1286,1594,543,678,1935,923,1125
+FBgn0063492,527,826,262,344,1288,554,678
+FBgn0063493,330,352,126,160,671,271,379
+FBgn0063494,2145,2664,801,1074,3544,1315,1464
+FBgn0063495,14,16,6,7,25,7,9
+FBgn0063496,5,1,0,1,3,0,2
+FBgn0063497,481,456,173,226,527,242,276
+FBgn0063498,604,806,299,323,351,111,147
+FBgn0063499,0,0,0,0,0,0,0
+FBgn0063649,1076,1524,603,564,596,261,285
+FBgn0063667,4,7,1,4,34,20,25
+FBgn0063923,0,0,0,0,0,0,0
+FBgn0063924,0,0,0,0,0,0,0
+FBgn0064115,0,0,0,0,0,0,0
+FBgn0064116,0,0,0,0,0,0,0
+FBgn0064117,0,0,0,0,0,0,0
+FBgn0064119,0,0,0,0,0,0,0
+FBgn0064121,0,0,0,0,0,0,0
+FBgn0064122,0,0,0,0,0,0,0
+FBgn0064123,0,0,0,0,0,0,0
+FBgn0064126,0,1,0,0,0,0,0
+FBgn0064158,0,0,0,0,1,0,0
+FBgn0064159,0,0,0,0,0,0,0
+FBgn0064160,0,0,0,0,0,0,0
+FBgn0064191,3,1,1,0,9,1,2
+FBgn0064225,136632,145326,61288,87226,180986,74898,79643
+FBgn0064227,0,1,1,0,0,0,0
+FBgn0064237,0,0,0,0,1,0,2
+FBgn0064766,1748,2265,879,1052,2129,1095,1194
+FBgn0064912,16,14,4,11,13,3,4
+FBgn0065032,476,832,186,278,834,276,288
+FBgn0065035,88,169,41,35,165,32,45
+FBgn0065046,0,4,1,2,4,2,0
+FBgn0065047,0,0,0,1,0,0,0
+FBgn0065048,0,0,0,0,0,1,0
+FBgn0065051,1,0,0,0,1,0,0
+FBgn0065053,5,33,1,7,29,0,1
+FBgn0065055,8,3,0,2,3,0,3
+FBgn0065057,0,0,0,0,0,0,0
+FBgn0065058,4,0,1,0,3,0,0
+FBgn0065059,0,0,0,0,0,0,0
+FBgn0065064,38,60,12,6,61,20,12
+FBgn0065066,2,8,0,0,20,0,0
+FBgn0065070,2,2,0,2,5,0,0
+FBgn0065071,4,6,1,5,3,4,3
+FBgn0065073,4,1,0,2,4,0,0
+FBgn0065076,0,1,0,0,4,0,0
+FBgn0065080,0,0,0,0,0,0,0
+FBgn0065081,0,0,0,0,0,0,0
+FBgn0065083,0,0,0,0,0,0,0
+FBgn0065084,0,0,0,0,0,0,0
+FBgn0065087,0,0,0,0,0,0,0
+FBgn0065088,39,87,53,29,59,34,37
+FBgn0065092,0,0,0,0,0,0,0
+FBgn0065094,0,0,0,0,0,0,0
+FBgn0065095,1,2,2,1,4,3,2
+FBgn0065096,0,0,0,0,0,0,0
+FBgn0065097,0,0,0,0,0,0,0
+FBgn0065098,10,32,20,17,25,3,11
+FBgn0065099,11,55,33,15,49,19,22
+FBgn0065100,1,8,1,1,1,0,1
+FBgn0065101,0,0,0,0,0,0,0
+FBgn0065102,0,0,0,0,0,0,0
+FBgn0065104,282,610,277,278,427,225,297
+FBgn0065105,1,3,2,0,10,2,1
+FBgn0065107,0,0,0,0,0,0,0
+FBgn0065108,3,5,3,3,2,2,5
+FBgn0065109,1,2,0,0,2,1,0
+FBgn0065110,1,2,0,1,9,2,1
+FBgn0066084,16959,16412,5873,13187,34532,12062,12298
+FBgn0066101,5,14,7,7,15,12,11
+FBgn0066114,713,982,415,452,821,460,511
+FBgn0066292,10,12,6,9,19,15,14
+FBgn0066293,0,2,0,0,2,0,2
+FBgn0066303,0,0,0,0,0,0,0
+FBgn0066304,0,0,0,0,0,0,0
+FBgn0066365,0,2,0,4,0,0,0
+FBgn0067052,0,0,0,0,0,0,0
+FBgn0067102,909,1364,532,684,868,592,695
+FBgn0067311,0,3,0,0,0,0,0
+FBgn0067312,2,2,2,1,6,2,1
+FBgn0067317,50,71,22,34,66,39,38
+FBgn0067337,0,0,0,0,0,0,0
+FBgn0067339,0,0,0,0,0,0,1
+FBgn0067340,0,0,0,0,0,0,0
+FBgn0067341,0,0,0,0,0,0,0
+FBgn0067407,0,0,0,0,0,0,0
+FBgn0067622,0,0,0,0,0,0,0
+FBgn0067628,103,181,56,79,208,108,88
+FBgn0067629,66,107,32,35,132,47,34
+FBgn0067678,0,0,0,0,0,0,0
+FBgn0067679,0,0,0,0,0,0,0
+FBgn0067680,0,0,0,0,0,0,0
+FBgn0067681,0,0,0,0,0,0,0
+FBgn0067682,0,0,0,0,0,0,0
+FBgn0067683,0,0,0,0,1,0,0
+FBgn0067684,0,0,0,0,0,1,0
+FBgn0067685,2,0,0,0,0,0,0
+FBgn0067686,0,0,0,0,0,0,0
+FBgn0067687,0,0,0,0,1,0,0
+FBgn0067688,0,0,0,0,0,0,0
+FBgn0067689,0,0,0,0,0,0,0
+FBgn0067690,0,0,0,0,0,0,0
+FBgn0067691,0,0,0,0,0,0,0
+FBgn0067692,0,0,0,0,0,0,0
+FBgn0067693,0,0,0,0,0,0,0
+FBgn0067694,0,0,0,0,0,0,0
+FBgn0067695,0,0,0,0,0,0,0
+FBgn0067696,0,0,0,0,0,0,0
+FBgn0067697,0,0,0,0,0,0,0
+FBgn0067698,0,0,0,0,0,0,0
+FBgn0067699,0,0,0,0,0,0,0
+FBgn0067700,0,1,0,0,0,0,0
+FBgn0067701,0,1,0,0,1,0,0
+FBgn0067702,0,0,0,0,0,0,0
+FBgn0067703,0,0,0,0,0,0,0
+FBgn0067704,0,0,0,0,0,0,0
+FBgn0067705,0,0,0,0,0,0,0
+FBgn0067706,0,0,0,0,0,0,0
+FBgn0067707,0,0,0,0,0,0,0
+FBgn0067708,0,0,1,1,0,0,1
+FBgn0067709,0,0,0,0,1,0,1
+FBgn0067710,4,2,1,1,5,1,1
+FBgn0067711,1,1,1,0,2,0,0
+FBgn0067713,0,0,0,0,0,0,0
+FBgn0067715,2,0,2,0,1,0,0
+FBgn0067716,0,0,0,0,0,0,0
+FBgn0067717,0,2,0,0,1,1,0
+FBgn0067718,1,1,0,1,0,0,0
+FBgn0067719,1,0,0,0,0,0,0
+FBgn0067720,0,0,0,0,0,0,0
+FBgn0067721,0,0,0,0,0,0,0
+FBgn0067722,0,0,0,0,0,0,0
+FBgn0067723,0,0,0,0,0,0,0
+FBgn0067724,0,0,0,0,0,0,0
+FBgn0067725,0,0,0,0,0,0,0
+FBgn0067726,0,2,0,0,0,0,0
+FBgn0067779,721,1395,355,381,1284,326,354
+FBgn0067782,0,0,0,0,0,0,0
+FBgn0067783,64,125,36,44,95,35,40
+FBgn0067861,0,3,51,29,6,35,62
+FBgn0067864,1049,1518,617,691,1357,803,891
+FBgn0067895,881,1031,336,338,1269,318,320
+FBgn0067903,0,0,0,0,0,0,0
+FBgn0067905,0,0,0,0,0,0,0
+FBgn0069056,5,6,8,0,7,1,5
+FBgn0069242,548,1019,421,552,969,564,736
+FBgn0069354,13,42,15,18,19,10,20
+FBgn0069913,14,9,6,10,17,13,14
+FBgn0069921,13,14,3,2,21,1,2
+FBgn0069938,0,1,0,0,2,0,0
+FBgn0069972,0,6,1,2,1,1,1
+FBgn0069973,134,249,111,122,347,100,105
+FBgn0082170,0,0,0,0,0,0,0
+FBgn0082171,0,0,0,0,0,0,0
+FBgn0082172,0,5,1,1,6,1,0
+FBgn0082173,0,0,0,0,0,0,0
+FBgn0082174,0,0,0,0,0,0,0
+FBgn0082179,0,0,0,0,0,0,0
+FBgn0082180,0,0,0,0,0,0,0
+FBgn0082181,0,0,0,0,0,0,0
+FBgn0082182,0,0,0,0,0,0,0
+FBgn0082582,1250,2473,853,858,2346,970,1012
+FBgn0082585,166,423,123,135,334,138,174
+FBgn0082598,3033,5664,1793,1915,5284,2029,2161
+FBgn0082831,2210,3845,1399,1384,3096,1693,1778
+FBgn0082917,0,0,0,0,0,0,0
+FBgn0082918,0,0,0,0,0,0,0
+FBgn0082919,0,3,1,0,5,0,0
+FBgn0082922,2,3,3,0,7,3,1
+FBgn0082923,2,4,0,0,5,1,0
+FBgn0082924,0,0,0,0,0,0,0
+FBgn0082925,4,5,1,0,4,1,0
+FBgn0082926,0,0,0,0,0,0,1
+FBgn0082927,2,0,0,0,1,0,0
+FBgn0082928,1,0,0,0,0,1,0
+FBgn0082929,1,2,0,0,6,0,0
+FBgn0082930,0,0,0,0,0,0,0
+FBgn0082931,0,5,0,0,28,1,0
+FBgn0082932,0,0,0,0,0,0,0
+FBgn0082933,0,0,0,0,0,0,0
+FBgn0082934,0,0,0,0,0,0,0
+FBgn0082935,0,0,0,0,0,0,0
+FBgn0082936,0,0,0,0,0,0,0
+FBgn0082937,1,0,0,0,1,0,0
+FBgn0082938,0,0,0,0,0,0,0
+FBgn0082939,0,0,0,0,0,0,0
+FBgn0082940,0,0,0,0,0,0,0
+FBgn0082941,0,0,0,0,0,0,0
+FBgn0082942,1,0,0,0,1,0,0
+FBgn0082943,1,0,0,0,0,0,0
+FBgn0082944,2,4,0,0,6,1,0
+FBgn0082945,1,4,0,0,8,0,0
+FBgn0082946,2,2,0,0,4,0,0
+FBgn0082947,0,0,0,0,1,0,0
+FBgn0082948,0,0,0,0,0,0,0
+FBgn0082949,0,1,0,0,1,0,0
+FBgn0082950,0,0,0,0,0,0,0
+FBgn0082951,1,2,0,0,1,0,0
+FBgn0082952,0,0,1,0,0,0,0
+FBgn0082953,13,13,3,3,10,2,2
+FBgn0082954,3,2,0,1,4,0,0
+FBgn0082957,1,8,1,1,5,1,0
+FBgn0082958,1,5,1,1,4,0,1
+FBgn0082959,1,5,1,0,2,0,0
+FBgn0082960,0,5,1,0,3,0,0
+FBgn0082961,4,6,2,0,4,1,0
+FBgn0082962,10,10,0,2,8,0,0
+FBgn0082963,1,3,0,0,8,0,0
+FBgn0082966,4,4,0,0,10,1,0
+FBgn0082967,5,1,1,0,9,0,1
+FBgn0082968,1,0,0,0,2,0,0
+FBgn0082969,0,0,0,0,2,0,0
+FBgn0082970,0,0,0,0,1,0,0
+FBgn0082971,3,3,0,0,4,0,0
+FBgn0082972,0,3,1,0,3,0,0
+FBgn0082973,0,7,1,0,8,0,0
+FBgn0082974,5,7,1,1,15,0,0
+FBgn0082975,3,1,0,0,0,0,0
+FBgn0082976,3,1,0,1,6,0,0
+FBgn0082978,5,11,0,1,7,0,0
+FBgn0082979,9,2,0,0,7,0,0
+FBgn0082981,1,0,0,0,1,0,0
+FBgn0082983,0,0,0,0,0,0,0
+FBgn0082986,2,0,0,0,2,0,0
+FBgn0082987,18,9,2,5,11,2,0
+FBgn0082988,3,2,1,0,7,0,0
+FBgn0082989,0,1,0,0,1,0,0
+FBgn0082990,0,0,1,1,4,0,1
+FBgn0082993,0,0,0,0,0,0,0
+FBgn0082994,2,1,0,0,1,1,1
+FBgn0082995,0,0,0,0,0,0,0
+FBgn0082997,5,8,1,0,1,0,0
+FBgn0082998,1,1,1,1,4,1,0
+FBgn0082999,5,5,0,1,8,1,0
+FBgn0083000,3,6,1,1,8,1,1
+FBgn0083001,2,1,3,3,6,0,0
+FBgn0083003,6,8,0,3,4,0,0
+FBgn0083004,4,5,0,0,10,0,1
+FBgn0083005,5,7,0,1,11,2,0
+FBgn0083006,4,0,2,1,6,1,1
+FBgn0083007,0,0,0,0,2,0,0
+FBgn0083008,0,0,0,0,1,0,0
+FBgn0083009,0,3,0,0,2,0,0
+FBgn0083010,0,0,0,0,6,0,0
+FBgn0083011,2,3,0,0,3,1,0
+FBgn0083012,3,0,0,0,6,0,0
+FBgn0083013,8,12,0,1,7,0,2
+FBgn0083014,0,1,0,0,0,0,0
+FBgn0083015,3,10,1,2,19,0,3
+FBgn0083016,0,0,0,0,0,0,0
+FBgn0083017,1,0,0,0,0,0,0
+FBgn0083018,0,0,0,0,1,0,0
+FBgn0083020,1,2,0,0,2,0,0
+FBgn0083021,0,0,0,0,1,0,0
+FBgn0083022,2,0,0,1,0,1,0
+FBgn0083023,2,0,0,0,2,0,0
+FBgn0083024,1,0,0,0,1,0,0
+FBgn0083025,0,0,0,0,0,0,0
+FBgn0083026,1,0,0,0,0,0,0
+FBgn0083027,0,0,2,0,1,0,0
+FBgn0083028,0,10,1,0,9,0,0
+FBgn0083029,3,3,1,0,1,0,0
+FBgn0083030,0,1,0,0,1,0,0
+FBgn0083031,2,1,0,0,0,0,0
+FBgn0083032,1,1,1,0,0,0,0
+FBgn0083033,4,6,0,0,3,0,0
+FBgn0083034,1,2,0,0,1,0,0
+FBgn0083035,1,1,0,0,0,0,0
+FBgn0083036,0,3,0,0,2,0,0
+FBgn0083037,0,3,0,0,1,0,0
+FBgn0083038,2,2,0,0,2,0,0
+FBgn0083039,3,0,0,0,2,2,1
+FBgn0083040,2,21,0,0,14,0,0
+FBgn0083041,1,18,0,0,4,0,1
+FBgn0083042,4,0,0,0,4,0,0
+FBgn0083044,2,2,1,0,1,0,1
+FBgn0083045,0,0,0,0,2,0,0
+FBgn0083046,1,1,0,0,6,0,1
+FBgn0083047,20,22,2,2,18,3,2
+FBgn0083048,19,21,2,4,20,4,0
+FBgn0083049,9,12,1,1,12,1,2
+FBgn0083050,12,17,8,5,21,0,4
+FBgn0083053,1,3,1,0,5,0,0
+FBgn0083054,0,3,7,1,7,1,0
+FBgn0083055,2,4,0,1,6,1,2
+FBgn0083057,0,6,1,0,10,0,0
+FBgn0083058,2,22,3,1,18,1,0
+FBgn0083059,0,0,0,0,0,0,0
+FBgn0083060,0,0,0,0,0,0,0
+FBgn0083068,22,17,5,9,26,6,14
+FBgn0083077,1422,2673,1138,1051,2667,1390,1353
+FBgn0083120,25,46,10,8,60,11,10
+FBgn0083121,16,9,8,7,33,4,6
+FBgn0083123,143,149,63,45,273,48,46
+FBgn0083124,97,81,40,31,171,38,31
+FBgn0083141,0,1,0,1,0,1,1
+FBgn0083167,679,1077,336,475,1072,504,560
+FBgn0083228,0,2,0,0,0,0,1
+FBgn0083919,3813,6381,2429,2371,4534,2388,2462
+FBgn0083936,0,0,1,0,1,0,2
+FBgn0083938,0,0,0,0,0,0,0
+FBgn0083940,15,38,4,13,46,15,24
+FBgn0083941,0,0,0,0,0,0,0
+FBgn0083942,0,0,0,0,0,0,0
+FBgn0083943,0,0,0,0,0,0,0
+FBgn0083944,0,0,0,0,0,0,0
+FBgn0083945,0,2,0,0,0,0,0
+FBgn0083946,0,0,0,0,0,0,0
+FBgn0083947,6,12,4,3,4,4,0
+FBgn0083949,3,4,4,6,11,1,1
+FBgn0083950,2,7,2,5,2,0,1
+FBgn0083951,0,0,0,0,0,0,0
+FBgn0083952,0,0,0,0,0,0,0
+FBgn0083953,194,386,80,96,336,115,131
+FBgn0083954,0,0,1,0,0,1,0
+FBgn0083956,3,4,1,0,7,3,1
+FBgn0083959,1684,2828,1199,1251,1844,957,1003
+FBgn0083960,48,57,19,36,43,26,34
+FBgn0083961,347,466,182,236,515,236,284
+FBgn0083962,4336,5601,2424,2485,5451,2604,2918
+FBgn0083963,1,2,0,0,1,1,0
+FBgn0083965,0,1,0,0,0,0,0
+FBgn0083966,0,1,0,0,0,0,0
+FBgn0083967,0,0,0,0,0,0,0
+FBgn0083968,157,236,65,117,285,91,89
+FBgn0083969,2533,4149,1425,1558,3405,1367,1499
+FBgn0083970,108,178,52,59,173,84,85
+FBgn0083971,4,10,3,6,11,1,4
+FBgn0083972,25,40,7,16,49,12,16
+FBgn0083973,17,40,17,13,22,11,5
+FBgn0083974,14,30,7,3,27,5,8
+FBgn0083975,3,4,2,4,2,0,0
+FBgn0083976,0,0,0,0,0,0,0
+FBgn0083977,202,464,170,152,439,183,182
+FBgn0083978,6,10,5,1,6,3,2
+FBgn0083979,0,1,0,0,1,1,1
+FBgn0083980,1,5,0,0,1,1,0
+FBgn0083981,1,4,0,1,1,1,0
+FBgn0083983,113,133,26,54,249,72,81
+FBgn0083984,12,4,0,0,20,2,0
+FBgn0083985,29,49,23,26,76,28,41
+FBgn0083986,101,195,40,45,193,55,80
+FBgn0083987,3,9,5,5,7,5,7
+FBgn0083988,5,2,0,0,1,0,0
+FBgn0083989,1,0,0,0,0,0,0
+FBgn0083990,3,10,69,92,7,51,109
+FBgn0083991,0,5,2,0,5,7,5
+FBgn0083992,0,0,0,0,0,0,0
+FBgn0084001,16,30,8,9,53,18,14
+FBgn0084015,55,121,27,26,89,28,41
+FBgn0084017,0,0,0,0,0,0,0
+FBgn0084049,47,87,34,41,77,48,37
+FBgn0084245,0,0,0,0,0,0,0
+FBgn0084688,0,0,0,0,0,0,0
+FBgn0085056,0,0,0,0,0,0,0
+FBgn0085188,640,1107,250,388,864,295,340
+FBgn0085190,0,0,0,0,0,0,0
+FBgn0085191,0,0,0,0,0,1,0
+FBgn0085192,94,202,19,33,166,33,22
+FBgn0085193,0,0,0,0,0,0,0
+FBgn0085194,0,0,0,0,1,0,0
+FBgn0085195,0,1,0,0,0,0,0
+FBgn0085196,0,0,0,0,0,0,0
+FBgn0085197,0,0,0,0,0,0,0
+FBgn0085198,0,0,0,0,0,0,0
+FBgn0085199,0,0,0,0,0,0,0
+FBgn0085200,0,0,0,0,0,0,0
+FBgn0085201,0,0,0,0,1,0,0
+FBgn0085202,0,0,0,0,0,0,0
+FBgn0085203,60,126,12,33,110,16,24
+FBgn0085204,0,1,0,0,1,0,0
+FBgn0085205,3,0,1,2,2,3,1
+FBgn0085206,0,0,0,0,0,0,0
+FBgn0085207,0,0,0,0,0,0,0
+FBgn0085208,0,0,0,0,0,0,0
+FBgn0085209,2,0,0,0,2,1,3
+FBgn0085210,0,1,0,1,0,0,0
+FBgn0085211,0,0,0,0,0,0,0
+FBgn0085212,73,158,41,31,151,31,38
+FBgn0085213,3,3,0,1,2,1,1
+FBgn0085214,0,0,0,0,2,0,0
+FBgn0085215,403,354,99,127,614,120,151
+FBgn0085216,29,46,15,13,40,16,10
+FBgn0085217,0,0,0,0,0,0,0
+FBgn0085218,3,9,3,1,5,1,0
+FBgn0085219,0,0,0,0,0,0,0
+FBgn0085220,160,321,89,137,312,157,152
+FBgn0085221,0,1,0,0,1,1,2
+FBgn0085222,0,0,0,0,0,0,0
+FBgn0085223,90,86,23,34,56,34,34
+FBgn0085224,151,278,53,88,188,79,71
+FBgn0085225,0,0,0,0,0,0,0
+FBgn0085226,390,880,309,269,994,335,344
+FBgn0085227,0,2,1,0,5,0,2
+FBgn0085228,0,1,0,0,1,0,0
+FBgn0085229,277,500,57,94,569,137,94
+FBgn0085230,0,0,0,0,0,0,0
+FBgn0085231,0,0,0,0,0,0,0
+FBgn0085232,0,0,0,0,1,0,0
+FBgn0085233,0,0,0,0,0,0,0
+FBgn0085234,5,6,2,3,1,2,2
+FBgn0085235,3,6,1,1,6,1,0
+FBgn0085236,4,8,1,1,1,0,2
+FBgn0085237,0,0,0,0,0,0,0
+FBgn0085238,0,0,0,0,0,0,0
+FBgn0085239,0,0,0,2,0,0,1
+FBgn0085240,0,1,0,0,1,0,0
+FBgn0085241,0,0,0,0,0,0,0
+FBgn0085242,33,103,14,31,112,26,24
+FBgn0085243,2,0,1,2,3,1,2
+FBgn0085244,1,2,1,0,4,0,0
+FBgn0085245,4,5,2,2,0,1,3
+FBgn0085246,0,0,0,0,0,0,0
+FBgn0085248,0,2,1,0,0,0,1
+FBgn0085249,250,350,219,208,189,161,222
+FBgn0085250,0,3,0,0,0,0,0
+FBgn0085252,0,0,0,0,0,0,0
+FBgn0085253,0,0,0,0,0,0,0
+FBgn0085254,0,0,0,0,0,0,0
+FBgn0085256,0,0,0,0,0,0,0
+FBgn0085257,65,130,30,32,149,31,46
+FBgn0085259,1,0,1,1,0,0,0
+FBgn0085260,24,32,3,11,45,9,8
+FBgn0085261,82,363,144,156,163,80,117
+FBgn0085262,0,1,1,1,2,1,0
+FBgn0085263,1,0,0,0,5,0,0
+FBgn0085264,0,0,0,0,0,0,0
+FBgn0085265,0,1,0,0,0,0,0
+FBgn0085267,0,0,0,0,0,0,0
+FBgn0085268,1,0,0,0,0,0,0
+FBgn0085271,36,108,15,17,92,16,28
+FBgn0085272,0,0,0,0,0,0,0
+FBgn0085273,0,0,0,0,0,0,0
+FBgn0085274,0,0,0,0,0,0,0
+FBgn0085275,61,100,33,27,161,35,39
+FBgn0085276,0,0,0,0,0,0,0
+FBgn0085277,0,0,0,0,0,0,0
+FBgn0085278,1,2,1,2,0,1,0
+FBgn0085279,95,128,22,36,156,39,29
+FBgn0085280,0,0,0,0,0,0,0
+FBgn0085281,6,18,2,4,42,5,8
+FBgn0085282,2,10,3,0,4,2,2
+FBgn0085283,0,2,0,1,1,0,2
+FBgn0085284,44,109,3,8,106,9,4
+FBgn0085285,0,0,1,2,0,0,0
+FBgn0085287,0,0,0,0,0,0,0
+FBgn0085288,0,0,0,0,1,0,0
+FBgn0085289,0,0,0,0,1,0,0
+FBgn0085290,30,58,16,16,56,21,22
+FBgn0085291,0,0,5,0,0,1,3
+FBgn0085292,32,67,20,19,38,13,14
+FBgn0085293,4,9,7,3,4,1,2
+FBgn0085294,1,1,1,0,0,1,0
+FBgn0085295,0,0,0,0,0,0,0
+FBgn0085296,0,2,1,0,1,1,1
+FBgn0085297,1,5,0,0,4,0,0
+FBgn0085298,39,96,19,24,75,11,17
+FBgn0085300,0,1,0,0,1,0,0
+FBgn0085302,1,0,0,1,0,0,0
+FBgn0085303,0,0,0,0,0,0,0
+FBgn0085304,0,1,0,0,1,0,2
+FBgn0085305,0,0,0,0,0,0,0
+FBgn0085306,0,0,0,0,0,0,0
+FBgn0085307,3,10,4,3,7,5,4
+FBgn0085308,1,0,0,0,0,0,0
+FBgn0085309,0,0,0,0,0,0,0
+FBgn0085310,0,0,2,0,0,0,0
+FBgn0085311,0,1,0,0,0,0,0
+FBgn0085312,0,0,0,0,0,1,0
+FBgn0085313,0,1,0,0,0,0,0
+FBgn0085314,0,1,0,0,1,0,0
+FBgn0085315,0,3,0,0,0,2,2
+FBgn0085316,2,0,0,0,0,0,0
+FBgn0085317,15,45,9,10,31,8,10
+FBgn0085318,0,0,0,0,0,0,0
+FBgn0085319,0,0,0,0,0,0,1
+FBgn0085320,0,0,0,0,0,0,0
+FBgn0085321,2,2,0,0,4,0,0
+FBgn0085322,56,64,11,26,64,20,26
+FBgn0085323,2,4,2,2,2,2,0
+FBgn0085324,0,0,0,0,0,0,0
+FBgn0085325,0,2,1,0,1,0,0
+FBgn0085326,0,0,0,0,0,0,0
+FBgn0085327,0,1,1,0,0,1,0
+FBgn0085328,1,1,0,0,0,0,0
+FBgn0085329,3,8,7,0,6,4,4
+FBgn0085330,1,0,0,0,1,0,0
+FBgn0085331,0,0,0,0,0,0,0
+FBgn0085332,0,0,0,0,1,0,0
+FBgn0085333,0,0,0,0,0,0,0
+FBgn0085334,30,146,32,57,49,14,18
+FBgn0085335,146,379,115,102,248,79,92
+FBgn0085336,1,0,0,0,0,0,0
+FBgn0085337,0,1,0,1,1,1,1
+FBgn0085339,56,58,12,22,101,17,23
+FBgn0085340,0,0,0,0,0,0,0
+FBgn0085341,0,0,0,0,0,0,0
+FBgn0085342,0,0,0,0,0,0,0
+FBgn0085343,0,0,0,0,0,0,0
+FBgn0085344,0,0,0,0,0,0,0
+FBgn0085345,0,0,0,0,0,0,0
+FBgn0085346,0,0,0,0,0,0,0
+FBgn0085347,0,0,0,0,0,0,0
+FBgn0085348,56,206,94,77,125,98,103
+FBgn0085349,0,0,0,0,0,0,0
+FBgn0085350,61,86,45,45,76,35,33
+FBgn0085351,23,73,19,17,38,23,15
+FBgn0085352,5,17,3,2,21,5,3
+FBgn0085353,57,30,20,7,18,24,33
+FBgn0085354,127,187,61,100,266,141,186
+FBgn0085355,0,0,0,0,0,0,0
+FBgn0085356,0,0,0,0,1,0,1
+FBgn0085357,9,17,8,2,12,5,10
+FBgn0085358,0,0,1,0,0,0,0
+FBgn0085359,168,235,48,88,9,3,1
+FBgn0085360,517,1418,467,728,934,528,597
+FBgn0085361,0,0,0,1,2,0,1
+FBgn0085362,0,2,2,0,6,1,4
+FBgn0085363,783,1175,437,472,985,526,579
+FBgn0085365,2,6,1,0,7,1,4
+FBgn0085366,0,6,0,0,2,0,0
+FBgn0085367,0,0,0,0,0,0,0
+FBgn0085369,0,1,0,0,2,0,0
+FBgn0085370,3195,4881,2304,2146,4875,2454,2713
+FBgn0085371,0,0,0,1,0,0,0
+FBgn0085374,0,1,0,1,5,1,0
+FBgn0085375,1110,3123,1159,1060,1852,1017,1072
+FBgn0085376,148,715,313,290,340,170,174
+FBgn0085377,256,265,130,166,241,158,136
+FBgn0085378,755,1142,353,389,1282,395,372
+FBgn0085379,35,36,34,27,27,13,13
+FBgn0085380,0,0,0,0,0,0,0
+FBgn0085382,1,3,0,0,3,1,1
+FBgn0085383,0,0,0,0,0,1,1
+FBgn0085384,29,83,25,31,58,39,29
+FBgn0085385,0,0,0,0,0,0,0
+FBgn0085386,110,199,66,100,221,102,106
+FBgn0085387,0,0,0,1,1,1,0
+FBgn0085388,1651,2664,1249,1380,3012,1925,2123
+FBgn0085390,80,84,52,45,64,31,45
+FBgn0085391,2,1,1,0,1,0,0
+FBgn0085392,1,1,1,0,1,1,0
+FBgn0085394,8,8,4,4,7,5,6
+FBgn0085395,65,176,101,79,105,66,62
+FBgn0085396,3,8,2,1,4,3,1
+FBgn0085397,3,12,4,3,8,4,3
+FBgn0085398,0,2,0,1,3,0,1
+FBgn0085399,11,21,11,12,29,9,10
+FBgn0085400,2,4,3,2,11,11,7
+FBgn0085401,0,3,3,1,5,6,4
+FBgn0085402,6070,12009,4405,4509,6939,3138,3376
+FBgn0085403,116,356,115,109,517,211,245
+FBgn0085404,1,8,6,1,9,3,2
+FBgn0085405,290,519,234,232,461,249,276
+FBgn0085406,0,0,0,0,0,0,0
+FBgn0085407,18,34,10,11,61,22,23
+FBgn0085408,20,53,28,23,40,29,27
+FBgn0085409,1,1,0,0,2,0,2
+FBgn0085410,2,6,4,0,2,0,1
+FBgn0085411,10,8,4,4,13,6,6
+FBgn0085412,38,141,60,46,83,43,52
+FBgn0085413,5,16,5,12,12,6,9
+FBgn0085414,1,1,1,0,0,0,0
+FBgn0085415,1,1,1,1,2,0,1
+FBgn0085417,3,51,18,7,42,12,11
+FBgn0085419,5,23,4,8,17,6,13
+FBgn0085420,0,0,0,0,1,0,0
+FBgn0085421,18,75,26,36,67,39,38
+FBgn0085422,0,0,1,0,0,0,0
+FBgn0085423,1942,3156,1316,1209,3334,1534,1650
+FBgn0085424,1,3,0,0,1,1,1
+FBgn0085425,83,130,67,79,100,59,71
+FBgn0085426,2,3,0,1,2,2,3
+FBgn0085427,12,15,10,9,13,19,20
+FBgn0085428,16,57,17,26,37,27,20
+FBgn0085429,5,33,16,10,58,25,26
+FBgn0085430,2379,3351,1678,1592,2634,1832,1766
+FBgn0085431,7,10,6,3,6,2,2
+FBgn0085432,1248,1842,594,461,2080,575,535
+FBgn0085433,385,588,225,254,542,256,274
+FBgn0085434,711,1045,396,380,676,360,334
+FBgn0085435,56,108,21,28,105,38,33
+FBgn0085436,15793,29044,11027,10718,21633,10950,11133
+FBgn0085437,1398,1817,889,862,1634,984,960
+FBgn0085438,86,142,34,64,53,39,33
+FBgn0085440,4,20,7,6,31,10,15
+FBgn0085442,5711,8954,3283,3379,6573,3243,3556
+FBgn0085443,2484,4757,2222,2188,4157,2343,2488
+FBgn0085444,1572,2611,787,808,2296,889,865
+FBgn0085445,8,29,9,15,24,13,16
+FBgn0085446,3114,6431,2402,2367,7211,3922,4343
+FBgn0085447,3,6,1,4,7,3,1
+FBgn0085448,0,0,0,0,0,0,0
+FBgn0085449,0,4,1,2,1,0,0
+FBgn0085450,1331,3340,1193,1090,2062,885,923
+FBgn0085451,3267,5365,2493,2409,4030,2555,2624
+FBgn0085452,53,150,28,28,170,31,30
+FBgn0085453,143,158,78,80,212,116,130
+FBgn0085454,0,0,2,0,2,0,0
+FBgn0085455,1,2,0,0,0,1,1
+FBgn0085456,2,0,1,0,0,0,0
+FBgn0085457,0,0,0,0,0,0,0
+FBgn0085458,0,0,0,0,0,0,0
+FBgn0085459,224,286,102,112,454,161,175
+FBgn0085460,184,172,62,47,383,85,74
+FBgn0085461,0,0,0,0,0,0,0
+FBgn0085462,0,0,0,0,0,0,0
+FBgn0085464,0,0,0,0,0,0,0
+FBgn0085465,34,19,5,13,35,9,11
+FBgn0085466,481,428,103,132,629,131,123
+FBgn0085468,171,259,40,52,342,84,81
+FBgn0085470,0,0,0,0,0,0,0
+FBgn0085471,1,3,0,1,1,0,0
+FBgn0085472,0,0,0,0,0,0,0
+FBgn0085473,0,0,0,0,0,0,0
+FBgn0085474,0,0,0,0,2,4,1
+FBgn0085475,0,0,0,1,0,0,1
+FBgn0085476,0,2,0,1,1,1,1
+FBgn0085477,0,0,0,0,0,0,0
+FBgn0085478,1214,2395,1252,1159,2154,1377,1396
+FBgn0085479,4,9,5,1,12,3,3
+FBgn0085480,0,0,0,0,0,0,0
+FBgn0085481,0,0,0,0,0,0,0
+FBgn0085482,1,11,2,1,9,3,0
+FBgn0085483,73,162,39,32,86,21,22
+FBgn0085484,298,461,183,181,389,229,206
+FBgn0085485,0,0,0,1,1,0,1
+FBgn0085486,1,0,0,0,1,0,1
+FBgn0085487,0,0,0,0,0,0,0
+FBgn0085488,7,17,6,6,10,5,2
+FBgn0085489,13,27,11,10,21,4,5
+FBgn0085491,0,0,0,0,0,0,0
+FBgn0085787,2,5,300,238,111,261,450
+FBgn0085788,0,0,0,0,0,0,0
+FBgn0085789,19,32,21,18,29,24,24
+FBgn0085790,0,0,2,0,0,0,2
+FBgn0085791,0,0,0,0,0,0,0
+FBgn0085792,5,10,23,14,11,19,12
+FBgn0085831,0,0,0,0,0,0,0
+FBgn0086021,1,0,1,0,0,0,0
+FBgn0086022,0,0,0,0,0,0,0
+FBgn0086023,0,0,0,0,4,0,0
+FBgn0086024,0,2,0,0,0,0,0
+FBgn0086025,0,0,0,0,0,0,0
+FBgn0086026,0,0,0,0,0,0,0
+FBgn0086027,0,15,0,0,6,0,0
+FBgn0086028,0,1,0,0,2,1,0
+FBgn0086029,0,0,0,0,0,0,0
+FBgn0086030,0,0,0,0,0,0,0
+FBgn0086031,35,55,50,30,47,23,21
+FBgn0086032,0,1,0,0,0,0,0
+FBgn0086033,0,0,0,0,0,0,0
+FBgn0086034,0,0,0,0,0,0,0
+FBgn0086035,0,0,0,0,0,0,0
+FBgn0086036,2,13,0,1,10,0,4
+FBgn0086037,1,1,2,0,2,0,0
+FBgn0086038,12,34,18,7,18,8,12
+FBgn0086039,5,5,0,1,9,4,4
+FBgn0086040,0,0,0,0,1,0,0
+FBgn0086041,0,0,0,0,0,0,0
+FBgn0086042,0,3,0,1,7,1,0
+FBgn0086043,0,1,1,1,1,0,1
+FBgn0086044,0,0,0,0,0,0,0
+FBgn0086045,0,0,0,0,0,0,0
+FBgn0086046,0,0,0,0,0,0,0
+FBgn0086047,0,0,0,0,0,0,0
+FBgn0086048,4,1,2,0,6,0,1
+FBgn0086049,0,0,0,0,0,0,0
+FBgn0086051,13,19,0,2,16,1,0
+FBgn0086052,0,0,0,0,0,0,0
+FBgn0086053,0,0,1,2,1,0,0
+FBgn0086054,1,2,2,3,8,4,1
+FBgn0086055,1,15,2,0,12,1,1
+FBgn0086056,0,0,0,0,0,0,0
+FBgn0086057,6,5,2,1,7,0,0
+FBgn0086058,0,7,1,3,6,1,0
+FBgn0086059,0,0,0,0,0,0,0
+FBgn0086060,0,0,1,0,1,0,0
+FBgn0086061,2,13,2,1,42,0,2
+FBgn0086062,2,0,0,0,3,0,0
+FBgn0086063,1,0,0,0,0,0,0
+FBgn0086064,1,1,0,0,0,1,0
+FBgn0086065,3,1,0,0,6,0,1
+FBgn0086066,0,0,0,0,0,0,0
+FBgn0086067,2,1,1,0,2,0,2
+FBgn0086068,0,0,0,0,0,0,0
+FBgn0086069,0,0,0,0,2,0,0
+FBgn0086070,0,0,0,0,1,0,0
+FBgn0086071,1,0,0,0,0,0,0
+FBgn0086072,1,0,0,0,2,0,0
+FBgn0086073,0,0,0,0,0,0,0
+FBgn0086074,2,1,0,0,2,2,0
+FBgn0086075,1,5,0,1,4,0,1
+FBgn0086076,0,0,0,0,0,0,0
+FBgn0086077,0,1,0,0,1,0,0
+FBgn0086078,2,1,0,0,1,0,0
+FBgn0086079,1,0,0,0,1,0,0
+FBgn0086080,0,0,0,0,0,0,0
+FBgn0086081,2,3,2,1,1,0,2
+FBgn0086082,1,1,0,0,2,0,0
+FBgn0086129,1082,2348,755,726,1808,767,824
+FBgn0086130,314,521,167,220,425,236,269
+FBgn0086133,3189,6331,2427,2546,4339,2383,2515
+FBgn0086134,1904,2541,887,1156,2506,1309,1386
+FBgn0086200,61,135,47,51,152,66,56
+FBgn0086251,1236,2527,670,665,2429,662,692
+FBgn0086253,737,1097,418,464,1225,626,719
+FBgn0086254,1749,2235,865,1138,2403,937,1200
+FBgn0086265,3,7,5,5,6,7,5
+FBgn0086266,0,0,0,0,0,0,0
+FBgn0086346,4578,6543,2728,3152,5643,3025,3315
+FBgn0086347,6896,11040,4028,4607,8024,4216,4643
+FBgn0086348,8,12,6,6,13,6,6
+FBgn0086350,259,392,99,98,523,124,130
+FBgn0086355,3609,4875,2328,2576,6533,4556,5067
+FBgn0086356,2411,3139,1278,1517,3069,1662,1852
+FBgn0086357,5632,6802,2688,3364,8523,4379,4856
+FBgn0086358,1582,2931,1223,1223,1732,996,1051
+FBgn0086359,347,377,180,181,479,210,241
+FBgn0086361,3068,5820,2222,2442,4700,2388,2829
+FBgn0086362,370,592,208,262,516,218,248
+FBgn0086364,1134,2586,838,789,1941,720,757
+FBgn0086365,4466,6416,2761,3117,4065,2225,2349
+FBgn0086367,6,6,10,2,25,11,15
+FBgn0086368,0,1,0,0,0,0,0
+FBgn0086369,0,0,0,0,1,0,0
+FBgn0086370,1538,2544,932,1072,1976,952,1045
+FBgn0086371,545,580,232,323,661,291,335
+FBgn0086372,808,902,342,375,1074,396,397
+FBgn0086377,943,2000,630,741,1378,571,690
+FBgn0086384,1157,1752,676,806,1428,813,886
+FBgn0086408,8,3,3,4,6,4,7
+FBgn0086441,1704,3414,1141,1240,2597,1226,1350
+FBgn0086442,2977,4353,1863,2060,3858,2189,2312
+FBgn0086443,6004,6801,3016,3733,5931,3449,3724
+FBgn0086444,792,1232,438,555,992,567,636
+FBgn0086445,344,510,144,207,496,235,269
+FBgn0086446,467,654,211,331,668,344,384
+FBgn0086447,146,283,53,59,292,73,84
+FBgn0086448,113,123,23,40,207,38,47
+FBgn0086450,6369,9875,4913,5234,6171,3799,3989
+FBgn0086451,2329,2794,1114,1126,2404,1235,1124
+FBgn0086472,27674,46040,14852,22705,37401,19879,22350
+FBgn0086475,934,1397,494,552,1470,571,571
+FBgn0086519,2,2,1,0,1,1,0
+FBgn0086532,1944,2232,967,1176,2935,1486,1594
+FBgn0086558,2126,3047,2210,2875,2596,2451,3053
+FBgn0086600,1,1,0,0,11,2,2
+FBgn0086601,3,9,0,1,8,1,2
+FBgn0086602,1,20,4,1,12,0,6
+FBgn0086603,0,0,0,0,0,0,0
+FBgn0086604,2,0,0,1,2,0,0
+FBgn0086605,648,1110,409,397,1020,428,431
+FBgn0086606,3,2,1,3,3,0,0
+FBgn0086607,1,3,1,1,2,0,0
+FBgn0086608,12,48,11,22,28,15,13
+FBgn0086610,0,0,0,0,0,0,0
+FBgn0086611,0,0,0,0,1,1,0
+FBgn0086613,1317,2240,771,866,1876,857,802
+FBgn0086655,429,889,357,281,719,356,367
+FBgn0086656,2096,4396,1098,1505,3392,1043,1343
+FBgn0086657,577,951,282,388,871,385,435
+FBgn0086658,0,4,0,0,15,0,0
+FBgn0086659,0,23,0,0,23,1,0
+FBgn0086660,3,1,0,0,1,0,0
+FBgn0086661,8,10,6,7,6,3,6
+FBgn0086662,1,3,0,2,10,1,4
+FBgn0086663,2,5,1,2,7,2,2
+FBgn0086664,13,23,5,7,10,4,3
+FBgn0086665,6,8,1,1,16,5,0
+FBgn0086666,11,9,5,1,12,6,7
+FBgn0086667,0,11,2,1,38,0,1
+FBgn0086668,8,9,1,2,7,3,1
+FBgn0086669,1,8,2,0,2,0,0
+FBgn0086670,0,12,2,0,17,1,0
+FBgn0086671,9,5,1,1,2,0,1
+FBgn0086672,0,3,1,0,12,1,0
+FBgn0086673,1,5,5,4,5,2,2
+FBgn0086674,2081,3240,1176,1298,2213,1134,1232
+FBgn0086675,0,7,1,0,1,1,0
+FBgn0086676,6226,7267,3497,3650,7600,4220,5048
+FBgn0086677,0,2,1,0,1,0,0
+FBgn0086679,1064,1251,484,601,1176,554,545
+FBgn0086680,1,2,0,0,2,0,0
+FBgn0086681,31,63,17,15,47,8,13
+FBgn0086683,1340,2402,660,742,2050,681,841
+FBgn0086685,1682,2663,991,1136,2313,1094,1154
+FBgn0086686,1889,5643,1989,1829,4418,1936,2096
+FBgn0086687,10437,16006,6079,7199,11907,5670,6346
+FBgn0086689,1662,2786,1029,1132,2229,978,1121
+FBgn0086690,3993,6983,2398,2607,6460,2653,2782
+FBgn0086691,247,298,114,148,335,114,109
+FBgn0086693,26,48,31,27,64,27,28
+FBgn0086694,1448,2464,858,982,1976,1050,1125
+FBgn0086695,466,606,253,301,463,260,287
+FBgn0086697,839,1747,507,515,1647,607,604
+FBgn0086698,382,657,285,326,559,319,390
+FBgn0086699,146,259,72,104,265,103,135
+FBgn0086704,6,10,6,3,15,9,8
+FBgn0086706,7972,11345,4357,5682,8965,4713,5285
+FBgn0086707,2041,5023,1529,1620,3952,1488,1701
+FBgn0086708,251,509,218,206,267,162,170
+FBgn0086710,9356,14943,5889,9062,11968,6686,7759
+FBgn0086711,8,3,4,5,4,2,2
+FBgn0086712,1003,1352,559,707,1204,656,763
+FBgn0086736,1016,1482,652,732,1305,713,803
+FBgn0086757,757,1354,449,467,926,356,415
+FBgn0086758,4482,13905,4806,4215,8051,3433,3858
+FBgn0086768,826,1186,497,664,1092,596,767
+FBgn0086778,11,21,15,5,21,4,4
+FBgn0086779,1519,2843,863,888,2809,942,945
+FBgn0086782,249,521,139,123,434,89,99
+FBgn0086783,24,39,25,24,36,15,12
+FBgn0086784,1034,1538,626,786,1261,729,766
+FBgn0086785,423,594,216,306,581,276,339
+FBgn0086855,562,1050,302,330,880,389,382
+FBgn0086856,160,302,70,66,320,70,73
+FBgn0086895,816,1349,458,493,1202,598,590
+FBgn0086896,3,12,5,8,6,4,2
+FBgn0086897,8703,15301,5093,4950,12325,4844,4979
+FBgn0086898,20,37,16,7,38,22,10
+FBgn0086899,3240,6664,2910,2548,6137,3146,3371
+FBgn0086900,0,0,0,0,0,0,0
+FBgn0086901,4039,7576,3250,2736,7572,3700,3824
+FBgn0086902,13320,28319,10188,8311,24648,9598,8729
+FBgn0086904,10167,13887,5607,7665,12434,7084,7763
+FBgn0086906,792,1661,641,647,2258,1298,1117
+FBgn0086907,2,6,0,1,1,2,1
+FBgn0086908,1687,2475,852,1059,2154,1121,1244
+FBgn0086909,284,365,133,137,405,152,176
+FBgn0086910,33,77,34,34,208,122,127
+FBgn0086911,122,521,276,217,511,261,251
+FBgn0086912,520,782,195,293,626,242,265
+FBgn0086913,0,1,0,1,1,2,0
+FBgn0086915,1,1,0,1,1,0,1
+FBgn0086916,0,0,0,0,0,2,0
+FBgn0087002,542,1025,303,234,1126,230,192
+FBgn0087005,1,5,3,0,7,2,2
+FBgn0087007,63,181,62,78,335,141,156
+FBgn0087008,4874,7334,3570,3369,5479,3752,3526
+FBgn0087012,7,3,1,3,10,6,5
+FBgn0087013,12067,16591,6819,8148,13928,7642,8016
+FBgn0087021,399,512,136,208,534,212,233
+FBgn0087035,8641,15012,7866,7771,10879,6846,8005
+FBgn0087039,331,707,170,180,686,198,200
+FBgn0087040,3,6,2,1,3,0,0
+FBgn0087041,0,0,0,0,0,0,0
+FBgn0243486,1,0,0,1,3,1,4
+FBgn0243505,1633,3155,1550,1514,2842,1803,1988
+FBgn0243511,1593,2127,988,1046,1932,1055,1160
+FBgn0243512,2300,5087,1525,1503,3098,1205,1335
+FBgn0243513,41,27,24,29,75,20,25
+FBgn0243514,5194,6744,5664,5213,8267,4944,5600
+FBgn0243516,1785,2749,1000,914,2182,1054,1078
+FBgn0243517,511,795,275,349,699,301,319
+FBgn0243586,0,0,0,0,1,0,0
+FBgn0250732,1423,2168,798,943,1510,817,871
+FBgn0250746,1818,2253,960,1217,2453,1483,1556
+FBgn0250747,1275,2230,793,885,1732,706,746
+FBgn0250753,7698,12952,3817,4192,12979,4112,4357
+FBgn0250754,6356,11924,3566,3022,10764,3557,3391
+FBgn0250755,143,254,114,115,258,112,127
+FBgn0250756,3,1,0,0,3,0,0
+FBgn0250757,59,107,35,57,220,81,76
+FBgn0250785,1330,1728,771,879,2142,1186,1392
+FBgn0250786,3047,5902,2243,2287,4376,2326,2376
+FBgn0250788,11028,17610,7993,7821,18239,10949,11269
+FBgn0250789,21009,35747,16066,15532,33567,20678,20638
+FBgn0250791,1664,3068,972,1193,2638,1150,1313
+FBgn0250814,3331,4484,2440,2985,3405,2541,2612
+FBgn0250815,0,0,1,2,1,3,3
+FBgn0250816,245,321,97,118,560,88,90
+FBgn0250817,0,0,0,0,0,0,0
+FBgn0250818,743,2537,1065,881,1296,674,744
+FBgn0250819,52,88,22,23,89,10,13
+FBgn0250820,964,1371,505,676,1302,573,747
+FBgn0250821,58,111,24,47,95,49,40
+FBgn0250822,0,0,0,0,0,0,0
+FBgn0250823,2703,5201,1658,1689,4677,1711,1754
+FBgn0250824,23,46,11,9,59,12,12
+FBgn0250825,0,0,0,0,0,0,0
+FBgn0250826,0,0,0,0,0,0,0
+FBgn0250827,1,0,1,0,3,4,2
+FBgn0250829,27,83,49,38,185,86,93
+FBgn0250830,292,295,93,79,319,87,81
+FBgn0250831,0,0,0,0,1,0,0
+FBgn0250832,0,0,0,0,0,0,0
+FBgn0250833,0,1,0,0,2,0,0
+FBgn0250834,0,0,0,0,1,0,0
+FBgn0250835,0,1,0,1,0,1,0
+FBgn0250836,1,0,0,0,0,0,0
+FBgn0250837,2296,3052,1162,1664,3825,2142,2201
+FBgn0250838,1682,2921,852,1150,2510,1137,1232
+FBgn0250839,1,5,0,0,4,1,1
+FBgn0250840,0,0,0,0,0,0,0
+FBgn0250841,0,0,0,0,0,0,0
+FBgn0250842,1,1,1,0,0,2,2
+FBgn0250843,2539,3651,1064,1476,3251,1676,2004
+FBgn0250844,0,0,0,0,0,0,0
+FBgn0250845,1,1,0,0,0,1,0
+FBgn0250846,0,0,0,0,0,0,0
+FBgn0250847,1,0,0,1,0,0,0
+FBgn0250848,12653,16836,7302,9633,14384,8088,9029
+FBgn0250849,0,1,0,0,0,0,0
+FBgn0250850,2020,2774,1120,1294,2768,1351,1562
+FBgn0250851,0,0,0,0,0,0,0
+FBgn0250861,3024,5280,2183,2325,3943,2073,2234
+FBgn0250862,0,5,2,2,3,2,6
+FBgn0250867,382,636,177,254,1180,409,410
+FBgn0250868,120,101,6,18,177,25,4
+FBgn0250869,458,984,342,388,699,302,297
+FBgn0250870,88,145,85,61,89,47,46
+FBgn0250871,12,23,14,16,17,13,17
+FBgn0250874,2667,3629,1611,1790,2820,2023,2402
+FBgn0250876,230,435,189,225,533,285,330
+FBgn0250903,0,0,0,0,0,0,0
+FBgn0250904,12,24,11,12,67,42,49
+FBgn0250906,2518,3163,1509,1824,4430,2687,2942
+FBgn0250907,439,833,272,259,759,223,267
+FBgn0250908,0,0,0,0,2,2,0
+FBgn0250910,0,1,1,0,3,0,0
+FBgn0250911,0,0,0,0,1,0,0
+FBgn0259098,1,1,0,1,0,0,0
+FBgn0259099,0,1,0,0,0,2,1
+FBgn0259100,331,662,246,247,648,306,318
+FBgn0259101,8,11,8,3,6,7,6
+FBgn0259108,322,756,283,240,534,222,246
+FBgn0259109,110,162,81,92,231,118,134
+FBgn0259110,868,1179,557,545,792,406,465
+FBgn0259111,1615,3273,1503,1508,4302,2377,2561
+FBgn0259112,67,87,16,25,101,34,35
+FBgn0259113,2112,3114,1142,1202,2603,1080,1139
+FBgn0259139,2471,4499,1502,1696,3745,1762,1822
+FBgn0259140,8,14,3,3,32,6,17
+FBgn0259141,1,13,5,7,3,2,3
+FBgn0259142,423,594,245,295,610,302,347
+FBgn0259143,492,1196,372,370,798,298,323
+FBgn0259144,195,112,57,84,121,47,47
+FBgn0259145,0,3,0,0,2,2,3
+FBgn0259146,0,2,0,0,1,0,0
+FBgn0259147,2,5,2,4,1,1,1
+FBgn0259148,2,0,1,0,1,0,0
+FBgn0259149,2,9,4,2,6,3,6
+FBgn0259150,26,32,15,15,23,10,9
+FBgn0259151,4,11,2,1,29,11,4
+FBgn0259152,540,878,366,347,1004,323,355
+FBgn0259162,2,0,0,1,0,0,0
+FBgn0259163,94,165,72,79,167,82,78
+FBgn0259164,63,93,56,47,89,42,44
+FBgn0259166,698,980,499,531,1078,728,782
+FBgn0259167,111,211,101,95,126,66,78
+FBgn0259168,2547,5058,2045,1861,4396,2008,1950
+FBgn0259170,623,1266,495,442,1196,488,477
+FBgn0259171,686,1258,560,591,1153,730,821
+FBgn0259172,2,0,0,3,1,4,2
+FBgn0259173,206,360,134,154,353,192,217
+FBgn0259174,3052,5341,2027,2021,4300,1820,2117
+FBgn0259175,90,167,69,79,179,83,83
+FBgn0259176,6617,12194,4784,4367,10501,4305,4802
+FBgn0259178,247,416,125,96,312,118,115
+FBgn0259179,0,0,0,0,0,0,0
+FBgn0259181,3,11,2,2,5,1,3
+FBgn0259182,5,12,0,4,15,6,6
+FBgn0259183,0,40,17,6,8,6,1
+FBgn0259184,1,64,21,12,22,10,10
+FBgn0259185,2,2,1,1,2,2,4
+FBgn0259186,0,2,0,0,1,0,0
+FBgn0259187,1,1,0,0,0,0,0
+FBgn0259188,42,65,26,27,38,11,15
+FBgn0259189,0,1,1,0,0,1,1
+FBgn0259190,1,2,0,0,1,0,0
+FBgn0259192,3,6,2,1,2,1,2
+FBgn0259193,0,0,0,0,0,0,0
+FBgn0259194,0,0,0,0,0,1,0
+FBgn0259195,1,4,0,0,0,0,1
+FBgn0259196,0,0,0,0,0,0,2
+FBgn0259198,0,0,0,0,0,0,0
+FBgn0259199,0,0,0,0,0,0,0
+FBgn0259200,0,0,0,0,0,0,0
+FBgn0259201,0,0,0,0,0,0,0
+FBgn0259202,0,0,0,0,0,0,0
+FBgn0259203,0,0,0,0,5,0,0
+FBgn0259204,0,0,0,0,0,0,0
+FBgn0259209,33,69,22,34,67,24,41
+FBgn0259210,3,4,1,1,1,4,2
+FBgn0259211,17,73,15,16,61,25,20
+FBgn0259212,3538,6482,2534,2440,5200,2503,2649
+FBgn0259213,1,4,0,0,2,0,0
+FBgn0259214,4437,6267,1979,1713,6326,1766,1754
+FBgn0259215,13,15,9,8,26,9,4
+FBgn0259216,33,26,6,7,57,7,7
+FBgn0259217,7088,10689,4796,4688,12842,6766,7034
+FBgn0259219,1,3,2,1,2,1,3
+FBgn0259220,5092,7639,3049,2939,7110,3568,3794
+FBgn0259221,466,549,223,235,573,253,261
+FBgn0259222,0,4,0,2,8,2,3
+FBgn0259223,0,2,1,0,1,1,0
+FBgn0259224,120,325,129,138,609,272,304
+FBgn0259225,165,306,125,161,254,140,151
+FBgn0259226,32,44,16,30,21,11,18
+FBgn0259227,4431,5683,2399,2307,5378,2732,3048
+FBgn0259228,6731,11306,5415,5045,7574,4846,5199
+FBgn0259229,0,0,0,0,0,0,0
+FBgn0259230,1,4,0,1,0,0,1
+FBgn0259231,0,0,1,0,0,0,0
+FBgn0259232,4,3,2,2,3,4,5
+FBgn0259233,339,616,250,261,413,299,275
+FBgn0259234,916,1463,536,526,1187,584,601
+FBgn0259236,8,20,8,8,5,0,0
+FBgn0259237,4,1,2,1,1,1,4
+FBgn0259238,292,865,170,217,765,230,252
+FBgn0259239,2,0,5,0,4,2,1
+FBgn0259240,1715,4745,2480,2117,4239,2426,2550
+FBgn0259241,0,0,0,0,0,0,0
+FBgn0259242,16,21,13,11,16,5,11
+FBgn0259243,835,1478,469,518,1142,498,521
+FBgn0259244,0,6,2,3,3,1,1
+FBgn0259245,4,3,4,4,9,1,2
+FBgn0259246,160,397,227,216,613,429,406
+FBgn0259247,1045,1757,585,560,1672,600,601
+FBgn0259481,3807,5926,2628,2724,4275,2511,2980
+FBgn0259482,281,314,76,99,357,96,86
+FBgn0259483,1421,2181,836,991,2064,1059,1173
+FBgn0259676,483,651,279,337,506,306,270
+FBgn0259677,104,209,78,70,188,63,83
+FBgn0259678,7,8,8,14,6,9,6
+FBgn0259680,1,3,3,0,0,0,0
+FBgn0259682,10,29,15,13,21,8,10
+FBgn0259683,58,208,50,89,259,112,114
+FBgn0259685,364,667,287,284,566,292,322
+FBgn0259697,3,4,1,0,8,1,4
+FBgn0259699,0,0,0,0,0,0,0
+FBgn0259700,32,33,0,0,13,7,3
+FBgn0259701,0,0,0,0,0,0,0
+FBgn0259702,0,0,0,0,0,0,0
+FBgn0259703,0,0,0,0,0,0,0
+FBgn0259704,354,413,191,213,347,204,215
+FBgn0259705,129,160,51,84,161,60,56
+FBgn0259707,16,18,10,8,18,12,6
+FBgn0259708,0,0,0,0,0,0,0
+FBgn0259709,0,0,0,0,0,0,0
+FBgn0259710,37,60,10,13,49,14,11
+FBgn0259711,118,278,53,61,260,82,81
+FBgn0259712,62,35,20,29,30,22,22
+FBgn0259713,0,0,0,0,0,0,0
+FBgn0259714,112,306,108,124,130,54,57
+FBgn0259715,637,2124,883,1143,426,306,288
+FBgn0259716,5,22,4,6,7,2,5
+FBgn0259717,0,0,0,0,0,0,0
+FBgn0259718,0,0,0,0,0,0,0
+FBgn0259719,0,0,0,0,0,0,0
+FBgn0259720,0,0,0,0,0,0,0
+FBgn0259721,0,0,0,0,0,0,0
+FBgn0259722,0,0,0,0,0,0,0
+FBgn0259725,0,0,0,0,0,0,0
+FBgn0259726,0,0,0,0,0,0,0
+FBgn0259727,0,0,0,0,0,0,0
+FBgn0259728,81,113,35,31,135,43,49
+FBgn0259729,0,0,0,0,0,0,0
+FBgn0259730,0,0,0,0,0,0,0
+FBgn0259731,0,0,0,0,0,0,0
+FBgn0259732,0,0,0,0,0,0,0
+FBgn0259733,0,0,0,0,0,0,0
+FBgn0259734,169,390,174,163,488,260,319
+FBgn0259735,7419,18425,7475,6512,12959,6813,7321
+FBgn0259736,202,484,204,193,302,143,179
+FBgn0259737,4,10,1,2,10,2,0
+FBgn0259738,1,0,0,0,1,0,0
+FBgn0259739,10,43,20,7,79,15,9
+FBgn0259740,94,62,4,8,233,32,6
+FBgn0259741,28,33,14,13,97,40,32
+FBgn0259742,217,383,107,116,355,138,124
+FBgn0259743,2912,4850,1653,1563,4426,1914,2007
+FBgn0259744,5,18,8,4,16,3,6
+FBgn0259745,1501,2934,1129,1073,2793,1116,1196
+FBgn0259748,0,0,0,0,0,0,0
+FBgn0259749,1759,2755,1107,1352,1444,864,976
+FBgn0259750,11,8,2,4,4,2,10
+FBgn0259784,305,379,139,187,488,159,172
+FBgn0259785,2722,4403,1767,1888,3337,1928,1952
+FBgn0259789,17,68,27,14,49,28,25
+FBgn0259791,316,482,150,178,433,208,249
+FBgn0259794,3,1,1,1,1,0,0
+FBgn0259795,0,0,1,0,0,0,0
+FBgn0259818,53,109,47,36,90,35,40
+FBgn0259819,0,2,0,0,0,1,0
+FBgn0259822,0,1,0,1,1,1,0
+FBgn0259823,23,73,12,15,29,26,18
+FBgn0259824,1428,2099,933,1015,1950,996,953
+FBgn0259831,0,1,0,0,1,0,0
+FBgn0259832,47,118,26,22,80,24,26
+FBgn0259834,431,629,224,283,522,222,247
+FBgn0259876,2061,3063,1050,1155,2591,1384,1327
+FBgn0259878,30,44,12,16,42,14,9
+FBgn0259896,1703,1896,668,911,2004,917,1122
+FBgn0259916,125,184,44,81,203,64,50
+FBgn0259917,0,0,0,0,0,0,0
+FBgn0259918,24,34,17,28,36,25,21
+FBgn0259922,1,0,0,0,0,0,0
+FBgn0259923,52,94,49,44,127,64,61
+FBgn0259926,7,6,4,7,11,4,10
+FBgn0259927,0,0,0,0,1,0,2
+FBgn0259932,0,0,0,0,0,0,0
+FBgn0259933,0,0,0,0,0,0,0
+FBgn0259934,0,0,0,0,0,0,0
+FBgn0259935,30,45,26,18,91,56,58
+FBgn0259936,230,406,138,133,417,119,111
+FBgn0259937,4378,5661,2314,2857,5399,2887,3286
+FBgn0259938,1076,2328,863,801,1635,655,801
+FBgn0259949,0,0,0,0,0,0,0
+FBgn0259950,0,0,0,0,1,0,0
+FBgn0259951,0,0,0,0,0,0,0
+FBgn0259952,0,0,0,0,0,0,0
+FBgn0259953,0,0,0,0,0,0,0
+FBgn0259954,0,0,0,0,0,0,0
+FBgn0259955,0,0,0,0,1,0,0
+FBgn0259956,0,0,0,0,0,0,0
+FBgn0259957,0,1,0,1,0,0,0
+FBgn0259958,0,0,0,0,0,0,0
+FBgn0259959,0,0,0,0,0,0,0
+FBgn0259960,0,0,0,0,0,0,0
+FBgn0259961,0,1,0,0,0,0,0
+FBgn0259962,0,2,0,0,0,0,0
+FBgn0259963,0,0,0,0,0,0,0
+FBgn0259964,0,0,0,0,1,0,0
+FBgn0259965,0,0,0,0,0,0,0
+FBgn0259966,0,1,0,0,0,0,0
+FBgn0259967,0,3,2,0,0,0,0
+FBgn0259968,0,0,0,0,0,0,0
+FBgn0259969,0,0,0,0,0,0,0
+FBgn0259970,0,0,0,0,0,0,0
+FBgn0259971,0,0,0,0,0,0,0
+FBgn0259972,0,0,0,0,0,0,0
+FBgn0259973,0,0,0,0,0,0,0
+FBgn0259974,0,0,0,0,0,0,0
+FBgn0259975,0,0,0,0,0,0,0
+FBgn0259977,51,69,27,24,73,45,40
+FBgn0259978,1276,1998,640,730,1990,684,762
+FBgn0259979,1404,2270,771,857,2157,717,724
+FBgn0259982,216,229,74,95,260,107,124
+FBgn0259984,6399,11010,5085,4530,12089,6026,6492
+FBgn0259985,198,268,88,103,291,89,107
+FBgn0259986,2,6,4,3,3,1,3
+FBgn0259989,0,0,0,0,0,0,0
+FBgn0259990,29,74,15,22,48,21,29
+FBgn0259991,18,31,0,4,18,2,0
+FBgn0259992,0,0,0,0,2,1,1
+FBgn0259993,97,147,40,77,111,75,64
+FBgn0259994,153,165,123,122,177,146,133
+FBgn0259995,0,0,0,1,0,0,0
+FBgn0259996,0,2,0,0,1,1,0
+FBgn0259997,0,1,0,0,1,1,0
+FBgn0259998,0,0,0,0,0,0,1
+FBgn0259999,0,0,0,0,0,0,0
+FBgn0260000,5,6,2,2,1,1,0
+FBgn0260002,4,2,0,0,4,0,0
+FBgn0260003,3893,6569,2598,2455,5710,2644,2638
+FBgn0260004,139,255,99,85,254,95,99
+FBgn0260005,62,80,38,40,72,23,28
+FBgn0260006,154,393,103,149,318,165,180
+FBgn0260007,1,1,0,0,0,0,0
+FBgn0260010,4151,5121,2373,2513,4736,3161,3377
+FBgn0260011,30,44,19,37,228,134,150
+FBgn0260012,2264,3684,1257,1403,3279,1307,1409
+FBgn0260026,23,39,13,14,49,14,18
+FBgn0260027,14,24,7,4,44,7,7
+FBgn0260049,3665,4929,2152,2464,5006,2873,3136
+FBgn0260222,0,0,0,0,0,0,0
+FBgn0260223,0,0,0,0,0,0,0
+FBgn0260224,0,0,0,0,0,0,0
+FBgn0260225,0,0,0,0,0,0,0
+FBgn0260226,0,0,0,0,0,0,0
+FBgn0260228,0,0,0,0,0,0,0
+FBgn0260229,0,0,0,0,0,0,0
+FBgn0260230,0,0,0,0,0,0,0
+FBgn0260231,0,0,0,0,0,0,0
+FBgn0260232,0,0,0,0,0,0,0
+FBgn0260233,0,0,0,0,0,0,0
+FBgn0260234,0,0,0,0,0,0,0
+FBgn0260235,0,0,0,0,0,0,0
+FBgn0260236,0,0,0,0,0,0,0
+FBgn0260237,0,0,0,0,0,0,0
+FBgn0260238,0,0,0,0,0,0,0
+FBgn0260241,0,0,0,0,0,0,0
+FBgn0260243,472,845,248,346,828,316,361
+FBgn0260386,19,21,9,9,10,6,19
+FBgn0260387,2,2,1,0,2,0,2
+FBgn0260388,767,804,274,384,749,375,395
+FBgn0260390,0,0,0,0,0,0,0
+FBgn0260392,1,2,0,0,0,0,0
+FBgn0260393,0,0,0,3,1,0,1
+FBgn0260394,0,0,0,0,0,0,0
+FBgn0260395,0,0,0,0,0,0,0
+FBgn0260396,0,0,0,0,0,0,0
+FBgn0260397,569,1051,343,364,796,335,414
+FBgn0260398,0,0,0,0,0,0,0
+FBgn0260399,557,884,261,359,817,356,425
+FBgn0260400,229,361,132,117,437,183,181
+FBgn0260401,0,0,0,0,0,0,0
+FBgn0260407,226,448,98,125,358,114,126
+FBgn0260428,0,0,0,0,0,0,0
+FBgn0260429,43,257,74,58,73,24,25
+FBgn0260430,0,0,0,1,1,3,0
+FBgn0260431,32,49,11,15,84,25,23
+FBgn0260432,0,0,0,0,0,0,0
+FBgn0260434,0,0,0,0,0,0,0
+FBgn0260436,2,0,0,0,1,0,0
+FBgn0260437,0,1,0,0,0,0,0
+FBgn0260439,7629,10755,4227,4844,10423,5074,5407
+FBgn0260440,35,62,20,27,37,19,27
+FBgn0260441,11363,16850,6355,9840,12813,7574,8338
+FBgn0260442,4321,6485,3239,3023,5739,3304,3145
+FBgn0260444,526,743,299,413,650,396,459
+FBgn0260446,0,1,0,0,0,0,0
+FBgn0260447,0,1,2,1,1,0,1
+FBgn0260450,756,888,466,517,1180,716,826
+FBgn0260451,0,0,0,0,0,0,0
+FBgn0260452,0,0,0,0,0,0,0
+FBgn0260453,0,0,0,0,0,0,0
+FBgn0260454,0,0,0,0,0,0,0
+FBgn0260455,0,0,0,0,0,0,0
+FBgn0260456,736,1521,418,471,1141,439,428
+FBgn0260457,2439,4303,1664,1579,2957,1845,1855
+FBgn0260458,3,10,0,2,8,4,1
+FBgn0260459,0,0,0,0,0,0,0
+FBgn0260460,375,717,178,267,694,322,306
+FBgn0260461,4,9,1,3,6,0,1
+FBgn0260462,5741,9263,3893,4732,8339,4383,4976
+FBgn0260463,44,17,66,95,93,82,98
+FBgn0260464,0,0,0,0,0,0,0
+FBgn0260465,1176,2617,1126,1023,2190,1107,1209
+FBgn0260466,0,0,0,0,0,0,0
+FBgn0260467,0,2,0,0,0,0,0
+FBgn0260468,0,1,0,0,1,0,0
+FBgn0260470,0,0,0,0,0,0,0
+FBgn0260471,1,0,0,0,0,1,0
+FBgn0260473,0,0,0,0,0,0,0
+FBgn0260474,0,0,0,1,5,2,0
+FBgn0260475,135,256,208,171,272,211,335
+FBgn0260477,11,8,7,3,17,2,4
+FBgn0260478,59,75,45,35,53,64,68
+FBgn0260479,0,0,0,0,0,0,0
+FBgn0260480,3,5,4,3,11,2,3
+FBgn0260481,22,19,9,10,14,10,7
+FBgn0260482,9,5,3,3,1,1,4
+FBgn0260484,75,253,138,94,325,176,160
+FBgn0260486,2606,4397,1696,1517,2970,1088,1076
+FBgn0260487,1,0,0,1,1,0,1
+FBgn0260499,2,2,0,0,2,1,0
+FBgn0260632,2769,4017,1320,1472,2917,1283,1474
+FBgn0260633,0,0,0,0,0,0,0
+FBgn0260634,2269,4389,1514,1404,3577,1704,1805
+FBgn0260635,10252,14940,5879,6642,14241,6862,7850
+FBgn0260639,1089,1422,516,639,1588,726,817
+FBgn0260642,0,0,1,0,0,1,0
+FBgn0260643,0,0,0,0,0,0,0
+FBgn0260644,0,0,0,0,0,0,0
+FBgn0260645,38,59,18,28,69,13,25
+FBgn0260646,1,0,0,1,2,1,2
+FBgn0260648,185,320,81,114,282,119,120
+FBgn0260653,9,17,8,7,15,6,9
+FBgn0260655,1113,1608,487,572,1390,495,569
+FBgn0260656,1,0,0,0,0,0,0
+FBgn0260657,31,59,19,12,38,16,25
+FBgn0260658,33,108,67,46,56,42,49
+FBgn0260659,653,816,288,339,837,362,435
+FBgn0260660,17,21,8,10,9,5,9
+FBgn0260713,0,0,0,0,0,0,0
+FBgn0260718,4,12,4,0,2,1,4
+FBgn0260719,1,0,2,1,1,0,0
+FBgn0260720,14,25,5,2,23,4,4
+FBgn0260721,0,0,0,0,0,0,0
+FBgn0260722,368,823,202,226,825,210,232
+FBgn0260723,78,112,11,15,121,16,19
+FBgn0260724,12030,18895,8198,7809,14070,8362,8620
+FBgn0260741,180,270,107,147,297,140,162
+FBgn0260742,1643,3095,1153,1254,2608,1255,1426
+FBgn0260743,350,405,146,215,404,177,184
+FBgn0260744,633,688,254,408,861,424,444
+FBgn0260745,8081,11473,4662,5622,6493,3910,4359
+FBgn0260746,841,1801,691,888,2100,976,1189
+FBgn0260747,2320,4567,1633,1775,3847,1579,1661
+FBgn0260748,5488,8708,3235,3356,6988,3138,3323
+FBgn0260749,948,1446,484,495,1309,413,487
+FBgn0260750,259,274,89,124,369,147,155
+FBgn0260753,19,29,11,11,51,17,28
+FBgn0260754,0,0,0,0,0,0,0
+FBgn0260755,431,682,216,309,698,297,303
+FBgn0260756,85,124,63,82,121,41,67
+FBgn0260757,1367,2233,913,770,2073,873,730
+FBgn0260758,15,15,9,9,23,11,5
+FBgn0260759,0,0,0,0,0,0,0
+FBgn0260760,0,0,0,0,0,0,0
+FBgn0260761,0,0,0,0,0,0,0
+FBgn0260762,0,0,0,0,0,0,0
+FBgn0260763,3,4,3,5,12,3,6
+FBgn0260764,3,0,3,1,6,3,1
+FBgn0260766,18,20,6,6,16,9,5
+FBgn0260767,335,517,163,193,522,235,255
+FBgn0260768,120,190,62,76,222,124,139
+FBgn0260770,0,0,0,0,0,0,0
+FBgn0260771,252,558,161,215,382,195,204
+FBgn0260775,0,0,0,0,0,0,0
+FBgn0260776,0,0,1,0,2,0,0
+FBgn0260777,0,0,0,0,1,1,0
+FBgn0260779,391,428,190,238,547,286,316
+FBgn0260780,22,43,11,13,31,16,25
+FBgn0260789,1135,1939,748,731,2016,857,925
+FBgn0260793,34,58,29,21,59,21,16
+FBgn0260794,6566,11853,4613,4370,10582,5593,5506
+FBgn0260795,8,19,6,2,23,10,11
+FBgn0260798,442,708,158,166,698,135,162
+FBgn0260799,1536,2117,579,559,2874,613,608
+FBgn0260812,0,1,0,0,0,0,0
+FBgn0260817,262,499,159,215,460,231,287
+FBgn0260855,657,1183,342,426,843,470,606
+FBgn0260856,336,479,148,266,427,221,277
+FBgn0260857,327,447,165,213,452,237,239
+FBgn0260858,984,1478,411,555,1135,457,571
+FBgn0260859,107,227,86,109,182,109,127
+FBgn0260860,251,480,105,164,322,173,200
+FBgn0260861,272,399,107,152,355,152,209
+FBgn0260862,118,217,61,77,147,71,87
+FBgn0260866,58,118,48,52,66,41,38
+FBgn0260867,0,0,0,1,0,0,0
+FBgn0260868,0,0,0,0,1,0,0
+FBgn0260869,0,0,0,0,0,0,0
+FBgn0260870,0,0,0,0,0,0,0
+FBgn0260871,1,1,3,2,5,2,2
+FBgn0260872,0,0,0,0,0,0,0
+FBgn0260873,0,0,0,0,0,0,0
+FBgn0260874,179,267,96,126,353,121,148
+FBgn0260932,42,54,17,13,69,16,32
+FBgn0260933,678,1053,436,438,1365,756,808
+FBgn0260934,6282,10745,4468,4201,7927,3882,4300
+FBgn0260935,455,649,266,294,568,307,300
+FBgn0260936,3162,5403,1983,2073,3499,1859,1988
+FBgn0260937,2004,2756,880,1037,2655,1079,1052
+FBgn0260938,2873,5335,2124,2065,3963,2030,2112
+FBgn0260939,745,1106,317,476,1234,458,478
+FBgn0260940,245,484,136,195,454,194,242
+FBgn0260941,1463,2225,794,833,1745,831,895
+FBgn0260942,0,2,0,0,1,1,0
+FBgn0260943,5,10,0,3,2,3,2
+FBgn0260944,853,1111,330,505,1235,603,486
+FBgn0260945,1211,2446,1025,1005,2553,1096,1213
+FBgn0260946,1603,2645,871,1019,2184,931,943
+FBgn0260952,18011,52876,20564,15611,31421,12691,12446
+FBgn0260953,0,0,0,0,0,0,0
+FBgn0260954,0,0,0,0,0,0,0
+FBgn0260955,0,0,0,0,0,0,0
+FBgn0260959,1669,2965,914,975,2259,949,960
+FBgn0260960,4544,6431,2066,2221,4629,1798,1906
+FBgn0260962,3617,4947,1883,2246,4610,2066,2263
+FBgn0260963,6,8,4,6,20,12,12
+FBgn0260964,5,14,2,0,9,3,2
+FBgn0260965,969,1856,589,470,1450,438,438
+FBgn0260966,741,1674,773,735,689,445,387
+FBgn0260967,1,2,3,0,0,1,0
+FBgn0260968,1,2,1,0,2,0,0
+FBgn0260969,0,0,2,0,1,0,0
+FBgn0260970,3050,4807,2105,2195,4353,2251,2452
+FBgn0260971,0,5,1,0,3,3,0
+FBgn0260972,885,1348,597,656,1073,618,681
+FBgn0260985,1328,1911,703,991,1663,921,1030
+FBgn0260986,396,656,227,317,542,323,306
+FBgn0260990,4523,7279,2890,3139,5344,2861,3135
+FBgn0260991,2410,4008,1631,1818,3314,1920,2146
+FBgn0260992,1160,2176,633,772,1461,511,583
+FBgn0260993,5,10,7,8,25,17,8
+FBgn0260996,0,2,0,0,0,0,1
+FBgn0261004,1611,2815,849,959,2597,1123,1323
+FBgn0261014,10223,11628,5539,6290,13071,7751,7987
+FBgn0261015,589,1343,359,341,533,170,183
+FBgn0261016,68,99,39,24,84,40,35
+FBgn0261019,0,0,0,0,0,0,0
+FBgn0261020,1704,1585,795,1084,2181,979,1123
+FBgn0261041,1413,3039,1020,1134,2115,1053,984
+FBgn0261046,0,0,0,0,0,0,0
+FBgn0261049,303,554,160,178,465,169,195
+FBgn0261053,92,134,48,64,177,108,89
+FBgn0261054,0,0,0,0,0,0,0
+FBgn0261055,0,4,2,0,4,1,0
+FBgn0261056,0,0,0,0,0,0,0
+FBgn0261057,0,0,0,0,0,0,0
+FBgn0261058,3,0,0,0,1,1,0
+FBgn0261059,7,10,2,1,11,3,4
+FBgn0261060,0,0,0,0,0,0,0
+FBgn0261061,0,1,0,0,1,0,0
+FBgn0261064,810,1500,496,600,1129,504,567
+FBgn0261065,842,1255,455,591,1217,582,629
+FBgn0261067,216,477,135,157,300,120,137
+FBgn0261068,577,586,202,297,818,308,315
+FBgn0261085,9,18,10,7,18,7,7
+FBgn0261086,20,23,12,13,17,13,10
+FBgn0261089,14,41,17,15,39,15,13
+FBgn0261090,5,29,10,7,24,2,7
+FBgn0261108,684,1340,413,403,1151,479,444
+FBgn0261109,379,414,202,241,715,353,370
+FBgn0261111,246,325,135,204,301,169,205
+FBgn0261112,450,669,226,286,660,310,420
+FBgn0261113,12014,26132,9216,9611,23253,10917,12499
+FBgn0261119,1647,2201,829,930,1690,951,1105
+FBgn0261238,739,1213,518,504,1773,953,1048
+FBgn0261239,814,1195,446,459,1148,458,449
+FBgn0261241,1830,2719,905,1060,2573,1019,1036
+FBgn0261243,4646,6813,2519,2893,6034,3266,3612
+FBgn0261244,1861,2345,831,942,2533,1280,1329
+FBgn0261245,19,28,8,13,26,6,12
+FBgn0261258,1525,3642,1118,1108,4416,1765,1959
+FBgn0261259,366,867,352,340,584,290,310
+FBgn0261260,6558,9716,4447,4281,10109,5961,5691
+FBgn0261261,1614,1971,907,939,1533,840,808
+FBgn0261262,4,12,3,2,13,2,3
+FBgn0261263,5216,8634,3689,3587,8863,4835,4909
+FBgn0261266,157,223,60,85,160,73,107
+FBgn0261267,1,0,0,0,0,0,0
+FBgn0261268,2123,4263,1389,1435,3451,1399,1564
+FBgn0261269,263,407,111,115,516,161,167
+FBgn0261270,2993,3465,1265,1673,2714,1501,1754
+FBgn0261274,929,1660,570,630,1351,532,645
+FBgn0261276,3049,4630,1795,2073,4609,2226,2561
+FBgn0261277,7,9,5,6,14,10,13
+FBgn0261278,962,1526,530,660,1852,941,1029
+FBgn0261279,1015,1439,560,611,1459,686,660
+FBgn0261283,20836,26874,12623,13831,20104,12557,13721
+FBgn0261284,26,32,11,13,139,66,92
+FBgn0261285,589,854,357,302,648,277,263
+FBgn0261286,1215,1891,567,624,1564,638,600
+FBgn0261287,8,20,8,7,29,1,6
+FBgn0261289,0,0,0,0,1,0,0
+FBgn0261290,0,0,0,0,0,0,0
+FBgn0261291,0,0,0,0,1,0,0
+FBgn0261292,1,0,0,0,0,0,0
+FBgn0261293,0,0,0,0,0,0,0
+FBgn0261294,0,0,0,0,0,0,0
+FBgn0261341,4,5,3,1,14,8,8
+FBgn0261342,0,1,2,0,1,0,3
+FBgn0261349,17,56,10,15,38,15,8
+FBgn0261350,1,3,2,1,2,1,1
+FBgn0261353,0,0,0,0,0,0,0
+FBgn0261356,2,3,1,0,2,2,0
+FBgn0261357,0,0,0,0,0,0,0
+FBgn0261358,0,0,0,0,0,0,0
+FBgn0261359,0,0,17,10,0,24,22
+FBgn0261360,0,0,1,0,0,0,1
+FBgn0261361,0,0,0,1,0,0,0
+FBgn0261362,2433,6403,2307,2722,14563,7869,7038
+FBgn0261363,778,903,438,527,737,497,554
+FBgn0261373,66,98,30,23,83,28,25
+FBgn0261379,0,0,1,0,0,1,0
+FBgn0261380,407,667,212,240,624,213,266
+FBgn0261381,0,0,0,0,0,0,0
+FBgn0261383,1250,2210,909,856,1658,849,835
+FBgn0261385,5085,6816,3059,3316,6347,3873,4148
+FBgn0261387,1366,1970,640,626,2271,666,679
+FBgn0261388,4,12,9,7,26,16,13
+FBgn0261393,7,10,4,4,7,5,7
+FBgn0261394,2001,2571,976,1339,2561,1532,1638
+FBgn0261395,0,0,0,0,0,0,0
+FBgn0261396,2496,3566,1263,1549,3600,1785,2039
+FBgn0261397,2210,2923,1159,1303,3113,1396,1410
+FBgn0261401,0,0,0,0,0,0,1
+FBgn0261402,0,1,1,1,2,0,0
+FBgn0261403,2671,3556,1077,977,4481,1021,979
+FBgn0261429,9,14,4,8,21,11,6
+FBgn0261430,17,30,9,9,18,3,3
+FBgn0261434,0,2,0,0,0,1,0
+FBgn0261436,829,1130,506,605,1073,512,633
+FBgn0261437,307,315,110,119,404,131,150
+FBgn0261439,2981,3901,1766,2014,3561,2266,2476
+FBgn0261444,519,1019,472,398,1366,748,781
+FBgn0261445,8213,11742,4773,5667,9032,4795,5116
+FBgn0261446,84,84,48,49,74,37,35
+FBgn0261451,9073,19654,7945,7649,17119,9858,9427
+FBgn0261456,919,1332,529,563,1261,643,747
+FBgn0261458,6714,9834,4127,4508,9198,4623,4935
+FBgn0261461,2408,4271,1694,1755,2936,1636,1843
+FBgn0261477,1464,2355,834,852,1852,770,949
+FBgn0261479,595,693,290,369,662,361,360
+FBgn0261501,2,2,0,0,0,0,0
+FBgn0261502,0,0,0,0,0,0,0
+FBgn0261503,0,0,0,0,0,0,0
+FBgn0261504,0,0,0,0,0,0,0
+FBgn0261506,0,0,0,0,1,0,1
+FBgn0261507,1,2,0,1,1,1,0
+FBgn0261508,5,4,2,4,5,4,0
+FBgn0261509,38,60,28,28,49,38,30
+FBgn0261514,1,4,3,1,1,1,0
+FBgn0261522,0,0,0,0,1,0,0
+FBgn0261523,0,0,0,1,0,0,0
+FBgn0261524,2087,3333,1151,1293,2716,1192,1305
+FBgn0261526,1,0,0,0,0,0,0
+FBgn0261529,2,2,0,5,8,2,5
+FBgn0261530,604,912,284,335,845,348,367
+FBgn0261531,1,0,0,0,0,0,0
+FBgn0261532,1470,1992,823,1029,1810,1002,989
+FBgn0261534,2,1,0,0,0,1,0
+FBgn0261535,861,1121,414,488,939,455,517
+FBgn0261536,0,0,0,0,0,0,0
+FBgn0261537,0,0,0,0,0,0,0
+FBgn0261538,0,0,0,0,0,0,0
+FBgn0261545,1862,3577,1433,1386,2424,940,1004
+FBgn0261546,28,74,29,39,17,11,8
+FBgn0261547,785,1377,572,505,788,406,424
+FBgn0261548,1636,3085,1187,1118,2973,1387,1564
+FBgn0261549,438,1033,429,420,919,437,537
+FBgn0261550,12053,16368,7813,7801,11908,6875,7372
+FBgn0261551,4264,9312,3923,3818,7407,4471,4649
+FBgn0261552,7022,16750,5224,4760,4233,1335,1394
+FBgn0261553,1360,2712,1085,1097,1823,931,1015
+FBgn0261554,1506,1859,826,778,1680,890,896
+FBgn0261555,68,110,29,34,124,68,75
+FBgn0261556,3053,4363,2064,1889,4203,2641,2968
+FBgn0261560,2373,4455,1278,1657,1866,872,1052
+FBgn0261561,61,123,37,52,162,71,77
+FBgn0261562,445,708,273,317,528,295,355
+FBgn0261563,1207,2497,1197,1114,3733,1909,1839
+FBgn0261564,1258,2042,821,938,1754,818,1004
+FBgn0261565,872,1029,475,469,914,440,421
+FBgn0261566,0,0,0,0,0,0,0
+FBgn0261567,0,0,0,0,0,0,0
+FBgn0261568,0,0,0,0,0,0,1
+FBgn0261569,0,1,0,0,2,0,0
+FBgn0261570,3296,4910,2156,2060,5077,3069,3022
+FBgn0261571,0,0,0,0,1,0,0
+FBgn0261572,4,13,4,11,7,3,3
+FBgn0261573,2651,3653,1571,1612,3334,1848,1908
+FBgn0261574,6385,9318,3110,2819,10455,3508,3047
+FBgn0261575,6,53,1,3,42,3,4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/expose-outputs.sh	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,6 @@
+# change directory to tool outputs directory
+cd ${REPORT_FILES_PATH}
+
+# copy outputs from tool outputs directory to corresponding galaxy output path
+cp deseq2.html ${REPORT}
+cp padj-sorted-significant-genes.txt ${X_J}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/getopt_specification.csv	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,13 @@
+short flag,argument mask,data type,variable name
+o,1,character,report
+d,1,character,report.files_path
+A,1,character,count_data
+B,1,character,column_data
+C,1,character,design_formula
+D,1,character,treatment_name
+E,1,character,treated
+F,1,character,untreated
+G,1,character,test_type
+H,1,character,fit_type
+I,1,character,alpha
+J,1,character,significant_genes
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/helper.R	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,82 @@
+#' \code{getopt_specification_matrix} returns a getopt specification matrix.
+#'
+#' @param specification_file a cvs file within the \code{galaxy_tool_directory} which stores getopt specification matrix data.
+#' The first column are short flags, the second column are argument masks, the third column
+#' is data types. The fourth column are variable names used in the tool XML. These three columns are required.
+#' @param gtg_name the name of a running GTG.
+getopt_specification_matrix = function(specification_file,
+                                       gtg_name = 'gtg',
+                                       tool_dir = Sys.getenv('TOOL_DIR')) {
+  df = read.csv(
+    paste0(tool_dir, '/', specification_file),
+    header = TRUE,
+    stringsAsFactors = FALSE
+  )
+  # check if there are duplicated short flags
+  short_flags = df[, 1]
+  if (length(unique(short_flags)) < length(short_flags)) {
+    cat('----Duplicated short flags found ----\n')
+    cat('short flags: ', df[, 1][duplicated(df[, 1])], '\n')
+    stop('Duplicated short flags are not allowed.')
+  }
+  
+  # use short flags to generate long flags
+  long_flags = paste0('X_', df[, 1])
+  
+  # specification matrix
+  df2 = data.frame(
+    long_flags = long_flags,
+    short_flags = df[, 1],
+    argument_mask = df[, 2],
+    data_type = df[, 3]
+  )
+  
+  as.matrix(df2)
+}
+
+
+
+#' \code{file_tree} generate file tree of a directory in the format of HTML lists.
+#'
+#' @param dir the path to the directory for generating the file tree.
+#' @param output_dir the REPORT_FILES_PATH folder name, which has the name style: dataset_NUMBER_files.
+# define a recursive function to build html string of the file tree
+file_tree = function(dir = '.') {
+  # get the OUTPUT_DIR folder data: dataset_NUMBER_files
+  report_files_path = Sys.getenv('REPORT_FILES_PATH')
+  output_dir = tail(strsplit(report_files_path, '/')[[1]], 1)
+  
+  files = list.files(path = dir,
+                     recursive = FALSE,
+                     full.names = TRUE)
+  # files also include directorys, need to remove directorys
+  files = files[!dir.exists(files)]
+  dirs = list.dirs(path = dir,
+                   recursive = FALSE,
+                   full.names = TRUE)
+  tags$ul({
+    if (length(files) > 0) {
+      lapply(files, function(x) {
+        path_end = tail(strsplit(x, '/')[[1]], 1)
+        href_path = strsplit(x, paste0(output_dir, '/'))[[1]][2]
+        li_item = tags$li(tags$a(path_end, href = href_path))
+        li_item$attribs = list('data-jstree' = '{"icon":"jstree-file"}')
+        li_item
+      })
+    }
+  },
+  {
+    if (length(dirs) > 0) {
+      lapply(dirs, function(x) {
+        path_end = tail(strsplit(x, '/')[[1]], 1)
+        # hide vakata-jstree-3.3.5 folder
+        if (path_end != 'vakata-jstree-3.3.5') {
+          # x_path = strsplit(x, paste0(output_dir, '/'))[[1]][2]
+          li_item = tags$li(path_end, file_tree(x))
+          li_item$attribs = list('data-jstree' = '{"icon":"jstree-folder"}')
+          li_item
+        }
+      })
+    }
+  })
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vakata-jstree-3.3.5/.gitignore	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,14 @@
+/debug
+/jstree.sublime-project
+/jstree.sublime-workspace
+/bower_components
+/node_modules
+/site
+/nuget
+/demo/filebrowser/data/root
+/npm.txt
+/libs
+/docs
+/dist/libs
+/.vscode
+/.idea
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vakata-jstree-3.3.5/LICENSE-MIT	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,22 @@
+Copyright (c) 2014 Ivan Bozhanov
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vakata-jstree-3.3.5/README.md	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,663 @@
+# jstree
+
+[jsTree](http://www.jstree.com/) is jquery plugin, that provides interactive trees. It is absolutely free, [open source](https://github.com/vakata/jstree) and distributed under the MIT license.
+
+jsTree is easily extendable, themable and configurable, it supports HTML & JSON data sources, AJAX & async callback loading.
+
+jsTree functions properly in either box-model (content-box or border-box), can be loaded as an AMD module, and has a built in mobile theme for responsive design, that can easily be customized. It uses jQuery's event system, so binding callbacks on various events in the tree is familiar and easy.
+
+You also get:
+ * drag & drop support
+ * keyboard navigation
+ * inline edit, create and delete
+ * tri-state checkboxes
+ * fuzzy searching
+ * customizable node types
+
+_Aside from this readme you can find a lot more info on [jstree.com](http://www.jstree.com) & [the discussion group](https://groups.google.com/forum/#!forum/jstree)_.
+
+---
+
+<!-- MarkdownTOC depth=0 autolink=true bracket=round -->
+
+- [Getting Started](#getting-started)
+  - [Include all neccessary files](#include-all-neccessary-files)
+  - [Populating a tree using HTML](#populating-a-tree-using-html)
+  - [Populating a tree using an array \(or JSON\)](#populating-a-tree-using-an-array-or-json)
+    - [The required JSON format](#the-required-json-format)
+  - [Populating the tree using AJAX](#populating-the-tree-using-ajax)
+  - [Populating the tree using AJAX and lazy loading nodes](#populating-the-tree-using-ajax-and-lazy-loading-nodes)
+  - [Populating the tree using a callback function](#populating-the-tree-using-a-callback-function)
+- [Working with events](#working-with-events)
+- [Interacting with the tree using the API](#interacting-with-the-tree-using-the-api)
+- [More on configuration](#more-on-configuration)
+- [Plugins](#plugins)
+  - [checkbox](#checkbox)
+  - [contextmenu](#contextmenu)
+  - [dnd](#dnd)
+  - [massload](#massload)
+  - [search](#search)
+  - [sort](#sort)
+  - [state](#state)
+  - [types](#types)
+  - [unique](#unique)
+  - [wholerow](#wholerow)
+  - [More plugins](#more-plugins)
+- [PHP demos moved to new repository](#php-demos-moved-to-new-repository)
+- [License & Contributing](#license--contributing)
+
+<!-- /MarkdownTOC -->
+
+
+---
+
+## Getting Started
+
+### Include all neccessary files
+To get started you need 3 things in your page:
+ 1. jQuery (anything above 1.9.1 will work)
+ 2. A jstree theme (there is only one theme supplied by default)
+ 3. The jstree source file
+
+```html
+<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
+
+<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/jstree/3.3.3/themes/default/style.min.css" />
+<script src="//cdnjs.cloudflare.com/ajax/libs/jstree/3.3.3/jstree.min.js"></script>
+```
+
+_If you decide to host jstree yourself - the files are located in the `dist` folder. You can safely ignore the `dist/libs` folder._
+
+---
+
+### Populating a tree using HTML
+
+Now we are all set to create a tree, inline HTML is the easiest option (suitable for menus). All you need to do is select a node (using a jQuery selector) and invoke the `.jstree()` function to let jstree know you want to render a tree inside the selected node. `$.jstree.create(element)` can be used too.
+
+```html
+<div id="container">
+  <ul>
+    <li>Root node
+      <ul>
+        <li>Child node 1</li>
+        <li>Child node 2</li>
+      </ul>
+    </li>
+  </ul>
+</div>
+<script>
+$(function() {
+  $('#container').jstree();
+});
+</script>
+```
+
+[view result](http://jsfiddle.net/vakata/2kwkh2uL/)
+
+_You can add a few options when rendering a node using a data-attribute (note the quotes):_
+```html
+<li data-jstree='{ "selected" : true, "opened" : true }'>Root node ...
+```
+
+---
+
+### Populating a tree using an array (or JSON)
+
+Building trees from HTML is easy, but it is not very flexible, inline JS data is a better option:
+
+```html
+<div id="container"></div>
+<script>
+$(function() {
+  $('#container').jstree({
+    'core' : {
+      'data' : [
+        { "text" : "Root node", "children" : [
+            { "text" : "Child node 1" },
+            { "text" : "Child node 2" }
+          ]
+        }
+      ]
+    }
+  });
+});
+</script>
+```
+
+[view result](http://jsfiddle.net/vakata/2kwkh2uL/4478/)
+
+Unlike the previous simple HTML example, this time the `.jstree()` function accepts a config object.
+
+For now it is important to note that jstree will try to parse any data you specify in the  `core.data` key and use it to create a tree. As seen in the previous example, if this key is missing jstree will try to parse the inline HTML of the container.
+
+#### The required JSON format
+
+The data you use must be in a specific format, each branch of the tree is represented by an object, which must at least have a `text` key. The `children` key can be used to add children to the branch, it should be an array of objects.
+
+_Keep in mind, you can use a simple string instead of an object if all you need is node with the given text, the above data can be written as:_
+
+```js
+[ { "text" : "Root node", "children" : [ "Child node 1", "Child node 2" ] } ]
+```
+
+There are other available options for each node, only set them if you need them like:
+
+ * `id` - makes if possible to identify a node later (will also be used as a DOM ID of the `LI` node). _Make sure you do not repeat the same ID in a tree instance (that would defeat its purpose of being a unique identifier and may cause problems for jstree)_.
+ * `icon` - a string which will be used for the node's icon - this can either be a path to a file, or a className (or list of classNames), which you can style in your CSS (font icons also work).
+ * `data` - this can be anything you want - it is metadata you want attached to the node - you will be able to access and modify it any time later - it has no effect on the visuals of the node.
+ * `state` - an object specifyng a few options about the node:
+   - `selected` - if the node should be initially selected
+   - `opened` - if the node should be initially opened
+   - `disabled` - if the node should be disabled
+   - `checked` - __checkbox plugin specific__ - if the node should be checked (only used when `tie_selection` is `false`, which you should only do if you really know what you are doing)
+   - `undetermined` - __checkbox plugin specific__ - if the node should be rendered in undetermined state (only used with lazy loading and when the node is not yet loaded, otherwise this state is automatically calculated).
+ * `type` - __types plugin specific__ - the type of the nodes (should be defined in the types config), if not set `"default"` is assumed.
+ * `li_attr` - object of values which will be used to add HTML attributes on the resulting `LI` DOM node.
+ * `a_attr` - object of values which will be used to add HTML attributes on the resulting `A` node.
+
+Here is a new demo with some of those properties set:
+
+```html
+<div id="container"></div>
+<script>
+$(function() {
+  $('#container').jstree({
+    'core' : {
+      'data' : [
+          {
+              "text" : "Root node",
+              "state" : {"opened" : true },
+              "children" : [
+                  {
+                    "text" : "Child node 1",
+                    "state" : { "selected" : true },
+                    "icon" : "glyphicon glyphicon-flash"
+                  },
+                  { "text" : "Child node 2", "state" : { "disabled" : true } }
+              ]
+        }
+      ]
+    }
+  });
+});
+</script>
+```
+
+[view result](http://jsfiddle.net/vakata/2kwkh2uL/4479/)
+
+---
+
+### Populating the tree using AJAX
+
+Building off of the previous example, let's see how to have jstree make AJAX requests for you.
+
+```html
+<div id="container"></div>
+<script>
+$(function() {
+  $('#container').jstree({
+    'core' : {
+      'data' : {
+        "url" : "//www.jstree.com/fiddle/",
+        "dataType" : "json" // needed only if you do not supply JSON headers
+      }
+    }
+  });
+});
+</script>
+```
+
+The server response is:
+```json
+[{
+  "id":1,"text":"Root node","children":[
+    {"id":2,"text":"Child node 1"},
+    {"id":3,"text":"Child node 2"}
+  ]
+}]
+```
+
+[view result](http://jsfiddle.net/vakata/2kwkh2uL/4480/)
+
+Instead of a JS array, you can set `core.data` to a [jQuery AJAX config](http://api.jquery.com/jQuery.ajax/). 
+jsTree will hit that URL, and provided you return properly formatted JSON it will be displayed.
+
+_If you cannot provide proper JSON headers, set `core.data.dataType` to `"json"`._
+
+The ids in the server response make it possible to identify nodes later (which we will see in the next few demos), but they are not required.
+
+__WHEN USING IDS MAKE SURE THEY ARE UNIQUE INSIDE A PARTICULAR TREE__
+
+---
+
+### Populating the tree using AJAX and lazy loading nodes
+
+Lazy loading means nodes will be loaded when they are needed. Imagine you have a huge amount of nodes you want to show, but loading them with a single request is way too much traffic. Lazy loading makes it possible to load nodes on the fly - jstree will perform AJAX requests as the user browses the tree.
+
+Here we take our previous example, and lazy load the "Child node 1" node.
+
+```html
+<div id="container"></div>
+<script>
+$(function() {
+  $('#container').jstree({
+    'core' : {
+      'data' : {
+        "url" : "//www.jstree.com/fiddle/?lazy",
+        "data" : function (node) {
+          return { "id" : node.id };
+        }
+      }
+    }
+  });
+});
+</script>
+```
+
+The initial server response is:
+```json
+[{
+  "id":1,"text":"Root node","children":[
+    {"id":2,"text":"Child node 1","children":true},
+    {"id":3,"text":"Child node 2"}
+  ]
+}]
+```
+
+[view result](http://jsfiddle.net/vakata/2kwkh2uL/4481/)
+
+Now to focus on what is different. First off the `"data"` config option of the data object. If you check with jQuery, it is supposed to be a string or an object. But jstree makes it possible to set a function.
+
+Each time jstree needs to make an AJAX call this function will be called and will receive a single parameter - the node that is being loaded. The return value of this function will be used as the actual `"data"` of the AJAX call. To understand better open up the demo and see the requests go off in the console.
+
+You will notice that the first request goes off to:
+`http://www.jstree.com/fiddle?lazy&id=#`
+`#` is the special ID that the function receives when jstree needs to load the root nodes.
+
+Now go ahead and open the root node - two children will be shown, but no request will be made - that is because we loaded those children along with the first request.
+
+Onto the next difference - "Child node 1" appears closed - that is because in the data we supplied `true` as the `"children"` property of this node (you can see it in the server response). This special value indicated to jstree, that it has to lazy load the "Child node 1" node.
+
+Proceed and open this node - you will see a next request fire off to:
+`http://www.jstree.com/fiddle?lazy&id=2`
+ID is set to `2` because the node being loaded has an ID of `2`, and we have configured jstree to send the node ID along with the AJAX request (the `data` function).
+
+The server response is:
+```json
+["Child node 3","Child node 4"]
+```
+
+_You can also set `"url"` to a function and it works exactly as with `"data"` - each time a request has to be made, jstree will invoke your function and the request will go off to whatever you return in this function. This is useful when dealing with URLs like: `http://example.com/get_children/1`._
+
+### Populating the tree using a callback function
+
+Sometimes you may not want jsTree to make AJAX calls for you - you might want to make them yourself, or use some other method of populating the tree. In that case you can use a callback function.
+
+```html
+<div id="container"></div>
+<script>
+$(function() {
+  $('#container').jstree({
+    'core' : {
+      'data' : function (node, cb) {
+        if(node.id === "#") {
+          cb([{"text" : "Root", "id" : "1", "children" : true}]);
+        }
+        else {
+          cb(["Child"]);
+        }
+      }
+    }
+  });
+});
+</script>
+```
+
+[view result](http://jsfiddle.net/vakata/2kwkh2uL/4482/)
+
+As you can see your function will receive two arguments - the node whose children need to be loaded and a callback function to call with the data once you have it. The data follows the same familiar JSON format and lazy loading works just as with AJAX (as you can see in the above example).
+
+---
+
+## Working with events
+
+jstree provides a lot of events to let you know something happened with the tree. The events are the same regardless of how you populate the tree.
+Let's use the most basic event `changed` - it fires when selection on the tree changes:
+
+```html
+<div id="container"></div>
+<script>
+$(function() {
+  $('#container').jstree({
+    'core' : {
+      'data' : [
+        {"id" : 1, "text" : "Node 1"},
+        {"id" : 2, "text" : "Node 2"},
+      ]
+    }
+  });
+  $('#container').on("changed.jstree", function (e, data) {
+    console.log("The selected nodes are:");
+    console.log(data.selected);
+  });
+});
+</script>
+```
+
+[view result](http://jsfiddle.net/vakata/2kwkh2uL/4483/)
+
+All jstree events fire in a special `".jstree"` namespace - this is why we listen for `"changed.jstree"`. The handler itself receives one additional parameter - it will be populated with all you need to know about the event that happened. In this case `data.selected` is an array of selected node IDs (please note, that if you have not specified IDs they will be autogenerated).
+
+Let's extend this a bit and log out the text of the node instead of the ID.
+
+```js
+$('#container').on("changed.jstree", function (e, data) {
+  console.log(data.instance.get_selected(true)[0].text);
+  console.log(data.instance.get_node(data.selected[0]).text);
+});
+```
+
+The two rows above achieve exactly the same thing - get the text of the first selected node.
+
+In the `data` argument object you will always get an `instance` key - that is a reference to the tree instance, so that you can easily invoke methods.
+
+__All available functions and events are documented in the API docs__
+
+---
+
+## Interacting with the tree using the API
+
+We scratched the surface on interacting with the tree in the previous example. Let's move on to obtaining an instance and calling a method on this instance:
+
+```html
+<button>Select node 1</button>
+<div id="container"></div>
+<script>
+$(function() {
+  $('#container').jstree({
+    'core' : {
+      'data' : [
+        {"id" : 1, "text" : "Node 1"},
+        {"id" : 2, "text" : "Node 2"},
+      ]
+    }
+  });
+  $('button').on("click", function () {
+    var instance = $('#container').jstree(true);
+    instance.deselect_all();
+    instance.select_node('1');
+  });
+});
+</script>
+```
+
+[view result](http://jsfiddle.net/vakata/2kwkh2uL/4484/)
+
+The above example shows how to obtain a reference to a jstree instance (again with a selector, but this time instead of a config, we pass a boolean `true`), and call a couple of methods - the latter one is selecting a node by its ID.
+
+Methods can also be invoked like this:
+
+```js
+$('#container').jstree("select_node", "1");
+```
+
+__All available functions and events are documented in the API docs__
+
+## More on configuration
+
+We already covered the config object in general (when we specified inline & AJAX data sources).
+
+```js
+$("#tree").jstree({ /* config object goes here */ });
+```
+
+Each key in the config object corresponds to a plugin, and the value of that key is the configuration for that plugin. There are also two special keys `"core"` and `"plugins"`:
+ * `"core"` stores the core configuration options
+ * `"plugins"` is an array of plugin names (strings) you want active on the instance
+
+When configuring you only need to set values that you want to be different from the defaults.
+
+__All config options and defaults are documented in the API docs__
+
+```js
+$("#tree").jstree({
+  "core" : { // core options go here
+    "multiple" : false, // no multiselection
+    "themes" : {
+      "dots" : false // no connecting dots between dots
+    }
+  },
+  "plugins" : ["state"] // activate the state plugin on this instance
+});
+```
+
+[view result](http://jsfiddle.net/vakata/2kwkh2uL/4485/)
+
+We will cover all plugins further down.
+
+__Keep in mind by default all modifications to the structure are prevented - that means drag'n'drop, create, rename, delete will not work unless you enable them.__
+
+```js
+$("#tree").jstree({
+  "core" : {
+    "check_callback" : true, // enable all modifications
+  },
+  "plugins" : ["dnd","contextmenu"]
+});
+```
+
+[view result](http://jsfiddle.net/vakata/2kwkh2uL/4486/)
+
+`"core.check_callback"` can also be set to a function, that will be invoked every time a modification is about to happen (or when jstree needs to check if a modification is possible). If you return `true` the operation will be allowed, a value of `false` means it will not be allowed. The possible operation you can expect are `create_node`, `rename_node`, `delete_node`, `move_node` and `copy_node`. The `more` parameter will contain various information provided by the plugin that is invoking the check. For example the DND plugin will provide an object containing information about the move or copy operation that is being checked - is it a multi tree operation, which node is currently hovered, where the insert arrow is pointing - before, after or inside, etc.
+
+```js
+$("#tree").jstree({
+  "core" : {
+    "check_callback" : function (operation, node, parent, position, more) {
+      if(operation === "copy_node" || operation === "move_node") {
+        if(parent.id === "#") {
+          return false; // prevent moving a child above or below the root
+        }
+      },
+      return true; // allow everything else
+    }
+  },
+  "plugins" : ["dnd","contextmenu"]
+});
+```
+
+[view result](http://jsfiddle.net/vakata/2kwkh2uL/4487/)
+
+The `more` parameter you receive contains other information related to the check being performed.
+
+__For example__: `move_node` & `copy_node` checks will fire repeatedly while the user drags a node, if the check was triggered by the `dnd` plugin `more` will contain a `dnd` key, which will be set to `true`.
+You can check for `more.dnd` and only perform a certain action if `dnd` triggered the check.
+If you only want to perform an operation when a node is really about to be dropped check for `more.core`.
+
+## Plugins
+
+jsTree comes with a few plugin bundled, but they will only modify your tree if you activate them using the `"plugins"` config option. Here is a brief description of each plugin. You can read more on the available config options for each plugin in the API docs.
+
+### checkbox
+Renders a checkbox icon in front of each node, making multiselection easy. It also has a "tri-state" option, meaning a node with some of its children checked will get a "square" icon.
+
+_Keep in mind that if any sort of cascade is enabled, disabled nodes may be checked too (not by themselves, but for example when a parent of a disabled node is checked and selection is configured to cascade down)._
+
+```js
+$("#tree").jstree({
+  "plugins" : ["checkbox"]
+});
+```
+
+[view result](http://jsfiddle.net/vakata/2kwkh2uL/4488/)
+
+### contextmenu
+Makes it possible to right click nodes and shows a list of configurable actions in a menu.
+
+```js
+$("#tree").jstree({
+  "core" : { "check_callback" : true }, // so that modifying operations work
+  "plugins" : ["contextmenu"]
+});
+```
+
+[view result](http://jsfiddle.net/vakata/2kwkh2uL/4489/)
+
+### dnd
+Makes it possible to drag and drop tree nodes and rearrange the tree.
+
+```js
+$("#tree").jstree({
+  "core" : { "check_callback" : true }, // so that operations work
+  "plugins" : ["dnd"]
+});
+```
+
+[view result](http://jsfiddle.net/vakata/2kwkh2uL/4490/)
+
+### massload
+Makes it possible to load multiple nodes in a single go (for a lazy loaded tree).
+
+```js
+$("#tree").jstree({
+  "core" : {
+    "data" : { .. AJAX config .. }
+  },
+  "massload" : {
+    "url" : "/some/path",
+    "data" : function (nodes) {
+      return { "ids" : nodes.join(",") };
+    }
+  },
+  "plugins" : [ "massload", "state" ]
+});
+```
+
+### search
+Adds the possibility to search for items in the tree and show only matching nodes. It also has AJAX / callback hooks, so that search will work on lazy loaded trees too.
+
+```html
+<form id="s">
+  <input type="search" id="q" />
+  <button type="submit">Search</button>
+</form>
+<script>
+$("#container").jstree({
+  "plugins" : ["search"]
+});
+$("#s").submit(function(e) {
+  e.preventDefault();
+  $("#container").jstree(true).search($("#q").val());
+});
+</script>
+```
+
+[view result](http://jsfiddle.net/vakata/2kwkh2uL/4491/)
+
+### sort
+Automatically arranges all sibling nodes according to a comparison config option function, which defaults to alphabetical order.
+
+```js
+$("#tree").jstree({
+  "plugins" : ["sort"]
+});
+```
+
+[view result](http://jsfiddle.net/vakata/2kwkh2uL/4492/)
+
+### state
+Saves all opened and selected nodes in the user's browser, so when returning to the same tree the previous state will be restored.
+
+```js
+$("#tree").jstree({
+  // the key is important if you have multiple trees in the same domain
+  "state" : { "key" : "state_demo" },
+  "plugins" : ["state"]
+});
+```
+
+[view result](http://jsfiddle.net/vakata/2kwkh2uL/4493/)
+
+### types
+Makes it possible to add a "type" for a node, which means to easily control nesting rules and icon for groups of nodes instead of individually. To set a node type add a type property to the node structure.
+
+```js
+$("#tree").jstree({
+  "types" : {
+    "default" : {
+      "icon" : "glyphicon glyphicon-flash"
+    },
+    "demo" : {
+      "icon" : "glyphicon glyphicon-ok"
+    }
+  },
+  "plugins" : ["types"]
+});
+```
+
+[view result](http://jsfiddle.net/vakata/2kwkh2uL/4494/)
+
+### unique
+Enforces that no nodes with the same name can coexist as siblings - prevents renaming and moving nodes to a parent, which already contains a node with the same name.
+
+```js
+$("#tree").jstree({
+  "plugins" : ["unique"]
+});
+```
+
+[view result](http://jsfiddle.net/vakata/2kwkh2uL/4495/)
+
+### wholerow
+Makes each node appear block level which makes selection easier. May cause slow down for large trees in old browsers.
+
+```js
+$("#tree").jstree({
+  "plugins" : ["wholerow"]
+});
+```
+
+[view result](http://jsfiddle.net/vakata/2kwkh2uL/4496/)
+
+### More plugins
+If you create your own plugin (or download a 3rd party one) you must include its source on the page and list its name in the `"plugins"` config array.
+
+```js
+// conditional select
+(function ($, undefined) {
+  "use strict";
+  $.jstree.defaults.conditionalselect = function () { return true; };
+  $.jstree.plugins.conditionalselect = function (options, parent) {
+    this.activate_node = function (obj, e) {
+      if(this.settings.conditionalselect.call(this, this.get_node(obj))) {
+        parent.activate_node.call(this, obj, e);
+      }
+    };
+  };
+})(jQuery);
+$("#tree").jstree({
+  "conditionalselect" : function (node) {
+    return node.text === "Root node" ? false : true;
+  },
+  "plugins" : ["conditionalselect"]
+});
+```
+
+[view result](http://jsfiddle.net/vakata/2kwkh2uL/4497/)
+
+As seen here when creating a plugin you can define a default config, add your own functions to jstree, or override existing ones while maintaining the ability to call the overridden function.
+
+## PHP demos moved to new repository
+https://github.com/vakata/jstree-php-demos
+
+## License & Contributing
+
+_Please do NOT edit files in the "dist" subdirectory as they are generated via grunt. You'll find source code in the "src" subdirectory!_
+
+If you want to you can always [donate a small amount][paypal] to help the development of jstree.
+
+[paypal]: https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=paypal@vakata.com&currency_code=USD&amount=&return=http://jstree.com/donation&item_name=Buy+me+a+coffee+for+jsTree
+
+Copyright (c) 2014 Ivan Bozhanov (http://vakata.com)
+
+Licensed under the [MIT license](http://www.opensource.org/licenses/mit-license.php).
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vakata-jstree-3.3.5/bower.json	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,33 @@
+{
+	"name": "jstree",
+	"license": "MIT",
+	"version": "3.3.5",
+	"main" : [
+		"./dist/jstree.js",
+		"./dist/themes/default/style.css"
+	],
+	"ignore": [
+		"**/.*",
+		"docs",
+		"demo",
+		"libs",
+		"node_modules",
+		"test",
+		"libs",
+		"jstree.jquery.json",
+		"gruntfile.js",
+		"package.json",
+		"bower.json",
+		"component.json",
+		"LICENCE-MIT",
+		"README.md"
+	],
+	"dependencies": {
+		"jquery": ">=1.9.1"
+	},
+	"keywords": [
+		"ui",
+		"tree",
+		"jstree"
+	]
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vakata-jstree-3.3.5/component.json	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,28 @@
+{
+	"name": "jstree",
+	"repo": "vakata/jstree",
+	"description": "jsTree is jquery plugin, that provides interactive trees.",
+	"version": "3.3.5",
+	"license": "MIT",
+	"keywords": [
+		"ui",
+		"tree",
+		"jstree"
+	],
+	"scripts": [
+		"dist/jstree.js",
+		"dist/jstree.min.js"
+	],
+	"images": [
+		"dist/themes/default/32px.png",
+		"dist/themes/default/40px.png",
+		"dist/themes/default/throbber.gif"
+	],
+	"styles": [
+		"dist/themes/default/style.css",
+		"dist/themes/default/style.min.css"
+	],
+	"dependencies": {
+		"components/jquery": ">=1.9.1"
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vakata-jstree-3.3.5/composer.json	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,46 @@
+{
+	"name": "vakata/jstree",
+	"description": "jsTree is jquery plugin, that provides interactive trees.",
+	"type": "component",
+	"homepage": "http://jstree.com",
+	"license": "MIT",
+	"support": {
+		"issues": "https://github.com/vakata/jstree/issues",
+		"forum": "https://groups.google.com/forum/#!forum/jstree",
+		"source": "https://github.com/vakata/jstree"
+	},
+	"authors": [
+		{
+			"name": "Ivan Bozhanov",
+			"email": "jstree@jstree.com"
+		}
+	],
+	"require": {
+		"components/jquery": ">=1.9.1"
+	},
+	"suggest": {
+		"robloach/component-installer": "Allows installation of Components via Composer"
+	},
+	"extra": {
+		"component": {
+			"scripts": [
+				"dist/jstree.js"
+			],
+			"styles": [
+				"dist/themes/default/style.css"
+			],
+			"images": [
+				"dist/themes/default/32px.png",
+				"dist/themes/default/40px.png",
+				"dist/themes/default/throbber.gif"
+			],
+			"files": [
+				"dist/jstree.min.js",
+				"dist/themes/default/style.min.css",
+				"dist/themes/default/32px.png",
+				"dist/themes/default/40px.png",
+				"dist/themes/default/throbber.gif"
+			]
+		}
+	}
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vakata-jstree-3.3.5/demo/README.md	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,2 @@
+## PHP demos moved to new repository
+https://github.com/vakata/jstree-php-demos
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vakata-jstree-3.3.5/demo/basic/index.html	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,146 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+	<meta charset="UTF-8">
+	<title>jstree basic demos</title>
+	<style>
+	html { margin:0; padding:0; font-size:62.5%; }
+	body { max-width:800px; min-width:300px; margin:0 auto; padding:20px 10px; font-size:14px; font-size:1.4em; }
+	h1 { font-size:1.8em; }
+	.demo { overflow:auto; border:1px solid silver; min-height:100px; }
+	</style>
+	<link rel="stylesheet" href="./../../dist/themes/default/style.min.css" />
+</head>
+<body>
+	<h1>HTML demo</h1>
+	<div id="html" class="demo">
+		<ul>
+			<li data-jstree='{ "opened" : true }'>Root node
+				<ul>
+					<li data-jstree='{ "selected" : true }'>Child node 1</li>
+					<li>Child node 2</li>
+				</ul>
+			</li>
+		</ul>
+	</div>
+
+	<h1>Inline data demo</h1>
+	<div id="data" class="demo"></div>
+
+	<h1>Data format demo</h1>
+	<div id="frmt" class="demo"></div>
+
+	<h1>AJAX demo</h1>
+	<div id="ajax" class="demo"></div>
+
+	<h1>Lazy loading demo</h1>
+	<div id="lazy" class="demo"></div>
+
+	<h1>Callback function data demo</h1>
+	<div id="clbk" class="demo"></div>
+
+	<h1>Interaction and events demo</h1>
+	<button id="evts_button">select node with id 1</button> <em>either click the button or a node in the tree</em>
+	<div id="evts" class="demo"></div>
+
+	<script src="//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
+	<script src="./../../dist/jstree.min.js"></script>
+	
+	<script>
+	// html demo
+	$('#html').jstree();
+
+	// inline data demo
+	$('#data').jstree({
+		'core' : {
+			'data' : [
+				{ "text" : "Root node", "children" : [
+						{ "text" : "Child node 1" },
+						{ "text" : "Child node 2" }
+				]}
+			]
+		}
+	});
+
+	// data format demo
+	$('#frmt').jstree({
+		'core' : {
+			'data' : [
+				{
+					"text" : "Root node",
+					"state" : { "opened" : true },
+					"children" : [
+						{
+							"text" : "Child node 1",
+							"state" : { "selected" : true },
+							"icon" : "jstree-file"
+						},
+						{ "text" : "Child node 2", "state" : { "disabled" : true } }
+					]
+				}
+			]
+		}
+	});
+
+	// ajax demo
+	$('#ajax').jstree({
+		'core' : {
+			'data' : {
+				"url" : "./root.json",
+				"dataType" : "json" // needed only if you do not supply JSON headers
+			}
+		}
+	});
+
+	// lazy demo
+	$('#lazy').jstree({
+		'core' : {
+			'data' : {
+				"url" : "//www.jstree.com/fiddle/?lazy",
+				"data" : function (node) {
+					return { "id" : node.id };
+				}
+			}
+		}
+	});
+
+	// data from callback
+	$('#clbk').jstree({
+		'core' : {
+			'data' : function (node, cb) {
+				if(node.id === "#") {
+					cb([{"text" : "Root", "id" : "1", "children" : true}]);
+				}
+				else {
+					cb(["Child"]);
+				}
+			}
+		}
+	});
+
+	// interaction and events
+	$('#evts_button').on("click", function () {
+		var instance = $('#evts').jstree(true);
+		instance.deselect_all();
+		instance.select_node('1');
+	});
+	$('#evts')
+		.on("changed.jstree", function (e, data) {
+			if(data.selected.length) {
+				alert('The selected node is: ' + data.instance.get_node(data.selected[0]).text);
+			}
+		})
+		.jstree({
+			'core' : {
+				'multiple' : false,
+				'data' : [
+					{ "text" : "Root node", "children" : [
+							{ "text" : "Child node 1", "id" : 1 },
+							{ "text" : "Child node 2" }
+					]}
+				]
+			}
+		});
+	</script>
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vakata-jstree-3.3.5/demo/basic/root.json	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,1 @@
+[{"id":1,"text":"Root node","children":[{"id":2,"text":"Child node 1"},{"id":3,"text":"Child node 2"}]}]
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vakata-jstree-3.3.5/dist/jstree.js	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,8589 @@
+/*globals jQuery, define, module, exports, require, window, document, postMessage */
+(function (factory) {
+	"use strict";
+	if (typeof define === 'function' && define.amd) {
+		define(['jquery'], factory);
+	}
+	else if(typeof module !== 'undefined' && module.exports) {
+		module.exports = factory(require('jquery'));
+	}
+	else {
+		factory(jQuery);
+	}
+}(function ($, undefined) {
+	"use strict";
+/*!
+ * jsTree 3.3.5
+ * http://jstree.com/
+ *
+ * Copyright (c) 2014 Ivan Bozhanov (http://vakata.com)
+ *
+ * Licensed same as jquery - under the terms of the MIT License
+ *   http://www.opensource.org/licenses/mit-license.php
+ */
+/*!
+ * if using jslint please allow for the jQuery global and use following options:
+ * jslint: loopfunc: true, browser: true, ass: true, bitwise: true, continue: true, nomen: true, plusplus: true, regexp: true, unparam: true, todo: true, white: true
+ */
+/*jshint -W083 */
+
+	// prevent another load? maybe there is a better way?
+	if($.jstree) {
+		return;
+	}
+
+	/**
+	 * ### jsTree core functionality
+	 */
+
+	// internal variables
+	var instance_counter = 0,
+		ccp_node = false,
+		ccp_mode = false,
+		ccp_inst = false,
+		themes_loaded = [],
+		src = $('script:last').attr('src'),
+		document = window.document; // local variable is always faster to access then a global
+
+	/**
+	 * holds all jstree related functions and variables, including the actual class and methods to create, access and manipulate instances.
+	 * @name $.jstree
+	 */
+	$.jstree = {
+		/**
+		 * specifies the jstree version in use
+		 * @name $.jstree.version
+		 */
+		version : '3.3.5',
+		/**
+		 * holds all the default options used when creating new instances
+		 * @name $.jstree.defaults
+		 */
+		defaults : {
+			/**
+			 * configure which plugins will be active on an instance. Should be an array of strings, where each element is a plugin name. The default is `[]`
+			 * @name $.jstree.defaults.plugins
+			 */
+			plugins : []
+		},
+		/**
+		 * stores all loaded jstree plugins (used internally)
+		 * @name $.jstree.plugins
+		 */
+		plugins : {},
+		path : src && src.indexOf('/') !== -1 ? src.replace(/\/[^\/]+$/,'') : '',
+		idregex : /[\\:&!^|()\[\]<>@*'+~#";.,=\- \/${}%?`]/g,
+		root : '#'
+	};
+	
+	/**
+	 * creates a jstree instance
+	 * @name $.jstree.create(el [, options])
+	 * @param {DOMElement|jQuery|String} el the element to create the instance on, can be jQuery extended or a selector
+	 * @param {Object} options options for this instance (extends `$.jstree.defaults`)
+	 * @return {jsTree} the new instance
+	 */
+	$.jstree.create = function (el, options) {
+		var tmp = new $.jstree.core(++instance_counter),
+			opt = options;
+		options = $.extend(true, {}, $.jstree.defaults, options);
+		if(opt && opt.plugins) {
+			options.plugins = opt.plugins;
+		}
+		$.each(options.plugins, function (i, k) {
+			if(i !== 'core') {
+				tmp = tmp.plugin(k, options[k]);
+			}
+		});
+		$(el).data('jstree', tmp);
+		tmp.init(el, options);
+		return tmp;
+	};
+	/**
+	 * remove all traces of jstree from the DOM and destroy all instances
+	 * @name $.jstree.destroy()
+	 */
+	$.jstree.destroy = function () {
+		$('.jstree:jstree').jstree('destroy');
+		$(document).off('.jstree');
+	};
+	/**
+	 * the jstree class constructor, used only internally
+	 * @private
+	 * @name $.jstree.core(id)
+	 * @param {Number} id this instance's index
+	 */
+	$.jstree.core = function (id) {
+		this._id = id;
+		this._cnt = 0;
+		this._wrk = null;
+		this._data = {
+			core : {
+				themes : {
+					name : false,
+					dots : false,
+					icons : false,
+					ellipsis : false
+				},
+				selected : [],
+				last_error : {},
+				working : false,
+				worker_queue : [],
+				focused : null
+			}
+		};
+	};
+	/**
+	 * get a reference to an existing instance
+	 *
+	 * __Examples__
+	 *
+	 *	// provided a container with an ID of "tree", and a nested node with an ID of "branch"
+	 *	// all of there will return the same instance
+	 *	$.jstree.reference('tree');
+	 *	$.jstree.reference('#tree');
+	 *	$.jstree.reference($('#tree'));
+	 *	$.jstree.reference(document.getElementByID('tree'));
+	 *	$.jstree.reference('branch');
+	 *	$.jstree.reference('#branch');
+	 *	$.jstree.reference($('#branch'));
+	 *	$.jstree.reference(document.getElementByID('branch'));
+	 *
+	 * @name $.jstree.reference(needle)
+	 * @param {DOMElement|jQuery|String} needle
+	 * @return {jsTree|null} the instance or `null` if not found
+	 */
+	$.jstree.reference = function (needle) {
+		var tmp = null,
+			obj = null;
+		if(needle && needle.id && (!needle.tagName || !needle.nodeType)) { needle = needle.id; }
+
+		if(!obj || !obj.length) {
+			try { obj = $(needle); } catch (ignore) { }
+		}
+		if(!obj || !obj.length) {
+			try { obj = $('#' + needle.replace($.jstree.idregex,'\\$&')); } catch (ignore) { }
+		}
+		if(obj && obj.length && (obj = obj.closest('.jstree')).length && (obj = obj.data('jstree'))) {
+			tmp = obj;
+		}
+		else {
+			$('.jstree').each(function () {
+				var inst = $(this).data('jstree');
+				if(inst && inst._model.data[needle]) {
+					tmp = inst;
+					return false;
+				}
+			});
+		}
+		return tmp;
+	};
+	/**
+	 * Create an instance, get an instance or invoke a command on a instance.
+	 *
+	 * If there is no instance associated with the current node a new one is created and `arg` is used to extend `$.jstree.defaults` for this new instance. There would be no return value (chaining is not broken).
+	 *
+	 * If there is an existing instance and `arg` is a string the command specified by `arg` is executed on the instance, with any additional arguments passed to the function. If the function returns a value it will be returned (chaining could break depending on function).
+	 *
+	 * If there is an existing instance and `arg` is not a string the instance itself is returned (similar to `$.jstree.reference`).
+	 *
+	 * In any other case - nothing is returned and chaining is not broken.
+	 *
+	 * __Examples__
+	 *
+	 *	$('#tree1').jstree(); // creates an instance
+	 *	$('#tree2').jstree({ plugins : [] }); // create an instance with some options
+	 *	$('#tree1').jstree('open_node', '#branch_1'); // call a method on an existing instance, passing additional arguments
+	 *	$('#tree2').jstree(); // get an existing instance (or create an instance)
+	 *	$('#tree2').jstree(true); // get an existing instance (will not create new instance)
+	 *	$('#branch_1').jstree().select_node('#branch_1'); // get an instance (using a nested element and call a method)
+	 *
+	 * @name $().jstree([arg])
+	 * @param {String|Object} arg
+	 * @return {Mixed}
+	 */
+	$.fn.jstree = function (arg) {
+		// check for string argument
+		var is_method	= (typeof arg === 'string'),
+			args		= Array.prototype.slice.call(arguments, 1),
+			result		= null;
+		if(arg === true && !this.length) { return false; }
+		this.each(function () {
+			// get the instance (if there is one) and method (if it exists)
+			var instance = $.jstree.reference(this),
+				method = is_method && instance ? instance[arg] : null;
+			// if calling a method, and method is available - execute on the instance
+			result = is_method && method ?
+				method.apply(instance, args) :
+				null;
+			// if there is no instance and no method is being called - create one
+			if(!instance && !is_method && (arg === undefined || $.isPlainObject(arg))) {
+				$.jstree.create(this, arg);
+			}
+			// if there is an instance and no method is called - return the instance
+			if( (instance && !is_method) || arg === true ) {
+				result = instance || false;
+			}
+			// if there was a method call which returned a result - break and return the value
+			if(result !== null && result !== undefined) {
+				return false;
+			}
+		});
+		// if there was a method call with a valid return value - return that, otherwise continue the chain
+		return result !== null && result !== undefined ?
+			result : this;
+	};
+	/**
+	 * used to find elements containing an instance
+	 *
+	 * __Examples__
+	 *
+	 *	$('div:jstree').each(function () {
+	 *		$(this).jstree('destroy');
+	 *	});
+	 *
+	 * @name $(':jstree')
+	 * @return {jQuery}
+	 */
+	$.expr.pseudos.jstree = $.expr.createPseudo(function(search) {
+		return function(a) {
+			return $(a).hasClass('jstree') &&
+				$(a).data('jstree') !== undefined;
+		};
+	});
+
+	/**
+	 * stores all defaults for the core
+	 * @name $.jstree.defaults.core
+	 */
+	$.jstree.defaults.core = {
+		/**
+		 * data configuration
+		 *
+		 * If left as `false` the HTML inside the jstree container element is used to populate the tree (that should be an unordered list with list items).
+		 *
+		 * You can also pass in a HTML string or a JSON array here.
+		 *
+		 * It is possible to pass in a standard jQuery-like AJAX config and jstree will automatically determine if the response is JSON or HTML and use that to populate the tree.
+		 * In addition to the standard jQuery ajax options here you can suppy functions for `data` and `url`, the functions will be run in the current instance's scope and a param will be passed indicating which node is being loaded, the return value of those functions will be used.
+		 *
+		 * The last option is to specify a function, that function will receive the node being loaded as argument and a second param which is a function which should be called with the result.
+		 *
+		 * __Examples__
+		 *
+		 *	// AJAX
+		 *	$('#tree').jstree({
+		 *		'core' : {
+		 *			'data' : {
+		 *				'url' : '/get/children/',
+		 *				'data' : function (node) {
+		 *					return { 'id' : node.id };
+		 *				}
+		 *			}
+		 *		});
+		 *
+		 *	// direct data
+		 *	$('#tree').jstree({
+		 *		'core' : {
+		 *			'data' : [
+		 *				'Simple root node',
+		 *				{
+		 *					'id' : 'node_2',
+		 *					'text' : 'Root node with options',
+		 *					'state' : { 'opened' : true, 'selected' : true },
+		 *					'children' : [ { 'text' : 'Child 1' }, 'Child 2']
+		 *				}
+		 *			]
+		 *		}
+		 *	});
+		 *
+		 *	// function
+		 *	$('#tree').jstree({
+		 *		'core' : {
+		 *			'data' : function (obj, callback) {
+		 *				callback.call(this, ['Root 1', 'Root 2']);
+		 *			}
+		 *		});
+		 *
+		 * @name $.jstree.defaults.core.data
+		 */
+		data			: false,
+		/**
+		 * configure the various strings used throughout the tree
+		 *
+		 * You can use an object where the key is the string you need to replace and the value is your replacement.
+		 * Another option is to specify a function which will be called with an argument of the needed string and should return the replacement.
+		 * If left as `false` no replacement is made.
+		 *
+		 * __Examples__
+		 *
+		 *	$('#tree').jstree({
+		 *		'core' : {
+		 *			'strings' : {
+		 *				'Loading ...' : 'Please wait ...'
+		 *			}
+		 *		}
+		 *	});
+		 *
+		 * @name $.jstree.defaults.core.strings
+		 */
+		strings			: false,
+		/**
+		 * determines what happens when a user tries to modify the structure of the tree
+		 * If left as `false` all operations like create, rename, delete, move or copy are prevented.
+		 * You can set this to `true` to allow all interactions or use a function to have better control.
+		 *
+		 * __Examples__
+		 *
+		 *	$('#tree').jstree({
+		 *		'core' : {
+		 *			'check_callback' : function (operation, node, node_parent, node_position, more) {
+		 *				// operation can be 'create_node', 'rename_node', 'delete_node', 'move_node', 'copy_node' or 'edit'
+		 *				// in case of 'rename_node' node_position is filled with the new node name
+		 *				return operation === 'rename_node' ? true : false;
+		 *			}
+		 *		}
+		 *	});
+		 *
+		 * @name $.jstree.defaults.core.check_callback
+		 */
+		check_callback	: false,
+		/**
+		 * a callback called with a single object parameter in the instance's scope when something goes wrong (operation prevented, ajax failed, etc)
+		 * @name $.jstree.defaults.core.error
+		 */
+		error			: $.noop,
+		/**
+		 * the open / close animation duration in milliseconds - set this to `false` to disable the animation (default is `200`)
+		 * @name $.jstree.defaults.core.animation
+		 */
+		animation		: 200,
+		/**
+		 * a boolean indicating if multiple nodes can be selected
+		 * @name $.jstree.defaults.core.multiple
+		 */
+		multiple		: true,
+		/**
+		 * theme configuration object
+		 * @name $.jstree.defaults.core.themes
+		 */
+		themes			: {
+			/**
+			 * the name of the theme to use (if left as `false` the default theme is used)
+			 * @name $.jstree.defaults.core.themes.name
+			 */
+			name			: false,
+			/**
+			 * the URL of the theme's CSS file, leave this as `false` if you have manually included the theme CSS (recommended). You can set this to `true` too which will try to autoload the theme.
+			 * @name $.jstree.defaults.core.themes.url
+			 */
+			url				: false,
+			/**
+			 * the location of all jstree themes - only used if `url` is set to `true`
+			 * @name $.jstree.defaults.core.themes.dir
+			 */
+			dir				: false,
+			/**
+			 * a boolean indicating if connecting dots are shown
+			 * @name $.jstree.defaults.core.themes.dots
+			 */
+			dots			: true,
+			/**
+			 * a boolean indicating if node icons are shown
+			 * @name $.jstree.defaults.core.themes.icons
+			 */
+			icons			: true,
+			/**
+			 * a boolean indicating if node ellipsis should be shown - this only works with a fixed with on the container
+			 * @name $.jstree.defaults.core.themes.ellipsis
+			 */
+			ellipsis		: false,
+			/**
+			 * a boolean indicating if the tree background is striped
+			 * @name $.jstree.defaults.core.themes.stripes
+			 */
+			stripes			: false,
+			/**
+			 * a string (or boolean `false`) specifying the theme variant to use (if the theme supports variants)
+			 * @name $.jstree.defaults.core.themes.variant
+			 */
+			variant			: false,
+			/**
+			 * a boolean specifying if a reponsive version of the theme should kick in on smaller screens (if the theme supports it). Defaults to `false`.
+			 * @name $.jstree.defaults.core.themes.responsive
+			 */
+			responsive		: false
+		},
+		/**
+		 * if left as `true` all parents of all selected nodes will be opened once the tree loads (so that all selected nodes are visible to the user)
+		 * @name $.jstree.defaults.core.expand_selected_onload
+		 */
+		expand_selected_onload : true,
+		/**
+		 * if left as `true` web workers will be used to parse incoming JSON data where possible, so that the UI will not be blocked by large requests. Workers are however about 30% slower. Defaults to `true`
+		 * @name $.jstree.defaults.core.worker
+		 */
+		worker : true,
+		/**
+		 * Force node text to plain text (and escape HTML). Defaults to `false`
+		 * @name $.jstree.defaults.core.force_text
+		 */
+		force_text : false,
+		/**
+		 * Should the node should be toggled if the text is double clicked . Defaults to `true`
+		 * @name $.jstree.defaults.core.dblclick_toggle
+		 */
+		dblclick_toggle : true,
+		/**
+		 * Should the loaded nodes be part of the state. Defaults to `false`
+		 * @name $.jstree.defaults.core.loaded_state
+		 */
+		loaded_state : false,
+		/**
+		 * Should the last active node be focused when the tree container is blurred and the focused again. This helps working with screen readers. Defaults to `true`
+		 * @name $.jstree.defaults.core.restore_focus
+		 */
+		restore_focus : true,
+		/**
+		 * Default keyboard shortcuts (an object where each key is the button name or combo - like 'enter', 'ctrl-space', 'p', etc and the value is the function to execute in the instance's scope)
+		 * @name $.jstree.defaults.core.keyboard
+		 */
+		keyboard : {
+			'ctrl-space': function (e) {
+				// aria defines space only with Ctrl
+				e.type = "click";
+				$(e.currentTarget).trigger(e);
+			},
+			'enter': function (e) {
+				// enter
+				e.type = "click";
+				$(e.currentTarget).trigger(e);
+			},
+			'left': function (e) {
+				// left
+				e.preventDefault();
+				if(this.is_open(e.currentTarget)) {
+					this.close_node(e.currentTarget);
+				}
+				else {
+					var o = this.get_parent(e.currentTarget);
+					if(o && o.id !== $.jstree.root) { this.get_node(o, true).children('.jstree-anchor').focus(); }
+				}
+			},
+			'up': function (e) {
+				// up
+				e.preventDefault();
+				var o = this.get_prev_dom(e.currentTarget);
+				if(o && o.length) { o.children('.jstree-anchor').focus(); }
+			},
+			'right': function (e) {
+				// right
+				e.preventDefault();
+				if(this.is_closed(e.currentTarget)) {
+					this.open_node(e.currentTarget, function (o) { this.get_node(o, true).children('.jstree-anchor').focus(); });
+				}
+				else if (this.is_open(e.currentTarget)) {
+					var o = this.get_node(e.currentTarget, true).children('.jstree-children')[0];
+					if(o) { $(this._firstChild(o)).children('.jstree-anchor').focus(); }
+				}
+			},
+			'down': function (e) {
+				// down
+				e.preventDefault();
+				var o = this.get_next_dom(e.currentTarget);
+				if(o && o.length) { o.children('.jstree-anchor').focus(); }
+			},
+			'*': function (e) {
+				// aria defines * on numpad as open_all - not very common
+				this.open_all();
+			},
+			'home': function (e) {
+				// home
+				e.preventDefault();
+				var o = this._firstChild(this.get_container_ul()[0]);
+				if(o) { $(o).children('.jstree-anchor').filter(':visible').focus(); }
+			},
+			'end': function (e) {
+				// end
+				e.preventDefault();
+				this.element.find('.jstree-anchor').filter(':visible').last().focus();
+			},
+			'f2': function (e) {
+				// f2 - safe to include - if check_callback is false it will fail
+				e.preventDefault();
+				this.edit(e.currentTarget);
+			}
+		}
+	};
+	$.jstree.core.prototype = {
+		/**
+		 * used to decorate an instance with a plugin. Used internally.
+		 * @private
+		 * @name plugin(deco [, opts])
+		 * @param  {String} deco the plugin to decorate with
+		 * @param  {Object} opts options for the plugin
+		 * @return {jsTree}
+		 */
+		plugin : function (deco, opts) {
+			var Child = $.jstree.plugins[deco];
+			if(Child) {
+				this._data[deco] = {};
+				Child.prototype = this;
+				return new Child(opts, this);
+			}
+			return this;
+		},
+		/**
+		 * initialize the instance. Used internally.
+		 * @private
+		 * @name init(el, optons)
+		 * @param {DOMElement|jQuery|String} el the element we are transforming
+		 * @param {Object} options options for this instance
+		 * @trigger init.jstree, loading.jstree, loaded.jstree, ready.jstree, changed.jstree
+		 */
+		init : function (el, options) {
+			this._model = {
+				data : {},
+				changed : [],
+				force_full_redraw : false,
+				redraw_timeout : false,
+				default_state : {
+					loaded : true,
+					opened : false,
+					selected : false,
+					disabled : false
+				}
+			};
+			this._model.data[$.jstree.root] = {
+				id : $.jstree.root,
+				parent : null,
+				parents : [],
+				children : [],
+				children_d : [],
+				state : { loaded : false }
+			};
+
+			this.element = $(el).addClass('jstree jstree-' + this._id);
+			this.settings = options;
+
+			this._data.core.ready = false;
+			this._data.core.loaded = false;
+			this._data.core.rtl = (this.element.css("direction") === "rtl");
+			this.element[this._data.core.rtl ? 'addClass' : 'removeClass']("jstree-rtl");
+			this.element.attr('role','tree');
+			if(this.settings.core.multiple) {
+				this.element.attr('aria-multiselectable', true);
+			}
+			if(!this.element.attr('tabindex')) {
+				this.element.attr('tabindex','0');
+			}
+
+			this.bind();
+			/**
+			 * triggered after all events are bound
+			 * @event
+			 * @name init.jstree
+			 */
+			this.trigger("init");
+
+			this._data.core.original_container_html = this.element.find(" > ul > li").clone(true);
+			this._data.core.original_container_html
+				.find("li").addBack()
+				.contents().filter(function() {
+					return this.nodeType === 3 && (!this.nodeValue || /^\s+$/.test(this.nodeValue));
+				})
+				.remove();
+			this.element.html("<"+"ul class='jstree-container-ul jstree-children' role='group'><"+"li id='j"+this._id+"_loading' class='jstree-initial-node jstree-loading jstree-leaf jstree-last' role='tree-item'><i class='jstree-icon jstree-ocl'></i><"+"a class='jstree-anchor' href='#'><i class='jstree-icon jstree-themeicon-hidden'></i>" + this.get_string("Loading ...") + "</a></li></ul>");
+			this.element.attr('aria-activedescendant','j' + this._id + '_loading');
+			this._data.core.li_height = this.get_container_ul().children("li").first().outerHeight() || 24;
+			this._data.core.node = this._create_prototype_node();
+			/**
+			 * triggered after the loading text is shown and before loading starts
+			 * @event
+			 * @name loading.jstree
+			 */
+			this.trigger("loading");
+			this.load_node($.jstree.root);
+		},
+		/**
+		 * destroy an instance
+		 * @name destroy()
+		 * @param  {Boolean} keep_html if not set to `true` the container will be emptied, otherwise the current DOM elements will be kept intact
+		 */
+		destroy : function (keep_html) {
+			/**
+			 * triggered before the tree is destroyed
+			 * @event
+			 * @name destroy.jstree
+			 */
+			this.trigger("destroy");
+			if(this._wrk) {
+				try {
+					window.URL.revokeObjectURL(this._wrk);
+					this._wrk = null;
+				}
+				catch (ignore) { }
+			}
+			if(!keep_html) { this.element.empty(); }
+			this.teardown();
+		},
+		/**
+		 * Create a prototype node
+		 * @name _create_prototype_node()
+		 * @return {DOMElement}
+		 */
+		_create_prototype_node : function () {
+			var _node = document.createElement('LI'), _temp1, _temp2;
+			_node.setAttribute('role', 'treeitem');
+			_temp1 = document.createElement('I');
+			_temp1.className = 'jstree-icon jstree-ocl';
+			_temp1.setAttribute('role', 'presentation');
+			_node.appendChild(_temp1);
+			_temp1 = document.createElement('A');
+			_temp1.className = 'jstree-anchor';
+			_temp1.setAttribute('href','#');
+			_temp1.setAttribute('tabindex','-1');
+			_temp2 = document.createElement('I');
+			_temp2.className = 'jstree-icon jstree-themeicon';
+			_temp2.setAttribute('role', 'presentation');
+			_temp1.appendChild(_temp2);
+			_node.appendChild(_temp1);
+			_temp1 = _temp2 = null;
+
+			return _node;
+		},
+		_kbevent_to_func : function (e) {
+			var keys = {
+				8: "Backspace", 9: "Tab", 13: "Return", 19: "Pause", 27: "Esc",
+				32: "Space", 33: "PageUp", 34: "PageDown", 35: "End", 36: "Home",
+				37: "Left", 38: "Up", 39: "Right", 40: "Down", 44: "Print", 45: "Insert",
+				46: "Delete", 96: "Numpad0", 97: "Numpad1", 98: "Numpad2", 99 : "Numpad3",
+				100: "Numpad4", 101: "Numpad5", 102: "Numpad6", 103: "Numpad7",
+				104: "Numpad8", 105: "Numpad9", '-13': "NumpadEnter", 112: "F1",
+				113: "F2", 114: "F3", 115: "F4", 116: "F5", 117: "F6", 118: "F7",
+				119: "F8", 120: "F9", 121: "F10", 122: "F11", 123: "F12", 144: "Numlock",
+				145: "Scrolllock", 16: 'Shift', 17: 'Ctrl', 18: 'Alt',
+				48: '0',  49: '1',  50: '2',  51: '3',  52: '4', 53:  '5',
+				54: '6',  55: '7',  56: '8',  57: '9',  59: ';',  61: '=', 65:  'a',
+				66: 'b',  67: 'c',  68: 'd',  69: 'e',  70: 'f',  71: 'g', 72:  'h',
+				73: 'i',  74: 'j',  75: 'k',  76: 'l',  77: 'm',  78: 'n', 79:  'o',
+				80: 'p',  81: 'q',  82: 'r',  83: 's',  84: 't',  85: 'u', 86:  'v',
+				87: 'w',  88: 'x',  89: 'y',  90: 'z', 107: '+', 109: '-', 110: '.',
+				186: ';', 187: '=', 188: ',', 189: '-', 190: '.', 191: '/', 192: '`',
+				219: '[', 220: '\\',221: ']', 222: "'", 111: '/', 106: '*', 173: '-'
+			};
+			var parts = [];
+			if (e.ctrlKey) { parts.push('ctrl'); }
+			if (e.altKey) { parts.push('alt'); }
+			if (e.shiftKey) { parts.push('shift'); }
+			parts.push(keys[e.which] || e.which);
+			parts = parts.sort().join('-').toLowerCase();
+
+			var kb = this.settings.core.keyboard, i, tmp;
+			for (i in kb) {
+				if (kb.hasOwnProperty(i)) {
+					tmp = i;
+					if (tmp !== '-' && tmp !== '+') {
+						tmp = tmp.replace('--', '-MINUS').replace('+-', '-MINUS').replace('++', '-PLUS').replace('-+', '-PLUS');
+						tmp = tmp.split(/-|\+/).sort().join('-').replace('MINUS', '-').replace('PLUS', '+').toLowerCase();
+					}
+					if (tmp === parts) {
+						return kb[i];
+					}
+				}
+			}
+			return null;
+		},
+		/**
+		 * part of the destroying of an instance. Used internally.
+		 * @private
+		 * @name teardown()
+		 */
+		teardown : function () {
+			this.unbind();
+			this.element
+				.removeClass('jstree')
+				.removeData('jstree')
+				.find("[class^='jstree']")
+					.addBack()
+					.attr("class", function () { return this.className.replace(/jstree[^ ]*|$/ig,''); });
+			this.element = null;
+		},
+		/**
+		 * bind all events. Used internally.
+		 * @private
+		 * @name bind()
+		 */
+		bind : function () {
+			var word = '',
+				tout = null,
+				was_click = 0;
+			this.element
+				.on("dblclick.jstree", function (e) {
+						if(e.target.tagName && e.target.tagName.toLowerCase() === "input") { return true; }
+						if(document.selection && document.selection.empty) {
+							document.selection.empty();
+						}
+						else {
+							if(window.getSelection) {
+								var sel = window.getSelection();
+								try {
+									sel.removeAllRanges();
+									sel.collapse();
+								} catch (ignore) { }
+							}
+						}
+					})
+				.on("mousedown.jstree", $.proxy(function (e) {
+						if(e.target === this.element[0]) {
+							e.preventDefault(); // prevent losing focus when clicking scroll arrows (FF, Chrome)
+							was_click = +(new Date()); // ie does not allow to prevent losing focus
+						}
+					}, this))
+				.on("mousedown.jstree", ".jstree-ocl", function (e) {
+						e.preventDefault(); // prevent any node inside from losing focus when clicking the open/close icon
+					})
+				.on("click.jstree", ".jstree-ocl", $.proxy(function (e) {
+						this.toggle_node(e.target);
+					}, this))
+				.on("dblclick.jstree", ".jstree-anchor", $.proxy(function (e) {
+						if(e.target.tagName && e.target.tagName.toLowerCase() === "input") { return true; }
+						if(this.settings.core.dblclick_toggle) {
+							this.toggle_node(e.target);
+						}
+					}, this))
+				.on("click.jstree", ".jstree-anchor", $.proxy(function (e) {
+						e.preventDefault();
+						if(e.currentTarget !== document.activeElement) { $(e.currentTarget).focus(); }
+						this.activate_node(e.currentTarget, e);
+					}, this))
+				.on('keydown.jstree', '.jstree-anchor', $.proxy(function (e) {
+						if(e.target.tagName && e.target.tagName.toLowerCase() === "input") { return true; }
+						if(this._data.core.rtl) {
+							if(e.which === 37) { e.which = 39; }
+							else if(e.which === 39) { e.which = 37; }
+						}
+						var f = this._kbevent_to_func(e);
+						if (f) {
+							var r = f.call(this, e);
+							if (r === false || r === true) {
+								return r;
+							}
+						}
+					}, this))
+				.on("load_node.jstree", $.proxy(function (e, data) {
+						if(data.status) {
+							if(data.node.id === $.jstree.root && !this._data.core.loaded) {
+								this._data.core.loaded = true;
+								if(this._firstChild(this.get_container_ul()[0])) {
+									this.element.attr('aria-activedescendant',this._firstChild(this.get_container_ul()[0]).id);
+								}
+								/**
+								 * triggered after the root node is loaded for the first time
+								 * @event
+								 * @name loaded.jstree
+								 */
+								this.trigger("loaded");
+							}
+							if(!this._data.core.ready) {
+								setTimeout($.proxy(function() {
+									if(this.element && !this.get_container_ul().find('.jstree-loading').length) {
+										this._data.core.ready = true;
+										if(this._data.core.selected.length) {
+											if(this.settings.core.expand_selected_onload) {
+												var tmp = [], i, j;
+												for(i = 0, j = this._data.core.selected.length; i < j; i++) {
+													tmp = tmp.concat(this._model.data[this._data.core.selected[i]].parents);
+												}
+												tmp = $.vakata.array_unique(tmp);
+												for(i = 0, j = tmp.length; i < j; i++) {
+													this.open_node(tmp[i], false, 0);
+												}
+											}
+											this.trigger('changed', { 'action' : 'ready', 'selected' : this._data.core.selected });
+										}
+										/**
+										 * triggered after all nodes are finished loading
+										 * @event
+										 * @name ready.jstree
+										 */
+										this.trigger("ready");
+									}
+								}, this), 0);
+							}
+						}
+					}, this))
+				// quick searching when the tree is focused
+				.on('keypress.jstree', $.proxy(function (e) {
+						if(e.target.tagName && e.target.tagName.toLowerCase() === "input") { return true; }
+						if(tout) { clearTimeout(tout); }
+						tout = setTimeout(function () {
+							word = '';
+						}, 500);
+
+						var chr = String.fromCharCode(e.which).toLowerCase(),
+							col = this.element.find('.jstree-anchor').filter(':visible'),
+							ind = col.index(document.activeElement) || 0,
+							end = false;
+						word += chr;
+
+						// match for whole word from current node down (including the current node)
+						if(word.length > 1) {
+							col.slice(ind).each($.proxy(function (i, v) {
+								if($(v).text().toLowerCase().indexOf(word) === 0) {
+									$(v).focus();
+									end = true;
+									return false;
+								}
+							}, this));
+							if(end) { return; }
+
+							// match for whole word from the beginning of the tree
+							col.slice(0, ind).each($.proxy(function (i, v) {
+								if($(v).text().toLowerCase().indexOf(word) === 0) {
+									$(v).focus();
+									end = true;
+									return false;
+								}
+							}, this));
+							if(end) { return; }
+						}
+						// list nodes that start with that letter (only if word consists of a single char)
+						if(new RegExp('^' + chr.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') + '+$').test(word)) {
+							// search for the next node starting with that letter
+							col.slice(ind + 1).each($.proxy(function (i, v) {
+								if($(v).text().toLowerCase().charAt(0) === chr) {
+									$(v).focus();
+									end = true;
+									return false;
+								}
+							}, this));
+							if(end) { return; }
+
+							// search from the beginning
+							col.slice(0, ind + 1).each($.proxy(function (i, v) {
+								if($(v).text().toLowerCase().charAt(0) === chr) {
+									$(v).focus();
+									end = true;
+									return false;
+								}
+							}, this));
+							if(end) { return; }
+						}
+					}, this))
+				// THEME RELATED
+				.on("init.jstree", $.proxy(function () {
+						var s = this.settings.core.themes;
+						this._data.core.themes.dots			= s.dots;
+						this._data.core.themes.stripes		= s.stripes;
+						this._data.core.themes.icons		= s.icons;
+						this._data.core.themes.ellipsis		= s.ellipsis;
+						this.set_theme(s.name || "default", s.url);
+						this.set_theme_variant(s.variant);
+					}, this))
+				.on("loading.jstree", $.proxy(function () {
+						this[ this._data.core.themes.dots ? "show_dots" : "hide_dots" ]();
+						this[ this._data.core.themes.icons ? "show_icons" : "hide_icons" ]();
+						this[ this._data.core.themes.stripes ? "show_stripes" : "hide_stripes" ]();
+						this[ this._data.core.themes.ellipsis ? "show_ellipsis" : "hide_ellipsis" ]();
+					}, this))
+				.on('blur.jstree', '.jstree-anchor', $.proxy(function (e) {
+						this._data.core.focused = null;
+						$(e.currentTarget).filter('.jstree-hovered').mouseleave();
+						this.element.attr('tabindex', '0');
+					}, this))
+				.on('focus.jstree', '.jstree-anchor', $.proxy(function (e) {
+						var tmp = this.get_node(e.currentTarget);
+						if(tmp && tmp.id) {
+							this._data.core.focused = tmp.id;
+						}
+						this.element.find('.jstree-hovered').not(e.currentTarget).mouseleave();
+						$(e.currentTarget).mouseenter();
+						this.element.attr('tabindex', '-1');
+					}, this))
+				.on('focus.jstree', $.proxy(function () {
+						if(+(new Date()) - was_click > 500 && !this._data.core.focused && this.settings.core.restore_focus) {
+							was_click = 0;
+							var act = this.get_node(this.element.attr('aria-activedescendant'), true);
+							if(act) {
+								act.find('> .jstree-anchor').focus();
+							}
+						}
+					}, this))
+				.on('mouseenter.jstree', '.jstree-anchor', $.proxy(function (e) {
+						this.hover_node(e.currentTarget);
+					}, this))
+				.on('mouseleave.jstree', '.jstree-anchor', $.proxy(function (e) {
+						this.dehover_node(e.currentTarget);
+					}, this));
+		},
+		/**
+		 * part of the destroying of an instance. Used internally.
+		 * @private
+		 * @name unbind()
+		 */
+		unbind : function () {
+			this.element.off('.jstree');
+			$(document).off('.jstree-' + this._id);
+		},
+		/**
+		 * trigger an event. Used internally.
+		 * @private
+		 * @name trigger(ev [, data])
+		 * @param  {String} ev the name of the event to trigger
+		 * @param  {Object} data additional data to pass with the event
+		 */
+		trigger : function (ev, data) {
+			if(!data) {
+				data = {};
+			}
+			data.instance = this;
+			this.element.triggerHandler(ev.replace('.jstree','') + '.jstree', data);
+		},
+		/**
+		 * returns the jQuery extended instance container
+		 * @name get_container()
+		 * @return {jQuery}
+		 */
+		get_container : function () {
+			return this.element;
+		},
+		/**
+		 * returns the jQuery extended main UL node inside the instance container. Used internally.
+		 * @private
+		 * @name get_container_ul()
+		 * @return {jQuery}
+		 */
+		get_container_ul : function () {
+			return this.element.children(".jstree-children").first();
+		},
+		/**
+		 * gets string replacements (localization). Used internally.
+		 * @private
+		 * @name get_string(key)
+		 * @param  {String} key
+		 * @return {String}
+		 */
+		get_string : function (key) {
+			var a = this.settings.core.strings;
+			if($.isFunction(a)) { return a.call(this, key); }
+			if(a && a[key]) { return a[key]; }
+			return key;
+		},
+		/**
+		 * gets the first child of a DOM node. Used internally.
+		 * @private
+		 * @name _firstChild(dom)
+		 * @param  {DOMElement} dom
+		 * @return {DOMElement}
+		 */
+		_firstChild : function (dom) {
+			dom = dom ? dom.firstChild : null;
+			while(dom !== null && dom.nodeType !== 1) {
+				dom = dom.nextSibling;
+			}
+			return dom;
+		},
+		/**
+		 * gets the next sibling of a DOM node. Used internally.
+		 * @private
+		 * @name _nextSibling(dom)
+		 * @param  {DOMElement} dom
+		 * @return {DOMElement}
+		 */
+		_nextSibling : function (dom) {
+			dom = dom ? dom.nextSibling : null;
+			while(dom !== null && dom.nodeType !== 1) {
+				dom = dom.nextSibling;
+			}
+			return dom;
+		},
+		/**
+		 * gets the previous sibling of a DOM node. Used internally.
+		 * @private
+		 * @name _previousSibling(dom)
+		 * @param  {DOMElement} dom
+		 * @return {DOMElement}
+		 */
+		_previousSibling : function (dom) {
+			dom = dom ? dom.previousSibling : null;
+			while(dom !== null && dom.nodeType !== 1) {
+				dom = dom.previousSibling;
+			}
+			return dom;
+		},
+		/**
+		 * get the JSON representation of a node (or the actual jQuery extended DOM node) by using any input (child DOM element, ID string, selector, etc)
+		 * @name get_node(obj [, as_dom])
+		 * @param  {mixed} obj
+		 * @param  {Boolean} as_dom
+		 * @return {Object|jQuery}
+		 */
+		get_node : function (obj, as_dom) {
+			if(obj && obj.id) {
+				obj = obj.id;
+			}
+			var dom;
+			try {
+				if(this._model.data[obj]) {
+					obj = this._model.data[obj];
+				}
+				else if(typeof obj === "string" && this._model.data[obj.replace(/^#/, '')]) {
+					obj = this._model.data[obj.replace(/^#/, '')];
+				}
+				else if(typeof obj === "string" && (dom = $('#' + obj.replace($.jstree.idregex,'\\$&'), this.element)).length && this._model.data[dom.closest('.jstree-node').attr('id')]) {
+					obj = this._model.data[dom.closest('.jstree-node').attr('id')];
+				}
+				else if((dom = $(obj, this.element)).length && this._model.data[dom.closest('.jstree-node').attr('id')]) {
+					obj = this._model.data[dom.closest('.jstree-node').attr('id')];
+				}
+				else if((dom = $(obj, this.element)).length && dom.hasClass('jstree')) {
+					obj = this._model.data[$.jstree.root];
+				}
+				else {
+					return false;
+				}
+
+				if(as_dom) {
+					obj = obj.id === $.jstree.root ? this.element : $('#' + obj.id.replace($.jstree.idregex,'\\$&'), this.element);
+				}
+				return obj;
+			} catch (ex) { return false; }
+		},
+		/**
+		 * get the path to a node, either consisting of node texts, or of node IDs, optionally glued together (otherwise an array)
+		 * @name get_path(obj [, glue, ids])
+		 * @param  {mixed} obj the node
+		 * @param  {String} glue if you want the path as a string - pass the glue here (for example '/'), if a falsy value is supplied here, an array is returned
+		 * @param  {Boolean} ids if set to true build the path using ID, otherwise node text is used
+		 * @return {mixed}
+		 */
+		get_path : function (obj, glue, ids) {
+			obj = obj.parents ? obj : this.get_node(obj);
+			if(!obj || obj.id === $.jstree.root || !obj.parents) {
+				return false;
+			}
+			var i, j, p = [];
+			p.push(ids ? obj.id : obj.text);
+			for(i = 0, j = obj.parents.length; i < j; i++) {
+				p.push(ids ? obj.parents[i] : this.get_text(obj.parents[i]));
+			}
+			p = p.reverse().slice(1);
+			return glue ? p.join(glue) : p;
+		},
+		/**
+		 * get the next visible node that is below the `obj` node. If `strict` is set to `true` only sibling nodes are returned.
+		 * @name get_next_dom(obj [, strict])
+		 * @param  {mixed} obj
+		 * @param  {Boolean} strict
+		 * @return {jQuery}
+		 */
+		get_next_dom : function (obj, strict) {
+			var tmp;
+			obj = this.get_node(obj, true);
+			if(obj[0] === this.element[0]) {
+				tmp = this._firstChild(this.get_container_ul()[0]);
+				while (tmp && tmp.offsetHeight === 0) {
+					tmp = this._nextSibling(tmp);
+				}
+				return tmp ? $(tmp) : false;
+			}
+			if(!obj || !obj.length) {
+				return false;
+			}
+			if(strict) {
+				tmp = obj[0];
+				do {
+					tmp = this._nextSibling(tmp);
+				} while (tmp && tmp.offsetHeight === 0);
+				return tmp ? $(tmp) : false;
+			}
+			if(obj.hasClass("jstree-open")) {
+				tmp = this._firstChild(obj.children('.jstree-children')[0]);
+				while (tmp && tmp.offsetHeight === 0) {
+					tmp = this._nextSibling(tmp);
+				}
+				if(tmp !== null) {
+					return $(tmp);
+				}
+			}
+			tmp = obj[0];
+			do {
+				tmp = this._nextSibling(tmp);
+			} while (tmp && tmp.offsetHeight === 0);
+			if(tmp !== null) {
+				return $(tmp);
+			}
+			return obj.parentsUntil(".jstree",".jstree-node").nextAll(".jstree-node:visible").first();
+		},
+		/**
+		 * get the previous visible node that is above the `obj` node. If `strict` is set to `true` only sibling nodes are returned.
+		 * @name get_prev_dom(obj [, strict])
+		 * @param  {mixed} obj
+		 * @param  {Boolean} strict
+		 * @return {jQuery}
+		 */
+		get_prev_dom : function (obj, strict) {
+			var tmp;
+			obj = this.get_node(obj, true);
+			if(obj[0] === this.element[0]) {
+				tmp = this.get_container_ul()[0].lastChild;
+				while (tmp && tmp.offsetHeight === 0) {
+					tmp = this._previousSibling(tmp);
+				}
+				return tmp ? $(tmp) : false;
+			}
+			if(!obj || !obj.length) {
+				return false;
+			}
+			if(strict) {
+				tmp = obj[0];
+				do {
+					tmp = this._previousSibling(tmp);
+				} while (tmp && tmp.offsetHeight === 0);
+				return tmp ? $(tmp) : false;
+			}
+			tmp = obj[0];
+			do {
+				tmp = this._previousSibling(tmp);
+			} while (tmp && tmp.offsetHeight === 0);
+			if(tmp !== null) {
+				obj = $(tmp);
+				while(obj.hasClass("jstree-open")) {
+					obj = obj.children(".jstree-children").first().children(".jstree-node:visible:last");
+				}
+				return obj;
+			}
+			tmp = obj[0].parentNode.parentNode;
+			return tmp && tmp.className && tmp.className.indexOf('jstree-node') !== -1 ? $(tmp) : false;
+		},
+		/**
+		 * get the parent ID of a node
+		 * @name get_parent(obj)
+		 * @param  {mixed} obj
+		 * @return {String}
+		 */
+		get_parent : function (obj) {
+			obj = this.get_node(obj);
+			if(!obj || obj.id === $.jstree.root) {
+				return false;
+			}
+			return obj.parent;
+		},
+		/**
+		 * get a jQuery collection of all the children of a node (node must be rendered), returns false on error
+		 * @name get_children_dom(obj)
+		 * @param  {mixed} obj
+		 * @return {jQuery}
+		 */
+		get_children_dom : function (obj) {
+			obj = this.get_node(obj, true);
+			if(obj[0] === this.element[0]) {
+				return this.get_container_ul().children(".jstree-node");
+			}
+			if(!obj || !obj.length) {
+				return false;
+			}
+			return obj.children(".jstree-children").children(".jstree-node");
+		},
+		/**
+		 * checks if a node has children
+		 * @name is_parent(obj)
+		 * @param  {mixed} obj
+		 * @return {Boolean}
+		 */
+		is_parent : function (obj) {
+			obj = this.get_node(obj);
+			return obj && (obj.state.loaded === false || obj.children.length > 0);
+		},
+		/**
+		 * checks if a node is loaded (its children are available)
+		 * @name is_loaded(obj)
+		 * @param  {mixed} obj
+		 * @return {Boolean}
+		 */
+		is_loaded : function (obj) {
+			obj = this.get_node(obj);
+			return obj && obj.state.loaded;
+		},
+		/**
+		 * check if a node is currently loading (fetching children)
+		 * @name is_loading(obj)
+		 * @param  {mixed} obj
+		 * @return {Boolean}
+		 */
+		is_loading : function (obj) {
+			obj = this.get_node(obj);
+			return obj && obj.state && obj.state.loading;
+		},
+		/**
+		 * check if a node is opened
+		 * @name is_open(obj)
+		 * @param  {mixed} obj
+		 * @return {Boolean}
+		 */
+		is_open : function (obj) {
+			obj = this.get_node(obj);
+			return obj && obj.state.opened;
+		},
+		/**
+		 * check if a node is in a closed state
+		 * @name is_closed(obj)
+		 * @param  {mixed} obj
+		 * @return {Boolean}
+		 */
+		is_closed : function (obj) {
+			obj = this.get_node(obj);
+			return obj && this.is_parent(obj) && !obj.state.opened;
+		},
+		/**
+		 * check if a node has no children
+		 * @name is_leaf(obj)
+		 * @param  {mixed} obj
+		 * @return {Boolean}
+		 */
+		is_leaf : function (obj) {
+			return !this.is_parent(obj);
+		},
+		/**
+		 * loads a node (fetches its children using the `core.data` setting). Multiple nodes can be passed to by using an array.
+		 * @name load_node(obj [, callback])
+		 * @param  {mixed} obj
+		 * @param  {function} callback a function to be executed once loading is complete, the function is executed in the instance's scope and receives two arguments - the node and a boolean status
+		 * @return {Boolean}
+		 * @trigger load_node.jstree
+		 */
+		load_node : function (obj, callback) {
+			var k, l, i, j, c;
+			if($.isArray(obj)) {
+				this._load_nodes(obj.slice(), callback);
+				return true;
+			}
+			obj = this.get_node(obj);
+			if(!obj) {
+				if(callback) { callback.call(this, obj, false); }
+				return false;
+			}
+			// if(obj.state.loading) { } // the node is already loading - just wait for it to load and invoke callback? but if called implicitly it should be loaded again?
+			if(obj.state.loaded) {
+				obj.state.loaded = false;
+				for(i = 0, j = obj.parents.length; i < j; i++) {
+					this._model.data[obj.parents[i]].children_d = $.vakata.array_filter(this._model.data[obj.parents[i]].children_d, function (v) {
+						return $.inArray(v, obj.children_d) === -1;
+					});
+				}
+				for(k = 0, l = obj.children_d.length; k < l; k++) {
+					if(this._model.data[obj.children_d[k]].state.selected) {
+						c = true;
+					}
+					delete this._model.data[obj.children_d[k]];
+				}
+				if (c) {
+					this._data.core.selected = $.vakata.array_filter(this._data.core.selected, function (v) {
+						return $.inArray(v, obj.children_d) === -1;
+					});
+				}
+				obj.children = [];
+				obj.children_d = [];
+				if(c) {
+					this.trigger('changed', { 'action' : 'load_node', 'node' : obj, 'selected' : this._data.core.selected });
+				}
+			}
+			obj.state.failed = false;
+			obj.state.loading = true;
+			this.get_node(obj, true).addClass("jstree-loading").attr('aria-busy',true);
+			this._load_node(obj, $.proxy(function (status) {
+				obj = this._model.data[obj.id];
+				obj.state.loading = false;
+				obj.state.loaded = status;
+				obj.state.failed = !obj.state.loaded;
+				var dom = this.get_node(obj, true), i = 0, j = 0, m = this._model.data, has_children = false;
+				for(i = 0, j = obj.children.length; i < j; i++) {
+					if(m[obj.children[i]] && !m[obj.children[i]].state.hidden) {
+						has_children = true;
+						break;
+					}
+				}
+				if(obj.state.loaded && dom && dom.length) {
+					dom.removeClass('jstree-closed jstree-open jstree-leaf');
+					if (!has_children) {
+						dom.addClass('jstree-leaf');
+					}
+					else {
+						if (obj.id !== '#') {
+							dom.addClass(obj.state.opened ? 'jstree-open' : 'jstree-closed');
+						}
+					}
+				}
+				dom.removeClass("jstree-loading").attr('aria-busy',false);
+				/**
+				 * triggered after a node is loaded
+				 * @event
+				 * @name load_node.jstree
+				 * @param {Object} node the node that was loading
+				 * @param {Boolean} status was the node loaded successfully
+				 */
+				this.trigger('load_node', { "node" : obj, "status" : status });
+				if(callback) {
+					callback.call(this, obj, status);
+				}
+			}, this));
+			return true;
+		},
+		/**
+		 * load an array of nodes (will also load unavailable nodes as soon as the appear in the structure). Used internally.
+		 * @private
+		 * @name _load_nodes(nodes [, callback])
+		 * @param  {array} nodes
+		 * @param  {function} callback a function to be executed once loading is complete, the function is executed in the instance's scope and receives one argument - the array passed to _load_nodes
+		 */
+		_load_nodes : function (nodes, callback, is_callback, force_reload) {
+			var r = true,
+				c = function () { this._load_nodes(nodes, callback, true); },
+				m = this._model.data, i, j, tmp = [];
+			for(i = 0, j = nodes.length; i < j; i++) {
+				if(m[nodes[i]] && ( (!m[nodes[i]].state.loaded && !m[nodes[i]].state.failed) || (!is_callback && force_reload) )) {
+					if(!this.is_loading(nodes[i])) {
+						this.load_node(nodes[i], c);
+					}
+					r = false;
+				}
+			}
+			if(r) {
+				for(i = 0, j = nodes.length; i < j; i++) {
+					if(m[nodes[i]] && m[nodes[i]].state.loaded) {
+						tmp.push(nodes[i]);
+					}
+				}
+				if(callback && !callback.done) {
+					callback.call(this, tmp);
+					callback.done = true;
+				}
+			}
+		},
+		/**
+		 * loads all unloaded nodes
+		 * @name load_all([obj, callback])
+		 * @param {mixed} obj the node to load recursively, omit to load all nodes in the tree
+		 * @param {function} callback a function to be executed once loading all the nodes is complete,
+		 * @trigger load_all.jstree
+		 */
+		load_all : function (obj, callback) {
+			if(!obj) { obj = $.jstree.root; }
+			obj = this.get_node(obj);
+			if(!obj) { return false; }
+			var to_load = [],
+				m = this._model.data,
+				c = m[obj.id].children_d,
+				i, j;
+			if(obj.state && !obj.state.loaded) {
+				to_load.push(obj.id);
+			}
+			for(i = 0, j = c.length; i < j; i++) {
+				if(m[c[i]] && m[c[i]].state && !m[c[i]].state.loaded) {
+					to_load.push(c[i]);
+				}
+			}
+			if(to_load.length) {
+				this._load_nodes(to_load, function () {
+					this.load_all(obj, callback);
+				});
+			}
+			else {
+				/**
+				 * triggered after a load_all call completes
+				 * @event
+				 * @name load_all.jstree
+				 * @param {Object} node the recursively loaded node
+				 */
+				if(callback) { callback.call(this, obj); }
+				this.trigger('load_all', { "node" : obj });
+			}
+		},
+		/**
+		 * handles the actual loading of a node. Used only internally.
+		 * @private
+		 * @name _load_node(obj [, callback])
+		 * @param  {mixed} obj
+		 * @param  {function} callback a function to be executed once loading is complete, the function is executed in the instance's scope and receives one argument - a boolean status
+		 * @return {Boolean}
+		 */
+		_load_node : function (obj, callback) {
+			var s = this.settings.core.data, t;
+			var notTextOrCommentNode = function notTextOrCommentNode () {
+				return this.nodeType !== 3 && this.nodeType !== 8;
+			};
+			// use original HTML
+			if(!s) {
+				if(obj.id === $.jstree.root) {
+					return this._append_html_data(obj, this._data.core.original_container_html.clone(true), function (status) {
+						callback.call(this, status);
+					});
+				}
+				else {
+					return callback.call(this, false);
+				}
+				// return callback.call(this, obj.id === $.jstree.root ? this._append_html_data(obj, this._data.core.original_container_html.clone(true)) : false);
+			}
+			if($.isFunction(s)) {
+				return s.call(this, obj, $.proxy(function (d) {
+					if(d === false) {
+						callback.call(this, false);
+					}
+					else {
+						this[typeof d === 'string' ? '_append_html_data' : '_append_json_data'](obj, typeof d === 'string' ? $($.parseHTML(d)).filter(notTextOrCommentNode) : d, function (status) {
+							callback.call(this, status);
+						});
+					}
+					// return d === false ? callback.call(this, false) : callback.call(this, this[typeof d === 'string' ? '_append_html_data' : '_append_json_data'](obj, typeof d === 'string' ? $(d) : d));
+				}, this));
+			}
+			if(typeof s === 'object') {
+				if(s.url) {
+					s = $.extend(true, {}, s);
+					if($.isFunction(s.url)) {
+						s.url = s.url.call(this, obj);
+					}
+					if($.isFunction(s.data)) {
+						s.data = s.data.call(this, obj);
+					}
+					return $.ajax(s)
+						.done($.proxy(function (d,t,x) {
+								var type = x.getResponseHeader('Content-Type');
+								if((type && type.indexOf('json') !== -1) || typeof d === "object") {
+									return this._append_json_data(obj, d, function (status) { callback.call(this, status); });
+									//return callback.call(this, this._append_json_data(obj, d));
+								}
+								if((type && type.indexOf('html') !== -1) || typeof d === "string") {
+									return this._append_html_data(obj, $($.parseHTML(d)).filter(notTextOrCommentNode), function (status) { callback.call(this, status); });
+									// return callback.call(this, this._append_html_data(obj, $(d)));
+								}
+								this._data.core.last_error = { 'error' : 'ajax', 'plugin' : 'core', 'id' : 'core_04', 'reason' : 'Could not load node', 'data' : JSON.stringify({ 'id' : obj.id, 'xhr' : x }) };
+								this.settings.core.error.call(this, this._data.core.last_error);
+								return callback.call(this, false);
+							}, this))
+						.fail($.proxy(function (f) {
+								this._data.core.last_error = { 'error' : 'ajax', 'plugin' : 'core', 'id' : 'core_04', 'reason' : 'Could not load node', 'data' : JSON.stringify({ 'id' : obj.id, 'xhr' : f }) };
+								callback.call(this, false);
+								this.settings.core.error.call(this, this._data.core.last_error);
+							}, this));
+				}
+				if ($.isArray(s)) {
+					t = $.extend(true, [], s);
+				} else if ($.isPlainObject(s)) {
+					t = $.extend(true, {}, s);
+				} else {
+					t = s;
+				}
+				if(obj.id === $.jstree.root) {
+					return this._append_json_data(obj, t, function (status) {
+						callback.call(this, status);
+					});
+				}
+				else {
+					this._data.core.last_error = { 'error' : 'nodata', 'plugin' : 'core', 'id' : 'core_05', 'reason' : 'Could not load node', 'data' : JSON.stringify({ 'id' : obj.id }) };
+					this.settings.core.error.call(this, this._data.core.last_error);
+					return callback.call(this, false);
+				}
+				//return callback.call(this, (obj.id === $.jstree.root ? this._append_json_data(obj, t) : false) );
+			}
+			if(typeof s === 'string') {
+				if(obj.id === $.jstree.root) {
+					return this._append_html_data(obj, $($.parseHTML(s)).filter(notTextOrCommentNode), function (status) {
+						callback.call(this, status);
+					});
+				}
+				else {
+					this._data.core.last_error = { 'error' : 'nodata', 'plugin' : 'core', 'id' : 'core_06', 'reason' : 'Could not load node', 'data' : JSON.stringify({ 'id' : obj.id }) };
+					this.settings.core.error.call(this, this._data.core.last_error);
+					return callback.call(this, false);
+				}
+				//return callback.call(this, (obj.id === $.jstree.root ? this._append_html_data(obj, $(s)) : false) );
+			}
+			return callback.call(this, false);
+		},
+		/**
+		 * adds a node to the list of nodes to redraw. Used only internally.
+		 * @private
+		 * @name _node_changed(obj [, callback])
+		 * @param  {mixed} obj
+		 */
+		_node_changed : function (obj) {
+			obj = this.get_node(obj);
+      if (obj && $.inArray(obj.id, this._model.changed) === -1) {
+				this._model.changed.push(obj.id);
+			}
+		},
+		/**
+		 * appends HTML content to the tree. Used internally.
+		 * @private
+		 * @name _append_html_data(obj, data)
+		 * @param  {mixed} obj the node to append to
+		 * @param  {String} data the HTML string to parse and append
+		 * @trigger model.jstree, changed.jstree
+		 */
+		_append_html_data : function (dom, data, cb) {
+			dom = this.get_node(dom);
+			dom.children = [];
+			dom.children_d = [];
+			var dat = data.is('ul') ? data.children() : data,
+				par = dom.id,
+				chd = [],
+				dpc = [],
+				m = this._model.data,
+				p = m[par],
+				s = this._data.core.selected.length,
+				tmp, i, j;
+			dat.each($.proxy(function (i, v) {
+				tmp = this._parse_model_from_html($(v), par, p.parents.concat());
+				if(tmp) {
+					chd.push(tmp);
+					dpc.push(tmp);
+					if(m[tmp].children_d.length) {
+						dpc = dpc.concat(m[tmp].children_d);
+					}
+				}
+			}, this));
+			p.children = chd;
+			p.children_d = dpc;
+			for(i = 0, j = p.parents.length; i < j; i++) {
+				m[p.parents[i]].children_d = m[p.parents[i]].children_d.concat(dpc);
+			}
+			/**
+			 * triggered when new data is inserted to the tree model
+			 * @event
+			 * @name model.jstree
+			 * @param {Array} nodes an array of node IDs
+			 * @param {String} parent the parent ID of the nodes
+			 */
+			this.trigger('model', { "nodes" : dpc, 'parent' : par });
+			if(par !== $.jstree.root) {
+				this._node_changed(par);
+				this.redraw();
+			}
+			else {
+				this.get_container_ul().children('.jstree-initial-node').remove();
+				this.redraw(true);
+			}
+			if(this._data.core.selected.length !== s) {
+				this.trigger('changed', { 'action' : 'model', 'selected' : this._data.core.selected });
+			}
+			cb.call(this, true);
+		},
+		/**
+		 * appends JSON content to the tree. Used internally.
+		 * @private
+		 * @name _append_json_data(obj, data)
+		 * @param  {mixed} obj the node to append to
+		 * @param  {String} data the JSON object to parse and append
+		 * @param  {Boolean} force_processing internal param - do not set
+		 * @trigger model.jstree, changed.jstree
+		 */
+		_append_json_data : function (dom, data, cb, force_processing) {
+			if(this.element === null) { return; }
+			dom = this.get_node(dom);
+			dom.children = [];
+			dom.children_d = [];
+			// *%$@!!!
+			if(data.d) {
+				data = data.d;
+				if(typeof data === "string") {
+					data = JSON.parse(data);
+				}
+			}
+			if(!$.isArray(data)) { data = [data]; }
+			var w = null,
+				args = {
+					'df'	: this._model.default_state,
+					'dat'	: data,
+					'par'	: dom.id,
+					'm'		: this._model.data,
+					't_id'	: this._id,
+					't_cnt'	: this._cnt,
+					'sel'	: this._data.core.selected
+				},
+				func = function (data, undefined) {
+					if(data.data) { data = data.data; }
+					var dat = data.dat,
+						par = data.par,
+						chd = [],
+						dpc = [],
+						add = [],
+						df = data.df,
+						t_id = data.t_id,
+						t_cnt = data.t_cnt,
+						m = data.m,
+						p = m[par],
+						sel = data.sel,
+						tmp, i, j, rslt,
+						parse_flat = function (d, p, ps) {
+							if(!ps) { ps = []; }
+							else { ps = ps.concat(); }
+							if(p) { ps.unshift(p); }
+							var tid = d.id.toString(),
+								i, j, c, e,
+								tmp = {
+									id			: tid,
+									text		: d.text || '',
+									icon		: d.icon !== undefined ? d.icon : true,
+									parent		: p,
+									parents		: ps,
+									children	: d.children || [],
+									children_d	: d.children_d || [],
+									data		: d.data,
+									state		: { },
+									li_attr		: { id : false },
+									a_attr		: { href : '#' },
+									original	: false
+								};
+							for(i in df) {
+								if(df.hasOwnProperty(i)) {
+									tmp.state[i] = df[i];
+								}
+							}
+							if(d && d.data && d.data.jstree && d.data.jstree.icon) {
+								tmp.icon = d.data.jstree.icon;
+							}
+							if(tmp.icon === undefined || tmp.icon === null || tmp.icon === "") {
+								tmp.icon = true;
+							}
+							if(d && d.data) {
+								tmp.data = d.data;
+								if(d.data.jstree) {
+									for(i in d.data.jstree) {
+										if(d.data.jstree.hasOwnProperty(i)) {
+											tmp.state[i] = d.data.jstree[i];
+										}
+									}
+								}
+							}
+							if(d && typeof d.state === 'object') {
+								for (i in d.state) {
+									if(d.state.hasOwnProperty(i)) {
+										tmp.state[i] = d.state[i];
+									}
+								}
+							}
+							if(d && typeof d.li_attr === 'object') {
+								for (i in d.li_attr) {
+									if(d.li_attr.hasOwnProperty(i)) {
+										tmp.li_attr[i] = d.li_attr[i];
+									}
+								}
+							}
+							if(!tmp.li_attr.id) {
+								tmp.li_attr.id = tid;
+							}
+							if(d && typeof d.a_attr === 'object') {
+								for (i in d.a_attr) {
+									if(d.a_attr.hasOwnProperty(i)) {
+										tmp.a_attr[i] = d.a_attr[i];
+									}
+								}
+							}
+							if(d && d.children && d.children === true) {
+								tmp.state.loaded = false;
+								tmp.children = [];
+								tmp.children_d = [];
+							}
+							m[tmp.id] = tmp;
+							for(i = 0, j = tmp.children.length; i < j; i++) {
+								c = parse_flat(m[tmp.children[i]], tmp.id, ps);
+								e = m[c];
+								tmp.children_d.push(c);
+								if(e.children_d.length) {
+									tmp.children_d = tmp.children_d.concat(e.children_d);
+								}
+							}
+							delete d.data;
+							delete d.children;
+							m[tmp.id].original = d;
+							if(tmp.state.selected) {
+								add.push(tmp.id);
+							}
+							return tmp.id;
+						},
+						parse_nest = function (d, p, ps) {
+							if(!ps) { ps = []; }
+							else { ps = ps.concat(); }
+							if(p) { ps.unshift(p); }
+							var tid = false, i, j, c, e, tmp;
+							do {
+								tid = 'j' + t_id + '_' + (++t_cnt);
+							} while(m[tid]);
+
+							tmp = {
+								id			: false,
+								text		: typeof d === 'string' ? d : '',
+								icon		: typeof d === 'object' && d.icon !== undefined ? d.icon : true,
+								parent		: p,
+								parents		: ps,
+								children	: [],
+								children_d	: [],
+								data		: null,
+								state		: { },
+								li_attr		: { id : false },
+								a_attr		: { href : '#' },
+								original	: false
+							};
+							for(i in df) {
+								if(df.hasOwnProperty(i)) {
+									tmp.state[i] = df[i];
+								}
+							}
+							if(d && d.id) { tmp.id = d.id.toString(); }
+							if(d && d.text) { tmp.text = d.text; }
+							if(d && d.data && d.data.jstree && d.data.jstree.icon) {
+								tmp.icon = d.data.jstree.icon;
+							}
+							if(tmp.icon === undefined || tmp.icon === null || tmp.icon === "") {
+								tmp.icon = true;
+							}
+							if(d && d.data) {
+								tmp.data = d.data;
+								if(d.data.jstree) {
+									for(i in d.data.jstree) {
+										if(d.data.jstree.hasOwnProperty(i)) {
+											tmp.state[i] = d.data.jstree[i];
+										}
+									}
+								}
+							}
+							if(d && typeof d.state === 'object') {
+								for (i in d.state) {
+									if(d.state.hasOwnProperty(i)) {
+										tmp.state[i] = d.state[i];
+									}
+								}
+							}
+							if(d && typeof d.li_attr === 'object') {
+								for (i in d.li_attr) {
+									if(d.li_attr.hasOwnProperty(i)) {
+										tmp.li_attr[i] = d.li_attr[i];
+									}
+								}
+							}
+							if(tmp.li_attr.id && !tmp.id) {
+								tmp.id = tmp.li_attr.id.toString();
+							}
+							if(!tmp.id) {
+								tmp.id = tid;
+							}
+							if(!tmp.li_attr.id) {
+								tmp.li_attr.id = tmp.id;
+							}
+							if(d && typeof d.a_attr === 'object') {
+								for (i in d.a_attr) {
+									if(d.a_attr.hasOwnProperty(i)) {
+										tmp.a_attr[i] = d.a_attr[i];
+									}
+								}
+							}
+							if(d && d.children && d.children.length) {
+								for(i = 0, j = d.children.length; i < j; i++) {
+									c = parse_nest(d.children[i], tmp.id, ps);
+									e = m[c];
+									tmp.children.push(c);
+									if(e.children_d.length) {
+										tmp.children_d = tmp.children_d.concat(e.children_d);
+									}
+								}
+								tmp.children_d = tmp.children_d.concat(tmp.children);
+							}
+							if(d && d.children && d.children === true) {
+								tmp.state.loaded = false;
+								tmp.children = [];
+								tmp.children_d = [];
+							}
+							delete d.data;
+							delete d.children;
+							tmp.original = d;
+							m[tmp.id] = tmp;
+							if(tmp.state.selected) {
+								add.push(tmp.id);
+							}
+							return tmp.id;
+						};
+
+					if(dat.length && dat[0].id !== undefined && dat[0].parent !== undefined) {
+						// Flat JSON support (for easy import from DB):
+						// 1) convert to object (foreach)
+						for(i = 0, j = dat.length; i < j; i++) {
+							if(!dat[i].children) {
+								dat[i].children = [];
+							}
+							if(!dat[i].state) {
+								dat[i].state = {};
+							}
+							m[dat[i].id.toString()] = dat[i];
+						}
+						// 2) populate children (foreach)
+						for(i = 0, j = dat.length; i < j; i++) {
+							if (!m[dat[i].parent.toString()]) {
+								this._data.core.last_error = { 'error' : 'parse', 'plugin' : 'core', 'id' : 'core_07', 'reason' : 'Node with invalid parent', 'data' : JSON.stringify({ 'id' : dat[i].id.toString(), 'parent' : dat[i].parent.toString() }) };
+								this.settings.core.error.call(this, this._data.core.last_error);
+								continue;
+							}
+
+							m[dat[i].parent.toString()].children.push(dat[i].id.toString());
+							// populate parent.children_d
+							p.children_d.push(dat[i].id.toString());
+						}
+						// 3) normalize && populate parents and children_d with recursion
+						for(i = 0, j = p.children.length; i < j; i++) {
+							tmp = parse_flat(m[p.children[i]], par, p.parents.concat());
+							dpc.push(tmp);
+							if(m[tmp].children_d.length) {
+								dpc = dpc.concat(m[tmp].children_d);
+							}
+						}
+						for(i = 0, j = p.parents.length; i < j; i++) {
+							m[p.parents[i]].children_d = m[p.parents[i]].children_d.concat(dpc);
+						}
+						// ?) three_state selection - p.state.selected && t - (if three_state foreach(dat => ch) -> foreach(parents) if(parent.selected) child.selected = true;
+						rslt = {
+							'cnt' : t_cnt,
+							'mod' : m,
+							'sel' : sel,
+							'par' : par,
+							'dpc' : dpc,
+							'add' : add
+						};
+					}
+					else {
+						for(i = 0, j = dat.length; i < j; i++) {
+							tmp = parse_nest(dat[i], par, p.parents.concat());
+							if(tmp) {
+								chd.push(tmp);
+								dpc.push(tmp);
+								if(m[tmp].children_d.length) {
+									dpc = dpc.concat(m[tmp].children_d);
+								}
+							}
+						}
+						p.children = chd;
+						p.children_d = dpc;
+						for(i = 0, j = p.parents.length; i < j; i++) {
+							m[p.parents[i]].children_d = m[p.parents[i]].children_d.concat(dpc);
+						}
+						rslt = {
+							'cnt' : t_cnt,
+							'mod' : m,
+							'sel' : sel,
+							'par' : par,
+							'dpc' : dpc,
+							'add' : add
+						};
+					}
+					if(typeof window === 'undefined' || typeof window.document === 'undefined') {
+						postMessage(rslt);
+					}
+					else {
+						return rslt;
+					}
+				},
+				rslt = function (rslt, worker) {
+					if(this.element === null) { return; }
+					this._cnt = rslt.cnt;
+					var i, m = this._model.data;
+					for (i in m) {
+						if (m.hasOwnProperty(i) && m[i].state && m[i].state.loading && rslt.mod[i]) {
+							rslt.mod[i].state.loading = true;
+						}
+					}
+					this._model.data = rslt.mod; // breaks the reference in load_node - careful
+
+					if(worker) {
+						var j, a = rslt.add, r = rslt.sel, s = this._data.core.selected.slice();
+						m = this._model.data;
+						// if selection was changed while calculating in worker
+						if(r.length !== s.length || $.vakata.array_unique(r.concat(s)).length !== r.length) {
+							// deselect nodes that are no longer selected
+							for(i = 0, j = r.length; i < j; i++) {
+								if($.inArray(r[i], a) === -1 && $.inArray(r[i], s) === -1) {
+									m[r[i]].state.selected = false;
+								}
+							}
+							// select nodes that were selected in the mean time
+							for(i = 0, j = s.length; i < j; i++) {
+								if($.inArray(s[i], r) === -1) {
+									m[s[i]].state.selected = true;
+								}
+							}
+						}
+					}
+					if(rslt.add.length) {
+						this._data.core.selected = this._data.core.selected.concat(rslt.add);
+					}
+
+					this.trigger('model', { "nodes" : rslt.dpc, 'parent' : rslt.par });
+
+					if(rslt.par !== $.jstree.root) {
+						this._node_changed(rslt.par);
+						this.redraw();
+					}
+					else {
+						// this.get_container_ul().children('.jstree-initial-node').remove();
+						this.redraw(true);
+					}
+					if(rslt.add.length) {
+						this.trigger('changed', { 'action' : 'model', 'selected' : this._data.core.selected });
+					}
+					cb.call(this, true);
+				};
+			if(this.settings.core.worker && window.Blob && window.URL && window.Worker) {
+				try {
+					if(this._wrk === null) {
+						this._wrk = window.URL.createObjectURL(
+							new window.Blob(
+								['self.onmessage = ' + func.toString()],
+								{type:"text/javascript"}
+							)
+						);
+					}
+					if(!this._data.core.working || force_processing) {
+						this._data.core.working = true;
+						w = new window.Worker(this._wrk);
+						w.onmessage = $.proxy(function (e) {
+							rslt.call(this, e.data, true);
+							try { w.terminate(); w = null; } catch(ignore) { }
+							if(this._data.core.worker_queue.length) {
+								this._append_json_data.apply(this, this._data.core.worker_queue.shift());
+							}
+							else {
+								this._data.core.working = false;
+							}
+						}, this);
+						if(!args.par) {
+							if(this._data.core.worker_queue.length) {
+								this._append_json_data.apply(this, this._data.core.worker_queue.shift());
+							}
+							else {
+								this._data.core.working = false;
+							}
+						}
+						else {
+							w.postMessage(args);
+						}
+					}
+					else {
+						this._data.core.worker_queue.push([dom, data, cb, true]);
+					}
+				}
+				catch(e) {
+					rslt.call(this, func(args), false);
+					if(this._data.core.worker_queue.length) {
+						this._append_json_data.apply(this, this._data.core.worker_queue.shift());
+					}
+					else {
+						this._data.core.working = false;
+					}
+				}
+			}
+			else {
+				rslt.call(this, func(args), false);
+			}
+		},
+		/**
+		 * parses a node from a jQuery object and appends them to the in memory tree model. Used internally.
+		 * @private
+		 * @name _parse_model_from_html(d [, p, ps])
+		 * @param  {jQuery} d the jQuery object to parse
+		 * @param  {String} p the parent ID
+		 * @param  {Array} ps list of all parents
+		 * @return {String} the ID of the object added to the model
+		 */
+		_parse_model_from_html : function (d, p, ps) {
+			if(!ps) { ps = []; }
+			else { ps = [].concat(ps); }
+			if(p) { ps.unshift(p); }
+			var c, e, m = this._model.data,
+				data = {
+					id			: false,
+					text		: false,
+					icon		: true,
+					parent		: p,
+					parents		: ps,
+					children	: [],
+					children_d	: [],
+					data		: null,
+					state		: { },
+					li_attr		: { id : false },
+					a_attr		: { href : '#' },
+					original	: false
+				}, i, tmp, tid;
+			for(i in this._model.default_state) {
+				if(this._model.default_state.hasOwnProperty(i)) {
+					data.state[i] = this._model.default_state[i];
+				}
+			}
+			tmp = $.vakata.attributes(d, true);
+			$.each(tmp, function (i, v) {
+				v = $.trim(v);
+				if(!v.length) { return true; }
+				data.li_attr[i] = v;
+				if(i === 'id') {
+					data.id = v.toString();
+				}
+			});
+			tmp = d.children('a').first();
+			if(tmp.length) {
+				tmp = $.vakata.attributes(tmp, true);
+				$.each(tmp, function (i, v) {
+					v = $.trim(v);
+					if(v.length) {
+						data.a_attr[i] = v;
+					}
+				});
+			}
+			tmp = d.children("a").first().length ? d.children("a").first().clone() : d.clone();
+			tmp.children("ins, i, ul").remove();
+			tmp = tmp.html();
+			tmp = $('<div />').html(tmp);
+			data.text = this.settings.core.force_text ? tmp.text() : tmp.html();
+			tmp = d.data();
+			data.data = tmp ? $.extend(true, {}, tmp) : null;
+			data.state.opened = d.hasClass('jstree-open');
+			data.state.selected = d.children('a').hasClass('jstree-clicked');
+			data.state.disabled = d.children('a').hasClass('jstree-disabled');
+			if(data.data && data.data.jstree) {
+				for(i in data.data.jstree) {
+					if(data.data.jstree.hasOwnProperty(i)) {
+						data.state[i] = data.data.jstree[i];
+					}
+				}
+			}
+			tmp = d.children("a").children(".jstree-themeicon");
+			if(tmp.length) {
+				data.icon = tmp.hasClass('jstree-themeicon-hidden') ? false : tmp.attr('rel');
+			}
+			if(data.state.icon !== undefined) {
+				data.icon = data.state.icon;
+			}
+			if(data.icon === undefined || data.icon === null || data.icon === "") {
+				data.icon = true;
+			}
+			tmp = d.children("ul").children("li");
+			do {
+				tid = 'j' + this._id + '_' + (++this._cnt);
+			} while(m[tid]);
+			data.id = data.li_attr.id ? data.li_attr.id.toString() : tid;
+			if(tmp.length) {
+				tmp.each($.proxy(function (i, v) {
+					c = this._parse_model_from_html($(v), data.id, ps);
+					e = this._model.data[c];
+					data.children.push(c);
+					if(e.children_d.length) {
+						data.children_d = data.children_d.concat(e.children_d);
+					}
+				}, this));
+				data.children_d = data.children_d.concat(data.children);
+			}
+			else {
+				if(d.hasClass('jstree-closed')) {
+					data.state.loaded = false;
+				}
+			}
+			if(data.li_attr['class']) {
+				data.li_attr['class'] = data.li_attr['class'].replace('jstree-closed','').replace('jstree-open','');
+			}
+			if(data.a_attr['class']) {
+				data.a_attr['class'] = data.a_attr['class'].replace('jstree-clicked','').replace('jstree-disabled','');
+			}
+			m[data.id] = data;
+			if(data.state.selected) {
+				this._data.core.selected.push(data.id);
+			}
+			return data.id;
+		},
+		/**
+		 * parses a node from a JSON object (used when dealing with flat data, which has no nesting of children, but has id and parent properties) and appends it to the in memory tree model. Used internally.
+		 * @private
+		 * @name _parse_model_from_flat_json(d [, p, ps])
+		 * @param  {Object} d the JSON object to parse
+		 * @param  {String} p the parent ID
+		 * @param  {Array} ps list of all parents
+		 * @return {String} the ID of the object added to the model
+		 */
+		_parse_model_from_flat_json : function (d, p, ps) {
+			if(!ps) { ps = []; }
+			else { ps = ps.concat(); }
+			if(p) { ps.unshift(p); }
+			var tid = d.id.toString(),
+				m = this._model.data,
+				df = this._model.default_state,
+				i, j, c, e,
+				tmp = {
+					id			: tid,
+					text		: d.text || '',
+					icon		: d.icon !== undefined ? d.icon : true,
+					parent		: p,
+					parents		: ps,
+					children	: d.children || [],
+					children_d	: d.children_d || [],
+					data		: d.data,
+					state		: { },
+					li_attr		: { id : false },
+					a_attr		: { href : '#' },
+					original	: false
+				};
+			for(i in df) {
+				if(df.hasOwnProperty(i)) {
+					tmp.state[i] = df[i];
+				}
+			}
+			if(d && d.data && d.data.jstree && d.data.jstree.icon) {
+				tmp.icon = d.data.jstree.icon;
+			}
+			if(tmp.icon === undefined || tmp.icon === null || tmp.icon === "") {
+				tmp.icon = true;
+			}
+			if(d && d.data) {
+				tmp.data = d.data;
+				if(d.data.jstree) {
+					for(i in d.data.jstree) {
+						if(d.data.jstree.hasOwnProperty(i)) {
+							tmp.state[i] = d.data.jstree[i];
+						}
+					}
+				}
+			}
+			if(d && typeof d.state === 'object') {
+				for (i in d.state) {
+					if(d.state.hasOwnProperty(i)) {
+						tmp.state[i] = d.state[i];
+					}
+				}
+			}
+			if(d && typeof d.li_attr === 'object') {
+				for (i in d.li_attr) {
+					if(d.li_attr.hasOwnProperty(i)) {
+						tmp.li_attr[i] = d.li_attr[i];
+					}
+				}
+			}
+			if(!tmp.li_attr.id) {
+				tmp.li_attr.id = tid;
+			}
+			if(d && typeof d.a_attr === 'object') {
+				for (i in d.a_attr) {
+					if(d.a_attr.hasOwnProperty(i)) {
+						tmp.a_attr[i] = d.a_attr[i];
+					}
+				}
+			}
+			if(d && d.children && d.children === true) {
+				tmp.state.loaded = false;
+				tmp.children = [];
+				tmp.children_d = [];
+			}
+			m[tmp.id] = tmp;
+			for(i = 0, j = tmp.children.length; i < j; i++) {
+				c = this._parse_model_from_flat_json(m[tmp.children[i]], tmp.id, ps);
+				e = m[c];
+				tmp.children_d.push(c);
+				if(e.children_d.length) {
+					tmp.children_d = tmp.children_d.concat(e.children_d);
+				}
+			}
+			delete d.data;
+			delete d.children;
+			m[tmp.id].original = d;
+			if(tmp.state.selected) {
+				this._data.core.selected.push(tmp.id);
+			}
+			return tmp.id;
+		},
+		/**
+		 * parses a node from a JSON object and appends it to the in memory tree model. Used internally.
+		 * @private
+		 * @name _parse_model_from_json(d [, p, ps])
+		 * @param  {Object} d the JSON object to parse
+		 * @param  {String} p the parent ID
+		 * @param  {Array} ps list of all parents
+		 * @return {String} the ID of the object added to the model
+		 */
+		_parse_model_from_json : function (d, p, ps) {
+			if(!ps) { ps = []; }
+			else { ps = ps.concat(); }
+			if(p) { ps.unshift(p); }
+			var tid = false, i, j, c, e, m = this._model.data, df = this._model.default_state, tmp;
+			do {
+				tid = 'j' + this._id + '_' + (++this._cnt);
+			} while(m[tid]);
+
+			tmp = {
+				id			: false,
+				text		: typeof d === 'string' ? d : '',
+				icon		: typeof d === 'object' && d.icon !== undefined ? d.icon : true,
+				parent		: p,
+				parents		: ps,
+				children	: [],
+				children_d	: [],
+				data		: null,
+				state		: { },
+				li_attr		: { id : false },
+				a_attr		: { href : '#' },
+				original	: false
+			};
+			for(i in df) {
+				if(df.hasOwnProperty(i)) {
+					tmp.state[i] = df[i];
+				}
+			}
+			if(d && d.id) { tmp.id = d.id.toString(); }
+			if(d && d.text) { tmp.text = d.text; }
+			if(d && d.data && d.data.jstree && d.data.jstree.icon) {
+				tmp.icon = d.data.jstree.icon;
+			}
+			if(tmp.icon === undefined || tmp.icon === null || tmp.icon === "") {
+				tmp.icon = true;
+			}
+			if(d && d.data) {
+				tmp.data = d.data;
+				if(d.data.jstree) {
+					for(i in d.data.jstree) {
+						if(d.data.jstree.hasOwnProperty(i)) {
+							tmp.state[i] = d.data.jstree[i];
+						}
+					}
+				}
+			}
+			if(d && typeof d.state === 'object') {
+				for (i in d.state) {
+					if(d.state.hasOwnProperty(i)) {
+						tmp.state[i] = d.state[i];
+					}
+				}
+			}
+			if(d && typeof d.li_attr === 'object') {
+				for (i in d.li_attr) {
+					if(d.li_attr.hasOwnProperty(i)) {
+						tmp.li_attr[i] = d.li_attr[i];
+					}
+				}
+			}
+			if(tmp.li_attr.id && !tmp.id) {
+				tmp.id = tmp.li_attr.id.toString();
+			}
+			if(!tmp.id) {
+				tmp.id = tid;
+			}
+			if(!tmp.li_attr.id) {
+				tmp.li_attr.id = tmp.id;
+			}
+			if(d && typeof d.a_attr === 'object') {
+				for (i in d.a_attr) {
+					if(d.a_attr.hasOwnProperty(i)) {
+						tmp.a_attr[i] = d.a_attr[i];
+					}
+				}
+			}
+			if(d && d.children && d.children.length) {
+				for(i = 0, j = d.children.length; i < j; i++) {
+					c = this._parse_model_from_json(d.children[i], tmp.id, ps);
+					e = m[c];
+					tmp.children.push(c);
+					if(e.children_d.length) {
+						tmp.children_d = tmp.children_d.concat(e.children_d);
+					}
+				}
+				tmp.children_d = tmp.children_d.concat(tmp.children);
+			}
+			if(d && d.children && d.children === true) {
+				tmp.state.loaded = false;
+				tmp.children = [];
+				tmp.children_d = [];
+			}
+			delete d.data;
+			delete d.children;
+			tmp.original = d;
+			m[tmp.id] = tmp;
+			if(tmp.state.selected) {
+				this._data.core.selected.push(tmp.id);
+			}
+			return tmp.id;
+		},
+		/**
+		 * redraws all nodes that need to be redrawn. Used internally.
+		 * @private
+		 * @name _redraw()
+		 * @trigger redraw.jstree
+		 */
+		_redraw : function () {
+			var nodes = this._model.force_full_redraw ? this._model.data[$.jstree.root].children.concat([]) : this._model.changed.concat([]),
+				f = document.createElement('UL'), tmp, i, j, fe = this._data.core.focused;
+			for(i = 0, j = nodes.length; i < j; i++) {
+				tmp = this.redraw_node(nodes[i], true, this._model.force_full_redraw);
+				if(tmp && this._model.force_full_redraw) {
+					f.appendChild(tmp);
+				}
+			}
+			if(this._model.force_full_redraw) {
+				f.className = this.get_container_ul()[0].className;
+				f.setAttribute('role','group');
+				this.element.empty().append(f);
+				//this.get_container_ul()[0].appendChild(f);
+			}
+			if(fe !== null) {
+				tmp = this.get_node(fe, true);
+				if(tmp && tmp.length && tmp.children('.jstree-anchor')[0] !== document.activeElement) {
+					tmp.children('.jstree-anchor').focus();
+				}
+				else {
+					this._data.core.focused = null;
+				}
+			}
+			this._model.force_full_redraw = false;
+			this._model.changed = [];
+			/**
+			 * triggered after nodes are redrawn
+			 * @event
+			 * @name redraw.jstree
+			 * @param {array} nodes the redrawn nodes
+			 */
+			this.trigger('redraw', { "nodes" : nodes });
+		},
+		/**
+		 * redraws all nodes that need to be redrawn or optionally - the whole tree
+		 * @name redraw([full])
+		 * @param {Boolean} full if set to `true` all nodes are redrawn.
+		 */
+		redraw : function (full) {
+			if(full) {
+				this._model.force_full_redraw = true;
+			}
+			//if(this._model.redraw_timeout) {
+			//	clearTimeout(this._model.redraw_timeout);
+			//}
+			//this._model.redraw_timeout = setTimeout($.proxy(this._redraw, this),0);
+			this._redraw();
+		},
+		/**
+		 * redraws a single node's children. Used internally.
+		 * @private
+		 * @name draw_children(node)
+		 * @param {mixed} node the node whose children will be redrawn
+		 */
+		draw_children : function (node) {
+			var obj = this.get_node(node),
+				i = false,
+				j = false,
+				k = false,
+				d = document;
+			if(!obj) { return false; }
+			if(obj.id === $.jstree.root) { return this.redraw(true); }
+			node = this.get_node(node, true);
+			if(!node || !node.length) { return false; } // TODO: quick toggle
+
+			node.children('.jstree-children').remove();
+			node = node[0];
+			if(obj.children.length && obj.state.loaded) {
+				k = d.createElement('UL');
+				k.setAttribute('role', 'group');
+				k.className = 'jstree-children';
+				for(i = 0, j = obj.children.length; i < j; i++) {
+					k.appendChild(this.redraw_node(obj.children[i], true, true));
+				}
+				node.appendChild(k);
+			}
+		},
+		/**
+		 * redraws a single node. Used internally.
+		 * @private
+		 * @name redraw_node(node, deep, is_callback, force_render)
+		 * @param {mixed} node the node to redraw
+		 * @param {Boolean} deep should child nodes be redrawn too
+		 * @param {Boolean} is_callback is this a recursion call
+		 * @param {Boolean} force_render should children of closed parents be drawn anyway
+		 */
+		redraw_node : function (node, deep, is_callback, force_render) {
+			var obj = this.get_node(node),
+				par = false,
+				ind = false,
+				old = false,
+				i = false,
+				j = false,
+				k = false,
+				c = '',
+				d = document,
+				m = this._model.data,
+				f = false,
+				s = false,
+				tmp = null,
+				t = 0,
+				l = 0,
+				has_children = false,
+				last_sibling = false;
+			if(!obj) { return false; }
+			if(obj.id === $.jstree.root) {  return this.redraw(true); }
+			deep = deep || obj.children.length === 0;
+			node = !document.querySelector ? document.getElementById(obj.id) : this.element[0].querySelector('#' + ("0123456789".indexOf(obj.id[0]) !== -1 ? '\\3' + obj.id[0] + ' ' + obj.id.substr(1).replace($.jstree.idregex,'\\$&') : obj.id.replace($.jstree.idregex,'\\$&')) ); //, this.element);
+			if(!node) {
+				deep = true;
+				//node = d.createElement('LI');
+				if(!is_callback) {
+					par = obj.parent !== $.jstree.root ? $('#' + obj.parent.replace($.jstree.idregex,'\\$&'), this.element)[0] : null;
+					if(par !== null && (!par || !m[obj.parent].state.opened)) {
+						return false;
+					}
+					ind = $.inArray(obj.id, par === null ? m[$.jstree.root].children : m[obj.parent].children);
+				}
+			}
+			else {
+				node = $(node);
+				if(!is_callback) {
+					par = node.parent().parent()[0];
+					if(par === this.element[0]) {
+						par = null;
+					}
+					ind = node.index();
+				}
+				// m[obj.id].data = node.data(); // use only node's data, no need to touch jquery storage
+				if(!deep && obj.children.length && !node.children('.jstree-children').length) {
+					deep = true;
+				}
+				if(!deep) {
+					old = node.children('.jstree-children')[0];
+				}
+				f = node.children('.jstree-anchor')[0] === document.activeElement;
+				node.remove();
+				//node = d.createElement('LI');
+				//node = node[0];
+			}
+			node = this._data.core.node.cloneNode(true);
+			// node is DOM, deep is boolean
+
+			c = 'jstree-node ';
+			for(i in obj.li_attr) {
+				if(obj.li_attr.hasOwnProperty(i)) {
+					if(i === 'id') { continue; }
+					if(i !== 'class') {
+						node.setAttribute(i, obj.li_attr[i]);
+					}
+					else {
+						c += obj.li_attr[i];
+					}
+				}
+			}
+			if(!obj.a_attr.id) {
+				obj.a_attr.id = obj.id + '_anchor';
+			}
+			node.setAttribute('aria-selected', !!obj.state.selected);
+			node.setAttribute('aria-level', obj.parents.length);
+			node.setAttribute('aria-labelledby', obj.a_attr.id);
+			if(obj.state.disabled) {
+				node.setAttribute('aria-disabled', true);
+			}
+
+			for(i = 0, j = obj.children.length; i < j; i++) {
+				if(!m[obj.children[i]].state.hidden) {
+					has_children = true;
+					break;
+				}
+			}
+			if(obj.parent !== null && m[obj.parent] && !obj.state.hidden) {
+				i = $.inArray(obj.id, m[obj.parent].children);
+				last_sibling = obj.id;
+				if(i !== -1) {
+					i++;
+					for(j = m[obj.parent].children.length; i < j; i++) {
+						if(!m[m[obj.parent].children[i]].state.hidden) {
+							last_sibling = m[obj.parent].children[i];
+						}
+						if(last_sibling !== obj.id) {
+							break;
+						}
+					}
+				}
+			}
+
+			if(obj.state.hidden) {
+				c += ' jstree-hidden';
+			}
+			if (obj.state.loading) {
+				c += ' jstree-loading';
+			}
+			if(obj.state.loaded && !has_children) {
+				c += ' jstree-leaf';
+			}
+			else {
+				c += obj.state.opened && obj.state.loaded ? ' jstree-open' : ' jstree-closed';
+				node.setAttribute('aria-expanded', (obj.state.opened && obj.state.loaded) );
+			}
+			if(last_sibling === obj.id) {
+				c += ' jstree-last';
+			}
+			node.id = obj.id;
+			node.className = c;
+			c = ( obj.state.selected ? ' jstree-clicked' : '') + ( obj.state.disabled ? ' jstree-disabled' : '');
+			for(j in obj.a_attr) {
+				if(obj.a_attr.hasOwnProperty(j)) {
+					if(j === 'href' && obj.a_attr[j] === '#') { continue; }
+					if(j !== 'class') {
+						node.childNodes[1].setAttribute(j, obj.a_attr[j]);
+					}
+					else {
+						c += ' ' + obj.a_attr[j];
+					}
+				}
+			}
+			if(c.length) {
+				node.childNodes[1].className = 'jstree-anchor ' + c;
+			}
+			if((obj.icon && obj.icon !== true) || obj.icon === false) {
+				if(obj.icon === false) {
+					node.childNodes[1].childNodes[0].className += ' jstree-themeicon-hidden';
+				}
+				else if(obj.icon.indexOf('/') === -1 && obj.icon.indexOf('.') === -1) {
+					node.childNodes[1].childNodes[0].className += ' ' + obj.icon + ' jstree-themeicon-custom';
+				}
+				else {
+					node.childNodes[1].childNodes[0].style.backgroundImage = 'url("'+obj.icon+'")';
+					node.childNodes[1].childNodes[0].style.backgroundPosition = 'center center';
+					node.childNodes[1].childNodes[0].style.backgroundSize = 'auto';
+					node.childNodes[1].childNodes[0].className += ' jstree-themeicon-custom';
+				}
+			}
+
+			if(this.settings.core.force_text) {
+				node.childNodes[1].appendChild(d.createTextNode(obj.text));
+			}
+			else {
+				node.childNodes[1].innerHTML += obj.text;
+			}
+
+
+			if(deep && obj.children.length && (obj.state.opened || force_render) && obj.state.loaded) {
+				k = d.createElement('UL');
+				k.setAttribute('role', 'group');
+				k.className = 'jstree-children';
+				for(i = 0, j = obj.children.length; i < j; i++) {
+					k.appendChild(this.redraw_node(obj.children[i], deep, true));
+				}
+				node.appendChild(k);
+			}
+			if(old) {
+				node.appendChild(old);
+			}
+			if(!is_callback) {
+				// append back using par / ind
+				if(!par) {
+					par = this.element[0];
+				}
+				for(i = 0, j = par.childNodes.length; i < j; i++) {
+					if(par.childNodes[i] && par.childNodes[i].className && par.childNodes[i].className.indexOf('jstree-children') !== -1) {
+						tmp = par.childNodes[i];
+						break;
+					}
+				}
+				if(!tmp) {
+					tmp = d.createElement('UL');
+					tmp.setAttribute('role', 'group');
+					tmp.className = 'jstree-children';
+					par.appendChild(tmp);
+				}
+				par = tmp;
+
+				if(ind < par.childNodes.length) {
+					par.insertBefore(node, par.childNodes[ind]);
+				}
+				else {
+					par.appendChild(node);
+				}
+				if(f) {
+					t = this.element[0].scrollTop;
+					l = this.element[0].scrollLeft;
+					node.childNodes[1].focus();
+					this.element[0].scrollTop = t;
+					this.element[0].scrollLeft = l;
+				}
+			}
+			if(obj.state.opened && !obj.state.loaded) {
+				obj.state.opened = false;
+				setTimeout($.proxy(function () {
+					this.open_node(obj.id, false, 0);
+				}, this), 0);
+			}
+			return node;
+		},
+		/**
+		 * opens a node, revaling its children. If the node is not loaded it will be loaded and opened once ready.
+		 * @name open_node(obj [, callback, animation])
+		 * @param {mixed} obj the node to open
+		 * @param {Function} callback a function to execute once the node is opened
+		 * @param {Number} animation the animation duration in milliseconds when opening the node (overrides the `core.animation` setting). Use `false` for no animation.
+		 * @trigger open_node.jstree, after_open.jstree, before_open.jstree
+		 */
+		open_node : function (obj, callback, animation) {
+			var t1, t2, d, t;
+			if($.isArray(obj)) {
+				obj = obj.slice();
+				for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+					this.open_node(obj[t1], callback, animation);
+				}
+				return true;
+			}
+			obj = this.get_node(obj);
+			if(!obj || obj.id === $.jstree.root) {
+				return false;
+			}
+			animation = animation === undefined ? this.settings.core.animation : animation;
+			if(!this.is_closed(obj)) {
+				if(callback) {
+					callback.call(this, obj, false);
+				}
+				return false;
+			}
+			if(!this.is_loaded(obj)) {
+				if(this.is_loading(obj)) {
+					return setTimeout($.proxy(function () {
+						this.open_node(obj, callback, animation);
+					}, this), 500);
+				}
+				this.load_node(obj, function (o, ok) {
+					return ok ? this.open_node(o, callback, animation) : (callback ? callback.call(this, o, false) : false);
+				});
+			}
+			else {
+				d = this.get_node(obj, true);
+				t = this;
+				if(d.length) {
+					if(animation && d.children(".jstree-children").length) {
+						d.children(".jstree-children").stop(true, true);
+					}
+					if(obj.children.length && !this._firstChild(d.children('.jstree-children')[0])) {
+						this.draw_children(obj);
+						//d = this.get_node(obj, true);
+					}
+					if(!animation) {
+						this.trigger('before_open', { "node" : obj });
+						d[0].className = d[0].className.replace('jstree-closed', 'jstree-open');
+						d[0].setAttribute("aria-expanded", true);
+					}
+					else {
+						this.trigger('before_open', { "node" : obj });
+						d
+							.children(".jstree-children").css("display","none").end()
+							.removeClass("jstree-closed").addClass("jstree-open").attr("aria-expanded", true)
+							.children(".jstree-children").stop(true, true)
+								.slideDown(animation, function () {
+									this.style.display = "";
+									if (t.element) {
+										t.trigger("after_open", { "node" : obj });
+									}
+								});
+					}
+				}
+				obj.state.opened = true;
+				if(callback) {
+					callback.call(this, obj, true);
+				}
+				if(!d.length) {
+					/**
+					 * triggered when a node is about to be opened (if the node is supposed to be in the DOM, it will be, but it won't be visible yet)
+					 * @event
+					 * @name before_open.jstree
+					 * @param {Object} node the opened node
+					 */
+					this.trigger('before_open', { "node" : obj });
+				}
+				/**
+				 * triggered when a node is opened (if there is an animation it will not be completed yet)
+				 * @event
+				 * @name open_node.jstree
+				 * @param {Object} node the opened node
+				 */
+				this.trigger('open_node', { "node" : obj });
+				if(!animation || !d.length) {
+					/**
+					 * triggered when a node is opened and the animation is complete
+					 * @event
+					 * @name after_open.jstree
+					 * @param {Object} node the opened node
+					 */
+					this.trigger("after_open", { "node" : obj });
+				}
+				return true;
+			}
+		},
+		/**
+		 * opens every parent of a node (node should be loaded)
+		 * @name _open_to(obj)
+		 * @param {mixed} obj the node to reveal
+		 * @private
+		 */
+		_open_to : function (obj) {
+			obj = this.get_node(obj);
+			if(!obj || obj.id === $.jstree.root) {
+				return false;
+			}
+			var i, j, p = obj.parents;
+			for(i = 0, j = p.length; i < j; i+=1) {
+				if(i !== $.jstree.root) {
+					this.open_node(p[i], false, 0);
+				}
+			}
+			return $('#' + obj.id.replace($.jstree.idregex,'\\$&'), this.element);
+		},
+		/**
+		 * closes a node, hiding its children
+		 * @name close_node(obj [, animation])
+		 * @param {mixed} obj the node to close
+		 * @param {Number} animation the animation duration in milliseconds when closing the node (overrides the `core.animation` setting). Use `false` for no animation.
+		 * @trigger close_node.jstree, after_close.jstree
+		 */
+		close_node : function (obj, animation) {
+			var t1, t2, t, d;
+			if($.isArray(obj)) {
+				obj = obj.slice();
+				for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+					this.close_node(obj[t1], animation);
+				}
+				return true;
+			}
+			obj = this.get_node(obj);
+			if(!obj || obj.id === $.jstree.root) {
+				return false;
+			}
+			if(this.is_closed(obj)) {
+				return false;
+			}
+			animation = animation === undefined ? this.settings.core.animation : animation;
+			t = this;
+			d = this.get_node(obj, true);
+
+			obj.state.opened = false;
+			/**
+			 * triggered when a node is closed (if there is an animation it will not be complete yet)
+			 * @event
+			 * @name close_node.jstree
+			 * @param {Object} node the closed node
+			 */
+			this.trigger('close_node',{ "node" : obj });
+			if(!d.length) {
+				/**
+				 * triggered when a node is closed and the animation is complete
+				 * @event
+				 * @name after_close.jstree
+				 * @param {Object} node the closed node
+				 */
+				this.trigger("after_close", { "node" : obj });
+			}
+			else {
+				if(!animation) {
+					d[0].className = d[0].className.replace('jstree-open', 'jstree-closed');
+					d.attr("aria-expanded", false).children('.jstree-children').remove();
+					this.trigger("after_close", { "node" : obj });
+				}
+				else {
+					d
+						.children(".jstree-children").attr("style","display:block !important").end()
+						.removeClass("jstree-open").addClass("jstree-closed").attr("aria-expanded", false)
+						.children(".jstree-children").stop(true, true).slideUp(animation, function () {
+							this.style.display = "";
+							d.children('.jstree-children').remove();
+							if (t.element) {
+								t.trigger("after_close", { "node" : obj });
+							}
+						});
+				}
+			}
+		},
+		/**
+		 * toggles a node - closing it if it is open, opening it if it is closed
+		 * @name toggle_node(obj)
+		 * @param {mixed} obj the node to toggle
+		 */
+		toggle_node : function (obj) {
+			var t1, t2;
+			if($.isArray(obj)) {
+				obj = obj.slice();
+				for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+					this.toggle_node(obj[t1]);
+				}
+				return true;
+			}
+			if(this.is_closed(obj)) {
+				return this.open_node(obj);
+			}
+			if(this.is_open(obj)) {
+				return this.close_node(obj);
+			}
+		},
+		/**
+		 * opens all nodes within a node (or the tree), revaling their children. If the node is not loaded it will be loaded and opened once ready.
+		 * @name open_all([obj, animation, original_obj])
+		 * @param {mixed} obj the node to open recursively, omit to open all nodes in the tree
+		 * @param {Number} animation the animation duration in milliseconds when opening the nodes, the default is no animation
+		 * @param {jQuery} reference to the node that started the process (internal use)
+		 * @trigger open_all.jstree
+		 */
+		open_all : function (obj, animation, original_obj) {
+			if(!obj) { obj = $.jstree.root; }
+			obj = this.get_node(obj);
+			if(!obj) { return false; }
+			var dom = obj.id === $.jstree.root ? this.get_container_ul() : this.get_node(obj, true), i, j, _this;
+			if(!dom.length) {
+				for(i = 0, j = obj.children_d.length; i < j; i++) {
+					if(this.is_closed(this._model.data[obj.children_d[i]])) {
+						this._model.data[obj.children_d[i]].state.opened = true;
+					}
+				}
+				return this.trigger('open_all', { "node" : obj });
+			}
+			original_obj = original_obj || dom;
+			_this = this;
+			dom = this.is_closed(obj) ? dom.find('.jstree-closed').addBack() : dom.find('.jstree-closed');
+			dom.each(function () {
+				_this.open_node(
+					this,
+					function(node, status) { if(status && this.is_parent(node)) { this.open_all(node, animation, original_obj); } },
+					animation || 0
+				);
+			});
+			if(original_obj.find('.jstree-closed').length === 0) {
+				/**
+				 * triggered when an `open_all` call completes
+				 * @event
+				 * @name open_all.jstree
+				 * @param {Object} node the opened node
+				 */
+				this.trigger('open_all', { "node" : this.get_node(original_obj) });
+			}
+		},
+		/**
+		 * closes all nodes within a node (or the tree), revaling their children
+		 * @name close_all([obj, animation])
+		 * @param {mixed} obj the node to close recursively, omit to close all nodes in the tree
+		 * @param {Number} animation the animation duration in milliseconds when closing the nodes, the default is no animation
+		 * @trigger close_all.jstree
+		 */
+		close_all : function (obj, animation) {
+			if(!obj) { obj = $.jstree.root; }
+			obj = this.get_node(obj);
+			if(!obj) { return false; }
+			var dom = obj.id === $.jstree.root ? this.get_container_ul() : this.get_node(obj, true),
+				_this = this, i, j;
+			if(dom.length) {
+				dom = this.is_open(obj) ? dom.find('.jstree-open').addBack() : dom.find('.jstree-open');
+				$(dom.get().reverse()).each(function () { _this.close_node(this, animation || 0); });
+			}
+			for(i = 0, j = obj.children_d.length; i < j; i++) {
+				this._model.data[obj.children_d[i]].state.opened = false;
+			}
+			/**
+			 * triggered when an `close_all` call completes
+			 * @event
+			 * @name close_all.jstree
+			 * @param {Object} node the closed node
+			 */
+			this.trigger('close_all', { "node" : obj });
+		},
+		/**
+		 * checks if a node is disabled (not selectable)
+		 * @name is_disabled(obj)
+		 * @param  {mixed} obj
+		 * @return {Boolean}
+		 */
+		is_disabled : function (obj) {
+			obj = this.get_node(obj);
+			return obj && obj.state && obj.state.disabled;
+		},
+		/**
+		 * enables a node - so that it can be selected
+		 * @name enable_node(obj)
+		 * @param {mixed} obj the node to enable
+		 * @trigger enable_node.jstree
+		 */
+		enable_node : function (obj) {
+			var t1, t2;
+			if($.isArray(obj)) {
+				obj = obj.slice();
+				for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+					this.enable_node(obj[t1]);
+				}
+				return true;
+			}
+			obj = this.get_node(obj);
+			if(!obj || obj.id === $.jstree.root) {
+				return false;
+			}
+			obj.state.disabled = false;
+			this.get_node(obj,true).children('.jstree-anchor').removeClass('jstree-disabled').attr('aria-disabled', false);
+			/**
+			 * triggered when an node is enabled
+			 * @event
+			 * @name enable_node.jstree
+			 * @param {Object} node the enabled node
+			 */
+			this.trigger('enable_node', { 'node' : obj });
+		},
+		/**
+		 * disables a node - so that it can not be selected
+		 * @name disable_node(obj)
+		 * @param {mixed} obj the node to disable
+		 * @trigger disable_node.jstree
+		 */
+		disable_node : function (obj) {
+			var t1, t2;
+			if($.isArray(obj)) {
+				obj = obj.slice();
+				for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+					this.disable_node(obj[t1]);
+				}
+				return true;
+			}
+			obj = this.get_node(obj);
+			if(!obj || obj.id === $.jstree.root) {
+				return false;
+			}
+			obj.state.disabled = true;
+			this.get_node(obj,true).children('.jstree-anchor').addClass('jstree-disabled').attr('aria-disabled', true);
+			/**
+			 * triggered when an node is disabled
+			 * @event
+			 * @name disable_node.jstree
+			 * @param {Object} node the disabled node
+			 */
+			this.trigger('disable_node', { 'node' : obj });
+		},
+		/**
+		 * determines if a node is hidden
+		 * @name is_hidden(obj)
+		 * @param {mixed} obj the node
+		 */
+		is_hidden : function (obj) {
+			obj = this.get_node(obj);
+			return obj.state.hidden === true;
+		},
+		/**
+		 * hides a node - it is still in the structure but will not be visible
+		 * @name hide_node(obj)
+		 * @param {mixed} obj the node to hide
+		 * @param {Boolean} skip_redraw internal parameter controlling if redraw is called
+		 * @trigger hide_node.jstree
+		 */
+		hide_node : function (obj, skip_redraw) {
+			var t1, t2;
+			if($.isArray(obj)) {
+				obj = obj.slice();
+				for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+					this.hide_node(obj[t1], true);
+				}
+				if (!skip_redraw) {
+					this.redraw();
+				}
+				return true;
+			}
+			obj = this.get_node(obj);
+			if(!obj || obj.id === $.jstree.root) {
+				return false;
+			}
+			if(!obj.state.hidden) {
+				obj.state.hidden = true;
+				this._node_changed(obj.parent);
+				if(!skip_redraw) {
+					this.redraw();
+				}
+				/**
+				 * triggered when an node is hidden
+				 * @event
+				 * @name hide_node.jstree
+				 * @param {Object} node the hidden node
+				 */
+				this.trigger('hide_node', { 'node' : obj });
+			}
+		},
+		/**
+		 * shows a node
+		 * @name show_node(obj)
+		 * @param {mixed} obj the node to show
+		 * @param {Boolean} skip_redraw internal parameter controlling if redraw is called
+		 * @trigger show_node.jstree
+		 */
+		show_node : function (obj, skip_redraw) {
+			var t1, t2;
+			if($.isArray(obj)) {
+				obj = obj.slice();
+				for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+					this.show_node(obj[t1], true);
+				}
+				if (!skip_redraw) {
+					this.redraw();
+				}
+				return true;
+			}
+			obj = this.get_node(obj);
+			if(!obj || obj.id === $.jstree.root) {
+				return false;
+			}
+			if(obj.state.hidden) {
+				obj.state.hidden = false;
+				this._node_changed(obj.parent);
+				if(!skip_redraw) {
+					this.redraw();
+				}
+				/**
+				 * triggered when an node is shown
+				 * @event
+				 * @name show_node.jstree
+				 * @param {Object} node the shown node
+				 */
+				this.trigger('show_node', { 'node' : obj });
+			}
+		},
+		/**
+		 * hides all nodes
+		 * @name hide_all()
+		 * @trigger hide_all.jstree
+		 */
+		hide_all : function (skip_redraw) {
+			var i, m = this._model.data, ids = [];
+			for(i in m) {
+				if(m.hasOwnProperty(i) && i !== $.jstree.root && !m[i].state.hidden) {
+					m[i].state.hidden = true;
+					ids.push(i);
+				}
+			}
+			this._model.force_full_redraw = true;
+			if(!skip_redraw) {
+				this.redraw();
+			}
+			/**
+			 * triggered when all nodes are hidden
+			 * @event
+			 * @name hide_all.jstree
+			 * @param {Array} nodes the IDs of all hidden nodes
+			 */
+			this.trigger('hide_all', { 'nodes' : ids });
+			return ids;
+		},
+		/**
+		 * shows all nodes
+		 * @name show_all()
+		 * @trigger show_all.jstree
+		 */
+		show_all : function (skip_redraw) {
+			var i, m = this._model.data, ids = [];
+			for(i in m) {
+				if(m.hasOwnProperty(i) && i !== $.jstree.root && m[i].state.hidden) {
+					m[i].state.hidden = false;
+					ids.push(i);
+				}
+			}
+			this._model.force_full_redraw = true;
+			if(!skip_redraw) {
+				this.redraw();
+			}
+			/**
+			 * triggered when all nodes are shown
+			 * @event
+			 * @name show_all.jstree
+			 * @param {Array} nodes the IDs of all shown nodes
+			 */
+			this.trigger('show_all', { 'nodes' : ids });
+			return ids;
+		},
+		/**
+		 * called when a node is selected by the user. Used internally.
+		 * @private
+		 * @name activate_node(obj, e)
+		 * @param {mixed} obj the node
+		 * @param {Object} e the related event
+		 * @trigger activate_node.jstree, changed.jstree
+		 */
+		activate_node : function (obj, e) {
+			if(this.is_disabled(obj)) {
+				return false;
+			}
+			if(!e || typeof e !== 'object') {
+				e = {};
+			}
+
+			// ensure last_clicked is still in the DOM, make it fresh (maybe it was moved?) and make sure it is still selected, if not - make last_clicked the last selected node
+			this._data.core.last_clicked = this._data.core.last_clicked && this._data.core.last_clicked.id !== undefined ? this.get_node(this._data.core.last_clicked.id) : null;
+			if(this._data.core.last_clicked && !this._data.core.last_clicked.state.selected) { this._data.core.last_clicked = null; }
+			if(!this._data.core.last_clicked && this._data.core.selected.length) { this._data.core.last_clicked = this.get_node(this._data.core.selected[this._data.core.selected.length - 1]); }
+
+			if(!this.settings.core.multiple || (!e.metaKey && !e.ctrlKey && !e.shiftKey) || (e.shiftKey && (!this._data.core.last_clicked || !this.get_parent(obj) || this.get_parent(obj) !== this._data.core.last_clicked.parent ) )) {
+				if(!this.settings.core.multiple && (e.metaKey || e.ctrlKey || e.shiftKey) && this.is_selected(obj)) {
+					this.deselect_node(obj, false, e);
+				}
+				else {
+					this.deselect_all(true);
+					this.select_node(obj, false, false, e);
+					this._data.core.last_clicked = this.get_node(obj);
+				}
+			}
+			else {
+				if(e.shiftKey) {
+					var o = this.get_node(obj).id,
+						l = this._data.core.last_clicked.id,
+						p = this.get_node(this._data.core.last_clicked.parent).children,
+						c = false,
+						i, j;
+					for(i = 0, j = p.length; i < j; i += 1) {
+						// separate IFs work whem o and l are the same
+						if(p[i] === o) {
+							c = !c;
+						}
+						if(p[i] === l) {
+							c = !c;
+						}
+						if(!this.is_disabled(p[i]) && (c || p[i] === o || p[i] === l)) {
+							if (!this.is_hidden(p[i])) {
+								this.select_node(p[i], true, false, e);
+							}
+						}
+						else {
+							this.deselect_node(p[i], true, e);
+						}
+					}
+					this.trigger('changed', { 'action' : 'select_node', 'node' : this.get_node(obj), 'selected' : this._data.core.selected, 'event' : e });
+				}
+				else {
+					if(!this.is_selected(obj)) {
+						this.select_node(obj, false, false, e);
+					}
+					else {
+						this.deselect_node(obj, false, e);
+					}
+				}
+			}
+			/**
+			 * triggered when an node is clicked or intercated with by the user
+			 * @event
+			 * @name activate_node.jstree
+			 * @param {Object} node
+			 * @param {Object} event the ooriginal event (if any) which triggered the call (may be an empty object)
+			 */
+			this.trigger('activate_node', { 'node' : this.get_node(obj), 'event' : e });
+		},
+		/**
+		 * applies the hover state on a node, called when a node is hovered by the user. Used internally.
+		 * @private
+		 * @name hover_node(obj)
+		 * @param {mixed} obj
+		 * @trigger hover_node.jstree
+		 */
+		hover_node : function (obj) {
+			obj = this.get_node(obj, true);
+			if(!obj || !obj.length || obj.children('.jstree-hovered').length) {
+				return false;
+			}
+			var o = this.element.find('.jstree-hovered'), t = this.element;
+			if(o && o.length) { this.dehover_node(o); }
+
+			obj.children('.jstree-anchor').addClass('jstree-hovered');
+			/**
+			 * triggered when an node is hovered
+			 * @event
+			 * @name hover_node.jstree
+			 * @param {Object} node
+			 */
+			this.trigger('hover_node', { 'node' : this.get_node(obj) });
+			setTimeout(function () { t.attr('aria-activedescendant', obj[0].id); }, 0);
+		},
+		/**
+		 * removes the hover state from a nodecalled when a node is no longer hovered by the user. Used internally.
+		 * @private
+		 * @name dehover_node(obj)
+		 * @param {mixed} obj
+		 * @trigger dehover_node.jstree
+		 */
+		dehover_node : function (obj) {
+			obj = this.get_node(obj, true);
+			if(!obj || !obj.length || !obj.children('.jstree-hovered').length) {
+				return false;
+			}
+			obj.children('.jstree-anchor').removeClass('jstree-hovered');
+			/**
+			 * triggered when an node is no longer hovered
+			 * @event
+			 * @name dehover_node.jstree
+			 * @param {Object} node
+			 */
+			this.trigger('dehover_node', { 'node' : this.get_node(obj) });
+		},
+		/**
+		 * select a node
+		 * @name select_node(obj [, supress_event, prevent_open])
+		 * @param {mixed} obj an array can be used to select multiple nodes
+		 * @param {Boolean} supress_event if set to `true` the `changed.jstree` event won't be triggered
+		 * @param {Boolean} prevent_open if set to `true` parents of the selected node won't be opened
+		 * @trigger select_node.jstree, changed.jstree
+		 */
+		select_node : function (obj, supress_event, prevent_open, e) {
+			var dom, t1, t2, th;
+			if($.isArray(obj)) {
+				obj = obj.slice();
+				for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+					this.select_node(obj[t1], supress_event, prevent_open, e);
+				}
+				return true;
+			}
+			obj = this.get_node(obj);
+			if(!obj || obj.id === $.jstree.root) {
+				return false;
+			}
+			dom = this.get_node(obj, true);
+			if(!obj.state.selected) {
+				obj.state.selected = true;
+				this._data.core.selected.push(obj.id);
+				if(!prevent_open) {
+					dom = this._open_to(obj);
+				}
+				if(dom && dom.length) {
+					dom.attr('aria-selected', true).children('.jstree-anchor').addClass('jstree-clicked');
+				}
+				/**
+				 * triggered when an node is selected
+				 * @event
+				 * @name select_node.jstree
+				 * @param {Object} node
+				 * @param {Array} selected the current selection
+				 * @param {Object} event the event (if any) that triggered this select_node
+				 */
+				this.trigger('select_node', { 'node' : obj, 'selected' : this._data.core.selected, 'event' : e });
+				if(!supress_event) {
+					/**
+					 * triggered when selection changes
+					 * @event
+					 * @name changed.jstree
+					 * @param {Object} node
+					 * @param {Object} action the action that caused the selection to change
+					 * @param {Array} selected the current selection
+					 * @param {Object} event the event (if any) that triggered this changed event
+					 */
+					this.trigger('changed', { 'action' : 'select_node', 'node' : obj, 'selected' : this._data.core.selected, 'event' : e });
+				}
+			}
+		},
+		/**
+		 * deselect a node
+		 * @name deselect_node(obj [, supress_event])
+		 * @param {mixed} obj an array can be used to deselect multiple nodes
+		 * @param {Boolean} supress_event if set to `true` the `changed.jstree` event won't be triggered
+		 * @trigger deselect_node.jstree, changed.jstree
+		 */
+		deselect_node : function (obj, supress_event, e) {
+			var t1, t2, dom;
+			if($.isArray(obj)) {
+				obj = obj.slice();
+				for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+					this.deselect_node(obj[t1], supress_event, e);
+				}
+				return true;
+			}
+			obj = this.get_node(obj);
+			if(!obj || obj.id === $.jstree.root) {
+				return false;
+			}
+			dom = this.get_node(obj, true);
+			if(obj.state.selected) {
+				obj.state.selected = false;
+				this._data.core.selected = $.vakata.array_remove_item(this._data.core.selected, obj.id);
+				if(dom.length) {
+					dom.attr('aria-selected', false).children('.jstree-anchor').removeClass('jstree-clicked');
+				}
+				/**
+				 * triggered when an node is deselected
+				 * @event
+				 * @name deselect_node.jstree
+				 * @param {Object} node
+				 * @param {Array} selected the current selection
+				 * @param {Object} event the event (if any) that triggered this deselect_node
+				 */
+				this.trigger('deselect_node', { 'node' : obj, 'selected' : this._data.core.selected, 'event' : e });
+				if(!supress_event) {
+					this.trigger('changed', { 'action' : 'deselect_node', 'node' : obj, 'selected' : this._data.core.selected, 'event' : e });
+				}
+			}
+		},
+		/**
+		 * select all nodes in the tree
+		 * @name select_all([supress_event])
+		 * @param {Boolean} supress_event if set to `true` the `changed.jstree` event won't be triggered
+		 * @trigger select_all.jstree, changed.jstree
+		 */
+		select_all : function (supress_event) {
+			var tmp = this._data.core.selected.concat([]), i, j;
+			this._data.core.selected = this._model.data[$.jstree.root].children_d.concat();
+			for(i = 0, j = this._data.core.selected.length; i < j; i++) {
+				if(this._model.data[this._data.core.selected[i]]) {
+					this._model.data[this._data.core.selected[i]].state.selected = true;
+				}
+			}
+			this.redraw(true);
+			/**
+			 * triggered when all nodes are selected
+			 * @event
+			 * @name select_all.jstree
+			 * @param {Array} selected the current selection
+			 */
+			this.trigger('select_all', { 'selected' : this._data.core.selected });
+			if(!supress_event) {
+				this.trigger('changed', { 'action' : 'select_all', 'selected' : this._data.core.selected, 'old_selection' : tmp });
+			}
+		},
+		/**
+		 * deselect all selected nodes
+		 * @name deselect_all([supress_event])
+		 * @param {Boolean} supress_event if set to `true` the `changed.jstree` event won't be triggered
+		 * @trigger deselect_all.jstree, changed.jstree
+		 */
+		deselect_all : function (supress_event) {
+			var tmp = this._data.core.selected.concat([]), i, j;
+			for(i = 0, j = this._data.core.selected.length; i < j; i++) {
+				if(this._model.data[this._data.core.selected[i]]) {
+					this._model.data[this._data.core.selected[i]].state.selected = false;
+				}
+			}
+			this._data.core.selected = [];
+			this.element.find('.jstree-clicked').removeClass('jstree-clicked').parent().attr('aria-selected', false);
+			/**
+			 * triggered when all nodes are deselected
+			 * @event
+			 * @name deselect_all.jstree
+			 * @param {Object} node the previous selection
+			 * @param {Array} selected the current selection
+			 */
+			this.trigger('deselect_all', { 'selected' : this._data.core.selected, 'node' : tmp });
+			if(!supress_event) {
+				this.trigger('changed', { 'action' : 'deselect_all', 'selected' : this._data.core.selected, 'old_selection' : tmp });
+			}
+		},
+		/**
+		 * checks if a node is selected
+		 * @name is_selected(obj)
+		 * @param  {mixed}  obj
+		 * @return {Boolean}
+		 */
+		is_selected : function (obj) {
+			obj = this.get_node(obj);
+			if(!obj || obj.id === $.jstree.root) {
+				return false;
+			}
+			return obj.state.selected;
+		},
+		/**
+		 * get an array of all selected nodes
+		 * @name get_selected([full])
+		 * @param  {mixed}  full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned
+		 * @return {Array}
+		 */
+		get_selected : function (full) {
+			return full ? $.map(this._data.core.selected, $.proxy(function (i) { return this.get_node(i); }, this)) : this._data.core.selected.slice();
+		},
+		/**
+		 * get an array of all top level selected nodes (ignoring children of selected nodes)
+		 * @name get_top_selected([full])
+		 * @param  {mixed}  full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned
+		 * @return {Array}
+		 */
+		get_top_selected : function (full) {
+			var tmp = this.get_selected(true),
+				obj = {}, i, j, k, l;
+			for(i = 0, j = tmp.length; i < j; i++) {
+				obj[tmp[i].id] = tmp[i];
+			}
+			for(i = 0, j = tmp.length; i < j; i++) {
+				for(k = 0, l = tmp[i].children_d.length; k < l; k++) {
+					if(obj[tmp[i].children_d[k]]) {
+						delete obj[tmp[i].children_d[k]];
+					}
+				}
+			}
+			tmp = [];
+			for(i in obj) {
+				if(obj.hasOwnProperty(i)) {
+					tmp.push(i);
+				}
+			}
+			return full ? $.map(tmp, $.proxy(function (i) { return this.get_node(i); }, this)) : tmp;
+		},
+		/**
+		 * get an array of all bottom level selected nodes (ignoring selected parents)
+		 * @name get_bottom_selected([full])
+		 * @param  {mixed}  full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned
+		 * @return {Array}
+		 */
+		get_bottom_selected : function (full) {
+			var tmp = this.get_selected(true),
+				obj = [], i, j;
+			for(i = 0, j = tmp.length; i < j; i++) {
+				if(!tmp[i].children.length) {
+					obj.push(tmp[i].id);
+				}
+			}
+			return full ? $.map(obj, $.proxy(function (i) { return this.get_node(i); }, this)) : obj;
+		},
+		/**
+		 * gets the current state of the tree so that it can be restored later with `set_state(state)`. Used internally.
+		 * @name get_state()
+		 * @private
+		 * @return {Object}
+		 */
+		get_state : function () {
+			var state	= {
+				'core' : {
+					'open' : [],
+					'loaded' : [],
+					'scroll' : {
+						'left' : this.element.scrollLeft(),
+						'top' : this.element.scrollTop()
+					},
+					/*!
+					'themes' : {
+						'name' : this.get_theme(),
+						'icons' : this._data.core.themes.icons,
+						'dots' : this._data.core.themes.dots
+					},
+					*/
+					'selected' : []
+				}
+			}, i;
+			for(i in this._model.data) {
+				if(this._model.data.hasOwnProperty(i)) {
+					if(i !== $.jstree.root) {
+						if(this._model.data[i].state.loaded && this.settings.core.loaded_state) {
+							state.core.loaded.push(i);
+						}
+						if(this._model.data[i].state.opened) {
+							state.core.open.push(i);
+						}
+						if(this._model.data[i].state.selected) {
+							state.core.selected.push(i);
+						}
+					}
+				}
+			}
+			return state;
+		},
+		/**
+		 * sets the state of the tree. Used internally.
+		 * @name set_state(state [, callback])
+		 * @private
+		 * @param {Object} state the state to restore. Keep in mind this object is passed by reference and jstree will modify it.
+		 * @param {Function} callback an optional function to execute once the state is restored.
+		 * @trigger set_state.jstree
+		 */
+		set_state : function (state, callback) {
+			if(state) {
+				if(state.core && state.core.selected && state.core.initial_selection === undefined) {
+					state.core.initial_selection = this._data.core.selected.concat([]).sort().join(',');
+				}
+				if(state.core) {
+					var res, n, t, _this, i;
+					if(state.core.loaded) {
+						if(!this.settings.core.loaded_state || !$.isArray(state.core.loaded) || !state.core.loaded.length) {
+							delete state.core.loaded;
+							this.set_state(state, callback);
+						}
+						else {
+							this._load_nodes(state.core.loaded, function (nodes) {
+								delete state.core.loaded;
+								this.set_state(state, callback);
+							});
+						}
+						return false;
+					}
+					if(state.core.open) {
+						if(!$.isArray(state.core.open) || !state.core.open.length) {
+							delete state.core.open;
+							this.set_state(state, callback);
+						}
+						else {
+							this._load_nodes(state.core.open, function (nodes) {
+								this.open_node(nodes, false, 0);
+								delete state.core.open;
+								this.set_state(state, callback);
+							});
+						}
+						return false;
+					}
+					if(state.core.scroll) {
+						if(state.core.scroll && state.core.scroll.left !== undefined) {
+							this.element.scrollLeft(state.core.scroll.left);
+						}
+						if(state.core.scroll && state.core.scroll.top !== undefined) {
+							this.element.scrollTop(state.core.scroll.top);
+						}
+						delete state.core.scroll;
+						this.set_state(state, callback);
+						return false;
+					}
+					if(state.core.selected) {
+						_this = this;
+						if (state.core.initial_selection === undefined ||
+							state.core.initial_selection === this._data.core.selected.concat([]).sort().join(',')
+						) {
+							this.deselect_all();
+							$.each(state.core.selected, function (i, v) {
+								_this.select_node(v, false, true);
+							});
+						}
+						delete state.core.initial_selection;
+						delete state.core.selected;
+						this.set_state(state, callback);
+						return false;
+					}
+					for(i in state) {
+						if(state.hasOwnProperty(i) && i !== "core" && $.inArray(i, this.settings.plugins) === -1) {
+							delete state[i];
+						}
+					}
+					if($.isEmptyObject(state.core)) {
+						delete state.core;
+						this.set_state(state, callback);
+						return false;
+					}
+				}
+				if($.isEmptyObject(state)) {
+					state = null;
+					if(callback) { callback.call(this); }
+					/**
+					 * triggered when a `set_state` call completes
+					 * @event
+					 * @name set_state.jstree
+					 */
+					this.trigger('set_state');
+					return false;
+				}
+				return true;
+			}
+			return false;
+		},
+		/**
+		 * refreshes the tree - all nodes are reloaded with calls to `load_node`.
+		 * @name refresh()
+		 * @param {Boolean} skip_loading an option to skip showing the loading indicator
+		 * @param {Mixed} forget_state if set to `true` state will not be reapplied, if set to a function (receiving the current state as argument) the result of that function will be used as state
+		 * @trigger refresh.jstree
+		 */
+		refresh : function (skip_loading, forget_state) {
+			this._data.core.state = forget_state === true ? {} : this.get_state();
+			if(forget_state && $.isFunction(forget_state)) { this._data.core.state = forget_state.call(this, this._data.core.state); }
+			this._cnt = 0;
+			this._model.data = {};
+			this._model.data[$.jstree.root] = {
+				id : $.jstree.root,
+				parent : null,
+				parents : [],
+				children : [],
+				children_d : [],
+				state : { loaded : false }
+			};
+			this._data.core.selected = [];
+			this._data.core.last_clicked = null;
+			this._data.core.focused = null;
+
+			var c = this.get_container_ul()[0].className;
+			if(!skip_loading) {
+				this.element.html("<"+"ul class='"+c+"' role='group'><"+"li class='jstree-initial-node jstree-loading jstree-leaf jstree-last' role='treeitem' id='j"+this._id+"_loading'><i class='jstree-icon jstree-ocl'></i><"+"a class='jstree-anchor' href='#'><i class='jstree-icon jstree-themeicon-hidden'></i>" + this.get_string("Loading ...") + "</a></li></ul>");
+				this.element.attr('aria-activedescendant','j'+this._id+'_loading');
+			}
+			this.load_node($.jstree.root, function (o, s) {
+				if(s) {
+					this.get_container_ul()[0].className = c;
+					if(this._firstChild(this.get_container_ul()[0])) {
+						this.element.attr('aria-activedescendant',this._firstChild(this.get_container_ul()[0]).id);
+					}
+					this.set_state($.extend(true, {}, this._data.core.state), function () {
+						/**
+						 * triggered when a `refresh` call completes
+						 * @event
+						 * @name refresh.jstree
+						 */
+						this.trigger('refresh');
+					});
+				}
+				this._data.core.state = null;
+			});
+		},
+		/**
+		 * refreshes a node in the tree (reload its children) all opened nodes inside that node are reloaded with calls to `load_node`.
+		 * @name refresh_node(obj)
+		 * @param  {mixed} obj the node
+		 * @trigger refresh_node.jstree
+		 */
+		refresh_node : function (obj) {
+			obj = this.get_node(obj);
+			if(!obj || obj.id === $.jstree.root) { return false; }
+			var opened = [], to_load = [], s = this._data.core.selected.concat([]);
+			to_load.push(obj.id);
+			if(obj.state.opened === true) { opened.push(obj.id); }
+			this.get_node(obj, true).find('.jstree-open').each(function() { to_load.push(this.id); opened.push(this.id); });
+			this._load_nodes(to_load, $.proxy(function (nodes) {
+				this.open_node(opened, false, 0);
+				this.select_node(s);
+				/**
+				 * triggered when a node is refreshed
+				 * @event
+				 * @name refresh_node.jstree
+				 * @param {Object} node - the refreshed node
+				 * @param {Array} nodes - an array of the IDs of the nodes that were reloaded
+				 */
+				this.trigger('refresh_node', { 'node' : obj, 'nodes' : nodes });
+			}, this), false, true);
+		},
+		/**
+		 * set (change) the ID of a node
+		 * @name set_id(obj, id)
+		 * @param  {mixed} obj the node
+		 * @param  {String} id the new ID
+		 * @return {Boolean}
+		 * @trigger set_id.jstree
+		 */
+		set_id : function (obj, id) {
+			obj = this.get_node(obj);
+			if(!obj || obj.id === $.jstree.root) { return false; }
+			var i, j, m = this._model.data, old = obj.id;
+			id = id.toString();
+			// update parents (replace current ID with new one in children and children_d)
+			m[obj.parent].children[$.inArray(obj.id, m[obj.parent].children)] = id;
+			for(i = 0, j = obj.parents.length; i < j; i++) {
+				m[obj.parents[i]].children_d[$.inArray(obj.id, m[obj.parents[i]].children_d)] = id;
+			}
+			// update children (replace current ID with new one in parent and parents)
+			for(i = 0, j = obj.children.length; i < j; i++) {
+				m[obj.children[i]].parent = id;
+			}
+			for(i = 0, j = obj.children_d.length; i < j; i++) {
+				m[obj.children_d[i]].parents[$.inArray(obj.id, m[obj.children_d[i]].parents)] = id;
+			}
+			i = $.inArray(obj.id, this._data.core.selected);
+			if(i !== -1) { this._data.core.selected[i] = id; }
+			// update model and obj itself (obj.id, this._model.data[KEY])
+			i = this.get_node(obj.id, true);
+			if(i) {
+				i.attr('id', id); //.children('.jstree-anchor').attr('id', id + '_anchor').end().attr('aria-labelledby', id + '_anchor');
+				if(this.element.attr('aria-activedescendant') === obj.id) {
+					this.element.attr('aria-activedescendant', id);
+				}
+			}
+			delete m[obj.id];
+			obj.id = id;
+			obj.li_attr.id = id;
+			m[id] = obj;
+			/**
+			 * triggered when a node id value is changed
+			 * @event
+			 * @name set_id.jstree
+			 * @param {Object} node
+			 * @param {String} old the old id
+			 */
+			this.trigger('set_id',{ "node" : obj, "new" : obj.id, "old" : old });
+			return true;
+		},
+		/**
+		 * get the text value of a node
+		 * @name get_text(obj)
+		 * @param  {mixed} obj the node
+		 * @return {String}
+		 */
+		get_text : function (obj) {
+			obj = this.get_node(obj);
+			return (!obj || obj.id === $.jstree.root) ? false : obj.text;
+		},
+		/**
+		 * set the text value of a node. Used internally, please use `rename_node(obj, val)`.
+		 * @private
+		 * @name set_text(obj, val)
+		 * @param  {mixed} obj the node, you can pass an array to set the text on multiple nodes
+		 * @param  {String} val the new text value
+		 * @return {Boolean}
+		 * @trigger set_text.jstree
+		 */
+		set_text : function (obj, val) {
+			var t1, t2;
+			if($.isArray(obj)) {
+				obj = obj.slice();
+				for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+					this.set_text(obj[t1], val);
+				}
+				return true;
+			}
+			obj = this.get_node(obj);
+			if(!obj || obj.id === $.jstree.root) { return false; }
+			obj.text = val;
+			if(this.get_node(obj, true).length) {
+				this.redraw_node(obj.id);
+			}
+			/**
+			 * triggered when a node text value is changed
+			 * @event
+			 * @name set_text.jstree
+			 * @param {Object} obj
+			 * @param {String} text the new value
+			 */
+			this.trigger('set_text',{ "obj" : obj, "text" : val });
+			return true;
+		},
+		/**
+		 * gets a JSON representation of a node (or the whole tree)
+		 * @name get_json([obj, options])
+		 * @param  {mixed} obj
+		 * @param  {Object} options
+		 * @param  {Boolean} options.no_state do not return state information
+		 * @param  {Boolean} options.no_id do not return ID
+		 * @param  {Boolean} options.no_children do not include children
+		 * @param  {Boolean} options.no_data do not include node data
+		 * @param  {Boolean} options.no_li_attr do not include LI attributes
+		 * @param  {Boolean} options.no_a_attr do not include A attributes
+		 * @param  {Boolean} options.flat return flat JSON instead of nested
+		 * @return {Object}
+		 */
+		get_json : function (obj, options, flat) {
+			obj = this.get_node(obj || $.jstree.root);
+			if(!obj) { return false; }
+			if(options && options.flat && !flat) { flat = []; }
+			var tmp = {
+				'id' : obj.id,
+				'text' : obj.text,
+				'icon' : this.get_icon(obj),
+				'li_attr' : $.extend(true, {}, obj.li_attr),
+				'a_attr' : $.extend(true, {}, obj.a_attr),
+				'state' : {},
+				'data' : options && options.no_data ? false : $.extend(true, $.isArray(obj.data)?[]:{}, obj.data)
+				//( this.get_node(obj, true).length ? this.get_node(obj, true).data() : obj.data ),
+			}, i, j;
+			if(options && options.flat) {
+				tmp.parent = obj.parent;
+			}
+			else {
+				tmp.children = [];
+			}
+			if(!options || !options.no_state) {
+				for(i in obj.state) {
+					if(obj.state.hasOwnProperty(i)) {
+						tmp.state[i] = obj.state[i];
+					}
+				}
+			} else {
+				delete tmp.state;
+			}
+			if(options && options.no_li_attr) {
+				delete tmp.li_attr;
+			}
+			if(options && options.no_a_attr) {
+				delete tmp.a_attr;
+			}
+			if(options && options.no_id) {
+				delete tmp.id;
+				if(tmp.li_attr && tmp.li_attr.id) {
+					delete tmp.li_attr.id;
+				}
+				if(tmp.a_attr && tmp.a_attr.id) {
+					delete tmp.a_attr.id;
+				}
+			}
+			if(options && options.flat && obj.id !== $.jstree.root) {
+				flat.push(tmp);
+			}
+			if(!options || !options.no_children) {
+				for(i = 0, j = obj.children.length; i < j; i++) {
+					if(options && options.flat) {
+						this.get_json(obj.children[i], options, flat);
+					}
+					else {
+						tmp.children.push(this.get_json(obj.children[i], options));
+					}
+				}
+			}
+			return options && options.flat ? flat : (obj.id === $.jstree.root ? tmp.children : tmp);
+		},
+		/**
+		 * create a new node (do not confuse with load_node)
+		 * @name create_node([par, node, pos, callback, is_loaded])
+		 * @param  {mixed}   par       the parent node (to create a root node use either "#" (string) or `null`)
+		 * @param  {mixed}   node      the data for the new node (a valid JSON object, or a simple string with the name)
+		 * @param  {mixed}   pos       the index at which to insert the node, "first" and "last" are also supported, default is "last"
+		 * @param  {Function} callback a function to be called once the node is created
+		 * @param  {Boolean} is_loaded internal argument indicating if the parent node was succesfully loaded
+		 * @return {String}            the ID of the newly create node
+		 * @trigger model.jstree, create_node.jstree
+		 */
+		create_node : function (par, node, pos, callback, is_loaded) {
+			if(par === null) { par = $.jstree.root; }
+			par = this.get_node(par);
+			if(!par) { return false; }
+			pos = pos === undefined ? "last" : pos;
+			if(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) {
+				return this.load_node(par, function () { this.create_node(par, node, pos, callback, true); });
+			}
+			if(!node) { node = { "text" : this.get_string('New node') }; }
+			if(typeof node === "string") {
+				node = { "text" : node };
+			} else {
+				node = $.extend(true, {}, node);
+			}
+			if(node.text === undefined) { node.text = this.get_string('New node'); }
+			var tmp, dpc, i, j;
+
+			if(par.id === $.jstree.root) {
+				if(pos === "before") { pos = "first"; }
+				if(pos === "after") { pos = "last"; }
+			}
+			switch(pos) {
+				case "before":
+					tmp = this.get_node(par.parent);
+					pos = $.inArray(par.id, tmp.children);
+					par = tmp;
+					break;
+				case "after" :
+					tmp = this.get_node(par.parent);
+					pos = $.inArray(par.id, tmp.children) + 1;
+					par = tmp;
+					break;
+				case "inside":
+				case "first":
+					pos = 0;
+					break;
+				case "last":
+					pos = par.children.length;
+					break;
+				default:
+					if(!pos) { pos = 0; }
+					break;
+			}
+			if(pos > par.children.length) { pos = par.children.length; }
+			if(!node.id) { node.id = true; }
+			if(!this.check("create_node", node, par, pos)) {
+				this.settings.core.error.call(this, this._data.core.last_error);
+				return false;
+			}
+			if(node.id === true) { delete node.id; }
+			node = this._parse_model_from_json(node, par.id, par.parents.concat());
+			if(!node) { return false; }
+			tmp = this.get_node(node);
+			dpc = [];
+			dpc.push(node);
+			dpc = dpc.concat(tmp.children_d);
+			this.trigger('model', { "nodes" : dpc, "parent" : par.id });
+
+			par.children_d = par.children_d.concat(dpc);
+			for(i = 0, j = par.parents.length; i < j; i++) {
+				this._model.data[par.parents[i]].children_d = this._model.data[par.parents[i]].children_d.concat(dpc);
+			}
+			node = tmp;
+			tmp = [];
+			for(i = 0, j = par.children.length; i < j; i++) {
+				tmp[i >= pos ? i+1 : i] = par.children[i];
+			}
+			tmp[pos] = node.id;
+			par.children = tmp;
+
+			this.redraw_node(par, true);
+			/**
+			 * triggered when a node is created
+			 * @event
+			 * @name create_node.jstree
+			 * @param {Object} node
+			 * @param {String} parent the parent's ID
+			 * @param {Number} position the position of the new node among the parent's children
+			 */
+			this.trigger('create_node', { "node" : this.get_node(node), "parent" : par.id, "position" : pos });
+			if(callback) { callback.call(this, this.get_node(node)); }
+			return node.id;
+		},
+		/**
+		 * set the text value of a node
+		 * @name rename_node(obj, val)
+		 * @param  {mixed} obj the node, you can pass an array to rename multiple nodes to the same name
+		 * @param  {String} val the new text value
+		 * @return {Boolean}
+		 * @trigger rename_node.jstree
+		 */
+		rename_node : function (obj, val) {
+			var t1, t2, old;
+			if($.isArray(obj)) {
+				obj = obj.slice();
+				for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+					this.rename_node(obj[t1], val);
+				}
+				return true;
+			}
+			obj = this.get_node(obj);
+			if(!obj || obj.id === $.jstree.root) { return false; }
+			old = obj.text;
+			if(!this.check("rename_node", obj, this.get_parent(obj), val)) {
+				this.settings.core.error.call(this, this._data.core.last_error);
+				return false;
+			}
+			this.set_text(obj, val); // .apply(this, Array.prototype.slice.call(arguments))
+			/**
+			 * triggered when a node is renamed
+			 * @event
+			 * @name rename_node.jstree
+			 * @param {Object} node
+			 * @param {String} text the new value
+			 * @param {String} old the old value
+			 */
+			this.trigger('rename_node', { "node" : obj, "text" : val, "old" : old });
+			return true;
+		},
+		/**
+		 * remove a node
+		 * @name delete_node(obj)
+		 * @param  {mixed} obj the node, you can pass an array to delete multiple nodes
+		 * @return {Boolean}
+		 * @trigger delete_node.jstree, changed.jstree
+		 */
+		delete_node : function (obj) {
+			var t1, t2, par, pos, tmp, i, j, k, l, c, top, lft;
+			if($.isArray(obj)) {
+				obj = obj.slice();
+				for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+					this.delete_node(obj[t1]);
+				}
+				return true;
+			}
+			obj = this.get_node(obj);
+			if(!obj || obj.id === $.jstree.root) { return false; }
+			par = this.get_node(obj.parent);
+			pos = $.inArray(obj.id, par.children);
+			c = false;
+			if(!this.check("delete_node", obj, par, pos)) {
+				this.settings.core.error.call(this, this._data.core.last_error);
+				return false;
+			}
+			if(pos !== -1) {
+				par.children = $.vakata.array_remove(par.children, pos);
+			}
+			tmp = obj.children_d.concat([]);
+			tmp.push(obj.id);
+			for(i = 0, j = obj.parents.length; i < j; i++) {
+				this._model.data[obj.parents[i]].children_d = $.vakata.array_filter(this._model.data[obj.parents[i]].children_d, function (v) {
+					return $.inArray(v, tmp) === -1;
+				});
+			}
+			for(k = 0, l = tmp.length; k < l; k++) {
+				if(this._model.data[tmp[k]].state.selected) {
+					c = true;
+					break;
+				}
+			}
+			if (c) {
+				this._data.core.selected = $.vakata.array_filter(this._data.core.selected, function (v) {
+					return $.inArray(v, tmp) === -1;
+				});
+			}
+			/**
+			 * triggered when a node is deleted
+			 * @event
+			 * @name delete_node.jstree
+			 * @param {Object} node
+			 * @param {String} parent the parent's ID
+			 */
+			this.trigger('delete_node', { "node" : obj, "parent" : par.id });
+			if(c) {
+				this.trigger('changed', { 'action' : 'delete_node', 'node' : obj, 'selected' : this._data.core.selected, 'parent' : par.id });
+			}
+			for(k = 0, l = tmp.length; k < l; k++) {
+				delete this._model.data[tmp[k]];
+			}
+			if($.inArray(this._data.core.focused, tmp) !== -1) {
+				this._data.core.focused = null;
+				top = this.element[0].scrollTop;
+				lft = this.element[0].scrollLeft;
+				if(par.id === $.jstree.root) {
+					if (this._model.data[$.jstree.root].children[0]) {
+						this.get_node(this._model.data[$.jstree.root].children[0], true).children('.jstree-anchor').focus();
+					}
+				}
+				else {
+					this.get_node(par, true).children('.jstree-anchor').focus();
+				}
+				this.element[0].scrollTop  = top;
+				this.element[0].scrollLeft = lft;
+			}
+			this.redraw_node(par, true);
+			return true;
+		},
+		/**
+		 * check if an operation is premitted on the tree. Used internally.
+		 * @private
+		 * @name check(chk, obj, par, pos)
+		 * @param  {String} chk the operation to check, can be "create_node", "rename_node", "delete_node", "copy_node" or "move_node"
+		 * @param  {mixed} obj the node
+		 * @param  {mixed} par the parent
+		 * @param  {mixed} pos the position to insert at, or if "rename_node" - the new name
+		 * @param  {mixed} more some various additional information, for example if a "move_node" operations is triggered by DND this will be the hovered node
+		 * @return {Boolean}
+		 */
+		check : function (chk, obj, par, pos, more) {
+			obj = obj && obj.id ? obj : this.get_node(obj);
+			par = par && par.id ? par : this.get_node(par);
+			var tmp = chk.match(/^move_node|copy_node|create_node$/i) ? par : obj,
+				chc = this.settings.core.check_callback;
+			if(chk === "move_node" || chk === "copy_node") {
+				if((!more || !more.is_multi) && (obj.id === par.id || (chk === "move_node" && $.inArray(obj.id, par.children) === pos) || $.inArray(par.id, obj.children_d) !== -1)) {
+					this._data.core.last_error = { 'error' : 'check', 'plugin' : 'core', 'id' : 'core_01', 'reason' : 'Moving parent inside child', 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
+					return false;
+				}
+			}
+			if(tmp && tmp.data) { tmp = tmp.data; }
+			if(tmp && tmp.functions && (tmp.functions[chk] === false || tmp.functions[chk] === true)) {
+				if(tmp.functions[chk] === false) {
+					this._data.core.last_error = { 'error' : 'check', 'plugin' : 'core', 'id' : 'core_02', 'reason' : 'Node data prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
+				}
+				return tmp.functions[chk];
+			}
+			if(chc === false || ($.isFunction(chc) && chc.call(this, chk, obj, par, pos, more) === false) || (chc && chc[chk] === false)) {
+				this._data.core.last_error = { 'error' : 'check', 'plugin' : 'core', 'id' : 'core_03', 'reason' : 'User config for core.check_callback prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
+				return false;
+			}
+			return true;
+		},
+		/**
+		 * get the last error
+		 * @name last_error()
+		 * @return {Object}
+		 */
+		last_error : function () {
+			return this._data.core.last_error;
+		},
+		/**
+		 * move a node to a new parent
+		 * @name move_node(obj, par [, pos, callback, is_loaded])
+		 * @param  {mixed} obj the node to move, pass an array to move multiple nodes
+		 * @param  {mixed} par the new parent
+		 * @param  {mixed} pos the position to insert at (besides integer values, "first" and "last" are supported, as well as "before" and "after"), defaults to integer `0`
+		 * @param  {function} callback a function to call once the move is completed, receives 3 arguments - the node, the new parent and the position
+		 * @param  {Boolean} is_loaded internal parameter indicating if the parent node has been loaded
+		 * @param  {Boolean} skip_redraw internal parameter indicating if the tree should be redrawn
+		 * @param  {Boolean} instance internal parameter indicating if the node comes from another instance
+		 * @trigger move_node.jstree
+		 */
+		move_node : function (obj, par, pos, callback, is_loaded, skip_redraw, origin) {
+			var t1, t2, old_par, old_pos, new_par, old_ins, is_multi, dpc, tmp, i, j, k, l, p;
+
+			par = this.get_node(par);
+			pos = pos === undefined ? 0 : pos;
+			if(!par) { return false; }
+			if(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) {
+				return this.load_node(par, function () { this.move_node(obj, par, pos, callback, true, false, origin); });
+			}
+
+			if($.isArray(obj)) {
+				if(obj.length === 1) {
+					obj = obj[0];
+				}
+				else {
+					//obj = obj.slice();
+					for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+						if((tmp = this.move_node(obj[t1], par, pos, callback, is_loaded, false, origin))) {
+							par = tmp;
+							pos = "after";
+						}
+					}
+					this.redraw();
+					return true;
+				}
+			}
+			obj = obj && obj.id ? obj : this.get_node(obj);
+
+			if(!obj || obj.id === $.jstree.root) { return false; }
+
+			old_par = (obj.parent || $.jstree.root).toString();
+			new_par = (!pos.toString().match(/^(before|after)$/) || par.id === $.jstree.root) ? par : this.get_node(par.parent);
+			old_ins = origin ? origin : (this._model.data[obj.id] ? this : $.jstree.reference(obj.id));
+			is_multi = !old_ins || !old_ins._id || (this._id !== old_ins._id);
+			old_pos = old_ins && old_ins._id && old_par && old_ins._model.data[old_par] && old_ins._model.data[old_par].children ? $.inArray(obj.id, old_ins._model.data[old_par].children) : -1;
+			if(old_ins && old_ins._id) {
+				obj = old_ins._model.data[obj.id];
+			}
+
+			if(is_multi) {
+				if((tmp = this.copy_node(obj, par, pos, callback, is_loaded, false, origin))) {
+					if(old_ins) { old_ins.delete_node(obj); }
+					return tmp;
+				}
+				return false;
+			}
+			//var m = this._model.data;
+			if(par.id === $.jstree.root) {
+				if(pos === "before") { pos = "first"; }
+				if(pos === "after") { pos = "last"; }
+			}
+			switch(pos) {
+				case "before":
+					pos = $.inArray(par.id, new_par.children);
+					break;
+				case "after" :
+					pos = $.inArray(par.id, new_par.children) + 1;
+					break;
+				case "inside":
+				case "first":
+					pos = 0;
+					break;
+				case "last":
+					pos = new_par.children.length;
+					break;
+				default:
+					if(!pos) { pos = 0; }
+					break;
+			}
+			if(pos > new_par.children.length) { pos = new_par.children.length; }
+			if(!this.check("move_node", obj, new_par, pos, { 'core' : true, 'origin' : origin, 'is_multi' : (old_ins && old_ins._id && old_ins._id !== this._id), 'is_foreign' : (!old_ins || !old_ins._id) })) {
+				this.settings.core.error.call(this, this._data.core.last_error);
+				return false;
+			}
+			if(obj.parent === new_par.id) {
+				dpc = new_par.children.concat();
+				tmp = $.inArray(obj.id, dpc);
+				if(tmp !== -1) {
+					dpc = $.vakata.array_remove(dpc, tmp);
+					if(pos > tmp) { pos--; }
+				}
+				tmp = [];
+				for(i = 0, j = dpc.length; i < j; i++) {
+					tmp[i >= pos ? i+1 : i] = dpc[i];
+				}
+				tmp[pos] = obj.id;
+				new_par.children = tmp;
+				this._node_changed(new_par.id);
+				this.redraw(new_par.id === $.jstree.root);
+			}
+			else {
+				// clean old parent and up
+				tmp = obj.children_d.concat();
+				tmp.push(obj.id);
+				for(i = 0, j = obj.parents.length; i < j; i++) {
+					dpc = [];
+					p = old_ins._model.data[obj.parents[i]].children_d;
+					for(k = 0, l = p.length; k < l; k++) {
+						if($.inArray(p[k], tmp) === -1) {
+							dpc.push(p[k]);
+						}
+					}
+					old_ins._model.data[obj.parents[i]].children_d = dpc;
+				}
+				old_ins._model.data[old_par].children = $.vakata.array_remove_item(old_ins._model.data[old_par].children, obj.id);
+
+				// insert into new parent and up
+				for(i = 0, j = new_par.parents.length; i < j; i++) {
+					this._model.data[new_par.parents[i]].children_d = this._model.data[new_par.parents[i]].children_d.concat(tmp);
+				}
+				dpc = [];
+				for(i = 0, j = new_par.children.length; i < j; i++) {
+					dpc[i >= pos ? i+1 : i] = new_par.children[i];
+				}
+				dpc[pos] = obj.id;
+				new_par.children = dpc;
+				new_par.children_d.push(obj.id);
+				new_par.children_d = new_par.children_d.concat(obj.children_d);
+
+				// update object
+				obj.parent = new_par.id;
+				tmp = new_par.parents.concat();
+				tmp.unshift(new_par.id);
+				p = obj.parents.length;
+				obj.parents = tmp;
+
+				// update object children
+				tmp = tmp.concat();
+				for(i = 0, j = obj.children_d.length; i < j; i++) {
+					this._model.data[obj.children_d[i]].parents = this._model.data[obj.children_d[i]].parents.slice(0,p*-1);
+					Array.prototype.push.apply(this._model.data[obj.children_d[i]].parents, tmp);
+				}
+
+				if(old_par === $.jstree.root || new_par.id === $.jstree.root) {
+					this._model.force_full_redraw = true;
+				}
+				if(!this._model.force_full_redraw) {
+					this._node_changed(old_par);
+					this._node_changed(new_par.id);
+				}
+				if(!skip_redraw) {
+					this.redraw();
+				}
+			}
+			if(callback) { callback.call(this, obj, new_par, pos); }
+			/**
+			 * triggered when a node is moved
+			 * @event
+			 * @name move_node.jstree
+			 * @param {Object} node
+			 * @param {String} parent the parent's ID
+			 * @param {Number} position the position of the node among the parent's children
+			 * @param {String} old_parent the old parent of the node
+			 * @param {Number} old_position the old position of the node
+			 * @param {Boolean} is_multi do the node and new parent belong to different instances
+			 * @param {jsTree} old_instance the instance the node came from
+			 * @param {jsTree} new_instance the instance of the new parent
+			 */
+			this.trigger('move_node', { "node" : obj, "parent" : new_par.id, "position" : pos, "old_parent" : old_par, "old_position" : old_pos, 'is_multi' : (old_ins && old_ins._id && old_ins._id !== this._id), 'is_foreign' : (!old_ins || !old_ins._id), 'old_instance' : old_ins, 'new_instance' : this });
+			return obj.id;
+		},
+		/**
+		 * copy a node to a new parent
+		 * @name copy_node(obj, par [, pos, callback, is_loaded])
+		 * @param  {mixed} obj the node to copy, pass an array to copy multiple nodes
+		 * @param  {mixed} par the new parent
+		 * @param  {mixed} pos the position to insert at (besides integer values, "first" and "last" are supported, as well as "before" and "after"), defaults to integer `0`
+		 * @param  {function} callback a function to call once the move is completed, receives 3 arguments - the node, the new parent and the position
+		 * @param  {Boolean} is_loaded internal parameter indicating if the parent node has been loaded
+		 * @param  {Boolean} skip_redraw internal parameter indicating if the tree should be redrawn
+		 * @param  {Boolean} instance internal parameter indicating if the node comes from another instance
+		 * @trigger model.jstree copy_node.jstree
+		 */
+		copy_node : function (obj, par, pos, callback, is_loaded, skip_redraw, origin) {
+			var t1, t2, dpc, tmp, i, j, node, old_par, new_par, old_ins, is_multi;
+
+			par = this.get_node(par);
+			pos = pos === undefined ? 0 : pos;
+			if(!par) { return false; }
+			if(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) {
+				return this.load_node(par, function () { this.copy_node(obj, par, pos, callback, true, false, origin); });
+			}
+
+			if($.isArray(obj)) {
+				if(obj.length === 1) {
+					obj = obj[0];
+				}
+				else {
+					//obj = obj.slice();
+					for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+						if((tmp = this.copy_node(obj[t1], par, pos, callback, is_loaded, true, origin))) {
+							par = tmp;
+							pos = "after";
+						}
+					}
+					this.redraw();
+					return true;
+				}
+			}
+			obj = obj && obj.id ? obj : this.get_node(obj);
+			if(!obj || obj.id === $.jstree.root) { return false; }
+
+			old_par = (obj.parent || $.jstree.root).toString();
+			new_par = (!pos.toString().match(/^(before|after)$/) || par.id === $.jstree.root) ? par : this.get_node(par.parent);
+			old_ins = origin ? origin : (this._model.data[obj.id] ? this : $.jstree.reference(obj.id));
+			is_multi = !old_ins || !old_ins._id || (this._id !== old_ins._id);
+
+			if(old_ins && old_ins._id) {
+				obj = old_ins._model.data[obj.id];
+			}
+
+			if(par.id === $.jstree.root) {
+				if(pos === "before") { pos = "first"; }
+				if(pos === "after") { pos = "last"; }
+			}
+			switch(pos) {
+				case "before":
+					pos = $.inArray(par.id, new_par.children);
+					break;
+				case "after" :
+					pos = $.inArray(par.id, new_par.children) + 1;
+					break;
+				case "inside":
+				case "first":
+					pos = 0;
+					break;
+				case "last":
+					pos = new_par.children.length;
+					break;
+				default:
+					if(!pos) { pos = 0; }
+					break;
+			}
+			if(pos > new_par.children.length) { pos = new_par.children.length; }
+			if(!this.check("copy_node", obj, new_par, pos, { 'core' : true, 'origin' : origin, 'is_multi' : (old_ins && old_ins._id && old_ins._id !== this._id), 'is_foreign' : (!old_ins || !old_ins._id) })) {
+				this.settings.core.error.call(this, this._data.core.last_error);
+				return false;
+			}
+			node = old_ins ? old_ins.get_json(obj, { no_id : true, no_data : true, no_state : true }) : obj;
+			if(!node) { return false; }
+			if(node.id === true) { delete node.id; }
+			node = this._parse_model_from_json(node, new_par.id, new_par.parents.concat());
+			if(!node) { return false; }
+			tmp = this.get_node(node);
+			if(obj && obj.state && obj.state.loaded === false) { tmp.state.loaded = false; }
+			dpc = [];
+			dpc.push(node);
+			dpc = dpc.concat(tmp.children_d);
+			this.trigger('model', { "nodes" : dpc, "parent" : new_par.id });
+
+			// insert into new parent and up
+			for(i = 0, j = new_par.parents.length; i < j; i++) {
+				this._model.data[new_par.parents[i]].children_d = this._model.data[new_par.parents[i]].children_d.concat(dpc);
+			}
+			dpc = [];
+			for(i = 0, j = new_par.children.length; i < j; i++) {
+				dpc[i >= pos ? i+1 : i] = new_par.children[i];
+			}
+			dpc[pos] = tmp.id;
+			new_par.children = dpc;
+			new_par.children_d.push(tmp.id);
+			new_par.children_d = new_par.children_d.concat(tmp.children_d);
+
+			if(new_par.id === $.jstree.root) {
+				this._model.force_full_redraw = true;
+			}
+			if(!this._model.force_full_redraw) {
+				this._node_changed(new_par.id);
+			}
+			if(!skip_redraw) {
+				this.redraw(new_par.id === $.jstree.root);
+			}
+			if(callback) { callback.call(this, tmp, new_par, pos); }
+			/**
+			 * triggered when a node is copied
+			 * @event
+			 * @name copy_node.jstree
+			 * @param {Object} node the copied node
+			 * @param {Object} original the original node
+			 * @param {String} parent the parent's ID
+			 * @param {Number} position the position of the node among the parent's children
+			 * @param {String} old_parent the old parent of the node
+			 * @param {Number} old_position the position of the original node
+			 * @param {Boolean} is_multi do the node and new parent belong to different instances
+			 * @param {jsTree} old_instance the instance the node came from
+			 * @param {jsTree} new_instance the instance of the new parent
+			 */
+			this.trigger('copy_node', { "node" : tmp, "original" : obj, "parent" : new_par.id, "position" : pos, "old_parent" : old_par, "old_position" : old_ins && old_ins._id && old_par && old_ins._model.data[old_par] && old_ins._model.data[old_par].children ? $.inArray(obj.id, old_ins._model.data[old_par].children) : -1,'is_multi' : (old_ins && old_ins._id && old_ins._id !== this._id), 'is_foreign' : (!old_ins || !old_ins._id), 'old_instance' : old_ins, 'new_instance' : this });
+			return tmp.id;
+		},
+		/**
+		 * cut a node (a later call to `paste(obj)` would move the node)
+		 * @name cut(obj)
+		 * @param  {mixed} obj multiple objects can be passed using an array
+		 * @trigger cut.jstree
+		 */
+		cut : function (obj) {
+			if(!obj) { obj = this._data.core.selected.concat(); }
+			if(!$.isArray(obj)) { obj = [obj]; }
+			if(!obj.length) { return false; }
+			var tmp = [], o, t1, t2;
+			for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+				o = this.get_node(obj[t1]);
+				if(o && o.id && o.id !== $.jstree.root) { tmp.push(o); }
+			}
+			if(!tmp.length) { return false; }
+			ccp_node = tmp;
+			ccp_inst = this;
+			ccp_mode = 'move_node';
+			/**
+			 * triggered when nodes are added to the buffer for moving
+			 * @event
+			 * @name cut.jstree
+			 * @param {Array} node
+			 */
+			this.trigger('cut', { "node" : obj });
+		},
+		/**
+		 * copy a node (a later call to `paste(obj)` would copy the node)
+		 * @name copy(obj)
+		 * @param  {mixed} obj multiple objects can be passed using an array
+		 * @trigger copy.jstree
+		 */
+		copy : function (obj) {
+			if(!obj) { obj = this._data.core.selected.concat(); }
+			if(!$.isArray(obj)) { obj = [obj]; }
+			if(!obj.length) { return false; }
+			var tmp = [], o, t1, t2;
+			for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+				o = this.get_node(obj[t1]);
+				if(o && o.id && o.id !== $.jstree.root) { tmp.push(o); }
+			}
+			if(!tmp.length) { return false; }
+			ccp_node = tmp;
+			ccp_inst = this;
+			ccp_mode = 'copy_node';
+			/**
+			 * triggered when nodes are added to the buffer for copying
+			 * @event
+			 * @name copy.jstree
+			 * @param {Array} node
+			 */
+			this.trigger('copy', { "node" : obj });
+		},
+		/**
+		 * get the current buffer (any nodes that are waiting for a paste operation)
+		 * @name get_buffer()
+		 * @return {Object} an object consisting of `mode` ("copy_node" or "move_node"), `node` (an array of objects) and `inst` (the instance)
+		 */
+		get_buffer : function () {
+			return { 'mode' : ccp_mode, 'node' : ccp_node, 'inst' : ccp_inst };
+		},
+		/**
+		 * check if there is something in the buffer to paste
+		 * @name can_paste()
+		 * @return {Boolean}
+		 */
+		can_paste : function () {
+			return ccp_mode !== false && ccp_node !== false; // && ccp_inst._model.data[ccp_node];
+		},
+		/**
+		 * copy or move the previously cut or copied nodes to a new parent
+		 * @name paste(obj [, pos])
+		 * @param  {mixed} obj the new parent
+		 * @param  {mixed} pos the position to insert at (besides integer, "first" and "last" are supported), defaults to integer `0`
+		 * @trigger paste.jstree
+		 */
+		paste : function (obj, pos) {
+			obj = this.get_node(obj);
+			if(!obj || !ccp_mode || !ccp_mode.match(/^(copy_node|move_node)$/) || !ccp_node) { return false; }
+			if(this[ccp_mode](ccp_node, obj, pos, false, false, false, ccp_inst)) {
+				/**
+				 * triggered when paste is invoked
+				 * @event
+				 * @name paste.jstree
+				 * @param {String} parent the ID of the receiving node
+				 * @param {Array} node the nodes in the buffer
+				 * @param {String} mode the performed operation - "copy_node" or "move_node"
+				 */
+				this.trigger('paste', { "parent" : obj.id, "node" : ccp_node, "mode" : ccp_mode });
+			}
+			ccp_node = false;
+			ccp_mode = false;
+			ccp_inst = false;
+		},
+		/**
+		 * clear the buffer of previously copied or cut nodes
+		 * @name clear_buffer()
+		 * @trigger clear_buffer.jstree
+		 */
+		clear_buffer : function () {
+			ccp_node = false;
+			ccp_mode = false;
+			ccp_inst = false;
+			/**
+			 * triggered when the copy / cut buffer is cleared
+			 * @event
+			 * @name clear_buffer.jstree
+			 */
+			this.trigger('clear_buffer');
+		},
+		/**
+		 * put a node in edit mode (input field to rename the node)
+		 * @name edit(obj [, default_text, callback])
+		 * @param  {mixed} obj
+		 * @param  {String} default_text the text to populate the input with (if omitted or set to a non-string value the node's text value is used)
+		 * @param  {Function} callback a function to be called once the text box is blurred, it is called in the instance's scope and receives the node, a status parameter (true if the rename is successful, false otherwise) and a boolean indicating if the user cancelled the edit. You can access the node's title using .text
+		 */
+		edit : function (obj, default_text, callback) {
+			var rtl, w, a, s, t, h1, h2, fn, tmp, cancel = false;
+			obj = this.get_node(obj);
+			if(!obj) { return false; }
+			if(!this.check("edit", obj, this.get_parent(obj))) {
+				this.settings.core.error.call(this, this._data.core.last_error);
+				return false;
+			}
+			tmp = obj;
+			default_text = typeof default_text === 'string' ? default_text : obj.text;
+			this.set_text(obj, "");
+			obj = this._open_to(obj);
+			tmp.text = default_text;
+
+			rtl = this._data.core.rtl;
+			w  = this.element.width();
+			this._data.core.focused = tmp.id;
+			a  = obj.children('.jstree-anchor').focus();
+			s  = $('<span>');
+			/*!
+			oi = obj.children("i:visible"),
+			ai = a.children("i:visible"),
+			w1 = oi.width() * oi.length,
+			w2 = ai.width() * ai.length,
+			*/
+			t  = default_text;
+			h1 = $("<"+"div />", { css : { "position" : "absolute", "top" : "-200px", "left" : (rtl ? "0px" : "-1000px"), "visibility" : "hidden" } }).appendTo("body");
+			h2 = $("<"+"input />", {
+						"value" : t,
+						"class" : "jstree-rename-input",
+						// "size" : t.length,
+						"css" : {
+							"padding" : "0",
+							"border" : "1px solid silver",
+							"box-sizing" : "border-box",
+							"display" : "inline-block",
+							"height" : (this._data.core.li_height) + "px",
+							"lineHeight" : (this._data.core.li_height) + "px",
+							"width" : "150px" // will be set a bit further down
+						},
+						"blur" : $.proxy(function (e) {
+							e.stopImmediatePropagation();
+							e.preventDefault();
+							var i = s.children(".jstree-rename-input"),
+								v = i.val(),
+								f = this.settings.core.force_text,
+								nv;
+							if(v === "") { v = t; }
+							h1.remove();
+							s.replaceWith(a);
+							s.remove();
+							t = f ? t : $('<div></div>').append($.parseHTML(t)).html();
+							this.set_text(obj, t);
+							nv = !!this.rename_node(obj, f ? $('<div></div>').text(v).text() : $('<div></div>').append($.parseHTML(v)).html());
+							if(!nv) {
+								this.set_text(obj, t); // move this up? and fix #483
+							}
+							this._data.core.focused = tmp.id;
+							setTimeout($.proxy(function () {
+								var node = this.get_node(tmp.id, true);
+								if(node.length) {
+									this._data.core.focused = tmp.id;
+									node.children('.jstree-anchor').focus();
+								}
+							}, this), 0);
+							if(callback) {
+								callback.call(this, tmp, nv, cancel);
+							}
+							h2 = null;
+						}, this),
+						"keydown" : function (e) {
+							var key = e.which;
+							if(key === 27) {
+								cancel = true;
+								this.value = t;
+							}
+							if(key === 27 || key === 13 || key === 37 || key === 38 || key === 39 || key === 40 || key === 32) {
+								e.stopImmediatePropagation();
+							}
+							if(key === 27 || key === 13) {
+								e.preventDefault();
+								this.blur();
+							}
+						},
+						"click" : function (e) { e.stopImmediatePropagation(); },
+						"mousedown" : function (e) { e.stopImmediatePropagation(); },
+						"keyup" : function (e) {
+							h2.width(Math.min(h1.text("pW" + this.value).width(),w));
+						},
+						"keypress" : function(e) {
+							if(e.which === 13) { return false; }
+						}
+					});
+				fn = {
+						fontFamily		: a.css('fontFamily')		|| '',
+						fontSize		: a.css('fontSize')			|| '',
+						fontWeight		: a.css('fontWeight')		|| '',
+						fontStyle		: a.css('fontStyle')		|| '',
+						fontStretch		: a.css('fontStretch')		|| '',
+						fontVariant		: a.css('fontVariant')		|| '',
+						letterSpacing	: a.css('letterSpacing')	|| '',
+						wordSpacing		: a.css('wordSpacing')		|| ''
+				};
+			s.attr('class', a.attr('class')).append(a.contents().clone()).append(h2);
+			a.replaceWith(s);
+			h1.css(fn);
+			h2.css(fn).width(Math.min(h1.text("pW" + h2[0].value).width(),w))[0].select();
+			$(document).one('mousedown.jstree touchstart.jstree dnd_start.vakata', function (e) {
+				if (h2 && e.target !== h2) {
+					$(h2).blur();
+				}
+			});
+		},
+
+
+		/**
+		 * changes the theme
+		 * @name set_theme(theme_name [, theme_url])
+		 * @param {String} theme_name the name of the new theme to apply
+		 * @param {mixed} theme_url  the location of the CSS file for this theme. Omit or set to `false` if you manually included the file. Set to `true` to autoload from the `core.themes.dir` directory.
+		 * @trigger set_theme.jstree
+		 */
+		set_theme : function (theme_name, theme_url) {
+			if(!theme_name) { return false; }
+			if(theme_url === true) {
+				var dir = this.settings.core.themes.dir;
+				if(!dir) { dir = $.jstree.path + '/themes'; }
+				theme_url = dir + '/' + theme_name + '/style.css';
+			}
+			if(theme_url && $.inArray(theme_url, themes_loaded) === -1) {
+				$('head').append('<'+'link rel="stylesheet" href="' + theme_url + '" type="text/css" />');
+				themes_loaded.push(theme_url);
+			}
+			if(this._data.core.themes.name) {
+				this.element.removeClass('jstree-' + this._data.core.themes.name);
+			}
+			this._data.core.themes.name = theme_name;
+			this.element.addClass('jstree-' + theme_name);
+			this.element[this.settings.core.themes.responsive ? 'addClass' : 'removeClass' ]('jstree-' + theme_name + '-responsive');
+			/**
+			 * triggered when a theme is set
+			 * @event
+			 * @name set_theme.jstree
+			 * @param {String} theme the new theme
+			 */
+			this.trigger('set_theme', { 'theme' : theme_name });
+		},
+		/**
+		 * gets the name of the currently applied theme name
+		 * @name get_theme()
+		 * @return {String}
+		 */
+		get_theme : function () { return this._data.core.themes.name; },
+		/**
+		 * changes the theme variant (if the theme has variants)
+		 * @name set_theme_variant(variant_name)
+		 * @param {String|Boolean} variant_name the variant to apply (if `false` is used the current variant is removed)
+		 */
+		set_theme_variant : function (variant_name) {
+			if(this._data.core.themes.variant) {
+				this.element.removeClass('jstree-' + this._data.core.themes.name + '-' + this._data.core.themes.variant);
+			}
+			this._data.core.themes.variant = variant_name;
+			if(variant_name) {
+				this.element.addClass('jstree-' + this._data.core.themes.name + '-' + this._data.core.themes.variant);
+			}
+		},
+		/**
+		 * gets the name of the currently applied theme variant
+		 * @name get_theme()
+		 * @return {String}
+		 */
+		get_theme_variant : function () { return this._data.core.themes.variant; },
+		/**
+		 * shows a striped background on the container (if the theme supports it)
+		 * @name show_stripes()
+		 */
+		show_stripes : function () {
+			this._data.core.themes.stripes = true;
+			this.get_container_ul().addClass("jstree-striped");
+			/**
+			 * triggered when stripes are shown
+			 * @event
+			 * @name show_stripes.jstree
+			 */
+			this.trigger('show_stripes');
+		},
+		/**
+		 * hides the striped background on the container
+		 * @name hide_stripes()
+		 */
+		hide_stripes : function () {
+			this._data.core.themes.stripes = false;
+			this.get_container_ul().removeClass("jstree-striped");
+			/**
+			 * triggered when stripes are hidden
+			 * @event
+			 * @name hide_stripes.jstree
+			 */
+			this.trigger('hide_stripes');
+		},
+		/**
+		 * toggles the striped background on the container
+		 * @name toggle_stripes()
+		 */
+		toggle_stripes : function () { if(this._data.core.themes.stripes) { this.hide_stripes(); } else { this.show_stripes(); } },
+		/**
+		 * shows the connecting dots (if the theme supports it)
+		 * @name show_dots()
+		 */
+		show_dots : function () {
+			this._data.core.themes.dots = true;
+			this.get_container_ul().removeClass("jstree-no-dots");
+			/**
+			 * triggered when dots are shown
+			 * @event
+			 * @name show_dots.jstree
+			 */
+			this.trigger('show_dots');
+		},
+		/**
+		 * hides the connecting dots
+		 * @name hide_dots()
+		 */
+		hide_dots : function () {
+			this._data.core.themes.dots = false;
+			this.get_container_ul().addClass("jstree-no-dots");
+			/**
+			 * triggered when dots are hidden
+			 * @event
+			 * @name hide_dots.jstree
+			 */
+			this.trigger('hide_dots');
+		},
+		/**
+		 * toggles the connecting dots
+		 * @name toggle_dots()
+		 */
+		toggle_dots : function () { if(this._data.core.themes.dots) { this.hide_dots(); } else { this.show_dots(); } },
+		/**
+		 * show the node icons
+		 * @name show_icons()
+		 */
+		show_icons : function () {
+			this._data.core.themes.icons = true;
+			this.get_container_ul().removeClass("jstree-no-icons");
+			/**
+			 * triggered when icons are shown
+			 * @event
+			 * @name show_icons.jstree
+			 */
+			this.trigger('show_icons');
+		},
+		/**
+		 * hide the node icons
+		 * @name hide_icons()
+		 */
+		hide_icons : function () {
+			this._data.core.themes.icons = false;
+			this.get_container_ul().addClass("jstree-no-icons");
+			/**
+			 * triggered when icons are hidden
+			 * @event
+			 * @name hide_icons.jstree
+			 */
+			this.trigger('hide_icons');
+		},
+		/**
+		 * toggle the node icons
+		 * @name toggle_icons()
+		 */
+		toggle_icons : function () { if(this._data.core.themes.icons) { this.hide_icons(); } else { this.show_icons(); } },
+		/**
+		 * show the node ellipsis
+		 * @name show_icons()
+		 */
+		show_ellipsis : function () {
+			this._data.core.themes.ellipsis = true;
+			this.get_container_ul().addClass("jstree-ellipsis");
+			/**
+			 * triggered when ellisis is shown
+			 * @event
+			 * @name show_ellipsis.jstree
+			 */
+			this.trigger('show_ellipsis');
+		},
+		/**
+		 * hide the node ellipsis
+		 * @name hide_ellipsis()
+		 */
+		hide_ellipsis : function () {
+			this._data.core.themes.ellipsis = false;
+			this.get_container_ul().removeClass("jstree-ellipsis");
+			/**
+			 * triggered when ellisis is hidden
+			 * @event
+			 * @name hide_ellipsis.jstree
+			 */
+			this.trigger('hide_ellipsis');
+		},
+		/**
+		 * toggle the node ellipsis
+		 * @name toggle_icons()
+		 */
+		toggle_ellipsis : function () { if(this._data.core.themes.ellipsis) { this.hide_ellipsis(); } else { this.show_ellipsis(); } },
+		/**
+		 * set the node icon for a node
+		 * @name set_icon(obj, icon)
+		 * @param {mixed} obj
+		 * @param {String} icon the new icon - can be a path to an icon or a className, if using an image that is in the current directory use a `./` prefix, otherwise it will be detected as a class
+		 */
+		set_icon : function (obj, icon) {
+			var t1, t2, dom, old;
+			if($.isArray(obj)) {
+				obj = obj.slice();
+				for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+					this.set_icon(obj[t1], icon);
+				}
+				return true;
+			}
+			obj = this.get_node(obj);
+			if(!obj || obj.id === $.jstree.root) { return false; }
+			old = obj.icon;
+			obj.icon = icon === true || icon === null || icon === undefined || icon === '' ? true : icon;
+			dom = this.get_node(obj, true).children(".jstree-anchor").children(".jstree-themeicon");
+			if(icon === false) {
+				dom.removeClass('jstree-themeicon-custom ' + old).css("background","").removeAttr("rel");
+				this.hide_icon(obj);
+			}
+			else if(icon === true || icon === null || icon === undefined || icon === '') {
+				dom.removeClass('jstree-themeicon-custom ' + old).css("background","").removeAttr("rel");
+				if(old === false) { this.show_icon(obj); }
+			}
+			else if(icon.indexOf("/") === -1 && icon.indexOf(".") === -1) {
+				dom.removeClass(old).css("background","");
+				dom.addClass(icon + ' jstree-themeicon-custom').attr("rel",icon);
+				if(old === false) { this.show_icon(obj); }
+			}
+			else {
+				dom.removeClass(old).css("background","");
+				dom.addClass('jstree-themeicon-custom').css("background", "url('" + icon + "') center center no-repeat").attr("rel",icon);
+				if(old === false) { this.show_icon(obj); }
+			}
+			return true;
+		},
+		/**
+		 * get the node icon for a node
+		 * @name get_icon(obj)
+		 * @param {mixed} obj
+		 * @return {String}
+		 */
+		get_icon : function (obj) {
+			obj = this.get_node(obj);
+			return (!obj || obj.id === $.jstree.root) ? false : obj.icon;
+		},
+		/**
+		 * hide the icon on an individual node
+		 * @name hide_icon(obj)
+		 * @param {mixed} obj
+		 */
+		hide_icon : function (obj) {
+			var t1, t2;
+			if($.isArray(obj)) {
+				obj = obj.slice();
+				for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+					this.hide_icon(obj[t1]);
+				}
+				return true;
+			}
+			obj = this.get_node(obj);
+			if(!obj || obj === $.jstree.root) { return false; }
+			obj.icon = false;
+			this.get_node(obj, true).children(".jstree-anchor").children(".jstree-themeicon").addClass('jstree-themeicon-hidden');
+			return true;
+		},
+		/**
+		 * show the icon on an individual node
+		 * @name show_icon(obj)
+		 * @param {mixed} obj
+		 */
+		show_icon : function (obj) {
+			var t1, t2, dom;
+			if($.isArray(obj)) {
+				obj = obj.slice();
+				for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+					this.show_icon(obj[t1]);
+				}
+				return true;
+			}
+			obj = this.get_node(obj);
+			if(!obj || obj === $.jstree.root) { return false; }
+			dom = this.get_node(obj, true);
+			obj.icon = dom.length ? dom.children(".jstree-anchor").children(".jstree-themeicon").attr('rel') : true;
+			if(!obj.icon) { obj.icon = true; }
+			dom.children(".jstree-anchor").children(".jstree-themeicon").removeClass('jstree-themeicon-hidden');
+			return true;
+		}
+	};
+
+	// helpers
+	$.vakata = {};
+	// collect attributes
+	$.vakata.attributes = function(node, with_values) {
+		node = $(node)[0];
+		var attr = with_values ? {} : [];
+		if(node && node.attributes) {
+			$.each(node.attributes, function (i, v) {
+				if($.inArray(v.name.toLowerCase(),['style','contenteditable','hasfocus','tabindex']) !== -1) { return; }
+				if(v.value !== null && $.trim(v.value) !== '') {
+					if(with_values) { attr[v.name] = v.value; }
+					else { attr.push(v.name); }
+				}
+			});
+		}
+		return attr;
+	};
+	$.vakata.array_unique = function(array) {
+		var a = [], i, j, l, o = {};
+		for(i = 0, l = array.length; i < l; i++) {
+			if(o[array[i]] === undefined) {
+				a.push(array[i]);
+				o[array[i]] = true;
+			}
+		}
+		return a;
+	};
+	// remove item from array
+	$.vakata.array_remove = function(array, from) {
+		array.splice(from, 1);
+		return array;
+		//var rest = array.slice((to || from) + 1 || array.length);
+		//array.length = from < 0 ? array.length + from : from;
+		//array.push.apply(array, rest);
+		//return array;
+	};
+	// remove item from array
+	$.vakata.array_remove_item = function(array, item) {
+		var tmp = $.inArray(item, array);
+		return tmp !== -1 ? $.vakata.array_remove(array, tmp) : array;
+	};
+	$.vakata.array_filter = function(c,a,b,d,e) {
+		if (c.filter) {
+			return c.filter(a, b);
+		}
+		d=[];
+		for (e in c) {
+			if (~~e+''===e+'' && e>=0 && a.call(b,c[e],+e,c)) {
+				d.push(c[e]);
+			}
+		}
+		return d;
+	};
+
+
+/**
+ * ### Changed plugin
+ *
+ * This plugin adds more information to the `changed.jstree` event. The new data is contained in the `changed` event data property, and contains a lists of `selected` and `deselected` nodes.
+ */
+
+	$.jstree.plugins.changed = function (options, parent) {
+		var last = [];
+		this.trigger = function (ev, data) {
+			var i, j;
+			if(!data) {
+				data = {};
+			}
+			if(ev.replace('.jstree','') === 'changed') {
+				data.changed = { selected : [], deselected : [] };
+				var tmp = {};
+				for(i = 0, j = last.length; i < j; i++) {
+					tmp[last[i]] = 1;
+				}
+				for(i = 0, j = data.selected.length; i < j; i++) {
+					if(!tmp[data.selected[i]]) {
+						data.changed.selected.push(data.selected[i]);
+					}
+					else {
+						tmp[data.selected[i]] = 2;
+					}
+				}
+				for(i = 0, j = last.length; i < j; i++) {
+					if(tmp[last[i]] === 1) {
+						data.changed.deselected.push(last[i]);
+					}
+				}
+				last = data.selected.slice();
+			}
+			/**
+			 * triggered when selection changes (the "changed" plugin enhances the original event with more data)
+			 * @event
+			 * @name changed.jstree
+			 * @param {Object} node
+			 * @param {Object} action the action that caused the selection to change
+			 * @param {Array} selected the current selection
+			 * @param {Object} changed an object containing two properties `selected` and `deselected` - both arrays of node IDs, which were selected or deselected since the last changed event
+			 * @param {Object} event the event (if any) that triggered this changed event
+			 * @plugin changed
+			 */
+			parent.trigger.call(this, ev, data);
+		};
+		this.refresh = function (skip_loading, forget_state) {
+			last = [];
+			return parent.refresh.apply(this, arguments);
+		};
+	};
+
+/**
+ * ### Checkbox plugin
+ *
+ * This plugin renders checkbox icons in front of each node, making multiple selection much easier.
+ * It also supports tri-state behavior, meaning that if a node has a few of its children checked it will be rendered as undetermined, and state will be propagated up.
+ */
+
+	var _i = document.createElement('I');
+	_i.className = 'jstree-icon jstree-checkbox';
+	_i.setAttribute('role', 'presentation');
+	/**
+	 * stores all defaults for the checkbox plugin
+	 * @name $.jstree.defaults.checkbox
+	 * @plugin checkbox
+	 */
+	$.jstree.defaults.checkbox = {
+		/**
+		 * a boolean indicating if checkboxes should be visible (can be changed at a later time using `show_checkboxes()` and `hide_checkboxes`). Defaults to `true`.
+		 * @name $.jstree.defaults.checkbox.visible
+		 * @plugin checkbox
+		 */
+		visible				: true,
+		/**
+		 * a boolean indicating if checkboxes should cascade down and have an undetermined state. Defaults to `true`.
+		 * @name $.jstree.defaults.checkbox.three_state
+		 * @plugin checkbox
+		 */
+		three_state			: true,
+		/**
+		 * a boolean indicating if clicking anywhere on the node should act as clicking on the checkbox. Defaults to `true`.
+		 * @name $.jstree.defaults.checkbox.whole_node
+		 * @plugin checkbox
+		 */
+		whole_node			: true,
+		/**
+		 * a boolean indicating if the selected style of a node should be kept, or removed. Defaults to `true`.
+		 * @name $.jstree.defaults.checkbox.keep_selected_style
+		 * @plugin checkbox
+		 */
+		keep_selected_style	: true,
+		/**
+		 * This setting controls how cascading and undetermined nodes are applied.
+		 * If 'up' is in the string - cascading up is enabled, if 'down' is in the string - cascading down is enabled, if 'undetermined' is in the string - undetermined nodes will be used.
+		 * If `three_state` is set to `true` this setting is automatically set to 'up+down+undetermined'. Defaults to ''.
+		 * @name $.jstree.defaults.checkbox.cascade
+		 * @plugin checkbox
+		 */
+		cascade				: '',
+		/**
+		 * This setting controls if checkbox are bound to the general tree selection or to an internal array maintained by the checkbox plugin. Defaults to `true`, only set to `false` if you know exactly what you are doing.
+		 * @name $.jstree.defaults.checkbox.tie_selection
+		 * @plugin checkbox
+		 */
+		tie_selection		: true,
+
+		/**
+		 * This setting controls if cascading down affects disabled checkboxes
+		 * @name $.jstree.defaults.checkbox.cascade_to_disabled
+		 * @plugin checkbox
+		 */
+		cascade_to_disabled : true,
+
+		/**
+		 * This setting controls if cascading down affects hidden checkboxes
+		 * @name $.jstree.defaults.checkbox.cascade_to_hidden
+		 * @plugin checkbox
+		 */
+		cascade_to_hidden : true
+	};
+	$.jstree.plugins.checkbox = function (options, parent) {
+		this.bind = function () {
+			parent.bind.call(this);
+			this._data.checkbox.uto = false;
+			this._data.checkbox.selected = [];
+			if(this.settings.checkbox.three_state) {
+				this.settings.checkbox.cascade = 'up+down+undetermined';
+			}
+			this.element
+				.on("init.jstree", $.proxy(function () {
+						this._data.checkbox.visible = this.settings.checkbox.visible;
+						if(!this.settings.checkbox.keep_selected_style) {
+							this.element.addClass('jstree-checkbox-no-clicked');
+						}
+						if(this.settings.checkbox.tie_selection) {
+							this.element.addClass('jstree-checkbox-selection');
+						}
+					}, this))
+				.on("loading.jstree", $.proxy(function () {
+						this[ this._data.checkbox.visible ? 'show_checkboxes' : 'hide_checkboxes' ]();
+					}, this));
+			if(this.settings.checkbox.cascade.indexOf('undetermined') !== -1) {
+				this.element
+					.on('changed.jstree uncheck_node.jstree check_node.jstree uncheck_all.jstree check_all.jstree move_node.jstree copy_node.jstree redraw.jstree open_node.jstree', $.proxy(function () {
+							// only if undetermined is in setting
+							if(this._data.checkbox.uto) { clearTimeout(this._data.checkbox.uto); }
+							this._data.checkbox.uto = setTimeout($.proxy(this._undetermined, this), 50);
+						}, this));
+			}
+			if(!this.settings.checkbox.tie_selection) {
+				this.element
+					.on('model.jstree', $.proxy(function (e, data) {
+						var m = this._model.data,
+							p = m[data.parent],
+							dpc = data.nodes,
+							i, j;
+						for(i = 0, j = dpc.length; i < j; i++) {
+							m[dpc[i]].state.checked = m[dpc[i]].state.checked || (m[dpc[i]].original && m[dpc[i]].original.state && m[dpc[i]].original.state.checked);
+							if(m[dpc[i]].state.checked) {
+								this._data.checkbox.selected.push(dpc[i]);
+							}
+						}
+					}, this));
+			}
+			if(this.settings.checkbox.cascade.indexOf('up') !== -1 || this.settings.checkbox.cascade.indexOf('down') !== -1) {
+				this.element
+					.on('model.jstree', $.proxy(function (e, data) {
+							var m = this._model.data,
+								p = m[data.parent],
+								dpc = data.nodes,
+								chd = [],
+								c, i, j, k, l, tmp, s = this.settings.checkbox.cascade, t = this.settings.checkbox.tie_selection;
+
+							if(s.indexOf('down') !== -1) {
+								// apply down
+								if(p.state[ t ? 'selected' : 'checked' ]) {
+									for(i = 0, j = dpc.length; i < j; i++) {
+										m[dpc[i]].state[ t ? 'selected' : 'checked' ] = true;
+									}
+
+									this._data[ t ? 'core' : 'checkbox' ].selected = this._data[ t ? 'core' : 'checkbox' ].selected.concat(dpc);
+								}
+								else {
+									for(i = 0, j = dpc.length; i < j; i++) {
+										if(m[dpc[i]].state[ t ? 'selected' : 'checked' ]) {
+											for(k = 0, l = m[dpc[i]].children_d.length; k < l; k++) {
+												m[m[dpc[i]].children_d[k]].state[ t ? 'selected' : 'checked' ] = true;
+											}
+											this._data[ t ? 'core' : 'checkbox' ].selected = this._data[ t ? 'core' : 'checkbox' ].selected.concat(m[dpc[i]].children_d);
+										}
+									}
+								}
+							}
+
+							if(s.indexOf('up') !== -1) {
+								// apply up
+								for(i = 0, j = p.children_d.length; i < j; i++) {
+									if(!m[p.children_d[i]].children.length) {
+										chd.push(m[p.children_d[i]].parent);
+									}
+								}
+								chd = $.vakata.array_unique(chd);
+								for(k = 0, l = chd.length; k < l; k++) {
+									p = m[chd[k]];
+									while(p && p.id !== $.jstree.root) {
+										c = 0;
+										for(i = 0, j = p.children.length; i < j; i++) {
+											c += m[p.children[i]].state[ t ? 'selected' : 'checked' ];
+										}
+										if(c === j) {
+											p.state[ t ? 'selected' : 'checked' ] = true;
+											this._data[ t ? 'core' : 'checkbox' ].selected.push(p.id);
+											tmp = this.get_node(p, true);
+											if(tmp && tmp.length) {
+												tmp.attr('aria-selected', true).children('.jstree-anchor').addClass( t ? 'jstree-clicked' : 'jstree-checked');
+											}
+										}
+										else {
+											break;
+										}
+										p = this.get_node(p.parent);
+									}
+								}
+							}
+
+							this._data[ t ? 'core' : 'checkbox' ].selected = $.vakata.array_unique(this._data[ t ? 'core' : 'checkbox' ].selected);
+						}, this))
+					.on(this.settings.checkbox.tie_selection ? 'select_node.jstree' : 'check_node.jstree', $.proxy(function (e, data) {
+							var self = this,
+								obj = data.node,
+								m = this._model.data,
+								par = this.get_node(obj.parent),
+								i, j, c, tmp, s = this.settings.checkbox.cascade, t = this.settings.checkbox.tie_selection,
+								sel = {}, cur = this._data[ t ? 'core' : 'checkbox' ].selected;
+
+							for (i = 0, j = cur.length; i < j; i++) {
+								sel[cur[i]] = true;
+							}
+
+							// apply down
+							if(s.indexOf('down') !== -1) {
+								//this._data[ t ? 'core' : 'checkbox' ].selected = $.vakata.array_unique(this._data[ t ? 'core' : 'checkbox' ].selected.concat(obj.children_d));
+								var selectedIds = this._cascade_new_checked_state(obj.id, true);
+								var temp = obj.children_d.concat(obj.id);
+								for (i = 0, j = temp.length; i < j; i++) {
+									if (selectedIds.indexOf(temp[i]) > -1) {
+										sel[temp[i]] = true;
+									}
+									else {
+										delete sel[temp[i]];
+									}
+								}
+							}
+
+							// apply up
+							if(s.indexOf('up') !== -1) {
+								while(par && par.id !== $.jstree.root) {
+									c = 0;
+									for(i = 0, j = par.children.length; i < j; i++) {
+										c += m[par.children[i]].state[ t ? 'selected' : 'checked' ];
+									}
+									if(c === j) {
+										par.state[ t ? 'selected' : 'checked' ] = true;
+										sel[par.id] = true;
+										//this._data[ t ? 'core' : 'checkbox' ].selected.push(par.id);
+										tmp = this.get_node(par, true);
+										if(tmp && tmp.length) {
+											tmp.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked');
+										}
+									}
+									else {
+										break;
+									}
+									par = this.get_node(par.parent);
+								}
+							}
+
+							cur = [];
+							for (i in sel) {
+								if (sel.hasOwnProperty(i)) {
+									cur.push(i);
+								}
+							}
+							this._data[ t ? 'core' : 'checkbox' ].selected = cur;
+						}, this))
+					.on(this.settings.checkbox.tie_selection ? 'deselect_all.jstree' : 'uncheck_all.jstree', $.proxy(function (e, data) {
+							var obj = this.get_node($.jstree.root),
+								m = this._model.data,
+								i, j, tmp;
+							for(i = 0, j = obj.children_d.length; i < j; i++) {
+								tmp = m[obj.children_d[i]];
+								if(tmp && tmp.original && tmp.original.state && tmp.original.state.undetermined) {
+									tmp.original.state.undetermined = false;
+								}
+							}
+						}, this))
+					.on(this.settings.checkbox.tie_selection ? 'deselect_node.jstree' : 'uncheck_node.jstree', $.proxy(function (e, data) {
+							var self = this,
+								obj = data.node,
+								dom = this.get_node(obj, true),
+								i, j, tmp, s = this.settings.checkbox.cascade, t = this.settings.checkbox.tie_selection,
+								cur = this._data[ t ? 'core' : 'checkbox' ].selected, sel = {},
+								stillSelectedIds = [],
+								allIds = obj.children_d.concat(obj.id);
+
+							// apply down
+							if(s.indexOf('down') !== -1) {
+								var selectedIds = this._cascade_new_checked_state(obj.id, false);
+
+								cur = cur.filter(function(id) {
+									return allIds.indexOf(id) === -1 || selectedIds.indexOf(id) > -1;
+								});
+							}
+
+							// only apply up if cascade up is enabled and if this node is not selected
+							// (if all child nodes are disabled and cascade_to_disabled === false then this node will till be selected).
+							if(s.indexOf('up') !== -1 && cur.indexOf(obj.id) === -1) {
+								for(i = 0, j = obj.parents.length; i < j; i++) {
+									tmp = this._model.data[obj.parents[i]];
+									tmp.state[ t ? 'selected' : 'checked' ] = false;
+									if(tmp && tmp.original && tmp.original.state && tmp.original.state.undetermined) {
+										tmp.original.state.undetermined = false;
+									}
+									tmp = this.get_node(obj.parents[i], true);
+									if(tmp && tmp.length) {
+										tmp.attr('aria-selected', false).children('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked');
+									}
+								}
+
+								cur = cur.filter(function(id) {
+									return obj.parents.indexOf(id) === -1;
+								});
+							}
+
+							this._data[ t ? 'core' : 'checkbox' ].selected = cur;
+						}, this));
+			}
+			if(this.settings.checkbox.cascade.indexOf('up') !== -1) {
+				this.element
+					.on('delete_node.jstree', $.proxy(function (e, data) {
+							// apply up (whole handler)
+							var p = this.get_node(data.parent),
+								m = this._model.data,
+								i, j, c, tmp, t = this.settings.checkbox.tie_selection;
+							while(p && p.id !== $.jstree.root && !p.state[ t ? 'selected' : 'checked' ]) {
+								c = 0;
+								for(i = 0, j = p.children.length; i < j; i++) {
+									c += m[p.children[i]].state[ t ? 'selected' : 'checked' ];
+								}
+								if(j > 0 && c === j) {
+									p.state[ t ? 'selected' : 'checked' ] = true;
+									this._data[ t ? 'core' : 'checkbox' ].selected.push(p.id);
+									tmp = this.get_node(p, true);
+									if(tmp && tmp.length) {
+										tmp.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked');
+									}
+								}
+								else {
+									break;
+								}
+								p = this.get_node(p.parent);
+							}
+						}, this))
+					.on('move_node.jstree', $.proxy(function (e, data) {
+							// apply up (whole handler)
+							var is_multi = data.is_multi,
+								old_par = data.old_parent,
+								new_par = this.get_node(data.parent),
+								m = this._model.data,
+								p, c, i, j, tmp, t = this.settings.checkbox.tie_selection;
+							if(!is_multi) {
+								p = this.get_node(old_par);
+								while(p && p.id !== $.jstree.root && !p.state[ t ? 'selected' : 'checked' ]) {
+									c = 0;
+									for(i = 0, j = p.children.length; i < j; i++) {
+										c += m[p.children[i]].state[ t ? 'selected' : 'checked' ];
+									}
+									if(j > 0 && c === j) {
+										p.state[ t ? 'selected' : 'checked' ] = true;
+										this._data[ t ? 'core' : 'checkbox' ].selected.push(p.id);
+										tmp = this.get_node(p, true);
+										if(tmp && tmp.length) {
+											tmp.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked');
+										}
+									}
+									else {
+										break;
+									}
+									p = this.get_node(p.parent);
+								}
+							}
+							p = new_par;
+							while(p && p.id !== $.jstree.root) {
+								c = 0;
+								for(i = 0, j = p.children.length; i < j; i++) {
+									c += m[p.children[i]].state[ t ? 'selected' : 'checked' ];
+								}
+								if(c === j) {
+									if(!p.state[ t ? 'selected' : 'checked' ]) {
+										p.state[ t ? 'selected' : 'checked' ] = true;
+										this._data[ t ? 'core' : 'checkbox' ].selected.push(p.id);
+										tmp = this.get_node(p, true);
+										if(tmp && tmp.length) {
+											tmp.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked');
+										}
+									}
+								}
+								else {
+									if(p.state[ t ? 'selected' : 'checked' ]) {
+										p.state[ t ? 'selected' : 'checked' ] = false;
+										this._data[ t ? 'core' : 'checkbox' ].selected = $.vakata.array_remove_item(this._data[ t ? 'core' : 'checkbox' ].selected, p.id);
+										tmp = this.get_node(p, true);
+										if(tmp && tmp.length) {
+											tmp.attr('aria-selected', false).children('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked');
+										}
+									}
+									else {
+										break;
+									}
+								}
+								p = this.get_node(p.parent);
+							}
+						}, this));
+			}
+		};
+		/**
+		 * get an array of all nodes whose state is "undetermined"
+		 * @name get_undetermined([full])
+		 * @param  {boolean} full: if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned
+		 * @return {Array}
+		 * @plugin checkbox
+		 */
+		this.get_undetermined = function (full) {
+			if (this.settings.checkbox.cascade.indexOf('undetermined') === -1) {
+				return [];
+			}
+			var i, j, k, l, o = {}, m = this._model.data, t = this.settings.checkbox.tie_selection, s = this._data[ t ? 'core' : 'checkbox' ].selected, p = [], tt = this, r = [];
+			for(i = 0, j = s.length; i < j; i++) {
+				if(m[s[i]] && m[s[i]].parents) {
+					for(k = 0, l = m[s[i]].parents.length; k < l; k++) {
+						if(o[m[s[i]].parents[k]] !== undefined) {
+							break;
+						}
+						if(m[s[i]].parents[k] !== $.jstree.root) {
+							o[m[s[i]].parents[k]] = true;
+							p.push(m[s[i]].parents[k]);
+						}
+					}
+				}
+			}
+			// attempt for server side undetermined state
+			this.element.find('.jstree-closed').not(':has(.jstree-children)')
+				.each(function () {
+					var tmp = tt.get_node(this), tmp2;
+					
+					if(!tmp) { return; }
+					
+					if(!tmp.state.loaded) {
+						if(tmp.original && tmp.original.state && tmp.original.state.undetermined && tmp.original.state.undetermined === true) {
+							if(o[tmp.id] === undefined && tmp.id !== $.jstree.root) {
+								o[tmp.id] = true;
+								p.push(tmp.id);
+							}
+							for(k = 0, l = tmp.parents.length; k < l; k++) {
+								if(o[tmp.parents[k]] === undefined && tmp.parents[k] !== $.jstree.root) {
+									o[tmp.parents[k]] = true;
+									p.push(tmp.parents[k]);
+								}
+							}
+						}
+					}
+					else {
+						for(i = 0, j = tmp.children_d.length; i < j; i++) {
+							tmp2 = m[tmp.children_d[i]];
+							if(!tmp2.state.loaded && tmp2.original && tmp2.original.state && tmp2.original.state.undetermined && tmp2.original.state.undetermined === true) {
+								if(o[tmp2.id] === undefined && tmp2.id !== $.jstree.root) {
+									o[tmp2.id] = true;
+									p.push(tmp2.id);
+								}
+								for(k = 0, l = tmp2.parents.length; k < l; k++) {
+									if(o[tmp2.parents[k]] === undefined && tmp2.parents[k] !== $.jstree.root) {
+										o[tmp2.parents[k]] = true;
+										p.push(tmp2.parents[k]);
+									}
+								}
+							}
+						}
+					}
+				});
+			for (i = 0, j = p.length; i < j; i++) {
+				if(!m[p[i]].state[ t ? 'selected' : 'checked' ]) {
+					r.push(full ? m[p[i]] : p[i]);
+				}
+			}
+			return r;
+		};
+		/**
+		 * set the undetermined state where and if necessary. Used internally.
+		 * @private
+		 * @name _undetermined()
+		 * @plugin checkbox
+		 */
+		this._undetermined = function () {
+			if(this.element === null) { return; }
+			var p = this.get_undetermined(false), i, j, s;
+
+			this.element.find('.jstree-undetermined').removeClass('jstree-undetermined');
+			for (i = 0, j = p.length; i < j; i++) {
+				s = this.get_node(p[i], true);
+				if(s && s.length) {
+					s.children('.jstree-anchor').children('.jstree-checkbox').addClass('jstree-undetermined');
+				}
+			}
+		};
+		this.redraw_node = function(obj, deep, is_callback, force_render) {
+			obj = parent.redraw_node.apply(this, arguments);
+			if(obj) {
+				var i, j, tmp = null, icon = null;
+				for(i = 0, j = obj.childNodes.length; i < j; i++) {
+					if(obj.childNodes[i] && obj.childNodes[i].className && obj.childNodes[i].className.indexOf("jstree-anchor") !== -1) {
+						tmp = obj.childNodes[i];
+						break;
+					}
+				}
+				if(tmp) {
+					if(!this.settings.checkbox.tie_selection && this._model.data[obj.id].state.checked) { tmp.className += ' jstree-checked'; }
+					icon = _i.cloneNode(false);
+					if(this._model.data[obj.id].state.checkbox_disabled) { icon.className += ' jstree-checkbox-disabled'; }
+					tmp.insertBefore(icon, tmp.childNodes[0]);
+				}
+			}
+			if(!is_callback && this.settings.checkbox.cascade.indexOf('undetermined') !== -1) {
+				if(this._data.checkbox.uto) { clearTimeout(this._data.checkbox.uto); }
+				this._data.checkbox.uto = setTimeout($.proxy(this._undetermined, this), 50);
+			}
+			return obj;
+		};
+		/**
+		 * show the node checkbox icons
+		 * @name show_checkboxes()
+		 * @plugin checkbox
+		 */
+		this.show_checkboxes = function () { this._data.core.themes.checkboxes = true; this.get_container_ul().removeClass("jstree-no-checkboxes"); };
+		/**
+		 * hide the node checkbox icons
+		 * @name hide_checkboxes()
+		 * @plugin checkbox
+		 */
+		this.hide_checkboxes = function () { this._data.core.themes.checkboxes = false; this.get_container_ul().addClass("jstree-no-checkboxes"); };
+		/**
+		 * toggle the node icons
+		 * @name toggle_checkboxes()
+		 * @plugin checkbox
+		 */
+		this.toggle_checkboxes = function () { if(this._data.core.themes.checkboxes) { this.hide_checkboxes(); } else { this.show_checkboxes(); } };
+		/**
+		 * checks if a node is in an undetermined state
+		 * @name is_undetermined(obj)
+		 * @param  {mixed} obj
+		 * @return {Boolean}
+		 */
+		this.is_undetermined = function (obj) {
+			obj = this.get_node(obj);
+			var s = this.settings.checkbox.cascade, i, j, t = this.settings.checkbox.tie_selection, d = this._data[ t ? 'core' : 'checkbox' ].selected, m = this._model.data;
+			if(!obj || obj.state[ t ? 'selected' : 'checked' ] === true || s.indexOf('undetermined') === -1 || (s.indexOf('down') === -1 && s.indexOf('up') === -1)) {
+				return false;
+			}
+			if(!obj.state.loaded && obj.original.state.undetermined === true) {
+				return true;
+			}
+			for(i = 0, j = obj.children_d.length; i < j; i++) {
+				if($.inArray(obj.children_d[i], d) !== -1 || (!m[obj.children_d[i]].state.loaded && m[obj.children_d[i]].original.state.undetermined)) {
+					return true;
+				}
+			}
+			return false;
+		};
+		/**
+		 * disable a node's checkbox
+		 * @name disable_checkbox(obj)
+		 * @param {mixed} obj an array can be used too
+		 * @trigger disable_checkbox.jstree
+		 * @plugin checkbox
+		 */
+		this.disable_checkbox = function (obj) {
+			var t1, t2, dom;
+			if($.isArray(obj)) {
+				obj = obj.slice();
+				for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+					this.disable_checkbox(obj[t1]);
+				}
+				return true;
+			}
+			obj = this.get_node(obj);
+			if(!obj || obj.id === $.jstree.root) {
+				return false;
+			}
+			dom = this.get_node(obj, true);
+			if(!obj.state.checkbox_disabled) {
+				obj.state.checkbox_disabled = true;
+				if(dom && dom.length) {
+					dom.children('.jstree-anchor').children('.jstree-checkbox').addClass('jstree-checkbox-disabled');
+				}
+				/**
+				 * triggered when an node's checkbox is disabled
+				 * @event
+				 * @name disable_checkbox.jstree
+				 * @param {Object} node
+				 * @plugin checkbox
+				 */
+				this.trigger('disable_checkbox', { 'node' : obj });
+			}
+		};
+		/**
+		 * enable a node's checkbox
+		 * @name disable_checkbox(obj)
+		 * @param {mixed} obj an array can be used too
+		 * @trigger enable_checkbox.jstree
+		 * @plugin checkbox
+		 */
+		this.enable_checkbox = function (obj) {
+			var t1, t2, dom;
+			if($.isArray(obj)) {
+				obj = obj.slice();
+				for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+					this.enable_checkbox(obj[t1]);
+				}
+				return true;
+			}
+			obj = this.get_node(obj);
+			if(!obj || obj.id === $.jstree.root) {
+				return false;
+			}
+			dom = this.get_node(obj, true);
+			if(obj.state.checkbox_disabled) {
+				obj.state.checkbox_disabled = false;
+				if(dom && dom.length) {
+					dom.children('.jstree-anchor').children('.jstree-checkbox').removeClass('jstree-checkbox-disabled');
+				}
+				/**
+				 * triggered when an node's checkbox is enabled
+				 * @event
+				 * @name enable_checkbox.jstree
+				 * @param {Object} node
+				 * @plugin checkbox
+				 */
+				this.trigger('enable_checkbox', { 'node' : obj });
+			}
+		};
+
+		this.activate_node = function (obj, e) {
+			if($(e.target).hasClass('jstree-checkbox-disabled')) {
+				return false;
+			}
+			if(this.settings.checkbox.tie_selection && (this.settings.checkbox.whole_node || $(e.target).hasClass('jstree-checkbox'))) {
+				e.ctrlKey = true;
+			}
+			if(this.settings.checkbox.tie_selection || (!this.settings.checkbox.whole_node && !$(e.target).hasClass('jstree-checkbox'))) {
+				return parent.activate_node.call(this, obj, e);
+			}
+			if(this.is_disabled(obj)) {
+				return false;
+			}
+			if(this.is_checked(obj)) {
+				this.uncheck_node(obj, e);
+			}
+			else {
+				this.check_node(obj, e);
+			}
+			this.trigger('activate_node', { 'node' : this.get_node(obj) });
+		};
+
+		/**
+		 * Cascades checked state to a node and all its descendants. This function does NOT affect hidden and disabled nodes (or their descendants).
+		 * However if these unaffected nodes are already selected their ids will be included in the returned array.
+		 * @private
+		 * @param {string} id the node ID
+		 * @param {bool} checkedState should the nodes be checked or not
+		 * @returns {Array} Array of all node id's (in this tree branch) that are checked.
+		 */
+		this._cascade_new_checked_state = function (id, checkedState) {
+			var self = this;
+			var t = this.settings.checkbox.tie_selection;
+			var node = this._model.data[id];
+			var selectedNodeIds = [];
+			var selectedChildrenIds = [], i, j, selectedChildIds;
+
+			if (
+				(this.settings.checkbox.cascade_to_disabled || !node.state.disabled) &&
+				(this.settings.checkbox.cascade_to_hidden || !node.state.hidden)
+			) {
+				//First try and check/uncheck the children
+				if (node.children) {
+					for (i = 0, j = node.children.length; i < j; i++) {
+						var childId = node.children[i];
+						selectedChildIds = self._cascade_new_checked_state(childId, checkedState);
+						selectedNodeIds = selectedNodeIds.concat(selectedChildIds);
+						if (selectedChildIds.indexOf(childId) > -1) {
+							selectedChildrenIds.push(childId);
+						}
+					}
+				}
+
+				var dom = self.get_node(node, true);
+
+				//A node's state is undetermined if some but not all of it's children are checked/selected .
+				var undetermined = selectedChildrenIds.length > 0 && selectedChildrenIds.length < node.children.length;
+
+				if(node.original && node.original.state && node.original.state.undetermined) {
+					node.original.state.undetermined = undetermined;
+				}
+
+				//If a node is undetermined then remove selected class
+				if (undetermined) {
+					node.state[ t ? 'selected' : 'checked' ] = false;
+					dom.attr('aria-selected', false).children('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked');
+				}
+				//Otherwise, if the checkedState === true (i.e. the node is being checked now) and all of the node's children are checked (if it has any children),
+				//check the node and style it correctly.
+				else if (checkedState && selectedChildrenIds.length === node.children.length) {
+					node.state[ t ? 'selected' : 'checked' ] = checkedState;
+					selectedNodeIds.push(node.id);
+
+					dom.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked');
+				}
+				else {
+					node.state[ t ? 'selected' : 'checked' ] = false;
+					dom.attr('aria-selected', false).children('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked');
+				}
+			}
+			else {
+				selectedChildIds = this.get_checked_descendants(id);
+
+				if (node.state[ t ? 'selected' : 'checked' ]) {
+					selectedChildIds.push(node.id);
+				}
+
+				selectedNodeIds = selectedNodeIds.concat(selectedChildIds);
+			}
+
+			return selectedNodeIds;
+		};
+
+		/**
+		 * Gets ids of nodes selected in branch (of tree) specified by id (does not include the node specified by id)
+		 * @name get_checked_descendants(obj)
+		 * @param {string} id the node ID
+		 * @return {Array} array of IDs
+		 * @plugin checkbox
+		 */
+		this.get_checked_descendants = function (id) {
+			var self = this;
+			var t = self.settings.checkbox.tie_selection;
+			var node = self._model.data[id];
+
+			return node.children_d.filter(function(_id) {
+				return self._model.data[_id].state[ t ? 'selected' : 'checked' ];
+			});
+		};
+
+		/**
+		 * check a node (only if tie_selection in checkbox settings is false, otherwise select_node will be called internally)
+		 * @name check_node(obj)
+		 * @param {mixed} obj an array can be used to check multiple nodes
+		 * @trigger check_node.jstree
+		 * @plugin checkbox
+		 */
+		this.check_node = function (obj, e) {
+			if(this.settings.checkbox.tie_selection) { return this.select_node(obj, false, true, e); }
+			var dom, t1, t2, th;
+			if($.isArray(obj)) {
+				obj = obj.slice();
+				for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+					this.check_node(obj[t1], e);
+				}
+				return true;
+			}
+			obj = this.get_node(obj);
+			if(!obj || obj.id === $.jstree.root) {
+				return false;
+			}
+			dom = this.get_node(obj, true);
+			if(!obj.state.checked) {
+				obj.state.checked = true;
+				this._data.checkbox.selected.push(obj.id);
+				if(dom && dom.length) {
+					dom.children('.jstree-anchor').addClass('jstree-checked');
+				}
+				/**
+				 * triggered when an node is checked (only if tie_selection in checkbox settings is false)
+				 * @event
+				 * @name check_node.jstree
+				 * @param {Object} node
+				 * @param {Array} selected the current selection
+				 * @param {Object} event the event (if any) that triggered this check_node
+				 * @plugin checkbox
+				 */
+				this.trigger('check_node', { 'node' : obj, 'selected' : this._data.checkbox.selected, 'event' : e });
+			}
+		};
+		/**
+		 * uncheck a node (only if tie_selection in checkbox settings is false, otherwise deselect_node will be called internally)
+		 * @name uncheck_node(obj)
+		 * @param {mixed} obj an array can be used to uncheck multiple nodes
+		 * @trigger uncheck_node.jstree
+		 * @plugin checkbox
+		 */
+		this.uncheck_node = function (obj, e) {
+			if(this.settings.checkbox.tie_selection) { return this.deselect_node(obj, false, e); }
+			var t1, t2, dom;
+			if($.isArray(obj)) {
+				obj = obj.slice();
+				for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+					this.uncheck_node(obj[t1], e);
+				}
+				return true;
+			}
+			obj = this.get_node(obj);
+			if(!obj || obj.id === $.jstree.root) {
+				return false;
+			}
+			dom = this.get_node(obj, true);
+			if(obj.state.checked) {
+				obj.state.checked = false;
+				this._data.checkbox.selected = $.vakata.array_remove_item(this._data.checkbox.selected, obj.id);
+				if(dom.length) {
+					dom.children('.jstree-anchor').removeClass('jstree-checked');
+				}
+				/**
+				 * triggered when an node is unchecked (only if tie_selection in checkbox settings is false)
+				 * @event
+				 * @name uncheck_node.jstree
+				 * @param {Object} node
+				 * @param {Array} selected the current selection
+				 * @param {Object} event the event (if any) that triggered this uncheck_node
+				 * @plugin checkbox
+				 */
+				this.trigger('uncheck_node', { 'node' : obj, 'selected' : this._data.checkbox.selected, 'event' : e });
+			}
+		};
+		
+		/**
+		 * checks all nodes in the tree (only if tie_selection in checkbox settings is false, otherwise select_all will be called internally)
+		 * @name check_all()
+		 * @trigger check_all.jstree, changed.jstree
+		 * @plugin checkbox
+		 */
+		this.check_all = function () {
+			if(this.settings.checkbox.tie_selection) { return this.select_all(); }
+			var tmp = this._data.checkbox.selected.concat([]), i, j;
+			this._data.checkbox.selected = this._model.data[$.jstree.root].children_d.concat();
+			for(i = 0, j = this._data.checkbox.selected.length; i < j; i++) {
+				if(this._model.data[this._data.checkbox.selected[i]]) {
+					this._model.data[this._data.checkbox.selected[i]].state.checked = true;
+				}
+			}
+			this.redraw(true);
+			/**
+			 * triggered when all nodes are checked (only if tie_selection in checkbox settings is false)
+			 * @event
+			 * @name check_all.jstree
+			 * @param {Array} selected the current selection
+			 * @plugin checkbox
+			 */
+			this.trigger('check_all', { 'selected' : this._data.checkbox.selected });
+		};
+		/**
+		 * uncheck all checked nodes (only if tie_selection in checkbox settings is false, otherwise deselect_all will be called internally)
+		 * @name uncheck_all()
+		 * @trigger uncheck_all.jstree
+		 * @plugin checkbox
+		 */
+		this.uncheck_all = function () {
+			if(this.settings.checkbox.tie_selection) { return this.deselect_all(); }
+			var tmp = this._data.checkbox.selected.concat([]), i, j;
+			for(i = 0, j = this._data.checkbox.selected.length; i < j; i++) {
+				if(this._model.data[this._data.checkbox.selected[i]]) {
+					this._model.data[this._data.checkbox.selected[i]].state.checked = false;
+				}
+			}
+			this._data.checkbox.selected = [];
+			this.element.find('.jstree-checked').removeClass('jstree-checked');
+			/**
+			 * triggered when all nodes are unchecked (only if tie_selection in checkbox settings is false)
+			 * @event
+			 * @name uncheck_all.jstree
+			 * @param {Object} node the previous selection
+			 * @param {Array} selected the current selection
+			 * @plugin checkbox
+			 */
+			this.trigger('uncheck_all', { 'selected' : this._data.checkbox.selected, 'node' : tmp });
+		};
+		/**
+		 * checks if a node is checked (if tie_selection is on in the settings this function will return the same as is_selected)
+		 * @name is_checked(obj)
+		 * @param  {mixed}  obj
+		 * @return {Boolean}
+		 * @plugin checkbox
+		 */
+		this.is_checked = function (obj) {
+			if(this.settings.checkbox.tie_selection) { return this.is_selected(obj); }
+			obj = this.get_node(obj);
+			if(!obj || obj.id === $.jstree.root) { return false; }
+			return obj.state.checked;
+		};
+		/**
+		 * get an array of all checked nodes (if tie_selection is on in the settings this function will return the same as get_selected)
+		 * @name get_checked([full])
+		 * @param  {mixed}  full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned
+		 * @return {Array}
+		 * @plugin checkbox
+		 */
+		this.get_checked = function (full) {
+			if(this.settings.checkbox.tie_selection) { return this.get_selected(full); }
+			return full ? $.map(this._data.checkbox.selected, $.proxy(function (i) { return this.get_node(i); }, this)) : this._data.checkbox.selected;
+		};
+		/**
+		 * get an array of all top level checked nodes (ignoring children of checked nodes) (if tie_selection is on in the settings this function will return the same as get_top_selected)
+		 * @name get_top_checked([full])
+		 * @param  {mixed}  full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned
+		 * @return {Array}
+		 * @plugin checkbox
+		 */
+		this.get_top_checked = function (full) {
+			if(this.settings.checkbox.tie_selection) { return this.get_top_selected(full); }
+			var tmp = this.get_checked(true),
+				obj = {}, i, j, k, l;
+			for(i = 0, j = tmp.length; i < j; i++) {
+				obj[tmp[i].id] = tmp[i];
+			}
+			for(i = 0, j = tmp.length; i < j; i++) {
+				for(k = 0, l = tmp[i].children_d.length; k < l; k++) {
+					if(obj[tmp[i].children_d[k]]) {
+						delete obj[tmp[i].children_d[k]];
+					}
+				}
+			}
+			tmp = [];
+			for(i in obj) {
+				if(obj.hasOwnProperty(i)) {
+					tmp.push(i);
+				}
+			}
+			return full ? $.map(tmp, $.proxy(function (i) { return this.get_node(i); }, this)) : tmp;
+		};
+		/**
+		 * get an array of all bottom level checked nodes (ignoring selected parents) (if tie_selection is on in the settings this function will return the same as get_bottom_selected)
+		 * @name get_bottom_checked([full])
+		 * @param  {mixed}  full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned
+		 * @return {Array}
+		 * @plugin checkbox
+		 */
+		this.get_bottom_checked = function (full) {
+			if(this.settings.checkbox.tie_selection) { return this.get_bottom_selected(full); }
+			var tmp = this.get_checked(true),
+				obj = [], i, j;
+			for(i = 0, j = tmp.length; i < j; i++) {
+				if(!tmp[i].children.length) {
+					obj.push(tmp[i].id);
+				}
+			}
+			return full ? $.map(obj, $.proxy(function (i) { return this.get_node(i); }, this)) : obj;
+		};
+		this.load_node = function (obj, callback) {
+			var k, l, i, j, c, tmp;
+			if(!$.isArray(obj) && !this.settings.checkbox.tie_selection) {
+				tmp = this.get_node(obj);
+				if(tmp && tmp.state.loaded) {
+					for(k = 0, l = tmp.children_d.length; k < l; k++) {
+						if(this._model.data[tmp.children_d[k]].state.checked) {
+							c = true;
+							this._data.checkbox.selected = $.vakata.array_remove_item(this._data.checkbox.selected, tmp.children_d[k]);
+						}
+					}
+				}
+			}
+			return parent.load_node.apply(this, arguments);
+		};
+		this.get_state = function () {
+			var state = parent.get_state.apply(this, arguments);
+			if(this.settings.checkbox.tie_selection) { return state; }
+			state.checkbox = this._data.checkbox.selected.slice();
+			return state;
+		};
+		this.set_state = function (state, callback) {
+			var res = parent.set_state.apply(this, arguments);
+			if(res && state.checkbox) {
+				if(!this.settings.checkbox.tie_selection) {
+					this.uncheck_all();
+					var _this = this;
+					$.each(state.checkbox, function (i, v) {
+						_this.check_node(v);
+					});
+				}
+				delete state.checkbox;
+				this.set_state(state, callback);
+				return false;
+			}
+			return res;
+		};
+		this.refresh = function (skip_loading, forget_state) {
+			if(!this.settings.checkbox.tie_selection) {
+				this._data.checkbox.selected = [];
+			}
+			return parent.refresh.apply(this, arguments);
+		};
+	};
+
+	// include the checkbox plugin by default
+	// $.jstree.defaults.plugins.push("checkbox");
+
+
+/**
+ * ### Conditionalselect plugin
+ *
+ * This plugin allows defining a callback to allow or deny node selection by user input (activate node method).
+ */
+
+	/**
+	 * a callback (function) which is invoked in the instance's scope and receives two arguments - the node and the event that triggered the `activate_node` call. Returning false prevents working with the node, returning true allows invoking activate_node. Defaults to returning `true`.
+	 * @name $.jstree.defaults.checkbox.visible
+	 * @plugin checkbox
+	 */
+	$.jstree.defaults.conditionalselect = function () { return true; };
+	$.jstree.plugins.conditionalselect = function (options, parent) {
+		// own function
+		this.activate_node = function (obj, e) {
+			if(this.settings.conditionalselect.call(this, this.get_node(obj), e)) {
+				return parent.activate_node.call(this, obj, e);
+			}
+		};
+	};
+
+
+/**
+ * ### Contextmenu plugin
+ *
+ * Shows a context menu when a node is right-clicked.
+ */
+
+	/**
+	 * stores all defaults for the contextmenu plugin
+	 * @name $.jstree.defaults.contextmenu
+	 * @plugin contextmenu
+	 */
+	$.jstree.defaults.contextmenu = {
+		/**
+		 * a boolean indicating if the node should be selected when the context menu is invoked on it. Defaults to `true`.
+		 * @name $.jstree.defaults.contextmenu.select_node
+		 * @plugin contextmenu
+		 */
+		select_node : true,
+		/**
+		 * a boolean indicating if the menu should be shown aligned with the node. Defaults to `true`, otherwise the mouse coordinates are used.
+		 * @name $.jstree.defaults.contextmenu.show_at_node
+		 * @plugin contextmenu
+		 */
+		show_at_node : true,
+		/**
+		 * an object of actions, or a function that accepts a node and a callback function and calls the callback function with an object of actions available for that node (you can also return the items too).
+		 *
+		 * Each action consists of a key (a unique name) and a value which is an object with the following properties (only label and action are required). Once a menu item is activated the `action` function will be invoked with an object containing the following keys: item - the contextmenu item definition as seen below, reference - the DOM node that was used (the tree node), element - the contextmenu DOM element, position - an object with x/y properties indicating the position of the menu.
+		 *
+		 * * `separator_before` - a boolean indicating if there should be a separator before this item
+		 * * `separator_after` - a boolean indicating if there should be a separator after this item
+		 * * `_disabled` - a boolean indicating if this action should be disabled
+		 * * `label` - a string - the name of the action (could be a function returning a string)
+		 * * `title` - a string - an optional tooltip for the item
+		 * * `action` - a function to be executed if this item is chosen, the function will receive 
+		 * * `icon` - a string, can be a path to an icon or a className, if using an image that is in the current directory use a `./` prefix, otherwise it will be detected as a class
+		 * * `shortcut` - keyCode which will trigger the action if the menu is open (for example `113` for rename, which equals F2)
+		 * * `shortcut_label` - shortcut label (like for example `F2` for rename)
+		 * * `submenu` - an object with the same structure as $.jstree.defaults.contextmenu.items which can be used to create a submenu - each key will be rendered as a separate option in a submenu that will appear once the current item is hovered
+		 *
+		 * @name $.jstree.defaults.contextmenu.items
+		 * @plugin contextmenu
+		 */
+		items : function (o, cb) { // Could be an object directly
+			return {
+				"create" : {
+					"separator_before"	: false,
+					"separator_after"	: true,
+					"_disabled"			: false, //(this.check("create_node", data.reference, {}, "last")),
+					"label"				: "Create",
+					"action"			: function (data) {
+						var inst = $.jstree.reference(data.reference),
+							obj = inst.get_node(data.reference);
+						inst.create_node(obj, {}, "last", function (new_node) {
+							try {
+								inst.edit(new_node);
+							} catch (ex) {
+								setTimeout(function () { inst.edit(new_node); },0);
+							}
+						});
+					}
+				},
+				"rename" : {
+					"separator_before"	: false,
+					"separator_after"	: false,
+					"_disabled"			: false, //(this.check("rename_node", data.reference, this.get_parent(data.reference), "")),
+					"label"				: "Rename",
+					/*!
+					"shortcut"			: 113,
+					"shortcut_label"	: 'F2',
+					"icon"				: "glyphicon glyphicon-leaf",
+					*/
+					"action"			: function (data) {
+						var inst = $.jstree.reference(data.reference),
+							obj = inst.get_node(data.reference);
+						inst.edit(obj);
+					}
+				},
+				"remove" : {
+					"separator_before"	: false,
+					"icon"				: false,
+					"separator_after"	: false,
+					"_disabled"			: false, //(this.check("delete_node", data.reference, this.get_parent(data.reference), "")),
+					"label"				: "Delete",
+					"action"			: function (data) {
+						var inst = $.jstree.reference(data.reference),
+							obj = inst.get_node(data.reference);
+						if(inst.is_selected(obj)) {
+							inst.delete_node(inst.get_selected());
+						}
+						else {
+							inst.delete_node(obj);
+						}
+					}
+				},
+				"ccp" : {
+					"separator_before"	: true,
+					"icon"				: false,
+					"separator_after"	: false,
+					"label"				: "Edit",
+					"action"			: false,
+					"submenu" : {
+						"cut" : {
+							"separator_before"	: false,
+							"separator_after"	: false,
+							"label"				: "Cut",
+							"action"			: function (data) {
+								var inst = $.jstree.reference(data.reference),
+									obj = inst.get_node(data.reference);
+								if(inst.is_selected(obj)) {
+									inst.cut(inst.get_top_selected());
+								}
+								else {
+									inst.cut(obj);
+								}
+							}
+						},
+						"copy" : {
+							"separator_before"	: false,
+							"icon"				: false,
+							"separator_after"	: false,
+							"label"				: "Copy",
+							"action"			: function (data) {
+								var inst = $.jstree.reference(data.reference),
+									obj = inst.get_node(data.reference);
+								if(inst.is_selected(obj)) {
+									inst.copy(inst.get_top_selected());
+								}
+								else {
+									inst.copy(obj);
+								}
+							}
+						},
+						"paste" : {
+							"separator_before"	: false,
+							"icon"				: false,
+							"_disabled"			: function (data) {
+								return !$.jstree.reference(data.reference).can_paste();
+							},
+							"separator_after"	: false,
+							"label"				: "Paste",
+							"action"			: function (data) {
+								var inst = $.jstree.reference(data.reference),
+									obj = inst.get_node(data.reference);
+								inst.paste(obj);
+							}
+						}
+					}
+				}
+			};
+		}
+	};
+
+	$.jstree.plugins.contextmenu = function (options, parent) {
+		this.bind = function () {
+			parent.bind.call(this);
+
+			var last_ts = 0, cto = null, ex, ey;
+			this.element
+				.on("init.jstree loading.jstree ready.jstree", $.proxy(function () {
+						this.get_container_ul().addClass('jstree-contextmenu');
+					}, this))
+				.on("contextmenu.jstree", ".jstree-anchor", $.proxy(function (e, data) {
+						if (e.target.tagName.toLowerCase() === 'input') {
+							return;
+						}
+						e.preventDefault();
+						last_ts = e.ctrlKey ? +new Date() : 0;
+						if(data || cto) {
+							last_ts = (+new Date()) + 10000;
+						}
+						if(cto) {
+							clearTimeout(cto);
+						}
+						if(!this.is_loading(e.currentTarget)) {
+							this.show_contextmenu(e.currentTarget, e.pageX, e.pageY, e);
+						}
+					}, this))
+				.on("click.jstree", ".jstree-anchor", $.proxy(function (e) {
+						if(this._data.contextmenu.visible && (!last_ts || (+new Date()) - last_ts > 250)) { // work around safari & macOS ctrl+click
+							$.vakata.context.hide();
+						}
+						last_ts = 0;
+					}, this))
+				.on("touchstart.jstree", ".jstree-anchor", function (e) {
+						if(!e.originalEvent || !e.originalEvent.changedTouches || !e.originalEvent.changedTouches[0]) {
+							return;
+						}
+						ex = e.originalEvent.changedTouches[0].clientX;
+						ey = e.originalEvent.changedTouches[0].clientY;
+						cto = setTimeout(function () {
+							$(e.currentTarget).trigger('contextmenu', true);
+						}, 750);
+					})
+				.on('touchmove.vakata.jstree', function (e) {
+						if(cto && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0] && (Math.abs(ex - e.originalEvent.changedTouches[0].clientX) > 10 || Math.abs(ey - e.originalEvent.changedTouches[0].clientY) > 10)) {
+							clearTimeout(cto);
+							$.vakata.context.hide();
+						}
+					})
+				.on('touchend.vakata.jstree', function (e) {
+						if(cto) {
+							clearTimeout(cto);
+						}
+					});
+
+			/*!
+			if(!('oncontextmenu' in document.body) && ('ontouchstart' in document.body)) {
+				var el = null, tm = null;
+				this.element
+					.on("touchstart", ".jstree-anchor", function (e) {
+						el = e.currentTarget;
+						tm = +new Date();
+						$(document).one("touchend", function (e) {
+							e.target = document.elementFromPoint(e.originalEvent.targetTouches[0].pageX - window.pageXOffset, e.originalEvent.targetTouches[0].pageY - window.pageYOffset);
+							e.currentTarget = e.target;
+							tm = ((+(new Date())) - tm);
+							if(e.target === el && tm > 600 && tm < 1000) {
+								e.preventDefault();
+								$(el).trigger('contextmenu', e);
+							}
+							el = null;
+							tm = null;
+						});
+					});
+			}
+			*/
+			$(document).on("context_hide.vakata.jstree", $.proxy(function (e, data) {
+				this._data.contextmenu.visible = false;
+				$(data.reference).removeClass('jstree-context');
+			}, this));
+		};
+		this.teardown = function () {
+			if(this._data.contextmenu.visible) {
+				$.vakata.context.hide();
+			}
+			parent.teardown.call(this);
+		};
+
+		/**
+		 * prepare and show the context menu for a node
+		 * @name show_contextmenu(obj [, x, y])
+		 * @param {mixed} obj the node
+		 * @param {Number} x the x-coordinate relative to the document to show the menu at
+		 * @param {Number} y the y-coordinate relative to the document to show the menu at
+		 * @param {Object} e the event if available that triggered the contextmenu
+		 * @plugin contextmenu
+		 * @trigger show_contextmenu.jstree
+		 */
+		this.show_contextmenu = function (obj, x, y, e) {
+			obj = this.get_node(obj);
+			if(!obj || obj.id === $.jstree.root) { return false; }
+			var s = this.settings.contextmenu,
+				d = this.get_node(obj, true),
+				a = d.children(".jstree-anchor"),
+				o = false,
+				i = false;
+			if(s.show_at_node || x === undefined || y === undefined) {
+				o = a.offset();
+				x = o.left;
+				y = o.top + this._data.core.li_height;
+			}
+			if(this.settings.contextmenu.select_node && !this.is_selected(obj)) {
+				this.activate_node(obj, e);
+			}
+
+			i = s.items;
+			if($.isFunction(i)) {
+				i = i.call(this, obj, $.proxy(function (i) {
+					this._show_contextmenu(obj, x, y, i);
+				}, this));
+			}
+			if($.isPlainObject(i)) {
+				this._show_contextmenu(obj, x, y, i);
+			}
+		};
+		/**
+		 * show the prepared context menu for a node
+		 * @name _show_contextmenu(obj, x, y, i)
+		 * @param {mixed} obj the node
+		 * @param {Number} x the x-coordinate relative to the document to show the menu at
+		 * @param {Number} y the y-coordinate relative to the document to show the menu at
+		 * @param {Number} i the object of items to show
+		 * @plugin contextmenu
+		 * @trigger show_contextmenu.jstree
+		 * @private
+		 */
+		this._show_contextmenu = function (obj, x, y, i) {
+			var d = this.get_node(obj, true),
+				a = d.children(".jstree-anchor");
+			$(document).one("context_show.vakata.jstree", $.proxy(function (e, data) {
+				var cls = 'jstree-contextmenu jstree-' + this.get_theme() + '-contextmenu';
+				$(data.element).addClass(cls);
+				a.addClass('jstree-context');
+			}, this));
+			this._data.contextmenu.visible = true;
+			$.vakata.context.show(a, { 'x' : x, 'y' : y }, i);
+			/**
+			 * triggered when the contextmenu is shown for a node
+			 * @event
+			 * @name show_contextmenu.jstree
+			 * @param {Object} node the node
+			 * @param {Number} x the x-coordinate of the menu relative to the document
+			 * @param {Number} y the y-coordinate of the menu relative to the document
+			 * @plugin contextmenu
+			 */
+			this.trigger('show_contextmenu', { "node" : obj, "x" : x, "y" : y });
+		};
+	};
+
+	// contextmenu helper
+	(function ($) {
+		var right_to_left = false,
+			vakata_context = {
+				element		: false,
+				reference	: false,
+				position_x	: 0,
+				position_y	: 0,
+				items		: [],
+				html		: "",
+				is_visible	: false
+			};
+
+		$.vakata.context = {
+			settings : {
+				hide_onmouseleave	: 0,
+				icons				: true
+			},
+			_trigger : function (event_name) {
+				$(document).triggerHandler("context_" + event_name + ".vakata", {
+					"reference"	: vakata_context.reference,
+					"element"	: vakata_context.element,
+					"position"	: {
+						"x" : vakata_context.position_x,
+						"y" : vakata_context.position_y
+					}
+				});
+			},
+			_execute : function (i) {
+				i = vakata_context.items[i];
+				return i && (!i._disabled || ($.isFunction(i._disabled) && !i._disabled({ "item" : i, "reference" : vakata_context.reference, "element" : vakata_context.element }))) && i.action ? i.action.call(null, {
+							"item"		: i,
+							"reference"	: vakata_context.reference,
+							"element"	: vakata_context.element,
+							"position"	: {
+								"x" : vakata_context.position_x,
+								"y" : vakata_context.position_y
+							}
+						}) : false;
+			},
+			_parse : function (o, is_callback) {
+				if(!o) { return false; }
+				if(!is_callback) {
+					vakata_context.html		= "";
+					vakata_context.items	= [];
+				}
+				var str = "",
+					sep = false,
+					tmp;
+
+				if(is_callback) { str += "<"+"ul>"; }
+				$.each(o, function (i, val) {
+					if(!val) { return true; }
+					vakata_context.items.push(val);
+					if(!sep && val.separator_before) {
+						str += "<"+"li class='vakata-context-separator'><"+"a href='#' " + ($.vakata.context.settings.icons ? '' : 'style="margin-left:0px;"') + ">&#160;<"+"/a><"+"/li>";
+					}
+					sep = false;
+					str += "<"+"li class='" + (val._class || "") + (val._disabled === true || ($.isFunction(val._disabled) && val._disabled({ "item" : val, "reference" : vakata_context.reference, "element" : vakata_context.element })) ? " vakata-contextmenu-disabled " : "") + "' "+(val.shortcut?" data-shortcut='"+val.shortcut+"' ":'')+">";
+					str += "<"+"a href='#' rel='" + (vakata_context.items.length - 1) + "' " + (val.title ? "title='" + val.title + "'" : "") + ">";
+					if($.vakata.context.settings.icons) {
+						str += "<"+"i ";
+						if(val.icon) {
+							if(val.icon.indexOf("/") !== -1 || val.icon.indexOf(".") !== -1) { str += " style='background:url(\"" + val.icon + "\") center center no-repeat' "; }
+							else { str += " class='" + val.icon + "' "; }
+						}
+						str += "><"+"/i><"+"span class='vakata-contextmenu-sep'>&#160;<"+"/span>";
+					}
+					str += ($.isFunction(val.label) ? val.label({ "item" : i, "reference" : vakata_context.reference, "element" : vakata_context.element }) : val.label) + (val.shortcut?' <span class="vakata-contextmenu-shortcut vakata-contextmenu-shortcut-'+val.shortcut+'">'+ (val.shortcut_label || '') +'</span>':'') + "<"+"/a>";
+					if(val.submenu) {
+						tmp = $.vakata.context._parse(val.submenu, true);
+						if(tmp) { str += tmp; }
+					}
+					str += "<"+"/li>";
+					if(val.separator_after) {
+						str += "<"+"li class='vakata-context-separator'><"+"a href='#' " + ($.vakata.context.settings.icons ? '' : 'style="margin-left:0px;"') + ">&#160;<"+"/a><"+"/li>";
+						sep = true;
+					}
+				});
+				str  = str.replace(/<li class\='vakata-context-separator'\><\/li\>$/,"");
+				if(is_callback) { str += "</ul>"; }
+				/**
+				 * triggered on the document when the contextmenu is parsed (HTML is built)
+				 * @event
+				 * @plugin contextmenu
+				 * @name context_parse.vakata
+				 * @param {jQuery} reference the element that was right clicked
+				 * @param {jQuery} element the DOM element of the menu itself
+				 * @param {Object} position the x & y coordinates of the menu
+				 */
+				if(!is_callback) { vakata_context.html = str; $.vakata.context._trigger("parse"); }
+				return str.length > 10 ? str : false;
+			},
+			_show_submenu : function (o) {
+				o = $(o);
+				if(!o.length || !o.children("ul").length) { return; }
+				var e = o.children("ul"),
+					xl = o.offset().left,
+					x = xl + o.outerWidth(),
+					y = o.offset().top,
+					w = e.width(),
+					h = e.height(),
+					dw = $(window).width() + $(window).scrollLeft(),
+					dh = $(window).height() + $(window).scrollTop();
+				// може да се спести е една проверка - дали няма някой от класовете вече нагоре
+				if(right_to_left) {
+					o[x - (w + 10 + o.outerWidth()) < 0 ? "addClass" : "removeClass"]("vakata-context-left");
+				}
+				else {
+					o[x + w > dw  && xl > dw - x ? "addClass" : "removeClass"]("vakata-context-right");
+				}
+				if(y + h + 10 > dh) {
+					e.css("bottom","-1px");
+				}
+
+				//if does not fit - stick it to the side
+				if (o.hasClass('vakata-context-right')) {
+					if (xl < w) {
+						e.css("margin-right", xl - w);
+					}
+				} else {
+					if (dw - x < w) {
+						e.css("margin-left", dw - x - w);
+					}
+				}
+
+				e.show();
+			},
+			show : function (reference, position, data) {
+				var o, e, x, y, w, h, dw, dh, cond = true;
+				if(vakata_context.element && vakata_context.element.length) {
+					vakata_context.element.width('');
+				}
+				switch(cond) {
+					case (!position && !reference):
+						return false;
+					case (!!position && !!reference):
+						vakata_context.reference	= reference;
+						vakata_context.position_x	= position.x;
+						vakata_context.position_y	= position.y;
+						break;
+					case (!position && !!reference):
+						vakata_context.reference	= reference;
+						o = reference.offset();
+						vakata_context.position_x	= o.left + reference.outerHeight();
+						vakata_context.position_y	= o.top;
+						break;
+					case (!!position && !reference):
+						vakata_context.position_x	= position.x;
+						vakata_context.position_y	= position.y;
+						break;
+				}
+				if(!!reference && !data && $(reference).data('vakata_contextmenu')) {
+					data = $(reference).data('vakata_contextmenu');
+				}
+				if($.vakata.context._parse(data)) {
+					vakata_context.element.html(vakata_context.html);
+				}
+				if(vakata_context.items.length) {
+					vakata_context.element.appendTo("body");
+					e = vakata_context.element;
+					x = vakata_context.position_x;
+					y = vakata_context.position_y;
+					w = e.width();
+					h = e.height();
+					dw = $(window).width() + $(window).scrollLeft();
+					dh = $(window).height() + $(window).scrollTop();
+					if(right_to_left) {
+						x -= (e.outerWidth() - $(reference).outerWidth());
+						if(x < $(window).scrollLeft() + 20) {
+							x = $(window).scrollLeft() + 20;
+						}
+					}
+					if(x + w + 20 > dw) {
+						x = dw - (w + 20);
+					}
+					if(y + h + 20 > dh) {
+						y = dh - (h + 20);
+					}
+
+					vakata_context.element
+						.css({ "left" : x, "top" : y })
+						.show()
+						.find('a').first().focus().parent().addClass("vakata-context-hover");
+					vakata_context.is_visible = true;
+					/**
+					 * triggered on the document when the contextmenu is shown
+					 * @event
+					 * @plugin contextmenu
+					 * @name context_show.vakata
+					 * @param {jQuery} reference the element that was right clicked
+					 * @param {jQuery} element the DOM element of the menu itself
+					 * @param {Object} position the x & y coordinates of the menu
+					 */
+					$.vakata.context._trigger("show");
+				}
+			},
+			hide : function () {
+				if(vakata_context.is_visible) {
+					vakata_context.element.hide().find("ul").hide().end().find(':focus').blur().end().detach();
+					vakata_context.is_visible = false;
+					/**
+					 * triggered on the document when the contextmenu is hidden
+					 * @event
+					 * @plugin contextmenu
+					 * @name context_hide.vakata
+					 * @param {jQuery} reference the element that was right clicked
+					 * @param {jQuery} element the DOM element of the menu itself
+					 * @param {Object} position the x & y coordinates of the menu
+					 */
+					$.vakata.context._trigger("hide");
+				}
+			}
+		};
+		$(function () {
+			right_to_left = $("body").css("direction") === "rtl";
+			var to = false;
+
+			vakata_context.element = $("<ul class='vakata-context'></ul>");
+			vakata_context.element
+				.on("mouseenter", "li", function (e) {
+					e.stopImmediatePropagation();
+
+					if($.contains(this, e.relatedTarget)) {
+						// премахнато заради delegate mouseleave по-долу
+						// $(this).find(".vakata-context-hover").removeClass("vakata-context-hover");
+						return;
+					}
+
+					if(to) { clearTimeout(to); }
+					vakata_context.element.find(".vakata-context-hover").removeClass("vakata-context-hover").end();
+
+					$(this)
+						.siblings().find("ul").hide().end().end()
+						.parentsUntil(".vakata-context", "li").addBack().addClass("vakata-context-hover");
+					$.vakata.context._show_submenu(this);
+				})
+				// тестово - дали не натоварва?
+				.on("mouseleave", "li", function (e) {
+					if($.contains(this, e.relatedTarget)) { return; }
+					$(this).find(".vakata-context-hover").addBack().removeClass("vakata-context-hover");
+				})
+				.on("mouseleave", function (e) {
+					$(this).find(".vakata-context-hover").removeClass("vakata-context-hover");
+					if($.vakata.context.settings.hide_onmouseleave) {
+						to = setTimeout(
+							(function (t) {
+								return function () { $.vakata.context.hide(); };
+							}(this)), $.vakata.context.settings.hide_onmouseleave);
+					}
+				})
+				.on("click", "a", function (e) {
+					e.preventDefault();
+				//})
+				//.on("mouseup", "a", function (e) {
+					if(!$(this).blur().parent().hasClass("vakata-context-disabled") && $.vakata.context._execute($(this).attr("rel")) !== false) {
+						$.vakata.context.hide();
+					}
+				})
+				.on('keydown', 'a', function (e) {
+						var o = null;
+						switch(e.which) {
+							case 13:
+							case 32:
+								e.type = "click";
+								e.preventDefault();
+								$(e.currentTarget).trigger(e);
+								break;
+							case 37:
+								if(vakata_context.is_visible) {
+									vakata_context.element.find(".vakata-context-hover").last().closest("li").first().find("ul").hide().find(".vakata-context-hover").removeClass("vakata-context-hover").end().end().children('a').focus();
+									e.stopImmediatePropagation();
+									e.preventDefault();
+								}
+								break;
+							case 38:
+								if(vakata_context.is_visible) {
+									o = vakata_context.element.find("ul:visible").addBack().last().children(".vakata-context-hover").removeClass("vakata-context-hover").prevAll("li:not(.vakata-context-separator)").first();
+									if(!o.length) { o = vakata_context.element.find("ul:visible").addBack().last().children("li:not(.vakata-context-separator)").last(); }
+									o.addClass("vakata-context-hover").children('a').focus();
+									e.stopImmediatePropagation();
+									e.preventDefault();
+								}
+								break;
+							case 39:
+								if(vakata_context.is_visible) {
+									vakata_context.element.find(".vakata-context-hover").last().children("ul").show().children("li:not(.vakata-context-separator)").removeClass("vakata-context-hover").first().addClass("vakata-context-hover").children('a').focus();
+									e.stopImmediatePropagation();
+									e.preventDefault();
+								}
+								break;
+							case 40:
+								if(vakata_context.is_visible) {
+									o = vakata_context.element.find("ul:visible").addBack().last().children(".vakata-context-hover").removeClass("vakata-context-hover").nextAll("li:not(.vakata-context-separator)").first();
+									if(!o.length) { o = vakata_context.element.find("ul:visible").addBack().last().children("li:not(.vakata-context-separator)").first(); }
+									o.addClass("vakata-context-hover").children('a').focus();
+									e.stopImmediatePropagation();
+									e.preventDefault();
+								}
+								break;
+							case 27:
+								$.vakata.context.hide();
+								e.preventDefault();
+								break;
+							default:
+								//console.log(e.which);
+								break;
+						}
+					})
+				.on('keydown', function (e) {
+					e.preventDefault();
+					var a = vakata_context.element.find('.vakata-contextmenu-shortcut-' + e.which).parent();
+					if(a.parent().not('.vakata-context-disabled')) {
+						a.click();
+					}
+				});
+
+			$(document)
+				.on("mousedown.vakata.jstree", function (e) {
+					if(vakata_context.is_visible && vakata_context.element[0] !== e.target  && !$.contains(vakata_context.element[0], e.target)) {
+						$.vakata.context.hide();
+					}
+				})
+				.on("context_show.vakata.jstree", function (e, data) {
+					vakata_context.element.find("li:has(ul)").children("a").addClass("vakata-context-parent");
+					if(right_to_left) {
+						vakata_context.element.addClass("vakata-context-rtl").css("direction", "rtl");
+					}
+					// also apply a RTL class?
+					vakata_context.element.find("ul").hide().end();
+				});
+		});
+	}($));
+	// $.jstree.defaults.plugins.push("contextmenu");
+
+
+/**
+ * ### Drag'n'drop plugin
+ *
+ * Enables dragging and dropping of nodes in the tree, resulting in a move or copy operations.
+ */
+
+	/**
+	 * stores all defaults for the drag'n'drop plugin
+	 * @name $.jstree.defaults.dnd
+	 * @plugin dnd
+	 */
+	$.jstree.defaults.dnd = {
+		/**
+		 * a boolean indicating if a copy should be possible while dragging (by pressint the meta key or Ctrl). Defaults to `true`.
+		 * @name $.jstree.defaults.dnd.copy
+		 * @plugin dnd
+		 */
+		copy : true,
+		/**
+		 * a number indicating how long a node should remain hovered while dragging to be opened. Defaults to `500`.
+		 * @name $.jstree.defaults.dnd.open_timeout
+		 * @plugin dnd
+		 */
+		open_timeout : 500,
+		/**
+		 * a function invoked each time a node is about to be dragged, invoked in the tree's scope and receives the nodes about to be dragged as an argument (array) and the event that started the drag - return `false` to prevent dragging
+		 * @name $.jstree.defaults.dnd.is_draggable
+		 * @plugin dnd
+		 */
+		is_draggable : true,
+		/**
+		 * a boolean indicating if checks should constantly be made while the user is dragging the node (as opposed to checking only on drop), default is `true`
+		 * @name $.jstree.defaults.dnd.check_while_dragging
+		 * @plugin dnd
+		 */
+		check_while_dragging : true,
+		/**
+		 * a boolean indicating if nodes from this tree should only be copied with dnd (as opposed to moved), default is `false`
+		 * @name $.jstree.defaults.dnd.always_copy
+		 * @plugin dnd
+		 */
+		always_copy : false,
+		/**
+		 * when dropping a node "inside", this setting indicates the position the node should go to - it can be an integer or a string: "first" (same as 0) or "last", default is `0`
+		 * @name $.jstree.defaults.dnd.inside_pos
+		 * @plugin dnd
+		 */
+		inside_pos : 0,
+		/**
+		 * when starting the drag on a node that is selected this setting controls if all selected nodes are dragged or only the single node, default is `true`, which means all selected nodes are dragged when the drag is started on a selected node
+		 * @name $.jstree.defaults.dnd.drag_selection
+		 * @plugin dnd
+		 */
+		drag_selection : true,
+		/**
+		 * controls whether dnd works on touch devices. If left as boolean true dnd will work the same as in desktop browsers, which in some cases may impair scrolling. If set to boolean false dnd will not work on touch devices. There is a special third option - string "selected" which means only selected nodes can be dragged on touch devices.
+		 * @name $.jstree.defaults.dnd.touch
+		 * @plugin dnd
+		 */
+		touch : true,
+		/**
+		 * controls whether items can be dropped anywhere on the node, not just on the anchor, by default only the node anchor is a valid drop target. Works best with the wholerow plugin. If enabled on mobile depending on the interface it might be hard for the user to cancel the drop, since the whole tree container will be a valid drop target.
+		 * @name $.jstree.defaults.dnd.large_drop_target
+		 * @plugin dnd
+		 */
+		large_drop_target : false,
+		/**
+		 * controls whether a drag can be initiated from any part of the node and not just the text/icon part, works best with the wholerow plugin. Keep in mind it can cause problems with tree scrolling on mobile depending on the interface - in that case set the touch option to "selected".
+		 * @name $.jstree.defaults.dnd.large_drag_target
+		 * @plugin dnd
+		 */
+		large_drag_target : false,
+		/**
+		 * controls whether use HTML5 dnd api instead of classical. That will allow better integration of dnd events with other HTML5 controls.
+		 * @reference http://caniuse.com/#feat=dragndrop
+		 * @name $.jstree.defaults.dnd.use_html5
+		 * @plugin dnd
+		 */
+		use_html5: false
+	};
+	var drg, elm;
+	// TODO: now check works by checking for each node individually, how about max_children, unique, etc?
+	$.jstree.plugins.dnd = function (options, parent) {
+		this.init = function (el, options) {
+			parent.init.call(this, el, options);
+			this.settings.dnd.use_html5 = this.settings.dnd.use_html5 && ('draggable' in document.createElement('span'));
+		};
+		this.bind = function () {
+			parent.bind.call(this);
+
+			this.element
+				.on(this.settings.dnd.use_html5 ? 'dragstart.jstree' : 'mousedown.jstree touchstart.jstree', this.settings.dnd.large_drag_target ? '.jstree-node' : '.jstree-anchor', $.proxy(function (e) {
+						if(this.settings.dnd.large_drag_target && $(e.target).closest('.jstree-node')[0] !== e.currentTarget) {
+							return true;
+						}
+						if(e.type === "touchstart" && (!this.settings.dnd.touch || (this.settings.dnd.touch === 'selected' && !$(e.currentTarget).closest('.jstree-node').children('.jstree-anchor').hasClass('jstree-clicked')))) {
+							return true;
+						}
+						var obj = this.get_node(e.target),
+							mlt = this.is_selected(obj) && this.settings.dnd.drag_selection ? this.get_top_selected().length : 1,
+							txt = (mlt > 1 ? mlt + ' ' + this.get_string('nodes') : this.get_text(e.currentTarget));
+						if(this.settings.core.force_text) {
+							txt = $.vakata.html.escape(txt);
+						}
+						if(obj && obj.id && obj.id !== $.jstree.root && (e.which === 1 || e.type === "touchstart" || e.type === "dragstart") &&
+							(this.settings.dnd.is_draggable === true || ($.isFunction(this.settings.dnd.is_draggable) && this.settings.dnd.is_draggable.call(this, (mlt > 1 ? this.get_top_selected(true) : [obj]), e)))
+						) {
+							drg = { 'jstree' : true, 'origin' : this, 'obj' : this.get_node(obj,true), 'nodes' : mlt > 1 ? this.get_top_selected() : [obj.id] };
+							elm = e.currentTarget;
+							if (this.settings.dnd.use_html5) {
+								$.vakata.dnd._trigger('start', e, { 'helper': $(), 'element': elm, 'data': drg });
+							} else {
+								this.element.trigger('mousedown.jstree');
+								return $.vakata.dnd.start(e, drg, '<div id="jstree-dnd" class="jstree-' + this.get_theme() + ' jstree-' + this.get_theme() + '-' + this.get_theme_variant() + ' ' + ( this.settings.core.themes.responsive ? ' jstree-dnd-responsive' : '' ) + '"><i class="jstree-icon jstree-er"></i>' + txt + '<ins class="jstree-copy" style="display:none;">+</ins></div>');
+							}
+						}
+					}, this));
+			if (this.settings.dnd.use_html5) {
+				this.element
+					.on('dragover.jstree', function (e) {
+							e.preventDefault();
+							$.vakata.dnd._trigger('move', e, { 'helper': $(), 'element': elm, 'data': drg });
+							return false;
+						})
+					//.on('dragenter.jstree', this.settings.dnd.large_drop_target ? '.jstree-node' : '.jstree-anchor', $.proxy(function (e) {
+					//		e.preventDefault();
+					//		$.vakata.dnd._trigger('move', e, { 'helper': $(), 'element': elm, 'data': drg });
+					//		return false;
+					//	}, this))
+					.on('drop.jstree', $.proxy(function (e) {
+							e.preventDefault();
+							$.vakata.dnd._trigger('stop', e, { 'helper': $(), 'element': elm, 'data': drg });
+							return false;
+						}, this));
+			}
+		};
+		this.redraw_node = function(obj, deep, callback, force_render) {
+			obj = parent.redraw_node.apply(this, arguments);
+			if (obj && this.settings.dnd.use_html5) {
+				if (this.settings.dnd.large_drag_target) {
+					obj.setAttribute('draggable', true);
+				} else {
+					var i, j, tmp = null;
+					for(i = 0, j = obj.childNodes.length; i < j; i++) {
+						if(obj.childNodes[i] && obj.childNodes[i].className && obj.childNodes[i].className.indexOf("jstree-anchor") !== -1) {
+							tmp = obj.childNodes[i];
+							break;
+						}
+					}
+					if(tmp) {
+						tmp.setAttribute('draggable', true);
+					}
+				}
+			}
+			return obj;
+		};
+	};
+
+	$(function() {
+		// bind only once for all instances
+		var lastmv = false,
+			laster = false,
+			lastev = false,
+			opento = false,
+			marker = $('<div id="jstree-marker">&#160;</div>').hide(); //.appendTo('body');
+
+		$(document)
+			.on('dnd_start.vakata.jstree', function (e, data) {
+				lastmv = false;
+				lastev = false;
+				if(!data || !data.data || !data.data.jstree) { return; }
+				marker.appendTo('body'); //.show();
+			})
+			.on('dnd_move.vakata.jstree', function (e, data) {
+				var isDifferentNode = data.event.target !== lastev.target;
+				if(opento) {
+					if (!data.event || data.event.type !== 'dragover' || isDifferentNode) {
+						clearTimeout(opento);
+					}
+				}
+				if(!data || !data.data || !data.data.jstree) { return; }
+
+				// if we are hovering the marker image do nothing (can happen on "inside" drags)
+				if(data.event.target.id && data.event.target.id === 'jstree-marker') {
+					return;
+				}
+				lastev = data.event;
+
+				var ins = $.jstree.reference(data.event.target),
+					ref = false,
+					off = false,
+					rel = false,
+					tmp, l, t, h, p, i, o, ok, t1, t2, op, ps, pr, ip, tm, is_copy, pn;
+				// if we are over an instance
+				if(ins && ins._data && ins._data.dnd) {
+					marker.attr('class', 'jstree-' + ins.get_theme() + ( ins.settings.core.themes.responsive ? ' jstree-dnd-responsive' : '' ));
+					is_copy = data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (data.event.metaKey || data.event.ctrlKey)));
+					data.helper
+						.children().attr('class', 'jstree-' + ins.get_theme() + ' jstree-' + ins.get_theme() + '-' + ins.get_theme_variant() + ' ' + ( ins.settings.core.themes.responsive ? ' jstree-dnd-responsive' : '' ))
+						.find('.jstree-copy').first()[ is_copy ? 'show' : 'hide' ]();
+
+					// if are hovering the container itself add a new root node
+					//console.log(data.event);
+					if( (data.event.target === ins.element[0] || data.event.target === ins.get_container_ul()[0]) && ins.get_container_ul().children().length === 0) {
+						ok = true;
+						for(t1 = 0, t2 = data.data.nodes.length; t1 < t2; t1++) {
+							ok = ok && ins.check( (data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (data.event.metaKey || data.event.ctrlKey)) ) ? "copy_node" : "move_node"), (data.data.origin && data.data.origin !== ins ? data.data.origin.get_node(data.data.nodes[t1]) : data.data.nodes[t1]), $.jstree.root, 'last', { 'dnd' : true, 'ref' : ins.get_node($.jstree.root), 'pos' : 'i', 'origin' : data.data.origin, 'is_multi' : (data.data.origin && data.data.origin !== ins), 'is_foreign' : (!data.data.origin) });
+							if(!ok) { break; }
+						}
+						if(ok) {
+							lastmv = { 'ins' : ins, 'par' : $.jstree.root, 'pos' : 'last' };
+							marker.hide();
+							data.helper.find('.jstree-icon').first().removeClass('jstree-er').addClass('jstree-ok');
+							if (data.event.originalEvent && data.event.originalEvent.dataTransfer) {
+								data.event.originalEvent.dataTransfer.dropEffect = is_copy ? 'copy' : 'move';
+							}
+							return;
+						}
+					}
+					else {
+						// if we are hovering a tree node
+						ref = ins.settings.dnd.large_drop_target ? $(data.event.target).closest('.jstree-node').children('.jstree-anchor') : $(data.event.target).closest('.jstree-anchor');
+						if(ref && ref.length && ref.parent().is('.jstree-closed, .jstree-open, .jstree-leaf')) {
+							off = ref.offset();
+							rel = (data.event.pageY !== undefined ? data.event.pageY : data.event.originalEvent.pageY) - off.top;
+							h = ref.outerHeight();
+							if(rel < h / 3) {
+								o = ['b', 'i', 'a'];
+							}
+							else if(rel > h - h / 3) {
+								o = ['a', 'i', 'b'];
+							}
+							else {
+								o = rel > h / 2 ? ['i', 'a', 'b'] : ['i', 'b', 'a'];
+							}
+							$.each(o, function (j, v) {
+								switch(v) {
+									case 'b':
+										l = off.left - 6;
+										t = off.top;
+										p = ins.get_parent(ref);
+										i = ref.parent().index();
+										break;
+									case 'i':
+										ip = ins.settings.dnd.inside_pos;
+										tm = ins.get_node(ref.parent());
+										l = off.left - 2;
+										t = off.top + h / 2 + 1;
+										p = tm.id;
+										i = ip === 'first' ? 0 : (ip === 'last' ? tm.children.length : Math.min(ip, tm.children.length));
+										break;
+									case 'a':
+										l = off.left - 6;
+										t = off.top + h;
+										p = ins.get_parent(ref);
+										i = ref.parent().index() + 1;
+										break;
+								}
+								ok = true;
+								for(t1 = 0, t2 = data.data.nodes.length; t1 < t2; t1++) {
+									op = data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (data.event.metaKey || data.event.ctrlKey))) ? "copy_node" : "move_node";
+									ps = i;
+									if(op === "move_node" && v === 'a' && (data.data.origin && data.data.origin === ins) && p === ins.get_parent(data.data.nodes[t1])) {
+										pr = ins.get_node(p);
+										if(ps > $.inArray(data.data.nodes[t1], pr.children)) {
+											ps -= 1;
+										}
+									}
+									ok = ok && ( (ins && ins.settings && ins.settings.dnd && ins.settings.dnd.check_while_dragging === false) || ins.check(op, (data.data.origin && data.data.origin !== ins ? data.data.origin.get_node(data.data.nodes[t1]) : data.data.nodes[t1]), p, ps, { 'dnd' : true, 'ref' : ins.get_node(ref.parent()), 'pos' : v, 'origin' : data.data.origin, 'is_multi' : (data.data.origin && data.data.origin !== ins), 'is_foreign' : (!data.data.origin) }) );
+									if(!ok) {
+										if(ins && ins.last_error) { laster = ins.last_error(); }
+										break;
+									}
+								}
+								if(v === 'i' && ref.parent().is('.jstree-closed') && ins.settings.dnd.open_timeout) {
+									if (!data.event || data.event.type !== 'dragover' || isDifferentNode) {
+										if (opento) { clearTimeout(opento); }
+										opento = setTimeout((function (x, z) { return function () { x.open_node(z); }; }(ins, ref)), ins.settings.dnd.open_timeout);
+									}
+								}
+								if(ok) {
+									pn = ins.get_node(p, true);
+									if (!pn.hasClass('.jstree-dnd-parent')) {
+										$('.jstree-dnd-parent').removeClass('jstree-dnd-parent');
+										pn.addClass('jstree-dnd-parent');
+									}
+									lastmv = { 'ins' : ins, 'par' : p, 'pos' : v === 'i' && ip === 'last' && i === 0 && !ins.is_loaded(tm) ? 'last' : i };
+									marker.css({ 'left' : l + 'px', 'top' : t + 'px' }).show();
+									data.helper.find('.jstree-icon').first().removeClass('jstree-er').addClass('jstree-ok');
+									if (data.event.originalEvent && data.event.originalEvent.dataTransfer) {
+										data.event.originalEvent.dataTransfer.dropEffect = is_copy ? 'copy' : 'move';
+									}
+									laster = {};
+									o = true;
+									return false;
+								}
+							});
+							if(o === true) { return; }
+						}
+					}
+				}
+				$('.jstree-dnd-parent').removeClass('jstree-dnd-parent');
+				lastmv = false;
+				data.helper.find('.jstree-icon').removeClass('jstree-ok').addClass('jstree-er');
+				if (data.event.originalEvent && data.event.originalEvent.dataTransfer) {
+					data.event.originalEvent.dataTransfer.dropEffect = 'none';
+				}
+				marker.hide();
+			})
+			.on('dnd_scroll.vakata.jstree', function (e, data) {
+				if(!data || !data.data || !data.data.jstree) { return; }
+				marker.hide();
+				lastmv = false;
+				lastev = false;
+				data.helper.find('.jstree-icon').first().removeClass('jstree-ok').addClass('jstree-er');
+			})
+			.on('dnd_stop.vakata.jstree', function (e, data) {
+				$('.jstree-dnd-parent').removeClass('jstree-dnd-parent');
+				if(opento) { clearTimeout(opento); }
+				if(!data || !data.data || !data.data.jstree) { return; }
+				marker.hide().detach();
+				var i, j, nodes = [];
+				if(lastmv) {
+					for(i = 0, j = data.data.nodes.length; i < j; i++) {
+						nodes[i] = data.data.origin ? data.data.origin.get_node(data.data.nodes[i]) : data.data.nodes[i];
+					}
+					lastmv.ins[ data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (data.event.metaKey || data.event.ctrlKey))) ? 'copy_node' : 'move_node' ](nodes, lastmv.par, lastmv.pos, false, false, false, data.data.origin);
+				}
+				else {
+					i = $(data.event.target).closest('.jstree');
+					if(i.length && laster && laster.error && laster.error === 'check') {
+						i = i.jstree(true);
+						if(i) {
+							i.settings.core.error.call(this, laster);
+						}
+					}
+				}
+				lastev = false;
+				lastmv = false;
+			})
+			.on('keyup.jstree keydown.jstree', function (e, data) {
+				data = $.vakata.dnd._get();
+				if(data && data.data && data.data.jstree) {
+					if (e.type === "keyup" && e.which === 27) {
+						if (opento) { clearTimeout(opento); }
+						lastmv = false;
+						laster = false;
+						lastev = false;
+						opento = false;
+						marker.hide().detach();
+						$.vakata.dnd._clean();
+					} else {
+						data.helper.find('.jstree-copy').first()[ data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (e.metaKey || e.ctrlKey))) ? 'show' : 'hide' ]();
+						if(lastev) {
+							lastev.metaKey = e.metaKey;
+							lastev.ctrlKey = e.ctrlKey;
+							$.vakata.dnd._trigger('move', lastev);
+						}
+					}
+				}
+			});
+	});
+
+	// helpers
+	(function ($) {
+		$.vakata.html = {
+			div : $('<div />'),
+			escape : function (str) {
+				return $.vakata.html.div.text(str).html();
+			},
+			strip : function (str) {
+				return $.vakata.html.div.empty().append($.parseHTML(str)).text();
+			}
+		};
+		// private variable
+		var vakata_dnd = {
+			element	: false,
+			target	: false,
+			is_down	: false,
+			is_drag	: false,
+			helper	: false,
+			helper_w: 0,
+			data	: false,
+			init_x	: 0,
+			init_y	: 0,
+			scroll_l: 0,
+			scroll_t: 0,
+			scroll_e: false,
+			scroll_i: false,
+			is_touch: false
+		};
+		$.vakata.dnd = {
+			settings : {
+				scroll_speed		: 10,
+				scroll_proximity	: 20,
+				helper_left			: 5,
+				helper_top			: 10,
+				threshold			: 5,
+				threshold_touch		: 10
+			},
+			_trigger : function (event_name, e, data) {
+				if (data === undefined) {
+					data = $.vakata.dnd._get();
+				}
+				data.event = e;
+				$(document).triggerHandler("dnd_" + event_name + ".vakata", data);
+			},
+			_get : function () {
+				return {
+					"data"		: vakata_dnd.data,
+					"element"	: vakata_dnd.element,
+					"helper"	: vakata_dnd.helper
+				};
+			},
+			_clean : function () {
+				if(vakata_dnd.helper) { vakata_dnd.helper.remove(); }
+				if(vakata_dnd.scroll_i) { clearInterval(vakata_dnd.scroll_i); vakata_dnd.scroll_i = false; }
+				vakata_dnd = {
+					element	: false,
+					target	: false,
+					is_down	: false,
+					is_drag	: false,
+					helper	: false,
+					helper_w: 0,
+					data	: false,
+					init_x	: 0,
+					init_y	: 0,
+					scroll_l: 0,
+					scroll_t: 0,
+					scroll_e: false,
+					scroll_i: false,
+					is_touch: false
+				};
+				$(document).off("mousemove.vakata.jstree touchmove.vakata.jstree", $.vakata.dnd.drag);
+				$(document).off("mouseup.vakata.jstree touchend.vakata.jstree", $.vakata.dnd.stop);
+			},
+			_scroll : function (init_only) {
+				if(!vakata_dnd.scroll_e || (!vakata_dnd.scroll_l && !vakata_dnd.scroll_t)) {
+					if(vakata_dnd.scroll_i) { clearInterval(vakata_dnd.scroll_i); vakata_dnd.scroll_i = false; }
+					return false;
+				}
+				if(!vakata_dnd.scroll_i) {
+					vakata_dnd.scroll_i = setInterval($.vakata.dnd._scroll, 100);
+					return false;
+				}
+				if(init_only === true) { return false; }
+
+				var i = vakata_dnd.scroll_e.scrollTop(),
+					j = vakata_dnd.scroll_e.scrollLeft();
+				vakata_dnd.scroll_e.scrollTop(i + vakata_dnd.scroll_t * $.vakata.dnd.settings.scroll_speed);
+				vakata_dnd.scroll_e.scrollLeft(j + vakata_dnd.scroll_l * $.vakata.dnd.settings.scroll_speed);
+				if(i !== vakata_dnd.scroll_e.scrollTop() || j !== vakata_dnd.scroll_e.scrollLeft()) {
+					/**
+					 * triggered on the document when a drag causes an element to scroll
+					 * @event
+					 * @plugin dnd
+					 * @name dnd_scroll.vakata
+					 * @param {Mixed} data any data supplied with the call to $.vakata.dnd.start
+					 * @param {DOM} element the DOM element being dragged
+					 * @param {jQuery} helper the helper shown next to the mouse
+					 * @param {jQuery} event the element that is scrolling
+					 */
+					$.vakata.dnd._trigger("scroll", vakata_dnd.scroll_e);
+				}
+			},
+			start : function (e, data, html) {
+				if(e.type === "touchstart" && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0]) {
+					e.pageX = e.originalEvent.changedTouches[0].pageX;
+					e.pageY = e.originalEvent.changedTouches[0].pageY;
+					e.target = document.elementFromPoint(e.originalEvent.changedTouches[0].pageX - window.pageXOffset, e.originalEvent.changedTouches[0].pageY - window.pageYOffset);
+				}
+				if(vakata_dnd.is_drag) { $.vakata.dnd.stop({}); }
+				try {
+					e.currentTarget.unselectable = "on";
+					e.currentTarget.onselectstart = function() { return false; };
+					if(e.currentTarget.style) {
+						e.currentTarget.style.touchAction = "none";
+						e.currentTarget.style.msTouchAction = "none";
+						e.currentTarget.style.MozUserSelect = "none";
+					}
+				} catch(ignore) { }
+				vakata_dnd.init_x	= e.pageX;
+				vakata_dnd.init_y	= e.pageY;
+				vakata_dnd.data		= data;
+				vakata_dnd.is_down	= true;
+				vakata_dnd.element	= e.currentTarget;
+				vakata_dnd.target	= e.target;
+				vakata_dnd.is_touch	= e.type === "touchstart";
+				if(html !== false) {
+					vakata_dnd.helper = $("<div id='vakata-dnd'></div>").html(html).css({
+						"display"		: "block",
+						"margin"		: "0",
+						"padding"		: "0",
+						"position"		: "absolute",
+						"top"			: "-2000px",
+						"lineHeight"	: "16px",
+						"zIndex"		: "10000"
+					});
+				}
+				$(document).on("mousemove.vakata.jstree touchmove.vakata.jstree", $.vakata.dnd.drag);
+				$(document).on("mouseup.vakata.jstree touchend.vakata.jstree", $.vakata.dnd.stop);
+				return false;
+			},
+			drag : function (e) {
+				if(e.type === "touchmove" && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0]) {
+					e.pageX = e.originalEvent.changedTouches[0].pageX;
+					e.pageY = e.originalEvent.changedTouches[0].pageY;
+					e.target = document.elementFromPoint(e.originalEvent.changedTouches[0].pageX - window.pageXOffset, e.originalEvent.changedTouches[0].pageY - window.pageYOffset);
+				}
+				if(!vakata_dnd.is_down) { return; }
+				if(!vakata_dnd.is_drag) {
+					if(
+						Math.abs(e.pageX - vakata_dnd.init_x) > (vakata_dnd.is_touch ? $.vakata.dnd.settings.threshold_touch : $.vakata.dnd.settings.threshold) ||
+						Math.abs(e.pageY - vakata_dnd.init_y) > (vakata_dnd.is_touch ? $.vakata.dnd.settings.threshold_touch : $.vakata.dnd.settings.threshold)
+					) {
+						if(vakata_dnd.helper) {
+							vakata_dnd.helper.appendTo("body");
+							vakata_dnd.helper_w = vakata_dnd.helper.outerWidth();
+						}
+						vakata_dnd.is_drag = true;
+						$(vakata_dnd.target).one('click.vakata', false);
+						/**
+						 * triggered on the document when a drag starts
+						 * @event
+						 * @plugin dnd
+						 * @name dnd_start.vakata
+						 * @param {Mixed} data any data supplied with the call to $.vakata.dnd.start
+						 * @param {DOM} element the DOM element being dragged
+						 * @param {jQuery} helper the helper shown next to the mouse
+						 * @param {Object} event the event that caused the start (probably mousemove)
+						 */
+						$.vakata.dnd._trigger("start", e);
+					}
+					else { return; }
+				}
+
+				var d  = false, w  = false,
+					dh = false, wh = false,
+					dw = false, ww = false,
+					dt = false, dl = false,
+					ht = false, hl = false;
+
+				vakata_dnd.scroll_t = 0;
+				vakata_dnd.scroll_l = 0;
+				vakata_dnd.scroll_e = false;
+				$($(e.target).parentsUntil("body").addBack().get().reverse())
+					.filter(function () {
+						return	(/^auto|scroll$/).test($(this).css("overflow")) &&
+								(this.scrollHeight > this.offsetHeight || this.scrollWidth > this.offsetWidth);
+					})
+					.each(function () {
+						var t = $(this), o = t.offset();
+						if(this.scrollHeight > this.offsetHeight) {
+							if(o.top + t.height() - e.pageY < $.vakata.dnd.settings.scroll_proximity)	{ vakata_dnd.scroll_t = 1; }
+							if(e.pageY - o.top < $.vakata.dnd.settings.scroll_proximity)				{ vakata_dnd.scroll_t = -1; }
+						}
+						if(this.scrollWidth > this.offsetWidth) {
+							if(o.left + t.width() - e.pageX < $.vakata.dnd.settings.scroll_proximity)	{ vakata_dnd.scroll_l = 1; }
+							if(e.pageX - o.left < $.vakata.dnd.settings.scroll_proximity)				{ vakata_dnd.scroll_l = -1; }
+						}
+						if(vakata_dnd.scroll_t || vakata_dnd.scroll_l) {
+							vakata_dnd.scroll_e = $(this);
+							return false;
+						}
+					});
+
+				if(!vakata_dnd.scroll_e) {
+					d  = $(document); w = $(window);
+					dh = d.height(); wh = w.height();
+					dw = d.width(); ww = w.width();
+					dt = d.scrollTop(); dl = d.scrollLeft();
+					if(dh > wh && e.pageY - dt < $.vakata.dnd.settings.scroll_proximity)		{ vakata_dnd.scroll_t = -1;  }
+					if(dh > wh && wh - (e.pageY - dt) < $.vakata.dnd.settings.scroll_proximity)	{ vakata_dnd.scroll_t = 1; }
+					if(dw > ww && e.pageX - dl < $.vakata.dnd.settings.scroll_proximity)		{ vakata_dnd.scroll_l = -1; }
+					if(dw > ww && ww - (e.pageX - dl) < $.vakata.dnd.settings.scroll_proximity)	{ vakata_dnd.scroll_l = 1; }
+					if(vakata_dnd.scroll_t || vakata_dnd.scroll_l) {
+						vakata_dnd.scroll_e = d;
+					}
+				}
+				if(vakata_dnd.scroll_e) { $.vakata.dnd._scroll(true); }
+
+				if(vakata_dnd.helper) {
+					ht = parseInt(e.pageY + $.vakata.dnd.settings.helper_top, 10);
+					hl = parseInt(e.pageX + $.vakata.dnd.settings.helper_left, 10);
+					if(dh && ht + 25 > dh) { ht = dh - 50; }
+					if(dw && hl + vakata_dnd.helper_w > dw) { hl = dw - (vakata_dnd.helper_w + 2); }
+					vakata_dnd.helper.css({
+						left	: hl + "px",
+						top		: ht + "px"
+					});
+				}
+				/**
+				 * triggered on the document when a drag is in progress
+				 * @event
+				 * @plugin dnd
+				 * @name dnd_move.vakata
+				 * @param {Mixed} data any data supplied with the call to $.vakata.dnd.start
+				 * @param {DOM} element the DOM element being dragged
+				 * @param {jQuery} helper the helper shown next to the mouse
+				 * @param {Object} event the event that caused this to trigger (most likely mousemove)
+				 */
+				$.vakata.dnd._trigger("move", e);
+				return false;
+			},
+			stop : function (e) {
+				if(e.type === "touchend" && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0]) {
+					e.pageX = e.originalEvent.changedTouches[0].pageX;
+					e.pageY = e.originalEvent.changedTouches[0].pageY;
+					e.target = document.elementFromPoint(e.originalEvent.changedTouches[0].pageX - window.pageXOffset, e.originalEvent.changedTouches[0].pageY - window.pageYOffset);
+				}
+				if(vakata_dnd.is_drag) {
+					/**
+					 * triggered on the document when a drag stops (the dragged element is dropped)
+					 * @event
+					 * @plugin dnd
+					 * @name dnd_stop.vakata
+					 * @param {Mixed} data any data supplied with the call to $.vakata.dnd.start
+					 * @param {DOM} element the DOM element being dragged
+					 * @param {jQuery} helper the helper shown next to the mouse
+					 * @param {Object} event the event that caused the stop
+					 */
+					if (e.target !== vakata_dnd.target) {
+						$(vakata_dnd.target).off('click.vakata');
+					}
+					$.vakata.dnd._trigger("stop", e);
+				}
+				else {
+					if(e.type === "touchend" && e.target === vakata_dnd.target) {
+						var to = setTimeout(function () { $(e.target).click(); }, 100);
+						$(e.target).one('click', function() { if(to) { clearTimeout(to); } });
+					}
+				}
+				$.vakata.dnd._clean();
+				return false;
+			}
+		};
+	}($));
+
+	// include the dnd plugin by default
+	// $.jstree.defaults.plugins.push("dnd");
+
+
+/**
+ * ### Massload plugin
+ *
+ * Adds massload functionality to jsTree, so that multiple nodes can be loaded in a single request (only useful with lazy loading).
+ */
+
+	/**
+	 * massload configuration
+	 *
+	 * It is possible to set this to a standard jQuery-like AJAX config.
+	 * In addition to the standard jQuery ajax options here you can supply functions for `data` and `url`, the functions will be run in the current instance's scope and a param will be passed indicating which node IDs need to be loaded, the return value of those functions will be used.
+	 *
+	 * You can also set this to a function, that function will receive the node IDs being loaded as argument and a second param which is a function (callback) which should be called with the result.
+	 *
+	 * Both the AJAX and the function approach rely on the same return value - an object where the keys are the node IDs, and the value is the children of that node as an array.
+	 *
+	 *	{
+	 *		"id1" : [{ "text" : "Child of ID1", "id" : "c1" }, { "text" : "Another child of ID1", "id" : "c2" }],
+	 *		"id2" : [{ "text" : "Child of ID2", "id" : "c3" }]
+	 *	}
+	 * 
+	 * @name $.jstree.defaults.massload
+	 * @plugin massload
+	 */
+	$.jstree.defaults.massload = null;
+	$.jstree.plugins.massload = function (options, parent) {
+		this.init = function (el, options) {
+			this._data.massload = {};
+			parent.init.call(this, el, options);
+		};
+		this._load_nodes = function (nodes, callback, is_callback, force_reload) {
+			var s = this.settings.massload,
+				nodesString = JSON.stringify(nodes),
+				toLoad = [],
+				m = this._model.data,
+				i, j, dom;
+			if (!is_callback) {
+				for(i = 0, j = nodes.length; i < j; i++) {
+					if(!m[nodes[i]] || ( (!m[nodes[i]].state.loaded && !m[nodes[i]].state.failed) || force_reload) ) {
+						toLoad.push(nodes[i]);
+						dom = this.get_node(nodes[i], true);
+						if (dom && dom.length) {
+							dom.addClass("jstree-loading").attr('aria-busy',true);
+						}
+					}
+				}
+				this._data.massload = {};
+				if (toLoad.length) {
+					if($.isFunction(s)) {
+						return s.call(this, toLoad, $.proxy(function (data) {
+							var i, j;
+							if(data) {
+								for(i in data) {
+									if(data.hasOwnProperty(i)) {
+										this._data.massload[i] = data[i];
+									}
+								}
+							}
+							for(i = 0, j = nodes.length; i < j; i++) {
+								dom = this.get_node(nodes[i], true);
+								if (dom && dom.length) {
+									dom.removeClass("jstree-loading").attr('aria-busy',false);
+								}
+							}
+							parent._load_nodes.call(this, nodes, callback, is_callback, force_reload);
+						}, this));
+					}
+					if(typeof s === 'object' && s && s.url) {
+						s = $.extend(true, {}, s);
+						if($.isFunction(s.url)) {
+							s.url = s.url.call(this, toLoad);
+						}
+						if($.isFunction(s.data)) {
+							s.data = s.data.call(this, toLoad);
+						}
+						return $.ajax(s)
+							.done($.proxy(function (data,t,x) {
+									var i, j;
+									if(data) {
+										for(i in data) {
+											if(data.hasOwnProperty(i)) {
+												this._data.massload[i] = data[i];
+											}
+										}
+									}
+									for(i = 0, j = nodes.length; i < j; i++) {
+										dom = this.get_node(nodes[i], true);
+										if (dom && dom.length) {
+											dom.removeClass("jstree-loading").attr('aria-busy',false);
+										}
+									}
+									parent._load_nodes.call(this, nodes, callback, is_callback, force_reload);
+								}, this))
+							.fail($.proxy(function (f) {
+									parent._load_nodes.call(this, nodes, callback, is_callback, force_reload);
+								}, this));
+					}
+				}
+			}
+			return parent._load_nodes.call(this, nodes, callback, is_callback, force_reload);
+		};
+		this._load_node = function (obj, callback) {
+			var data = this._data.massload[obj.id],
+				rslt = null, dom;
+			if(data) {
+				rslt = this[typeof data === 'string' ? '_append_html_data' : '_append_json_data'](
+					obj,
+					typeof data === 'string' ? $($.parseHTML(data)).filter(function () { return this.nodeType !== 3; }) : data,
+					function (status) { callback.call(this, status); }
+				);
+				dom = this.get_node(obj.id, true);
+				if (dom && dom.length) {
+					dom.removeClass("jstree-loading").attr('aria-busy',false);
+				}
+				delete this._data.massload[obj.id];
+				return rslt;
+			}
+			return parent._load_node.call(this, obj, callback);
+		};
+	};
+
+/**
+ * ### Search plugin
+ *
+ * Adds search functionality to jsTree.
+ */
+
+	/**
+	 * stores all defaults for the search plugin
+	 * @name $.jstree.defaults.search
+	 * @plugin search
+	 */
+	$.jstree.defaults.search = {
+		/**
+		 * a jQuery-like AJAX config, which jstree uses if a server should be queried for results.
+		 *
+		 * A `str` (which is the search string) parameter will be added with the request, an optional `inside` parameter will be added if the search is limited to a node id. The expected result is a JSON array with nodes that need to be opened so that matching nodes will be revealed.
+		 * Leave this setting as `false` to not query the server. You can also set this to a function, which will be invoked in the instance's scope and receive 3 parameters - the search string, the callback to call with the array of nodes to load, and the optional node ID to limit the search to
+		 * @name $.jstree.defaults.search.ajax
+		 * @plugin search
+		 */
+		ajax : false,
+		/**
+		 * Indicates if the search should be fuzzy or not (should `chnd3` match `child node 3`). Default is `false`.
+		 * @name $.jstree.defaults.search.fuzzy
+		 * @plugin search
+		 */
+		fuzzy : false,
+		/**
+		 * Indicates if the search should be case sensitive. Default is `false`.
+		 * @name $.jstree.defaults.search.case_sensitive
+		 * @plugin search
+		 */
+		case_sensitive : false,
+		/**
+		 * Indicates if the tree should be filtered (by default) to show only matching nodes (keep in mind this can be a heavy on large trees in old browsers).
+		 * This setting can be changed at runtime when calling the search method. Default is `false`.
+		 * @name $.jstree.defaults.search.show_only_matches
+		 * @plugin search
+		 */
+		show_only_matches : false,
+		/**
+		 * Indicates if the children of matched element are shown (when show_only_matches is true)
+		 * This setting can be changed at runtime when calling the search method. Default is `false`.
+		 * @name $.jstree.defaults.search.show_only_matches_children
+		 * @plugin search
+		 */
+		show_only_matches_children : false,
+		/**
+		 * Indicates if all nodes opened to reveal the search result, should be closed when the search is cleared or a new search is performed. Default is `true`.
+		 * @name $.jstree.defaults.search.close_opened_onclear
+		 * @plugin search
+		 */
+		close_opened_onclear : true,
+		/**
+		 * Indicates if only leaf nodes should be included in search results. Default is `false`.
+		 * @name $.jstree.defaults.search.search_leaves_only
+		 * @plugin search
+		 */
+		search_leaves_only : false,
+		/**
+		 * If set to a function it wil be called in the instance's scope with two arguments - search string and node (where node will be every node in the structure, so use with caution).
+		 * If the function returns a truthy value the node will be considered a match (it might not be displayed if search_only_leaves is set to true and the node is not a leaf). Default is `false`.
+		 * @name $.jstree.defaults.search.search_callback
+		 * @plugin search
+		 */
+		search_callback : false
+	};
+
+	$.jstree.plugins.search = function (options, parent) {
+		this.bind = function () {
+			parent.bind.call(this);
+
+			this._data.search.str = "";
+			this._data.search.dom = $();
+			this._data.search.res = [];
+			this._data.search.opn = [];
+			this._data.search.som = false;
+			this._data.search.smc = false;
+			this._data.search.hdn = [];
+
+			this.element
+				.on("search.jstree", $.proxy(function (e, data) {
+						if(this._data.search.som && data.res.length) {
+							var m = this._model.data, i, j, p = [], k, l;
+							for(i = 0, j = data.res.length; i < j; i++) {
+								if(m[data.res[i]] && !m[data.res[i]].state.hidden) {
+									p.push(data.res[i]);
+									p = p.concat(m[data.res[i]].parents);
+									if(this._data.search.smc) {
+										for (k = 0, l = m[data.res[i]].children_d.length; k < l; k++) {
+											if (m[m[data.res[i]].children_d[k]] && !m[m[data.res[i]].children_d[k]].state.hidden) {
+												p.push(m[data.res[i]].children_d[k]);
+											}
+										}
+									}
+								}
+							}
+							p = $.vakata.array_remove_item($.vakata.array_unique(p), $.jstree.root);
+							this._data.search.hdn = this.hide_all(true);
+							this.show_node(p, true);
+							this.redraw(true);
+						}
+					}, this))
+				.on("clear_search.jstree", $.proxy(function (e, data) {
+						if(this._data.search.som && data.res.length) {
+							this.show_node(this._data.search.hdn, true);
+							this.redraw(true);
+						}
+					}, this));
+		};
+		/**
+		 * used to search the tree nodes for a given string
+		 * @name search(str [, skip_async])
+		 * @param {String} str the search string
+		 * @param {Boolean} skip_async if set to true server will not be queried even if configured
+		 * @param {Boolean} show_only_matches if set to true only matching nodes will be shown (keep in mind this can be very slow on large trees or old browsers)
+		 * @param {mixed} inside an optional node to whose children to limit the search
+		 * @param {Boolean} append if set to true the results of this search are appended to the previous search
+		 * @plugin search
+		 * @trigger search.jstree
+		 */
+		this.search = function (str, skip_async, show_only_matches, inside, append, show_only_matches_children) {
+			if(str === false || $.trim(str.toString()) === "") {
+				return this.clear_search();
+			}
+			inside = this.get_node(inside);
+			inside = inside && inside.id ? inside.id : null;
+			str = str.toString();
+			var s = this.settings.search,
+				a = s.ajax ? s.ajax : false,
+				m = this._model.data,
+				f = null,
+				r = [],
+				p = [], i, j;
+			if(this._data.search.res.length && !append) {
+				this.clear_search();
+			}
+			if(show_only_matches === undefined) {
+				show_only_matches = s.show_only_matches;
+			}
+			if(show_only_matches_children === undefined) {
+				show_only_matches_children = s.show_only_matches_children;
+			}
+			if(!skip_async && a !== false) {
+				if($.isFunction(a)) {
+					return a.call(this, str, $.proxy(function (d) {
+							if(d && d.d) { d = d.d; }
+							this._load_nodes(!$.isArray(d) ? [] : $.vakata.array_unique(d), function () {
+								this.search(str, true, show_only_matches, inside, append, show_only_matches_children);
+							});
+						}, this), inside);
+				}
+				else {
+					a = $.extend({}, a);
+					if(!a.data) { a.data = {}; }
+					a.data.str = str;
+					if(inside) {
+						a.data.inside = inside;
+					}
+					if (this._data.search.lastRequest) {
+						this._data.search.lastRequest.abort();
+					}
+					this._data.search.lastRequest = $.ajax(a)
+						.fail($.proxy(function () {
+							this._data.core.last_error = { 'error' : 'ajax', 'plugin' : 'search', 'id' : 'search_01', 'reason' : 'Could not load search parents', 'data' : JSON.stringify(a) };
+							this.settings.core.error.call(this, this._data.core.last_error);
+						}, this))
+						.done($.proxy(function (d) {
+							if(d && d.d) { d = d.d; }
+							this._load_nodes(!$.isArray(d) ? [] : $.vakata.array_unique(d), function () {
+								this.search(str, true, show_only_matches, inside, append, show_only_matches_children);
+							});
+						}, this));
+					return this._data.search.lastRequest;
+				}
+			}
+			if(!append) {
+				this._data.search.str = str;
+				this._data.search.dom = $();
+				this._data.search.res = [];
+				this._data.search.opn = [];
+				this._data.search.som = show_only_matches;
+				this._data.search.smc = show_only_matches_children;
+			}
+
+			f = new $.vakata.search(str, true, { caseSensitive : s.case_sensitive, fuzzy : s.fuzzy });
+			$.each(m[inside ? inside : $.jstree.root].children_d, function (ii, i) {
+				var v = m[i];
+				if(v.text && !v.state.hidden && (!s.search_leaves_only || (v.state.loaded && v.children.length === 0)) && ( (s.search_callback && s.search_callback.call(this, str, v)) || (!s.search_callback && f.search(v.text).isMatch) ) ) {
+					r.push(i);
+					p = p.concat(v.parents);
+				}
+			});
+			if(r.length) {
+				p = $.vakata.array_unique(p);
+				for(i = 0, j = p.length; i < j; i++) {
+					if(p[i] !== $.jstree.root && m[p[i]] && this.open_node(p[i], null, 0) === true) {
+						this._data.search.opn.push(p[i]);
+					}
+				}
+				if(!append) {
+					this._data.search.dom = $(this.element[0].querySelectorAll('#' + $.map(r, function (v) { return "0123456789".indexOf(v[0]) !== -1 ? '\\3' + v[0] + ' ' + v.substr(1).replace($.jstree.idregex,'\\$&') : v.replace($.jstree.idregex,'\\$&'); }).join(', #')));
+					this._data.search.res = r;
+				}
+				else {
+					this._data.search.dom = this._data.search.dom.add($(this.element[0].querySelectorAll('#' + $.map(r, function (v) { return "0123456789".indexOf(v[0]) !== -1 ? '\\3' + v[0] + ' ' + v.substr(1).replace($.jstree.idregex,'\\$&') : v.replace($.jstree.idregex,'\\$&'); }).join(', #'))));
+					this._data.search.res = $.vakata.array_unique(this._data.search.res.concat(r));
+				}
+				this._data.search.dom.children(".jstree-anchor").addClass('jstree-search');
+			}
+			/**
+			 * triggered after search is complete
+			 * @event
+			 * @name search.jstree
+			 * @param {jQuery} nodes a jQuery collection of matching nodes
+			 * @param {String} str the search string
+			 * @param {Array} res a collection of objects represeing the matching nodes
+			 * @plugin search
+			 */
+			this.trigger('search', { nodes : this._data.search.dom, str : str, res : this._data.search.res, show_only_matches : show_only_matches });
+		};
+		/**
+		 * used to clear the last search (removes classes and shows all nodes if filtering is on)
+		 * @name clear_search()
+		 * @plugin search
+		 * @trigger clear_search.jstree
+		 */
+		this.clear_search = function () {
+			if(this.settings.search.close_opened_onclear) {
+				this.close_node(this._data.search.opn, 0);
+			}
+			/**
+			 * triggered after search is complete
+			 * @event
+			 * @name clear_search.jstree
+			 * @param {jQuery} nodes a jQuery collection of matching nodes (the result from the last search)
+			 * @param {String} str the search string (the last search string)
+			 * @param {Array} res a collection of objects represeing the matching nodes (the result from the last search)
+			 * @plugin search
+			 */
+			this.trigger('clear_search', { 'nodes' : this._data.search.dom, str : this._data.search.str, res : this._data.search.res });
+			if(this._data.search.res.length) {
+				this._data.search.dom = $(this.element[0].querySelectorAll('#' + $.map(this._data.search.res, function (v) {
+					return "0123456789".indexOf(v[0]) !== -1 ? '\\3' + v[0] + ' ' + v.substr(1).replace($.jstree.idregex,'\\$&') : v.replace($.jstree.idregex,'\\$&');
+				}).join(', #')));
+				this._data.search.dom.children(".jstree-anchor").removeClass("jstree-search");
+			}
+			this._data.search.str = "";
+			this._data.search.res = [];
+			this._data.search.opn = [];
+			this._data.search.dom = $();
+		};
+
+		this.redraw_node = function(obj, deep, callback, force_render) {
+			obj = parent.redraw_node.apply(this, arguments);
+			if(obj) {
+				if($.inArray(obj.id, this._data.search.res) !== -1) {
+					var i, j, tmp = null;
+					for(i = 0, j = obj.childNodes.length; i < j; i++) {
+						if(obj.childNodes[i] && obj.childNodes[i].className && obj.childNodes[i].className.indexOf("jstree-anchor") !== -1) {
+							tmp = obj.childNodes[i];
+							break;
+						}
+					}
+					if(tmp) {
+						tmp.className += ' jstree-search';
+					}
+				}
+			}
+			return obj;
+		};
+	};
+
+	// helpers
+	(function ($) {
+		// from http://kiro.me/projects/fuse.html
+		$.vakata.search = function(pattern, txt, options) {
+			options = options || {};
+			options = $.extend({}, $.vakata.search.defaults, options);
+			if(options.fuzzy !== false) {
+				options.fuzzy = true;
+			}
+			pattern = options.caseSensitive ? pattern : pattern.toLowerCase();
+			var MATCH_LOCATION	= options.location,
+				MATCH_DISTANCE	= options.distance,
+				MATCH_THRESHOLD	= options.threshold,
+				patternLen = pattern.length,
+				matchmask, pattern_alphabet, match_bitapScore, search;
+			if(patternLen > 32) {
+				options.fuzzy = false;
+			}
+			if(options.fuzzy) {
+				matchmask = 1 << (patternLen - 1);
+				pattern_alphabet = (function () {
+					var mask = {},
+						i = 0;
+					for (i = 0; i < patternLen; i++) {
+						mask[pattern.charAt(i)] = 0;
+					}
+					for (i = 0; i < patternLen; i++) {
+						mask[pattern.charAt(i)] |= 1 << (patternLen - i - 1);
+					}
+					return mask;
+				}());
+				match_bitapScore = function (e, x) {
+					var accuracy = e / patternLen,
+						proximity = Math.abs(MATCH_LOCATION - x);
+					if(!MATCH_DISTANCE) {
+						return proximity ? 1.0 : accuracy;
+					}
+					return accuracy + (proximity / MATCH_DISTANCE);
+				};
+			}
+			search = function (text) {
+				text = options.caseSensitive ? text : text.toLowerCase();
+				if(pattern === text || text.indexOf(pattern) !== -1) {
+					return {
+						isMatch: true,
+						score: 0
+					};
+				}
+				if(!options.fuzzy) {
+					return {
+						isMatch: false,
+						score: 1
+					};
+				}
+				var i, j,
+					textLen = text.length,
+					scoreThreshold = MATCH_THRESHOLD,
+					bestLoc = text.indexOf(pattern, MATCH_LOCATION),
+					binMin, binMid,
+					binMax = patternLen + textLen,
+					lastRd, start, finish, rd, charMatch,
+					score = 1,
+					locations = [];
+				if (bestLoc !== -1) {
+					scoreThreshold = Math.min(match_bitapScore(0, bestLoc), scoreThreshold);
+					bestLoc = text.lastIndexOf(pattern, MATCH_LOCATION + patternLen);
+					if (bestLoc !== -1) {
+						scoreThreshold = Math.min(match_bitapScore(0, bestLoc), scoreThreshold);
+					}
+				}
+				bestLoc = -1;
+				for (i = 0; i < patternLen; i++) {
+					binMin = 0;
+					binMid = binMax;
+					while (binMin < binMid) {
+						if (match_bitapScore(i, MATCH_LOCATION + binMid) <= scoreThreshold) {
+							binMin = binMid;
+						} else {
+							binMax = binMid;
+						}
+						binMid = Math.floor((binMax - binMin) / 2 + binMin);
+					}
+					binMax = binMid;
+					start = Math.max(1, MATCH_LOCATION - binMid + 1);
+					finish = Math.min(MATCH_LOCATION + binMid, textLen) + patternLen;
+					rd = new Array(finish + 2);
+					rd[finish + 1] = (1 << i) - 1;
+					for (j = finish; j >= start; j--) {
+						charMatch = pattern_alphabet[text.charAt(j - 1)];
+						if (i === 0) {
+							rd[j] = ((rd[j + 1] << 1) | 1) & charMatch;
+						} else {
+							rd[j] = ((rd[j + 1] << 1) | 1) & charMatch | (((lastRd[j + 1] | lastRd[j]) << 1) | 1) | lastRd[j + 1];
+						}
+						if (rd[j] & matchmask) {
+							score = match_bitapScore(i, j - 1);
+							if (score <= scoreThreshold) {
+								scoreThreshold = score;
+								bestLoc = j - 1;
+								locations.push(bestLoc);
+								if (bestLoc > MATCH_LOCATION) {
+									start = Math.max(1, 2 * MATCH_LOCATION - bestLoc);
+								} else {
+									break;
+								}
+							}
+						}
+					}
+					if (match_bitapScore(i + 1, MATCH_LOCATION) > scoreThreshold) {
+						break;
+					}
+					lastRd = rd;
+				}
+				return {
+					isMatch: bestLoc >= 0,
+					score: score
+				};
+			};
+			return txt === true ? { 'search' : search } : search(txt);
+		};
+		$.vakata.search.defaults = {
+			location : 0,
+			distance : 100,
+			threshold : 0.6,
+			fuzzy : false,
+			caseSensitive : false
+		};
+	}($));
+
+	// include the search plugin by default
+	// $.jstree.defaults.plugins.push("search");
+
+
+/**
+ * ### Sort plugin
+ *
+ * Automatically sorts all siblings in the tree according to a sorting function.
+ */
+
+	/**
+	 * the settings function used to sort the nodes.
+	 * It is executed in the tree's context, accepts two nodes as arguments and should return `1` or `-1`.
+	 * @name $.jstree.defaults.sort
+	 * @plugin sort
+	 */
+	$.jstree.defaults.sort = function (a, b) {
+		//return this.get_type(a) === this.get_type(b) ? (this.get_text(a) > this.get_text(b) ? 1 : -1) : this.get_type(a) >= this.get_type(b);
+		return this.get_text(a) > this.get_text(b) ? 1 : -1;
+	};
+	$.jstree.plugins.sort = function (options, parent) {
+		this.bind = function () {
+			parent.bind.call(this);
+			this.element
+				.on("model.jstree", $.proxy(function (e, data) {
+						this.sort(data.parent, true);
+					}, this))
+				.on("rename_node.jstree create_node.jstree", $.proxy(function (e, data) {
+						this.sort(data.parent || data.node.parent, false);
+						this.redraw_node(data.parent || data.node.parent, true);
+					}, this))
+				.on("move_node.jstree copy_node.jstree", $.proxy(function (e, data) {
+						this.sort(data.parent, false);
+						this.redraw_node(data.parent, true);
+					}, this));
+		};
+		/**
+		 * used to sort a node's children
+		 * @private
+		 * @name sort(obj [, deep])
+		 * @param  {mixed} obj the node
+		 * @param {Boolean} deep if set to `true` nodes are sorted recursively.
+		 * @plugin sort
+		 * @trigger search.jstree
+		 */
+		this.sort = function (obj, deep) {
+			var i, j;
+			obj = this.get_node(obj);
+			if(obj && obj.children && obj.children.length) {
+				obj.children.sort($.proxy(this.settings.sort, this));
+				if(deep) {
+					for(i = 0, j = obj.children_d.length; i < j; i++) {
+						this.sort(obj.children_d[i], false);
+					}
+				}
+			}
+		};
+	};
+
+	// include the sort plugin by default
+	// $.jstree.defaults.plugins.push("sort");
+
+/**
+ * ### State plugin
+ *
+ * Saves the state of the tree (selected nodes, opened nodes) on the user's computer using available options (localStorage, cookies, etc)
+ */
+
+	var to = false;
+	/**
+	 * stores all defaults for the state plugin
+	 * @name $.jstree.defaults.state
+	 * @plugin state
+	 */
+	$.jstree.defaults.state = {
+		/**
+		 * A string for the key to use when saving the current tree (change if using multiple trees in your project). Defaults to `jstree`.
+		 * @name $.jstree.defaults.state.key
+		 * @plugin state
+		 */
+		key		: 'jstree',
+		/**
+		 * A space separated list of events that trigger a state save. Defaults to `changed.jstree open_node.jstree close_node.jstree`.
+		 * @name $.jstree.defaults.state.events
+		 * @plugin state
+		 */
+		events	: 'changed.jstree open_node.jstree close_node.jstree check_node.jstree uncheck_node.jstree',
+		/**
+		 * Time in milliseconds after which the state will expire. Defaults to 'false' meaning - no expire.
+		 * @name $.jstree.defaults.state.ttl
+		 * @plugin state
+		 */
+		ttl		: false,
+		/**
+		 * A function that will be executed prior to restoring state with one argument - the state object. Can be used to clear unwanted parts of the state.
+		 * @name $.jstree.defaults.state.filter
+		 * @plugin state
+		 */
+		filter	: false,
+		/**
+		 * Should loaded nodes be restored (setting this to true means that it is possible that the whole tree will be loaded for some users - use with caution). Defaults to `false`
+		 * @name $.jstree.defaults.state.preserve_loaded
+		 * @plugin state
+		 */
+		preserve_loaded : false
+	};
+	$.jstree.plugins.state = function (options, parent) {
+		this.bind = function () {
+			parent.bind.call(this);
+			var bind = $.proxy(function () {
+				this.element.on(this.settings.state.events, $.proxy(function () {
+					if(to) { clearTimeout(to); }
+					to = setTimeout($.proxy(function () { this.save_state(); }, this), 100);
+				}, this));
+				/**
+				 * triggered when the state plugin is finished restoring the state (and immediately after ready if there is no state to restore).
+				 * @event
+				 * @name state_ready.jstree
+				 * @plugin state
+				 */
+				this.trigger('state_ready');
+			}, this);
+			this.element
+				.on("ready.jstree", $.proxy(function (e, data) {
+						this.element.one("restore_state.jstree", bind);
+						if(!this.restore_state()) { bind(); }
+					}, this));
+		};
+		/**
+		 * save the state
+		 * @name save_state()
+		 * @plugin state
+		 */
+		this.save_state = function () {
+			var tm = this.get_state();
+			if (!this.settings.state.preserve_loaded) {
+				delete tm.core.loaded;
+			}
+			var st = { 'state' : tm, 'ttl' : this.settings.state.ttl, 'sec' : +(new Date()) };
+			$.vakata.storage.set(this.settings.state.key, JSON.stringify(st));
+		};
+		/**
+		 * restore the state from the user's computer
+		 * @name restore_state()
+		 * @plugin state
+		 */
+		this.restore_state = function () {
+			var k = $.vakata.storage.get(this.settings.state.key);
+			if(!!k) { try { k = JSON.parse(k); } catch(ex) { return false; } }
+			if(!!k && k.ttl && k.sec && +(new Date()) - k.sec > k.ttl) { return false; }
+			if(!!k && k.state) { k = k.state; }
+			if(!!k && $.isFunction(this.settings.state.filter)) { k = this.settings.state.filter.call(this, k); }
+			if(!!k) {
+				if (!this.settings.state.preserve_loaded) {
+					delete k.core.loaded;
+				}
+				this.element.one("set_state.jstree", function (e, data) { data.instance.trigger('restore_state', { 'state' : $.extend(true, {}, k) }); });
+				this.set_state(k);
+				return true;
+			}
+			return false;
+		};
+		/**
+		 * clear the state on the user's computer
+		 * @name clear_state()
+		 * @plugin state
+		 */
+		this.clear_state = function () {
+			return $.vakata.storage.del(this.settings.state.key);
+		};
+	};
+
+	(function ($, undefined) {
+		$.vakata.storage = {
+			// simply specifying the functions in FF throws an error
+			set : function (key, val) { return window.localStorage.setItem(key, val); },
+			get : function (key) { return window.localStorage.getItem(key); },
+			del : function (key) { return window.localStorage.removeItem(key); }
+		};
+	}($));
+
+	// include the state plugin by default
+	// $.jstree.defaults.plugins.push("state");
+
+/**
+ * ### Types plugin
+ *
+ * Makes it possible to add predefined types for groups of nodes, which make it possible to easily control nesting rules and icon for each group.
+ */
+
+	/**
+	 * An object storing all types as key value pairs, where the key is the type name and the value is an object that could contain following keys (all optional).
+	 *
+	 * * `max_children` the maximum number of immediate children this node type can have. Do not specify or set to `-1` for unlimited.
+	 * * `max_depth` the maximum number of nesting this node type can have. A value of `1` would mean that the node can have children, but no grandchildren. Do not specify or set to `-1` for unlimited.
+	 * * `valid_children` an array of node type strings, that nodes of this type can have as children. Do not specify or set to `-1` for no limits.
+	 * * `icon` a string - can be a path to an icon or a className, if using an image that is in the current directory use a `./` prefix, otherwise it will be detected as a class. Omit to use the default icon from your theme.
+	 * * `li_attr` an object of values which will be used to add HTML attributes on the resulting LI DOM node (merged with the node's own data)
+	 * * `a_attr` an object of values which will be used to add HTML attributes on the resulting A DOM node (merged with the node's own data)
+	 *
+	 * There are two predefined types:
+	 *
+	 * * `#` represents the root of the tree, for example `max_children` would control the maximum number of root nodes.
+	 * * `default` represents the default node - any settings here will be applied to all nodes that do not have a type specified.
+	 *
+	 * @name $.jstree.defaults.types
+	 * @plugin types
+	 */
+	$.jstree.defaults.types = {
+		'default' : {}
+	};
+	$.jstree.defaults.types[$.jstree.root] = {};
+
+	$.jstree.plugins.types = function (options, parent) {
+		this.init = function (el, options) {
+			var i, j;
+			if(options && options.types && options.types['default']) {
+				for(i in options.types) {
+					if(i !== "default" && i !== $.jstree.root && options.types.hasOwnProperty(i)) {
+						for(j in options.types['default']) {
+							if(options.types['default'].hasOwnProperty(j) && options.types[i][j] === undefined) {
+								options.types[i][j] = options.types['default'][j];
+							}
+						}
+					}
+				}
+			}
+			parent.init.call(this, el, options);
+			this._model.data[$.jstree.root].type = $.jstree.root;
+		};
+		this.refresh = function (skip_loading, forget_state) {
+			parent.refresh.call(this, skip_loading, forget_state);
+			this._model.data[$.jstree.root].type = $.jstree.root;
+		};
+		this.bind = function () {
+			this.element
+				.on('model.jstree', $.proxy(function (e, data) {
+						var m = this._model.data,
+							dpc = data.nodes,
+							t = this.settings.types,
+							i, j, c = 'default', k;
+						for(i = 0, j = dpc.length; i < j; i++) {
+							c = 'default';
+							if(m[dpc[i]].original && m[dpc[i]].original.type && t[m[dpc[i]].original.type]) {
+								c = m[dpc[i]].original.type;
+							}
+							if(m[dpc[i]].data && m[dpc[i]].data.jstree && m[dpc[i]].data.jstree.type && t[m[dpc[i]].data.jstree.type]) {
+								c = m[dpc[i]].data.jstree.type;
+							}
+							m[dpc[i]].type = c;
+							if(m[dpc[i]].icon === true && t[c].icon !== undefined) {
+								m[dpc[i]].icon = t[c].icon;
+							}
+							if(t[c].li_attr !== undefined && typeof t[c].li_attr === 'object') {
+								for (k in t[c].li_attr) {
+									if (t[c].li_attr.hasOwnProperty(k)) {
+										if (k === 'id') {
+											continue;
+										}
+										else if (m[dpc[i]].li_attr[k] === undefined) {
+											m[dpc[i]].li_attr[k] = t[c].li_attr[k];
+										}
+										else if (k === 'class') {
+											m[dpc[i]].li_attr['class'] = t[c].li_attr['class'] + ' ' + m[dpc[i]].li_attr['class'];
+										}
+									}
+								}
+							}
+							if(t[c].a_attr !== undefined && typeof t[c].a_attr === 'object') {
+								for (k in t[c].a_attr) {
+									if (t[c].a_attr.hasOwnProperty(k)) {
+										if (k === 'id') {
+											continue;
+										}
+										else if (m[dpc[i]].a_attr[k] === undefined) {
+											m[dpc[i]].a_attr[k] = t[c].a_attr[k];
+										}
+										else if (k === 'href' && m[dpc[i]].a_attr[k] === '#') {
+											m[dpc[i]].a_attr['href'] = t[c].a_attr['href'];
+										}
+										else if (k === 'class') {
+											m[dpc[i]].a_attr['class'] = t[c].a_attr['class'] + ' ' + m[dpc[i]].a_attr['class'];
+										}
+									}
+								}
+							}
+						}
+						m[$.jstree.root].type = $.jstree.root;
+					}, this));
+			parent.bind.call(this);
+		};
+		this.get_json = function (obj, options, flat) {
+			var i, j,
+				m = this._model.data,
+				opt = options ? $.extend(true, {}, options, {no_id:false}) : {},
+				tmp = parent.get_json.call(this, obj, opt, flat);
+			if(tmp === false) { return false; }
+			if($.isArray(tmp)) {
+				for(i = 0, j = tmp.length; i < j; i++) {
+					tmp[i].type = tmp[i].id && m[tmp[i].id] && m[tmp[i].id].type ? m[tmp[i].id].type : "default";
+					if(options && options.no_id) {
+						delete tmp[i].id;
+						if(tmp[i].li_attr && tmp[i].li_attr.id) {
+							delete tmp[i].li_attr.id;
+						}
+						if(tmp[i].a_attr && tmp[i].a_attr.id) {
+							delete tmp[i].a_attr.id;
+						}
+					}
+				}
+			}
+			else {
+				tmp.type = tmp.id && m[tmp.id] && m[tmp.id].type ? m[tmp.id].type : "default";
+				if(options && options.no_id) {
+					tmp = this._delete_ids(tmp);
+				}
+			}
+			return tmp;
+		};
+		this._delete_ids = function (tmp) {
+			if($.isArray(tmp)) {
+				for(var i = 0, j = tmp.length; i < j; i++) {
+					tmp[i] = this._delete_ids(tmp[i]);
+				}
+				return tmp;
+			}
+			delete tmp.id;
+			if(tmp.li_attr && tmp.li_attr.id) {
+				delete tmp.li_attr.id;
+			}
+			if(tmp.a_attr && tmp.a_attr.id) {
+				delete tmp.a_attr.id;
+			}
+			if(tmp.children && $.isArray(tmp.children)) {
+				tmp.children = this._delete_ids(tmp.children);
+			}
+			return tmp;
+		};
+		this.check = function (chk, obj, par, pos, more) {
+			if(parent.check.call(this, chk, obj, par, pos, more) === false) { return false; }
+			obj = obj && obj.id ? obj : this.get_node(obj);
+			par = par && par.id ? par : this.get_node(par);
+			var m = obj && obj.id ? (more && more.origin ? more.origin : $.jstree.reference(obj.id)) : null, tmp, d, i, j;
+			m = m && m._model && m._model.data ? m._model.data : null;
+			switch(chk) {
+				case "create_node":
+				case "move_node":
+				case "copy_node":
+					if(chk !== 'move_node' || $.inArray(obj.id, par.children) === -1) {
+						tmp = this.get_rules(par);
+						if(tmp.max_children !== undefined && tmp.max_children !== -1 && tmp.max_children === par.children.length) {
+							this._data.core.last_error = { 'error' : 'check', 'plugin' : 'types', 'id' : 'types_01', 'reason' : 'max_children prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
+							return false;
+						}
+						if(tmp.valid_children !== undefined && tmp.valid_children !== -1 && $.inArray((obj.type || 'default'), tmp.valid_children) === -1) {
+							this._data.core.last_error = { 'error' : 'check', 'plugin' : 'types', 'id' : 'types_02', 'reason' : 'valid_children prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
+							return false;
+						}
+						if(m && obj.children_d && obj.parents) {
+							d = 0;
+							for(i = 0, j = obj.children_d.length; i < j; i++) {
+								d = Math.max(d, m[obj.children_d[i]].parents.length);
+							}
+							d = d - obj.parents.length + 1;
+						}
+						if(d <= 0 || d === undefined) { d = 1; }
+						do {
+							if(tmp.max_depth !== undefined && tmp.max_depth !== -1 && tmp.max_depth < d) {
+								this._data.core.last_error = { 'error' : 'check', 'plugin' : 'types', 'id' : 'types_03', 'reason' : 'max_depth prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
+								return false;
+							}
+							par = this.get_node(par.parent);
+							tmp = this.get_rules(par);
+							d++;
+						} while(par);
+					}
+					break;
+			}
+			return true;
+		};
+		/**
+		 * used to retrieve the type settings object for a node
+		 * @name get_rules(obj)
+		 * @param {mixed} obj the node to find the rules for
+		 * @return {Object}
+		 * @plugin types
+		 */
+		this.get_rules = function (obj) {
+			obj = this.get_node(obj);
+			if(!obj) { return false; }
+			var tmp = this.get_type(obj, true);
+			if(tmp.max_depth === undefined) { tmp.max_depth = -1; }
+			if(tmp.max_children === undefined) { tmp.max_children = -1; }
+			if(tmp.valid_children === undefined) { tmp.valid_children = -1; }
+			return tmp;
+		};
+		/**
+		 * used to retrieve the type string or settings object for a node
+		 * @name get_type(obj [, rules])
+		 * @param {mixed} obj the node to find the rules for
+		 * @param {Boolean} rules if set to `true` instead of a string the settings object will be returned
+		 * @return {String|Object}
+		 * @plugin types
+		 */
+		this.get_type = function (obj, rules) {
+			obj = this.get_node(obj);
+			return (!obj) ? false : ( rules ? $.extend({ 'type' : obj.type }, this.settings.types[obj.type]) : obj.type);
+		};
+		/**
+		 * used to change a node's type
+		 * @name set_type(obj, type)
+		 * @param {mixed} obj the node to change
+		 * @param {String} type the new type
+		 * @plugin types
+		 */
+		this.set_type = function (obj, type) {
+			var m = this._model.data, t, t1, t2, old_type, old_icon, k, d, a;
+			if($.isArray(obj)) {
+				obj = obj.slice();
+				for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+					this.set_type(obj[t1], type);
+				}
+				return true;
+			}
+			t = this.settings.types;
+			obj = this.get_node(obj);
+			if(!t[type] || !obj) { return false; }
+			d = this.get_node(obj, true);
+			if (d && d.length) {
+				a = d.children('.jstree-anchor');
+			}
+			old_type = obj.type;
+			old_icon = this.get_icon(obj);
+			obj.type = type;
+			if(old_icon === true || !t[old_type] || (t[old_type].icon !== undefined && old_icon === t[old_type].icon)) {
+				this.set_icon(obj, t[type].icon !== undefined ? t[type].icon : true);
+			}
+
+			// remove old type props
+			if(t[old_type] && t[old_type].li_attr !== undefined && typeof t[old_type].li_attr === 'object') {
+				for (k in t[old_type].li_attr) {
+					if (t[old_type].li_attr.hasOwnProperty(k)) {
+						if (k === 'id') {
+							continue;
+						}
+						else if (k === 'class') {
+							m[obj.id].li_attr['class'] = (m[obj.id].li_attr['class'] || '').replace(t[old_type].li_attr[k], '');
+							if (d) { d.removeClass(t[old_type].li_attr[k]); }
+						}
+						else if (m[obj.id].li_attr[k] === t[old_type].li_attr[k]) {
+							m[obj.id].li_attr[k] = null;
+							if (d) { d.removeAttr(k); }
+						}
+					}
+				}
+			}
+			if(t[old_type] && t[old_type].a_attr !== undefined && typeof t[old_type].a_attr === 'object') {
+				for (k in t[old_type].a_attr) {
+					if (t[old_type].a_attr.hasOwnProperty(k)) {
+						if (k === 'id') {
+							continue;
+						}
+						else if (k === 'class') {
+							m[obj.id].a_attr['class'] = (m[obj.id].a_attr['class'] || '').replace(t[old_type].a_attr[k], '');
+							if (a) { a.removeClass(t[old_type].a_attr[k]); }
+						}
+						else if (m[obj.id].a_attr[k] === t[old_type].a_attr[k]) {
+							if (k === 'href') {
+								m[obj.id].a_attr[k] = '#';
+								if (a) { a.attr('href', '#'); }
+							}
+							else {
+								delete m[obj.id].a_attr[k];
+								if (a) { a.removeAttr(k); }
+							}
+						}
+					}
+				}
+			}
+
+			// add new props
+			if(t[type].li_attr !== undefined && typeof t[type].li_attr === 'object') {
+				for (k in t[type].li_attr) {
+					if (t[type].li_attr.hasOwnProperty(k)) {
+						if (k === 'id') {
+							continue;
+						}
+						else if (m[obj.id].li_attr[k] === undefined) {
+							m[obj.id].li_attr[k] = t[type].li_attr[k];
+							if (d) {
+								if (k === 'class') {
+									d.addClass(t[type].li_attr[k]);
+								}
+								else {
+									d.attr(k, t[type].li_attr[k]);
+								}
+							}
+						}
+						else if (k === 'class') {
+							m[obj.id].li_attr['class'] = t[type].li_attr[k] + ' ' + m[obj.id].li_attr['class'];
+							if (d) { d.addClass(t[type].li_attr[k]); }
+						}
+					}
+				}
+			}
+			if(t[type].a_attr !== undefined && typeof t[type].a_attr === 'object') {
+				for (k in t[type].a_attr) {
+					if (t[type].a_attr.hasOwnProperty(k)) {
+						if (k === 'id') {
+							continue;
+						}
+						else if (m[obj.id].a_attr[k] === undefined) {
+							m[obj.id].a_attr[k] = t[type].a_attr[k];
+							if (a) {
+								if (k === 'class') {
+									a.addClass(t[type].a_attr[k]);
+								}
+								else {
+									a.attr(k, t[type].a_attr[k]);
+								}
+							}
+						}
+						else if (k === 'href' && m[obj.id].a_attr[k] === '#') {
+							m[obj.id].a_attr['href'] = t[type].a_attr['href'];
+							if (a) { a.attr('href', t[type].a_attr['href']); }
+						}
+						else if (k === 'class') {
+							m[obj.id].a_attr['class'] = t[type].a_attr['class'] + ' ' + m[obj.id].a_attr['class'];
+							if (a) { a.addClass(t[type].a_attr[k]); }
+						}
+					}
+				}
+			}
+
+			return true;
+		};
+	};
+	// include the types plugin by default
+	// $.jstree.defaults.plugins.push("types");
+
+
+/**
+ * ### Unique plugin
+ *
+ * Enforces that no nodes with the same name can coexist as siblings.
+ */
+
+	/**
+	 * stores all defaults for the unique plugin
+	 * @name $.jstree.defaults.unique
+	 * @plugin unique
+	 */
+	$.jstree.defaults.unique = {
+		/**
+		 * Indicates if the comparison should be case sensitive. Default is `false`.
+		 * @name $.jstree.defaults.unique.case_sensitive
+		 * @plugin unique
+		 */
+		case_sensitive : false,
+		/**
+		 * Indicates if white space should be trimmed before the comparison. Default is `false`.
+		 * @name $.jstree.defaults.unique.trim_whitespace
+		 * @plugin unique
+		 */
+		trim_whitespace : false,
+		/**
+		 * A callback executed in the instance's scope when a new node is created and the name is already taken, the two arguments are the conflicting name and the counter. The default will produce results like `New node (2)`.
+		 * @name $.jstree.defaults.unique.duplicate
+		 * @plugin unique
+		 */
+		duplicate : function (name, counter) {
+			return name + ' (' + counter + ')';
+		}
+	};
+
+	$.jstree.plugins.unique = function (options, parent) {
+		this.check = function (chk, obj, par, pos, more) {
+			if(parent.check.call(this, chk, obj, par, pos, more) === false) { return false; }
+			obj = obj && obj.id ? obj : this.get_node(obj);
+			par = par && par.id ? par : this.get_node(par);
+			if(!par || !par.children) { return true; }
+			var n = chk === "rename_node" ? pos : obj.text,
+				c = [],
+				s = this.settings.unique.case_sensitive,
+				w = this.settings.unique.trim_whitespace,
+				m = this._model.data, i, j, t;
+			for(i = 0, j = par.children.length; i < j; i++) {
+				t = m[par.children[i]].text;
+				if (!s) {
+					t = t.toLowerCase();
+				}
+				if (w) {
+					t = t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
+				}
+				c.push(t);
+			}
+			if(!s) { n = n.toLowerCase(); }
+			if (w) { n = n.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); }
+			switch(chk) {
+				case "delete_node":
+					return true;
+				case "rename_node":
+					t = obj.text || '';
+					if (!s) {
+						t = t.toLowerCase();
+					}
+					if (w) {
+						t = t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
+					}
+					i = ($.inArray(n, c) === -1 || (obj.text && t === n));
+					if(!i) {
+						this._data.core.last_error = { 'error' : 'check', 'plugin' : 'unique', 'id' : 'unique_01', 'reason' : 'Child with name ' + n + ' already exists. Preventing: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
+					}
+					return i;
+				case "create_node":
+					i = ($.inArray(n, c) === -1);
+					if(!i) {
+						this._data.core.last_error = { 'error' : 'check', 'plugin' : 'unique', 'id' : 'unique_04', 'reason' : 'Child with name ' + n + ' already exists. Preventing: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
+					}
+					return i;
+				case "copy_node":
+					i = ($.inArray(n, c) === -1);
+					if(!i) {
+						this._data.core.last_error = { 'error' : 'check', 'plugin' : 'unique', 'id' : 'unique_02', 'reason' : 'Child with name ' + n + ' already exists. Preventing: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
+					}
+					return i;
+				case "move_node":
+					i = ( (obj.parent === par.id && (!more || !more.is_multi)) || $.inArray(n, c) === -1);
+					if(!i) {
+						this._data.core.last_error = { 'error' : 'check', 'plugin' : 'unique', 'id' : 'unique_03', 'reason' : 'Child with name ' + n + ' already exists. Preventing: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
+					}
+					return i;
+			}
+			return true;
+		};
+		this.create_node = function (par, node, pos, callback, is_loaded) {
+			if(!node || node.text === undefined) {
+				if(par === null) {
+					par = $.jstree.root;
+				}
+				par = this.get_node(par);
+				if(!par) {
+					return parent.create_node.call(this, par, node, pos, callback, is_loaded);
+				}
+				pos = pos === undefined ? "last" : pos;
+				if(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) {
+					return parent.create_node.call(this, par, node, pos, callback, is_loaded);
+				}
+				if(!node) { node = {}; }
+				var tmp, n, dpc, i, j, m = this._model.data, s = this.settings.unique.case_sensitive, w = this.settings.unique.trim_whitespace, cb = this.settings.unique.duplicate, t;
+				n = tmp = this.get_string('New node');
+				dpc = [];
+				for(i = 0, j = par.children.length; i < j; i++) {
+					t = m[par.children[i]].text;
+					if (!s) {
+						t = t.toLowerCase();
+					}
+					if (w) {
+						t = t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
+					}
+					dpc.push(t);
+				}
+				i = 1;
+				t = n;
+				if (!s) {
+					t = t.toLowerCase();
+				}
+				if (w) {
+					t = t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
+				}
+				while($.inArray(t, dpc) !== -1) {
+					n = cb.call(this, tmp, (++i)).toString();
+					t = n;
+					if (!s) {
+						t = t.toLowerCase();
+					}
+					if (w) {
+						t = t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
+					}
+				}
+				node.text = n;
+			}
+			return parent.create_node.call(this, par, node, pos, callback, is_loaded);
+		};
+	};
+
+	// include the unique plugin by default
+	// $.jstree.defaults.plugins.push("unique");
+
+
+/**
+ * ### Wholerow plugin
+ *
+ * Makes each node appear block level. Making selection easier. May cause slow down for large trees in old browsers.
+ */
+
+	var div = document.createElement('DIV');
+	div.setAttribute('unselectable','on');
+	div.setAttribute('role','presentation');
+	div.className = 'jstree-wholerow';
+	div.innerHTML = '&#160;';
+	$.jstree.plugins.wholerow = function (options, parent) {
+		this.bind = function () {
+			parent.bind.call(this);
+
+			this.element
+				.on('ready.jstree set_state.jstree', $.proxy(function () {
+						this.hide_dots();
+					}, this))
+				.on("init.jstree loading.jstree ready.jstree", $.proxy(function () {
+						//div.style.height = this._data.core.li_height + 'px';
+						this.get_container_ul().addClass('jstree-wholerow-ul');
+					}, this))
+				.on("deselect_all.jstree", $.proxy(function (e, data) {
+						this.element.find('.jstree-wholerow-clicked').removeClass('jstree-wholerow-clicked');
+					}, this))
+				.on("changed.jstree", $.proxy(function (e, data) {
+						this.element.find('.jstree-wholerow-clicked').removeClass('jstree-wholerow-clicked');
+						var tmp = false, i, j;
+						for(i = 0, j = data.selected.length; i < j; i++) {
+							tmp = this.get_node(data.selected[i], true);
+							if(tmp && tmp.length) {
+								tmp.children('.jstree-wholerow').addClass('jstree-wholerow-clicked');
+							}
+						}
+					}, this))
+				.on("open_node.jstree", $.proxy(function (e, data) {
+						this.get_node(data.node, true).find('.jstree-clicked').parent().children('.jstree-wholerow').addClass('jstree-wholerow-clicked');
+					}, this))
+				.on("hover_node.jstree dehover_node.jstree", $.proxy(function (e, data) {
+						if(e.type === "hover_node" && this.is_disabled(data.node)) { return; }
+						this.get_node(data.node, true).children('.jstree-wholerow')[e.type === "hover_node"?"addClass":"removeClass"]('jstree-wholerow-hovered');
+					}, this))
+				.on("contextmenu.jstree", ".jstree-wholerow", $.proxy(function (e) {
+						if (this._data.contextmenu) {
+							e.preventDefault();
+							var tmp = $.Event('contextmenu', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey, pageX : e.pageX, pageY : e.pageY });
+							$(e.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(tmp);
+						}
+					}, this))
+				/*!
+				.on("mousedown.jstree touchstart.jstree", ".jstree-wholerow", function (e) {
+						if(e.target === e.currentTarget) {
+							var a = $(e.currentTarget).closest(".jstree-node").children(".jstree-anchor");
+							e.target = a[0];
+							a.trigger(e);
+						}
+					})
+				*/
+				.on("click.jstree", ".jstree-wholerow", function (e) {
+						e.stopImmediatePropagation();
+						var tmp = $.Event('click', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey });
+						$(e.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(tmp).focus();
+					})
+				.on("dblclick.jstree", ".jstree-wholerow", function (e) {
+						e.stopImmediatePropagation();
+						var tmp = $.Event('dblclick', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey });
+						$(e.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(tmp).focus();
+					})
+				.on("click.jstree", ".jstree-leaf > .jstree-ocl", $.proxy(function (e) {
+						e.stopImmediatePropagation();
+						var tmp = $.Event('click', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey });
+						$(e.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(tmp).focus();
+					}, this))
+				.on("mouseover.jstree", ".jstree-wholerow, .jstree-icon", $.proxy(function (e) {
+						e.stopImmediatePropagation();
+						if(!this.is_disabled(e.currentTarget)) {
+							this.hover_node(e.currentTarget);
+						}
+						return false;
+					}, this))
+				.on("mouseleave.jstree", ".jstree-node", $.proxy(function (e) {
+						this.dehover_node(e.currentTarget);
+					}, this));
+		};
+		this.teardown = function () {
+			if(this.settings.wholerow) {
+				this.element.find(".jstree-wholerow").remove();
+			}
+			parent.teardown.call(this);
+		};
+		this.redraw_node = function(obj, deep, callback, force_render) {
+			obj = parent.redraw_node.apply(this, arguments);
+			if(obj) {
+				var tmp = div.cloneNode(true);
+				//tmp.style.height = this._data.core.li_height + 'px';
+				if($.inArray(obj.id, this._data.core.selected) !== -1) { tmp.className += ' jstree-wholerow-clicked'; }
+				if(this._data.core.focused && this._data.core.focused === obj.id) { tmp.className += ' jstree-wholerow-hovered'; }
+				obj.insertBefore(tmp, obj.childNodes[0]);
+			}
+			return obj;
+		};
+	};
+	// include the wholerow plugin by default
+	// $.jstree.defaults.plugins.push("wholerow");
+	if(document.registerElement && Object && Object.create) {
+		var proto = Object.create(HTMLElement.prototype);
+		proto.createdCallback = function () {
+			var c = { core : {}, plugins : [] }, i;
+			for(i in $.jstree.plugins) {
+				if($.jstree.plugins.hasOwnProperty(i) && this.attributes[i]) {
+					c.plugins.push(i);
+					if(this.getAttribute(i) && JSON.parse(this.getAttribute(i))) {
+						c[i] = JSON.parse(this.getAttribute(i));
+					}
+				}
+			}
+			for(i in $.jstree.defaults.core) {
+				if($.jstree.defaults.core.hasOwnProperty(i) && this.attributes[i]) {
+					c.core[i] = JSON.parse(this.getAttribute(i)) || this.getAttribute(i);
+				}
+			}
+			$(this).jstree(c);
+		};
+		// proto.attributeChangedCallback = function (name, previous, value) { };
+		try {
+			document.registerElement("vakata-jstree", { prototype: proto });
+		} catch(ignore) { }
+	}
+
+}));
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vakata-jstree-3.3.5/dist/jstree.min.js	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,6 @@
+/*! jsTree - v3.3.5 - 2018-01-02 - (MIT) */
+!function(a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):"undefined"!=typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a,b){"use strict";if(!a.jstree){var c=0,d=!1,e=!1,f=!1,g=[],h=a("script:last").attr("src"),i=window.document;a.jstree={version:"3.3.5",defaults:{plugins:[]},plugins:{},path:h&&-1!==h.indexOf("/")?h.replace(/\/[^\/]+$/,""):"",idregex:/[\\:&!^|()\[\]<>@*'+~#";.,=\- \/${}%?`]/g,root:"#"},a.jstree.create=function(b,d){var e=new a.jstree.core(++c),f=d;return d=a.extend(!0,{},a.jstree.defaults,d),f&&f.plugins&&(d.plugins=f.plugins),a.each(d.plugins,function(a,b){"core"!==a&&(e=e.plugin(b,d[b]))}),a(b).data("jstree",e),e.init(b,d),e},a.jstree.destroy=function(){a(".jstree:jstree").jstree("destroy"),a(i).off(".jstree")},a.jstree.core=function(a){this._id=a,this._cnt=0,this._wrk=null,this._data={core:{themes:{name:!1,dots:!1,icons:!1,ellipsis:!1},selected:[],last_error:{},working:!1,worker_queue:[],focused:null}}},a.jstree.reference=function(b){var c=null,d=null;if(!b||!b.id||b.tagName&&b.nodeType||(b=b.id),!d||!d.length)try{d=a(b)}catch(e){}if(!d||!d.length)try{d=a("#"+b.replace(a.jstree.idregex,"\\$&"))}catch(e){}return d&&d.length&&(d=d.closest(".jstree")).length&&(d=d.data("jstree"))?c=d:a(".jstree").each(function(){var d=a(this).data("jstree");return d&&d._model.data[b]?(c=d,!1):void 0}),c},a.fn.jstree=function(c){var d="string"==typeof c,e=Array.prototype.slice.call(arguments,1),f=null;return c!==!0||this.length?(this.each(function(){var g=a.jstree.reference(this),h=d&&g?g[c]:null;return f=d&&h?h.apply(g,e):null,g||d||c!==b&&!a.isPlainObject(c)||a.jstree.create(this,c),(g&&!d||c===!0)&&(f=g||!1),null!==f&&f!==b?!1:void 0}),null!==f&&f!==b?f:this):!1},a.expr.pseudos.jstree=a.expr.createPseudo(function(c){return function(c){return a(c).hasClass("jstree")&&a(c).data("jstree")!==b}}),a.jstree.defaults.core={data:!1,strings:!1,check_callback:!1,error:a.noop,animation:200,multiple:!0,themes:{name:!1,url:!1,dir:!1,dots:!0,icons:!0,ellipsis:!1,stripes:!1,variant:!1,responsive:!1},expand_selected_onload:!0,worker:!0,force_text:!1,dblclick_toggle:!0,loaded_state:!1,restore_focus:!0,keyboard:{"ctrl-space":function(b){b.type="click",a(b.currentTarget).trigger(b)},enter:function(b){b.type="click",a(b.currentTarget).trigger(b)},left:function(b){if(b.preventDefault(),this.is_open(b.currentTarget))this.close_node(b.currentTarget);else{var c=this.get_parent(b.currentTarget);c&&c.id!==a.jstree.root&&this.get_node(c,!0).children(".jstree-anchor").focus()}},up:function(a){a.preventDefault();var b=this.get_prev_dom(a.currentTarget);b&&b.length&&b.children(".jstree-anchor").focus()},right:function(b){if(b.preventDefault(),this.is_closed(b.currentTarget))this.open_node(b.currentTarget,function(a){this.get_node(a,!0).children(".jstree-anchor").focus()});else if(this.is_open(b.currentTarget)){var c=this.get_node(b.currentTarget,!0).children(".jstree-children")[0];c&&a(this._firstChild(c)).children(".jstree-anchor").focus()}},down:function(a){a.preventDefault();var b=this.get_next_dom(a.currentTarget);b&&b.length&&b.children(".jstree-anchor").focus()},"*":function(a){this.open_all()},home:function(b){b.preventDefault();var c=this._firstChild(this.get_container_ul()[0]);c&&a(c).children(".jstree-anchor").filter(":visible").focus()},end:function(a){a.preventDefault(),this.element.find(".jstree-anchor").filter(":visible").last().focus()},f2:function(a){a.preventDefault(),this.edit(a.currentTarget)}}},a.jstree.core.prototype={plugin:function(b,c){var d=a.jstree.plugins[b];return d?(this._data[b]={},d.prototype=this,new d(c,this)):this},init:function(b,c){this._model={data:{},changed:[],force_full_redraw:!1,redraw_timeout:!1,default_state:{loaded:!0,opened:!1,selected:!1,disabled:!1}},this._model.data[a.jstree.root]={id:a.jstree.root,parent:null,parents:[],children:[],children_d:[],state:{loaded:!1}},this.element=a(b).addClass("jstree jstree-"+this._id),this.settings=c,this._data.core.ready=!1,this._data.core.loaded=!1,this._data.core.rtl="rtl"===this.element.css("direction"),this.element[this._data.core.rtl?"addClass":"removeClass"]("jstree-rtl"),this.element.attr("role","tree"),this.settings.core.multiple&&this.element.attr("aria-multiselectable",!0),this.element.attr("tabindex")||this.element.attr("tabindex","0"),this.bind(),this.trigger("init"),this._data.core.original_container_html=this.element.find(" > ul > li").clone(!0),this._data.core.original_container_html.find("li").addBack().contents().filter(function(){return 3===this.nodeType&&(!this.nodeValue||/^\s+$/.test(this.nodeValue))}).remove(),this.element.html("<ul class='jstree-container-ul jstree-children' role='group'><li id='j"+this._id+"_loading' class='jstree-initial-node jstree-loading jstree-leaf jstree-last' role='tree-item'><i class='jstree-icon jstree-ocl'></i><a class='jstree-anchor' href='#'><i class='jstree-icon jstree-themeicon-hidden'></i>"+this.get_string("Loading ...")+"</a></li></ul>"),this.element.attr("aria-activedescendant","j"+this._id+"_loading"),this._data.core.li_height=this.get_container_ul().children("li").first().outerHeight()||24,this._data.core.node=this._create_prototype_node(),this.trigger("loading"),this.load_node(a.jstree.root)},destroy:function(a){if(this.trigger("destroy"),this._wrk)try{window.URL.revokeObjectURL(this._wrk),this._wrk=null}catch(b){}a||this.element.empty(),this.teardown()},_create_prototype_node:function(){var a=i.createElement("LI"),b,c;return a.setAttribute("role","treeitem"),b=i.createElement("I"),b.className="jstree-icon jstree-ocl",b.setAttribute("role","presentation"),a.appendChild(b),b=i.createElement("A"),b.className="jstree-anchor",b.setAttribute("href","#"),b.setAttribute("tabindex","-1"),c=i.createElement("I"),c.className="jstree-icon jstree-themeicon",c.setAttribute("role","presentation"),b.appendChild(c),a.appendChild(b),b=c=null,a},_kbevent_to_func:function(a){var b={8:"Backspace",9:"Tab",13:"Return",19:"Pause",27:"Esc",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"Left",38:"Up",39:"Right",40:"Down",44:"Print",45:"Insert",46:"Delete",96:"Numpad0",97:"Numpad1",98:"Numpad2",99:"Numpad3",100:"Numpad4",101:"Numpad5",102:"Numpad6",103:"Numpad7",104:"Numpad8",105:"Numpad9","-13":"NumpadEnter",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"Numlock",145:"Scrolllock",16:"Shift",17:"Ctrl",18:"Alt",48:"0",49:"1",50:"2",51:"3",52:"4",53:"5",54:"6",55:"7",56:"8",57:"9",59:";",61:"=",65:"a",66:"b",67:"c",68:"d",69:"e",70:"f",71:"g",72:"h",73:"i",74:"j",75:"k",76:"l",77:"m",78:"n",79:"o",80:"p",81:"q",82:"r",83:"s",84:"t",85:"u",86:"v",87:"w",88:"x",89:"y",90:"z",107:"+",109:"-",110:".",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'",111:"/",106:"*",173:"-"},c=[];a.ctrlKey&&c.push("ctrl"),a.altKey&&c.push("alt"),a.shiftKey&&c.push("shift"),c.push(b[a.which]||a.which),c=c.sort().join("-").toLowerCase();var d=this.settings.core.keyboard,e,f;for(e in d)if(d.hasOwnProperty(e)&&(f=e,"-"!==f&&"+"!==f&&(f=f.replace("--","-MINUS").replace("+-","-MINUS").replace("++","-PLUS").replace("-+","-PLUS"),f=f.split(/-|\+/).sort().join("-").replace("MINUS","-").replace("PLUS","+").toLowerCase()),f===c))return d[e];return null},teardown:function(){this.unbind(),this.element.removeClass("jstree").removeData("jstree").find("[class^='jstree']").addBack().attr("class",function(){return this.className.replace(/jstree[^ ]*|$/gi,"")}),this.element=null},bind:function(){var b="",c=null,d=0;this.element.on("dblclick.jstree",function(a){if(a.target.tagName&&"input"===a.target.tagName.toLowerCase())return!0;if(i.selection&&i.selection.empty)i.selection.empty();else if(window.getSelection){var b=window.getSelection();try{b.removeAllRanges(),b.collapse()}catch(c){}}}).on("mousedown.jstree",a.proxy(function(a){a.target===this.element[0]&&(a.preventDefault(),d=+new Date)},this)).on("mousedown.jstree",".jstree-ocl",function(a){a.preventDefault()}).on("click.jstree",".jstree-ocl",a.proxy(function(a){this.toggle_node(a.target)},this)).on("dblclick.jstree",".jstree-anchor",a.proxy(function(a){return a.target.tagName&&"input"===a.target.tagName.toLowerCase()?!0:void(this.settings.core.dblclick_toggle&&this.toggle_node(a.target))},this)).on("click.jstree",".jstree-anchor",a.proxy(function(b){b.preventDefault(),b.currentTarget!==i.activeElement&&a(b.currentTarget).focus(),this.activate_node(b.currentTarget,b)},this)).on("keydown.jstree",".jstree-anchor",a.proxy(function(a){if(a.target.tagName&&"input"===a.target.tagName.toLowerCase())return!0;this._data.core.rtl&&(37===a.which?a.which=39:39===a.which&&(a.which=37));var b=this._kbevent_to_func(a);if(b){var c=b.call(this,a);if(c===!1||c===!0)return c}},this)).on("load_node.jstree",a.proxy(function(b,c){c.status&&(c.node.id!==a.jstree.root||this._data.core.loaded||(this._data.core.loaded=!0,this._firstChild(this.get_container_ul()[0])&&this.element.attr("aria-activedescendant",this._firstChild(this.get_container_ul()[0]).id),this.trigger("loaded")),this._data.core.ready||setTimeout(a.proxy(function(){if(this.element&&!this.get_container_ul().find(".jstree-loading").length){if(this._data.core.ready=!0,this._data.core.selected.length){if(this.settings.core.expand_selected_onload){var b=[],c,d;for(c=0,d=this._data.core.selected.length;d>c;c++)b=b.concat(this._model.data[this._data.core.selected[c]].parents);for(b=a.vakata.array_unique(b),c=0,d=b.length;d>c;c++)this.open_node(b[c],!1,0)}this.trigger("changed",{action:"ready",selected:this._data.core.selected})}this.trigger("ready")}},this),0))},this)).on("keypress.jstree",a.proxy(function(d){if(d.target.tagName&&"input"===d.target.tagName.toLowerCase())return!0;c&&clearTimeout(c),c=setTimeout(function(){b=""},500);var e=String.fromCharCode(d.which).toLowerCase(),f=this.element.find(".jstree-anchor").filter(":visible"),g=f.index(i.activeElement)||0,h=!1;if(b+=e,b.length>1){if(f.slice(g).each(a.proxy(function(c,d){return 0===a(d).text().toLowerCase().indexOf(b)?(a(d).focus(),h=!0,!1):void 0},this)),h)return;if(f.slice(0,g).each(a.proxy(function(c,d){return 0===a(d).text().toLowerCase().indexOf(b)?(a(d).focus(),h=!0,!1):void 0},this)),h)return}if(new RegExp("^"+e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")+"+$").test(b)){if(f.slice(g+1).each(a.proxy(function(b,c){return a(c).text().toLowerCase().charAt(0)===e?(a(c).focus(),h=!0,!1):void 0},this)),h)return;if(f.slice(0,g+1).each(a.proxy(function(b,c){return a(c).text().toLowerCase().charAt(0)===e?(a(c).focus(),h=!0,!1):void 0},this)),h)return}},this)).on("init.jstree",a.proxy(function(){var a=this.settings.core.themes;this._data.core.themes.dots=a.dots,this._data.core.themes.stripes=a.stripes,this._data.core.themes.icons=a.icons,this._data.core.themes.ellipsis=a.ellipsis,this.set_theme(a.name||"default",a.url),this.set_theme_variant(a.variant)},this)).on("loading.jstree",a.proxy(function(){this[this._data.core.themes.dots?"show_dots":"hide_dots"](),this[this._data.core.themes.icons?"show_icons":"hide_icons"](),this[this._data.core.themes.stripes?"show_stripes":"hide_stripes"](),this[this._data.core.themes.ellipsis?"show_ellipsis":"hide_ellipsis"]()},this)).on("blur.jstree",".jstree-anchor",a.proxy(function(b){this._data.core.focused=null,a(b.currentTarget).filter(".jstree-hovered").mouseleave(),this.element.attr("tabindex","0")},this)).on("focus.jstree",".jstree-anchor",a.proxy(function(b){var c=this.get_node(b.currentTarget);c&&c.id&&(this._data.core.focused=c.id),this.element.find(".jstree-hovered").not(b.currentTarget).mouseleave(),a(b.currentTarget).mouseenter(),this.element.attr("tabindex","-1")},this)).on("focus.jstree",a.proxy(function(){if(+new Date-d>500&&!this._data.core.focused&&this.settings.core.restore_focus){d=0;var a=this.get_node(this.element.attr("aria-activedescendant"),!0);a&&a.find("> .jstree-anchor").focus()}},this)).on("mouseenter.jstree",".jstree-anchor",a.proxy(function(a){this.hover_node(a.currentTarget)},this)).on("mouseleave.jstree",".jstree-anchor",a.proxy(function(a){this.dehover_node(a.currentTarget)},this))},unbind:function(){this.element.off(".jstree"),a(i).off(".jstree-"+this._id)},trigger:function(a,b){b||(b={}),b.instance=this,this.element.triggerHandler(a.replace(".jstree","")+".jstree",b)},get_container:function(){return this.element},get_container_ul:function(){return this.element.children(".jstree-children").first()},get_string:function(b){var c=this.settings.core.strings;return a.isFunction(c)?c.call(this,b):c&&c[b]?c[b]:b},_firstChild:function(a){a=a?a.firstChild:null;while(null!==a&&1!==a.nodeType)a=a.nextSibling;return a},_nextSibling:function(a){a=a?a.nextSibling:null;while(null!==a&&1!==a.nodeType)a=a.nextSibling;return a},_previousSibling:function(a){a=a?a.previousSibling:null;while(null!==a&&1!==a.nodeType)a=a.previousSibling;return a},get_node:function(b,c){b&&b.id&&(b=b.id);var d;try{if(this._model.data[b])b=this._model.data[b];else if("string"==typeof b&&this._model.data[b.replace(/^#/,"")])b=this._model.data[b.replace(/^#/,"")];else if("string"==typeof b&&(d=a("#"+b.replace(a.jstree.idregex,"\\$&"),this.element)).length&&this._model.data[d.closest(".jstree-node").attr("id")])b=this._model.data[d.closest(".jstree-node").attr("id")];else if((d=a(b,this.element)).length&&this._model.data[d.closest(".jstree-node").attr("id")])b=this._model.data[d.closest(".jstree-node").attr("id")];else{if(!(d=a(b,this.element)).length||!d.hasClass("jstree"))return!1;b=this._model.data[a.jstree.root]}return c&&(b=b.id===a.jstree.root?this.element:a("#"+b.id.replace(a.jstree.idregex,"\\$&"),this.element)),b}catch(e){return!1}},get_path:function(b,c,d){if(b=b.parents?b:this.get_node(b),!b||b.id===a.jstree.root||!b.parents)return!1;var e,f,g=[];for(g.push(d?b.id:b.text),e=0,f=b.parents.length;f>e;e++)g.push(d?b.parents[e]:this.get_text(b.parents[e]));return g=g.reverse().slice(1),c?g.join(c):g},get_next_dom:function(b,c){var d;if(b=this.get_node(b,!0),b[0]===this.element[0]){d=this._firstChild(this.get_container_ul()[0]);while(d&&0===d.offsetHeight)d=this._nextSibling(d);return d?a(d):!1}if(!b||!b.length)return!1;if(c){d=b[0];do d=this._nextSibling(d);while(d&&0===d.offsetHeight);return d?a(d):!1}if(b.hasClass("jstree-open")){d=this._firstChild(b.children(".jstree-children")[0]);while(d&&0===d.offsetHeight)d=this._nextSibling(d);if(null!==d)return a(d)}d=b[0];do d=this._nextSibling(d);while(d&&0===d.offsetHeight);return null!==d?a(d):b.parentsUntil(".jstree",".jstree-node").nextAll(".jstree-node:visible").first()},get_prev_dom:function(b,c){var d;if(b=this.get_node(b,!0),b[0]===this.element[0]){d=this.get_container_ul()[0].lastChild;while(d&&0===d.offsetHeight)d=this._previousSibling(d);return d?a(d):!1}if(!b||!b.length)return!1;if(c){d=b[0];do d=this._previousSibling(d);while(d&&0===d.offsetHeight);return d?a(d):!1}d=b[0];do d=this._previousSibling(d);while(d&&0===d.offsetHeight);if(null!==d){b=a(d);while(b.hasClass("jstree-open"))b=b.children(".jstree-children").first().children(".jstree-node:visible:last");return b}return d=b[0].parentNode.parentNode,d&&d.className&&-1!==d.className.indexOf("jstree-node")?a(d):!1},get_parent:function(b){return b=this.get_node(b),b&&b.id!==a.jstree.root?b.parent:!1},get_children_dom:function(a){return a=this.get_node(a,!0),a[0]===this.element[0]?this.get_container_ul().children(".jstree-node"):a&&a.length?a.children(".jstree-children").children(".jstree-node"):!1},is_parent:function(a){return a=this.get_node(a),a&&(a.state.loaded===!1||a.children.length>0)},is_loaded:function(a){return a=this.get_node(a),a&&a.state.loaded},is_loading:function(a){return a=this.get_node(a),a&&a.state&&a.state.loading},is_open:function(a){return a=this.get_node(a),a&&a.state.opened},is_closed:function(a){return a=this.get_node(a),a&&this.is_parent(a)&&!a.state.opened},is_leaf:function(a){return!this.is_parent(a)},load_node:function(b,c){var d,e,f,g,h;if(a.isArray(b))return this._load_nodes(b.slice(),c),!0;if(b=this.get_node(b),!b)return c&&c.call(this,b,!1),!1;if(b.state.loaded){for(b.state.loaded=!1,f=0,g=b.parents.length;g>f;f++)this._model.data[b.parents[f]].children_d=a.vakata.array_filter(this._model.data[b.parents[f]].children_d,function(c){return-1===a.inArray(c,b.children_d)});for(d=0,e=b.children_d.length;e>d;d++)this._model.data[b.children_d[d]].state.selected&&(h=!0),delete this._model.data[b.children_d[d]];h&&(this._data.core.selected=a.vakata.array_filter(this._data.core.selected,function(c){return-1===a.inArray(c,b.children_d)})),b.children=[],b.children_d=[],h&&this.trigger("changed",{action:"load_node",node:b,selected:this._data.core.selected})}return b.state.failed=!1,b.state.loading=!0,this.get_node(b,!0).addClass("jstree-loading").attr("aria-busy",!0),this._load_node(b,a.proxy(function(a){b=this._model.data[b.id],b.state.loading=!1,b.state.loaded=a,b.state.failed=!b.state.loaded;var d=this.get_node(b,!0),e=0,f=0,g=this._model.data,h=!1;for(e=0,f=b.children.length;f>e;e++)if(g[b.children[e]]&&!g[b.children[e]].state.hidden){h=!0;break}b.state.loaded&&d&&d.length&&(d.removeClass("jstree-closed jstree-open jstree-leaf"),h?"#"!==b.id&&d.addClass(b.state.opened?"jstree-open":"jstree-closed"):d.addClass("jstree-leaf")),d.removeClass("jstree-loading").attr("aria-busy",!1),this.trigger("load_node",{node:b,status:a}),c&&c.call(this,b,a)},this)),!0},_load_nodes:function(a,b,c,d){var e=!0,f=function(){this._load_nodes(a,b,!0)},g=this._model.data,h,i,j=[];for(h=0,i=a.length;i>h;h++)g[a[h]]&&(!g[a[h]].state.loaded&&!g[a[h]].state.failed||!c&&d)&&(this.is_loading(a[h])||this.load_node(a[h],f),e=!1);if(e){for(h=0,i=a.length;i>h;h++)g[a[h]]&&g[a[h]].state.loaded&&j.push(a[h]);b&&!b.done&&(b.call(this,j),b.done=!0)}},load_all:function(b,c){if(b||(b=a.jstree.root),b=this.get_node(b),!b)return!1;var d=[],e=this._model.data,f=e[b.id].children_d,g,h;for(b.state&&!b.state.loaded&&d.push(b.id),g=0,h=f.length;h>g;g++)e[f[g]]&&e[f[g]].state&&!e[f[g]].state.loaded&&d.push(f[g]);d.length?this._load_nodes(d,function(){this.load_all(b,c)}):(c&&c.call(this,b),this.trigger("load_all",{node:b}))},_load_node:function(b,c){var d=this.settings.core.data,e,f=function g(){return 3!==this.nodeType&&8!==this.nodeType};return d?a.isFunction(d)?d.call(this,b,a.proxy(function(d){d===!1?c.call(this,!1):this["string"==typeof d?"_append_html_data":"_append_json_data"](b,"string"==typeof d?a(a.parseHTML(d)).filter(f):d,function(a){c.call(this,a)})},this)):"object"==typeof d?d.url?(d=a.extend(!0,{},d),a.isFunction(d.url)&&(d.url=d.url.call(this,b)),a.isFunction(d.data)&&(d.data=d.data.call(this,b)),a.ajax(d).done(a.proxy(function(d,e,g){var h=g.getResponseHeader("Content-Type");return h&&-1!==h.indexOf("json")||"object"==typeof d?this._append_json_data(b,d,function(a){c.call(this,a)}):h&&-1!==h.indexOf("html")||"string"==typeof d?this._append_html_data(b,a(a.parseHTML(d)).filter(f),function(a){c.call(this,a)}):(this._data.core.last_error={error:"ajax",plugin:"core",id:"core_04",reason:"Could not load node",data:JSON.stringify({id:b.id,xhr:g})},this.settings.core.error.call(this,this._data.core.last_error),c.call(this,!1))},this)).fail(a.proxy(function(a){this._data.core.last_error={error:"ajax",plugin:"core",id:"core_04",reason:"Could not load node",data:JSON.stringify({id:b.id,xhr:a})},c.call(this,!1),this.settings.core.error.call(this,this._data.core.last_error)},this))):(e=a.isArray(d)?a.extend(!0,[],d):a.isPlainObject(d)?a.extend(!0,{},d):d,b.id===a.jstree.root?this._append_json_data(b,e,function(a){c.call(this,a)}):(this._data.core.last_error={error:"nodata",plugin:"core",id:"core_05",reason:"Could not load node",data:JSON.stringify({id:b.id})},this.settings.core.error.call(this,this._data.core.last_error),c.call(this,!1))):"string"==typeof d?b.id===a.jstree.root?this._append_html_data(b,a(a.parseHTML(d)).filter(f),function(a){c.call(this,a)}):(this._data.core.last_error={error:"nodata",plugin:"core",id:"core_06",reason:"Could not load node",data:JSON.stringify({id:b.id})},this.settings.core.error.call(this,this._data.core.last_error),c.call(this,!1)):c.call(this,!1):b.id===a.jstree.root?this._append_html_data(b,this._data.core.original_container_html.clone(!0),function(a){c.call(this,a)}):c.call(this,!1)},_node_changed:function(b){b=this.get_node(b),b&&-1===a.inArray(b.id,this._model.changed)&&this._model.changed.push(b.id)},_append_html_data:function(b,c,d){b=this.get_node(b),b.children=[],b.children_d=[];var e=c.is("ul")?c.children():c,f=b.id,g=[],h=[],i=this._model.data,j=i[f],k=this._data.core.selected.length,l,m,n;for(e.each(a.proxy(function(b,c){l=this._parse_model_from_html(a(c),f,j.parents.concat()),l&&(g.push(l),h.push(l),i[l].children_d.length&&(h=h.concat(i[l].children_d)))},this)),j.children=g,j.children_d=h,m=0,n=j.parents.length;n>m;m++)i[j.parents[m]].children_d=i[j.parents[m]].children_d.concat(h);this.trigger("model",{nodes:h,parent:f}),f!==a.jstree.root?(this._node_changed(f),this.redraw()):(this.get_container_ul().children(".jstree-initial-node").remove(),this.redraw(!0)),this._data.core.selected.length!==k&&this.trigger("changed",{action:"model",selected:this._data.core.selected}),d.call(this,!0)},_append_json_data:function(b,c,d,e){if(null!==this.element){b=this.get_node(b),b.children=[],b.children_d=[],c.d&&(c=c.d,"string"==typeof c&&(c=JSON.parse(c))),a.isArray(c)||(c=[c]);var f=null,g={df:this._model.default_state,dat:c,par:b.id,m:this._model.data,t_id:this._id,t_cnt:this._cnt,sel:this._data.core.selected},h=function(a,b){a.data&&(a=a.data);var c=a.dat,d=a.par,e=[],f=[],g=[],h=a.df,i=a.t_id,j=a.t_cnt,k=a.m,l=k[d],m=a.sel,n,o,p,q,r=function(a,c,d){d=d?d.concat():[],c&&d.unshift(c);var e=a.id.toString(),f,i,j,l,m={id:e,text:a.text||"",icon:a.icon!==b?a.icon:!0,parent:c,parents:d,children:a.children||[],children_d:a.children_d||[],data:a.data,state:{},li_attr:{id:!1},a_attr:{href:"#"},original:!1};for(f in h)h.hasOwnProperty(f)&&(m.state[f]=h[f]);if(a&&a.data&&a.data.jstree&&a.data.jstree.icon&&(m.icon=a.data.jstree.icon),(m.icon===b||null===m.icon||""===m.icon)&&(m.icon=!0),a&&a.data&&(m.data=a.data,a.data.jstree))for(f in a.data.jstree)a.data.jstree.hasOwnProperty(f)&&(m.state[f]=a.data.jstree[f]);if(a&&"object"==typeof a.state)for(f in a.state)a.state.hasOwnProperty(f)&&(m.state[f]=a.state[f]);if(a&&"object"==typeof a.li_attr)for(f in a.li_attr)a.li_attr.hasOwnProperty(f)&&(m.li_attr[f]=a.li_attr[f]);if(m.li_attr.id||(m.li_attr.id=e),a&&"object"==typeof a.a_attr)for(f in a.a_attr)a.a_attr.hasOwnProperty(f)&&(m.a_attr[f]=a.a_attr[f]);for(a&&a.children&&a.children===!0&&(m.state.loaded=!1,m.children=[],m.children_d=[]),k[m.id]=m,f=0,i=m.children.length;i>f;f++)j=r(k[m.children[f]],m.id,d),l=k[j],m.children_d.push(j),l.children_d.length&&(m.children_d=m.children_d.concat(l.children_d));return delete a.data,delete a.children,k[m.id].original=a,m.state.selected&&g.push(m.id),m.id},s=function(a,c,d){d=d?d.concat():[],c&&d.unshift(c);var e=!1,f,l,m,n,o;do e="j"+i+"_"+ ++j;while(k[e]);o={id:!1,text:"string"==typeof a?a:"",icon:"object"==typeof a&&a.icon!==b?a.icon:!0,parent:c,parents:d,children:[],children_d:[],data:null,state:{},li_attr:{id:!1},a_attr:{href:"#"},original:!1};for(f in h)h.hasOwnProperty(f)&&(o.state[f]=h[f]);if(a&&a.id&&(o.id=a.id.toString()),a&&a.text&&(o.text=a.text),a&&a.data&&a.data.jstree&&a.data.jstree.icon&&(o.icon=a.data.jstree.icon),(o.icon===b||null===o.icon||""===o.icon)&&(o.icon=!0),a&&a.data&&(o.data=a.data,a.data.jstree))for(f in a.data.jstree)a.data.jstree.hasOwnProperty(f)&&(o.state[f]=a.data.jstree[f]);if(a&&"object"==typeof a.state)for(f in a.state)a.state.hasOwnProperty(f)&&(o.state[f]=a.state[f]);if(a&&"object"==typeof a.li_attr)for(f in a.li_attr)a.li_attr.hasOwnProperty(f)&&(o.li_attr[f]=a.li_attr[f]);if(o.li_attr.id&&!o.id&&(o.id=o.li_attr.id.toString()),o.id||(o.id=e),o.li_attr.id||(o.li_attr.id=o.id),a&&"object"==typeof a.a_attr)for(f in a.a_attr)a.a_attr.hasOwnProperty(f)&&(o.a_attr[f]=a.a_attr[f]);if(a&&a.children&&a.children.length){for(f=0,l=a.children.length;l>f;f++)m=s(a.children[f],o.id,d),n=k[m],o.children.push(m),n.children_d.length&&(o.children_d=o.children_d.concat(n.children_d));o.children_d=o.children_d.concat(o.children)}return a&&a.children&&a.children===!0&&(o.state.loaded=!1,o.children=[],o.children_d=[]),delete a.data,delete a.children,o.original=a,k[o.id]=o,o.state.selected&&g.push(o.id),o.id};if(c.length&&c[0].id!==b&&c[0].parent!==b){for(o=0,p=c.length;p>o;o++)c[o].children||(c[o].children=[]),c[o].state||(c[o].state={}),k[c[o].id.toString()]=c[o];for(o=0,p=c.length;p>o;o++)k[c[o].parent.toString()]?(k[c[o].parent.toString()].children.push(c[o].id.toString()),l.children_d.push(c[o].id.toString())):(this._data.core.last_error={error:"parse",plugin:"core",id:"core_07",reason:"Node with invalid parent",data:JSON.stringify({id:c[o].id.toString(),parent:c[o].parent.toString()})},this.settings.core.error.call(this,this._data.core.last_error));for(o=0,p=l.children.length;p>o;o++)n=r(k[l.children[o]],d,l.parents.concat()),f.push(n),k[n].children_d.length&&(f=f.concat(k[n].children_d));for(o=0,p=l.parents.length;p>o;o++)k[l.parents[o]].children_d=k[l.parents[o]].children_d.concat(f);q={cnt:j,mod:k,sel:m,par:d,dpc:f,add:g}}else{for(o=0,p=c.length;p>o;o++)n=s(c[o],d,l.parents.concat()),n&&(e.push(n),f.push(n),k[n].children_d.length&&(f=f.concat(k[n].children_d)));for(l.children=e,l.children_d=f,o=0,p=l.parents.length;p>o;o++)k[l.parents[o]].children_d=k[l.parents[o]].children_d.concat(f);q={cnt:j,mod:k,sel:m,par:d,dpc:f,add:g}}return"undefined"!=typeof window&&"undefined"!=typeof window.document?q:void postMessage(q)},i=function(b,c){if(null!==this.element){this._cnt=b.cnt;var e,f=this._model.data;for(e in f)f.hasOwnProperty(e)&&f[e].state&&f[e].state.loading&&b.mod[e]&&(b.mod[e].state.loading=!0);if(this._model.data=b.mod,c){var g,h=b.add,i=b.sel,j=this._data.core.selected.slice();if(f=this._model.data,i.length!==j.length||a.vakata.array_unique(i.concat(j)).length!==i.length){for(e=0,g=i.length;g>e;e++)-1===a.inArray(i[e],h)&&-1===a.inArray(i[e],j)&&(f[i[e]].state.selected=!1);for(e=0,g=j.length;g>e;e++)-1===a.inArray(j[e],i)&&(f[j[e]].state.selected=!0)}}b.add.length&&(this._data.core.selected=this._data.core.selected.concat(b.add)),this.trigger("model",{nodes:b.dpc,parent:b.par}),b.par!==a.jstree.root?(this._node_changed(b.par),this.redraw()):this.redraw(!0),b.add.length&&this.trigger("changed",{action:"model",selected:this._data.core.selected}),d.call(this,!0)}};if(this.settings.core.worker&&window.Blob&&window.URL&&window.Worker)try{null===this._wrk&&(this._wrk=window.URL.createObjectURL(new window.Blob(["self.onmessage = "+h.toString()],{type:"text/javascript"}))),!this._data.core.working||e?(this._data.core.working=!0,f=new window.Worker(this._wrk),f.onmessage=a.proxy(function(a){i.call(this,a.data,!0);try{f.terminate(),f=null}catch(b){}this._data.core.worker_queue.length?this._append_json_data.apply(this,this._data.core.worker_queue.shift()):this._data.core.working=!1},this),g.par?f.postMessage(g):this._data.core.worker_queue.length?this._append_json_data.apply(this,this._data.core.worker_queue.shift()):this._data.core.working=!1):this._data.core.worker_queue.push([b,c,d,!0])}catch(j){i.call(this,h(g),!1),this._data.core.worker_queue.length?this._append_json_data.apply(this,this._data.core.worker_queue.shift()):this._data.core.working=!1}else i.call(this,h(g),!1)}},_parse_model_from_html:function(c,d,e){e=e?[].concat(e):[],d&&e.unshift(d);var f,g,h=this._model.data,i={id:!1,text:!1,icon:!0,parent:d,parents:e,children:[],children_d:[],data:null,state:{},li_attr:{id:!1},a_attr:{href:"#"},original:!1},j,k,l;for(j in this._model.default_state)this._model.default_state.hasOwnProperty(j)&&(i.state[j]=this._model.default_state[j]);if(k=a.vakata.attributes(c,!0),a.each(k,function(b,c){return c=a.trim(c),c.length?(i.li_attr[b]=c,void("id"===b&&(i.id=c.toString()))):!0}),k=c.children("a").first(),k.length&&(k=a.vakata.attributes(k,!0),a.each(k,function(b,c){c=a.trim(c),c.length&&(i.a_attr[b]=c)})),k=c.children("a").first().length?c.children("a").first().clone():c.clone(),k.children("ins, i, ul").remove(),k=k.html(),k=a("<div />").html(k),i.text=this.settings.core.force_text?k.text():k.html(),k=c.data(),i.data=k?a.extend(!0,{},k):null,i.state.opened=c.hasClass("jstree-open"),i.state.selected=c.children("a").hasClass("jstree-clicked"),i.state.disabled=c.children("a").hasClass("jstree-disabled"),i.data&&i.data.jstree)for(j in i.data.jstree)i.data.jstree.hasOwnProperty(j)&&(i.state[j]=i.data.jstree[j]);k=c.children("a").children(".jstree-themeicon"),k.length&&(i.icon=k.hasClass("jstree-themeicon-hidden")?!1:k.attr("rel")),i.state.icon!==b&&(i.icon=i.state.icon),(i.icon===b||null===i.icon||""===i.icon)&&(i.icon=!0),k=c.children("ul").children("li");do l="j"+this._id+"_"+ ++this._cnt;while(h[l]);return i.id=i.li_attr.id?i.li_attr.id.toString():l,k.length?(k.each(a.proxy(function(b,c){f=this._parse_model_from_html(a(c),i.id,e),g=this._model.data[f],i.children.push(f),g.children_d.length&&(i.children_d=i.children_d.concat(g.children_d))},this)),i.children_d=i.children_d.concat(i.children)):c.hasClass("jstree-closed")&&(i.state.loaded=!1),i.li_attr["class"]&&(i.li_attr["class"]=i.li_attr["class"].replace("jstree-closed","").replace("jstree-open","")),i.a_attr["class"]&&(i.a_attr["class"]=i.a_attr["class"].replace("jstree-clicked","").replace("jstree-disabled","")),h[i.id]=i,i.state.selected&&this._data.core.selected.push(i.id),i.id},_parse_model_from_flat_json:function(a,c,d){d=d?d.concat():[],c&&d.unshift(c);var e=a.id.toString(),f=this._model.data,g=this._model.default_state,h,i,j,k,l={id:e,text:a.text||"",icon:a.icon!==b?a.icon:!0,parent:c,parents:d,children:a.children||[],children_d:a.children_d||[],data:a.data,state:{},li_attr:{id:!1},a_attr:{href:"#"},original:!1};for(h in g)g.hasOwnProperty(h)&&(l.state[h]=g[h]);if(a&&a.data&&a.data.jstree&&a.data.jstree.icon&&(l.icon=a.data.jstree.icon),(l.icon===b||null===l.icon||""===l.icon)&&(l.icon=!0),a&&a.data&&(l.data=a.data,a.data.jstree))for(h in a.data.jstree)a.data.jstree.hasOwnProperty(h)&&(l.state[h]=a.data.jstree[h]);if(a&&"object"==typeof a.state)for(h in a.state)a.state.hasOwnProperty(h)&&(l.state[h]=a.state[h]);if(a&&"object"==typeof a.li_attr)for(h in a.li_attr)a.li_attr.hasOwnProperty(h)&&(l.li_attr[h]=a.li_attr[h]);if(l.li_attr.id||(l.li_attr.id=e),a&&"object"==typeof a.a_attr)for(h in a.a_attr)a.a_attr.hasOwnProperty(h)&&(l.a_attr[h]=a.a_attr[h]);for(a&&a.children&&a.children===!0&&(l.state.loaded=!1,l.children=[],l.children_d=[]),f[l.id]=l,h=0,i=l.children.length;i>h;h++)j=this._parse_model_from_flat_json(f[l.children[h]],l.id,d),k=f[j],l.children_d.push(j),k.children_d.length&&(l.children_d=l.children_d.concat(k.children_d));return delete a.data,delete a.children,f[l.id].original=a,l.state.selected&&this._data.core.selected.push(l.id),l.id},_parse_model_from_json:function(a,c,d){d=d?d.concat():[],c&&d.unshift(c);var e=!1,f,g,h,i,j=this._model.data,k=this._model.default_state,l;do e="j"+this._id+"_"+ ++this._cnt;while(j[e]);l={id:!1,text:"string"==typeof a?a:"",icon:"object"==typeof a&&a.icon!==b?a.icon:!0,parent:c,parents:d,children:[],children_d:[],data:null,state:{},li_attr:{id:!1},a_attr:{href:"#"},original:!1};for(f in k)k.hasOwnProperty(f)&&(l.state[f]=k[f]);if(a&&a.id&&(l.id=a.id.toString()),a&&a.text&&(l.text=a.text),a&&a.data&&a.data.jstree&&a.data.jstree.icon&&(l.icon=a.data.jstree.icon),(l.icon===b||null===l.icon||""===l.icon)&&(l.icon=!0),a&&a.data&&(l.data=a.data,a.data.jstree))for(f in a.data.jstree)a.data.jstree.hasOwnProperty(f)&&(l.state[f]=a.data.jstree[f]);if(a&&"object"==typeof a.state)for(f in a.state)a.state.hasOwnProperty(f)&&(l.state[f]=a.state[f]);if(a&&"object"==typeof a.li_attr)for(f in a.li_attr)a.li_attr.hasOwnProperty(f)&&(l.li_attr[f]=a.li_attr[f]);if(l.li_attr.id&&!l.id&&(l.id=l.li_attr.id.toString()),l.id||(l.id=e),l.li_attr.id||(l.li_attr.id=l.id),
+a&&"object"==typeof a.a_attr)for(f in a.a_attr)a.a_attr.hasOwnProperty(f)&&(l.a_attr[f]=a.a_attr[f]);if(a&&a.children&&a.children.length){for(f=0,g=a.children.length;g>f;f++)h=this._parse_model_from_json(a.children[f],l.id,d),i=j[h],l.children.push(h),i.children_d.length&&(l.children_d=l.children_d.concat(i.children_d));l.children_d=l.children_d.concat(l.children)}return a&&a.children&&a.children===!0&&(l.state.loaded=!1,l.children=[],l.children_d=[]),delete a.data,delete a.children,l.original=a,j[l.id]=l,l.state.selected&&this._data.core.selected.push(l.id),l.id},_redraw:function(){var b=this._model.force_full_redraw?this._model.data[a.jstree.root].children.concat([]):this._model.changed.concat([]),c=i.createElement("UL"),d,e,f,g=this._data.core.focused;for(e=0,f=b.length;f>e;e++)d=this.redraw_node(b[e],!0,this._model.force_full_redraw),d&&this._model.force_full_redraw&&c.appendChild(d);this._model.force_full_redraw&&(c.className=this.get_container_ul()[0].className,c.setAttribute("role","group"),this.element.empty().append(c)),null!==g&&(d=this.get_node(g,!0),d&&d.length&&d.children(".jstree-anchor")[0]!==i.activeElement?d.children(".jstree-anchor").focus():this._data.core.focused=null),this._model.force_full_redraw=!1,this._model.changed=[],this.trigger("redraw",{nodes:b})},redraw:function(a){a&&(this._model.force_full_redraw=!0),this._redraw()},draw_children:function(b){var c=this.get_node(b),d=!1,e=!1,f=!1,g=i;if(!c)return!1;if(c.id===a.jstree.root)return this.redraw(!0);if(b=this.get_node(b,!0),!b||!b.length)return!1;if(b.children(".jstree-children").remove(),b=b[0],c.children.length&&c.state.loaded){for(f=g.createElement("UL"),f.setAttribute("role","group"),f.className="jstree-children",d=0,e=c.children.length;e>d;d++)f.appendChild(this.redraw_node(c.children[d],!0,!0));b.appendChild(f)}},redraw_node:function(b,c,d,e){var f=this.get_node(b),g=!1,h=!1,j=!1,k=!1,l=!1,m=!1,n="",o=i,p=this._model.data,q=!1,r=!1,s=null,t=0,u=0,v=!1,w=!1;if(!f)return!1;if(f.id===a.jstree.root)return this.redraw(!0);if(c=c||0===f.children.length,b=i.querySelector?this.element[0].querySelector("#"+(-1!=="0123456789".indexOf(f.id[0])?"\\3"+f.id[0]+" "+f.id.substr(1).replace(a.jstree.idregex,"\\$&"):f.id.replace(a.jstree.idregex,"\\$&"))):i.getElementById(f.id))b=a(b),d||(g=b.parent().parent()[0],g===this.element[0]&&(g=null),h=b.index()),c||!f.children.length||b.children(".jstree-children").length||(c=!0),c||(j=b.children(".jstree-children")[0]),q=b.children(".jstree-anchor")[0]===i.activeElement,b.remove();else if(c=!0,!d){if(g=f.parent!==a.jstree.root?a("#"+f.parent.replace(a.jstree.idregex,"\\$&"),this.element)[0]:null,!(null===g||g&&p[f.parent].state.opened))return!1;h=a.inArray(f.id,null===g?p[a.jstree.root].children:p[f.parent].children)}b=this._data.core.node.cloneNode(!0),n="jstree-node ";for(k in f.li_attr)if(f.li_attr.hasOwnProperty(k)){if("id"===k)continue;"class"!==k?b.setAttribute(k,f.li_attr[k]):n+=f.li_attr[k]}for(f.a_attr.id||(f.a_attr.id=f.id+"_anchor"),b.setAttribute("aria-selected",!!f.state.selected),b.setAttribute("aria-level",f.parents.length),b.setAttribute("aria-labelledby",f.a_attr.id),f.state.disabled&&b.setAttribute("aria-disabled",!0),k=0,l=f.children.length;l>k;k++)if(!p[f.children[k]].state.hidden){v=!0;break}if(null!==f.parent&&p[f.parent]&&!f.state.hidden&&(k=a.inArray(f.id,p[f.parent].children),w=f.id,-1!==k))for(k++,l=p[f.parent].children.length;l>k;k++)if(p[p[f.parent].children[k]].state.hidden||(w=p[f.parent].children[k]),w!==f.id)break;f.state.hidden&&(n+=" jstree-hidden"),f.state.loading&&(n+=" jstree-loading"),f.state.loaded&&!v?n+=" jstree-leaf":(n+=f.state.opened&&f.state.loaded?" jstree-open":" jstree-closed",b.setAttribute("aria-expanded",f.state.opened&&f.state.loaded)),w===f.id&&(n+=" jstree-last"),b.id=f.id,b.className=n,n=(f.state.selected?" jstree-clicked":"")+(f.state.disabled?" jstree-disabled":"");for(l in f.a_attr)if(f.a_attr.hasOwnProperty(l)){if("href"===l&&"#"===f.a_attr[l])continue;"class"!==l?b.childNodes[1].setAttribute(l,f.a_attr[l]):n+=" "+f.a_attr[l]}if(n.length&&(b.childNodes[1].className="jstree-anchor "+n),(f.icon&&f.icon!==!0||f.icon===!1)&&(f.icon===!1?b.childNodes[1].childNodes[0].className+=" jstree-themeicon-hidden":-1===f.icon.indexOf("/")&&-1===f.icon.indexOf(".")?b.childNodes[1].childNodes[0].className+=" "+f.icon+" jstree-themeicon-custom":(b.childNodes[1].childNodes[0].style.backgroundImage='url("'+f.icon+'")',b.childNodes[1].childNodes[0].style.backgroundPosition="center center",b.childNodes[1].childNodes[0].style.backgroundSize="auto",b.childNodes[1].childNodes[0].className+=" jstree-themeicon-custom")),this.settings.core.force_text?b.childNodes[1].appendChild(o.createTextNode(f.text)):b.childNodes[1].innerHTML+=f.text,c&&f.children.length&&(f.state.opened||e)&&f.state.loaded){for(m=o.createElement("UL"),m.setAttribute("role","group"),m.className="jstree-children",k=0,l=f.children.length;l>k;k++)m.appendChild(this.redraw_node(f.children[k],c,!0));b.appendChild(m)}if(j&&b.appendChild(j),!d){for(g||(g=this.element[0]),k=0,l=g.childNodes.length;l>k;k++)if(g.childNodes[k]&&g.childNodes[k].className&&-1!==g.childNodes[k].className.indexOf("jstree-children")){s=g.childNodes[k];break}s||(s=o.createElement("UL"),s.setAttribute("role","group"),s.className="jstree-children",g.appendChild(s)),g=s,h<g.childNodes.length?g.insertBefore(b,g.childNodes[h]):g.appendChild(b),q&&(t=this.element[0].scrollTop,u=this.element[0].scrollLeft,b.childNodes[1].focus(),this.element[0].scrollTop=t,this.element[0].scrollLeft=u)}return f.state.opened&&!f.state.loaded&&(f.state.opened=!1,setTimeout(a.proxy(function(){this.open_node(f.id,!1,0)},this),0)),b},open_node:function(c,d,e){var f,g,h,i;if(a.isArray(c)){for(c=c.slice(),f=0,g=c.length;g>f;f++)this.open_node(c[f],d,e);return!0}return c=this.get_node(c),c&&c.id!==a.jstree.root?(e=e===b?this.settings.core.animation:e,this.is_closed(c)?this.is_loaded(c)?(h=this.get_node(c,!0),i=this,h.length&&(e&&h.children(".jstree-children").length&&h.children(".jstree-children").stop(!0,!0),c.children.length&&!this._firstChild(h.children(".jstree-children")[0])&&this.draw_children(c),e?(this.trigger("before_open",{node:c}),h.children(".jstree-children").css("display","none").end().removeClass("jstree-closed").addClass("jstree-open").attr("aria-expanded",!0).children(".jstree-children").stop(!0,!0).slideDown(e,function(){this.style.display="",i.element&&i.trigger("after_open",{node:c})})):(this.trigger("before_open",{node:c}),h[0].className=h[0].className.replace("jstree-closed","jstree-open"),h[0].setAttribute("aria-expanded",!0))),c.state.opened=!0,d&&d.call(this,c,!0),h.length||this.trigger("before_open",{node:c}),this.trigger("open_node",{node:c}),e&&h.length||this.trigger("after_open",{node:c}),!0):this.is_loading(c)?setTimeout(a.proxy(function(){this.open_node(c,d,e)},this),500):void this.load_node(c,function(a,b){return b?this.open_node(a,d,e):d?d.call(this,a,!1):!1}):(d&&d.call(this,c,!1),!1)):!1},_open_to:function(b){if(b=this.get_node(b),!b||b.id===a.jstree.root)return!1;var c,d,e=b.parents;for(c=0,d=e.length;d>c;c+=1)c!==a.jstree.root&&this.open_node(e[c],!1,0);return a("#"+b.id.replace(a.jstree.idregex,"\\$&"),this.element)},close_node:function(c,d){var e,f,g,h;if(a.isArray(c)){for(c=c.slice(),e=0,f=c.length;f>e;e++)this.close_node(c[e],d);return!0}return c=this.get_node(c),c&&c.id!==a.jstree.root?this.is_closed(c)?!1:(d=d===b?this.settings.core.animation:d,g=this,h=this.get_node(c,!0),c.state.opened=!1,this.trigger("close_node",{node:c}),void(h.length?d?h.children(".jstree-children").attr("style","display:block !important").end().removeClass("jstree-open").addClass("jstree-closed").attr("aria-expanded",!1).children(".jstree-children").stop(!0,!0).slideUp(d,function(){this.style.display="",h.children(".jstree-children").remove(),g.element&&g.trigger("after_close",{node:c})}):(h[0].className=h[0].className.replace("jstree-open","jstree-closed"),h.attr("aria-expanded",!1).children(".jstree-children").remove(),this.trigger("after_close",{node:c})):this.trigger("after_close",{node:c}))):!1},toggle_node:function(b){var c,d;if(a.isArray(b)){for(b=b.slice(),c=0,d=b.length;d>c;c++)this.toggle_node(b[c]);return!0}return this.is_closed(b)?this.open_node(b):this.is_open(b)?this.close_node(b):void 0},open_all:function(b,c,d){if(b||(b=a.jstree.root),b=this.get_node(b),!b)return!1;var e=b.id===a.jstree.root?this.get_container_ul():this.get_node(b,!0),f,g,h;if(!e.length){for(f=0,g=b.children_d.length;g>f;f++)this.is_closed(this._model.data[b.children_d[f]])&&(this._model.data[b.children_d[f]].state.opened=!0);return this.trigger("open_all",{node:b})}d=d||e,h=this,e=this.is_closed(b)?e.find(".jstree-closed").addBack():e.find(".jstree-closed"),e.each(function(){h.open_node(this,function(a,b){b&&this.is_parent(a)&&this.open_all(a,c,d)},c||0)}),0===d.find(".jstree-closed").length&&this.trigger("open_all",{node:this.get_node(d)})},close_all:function(b,c){if(b||(b=a.jstree.root),b=this.get_node(b),!b)return!1;var d=b.id===a.jstree.root?this.get_container_ul():this.get_node(b,!0),e=this,f,g;for(d.length&&(d=this.is_open(b)?d.find(".jstree-open").addBack():d.find(".jstree-open"),a(d.get().reverse()).each(function(){e.close_node(this,c||0)})),f=0,g=b.children_d.length;g>f;f++)this._model.data[b.children_d[f]].state.opened=!1;this.trigger("close_all",{node:b})},is_disabled:function(a){return a=this.get_node(a),a&&a.state&&a.state.disabled},enable_node:function(b){var c,d;if(a.isArray(b)){for(b=b.slice(),c=0,d=b.length;d>c;c++)this.enable_node(b[c]);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(b.state.disabled=!1,this.get_node(b,!0).children(".jstree-anchor").removeClass("jstree-disabled").attr("aria-disabled",!1),void this.trigger("enable_node",{node:b})):!1},disable_node:function(b){var c,d;if(a.isArray(b)){for(b=b.slice(),c=0,d=b.length;d>c;c++)this.disable_node(b[c]);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(b.state.disabled=!0,this.get_node(b,!0).children(".jstree-anchor").addClass("jstree-disabled").attr("aria-disabled",!0),void this.trigger("disable_node",{node:b})):!1},is_hidden:function(a){return a=this.get_node(a),a.state.hidden===!0},hide_node:function(b,c){var d,e;if(a.isArray(b)){for(b=b.slice(),d=0,e=b.length;e>d;d++)this.hide_node(b[d],!0);return c||this.redraw(),!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?void(b.state.hidden||(b.state.hidden=!0,this._node_changed(b.parent),c||this.redraw(),this.trigger("hide_node",{node:b}))):!1},show_node:function(b,c){var d,e;if(a.isArray(b)){for(b=b.slice(),d=0,e=b.length;e>d;d++)this.show_node(b[d],!0);return c||this.redraw(),!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?void(b.state.hidden&&(b.state.hidden=!1,this._node_changed(b.parent),c||this.redraw(),this.trigger("show_node",{node:b}))):!1},hide_all:function(b){var c,d=this._model.data,e=[];for(c in d)d.hasOwnProperty(c)&&c!==a.jstree.root&&!d[c].state.hidden&&(d[c].state.hidden=!0,e.push(c));return this._model.force_full_redraw=!0,b||this.redraw(),this.trigger("hide_all",{nodes:e}),e},show_all:function(b){var c,d=this._model.data,e=[];for(c in d)d.hasOwnProperty(c)&&c!==a.jstree.root&&d[c].state.hidden&&(d[c].state.hidden=!1,e.push(c));return this._model.force_full_redraw=!0,b||this.redraw(),this.trigger("show_all",{nodes:e}),e},activate_node:function(a,c){if(this.is_disabled(a))return!1;if(c&&"object"==typeof c||(c={}),this._data.core.last_clicked=this._data.core.last_clicked&&this._data.core.last_clicked.id!==b?this.get_node(this._data.core.last_clicked.id):null,this._data.core.last_clicked&&!this._data.core.last_clicked.state.selected&&(this._data.core.last_clicked=null),!this._data.core.last_clicked&&this._data.core.selected.length&&(this._data.core.last_clicked=this.get_node(this._data.core.selected[this._data.core.selected.length-1])),this.settings.core.multiple&&(c.metaKey||c.ctrlKey||c.shiftKey)&&(!c.shiftKey||this._data.core.last_clicked&&this.get_parent(a)&&this.get_parent(a)===this._data.core.last_clicked.parent))if(c.shiftKey){var d=this.get_node(a).id,e=this._data.core.last_clicked.id,f=this.get_node(this._data.core.last_clicked.parent).children,g=!1,h,i;for(h=0,i=f.length;i>h;h+=1)f[h]===d&&(g=!g),f[h]===e&&(g=!g),this.is_disabled(f[h])||!g&&f[h]!==d&&f[h]!==e?this.deselect_node(f[h],!0,c):this.is_hidden(f[h])||this.select_node(f[h],!0,!1,c);this.trigger("changed",{action:"select_node",node:this.get_node(a),selected:this._data.core.selected,event:c})}else this.is_selected(a)?this.deselect_node(a,!1,c):this.select_node(a,!1,!1,c);else!this.settings.core.multiple&&(c.metaKey||c.ctrlKey||c.shiftKey)&&this.is_selected(a)?this.deselect_node(a,!1,c):(this.deselect_all(!0),this.select_node(a,!1,!1,c),this._data.core.last_clicked=this.get_node(a));this.trigger("activate_node",{node:this.get_node(a),event:c})},hover_node:function(a){if(a=this.get_node(a,!0),!a||!a.length||a.children(".jstree-hovered").length)return!1;var b=this.element.find(".jstree-hovered"),c=this.element;b&&b.length&&this.dehover_node(b),a.children(".jstree-anchor").addClass("jstree-hovered"),this.trigger("hover_node",{node:this.get_node(a)}),setTimeout(function(){c.attr("aria-activedescendant",a[0].id)},0)},dehover_node:function(a){return a=this.get_node(a,!0),a&&a.length&&a.children(".jstree-hovered").length?(a.children(".jstree-anchor").removeClass("jstree-hovered"),void this.trigger("dehover_node",{node:this.get_node(a)})):!1},select_node:function(b,c,d,e){var f,g,h,i;if(a.isArray(b)){for(b=b.slice(),g=0,h=b.length;h>g;g++)this.select_node(b[g],c,d,e);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(f=this.get_node(b,!0),void(b.state.selected||(b.state.selected=!0,this._data.core.selected.push(b.id),d||(f=this._open_to(b)),f&&f.length&&f.attr("aria-selected",!0).children(".jstree-anchor").addClass("jstree-clicked"),this.trigger("select_node",{node:b,selected:this._data.core.selected,event:e}),c||this.trigger("changed",{action:"select_node",node:b,selected:this._data.core.selected,event:e})))):!1},deselect_node:function(b,c,d){var e,f,g;if(a.isArray(b)){for(b=b.slice(),e=0,f=b.length;f>e;e++)this.deselect_node(b[e],c,d);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(g=this.get_node(b,!0),void(b.state.selected&&(b.state.selected=!1,this._data.core.selected=a.vakata.array_remove_item(this._data.core.selected,b.id),g.length&&g.attr("aria-selected",!1).children(".jstree-anchor").removeClass("jstree-clicked"),this.trigger("deselect_node",{node:b,selected:this._data.core.selected,event:d}),c||this.trigger("changed",{action:"deselect_node",node:b,selected:this._data.core.selected,event:d})))):!1},select_all:function(b){var c=this._data.core.selected.concat([]),d,e;for(this._data.core.selected=this._model.data[a.jstree.root].children_d.concat(),d=0,e=this._data.core.selected.length;e>d;d++)this._model.data[this._data.core.selected[d]]&&(this._model.data[this._data.core.selected[d]].state.selected=!0);this.redraw(!0),this.trigger("select_all",{selected:this._data.core.selected}),b||this.trigger("changed",{action:"select_all",selected:this._data.core.selected,old_selection:c})},deselect_all:function(a){var b=this._data.core.selected.concat([]),c,d;for(c=0,d=this._data.core.selected.length;d>c;c++)this._model.data[this._data.core.selected[c]]&&(this._model.data[this._data.core.selected[c]].state.selected=!1);this._data.core.selected=[],this.element.find(".jstree-clicked").removeClass("jstree-clicked").parent().attr("aria-selected",!1),this.trigger("deselect_all",{selected:this._data.core.selected,node:b}),a||this.trigger("changed",{action:"deselect_all",selected:this._data.core.selected,old_selection:b})},is_selected:function(b){return b=this.get_node(b),b&&b.id!==a.jstree.root?b.state.selected:!1},get_selected:function(b){return b?a.map(this._data.core.selected,a.proxy(function(a){return this.get_node(a)},this)):this._data.core.selected.slice()},get_top_selected:function(b){var c=this.get_selected(!0),d={},e,f,g,h;for(e=0,f=c.length;f>e;e++)d[c[e].id]=c[e];for(e=0,f=c.length;f>e;e++)for(g=0,h=c[e].children_d.length;h>g;g++)d[c[e].children_d[g]]&&delete d[c[e].children_d[g]];c=[];for(e in d)d.hasOwnProperty(e)&&c.push(e);return b?a.map(c,a.proxy(function(a){return this.get_node(a)},this)):c},get_bottom_selected:function(b){var c=this.get_selected(!0),d=[],e,f;for(e=0,f=c.length;f>e;e++)c[e].children.length||d.push(c[e].id);return b?a.map(d,a.proxy(function(a){return this.get_node(a)},this)):d},get_state:function(){var b={core:{open:[],loaded:[],scroll:{left:this.element.scrollLeft(),top:this.element.scrollTop()},selected:[]}},c;for(c in this._model.data)this._model.data.hasOwnProperty(c)&&c!==a.jstree.root&&(this._model.data[c].state.loaded&&this.settings.core.loaded_state&&b.core.loaded.push(c),this._model.data[c].state.opened&&b.core.open.push(c),this._model.data[c].state.selected&&b.core.selected.push(c));return b},set_state:function(c,d){if(c){if(c.core&&c.core.selected&&c.core.initial_selection===b&&(c.core.initial_selection=this._data.core.selected.concat([]).sort().join(",")),c.core){var e,f,g,h,i;if(c.core.loaded)return this.settings.core.loaded_state&&a.isArray(c.core.loaded)&&c.core.loaded.length?this._load_nodes(c.core.loaded,function(a){delete c.core.loaded,this.set_state(c,d)}):(delete c.core.loaded,this.set_state(c,d)),!1;if(c.core.open)return a.isArray(c.core.open)&&c.core.open.length?this._load_nodes(c.core.open,function(a){this.open_node(a,!1,0),delete c.core.open,this.set_state(c,d)}):(delete c.core.open,this.set_state(c,d)),!1;if(c.core.scroll)return c.core.scroll&&c.core.scroll.left!==b&&this.element.scrollLeft(c.core.scroll.left),c.core.scroll&&c.core.scroll.top!==b&&this.element.scrollTop(c.core.scroll.top),delete c.core.scroll,this.set_state(c,d),!1;if(c.core.selected)return h=this,(c.core.initial_selection===b||c.core.initial_selection===this._data.core.selected.concat([]).sort().join(","))&&(this.deselect_all(),a.each(c.core.selected,function(a,b){h.select_node(b,!1,!0)})),delete c.core.initial_selection,delete c.core.selected,this.set_state(c,d),!1;for(i in c)c.hasOwnProperty(i)&&"core"!==i&&-1===a.inArray(i,this.settings.plugins)&&delete c[i];if(a.isEmptyObject(c.core))return delete c.core,this.set_state(c,d),!1}return a.isEmptyObject(c)?(c=null,d&&d.call(this),this.trigger("set_state"),!1):!0}return!1},refresh:function(b,c){this._data.core.state=c===!0?{}:this.get_state(),c&&a.isFunction(c)&&(this._data.core.state=c.call(this,this._data.core.state)),this._cnt=0,this._model.data={},this._model.data[a.jstree.root]={id:a.jstree.root,parent:null,parents:[],children:[],children_d:[],state:{loaded:!1}},this._data.core.selected=[],this._data.core.last_clicked=null,this._data.core.focused=null;var d=this.get_container_ul()[0].className;b||(this.element.html("<ul class='"+d+"' role='group'><li class='jstree-initial-node jstree-loading jstree-leaf jstree-last' role='treeitem' id='j"+this._id+"_loading'><i class='jstree-icon jstree-ocl'></i><a class='jstree-anchor' href='#'><i class='jstree-icon jstree-themeicon-hidden'></i>"+this.get_string("Loading ...")+"</a></li></ul>"),this.element.attr("aria-activedescendant","j"+this._id+"_loading")),this.load_node(a.jstree.root,function(b,c){c&&(this.get_container_ul()[0].className=d,this._firstChild(this.get_container_ul()[0])&&this.element.attr("aria-activedescendant",this._firstChild(this.get_container_ul()[0]).id),this.set_state(a.extend(!0,{},this._data.core.state),function(){this.trigger("refresh")})),this._data.core.state=null})},refresh_node:function(b){if(b=this.get_node(b),!b||b.id===a.jstree.root)return!1;var c=[],d=[],e=this._data.core.selected.concat([]);d.push(b.id),b.state.opened===!0&&c.push(b.id),this.get_node(b,!0).find(".jstree-open").each(function(){d.push(this.id),c.push(this.id)}),this._load_nodes(d,a.proxy(function(a){this.open_node(c,!1,0),this.select_node(e),this.trigger("refresh_node",{node:b,nodes:a})},this),!1,!0)},set_id:function(b,c){if(b=this.get_node(b),!b||b.id===a.jstree.root)return!1;var d,e,f=this._model.data,g=b.id;for(c=c.toString(),f[b.parent].children[a.inArray(b.id,f[b.parent].children)]=c,d=0,e=b.parents.length;e>d;d++)f[b.parents[d]].children_d[a.inArray(b.id,f[b.parents[d]].children_d)]=c;for(d=0,e=b.children.length;e>d;d++)f[b.children[d]].parent=c;for(d=0,e=b.children_d.length;e>d;d++)f[b.children_d[d]].parents[a.inArray(b.id,f[b.children_d[d]].parents)]=c;return d=a.inArray(b.id,this._data.core.selected),-1!==d&&(this._data.core.selected[d]=c),d=this.get_node(b.id,!0),d&&(d.attr("id",c),this.element.attr("aria-activedescendant")===b.id&&this.element.attr("aria-activedescendant",c)),delete f[b.id],b.id=c,b.li_attr.id=c,f[c]=b,this.trigger("set_id",{node:b,"new":b.id,old:g}),!0},get_text:function(b){return b=this.get_node(b),b&&b.id!==a.jstree.root?b.text:!1},set_text:function(b,c){var d,e;if(a.isArray(b)){for(b=b.slice(),d=0,e=b.length;e>d;d++)this.set_text(b[d],c);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(b.text=c,this.get_node(b,!0).length&&this.redraw_node(b.id),this.trigger("set_text",{obj:b,text:c}),!0):!1},get_json:function(b,c,d){if(b=this.get_node(b||a.jstree.root),!b)return!1;c&&c.flat&&!d&&(d=[]);var e={id:b.id,text:b.text,icon:this.get_icon(b),li_attr:a.extend(!0,{},b.li_attr),a_attr:a.extend(!0,{},b.a_attr),state:{},data:c&&c.no_data?!1:a.extend(!0,a.isArray(b.data)?[]:{},b.data)},f,g;if(c&&c.flat?e.parent=b.parent:e.children=[],c&&c.no_state)delete e.state;else for(f in b.state)b.state.hasOwnProperty(f)&&(e.state[f]=b.state[f]);if(c&&c.no_li_attr&&delete e.li_attr,c&&c.no_a_attr&&delete e.a_attr,c&&c.no_id&&(delete e.id,e.li_attr&&e.li_attr.id&&delete e.li_attr.id,e.a_attr&&e.a_attr.id&&delete e.a_attr.id),c&&c.flat&&b.id!==a.jstree.root&&d.push(e),!c||!c.no_children)for(f=0,g=b.children.length;g>f;f++)c&&c.flat?this.get_json(b.children[f],c,d):e.children.push(this.get_json(b.children[f],c));return c&&c.flat?d:b.id===a.jstree.root?e.children:e},create_node:function(c,d,e,f,g){if(null===c&&(c=a.jstree.root),c=this.get_node(c),!c)return!1;if(e=e===b?"last":e,!e.toString().match(/^(before|after)$/)&&!g&&!this.is_loaded(c))return this.load_node(c,function(){this.create_node(c,d,e,f,!0)});d||(d={text:this.get_string("New node")}),d="string"==typeof d?{text:d}:a.extend(!0,{},d),d.text===b&&(d.text=this.get_string("New node"));var h,i,j,k;switch(c.id===a.jstree.root&&("before"===e&&(e="first"),"after"===e&&(e="last")),e){case"before":h=this.get_node(c.parent),e=a.inArray(c.id,h.children),c=h;break;case"after":h=this.get_node(c.parent),e=a.inArray(c.id,h.children)+1,c=h;break;case"inside":case"first":e=0;break;case"last":e=c.children.length;break;default:e||(e=0)}if(e>c.children.length&&(e=c.children.length),d.id||(d.id=!0),!this.check("create_node",d,c,e))return this.settings.core.error.call(this,this._data.core.last_error),!1;if(d.id===!0&&delete d.id,d=this._parse_model_from_json(d,c.id,c.parents.concat()),!d)return!1;for(h=this.get_node(d),i=[],i.push(d),i=i.concat(h.children_d),this.trigger("model",{nodes:i,parent:c.id}),c.children_d=c.children_d.concat(i),j=0,k=c.parents.length;k>j;j++)this._model.data[c.parents[j]].children_d=this._model.data[c.parents[j]].children_d.concat(i);for(d=h,h=[],j=0,k=c.children.length;k>j;j++)h[j>=e?j+1:j]=c.children[j];return h[e]=d.id,c.children=h,this.redraw_node(c,!0),this.trigger("create_node",{node:this.get_node(d),parent:c.id,position:e}),f&&f.call(this,this.get_node(d)),d.id},rename_node:function(b,c){var d,e,f;if(a.isArray(b)){for(b=b.slice(),d=0,e=b.length;e>d;d++)this.rename_node(b[d],c);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(f=b.text,this.check("rename_node",b,this.get_parent(b),c)?(this.set_text(b,c),this.trigger("rename_node",{node:b,text:c,old:f}),!0):(this.settings.core.error.call(this,this._data.core.last_error),!1)):!1},delete_node:function(b){var c,d,e,f,g,h,i,j,k,l,m,n;if(a.isArray(b)){for(b=b.slice(),c=0,d=b.length;d>c;c++)this.delete_node(b[c]);return!0}if(b=this.get_node(b),!b||b.id===a.jstree.root)return!1;if(e=this.get_node(b.parent),f=a.inArray(b.id,e.children),l=!1,!this.check("delete_node",b,e,f))return this.settings.core.error.call(this,this._data.core.last_error),!1;for(-1!==f&&(e.children=a.vakata.array_remove(e.children,f)),g=b.children_d.concat([]),g.push(b.id),h=0,i=b.parents.length;i>h;h++)this._model.data[b.parents[h]].children_d=a.vakata.array_filter(this._model.data[b.parents[h]].children_d,function(b){return-1===a.inArray(b,g)});for(j=0,k=g.length;k>j;j++)if(this._model.data[g[j]].state.selected){l=!0;break}for(l&&(this._data.core.selected=a.vakata.array_filter(this._data.core.selected,function(b){return-1===a.inArray(b,g)})),this.trigger("delete_node",{node:b,parent:e.id}),l&&this.trigger("changed",{action:"delete_node",node:b,selected:this._data.core.selected,parent:e.id}),j=0,k=g.length;k>j;j++)delete this._model.data[g[j]];return-1!==a.inArray(this._data.core.focused,g)&&(this._data.core.focused=null,m=this.element[0].scrollTop,n=this.element[0].scrollLeft,e.id===a.jstree.root?this._model.data[a.jstree.root].children[0]&&this.get_node(this._model.data[a.jstree.root].children[0],!0).children(".jstree-anchor").focus():this.get_node(e,!0).children(".jstree-anchor").focus(),this.element[0].scrollTop=m,this.element[0].scrollLeft=n),this.redraw_node(e,!0),!0},check:function(b,c,d,e,f){c=c&&c.id?c:this.get_node(c),d=d&&d.id?d:this.get_node(d);var g=b.match(/^move_node|copy_node|create_node$/i)?d:c,h=this.settings.core.check_callback;return"move_node"!==b&&"copy_node"!==b||f&&f.is_multi||c.id!==d.id&&("move_node"!==b||a.inArray(c.id,d.children)!==e)&&-1===a.inArray(d.id,c.children_d)?(g&&g.data&&(g=g.data),g&&g.functions&&(g.functions[b]===!1||g.functions[b]===!0)?(g.functions[b]===!1&&(this._data.core.last_error={error:"check",plugin:"core",id:"core_02",reason:"Node data prevents function: "+b,data:JSON.stringify({chk:b,pos:e,obj:c&&c.id?c.id:!1,par:d&&d.id?d.id:!1})}),g.functions[b]):h===!1||a.isFunction(h)&&h.call(this,b,c,d,e,f)===!1||h&&h[b]===!1?(this._data.core.last_error={error:"check",plugin:"core",id:"core_03",reason:"User config for core.check_callback prevents function: "+b,data:JSON.stringify({chk:b,pos:e,obj:c&&c.id?c.id:!1,par:d&&d.id?d.id:!1})},!1):!0):(this._data.core.last_error={error:"check",plugin:"core",id:"core_01",reason:"Moving parent inside child",data:JSON.stringify({chk:b,pos:e,obj:c&&c.id?c.id:!1,par:d&&d.id?d.id:!1})},!1)},last_error:function(){return this._data.core.last_error},move_node:function(c,d,e,f,g,h,i){var j,k,l,m,n,o,p,q,r,s,t,u,v,w;if(d=this.get_node(d),e=e===b?0:e,!d)return!1;if(!e.toString().match(/^(before|after)$/)&&!g&&!this.is_loaded(d))return this.load_node(d,function(){this.move_node(c,d,e,f,!0,!1,i)});if(a.isArray(c)){if(1!==c.length){for(j=0,k=c.length;k>j;j++)(r=this.move_node(c[j],d,e,f,g,!1,i))&&(d=r,e="after");return this.redraw(),!0}c=c[0]}if(c=c&&c.id?c:this.get_node(c),!c||c.id===a.jstree.root)return!1;if(l=(c.parent||a.jstree.root).toString(),n=e.toString().match(/^(before|after)$/)&&d.id!==a.jstree.root?this.get_node(d.parent):d,o=i?i:this._model.data[c.id]?this:a.jstree.reference(c.id),p=!o||!o._id||this._id!==o._id,m=o&&o._id&&l&&o._model.data[l]&&o._model.data[l].children?a.inArray(c.id,o._model.data[l].children):-1,o&&o._id&&(c=o._model.data[c.id]),p)return(r=this.copy_node(c,d,e,f,g,!1,i))?(o&&o.delete_node(c),r):!1;switch(d.id===a.jstree.root&&("before"===e&&(e="first"),"after"===e&&(e="last")),e){case"before":e=a.inArray(d.id,n.children);break;case"after":e=a.inArray(d.id,n.children)+1;break;case"inside":case"first":e=0;break;case"last":e=n.children.length;break;default:e||(e=0)}if(e>n.children.length&&(e=n.children.length),!this.check("move_node",c,n,e,{core:!0,origin:i,is_multi:o&&o._id&&o._id!==this._id,is_foreign:!o||!o._id}))return this.settings.core.error.call(this,this._data.core.last_error),!1;if(c.parent===n.id){for(q=n.children.concat(),r=a.inArray(c.id,q),-1!==r&&(q=a.vakata.array_remove(q,r),e>r&&e--),r=[],s=0,t=q.length;t>s;s++)r[s>=e?s+1:s]=q[s];r[e]=c.id,n.children=r,this._node_changed(n.id),this.redraw(n.id===a.jstree.root)}else{for(r=c.children_d.concat(),r.push(c.id),s=0,t=c.parents.length;t>s;s++){for(q=[],w=o._model.data[c.parents[s]].children_d,u=0,v=w.length;v>u;u++)-1===a.inArray(w[u],r)&&q.push(w[u]);o._model.data[c.parents[s]].children_d=q}for(o._model.data[l].children=a.vakata.array_remove_item(o._model.data[l].children,c.id),s=0,t=n.parents.length;t>s;s++)this._model.data[n.parents[s]].children_d=this._model.data[n.parents[s]].children_d.concat(r);for(q=[],s=0,t=n.children.length;t>s;s++)q[s>=e?s+1:s]=n.children[s];for(q[e]=c.id,n.children=q,n.children_d.push(c.id),n.children_d=n.children_d.concat(c.children_d),c.parent=n.id,r=n.parents.concat(),r.unshift(n.id),w=c.parents.length,c.parents=r,r=r.concat(),s=0,t=c.children_d.length;t>s;s++)this._model.data[c.children_d[s]].parents=this._model.data[c.children_d[s]].parents.slice(0,-1*w),Array.prototype.push.apply(this._model.data[c.children_d[s]].parents,r);(l===a.jstree.root||n.id===a.jstree.root)&&(this._model.force_full_redraw=!0),this._model.force_full_redraw||(this._node_changed(l),this._node_changed(n.id)),h||this.redraw()}return f&&f.call(this,c,n,e),this.trigger("move_node",{node:c,parent:n.id,position:e,old_parent:l,old_position:m,is_multi:o&&o._id&&o._id!==this._id,is_foreign:!o||!o._id,old_instance:o,new_instance:this}),c.id},copy_node:function(c,d,e,f,g,h,i){var j,k,l,m,n,o,p,q,r,s,t;if(d=this.get_node(d),e=e===b?0:e,!d)return!1;if(!e.toString().match(/^(before|after)$/)&&!g&&!this.is_loaded(d))return this.load_node(d,function(){this.copy_node(c,d,e,f,!0,!1,i)});if(a.isArray(c)){if(1!==c.length){for(j=0,k=c.length;k>j;j++)(m=this.copy_node(c[j],d,e,f,g,!0,i))&&(d=m,e="after");return this.redraw(),!0}c=c[0]}if(c=c&&c.id?c:this.get_node(c),!c||c.id===a.jstree.root)return!1;switch(q=(c.parent||a.jstree.root).toString(),r=e.toString().match(/^(before|after)$/)&&d.id!==a.jstree.root?this.get_node(d.parent):d,s=i?i:this._model.data[c.id]?this:a.jstree.reference(c.id),t=!s||!s._id||this._id!==s._id,s&&s._id&&(c=s._model.data[c.id]),d.id===a.jstree.root&&("before"===e&&(e="first"),"after"===e&&(e="last")),e){case"before":e=a.inArray(d.id,r.children);break;case"after":e=a.inArray(d.id,r.children)+1;break;case"inside":case"first":e=0;break;case"last":e=r.children.length;break;default:e||(e=0)}if(e>r.children.length&&(e=r.children.length),!this.check("copy_node",c,r,e,{core:!0,origin:i,is_multi:s&&s._id&&s._id!==this._id,is_foreign:!s||!s._id}))return this.settings.core.error.call(this,this._data.core.last_error),!1;if(p=s?s.get_json(c,{no_id:!0,no_data:!0,no_state:!0}):c,!p)return!1;if(p.id===!0&&delete p.id,p=this._parse_model_from_json(p,r.id,r.parents.concat()),!p)return!1;for(m=this.get_node(p),c&&c.state&&c.state.loaded===!1&&(m.state.loaded=!1),l=[],l.push(p),l=l.concat(m.children_d),this.trigger("model",{nodes:l,parent:r.id}),n=0,o=r.parents.length;o>n;n++)this._model.data[r.parents[n]].children_d=this._model.data[r.parents[n]].children_d.concat(l);for(l=[],n=0,o=r.children.length;o>n;n++)l[n>=e?n+1:n]=r.children[n];return l[e]=m.id,r.children=l,r.children_d.push(m.id),r.children_d=r.children_d.concat(m.children_d),r.id===a.jstree.root&&(this._model.force_full_redraw=!0),this._model.force_full_redraw||this._node_changed(r.id),h||this.redraw(r.id===a.jstree.root),f&&f.call(this,m,r,e),this.trigger("copy_node",{node:m,original:c,parent:r.id,position:e,old_parent:q,old_position:s&&s._id&&q&&s._model.data[q]&&s._model.data[q].children?a.inArray(c.id,s._model.data[q].children):-1,is_multi:s&&s._id&&s._id!==this._id,is_foreign:!s||!s._id,old_instance:s,new_instance:this}),m.id},cut:function(b){if(b||(b=this._data.core.selected.concat()),a.isArray(b)||(b=[b]),!b.length)return!1;var c=[],g,h,i;for(h=0,i=b.length;i>h;h++)g=this.get_node(b[h]),g&&g.id&&g.id!==a.jstree.root&&c.push(g);return c.length?(d=c,f=this,e="move_node",void this.trigger("cut",{
+node:b})):!1},copy:function(b){if(b||(b=this._data.core.selected.concat()),a.isArray(b)||(b=[b]),!b.length)return!1;var c=[],g,h,i;for(h=0,i=b.length;i>h;h++)g=this.get_node(b[h]),g&&g.id&&g.id!==a.jstree.root&&c.push(g);return c.length?(d=c,f=this,e="copy_node",void this.trigger("copy",{node:b})):!1},get_buffer:function(){return{mode:e,node:d,inst:f}},can_paste:function(){return e!==!1&&d!==!1},paste:function(a,b){return a=this.get_node(a),a&&e&&e.match(/^(copy_node|move_node)$/)&&d?(this[e](d,a,b,!1,!1,!1,f)&&this.trigger("paste",{parent:a.id,node:d,mode:e}),d=!1,e=!1,void(f=!1)):!1},clear_buffer:function(){d=!1,e=!1,f=!1,this.trigger("clear_buffer")},edit:function(b,c,d){var e,f,g,h,j,k,l,m,n,o=!1;return(b=this.get_node(b))?this.check("edit",b,this.get_parent(b))?(n=b,c="string"==typeof c?c:b.text,this.set_text(b,""),b=this._open_to(b),n.text=c,e=this._data.core.rtl,f=this.element.width(),this._data.core.focused=n.id,g=b.children(".jstree-anchor").focus(),h=a("<span>"),j=c,k=a("<div />",{css:{position:"absolute",top:"-200px",left:e?"0px":"-1000px",visibility:"hidden"}}).appendTo("body"),l=a("<input />",{value:j,"class":"jstree-rename-input",css:{padding:"0",border:"1px solid silver","box-sizing":"border-box",display:"inline-block",height:this._data.core.li_height+"px",lineHeight:this._data.core.li_height+"px",width:"150px"},blur:a.proxy(function(c){c.stopImmediatePropagation(),c.preventDefault();var e=h.children(".jstree-rename-input"),f=e.val(),i=this.settings.core.force_text,m;""===f&&(f=j),k.remove(),h.replaceWith(g),h.remove(),j=i?j:a("<div></div>").append(a.parseHTML(j)).html(),this.set_text(b,j),m=!!this.rename_node(b,i?a("<div></div>").text(f).text():a("<div></div>").append(a.parseHTML(f)).html()),m||this.set_text(b,j),this._data.core.focused=n.id,setTimeout(a.proxy(function(){var a=this.get_node(n.id,!0);a.length&&(this._data.core.focused=n.id,a.children(".jstree-anchor").focus())},this),0),d&&d.call(this,n,m,o),l=null},this),keydown:function(a){var b=a.which;27===b&&(o=!0,this.value=j),(27===b||13===b||37===b||38===b||39===b||40===b||32===b)&&a.stopImmediatePropagation(),(27===b||13===b)&&(a.preventDefault(),this.blur())},click:function(a){a.stopImmediatePropagation()},mousedown:function(a){a.stopImmediatePropagation()},keyup:function(a){l.width(Math.min(k.text("pW"+this.value).width(),f))},keypress:function(a){return 13===a.which?!1:void 0}}),m={fontFamily:g.css("fontFamily")||"",fontSize:g.css("fontSize")||"",fontWeight:g.css("fontWeight")||"",fontStyle:g.css("fontStyle")||"",fontStretch:g.css("fontStretch")||"",fontVariant:g.css("fontVariant")||"",letterSpacing:g.css("letterSpacing")||"",wordSpacing:g.css("wordSpacing")||""},h.attr("class",g.attr("class")).append(g.contents().clone()).append(l),g.replaceWith(h),k.css(m),l.css(m).width(Math.min(k.text("pW"+l[0].value).width(),f))[0].select(),void a(i).one("mousedown.jstree touchstart.jstree dnd_start.vakata",function(b){l&&b.target!==l&&a(l).blur()})):(this.settings.core.error.call(this,this._data.core.last_error),!1):!1},set_theme:function(b,c){if(!b)return!1;if(c===!0){var d=this.settings.core.themes.dir;d||(d=a.jstree.path+"/themes"),c=d+"/"+b+"/style.css"}c&&-1===a.inArray(c,g)&&(a("head").append('<link rel="stylesheet" href="'+c+'" type="text/css" />'),g.push(c)),this._data.core.themes.name&&this.element.removeClass("jstree-"+this._data.core.themes.name),this._data.core.themes.name=b,this.element.addClass("jstree-"+b),this.element[this.settings.core.themes.responsive?"addClass":"removeClass"]("jstree-"+b+"-responsive"),this.trigger("set_theme",{theme:b})},get_theme:function(){return this._data.core.themes.name},set_theme_variant:function(a){this._data.core.themes.variant&&this.element.removeClass("jstree-"+this._data.core.themes.name+"-"+this._data.core.themes.variant),this._data.core.themes.variant=a,a&&this.element.addClass("jstree-"+this._data.core.themes.name+"-"+this._data.core.themes.variant)},get_theme_variant:function(){return this._data.core.themes.variant},show_stripes:function(){this._data.core.themes.stripes=!0,this.get_container_ul().addClass("jstree-striped"),this.trigger("show_stripes")},hide_stripes:function(){this._data.core.themes.stripes=!1,this.get_container_ul().removeClass("jstree-striped"),this.trigger("hide_stripes")},toggle_stripes:function(){this._data.core.themes.stripes?this.hide_stripes():this.show_stripes()},show_dots:function(){this._data.core.themes.dots=!0,this.get_container_ul().removeClass("jstree-no-dots"),this.trigger("show_dots")},hide_dots:function(){this._data.core.themes.dots=!1,this.get_container_ul().addClass("jstree-no-dots"),this.trigger("hide_dots")},toggle_dots:function(){this._data.core.themes.dots?this.hide_dots():this.show_dots()},show_icons:function(){this._data.core.themes.icons=!0,this.get_container_ul().removeClass("jstree-no-icons"),this.trigger("show_icons")},hide_icons:function(){this._data.core.themes.icons=!1,this.get_container_ul().addClass("jstree-no-icons"),this.trigger("hide_icons")},toggle_icons:function(){this._data.core.themes.icons?this.hide_icons():this.show_icons()},show_ellipsis:function(){this._data.core.themes.ellipsis=!0,this.get_container_ul().addClass("jstree-ellipsis"),this.trigger("show_ellipsis")},hide_ellipsis:function(){this._data.core.themes.ellipsis=!1,this.get_container_ul().removeClass("jstree-ellipsis"),this.trigger("hide_ellipsis")},toggle_ellipsis:function(){this._data.core.themes.ellipsis?this.hide_ellipsis():this.show_ellipsis()},set_icon:function(c,d){var e,f,g,h;if(a.isArray(c)){for(c=c.slice(),e=0,f=c.length;f>e;e++)this.set_icon(c[e],d);return!0}return c=this.get_node(c),c&&c.id!==a.jstree.root?(h=c.icon,c.icon=d===!0||null===d||d===b||""===d?!0:d,g=this.get_node(c,!0).children(".jstree-anchor").children(".jstree-themeicon"),d===!1?(g.removeClass("jstree-themeicon-custom "+h).css("background","").removeAttr("rel"),this.hide_icon(c)):d===!0||null===d||d===b||""===d?(g.removeClass("jstree-themeicon-custom "+h).css("background","").removeAttr("rel"),h===!1&&this.show_icon(c)):-1===d.indexOf("/")&&-1===d.indexOf(".")?(g.removeClass(h).css("background",""),g.addClass(d+" jstree-themeicon-custom").attr("rel",d),h===!1&&this.show_icon(c)):(g.removeClass(h).css("background",""),g.addClass("jstree-themeicon-custom").css("background","url('"+d+"') center center no-repeat").attr("rel",d),h===!1&&this.show_icon(c)),!0):!1},get_icon:function(b){return b=this.get_node(b),b&&b.id!==a.jstree.root?b.icon:!1},hide_icon:function(b){var c,d;if(a.isArray(b)){for(b=b.slice(),c=0,d=b.length;d>c;c++)this.hide_icon(b[c]);return!0}return b=this.get_node(b),b&&b!==a.jstree.root?(b.icon=!1,this.get_node(b,!0).children(".jstree-anchor").children(".jstree-themeicon").addClass("jstree-themeicon-hidden"),!0):!1},show_icon:function(b){var c,d,e;if(a.isArray(b)){for(b=b.slice(),c=0,d=b.length;d>c;c++)this.show_icon(b[c]);return!0}return b=this.get_node(b),b&&b!==a.jstree.root?(e=this.get_node(b,!0),b.icon=e.length?e.children(".jstree-anchor").children(".jstree-themeicon").attr("rel"):!0,b.icon||(b.icon=!0),e.children(".jstree-anchor").children(".jstree-themeicon").removeClass("jstree-themeicon-hidden"),!0):!1}},a.vakata={},a.vakata.attributes=function(b,c){b=a(b)[0];var d=c?{}:[];return b&&b.attributes&&a.each(b.attributes,function(b,e){-1===a.inArray(e.name.toLowerCase(),["style","contenteditable","hasfocus","tabindex"])&&null!==e.value&&""!==a.trim(e.value)&&(c?d[e.name]=e.value:d.push(e.name))}),d},a.vakata.array_unique=function(a){var c=[],d,e,f,g={};for(d=0,f=a.length;f>d;d++)g[a[d]]===b&&(c.push(a[d]),g[a[d]]=!0);return c},a.vakata.array_remove=function(a,b){return a.splice(b,1),a},a.vakata.array_remove_item=function(b,c){var d=a.inArray(c,b);return-1!==d?a.vakata.array_remove(b,d):b},a.vakata.array_filter=function(a,b,c,d,e){if(a.filter)return a.filter(b,c);d=[];for(e in a)~~e+""==e+""&&e>=0&&b.call(c,a[e],+e,a)&&d.push(a[e]);return d},a.jstree.plugins.changed=function(a,b){var c=[];this.trigger=function(a,d){var e,f;if(d||(d={}),"changed"===a.replace(".jstree","")){d.changed={selected:[],deselected:[]};var g={};for(e=0,f=c.length;f>e;e++)g[c[e]]=1;for(e=0,f=d.selected.length;f>e;e++)g[d.selected[e]]?g[d.selected[e]]=2:d.changed.selected.push(d.selected[e]);for(e=0,f=c.length;f>e;e++)1===g[c[e]]&&d.changed.deselected.push(c[e]);c=d.selected.slice()}b.trigger.call(this,a,d)},this.refresh=function(a,d){return c=[],b.refresh.apply(this,arguments)}};var j=i.createElement("I");j.className="jstree-icon jstree-checkbox",j.setAttribute("role","presentation"),a.jstree.defaults.checkbox={visible:!0,three_state:!0,whole_node:!0,keep_selected_style:!0,cascade:"",tie_selection:!0,cascade_to_disabled:!0,cascade_to_hidden:!0},a.jstree.plugins.checkbox=function(c,d){this.bind=function(){d.bind.call(this),this._data.checkbox.uto=!1,this._data.checkbox.selected=[],this.settings.checkbox.three_state&&(this.settings.checkbox.cascade="up+down+undetermined"),this.element.on("init.jstree",a.proxy(function(){this._data.checkbox.visible=this.settings.checkbox.visible,this.settings.checkbox.keep_selected_style||this.element.addClass("jstree-checkbox-no-clicked"),this.settings.checkbox.tie_selection&&this.element.addClass("jstree-checkbox-selection")},this)).on("loading.jstree",a.proxy(function(){this[this._data.checkbox.visible?"show_checkboxes":"hide_checkboxes"]()},this)),-1!==this.settings.checkbox.cascade.indexOf("undetermined")&&this.element.on("changed.jstree uncheck_node.jstree check_node.jstree uncheck_all.jstree check_all.jstree move_node.jstree copy_node.jstree redraw.jstree open_node.jstree",a.proxy(function(){this._data.checkbox.uto&&clearTimeout(this._data.checkbox.uto),this._data.checkbox.uto=setTimeout(a.proxy(this._undetermined,this),50)},this)),this.settings.checkbox.tie_selection||this.element.on("model.jstree",a.proxy(function(a,b){var c=this._model.data,d=c[b.parent],e=b.nodes,f,g;for(f=0,g=e.length;g>f;f++)c[e[f]].state.checked=c[e[f]].state.checked||c[e[f]].original&&c[e[f]].original.state&&c[e[f]].original.state.checked,c[e[f]].state.checked&&this._data.checkbox.selected.push(e[f])},this)),(-1!==this.settings.checkbox.cascade.indexOf("up")||-1!==this.settings.checkbox.cascade.indexOf("down"))&&this.element.on("model.jstree",a.proxy(function(b,c){var d=this._model.data,e=d[c.parent],f=c.nodes,g=[],h,i,j,k,l,m,n=this.settings.checkbox.cascade,o=this.settings.checkbox.tie_selection;if(-1!==n.indexOf("down"))if(e.state[o?"selected":"checked"]){for(i=0,j=f.length;j>i;i++)d[f[i]].state[o?"selected":"checked"]=!0;this._data[o?"core":"checkbox"].selected=this._data[o?"core":"checkbox"].selected.concat(f)}else for(i=0,j=f.length;j>i;i++)if(d[f[i]].state[o?"selected":"checked"]){for(k=0,l=d[f[i]].children_d.length;l>k;k++)d[d[f[i]].children_d[k]].state[o?"selected":"checked"]=!0;this._data[o?"core":"checkbox"].selected=this._data[o?"core":"checkbox"].selected.concat(d[f[i]].children_d)}if(-1!==n.indexOf("up")){for(i=0,j=e.children_d.length;j>i;i++)d[e.children_d[i]].children.length||g.push(d[e.children_d[i]].parent);for(g=a.vakata.array_unique(g),k=0,l=g.length;l>k;k++){e=d[g[k]];while(e&&e.id!==a.jstree.root){for(h=0,i=0,j=e.children.length;j>i;i++)h+=d[e.children[i]].state[o?"selected":"checked"];if(h!==j)break;e.state[o?"selected":"checked"]=!0,this._data[o?"core":"checkbox"].selected.push(e.id),m=this.get_node(e,!0),m&&m.length&&m.attr("aria-selected",!0).children(".jstree-anchor").addClass(o?"jstree-clicked":"jstree-checked"),e=this.get_node(e.parent)}}}this._data[o?"core":"checkbox"].selected=a.vakata.array_unique(this._data[o?"core":"checkbox"].selected)},this)).on(this.settings.checkbox.tie_selection?"select_node.jstree":"check_node.jstree",a.proxy(function(b,c){var d=this,e=c.node,f=this._model.data,g=this.get_node(e.parent),h,i,j,k,l=this.settings.checkbox.cascade,m=this.settings.checkbox.tie_selection,n={},o=this._data[m?"core":"checkbox"].selected;for(h=0,i=o.length;i>h;h++)n[o[h]]=!0;if(-1!==l.indexOf("down")){var p=this._cascade_new_checked_state(e.id,!0),q=e.children_d.concat(e.id);for(h=0,i=q.length;i>h;h++)p.indexOf(q[h])>-1?n[q[h]]=!0:delete n[q[h]]}if(-1!==l.indexOf("up"))while(g&&g.id!==a.jstree.root){for(j=0,h=0,i=g.children.length;i>h;h++)j+=f[g.children[h]].state[m?"selected":"checked"];if(j!==i)break;g.state[m?"selected":"checked"]=!0,n[g.id]=!0,k=this.get_node(g,!0),k&&k.length&&k.attr("aria-selected",!0).children(".jstree-anchor").addClass(m?"jstree-clicked":"jstree-checked"),g=this.get_node(g.parent)}o=[];for(h in n)n.hasOwnProperty(h)&&o.push(h);this._data[m?"core":"checkbox"].selected=o},this)).on(this.settings.checkbox.tie_selection?"deselect_all.jstree":"uncheck_all.jstree",a.proxy(function(b,c){var d=this.get_node(a.jstree.root),e=this._model.data,f,g,h;for(f=0,g=d.children_d.length;g>f;f++)h=e[d.children_d[f]],h&&h.original&&h.original.state&&h.original.state.undetermined&&(h.original.state.undetermined=!1)},this)).on(this.settings.checkbox.tie_selection?"deselect_node.jstree":"uncheck_node.jstree",a.proxy(function(a,b){var c=this,d=b.node,e=this.get_node(d,!0),f,g,h,i=this.settings.checkbox.cascade,j=this.settings.checkbox.tie_selection,k=this._data[j?"core":"checkbox"].selected,l={},m=[],n=d.children_d.concat(d.id);if(-1!==i.indexOf("down")){var o=this._cascade_new_checked_state(d.id,!1);k=k.filter(function(a){return-1===n.indexOf(a)||o.indexOf(a)>-1})}if(-1!==i.indexOf("up")&&-1===k.indexOf(d.id)){for(f=0,g=d.parents.length;g>f;f++)h=this._model.data[d.parents[f]],h.state[j?"selected":"checked"]=!1,h&&h.original&&h.original.state&&h.original.state.undetermined&&(h.original.state.undetermined=!1),h=this.get_node(d.parents[f],!0),h&&h.length&&h.attr("aria-selected",!1).children(".jstree-anchor").removeClass(j?"jstree-clicked":"jstree-checked");k=k.filter(function(a){return-1===d.parents.indexOf(a)})}this._data[j?"core":"checkbox"].selected=k},this)),-1!==this.settings.checkbox.cascade.indexOf("up")&&this.element.on("delete_node.jstree",a.proxy(function(b,c){var d=this.get_node(c.parent),e=this._model.data,f,g,h,i,j=this.settings.checkbox.tie_selection;while(d&&d.id!==a.jstree.root&&!d.state[j?"selected":"checked"]){for(h=0,f=0,g=d.children.length;g>f;f++)h+=e[d.children[f]].state[j?"selected":"checked"];if(!(g>0&&h===g))break;d.state[j?"selected":"checked"]=!0,this._data[j?"core":"checkbox"].selected.push(d.id),i=this.get_node(d,!0),i&&i.length&&i.attr("aria-selected",!0).children(".jstree-anchor").addClass(j?"jstree-clicked":"jstree-checked"),d=this.get_node(d.parent)}},this)).on("move_node.jstree",a.proxy(function(b,c){var d=c.is_multi,e=c.old_parent,f=this.get_node(c.parent),g=this._model.data,h,i,j,k,l,m=this.settings.checkbox.tie_selection;if(!d){h=this.get_node(e);while(h&&h.id!==a.jstree.root&&!h.state[m?"selected":"checked"]){for(i=0,j=0,k=h.children.length;k>j;j++)i+=g[h.children[j]].state[m?"selected":"checked"];if(!(k>0&&i===k))break;h.state[m?"selected":"checked"]=!0,this._data[m?"core":"checkbox"].selected.push(h.id),l=this.get_node(h,!0),l&&l.length&&l.attr("aria-selected",!0).children(".jstree-anchor").addClass(m?"jstree-clicked":"jstree-checked"),h=this.get_node(h.parent)}}h=f;while(h&&h.id!==a.jstree.root){for(i=0,j=0,k=h.children.length;k>j;j++)i+=g[h.children[j]].state[m?"selected":"checked"];if(i===k)h.state[m?"selected":"checked"]||(h.state[m?"selected":"checked"]=!0,this._data[m?"core":"checkbox"].selected.push(h.id),l=this.get_node(h,!0),l&&l.length&&l.attr("aria-selected",!0).children(".jstree-anchor").addClass(m?"jstree-clicked":"jstree-checked"));else{if(!h.state[m?"selected":"checked"])break;h.state[m?"selected":"checked"]=!1,this._data[m?"core":"checkbox"].selected=a.vakata.array_remove_item(this._data[m?"core":"checkbox"].selected,h.id),l=this.get_node(h,!0),l&&l.length&&l.attr("aria-selected",!1).children(".jstree-anchor").removeClass(m?"jstree-clicked":"jstree-checked")}h=this.get_node(h.parent)}},this))},this.get_undetermined=function(c){if(-1===this.settings.checkbox.cascade.indexOf("undetermined"))return[];var d,e,f,g,h={},i=this._model.data,j=this.settings.checkbox.tie_selection,k=this._data[j?"core":"checkbox"].selected,l=[],m=this,n=[];for(d=0,e=k.length;e>d;d++)if(i[k[d]]&&i[k[d]].parents)for(f=0,g=i[k[d]].parents.length;g>f;f++){if(h[i[k[d]].parents[f]]!==b)break;i[k[d]].parents[f]!==a.jstree.root&&(h[i[k[d]].parents[f]]=!0,l.push(i[k[d]].parents[f]))}for(this.element.find(".jstree-closed").not(":has(.jstree-children)").each(function(){var c=m.get_node(this),j;if(c)if(c.state.loaded){for(d=0,e=c.children_d.length;e>d;d++)if(j=i[c.children_d[d]],!j.state.loaded&&j.original&&j.original.state&&j.original.state.undetermined&&j.original.state.undetermined===!0)for(h[j.id]===b&&j.id!==a.jstree.root&&(h[j.id]=!0,l.push(j.id)),f=0,g=j.parents.length;g>f;f++)h[j.parents[f]]===b&&j.parents[f]!==a.jstree.root&&(h[j.parents[f]]=!0,l.push(j.parents[f]))}else if(c.original&&c.original.state&&c.original.state.undetermined&&c.original.state.undetermined===!0)for(h[c.id]===b&&c.id!==a.jstree.root&&(h[c.id]=!0,l.push(c.id)),f=0,g=c.parents.length;g>f;f++)h[c.parents[f]]===b&&c.parents[f]!==a.jstree.root&&(h[c.parents[f]]=!0,l.push(c.parents[f]))}),d=0,e=l.length;e>d;d++)i[l[d]].state[j?"selected":"checked"]||n.push(c?i[l[d]]:l[d]);return n},this._undetermined=function(){if(null!==this.element){var a=this.get_undetermined(!1),b,c,d;for(this.element.find(".jstree-undetermined").removeClass("jstree-undetermined"),b=0,c=a.length;c>b;b++)d=this.get_node(a[b],!0),d&&d.length&&d.children(".jstree-anchor").children(".jstree-checkbox").addClass("jstree-undetermined")}},this.redraw_node=function(b,c,e,f){if(b=d.redraw_node.apply(this,arguments)){var g,h,i=null,k=null;for(g=0,h=b.childNodes.length;h>g;g++)if(b.childNodes[g]&&b.childNodes[g].className&&-1!==b.childNodes[g].className.indexOf("jstree-anchor")){i=b.childNodes[g];break}i&&(!this.settings.checkbox.tie_selection&&this._model.data[b.id].state.checked&&(i.className+=" jstree-checked"),k=j.cloneNode(!1),this._model.data[b.id].state.checkbox_disabled&&(k.className+=" jstree-checkbox-disabled"),i.insertBefore(k,i.childNodes[0]))}return e||-1===this.settings.checkbox.cascade.indexOf("undetermined")||(this._data.checkbox.uto&&clearTimeout(this._data.checkbox.uto),this._data.checkbox.uto=setTimeout(a.proxy(this._undetermined,this),50)),b},this.show_checkboxes=function(){this._data.core.themes.checkboxes=!0,this.get_container_ul().removeClass("jstree-no-checkboxes")},this.hide_checkboxes=function(){this._data.core.themes.checkboxes=!1,this.get_container_ul().addClass("jstree-no-checkboxes")},this.toggle_checkboxes=function(){this._data.core.themes.checkboxes?this.hide_checkboxes():this.show_checkboxes()},this.is_undetermined=function(b){b=this.get_node(b);var c=this.settings.checkbox.cascade,d,e,f=this.settings.checkbox.tie_selection,g=this._data[f?"core":"checkbox"].selected,h=this._model.data;if(!b||b.state[f?"selected":"checked"]===!0||-1===c.indexOf("undetermined")||-1===c.indexOf("down")&&-1===c.indexOf("up"))return!1;if(!b.state.loaded&&b.original.state.undetermined===!0)return!0;for(d=0,e=b.children_d.length;e>d;d++)if(-1!==a.inArray(b.children_d[d],g)||!h[b.children_d[d]].state.loaded&&h[b.children_d[d]].original.state.undetermined)return!0;return!1},this.disable_checkbox=function(b){var c,d,e;if(a.isArray(b)){for(b=b.slice(),c=0,d=b.length;d>c;c++)this.disable_checkbox(b[c]);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(e=this.get_node(b,!0),void(b.state.checkbox_disabled||(b.state.checkbox_disabled=!0,e&&e.length&&e.children(".jstree-anchor").children(".jstree-checkbox").addClass("jstree-checkbox-disabled"),this.trigger("disable_checkbox",{node:b})))):!1},this.enable_checkbox=function(b){var c,d,e;if(a.isArray(b)){for(b=b.slice(),c=0,d=b.length;d>c;c++)this.enable_checkbox(b[c]);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(e=this.get_node(b,!0),void(b.state.checkbox_disabled&&(b.state.checkbox_disabled=!1,e&&e.length&&e.children(".jstree-anchor").children(".jstree-checkbox").removeClass("jstree-checkbox-disabled"),this.trigger("enable_checkbox",{node:b})))):!1},this.activate_node=function(b,c){return a(c.target).hasClass("jstree-checkbox-disabled")?!1:(this.settings.checkbox.tie_selection&&(this.settings.checkbox.whole_node||a(c.target).hasClass("jstree-checkbox"))&&(c.ctrlKey=!0),this.settings.checkbox.tie_selection||!this.settings.checkbox.whole_node&&!a(c.target).hasClass("jstree-checkbox")?d.activate_node.call(this,b,c):this.is_disabled(b)?!1:(this.is_checked(b)?this.uncheck_node(b,c):this.check_node(b,c),void this.trigger("activate_node",{node:this.get_node(b)})))},this._cascade_new_checked_state=function(a,b){var c=this,d=this.settings.checkbox.tie_selection,e=this._model.data[a],f=[],g=[],h,i,j;if(!this.settings.checkbox.cascade_to_disabled&&e.state.disabled||!this.settings.checkbox.cascade_to_hidden&&e.state.hidden)j=this.get_checked_descendants(a),e.state[d?"selected":"checked"]&&j.push(e.id),f=f.concat(j);else{if(e.children)for(h=0,i=e.children.length;i>h;h++){var k=e.children[h];j=c._cascade_new_checked_state(k,b),f=f.concat(j),j.indexOf(k)>-1&&g.push(k)}var l=c.get_node(e,!0),m=g.length>0&&g.length<e.children.length;e.original&&e.original.state&&e.original.state.undetermined&&(e.original.state.undetermined=m),m?(e.state[d?"selected":"checked"]=!1,l.attr("aria-selected",!1).children(".jstree-anchor").removeClass(d?"jstree-clicked":"jstree-checked")):b&&g.length===e.children.length?(e.state[d?"selected":"checked"]=b,f.push(e.id),l.attr("aria-selected",!0).children(".jstree-anchor").addClass(d?"jstree-clicked":"jstree-checked")):(e.state[d?"selected":"checked"]=!1,l.attr("aria-selected",!1).children(".jstree-anchor").removeClass(d?"jstree-clicked":"jstree-checked"))}return f},this.get_checked_descendants=function(a){var b=this,c=b.settings.checkbox.tie_selection,d=b._model.data[a];return d.children_d.filter(function(a){return b._model.data[a].state[c?"selected":"checked"]})},this.check_node=function(b,c){if(this.settings.checkbox.tie_selection)return this.select_node(b,!1,!0,c);var d,e,f,g;if(a.isArray(b)){for(b=b.slice(),e=0,f=b.length;f>e;e++)this.check_node(b[e],c);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(d=this.get_node(b,!0),void(b.state.checked||(b.state.checked=!0,this._data.checkbox.selected.push(b.id),d&&d.length&&d.children(".jstree-anchor").addClass("jstree-checked"),this.trigger("check_node",{node:b,selected:this._data.checkbox.selected,event:c})))):!1},this.uncheck_node=function(b,c){if(this.settings.checkbox.tie_selection)return this.deselect_node(b,!1,c);var d,e,f;if(a.isArray(b)){for(b=b.slice(),d=0,e=b.length;e>d;d++)this.uncheck_node(b[d],c);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(f=this.get_node(b,!0),void(b.state.checked&&(b.state.checked=!1,this._data.checkbox.selected=a.vakata.array_remove_item(this._data.checkbox.selected,b.id),f.length&&f.children(".jstree-anchor").removeClass("jstree-checked"),this.trigger("uncheck_node",{node:b,selected:this._data.checkbox.selected,event:c})))):!1},this.check_all=function(){if(this.settings.checkbox.tie_selection)return this.select_all();var b=this._data.checkbox.selected.concat([]),c,d;for(this._data.checkbox.selected=this._model.data[a.jstree.root].children_d.concat(),c=0,d=this._data.checkbox.selected.length;d>c;c++)this._model.data[this._data.checkbox.selected[c]]&&(this._model.data[this._data.checkbox.selected[c]].state.checked=!0);this.redraw(!0),this.trigger("check_all",{selected:this._data.checkbox.selected})},this.uncheck_all=function(){if(this.settings.checkbox.tie_selection)return this.deselect_all();var a=this._data.checkbox.selected.concat([]),b,c;for(b=0,c=this._data.checkbox.selected.length;c>b;b++)this._model.data[this._data.checkbox.selected[b]]&&(this._model.data[this._data.checkbox.selected[b]].state.checked=!1);this._data.checkbox.selected=[],this.element.find(".jstree-checked").removeClass("jstree-checked"),this.trigger("uncheck_all",{selected:this._data.checkbox.selected,node:a})},this.is_checked=function(b){return this.settings.checkbox.tie_selection?this.is_selected(b):(b=this.get_node(b),b&&b.id!==a.jstree.root?b.state.checked:!1)},this.get_checked=function(b){return this.settings.checkbox.tie_selection?this.get_selected(b):b?a.map(this._data.checkbox.selected,a.proxy(function(a){return this.get_node(a)},this)):this._data.checkbox.selected},this.get_top_checked=function(b){if(this.settings.checkbox.tie_selection)return this.get_top_selected(b);var c=this.get_checked(!0),d={},e,f,g,h;for(e=0,f=c.length;f>e;e++)d[c[e].id]=c[e];for(e=0,f=c.length;f>e;e++)for(g=0,h=c[e].children_d.length;h>g;g++)d[c[e].children_d[g]]&&delete d[c[e].children_d[g]];c=[];for(e in d)d.hasOwnProperty(e)&&c.push(e);return b?a.map(c,a.proxy(function(a){return this.get_node(a)},this)):c},this.get_bottom_checked=function(b){if(this.settings.checkbox.tie_selection)return this.get_bottom_selected(b);var c=this.get_checked(!0),d=[],e,f;for(e=0,f=c.length;f>e;e++)c[e].children.length||d.push(c[e].id);return b?a.map(d,a.proxy(function(a){return this.get_node(a)},this)):d},this.load_node=function(b,c){var e,f,g,h,i,j;if(!a.isArray(b)&&!this.settings.checkbox.tie_selection&&(j=this.get_node(b),j&&j.state.loaded))for(e=0,f=j.children_d.length;f>e;e++)this._model.data[j.children_d[e]].state.checked&&(i=!0,this._data.checkbox.selected=a.vakata.array_remove_item(this._data.checkbox.selected,j.children_d[e]));return d.load_node.apply(this,arguments)},this.get_state=function(){var a=d.get_state.apply(this,arguments);return this.settings.checkbox.tie_selection?a:(a.checkbox=this._data.checkbox.selected.slice(),a)},this.set_state=function(b,c){var e=d.set_state.apply(this,arguments);if(e&&b.checkbox){if(!this.settings.checkbox.tie_selection){this.uncheck_all();var f=this;a.each(b.checkbox,function(a,b){f.check_node(b)})}return delete b.checkbox,this.set_state(b,c),!1}return e},this.refresh=function(a,b){return this.settings.checkbox.tie_selection||(this._data.checkbox.selected=[]),d.refresh.apply(this,arguments)}},a.jstree.defaults.conditionalselect=function(){return!0},a.jstree.plugins.conditionalselect=function(a,b){this.activate_node=function(a,c){return this.settings.conditionalselect.call(this,this.get_node(a),c)?b.activate_node.call(this,a,c):void 0}},a.jstree.defaults.contextmenu={select_node:!0,show_at_node:!0,items:function(b,c){return{create:{separator_before:!1,separator_after:!0,_disabled:!1,label:"Create",action:function(b){var c=a.jstree.reference(b.reference),d=c.get_node(b.reference);c.create_node(d,{},"last",function(a){try{c.edit(a)}catch(b){setTimeout(function(){c.edit(a)},0)}})}},rename:{separator_before:!1,separator_after:!1,_disabled:!1,label:"Rename",action:function(b){var c=a.jstree.reference(b.reference),d=c.get_node(b.reference);c.edit(d)}},remove:{separator_before:!1,icon:!1,separator_after:!1,_disabled:!1,label:"Delete",action:function(b){var c=a.jstree.reference(b.reference),d=c.get_node(b.reference);c.is_selected(d)?c.delete_node(c.get_selected()):c.delete_node(d)}},ccp:{separator_before:!0,icon:!1,separator_after:!1,label:"Edit",action:!1,submenu:{cut:{separator_before:!1,separator_after:!1,label:"Cut",action:function(b){var c=a.jstree.reference(b.reference),d=c.get_node(b.reference);c.is_selected(d)?c.cut(c.get_top_selected()):c.cut(d)}},copy:{separator_before:!1,icon:!1,separator_after:!1,label:"Copy",action:function(b){var c=a.jstree.reference(b.reference),d=c.get_node(b.reference);c.is_selected(d)?c.copy(c.get_top_selected()):c.copy(d)}},paste:{separator_before:!1,icon:!1,_disabled:function(b){return!a.jstree.reference(b.reference).can_paste()},separator_after:!1,label:"Paste",action:function(b){var c=a.jstree.reference(b.reference),d=c.get_node(b.reference);c.paste(d)}}}}}}},a.jstree.plugins.contextmenu=function(c,d){this.bind=function(){d.bind.call(this);var b=0,c=null,e,f;this.element.on("init.jstree loading.jstree ready.jstree",a.proxy(function(){this.get_container_ul().addClass("jstree-contextmenu")},this)).on("contextmenu.jstree",".jstree-anchor",a.proxy(function(a,d){"input"!==a.target.tagName.toLowerCase()&&(a.preventDefault(),b=a.ctrlKey?+new Date:0,(d||c)&&(b=+new Date+1e4),c&&clearTimeout(c),this.is_loading(a.currentTarget)||this.show_contextmenu(a.currentTarget,a.pageX,a.pageY,a))},this)).on("click.jstree",".jstree-anchor",a.proxy(function(c){this._data.contextmenu.visible&&(!b||+new Date-b>250)&&a.vakata.context.hide(),b=0},this)).on("touchstart.jstree",".jstree-anchor",function(b){b.originalEvent&&b.originalEvent.changedTouches&&b.originalEvent.changedTouches[0]&&(e=b.originalEvent.changedTouches[0].clientX,f=b.originalEvent.changedTouches[0].clientY,c=setTimeout(function(){a(b.currentTarget).trigger("contextmenu",!0)},750))}).on("touchmove.vakata.jstree",function(b){c&&b.originalEvent&&b.originalEvent.changedTouches&&b.originalEvent.changedTouches[0]&&(Math.abs(e-b.originalEvent.changedTouches[0].clientX)>10||Math.abs(f-b.originalEvent.changedTouches[0].clientY)>10)&&(clearTimeout(c),a.vakata.context.hide())}).on("touchend.vakata.jstree",function(a){c&&clearTimeout(c)}),a(i).on("context_hide.vakata.jstree",a.proxy(function(b,c){this._data.contextmenu.visible=!1,a(c.reference).removeClass("jstree-context")},this))},this.teardown=function(){this._data.contextmenu.visible&&a.vakata.context.hide(),d.teardown.call(this)},this.show_contextmenu=function(c,d,e,f){if(c=this.get_node(c),!c||c.id===a.jstree.root)return!1;var g=this.settings.contextmenu,h=this.get_node(c,!0),i=h.children(".jstree-anchor"),j=!1,k=!1;(g.show_at_node||d===b||e===b)&&(j=i.offset(),d=j.left,e=j.top+this._data.core.li_height),this.settings.contextmenu.select_node&&!this.is_selected(c)&&this.activate_node(c,f),k=g.items,a.isFunction(k)&&(k=k.call(this,c,a.proxy(function(a){this._show_contextmenu(c,d,e,a)},this))),a.isPlainObject(k)&&this._show_contextmenu(c,d,e,k)},this._show_contextmenu=function(b,c,d,e){var f=this.get_node(b,!0),g=f.children(".jstree-anchor");a(i).one("context_show.vakata.jstree",a.proxy(function(b,c){var d="jstree-contextmenu jstree-"+this.get_theme()+"-contextmenu";a(c.element).addClass(d),g.addClass("jstree-context")},this)),this._data.contextmenu.visible=!0,a.vakata.context.show(g,{x:c,y:d},e),this.trigger("show_contextmenu",{node:b,x:c,y:d})}},function(a){var b=!1,c={element:!1,reference:!1,position_x:0,position_y:0,items:[],html:"",is_visible:!1};a.vakata.context={settings:{hide_onmouseleave:0,icons:!0},_trigger:function(b){a(i).triggerHandler("context_"+b+".vakata",{reference:c.reference,element:c.element,position:{x:c.position_x,y:c.position_y}})},_execute:function(b){return b=c.items[b],b&&(!b._disabled||a.isFunction(b._disabled)&&!b._disabled({item:b,reference:c.reference,element:c.element}))&&b.action?b.action.call(null,{item:b,reference:c.reference,element:c.element,position:{x:c.position_x,y:c.position_y}}):!1},_parse:function(b,d){if(!b)return!1;d||(c.html="",c.items=[]);var e="",f=!1,g;return d&&(e+="<ul>"),a.each(b,function(b,d){return d?(c.items.push(d),!f&&d.separator_before&&(e+="<li class='vakata-context-separator'><a href='#' "+(a.vakata.context.settings.icons?"":'style="margin-left:0px;"')+">&#160;</a></li>"),f=!1,e+="<li class='"+(d._class||"")+(d._disabled===!0||a.isFunction(d._disabled)&&d._disabled({item:d,reference:c.reference,element:c.element})?" vakata-contextmenu-disabled ":"")+"' "+(d.shortcut?" data-shortcut='"+d.shortcut+"' ":"")+">",e+="<a href='#' rel='"+(c.items.length-1)+"' "+(d.title?"title='"+d.title+"'":"")+">",a.vakata.context.settings.icons&&(e+="<i ",d.icon&&(e+=-1!==d.icon.indexOf("/")||-1!==d.icon.indexOf(".")?" style='background:url(\""+d.icon+"\") center center no-repeat' ":" class='"+d.icon+"' "),e+="></i><span class='vakata-contextmenu-sep'>&#160;</span>"),e+=(a.isFunction(d.label)?d.label({item:b,reference:c.reference,element:c.element}):d.label)+(d.shortcut?' <span class="vakata-contextmenu-shortcut vakata-contextmenu-shortcut-'+d.shortcut+'">'+(d.shortcut_label||"")+"</span>":"")+"</a>",
+d.submenu&&(g=a.vakata.context._parse(d.submenu,!0),g&&(e+=g)),e+="</li>",void(d.separator_after&&(e+="<li class='vakata-context-separator'><a href='#' "+(a.vakata.context.settings.icons?"":'style="margin-left:0px;"')+">&#160;</a></li>",f=!0))):!0}),e=e.replace(/<li class\='vakata-context-separator'\><\/li\>$/,""),d&&(e+="</ul>"),d||(c.html=e,a.vakata.context._trigger("parse")),e.length>10?e:!1},_show_submenu:function(c){if(c=a(c),c.length&&c.children("ul").length){var d=c.children("ul"),e=c.offset().left,f=e+c.outerWidth(),g=c.offset().top,h=d.width(),i=d.height(),j=a(window).width()+a(window).scrollLeft(),k=a(window).height()+a(window).scrollTop();b?c[f-(h+10+c.outerWidth())<0?"addClass":"removeClass"]("vakata-context-left"):c[f+h>j&&e>j-f?"addClass":"removeClass"]("vakata-context-right"),g+i+10>k&&d.css("bottom","-1px"),c.hasClass("vakata-context-right")?h>e&&d.css("margin-right",e-h):h>j-f&&d.css("margin-left",j-f-h),d.show()}},show:function(d,e,f){var g,h,i,j,k,l,m,n,o=!0;switch(c.element&&c.element.length&&c.element.width(""),o){case!e&&!d:return!1;case!!e&&!!d:c.reference=d,c.position_x=e.x,c.position_y=e.y;break;case!e&&!!d:c.reference=d,g=d.offset(),c.position_x=g.left+d.outerHeight(),c.position_y=g.top;break;case!!e&&!d:c.position_x=e.x,c.position_y=e.y}d&&!f&&a(d).data("vakata_contextmenu")&&(f=a(d).data("vakata_contextmenu")),a.vakata.context._parse(f)&&c.element.html(c.html),c.items.length&&(c.element.appendTo("body"),h=c.element,i=c.position_x,j=c.position_y,k=h.width(),l=h.height(),m=a(window).width()+a(window).scrollLeft(),n=a(window).height()+a(window).scrollTop(),b&&(i-=h.outerWidth()-a(d).outerWidth(),i<a(window).scrollLeft()+20&&(i=a(window).scrollLeft()+20)),i+k+20>m&&(i=m-(k+20)),j+l+20>n&&(j=n-(l+20)),c.element.css({left:i,top:j}).show().find("a").first().focus().parent().addClass("vakata-context-hover"),c.is_visible=!0,a.vakata.context._trigger("show"))},hide:function(){c.is_visible&&(c.element.hide().find("ul").hide().end().find(":focus").blur().end().detach(),c.is_visible=!1,a.vakata.context._trigger("hide"))}},a(function(){b="rtl"===a("body").css("direction");var d=!1;c.element=a("<ul class='vakata-context'></ul>"),c.element.on("mouseenter","li",function(b){b.stopImmediatePropagation(),a.contains(this,b.relatedTarget)||(d&&clearTimeout(d),c.element.find(".vakata-context-hover").removeClass("vakata-context-hover").end(),a(this).siblings().find("ul").hide().end().end().parentsUntil(".vakata-context","li").addBack().addClass("vakata-context-hover"),a.vakata.context._show_submenu(this))}).on("mouseleave","li",function(b){a.contains(this,b.relatedTarget)||a(this).find(".vakata-context-hover").addBack().removeClass("vakata-context-hover")}).on("mouseleave",function(b){a(this).find(".vakata-context-hover").removeClass("vakata-context-hover"),a.vakata.context.settings.hide_onmouseleave&&(d=setTimeout(function(b){return function(){a.vakata.context.hide()}}(this),a.vakata.context.settings.hide_onmouseleave))}).on("click","a",function(b){b.preventDefault(),a(this).blur().parent().hasClass("vakata-context-disabled")||a.vakata.context._execute(a(this).attr("rel"))===!1||a.vakata.context.hide()}).on("keydown","a",function(b){var d=null;switch(b.which){case 13:case 32:b.type="click",b.preventDefault(),a(b.currentTarget).trigger(b);break;case 37:c.is_visible&&(c.element.find(".vakata-context-hover").last().closest("li").first().find("ul").hide().find(".vakata-context-hover").removeClass("vakata-context-hover").end().end().children("a").focus(),b.stopImmediatePropagation(),b.preventDefault());break;case 38:c.is_visible&&(d=c.element.find("ul:visible").addBack().last().children(".vakata-context-hover").removeClass("vakata-context-hover").prevAll("li:not(.vakata-context-separator)").first(),d.length||(d=c.element.find("ul:visible").addBack().last().children("li:not(.vakata-context-separator)").last()),d.addClass("vakata-context-hover").children("a").focus(),b.stopImmediatePropagation(),b.preventDefault());break;case 39:c.is_visible&&(c.element.find(".vakata-context-hover").last().children("ul").show().children("li:not(.vakata-context-separator)").removeClass("vakata-context-hover").first().addClass("vakata-context-hover").children("a").focus(),b.stopImmediatePropagation(),b.preventDefault());break;case 40:c.is_visible&&(d=c.element.find("ul:visible").addBack().last().children(".vakata-context-hover").removeClass("vakata-context-hover").nextAll("li:not(.vakata-context-separator)").first(),d.length||(d=c.element.find("ul:visible").addBack().last().children("li:not(.vakata-context-separator)").first()),d.addClass("vakata-context-hover").children("a").focus(),b.stopImmediatePropagation(),b.preventDefault());break;case 27:a.vakata.context.hide(),b.preventDefault()}}).on("keydown",function(a){a.preventDefault();var b=c.element.find(".vakata-contextmenu-shortcut-"+a.which).parent();b.parent().not(".vakata-context-disabled")&&b.click()}),a(i).on("mousedown.vakata.jstree",function(b){c.is_visible&&c.element[0]!==b.target&&!a.contains(c.element[0],b.target)&&a.vakata.context.hide()}).on("context_show.vakata.jstree",function(a,d){c.element.find("li:has(ul)").children("a").addClass("vakata-context-parent"),b&&c.element.addClass("vakata-context-rtl").css("direction","rtl"),c.element.find("ul").hide().end()})})}(a),a.jstree.defaults.dnd={copy:!0,open_timeout:500,is_draggable:!0,check_while_dragging:!0,always_copy:!1,inside_pos:0,drag_selection:!0,touch:!0,large_drop_target:!1,large_drag_target:!1,use_html5:!1};var k,l;a.jstree.plugins.dnd=function(b,c){this.init=function(a,b){c.init.call(this,a,b),this.settings.dnd.use_html5=this.settings.dnd.use_html5&&"draggable"in i.createElement("span")},this.bind=function(){c.bind.call(this),this.element.on(this.settings.dnd.use_html5?"dragstart.jstree":"mousedown.jstree touchstart.jstree",this.settings.dnd.large_drag_target?".jstree-node":".jstree-anchor",a.proxy(function(b){if(this.settings.dnd.large_drag_target&&a(b.target).closest(".jstree-node")[0]!==b.currentTarget)return!0;if("touchstart"===b.type&&(!this.settings.dnd.touch||"selected"===this.settings.dnd.touch&&!a(b.currentTarget).closest(".jstree-node").children(".jstree-anchor").hasClass("jstree-clicked")))return!0;var c=this.get_node(b.target),d=this.is_selected(c)&&this.settings.dnd.drag_selection?this.get_top_selected().length:1,e=d>1?d+" "+this.get_string("nodes"):this.get_text(b.currentTarget);if(this.settings.core.force_text&&(e=a.vakata.html.escape(e)),c&&c.id&&c.id!==a.jstree.root&&(1===b.which||"touchstart"===b.type||"dragstart"===b.type)&&(this.settings.dnd.is_draggable===!0||a.isFunction(this.settings.dnd.is_draggable)&&this.settings.dnd.is_draggable.call(this,d>1?this.get_top_selected(!0):[c],b))){if(k={jstree:!0,origin:this,obj:this.get_node(c,!0),nodes:d>1?this.get_top_selected():[c.id]},l=b.currentTarget,!this.settings.dnd.use_html5)return this.element.trigger("mousedown.jstree"),a.vakata.dnd.start(b,k,'<div id="jstree-dnd" class="jstree-'+this.get_theme()+" jstree-"+this.get_theme()+"-"+this.get_theme_variant()+" "+(this.settings.core.themes.responsive?" jstree-dnd-responsive":"")+'"><i class="jstree-icon jstree-er"></i>'+e+'<ins class="jstree-copy" style="display:none;">+</ins></div>');a.vakata.dnd._trigger("start",b,{helper:a(),element:l,data:k})}},this)),this.settings.dnd.use_html5&&this.element.on("dragover.jstree",function(b){return b.preventDefault(),a.vakata.dnd._trigger("move",b,{helper:a(),element:l,data:k}),!1}).on("drop.jstree",a.proxy(function(b){return b.preventDefault(),a.vakata.dnd._trigger("stop",b,{helper:a(),element:l,data:k}),!1},this))},this.redraw_node=function(a,b,d,e){if(a=c.redraw_node.apply(this,arguments),a&&this.settings.dnd.use_html5)if(this.settings.dnd.large_drag_target)a.setAttribute("draggable",!0);else{var f,g,h=null;for(f=0,g=a.childNodes.length;g>f;f++)if(a.childNodes[f]&&a.childNodes[f].className&&-1!==a.childNodes[f].className.indexOf("jstree-anchor")){h=a.childNodes[f];break}h&&h.setAttribute("draggable",!0)}return a}},a(function(){var c=!1,d=!1,e=!1,f=!1,g=a('<div id="jstree-marker">&#160;</div>').hide();a(i).on("dnd_start.vakata.jstree",function(a,b){c=!1,e=!1,b&&b.data&&b.data.jstree&&g.appendTo("body")}).on("dnd_move.vakata.jstree",function(h,i){var j=i.event.target!==e.target;if(f&&(!i.event||"dragover"!==i.event.type||j)&&clearTimeout(f),i&&i.data&&i.data.jstree&&(!i.event.target.id||"jstree-marker"!==i.event.target.id)){e=i.event;var k=a.jstree.reference(i.event.target),l=!1,m=!1,n=!1,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E;if(k&&k._data&&k._data.dnd)if(g.attr("class","jstree-"+k.get_theme()+(k.settings.core.themes.responsive?" jstree-dnd-responsive":"")),D=i.data.origin&&(i.data.origin.settings.dnd.always_copy||i.data.origin.settings.dnd.copy&&(i.event.metaKey||i.event.ctrlKey)),i.helper.children().attr("class","jstree-"+k.get_theme()+" jstree-"+k.get_theme()+"-"+k.get_theme_variant()+" "+(k.settings.core.themes.responsive?" jstree-dnd-responsive":"")).find(".jstree-copy").first()[D?"show":"hide"](),i.event.target!==k.element[0]&&i.event.target!==k.get_container_ul()[0]||0!==k.get_container_ul().children().length){if(l=k.settings.dnd.large_drop_target?a(i.event.target).closest(".jstree-node").children(".jstree-anchor"):a(i.event.target).closest(".jstree-anchor"),l&&l.length&&l.parent().is(".jstree-closed, .jstree-open, .jstree-leaf")&&(m=l.offset(),n=(i.event.pageY!==b?i.event.pageY:i.event.originalEvent.pageY)-m.top,r=l.outerHeight(),u=r/3>n?["b","i","a"]:n>r-r/3?["a","i","b"]:n>r/2?["i","a","b"]:["i","b","a"],a.each(u,function(b,e){switch(e){case"b":p=m.left-6,q=m.top,s=k.get_parent(l),t=l.parent().index();break;case"i":B=k.settings.dnd.inside_pos,C=k.get_node(l.parent()),p=m.left-2,q=m.top+r/2+1,s=C.id,t="first"===B?0:"last"===B?C.children.length:Math.min(B,C.children.length);break;case"a":p=m.left-6,q=m.top+r,s=k.get_parent(l),t=l.parent().index()+1}for(v=!0,w=0,x=i.data.nodes.length;x>w;w++)if(y=i.data.origin&&(i.data.origin.settings.dnd.always_copy||i.data.origin.settings.dnd.copy&&(i.event.metaKey||i.event.ctrlKey))?"copy_node":"move_node",z=t,"move_node"===y&&"a"===e&&i.data.origin&&i.data.origin===k&&s===k.get_parent(i.data.nodes[w])&&(A=k.get_node(s),z>a.inArray(i.data.nodes[w],A.children)&&(z-=1)),v=v&&(k&&k.settings&&k.settings.dnd&&k.settings.dnd.check_while_dragging===!1||k.check(y,i.data.origin&&i.data.origin!==k?i.data.origin.get_node(i.data.nodes[w]):i.data.nodes[w],s,z,{dnd:!0,ref:k.get_node(l.parent()),pos:e,origin:i.data.origin,is_multi:i.data.origin&&i.data.origin!==k,is_foreign:!i.data.origin})),!v){k&&k.last_error&&(d=k.last_error());break}return"i"===e&&l.parent().is(".jstree-closed")&&k.settings.dnd.open_timeout&&(!i.event||"dragover"!==i.event.type||j)&&(f&&clearTimeout(f),f=setTimeout(function(a,b){return function(){a.open_node(b)}}(k,l),k.settings.dnd.open_timeout)),v?(E=k.get_node(s,!0),E.hasClass(".jstree-dnd-parent")||(a(".jstree-dnd-parent").removeClass("jstree-dnd-parent"),E.addClass("jstree-dnd-parent")),c={ins:k,par:s,pos:"i"!==e||"last"!==B||0!==t||k.is_loaded(C)?t:"last"},g.css({left:p+"px",top:q+"px"}).show(),i.helper.find(".jstree-icon").first().removeClass("jstree-er").addClass("jstree-ok"),i.event.originalEvent&&i.event.originalEvent.dataTransfer&&(i.event.originalEvent.dataTransfer.dropEffect=D?"copy":"move"),d={},u=!0,!1):void 0}),u===!0))return}else{for(v=!0,w=0,x=i.data.nodes.length;x>w;w++)if(v=v&&k.check(i.data.origin&&(i.data.origin.settings.dnd.always_copy||i.data.origin.settings.dnd.copy&&(i.event.metaKey||i.event.ctrlKey))?"copy_node":"move_node",i.data.origin&&i.data.origin!==k?i.data.origin.get_node(i.data.nodes[w]):i.data.nodes[w],a.jstree.root,"last",{dnd:!0,ref:k.get_node(a.jstree.root),pos:"i",origin:i.data.origin,is_multi:i.data.origin&&i.data.origin!==k,is_foreign:!i.data.origin}),!v)break;if(v)return c={ins:k,par:a.jstree.root,pos:"last"},g.hide(),i.helper.find(".jstree-icon").first().removeClass("jstree-er").addClass("jstree-ok"),void(i.event.originalEvent&&i.event.originalEvent.dataTransfer&&(i.event.originalEvent.dataTransfer.dropEffect=D?"copy":"move"))}a(".jstree-dnd-parent").removeClass("jstree-dnd-parent"),c=!1,i.helper.find(".jstree-icon").removeClass("jstree-ok").addClass("jstree-er"),i.event.originalEvent&&i.event.originalEvent.dataTransfer&&(i.event.originalEvent.dataTransfer.dropEffect="none"),g.hide()}}).on("dnd_scroll.vakata.jstree",function(a,b){b&&b.data&&b.data.jstree&&(g.hide(),c=!1,e=!1,b.helper.find(".jstree-icon").first().removeClass("jstree-ok").addClass("jstree-er"))}).on("dnd_stop.vakata.jstree",function(b,h){if(a(".jstree-dnd-parent").removeClass("jstree-dnd-parent"),f&&clearTimeout(f),h&&h.data&&h.data.jstree){g.hide().detach();var i,j,k=[];if(c){for(i=0,j=h.data.nodes.length;j>i;i++)k[i]=h.data.origin?h.data.origin.get_node(h.data.nodes[i]):h.data.nodes[i];c.ins[h.data.origin&&(h.data.origin.settings.dnd.always_copy||h.data.origin.settings.dnd.copy&&(h.event.metaKey||h.event.ctrlKey))?"copy_node":"move_node"](k,c.par,c.pos,!1,!1,!1,h.data.origin)}else i=a(h.event.target).closest(".jstree"),i.length&&d&&d.error&&"check"===d.error&&(i=i.jstree(!0),i&&i.settings.core.error.call(this,d));e=!1,c=!1}}).on("keyup.jstree keydown.jstree",function(b,h){h=a.vakata.dnd._get(),h&&h.data&&h.data.jstree&&("keyup"===b.type&&27===b.which?(f&&clearTimeout(f),c=!1,d=!1,e=!1,f=!1,g.hide().detach(),a.vakata.dnd._clean()):(h.helper.find(".jstree-copy").first()[h.data.origin&&(h.data.origin.settings.dnd.always_copy||h.data.origin.settings.dnd.copy&&(b.metaKey||b.ctrlKey))?"show":"hide"](),e&&(e.metaKey=b.metaKey,e.ctrlKey=b.ctrlKey,a.vakata.dnd._trigger("move",e))))})}),function(a){a.vakata.html={div:a("<div />"),escape:function(b){return a.vakata.html.div.text(b).html()},strip:function(b){return a.vakata.html.div.empty().append(a.parseHTML(b)).text()}};var c={element:!1,target:!1,is_down:!1,is_drag:!1,helper:!1,helper_w:0,data:!1,init_x:0,init_y:0,scroll_l:0,scroll_t:0,scroll_e:!1,scroll_i:!1,is_touch:!1};a.vakata.dnd={settings:{scroll_speed:10,scroll_proximity:20,helper_left:5,helper_top:10,threshold:5,threshold_touch:10},_trigger:function(c,d,e){e===b&&(e=a.vakata.dnd._get()),e.event=d,a(i).triggerHandler("dnd_"+c+".vakata",e)},_get:function(){return{data:c.data,element:c.element,helper:c.helper}},_clean:function(){c.helper&&c.helper.remove(),c.scroll_i&&(clearInterval(c.scroll_i),c.scroll_i=!1),c={element:!1,target:!1,is_down:!1,is_drag:!1,helper:!1,helper_w:0,data:!1,init_x:0,init_y:0,scroll_l:0,scroll_t:0,scroll_e:!1,scroll_i:!1,is_touch:!1},a(i).off("mousemove.vakata.jstree touchmove.vakata.jstree",a.vakata.dnd.drag),a(i).off("mouseup.vakata.jstree touchend.vakata.jstree",a.vakata.dnd.stop)},_scroll:function(b){if(!c.scroll_e||!c.scroll_l&&!c.scroll_t)return c.scroll_i&&(clearInterval(c.scroll_i),c.scroll_i=!1),!1;if(!c.scroll_i)return c.scroll_i=setInterval(a.vakata.dnd._scroll,100),!1;if(b===!0)return!1;var d=c.scroll_e.scrollTop(),e=c.scroll_e.scrollLeft();c.scroll_e.scrollTop(d+c.scroll_t*a.vakata.dnd.settings.scroll_speed),c.scroll_e.scrollLeft(e+c.scroll_l*a.vakata.dnd.settings.scroll_speed),(d!==c.scroll_e.scrollTop()||e!==c.scroll_e.scrollLeft())&&a.vakata.dnd._trigger("scroll",c.scroll_e)},start:function(b,d,e){"touchstart"===b.type&&b.originalEvent&&b.originalEvent.changedTouches&&b.originalEvent.changedTouches[0]&&(b.pageX=b.originalEvent.changedTouches[0].pageX,b.pageY=b.originalEvent.changedTouches[0].pageY,b.target=i.elementFromPoint(b.originalEvent.changedTouches[0].pageX-window.pageXOffset,b.originalEvent.changedTouches[0].pageY-window.pageYOffset)),c.is_drag&&a.vakata.dnd.stop({});try{b.currentTarget.unselectable="on",b.currentTarget.onselectstart=function(){return!1},b.currentTarget.style&&(b.currentTarget.style.touchAction="none",b.currentTarget.style.msTouchAction="none",b.currentTarget.style.MozUserSelect="none")}catch(f){}return c.init_x=b.pageX,c.init_y=b.pageY,c.data=d,c.is_down=!0,c.element=b.currentTarget,c.target=b.target,c.is_touch="touchstart"===b.type,e!==!1&&(c.helper=a("<div id='vakata-dnd'></div>").html(e).css({display:"block",margin:"0",padding:"0",position:"absolute",top:"-2000px",lineHeight:"16px",zIndex:"10000"})),a(i).on("mousemove.vakata.jstree touchmove.vakata.jstree",a.vakata.dnd.drag),a(i).on("mouseup.vakata.jstree touchend.vakata.jstree",a.vakata.dnd.stop),!1},drag:function(b){if("touchmove"===b.type&&b.originalEvent&&b.originalEvent.changedTouches&&b.originalEvent.changedTouches[0]&&(b.pageX=b.originalEvent.changedTouches[0].pageX,b.pageY=b.originalEvent.changedTouches[0].pageY,b.target=i.elementFromPoint(b.originalEvent.changedTouches[0].pageX-window.pageXOffset,b.originalEvent.changedTouches[0].pageY-window.pageYOffset)),c.is_down){if(!c.is_drag){if(!(Math.abs(b.pageX-c.init_x)>(c.is_touch?a.vakata.dnd.settings.threshold_touch:a.vakata.dnd.settings.threshold)||Math.abs(b.pageY-c.init_y)>(c.is_touch?a.vakata.dnd.settings.threshold_touch:a.vakata.dnd.settings.threshold)))return;c.helper&&(c.helper.appendTo("body"),c.helper_w=c.helper.outerWidth()),c.is_drag=!0,a(c.target).one("click.vakata",!1),a.vakata.dnd._trigger("start",b)}var d=!1,e=!1,f=!1,g=!1,h=!1,j=!1,k=!1,l=!1,m=!1,n=!1;return c.scroll_t=0,c.scroll_l=0,c.scroll_e=!1,a(a(b.target).parentsUntil("body").addBack().get().reverse()).filter(function(){return/^auto|scroll$/.test(a(this).css("overflow"))&&(this.scrollHeight>this.offsetHeight||this.scrollWidth>this.offsetWidth)}).each(function(){var d=a(this),e=d.offset();return this.scrollHeight>this.offsetHeight&&(e.top+d.height()-b.pageY<a.vakata.dnd.settings.scroll_proximity&&(c.scroll_t=1),b.pageY-e.top<a.vakata.dnd.settings.scroll_proximity&&(c.scroll_t=-1)),this.scrollWidth>this.offsetWidth&&(e.left+d.width()-b.pageX<a.vakata.dnd.settings.scroll_proximity&&(c.scroll_l=1),b.pageX-e.left<a.vakata.dnd.settings.scroll_proximity&&(c.scroll_l=-1)),c.scroll_t||c.scroll_l?(c.scroll_e=a(this),!1):void 0}),c.scroll_e||(d=a(i),e=a(window),f=d.height(),g=e.height(),h=d.width(),j=e.width(),k=d.scrollTop(),l=d.scrollLeft(),f>g&&b.pageY-k<a.vakata.dnd.settings.scroll_proximity&&(c.scroll_t=-1),f>g&&g-(b.pageY-k)<a.vakata.dnd.settings.scroll_proximity&&(c.scroll_t=1),h>j&&b.pageX-l<a.vakata.dnd.settings.scroll_proximity&&(c.scroll_l=-1),h>j&&j-(b.pageX-l)<a.vakata.dnd.settings.scroll_proximity&&(c.scroll_l=1),(c.scroll_t||c.scroll_l)&&(c.scroll_e=d)),c.scroll_e&&a.vakata.dnd._scroll(!0),c.helper&&(m=parseInt(b.pageY+a.vakata.dnd.settings.helper_top,10),n=parseInt(b.pageX+a.vakata.dnd.settings.helper_left,10),f&&m+25>f&&(m=f-50),h&&n+c.helper_w>h&&(n=h-(c.helper_w+2)),c.helper.css({left:n+"px",top:m+"px"})),a.vakata.dnd._trigger("move",b),!1}},stop:function(b){if("touchend"===b.type&&b.originalEvent&&b.originalEvent.changedTouches&&b.originalEvent.changedTouches[0]&&(b.pageX=b.originalEvent.changedTouches[0].pageX,b.pageY=b.originalEvent.changedTouches[0].pageY,b.target=i.elementFromPoint(b.originalEvent.changedTouches[0].pageX-window.pageXOffset,b.originalEvent.changedTouches[0].pageY-window.pageYOffset)),c.is_drag)b.target!==c.target&&a(c.target).off("click.vakata"),a.vakata.dnd._trigger("stop",b);else if("touchend"===b.type&&b.target===c.target){var d=setTimeout(function(){a(b.target).click()},100);a(b.target).one("click",function(){d&&clearTimeout(d)})}return a.vakata.dnd._clean(),!1}}}(a),a.jstree.defaults.massload=null,a.jstree.plugins.massload=function(b,c){this.init=function(a,b){this._data.massload={},c.init.call(this,a,b)},this._load_nodes=function(b,d,e,f){var g=this.settings.massload,h=JSON.stringify(b),i=[],j=this._model.data,k,l,m;if(!e){for(k=0,l=b.length;l>k;k++)(!j[b[k]]||!j[b[k]].state.loaded&&!j[b[k]].state.failed||f)&&(i.push(b[k]),m=this.get_node(b[k],!0),m&&m.length&&m.addClass("jstree-loading").attr("aria-busy",!0));if(this._data.massload={},i.length){if(a.isFunction(g))return g.call(this,i,a.proxy(function(a){var g,h;if(a)for(g in a)a.hasOwnProperty(g)&&(this._data.massload[g]=a[g]);for(g=0,h=b.length;h>g;g++)m=this.get_node(b[g],!0),m&&m.length&&m.removeClass("jstree-loading").attr("aria-busy",!1);c._load_nodes.call(this,b,d,e,f)},this));if("object"==typeof g&&g&&g.url)return g=a.extend(!0,{},g),a.isFunction(g.url)&&(g.url=g.url.call(this,i)),a.isFunction(g.data)&&(g.data=g.data.call(this,i)),a.ajax(g).done(a.proxy(function(a,g,h){var i,j;if(a)for(i in a)a.hasOwnProperty(i)&&(this._data.massload[i]=a[i]);for(i=0,j=b.length;j>i;i++)m=this.get_node(b[i],!0),m&&m.length&&m.removeClass("jstree-loading").attr("aria-busy",!1);c._load_nodes.call(this,b,d,e,f)},this)).fail(a.proxy(function(a){c._load_nodes.call(this,b,d,e,f)},this))}}return c._load_nodes.call(this,b,d,e,f)},this._load_node=function(b,d){var e=this._data.massload[b.id],f=null,g;return e?(f=this["string"==typeof e?"_append_html_data":"_append_json_data"](b,"string"==typeof e?a(a.parseHTML(e)).filter(function(){return 3!==this.nodeType}):e,function(a){d.call(this,a)}),g=this.get_node(b.id,!0),g&&g.length&&g.removeClass("jstree-loading").attr("aria-busy",!1),delete this._data.massload[b.id],f):c._load_node.call(this,b,d)}},a.jstree.defaults.search={ajax:!1,fuzzy:!1,case_sensitive:!1,show_only_matches:!1,show_only_matches_children:!1,close_opened_onclear:!0,search_leaves_only:!1,search_callback:!1},a.jstree.plugins.search=function(c,d){this.bind=function(){d.bind.call(this),this._data.search.str="",this._data.search.dom=a(),this._data.search.res=[],this._data.search.opn=[],this._data.search.som=!1,this._data.search.smc=!1,this._data.search.hdn=[],this.element.on("search.jstree",a.proxy(function(b,c){if(this._data.search.som&&c.res.length){var d=this._model.data,e,f,g=[],h,i;for(e=0,f=c.res.length;f>e;e++)if(d[c.res[e]]&&!d[c.res[e]].state.hidden&&(g.push(c.res[e]),g=g.concat(d[c.res[e]].parents),this._data.search.smc))for(h=0,i=d[c.res[e]].children_d.length;i>h;h++)d[d[c.res[e]].children_d[h]]&&!d[d[c.res[e]].children_d[h]].state.hidden&&g.push(d[c.res[e]].children_d[h]);g=a.vakata.array_remove_item(a.vakata.array_unique(g),a.jstree.root),this._data.search.hdn=this.hide_all(!0),this.show_node(g,!0),this.redraw(!0)}},this)).on("clear_search.jstree",a.proxy(function(a,b){this._data.search.som&&b.res.length&&(this.show_node(this._data.search.hdn,!0),this.redraw(!0))},this))},this.search=function(c,d,e,f,g,h){if(c===!1||""===a.trim(c.toString()))return this.clear_search();f=this.get_node(f),f=f&&f.id?f.id:null,c=c.toString();var i=this.settings.search,j=i.ajax?i.ajax:!1,k=this._model.data,l=null,m=[],n=[],o,p;if(this._data.search.res.length&&!g&&this.clear_search(),e===b&&(e=i.show_only_matches),h===b&&(h=i.show_only_matches_children),!d&&j!==!1)return a.isFunction(j)?j.call(this,c,a.proxy(function(b){b&&b.d&&(b=b.d),this._load_nodes(a.isArray(b)?a.vakata.array_unique(b):[],function(){this.search(c,!0,e,f,g,h)})},this),f):(j=a.extend({},j),j.data||(j.data={}),j.data.str=c,f&&(j.data.inside=f),this._data.search.lastRequest&&this._data.search.lastRequest.abort(),this._data.search.lastRequest=a.ajax(j).fail(a.proxy(function(){this._data.core.last_error={error:"ajax",plugin:"search",id:"search_01",reason:"Could not load search parents",data:JSON.stringify(j)},this.settings.core.error.call(this,this._data.core.last_error)},this)).done(a.proxy(function(b){b&&b.d&&(b=b.d),this._load_nodes(a.isArray(b)?a.vakata.array_unique(b):[],function(){this.search(c,!0,e,f,g,h)})},this)),this._data.search.lastRequest);if(g||(this._data.search.str=c,this._data.search.dom=a(),this._data.search.res=[],this._data.search.opn=[],this._data.search.som=e,this._data.search.smc=h),l=new a.vakata.search(c,!0,{caseSensitive:i.case_sensitive,fuzzy:i.fuzzy}),a.each(k[f?f:a.jstree.root].children_d,function(a,b){var d=k[b];d.text&&!d.state.hidden&&(!i.search_leaves_only||d.state.loaded&&0===d.children.length)&&(i.search_callback&&i.search_callback.call(this,c,d)||!i.search_callback&&l.search(d.text).isMatch)&&(m.push(b),n=n.concat(d.parents))}),m.length){for(n=a.vakata.array_unique(n),o=0,p=n.length;p>o;o++)n[o]!==a.jstree.root&&k[n[o]]&&this.open_node(n[o],null,0)===!0&&this._data.search.opn.push(n[o]);g?(this._data.search.dom=this._data.search.dom.add(a(this.element[0].querySelectorAll("#"+a.map(m,function(b){return-1!=="0123456789".indexOf(b[0])?"\\3"+b[0]+" "+b.substr(1).replace(a.jstree.idregex,"\\$&"):b.replace(a.jstree.idregex,"\\$&")}).join(", #")))),this._data.search.res=a.vakata.array_unique(this._data.search.res.concat(m))):(this._data.search.dom=a(this.element[0].querySelectorAll("#"+a.map(m,function(b){return-1!=="0123456789".indexOf(b[0])?"\\3"+b[0]+" "+b.substr(1).replace(a.jstree.idregex,"\\$&"):b.replace(a.jstree.idregex,"\\$&")}).join(", #"))),this._data.search.res=m),this._data.search.dom.children(".jstree-anchor").addClass("jstree-search")}this.trigger("search",{nodes:this._data.search.dom,str:c,res:this._data.search.res,show_only_matches:e})},this.clear_search=function(){this.settings.search.close_opened_onclear&&this.close_node(this._data.search.opn,0),this.trigger("clear_search",{nodes:this._data.search.dom,str:this._data.search.str,res:this._data.search.res}),this._data.search.res.length&&(this._data.search.dom=a(this.element[0].querySelectorAll("#"+a.map(this._data.search.res,function(b){return-1!=="0123456789".indexOf(b[0])?"\\3"+b[0]+" "+b.substr(1).replace(a.jstree.idregex,"\\$&"):b.replace(a.jstree.idregex,"\\$&")}).join(", #"))),this._data.search.dom.children(".jstree-anchor").removeClass("jstree-search")),this._data.search.str="",this._data.search.res=[],this._data.search.opn=[],this._data.search.dom=a()},this.redraw_node=function(b,c,e,f){if(b=d.redraw_node.apply(this,arguments),b&&-1!==a.inArray(b.id,this._data.search.res)){var g,h,i=null;for(g=0,h=b.childNodes.length;h>g;g++)if(b.childNodes[g]&&b.childNodes[g].className&&-1!==b.childNodes[g].className.indexOf("jstree-anchor")){i=b.childNodes[g];break}i&&(i.className+=" jstree-search")}return b}},function(a){a.vakata.search=function(b,c,d){d=d||{},d=a.extend({},a.vakata.search.defaults,d),d.fuzzy!==!1&&(d.fuzzy=!0),b=d.caseSensitive?b:b.toLowerCase();var e=d.location,f=d.distance,g=d.threshold,h=b.length,i,j,k,l;return h>32&&(d.fuzzy=!1),d.fuzzy&&(i=1<<h-1,j=function(){var a={},c=0;for(c=0;h>c;c++)a[b.charAt(c)]=0;for(c=0;h>c;c++)a[b.charAt(c)]|=1<<h-c-1;return a}(),k=function(a,b){var c=a/h,d=Math.abs(e-b);return f?c+d/f:d?1:c}),l=function(a){if(a=d.caseSensitive?a:a.toLowerCase(),b===a||-1!==a.indexOf(b))return{isMatch:!0,score:0};if(!d.fuzzy)return{isMatch:!1,score:1};var c,f,l=a.length,m=g,n=a.indexOf(b,e),o,p,q=h+l,r,s,t,u,v,w=1,x=[];for(-1!==n&&(m=Math.min(k(0,n),m),n=a.lastIndexOf(b,e+h),-1!==n&&(m=Math.min(k(0,n),m))),n=-1,c=0;h>c;c++){o=0,p=q;while(p>o)k(c,e+p)<=m?o=p:q=p,p=Math.floor((q-o)/2+o);for(q=p,s=Math.max(1,e-p+1),t=Math.min(e+p,l)+h,u=new Array(t+2),u[t+1]=(1<<c)-1,f=t;f>=s;f--)if(v=j[a.charAt(f-1)],0===c?u[f]=(u[f+1]<<1|1)&v:u[f]=(u[f+1]<<1|1)&v|((r[f+1]|r[f])<<1|1)|r[f+1],u[f]&i&&(w=k(c,f-1),m>=w)){if(m=w,n=f-1,x.push(n),!(n>e))break;s=Math.max(1,2*e-n)}if(k(c+1,e)>m)break;r=u}return{isMatch:n>=0,score:w}},c===!0?{search:l}:l(c)},a.vakata.search.defaults={location:0,distance:100,threshold:.6,fuzzy:!1,caseSensitive:!1}}(a),a.jstree.defaults.sort=function(a,b){return this.get_text(a)>this.get_text(b)?1:-1},a.jstree.plugins.sort=function(b,c){this.bind=function(){c.bind.call(this),this.element.on("model.jstree",a.proxy(function(a,b){this.sort(b.parent,!0)},this)).on("rename_node.jstree create_node.jstree",a.proxy(function(a,b){this.sort(b.parent||b.node.parent,!1),this.redraw_node(b.parent||b.node.parent,!0)},this)).on("move_node.jstree copy_node.jstree",a.proxy(function(a,b){this.sort(b.parent,!1),this.redraw_node(b.parent,!0)},this))},this.sort=function(b,c){var d,e;if(b=this.get_node(b),b&&b.children&&b.children.length&&(b.children.sort(a.proxy(this.settings.sort,this)),c))for(d=0,e=b.children_d.length;e>d;d++)this.sort(b.children_d[d],!1)}};var m=!1;a.jstree.defaults.state={key:"jstree",events:"changed.jstree open_node.jstree close_node.jstree check_node.jstree uncheck_node.jstree",ttl:!1,filter:!1,preserve_loaded:!1},a.jstree.plugins.state=function(b,c){this.bind=function(){c.bind.call(this);var b=a.proxy(function(){this.element.on(this.settings.state.events,a.proxy(function(){m&&clearTimeout(m),m=setTimeout(a.proxy(function(){this.save_state()},this),100)},this)),this.trigger("state_ready")},this);this.element.on("ready.jstree",a.proxy(function(a,c){this.element.one("restore_state.jstree",b),this.restore_state()||b()},this))},this.save_state=function(){var b=this.get_state();this.settings.state.preserve_loaded||delete b.core.loaded;var c={state:b,ttl:this.settings.state.ttl,sec:+new Date};a.vakata.storage.set(this.settings.state.key,JSON.stringify(c))},this.restore_state=function(){var b=a.vakata.storage.get(this.settings.state.key);if(b)try{b=JSON.parse(b)}catch(c){return!1}return b&&b.ttl&&b.sec&&+new Date-b.sec>b.ttl?!1:(b&&b.state&&(b=b.state),b&&a.isFunction(this.settings.state.filter)&&(b=this.settings.state.filter.call(this,b)),b?(this.settings.state.preserve_loaded||delete b.core.loaded,this.element.one("set_state.jstree",function(c,d){d.instance.trigger("restore_state",{state:a.extend(!0,{},b)})}),this.set_state(b),!0):!1)},this.clear_state=function(){return a.vakata.storage.del(this.settings.state.key)}},function(a,b){a.vakata.storage={set:function(a,b){return window.localStorage.setItem(a,b)},get:function(a){return window.localStorage.getItem(a)},del:function(a){return window.localStorage.removeItem(a)}}}(a),a.jstree.defaults.types={"default":{}},a.jstree.defaults.types[a.jstree.root]={},a.jstree.plugins.types=function(c,d){this.init=function(c,e){var f,g;if(e&&e.types&&e.types["default"])for(f in e.types)if("default"!==f&&f!==a.jstree.root&&e.types.hasOwnProperty(f))for(g in e.types["default"])e.types["default"].hasOwnProperty(g)&&e.types[f][g]===b&&(e.types[f][g]=e.types["default"][g]);d.init.call(this,c,e),this._model.data[a.jstree.root].type=a.jstree.root},this.refresh=function(b,c){d.refresh.call(this,b,c),this._model.data[a.jstree.root].type=a.jstree.root},this.bind=function(){this.element.on("model.jstree",a.proxy(function(c,d){var e=this._model.data,f=d.nodes,g=this.settings.types,h,i,j="default",k;for(h=0,i=f.length;i>h;h++){if(j="default",e[f[h]].original&&e[f[h]].original.type&&g[e[f[h]].original.type]&&(j=e[f[h]].original.type),e[f[h]].data&&e[f[h]].data.jstree&&e[f[h]].data.jstree.type&&g[e[f[h]].data.jstree.type]&&(j=e[f[h]].data.jstree.type),e[f[h]].type=j,e[f[h]].icon===!0&&g[j].icon!==b&&(e[f[h]].icon=g[j].icon),g[j].li_attr!==b&&"object"==typeof g[j].li_attr)for(k in g[j].li_attr)if(g[j].li_attr.hasOwnProperty(k)){if("id"===k)continue;e[f[h]].li_attr[k]===b?e[f[h]].li_attr[k]=g[j].li_attr[k]:"class"===k&&(e[f[h]].li_attr["class"]=g[j].li_attr["class"]+" "+e[f[h]].li_attr["class"])}if(g[j].a_attr!==b&&"object"==typeof g[j].a_attr)for(k in g[j].a_attr)if(g[j].a_attr.hasOwnProperty(k)){if("id"===k)continue;e[f[h]].a_attr[k]===b?e[f[h]].a_attr[k]=g[j].a_attr[k]:"href"===k&&"#"===e[f[h]].a_attr[k]?e[f[h]].a_attr.href=g[j].a_attr.href:"class"===k&&(e[f[h]].a_attr["class"]=g[j].a_attr["class"]+" "+e[f[h]].a_attr["class"])}}e[a.jstree.root].type=a.jstree.root},this)),d.bind.call(this)},this.get_json=function(b,c,e){var f,g,h=this._model.data,i=c?a.extend(!0,{},c,{no_id:!1}):{},j=d.get_json.call(this,b,i,e);if(j===!1)return!1;if(a.isArray(j))for(f=0,g=j.length;g>f;f++)j[f].type=j[f].id&&h[j[f].id]&&h[j[f].id].type?h[j[f].id].type:"default",c&&c.no_id&&(delete j[f].id,j[f].li_attr&&j[f].li_attr.id&&delete j[f].li_attr.id,j[f].a_attr&&j[f].a_attr.id&&delete j[f].a_attr.id);else j.type=j.id&&h[j.id]&&h[j.id].type?h[j.id].type:"default",c&&c.no_id&&(j=this._delete_ids(j));return j},this._delete_ids=function(b){if(a.isArray(b)){for(var c=0,d=b.length;d>c;c++)b[c]=this._delete_ids(b[c]);return b}return delete b.id,b.li_attr&&b.li_attr.id&&delete b.li_attr.id,b.a_attr&&b.a_attr.id&&delete b.a_attr.id,b.children&&a.isArray(b.children)&&(b.children=this._delete_ids(b.children)),
+b},this.check=function(c,e,f,g,h){if(d.check.call(this,c,e,f,g,h)===!1)return!1;e=e&&e.id?e:this.get_node(e),f=f&&f.id?f:this.get_node(f);var i=e&&e.id?h&&h.origin?h.origin:a.jstree.reference(e.id):null,j,k,l,m;switch(i=i&&i._model&&i._model.data?i._model.data:null,c){case"create_node":case"move_node":case"copy_node":if("move_node"!==c||-1===a.inArray(e.id,f.children)){if(j=this.get_rules(f),j.max_children!==b&&-1!==j.max_children&&j.max_children===f.children.length)return this._data.core.last_error={error:"check",plugin:"types",id:"types_01",reason:"max_children prevents function: "+c,data:JSON.stringify({chk:c,pos:g,obj:e&&e.id?e.id:!1,par:f&&f.id?f.id:!1})},!1;if(j.valid_children!==b&&-1!==j.valid_children&&-1===a.inArray(e.type||"default",j.valid_children))return this._data.core.last_error={error:"check",plugin:"types",id:"types_02",reason:"valid_children prevents function: "+c,data:JSON.stringify({chk:c,pos:g,obj:e&&e.id?e.id:!1,par:f&&f.id?f.id:!1})},!1;if(i&&e.children_d&&e.parents){for(k=0,l=0,m=e.children_d.length;m>l;l++)k=Math.max(k,i[e.children_d[l]].parents.length);k=k-e.parents.length+1}(0>=k||k===b)&&(k=1);do{if(j.max_depth!==b&&-1!==j.max_depth&&j.max_depth<k)return this._data.core.last_error={error:"check",plugin:"types",id:"types_03",reason:"max_depth prevents function: "+c,data:JSON.stringify({chk:c,pos:g,obj:e&&e.id?e.id:!1,par:f&&f.id?f.id:!1})},!1;f=this.get_node(f.parent),j=this.get_rules(f),k++}while(f)}}return!0},this.get_rules=function(a){if(a=this.get_node(a),!a)return!1;var c=this.get_type(a,!0);return c.max_depth===b&&(c.max_depth=-1),c.max_children===b&&(c.max_children=-1),c.valid_children===b&&(c.valid_children=-1),c},this.get_type=function(b,c){return b=this.get_node(b),b?c?a.extend({type:b.type},this.settings.types[b.type]):b.type:!1},this.set_type=function(c,d){var e=this._model.data,f,g,h,i,j,k,l,m;if(a.isArray(c)){for(c=c.slice(),g=0,h=c.length;h>g;g++)this.set_type(c[g],d);return!0}if(f=this.settings.types,c=this.get_node(c),!f[d]||!c)return!1;if(l=this.get_node(c,!0),l&&l.length&&(m=l.children(".jstree-anchor")),i=c.type,j=this.get_icon(c),c.type=d,(j===!0||!f[i]||f[i].icon!==b&&j===f[i].icon)&&this.set_icon(c,f[d].icon!==b?f[d].icon:!0),f[i]&&f[i].li_attr!==b&&"object"==typeof f[i].li_attr)for(k in f[i].li_attr)if(f[i].li_attr.hasOwnProperty(k)){if("id"===k)continue;"class"===k?(e[c.id].li_attr["class"]=(e[c.id].li_attr["class"]||"").replace(f[i].li_attr[k],""),l&&l.removeClass(f[i].li_attr[k])):e[c.id].li_attr[k]===f[i].li_attr[k]&&(e[c.id].li_attr[k]=null,l&&l.removeAttr(k))}if(f[i]&&f[i].a_attr!==b&&"object"==typeof f[i].a_attr)for(k in f[i].a_attr)if(f[i].a_attr.hasOwnProperty(k)){if("id"===k)continue;"class"===k?(e[c.id].a_attr["class"]=(e[c.id].a_attr["class"]||"").replace(f[i].a_attr[k],""),m&&m.removeClass(f[i].a_attr[k])):e[c.id].a_attr[k]===f[i].a_attr[k]&&("href"===k?(e[c.id].a_attr[k]="#",m&&m.attr("href","#")):(delete e[c.id].a_attr[k],m&&m.removeAttr(k)))}if(f[d].li_attr!==b&&"object"==typeof f[d].li_attr)for(k in f[d].li_attr)if(f[d].li_attr.hasOwnProperty(k)){if("id"===k)continue;e[c.id].li_attr[k]===b?(e[c.id].li_attr[k]=f[d].li_attr[k],l&&("class"===k?l.addClass(f[d].li_attr[k]):l.attr(k,f[d].li_attr[k]))):"class"===k&&(e[c.id].li_attr["class"]=f[d].li_attr[k]+" "+e[c.id].li_attr["class"],l&&l.addClass(f[d].li_attr[k]))}if(f[d].a_attr!==b&&"object"==typeof f[d].a_attr)for(k in f[d].a_attr)if(f[d].a_attr.hasOwnProperty(k)){if("id"===k)continue;e[c.id].a_attr[k]===b?(e[c.id].a_attr[k]=f[d].a_attr[k],m&&("class"===k?m.addClass(f[d].a_attr[k]):m.attr(k,f[d].a_attr[k]))):"href"===k&&"#"===e[c.id].a_attr[k]?(e[c.id].a_attr.href=f[d].a_attr.href,m&&m.attr("href",f[d].a_attr.href)):"class"===k&&(e[c.id].a_attr["class"]=f[d].a_attr["class"]+" "+e[c.id].a_attr["class"],m&&m.addClass(f[d].a_attr[k]))}return!0}},a.jstree.defaults.unique={case_sensitive:!1,trim_whitespace:!1,duplicate:function(a,b){return a+" ("+b+")"}},a.jstree.plugins.unique=function(c,d){this.check=function(b,c,e,f,g){if(d.check.call(this,b,c,e,f,g)===!1)return!1;if(c=c&&c.id?c:this.get_node(c),e=e&&e.id?e:this.get_node(e),!e||!e.children)return!0;var h="rename_node"===b?f:c.text,i=[],j=this.settings.unique.case_sensitive,k=this.settings.unique.trim_whitespace,l=this._model.data,m,n,o;for(m=0,n=e.children.length;n>m;m++)o=l[e.children[m]].text,j||(o=o.toLowerCase()),k&&(o=o.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")),i.push(o);switch(j||(h=h.toLowerCase()),k&&(h=h.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")),b){case"delete_node":return!0;case"rename_node":return o=c.text||"",j||(o=o.toLowerCase()),k&&(o=o.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")),m=-1===a.inArray(h,i)||c.text&&o===h,m||(this._data.core.last_error={error:"check",plugin:"unique",id:"unique_01",reason:"Child with name "+h+" already exists. Preventing: "+b,data:JSON.stringify({chk:b,pos:f,obj:c&&c.id?c.id:!1,par:e&&e.id?e.id:!1})}),m;case"create_node":return m=-1===a.inArray(h,i),m||(this._data.core.last_error={error:"check",plugin:"unique",id:"unique_04",reason:"Child with name "+h+" already exists. Preventing: "+b,data:JSON.stringify({chk:b,pos:f,obj:c&&c.id?c.id:!1,par:e&&e.id?e.id:!1})}),m;case"copy_node":return m=-1===a.inArray(h,i),m||(this._data.core.last_error={error:"check",plugin:"unique",id:"unique_02",reason:"Child with name "+h+" already exists. Preventing: "+b,data:JSON.stringify({chk:b,pos:f,obj:c&&c.id?c.id:!1,par:e&&e.id?e.id:!1})}),m;case"move_node":return m=c.parent===e.id&&(!g||!g.is_multi)||-1===a.inArray(h,i),m||(this._data.core.last_error={error:"check",plugin:"unique",id:"unique_03",reason:"Child with name "+h+" already exists. Preventing: "+b,data:JSON.stringify({chk:b,pos:f,obj:c&&c.id?c.id:!1,par:e&&e.id?e.id:!1})}),m}return!0},this.create_node=function(c,e,f,g,h){if(!e||e.text===b){if(null===c&&(c=a.jstree.root),c=this.get_node(c),!c)return d.create_node.call(this,c,e,f,g,h);if(f=f===b?"last":f,!f.toString().match(/^(before|after)$/)&&!h&&!this.is_loaded(c))return d.create_node.call(this,c,e,f,g,h);e||(e={});var i,j,k,l,m,n=this._model.data,o=this.settings.unique.case_sensitive,p=this.settings.unique.trim_whitespace,q=this.settings.unique.duplicate,r;for(j=i=this.get_string("New node"),k=[],l=0,m=c.children.length;m>l;l++)r=n[c.children[l]].text,o||(r=r.toLowerCase()),p&&(r=r.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")),k.push(r);l=1,r=j,o||(r=r.toLowerCase()),p&&(r=r.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""));while(-1!==a.inArray(r,k))j=q.call(this,i,++l).toString(),r=j,o||(r=r.toLowerCase()),p&&(r=r.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""));e.text=j}return d.create_node.call(this,c,e,f,g,h)}};var n=i.createElement("DIV");if(n.setAttribute("unselectable","on"),n.setAttribute("role","presentation"),n.className="jstree-wholerow",n.innerHTML="&#160;",a.jstree.plugins.wholerow=function(b,c){this.bind=function(){c.bind.call(this),this.element.on("ready.jstree set_state.jstree",a.proxy(function(){this.hide_dots()},this)).on("init.jstree loading.jstree ready.jstree",a.proxy(function(){this.get_container_ul().addClass("jstree-wholerow-ul")},this)).on("deselect_all.jstree",a.proxy(function(a,b){this.element.find(".jstree-wholerow-clicked").removeClass("jstree-wholerow-clicked")},this)).on("changed.jstree",a.proxy(function(a,b){this.element.find(".jstree-wholerow-clicked").removeClass("jstree-wholerow-clicked");var c=!1,d,e;for(d=0,e=b.selected.length;e>d;d++)c=this.get_node(b.selected[d],!0),c&&c.length&&c.children(".jstree-wholerow").addClass("jstree-wholerow-clicked")},this)).on("open_node.jstree",a.proxy(function(a,b){this.get_node(b.node,!0).find(".jstree-clicked").parent().children(".jstree-wholerow").addClass("jstree-wholerow-clicked")},this)).on("hover_node.jstree dehover_node.jstree",a.proxy(function(a,b){"hover_node"===a.type&&this.is_disabled(b.node)||this.get_node(b.node,!0).children(".jstree-wholerow")["hover_node"===a.type?"addClass":"removeClass"]("jstree-wholerow-hovered")},this)).on("contextmenu.jstree",".jstree-wholerow",a.proxy(function(b){if(this._data.contextmenu){b.preventDefault();var c=a.Event("contextmenu",{metaKey:b.metaKey,ctrlKey:b.ctrlKey,altKey:b.altKey,shiftKey:b.shiftKey,pageX:b.pageX,pageY:b.pageY});a(b.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(c)}},this)).on("click.jstree",".jstree-wholerow",function(b){b.stopImmediatePropagation();var c=a.Event("click",{metaKey:b.metaKey,ctrlKey:b.ctrlKey,altKey:b.altKey,shiftKey:b.shiftKey});a(b.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(c).focus()}).on("dblclick.jstree",".jstree-wholerow",function(b){b.stopImmediatePropagation();var c=a.Event("dblclick",{metaKey:b.metaKey,ctrlKey:b.ctrlKey,altKey:b.altKey,shiftKey:b.shiftKey});a(b.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(c).focus()}).on("click.jstree",".jstree-leaf > .jstree-ocl",a.proxy(function(b){b.stopImmediatePropagation();var c=a.Event("click",{metaKey:b.metaKey,ctrlKey:b.ctrlKey,altKey:b.altKey,shiftKey:b.shiftKey});a(b.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(c).focus()},this)).on("mouseover.jstree",".jstree-wholerow, .jstree-icon",a.proxy(function(a){return a.stopImmediatePropagation(),this.is_disabled(a.currentTarget)||this.hover_node(a.currentTarget),!1},this)).on("mouseleave.jstree",".jstree-node",a.proxy(function(a){this.dehover_node(a.currentTarget)},this))},this.teardown=function(){this.settings.wholerow&&this.element.find(".jstree-wholerow").remove(),c.teardown.call(this)},this.redraw_node=function(b,d,e,f){if(b=c.redraw_node.apply(this,arguments)){var g=n.cloneNode(!0);-1!==a.inArray(b.id,this._data.core.selected)&&(g.className+=" jstree-wholerow-clicked"),this._data.core.focused&&this._data.core.focused===b.id&&(g.className+=" jstree-wholerow-hovered"),b.insertBefore(g,b.childNodes[0])}return b}},i.registerElement&&Object&&Object.create){var o=Object.create(HTMLElement.prototype);o.createdCallback=function(){var b={core:{},plugins:[]},c;for(c in a.jstree.plugins)a.jstree.plugins.hasOwnProperty(c)&&this.attributes[c]&&(b.plugins.push(c),this.getAttribute(c)&&JSON.parse(this.getAttribute(c))&&(b[c]=JSON.parse(this.getAttribute(c))));for(c in a.jstree.defaults.core)a.jstree.defaults.core.hasOwnProperty(c)&&this.attributes[c]&&(b.core[c]=JSON.parse(this.getAttribute(c))||this.getAttribute(c));a(this).jstree(b)};try{i.registerElement("vakata-jstree",{prototype:o})}catch(p){}}}});
\ No newline at end of file
Binary file vakata-jstree-3.3.5/dist/themes/default-dark/32px.png has changed
Binary file vakata-jstree-3.3.5/dist/themes/default-dark/40px.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vakata-jstree-3.3.5/dist/themes/default-dark/style.css	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,1152 @@
+/* jsTree default dark theme */
+.jstree-node,
+.jstree-children,
+.jstree-container-ul {
+  display: block;
+  margin: 0;
+  padding: 0;
+  list-style-type: none;
+  list-style-image: none;
+}
+.jstree-node {
+  white-space: nowrap;
+}
+.jstree-anchor {
+  display: inline-block;
+  color: black;
+  white-space: nowrap;
+  padding: 0 4px 0 1px;
+  margin: 0;
+  vertical-align: top;
+}
+.jstree-anchor:focus {
+  outline: 0;
+}
+.jstree-anchor,
+.jstree-anchor:link,
+.jstree-anchor:visited,
+.jstree-anchor:hover,
+.jstree-anchor:active {
+  text-decoration: none;
+  color: inherit;
+}
+.jstree-icon {
+  display: inline-block;
+  text-decoration: none;
+  margin: 0;
+  padding: 0;
+  vertical-align: top;
+  text-align: center;
+}
+.jstree-icon:empty {
+  display: inline-block;
+  text-decoration: none;
+  margin: 0;
+  padding: 0;
+  vertical-align: top;
+  text-align: center;
+}
+.jstree-ocl {
+  cursor: pointer;
+}
+.jstree-leaf > .jstree-ocl {
+  cursor: default;
+}
+.jstree .jstree-open > .jstree-children {
+  display: block;
+}
+.jstree .jstree-closed > .jstree-children,
+.jstree .jstree-leaf > .jstree-children {
+  display: none;
+}
+.jstree-anchor > .jstree-themeicon {
+  margin-right: 2px;
+}
+.jstree-no-icons .jstree-themeicon,
+.jstree-anchor > .jstree-themeicon-hidden {
+  display: none;
+}
+.jstree-hidden,
+.jstree-node.jstree-hidden {
+  display: none;
+}
+.jstree-rtl .jstree-anchor {
+  padding: 0 1px 0 4px;
+}
+.jstree-rtl .jstree-anchor > .jstree-themeicon {
+  margin-left: 2px;
+  margin-right: 0;
+}
+.jstree-rtl .jstree-node {
+  margin-left: 0;
+}
+.jstree-rtl .jstree-container-ul > .jstree-node {
+  margin-right: 0;
+}
+.jstree-wholerow-ul {
+  position: relative;
+  display: inline-block;
+  min-width: 100%;
+}
+.jstree-wholerow-ul .jstree-leaf > .jstree-ocl {
+  cursor: pointer;
+}
+.jstree-wholerow-ul .jstree-anchor,
+.jstree-wholerow-ul .jstree-icon {
+  position: relative;
+}
+.jstree-wholerow-ul .jstree-wholerow {
+  width: 100%;
+  cursor: pointer;
+  position: absolute;
+  left: 0;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+.jstree-contextmenu .jstree-anchor {
+  -webkit-user-select: none;
+  /* disable selection/Copy of UIWebView */
+  -webkit-touch-callout: none;
+  /* disable the IOS popup when long-press on a link */
+}
+.vakata-context {
+  display: none;
+}
+.vakata-context,
+.vakata-context ul {
+  margin: 0;
+  padding: 2px;
+  position: absolute;
+  background: #f5f5f5;
+  border: 1px solid #979797;
+  box-shadow: 2px 2px 2px #999999;
+}
+.vakata-context ul {
+  list-style: none;
+  left: 100%;
+  margin-top: -2.7em;
+  margin-left: -4px;
+}
+.vakata-context .vakata-context-right ul {
+  left: auto;
+  right: 100%;
+  margin-left: auto;
+  margin-right: -4px;
+}
+.vakata-context li {
+  list-style: none;
+}
+.vakata-context li > a {
+  display: block;
+  padding: 0 2em 0 2em;
+  text-decoration: none;
+  width: auto;
+  color: black;
+  white-space: nowrap;
+  line-height: 2.4em;
+  text-shadow: 1px 1px 0 white;
+  border-radius: 1px;
+}
+.vakata-context li > a:hover {
+  position: relative;
+  background-color: #e8eff7;
+  box-shadow: 0 0 2px #0a6aa1;
+}
+.vakata-context li > a.vakata-context-parent {
+  background-image: url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAIORI4JlrqN1oMSnmmZDQUAOw==");
+  background-position: right center;
+  background-repeat: no-repeat;
+}
+.vakata-context li > a:focus {
+  outline: 0;
+}
+.vakata-context .vakata-context-hover > a {
+  position: relative;
+  background-color: #e8eff7;
+  box-shadow: 0 0 2px #0a6aa1;
+}
+.vakata-context .vakata-context-separator > a,
+.vakata-context .vakata-context-separator > a:hover {
+  background: white;
+  border: 0;
+  border-top: 1px solid #e2e3e3;
+  height: 1px;
+  min-height: 1px;
+  max-height: 1px;
+  padding: 0;
+  margin: 0 0 0 2.4em;
+  border-left: 1px solid #e0e0e0;
+  text-shadow: 0 0 0 transparent;
+  box-shadow: 0 0 0 transparent;
+  border-radius: 0;
+}
+.vakata-context .vakata-contextmenu-disabled a,
+.vakata-context .vakata-contextmenu-disabled a:hover {
+  color: silver;
+  background-color: transparent;
+  border: 0;
+  box-shadow: 0 0 0;
+}
+.vakata-context li > a > i {
+  text-decoration: none;
+  display: inline-block;
+  width: 2.4em;
+  height: 2.4em;
+  background: transparent;
+  margin: 0 0 0 -2em;
+  vertical-align: top;
+  text-align: center;
+  line-height: 2.4em;
+}
+.vakata-context li > a > i:empty {
+  width: 2.4em;
+  line-height: 2.4em;
+}
+.vakata-context li > a .vakata-contextmenu-sep {
+  display: inline-block;
+  width: 1px;
+  height: 2.4em;
+  background: white;
+  margin: 0 0.5em 0 0;
+  border-left: 1px solid #e2e3e3;
+}
+.vakata-context .vakata-contextmenu-shortcut {
+  font-size: 0.8em;
+  color: silver;
+  opacity: 0.5;
+  display: none;
+}
+.vakata-context-rtl ul {
+  left: auto;
+  right: 100%;
+  margin-left: auto;
+  margin-right: -4px;
+}
+.vakata-context-rtl li > a.vakata-context-parent {
+  background-image: url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAINjI+AC7rWHIsPtmoxLAA7");
+  background-position: left center;
+  background-repeat: no-repeat;
+}
+.vakata-context-rtl .vakata-context-separator > a {
+  margin: 0 2.4em 0 0;
+  border-left: 0;
+  border-right: 1px solid #e2e3e3;
+}
+.vakata-context-rtl .vakata-context-left ul {
+  right: auto;
+  left: 100%;
+  margin-left: -4px;
+  margin-right: auto;
+}
+.vakata-context-rtl li > a > i {
+  margin: 0 -2em 0 0;
+}
+.vakata-context-rtl li > a .vakata-contextmenu-sep {
+  margin: 0 0 0 0.5em;
+  border-left-color: white;
+  background: #e2e3e3;
+}
+#jstree-marker {
+  position: absolute;
+  top: 0;
+  left: 0;
+  margin: -5px 0 0 0;
+  padding: 0;
+  border-right: 0;
+  border-top: 5px solid transparent;
+  border-bottom: 5px solid transparent;
+  border-left: 5px solid;
+  width: 0;
+  height: 0;
+  font-size: 0;
+  line-height: 0;
+}
+#jstree-dnd {
+  line-height: 16px;
+  margin: 0;
+  padding: 4px;
+}
+#jstree-dnd .jstree-icon,
+#jstree-dnd .jstree-copy {
+  display: inline-block;
+  text-decoration: none;
+  margin: 0 2px 0 0;
+  padding: 0;
+  width: 16px;
+  height: 16px;
+}
+#jstree-dnd .jstree-ok {
+  background: green;
+}
+#jstree-dnd .jstree-er {
+  background: red;
+}
+#jstree-dnd .jstree-copy {
+  margin: 0 2px 0 2px;
+}
+.jstree-default-dark .jstree-node,
+.jstree-default-dark .jstree-icon {
+  background-repeat: no-repeat;
+  background-color: transparent;
+}
+.jstree-default-dark .jstree-anchor,
+.jstree-default-dark .jstree-animated,
+.jstree-default-dark .jstree-wholerow {
+  transition: background-color 0.15s, box-shadow 0.15s;
+}
+.jstree-default-dark .jstree-hovered {
+  background: #555555;
+  border-radius: 2px;
+  box-shadow: inset 0 0 1px #555555;
+}
+.jstree-default-dark .jstree-context {
+  background: #555555;
+  border-radius: 2px;
+  box-shadow: inset 0 0 1px #555555;
+}
+.jstree-default-dark .jstree-clicked {
+  background: #5fa2db;
+  border-radius: 2px;
+  box-shadow: inset 0 0 1px #666666;
+}
+.jstree-default-dark .jstree-no-icons .jstree-anchor > .jstree-themeicon {
+  display: none;
+}
+.jstree-default-dark .jstree-disabled {
+  background: transparent;
+  color: #666666;
+}
+.jstree-default-dark .jstree-disabled.jstree-hovered {
+  background: transparent;
+  box-shadow: none;
+}
+.jstree-default-dark .jstree-disabled.jstree-clicked {
+  background: #333333;
+}
+.jstree-default-dark .jstree-disabled > .jstree-icon {
+  opacity: 0.8;
+  filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'jstree-grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#jstree-grayscale");
+  /* Firefox 10+ */
+  filter: gray;
+  /* IE6-9 */
+  -webkit-filter: grayscale(100%);
+  /* Chrome 19+ & Safari 6+ */
+}
+.jstree-default-dark .jstree-search {
+  font-style: italic;
+  color: #ffffff;
+  font-weight: bold;
+}
+.jstree-default-dark .jstree-no-checkboxes .jstree-checkbox {
+  display: none !important;
+}
+.jstree-default-dark.jstree-checkbox-no-clicked .jstree-clicked {
+  background: transparent;
+  box-shadow: none;
+}
+.jstree-default-dark.jstree-checkbox-no-clicked .jstree-clicked.jstree-hovered {
+  background: #555555;
+}
+.jstree-default-dark.jstree-checkbox-no-clicked > .jstree-wholerow-ul .jstree-wholerow-clicked {
+  background: transparent;
+}
+.jstree-default-dark.jstree-checkbox-no-clicked > .jstree-wholerow-ul .jstree-wholerow-clicked.jstree-wholerow-hovered {
+  background: #555555;
+}
+.jstree-default-dark > .jstree-striped {
+  min-width: 100%;
+  display: inline-block;
+  background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAMAAAB/qqA+AAAABlBMVEUAAAAAAAClZ7nPAAAAAnRSTlMNAMM9s3UAAAAXSURBVHjajcEBAQAAAIKg/H/aCQZ70AUBjAATb6YPDgAAAABJRU5ErkJggg==") left top repeat;
+}
+.jstree-default-dark > .jstree-wholerow-ul .jstree-hovered,
+.jstree-default-dark > .jstree-wholerow-ul .jstree-clicked {
+  background: transparent;
+  box-shadow: none;
+  border-radius: 0;
+}
+.jstree-default-dark .jstree-wholerow {
+  -moz-box-sizing: border-box;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+}
+.jstree-default-dark .jstree-wholerow-hovered {
+  background: #555555;
+}
+.jstree-default-dark .jstree-wholerow-clicked {
+  background: #5fa2db;
+  background: -webkit-linear-gradient(top, #5fa2db 0%, #5fa2db 100%);
+  background: linear-gradient(to bottom, #5fa2db 0%, #5fa2db 100%);
+}
+.jstree-default-dark .jstree-node {
+  min-height: 24px;
+  line-height: 24px;
+  margin-left: 24px;
+  min-width: 24px;
+}
+.jstree-default-dark .jstree-anchor {
+  line-height: 24px;
+  height: 24px;
+}
+.jstree-default-dark .jstree-icon {
+  width: 24px;
+  height: 24px;
+  line-height: 24px;
+}
+.jstree-default-dark .jstree-icon:empty {
+  width: 24px;
+  height: 24px;
+  line-height: 24px;
+}
+.jstree-default-dark.jstree-rtl .jstree-node {
+  margin-right: 24px;
+}
+.jstree-default-dark .jstree-wholerow {
+  height: 24px;
+}
+.jstree-default-dark .jstree-node,
+.jstree-default-dark .jstree-icon {
+  background-image: url("32px.png");
+}
+.jstree-default-dark .jstree-node {
+  background-position: -292px -4px;
+  background-repeat: repeat-y;
+}
+.jstree-default-dark .jstree-last {
+  background: transparent;
+}
+.jstree-default-dark .jstree-open > .jstree-ocl {
+  background-position: -132px -4px;
+}
+.jstree-default-dark .jstree-closed > .jstree-ocl {
+  background-position: -100px -4px;
+}
+.jstree-default-dark .jstree-leaf > .jstree-ocl {
+  background-position: -68px -4px;
+}
+.jstree-default-dark .jstree-themeicon {
+  background-position: -260px -4px;
+}
+.jstree-default-dark > .jstree-no-dots .jstree-node,
+.jstree-default-dark > .jstree-no-dots .jstree-leaf > .jstree-ocl {
+  background: transparent;
+}
+.jstree-default-dark > .jstree-no-dots .jstree-open > .jstree-ocl {
+  background-position: -36px -4px;
+}
+.jstree-default-dark > .jstree-no-dots .jstree-closed > .jstree-ocl {
+  background-position: -4px -4px;
+}
+.jstree-default-dark .jstree-disabled {
+  background: transparent;
+}
+.jstree-default-dark .jstree-disabled.jstree-hovered {
+  background: transparent;
+}
+.jstree-default-dark .jstree-disabled.jstree-clicked {
+  background: #efefef;
+}
+.jstree-default-dark .jstree-checkbox {
+  background-position: -164px -4px;
+}
+.jstree-default-dark .jstree-checkbox:hover {
+  background-position: -164px -36px;
+}
+.jstree-default-dark.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox,
+.jstree-default-dark .jstree-checked > .jstree-checkbox {
+  background-position: -228px -4px;
+}
+.jstree-default-dark.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover,
+.jstree-default-dark .jstree-checked > .jstree-checkbox:hover {
+  background-position: -228px -36px;
+}
+.jstree-default-dark .jstree-anchor > .jstree-undetermined {
+  background-position: -196px -4px;
+}
+.jstree-default-dark .jstree-anchor > .jstree-undetermined:hover {
+  background-position: -196px -36px;
+}
+.jstree-default-dark .jstree-checkbox-disabled {
+  opacity: 0.8;
+  filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'jstree-grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#jstree-grayscale");
+  /* Firefox 10+ */
+  filter: gray;
+  /* IE6-9 */
+  -webkit-filter: grayscale(100%);
+  /* Chrome 19+ & Safari 6+ */
+}
+.jstree-default-dark > .jstree-striped {
+  background-size: auto 48px;
+}
+.jstree-default-dark.jstree-rtl .jstree-node {
+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");
+  background-position: 100% 1px;
+  background-repeat: repeat-y;
+}
+.jstree-default-dark.jstree-rtl .jstree-last {
+  background: transparent;
+}
+.jstree-default-dark.jstree-rtl .jstree-open > .jstree-ocl {
+  background-position: -132px -36px;
+}
+.jstree-default-dark.jstree-rtl .jstree-closed > .jstree-ocl {
+  background-position: -100px -36px;
+}
+.jstree-default-dark.jstree-rtl .jstree-leaf > .jstree-ocl {
+  background-position: -68px -36px;
+}
+.jstree-default-dark.jstree-rtl > .jstree-no-dots .jstree-node,
+.jstree-default-dark.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl {
+  background: transparent;
+}
+.jstree-default-dark.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl {
+  background-position: -36px -36px;
+}
+.jstree-default-dark.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl {
+  background-position: -4px -36px;
+}
+.jstree-default-dark .jstree-themeicon-custom {
+  background-color: transparent;
+  background-image: none;
+  background-position: 0 0;
+}
+.jstree-default-dark > .jstree-container-ul .jstree-loading > .jstree-ocl {
+  background: url("throbber.gif") center center no-repeat;
+}
+.jstree-default-dark .jstree-file {
+  background: url("32px.png") -100px -68px no-repeat;
+}
+.jstree-default-dark .jstree-folder {
+  background: url("32px.png") -260px -4px no-repeat;
+}
+.jstree-default-dark > .jstree-container-ul > .jstree-node {
+  margin-left: 0;
+  margin-right: 0;
+}
+#jstree-dnd.jstree-default-dark {
+  line-height: 24px;
+  padding: 0 4px;
+}
+#jstree-dnd.jstree-default-dark .jstree-ok,
+#jstree-dnd.jstree-default-dark .jstree-er {
+  background-image: url("32px.png");
+  background-repeat: no-repeat;
+  background-color: transparent;
+}
+#jstree-dnd.jstree-default-dark i {
+  background: transparent;
+  width: 24px;
+  height: 24px;
+  line-height: 24px;
+}
+#jstree-dnd.jstree-default-dark .jstree-ok {
+  background-position: -4px -68px;
+}
+#jstree-dnd.jstree-default-dark .jstree-er {
+  background-position: -36px -68px;
+}
+.jstree-default-dark .jstree-ellipsis {
+  overflow: hidden;
+}
+.jstree-default-dark .jstree-ellipsis .jstree-anchor {
+  width: calc(100% - 29px);
+  text-overflow: ellipsis;
+  overflow: hidden;
+}
+.jstree-default-dark .jstree-ellipsis.jstree-no-icons .jstree-anchor {
+  width: calc(100% - 5px);
+}
+.jstree-default-dark.jstree-rtl .jstree-node {
+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");
+}
+.jstree-default-dark.jstree-rtl .jstree-last {
+  background: transparent;
+}
+.jstree-default-dark-small .jstree-node {
+  min-height: 18px;
+  line-height: 18px;
+  margin-left: 18px;
+  min-width: 18px;
+}
+.jstree-default-dark-small .jstree-anchor {
+  line-height: 18px;
+  height: 18px;
+}
+.jstree-default-dark-small .jstree-icon {
+  width: 18px;
+  height: 18px;
+  line-height: 18px;
+}
+.jstree-default-dark-small .jstree-icon:empty {
+  width: 18px;
+  height: 18px;
+  line-height: 18px;
+}
+.jstree-default-dark-small.jstree-rtl .jstree-node {
+  margin-right: 18px;
+}
+.jstree-default-dark-small .jstree-wholerow {
+  height: 18px;
+}
+.jstree-default-dark-small .jstree-node,
+.jstree-default-dark-small .jstree-icon {
+  background-image: url("32px.png");
+}
+.jstree-default-dark-small .jstree-node {
+  background-position: -295px -7px;
+  background-repeat: repeat-y;
+}
+.jstree-default-dark-small .jstree-last {
+  background: transparent;
+}
+.jstree-default-dark-small .jstree-open > .jstree-ocl {
+  background-position: -135px -7px;
+}
+.jstree-default-dark-small .jstree-closed > .jstree-ocl {
+  background-position: -103px -7px;
+}
+.jstree-default-dark-small .jstree-leaf > .jstree-ocl {
+  background-position: -71px -7px;
+}
+.jstree-default-dark-small .jstree-themeicon {
+  background-position: -263px -7px;
+}
+.jstree-default-dark-small > .jstree-no-dots .jstree-node,
+.jstree-default-dark-small > .jstree-no-dots .jstree-leaf > .jstree-ocl {
+  background: transparent;
+}
+.jstree-default-dark-small > .jstree-no-dots .jstree-open > .jstree-ocl {
+  background-position: -39px -7px;
+}
+.jstree-default-dark-small > .jstree-no-dots .jstree-closed > .jstree-ocl {
+  background-position: -7px -7px;
+}
+.jstree-default-dark-small .jstree-disabled {
+  background: transparent;
+}
+.jstree-default-dark-small .jstree-disabled.jstree-hovered {
+  background: transparent;
+}
+.jstree-default-dark-small .jstree-disabled.jstree-clicked {
+  background: #efefef;
+}
+.jstree-default-dark-small .jstree-checkbox {
+  background-position: -167px -7px;
+}
+.jstree-default-dark-small .jstree-checkbox:hover {
+  background-position: -167px -39px;
+}
+.jstree-default-dark-small.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox,
+.jstree-default-dark-small .jstree-checked > .jstree-checkbox {
+  background-position: -231px -7px;
+}
+.jstree-default-dark-small.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover,
+.jstree-default-dark-small .jstree-checked > .jstree-checkbox:hover {
+  background-position: -231px -39px;
+}
+.jstree-default-dark-small .jstree-anchor > .jstree-undetermined {
+  background-position: -199px -7px;
+}
+.jstree-default-dark-small .jstree-anchor > .jstree-undetermined:hover {
+  background-position: -199px -39px;
+}
+.jstree-default-dark-small .jstree-checkbox-disabled {
+  opacity: 0.8;
+  filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'jstree-grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#jstree-grayscale");
+  /* Firefox 10+ */
+  filter: gray;
+  /* IE6-9 */
+  -webkit-filter: grayscale(100%);
+  /* Chrome 19+ & Safari 6+ */
+}
+.jstree-default-dark-small > .jstree-striped {
+  background-size: auto 36px;
+}
+.jstree-default-dark-small.jstree-rtl .jstree-node {
+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");
+  background-position: 100% 1px;
+  background-repeat: repeat-y;
+}
+.jstree-default-dark-small.jstree-rtl .jstree-last {
+  background: transparent;
+}
+.jstree-default-dark-small.jstree-rtl .jstree-open > .jstree-ocl {
+  background-position: -135px -39px;
+}
+.jstree-default-dark-small.jstree-rtl .jstree-closed > .jstree-ocl {
+  background-position: -103px -39px;
+}
+.jstree-default-dark-small.jstree-rtl .jstree-leaf > .jstree-ocl {
+  background-position: -71px -39px;
+}
+.jstree-default-dark-small.jstree-rtl > .jstree-no-dots .jstree-node,
+.jstree-default-dark-small.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl {
+  background: transparent;
+}
+.jstree-default-dark-small.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl {
+  background-position: -39px -39px;
+}
+.jstree-default-dark-small.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl {
+  background-position: -7px -39px;
+}
+.jstree-default-dark-small .jstree-themeicon-custom {
+  background-color: transparent;
+  background-image: none;
+  background-position: 0 0;
+}
+.jstree-default-dark-small > .jstree-container-ul .jstree-loading > .jstree-ocl {
+  background: url("throbber.gif") center center no-repeat;
+}
+.jstree-default-dark-small .jstree-file {
+  background: url("32px.png") -103px -71px no-repeat;
+}
+.jstree-default-dark-small .jstree-folder {
+  background: url("32px.png") -263px -7px no-repeat;
+}
+.jstree-default-dark-small > .jstree-container-ul > .jstree-node {
+  margin-left: 0;
+  margin-right: 0;
+}
+#jstree-dnd.jstree-default-dark-small {
+  line-height: 18px;
+  padding: 0 4px;
+}
+#jstree-dnd.jstree-default-dark-small .jstree-ok,
+#jstree-dnd.jstree-default-dark-small .jstree-er {
+  background-image: url("32px.png");
+  background-repeat: no-repeat;
+  background-color: transparent;
+}
+#jstree-dnd.jstree-default-dark-small i {
+  background: transparent;
+  width: 18px;
+  height: 18px;
+  line-height: 18px;
+}
+#jstree-dnd.jstree-default-dark-small .jstree-ok {
+  background-position: -7px -71px;
+}
+#jstree-dnd.jstree-default-dark-small .jstree-er {
+  background-position: -39px -71px;
+}
+.jstree-default-dark-small .jstree-ellipsis {
+  overflow: hidden;
+}
+.jstree-default-dark-small .jstree-ellipsis .jstree-anchor {
+  width: calc(100% - 23px);
+  text-overflow: ellipsis;
+  overflow: hidden;
+}
+.jstree-default-dark-small .jstree-ellipsis.jstree-no-icons .jstree-anchor {
+  width: calc(100% - 5px);
+}
+.jstree-default-dark-small.jstree-rtl .jstree-node {
+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg==");
+}
+.jstree-default-dark-small.jstree-rtl .jstree-last {
+  background: transparent;
+}
+.jstree-default-dark-large .jstree-node {
+  min-height: 32px;
+  line-height: 32px;
+  margin-left: 32px;
+  min-width: 32px;
+}
+.jstree-default-dark-large .jstree-anchor {
+  line-height: 32px;
+  height: 32px;
+}
+.jstree-default-dark-large .jstree-icon {
+  width: 32px;
+  height: 32px;
+  line-height: 32px;
+}
+.jstree-default-dark-large .jstree-icon:empty {
+  width: 32px;
+  height: 32px;
+  line-height: 32px;
+}
+.jstree-default-dark-large.jstree-rtl .jstree-node {
+  margin-right: 32px;
+}
+.jstree-default-dark-large .jstree-wholerow {
+  height: 32px;
+}
+.jstree-default-dark-large .jstree-node,
+.jstree-default-dark-large .jstree-icon {
+  background-image: url("32px.png");
+}
+.jstree-default-dark-large .jstree-node {
+  background-position: -288px 0px;
+  background-repeat: repeat-y;
+}
+.jstree-default-dark-large .jstree-last {
+  background: transparent;
+}
+.jstree-default-dark-large .jstree-open > .jstree-ocl {
+  background-position: -128px 0px;
+}
+.jstree-default-dark-large .jstree-closed > .jstree-ocl {
+  background-position: -96px 0px;
+}
+.jstree-default-dark-large .jstree-leaf > .jstree-ocl {
+  background-position: -64px 0px;
+}
+.jstree-default-dark-large .jstree-themeicon {
+  background-position: -256px 0px;
+}
+.jstree-default-dark-large > .jstree-no-dots .jstree-node,
+.jstree-default-dark-large > .jstree-no-dots .jstree-leaf > .jstree-ocl {
+  background: transparent;
+}
+.jstree-default-dark-large > .jstree-no-dots .jstree-open > .jstree-ocl {
+  background-position: -32px 0px;
+}
+.jstree-default-dark-large > .jstree-no-dots .jstree-closed > .jstree-ocl {
+  background-position: 0px 0px;
+}
+.jstree-default-dark-large .jstree-disabled {
+  background: transparent;
+}
+.jstree-default-dark-large .jstree-disabled.jstree-hovered {
+  background: transparent;
+}
+.jstree-default-dark-large .jstree-disabled.jstree-clicked {
+  background: #efefef;
+}
+.jstree-default-dark-large .jstree-checkbox {
+  background-position: -160px 0px;
+}
+.jstree-default-dark-large .jstree-checkbox:hover {
+  background-position: -160px -32px;
+}
+.jstree-default-dark-large.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox,
+.jstree-default-dark-large .jstree-checked > .jstree-checkbox {
+  background-position: -224px 0px;
+}
+.jstree-default-dark-large.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover,
+.jstree-default-dark-large .jstree-checked > .jstree-checkbox:hover {
+  background-position: -224px -32px;
+}
+.jstree-default-dark-large .jstree-anchor > .jstree-undetermined {
+  background-position: -192px 0px;
+}
+.jstree-default-dark-large .jstree-anchor > .jstree-undetermined:hover {
+  background-position: -192px -32px;
+}
+.jstree-default-dark-large .jstree-checkbox-disabled {
+  opacity: 0.8;
+  filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'jstree-grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#jstree-grayscale");
+  /* Firefox 10+ */
+  filter: gray;
+  /* IE6-9 */
+  -webkit-filter: grayscale(100%);
+  /* Chrome 19+ & Safari 6+ */
+}
+.jstree-default-dark-large > .jstree-striped {
+  background-size: auto 64px;
+}
+.jstree-default-dark-large.jstree-rtl .jstree-node {
+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");
+  background-position: 100% 1px;
+  background-repeat: repeat-y;
+}
+.jstree-default-dark-large.jstree-rtl .jstree-last {
+  background: transparent;
+}
+.jstree-default-dark-large.jstree-rtl .jstree-open > .jstree-ocl {
+  background-position: -128px -32px;
+}
+.jstree-default-dark-large.jstree-rtl .jstree-closed > .jstree-ocl {
+  background-position: -96px -32px;
+}
+.jstree-default-dark-large.jstree-rtl .jstree-leaf > .jstree-ocl {
+  background-position: -64px -32px;
+}
+.jstree-default-dark-large.jstree-rtl > .jstree-no-dots .jstree-node,
+.jstree-default-dark-large.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl {
+  background: transparent;
+}
+.jstree-default-dark-large.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl {
+  background-position: -32px -32px;
+}
+.jstree-default-dark-large.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl {
+  background-position: 0px -32px;
+}
+.jstree-default-dark-large .jstree-themeicon-custom {
+  background-color: transparent;
+  background-image: none;
+  background-position: 0 0;
+}
+.jstree-default-dark-large > .jstree-container-ul .jstree-loading > .jstree-ocl {
+  background: url("throbber.gif") center center no-repeat;
+}
+.jstree-default-dark-large .jstree-file {
+  background: url("32px.png") -96px -64px no-repeat;
+}
+.jstree-default-dark-large .jstree-folder {
+  background: url("32px.png") -256px 0px no-repeat;
+}
+.jstree-default-dark-large > .jstree-container-ul > .jstree-node {
+  margin-left: 0;
+  margin-right: 0;
+}
+#jstree-dnd.jstree-default-dark-large {
+  line-height: 32px;
+  padding: 0 4px;
+}
+#jstree-dnd.jstree-default-dark-large .jstree-ok,
+#jstree-dnd.jstree-default-dark-large .jstree-er {
+  background-image: url("32px.png");
+  background-repeat: no-repeat;
+  background-color: transparent;
+}
+#jstree-dnd.jstree-default-dark-large i {
+  background: transparent;
+  width: 32px;
+  height: 32px;
+  line-height: 32px;
+}
+#jstree-dnd.jstree-default-dark-large .jstree-ok {
+  background-position: 0px -64px;
+}
+#jstree-dnd.jstree-default-dark-large .jstree-er {
+  background-position: -32px -64px;
+}
+.jstree-default-dark-large .jstree-ellipsis {
+  overflow: hidden;
+}
+.jstree-default-dark-large .jstree-ellipsis .jstree-anchor {
+  width: calc(100% - 37px);
+  text-overflow: ellipsis;
+  overflow: hidden;
+}
+.jstree-default-dark-large .jstree-ellipsis.jstree-no-icons .jstree-anchor {
+  width: calc(100% - 5px);
+}
+.jstree-default-dark-large.jstree-rtl .jstree-node {
+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg==");
+}
+.jstree-default-dark-large.jstree-rtl .jstree-last {
+  background: transparent;
+}
+@media (max-width: 768px) {
+  #jstree-dnd.jstree-dnd-responsive {
+    line-height: 40px;
+    font-weight: bold;
+    font-size: 1.1em;
+    text-shadow: 1px 1px white;
+  }
+  #jstree-dnd.jstree-dnd-responsive > i {
+    background: transparent;
+    width: 40px;
+    height: 40px;
+  }
+  #jstree-dnd.jstree-dnd-responsive > .jstree-ok {
+    background-image: url("40px.png");
+    background-position: 0 -200px;
+    background-size: 120px 240px;
+  }
+  #jstree-dnd.jstree-dnd-responsive > .jstree-er {
+    background-image: url("40px.png");
+    background-position: -40px -200px;
+    background-size: 120px 240px;
+  }
+  #jstree-marker.jstree-dnd-responsive {
+    border-left-width: 10px;
+    border-top-width: 10px;
+    border-bottom-width: 10px;
+    margin-top: -10px;
+  }
+}
+@media (max-width: 768px) {
+  .jstree-default-dark-responsive {
+    /*
+	.jstree-open > .jstree-ocl,
+	.jstree-closed > .jstree-ocl { border-radius:20px; background-color:white; }
+	*/
+  }
+  .jstree-default-dark-responsive .jstree-icon {
+    background-image: url("40px.png");
+  }
+  .jstree-default-dark-responsive .jstree-node,
+  .jstree-default-dark-responsive .jstree-leaf > .jstree-ocl {
+    background: transparent;
+  }
+  .jstree-default-dark-responsive .jstree-node {
+    min-height: 40px;
+    line-height: 40px;
+    margin-left: 40px;
+    min-width: 40px;
+    white-space: nowrap;
+  }
+  .jstree-default-dark-responsive .jstree-anchor {
+    line-height: 40px;
+    height: 40px;
+  }
+  .jstree-default-dark-responsive .jstree-icon,
+  .jstree-default-dark-responsive .jstree-icon:empty {
+    width: 40px;
+    height: 40px;
+    line-height: 40px;
+  }
+  .jstree-default-dark-responsive > .jstree-container-ul > .jstree-node {
+    margin-left: 0;
+  }
+  .jstree-default-dark-responsive.jstree-rtl .jstree-node {
+    margin-left: 0;
+    margin-right: 40px;
+    background: transparent;
+  }
+  .jstree-default-dark-responsive.jstree-rtl .jstree-container-ul > .jstree-node {
+    margin-right: 0;
+  }
+  .jstree-default-dark-responsive .jstree-ocl,
+  .jstree-default-dark-responsive .jstree-themeicon,
+  .jstree-default-dark-responsive .jstree-checkbox {
+    background-size: 120px 240px;
+  }
+  .jstree-default-dark-responsive .jstree-leaf > .jstree-ocl,
+  .jstree-default-dark-responsive.jstree-rtl .jstree-leaf > .jstree-ocl {
+    background: transparent;
+  }
+  .jstree-default-dark-responsive .jstree-open > .jstree-ocl {
+    background-position: 0 0px !important;
+  }
+  .jstree-default-dark-responsive .jstree-closed > .jstree-ocl {
+    background-position: 0 -40px !important;
+  }
+  .jstree-default-dark-responsive.jstree-rtl .jstree-closed > .jstree-ocl {
+    background-position: -40px 0px !important;
+  }
+  .jstree-default-dark-responsive .jstree-themeicon {
+    background-position: -40px -40px;
+  }
+  .jstree-default-dark-responsive .jstree-checkbox,
+  .jstree-default-dark-responsive .jstree-checkbox:hover {
+    background-position: -40px -80px;
+  }
+  .jstree-default-dark-responsive.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox,
+  .jstree-default-dark-responsive.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover,
+  .jstree-default-dark-responsive .jstree-checked > .jstree-checkbox,
+  .jstree-default-dark-responsive .jstree-checked > .jstree-checkbox:hover {
+    background-position: 0 -80px;
+  }
+  .jstree-default-dark-responsive .jstree-anchor > .jstree-undetermined,
+  .jstree-default-dark-responsive .jstree-anchor > .jstree-undetermined:hover {
+    background-position: 0 -120px;
+  }
+  .jstree-default-dark-responsive .jstree-anchor {
+    font-weight: bold;
+    font-size: 1.1em;
+    text-shadow: 1px 1px white;
+  }
+  .jstree-default-dark-responsive > .jstree-striped {
+    background: transparent;
+  }
+  .jstree-default-dark-responsive .jstree-wholerow {
+    border-top: 1px solid #666666;
+    border-bottom: 1px solid #000000;
+    background: #333333;
+    height: 40px;
+  }
+  .jstree-default-dark-responsive .jstree-wholerow-hovered {
+    background: #555555;
+  }
+  .jstree-default-dark-responsive .jstree-wholerow-clicked {
+    background: #5fa2db;
+  }
+  .jstree-default-dark-responsive .jstree-children .jstree-last > .jstree-wholerow {
+    box-shadow: inset 0 -6px 3px -5px #111111;
+  }
+  .jstree-default-dark-responsive .jstree-children .jstree-open > .jstree-wholerow {
+    box-shadow: inset 0 6px 3px -5px #111111;
+    border-top: 0;
+  }
+  .jstree-default-dark-responsive .jstree-children .jstree-open + .jstree-open {
+    box-shadow: none;
+  }
+  .jstree-default-dark-responsive .jstree-node,
+  .jstree-default-dark-responsive .jstree-icon,
+  .jstree-default-dark-responsive .jstree-node > .jstree-ocl,
+  .jstree-default-dark-responsive .jstree-themeicon,
+  .jstree-default-dark-responsive .jstree-checkbox {
+    background-image: url("40px.png");
+    background-size: 120px 240px;
+  }
+  .jstree-default-dark-responsive .jstree-node {
+    background-position: -80px 0;
+    background-repeat: repeat-y;
+  }
+  .jstree-default-dark-responsive .jstree-last {
+    background: transparent;
+  }
+  .jstree-default-dark-responsive .jstree-leaf > .jstree-ocl {
+    background-position: -40px -120px;
+  }
+  .jstree-default-dark-responsive .jstree-last > .jstree-ocl {
+    background-position: -40px -160px;
+  }
+  .jstree-default-dark-responsive .jstree-themeicon-custom {
+    background-color: transparent;
+    background-image: none;
+    background-position: 0 0;
+  }
+  .jstree-default-dark-responsive .jstree-file {
+    background: url("40px.png") 0 -160px no-repeat;
+    background-size: 120px 240px;
+  }
+  .jstree-default-dark-responsive .jstree-folder {
+    background: url("40px.png") -40px -40px no-repeat;
+    background-size: 120px 240px;
+  }
+  .jstree-default-dark-responsive > .jstree-container-ul > .jstree-node {
+    margin-left: 0;
+    margin-right: 0;
+  }
+}
+.jstree-default-dark {
+  background: #333;
+}
+.jstree-default-dark .jstree-anchor {
+  color: #999;
+  text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.5);
+}
+.jstree-default-dark .jstree-clicked,
+.jstree-default-dark .jstree-checked {
+  color: white;
+}
+.jstree-default-dark .jstree-hovered {
+  color: white;
+}
+#jstree-marker.jstree-default-dark {
+  border-left-color: #999;
+  background: transparent;
+}
+.jstree-default-dark .jstree-anchor > .jstree-icon {
+  opacity: 0.75;
+}
+.jstree-default-dark .jstree-clicked > .jstree-icon,
+.jstree-default-dark .jstree-hovered > .jstree-icon,
+.jstree-default-dark .jstree-checked > .jstree-icon {
+  opacity: 1;
+}
+.jstree-default-dark.jstree-rtl .jstree-node {
+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAACZmZl+9SADAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");
+}
+.jstree-default-dark.jstree-rtl .jstree-last {
+  background: transparent;
+}
+.jstree-default-dark-small.jstree-rtl .jstree-node {
+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAACZmZl+9SADAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg==");
+}
+.jstree-default-dark-small.jstree-rtl .jstree-last {
+  background: transparent;
+}
+.jstree-default-dark-large.jstree-rtl .jstree-node {
+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAACZmZl+9SADAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg==");
+}
+.jstree-default-dark-large.jstree-rtl .jstree-last {
+  background: transparent;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vakata-jstree-3.3.5/dist/themes/default-dark/style.min.css	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,1 @@
+.jstree-node,.jstree-children,.jstree-container-ul{display:block;margin:0;padding:0;list-style-type:none;list-style-image:none}.jstree-node{white-space:nowrap}.jstree-anchor{display:inline-block;color:#000;white-space:nowrap;padding:0 4px 0 1px;margin:0;vertical-align:top}.jstree-anchor:focus{outline:0}.jstree-anchor,.jstree-anchor:link,.jstree-anchor:visited,.jstree-anchor:hover,.jstree-anchor:active{text-decoration:none;color:inherit}.jstree-icon{display:inline-block;text-decoration:none;margin:0;padding:0;vertical-align:top;text-align:center}.jstree-icon:empty{display:inline-block;text-decoration:none;margin:0;padding:0;vertical-align:top;text-align:center}.jstree-ocl{cursor:pointer}.jstree-leaf>.jstree-ocl{cursor:default}.jstree .jstree-open>.jstree-children{display:block}.jstree .jstree-closed>.jstree-children,.jstree .jstree-leaf>.jstree-children{display:none}.jstree-anchor>.jstree-themeicon{margin-right:2px}.jstree-no-icons .jstree-themeicon,.jstree-anchor>.jstree-themeicon-hidden{display:none}.jstree-hidden,.jstree-node.jstree-hidden{display:none}.jstree-rtl .jstree-anchor{padding:0 1px 0 4px}.jstree-rtl .jstree-anchor>.jstree-themeicon{margin-left:2px;margin-right:0}.jstree-rtl .jstree-node{margin-left:0}.jstree-rtl .jstree-container-ul>.jstree-node{margin-right:0}.jstree-wholerow-ul{position:relative;display:inline-block;min-width:100%}.jstree-wholerow-ul .jstree-leaf>.jstree-ocl{cursor:pointer}.jstree-wholerow-ul .jstree-anchor,.jstree-wholerow-ul .jstree-icon{position:relative}.jstree-wholerow-ul .jstree-wholerow{width:100%;cursor:pointer;position:absolute;left:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jstree-contextmenu .jstree-anchor{-webkit-user-select:none;-webkit-touch-callout:none}.vakata-context{display:none}.vakata-context,.vakata-context ul{margin:0;padding:2px;position:absolute;background:#f5f5f5;border:1px solid #979797;box-shadow:2px 2px 2px #999}.vakata-context ul{list-style:none;left:100%;margin-top:-2.7em;margin-left:-4px}.vakata-context .vakata-context-right ul{left:auto;right:100%;margin-left:auto;margin-right:-4px}.vakata-context li{list-style:none}.vakata-context li>a{display:block;padding:0 2em;text-decoration:none;width:auto;color:#000;white-space:nowrap;line-height:2.4em;text-shadow:1px 1px 0 #fff;border-radius:1px}.vakata-context li>a:hover{position:relative;background-color:#e8eff7;box-shadow:0 0 2px #0a6aa1}.vakata-context li>a.vakata-context-parent{background-image:url(data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAIORI4JlrqN1oMSnmmZDQUAOw==);background-position:right center;background-repeat:no-repeat}.vakata-context li>a:focus{outline:0}.vakata-context .vakata-context-hover>a{position:relative;background-color:#e8eff7;box-shadow:0 0 2px #0a6aa1}.vakata-context .vakata-context-separator>a,.vakata-context .vakata-context-separator>a:hover{background:#fff;border:0;border-top:1px solid #e2e3e3;height:1px;min-height:1px;max-height:1px;padding:0;margin:0 0 0 2.4em;border-left:1px solid #e0e0e0;text-shadow:0 0 0 transparent;box-shadow:0 0 0 transparent;border-radius:0}.vakata-context .vakata-contextmenu-disabled a,.vakata-context .vakata-contextmenu-disabled a:hover{color:silver;background-color:transparent;border:0;box-shadow:0 0 0}.vakata-context li>a>i{text-decoration:none;display:inline-block;width:2.4em;height:2.4em;background:0 0;margin:0 0 0 -2em;vertical-align:top;text-align:center;line-height:2.4em}.vakata-context li>a>i:empty{width:2.4em;line-height:2.4em}.vakata-context li>a .vakata-contextmenu-sep{display:inline-block;width:1px;height:2.4em;background:#fff;margin:0 .5em 0 0;border-left:1px solid #e2e3e3}.vakata-context .vakata-contextmenu-shortcut{font-size:.8em;color:silver;opacity:.5;display:none}.vakata-context-rtl ul{left:auto;right:100%;margin-left:auto;margin-right:-4px}.vakata-context-rtl li>a.vakata-context-parent{background-image:url(data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAINjI+AC7rWHIsPtmoxLAA7);background-position:left center;background-repeat:no-repeat}.vakata-context-rtl .vakata-context-separator>a{margin:0 2.4em 0 0;border-left:0;border-right:1px solid #e2e3e3}.vakata-context-rtl .vakata-context-left ul{right:auto;left:100%;margin-left:-4px;margin-right:auto}.vakata-context-rtl li>a>i{margin:0 -2em 0 0}.vakata-context-rtl li>a .vakata-contextmenu-sep{margin:0 0 0 .5em;border-left-color:#fff;background:#e2e3e3}#jstree-marker{position:absolute;top:0;left:0;margin:-5px 0 0 0;padding:0;border-right:0;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid;width:0;height:0;font-size:0;line-height:0}#jstree-dnd{line-height:16px;margin:0;padding:4px}#jstree-dnd .jstree-icon,#jstree-dnd .jstree-copy{display:inline-block;text-decoration:none;margin:0 2px 0 0;padding:0;width:16px;height:16px}#jstree-dnd .jstree-ok{background:green}#jstree-dnd .jstree-er{background:red}#jstree-dnd .jstree-copy{margin:0 2px}.jstree-default-dark .jstree-node,.jstree-default-dark .jstree-icon{background-repeat:no-repeat;background-color:transparent}.jstree-default-dark .jstree-anchor,.jstree-default-dark .jstree-animated,.jstree-default-dark .jstree-wholerow{transition:background-color .15s,box-shadow .15s}.jstree-default-dark .jstree-hovered{background:#555;border-radius:2px;box-shadow:inset 0 0 1px #555}.jstree-default-dark .jstree-context{background:#555;border-radius:2px;box-shadow:inset 0 0 1px #555}.jstree-default-dark .jstree-clicked{background:#5fa2db;border-radius:2px;box-shadow:inset 0 0 1px #666}.jstree-default-dark .jstree-no-icons .jstree-anchor>.jstree-themeicon{display:none}.jstree-default-dark .jstree-disabled{background:0 0;color:#666}.jstree-default-dark .jstree-disabled.jstree-hovered{background:0 0;box-shadow:none}.jstree-default-dark .jstree-disabled.jstree-clicked{background:#333}.jstree-default-dark .jstree-disabled>.jstree-icon{opacity:.8;filter:url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'jstree-grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default-dark .jstree-search{font-style:italic;color:#fff;font-weight:700}.jstree-default-dark .jstree-no-checkboxes .jstree-checkbox{display:none!important}.jstree-default-dark.jstree-checkbox-no-clicked .jstree-clicked{background:0 0;box-shadow:none}.jstree-default-dark.jstree-checkbox-no-clicked .jstree-clicked.jstree-hovered{background:#555}.jstree-default-dark.jstree-checkbox-no-clicked>.jstree-wholerow-ul .jstree-wholerow-clicked{background:0 0}.jstree-default-dark.jstree-checkbox-no-clicked>.jstree-wholerow-ul .jstree-wholerow-clicked.jstree-wholerow-hovered{background:#555}.jstree-default-dark>.jstree-striped{min-width:100%;display:inline-block;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAMAAAB/qqA+AAAABlBMVEUAAAAAAAClZ7nPAAAAAnRSTlMNAMM9s3UAAAAXSURBVHjajcEBAQAAAIKg/H/aCQZ70AUBjAATb6YPDgAAAABJRU5ErkJggg==) left top repeat}.jstree-default-dark>.jstree-wholerow-ul .jstree-hovered,.jstree-default-dark>.jstree-wholerow-ul .jstree-clicked{background:0 0;box-shadow:none;border-radius:0}.jstree-default-dark .jstree-wholerow{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.jstree-default-dark .jstree-wholerow-hovered{background:#555}.jstree-default-dark .jstree-wholerow-clicked{background:#5fa2db;background:-webkit-linear-gradient(top,#5fa2db 0,#5fa2db 100%);background:linear-gradient(to bottom,#5fa2db 0,#5fa2db 100%)}.jstree-default-dark .jstree-node{min-height:24px;line-height:24px;margin-left:24px;min-width:24px}.jstree-default-dark .jstree-anchor{line-height:24px;height:24px}.jstree-default-dark .jstree-icon{width:24px;height:24px;line-height:24px}.jstree-default-dark .jstree-icon:empty{width:24px;height:24px;line-height:24px}.jstree-default-dark.jstree-rtl .jstree-node{margin-right:24px}.jstree-default-dark .jstree-wholerow{height:24px}.jstree-default-dark .jstree-node,.jstree-default-dark .jstree-icon{background-image:url(32px.png)}.jstree-default-dark .jstree-node{background-position:-292px -4px;background-repeat:repeat-y}.jstree-default-dark .jstree-last{background:0 0}.jstree-default-dark .jstree-open>.jstree-ocl{background-position:-132px -4px}.jstree-default-dark .jstree-closed>.jstree-ocl{background-position:-100px -4px}.jstree-default-dark .jstree-leaf>.jstree-ocl{background-position:-68px -4px}.jstree-default-dark .jstree-themeicon{background-position:-260px -4px}.jstree-default-dark>.jstree-no-dots .jstree-node,.jstree-default-dark>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-dark>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-36px -4px}.jstree-default-dark>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-4px -4px}.jstree-default-dark .jstree-disabled{background:0 0}.jstree-default-dark .jstree-disabled.jstree-hovered{background:0 0}.jstree-default-dark .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default-dark .jstree-checkbox{background-position:-164px -4px}.jstree-default-dark .jstree-checkbox:hover{background-position:-164px -36px}.jstree-default-dark.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-dark .jstree-checked>.jstree-checkbox{background-position:-228px -4px}.jstree-default-dark.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-dark .jstree-checked>.jstree-checkbox:hover{background-position:-228px -36px}.jstree-default-dark .jstree-anchor>.jstree-undetermined{background-position:-196px -4px}.jstree-default-dark .jstree-anchor>.jstree-undetermined:hover{background-position:-196px -36px}.jstree-default-dark .jstree-checkbox-disabled{opacity:.8;filter:url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'jstree-grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default-dark>.jstree-striped{background-size:auto 48px}.jstree-default-dark.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==);background-position:100% 1px;background-repeat:repeat-y}.jstree-default-dark.jstree-rtl .jstree-last{background:0 0}.jstree-default-dark.jstree-rtl .jstree-open>.jstree-ocl{background-position:-132px -36px}.jstree-default-dark.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-100px -36px}.jstree-default-dark.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-68px -36px}.jstree-default-dark.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default-dark.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-dark.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-36px -36px}.jstree-default-dark.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-4px -36px}.jstree-default-dark .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-dark>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url(throbber.gif) center center no-repeat}.jstree-default-dark .jstree-file{background:url(32px.png) -100px -68px no-repeat}.jstree-default-dark .jstree-folder{background:url(32px.png) -260px -4px no-repeat}.jstree-default-dark>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}#jstree-dnd.jstree-default-dark{line-height:24px;padding:0 4px}#jstree-dnd.jstree-default-dark .jstree-ok,#jstree-dnd.jstree-default-dark .jstree-er{background-image:url(32px.png);background-repeat:no-repeat;background-color:transparent}#jstree-dnd.jstree-default-dark i{background:0 0;width:24px;height:24px;line-height:24px}#jstree-dnd.jstree-default-dark .jstree-ok{background-position:-4px -68px}#jstree-dnd.jstree-default-dark .jstree-er{background-position:-36px -68px}.jstree-default-dark .jstree-ellipsis{overflow:hidden}.jstree-default-dark .jstree-ellipsis .jstree-anchor{width:calc(100% - 29px);text-overflow:ellipsis;overflow:hidden}.jstree-default-dark .jstree-ellipsis.jstree-no-icons .jstree-anchor{width:calc(100% - 5px)}.jstree-default-dark.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==)}.jstree-default-dark.jstree-rtl .jstree-last{background:0 0}.jstree-default-dark-small .jstree-node{min-height:18px;line-height:18px;margin-left:18px;min-width:18px}.jstree-default-dark-small .jstree-anchor{line-height:18px;height:18px}.jstree-default-dark-small .jstree-icon{width:18px;height:18px;line-height:18px}.jstree-default-dark-small .jstree-icon:empty{width:18px;height:18px;line-height:18px}.jstree-default-dark-small.jstree-rtl .jstree-node{margin-right:18px}.jstree-default-dark-small .jstree-wholerow{height:18px}.jstree-default-dark-small .jstree-node,.jstree-default-dark-small .jstree-icon{background-image:url(32px.png)}.jstree-default-dark-small .jstree-node{background-position:-295px -7px;background-repeat:repeat-y}.jstree-default-dark-small .jstree-last{background:0 0}.jstree-default-dark-small .jstree-open>.jstree-ocl{background-position:-135px -7px}.jstree-default-dark-small .jstree-closed>.jstree-ocl{background-position:-103px -7px}.jstree-default-dark-small .jstree-leaf>.jstree-ocl{background-position:-71px -7px}.jstree-default-dark-small .jstree-themeicon{background-position:-263px -7px}.jstree-default-dark-small>.jstree-no-dots .jstree-node,.jstree-default-dark-small>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-dark-small>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-39px -7px}.jstree-default-dark-small>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-7px -7px}.jstree-default-dark-small .jstree-disabled{background:0 0}.jstree-default-dark-small .jstree-disabled.jstree-hovered{background:0 0}.jstree-default-dark-small .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default-dark-small .jstree-checkbox{background-position:-167px -7px}.jstree-default-dark-small .jstree-checkbox:hover{background-position:-167px -39px}.jstree-default-dark-small.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-dark-small .jstree-checked>.jstree-checkbox{background-position:-231px -7px}.jstree-default-dark-small.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-dark-small .jstree-checked>.jstree-checkbox:hover{background-position:-231px -39px}.jstree-default-dark-small .jstree-anchor>.jstree-undetermined{background-position:-199px -7px}.jstree-default-dark-small .jstree-anchor>.jstree-undetermined:hover{background-position:-199px -39px}.jstree-default-dark-small .jstree-checkbox-disabled{opacity:.8;filter:url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'jstree-grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default-dark-small>.jstree-striped{background-size:auto 36px}.jstree-default-dark-small.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==);background-position:100% 1px;background-repeat:repeat-y}.jstree-default-dark-small.jstree-rtl .jstree-last{background:0 0}.jstree-default-dark-small.jstree-rtl .jstree-open>.jstree-ocl{background-position:-135px -39px}.jstree-default-dark-small.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-103px -39px}.jstree-default-dark-small.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-71px -39px}.jstree-default-dark-small.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default-dark-small.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-dark-small.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-39px -39px}.jstree-default-dark-small.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-7px -39px}.jstree-default-dark-small .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-dark-small>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url(throbber.gif) center center no-repeat}.jstree-default-dark-small .jstree-file{background:url(32px.png) -103px -71px no-repeat}.jstree-default-dark-small .jstree-folder{background:url(32px.png) -263px -7px no-repeat}.jstree-default-dark-small>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}#jstree-dnd.jstree-default-dark-small{line-height:18px;padding:0 4px}#jstree-dnd.jstree-default-dark-small .jstree-ok,#jstree-dnd.jstree-default-dark-small .jstree-er{background-image:url(32px.png);background-repeat:no-repeat;background-color:transparent}#jstree-dnd.jstree-default-dark-small i{background:0 0;width:18px;height:18px;line-height:18px}#jstree-dnd.jstree-default-dark-small .jstree-ok{background-position:-7px -71px}#jstree-dnd.jstree-default-dark-small .jstree-er{background-position:-39px -71px}.jstree-default-dark-small .jstree-ellipsis{overflow:hidden}.jstree-default-dark-small .jstree-ellipsis .jstree-anchor{width:calc(100% - 23px);text-overflow:ellipsis;overflow:hidden}.jstree-default-dark-small .jstree-ellipsis.jstree-no-icons .jstree-anchor{width:calc(100% - 5px)}.jstree-default-dark-small.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg==)}.jstree-default-dark-small.jstree-rtl .jstree-last{background:0 0}.jstree-default-dark-large .jstree-node{min-height:32px;line-height:32px;margin-left:32px;min-width:32px}.jstree-default-dark-large .jstree-anchor{line-height:32px;height:32px}.jstree-default-dark-large .jstree-icon{width:32px;height:32px;line-height:32px}.jstree-default-dark-large .jstree-icon:empty{width:32px;height:32px;line-height:32px}.jstree-default-dark-large.jstree-rtl .jstree-node{margin-right:32px}.jstree-default-dark-large .jstree-wholerow{height:32px}.jstree-default-dark-large .jstree-node,.jstree-default-dark-large .jstree-icon{background-image:url(32px.png)}.jstree-default-dark-large .jstree-node{background-position:-288px 0;background-repeat:repeat-y}.jstree-default-dark-large .jstree-last{background:0 0}.jstree-default-dark-large .jstree-open>.jstree-ocl{background-position:-128px 0}.jstree-default-dark-large .jstree-closed>.jstree-ocl{background-position:-96px 0}.jstree-default-dark-large .jstree-leaf>.jstree-ocl{background-position:-64px 0}.jstree-default-dark-large .jstree-themeicon{background-position:-256px 0}.jstree-default-dark-large>.jstree-no-dots .jstree-node,.jstree-default-dark-large>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-dark-large>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-32px 0}.jstree-default-dark-large>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:0 0}.jstree-default-dark-large .jstree-disabled{background:0 0}.jstree-default-dark-large .jstree-disabled.jstree-hovered{background:0 0}.jstree-default-dark-large .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default-dark-large .jstree-checkbox{background-position:-160px 0}.jstree-default-dark-large .jstree-checkbox:hover{background-position:-160px -32px}.jstree-default-dark-large.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-dark-large .jstree-checked>.jstree-checkbox{background-position:-224px 0}.jstree-default-dark-large.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-dark-large .jstree-checked>.jstree-checkbox:hover{background-position:-224px -32px}.jstree-default-dark-large .jstree-anchor>.jstree-undetermined{background-position:-192px 0}.jstree-default-dark-large .jstree-anchor>.jstree-undetermined:hover{background-position:-192px -32px}.jstree-default-dark-large .jstree-checkbox-disabled{opacity:.8;filter:url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'jstree-grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default-dark-large>.jstree-striped{background-size:auto 64px}.jstree-default-dark-large.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==);background-position:100% 1px;background-repeat:repeat-y}.jstree-default-dark-large.jstree-rtl .jstree-last{background:0 0}.jstree-default-dark-large.jstree-rtl .jstree-open>.jstree-ocl{background-position:-128px -32px}.jstree-default-dark-large.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-96px -32px}.jstree-default-dark-large.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-64px -32px}.jstree-default-dark-large.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default-dark-large.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-dark-large.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-32px -32px}.jstree-default-dark-large.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:0 -32px}.jstree-default-dark-large .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-dark-large>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url(throbber.gif) center center no-repeat}.jstree-default-dark-large .jstree-file{background:url(32px.png) -96px -64px no-repeat}.jstree-default-dark-large .jstree-folder{background:url(32px.png) -256px 0 no-repeat}.jstree-default-dark-large>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}#jstree-dnd.jstree-default-dark-large{line-height:32px;padding:0 4px}#jstree-dnd.jstree-default-dark-large .jstree-ok,#jstree-dnd.jstree-default-dark-large .jstree-er{background-image:url(32px.png);background-repeat:no-repeat;background-color:transparent}#jstree-dnd.jstree-default-dark-large i{background:0 0;width:32px;height:32px;line-height:32px}#jstree-dnd.jstree-default-dark-large .jstree-ok{background-position:0 -64px}#jstree-dnd.jstree-default-dark-large .jstree-er{background-position:-32px -64px}.jstree-default-dark-large .jstree-ellipsis{overflow:hidden}.jstree-default-dark-large .jstree-ellipsis .jstree-anchor{width:calc(100% - 37px);text-overflow:ellipsis;overflow:hidden}.jstree-default-dark-large .jstree-ellipsis.jstree-no-icons .jstree-anchor{width:calc(100% - 5px)}.jstree-default-dark-large.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg==)}.jstree-default-dark-large.jstree-rtl .jstree-last{background:0 0}@media (max-width:768px){#jstree-dnd.jstree-dnd-responsive{line-height:40px;font-weight:700;font-size:1.1em;text-shadow:1px 1px #fff}#jstree-dnd.jstree-dnd-responsive>i{background:0 0;width:40px;height:40px}#jstree-dnd.jstree-dnd-responsive>.jstree-ok{background-image:url(40px.png);background-position:0 -200px;background-size:120px 240px}#jstree-dnd.jstree-dnd-responsive>.jstree-er{background-image:url(40px.png);background-position:-40px -200px;background-size:120px 240px}#jstree-marker.jstree-dnd-responsive{border-left-width:10px;border-top-width:10px;border-bottom-width:10px;margin-top:-10px}}@media (max-width:768px){.jstree-default-dark-responsive .jstree-icon{background-image:url(40px.png)}.jstree-default-dark-responsive .jstree-node,.jstree-default-dark-responsive .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-dark-responsive .jstree-node{min-height:40px;line-height:40px;margin-left:40px;min-width:40px;white-space:nowrap}.jstree-default-dark-responsive .jstree-anchor{line-height:40px;height:40px}.jstree-default-dark-responsive .jstree-icon,.jstree-default-dark-responsive .jstree-icon:empty{width:40px;height:40px;line-height:40px}.jstree-default-dark-responsive>.jstree-container-ul>.jstree-node{margin-left:0}.jstree-default-dark-responsive.jstree-rtl .jstree-node{margin-left:0;margin-right:40px;background:0 0}.jstree-default-dark-responsive.jstree-rtl .jstree-container-ul>.jstree-node{margin-right:0}.jstree-default-dark-responsive .jstree-ocl,.jstree-default-dark-responsive .jstree-themeicon,.jstree-default-dark-responsive .jstree-checkbox{background-size:120px 240px}.jstree-default-dark-responsive .jstree-leaf>.jstree-ocl,.jstree-default-dark-responsive.jstree-rtl .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-dark-responsive .jstree-open>.jstree-ocl{background-position:0 0!important}.jstree-default-dark-responsive .jstree-closed>.jstree-ocl{background-position:0 -40px!important}.jstree-default-dark-responsive.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-40px 0!important}.jstree-default-dark-responsive .jstree-themeicon{background-position:-40px -40px}.jstree-default-dark-responsive .jstree-checkbox,.jstree-default-dark-responsive .jstree-checkbox:hover{background-position:-40px -80px}.jstree-default-dark-responsive.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-dark-responsive.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-dark-responsive .jstree-checked>.jstree-checkbox,.jstree-default-dark-responsive .jstree-checked>.jstree-checkbox:hover{background-position:0 -80px}.jstree-default-dark-responsive .jstree-anchor>.jstree-undetermined,.jstree-default-dark-responsive .jstree-anchor>.jstree-undetermined:hover{background-position:0 -120px}.jstree-default-dark-responsive .jstree-anchor{font-weight:700;font-size:1.1em;text-shadow:1px 1px #fff}.jstree-default-dark-responsive>.jstree-striped{background:0 0}.jstree-default-dark-responsive .jstree-wholerow{border-top:1px solid #666;border-bottom:1px solid #000;background:#333;height:40px}.jstree-default-dark-responsive .jstree-wholerow-hovered{background:#555}.jstree-default-dark-responsive .jstree-wholerow-clicked{background:#5fa2db}.jstree-default-dark-responsive .jstree-children .jstree-last>.jstree-wholerow{box-shadow:inset 0 -6px 3px -5px #111}.jstree-default-dark-responsive .jstree-children .jstree-open>.jstree-wholerow{box-shadow:inset 0 6px 3px -5px #111;border-top:0}.jstree-default-dark-responsive .jstree-children .jstree-open+.jstree-open{box-shadow:none}.jstree-default-dark-responsive .jstree-node,.jstree-default-dark-responsive .jstree-icon,.jstree-default-dark-responsive .jstree-node>.jstree-ocl,.jstree-default-dark-responsive .jstree-themeicon,.jstree-default-dark-responsive .jstree-checkbox{background-image:url(40px.png);background-size:120px 240px}.jstree-default-dark-responsive .jstree-node{background-position:-80px 0;background-repeat:repeat-y}.jstree-default-dark-responsive .jstree-last{background:0 0}.jstree-default-dark-responsive .jstree-leaf>.jstree-ocl{background-position:-40px -120px}.jstree-default-dark-responsive .jstree-last>.jstree-ocl{background-position:-40px -160px}.jstree-default-dark-responsive .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-dark-responsive .jstree-file{background:url(40px.png) 0 -160px no-repeat;background-size:120px 240px}.jstree-default-dark-responsive .jstree-folder{background:url(40px.png) -40px -40px no-repeat;background-size:120px 240px}.jstree-default-dark-responsive>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}}.jstree-default-dark{background:#333}.jstree-default-dark .jstree-anchor{color:#999;text-shadow:1px 1px 0 rgba(0,0,0,.5)}.jstree-default-dark .jstree-clicked,.jstree-default-dark .jstree-checked{color:#fff}.jstree-default-dark .jstree-hovered{color:#fff}#jstree-marker.jstree-default-dark{border-left-color:#999;background:0 0}.jstree-default-dark .jstree-anchor>.jstree-icon{opacity:.75}.jstree-default-dark .jstree-clicked>.jstree-icon,.jstree-default-dark .jstree-hovered>.jstree-icon,.jstree-default-dark .jstree-checked>.jstree-icon{opacity:1}.jstree-default-dark.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAACZmZl+9SADAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==)}.jstree-default-dark.jstree-rtl .jstree-last{background:0 0}.jstree-default-dark-small.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAACZmZl+9SADAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg==)}.jstree-default-dark-small.jstree-rtl .jstree-last{background:0 0}.jstree-default-dark-large.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAACZmZl+9SADAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg==)}.jstree-default-dark-large.jstree-rtl .jstree-last{background:0 0}
\ No newline at end of file
Binary file vakata-jstree-3.3.5/dist/themes/default-dark/throbber.gif has changed
Binary file vakata-jstree-3.3.5/dist/themes/default/32px.png has changed
Binary file vakata-jstree-3.3.5/dist/themes/default/40px.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vakata-jstree-3.3.5/dist/themes/default/style.css	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,1108 @@
+/* jsTree default theme */
+.jstree-node,
+.jstree-children,
+.jstree-container-ul {
+  display: block;
+  margin: 0;
+  padding: 0;
+  list-style-type: none;
+  list-style-image: none;
+}
+.jstree-node {
+  white-space: nowrap;
+}
+.jstree-anchor {
+  display: inline-block;
+  color: black;
+  white-space: nowrap;
+  padding: 0 4px 0 1px;
+  margin: 0;
+  vertical-align: top;
+}
+.jstree-anchor:focus {
+  outline: 0;
+}
+.jstree-anchor,
+.jstree-anchor:link,
+.jstree-anchor:visited,
+.jstree-anchor:hover,
+.jstree-anchor:active {
+  text-decoration: none;
+  color: inherit;
+}
+.jstree-icon {
+  display: inline-block;
+  text-decoration: none;
+  margin: 0;
+  padding: 0;
+  vertical-align: top;
+  text-align: center;
+}
+.jstree-icon:empty {
+  display: inline-block;
+  text-decoration: none;
+  margin: 0;
+  padding: 0;
+  vertical-align: top;
+  text-align: center;
+}
+.jstree-ocl {
+  cursor: pointer;
+}
+.jstree-leaf > .jstree-ocl {
+  cursor: default;
+}
+.jstree .jstree-open > .jstree-children {
+  display: block;
+}
+.jstree .jstree-closed > .jstree-children,
+.jstree .jstree-leaf > .jstree-children {
+  display: none;
+}
+.jstree-anchor > .jstree-themeicon {
+  margin-right: 2px;
+}
+.jstree-no-icons .jstree-themeicon,
+.jstree-anchor > .jstree-themeicon-hidden {
+  display: none;
+}
+.jstree-hidden,
+.jstree-node.jstree-hidden {
+  display: none;
+}
+.jstree-rtl .jstree-anchor {
+  padding: 0 1px 0 4px;
+}
+.jstree-rtl .jstree-anchor > .jstree-themeicon {
+  margin-left: 2px;
+  margin-right: 0;
+}
+.jstree-rtl .jstree-node {
+  margin-left: 0;
+}
+.jstree-rtl .jstree-container-ul > .jstree-node {
+  margin-right: 0;
+}
+.jstree-wholerow-ul {
+  position: relative;
+  display: inline-block;
+  min-width: 100%;
+}
+.jstree-wholerow-ul .jstree-leaf > .jstree-ocl {
+  cursor: pointer;
+}
+.jstree-wholerow-ul .jstree-anchor,
+.jstree-wholerow-ul .jstree-icon {
+  position: relative;
+}
+.jstree-wholerow-ul .jstree-wholerow {
+  width: 100%;
+  cursor: pointer;
+  position: absolute;
+  left: 0;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+.jstree-contextmenu .jstree-anchor {
+  -webkit-user-select: none;
+  /* disable selection/Copy of UIWebView */
+  -webkit-touch-callout: none;
+  /* disable the IOS popup when long-press on a link */
+}
+.vakata-context {
+  display: none;
+}
+.vakata-context,
+.vakata-context ul {
+  margin: 0;
+  padding: 2px;
+  position: absolute;
+  background: #f5f5f5;
+  border: 1px solid #979797;
+  box-shadow: 2px 2px 2px #999999;
+}
+.vakata-context ul {
+  list-style: none;
+  left: 100%;
+  margin-top: -2.7em;
+  margin-left: -4px;
+}
+.vakata-context .vakata-context-right ul {
+  left: auto;
+  right: 100%;
+  margin-left: auto;
+  margin-right: -4px;
+}
+.vakata-context li {
+  list-style: none;
+}
+.vakata-context li > a {
+  display: block;
+  padding: 0 2em 0 2em;
+  text-decoration: none;
+  width: auto;
+  color: black;
+  white-space: nowrap;
+  line-height: 2.4em;
+  text-shadow: 1px 1px 0 white;
+  border-radius: 1px;
+}
+.vakata-context li > a:hover {
+  position: relative;
+  background-color: #e8eff7;
+  box-shadow: 0 0 2px #0a6aa1;
+}
+.vakata-context li > a.vakata-context-parent {
+  background-image: url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAIORI4JlrqN1oMSnmmZDQUAOw==");
+  background-position: right center;
+  background-repeat: no-repeat;
+}
+.vakata-context li > a:focus {
+  outline: 0;
+}
+.vakata-context .vakata-context-hover > a {
+  position: relative;
+  background-color: #e8eff7;
+  box-shadow: 0 0 2px #0a6aa1;
+}
+.vakata-context .vakata-context-separator > a,
+.vakata-context .vakata-context-separator > a:hover {
+  background: white;
+  border: 0;
+  border-top: 1px solid #e2e3e3;
+  height: 1px;
+  min-height: 1px;
+  max-height: 1px;
+  padding: 0;
+  margin: 0 0 0 2.4em;
+  border-left: 1px solid #e0e0e0;
+  text-shadow: 0 0 0 transparent;
+  box-shadow: 0 0 0 transparent;
+  border-radius: 0;
+}
+.vakata-context .vakata-contextmenu-disabled a,
+.vakata-context .vakata-contextmenu-disabled a:hover {
+  color: silver;
+  background-color: transparent;
+  border: 0;
+  box-shadow: 0 0 0;
+}
+.vakata-context li > a > i {
+  text-decoration: none;
+  display: inline-block;
+  width: 2.4em;
+  height: 2.4em;
+  background: transparent;
+  margin: 0 0 0 -2em;
+  vertical-align: top;
+  text-align: center;
+  line-height: 2.4em;
+}
+.vakata-context li > a > i:empty {
+  width: 2.4em;
+  line-height: 2.4em;
+}
+.vakata-context li > a .vakata-contextmenu-sep {
+  display: inline-block;
+  width: 1px;
+  height: 2.4em;
+  background: white;
+  margin: 0 0.5em 0 0;
+  border-left: 1px solid #e2e3e3;
+}
+.vakata-context .vakata-contextmenu-shortcut {
+  font-size: 0.8em;
+  color: silver;
+  opacity: 0.5;
+  display: none;
+}
+.vakata-context-rtl ul {
+  left: auto;
+  right: 100%;
+  margin-left: auto;
+  margin-right: -4px;
+}
+.vakata-context-rtl li > a.vakata-context-parent {
+  background-image: url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAINjI+AC7rWHIsPtmoxLAA7");
+  background-position: left center;
+  background-repeat: no-repeat;
+}
+.vakata-context-rtl .vakata-context-separator > a {
+  margin: 0 2.4em 0 0;
+  border-left: 0;
+  border-right: 1px solid #e2e3e3;
+}
+.vakata-context-rtl .vakata-context-left ul {
+  right: auto;
+  left: 100%;
+  margin-left: -4px;
+  margin-right: auto;
+}
+.vakata-context-rtl li > a > i {
+  margin: 0 -2em 0 0;
+}
+.vakata-context-rtl li > a .vakata-contextmenu-sep {
+  margin: 0 0 0 0.5em;
+  border-left-color: white;
+  background: #e2e3e3;
+}
+#jstree-marker {
+  position: absolute;
+  top: 0;
+  left: 0;
+  margin: -5px 0 0 0;
+  padding: 0;
+  border-right: 0;
+  border-top: 5px solid transparent;
+  border-bottom: 5px solid transparent;
+  border-left: 5px solid;
+  width: 0;
+  height: 0;
+  font-size: 0;
+  line-height: 0;
+}
+#jstree-dnd {
+  line-height: 16px;
+  margin: 0;
+  padding: 4px;
+}
+#jstree-dnd .jstree-icon,
+#jstree-dnd .jstree-copy {
+  display: inline-block;
+  text-decoration: none;
+  margin: 0 2px 0 0;
+  padding: 0;
+  width: 16px;
+  height: 16px;
+}
+#jstree-dnd .jstree-ok {
+  background: green;
+}
+#jstree-dnd .jstree-er {
+  background: red;
+}
+#jstree-dnd .jstree-copy {
+  margin: 0 2px 0 2px;
+}
+.jstree-default .jstree-node,
+.jstree-default .jstree-icon {
+  background-repeat: no-repeat;
+  background-color: transparent;
+}
+.jstree-default .jstree-anchor,
+.jstree-default .jstree-animated,
+.jstree-default .jstree-wholerow {
+  transition: background-color 0.15s, box-shadow 0.15s;
+}
+.jstree-default .jstree-hovered {
+  background: #e7f4f9;
+  border-radius: 2px;
+  box-shadow: inset 0 0 1px #cccccc;
+}
+.jstree-default .jstree-context {
+  background: #e7f4f9;
+  border-radius: 2px;
+  box-shadow: inset 0 0 1px #cccccc;
+}
+.jstree-default .jstree-clicked {
+  background: #beebff;
+  border-radius: 2px;
+  box-shadow: inset 0 0 1px #999999;
+}
+.jstree-default .jstree-no-icons .jstree-anchor > .jstree-themeicon {
+  display: none;
+}
+.jstree-default .jstree-disabled {
+  background: transparent;
+  color: #666666;
+}
+.jstree-default .jstree-disabled.jstree-hovered {
+  background: transparent;
+  box-shadow: none;
+}
+.jstree-default .jstree-disabled.jstree-clicked {
+  background: #efefef;
+}
+.jstree-default .jstree-disabled > .jstree-icon {
+  opacity: 0.8;
+  filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'jstree-grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#jstree-grayscale");
+  /* Firefox 10+ */
+  filter: gray;
+  /* IE6-9 */
+  -webkit-filter: grayscale(100%);
+  /* Chrome 19+ & Safari 6+ */
+}
+.jstree-default .jstree-search {
+  font-style: italic;
+  color: #8b0000;
+  font-weight: bold;
+}
+.jstree-default .jstree-no-checkboxes .jstree-checkbox {
+  display: none !important;
+}
+.jstree-default.jstree-checkbox-no-clicked .jstree-clicked {
+  background: transparent;
+  box-shadow: none;
+}
+.jstree-default.jstree-checkbox-no-clicked .jstree-clicked.jstree-hovered {
+  background: #e7f4f9;
+}
+.jstree-default.jstree-checkbox-no-clicked > .jstree-wholerow-ul .jstree-wholerow-clicked {
+  background: transparent;
+}
+.jstree-default.jstree-checkbox-no-clicked > .jstree-wholerow-ul .jstree-wholerow-clicked.jstree-wholerow-hovered {
+  background: #e7f4f9;
+}
+.jstree-default > .jstree-striped {
+  min-width: 100%;
+  display: inline-block;
+  background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAMAAAB/qqA+AAAABlBMVEUAAAAAAAClZ7nPAAAAAnRSTlMNAMM9s3UAAAAXSURBVHjajcEBAQAAAIKg/H/aCQZ70AUBjAATb6YPDgAAAABJRU5ErkJggg==") left top repeat;
+}
+.jstree-default > .jstree-wholerow-ul .jstree-hovered,
+.jstree-default > .jstree-wholerow-ul .jstree-clicked {
+  background: transparent;
+  box-shadow: none;
+  border-radius: 0;
+}
+.jstree-default .jstree-wholerow {
+  -moz-box-sizing: border-box;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+}
+.jstree-default .jstree-wholerow-hovered {
+  background: #e7f4f9;
+}
+.jstree-default .jstree-wholerow-clicked {
+  background: #beebff;
+  background: -webkit-linear-gradient(top, #beebff 0%, #a8e4ff 100%);
+  background: linear-gradient(to bottom, #beebff 0%, #a8e4ff 100%);
+}
+.jstree-default .jstree-node {
+  min-height: 24px;
+  line-height: 24px;
+  margin-left: 24px;
+  min-width: 24px;
+}
+.jstree-default .jstree-anchor {
+  line-height: 24px;
+  height: 24px;
+}
+.jstree-default .jstree-icon {
+  width: 24px;
+  height: 24px;
+  line-height: 24px;
+}
+.jstree-default .jstree-icon:empty {
+  width: 24px;
+  height: 24px;
+  line-height: 24px;
+}
+.jstree-default.jstree-rtl .jstree-node {
+  margin-right: 24px;
+}
+.jstree-default .jstree-wholerow {
+  height: 24px;
+}
+.jstree-default .jstree-node,
+.jstree-default .jstree-icon {
+  background-image: url("32px.png");
+}
+.jstree-default .jstree-node {
+  background-position: -292px -4px;
+  background-repeat: repeat-y;
+}
+.jstree-default .jstree-last {
+  background: transparent;
+}
+.jstree-default .jstree-open > .jstree-ocl {
+  background-position: -132px -4px;
+}
+.jstree-default .jstree-closed > .jstree-ocl {
+  background-position: -100px -4px;
+}
+.jstree-default .jstree-leaf > .jstree-ocl {
+  background-position: -68px -4px;
+}
+.jstree-default .jstree-themeicon {
+  background-position: -260px -4px;
+}
+.jstree-default > .jstree-no-dots .jstree-node,
+.jstree-default > .jstree-no-dots .jstree-leaf > .jstree-ocl {
+  background: transparent;
+}
+.jstree-default > .jstree-no-dots .jstree-open > .jstree-ocl {
+  background-position: -36px -4px;
+}
+.jstree-default > .jstree-no-dots .jstree-closed > .jstree-ocl {
+  background-position: -4px -4px;
+}
+.jstree-default .jstree-disabled {
+  background: transparent;
+}
+.jstree-default .jstree-disabled.jstree-hovered {
+  background: transparent;
+}
+.jstree-default .jstree-disabled.jstree-clicked {
+  background: #efefef;
+}
+.jstree-default .jstree-checkbox {
+  background-position: -164px -4px;
+}
+.jstree-default .jstree-checkbox:hover {
+  background-position: -164px -36px;
+}
+.jstree-default.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox,
+.jstree-default .jstree-checked > .jstree-checkbox {
+  background-position: -228px -4px;
+}
+.jstree-default.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover,
+.jstree-default .jstree-checked > .jstree-checkbox:hover {
+  background-position: -228px -36px;
+}
+.jstree-default .jstree-anchor > .jstree-undetermined {
+  background-position: -196px -4px;
+}
+.jstree-default .jstree-anchor > .jstree-undetermined:hover {
+  background-position: -196px -36px;
+}
+.jstree-default .jstree-checkbox-disabled {
+  opacity: 0.8;
+  filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'jstree-grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#jstree-grayscale");
+  /* Firefox 10+ */
+  filter: gray;
+  /* IE6-9 */
+  -webkit-filter: grayscale(100%);
+  /* Chrome 19+ & Safari 6+ */
+}
+.jstree-default > .jstree-striped {
+  background-size: auto 48px;
+}
+.jstree-default.jstree-rtl .jstree-node {
+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");
+  background-position: 100% 1px;
+  background-repeat: repeat-y;
+}
+.jstree-default.jstree-rtl .jstree-last {
+  background: transparent;
+}
+.jstree-default.jstree-rtl .jstree-open > .jstree-ocl {
+  background-position: -132px -36px;
+}
+.jstree-default.jstree-rtl .jstree-closed > .jstree-ocl {
+  background-position: -100px -36px;
+}
+.jstree-default.jstree-rtl .jstree-leaf > .jstree-ocl {
+  background-position: -68px -36px;
+}
+.jstree-default.jstree-rtl > .jstree-no-dots .jstree-node,
+.jstree-default.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl {
+  background: transparent;
+}
+.jstree-default.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl {
+  background-position: -36px -36px;
+}
+.jstree-default.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl {
+  background-position: -4px -36px;
+}
+.jstree-default .jstree-themeicon-custom {
+  background-color: transparent;
+  background-image: none;
+  background-position: 0 0;
+}
+.jstree-default > .jstree-container-ul .jstree-loading > .jstree-ocl {
+  background: url("throbber.gif") center center no-repeat;
+}
+.jstree-default .jstree-file {
+  background: url("32px.png") -100px -68px no-repeat;
+}
+.jstree-default .jstree-folder {
+  background: url("32px.png") -260px -4px no-repeat;
+}
+.jstree-default > .jstree-container-ul > .jstree-node {
+  margin-left: 0;
+  margin-right: 0;
+}
+#jstree-dnd.jstree-default {
+  line-height: 24px;
+  padding: 0 4px;
+}
+#jstree-dnd.jstree-default .jstree-ok,
+#jstree-dnd.jstree-default .jstree-er {
+  background-image: url("32px.png");
+  background-repeat: no-repeat;
+  background-color: transparent;
+}
+#jstree-dnd.jstree-default i {
+  background: transparent;
+  width: 24px;
+  height: 24px;
+  line-height: 24px;
+}
+#jstree-dnd.jstree-default .jstree-ok {
+  background-position: -4px -68px;
+}
+#jstree-dnd.jstree-default .jstree-er {
+  background-position: -36px -68px;
+}
+.jstree-default .jstree-ellipsis {
+  overflow: hidden;
+}
+.jstree-default .jstree-ellipsis .jstree-anchor {
+  width: calc(100% - 29px);
+  text-overflow: ellipsis;
+  overflow: hidden;
+}
+.jstree-default .jstree-ellipsis.jstree-no-icons .jstree-anchor {
+  width: calc(100% - 5px);
+}
+.jstree-default.jstree-rtl .jstree-node {
+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");
+}
+.jstree-default.jstree-rtl .jstree-last {
+  background: transparent;
+}
+.jstree-default-small .jstree-node {
+  min-height: 18px;
+  line-height: 18px;
+  margin-left: 18px;
+  min-width: 18px;
+}
+.jstree-default-small .jstree-anchor {
+  line-height: 18px;
+  height: 18px;
+}
+.jstree-default-small .jstree-icon {
+  width: 18px;
+  height: 18px;
+  line-height: 18px;
+}
+.jstree-default-small .jstree-icon:empty {
+  width: 18px;
+  height: 18px;
+  line-height: 18px;
+}
+.jstree-default-small.jstree-rtl .jstree-node {
+  margin-right: 18px;
+}
+.jstree-default-small .jstree-wholerow {
+  height: 18px;
+}
+.jstree-default-small .jstree-node,
+.jstree-default-small .jstree-icon {
+  background-image: url("32px.png");
+}
+.jstree-default-small .jstree-node {
+  background-position: -295px -7px;
+  background-repeat: repeat-y;
+}
+.jstree-default-small .jstree-last {
+  background: transparent;
+}
+.jstree-default-small .jstree-open > .jstree-ocl {
+  background-position: -135px -7px;
+}
+.jstree-default-small .jstree-closed > .jstree-ocl {
+  background-position: -103px -7px;
+}
+.jstree-default-small .jstree-leaf > .jstree-ocl {
+  background-position: -71px -7px;
+}
+.jstree-default-small .jstree-themeicon {
+  background-position: -263px -7px;
+}
+.jstree-default-small > .jstree-no-dots .jstree-node,
+.jstree-default-small > .jstree-no-dots .jstree-leaf > .jstree-ocl {
+  background: transparent;
+}
+.jstree-default-small > .jstree-no-dots .jstree-open > .jstree-ocl {
+  background-position: -39px -7px;
+}
+.jstree-default-small > .jstree-no-dots .jstree-closed > .jstree-ocl {
+  background-position: -7px -7px;
+}
+.jstree-default-small .jstree-disabled {
+  background: transparent;
+}
+.jstree-default-small .jstree-disabled.jstree-hovered {
+  background: transparent;
+}
+.jstree-default-small .jstree-disabled.jstree-clicked {
+  background: #efefef;
+}
+.jstree-default-small .jstree-checkbox {
+  background-position: -167px -7px;
+}
+.jstree-default-small .jstree-checkbox:hover {
+  background-position: -167px -39px;
+}
+.jstree-default-small.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox,
+.jstree-default-small .jstree-checked > .jstree-checkbox {
+  background-position: -231px -7px;
+}
+.jstree-default-small.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover,
+.jstree-default-small .jstree-checked > .jstree-checkbox:hover {
+  background-position: -231px -39px;
+}
+.jstree-default-small .jstree-anchor > .jstree-undetermined {
+  background-position: -199px -7px;
+}
+.jstree-default-small .jstree-anchor > .jstree-undetermined:hover {
+  background-position: -199px -39px;
+}
+.jstree-default-small .jstree-checkbox-disabled {
+  opacity: 0.8;
+  filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'jstree-grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#jstree-grayscale");
+  /* Firefox 10+ */
+  filter: gray;
+  /* IE6-9 */
+  -webkit-filter: grayscale(100%);
+  /* Chrome 19+ & Safari 6+ */
+}
+.jstree-default-small > .jstree-striped {
+  background-size: auto 36px;
+}
+.jstree-default-small.jstree-rtl .jstree-node {
+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");
+  background-position: 100% 1px;
+  background-repeat: repeat-y;
+}
+.jstree-default-small.jstree-rtl .jstree-last {
+  background: transparent;
+}
+.jstree-default-small.jstree-rtl .jstree-open > .jstree-ocl {
+  background-position: -135px -39px;
+}
+.jstree-default-small.jstree-rtl .jstree-closed > .jstree-ocl {
+  background-position: -103px -39px;
+}
+.jstree-default-small.jstree-rtl .jstree-leaf > .jstree-ocl {
+  background-position: -71px -39px;
+}
+.jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-node,
+.jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl {
+  background: transparent;
+}
+.jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl {
+  background-position: -39px -39px;
+}
+.jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl {
+  background-position: -7px -39px;
+}
+.jstree-default-small .jstree-themeicon-custom {
+  background-color: transparent;
+  background-image: none;
+  background-position: 0 0;
+}
+.jstree-default-small > .jstree-container-ul .jstree-loading > .jstree-ocl {
+  background: url("throbber.gif") center center no-repeat;
+}
+.jstree-default-small .jstree-file {
+  background: url("32px.png") -103px -71px no-repeat;
+}
+.jstree-default-small .jstree-folder {
+  background: url("32px.png") -263px -7px no-repeat;
+}
+.jstree-default-small > .jstree-container-ul > .jstree-node {
+  margin-left: 0;
+  margin-right: 0;
+}
+#jstree-dnd.jstree-default-small {
+  line-height: 18px;
+  padding: 0 4px;
+}
+#jstree-dnd.jstree-default-small .jstree-ok,
+#jstree-dnd.jstree-default-small .jstree-er {
+  background-image: url("32px.png");
+  background-repeat: no-repeat;
+  background-color: transparent;
+}
+#jstree-dnd.jstree-default-small i {
+  background: transparent;
+  width: 18px;
+  height: 18px;
+  line-height: 18px;
+}
+#jstree-dnd.jstree-default-small .jstree-ok {
+  background-position: -7px -71px;
+}
+#jstree-dnd.jstree-default-small .jstree-er {
+  background-position: -39px -71px;
+}
+.jstree-default-small .jstree-ellipsis {
+  overflow: hidden;
+}
+.jstree-default-small .jstree-ellipsis .jstree-anchor {
+  width: calc(100% - 23px);
+  text-overflow: ellipsis;
+  overflow: hidden;
+}
+.jstree-default-small .jstree-ellipsis.jstree-no-icons .jstree-anchor {
+  width: calc(100% - 5px);
+}
+.jstree-default-small.jstree-rtl .jstree-node {
+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg==");
+}
+.jstree-default-small.jstree-rtl .jstree-last {
+  background: transparent;
+}
+.jstree-default-large .jstree-node {
+  min-height: 32px;
+  line-height: 32px;
+  margin-left: 32px;
+  min-width: 32px;
+}
+.jstree-default-large .jstree-anchor {
+  line-height: 32px;
+  height: 32px;
+}
+.jstree-default-large .jstree-icon {
+  width: 32px;
+  height: 32px;
+  line-height: 32px;
+}
+.jstree-default-large .jstree-icon:empty {
+  width: 32px;
+  height: 32px;
+  line-height: 32px;
+}
+.jstree-default-large.jstree-rtl .jstree-node {
+  margin-right: 32px;
+}
+.jstree-default-large .jstree-wholerow {
+  height: 32px;
+}
+.jstree-default-large .jstree-node,
+.jstree-default-large .jstree-icon {
+  background-image: url("32px.png");
+}
+.jstree-default-large .jstree-node {
+  background-position: -288px 0px;
+  background-repeat: repeat-y;
+}
+.jstree-default-large .jstree-last {
+  background: transparent;
+}
+.jstree-default-large .jstree-open > .jstree-ocl {
+  background-position: -128px 0px;
+}
+.jstree-default-large .jstree-closed > .jstree-ocl {
+  background-position: -96px 0px;
+}
+.jstree-default-large .jstree-leaf > .jstree-ocl {
+  background-position: -64px 0px;
+}
+.jstree-default-large .jstree-themeicon {
+  background-position: -256px 0px;
+}
+.jstree-default-large > .jstree-no-dots .jstree-node,
+.jstree-default-large > .jstree-no-dots .jstree-leaf > .jstree-ocl {
+  background: transparent;
+}
+.jstree-default-large > .jstree-no-dots .jstree-open > .jstree-ocl {
+  background-position: -32px 0px;
+}
+.jstree-default-large > .jstree-no-dots .jstree-closed > .jstree-ocl {
+  background-position: 0px 0px;
+}
+.jstree-default-large .jstree-disabled {
+  background: transparent;
+}
+.jstree-default-large .jstree-disabled.jstree-hovered {
+  background: transparent;
+}
+.jstree-default-large .jstree-disabled.jstree-clicked {
+  background: #efefef;
+}
+.jstree-default-large .jstree-checkbox {
+  background-position: -160px 0px;
+}
+.jstree-default-large .jstree-checkbox:hover {
+  background-position: -160px -32px;
+}
+.jstree-default-large.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox,
+.jstree-default-large .jstree-checked > .jstree-checkbox {
+  background-position: -224px 0px;
+}
+.jstree-default-large.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover,
+.jstree-default-large .jstree-checked > .jstree-checkbox:hover {
+  background-position: -224px -32px;
+}
+.jstree-default-large .jstree-anchor > .jstree-undetermined {
+  background-position: -192px 0px;
+}
+.jstree-default-large .jstree-anchor > .jstree-undetermined:hover {
+  background-position: -192px -32px;
+}
+.jstree-default-large .jstree-checkbox-disabled {
+  opacity: 0.8;
+  filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'jstree-grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#jstree-grayscale");
+  /* Firefox 10+ */
+  filter: gray;
+  /* IE6-9 */
+  -webkit-filter: grayscale(100%);
+  /* Chrome 19+ & Safari 6+ */
+}
+.jstree-default-large > .jstree-striped {
+  background-size: auto 64px;
+}
+.jstree-default-large.jstree-rtl .jstree-node {
+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");
+  background-position: 100% 1px;
+  background-repeat: repeat-y;
+}
+.jstree-default-large.jstree-rtl .jstree-last {
+  background: transparent;
+}
+.jstree-default-large.jstree-rtl .jstree-open > .jstree-ocl {
+  background-position: -128px -32px;
+}
+.jstree-default-large.jstree-rtl .jstree-closed > .jstree-ocl {
+  background-position: -96px -32px;
+}
+.jstree-default-large.jstree-rtl .jstree-leaf > .jstree-ocl {
+  background-position: -64px -32px;
+}
+.jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-node,
+.jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl {
+  background: transparent;
+}
+.jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl {
+  background-position: -32px -32px;
+}
+.jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl {
+  background-position: 0px -32px;
+}
+.jstree-default-large .jstree-themeicon-custom {
+  background-color: transparent;
+  background-image: none;
+  background-position: 0 0;
+}
+.jstree-default-large > .jstree-container-ul .jstree-loading > .jstree-ocl {
+  background: url("throbber.gif") center center no-repeat;
+}
+.jstree-default-large .jstree-file {
+  background: url("32px.png") -96px -64px no-repeat;
+}
+.jstree-default-large .jstree-folder {
+  background: url("32px.png") -256px 0px no-repeat;
+}
+.jstree-default-large > .jstree-container-ul > .jstree-node {
+  margin-left: 0;
+  margin-right: 0;
+}
+#jstree-dnd.jstree-default-large {
+  line-height: 32px;
+  padding: 0 4px;
+}
+#jstree-dnd.jstree-default-large .jstree-ok,
+#jstree-dnd.jstree-default-large .jstree-er {
+  background-image: url("32px.png");
+  background-repeat: no-repeat;
+  background-color: transparent;
+}
+#jstree-dnd.jstree-default-large i {
+  background: transparent;
+  width: 32px;
+  height: 32px;
+  line-height: 32px;
+}
+#jstree-dnd.jstree-default-large .jstree-ok {
+  background-position: 0px -64px;
+}
+#jstree-dnd.jstree-default-large .jstree-er {
+  background-position: -32px -64px;
+}
+.jstree-default-large .jstree-ellipsis {
+  overflow: hidden;
+}
+.jstree-default-large .jstree-ellipsis .jstree-anchor {
+  width: calc(100% - 37px);
+  text-overflow: ellipsis;
+  overflow: hidden;
+}
+.jstree-default-large .jstree-ellipsis.jstree-no-icons .jstree-anchor {
+  width: calc(100% - 5px);
+}
+.jstree-default-large.jstree-rtl .jstree-node {
+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg==");
+}
+.jstree-default-large.jstree-rtl .jstree-last {
+  background: transparent;
+}
+@media (max-width: 768px) {
+  #jstree-dnd.jstree-dnd-responsive {
+    line-height: 40px;
+    font-weight: bold;
+    font-size: 1.1em;
+    text-shadow: 1px 1px white;
+  }
+  #jstree-dnd.jstree-dnd-responsive > i {
+    background: transparent;
+    width: 40px;
+    height: 40px;
+  }
+  #jstree-dnd.jstree-dnd-responsive > .jstree-ok {
+    background-image: url("40px.png");
+    background-position: 0 -200px;
+    background-size: 120px 240px;
+  }
+  #jstree-dnd.jstree-dnd-responsive > .jstree-er {
+    background-image: url("40px.png");
+    background-position: -40px -200px;
+    background-size: 120px 240px;
+  }
+  #jstree-marker.jstree-dnd-responsive {
+    border-left-width: 10px;
+    border-top-width: 10px;
+    border-bottom-width: 10px;
+    margin-top: -10px;
+  }
+}
+@media (max-width: 768px) {
+  .jstree-default-responsive {
+    /*
+	.jstree-open > .jstree-ocl,
+	.jstree-closed > .jstree-ocl { border-radius:20px; background-color:white; }
+	*/
+  }
+  .jstree-default-responsive .jstree-icon {
+    background-image: url("40px.png");
+  }
+  .jstree-default-responsive .jstree-node,
+  .jstree-default-responsive .jstree-leaf > .jstree-ocl {
+    background: transparent;
+  }
+  .jstree-default-responsive .jstree-node {
+    min-height: 40px;
+    line-height: 40px;
+    margin-left: 40px;
+    min-width: 40px;
+    white-space: nowrap;
+  }
+  .jstree-default-responsive .jstree-anchor {
+    line-height: 40px;
+    height: 40px;
+  }
+  .jstree-default-responsive .jstree-icon,
+  .jstree-default-responsive .jstree-icon:empty {
+    width: 40px;
+    height: 40px;
+    line-height: 40px;
+  }
+  .jstree-default-responsive > .jstree-container-ul > .jstree-node {
+    margin-left: 0;
+  }
+  .jstree-default-responsive.jstree-rtl .jstree-node {
+    margin-left: 0;
+    margin-right: 40px;
+    background: transparent;
+  }
+  .jstree-default-responsive.jstree-rtl .jstree-container-ul > .jstree-node {
+    margin-right: 0;
+  }
+  .jstree-default-responsive .jstree-ocl,
+  .jstree-default-responsive .jstree-themeicon,
+  .jstree-default-responsive .jstree-checkbox {
+    background-size: 120px 240px;
+  }
+  .jstree-default-responsive .jstree-leaf > .jstree-ocl,
+  .jstree-default-responsive.jstree-rtl .jstree-leaf > .jstree-ocl {
+    background: transparent;
+  }
+  .jstree-default-responsive .jstree-open > .jstree-ocl {
+    background-position: 0 0px !important;
+  }
+  .jstree-default-responsive .jstree-closed > .jstree-ocl {
+    background-position: 0 -40px !important;
+  }
+  .jstree-default-responsive.jstree-rtl .jstree-closed > .jstree-ocl {
+    background-position: -40px 0px !important;
+  }
+  .jstree-default-responsive .jstree-themeicon {
+    background-position: -40px -40px;
+  }
+  .jstree-default-responsive .jstree-checkbox,
+  .jstree-default-responsive .jstree-checkbox:hover {
+    background-position: -40px -80px;
+  }
+  .jstree-default-responsive.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox,
+  .jstree-default-responsive.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover,
+  .jstree-default-responsive .jstree-checked > .jstree-checkbox,
+  .jstree-default-responsive .jstree-checked > .jstree-checkbox:hover {
+    background-position: 0 -80px;
+  }
+  .jstree-default-responsive .jstree-anchor > .jstree-undetermined,
+  .jstree-default-responsive .jstree-anchor > .jstree-undetermined:hover {
+    background-position: 0 -120px;
+  }
+  .jstree-default-responsive .jstree-anchor {
+    font-weight: bold;
+    font-size: 1.1em;
+    text-shadow: 1px 1px white;
+  }
+  .jstree-default-responsive > .jstree-striped {
+    background: transparent;
+  }
+  .jstree-default-responsive .jstree-wholerow {
+    border-top: 1px solid rgba(255, 255, 255, 0.7);
+    border-bottom: 1px solid rgba(64, 64, 64, 0.2);
+    background: #ebebeb;
+    height: 40px;
+  }
+  .jstree-default-responsive .jstree-wholerow-hovered {
+    background: #e7f4f9;
+  }
+  .jstree-default-responsive .jstree-wholerow-clicked {
+    background: #beebff;
+  }
+  .jstree-default-responsive .jstree-children .jstree-last > .jstree-wholerow {
+    box-shadow: inset 0 -6px 3px -5px #666666;
+  }
+  .jstree-default-responsive .jstree-children .jstree-open > .jstree-wholerow {
+    box-shadow: inset 0 6px 3px -5px #666666;
+    border-top: 0;
+  }
+  .jstree-default-responsive .jstree-children .jstree-open + .jstree-open {
+    box-shadow: none;
+  }
+  .jstree-default-responsive .jstree-node,
+  .jstree-default-responsive .jstree-icon,
+  .jstree-default-responsive .jstree-node > .jstree-ocl,
+  .jstree-default-responsive .jstree-themeicon,
+  .jstree-default-responsive .jstree-checkbox {
+    background-image: url("40px.png");
+    background-size: 120px 240px;
+  }
+  .jstree-default-responsive .jstree-node {
+    background-position: -80px 0;
+    background-repeat: repeat-y;
+  }
+  .jstree-default-responsive .jstree-last {
+    background: transparent;
+  }
+  .jstree-default-responsive .jstree-leaf > .jstree-ocl {
+    background-position: -40px -120px;
+  }
+  .jstree-default-responsive .jstree-last > .jstree-ocl {
+    background-position: -40px -160px;
+  }
+  .jstree-default-responsive .jstree-themeicon-custom {
+    background-color: transparent;
+    background-image: none;
+    background-position: 0 0;
+  }
+  .jstree-default-responsive .jstree-file {
+    background: url("40px.png") 0 -160px no-repeat;
+    background-size: 120px 240px;
+  }
+  .jstree-default-responsive .jstree-folder {
+    background: url("40px.png") -40px -40px no-repeat;
+    background-size: 120px 240px;
+  }
+  .jstree-default-responsive > .jstree-container-ul > .jstree-node {
+    margin-left: 0;
+    margin-right: 0;
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vakata-jstree-3.3.5/dist/themes/default/style.min.css	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,1 @@
+.jstree-node,.jstree-children,.jstree-container-ul{display:block;margin:0;padding:0;list-style-type:none;list-style-image:none}.jstree-node{white-space:nowrap}.jstree-anchor{display:inline-block;color:#000;white-space:nowrap;padding:0 4px 0 1px;margin:0;vertical-align:top}.jstree-anchor:focus{outline:0}.jstree-anchor,.jstree-anchor:link,.jstree-anchor:visited,.jstree-anchor:hover,.jstree-anchor:active{text-decoration:none;color:inherit}.jstree-icon{display:inline-block;text-decoration:none;margin:0;padding:0;vertical-align:top;text-align:center}.jstree-icon:empty{display:inline-block;text-decoration:none;margin:0;padding:0;vertical-align:top;text-align:center}.jstree-ocl{cursor:pointer}.jstree-leaf>.jstree-ocl{cursor:default}.jstree .jstree-open>.jstree-children{display:block}.jstree .jstree-closed>.jstree-children,.jstree .jstree-leaf>.jstree-children{display:none}.jstree-anchor>.jstree-themeicon{margin-right:2px}.jstree-no-icons .jstree-themeicon,.jstree-anchor>.jstree-themeicon-hidden{display:none}.jstree-hidden,.jstree-node.jstree-hidden{display:none}.jstree-rtl .jstree-anchor{padding:0 1px 0 4px}.jstree-rtl .jstree-anchor>.jstree-themeicon{margin-left:2px;margin-right:0}.jstree-rtl .jstree-node{margin-left:0}.jstree-rtl .jstree-container-ul>.jstree-node{margin-right:0}.jstree-wholerow-ul{position:relative;display:inline-block;min-width:100%}.jstree-wholerow-ul .jstree-leaf>.jstree-ocl{cursor:pointer}.jstree-wholerow-ul .jstree-anchor,.jstree-wholerow-ul .jstree-icon{position:relative}.jstree-wholerow-ul .jstree-wholerow{width:100%;cursor:pointer;position:absolute;left:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jstree-contextmenu .jstree-anchor{-webkit-user-select:none;-webkit-touch-callout:none}.vakata-context{display:none}.vakata-context,.vakata-context ul{margin:0;padding:2px;position:absolute;background:#f5f5f5;border:1px solid #979797;box-shadow:2px 2px 2px #999}.vakata-context ul{list-style:none;left:100%;margin-top:-2.7em;margin-left:-4px}.vakata-context .vakata-context-right ul{left:auto;right:100%;margin-left:auto;margin-right:-4px}.vakata-context li{list-style:none}.vakata-context li>a{display:block;padding:0 2em;text-decoration:none;width:auto;color:#000;white-space:nowrap;line-height:2.4em;text-shadow:1px 1px 0 #fff;border-radius:1px}.vakata-context li>a:hover{position:relative;background-color:#e8eff7;box-shadow:0 0 2px #0a6aa1}.vakata-context li>a.vakata-context-parent{background-image:url(data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAIORI4JlrqN1oMSnmmZDQUAOw==);background-position:right center;background-repeat:no-repeat}.vakata-context li>a:focus{outline:0}.vakata-context .vakata-context-hover>a{position:relative;background-color:#e8eff7;box-shadow:0 0 2px #0a6aa1}.vakata-context .vakata-context-separator>a,.vakata-context .vakata-context-separator>a:hover{background:#fff;border:0;border-top:1px solid #e2e3e3;height:1px;min-height:1px;max-height:1px;padding:0;margin:0 0 0 2.4em;border-left:1px solid #e0e0e0;text-shadow:0 0 0 transparent;box-shadow:0 0 0 transparent;border-radius:0}.vakata-context .vakata-contextmenu-disabled a,.vakata-context .vakata-contextmenu-disabled a:hover{color:silver;background-color:transparent;border:0;box-shadow:0 0 0}.vakata-context li>a>i{text-decoration:none;display:inline-block;width:2.4em;height:2.4em;background:0 0;margin:0 0 0 -2em;vertical-align:top;text-align:center;line-height:2.4em}.vakata-context li>a>i:empty{width:2.4em;line-height:2.4em}.vakata-context li>a .vakata-contextmenu-sep{display:inline-block;width:1px;height:2.4em;background:#fff;margin:0 .5em 0 0;border-left:1px solid #e2e3e3}.vakata-context .vakata-contextmenu-shortcut{font-size:.8em;color:silver;opacity:.5;display:none}.vakata-context-rtl ul{left:auto;right:100%;margin-left:auto;margin-right:-4px}.vakata-context-rtl li>a.vakata-context-parent{background-image:url(data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAINjI+AC7rWHIsPtmoxLAA7);background-position:left center;background-repeat:no-repeat}.vakata-context-rtl .vakata-context-separator>a{margin:0 2.4em 0 0;border-left:0;border-right:1px solid #e2e3e3}.vakata-context-rtl .vakata-context-left ul{right:auto;left:100%;margin-left:-4px;margin-right:auto}.vakata-context-rtl li>a>i{margin:0 -2em 0 0}.vakata-context-rtl li>a .vakata-contextmenu-sep{margin:0 0 0 .5em;border-left-color:#fff;background:#e2e3e3}#jstree-marker{position:absolute;top:0;left:0;margin:-5px 0 0 0;padding:0;border-right:0;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid;width:0;height:0;font-size:0;line-height:0}#jstree-dnd{line-height:16px;margin:0;padding:4px}#jstree-dnd .jstree-icon,#jstree-dnd .jstree-copy{display:inline-block;text-decoration:none;margin:0 2px 0 0;padding:0;width:16px;height:16px}#jstree-dnd .jstree-ok{background:green}#jstree-dnd .jstree-er{background:red}#jstree-dnd .jstree-copy{margin:0 2px}.jstree-default .jstree-node,.jstree-default .jstree-icon{background-repeat:no-repeat;background-color:transparent}.jstree-default .jstree-anchor,.jstree-default .jstree-animated,.jstree-default .jstree-wholerow{transition:background-color .15s,box-shadow .15s}.jstree-default .jstree-hovered{background:#e7f4f9;border-radius:2px;box-shadow:inset 0 0 1px #ccc}.jstree-default .jstree-context{background:#e7f4f9;border-radius:2px;box-shadow:inset 0 0 1px #ccc}.jstree-default .jstree-clicked{background:#beebff;border-radius:2px;box-shadow:inset 0 0 1px #999}.jstree-default .jstree-no-icons .jstree-anchor>.jstree-themeicon{display:none}.jstree-default .jstree-disabled{background:0 0;color:#666}.jstree-default .jstree-disabled.jstree-hovered{background:0 0;box-shadow:none}.jstree-default .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default .jstree-disabled>.jstree-icon{opacity:.8;filter:url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'jstree-grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default .jstree-search{font-style:italic;color:#8b0000;font-weight:700}.jstree-default .jstree-no-checkboxes .jstree-checkbox{display:none!important}.jstree-default.jstree-checkbox-no-clicked .jstree-clicked{background:0 0;box-shadow:none}.jstree-default.jstree-checkbox-no-clicked .jstree-clicked.jstree-hovered{background:#e7f4f9}.jstree-default.jstree-checkbox-no-clicked>.jstree-wholerow-ul .jstree-wholerow-clicked{background:0 0}.jstree-default.jstree-checkbox-no-clicked>.jstree-wholerow-ul .jstree-wholerow-clicked.jstree-wholerow-hovered{background:#e7f4f9}.jstree-default>.jstree-striped{min-width:100%;display:inline-block;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAMAAAB/qqA+AAAABlBMVEUAAAAAAAClZ7nPAAAAAnRSTlMNAMM9s3UAAAAXSURBVHjajcEBAQAAAIKg/H/aCQZ70AUBjAATb6YPDgAAAABJRU5ErkJggg==) left top repeat}.jstree-default>.jstree-wholerow-ul .jstree-hovered,.jstree-default>.jstree-wholerow-ul .jstree-clicked{background:0 0;box-shadow:none;border-radius:0}.jstree-default .jstree-wholerow{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.jstree-default .jstree-wholerow-hovered{background:#e7f4f9}.jstree-default .jstree-wholerow-clicked{background:#beebff;background:-webkit-linear-gradient(top,#beebff 0,#a8e4ff 100%);background:linear-gradient(to bottom,#beebff 0,#a8e4ff 100%)}.jstree-default .jstree-node{min-height:24px;line-height:24px;margin-left:24px;min-width:24px}.jstree-default .jstree-anchor{line-height:24px;height:24px}.jstree-default .jstree-icon{width:24px;height:24px;line-height:24px}.jstree-default .jstree-icon:empty{width:24px;height:24px;line-height:24px}.jstree-default.jstree-rtl .jstree-node{margin-right:24px}.jstree-default .jstree-wholerow{height:24px}.jstree-default .jstree-node,.jstree-default .jstree-icon{background-image:url(32px.png)}.jstree-default .jstree-node{background-position:-292px -4px;background-repeat:repeat-y}.jstree-default .jstree-last{background:0 0}.jstree-default .jstree-open>.jstree-ocl{background-position:-132px -4px}.jstree-default .jstree-closed>.jstree-ocl{background-position:-100px -4px}.jstree-default .jstree-leaf>.jstree-ocl{background-position:-68px -4px}.jstree-default .jstree-themeicon{background-position:-260px -4px}.jstree-default>.jstree-no-dots .jstree-node,.jstree-default>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-36px -4px}.jstree-default>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-4px -4px}.jstree-default .jstree-disabled{background:0 0}.jstree-default .jstree-disabled.jstree-hovered{background:0 0}.jstree-default .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default .jstree-checkbox{background-position:-164px -4px}.jstree-default .jstree-checkbox:hover{background-position:-164px -36px}.jstree-default.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default .jstree-checked>.jstree-checkbox{background-position:-228px -4px}.jstree-default.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default .jstree-checked>.jstree-checkbox:hover{background-position:-228px -36px}.jstree-default .jstree-anchor>.jstree-undetermined{background-position:-196px -4px}.jstree-default .jstree-anchor>.jstree-undetermined:hover{background-position:-196px -36px}.jstree-default .jstree-checkbox-disabled{opacity:.8;filter:url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'jstree-grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default>.jstree-striped{background-size:auto 48px}.jstree-default.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==);background-position:100% 1px;background-repeat:repeat-y}.jstree-default.jstree-rtl .jstree-last{background:0 0}.jstree-default.jstree-rtl .jstree-open>.jstree-ocl{background-position:-132px -36px}.jstree-default.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-100px -36px}.jstree-default.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-68px -36px}.jstree-default.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-36px -36px}.jstree-default.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-4px -36px}.jstree-default .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url(throbber.gif) center center no-repeat}.jstree-default .jstree-file{background:url(32px.png) -100px -68px no-repeat}.jstree-default .jstree-folder{background:url(32px.png) -260px -4px no-repeat}.jstree-default>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}#jstree-dnd.jstree-default{line-height:24px;padding:0 4px}#jstree-dnd.jstree-default .jstree-ok,#jstree-dnd.jstree-default .jstree-er{background-image:url(32px.png);background-repeat:no-repeat;background-color:transparent}#jstree-dnd.jstree-default i{background:0 0;width:24px;height:24px;line-height:24px}#jstree-dnd.jstree-default .jstree-ok{background-position:-4px -68px}#jstree-dnd.jstree-default .jstree-er{background-position:-36px -68px}.jstree-default .jstree-ellipsis{overflow:hidden}.jstree-default .jstree-ellipsis .jstree-anchor{width:calc(100% - 29px);text-overflow:ellipsis;overflow:hidden}.jstree-default .jstree-ellipsis.jstree-no-icons .jstree-anchor{width:calc(100% - 5px)}.jstree-default.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==)}.jstree-default.jstree-rtl .jstree-last{background:0 0}.jstree-default-small .jstree-node{min-height:18px;line-height:18px;margin-left:18px;min-width:18px}.jstree-default-small .jstree-anchor{line-height:18px;height:18px}.jstree-default-small .jstree-icon{width:18px;height:18px;line-height:18px}.jstree-default-small .jstree-icon:empty{width:18px;height:18px;line-height:18px}.jstree-default-small.jstree-rtl .jstree-node{margin-right:18px}.jstree-default-small .jstree-wholerow{height:18px}.jstree-default-small .jstree-node,.jstree-default-small .jstree-icon{background-image:url(32px.png)}.jstree-default-small .jstree-node{background-position:-295px -7px;background-repeat:repeat-y}.jstree-default-small .jstree-last{background:0 0}.jstree-default-small .jstree-open>.jstree-ocl{background-position:-135px -7px}.jstree-default-small .jstree-closed>.jstree-ocl{background-position:-103px -7px}.jstree-default-small .jstree-leaf>.jstree-ocl{background-position:-71px -7px}.jstree-default-small .jstree-themeicon{background-position:-263px -7px}.jstree-default-small>.jstree-no-dots .jstree-node,.jstree-default-small>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-small>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-39px -7px}.jstree-default-small>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-7px -7px}.jstree-default-small .jstree-disabled{background:0 0}.jstree-default-small .jstree-disabled.jstree-hovered{background:0 0}.jstree-default-small .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default-small .jstree-checkbox{background-position:-167px -7px}.jstree-default-small .jstree-checkbox:hover{background-position:-167px -39px}.jstree-default-small.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-small .jstree-checked>.jstree-checkbox{background-position:-231px -7px}.jstree-default-small.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-small .jstree-checked>.jstree-checkbox:hover{background-position:-231px -39px}.jstree-default-small .jstree-anchor>.jstree-undetermined{background-position:-199px -7px}.jstree-default-small .jstree-anchor>.jstree-undetermined:hover{background-position:-199px -39px}.jstree-default-small .jstree-checkbox-disabled{opacity:.8;filter:url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'jstree-grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default-small>.jstree-striped{background-size:auto 36px}.jstree-default-small.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==);background-position:100% 1px;background-repeat:repeat-y}.jstree-default-small.jstree-rtl .jstree-last{background:0 0}.jstree-default-small.jstree-rtl .jstree-open>.jstree-ocl{background-position:-135px -39px}.jstree-default-small.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-103px -39px}.jstree-default-small.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-71px -39px}.jstree-default-small.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default-small.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-small.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-39px -39px}.jstree-default-small.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-7px -39px}.jstree-default-small .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-small>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url(throbber.gif) center center no-repeat}.jstree-default-small .jstree-file{background:url(32px.png) -103px -71px no-repeat}.jstree-default-small .jstree-folder{background:url(32px.png) -263px -7px no-repeat}.jstree-default-small>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}#jstree-dnd.jstree-default-small{line-height:18px;padding:0 4px}#jstree-dnd.jstree-default-small .jstree-ok,#jstree-dnd.jstree-default-small .jstree-er{background-image:url(32px.png);background-repeat:no-repeat;background-color:transparent}#jstree-dnd.jstree-default-small i{background:0 0;width:18px;height:18px;line-height:18px}#jstree-dnd.jstree-default-small .jstree-ok{background-position:-7px -71px}#jstree-dnd.jstree-default-small .jstree-er{background-position:-39px -71px}.jstree-default-small .jstree-ellipsis{overflow:hidden}.jstree-default-small .jstree-ellipsis .jstree-anchor{width:calc(100% - 23px);text-overflow:ellipsis;overflow:hidden}.jstree-default-small .jstree-ellipsis.jstree-no-icons .jstree-anchor{width:calc(100% - 5px)}.jstree-default-small.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg==)}.jstree-default-small.jstree-rtl .jstree-last{background:0 0}.jstree-default-large .jstree-node{min-height:32px;line-height:32px;margin-left:32px;min-width:32px}.jstree-default-large .jstree-anchor{line-height:32px;height:32px}.jstree-default-large .jstree-icon{width:32px;height:32px;line-height:32px}.jstree-default-large .jstree-icon:empty{width:32px;height:32px;line-height:32px}.jstree-default-large.jstree-rtl .jstree-node{margin-right:32px}.jstree-default-large .jstree-wholerow{height:32px}.jstree-default-large .jstree-node,.jstree-default-large .jstree-icon{background-image:url(32px.png)}.jstree-default-large .jstree-node{background-position:-288px 0;background-repeat:repeat-y}.jstree-default-large .jstree-last{background:0 0}.jstree-default-large .jstree-open>.jstree-ocl{background-position:-128px 0}.jstree-default-large .jstree-closed>.jstree-ocl{background-position:-96px 0}.jstree-default-large .jstree-leaf>.jstree-ocl{background-position:-64px 0}.jstree-default-large .jstree-themeicon{background-position:-256px 0}.jstree-default-large>.jstree-no-dots .jstree-node,.jstree-default-large>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-large>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-32px 0}.jstree-default-large>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:0 0}.jstree-default-large .jstree-disabled{background:0 0}.jstree-default-large .jstree-disabled.jstree-hovered{background:0 0}.jstree-default-large .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default-large .jstree-checkbox{background-position:-160px 0}.jstree-default-large .jstree-checkbox:hover{background-position:-160px -32px}.jstree-default-large.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-large .jstree-checked>.jstree-checkbox{background-position:-224px 0}.jstree-default-large.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-large .jstree-checked>.jstree-checkbox:hover{background-position:-224px -32px}.jstree-default-large .jstree-anchor>.jstree-undetermined{background-position:-192px 0}.jstree-default-large .jstree-anchor>.jstree-undetermined:hover{background-position:-192px -32px}.jstree-default-large .jstree-checkbox-disabled{opacity:.8;filter:url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'jstree-grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default-large>.jstree-striped{background-size:auto 64px}.jstree-default-large.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==);background-position:100% 1px;background-repeat:repeat-y}.jstree-default-large.jstree-rtl .jstree-last{background:0 0}.jstree-default-large.jstree-rtl .jstree-open>.jstree-ocl{background-position:-128px -32px}.jstree-default-large.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-96px -32px}.jstree-default-large.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-64px -32px}.jstree-default-large.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default-large.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-large.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-32px -32px}.jstree-default-large.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:0 -32px}.jstree-default-large .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-large>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url(throbber.gif) center center no-repeat}.jstree-default-large .jstree-file{background:url(32px.png) -96px -64px no-repeat}.jstree-default-large .jstree-folder{background:url(32px.png) -256px 0 no-repeat}.jstree-default-large>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}#jstree-dnd.jstree-default-large{line-height:32px;padding:0 4px}#jstree-dnd.jstree-default-large .jstree-ok,#jstree-dnd.jstree-default-large .jstree-er{background-image:url(32px.png);background-repeat:no-repeat;background-color:transparent}#jstree-dnd.jstree-default-large i{background:0 0;width:32px;height:32px;line-height:32px}#jstree-dnd.jstree-default-large .jstree-ok{background-position:0 -64px}#jstree-dnd.jstree-default-large .jstree-er{background-position:-32px -64px}.jstree-default-large .jstree-ellipsis{overflow:hidden}.jstree-default-large .jstree-ellipsis .jstree-anchor{width:calc(100% - 37px);text-overflow:ellipsis;overflow:hidden}.jstree-default-large .jstree-ellipsis.jstree-no-icons .jstree-anchor{width:calc(100% - 5px)}.jstree-default-large.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg==)}.jstree-default-large.jstree-rtl .jstree-last{background:0 0}@media (max-width:768px){#jstree-dnd.jstree-dnd-responsive{line-height:40px;font-weight:700;font-size:1.1em;text-shadow:1px 1px #fff}#jstree-dnd.jstree-dnd-responsive>i{background:0 0;width:40px;height:40px}#jstree-dnd.jstree-dnd-responsive>.jstree-ok{background-image:url(40px.png);background-position:0 -200px;background-size:120px 240px}#jstree-dnd.jstree-dnd-responsive>.jstree-er{background-image:url(40px.png);background-position:-40px -200px;background-size:120px 240px}#jstree-marker.jstree-dnd-responsive{border-left-width:10px;border-top-width:10px;border-bottom-width:10px;margin-top:-10px}}@media (max-width:768px){.jstree-default-responsive .jstree-icon{background-image:url(40px.png)}.jstree-default-responsive .jstree-node,.jstree-default-responsive .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-responsive .jstree-node{min-height:40px;line-height:40px;margin-left:40px;min-width:40px;white-space:nowrap}.jstree-default-responsive .jstree-anchor{line-height:40px;height:40px}.jstree-default-responsive .jstree-icon,.jstree-default-responsive .jstree-icon:empty{width:40px;height:40px;line-height:40px}.jstree-default-responsive>.jstree-container-ul>.jstree-node{margin-left:0}.jstree-default-responsive.jstree-rtl .jstree-node{margin-left:0;margin-right:40px;background:0 0}.jstree-default-responsive.jstree-rtl .jstree-container-ul>.jstree-node{margin-right:0}.jstree-default-responsive .jstree-ocl,.jstree-default-responsive .jstree-themeicon,.jstree-default-responsive .jstree-checkbox{background-size:120px 240px}.jstree-default-responsive .jstree-leaf>.jstree-ocl,.jstree-default-responsive.jstree-rtl .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-responsive .jstree-open>.jstree-ocl{background-position:0 0!important}.jstree-default-responsive .jstree-closed>.jstree-ocl{background-position:0 -40px!important}.jstree-default-responsive.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-40px 0!important}.jstree-default-responsive .jstree-themeicon{background-position:-40px -40px}.jstree-default-responsive .jstree-checkbox,.jstree-default-responsive .jstree-checkbox:hover{background-position:-40px -80px}.jstree-default-responsive.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-responsive.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-responsive .jstree-checked>.jstree-checkbox,.jstree-default-responsive .jstree-checked>.jstree-checkbox:hover{background-position:0 -80px}.jstree-default-responsive .jstree-anchor>.jstree-undetermined,.jstree-default-responsive .jstree-anchor>.jstree-undetermined:hover{background-position:0 -120px}.jstree-default-responsive .jstree-anchor{font-weight:700;font-size:1.1em;text-shadow:1px 1px #fff}.jstree-default-responsive>.jstree-striped{background:0 0}.jstree-default-responsive .jstree-wholerow{border-top:1px solid rgba(255,255,255,.7);border-bottom:1px solid rgba(64,64,64,.2);background:#ebebeb;height:40px}.jstree-default-responsive .jstree-wholerow-hovered{background:#e7f4f9}.jstree-default-responsive .jstree-wholerow-clicked{background:#beebff}.jstree-default-responsive .jstree-children .jstree-last>.jstree-wholerow{box-shadow:inset 0 -6px 3px -5px #666}.jstree-default-responsive .jstree-children .jstree-open>.jstree-wholerow{box-shadow:inset 0 6px 3px -5px #666;border-top:0}.jstree-default-responsive .jstree-children .jstree-open+.jstree-open{box-shadow:none}.jstree-default-responsive .jstree-node,.jstree-default-responsive .jstree-icon,.jstree-default-responsive .jstree-node>.jstree-ocl,.jstree-default-responsive .jstree-themeicon,.jstree-default-responsive .jstree-checkbox{background-image:url(40px.png);background-size:120px 240px}.jstree-default-responsive .jstree-node{background-position:-80px 0;background-repeat:repeat-y}.jstree-default-responsive .jstree-last{background:0 0}.jstree-default-responsive .jstree-leaf>.jstree-ocl{background-position:-40px -120px}.jstree-default-responsive .jstree-last>.jstree-ocl{background-position:-40px -160px}.jstree-default-responsive .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-responsive .jstree-file{background:url(40px.png) 0 -160px no-repeat;background-size:120px 240px}.jstree-default-responsive .jstree-folder{background:url(40px.png) -40px -40px no-repeat;background-size:120px 240px}.jstree-default-responsive>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}}
\ No newline at end of file
Binary file vakata-jstree-3.3.5/dist/themes/default/throbber.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vakata-jstree-3.3.5/gruntfile.js	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,241 @@
+/*global module:false, require:false, __dirname:false*/
+
+module.exports = function(grunt) {
+  grunt.util.linefeed = "\n";
+
+  // Project configuration.
+  grunt.initConfig({
+    pkg: grunt.file.readJSON('package.json'),
+    concat: {
+      options : {
+        separator : "\n"
+      },
+      dist: {
+        src: ['src/<%= pkg.name %>.js', 'src/<%= pkg.name %>.*.js', 'src/vakata-jstree.js'],
+        dest: 'dist/<%= pkg.name %>.js'
+      }
+    },
+    copy: {
+      libs : {
+        files : [
+          { expand: true, cwd : 'libs/', src: ['*'], dest: 'dist/libs/' }
+        ]
+      },
+      docs : {
+        files : [
+          { expand: true, cwd : 'dist/', src: ['**/*'], dest: 'docs/assets/dist/' }
+        ]
+      }
+    },
+    uglify: {
+      options: {
+        banner: '/*! <%= pkg.title || pkg.name %> - v<%= pkg.version %> - <%= grunt.template.today("yyyy-mm-dd") %> - (<%= _.pluck(pkg.licenses, "type").join(", ") %>) */\n',
+        preserveComments: false,
+        //sourceMap: "dist/jstree.min.map",
+        //sourceMappingURL: "jstree.min.map",
+        report: "min",
+        beautify: {
+                ascii_only: true
+        },
+        compress: {
+                hoist_funs: false,
+                loops: false,
+                unused: false
+        }
+      },
+      dist: {
+        src: ['<%= concat.dist.dest %>'],
+        dest: 'dist/<%= pkg.name %>.min.js'
+      }
+    },
+    qunit: {
+      files: ['test/unit/**/*.html']
+    },
+    jshint: {
+      options: {
+        'curly' : true,
+        'eqeqeq' : true,
+        'latedef' : true,
+        'newcap' : true,
+        'noarg' : true,
+        'sub' : true,
+        'undef' : true,
+        'boss' : true,
+        'eqnull' : true,
+        'browser' : true,
+        'trailing' : true,
+        'globals' : {
+          'console' : true,
+          'jQuery' : true,
+          'browser' : true,
+          'XSLTProcessor' : true,
+          'ActiveXObject' : true
+        }
+      },
+      beforeconcat: ['src/<%= pkg.name %>.js', 'src/<%= pkg.name %>.*.js'],
+      afterconcat: ['dist/<%= pkg.name %>.js']
+    },
+    dox: {
+      files: {
+        src: ['src/*.js'],
+        dest: 'docs'
+      }
+    },
+    amd : {
+      files: {
+        src: ['dist/jstree.js'],
+        dest: 'dist/jstree.js'
+      }
+    },
+    less: {
+      production: {
+        options : {
+          cleancss : true,
+          compress : true
+        },
+        files: {
+          "dist/themes/default/style.min.css" : "src/themes/default/style.less",
+          "dist/themes/default-dark/style.min.css" : "src/themes/default-dark/style.less"
+        }
+      },
+      development: {
+        files: {
+          "src/themes/default/style.css" : "src/themes/default/style.less",
+          "dist/themes/default/style.css" : "src/themes/default/style.less",
+          "src/themes/default-dark/style.css" : "src/themes/default-dark/style.less",
+          "dist/themes/default-dark/style.css" : "src/themes/default-dark/style.less"
+        }
+      }
+    },
+    watch: {
+      js : {
+        files: ['src/**/*.js'],
+        tasks: ['js'],
+        options : {
+          atBegin : true
+        }
+      },
+      css : {
+        files: ['src/**/*.less','src/**/*.png','src/**/*.gif'],
+        tasks: ['css'],
+        options : {
+          atBegin : true
+        }
+      },
+    },
+    resemble: {
+      options: {
+        screenshotRoot: 'test/visual/screenshots/',
+        url: 'http://127.0.0.1/jstree/test/visual/',
+        gm: false
+      },
+      desktop: {
+        options: {
+          width: 1280,
+        },
+        src: ['desktop'],
+        dest: 'desktop',
+      },
+      mobile: {
+        options: {
+          width: 360,
+        },
+        src: ['mobile'],
+        dest: 'mobile'
+      }
+    },
+    imagemin: {
+      dynamic: {
+        options: {                       // Target options
+          optimizationLevel: 7,
+          pngquant : true
+        },
+        files: [{
+          expand: true,                  // Enable dynamic expansion
+          cwd:  'src/themes/default/',    // Src matches are relative to this path
+          src: ['**/*.{png,jpg,gif}'],   // Actual patterns to match
+          dest: 'dist/themes/default/'   // Destination path prefix
+        },{
+          expand: true,                  // Enable dynamic expansion
+          cwd:  'src/themes/default-dark/',    // Src matches are relative to this path
+          src: ['**/*.{png,jpg,gif}'],   // Actual patterns to match
+          dest: 'dist/themes/default-dark/'   // Destination path prefix
+        }]
+      }
+    },
+    replace: {
+      files: {
+        src: ['dist/*.js', 'bower.json', 'component.json', 'jstree.jquery.json'],
+        overwrite: true,
+        replacements: [
+          {
+            from: '{{VERSION}}',
+            to: "<%= pkg.version %>"
+          },
+          {
+            from: /"version": "[^"]+"/g,
+            to: "\"version\": \"<%= pkg.version %>\""
+          },
+        ]
+      }
+    }
+  });
+
+  grunt.loadNpmTasks('grunt-contrib-jshint');
+  grunt.loadNpmTasks('grunt-contrib-concat');
+  grunt.loadNpmTasks('grunt-contrib-copy');
+  grunt.loadNpmTasks('grunt-contrib-uglify');
+  grunt.loadNpmTasks('grunt-contrib-less');
+  grunt.loadNpmTasks('grunt-contrib-qunit');
+  grunt.loadNpmTasks('grunt-resemble-cli');
+  grunt.loadNpmTasks('grunt-contrib-watch');
+  grunt.loadNpmTasks('grunt-contrib-imagemin');
+  grunt.loadNpmTasks('grunt-text-replace');
+
+  grunt.registerMultiTask('amd', 'Clean up AMD', function () {
+    var s, d;
+    this.files.forEach(function (f) {
+      s = f.src;
+      d = f.dest;
+    });
+    grunt.file.copy(s, d, {
+      process: function (contents) {
+        contents = contents.replace(/\s*if\(\$\.jstree\.plugins\.[a-z]+\)\s*\{\s*return;\s*\}/ig, '');
+        contents = contents.replace(/\/\*globals[^\/]+\//ig, '');
+        //contents = contents.replace(/\(function \(factory[\s\S]*?undefined/mig, '(function ($, undefined');
+        //contents = contents.replace(/\}\)\);/g, '}(jQuery));');
+        contents = contents.replace(/\(function \(factory[\s\S]*?undefined\s*\)[^\n]+/mig, '');
+        contents = contents.replace(/\}\)\);/g, '');
+        contents = contents.replace(/\s*("|')use strict("|');/g, '');
+        contents = contents.replace(/\s*return \$\.fn\.jstree;/g, '');
+        return grunt.file.read('src/intro.js') + contents + grunt.file.read('src/outro.js');
+      }
+    });
+  });
+
+  grunt.registerMultiTask('dox', 'Generate dox output ', function() {
+    var exec = require('child_process').exec,
+        path = require('path'),
+        done = this.async(),
+        doxPath = path.resolve(__dirname),
+        formatter = [doxPath, 'node_modules', '.bin', 'dox'].join(path.sep);
+    exec(formatter + ' < "dist/jstree.js" > "docs/jstree.json"', {maxBuffer: 5000*1024}, function(error, stout, sterr){
+      if (error) {
+        grunt.log.error(formatter);
+        grunt.log.error("WARN: "+ error);
+      }
+      if (!error) {
+        grunt.log.writeln('dist/jstree.js doxxed.');
+        done();
+      }
+    });
+  });
+
+  grunt.util.linefeed = "\n";
+  
+  // Default task.
+  grunt.registerTask('default', ['jshint:beforeconcat','concat','amd','jshint:afterconcat','copy:libs','uglify','less','imagemin','replace','copy:docs','qunit','resemble','dox']);
+  grunt.registerTask('js', ['concat','amd','uglify']);
+  grunt.registerTask('css', ['copy','less']);
+
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vakata-jstree-3.3.5/jstree.jquery.json	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,28 @@
+{
+	"name": "jstree",
+	"title": "jsTree",
+	"description": "Tree view for jQuery",
+	"version": "3.3.5",
+	"homepage": "http://jstree.com",
+	"keywords": [
+		"ui",
+		"tree",
+		"jstree"
+	],
+	"author": {
+		"name": "Ivan Bozhanov",
+		"email": "jstree@jstree.com",
+		"url": "http://vakata.com"
+	},
+	"licenses": [
+		{
+			"type": "MIT",
+			"url": "https://github.com/vakata/jstree/blob/master/LICENSE-MIT"
+		}
+	],
+	"bugs": "https://github.com/vakata/jstree/issues",
+	"demo": "http://jstree.com/demo",
+	"dependencies": {
+		"jquery": ">=1.9.1"
+	}
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vakata-jstree-3.3.5/package.json	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,58 @@
+{
+  "name": "jstree",
+  "title": "jsTree",
+  "description": "jQuery tree plugin",
+  "version": "3.3.5",
+  "homepage": "http://jstree.com",
+  "main": "./dist/jstree.js",
+  "author": {
+    "name": "Ivan Bozhanov",
+    "email": "jstree@jstree.com",
+    "url": "http://vakata.com"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/vakata/jstree.git"
+  },
+  "bugs": {
+    "url": "https://github.com/vakata/jstree/issues"
+  },
+  "license": "MIT",
+  "licenses": [
+    {
+      "type": "MIT",
+      "url": "https://github.com/vakata/jstree/blob/master/LICENSE-MIT"
+    }
+  ],
+  "keywords": [],
+  "devDependencies": {
+    "dox": "~0.4.4",
+    "grunt": "~0.4.0",
+    "grunt-contrib-concat": "*",
+    "grunt-contrib-copy": "*",
+    "grunt-contrib-imagemin": "~0.4.0",
+    "grunt-contrib-jshint": "*",
+    "grunt-contrib-less": "~0.8.2",
+    "grunt-contrib-qunit": "~v0.3.0",
+    "grunt-contrib-uglify": "*",
+    "grunt-contrib-watch": "~0.5.3",
+    "grunt-phantomcss-gitdiff": "0.0.7",
+    "grunt-resemble-cli": "0.0.8",
+    "grunt-text-replace": "~0.3.11"
+  },
+  "dependencies": {
+    "jquery": ">=1.9.1"
+  },
+  "npmName": "jstree",
+  "npmFileMap": [
+    {
+      "basePath": "/dist/",
+      "files": [
+        "jstree.min.js",
+        "themes/**/*.png",
+        "themes/**/*.gif",
+        "themes/**/*.min.css"
+      ]
+    }
+  ]
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vakata-jstree-3.3.5/src/intro.js	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,14 @@
+/*globals jQuery, define, module, exports, require, window, document, postMessage */
+(function (factory) {
+	"use strict";
+	if (typeof define === 'function' && define.amd) {
+		define(['jquery'], factory);
+	}
+	else if(typeof module !== 'undefined' && module.exports) {
+		module.exports = factory(require('jquery'));
+	}
+	else {
+		factory(jQuery);
+	}
+}(function ($, undefined) {
+	"use strict";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vakata-jstree-3.3.5/src/jstree.changed.js	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,69 @@
+/**
+ * ### Changed plugin
+ *
+ * This plugin adds more information to the `changed.jstree` event. The new data is contained in the `changed` event data property, and contains a lists of `selected` and `deselected` nodes.
+ */
+/*globals jQuery, define, exports, require, document */
+(function (factory) {
+	"use strict";
+	if (typeof define === 'function' && define.amd) {
+		define('jstree.changed', ['jquery','jstree'], factory);
+	}
+	else if(typeof exports === 'object') {
+		factory(require('jquery'), require('jstree'));
+	}
+	else {
+		factory(jQuery, jQuery.jstree);
+	}
+}(function ($, jstree, undefined) {
+	"use strict";
+
+	if($.jstree.plugins.changed) { return; }
+
+	$.jstree.plugins.changed = function (options, parent) {
+		var last = [];
+		this.trigger = function (ev, data) {
+			var i, j;
+			if(!data) {
+				data = {};
+			}
+			if(ev.replace('.jstree','') === 'changed') {
+				data.changed = { selected : [], deselected : [] };
+				var tmp = {};
+				for(i = 0, j = last.length; i < j; i++) {
+					tmp[last[i]] = 1;
+				}
+				for(i = 0, j = data.selected.length; i < j; i++) {
+					if(!tmp[data.selected[i]]) {
+						data.changed.selected.push(data.selected[i]);
+					}
+					else {
+						tmp[data.selected[i]] = 2;
+					}
+				}
+				for(i = 0, j = last.length; i < j; i++) {
+					if(tmp[last[i]] === 1) {
+						data.changed.deselected.push(last[i]);
+					}
+				}
+				last = data.selected.slice();
+			}
+			/**
+			 * triggered when selection changes (the "changed" plugin enhances the original event with more data)
+			 * @event
+			 * @name changed.jstree
+			 * @param {Object} node
+			 * @param {Object} action the action that caused the selection to change
+			 * @param {Array} selected the current selection
+			 * @param {Object} changed an object containing two properties `selected` and `deselected` - both arrays of node IDs, which were selected or deselected since the last changed event
+			 * @param {Object} event the event (if any) that triggered this changed event
+			 * @plugin changed
+			 */
+			parent.trigger.call(this, ev, data);
+		};
+		this.refresh = function (skip_loading, forget_state) {
+			last = [];
+			return parent.refresh.apply(this, arguments);
+		};
+	};
+}));
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vakata-jstree-3.3.5/src/jstree.checkbox.js	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,976 @@
+/**
+ * ### Checkbox plugin
+ *
+ * This plugin renders checkbox icons in front of each node, making multiple selection much easier.
+ * It also supports tri-state behavior, meaning that if a node has a few of its children checked it will be rendered as undetermined, and state will be propagated up.
+ */
+/*globals jQuery, define, exports, require, document */
+(function (factory) {
+	"use strict";
+	if (typeof define === 'function' && define.amd) {
+		define('jstree.checkbox', ['jquery','jstree'], factory);
+	}
+	else if(typeof exports === 'object') {
+		factory(require('jquery'), require('jstree'));
+	}
+	else {
+		factory(jQuery, jQuery.jstree);
+	}
+}(function ($, jstree, undefined) {
+	"use strict";
+
+	if($.jstree.plugins.checkbox) { return; }
+
+	var _i = document.createElement('I');
+	_i.className = 'jstree-icon jstree-checkbox';
+	_i.setAttribute('role', 'presentation');
+	/**
+	 * stores all defaults for the checkbox plugin
+	 * @name $.jstree.defaults.checkbox
+	 * @plugin checkbox
+	 */
+	$.jstree.defaults.checkbox = {
+		/**
+		 * a boolean indicating if checkboxes should be visible (can be changed at a later time using `show_checkboxes()` and `hide_checkboxes`). Defaults to `true`.
+		 * @name $.jstree.defaults.checkbox.visible
+		 * @plugin checkbox
+		 */
+		visible				: true,
+		/**
+		 * a boolean indicating if checkboxes should cascade down and have an undetermined state. Defaults to `true`.
+		 * @name $.jstree.defaults.checkbox.three_state
+		 * @plugin checkbox
+		 */
+		three_state			: true,
+		/**
+		 * a boolean indicating if clicking anywhere on the node should act as clicking on the checkbox. Defaults to `true`.
+		 * @name $.jstree.defaults.checkbox.whole_node
+		 * @plugin checkbox
+		 */
+		whole_node			: true,
+		/**
+		 * a boolean indicating if the selected style of a node should be kept, or removed. Defaults to `true`.
+		 * @name $.jstree.defaults.checkbox.keep_selected_style
+		 * @plugin checkbox
+		 */
+		keep_selected_style	: true,
+		/**
+		 * This setting controls how cascading and undetermined nodes are applied.
+		 * If 'up' is in the string - cascading up is enabled, if 'down' is in the string - cascading down is enabled, if 'undetermined' is in the string - undetermined nodes will be used.
+		 * If `three_state` is set to `true` this setting is automatically set to 'up+down+undetermined'. Defaults to ''.
+		 * @name $.jstree.defaults.checkbox.cascade
+		 * @plugin checkbox
+		 */
+		cascade				: '',
+		/**
+		 * This setting controls if checkbox are bound to the general tree selection or to an internal array maintained by the checkbox plugin. Defaults to `true`, only set to `false` if you know exactly what you are doing.
+		 * @name $.jstree.defaults.checkbox.tie_selection
+		 * @plugin checkbox
+		 */
+		tie_selection		: true,
+
+		/**
+		 * This setting controls if cascading down affects disabled checkboxes
+		 * @name $.jstree.defaults.checkbox.cascade_to_disabled
+		 * @plugin checkbox
+		 */
+		cascade_to_disabled : true,
+
+		/**
+		 * This setting controls if cascading down affects hidden checkboxes
+		 * @name $.jstree.defaults.checkbox.cascade_to_hidden
+		 * @plugin checkbox
+		 */
+		cascade_to_hidden : true
+	};
+	$.jstree.plugins.checkbox = function (options, parent) {
+		this.bind = function () {
+			parent.bind.call(this);
+			this._data.checkbox.uto = false;
+			this._data.checkbox.selected = [];
+			if(this.settings.checkbox.three_state) {
+				this.settings.checkbox.cascade = 'up+down+undetermined';
+			}
+			this.element
+				.on("init.jstree", $.proxy(function () {
+						this._data.checkbox.visible = this.settings.checkbox.visible;
+						if(!this.settings.checkbox.keep_selected_style) {
+							this.element.addClass('jstree-checkbox-no-clicked');
+						}
+						if(this.settings.checkbox.tie_selection) {
+							this.element.addClass('jstree-checkbox-selection');
+						}
+					}, this))
+				.on("loading.jstree", $.proxy(function () {
+						this[ this._data.checkbox.visible ? 'show_checkboxes' : 'hide_checkboxes' ]();
+					}, this));
+			if(this.settings.checkbox.cascade.indexOf('undetermined') !== -1) {
+				this.element
+					.on('changed.jstree uncheck_node.jstree check_node.jstree uncheck_all.jstree check_all.jstree move_node.jstree copy_node.jstree redraw.jstree open_node.jstree', $.proxy(function () {
+							// only if undetermined is in setting
+							if(this._data.checkbox.uto) { clearTimeout(this._data.checkbox.uto); }
+							this._data.checkbox.uto = setTimeout($.proxy(this._undetermined, this), 50);
+						}, this));
+			}
+			if(!this.settings.checkbox.tie_selection) {
+				this.element
+					.on('model.jstree', $.proxy(function (e, data) {
+						var m = this._model.data,
+							p = m[data.parent],
+							dpc = data.nodes,
+							i, j;
+						for(i = 0, j = dpc.length; i < j; i++) {
+							m[dpc[i]].state.checked = m[dpc[i]].state.checked || (m[dpc[i]].original && m[dpc[i]].original.state && m[dpc[i]].original.state.checked);
+							if(m[dpc[i]].state.checked) {
+								this._data.checkbox.selected.push(dpc[i]);
+							}
+						}
+					}, this));
+			}
+			if(this.settings.checkbox.cascade.indexOf('up') !== -1 || this.settings.checkbox.cascade.indexOf('down') !== -1) {
+				this.element
+					.on('model.jstree', $.proxy(function (e, data) {
+							var m = this._model.data,
+								p = m[data.parent],
+								dpc = data.nodes,
+								chd = [],
+								c, i, j, k, l, tmp, s = this.settings.checkbox.cascade, t = this.settings.checkbox.tie_selection;
+
+							if(s.indexOf('down') !== -1) {
+								// apply down
+								if(p.state[ t ? 'selected' : 'checked' ]) {
+									for(i = 0, j = dpc.length; i < j; i++) {
+										m[dpc[i]].state[ t ? 'selected' : 'checked' ] = true;
+									}
+
+									this._data[ t ? 'core' : 'checkbox' ].selected = this._data[ t ? 'core' : 'checkbox' ].selected.concat(dpc);
+								}
+								else {
+									for(i = 0, j = dpc.length; i < j; i++) {
+										if(m[dpc[i]].state[ t ? 'selected' : 'checked' ]) {
+											for(k = 0, l = m[dpc[i]].children_d.length; k < l; k++) {
+												m[m[dpc[i]].children_d[k]].state[ t ? 'selected' : 'checked' ] = true;
+											}
+											this._data[ t ? 'core' : 'checkbox' ].selected = this._data[ t ? 'core' : 'checkbox' ].selected.concat(m[dpc[i]].children_d);
+										}
+									}
+								}
+							}
+
+							if(s.indexOf('up') !== -1) {
+								// apply up
+								for(i = 0, j = p.children_d.length; i < j; i++) {
+									if(!m[p.children_d[i]].children.length) {
+										chd.push(m[p.children_d[i]].parent);
+									}
+								}
+								chd = $.vakata.array_unique(chd);
+								for(k = 0, l = chd.length; k < l; k++) {
+									p = m[chd[k]];
+									while(p && p.id !== $.jstree.root) {
+										c = 0;
+										for(i = 0, j = p.children.length; i < j; i++) {
+											c += m[p.children[i]].state[ t ? 'selected' : 'checked' ];
+										}
+										if(c === j) {
+											p.state[ t ? 'selected' : 'checked' ] = true;
+											this._data[ t ? 'core' : 'checkbox' ].selected.push(p.id);
+											tmp = this.get_node(p, true);
+											if(tmp && tmp.length) {
+												tmp.attr('aria-selected', true).children('.jstree-anchor').addClass( t ? 'jstree-clicked' : 'jstree-checked');
+											}
+										}
+										else {
+											break;
+										}
+										p = this.get_node(p.parent);
+									}
+								}
+							}
+
+							this._data[ t ? 'core' : 'checkbox' ].selected = $.vakata.array_unique(this._data[ t ? 'core' : 'checkbox' ].selected);
+						}, this))
+					.on(this.settings.checkbox.tie_selection ? 'select_node.jstree' : 'check_node.jstree', $.proxy(function (e, data) {
+							var self = this,
+								obj = data.node,
+								m = this._model.data,
+								par = this.get_node(obj.parent),
+								i, j, c, tmp, s = this.settings.checkbox.cascade, t = this.settings.checkbox.tie_selection,
+								sel = {}, cur = this._data[ t ? 'core' : 'checkbox' ].selected;
+
+							for (i = 0, j = cur.length; i < j; i++) {
+								sel[cur[i]] = true;
+							}
+
+							// apply down
+							if(s.indexOf('down') !== -1) {
+								//this._data[ t ? 'core' : 'checkbox' ].selected = $.vakata.array_unique(this._data[ t ? 'core' : 'checkbox' ].selected.concat(obj.children_d));
+								var selectedIds = this._cascade_new_checked_state(obj.id, true);
+								var temp = obj.children_d.concat(obj.id);
+								for (i = 0, j = temp.length; i < j; i++) {
+									if (selectedIds.indexOf(temp[i]) > -1) {
+										sel[temp[i]] = true;
+									}
+									else {
+										delete sel[temp[i]];
+									}
+								}
+							}
+
+							// apply up
+							if(s.indexOf('up') !== -1) {
+								while(par && par.id !== $.jstree.root) {
+									c = 0;
+									for(i = 0, j = par.children.length; i < j; i++) {
+										c += m[par.children[i]].state[ t ? 'selected' : 'checked' ];
+									}
+									if(c === j) {
+										par.state[ t ? 'selected' : 'checked' ] = true;
+										sel[par.id] = true;
+										//this._data[ t ? 'core' : 'checkbox' ].selected.push(par.id);
+										tmp = this.get_node(par, true);
+										if(tmp && tmp.length) {
+											tmp.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked');
+										}
+									}
+									else {
+										break;
+									}
+									par = this.get_node(par.parent);
+								}
+							}
+
+							cur = [];
+							for (i in sel) {
+								if (sel.hasOwnProperty(i)) {
+									cur.push(i);
+								}
+							}
+							this._data[ t ? 'core' : 'checkbox' ].selected = cur;
+						}, this))
+					.on(this.settings.checkbox.tie_selection ? 'deselect_all.jstree' : 'uncheck_all.jstree', $.proxy(function (e, data) {
+							var obj = this.get_node($.jstree.root),
+								m = this._model.data,
+								i, j, tmp;
+							for(i = 0, j = obj.children_d.length; i < j; i++) {
+								tmp = m[obj.children_d[i]];
+								if(tmp && tmp.original && tmp.original.state && tmp.original.state.undetermined) {
+									tmp.original.state.undetermined = false;
+								}
+							}
+						}, this))
+					.on(this.settings.checkbox.tie_selection ? 'deselect_node.jstree' : 'uncheck_node.jstree', $.proxy(function (e, data) {
+							var self = this,
+								obj = data.node,
+								dom = this.get_node(obj, true),
+								i, j, tmp, s = this.settings.checkbox.cascade, t = this.settings.checkbox.tie_selection,
+								cur = this._data[ t ? 'core' : 'checkbox' ].selected, sel = {},
+								stillSelectedIds = [],
+								allIds = obj.children_d.concat(obj.id);
+
+							// apply down
+							if(s.indexOf('down') !== -1) {
+								var selectedIds = this._cascade_new_checked_state(obj.id, false);
+
+								cur = cur.filter(function(id) {
+									return allIds.indexOf(id) === -1 || selectedIds.indexOf(id) > -1;
+								});
+							}
+
+							// only apply up if cascade up is enabled and if this node is not selected
+							// (if all child nodes are disabled and cascade_to_disabled === false then this node will till be selected).
+							if(s.indexOf('up') !== -1 && cur.indexOf(obj.id) === -1) {
+								for(i = 0, j = obj.parents.length; i < j; i++) {
+									tmp = this._model.data[obj.parents[i]];
+									tmp.state[ t ? 'selected' : 'checked' ] = false;
+									if(tmp && tmp.original && tmp.original.state && tmp.original.state.undetermined) {
+										tmp.original.state.undetermined = false;
+									}
+									tmp = this.get_node(obj.parents[i], true);
+									if(tmp && tmp.length) {
+										tmp.attr('aria-selected', false).children('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked');
+									}
+								}
+
+								cur = cur.filter(function(id) {
+									return obj.parents.indexOf(id) === -1;
+								});
+							}
+
+							this._data[ t ? 'core' : 'checkbox' ].selected = cur;
+						}, this));
+			}
+			if(this.settings.checkbox.cascade.indexOf('up') !== -1) {
+				this.element
+					.on('delete_node.jstree', $.proxy(function (e, data) {
+							// apply up (whole handler)
+							var p = this.get_node(data.parent),
+								m = this._model.data,
+								i, j, c, tmp, t = this.settings.checkbox.tie_selection;
+							while(p && p.id !== $.jstree.root && !p.state[ t ? 'selected' : 'checked' ]) {
+								c = 0;
+								for(i = 0, j = p.children.length; i < j; i++) {
+									c += m[p.children[i]].state[ t ? 'selected' : 'checked' ];
+								}
+								if(j > 0 && c === j) {
+									p.state[ t ? 'selected' : 'checked' ] = true;
+									this._data[ t ? 'core' : 'checkbox' ].selected.push(p.id);
+									tmp = this.get_node(p, true);
+									if(tmp && tmp.length) {
+										tmp.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked');
+									}
+								}
+								else {
+									break;
+								}
+								p = this.get_node(p.parent);
+							}
+						}, this))
+					.on('move_node.jstree', $.proxy(function (e, data) {
+							// apply up (whole handler)
+							var is_multi = data.is_multi,
+								old_par = data.old_parent,
+								new_par = this.get_node(data.parent),
+								m = this._model.data,
+								p, c, i, j, tmp, t = this.settings.checkbox.tie_selection;
+							if(!is_multi) {
+								p = this.get_node(old_par);
+								while(p && p.id !== $.jstree.root && !p.state[ t ? 'selected' : 'checked' ]) {
+									c = 0;
+									for(i = 0, j = p.children.length; i < j; i++) {
+										c += m[p.children[i]].state[ t ? 'selected' : 'checked' ];
+									}
+									if(j > 0 && c === j) {
+										p.state[ t ? 'selected' : 'checked' ] = true;
+										this._data[ t ? 'core' : 'checkbox' ].selected.push(p.id);
+										tmp = this.get_node(p, true);
+										if(tmp && tmp.length) {
+											tmp.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked');
+										}
+									}
+									else {
+										break;
+									}
+									p = this.get_node(p.parent);
+								}
+							}
+							p = new_par;
+							while(p && p.id !== $.jstree.root) {
+								c = 0;
+								for(i = 0, j = p.children.length; i < j; i++) {
+									c += m[p.children[i]].state[ t ? 'selected' : 'checked' ];
+								}
+								if(c === j) {
+									if(!p.state[ t ? 'selected' : 'checked' ]) {
+										p.state[ t ? 'selected' : 'checked' ] = true;
+										this._data[ t ? 'core' : 'checkbox' ].selected.push(p.id);
+										tmp = this.get_node(p, true);
+										if(tmp && tmp.length) {
+											tmp.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked');
+										}
+									}
+								}
+								else {
+									if(p.state[ t ? 'selected' : 'checked' ]) {
+										p.state[ t ? 'selected' : 'checked' ] = false;
+										this._data[ t ? 'core' : 'checkbox' ].selected = $.vakata.array_remove_item(this._data[ t ? 'core' : 'checkbox' ].selected, p.id);
+										tmp = this.get_node(p, true);
+										if(tmp && tmp.length) {
+											tmp.attr('aria-selected', false).children('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked');
+										}
+									}
+									else {
+										break;
+									}
+								}
+								p = this.get_node(p.parent);
+							}
+						}, this));
+			}
+		};
+		/**
+		 * get an array of all nodes whose state is "undetermined"
+		 * @name get_undetermined([full])
+		 * @param  {boolean} full: if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned
+		 * @return {Array}
+		 * @plugin checkbox
+		 */
+		this.get_undetermined = function (full) {
+			if (this.settings.checkbox.cascade.indexOf('undetermined') === -1) {
+				return [];
+			}
+			var i, j, k, l, o = {}, m = this._model.data, t = this.settings.checkbox.tie_selection, s = this._data[ t ? 'core' : 'checkbox' ].selected, p = [], tt = this, r = [];
+			for(i = 0, j = s.length; i < j; i++) {
+				if(m[s[i]] && m[s[i]].parents) {
+					for(k = 0, l = m[s[i]].parents.length; k < l; k++) {
+						if(o[m[s[i]].parents[k]] !== undefined) {
+							break;
+						}
+						if(m[s[i]].parents[k] !== $.jstree.root) {
+							o[m[s[i]].parents[k]] = true;
+							p.push(m[s[i]].parents[k]);
+						}
+					}
+				}
+			}
+			// attempt for server side undetermined state
+			this.element.find('.jstree-closed').not(':has(.jstree-children)')
+				.each(function () {
+					var tmp = tt.get_node(this), tmp2;
+					
+					if(!tmp) { return; }
+					
+					if(!tmp.state.loaded) {
+						if(tmp.original && tmp.original.state && tmp.original.state.undetermined && tmp.original.state.undetermined === true) {
+							if(o[tmp.id] === undefined && tmp.id !== $.jstree.root) {
+								o[tmp.id] = true;
+								p.push(tmp.id);
+							}
+							for(k = 0, l = tmp.parents.length; k < l; k++) {
+								if(o[tmp.parents[k]] === undefined && tmp.parents[k] !== $.jstree.root) {
+									o[tmp.parents[k]] = true;
+									p.push(tmp.parents[k]);
+								}
+							}
+						}
+					}
+					else {
+						for(i = 0, j = tmp.children_d.length; i < j; i++) {
+							tmp2 = m[tmp.children_d[i]];
+							if(!tmp2.state.loaded && tmp2.original && tmp2.original.state && tmp2.original.state.undetermined && tmp2.original.state.undetermined === true) {
+								if(o[tmp2.id] === undefined && tmp2.id !== $.jstree.root) {
+									o[tmp2.id] = true;
+									p.push(tmp2.id);
+								}
+								for(k = 0, l = tmp2.parents.length; k < l; k++) {
+									if(o[tmp2.parents[k]] === undefined && tmp2.parents[k] !== $.jstree.root) {
+										o[tmp2.parents[k]] = true;
+										p.push(tmp2.parents[k]);
+									}
+								}
+							}
+						}
+					}
+				});
+			for (i = 0, j = p.length; i < j; i++) {
+				if(!m[p[i]].state[ t ? 'selected' : 'checked' ]) {
+					r.push(full ? m[p[i]] : p[i]);
+				}
+			}
+			return r;
+		};
+		/**
+		 * set the undetermined state where and if necessary. Used internally.
+		 * @private
+		 * @name _undetermined()
+		 * @plugin checkbox
+		 */
+		this._undetermined = function () {
+			if(this.element === null) { return; }
+			var p = this.get_undetermined(false), i, j, s;
+
+			this.element.find('.jstree-undetermined').removeClass('jstree-undetermined');
+			for (i = 0, j = p.length; i < j; i++) {
+				s = this.get_node(p[i], true);
+				if(s && s.length) {
+					s.children('.jstree-anchor').children('.jstree-checkbox').addClass('jstree-undetermined');
+				}
+			}
+		};
+		this.redraw_node = function(obj, deep, is_callback, force_render) {
+			obj = parent.redraw_node.apply(this, arguments);
+			if(obj) {
+				var i, j, tmp = null, icon = null;
+				for(i = 0, j = obj.childNodes.length; i < j; i++) {
+					if(obj.childNodes[i] && obj.childNodes[i].className && obj.childNodes[i].className.indexOf("jstree-anchor") !== -1) {
+						tmp = obj.childNodes[i];
+						break;
+					}
+				}
+				if(tmp) {
+					if(!this.settings.checkbox.tie_selection && this._model.data[obj.id].state.checked) { tmp.className += ' jstree-checked'; }
+					icon = _i.cloneNode(false);
+					if(this._model.data[obj.id].state.checkbox_disabled) { icon.className += ' jstree-checkbox-disabled'; }
+					tmp.insertBefore(icon, tmp.childNodes[0]);
+				}
+			}
+			if(!is_callback && this.settings.checkbox.cascade.indexOf('undetermined') !== -1) {
+				if(this._data.checkbox.uto) { clearTimeout(this._data.checkbox.uto); }
+				this._data.checkbox.uto = setTimeout($.proxy(this._undetermined, this), 50);
+			}
+			return obj;
+		};
+		/**
+		 * show the node checkbox icons
+		 * @name show_checkboxes()
+		 * @plugin checkbox
+		 */
+		this.show_checkboxes = function () { this._data.core.themes.checkboxes = true; this.get_container_ul().removeClass("jstree-no-checkboxes"); };
+		/**
+		 * hide the node checkbox icons
+		 * @name hide_checkboxes()
+		 * @plugin checkbox
+		 */
+		this.hide_checkboxes = function () { this._data.core.themes.checkboxes = false; this.get_container_ul().addClass("jstree-no-checkboxes"); };
+		/**
+		 * toggle the node icons
+		 * @name toggle_checkboxes()
+		 * @plugin checkbox
+		 */
+		this.toggle_checkboxes = function () { if(this._data.core.themes.checkboxes) { this.hide_checkboxes(); } else { this.show_checkboxes(); } };
+		/**
+		 * checks if a node is in an undetermined state
+		 * @name is_undetermined(obj)
+		 * @param  {mixed} obj
+		 * @return {Boolean}
+		 */
+		this.is_undetermined = function (obj) {
+			obj = this.get_node(obj);
+			var s = this.settings.checkbox.cascade, i, j, t = this.settings.checkbox.tie_selection, d = this._data[ t ? 'core' : 'checkbox' ].selected, m = this._model.data;
+			if(!obj || obj.state[ t ? 'selected' : 'checked' ] === true || s.indexOf('undetermined') === -1 || (s.indexOf('down') === -1 && s.indexOf('up') === -1)) {
+				return false;
+			}
+			if(!obj.state.loaded && obj.original.state.undetermined === true) {
+				return true;
+			}
+			for(i = 0, j = obj.children_d.length; i < j; i++) {
+				if($.inArray(obj.children_d[i], d) !== -1 || (!m[obj.children_d[i]].state.loaded && m[obj.children_d[i]].original.state.undetermined)) {
+					return true;
+				}
+			}
+			return false;
+		};
+		/**
+		 * disable a node's checkbox
+		 * @name disable_checkbox(obj)
+		 * @param {mixed} obj an array can be used too
+		 * @trigger disable_checkbox.jstree
+		 * @plugin checkbox
+		 */
+		this.disable_checkbox = function (obj) {
+			var t1, t2, dom;
+			if($.isArray(obj)) {
+				obj = obj.slice();
+				for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+					this.disable_checkbox(obj[t1]);
+				}
+				return true;
+			}
+			obj = this.get_node(obj);
+			if(!obj || obj.id === $.jstree.root) {
+				return false;
+			}
+			dom = this.get_node(obj, true);
+			if(!obj.state.checkbox_disabled) {
+				obj.state.checkbox_disabled = true;
+				if(dom && dom.length) {
+					dom.children('.jstree-anchor').children('.jstree-checkbox').addClass('jstree-checkbox-disabled');
+				}
+				/**
+				 * triggered when an node's checkbox is disabled
+				 * @event
+				 * @name disable_checkbox.jstree
+				 * @param {Object} node
+				 * @plugin checkbox
+				 */
+				this.trigger('disable_checkbox', { 'node' : obj });
+			}
+		};
+		/**
+		 * enable a node's checkbox
+		 * @name disable_checkbox(obj)
+		 * @param {mixed} obj an array can be used too
+		 * @trigger enable_checkbox.jstree
+		 * @plugin checkbox
+		 */
+		this.enable_checkbox = function (obj) {
+			var t1, t2, dom;
+			if($.isArray(obj)) {
+				obj = obj.slice();
+				for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+					this.enable_checkbox(obj[t1]);
+				}
+				return true;
+			}
+			obj = this.get_node(obj);
+			if(!obj || obj.id === $.jstree.root) {
+				return false;
+			}
+			dom = this.get_node(obj, true);
+			if(obj.state.checkbox_disabled) {
+				obj.state.checkbox_disabled = false;
+				if(dom && dom.length) {
+					dom.children('.jstree-anchor').children('.jstree-checkbox').removeClass('jstree-checkbox-disabled');
+				}
+				/**
+				 * triggered when an node's checkbox is enabled
+				 * @event
+				 * @name enable_checkbox.jstree
+				 * @param {Object} node
+				 * @plugin checkbox
+				 */
+				this.trigger('enable_checkbox', { 'node' : obj });
+			}
+		};
+
+		this.activate_node = function (obj, e) {
+			if($(e.target).hasClass('jstree-checkbox-disabled')) {
+				return false;
+			}
+			if(this.settings.checkbox.tie_selection && (this.settings.checkbox.whole_node || $(e.target).hasClass('jstree-checkbox'))) {
+				e.ctrlKey = true;
+			}
+			if(this.settings.checkbox.tie_selection || (!this.settings.checkbox.whole_node && !$(e.target).hasClass('jstree-checkbox'))) {
+				return parent.activate_node.call(this, obj, e);
+			}
+			if(this.is_disabled(obj)) {
+				return false;
+			}
+			if(this.is_checked(obj)) {
+				this.uncheck_node(obj, e);
+			}
+			else {
+				this.check_node(obj, e);
+			}
+			this.trigger('activate_node', { 'node' : this.get_node(obj) });
+		};
+
+		/**
+		 * Cascades checked state to a node and all its descendants. This function does NOT affect hidden and disabled nodes (or their descendants).
+		 * However if these unaffected nodes are already selected their ids will be included in the returned array.
+		 * @private
+		 * @param {string} id the node ID
+		 * @param {bool} checkedState should the nodes be checked or not
+		 * @returns {Array} Array of all node id's (in this tree branch) that are checked.
+		 */
+		this._cascade_new_checked_state = function (id, checkedState) {
+			var self = this;
+			var t = this.settings.checkbox.tie_selection;
+			var node = this._model.data[id];
+			var selectedNodeIds = [];
+			var selectedChildrenIds = [], i, j, selectedChildIds;
+
+			if (
+				(this.settings.checkbox.cascade_to_disabled || !node.state.disabled) &&
+				(this.settings.checkbox.cascade_to_hidden || !node.state.hidden)
+			) {
+				//First try and check/uncheck the children
+				if (node.children) {
+					for (i = 0, j = node.children.length; i < j; i++) {
+						var childId = node.children[i];
+						selectedChildIds = self._cascade_new_checked_state(childId, checkedState);
+						selectedNodeIds = selectedNodeIds.concat(selectedChildIds);
+						if (selectedChildIds.indexOf(childId) > -1) {
+							selectedChildrenIds.push(childId);
+						}
+					}
+				}
+
+				var dom = self.get_node(node, true);
+
+				//A node's state is undetermined if some but not all of it's children are checked/selected .
+				var undetermined = selectedChildrenIds.length > 0 && selectedChildrenIds.length < node.children.length;
+
+				if(node.original && node.original.state && node.original.state.undetermined) {
+					node.original.state.undetermined = undetermined;
+				}
+
+				//If a node is undetermined then remove selected class
+				if (undetermined) {
+					node.state[ t ? 'selected' : 'checked' ] = false;
+					dom.attr('aria-selected', false).children('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked');
+				}
+				//Otherwise, if the checkedState === true (i.e. the node is being checked now) and all of the node's children are checked (if it has any children),
+				//check the node and style it correctly.
+				else if (checkedState && selectedChildrenIds.length === node.children.length) {
+					node.state[ t ? 'selected' : 'checked' ] = checkedState;
+					selectedNodeIds.push(node.id);
+
+					dom.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked');
+				}
+				else {
+					node.state[ t ? 'selected' : 'checked' ] = false;
+					dom.attr('aria-selected', false).children('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked');
+				}
+			}
+			else {
+				selectedChildIds = this.get_checked_descendants(id);
+
+				if (node.state[ t ? 'selected' : 'checked' ]) {
+					selectedChildIds.push(node.id);
+				}
+
+				selectedNodeIds = selectedNodeIds.concat(selectedChildIds);
+			}
+
+			return selectedNodeIds;
+		};
+
+		/**
+		 * Gets ids of nodes selected in branch (of tree) specified by id (does not include the node specified by id)
+		 * @name get_checked_descendants(obj)
+		 * @param {string} id the node ID
+		 * @return {Array} array of IDs
+		 * @plugin checkbox
+		 */
+		this.get_checked_descendants = function (id) {
+			var self = this;
+			var t = self.settings.checkbox.tie_selection;
+			var node = self._model.data[id];
+
+			return node.children_d.filter(function(_id) {
+				return self._model.data[_id].state[ t ? 'selected' : 'checked' ];
+			});
+		};
+
+		/**
+		 * check a node (only if tie_selection in checkbox settings is false, otherwise select_node will be called internally)
+		 * @name check_node(obj)
+		 * @param {mixed} obj an array can be used to check multiple nodes
+		 * @trigger check_node.jstree
+		 * @plugin checkbox
+		 */
+		this.check_node = function (obj, e) {
+			if(this.settings.checkbox.tie_selection) { return this.select_node(obj, false, true, e); }
+			var dom, t1, t2, th;
+			if($.isArray(obj)) {
+				obj = obj.slice();
+				for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+					this.check_node(obj[t1], e);
+				}
+				return true;
+			}
+			obj = this.get_node(obj);
+			if(!obj || obj.id === $.jstree.root) {
+				return false;
+			}
+			dom = this.get_node(obj, true);
+			if(!obj.state.checked) {
+				obj.state.checked = true;
+				this._data.checkbox.selected.push(obj.id);
+				if(dom && dom.length) {
+					dom.children('.jstree-anchor').addClass('jstree-checked');
+				}
+				/**
+				 * triggered when an node is checked (only if tie_selection in checkbox settings is false)
+				 * @event
+				 * @name check_node.jstree
+				 * @param {Object} node
+				 * @param {Array} selected the current selection
+				 * @param {Object} event the event (if any) that triggered this check_node
+				 * @plugin checkbox
+				 */
+				this.trigger('check_node', { 'node' : obj, 'selected' : this._data.checkbox.selected, 'event' : e });
+			}
+		};
+		/**
+		 * uncheck a node (only if tie_selection in checkbox settings is false, otherwise deselect_node will be called internally)
+		 * @name uncheck_node(obj)
+		 * @param {mixed} obj an array can be used to uncheck multiple nodes
+		 * @trigger uncheck_node.jstree
+		 * @plugin checkbox
+		 */
+		this.uncheck_node = function (obj, e) {
+			if(this.settings.checkbox.tie_selection) { return this.deselect_node(obj, false, e); }
+			var t1, t2, dom;
+			if($.isArray(obj)) {
+				obj = obj.slice();
+				for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+					this.uncheck_node(obj[t1], e);
+				}
+				return true;
+			}
+			obj = this.get_node(obj);
+			if(!obj || obj.id === $.jstree.root) {
+				return false;
+			}
+			dom = this.get_node(obj, true);
+			if(obj.state.checked) {
+				obj.state.checked = false;
+				this._data.checkbox.selected = $.vakata.array_remove_item(this._data.checkbox.selected, obj.id);
+				if(dom.length) {
+					dom.children('.jstree-anchor').removeClass('jstree-checked');
+				}
+				/**
+				 * triggered when an node is unchecked (only if tie_selection in checkbox settings is false)
+				 * @event
+				 * @name uncheck_node.jstree
+				 * @param {Object} node
+				 * @param {Array} selected the current selection
+				 * @param {Object} event the event (if any) that triggered this uncheck_node
+				 * @plugin checkbox
+				 */
+				this.trigger('uncheck_node', { 'node' : obj, 'selected' : this._data.checkbox.selected, 'event' : e });
+			}
+		};
+		
+		/**
+		 * checks all nodes in the tree (only if tie_selection in checkbox settings is false, otherwise select_all will be called internally)
+		 * @name check_all()
+		 * @trigger check_all.jstree, changed.jstree
+		 * @plugin checkbox
+		 */
+		this.check_all = function () {
+			if(this.settings.checkbox.tie_selection) { return this.select_all(); }
+			var tmp = this._data.checkbox.selected.concat([]), i, j;
+			this._data.checkbox.selected = this._model.data[$.jstree.root].children_d.concat();
+			for(i = 0, j = this._data.checkbox.selected.length; i < j; i++) {
+				if(this._model.data[this._data.checkbox.selected[i]]) {
+					this._model.data[this._data.checkbox.selected[i]].state.checked = true;
+				}
+			}
+			this.redraw(true);
+			/**
+			 * triggered when all nodes are checked (only if tie_selection in checkbox settings is false)
+			 * @event
+			 * @name check_all.jstree
+			 * @param {Array} selected the current selection
+			 * @plugin checkbox
+			 */
+			this.trigger('check_all', { 'selected' : this._data.checkbox.selected });
+		};
+		/**
+		 * uncheck all checked nodes (only if tie_selection in checkbox settings is false, otherwise deselect_all will be called internally)
+		 * @name uncheck_all()
+		 * @trigger uncheck_all.jstree
+		 * @plugin checkbox
+		 */
+		this.uncheck_all = function () {
+			if(this.settings.checkbox.tie_selection) { return this.deselect_all(); }
+			var tmp = this._data.checkbox.selected.concat([]), i, j;
+			for(i = 0, j = this._data.checkbox.selected.length; i < j; i++) {
+				if(this._model.data[this._data.checkbox.selected[i]]) {
+					this._model.data[this._data.checkbox.selected[i]].state.checked = false;
+				}
+			}
+			this._data.checkbox.selected = [];
+			this.element.find('.jstree-checked').removeClass('jstree-checked');
+			/**
+			 * triggered when all nodes are unchecked (only if tie_selection in checkbox settings is false)
+			 * @event
+			 * @name uncheck_all.jstree
+			 * @param {Object} node the previous selection
+			 * @param {Array} selected the current selection
+			 * @plugin checkbox
+			 */
+			this.trigger('uncheck_all', { 'selected' : this._data.checkbox.selected, 'node' : tmp });
+		};
+		/**
+		 * checks if a node is checked (if tie_selection is on in the settings this function will return the same as is_selected)
+		 * @name is_checked(obj)
+		 * @param  {mixed}  obj
+		 * @return {Boolean}
+		 * @plugin checkbox
+		 */
+		this.is_checked = function (obj) {
+			if(this.settings.checkbox.tie_selection) { return this.is_selected(obj); }
+			obj = this.get_node(obj);
+			if(!obj || obj.id === $.jstree.root) { return false; }
+			return obj.state.checked;
+		};
+		/**
+		 * get an array of all checked nodes (if tie_selection is on in the settings this function will return the same as get_selected)
+		 * @name get_checked([full])
+		 * @param  {mixed}  full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned
+		 * @return {Array}
+		 * @plugin checkbox
+		 */
+		this.get_checked = function (full) {
+			if(this.settings.checkbox.tie_selection) { return this.get_selected(full); }
+			return full ? $.map(this._data.checkbox.selected, $.proxy(function (i) { return this.get_node(i); }, this)) : this._data.checkbox.selected;
+		};
+		/**
+		 * get an array of all top level checked nodes (ignoring children of checked nodes) (if tie_selection is on in the settings this function will return the same as get_top_selected)
+		 * @name get_top_checked([full])
+		 * @param  {mixed}  full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned
+		 * @return {Array}
+		 * @plugin checkbox
+		 */
+		this.get_top_checked = function (full) {
+			if(this.settings.checkbox.tie_selection) { return this.get_top_selected(full); }
+			var tmp = this.get_checked(true),
+				obj = {}, i, j, k, l;
+			for(i = 0, j = tmp.length; i < j; i++) {
+				obj[tmp[i].id] = tmp[i];
+			}
+			for(i = 0, j = tmp.length; i < j; i++) {
+				for(k = 0, l = tmp[i].children_d.length; k < l; k++) {
+					if(obj[tmp[i].children_d[k]]) {
+						delete obj[tmp[i].children_d[k]];
+					}
+				}
+			}
+			tmp = [];
+			for(i in obj) {
+				if(obj.hasOwnProperty(i)) {
+					tmp.push(i);
+				}
+			}
+			return full ? $.map(tmp, $.proxy(function (i) { return this.get_node(i); }, this)) : tmp;
+		};
+		/**
+		 * get an array of all bottom level checked nodes (ignoring selected parents) (if tie_selection is on in the settings this function will return the same as get_bottom_selected)
+		 * @name get_bottom_checked([full])
+		 * @param  {mixed}  full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned
+		 * @return {Array}
+		 * @plugin checkbox
+		 */
+		this.get_bottom_checked = function (full) {
+			if(this.settings.checkbox.tie_selection) { return this.get_bottom_selected(full); }
+			var tmp = this.get_checked(true),
+				obj = [], i, j;
+			for(i = 0, j = tmp.length; i < j; i++) {
+				if(!tmp[i].children.length) {
+					obj.push(tmp[i].id);
+				}
+			}
+			return full ? $.map(obj, $.proxy(function (i) { return this.get_node(i); }, this)) : obj;
+		};
+		this.load_node = function (obj, callback) {
+			var k, l, i, j, c, tmp;
+			if(!$.isArray(obj) && !this.settings.checkbox.tie_selection) {
+				tmp = this.get_node(obj);
+				if(tmp && tmp.state.loaded) {
+					for(k = 0, l = tmp.children_d.length; k < l; k++) {
+						if(this._model.data[tmp.children_d[k]].state.checked) {
+							c = true;
+							this._data.checkbox.selected = $.vakata.array_remove_item(this._data.checkbox.selected, tmp.children_d[k]);
+						}
+					}
+				}
+			}
+			return parent.load_node.apply(this, arguments);
+		};
+		this.get_state = function () {
+			var state = parent.get_state.apply(this, arguments);
+			if(this.settings.checkbox.tie_selection) { return state; }
+			state.checkbox = this._data.checkbox.selected.slice();
+			return state;
+		};
+		this.set_state = function (state, callback) {
+			var res = parent.set_state.apply(this, arguments);
+			if(res && state.checkbox) {
+				if(!this.settings.checkbox.tie_selection) {
+					this.uncheck_all();
+					var _this = this;
+					$.each(state.checkbox, function (i, v) {
+						_this.check_node(v);
+					});
+				}
+				delete state.checkbox;
+				this.set_state(state, callback);
+				return false;
+			}
+			return res;
+		};
+		this.refresh = function (skip_loading, forget_state) {
+			if(!this.settings.checkbox.tie_selection) {
+				this._data.checkbox.selected = [];
+			}
+			return parent.refresh.apply(this, arguments);
+		};
+	};
+
+	// include the checkbox plugin by default
+	// $.jstree.defaults.plugins.push("checkbox");
+}));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vakata-jstree-3.3.5/src/jstree.conditionalselect.js	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,38 @@
+/**
+ * ### Conditionalselect plugin
+ *
+ * This plugin allows defining a callback to allow or deny node selection by user input (activate node method).
+ */
+/*globals jQuery, define, exports, require, document */
+(function (factory) {
+	"use strict";
+	if (typeof define === 'function' && define.amd) {
+		define('jstree.conditionalselect', ['jquery','jstree'], factory);
+	}
+	else if(typeof exports === 'object') {
+		factory(require('jquery'), require('jstree'));
+	}
+	else {
+		factory(jQuery, jQuery.jstree);
+	}
+}(function ($, jstree, undefined) {
+	"use strict";
+
+	if($.jstree.plugins.conditionalselect) { return; }
+
+	/**
+	 * a callback (function) which is invoked in the instance's scope and receives two arguments - the node and the event that triggered the `activate_node` call. Returning false prevents working with the node, returning true allows invoking activate_node. Defaults to returning `true`.
+	 * @name $.jstree.defaults.checkbox.visible
+	 * @plugin checkbox
+	 */
+	$.jstree.defaults.conditionalselect = function () { return true; };
+	$.jstree.plugins.conditionalselect = function (options, parent) {
+		// own function
+		this.activate_node = function (obj, e) {
+			if(this.settings.conditionalselect.call(this, this.get_node(obj), e)) {
+				return parent.activate_node.call(this, obj, e);
+			}
+		};
+	};
+
+}));
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vakata-jstree-3.3.5/src/jstree.contextmenu.js	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,661 @@
+/**
+ * ### Contextmenu plugin
+ *
+ * Shows a context menu when a node is right-clicked.
+ */
+/*globals jQuery, define, exports, require, document */
+(function (factory) {
+	"use strict";
+	if (typeof define === 'function' && define.amd) {
+		define('jstree.contextmenu', ['jquery','jstree'], factory);
+	}
+	else if(typeof exports === 'object') {
+		factory(require('jquery'), require('jstree'));
+	}
+	else {
+		factory(jQuery, jQuery.jstree);
+	}
+}(function ($, jstree, undefined) {
+	"use strict";
+
+	if($.jstree.plugins.contextmenu) { return; }
+
+	/**
+	 * stores all defaults for the contextmenu plugin
+	 * @name $.jstree.defaults.contextmenu
+	 * @plugin contextmenu
+	 */
+	$.jstree.defaults.contextmenu = {
+		/**
+		 * a boolean indicating if the node should be selected when the context menu is invoked on it. Defaults to `true`.
+		 * @name $.jstree.defaults.contextmenu.select_node
+		 * @plugin contextmenu
+		 */
+		select_node : true,
+		/**
+		 * a boolean indicating if the menu should be shown aligned with the node. Defaults to `true`, otherwise the mouse coordinates are used.
+		 * @name $.jstree.defaults.contextmenu.show_at_node
+		 * @plugin contextmenu
+		 */
+		show_at_node : true,
+		/**
+		 * an object of actions, or a function that accepts a node and a callback function and calls the callback function with an object of actions available for that node (you can also return the items too).
+		 *
+		 * Each action consists of a key (a unique name) and a value which is an object with the following properties (only label and action are required). Once a menu item is activated the `action` function will be invoked with an object containing the following keys: item - the contextmenu item definition as seen below, reference - the DOM node that was used (the tree node), element - the contextmenu DOM element, position - an object with x/y properties indicating the position of the menu.
+		 *
+		 * * `separator_before` - a boolean indicating if there should be a separator before this item
+		 * * `separator_after` - a boolean indicating if there should be a separator after this item
+		 * * `_disabled` - a boolean indicating if this action should be disabled
+		 * * `label` - a string - the name of the action (could be a function returning a string)
+		 * * `title` - a string - an optional tooltip for the item
+		 * * `action` - a function to be executed if this item is chosen, the function will receive 
+		 * * `icon` - a string, can be a path to an icon or a className, if using an image that is in the current directory use a `./` prefix, otherwise it will be detected as a class
+		 * * `shortcut` - keyCode which will trigger the action if the menu is open (for example `113` for rename, which equals F2)
+		 * * `shortcut_label` - shortcut label (like for example `F2` for rename)
+		 * * `submenu` - an object with the same structure as $.jstree.defaults.contextmenu.items which can be used to create a submenu - each key will be rendered as a separate option in a submenu that will appear once the current item is hovered
+		 *
+		 * @name $.jstree.defaults.contextmenu.items
+		 * @plugin contextmenu
+		 */
+		items : function (o, cb) { // Could be an object directly
+			return {
+				"create" : {
+					"separator_before"	: false,
+					"separator_after"	: true,
+					"_disabled"			: false, //(this.check("create_node", data.reference, {}, "last")),
+					"label"				: "Create",
+					"action"			: function (data) {
+						var inst = $.jstree.reference(data.reference),
+							obj = inst.get_node(data.reference);
+						inst.create_node(obj, {}, "last", function (new_node) {
+							try {
+								inst.edit(new_node);
+							} catch (ex) {
+								setTimeout(function () { inst.edit(new_node); },0);
+							}
+						});
+					}
+				},
+				"rename" : {
+					"separator_before"	: false,
+					"separator_after"	: false,
+					"_disabled"			: false, //(this.check("rename_node", data.reference, this.get_parent(data.reference), "")),
+					"label"				: "Rename",
+					/*!
+					"shortcut"			: 113,
+					"shortcut_label"	: 'F2',
+					"icon"				: "glyphicon glyphicon-leaf",
+					*/
+					"action"			: function (data) {
+						var inst = $.jstree.reference(data.reference),
+							obj = inst.get_node(data.reference);
+						inst.edit(obj);
+					}
+				},
+				"remove" : {
+					"separator_before"	: false,
+					"icon"				: false,
+					"separator_after"	: false,
+					"_disabled"			: false, //(this.check("delete_node", data.reference, this.get_parent(data.reference), "")),
+					"label"				: "Delete",
+					"action"			: function (data) {
+						var inst = $.jstree.reference(data.reference),
+							obj = inst.get_node(data.reference);
+						if(inst.is_selected(obj)) {
+							inst.delete_node(inst.get_selected());
+						}
+						else {
+							inst.delete_node(obj);
+						}
+					}
+				},
+				"ccp" : {
+					"separator_before"	: true,
+					"icon"				: false,
+					"separator_after"	: false,
+					"label"				: "Edit",
+					"action"			: false,
+					"submenu" : {
+						"cut" : {
+							"separator_before"	: false,
+							"separator_after"	: false,
+							"label"				: "Cut",
+							"action"			: function (data) {
+								var inst = $.jstree.reference(data.reference),
+									obj = inst.get_node(data.reference);
+								if(inst.is_selected(obj)) {
+									inst.cut(inst.get_top_selected());
+								}
+								else {
+									inst.cut(obj);
+								}
+							}
+						},
+						"copy" : {
+							"separator_before"	: false,
+							"icon"				: false,
+							"separator_after"	: false,
+							"label"				: "Copy",
+							"action"			: function (data) {
+								var inst = $.jstree.reference(data.reference),
+									obj = inst.get_node(data.reference);
+								if(inst.is_selected(obj)) {
+									inst.copy(inst.get_top_selected());
+								}
+								else {
+									inst.copy(obj);
+								}
+							}
+						},
+						"paste" : {
+							"separator_before"	: false,
+							"icon"				: false,
+							"_disabled"			: function (data) {
+								return !$.jstree.reference(data.reference).can_paste();
+							},
+							"separator_after"	: false,
+							"label"				: "Paste",
+							"action"			: function (data) {
+								var inst = $.jstree.reference(data.reference),
+									obj = inst.get_node(data.reference);
+								inst.paste(obj);
+							}
+						}
+					}
+				}
+			};
+		}
+	};
+
+	$.jstree.plugins.contextmenu = function (options, parent) {
+		this.bind = function () {
+			parent.bind.call(this);
+
+			var last_ts = 0, cto = null, ex, ey;
+			this.element
+				.on("init.jstree loading.jstree ready.jstree", $.proxy(function () {
+						this.get_container_ul().addClass('jstree-contextmenu');
+					}, this))
+				.on("contextmenu.jstree", ".jstree-anchor", $.proxy(function (e, data) {
+						if (e.target.tagName.toLowerCase() === 'input') {
+							return;
+						}
+						e.preventDefault();
+						last_ts = e.ctrlKey ? +new Date() : 0;
+						if(data || cto) {
+							last_ts = (+new Date()) + 10000;
+						}
+						if(cto) {
+							clearTimeout(cto);
+						}
+						if(!this.is_loading(e.currentTarget)) {
+							this.show_contextmenu(e.currentTarget, e.pageX, e.pageY, e);
+						}
+					}, this))
+				.on("click.jstree", ".jstree-anchor", $.proxy(function (e) {
+						if(this._data.contextmenu.visible && (!last_ts || (+new Date()) - last_ts > 250)) { // work around safari & macOS ctrl+click
+							$.vakata.context.hide();
+						}
+						last_ts = 0;
+					}, this))
+				.on("touchstart.jstree", ".jstree-anchor", function (e) {
+						if(!e.originalEvent || !e.originalEvent.changedTouches || !e.originalEvent.changedTouches[0]) {
+							return;
+						}
+						ex = e.originalEvent.changedTouches[0].clientX;
+						ey = e.originalEvent.changedTouches[0].clientY;
+						cto = setTimeout(function () {
+							$(e.currentTarget).trigger('contextmenu', true);
+						}, 750);
+					})
+				.on('touchmove.vakata.jstree', function (e) {
+						if(cto && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0] && (Math.abs(ex - e.originalEvent.changedTouches[0].clientX) > 10 || Math.abs(ey - e.originalEvent.changedTouches[0].clientY) > 10)) {
+							clearTimeout(cto);
+							$.vakata.context.hide();
+						}
+					})
+				.on('touchend.vakata.jstree', function (e) {
+						if(cto) {
+							clearTimeout(cto);
+						}
+					});
+
+			/*!
+			if(!('oncontextmenu' in document.body) && ('ontouchstart' in document.body)) {
+				var el = null, tm = null;
+				this.element
+					.on("touchstart", ".jstree-anchor", function (e) {
+						el = e.currentTarget;
+						tm = +new Date();
+						$(document).one("touchend", function (e) {
+							e.target = document.elementFromPoint(e.originalEvent.targetTouches[0].pageX - window.pageXOffset, e.originalEvent.targetTouches[0].pageY - window.pageYOffset);
+							e.currentTarget = e.target;
+							tm = ((+(new Date())) - tm);
+							if(e.target === el && tm > 600 && tm < 1000) {
+								e.preventDefault();
+								$(el).trigger('contextmenu', e);
+							}
+							el = null;
+							tm = null;
+						});
+					});
+			}
+			*/
+			$(document).on("context_hide.vakata.jstree", $.proxy(function (e, data) {
+				this._data.contextmenu.visible = false;
+				$(data.reference).removeClass('jstree-context');
+			}, this));
+		};
+		this.teardown = function () {
+			if(this._data.contextmenu.visible) {
+				$.vakata.context.hide();
+			}
+			parent.teardown.call(this);
+		};
+
+		/**
+		 * prepare and show the context menu for a node
+		 * @name show_contextmenu(obj [, x, y])
+		 * @param {mixed} obj the node
+		 * @param {Number} x the x-coordinate relative to the document to show the menu at
+		 * @param {Number} y the y-coordinate relative to the document to show the menu at
+		 * @param {Object} e the event if available that triggered the contextmenu
+		 * @plugin contextmenu
+		 * @trigger show_contextmenu.jstree
+		 */
+		this.show_contextmenu = function (obj, x, y, e) {
+			obj = this.get_node(obj);
+			if(!obj || obj.id === $.jstree.root) { return false; }
+			var s = this.settings.contextmenu,
+				d = this.get_node(obj, true),
+				a = d.children(".jstree-anchor"),
+				o = false,
+				i = false;
+			if(s.show_at_node || x === undefined || y === undefined) {
+				o = a.offset();
+				x = o.left;
+				y = o.top + this._data.core.li_height;
+			}
+			if(this.settings.contextmenu.select_node && !this.is_selected(obj)) {
+				this.activate_node(obj, e);
+			}
+
+			i = s.items;
+			if($.isFunction(i)) {
+				i = i.call(this, obj, $.proxy(function (i) {
+					this._show_contextmenu(obj, x, y, i);
+				}, this));
+			}
+			if($.isPlainObject(i)) {
+				this._show_contextmenu(obj, x, y, i);
+			}
+		};
+		/**
+		 * show the prepared context menu for a node
+		 * @name _show_contextmenu(obj, x, y, i)
+		 * @param {mixed} obj the node
+		 * @param {Number} x the x-coordinate relative to the document to show the menu at
+		 * @param {Number} y the y-coordinate relative to the document to show the menu at
+		 * @param {Number} i the object of items to show
+		 * @plugin contextmenu
+		 * @trigger show_contextmenu.jstree
+		 * @private
+		 */
+		this._show_contextmenu = function (obj, x, y, i) {
+			var d = this.get_node(obj, true),
+				a = d.children(".jstree-anchor");
+			$(document).one("context_show.vakata.jstree", $.proxy(function (e, data) {
+				var cls = 'jstree-contextmenu jstree-' + this.get_theme() + '-contextmenu';
+				$(data.element).addClass(cls);
+				a.addClass('jstree-context');
+			}, this));
+			this._data.contextmenu.visible = true;
+			$.vakata.context.show(a, { 'x' : x, 'y' : y }, i);
+			/**
+			 * triggered when the contextmenu is shown for a node
+			 * @event
+			 * @name show_contextmenu.jstree
+			 * @param {Object} node the node
+			 * @param {Number} x the x-coordinate of the menu relative to the document
+			 * @param {Number} y the y-coordinate of the menu relative to the document
+			 * @plugin contextmenu
+			 */
+			this.trigger('show_contextmenu', { "node" : obj, "x" : x, "y" : y });
+		};
+	};
+
+	// contextmenu helper
+	(function ($) {
+		var right_to_left = false,
+			vakata_context = {
+				element		: false,
+				reference	: false,
+				position_x	: 0,
+				position_y	: 0,
+				items		: [],
+				html		: "",
+				is_visible	: false
+			};
+
+		$.vakata.context = {
+			settings : {
+				hide_onmouseleave	: 0,
+				icons				: true
+			},
+			_trigger : function (event_name) {
+				$(document).triggerHandler("context_" + event_name + ".vakata", {
+					"reference"	: vakata_context.reference,
+					"element"	: vakata_context.element,
+					"position"	: {
+						"x" : vakata_context.position_x,
+						"y" : vakata_context.position_y
+					}
+				});
+			},
+			_execute : function (i) {
+				i = vakata_context.items[i];
+				return i && (!i._disabled || ($.isFunction(i._disabled) && !i._disabled({ "item" : i, "reference" : vakata_context.reference, "element" : vakata_context.element }))) && i.action ? i.action.call(null, {
+							"item"		: i,
+							"reference"	: vakata_context.reference,
+							"element"	: vakata_context.element,
+							"position"	: {
+								"x" : vakata_context.position_x,
+								"y" : vakata_context.position_y
+							}
+						}) : false;
+			},
+			_parse : function (o, is_callback) {
+				if(!o) { return false; }
+				if(!is_callback) {
+					vakata_context.html		= "";
+					vakata_context.items	= [];
+				}
+				var str = "",
+					sep = false,
+					tmp;
+
+				if(is_callback) { str += "<"+"ul>"; }
+				$.each(o, function (i, val) {
+					if(!val) { return true; }
+					vakata_context.items.push(val);
+					if(!sep && val.separator_before) {
+						str += "<"+"li class='vakata-context-separator'><"+"a href='#' " + ($.vakata.context.settings.icons ? '' : 'style="margin-left:0px;"') + ">&#160;<"+"/a><"+"/li>";
+					}
+					sep = false;
+					str += "<"+"li class='" + (val._class || "") + (val._disabled === true || ($.isFunction(val._disabled) && val._disabled({ "item" : val, "reference" : vakata_context.reference, "element" : vakata_context.element })) ? " vakata-contextmenu-disabled " : "") + "' "+(val.shortcut?" data-shortcut='"+val.shortcut+"' ":'')+">";
+					str += "<"+"a href='#' rel='" + (vakata_context.items.length - 1) + "' " + (val.title ? "title='" + val.title + "'" : "") + ">";
+					if($.vakata.context.settings.icons) {
+						str += "<"+"i ";
+						if(val.icon) {
+							if(val.icon.indexOf("/") !== -1 || val.icon.indexOf(".") !== -1) { str += " style='background:url(\"" + val.icon + "\") center center no-repeat' "; }
+							else { str += " class='" + val.icon + "' "; }
+						}
+						str += "><"+"/i><"+"span class='vakata-contextmenu-sep'>&#160;<"+"/span>";
+					}
+					str += ($.isFunction(val.label) ? val.label({ "item" : i, "reference" : vakata_context.reference, "element" : vakata_context.element }) : val.label) + (val.shortcut?' <span class="vakata-contextmenu-shortcut vakata-contextmenu-shortcut-'+val.shortcut+'">'+ (val.shortcut_label || '') +'</span>':'') + "<"+"/a>";
+					if(val.submenu) {
+						tmp = $.vakata.context._parse(val.submenu, true);
+						if(tmp) { str += tmp; }
+					}
+					str += "<"+"/li>";
+					if(val.separator_after) {
+						str += "<"+"li class='vakata-context-separator'><"+"a href='#' " + ($.vakata.context.settings.icons ? '' : 'style="margin-left:0px;"') + ">&#160;<"+"/a><"+"/li>";
+						sep = true;
+					}
+				});
+				str  = str.replace(/<li class\='vakata-context-separator'\><\/li\>$/,"");
+				if(is_callback) { str += "</ul>"; }
+				/**
+				 * triggered on the document when the contextmenu is parsed (HTML is built)
+				 * @event
+				 * @plugin contextmenu
+				 * @name context_parse.vakata
+				 * @param {jQuery} reference the element that was right clicked
+				 * @param {jQuery} element the DOM element of the menu itself
+				 * @param {Object} position the x & y coordinates of the menu
+				 */
+				if(!is_callback) { vakata_context.html = str; $.vakata.context._trigger("parse"); }
+				return str.length > 10 ? str : false;
+			},
+			_show_submenu : function (o) {
+				o = $(o);
+				if(!o.length || !o.children("ul").length) { return; }
+				var e = o.children("ul"),
+					xl = o.offset().left,
+					x = xl + o.outerWidth(),
+					y = o.offset().top,
+					w = e.width(),
+					h = e.height(),
+					dw = $(window).width() + $(window).scrollLeft(),
+					dh = $(window).height() + $(window).scrollTop();
+				// може да се спести е една проверка - дали няма някой от класовете вече нагоре
+				if(right_to_left) {
+					o[x - (w + 10 + o.outerWidth()) < 0 ? "addClass" : "removeClass"]("vakata-context-left");
+				}
+				else {
+					o[x + w > dw  && xl > dw - x ? "addClass" : "removeClass"]("vakata-context-right");
+				}
+				if(y + h + 10 > dh) {
+					e.css("bottom","-1px");
+				}
+
+				//if does not fit - stick it to the side
+				if (o.hasClass('vakata-context-right')) {
+					if (xl < w) {
+						e.css("margin-right", xl - w);
+					}
+				} else {
+					if (dw - x < w) {
+						e.css("margin-left", dw - x - w);
+					}
+				}
+
+				e.show();
+			},
+			show : function (reference, position, data) {
+				var o, e, x, y, w, h, dw, dh, cond = true;
+				if(vakata_context.element && vakata_context.element.length) {
+					vakata_context.element.width('');
+				}
+				switch(cond) {
+					case (!position && !reference):
+						return false;
+					case (!!position && !!reference):
+						vakata_context.reference	= reference;
+						vakata_context.position_x	= position.x;
+						vakata_context.position_y	= position.y;
+						break;
+					case (!position && !!reference):
+						vakata_context.reference	= reference;
+						o = reference.offset();
+						vakata_context.position_x	= o.left + reference.outerHeight();
+						vakata_context.position_y	= o.top;
+						break;
+					case (!!position && !reference):
+						vakata_context.position_x	= position.x;
+						vakata_context.position_y	= position.y;
+						break;
+				}
+				if(!!reference && !data && $(reference).data('vakata_contextmenu')) {
+					data = $(reference).data('vakata_contextmenu');
+				}
+				if($.vakata.context._parse(data)) {
+					vakata_context.element.html(vakata_context.html);
+				}
+				if(vakata_context.items.length) {
+					vakata_context.element.appendTo("body");
+					e = vakata_context.element;
+					x = vakata_context.position_x;
+					y = vakata_context.position_y;
+					w = e.width();
+					h = e.height();
+					dw = $(window).width() + $(window).scrollLeft();
+					dh = $(window).height() + $(window).scrollTop();
+					if(right_to_left) {
+						x -= (e.outerWidth() - $(reference).outerWidth());
+						if(x < $(window).scrollLeft() + 20) {
+							x = $(window).scrollLeft() + 20;
+						}
+					}
+					if(x + w + 20 > dw) {
+						x = dw - (w + 20);
+					}
+					if(y + h + 20 > dh) {
+						y = dh - (h + 20);
+					}
+
+					vakata_context.element
+						.css({ "left" : x, "top" : y })
+						.show()
+						.find('a').first().focus().parent().addClass("vakata-context-hover");
+					vakata_context.is_visible = true;
+					/**
+					 * triggered on the document when the contextmenu is shown
+					 * @event
+					 * @plugin contextmenu
+					 * @name context_show.vakata
+					 * @param {jQuery} reference the element that was right clicked
+					 * @param {jQuery} element the DOM element of the menu itself
+					 * @param {Object} position the x & y coordinates of the menu
+					 */
+					$.vakata.context._trigger("show");
+				}
+			},
+			hide : function () {
+				if(vakata_context.is_visible) {
+					vakata_context.element.hide().find("ul").hide().end().find(':focus').blur().end().detach();
+					vakata_context.is_visible = false;
+					/**
+					 * triggered on the document when the contextmenu is hidden
+					 * @event
+					 * @plugin contextmenu
+					 * @name context_hide.vakata
+					 * @param {jQuery} reference the element that was right clicked
+					 * @param {jQuery} element the DOM element of the menu itself
+					 * @param {Object} position the x & y coordinates of the menu
+					 */
+					$.vakata.context._trigger("hide");
+				}
+			}
+		};
+		$(function () {
+			right_to_left = $("body").css("direction") === "rtl";
+			var to = false;
+
+			vakata_context.element = $("<ul class='vakata-context'></ul>");
+			vakata_context.element
+				.on("mouseenter", "li", function (e) {
+					e.stopImmediatePropagation();
+
+					if($.contains(this, e.relatedTarget)) {
+						// премахнато заради delegate mouseleave по-долу
+						// $(this).find(".vakata-context-hover").removeClass("vakata-context-hover");
+						return;
+					}
+
+					if(to) { clearTimeout(to); }
+					vakata_context.element.find(".vakata-context-hover").removeClass("vakata-context-hover").end();
+
+					$(this)
+						.siblings().find("ul").hide().end().end()
+						.parentsUntil(".vakata-context", "li").addBack().addClass("vakata-context-hover");
+					$.vakata.context._show_submenu(this);
+				})
+				// тестово - дали не натоварва?
+				.on("mouseleave", "li", function (e) {
+					if($.contains(this, e.relatedTarget)) { return; }
+					$(this).find(".vakata-context-hover").addBack().removeClass("vakata-context-hover");
+				})
+				.on("mouseleave", function (e) {
+					$(this).find(".vakata-context-hover").removeClass("vakata-context-hover");
+					if($.vakata.context.settings.hide_onmouseleave) {
+						to = setTimeout(
+							(function (t) {
+								return function () { $.vakata.context.hide(); };
+							}(this)), $.vakata.context.settings.hide_onmouseleave);
+					}
+				})
+				.on("click", "a", function (e) {
+					e.preventDefault();
+				//})
+				//.on("mouseup", "a", function (e) {
+					if(!$(this).blur().parent().hasClass("vakata-context-disabled") && $.vakata.context._execute($(this).attr("rel")) !== false) {
+						$.vakata.context.hide();
+					}
+				})
+				.on('keydown', 'a', function (e) {
+						var o = null;
+						switch(e.which) {
+							case 13:
+							case 32:
+								e.type = "click";
+								e.preventDefault();
+								$(e.currentTarget).trigger(e);
+								break;
+							case 37:
+								if(vakata_context.is_visible) {
+									vakata_context.element.find(".vakata-context-hover").last().closest("li").first().find("ul").hide().find(".vakata-context-hover").removeClass("vakata-context-hover").end().end().children('a').focus();
+									e.stopImmediatePropagation();
+									e.preventDefault();
+								}
+								break;
+							case 38:
+								if(vakata_context.is_visible) {
+									o = vakata_context.element.find("ul:visible").addBack().last().children(".vakata-context-hover").removeClass("vakata-context-hover").prevAll("li:not(.vakata-context-separator)").first();
+									if(!o.length) { o = vakata_context.element.find("ul:visible").addBack().last().children("li:not(.vakata-context-separator)").last(); }
+									o.addClass("vakata-context-hover").children('a').focus();
+									e.stopImmediatePropagation();
+									e.preventDefault();
+								}
+								break;
+							case 39:
+								if(vakata_context.is_visible) {
+									vakata_context.element.find(".vakata-context-hover").last().children("ul").show().children("li:not(.vakata-context-separator)").removeClass("vakata-context-hover").first().addClass("vakata-context-hover").children('a').focus();
+									e.stopImmediatePropagation();
+									e.preventDefault();
+								}
+								break;
+							case 40:
+								if(vakata_context.is_visible) {
+									o = vakata_context.element.find("ul:visible").addBack().last().children(".vakata-context-hover").removeClass("vakata-context-hover").nextAll("li:not(.vakata-context-separator)").first();
+									if(!o.length) { o = vakata_context.element.find("ul:visible").addBack().last().children("li:not(.vakata-context-separator)").first(); }
+									o.addClass("vakata-context-hover").children('a').focus();
+									e.stopImmediatePropagation();
+									e.preventDefault();
+								}
+								break;
+							case 27:
+								$.vakata.context.hide();
+								e.preventDefault();
+								break;
+							default:
+								//console.log(e.which);
+								break;
+						}
+					})
+				.on('keydown', function (e) {
+					e.preventDefault();
+					var a = vakata_context.element.find('.vakata-contextmenu-shortcut-' + e.which).parent();
+					if(a.parent().not('.vakata-context-disabled')) {
+						a.click();
+					}
+				});
+
+			$(document)
+				.on("mousedown.vakata.jstree", function (e) {
+					if(vakata_context.is_visible && vakata_context.element[0] !== e.target  && !$.contains(vakata_context.element[0], e.target)) {
+						$.vakata.context.hide();
+					}
+				})
+				.on("context_show.vakata.jstree", function (e, data) {
+					vakata_context.element.find("li:has(ul)").children("a").addClass("vakata-context-parent");
+					if(right_to_left) {
+						vakata_context.element.addClass("vakata-context-rtl").css("direction", "rtl");
+					}
+					// also apply a RTL class?
+					vakata_context.element.find("ul").hide().end();
+				});
+		});
+	}($));
+	// $.jstree.defaults.plugins.push("contextmenu");
+}));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vakata-jstree-3.3.5/src/jstree.dnd.js	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,657 @@
+/**
+ * ### Drag'n'drop plugin
+ *
+ * Enables dragging and dropping of nodes in the tree, resulting in a move or copy operations.
+ */
+/*globals jQuery, define, exports, require, document */
+(function (factory) {
+	"use strict";
+	if (typeof define === 'function' && define.amd) {
+		define('jstree.dnd', ['jquery','jstree'], factory);
+	}
+	else if(typeof exports === 'object') {
+		factory(require('jquery'), require('jstree'));
+	}
+	else {
+		factory(jQuery, jQuery.jstree);
+	}
+}(function ($, jstree, undefined) {
+	"use strict";
+
+	if($.jstree.plugins.dnd) { return; }
+
+	/**
+	 * stores all defaults for the drag'n'drop plugin
+	 * @name $.jstree.defaults.dnd
+	 * @plugin dnd
+	 */
+	$.jstree.defaults.dnd = {
+		/**
+		 * a boolean indicating if a copy should be possible while dragging (by pressint the meta key or Ctrl). Defaults to `true`.
+		 * @name $.jstree.defaults.dnd.copy
+		 * @plugin dnd
+		 */
+		copy : true,
+		/**
+		 * a number indicating how long a node should remain hovered while dragging to be opened. Defaults to `500`.
+		 * @name $.jstree.defaults.dnd.open_timeout
+		 * @plugin dnd
+		 */
+		open_timeout : 500,
+		/**
+		 * a function invoked each time a node is about to be dragged, invoked in the tree's scope and receives the nodes about to be dragged as an argument (array) and the event that started the drag - return `false` to prevent dragging
+		 * @name $.jstree.defaults.dnd.is_draggable
+		 * @plugin dnd
+		 */
+		is_draggable : true,
+		/**
+		 * a boolean indicating if checks should constantly be made while the user is dragging the node (as opposed to checking only on drop), default is `true`
+		 * @name $.jstree.defaults.dnd.check_while_dragging
+		 * @plugin dnd
+		 */
+		check_while_dragging : true,
+		/**
+		 * a boolean indicating if nodes from this tree should only be copied with dnd (as opposed to moved), default is `false`
+		 * @name $.jstree.defaults.dnd.always_copy
+		 * @plugin dnd
+		 */
+		always_copy : false,
+		/**
+		 * when dropping a node "inside", this setting indicates the position the node should go to - it can be an integer or a string: "first" (same as 0) or "last", default is `0`
+		 * @name $.jstree.defaults.dnd.inside_pos
+		 * @plugin dnd
+		 */
+		inside_pos : 0,
+		/**
+		 * when starting the drag on a node that is selected this setting controls if all selected nodes are dragged or only the single node, default is `true`, which means all selected nodes are dragged when the drag is started on a selected node
+		 * @name $.jstree.defaults.dnd.drag_selection
+		 * @plugin dnd
+		 */
+		drag_selection : true,
+		/**
+		 * controls whether dnd works on touch devices. If left as boolean true dnd will work the same as in desktop browsers, which in some cases may impair scrolling. If set to boolean false dnd will not work on touch devices. There is a special third option - string "selected" which means only selected nodes can be dragged on touch devices.
+		 * @name $.jstree.defaults.dnd.touch
+		 * @plugin dnd
+		 */
+		touch : true,
+		/**
+		 * controls whether items can be dropped anywhere on the node, not just on the anchor, by default only the node anchor is a valid drop target. Works best with the wholerow plugin. If enabled on mobile depending on the interface it might be hard for the user to cancel the drop, since the whole tree container will be a valid drop target.
+		 * @name $.jstree.defaults.dnd.large_drop_target
+		 * @plugin dnd
+		 */
+		large_drop_target : false,
+		/**
+		 * controls whether a drag can be initiated from any part of the node and not just the text/icon part, works best with the wholerow plugin. Keep in mind it can cause problems with tree scrolling on mobile depending on the interface - in that case set the touch option to "selected".
+		 * @name $.jstree.defaults.dnd.large_drag_target
+		 * @plugin dnd
+		 */
+		large_drag_target : false,
+		/**
+		 * controls whether use HTML5 dnd api instead of classical. That will allow better integration of dnd events with other HTML5 controls.
+		 * @reference http://caniuse.com/#feat=dragndrop
+		 * @name $.jstree.defaults.dnd.use_html5
+		 * @plugin dnd
+		 */
+		use_html5: false
+	};
+	var drg, elm;
+	// TODO: now check works by checking for each node individually, how about max_children, unique, etc?
+	$.jstree.plugins.dnd = function (options, parent) {
+		this.init = function (el, options) {
+			parent.init.call(this, el, options);
+			this.settings.dnd.use_html5 = this.settings.dnd.use_html5 && ('draggable' in document.createElement('span'));
+		};
+		this.bind = function () {
+			parent.bind.call(this);
+
+			this.element
+				.on(this.settings.dnd.use_html5 ? 'dragstart.jstree' : 'mousedown.jstree touchstart.jstree', this.settings.dnd.large_drag_target ? '.jstree-node' : '.jstree-anchor', $.proxy(function (e) {
+						if(this.settings.dnd.large_drag_target && $(e.target).closest('.jstree-node')[0] !== e.currentTarget) {
+							return true;
+						}
+						if(e.type === "touchstart" && (!this.settings.dnd.touch || (this.settings.dnd.touch === 'selected' && !$(e.currentTarget).closest('.jstree-node').children('.jstree-anchor').hasClass('jstree-clicked')))) {
+							return true;
+						}
+						var obj = this.get_node(e.target),
+							mlt = this.is_selected(obj) && this.settings.dnd.drag_selection ? this.get_top_selected().length : 1,
+							txt = (mlt > 1 ? mlt + ' ' + this.get_string('nodes') : this.get_text(e.currentTarget));
+						if(this.settings.core.force_text) {
+							txt = $.vakata.html.escape(txt);
+						}
+						if(obj && obj.id && obj.id !== $.jstree.root && (e.which === 1 || e.type === "touchstart" || e.type === "dragstart") &&
+							(this.settings.dnd.is_draggable === true || ($.isFunction(this.settings.dnd.is_draggable) && this.settings.dnd.is_draggable.call(this, (mlt > 1 ? this.get_top_selected(true) : [obj]), e)))
+						) {
+							drg = { 'jstree' : true, 'origin' : this, 'obj' : this.get_node(obj,true), 'nodes' : mlt > 1 ? this.get_top_selected() : [obj.id] };
+							elm = e.currentTarget;
+							if (this.settings.dnd.use_html5) {
+								$.vakata.dnd._trigger('start', e, { 'helper': $(), 'element': elm, 'data': drg });
+							} else {
+								this.element.trigger('mousedown.jstree');
+								return $.vakata.dnd.start(e, drg, '<div id="jstree-dnd" class="jstree-' + this.get_theme() + ' jstree-' + this.get_theme() + '-' + this.get_theme_variant() + ' ' + ( this.settings.core.themes.responsive ? ' jstree-dnd-responsive' : '' ) + '"><i class="jstree-icon jstree-er"></i>' + txt + '<ins class="jstree-copy" style="display:none;">+</ins></div>');
+							}
+						}
+					}, this));
+			if (this.settings.dnd.use_html5) {
+				this.element
+					.on('dragover.jstree', function (e) {
+							e.preventDefault();
+							$.vakata.dnd._trigger('move', e, { 'helper': $(), 'element': elm, 'data': drg });
+							return false;
+						})
+					//.on('dragenter.jstree', this.settings.dnd.large_drop_target ? '.jstree-node' : '.jstree-anchor', $.proxy(function (e) {
+					//		e.preventDefault();
+					//		$.vakata.dnd._trigger('move', e, { 'helper': $(), 'element': elm, 'data': drg });
+					//		return false;
+					//	}, this))
+					.on('drop.jstree', $.proxy(function (e) {
+							e.preventDefault();
+							$.vakata.dnd._trigger('stop', e, { 'helper': $(), 'element': elm, 'data': drg });
+							return false;
+						}, this));
+			}
+		};
+		this.redraw_node = function(obj, deep, callback, force_render) {
+			obj = parent.redraw_node.apply(this, arguments);
+			if (obj && this.settings.dnd.use_html5) {
+				if (this.settings.dnd.large_drag_target) {
+					obj.setAttribute('draggable', true);
+				} else {
+					var i, j, tmp = null;
+					for(i = 0, j = obj.childNodes.length; i < j; i++) {
+						if(obj.childNodes[i] && obj.childNodes[i].className && obj.childNodes[i].className.indexOf("jstree-anchor") !== -1) {
+							tmp = obj.childNodes[i];
+							break;
+						}
+					}
+					if(tmp) {
+						tmp.setAttribute('draggable', true);
+					}
+				}
+			}
+			return obj;
+		};
+	};
+
+	$(function() {
+		// bind only once for all instances
+		var lastmv = false,
+			laster = false,
+			lastev = false,
+			opento = false,
+			marker = $('<div id="jstree-marker">&#160;</div>').hide(); //.appendTo('body');
+
+		$(document)
+			.on('dnd_start.vakata.jstree', function (e, data) {
+				lastmv = false;
+				lastev = false;
+				if(!data || !data.data || !data.data.jstree) { return; }
+				marker.appendTo('body'); //.show();
+			})
+			.on('dnd_move.vakata.jstree', function (e, data) {
+				var isDifferentNode = data.event.target !== lastev.target;
+				if(opento) {
+					if (!data.event || data.event.type !== 'dragover' || isDifferentNode) {
+						clearTimeout(opento);
+					}
+				}
+				if(!data || !data.data || !data.data.jstree) { return; }
+
+				// if we are hovering the marker image do nothing (can happen on "inside" drags)
+				if(data.event.target.id && data.event.target.id === 'jstree-marker') {
+					return;
+				}
+				lastev = data.event;
+
+				var ins = $.jstree.reference(data.event.target),
+					ref = false,
+					off = false,
+					rel = false,
+					tmp, l, t, h, p, i, o, ok, t1, t2, op, ps, pr, ip, tm, is_copy, pn;
+				// if we are over an instance
+				if(ins && ins._data && ins._data.dnd) {
+					marker.attr('class', 'jstree-' + ins.get_theme() + ( ins.settings.core.themes.responsive ? ' jstree-dnd-responsive' : '' ));
+					is_copy = data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (data.event.metaKey || data.event.ctrlKey)));
+					data.helper
+						.children().attr('class', 'jstree-' + ins.get_theme() + ' jstree-' + ins.get_theme() + '-' + ins.get_theme_variant() + ' ' + ( ins.settings.core.themes.responsive ? ' jstree-dnd-responsive' : '' ))
+						.find('.jstree-copy').first()[ is_copy ? 'show' : 'hide' ]();
+
+					// if are hovering the container itself add a new root node
+					//console.log(data.event);
+					if( (data.event.target === ins.element[0] || data.event.target === ins.get_container_ul()[0]) && ins.get_container_ul().children().length === 0) {
+						ok = true;
+						for(t1 = 0, t2 = data.data.nodes.length; t1 < t2; t1++) {
+							ok = ok && ins.check( (data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (data.event.metaKey || data.event.ctrlKey)) ) ? "copy_node" : "move_node"), (data.data.origin && data.data.origin !== ins ? data.data.origin.get_node(data.data.nodes[t1]) : data.data.nodes[t1]), $.jstree.root, 'last', { 'dnd' : true, 'ref' : ins.get_node($.jstree.root), 'pos' : 'i', 'origin' : data.data.origin, 'is_multi' : (data.data.origin && data.data.origin !== ins), 'is_foreign' : (!data.data.origin) });
+							if(!ok) { break; }
+						}
+						if(ok) {
+							lastmv = { 'ins' : ins, 'par' : $.jstree.root, 'pos' : 'last' };
+							marker.hide();
+							data.helper.find('.jstree-icon').first().removeClass('jstree-er').addClass('jstree-ok');
+							if (data.event.originalEvent && data.event.originalEvent.dataTransfer) {
+								data.event.originalEvent.dataTransfer.dropEffect = is_copy ? 'copy' : 'move';
+							}
+							return;
+						}
+					}
+					else {
+						// if we are hovering a tree node
+						ref = ins.settings.dnd.large_drop_target ? $(data.event.target).closest('.jstree-node').children('.jstree-anchor') : $(data.event.target).closest('.jstree-anchor');
+						if(ref && ref.length && ref.parent().is('.jstree-closed, .jstree-open, .jstree-leaf')) {
+							off = ref.offset();
+							rel = (data.event.pageY !== undefined ? data.event.pageY : data.event.originalEvent.pageY) - off.top;
+							h = ref.outerHeight();
+							if(rel < h / 3) {
+								o = ['b', 'i', 'a'];
+							}
+							else if(rel > h - h / 3) {
+								o = ['a', 'i', 'b'];
+							}
+							else {
+								o = rel > h / 2 ? ['i', 'a', 'b'] : ['i', 'b', 'a'];
+							}
+							$.each(o, function (j, v) {
+								switch(v) {
+									case 'b':
+										l = off.left - 6;
+										t = off.top;
+										p = ins.get_parent(ref);
+										i = ref.parent().index();
+										break;
+									case 'i':
+										ip = ins.settings.dnd.inside_pos;
+										tm = ins.get_node(ref.parent());
+										l = off.left - 2;
+										t = off.top + h / 2 + 1;
+										p = tm.id;
+										i = ip === 'first' ? 0 : (ip === 'last' ? tm.children.length : Math.min(ip, tm.children.length));
+										break;
+									case 'a':
+										l = off.left - 6;
+										t = off.top + h;
+										p = ins.get_parent(ref);
+										i = ref.parent().index() + 1;
+										break;
+								}
+								ok = true;
+								for(t1 = 0, t2 = data.data.nodes.length; t1 < t2; t1++) {
+									op = data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (data.event.metaKey || data.event.ctrlKey))) ? "copy_node" : "move_node";
+									ps = i;
+									if(op === "move_node" && v === 'a' && (data.data.origin && data.data.origin === ins) && p === ins.get_parent(data.data.nodes[t1])) {
+										pr = ins.get_node(p);
+										if(ps > $.inArray(data.data.nodes[t1], pr.children)) {
+											ps -= 1;
+										}
+									}
+									ok = ok && ( (ins && ins.settings && ins.settings.dnd && ins.settings.dnd.check_while_dragging === false) || ins.check(op, (data.data.origin && data.data.origin !== ins ? data.data.origin.get_node(data.data.nodes[t1]) : data.data.nodes[t1]), p, ps, { 'dnd' : true, 'ref' : ins.get_node(ref.parent()), 'pos' : v, 'origin' : data.data.origin, 'is_multi' : (data.data.origin && data.data.origin !== ins), 'is_foreign' : (!data.data.origin) }) );
+									if(!ok) {
+										if(ins && ins.last_error) { laster = ins.last_error(); }
+										break;
+									}
+								}
+								if(v === 'i' && ref.parent().is('.jstree-closed') && ins.settings.dnd.open_timeout) {
+									if (!data.event || data.event.type !== 'dragover' || isDifferentNode) {
+										if (opento) { clearTimeout(opento); }
+										opento = setTimeout((function (x, z) { return function () { x.open_node(z); }; }(ins, ref)), ins.settings.dnd.open_timeout);
+									}
+								}
+								if(ok) {
+									pn = ins.get_node(p, true);
+									if (!pn.hasClass('.jstree-dnd-parent')) {
+										$('.jstree-dnd-parent').removeClass('jstree-dnd-parent');
+										pn.addClass('jstree-dnd-parent');
+									}
+									lastmv = { 'ins' : ins, 'par' : p, 'pos' : v === 'i' && ip === 'last' && i === 0 && !ins.is_loaded(tm) ? 'last' : i };
+									marker.css({ 'left' : l + 'px', 'top' : t + 'px' }).show();
+									data.helper.find('.jstree-icon').first().removeClass('jstree-er').addClass('jstree-ok');
+									if (data.event.originalEvent && data.event.originalEvent.dataTransfer) {
+										data.event.originalEvent.dataTransfer.dropEffect = is_copy ? 'copy' : 'move';
+									}
+									laster = {};
+									o = true;
+									return false;
+								}
+							});
+							if(o === true) { return; }
+						}
+					}
+				}
+				$('.jstree-dnd-parent').removeClass('jstree-dnd-parent');
+				lastmv = false;
+				data.helper.find('.jstree-icon').removeClass('jstree-ok').addClass('jstree-er');
+				if (data.event.originalEvent && data.event.originalEvent.dataTransfer) {
+					data.event.originalEvent.dataTransfer.dropEffect = 'none';
+				}
+				marker.hide();
+			})
+			.on('dnd_scroll.vakata.jstree', function (e, data) {
+				if(!data || !data.data || !data.data.jstree) { return; }
+				marker.hide();
+				lastmv = false;
+				lastev = false;
+				data.helper.find('.jstree-icon').first().removeClass('jstree-ok').addClass('jstree-er');
+			})
+			.on('dnd_stop.vakata.jstree', function (e, data) {
+				$('.jstree-dnd-parent').removeClass('jstree-dnd-parent');
+				if(opento) { clearTimeout(opento); }
+				if(!data || !data.data || !data.data.jstree) { return; }
+				marker.hide().detach();
+				var i, j, nodes = [];
+				if(lastmv) {
+					for(i = 0, j = data.data.nodes.length; i < j; i++) {
+						nodes[i] = data.data.origin ? data.data.origin.get_node(data.data.nodes[i]) : data.data.nodes[i];
+					}
+					lastmv.ins[ data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (data.event.metaKey || data.event.ctrlKey))) ? 'copy_node' : 'move_node' ](nodes, lastmv.par, lastmv.pos, false, false, false, data.data.origin);
+				}
+				else {
+					i = $(data.event.target).closest('.jstree');
+					if(i.length && laster && laster.error && laster.error === 'check') {
+						i = i.jstree(true);
+						if(i) {
+							i.settings.core.error.call(this, laster);
+						}
+					}
+				}
+				lastev = false;
+				lastmv = false;
+			})
+			.on('keyup.jstree keydown.jstree', function (e, data) {
+				data = $.vakata.dnd._get();
+				if(data && data.data && data.data.jstree) {
+					if (e.type === "keyup" && e.which === 27) {
+						if (opento) { clearTimeout(opento); }
+						lastmv = false;
+						laster = false;
+						lastev = false;
+						opento = false;
+						marker.hide().detach();
+						$.vakata.dnd._clean();
+					} else {
+						data.helper.find('.jstree-copy').first()[ data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (e.metaKey || e.ctrlKey))) ? 'show' : 'hide' ]();
+						if(lastev) {
+							lastev.metaKey = e.metaKey;
+							lastev.ctrlKey = e.ctrlKey;
+							$.vakata.dnd._trigger('move', lastev);
+						}
+					}
+				}
+			});
+	});
+
+	// helpers
+	(function ($) {
+		$.vakata.html = {
+			div : $('<div />'),
+			escape : function (str) {
+				return $.vakata.html.div.text(str).html();
+			},
+			strip : function (str) {
+				return $.vakata.html.div.empty().append($.parseHTML(str)).text();
+			}
+		};
+		// private variable
+		var vakata_dnd = {
+			element	: false,
+			target	: false,
+			is_down	: false,
+			is_drag	: false,
+			helper	: false,
+			helper_w: 0,
+			data	: false,
+			init_x	: 0,
+			init_y	: 0,
+			scroll_l: 0,
+			scroll_t: 0,
+			scroll_e: false,
+			scroll_i: false,
+			is_touch: false
+		};
+		$.vakata.dnd = {
+			settings : {
+				scroll_speed		: 10,
+				scroll_proximity	: 20,
+				helper_left			: 5,
+				helper_top			: 10,
+				threshold			: 5,
+				threshold_touch		: 10
+			},
+			_trigger : function (event_name, e, data) {
+				if (data === undefined) {
+					data = $.vakata.dnd._get();
+				}
+				data.event = e;
+				$(document).triggerHandler("dnd_" + event_name + ".vakata", data);
+			},
+			_get : function () {
+				return {
+					"data"		: vakata_dnd.data,
+					"element"	: vakata_dnd.element,
+					"helper"	: vakata_dnd.helper
+				};
+			},
+			_clean : function () {
+				if(vakata_dnd.helper) { vakata_dnd.helper.remove(); }
+				if(vakata_dnd.scroll_i) { clearInterval(vakata_dnd.scroll_i); vakata_dnd.scroll_i = false; }
+				vakata_dnd = {
+					element	: false,
+					target	: false,
+					is_down	: false,
+					is_drag	: false,
+					helper	: false,
+					helper_w: 0,
+					data	: false,
+					init_x	: 0,
+					init_y	: 0,
+					scroll_l: 0,
+					scroll_t: 0,
+					scroll_e: false,
+					scroll_i: false,
+					is_touch: false
+				};
+				$(document).off("mousemove.vakata.jstree touchmove.vakata.jstree", $.vakata.dnd.drag);
+				$(document).off("mouseup.vakata.jstree touchend.vakata.jstree", $.vakata.dnd.stop);
+			},
+			_scroll : function (init_only) {
+				if(!vakata_dnd.scroll_e || (!vakata_dnd.scroll_l && !vakata_dnd.scroll_t)) {
+					if(vakata_dnd.scroll_i) { clearInterval(vakata_dnd.scroll_i); vakata_dnd.scroll_i = false; }
+					return false;
+				}
+				if(!vakata_dnd.scroll_i) {
+					vakata_dnd.scroll_i = setInterval($.vakata.dnd._scroll, 100);
+					return false;
+				}
+				if(init_only === true) { return false; }
+
+				var i = vakata_dnd.scroll_e.scrollTop(),
+					j = vakata_dnd.scroll_e.scrollLeft();
+				vakata_dnd.scroll_e.scrollTop(i + vakata_dnd.scroll_t * $.vakata.dnd.settings.scroll_speed);
+				vakata_dnd.scroll_e.scrollLeft(j + vakata_dnd.scroll_l * $.vakata.dnd.settings.scroll_speed);
+				if(i !== vakata_dnd.scroll_e.scrollTop() || j !== vakata_dnd.scroll_e.scrollLeft()) {
+					/**
+					 * triggered on the document when a drag causes an element to scroll
+					 * @event
+					 * @plugin dnd
+					 * @name dnd_scroll.vakata
+					 * @param {Mixed} data any data supplied with the call to $.vakata.dnd.start
+					 * @param {DOM} element the DOM element being dragged
+					 * @param {jQuery} helper the helper shown next to the mouse
+					 * @param {jQuery} event the element that is scrolling
+					 */
+					$.vakata.dnd._trigger("scroll", vakata_dnd.scroll_e);
+				}
+			},
+			start : function (e, data, html) {
+				if(e.type === "touchstart" && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0]) {
+					e.pageX = e.originalEvent.changedTouches[0].pageX;
+					e.pageY = e.originalEvent.changedTouches[0].pageY;
+					e.target = document.elementFromPoint(e.originalEvent.changedTouches[0].pageX - window.pageXOffset, e.originalEvent.changedTouches[0].pageY - window.pageYOffset);
+				}
+				if(vakata_dnd.is_drag) { $.vakata.dnd.stop({}); }
+				try {
+					e.currentTarget.unselectable = "on";
+					e.currentTarget.onselectstart = function() { return false; };
+					if(e.currentTarget.style) {
+						e.currentTarget.style.touchAction = "none";
+						e.currentTarget.style.msTouchAction = "none";
+						e.currentTarget.style.MozUserSelect = "none";
+					}
+				} catch(ignore) { }
+				vakata_dnd.init_x	= e.pageX;
+				vakata_dnd.init_y	= e.pageY;
+				vakata_dnd.data		= data;
+				vakata_dnd.is_down	= true;
+				vakata_dnd.element	= e.currentTarget;
+				vakata_dnd.target	= e.target;
+				vakata_dnd.is_touch	= e.type === "touchstart";
+				if(html !== false) {
+					vakata_dnd.helper = $("<div id='vakata-dnd'></div>").html(html).css({
+						"display"		: "block",
+						"margin"		: "0",
+						"padding"		: "0",
+						"position"		: "absolute",
+						"top"			: "-2000px",
+						"lineHeight"	: "16px",
+						"zIndex"		: "10000"
+					});
+				}
+				$(document).on("mousemove.vakata.jstree touchmove.vakata.jstree", $.vakata.dnd.drag);
+				$(document).on("mouseup.vakata.jstree touchend.vakata.jstree", $.vakata.dnd.stop);
+				return false;
+			},
+			drag : function (e) {
+				if(e.type === "touchmove" && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0]) {
+					e.pageX = e.originalEvent.changedTouches[0].pageX;
+					e.pageY = e.originalEvent.changedTouches[0].pageY;
+					e.target = document.elementFromPoint(e.originalEvent.changedTouches[0].pageX - window.pageXOffset, e.originalEvent.changedTouches[0].pageY - window.pageYOffset);
+				}
+				if(!vakata_dnd.is_down) { return; }
+				if(!vakata_dnd.is_drag) {
+					if(
+						Math.abs(e.pageX - vakata_dnd.init_x) > (vakata_dnd.is_touch ? $.vakata.dnd.settings.threshold_touch : $.vakata.dnd.settings.threshold) ||
+						Math.abs(e.pageY - vakata_dnd.init_y) > (vakata_dnd.is_touch ? $.vakata.dnd.settings.threshold_touch : $.vakata.dnd.settings.threshold)
+					) {
+						if(vakata_dnd.helper) {
+							vakata_dnd.helper.appendTo("body");
+							vakata_dnd.helper_w = vakata_dnd.helper.outerWidth();
+						}
+						vakata_dnd.is_drag = true;
+						$(vakata_dnd.target).one('click.vakata', false);
+						/**
+						 * triggered on the document when a drag starts
+						 * @event
+						 * @plugin dnd
+						 * @name dnd_start.vakata
+						 * @param {Mixed} data any data supplied with the call to $.vakata.dnd.start
+						 * @param {DOM} element the DOM element being dragged
+						 * @param {jQuery} helper the helper shown next to the mouse
+						 * @param {Object} event the event that caused the start (probably mousemove)
+						 */
+						$.vakata.dnd._trigger("start", e);
+					}
+					else { return; }
+				}
+
+				var d  = false, w  = false,
+					dh = false, wh = false,
+					dw = false, ww = false,
+					dt = false, dl = false,
+					ht = false, hl = false;
+
+				vakata_dnd.scroll_t = 0;
+				vakata_dnd.scroll_l = 0;
+				vakata_dnd.scroll_e = false;
+				$($(e.target).parentsUntil("body").addBack().get().reverse())
+					.filter(function () {
+						return	(/^auto|scroll$/).test($(this).css("overflow")) &&
+								(this.scrollHeight > this.offsetHeight || this.scrollWidth > this.offsetWidth);
+					})
+					.each(function () {
+						var t = $(this), o = t.offset();
+						if(this.scrollHeight > this.offsetHeight) {
+							if(o.top + t.height() - e.pageY < $.vakata.dnd.settings.scroll_proximity)	{ vakata_dnd.scroll_t = 1; }
+							if(e.pageY - o.top < $.vakata.dnd.settings.scroll_proximity)				{ vakata_dnd.scroll_t = -1; }
+						}
+						if(this.scrollWidth > this.offsetWidth) {
+							if(o.left + t.width() - e.pageX < $.vakata.dnd.settings.scroll_proximity)	{ vakata_dnd.scroll_l = 1; }
+							if(e.pageX - o.left < $.vakata.dnd.settings.scroll_proximity)				{ vakata_dnd.scroll_l = -1; }
+						}
+						if(vakata_dnd.scroll_t || vakata_dnd.scroll_l) {
+							vakata_dnd.scroll_e = $(this);
+							return false;
+						}
+					});
+
+				if(!vakata_dnd.scroll_e) {
+					d  = $(document); w = $(window);
+					dh = d.height(); wh = w.height();
+					dw = d.width(); ww = w.width();
+					dt = d.scrollTop(); dl = d.scrollLeft();
+					if(dh > wh && e.pageY - dt < $.vakata.dnd.settings.scroll_proximity)		{ vakata_dnd.scroll_t = -1;  }
+					if(dh > wh && wh - (e.pageY - dt) < $.vakata.dnd.settings.scroll_proximity)	{ vakata_dnd.scroll_t = 1; }
+					if(dw > ww && e.pageX - dl < $.vakata.dnd.settings.scroll_proximity)		{ vakata_dnd.scroll_l = -1; }
+					if(dw > ww && ww - (e.pageX - dl) < $.vakata.dnd.settings.scroll_proximity)	{ vakata_dnd.scroll_l = 1; }
+					if(vakata_dnd.scroll_t || vakata_dnd.scroll_l) {
+						vakata_dnd.scroll_e = d;
+					}
+				}
+				if(vakata_dnd.scroll_e) { $.vakata.dnd._scroll(true); }
+
+				if(vakata_dnd.helper) {
+					ht = parseInt(e.pageY + $.vakata.dnd.settings.helper_top, 10);
+					hl = parseInt(e.pageX + $.vakata.dnd.settings.helper_left, 10);
+					if(dh && ht + 25 > dh) { ht = dh - 50; }
+					if(dw && hl + vakata_dnd.helper_w > dw) { hl = dw - (vakata_dnd.helper_w + 2); }
+					vakata_dnd.helper.css({
+						left	: hl + "px",
+						top		: ht + "px"
+					});
+				}
+				/**
+				 * triggered on the document when a drag is in progress
+				 * @event
+				 * @plugin dnd
+				 * @name dnd_move.vakata
+				 * @param {Mixed} data any data supplied with the call to $.vakata.dnd.start
+				 * @param {DOM} element the DOM element being dragged
+				 * @param {jQuery} helper the helper shown next to the mouse
+				 * @param {Object} event the event that caused this to trigger (most likely mousemove)
+				 */
+				$.vakata.dnd._trigger("move", e);
+				return false;
+			},
+			stop : function (e) {
+				if(e.type === "touchend" && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0]) {
+					e.pageX = e.originalEvent.changedTouches[0].pageX;
+					e.pageY = e.originalEvent.changedTouches[0].pageY;
+					e.target = document.elementFromPoint(e.originalEvent.changedTouches[0].pageX - window.pageXOffset, e.originalEvent.changedTouches[0].pageY - window.pageYOffset);
+				}
+				if(vakata_dnd.is_drag) {
+					/**
+					 * triggered on the document when a drag stops (the dragged element is dropped)
+					 * @event
+					 * @plugin dnd
+					 * @name dnd_stop.vakata
+					 * @param {Mixed} data any data supplied with the call to $.vakata.dnd.start
+					 * @param {DOM} element the DOM element being dragged
+					 * @param {jQuery} helper the helper shown next to the mouse
+					 * @param {Object} event the event that caused the stop
+					 */
+					if (e.target !== vakata_dnd.target) {
+						$(vakata_dnd.target).off('click.vakata');
+					}
+					$.vakata.dnd._trigger("stop", e);
+				}
+				else {
+					if(e.type === "touchend" && e.target === vakata_dnd.target) {
+						var to = setTimeout(function () { $(e.target).click(); }, 100);
+						$(e.target).one('click', function() { if(to) { clearTimeout(to); } });
+					}
+				}
+				$.vakata.dnd._clean();
+				return false;
+			}
+		};
+	}($));
+
+	// include the dnd plugin by default
+	// $.jstree.defaults.plugins.push("dnd");
+}));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vakata-jstree-3.3.5/src/jstree.js	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,4920 @@
+/*!
+ * jsTree {{VERSION}}
+ * http://jstree.com/
+ *
+ * Copyright (c) 2014 Ivan Bozhanov (http://vakata.com)
+ *
+ * Licensed same as jquery - under the terms of the MIT License
+ *   http://www.opensource.org/licenses/mit-license.php
+ */
+/*!
+ * if using jslint please allow for the jQuery global and use following options:
+ * jslint: loopfunc: true, browser: true, ass: true, bitwise: true, continue: true, nomen: true, plusplus: true, regexp: true, unparam: true, todo: true, white: true
+ */
+/*jshint -W083 */
+/*globals jQuery, define, module, exports, require, window, document, postMessage */
+(function (factory) {
+	"use strict";
+	if (typeof define === 'function' && define.amd) {
+		define(['jquery'], factory);
+	}
+	else if(typeof module !== 'undefined' && module.exports) {
+		module.exports = factory(require('jquery'));
+	}
+	else {
+		factory(jQuery);
+	}
+}(function ($, undefined) {
+	"use strict";
+
+	// prevent another load? maybe there is a better way?
+	if($.jstree) {
+		return;
+	}
+
+	/**
+	 * ### jsTree core functionality
+	 */
+
+	// internal variables
+	var instance_counter = 0,
+		ccp_node = false,
+		ccp_mode = false,
+		ccp_inst = false,
+		themes_loaded = [],
+		src = $('script:last').attr('src'),
+		document = window.document; // local variable is always faster to access then a global
+
+	/**
+	 * holds all jstree related functions and variables, including the actual class and methods to create, access and manipulate instances.
+	 * @name $.jstree
+	 */
+	$.jstree = {
+		/**
+		 * specifies the jstree version in use
+		 * @name $.jstree.version
+		 */
+		version : '{{VERSION}}',
+		/**
+		 * holds all the default options used when creating new instances
+		 * @name $.jstree.defaults
+		 */
+		defaults : {
+			/**
+			 * configure which plugins will be active on an instance. Should be an array of strings, where each element is a plugin name. The default is `[]`
+			 * @name $.jstree.defaults.plugins
+			 */
+			plugins : []
+		},
+		/**
+		 * stores all loaded jstree plugins (used internally)
+		 * @name $.jstree.plugins
+		 */
+		plugins : {},
+		path : src && src.indexOf('/') !== -1 ? src.replace(/\/[^\/]+$/,'') : '',
+		idregex : /[\\:&!^|()\[\]<>@*'+~#";.,=\- \/${}%?`]/g,
+		root : '#'
+	};
+	
+	/**
+	 * creates a jstree instance
+	 * @name $.jstree.create(el [, options])
+	 * @param {DOMElement|jQuery|String} el the element to create the instance on, can be jQuery extended or a selector
+	 * @param {Object} options options for this instance (extends `$.jstree.defaults`)
+	 * @return {jsTree} the new instance
+	 */
+	$.jstree.create = function (el, options) {
+		var tmp = new $.jstree.core(++instance_counter),
+			opt = options;
+		options = $.extend(true, {}, $.jstree.defaults, options);
+		if(opt && opt.plugins) {
+			options.plugins = opt.plugins;
+		}
+		$.each(options.plugins, function (i, k) {
+			if(i !== 'core') {
+				tmp = tmp.plugin(k, options[k]);
+			}
+		});
+		$(el).data('jstree', tmp);
+		tmp.init(el, options);
+		return tmp;
+	};
+	/**
+	 * remove all traces of jstree from the DOM and destroy all instances
+	 * @name $.jstree.destroy()
+	 */
+	$.jstree.destroy = function () {
+		$('.jstree:jstree').jstree('destroy');
+		$(document).off('.jstree');
+	};
+	/**
+	 * the jstree class constructor, used only internally
+	 * @private
+	 * @name $.jstree.core(id)
+	 * @param {Number} id this instance's index
+	 */
+	$.jstree.core = function (id) {
+		this._id = id;
+		this._cnt = 0;
+		this._wrk = null;
+		this._data = {
+			core : {
+				themes : {
+					name : false,
+					dots : false,
+					icons : false,
+					ellipsis : false
+				},
+				selected : [],
+				last_error : {},
+				working : false,
+				worker_queue : [],
+				focused : null
+			}
+		};
+	};
+	/**
+	 * get a reference to an existing instance
+	 *
+	 * __Examples__
+	 *
+	 *	// provided a container with an ID of "tree", and a nested node with an ID of "branch"
+	 *	// all of there will return the same instance
+	 *	$.jstree.reference('tree');
+	 *	$.jstree.reference('#tree');
+	 *	$.jstree.reference($('#tree'));
+	 *	$.jstree.reference(document.getElementByID('tree'));
+	 *	$.jstree.reference('branch');
+	 *	$.jstree.reference('#branch');
+	 *	$.jstree.reference($('#branch'));
+	 *	$.jstree.reference(document.getElementByID('branch'));
+	 *
+	 * @name $.jstree.reference(needle)
+	 * @param {DOMElement|jQuery|String} needle
+	 * @return {jsTree|null} the instance or `null` if not found
+	 */
+	$.jstree.reference = function (needle) {
+		var tmp = null,
+			obj = null;
+		if(needle && needle.id && (!needle.tagName || !needle.nodeType)) { needle = needle.id; }
+
+		if(!obj || !obj.length) {
+			try { obj = $(needle); } catch (ignore) { }
+		}
+		if(!obj || !obj.length) {
+			try { obj = $('#' + needle.replace($.jstree.idregex,'\\$&')); } catch (ignore) { }
+		}
+		if(obj && obj.length && (obj = obj.closest('.jstree')).length && (obj = obj.data('jstree'))) {
+			tmp = obj;
+		}
+		else {
+			$('.jstree').each(function () {
+				var inst = $(this).data('jstree');
+				if(inst && inst._model.data[needle]) {
+					tmp = inst;
+					return false;
+				}
+			});
+		}
+		return tmp;
+	};
+	/**
+	 * Create an instance, get an instance or invoke a command on a instance.
+	 *
+	 * If there is no instance associated with the current node a new one is created and `arg` is used to extend `$.jstree.defaults` for this new instance. There would be no return value (chaining is not broken).
+	 *
+	 * If there is an existing instance and `arg` is a string the command specified by `arg` is executed on the instance, with any additional arguments passed to the function. If the function returns a value it will be returned (chaining could break depending on function).
+	 *
+	 * If there is an existing instance and `arg` is not a string the instance itself is returned (similar to `$.jstree.reference`).
+	 *
+	 * In any other case - nothing is returned and chaining is not broken.
+	 *
+	 * __Examples__
+	 *
+	 *	$('#tree1').jstree(); // creates an instance
+	 *	$('#tree2').jstree({ plugins : [] }); // create an instance with some options
+	 *	$('#tree1').jstree('open_node', '#branch_1'); // call a method on an existing instance, passing additional arguments
+	 *	$('#tree2').jstree(); // get an existing instance (or create an instance)
+	 *	$('#tree2').jstree(true); // get an existing instance (will not create new instance)
+	 *	$('#branch_1').jstree().select_node('#branch_1'); // get an instance (using a nested element and call a method)
+	 *
+	 * @name $().jstree([arg])
+	 * @param {String|Object} arg
+	 * @return {Mixed}
+	 */
+	$.fn.jstree = function (arg) {
+		// check for string argument
+		var is_method	= (typeof arg === 'string'),
+			args		= Array.prototype.slice.call(arguments, 1),
+			result		= null;
+		if(arg === true && !this.length) { return false; }
+		this.each(function () {
+			// get the instance (if there is one) and method (if it exists)
+			var instance = $.jstree.reference(this),
+				method = is_method && instance ? instance[arg] : null;
+			// if calling a method, and method is available - execute on the instance
+			result = is_method && method ?
+				method.apply(instance, args) :
+				null;
+			// if there is no instance and no method is being called - create one
+			if(!instance && !is_method && (arg === undefined || $.isPlainObject(arg))) {
+				$.jstree.create(this, arg);
+			}
+			// if there is an instance and no method is called - return the instance
+			if( (instance && !is_method) || arg === true ) {
+				result = instance || false;
+			}
+			// if there was a method call which returned a result - break and return the value
+			if(result !== null && result !== undefined) {
+				return false;
+			}
+		});
+		// if there was a method call with a valid return value - return that, otherwise continue the chain
+		return result !== null && result !== undefined ?
+			result : this;
+	};
+	/**
+	 * used to find elements containing an instance
+	 *
+	 * __Examples__
+	 *
+	 *	$('div:jstree').each(function () {
+	 *		$(this).jstree('destroy');
+	 *	});
+	 *
+	 * @name $(':jstree')
+	 * @return {jQuery}
+	 */
+	$.expr.pseudos.jstree = $.expr.createPseudo(function(search) {
+		return function(a) {
+			return $(a).hasClass('jstree') &&
+				$(a).data('jstree') !== undefined;
+		};
+	});
+
+	/**
+	 * stores all defaults for the core
+	 * @name $.jstree.defaults.core
+	 */
+	$.jstree.defaults.core = {
+		/**
+		 * data configuration
+		 *
+		 * If left as `false` the HTML inside the jstree container element is used to populate the tree (that should be an unordered list with list items).
+		 *
+		 * You can also pass in a HTML string or a JSON array here.
+		 *
+		 * It is possible to pass in a standard jQuery-like AJAX config and jstree will automatically determine if the response is JSON or HTML and use that to populate the tree.
+		 * In addition to the standard jQuery ajax options here you can suppy functions for `data` and `url`, the functions will be run in the current instance's scope and a param will be passed indicating which node is being loaded, the return value of those functions will be used.
+		 *
+		 * The last option is to specify a function, that function will receive the node being loaded as argument and a second param which is a function which should be called with the result.
+		 *
+		 * __Examples__
+		 *
+		 *	// AJAX
+		 *	$('#tree').jstree({
+		 *		'core' : {
+		 *			'data' : {
+		 *				'url' : '/get/children/',
+		 *				'data' : function (node) {
+		 *					return { 'id' : node.id };
+		 *				}
+		 *			}
+		 *		});
+		 *
+		 *	// direct data
+		 *	$('#tree').jstree({
+		 *		'core' : {
+		 *			'data' : [
+		 *				'Simple root node',
+		 *				{
+		 *					'id' : 'node_2',
+		 *					'text' : 'Root node with options',
+		 *					'state' : { 'opened' : true, 'selected' : true },
+		 *					'children' : [ { 'text' : 'Child 1' }, 'Child 2']
+		 *				}
+		 *			]
+		 *		}
+		 *	});
+		 *
+		 *	// function
+		 *	$('#tree').jstree({
+		 *		'core' : {
+		 *			'data' : function (obj, callback) {
+		 *				callback.call(this, ['Root 1', 'Root 2']);
+		 *			}
+		 *		});
+		 *
+		 * @name $.jstree.defaults.core.data
+		 */
+		data			: false,
+		/**
+		 * configure the various strings used throughout the tree
+		 *
+		 * You can use an object where the key is the string you need to replace and the value is your replacement.
+		 * Another option is to specify a function which will be called with an argument of the needed string and should return the replacement.
+		 * If left as `false` no replacement is made.
+		 *
+		 * __Examples__
+		 *
+		 *	$('#tree').jstree({
+		 *		'core' : {
+		 *			'strings' : {
+		 *				'Loading ...' : 'Please wait ...'
+		 *			}
+		 *		}
+		 *	});
+		 *
+		 * @name $.jstree.defaults.core.strings
+		 */
+		strings			: false,
+		/**
+		 * determines what happens when a user tries to modify the structure of the tree
+		 * If left as `false` all operations like create, rename, delete, move or copy are prevented.
+		 * You can set this to `true` to allow all interactions or use a function to have better control.
+		 *
+		 * __Examples__
+		 *
+		 *	$('#tree').jstree({
+		 *		'core' : {
+		 *			'check_callback' : function (operation, node, node_parent, node_position, more) {
+		 *				// operation can be 'create_node', 'rename_node', 'delete_node', 'move_node', 'copy_node' or 'edit'
+		 *				// in case of 'rename_node' node_position is filled with the new node name
+		 *				return operation === 'rename_node' ? true : false;
+		 *			}
+		 *		}
+		 *	});
+		 *
+		 * @name $.jstree.defaults.core.check_callback
+		 */
+		check_callback	: false,
+		/**
+		 * a callback called with a single object parameter in the instance's scope when something goes wrong (operation prevented, ajax failed, etc)
+		 * @name $.jstree.defaults.core.error
+		 */
+		error			: $.noop,
+		/**
+		 * the open / close animation duration in milliseconds - set this to `false` to disable the animation (default is `200`)
+		 * @name $.jstree.defaults.core.animation
+		 */
+		animation		: 200,
+		/**
+		 * a boolean indicating if multiple nodes can be selected
+		 * @name $.jstree.defaults.core.multiple
+		 */
+		multiple		: true,
+		/**
+		 * theme configuration object
+		 * @name $.jstree.defaults.core.themes
+		 */
+		themes			: {
+			/**
+			 * the name of the theme to use (if left as `false` the default theme is used)
+			 * @name $.jstree.defaults.core.themes.name
+			 */
+			name			: false,
+			/**
+			 * the URL of the theme's CSS file, leave this as `false` if you have manually included the theme CSS (recommended). You can set this to `true` too which will try to autoload the theme.
+			 * @name $.jstree.defaults.core.themes.url
+			 */
+			url				: false,
+			/**
+			 * the location of all jstree themes - only used if `url` is set to `true`
+			 * @name $.jstree.defaults.core.themes.dir
+			 */
+			dir				: false,
+			/**
+			 * a boolean indicating if connecting dots are shown
+			 * @name $.jstree.defaults.core.themes.dots
+			 */
+			dots			: true,
+			/**
+			 * a boolean indicating if node icons are shown
+			 * @name $.jstree.defaults.core.themes.icons
+			 */
+			icons			: true,
+			/**
+			 * a boolean indicating if node ellipsis should be shown - this only works with a fixed with on the container
+			 * @name $.jstree.defaults.core.themes.ellipsis
+			 */
+			ellipsis		: false,
+			/**
+			 * a boolean indicating if the tree background is striped
+			 * @name $.jstree.defaults.core.themes.stripes
+			 */
+			stripes			: false,
+			/**
+			 * a string (or boolean `false`) specifying the theme variant to use (if the theme supports variants)
+			 * @name $.jstree.defaults.core.themes.variant
+			 */
+			variant			: false,
+			/**
+			 * a boolean specifying if a reponsive version of the theme should kick in on smaller screens (if the theme supports it). Defaults to `false`.
+			 * @name $.jstree.defaults.core.themes.responsive
+			 */
+			responsive		: false
+		},
+		/**
+		 * if left as `true` all parents of all selected nodes will be opened once the tree loads (so that all selected nodes are visible to the user)
+		 * @name $.jstree.defaults.core.expand_selected_onload
+		 */
+		expand_selected_onload : true,
+		/**
+		 * if left as `true` web workers will be used to parse incoming JSON data where possible, so that the UI will not be blocked by large requests. Workers are however about 30% slower. Defaults to `true`
+		 * @name $.jstree.defaults.core.worker
+		 */
+		worker : true,
+		/**
+		 * Force node text to plain text (and escape HTML). Defaults to `false`
+		 * @name $.jstree.defaults.core.force_text
+		 */
+		force_text : false,
+		/**
+		 * Should the node should be toggled if the text is double clicked . Defaults to `true`
+		 * @name $.jstree.defaults.core.dblclick_toggle
+		 */
+		dblclick_toggle : true,
+		/**
+		 * Should the loaded nodes be part of the state. Defaults to `false`
+		 * @name $.jstree.defaults.core.loaded_state
+		 */
+		loaded_state : false,
+		/**
+		 * Should the last active node be focused when the tree container is blurred and the focused again. This helps working with screen readers. Defaults to `true`
+		 * @name $.jstree.defaults.core.restore_focus
+		 */
+		restore_focus : true,
+		/**
+		 * Default keyboard shortcuts (an object where each key is the button name or combo - like 'enter', 'ctrl-space', 'p', etc and the value is the function to execute in the instance's scope)
+		 * @name $.jstree.defaults.core.keyboard
+		 */
+		keyboard : {
+			'ctrl-space': function (e) {
+				// aria defines space only with Ctrl
+				e.type = "click";
+				$(e.currentTarget).trigger(e);
+			},
+			'enter': function (e) {
+				// enter
+				e.type = "click";
+				$(e.currentTarget).trigger(e);
+			},
+			'left': function (e) {
+				// left
+				e.preventDefault();
+				if(this.is_open(e.currentTarget)) {
+					this.close_node(e.currentTarget);
+				}
+				else {
+					var o = this.get_parent(e.currentTarget);
+					if(o && o.id !== $.jstree.root) { this.get_node(o, true).children('.jstree-anchor').focus(); }
+				}
+			},
+			'up': function (e) {
+				// up
+				e.preventDefault();
+				var o = this.get_prev_dom(e.currentTarget);
+				if(o && o.length) { o.children('.jstree-anchor').focus(); }
+			},
+			'right': function (e) {
+				// right
+				e.preventDefault();
+				if(this.is_closed(e.currentTarget)) {
+					this.open_node(e.currentTarget, function (o) { this.get_node(o, true).children('.jstree-anchor').focus(); });
+				}
+				else if (this.is_open(e.currentTarget)) {
+					var o = this.get_node(e.currentTarget, true).children('.jstree-children')[0];
+					if(o) { $(this._firstChild(o)).children('.jstree-anchor').focus(); }
+				}
+			},
+			'down': function (e) {
+				// down
+				e.preventDefault();
+				var o = this.get_next_dom(e.currentTarget);
+				if(o && o.length) { o.children('.jstree-anchor').focus(); }
+			},
+			'*': function (e) {
+				// aria defines * on numpad as open_all - not very common
+				this.open_all();
+			},
+			'home': function (e) {
+				// home
+				e.preventDefault();
+				var o = this._firstChild(this.get_container_ul()[0]);
+				if(o) { $(o).children('.jstree-anchor').filter(':visible').focus(); }
+			},
+			'end': function (e) {
+				// end
+				e.preventDefault();
+				this.element.find('.jstree-anchor').filter(':visible').last().focus();
+			},
+			'f2': function (e) {
+				// f2 - safe to include - if check_callback is false it will fail
+				e.preventDefault();
+				this.edit(e.currentTarget);
+			}
+		}
+	};
+	$.jstree.core.prototype = {
+		/**
+		 * used to decorate an instance with a plugin. Used internally.
+		 * @private
+		 * @name plugin(deco [, opts])
+		 * @param  {String} deco the plugin to decorate with
+		 * @param  {Object} opts options for the plugin
+		 * @return {jsTree}
+		 */
+		plugin : function (deco, opts) {
+			var Child = $.jstree.plugins[deco];
+			if(Child) {
+				this._data[deco] = {};
+				Child.prototype = this;
+				return new Child(opts, this);
+			}
+			return this;
+		},
+		/**
+		 * initialize the instance. Used internally.
+		 * @private
+		 * @name init(el, optons)
+		 * @param {DOMElement|jQuery|String} el the element we are transforming
+		 * @param {Object} options options for this instance
+		 * @trigger init.jstree, loading.jstree, loaded.jstree, ready.jstree, changed.jstree
+		 */
+		init : function (el, options) {
+			this._model = {
+				data : {},
+				changed : [],
+				force_full_redraw : false,
+				redraw_timeout : false,
+				default_state : {
+					loaded : true,
+					opened : false,
+					selected : false,
+					disabled : false
+				}
+			};
+			this._model.data[$.jstree.root] = {
+				id : $.jstree.root,
+				parent : null,
+				parents : [],
+				children : [],
+				children_d : [],
+				state : { loaded : false }
+			};
+
+			this.element = $(el).addClass('jstree jstree-' + this._id);
+			this.settings = options;
+
+			this._data.core.ready = false;
+			this._data.core.loaded = false;
+			this._data.core.rtl = (this.element.css("direction") === "rtl");
+			this.element[this._data.core.rtl ? 'addClass' : 'removeClass']("jstree-rtl");
+			this.element.attr('role','tree');
+			if(this.settings.core.multiple) {
+				this.element.attr('aria-multiselectable', true);
+			}
+			if(!this.element.attr('tabindex')) {
+				this.element.attr('tabindex','0');
+			}
+
+			this.bind();
+			/**
+			 * triggered after all events are bound
+			 * @event
+			 * @name init.jstree
+			 */
+			this.trigger("init");
+
+			this._data.core.original_container_html = this.element.find(" > ul > li").clone(true);
+			this._data.core.original_container_html
+				.find("li").addBack()
+				.contents().filter(function() {
+					return this.nodeType === 3 && (!this.nodeValue || /^\s+$/.test(this.nodeValue));
+				})
+				.remove();
+			this.element.html("<"+"ul class='jstree-container-ul jstree-children' role='group'><"+"li id='j"+this._id+"_loading' class='jstree-initial-node jstree-loading jstree-leaf jstree-last' role='tree-item'><i class='jstree-icon jstree-ocl'></i><"+"a class='jstree-anchor' href='#'><i class='jstree-icon jstree-themeicon-hidden'></i>" + this.get_string("Loading ...") + "</a></li></ul>");
+			this.element.attr('aria-activedescendant','j' + this._id + '_loading');
+			this._data.core.li_height = this.get_container_ul().children("li").first().outerHeight() || 24;
+			this._data.core.node = this._create_prototype_node();
+			/**
+			 * triggered after the loading text is shown and before loading starts
+			 * @event
+			 * @name loading.jstree
+			 */
+			this.trigger("loading");
+			this.load_node($.jstree.root);
+		},
+		/**
+		 * destroy an instance
+		 * @name destroy()
+		 * @param  {Boolean} keep_html if not set to `true` the container will be emptied, otherwise the current DOM elements will be kept intact
+		 */
+		destroy : function (keep_html) {
+			/**
+			 * triggered before the tree is destroyed
+			 * @event
+			 * @name destroy.jstree
+			 */
+			this.trigger("destroy");
+			if(this._wrk) {
+				try {
+					window.URL.revokeObjectURL(this._wrk);
+					this._wrk = null;
+				}
+				catch (ignore) { }
+			}
+			if(!keep_html) { this.element.empty(); }
+			this.teardown();
+		},
+		/**
+		 * Create a prototype node
+		 * @name _create_prototype_node()
+		 * @return {DOMElement}
+		 */
+		_create_prototype_node : function () {
+			var _node = document.createElement('LI'), _temp1, _temp2;
+			_node.setAttribute('role', 'treeitem');
+			_temp1 = document.createElement('I');
+			_temp1.className = 'jstree-icon jstree-ocl';
+			_temp1.setAttribute('role', 'presentation');
+			_node.appendChild(_temp1);
+			_temp1 = document.createElement('A');
+			_temp1.className = 'jstree-anchor';
+			_temp1.setAttribute('href','#');
+			_temp1.setAttribute('tabindex','-1');
+			_temp2 = document.createElement('I');
+			_temp2.className = 'jstree-icon jstree-themeicon';
+			_temp2.setAttribute('role', 'presentation');
+			_temp1.appendChild(_temp2);
+			_node.appendChild(_temp1);
+			_temp1 = _temp2 = null;
+
+			return _node;
+		},
+		_kbevent_to_func : function (e) {
+			var keys = {
+				8: "Backspace", 9: "Tab", 13: "Return", 19: "Pause", 27: "Esc",
+				32: "Space", 33: "PageUp", 34: "PageDown", 35: "End", 36: "Home",
+				37: "Left", 38: "Up", 39: "Right", 40: "Down", 44: "Print", 45: "Insert",
+				46: "Delete", 96: "Numpad0", 97: "Numpad1", 98: "Numpad2", 99 : "Numpad3",
+				100: "Numpad4", 101: "Numpad5", 102: "Numpad6", 103: "Numpad7",
+				104: "Numpad8", 105: "Numpad9", '-13': "NumpadEnter", 112: "F1",
+				113: "F2", 114: "F3", 115: "F4", 116: "F5", 117: "F6", 118: "F7",
+				119: "F8", 120: "F9", 121: "F10", 122: "F11", 123: "F12", 144: "Numlock",
+				145: "Scrolllock", 16: 'Shift', 17: 'Ctrl', 18: 'Alt',
+				48: '0',  49: '1',  50: '2',  51: '3',  52: '4', 53:  '5',
+				54: '6',  55: '7',  56: '8',  57: '9',  59: ';',  61: '=', 65:  'a',
+				66: 'b',  67: 'c',  68: 'd',  69: 'e',  70: 'f',  71: 'g', 72:  'h',
+				73: 'i',  74: 'j',  75: 'k',  76: 'l',  77: 'm',  78: 'n', 79:  'o',
+				80: 'p',  81: 'q',  82: 'r',  83: 's',  84: 't',  85: 'u', 86:  'v',
+				87: 'w',  88: 'x',  89: 'y',  90: 'z', 107: '+', 109: '-', 110: '.',
+				186: ';', 187: '=', 188: ',', 189: '-', 190: '.', 191: '/', 192: '`',
+				219: '[', 220: '\\',221: ']', 222: "'", 111: '/', 106: '*', 173: '-'
+			};
+			var parts = [];
+			if (e.ctrlKey) { parts.push('ctrl'); }
+			if (e.altKey) { parts.push('alt'); }
+			if (e.shiftKey) { parts.push('shift'); }
+			parts.push(keys[e.which] || e.which);
+			parts = parts.sort().join('-').toLowerCase();
+
+			var kb = this.settings.core.keyboard, i, tmp;
+			for (i in kb) {
+				if (kb.hasOwnProperty(i)) {
+					tmp = i;
+					if (tmp !== '-' && tmp !== '+') {
+						tmp = tmp.replace('--', '-MINUS').replace('+-', '-MINUS').replace('++', '-PLUS').replace('-+', '-PLUS');
+						tmp = tmp.split(/-|\+/).sort().join('-').replace('MINUS', '-').replace('PLUS', '+').toLowerCase();
+					}
+					if (tmp === parts) {
+						return kb[i];
+					}
+				}
+			}
+			return null;
+		},
+		/**
+		 * part of the destroying of an instance. Used internally.
+		 * @private
+		 * @name teardown()
+		 */
+		teardown : function () {
+			this.unbind();
+			this.element
+				.removeClass('jstree')
+				.removeData('jstree')
+				.find("[class^='jstree']")
+					.addBack()
+					.attr("class", function () { return this.className.replace(/jstree[^ ]*|$/ig,''); });
+			this.element = null;
+		},
+		/**
+		 * bind all events. Used internally.
+		 * @private
+		 * @name bind()
+		 */
+		bind : function () {
+			var word = '',
+				tout = null,
+				was_click = 0;
+			this.element
+				.on("dblclick.jstree", function (e) {
+						if(e.target.tagName && e.target.tagName.toLowerCase() === "input") { return true; }
+						if(document.selection && document.selection.empty) {
+							document.selection.empty();
+						}
+						else {
+							if(window.getSelection) {
+								var sel = window.getSelection();
+								try {
+									sel.removeAllRanges();
+									sel.collapse();
+								} catch (ignore) { }
+							}
+						}
+					})
+				.on("mousedown.jstree", $.proxy(function (e) {
+						if(e.target === this.element[0]) {
+							e.preventDefault(); // prevent losing focus when clicking scroll arrows (FF, Chrome)
+							was_click = +(new Date()); // ie does not allow to prevent losing focus
+						}
+					}, this))
+				.on("mousedown.jstree", ".jstree-ocl", function (e) {
+						e.preventDefault(); // prevent any node inside from losing focus when clicking the open/close icon
+					})
+				.on("click.jstree", ".jstree-ocl", $.proxy(function (e) {
+						this.toggle_node(e.target);
+					}, this))
+				.on("dblclick.jstree", ".jstree-anchor", $.proxy(function (e) {
+						if(e.target.tagName && e.target.tagName.toLowerCase() === "input") { return true; }
+						if(this.settings.core.dblclick_toggle) {
+							this.toggle_node(e.target);
+						}
+					}, this))
+				.on("click.jstree", ".jstree-anchor", $.proxy(function (e) {
+						e.preventDefault();
+						if(e.currentTarget !== document.activeElement) { $(e.currentTarget).focus(); }
+						this.activate_node(e.currentTarget, e);
+					}, this))
+				.on('keydown.jstree', '.jstree-anchor', $.proxy(function (e) {
+						if(e.target.tagName && e.target.tagName.toLowerCase() === "input") { return true; }
+						if(this._data.core.rtl) {
+							if(e.which === 37) { e.which = 39; }
+							else if(e.which === 39) { e.which = 37; }
+						}
+						var f = this._kbevent_to_func(e);
+						if (f) {
+							var r = f.call(this, e);
+							if (r === false || r === true) {
+								return r;
+							}
+						}
+					}, this))
+				.on("load_node.jstree", $.proxy(function (e, data) {
+						if(data.status) {
+							if(data.node.id === $.jstree.root && !this._data.core.loaded) {
+								this._data.core.loaded = true;
+								if(this._firstChild(this.get_container_ul()[0])) {
+									this.element.attr('aria-activedescendant',this._firstChild(this.get_container_ul()[0]).id);
+								}
+								/**
+								 * triggered after the root node is loaded for the first time
+								 * @event
+								 * @name loaded.jstree
+								 */
+								this.trigger("loaded");
+							}
+							if(!this._data.core.ready) {
+								setTimeout($.proxy(function() {
+									if(this.element && !this.get_container_ul().find('.jstree-loading').length) {
+										this._data.core.ready = true;
+										if(this._data.core.selected.length) {
+											if(this.settings.core.expand_selected_onload) {
+												var tmp = [], i, j;
+												for(i = 0, j = this._data.core.selected.length; i < j; i++) {
+													tmp = tmp.concat(this._model.data[this._data.core.selected[i]].parents);
+												}
+												tmp = $.vakata.array_unique(tmp);
+												for(i = 0, j = tmp.length; i < j; i++) {
+													this.open_node(tmp[i], false, 0);
+												}
+											}
+											this.trigger('changed', { 'action' : 'ready', 'selected' : this._data.core.selected });
+										}
+										/**
+										 * triggered after all nodes are finished loading
+										 * @event
+										 * @name ready.jstree
+										 */
+										this.trigger("ready");
+									}
+								}, this), 0);
+							}
+						}
+					}, this))
+				// quick searching when the tree is focused
+				.on('keypress.jstree', $.proxy(function (e) {
+						if(e.target.tagName && e.target.tagName.toLowerCase() === "input") { return true; }
+						if(tout) { clearTimeout(tout); }
+						tout = setTimeout(function () {
+							word = '';
+						}, 500);
+
+						var chr = String.fromCharCode(e.which).toLowerCase(),
+							col = this.element.find('.jstree-anchor').filter(':visible'),
+							ind = col.index(document.activeElement) || 0,
+							end = false;
+						word += chr;
+
+						// match for whole word from current node down (including the current node)
+						if(word.length > 1) {
+							col.slice(ind).each($.proxy(function (i, v) {
+								if($(v).text().toLowerCase().indexOf(word) === 0) {
+									$(v).focus();
+									end = true;
+									return false;
+								}
+							}, this));
+							if(end) { return; }
+
+							// match for whole word from the beginning of the tree
+							col.slice(0, ind).each($.proxy(function (i, v) {
+								if($(v).text().toLowerCase().indexOf(word) === 0) {
+									$(v).focus();
+									end = true;
+									return false;
+								}
+							}, this));
+							if(end) { return; }
+						}
+						// list nodes that start with that letter (only if word consists of a single char)
+						if(new RegExp('^' + chr.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') + '+$').test(word)) {
+							// search for the next node starting with that letter
+							col.slice(ind + 1).each($.proxy(function (i, v) {
+								if($(v).text().toLowerCase().charAt(0) === chr) {
+									$(v).focus();
+									end = true;
+									return false;
+								}
+							}, this));
+							if(end) { return; }
+
+							// search from the beginning
+							col.slice(0, ind + 1).each($.proxy(function (i, v) {
+								if($(v).text().toLowerCase().charAt(0) === chr) {
+									$(v).focus();
+									end = true;
+									return false;
+								}
+							}, this));
+							if(end) { return; }
+						}
+					}, this))
+				// THEME RELATED
+				.on("init.jstree", $.proxy(function () {
+						var s = this.settings.core.themes;
+						this._data.core.themes.dots			= s.dots;
+						this._data.core.themes.stripes		= s.stripes;
+						this._data.core.themes.icons		= s.icons;
+						this._data.core.themes.ellipsis		= s.ellipsis;
+						this.set_theme(s.name || "default", s.url);
+						this.set_theme_variant(s.variant);
+					}, this))
+				.on("loading.jstree", $.proxy(function () {
+						this[ this._data.core.themes.dots ? "show_dots" : "hide_dots" ]();
+						this[ this._data.core.themes.icons ? "show_icons" : "hide_icons" ]();
+						this[ this._data.core.themes.stripes ? "show_stripes" : "hide_stripes" ]();
+						this[ this._data.core.themes.ellipsis ? "show_ellipsis" : "hide_ellipsis" ]();
+					}, this))
+				.on('blur.jstree', '.jstree-anchor', $.proxy(function (e) {
+						this._data.core.focused = null;
+						$(e.currentTarget).filter('.jstree-hovered').mouseleave();
+						this.element.attr('tabindex', '0');
+					}, this))
+				.on('focus.jstree', '.jstree-anchor', $.proxy(function (e) {
+						var tmp = this.get_node(e.currentTarget);
+						if(tmp && tmp.id) {
+							this._data.core.focused = tmp.id;
+						}
+						this.element.find('.jstree-hovered').not(e.currentTarget).mouseleave();
+						$(e.currentTarget).mouseenter();
+						this.element.attr('tabindex', '-1');
+					}, this))
+				.on('focus.jstree', $.proxy(function () {
+						if(+(new Date()) - was_click > 500 && !this._data.core.focused && this.settings.core.restore_focus) {
+							was_click = 0;
+							var act = this.get_node(this.element.attr('aria-activedescendant'), true);
+							if(act) {
+								act.find('> .jstree-anchor').focus();
+							}
+						}
+					}, this))
+				.on('mouseenter.jstree', '.jstree-anchor', $.proxy(function (e) {
+						this.hover_node(e.currentTarget);
+					}, this))
+				.on('mouseleave.jstree', '.jstree-anchor', $.proxy(function (e) {
+						this.dehover_node(e.currentTarget);
+					}, this));
+		},
+		/**
+		 * part of the destroying of an instance. Used internally.
+		 * @private
+		 * @name unbind()
+		 */
+		unbind : function () {
+			this.element.off('.jstree');
+			$(document).off('.jstree-' + this._id);
+		},
+		/**
+		 * trigger an event. Used internally.
+		 * @private
+		 * @name trigger(ev [, data])
+		 * @param  {String} ev the name of the event to trigger
+		 * @param  {Object} data additional data to pass with the event
+		 */
+		trigger : function (ev, data) {
+			if(!data) {
+				data = {};
+			}
+			data.instance = this;
+			this.element.triggerHandler(ev.replace('.jstree','') + '.jstree', data);
+		},
+		/**
+		 * returns the jQuery extended instance container
+		 * @name get_container()
+		 * @return {jQuery}
+		 */
+		get_container : function () {
+			return this.element;
+		},
+		/**
+		 * returns the jQuery extended main UL node inside the instance container. Used internally.
+		 * @private
+		 * @name get_container_ul()
+		 * @return {jQuery}
+		 */
+		get_container_ul : function () {
+			return this.element.children(".jstree-children").first();
+		},
+		/**
+		 * gets string replacements (localization). Used internally.
+		 * @private
+		 * @name get_string(key)
+		 * @param  {String} key
+		 * @return {String}
+		 */
+		get_string : function (key) {
+			var a = this.settings.core.strings;
+			if($.isFunction(a)) { return a.call(this, key); }
+			if(a && a[key]) { return a[key]; }
+			return key;
+		},
+		/**
+		 * gets the first child of a DOM node. Used internally.
+		 * @private
+		 * @name _firstChild(dom)
+		 * @param  {DOMElement} dom
+		 * @return {DOMElement}
+		 */
+		_firstChild : function (dom) {
+			dom = dom ? dom.firstChild : null;
+			while(dom !== null && dom.nodeType !== 1) {
+				dom = dom.nextSibling;
+			}
+			return dom;
+		},
+		/**
+		 * gets the next sibling of a DOM node. Used internally.
+		 * @private
+		 * @name _nextSibling(dom)
+		 * @param  {DOMElement} dom
+		 * @return {DOMElement}
+		 */
+		_nextSibling : function (dom) {
+			dom = dom ? dom.nextSibling : null;
+			while(dom !== null && dom.nodeType !== 1) {
+				dom = dom.nextSibling;
+			}
+			return dom;
+		},
+		/**
+		 * gets the previous sibling of a DOM node. Used internally.
+		 * @private
+		 * @name _previousSibling(dom)
+		 * @param  {DOMElement} dom
+		 * @return {DOMElement}
+		 */
+		_previousSibling : function (dom) {
+			dom = dom ? dom.previousSibling : null;
+			while(dom !== null && dom.nodeType !== 1) {
+				dom = dom.previousSibling;
+			}
+			return dom;
+		},
+		/**
+		 * get the JSON representation of a node (or the actual jQuery extended DOM node) by using any input (child DOM element, ID string, selector, etc)
+		 * @name get_node(obj [, as_dom])
+		 * @param  {mixed} obj
+		 * @param  {Boolean} as_dom
+		 * @return {Object|jQuery}
+		 */
+		get_node : function (obj, as_dom) {
+			if(obj && obj.id) {
+				obj = obj.id;
+			}
+			var dom;
+			try {
+				if(this._model.data[obj]) {
+					obj = this._model.data[obj];
+				}
+				else if(typeof obj === "string" && this._model.data[obj.replace(/^#/, '')]) {
+					obj = this._model.data[obj.replace(/^#/, '')];
+				}
+				else if(typeof obj === "string" && (dom = $('#' + obj.replace($.jstree.idregex,'\\$&'), this.element)).length && this._model.data[dom.closest('.jstree-node').attr('id')]) {
+					obj = this._model.data[dom.closest('.jstree-node').attr('id')];
+				}
+				else if((dom = $(obj, this.element)).length && this._model.data[dom.closest('.jstree-node').attr('id')]) {
+					obj = this._model.data[dom.closest('.jstree-node').attr('id')];
+				}
+				else if((dom = $(obj, this.element)).length && dom.hasClass('jstree')) {
+					obj = this._model.data[$.jstree.root];
+				}
+				else {
+					return false;
+				}
+
+				if(as_dom) {
+					obj = obj.id === $.jstree.root ? this.element : $('#' + obj.id.replace($.jstree.idregex,'\\$&'), this.element);
+				}
+				return obj;
+			} catch (ex) { return false; }
+		},
+		/**
+		 * get the path to a node, either consisting of node texts, or of node IDs, optionally glued together (otherwise an array)
+		 * @name get_path(obj [, glue, ids])
+		 * @param  {mixed} obj the node
+		 * @param  {String} glue if you want the path as a string - pass the glue here (for example '/'), if a falsy value is supplied here, an array is returned
+		 * @param  {Boolean} ids if set to true build the path using ID, otherwise node text is used
+		 * @return {mixed}
+		 */
+		get_path : function (obj, glue, ids) {
+			obj = obj.parents ? obj : this.get_node(obj);
+			if(!obj || obj.id === $.jstree.root || !obj.parents) {
+				return false;
+			}
+			var i, j, p = [];
+			p.push(ids ? obj.id : obj.text);
+			for(i = 0, j = obj.parents.length; i < j; i++) {
+				p.push(ids ? obj.parents[i] : this.get_text(obj.parents[i]));
+			}
+			p = p.reverse().slice(1);
+			return glue ? p.join(glue) : p;
+		},
+		/**
+		 * get the next visible node that is below the `obj` node. If `strict` is set to `true` only sibling nodes are returned.
+		 * @name get_next_dom(obj [, strict])
+		 * @param  {mixed} obj
+		 * @param  {Boolean} strict
+		 * @return {jQuery}
+		 */
+		get_next_dom : function (obj, strict) {
+			var tmp;
+			obj = this.get_node(obj, true);
+			if(obj[0] === this.element[0]) {
+				tmp = this._firstChild(this.get_container_ul()[0]);
+				while (tmp && tmp.offsetHeight === 0) {
+					tmp = this._nextSibling(tmp);
+				}
+				return tmp ? $(tmp) : false;
+			}
+			if(!obj || !obj.length) {
+				return false;
+			}
+			if(strict) {
+				tmp = obj[0];
+				do {
+					tmp = this._nextSibling(tmp);
+				} while (tmp && tmp.offsetHeight === 0);
+				return tmp ? $(tmp) : false;
+			}
+			if(obj.hasClass("jstree-open")) {
+				tmp = this._firstChild(obj.children('.jstree-children')[0]);
+				while (tmp && tmp.offsetHeight === 0) {
+					tmp = this._nextSibling(tmp);
+				}
+				if(tmp !== null) {
+					return $(tmp);
+				}
+			}
+			tmp = obj[0];
+			do {
+				tmp = this._nextSibling(tmp);
+			} while (tmp && tmp.offsetHeight === 0);
+			if(tmp !== null) {
+				return $(tmp);
+			}
+			return obj.parentsUntil(".jstree",".jstree-node").nextAll(".jstree-node:visible").first();
+		},
+		/**
+		 * get the previous visible node that is above the `obj` node. If `strict` is set to `true` only sibling nodes are returned.
+		 * @name get_prev_dom(obj [, strict])
+		 * @param  {mixed} obj
+		 * @param  {Boolean} strict
+		 * @return {jQuery}
+		 */
+		get_prev_dom : function (obj, strict) {
+			var tmp;
+			obj = this.get_node(obj, true);
+			if(obj[0] === this.element[0]) {
+				tmp = this.get_container_ul()[0].lastChild;
+				while (tmp && tmp.offsetHeight === 0) {
+					tmp = this._previousSibling(tmp);
+				}
+				return tmp ? $(tmp) : false;
+			}
+			if(!obj || !obj.length) {
+				return false;
+			}
+			if(strict) {
+				tmp = obj[0];
+				do {
+					tmp = this._previousSibling(tmp);
+				} while (tmp && tmp.offsetHeight === 0);
+				return tmp ? $(tmp) : false;
+			}
+			tmp = obj[0];
+			do {
+				tmp = this._previousSibling(tmp);
+			} while (tmp && tmp.offsetHeight === 0);
+			if(tmp !== null) {
+				obj = $(tmp);
+				while(obj.hasClass("jstree-open")) {
+					obj = obj.children(".jstree-children").first().children(".jstree-node:visible:last");
+				}
+				return obj;
+			}
+			tmp = obj[0].parentNode.parentNode;
+			return tmp && tmp.className && tmp.className.indexOf('jstree-node') !== -1 ? $(tmp) : false;
+		},
+		/**
+		 * get the parent ID of a node
+		 * @name get_parent(obj)
+		 * @param  {mixed} obj
+		 * @return {String}
+		 */
+		get_parent : function (obj) {
+			obj = this.get_node(obj);
+			if(!obj || obj.id === $.jstree.root) {
+				return false;
+			}
+			return obj.parent;
+		},
+		/**
+		 * get a jQuery collection of all the children of a node (node must be rendered), returns false on error
+		 * @name get_children_dom(obj)
+		 * @param  {mixed} obj
+		 * @return {jQuery}
+		 */
+		get_children_dom : function (obj) {
+			obj = this.get_node(obj, true);
+			if(obj[0] === this.element[0]) {
+				return this.get_container_ul().children(".jstree-node");
+			}
+			if(!obj || !obj.length) {
+				return false;
+			}
+			return obj.children(".jstree-children").children(".jstree-node");
+		},
+		/**
+		 * checks if a node has children
+		 * @name is_parent(obj)
+		 * @param  {mixed} obj
+		 * @return {Boolean}
+		 */
+		is_parent : function (obj) {
+			obj = this.get_node(obj);
+			return obj && (obj.state.loaded === false || obj.children.length > 0);
+		},
+		/**
+		 * checks if a node is loaded (its children are available)
+		 * @name is_loaded(obj)
+		 * @param  {mixed} obj
+		 * @return {Boolean}
+		 */
+		is_loaded : function (obj) {
+			obj = this.get_node(obj);
+			return obj && obj.state.loaded;
+		},
+		/**
+		 * check if a node is currently loading (fetching children)
+		 * @name is_loading(obj)
+		 * @param  {mixed} obj
+		 * @return {Boolean}
+		 */
+		is_loading : function (obj) {
+			obj = this.get_node(obj);
+			return obj && obj.state && obj.state.loading;
+		},
+		/**
+		 * check if a node is opened
+		 * @name is_open(obj)
+		 * @param  {mixed} obj
+		 * @return {Boolean}
+		 */
+		is_open : function (obj) {
+			obj = this.get_node(obj);
+			return obj && obj.state.opened;
+		},
+		/**
+		 * check if a node is in a closed state
+		 * @name is_closed(obj)
+		 * @param  {mixed} obj
+		 * @return {Boolean}
+		 */
+		is_closed : function (obj) {
+			obj = this.get_node(obj);
+			return obj && this.is_parent(obj) && !obj.state.opened;
+		},
+		/**
+		 * check if a node has no children
+		 * @name is_leaf(obj)
+		 * @param  {mixed} obj
+		 * @return {Boolean}
+		 */
+		is_leaf : function (obj) {
+			return !this.is_parent(obj);
+		},
+		/**
+		 * loads a node (fetches its children using the `core.data` setting). Multiple nodes can be passed to by using an array.
+		 * @name load_node(obj [, callback])
+		 * @param  {mixed} obj
+		 * @param  {function} callback a function to be executed once loading is complete, the function is executed in the instance's scope and receives two arguments - the node and a boolean status
+		 * @return {Boolean}
+		 * @trigger load_node.jstree
+		 */
+		load_node : function (obj, callback) {
+			var k, l, i, j, c;
+			if($.isArray(obj)) {
+				this._load_nodes(obj.slice(), callback);
+				return true;
+			}
+			obj = this.get_node(obj);
+			if(!obj) {
+				if(callback) { callback.call(this, obj, false); }
+				return false;
+			}
+			// if(obj.state.loading) { } // the node is already loading - just wait for it to load and invoke callback? but if called implicitly it should be loaded again?
+			if(obj.state.loaded) {
+				obj.state.loaded = false;
+				for(i = 0, j = obj.parents.length; i < j; i++) {
+					this._model.data[obj.parents[i]].children_d = $.vakata.array_filter(this._model.data[obj.parents[i]].children_d, function (v) {
+						return $.inArray(v, obj.children_d) === -1;
+					});
+				}
+				for(k = 0, l = obj.children_d.length; k < l; k++) {
+					if(this._model.data[obj.children_d[k]].state.selected) {
+						c = true;
+					}
+					delete this._model.data[obj.children_d[k]];
+				}
+				if (c) {
+					this._data.core.selected = $.vakata.array_filter(this._data.core.selected, function (v) {
+						return $.inArray(v, obj.children_d) === -1;
+					});
+				}
+				obj.children = [];
+				obj.children_d = [];
+				if(c) {
+					this.trigger('changed', { 'action' : 'load_node', 'node' : obj, 'selected' : this._data.core.selected });
+				}
+			}
+			obj.state.failed = false;
+			obj.state.loading = true;
+			this.get_node(obj, true).addClass("jstree-loading").attr('aria-busy',true);
+			this._load_node(obj, $.proxy(function (status) {
+				obj = this._model.data[obj.id];
+				obj.state.loading = false;
+				obj.state.loaded = status;
+				obj.state.failed = !obj.state.loaded;
+				var dom = this.get_node(obj, true), i = 0, j = 0, m = this._model.data, has_children = false;
+				for(i = 0, j = obj.children.length; i < j; i++) {
+					if(m[obj.children[i]] && !m[obj.children[i]].state.hidden) {
+						has_children = true;
+						break;
+					}
+				}
+				if(obj.state.loaded && dom && dom.length) {
+					dom.removeClass('jstree-closed jstree-open jstree-leaf');
+					if (!has_children) {
+						dom.addClass('jstree-leaf');
+					}
+					else {
+						if (obj.id !== '#') {
+							dom.addClass(obj.state.opened ? 'jstree-open' : 'jstree-closed');
+						}
+					}
+				}
+				dom.removeClass("jstree-loading").attr('aria-busy',false);
+				/**
+				 * triggered after a node is loaded
+				 * @event
+				 * @name load_node.jstree
+				 * @param {Object} node the node that was loading
+				 * @param {Boolean} status was the node loaded successfully
+				 */
+				this.trigger('load_node', { "node" : obj, "status" : status });
+				if(callback) {
+					callback.call(this, obj, status);
+				}
+			}, this));
+			return true;
+		},
+		/**
+		 * load an array of nodes (will also load unavailable nodes as soon as the appear in the structure). Used internally.
+		 * @private
+		 * @name _load_nodes(nodes [, callback])
+		 * @param  {array} nodes
+		 * @param  {function} callback a function to be executed once loading is complete, the function is executed in the instance's scope and receives one argument - the array passed to _load_nodes
+		 */
+		_load_nodes : function (nodes, callback, is_callback, force_reload) {
+			var r = true,
+				c = function () { this._load_nodes(nodes, callback, true); },
+				m = this._model.data, i, j, tmp = [];
+			for(i = 0, j = nodes.length; i < j; i++) {
+				if(m[nodes[i]] && ( (!m[nodes[i]].state.loaded && !m[nodes[i]].state.failed) || (!is_callback && force_reload) )) {
+					if(!this.is_loading(nodes[i])) {
+						this.load_node(nodes[i], c);
+					}
+					r = false;
+				}
+			}
+			if(r) {
+				for(i = 0, j = nodes.length; i < j; i++) {
+					if(m[nodes[i]] && m[nodes[i]].state.loaded) {
+						tmp.push(nodes[i]);
+					}
+				}
+				if(callback && !callback.done) {
+					callback.call(this, tmp);
+					callback.done = true;
+				}
+			}
+		},
+		/**
+		 * loads all unloaded nodes
+		 * @name load_all([obj, callback])
+		 * @param {mixed} obj the node to load recursively, omit to load all nodes in the tree
+		 * @param {function} callback a function to be executed once loading all the nodes is complete,
+		 * @trigger load_all.jstree
+		 */
+		load_all : function (obj, callback) {
+			if(!obj) { obj = $.jstree.root; }
+			obj = this.get_node(obj);
+			if(!obj) { return false; }
+			var to_load = [],
+				m = this._model.data,
+				c = m[obj.id].children_d,
+				i, j;
+			if(obj.state && !obj.state.loaded) {
+				to_load.push(obj.id);
+			}
+			for(i = 0, j = c.length; i < j; i++) {
+				if(m[c[i]] && m[c[i]].state && !m[c[i]].state.loaded) {
+					to_load.push(c[i]);
+				}
+			}
+			if(to_load.length) {
+				this._load_nodes(to_load, function () {
+					this.load_all(obj, callback);
+				});
+			}
+			else {
+				/**
+				 * triggered after a load_all call completes
+				 * @event
+				 * @name load_all.jstree
+				 * @param {Object} node the recursively loaded node
+				 */
+				if(callback) { callback.call(this, obj); }
+				this.trigger('load_all', { "node" : obj });
+			}
+		},
+		/**
+		 * handles the actual loading of a node. Used only internally.
+		 * @private
+		 * @name _load_node(obj [, callback])
+		 * @param  {mixed} obj
+		 * @param  {function} callback a function to be executed once loading is complete, the function is executed in the instance's scope and receives one argument - a boolean status
+		 * @return {Boolean}
+		 */
+		_load_node : function (obj, callback) {
+			var s = this.settings.core.data, t;
+			var notTextOrCommentNode = function notTextOrCommentNode () {
+				return this.nodeType !== 3 && this.nodeType !== 8;
+			};
+			// use original HTML
+			if(!s) {
+				if(obj.id === $.jstree.root) {
+					return this._append_html_data(obj, this._data.core.original_container_html.clone(true), function (status) {
+						callback.call(this, status);
+					});
+				}
+				else {
+					return callback.call(this, false);
+				}
+				// return callback.call(this, obj.id === $.jstree.root ? this._append_html_data(obj, this._data.core.original_container_html.clone(true)) : false);
+			}
+			if($.isFunction(s)) {
+				return s.call(this, obj, $.proxy(function (d) {
+					if(d === false) {
+						callback.call(this, false);
+					}
+					else {
+						this[typeof d === 'string' ? '_append_html_data' : '_append_json_data'](obj, typeof d === 'string' ? $($.parseHTML(d)).filter(notTextOrCommentNode) : d, function (status) {
+							callback.call(this, status);
+						});
+					}
+					// return d === false ? callback.call(this, false) : callback.call(this, this[typeof d === 'string' ? '_append_html_data' : '_append_json_data'](obj, typeof d === 'string' ? $(d) : d));
+				}, this));
+			}
+			if(typeof s === 'object') {
+				if(s.url) {
+					s = $.extend(true, {}, s);
+					if($.isFunction(s.url)) {
+						s.url = s.url.call(this, obj);
+					}
+					if($.isFunction(s.data)) {
+						s.data = s.data.call(this, obj);
+					}
+					return $.ajax(s)
+						.done($.proxy(function (d,t,x) {
+								var type = x.getResponseHeader('Content-Type');
+								if((type && type.indexOf('json') !== -1) || typeof d === "object") {
+									return this._append_json_data(obj, d, function (status) { callback.call(this, status); });
+									//return callback.call(this, this._append_json_data(obj, d));
+								}
+								if((type && type.indexOf('html') !== -1) || typeof d === "string") {
+									return this._append_html_data(obj, $($.parseHTML(d)).filter(notTextOrCommentNode), function (status) { callback.call(this, status); });
+									// return callback.call(this, this._append_html_data(obj, $(d)));
+								}
+								this._data.core.last_error = { 'error' : 'ajax', 'plugin' : 'core', 'id' : 'core_04', 'reason' : 'Could not load node', 'data' : JSON.stringify({ 'id' : obj.id, 'xhr' : x }) };
+								this.settings.core.error.call(this, this._data.core.last_error);
+								return callback.call(this, false);
+							}, this))
+						.fail($.proxy(function (f) {
+								this._data.core.last_error = { 'error' : 'ajax', 'plugin' : 'core', 'id' : 'core_04', 'reason' : 'Could not load node', 'data' : JSON.stringify({ 'id' : obj.id, 'xhr' : f }) };
+								callback.call(this, false);
+								this.settings.core.error.call(this, this._data.core.last_error);
+							}, this));
+				}
+				if ($.isArray(s)) {
+					t = $.extend(true, [], s);
+				} else if ($.isPlainObject(s)) {
+					t = $.extend(true, {}, s);
+				} else {
+					t = s;
+				}
+				if(obj.id === $.jstree.root) {
+					return this._append_json_data(obj, t, function (status) {
+						callback.call(this, status);
+					});
+				}
+				else {
+					this._data.core.last_error = { 'error' : 'nodata', 'plugin' : 'core', 'id' : 'core_05', 'reason' : 'Could not load node', 'data' : JSON.stringify({ 'id' : obj.id }) };
+					this.settings.core.error.call(this, this._data.core.last_error);
+					return callback.call(this, false);
+				}
+				//return callback.call(this, (obj.id === $.jstree.root ? this._append_json_data(obj, t) : false) );
+			}
+			if(typeof s === 'string') {
+				if(obj.id === $.jstree.root) {
+					return this._append_html_data(obj, $($.parseHTML(s)).filter(notTextOrCommentNode), function (status) {
+						callback.call(this, status);
+					});
+				}
+				else {
+					this._data.core.last_error = { 'error' : 'nodata', 'plugin' : 'core', 'id' : 'core_06', 'reason' : 'Could not load node', 'data' : JSON.stringify({ 'id' : obj.id }) };
+					this.settings.core.error.call(this, this._data.core.last_error);
+					return callback.call(this, false);
+				}
+				//return callback.call(this, (obj.id === $.jstree.root ? this._append_html_data(obj, $(s)) : false) );
+			}
+			return callback.call(this, false);
+		},
+		/**
+		 * adds a node to the list of nodes to redraw. Used only internally.
+		 * @private
+		 * @name _node_changed(obj [, callback])
+		 * @param  {mixed} obj
+		 */
+		_node_changed : function (obj) {
+			obj = this.get_node(obj);
+      if (obj && $.inArray(obj.id, this._model.changed) === -1) {
+				this._model.changed.push(obj.id);
+			}
+		},
+		/**
+		 * appends HTML content to the tree. Used internally.
+		 * @private
+		 * @name _append_html_data(obj, data)
+		 * @param  {mixed} obj the node to append to
+		 * @param  {String} data the HTML string to parse and append
+		 * @trigger model.jstree, changed.jstree
+		 */
+		_append_html_data : function (dom, data, cb) {
+			dom = this.get_node(dom);
+			dom.children = [];
+			dom.children_d = [];
+			var dat = data.is('ul') ? data.children() : data,
+				par = dom.id,
+				chd = [],
+				dpc = [],
+				m = this._model.data,
+				p = m[par],
+				s = this._data.core.selected.length,
+				tmp, i, j;
+			dat.each($.proxy(function (i, v) {
+				tmp = this._parse_model_from_html($(v), par, p.parents.concat());
+				if(tmp) {
+					chd.push(tmp);
+					dpc.push(tmp);
+					if(m[tmp].children_d.length) {
+						dpc = dpc.concat(m[tmp].children_d);
+					}
+				}
+			}, this));
+			p.children = chd;
+			p.children_d = dpc;
+			for(i = 0, j = p.parents.length; i < j; i++) {
+				m[p.parents[i]].children_d = m[p.parents[i]].children_d.concat(dpc);
+			}
+			/**
+			 * triggered when new data is inserted to the tree model
+			 * @event
+			 * @name model.jstree
+			 * @param {Array} nodes an array of node IDs
+			 * @param {String} parent the parent ID of the nodes
+			 */
+			this.trigger('model', { "nodes" : dpc, 'parent' : par });
+			if(par !== $.jstree.root) {
+				this._node_changed(par);
+				this.redraw();
+			}
+			else {
+				this.get_container_ul().children('.jstree-initial-node').remove();
+				this.redraw(true);
+			}
+			if(this._data.core.selected.length !== s) {
+				this.trigger('changed', { 'action' : 'model', 'selected' : this._data.core.selected });
+			}
+			cb.call(this, true);
+		},
+		/**
+		 * appends JSON content to the tree. Used internally.
+		 * @private
+		 * @name _append_json_data(obj, data)
+		 * @param  {mixed} obj the node to append to
+		 * @param  {String} data the JSON object to parse and append
+		 * @param  {Boolean} force_processing internal param - do not set
+		 * @trigger model.jstree, changed.jstree
+		 */
+		_append_json_data : function (dom, data, cb, force_processing) {
+			if(this.element === null) { return; }
+			dom = this.get_node(dom);
+			dom.children = [];
+			dom.children_d = [];
+			// *%$@!!!
+			if(data.d) {
+				data = data.d;
+				if(typeof data === "string") {
+					data = JSON.parse(data);
+				}
+			}
+			if(!$.isArray(data)) { data = [data]; }
+			var w = null,
+				args = {
+					'df'	: this._model.default_state,
+					'dat'	: data,
+					'par'	: dom.id,
+					'm'		: this._model.data,
+					't_id'	: this._id,
+					't_cnt'	: this._cnt,
+					'sel'	: this._data.core.selected
+				},
+				func = function (data, undefined) {
+					if(data.data) { data = data.data; }
+					var dat = data.dat,
+						par = data.par,
+						chd = [],
+						dpc = [],
+						add = [],
+						df = data.df,
+						t_id = data.t_id,
+						t_cnt = data.t_cnt,
+						m = data.m,
+						p = m[par],
+						sel = data.sel,
+						tmp, i, j, rslt,
+						parse_flat = function (d, p, ps) {
+							if(!ps) { ps = []; }
+							else { ps = ps.concat(); }
+							if(p) { ps.unshift(p); }
+							var tid = d.id.toString(),
+								i, j, c, e,
+								tmp = {
+									id			: tid,
+									text		: d.text || '',
+									icon		: d.icon !== undefined ? d.icon : true,
+									parent		: p,
+									parents		: ps,
+									children	: d.children || [],
+									children_d	: d.children_d || [],
+									data		: d.data,
+									state		: { },
+									li_attr		: { id : false },
+									a_attr		: { href : '#' },
+									original	: false
+								};
+							for(i in df) {
+								if(df.hasOwnProperty(i)) {
+									tmp.state[i] = df[i];
+								}
+							}
+							if(d && d.data && d.data.jstree && d.data.jstree.icon) {
+								tmp.icon = d.data.jstree.icon;
+							}
+							if(tmp.icon === undefined || tmp.icon === null || tmp.icon === "") {
+								tmp.icon = true;
+							}
+							if(d && d.data) {
+								tmp.data = d.data;
+								if(d.data.jstree) {
+									for(i in d.data.jstree) {
+										if(d.data.jstree.hasOwnProperty(i)) {
+											tmp.state[i] = d.data.jstree[i];
+										}
+									}
+								}
+							}
+							if(d && typeof d.state === 'object') {
+								for (i in d.state) {
+									if(d.state.hasOwnProperty(i)) {
+										tmp.state[i] = d.state[i];
+									}
+								}
+							}
+							if(d && typeof d.li_attr === 'object') {
+								for (i in d.li_attr) {
+									if(d.li_attr.hasOwnProperty(i)) {
+										tmp.li_attr[i] = d.li_attr[i];
+									}
+								}
+							}
+							if(!tmp.li_attr.id) {
+								tmp.li_attr.id = tid;
+							}
+							if(d && typeof d.a_attr === 'object') {
+								for (i in d.a_attr) {
+									if(d.a_attr.hasOwnProperty(i)) {
+										tmp.a_attr[i] = d.a_attr[i];
+									}
+								}
+							}
+							if(d && d.children && d.children === true) {
+								tmp.state.loaded = false;
+								tmp.children = [];
+								tmp.children_d = [];
+							}
+							m[tmp.id] = tmp;
+							for(i = 0, j = tmp.children.length; i < j; i++) {
+								c = parse_flat(m[tmp.children[i]], tmp.id, ps);
+								e = m[c];
+								tmp.children_d.push(c);
+								if(e.children_d.length) {
+									tmp.children_d = tmp.children_d.concat(e.children_d);
+								}
+							}
+							delete d.data;
+							delete d.children;
+							m[tmp.id].original = d;
+							if(tmp.state.selected) {
+								add.push(tmp.id);
+							}
+							return tmp.id;
+						},
+						parse_nest = function (d, p, ps) {
+							if(!ps) { ps = []; }
+							else { ps = ps.concat(); }
+							if(p) { ps.unshift(p); }
+							var tid = false, i, j, c, e, tmp;
+							do {
+								tid = 'j' + t_id + '_' + (++t_cnt);
+							} while(m[tid]);
+
+							tmp = {
+								id			: false,
+								text		: typeof d === 'string' ? d : '',
+								icon		: typeof d === 'object' && d.icon !== undefined ? d.icon : true,
+								parent		: p,
+								parents		: ps,
+								children	: [],
+								children_d	: [],
+								data		: null,
+								state		: { },
+								li_attr		: { id : false },
+								a_attr		: { href : '#' },
+								original	: false
+							};
+							for(i in df) {
+								if(df.hasOwnProperty(i)) {
+									tmp.state[i] = df[i];
+								}
+							}
+							if(d && d.id) { tmp.id = d.id.toString(); }
+							if(d && d.text) { tmp.text = d.text; }
+							if(d && d.data && d.data.jstree && d.data.jstree.icon) {
+								tmp.icon = d.data.jstree.icon;
+							}
+							if(tmp.icon === undefined || tmp.icon === null || tmp.icon === "") {
+								tmp.icon = true;
+							}
+							if(d && d.data) {
+								tmp.data = d.data;
+								if(d.data.jstree) {
+									for(i in d.data.jstree) {
+										if(d.data.jstree.hasOwnProperty(i)) {
+											tmp.state[i] = d.data.jstree[i];
+										}
+									}
+								}
+							}
+							if(d && typeof d.state === 'object') {
+								for (i in d.state) {
+									if(d.state.hasOwnProperty(i)) {
+										tmp.state[i] = d.state[i];
+									}
+								}
+							}
+							if(d && typeof d.li_attr === 'object') {
+								for (i in d.li_attr) {
+									if(d.li_attr.hasOwnProperty(i)) {
+										tmp.li_attr[i] = d.li_attr[i];
+									}
+								}
+							}
+							if(tmp.li_attr.id && !tmp.id) {
+								tmp.id = tmp.li_attr.id.toString();
+							}
+							if(!tmp.id) {
+								tmp.id = tid;
+							}
+							if(!tmp.li_attr.id) {
+								tmp.li_attr.id = tmp.id;
+							}
+							if(d && typeof d.a_attr === 'object') {
+								for (i in d.a_attr) {
+									if(d.a_attr.hasOwnProperty(i)) {
+										tmp.a_attr[i] = d.a_attr[i];
+									}
+								}
+							}
+							if(d && d.children && d.children.length) {
+								for(i = 0, j = d.children.length; i < j; i++) {
+									c = parse_nest(d.children[i], tmp.id, ps);
+									e = m[c];
+									tmp.children.push(c);
+									if(e.children_d.length) {
+										tmp.children_d = tmp.children_d.concat(e.children_d);
+									}
+								}
+								tmp.children_d = tmp.children_d.concat(tmp.children);
+							}
+							if(d && d.children && d.children === true) {
+								tmp.state.loaded = false;
+								tmp.children = [];
+								tmp.children_d = [];
+							}
+							delete d.data;
+							delete d.children;
+							tmp.original = d;
+							m[tmp.id] = tmp;
+							if(tmp.state.selected) {
+								add.push(tmp.id);
+							}
+							return tmp.id;
+						};
+
+					if(dat.length && dat[0].id !== undefined && dat[0].parent !== undefined) {
+						// Flat JSON support (for easy import from DB):
+						// 1) convert to object (foreach)
+						for(i = 0, j = dat.length; i < j; i++) {
+							if(!dat[i].children) {
+								dat[i].children = [];
+							}
+							if(!dat[i].state) {
+								dat[i].state = {};
+							}
+							m[dat[i].id.toString()] = dat[i];
+						}
+						// 2) populate children (foreach)
+						for(i = 0, j = dat.length; i < j; i++) {
+							if (!m[dat[i].parent.toString()]) {
+								this._data.core.last_error = { 'error' : 'parse', 'plugin' : 'core', 'id' : 'core_07', 'reason' : 'Node with invalid parent', 'data' : JSON.stringify({ 'id' : dat[i].id.toString(), 'parent' : dat[i].parent.toString() }) };
+								this.settings.core.error.call(this, this._data.core.last_error);
+								continue;
+							}
+
+							m[dat[i].parent.toString()].children.push(dat[i].id.toString());
+							// populate parent.children_d
+							p.children_d.push(dat[i].id.toString());
+						}
+						// 3) normalize && populate parents and children_d with recursion
+						for(i = 0, j = p.children.length; i < j; i++) {
+							tmp = parse_flat(m[p.children[i]], par, p.parents.concat());
+							dpc.push(tmp);
+							if(m[tmp].children_d.length) {
+								dpc = dpc.concat(m[tmp].children_d);
+							}
+						}
+						for(i = 0, j = p.parents.length; i < j; i++) {
+							m[p.parents[i]].children_d = m[p.parents[i]].children_d.concat(dpc);
+						}
+						// ?) three_state selection - p.state.selected && t - (if three_state foreach(dat => ch) -> foreach(parents) if(parent.selected) child.selected = true;
+						rslt = {
+							'cnt' : t_cnt,
+							'mod' : m,
+							'sel' : sel,
+							'par' : par,
+							'dpc' : dpc,
+							'add' : add
+						};
+					}
+					else {
+						for(i = 0, j = dat.length; i < j; i++) {
+							tmp = parse_nest(dat[i], par, p.parents.concat());
+							if(tmp) {
+								chd.push(tmp);
+								dpc.push(tmp);
+								if(m[tmp].children_d.length) {
+									dpc = dpc.concat(m[tmp].children_d);
+								}
+							}
+						}
+						p.children = chd;
+						p.children_d = dpc;
+						for(i = 0, j = p.parents.length; i < j; i++) {
+							m[p.parents[i]].children_d = m[p.parents[i]].children_d.concat(dpc);
+						}
+						rslt = {
+							'cnt' : t_cnt,
+							'mod' : m,
+							'sel' : sel,
+							'par' : par,
+							'dpc' : dpc,
+							'add' : add
+						};
+					}
+					if(typeof window === 'undefined' || typeof window.document === 'undefined') {
+						postMessage(rslt);
+					}
+					else {
+						return rslt;
+					}
+				},
+				rslt = function (rslt, worker) {
+					if(this.element === null) { return; }
+					this._cnt = rslt.cnt;
+					var i, m = this._model.data;
+					for (i in m) {
+						if (m.hasOwnProperty(i) && m[i].state && m[i].state.loading && rslt.mod[i]) {
+							rslt.mod[i].state.loading = true;
+						}
+					}
+					this._model.data = rslt.mod; // breaks the reference in load_node - careful
+
+					if(worker) {
+						var j, a = rslt.add, r = rslt.sel, s = this._data.core.selected.slice();
+						m = this._model.data;
+						// if selection was changed while calculating in worker
+						if(r.length !== s.length || $.vakata.array_unique(r.concat(s)).length !== r.length) {
+							// deselect nodes that are no longer selected
+							for(i = 0, j = r.length; i < j; i++) {
+								if($.inArray(r[i], a) === -1 && $.inArray(r[i], s) === -1) {
+									m[r[i]].state.selected = false;
+								}
+							}
+							// select nodes that were selected in the mean time
+							for(i = 0, j = s.length; i < j; i++) {
+								if($.inArray(s[i], r) === -1) {
+									m[s[i]].state.selected = true;
+								}
+							}
+						}
+					}
+					if(rslt.add.length) {
+						this._data.core.selected = this._data.core.selected.concat(rslt.add);
+					}
+
+					this.trigger('model', { "nodes" : rslt.dpc, 'parent' : rslt.par });
+
+					if(rslt.par !== $.jstree.root) {
+						this._node_changed(rslt.par);
+						this.redraw();
+					}
+					else {
+						// this.get_container_ul().children('.jstree-initial-node').remove();
+						this.redraw(true);
+					}
+					if(rslt.add.length) {
+						this.trigger('changed', { 'action' : 'model', 'selected' : this._data.core.selected });
+					}
+					cb.call(this, true);
+				};
+			if(this.settings.core.worker && window.Blob && window.URL && window.Worker) {
+				try {
+					if(this._wrk === null) {
+						this._wrk = window.URL.createObjectURL(
+							new window.Blob(
+								['self.onmessage = ' + func.toString()],
+								{type:"text/javascript"}
+							)
+						);
+					}
+					if(!this._data.core.working || force_processing) {
+						this._data.core.working = true;
+						w = new window.Worker(this._wrk);
+						w.onmessage = $.proxy(function (e) {
+							rslt.call(this, e.data, true);
+							try { w.terminate(); w = null; } catch(ignore) { }
+							if(this._data.core.worker_queue.length) {
+								this._append_json_data.apply(this, this._data.core.worker_queue.shift());
+							}
+							else {
+								this._data.core.working = false;
+							}
+						}, this);
+						if(!args.par) {
+							if(this._data.core.worker_queue.length) {
+								this._append_json_data.apply(this, this._data.core.worker_queue.shift());
+							}
+							else {
+								this._data.core.working = false;
+							}
+						}
+						else {
+							w.postMessage(args);
+						}
+					}
+					else {
+						this._data.core.worker_queue.push([dom, data, cb, true]);
+					}
+				}
+				catch(e) {
+					rslt.call(this, func(args), false);
+					if(this._data.core.worker_queue.length) {
+						this._append_json_data.apply(this, this._data.core.worker_queue.shift());
+					}
+					else {
+						this._data.core.working = false;
+					}
+				}
+			}
+			else {
+				rslt.call(this, func(args), false);
+			}
+		},
+		/**
+		 * parses a node from a jQuery object and appends them to the in memory tree model. Used internally.
+		 * @private
+		 * @name _parse_model_from_html(d [, p, ps])
+		 * @param  {jQuery} d the jQuery object to parse
+		 * @param  {String} p the parent ID
+		 * @param  {Array} ps list of all parents
+		 * @return {String} the ID of the object added to the model
+		 */
+		_parse_model_from_html : function (d, p, ps) {
+			if(!ps) { ps = []; }
+			else { ps = [].concat(ps); }
+			if(p) { ps.unshift(p); }
+			var c, e, m = this._model.data,
+				data = {
+					id			: false,
+					text		: false,
+					icon		: true,
+					parent		: p,
+					parents		: ps,
+					children	: [],
+					children_d	: [],
+					data		: null,
+					state		: { },
+					li_attr		: { id : false },
+					a_attr		: { href : '#' },
+					original	: false
+				}, i, tmp, tid;
+			for(i in this._model.default_state) {
+				if(this._model.default_state.hasOwnProperty(i)) {
+					data.state[i] = this._model.default_state[i];
+				}
+			}
+			tmp = $.vakata.attributes(d, true);
+			$.each(tmp, function (i, v) {
+				v = $.trim(v);
+				if(!v.length) { return true; }
+				data.li_attr[i] = v;
+				if(i === 'id') {
+					data.id = v.toString();
+				}
+			});
+			tmp = d.children('a').first();
+			if(tmp.length) {
+				tmp = $.vakata.attributes(tmp, true);
+				$.each(tmp, function (i, v) {
+					v = $.trim(v);
+					if(v.length) {
+						data.a_attr[i] = v;
+					}
+				});
+			}
+			tmp = d.children("a").first().length ? d.children("a").first().clone() : d.clone();
+			tmp.children("ins, i, ul").remove();
+			tmp = tmp.html();
+			tmp = $('<div />').html(tmp);
+			data.text = this.settings.core.force_text ? tmp.text() : tmp.html();
+			tmp = d.data();
+			data.data = tmp ? $.extend(true, {}, tmp) : null;
+			data.state.opened = d.hasClass('jstree-open');
+			data.state.selected = d.children('a').hasClass('jstree-clicked');
+			data.state.disabled = d.children('a').hasClass('jstree-disabled');
+			if(data.data && data.data.jstree) {
+				for(i in data.data.jstree) {
+					if(data.data.jstree.hasOwnProperty(i)) {
+						data.state[i] = data.data.jstree[i];
+					}
+				}
+			}
+			tmp = d.children("a").children(".jstree-themeicon");
+			if(tmp.length) {
+				data.icon = tmp.hasClass('jstree-themeicon-hidden') ? false : tmp.attr('rel');
+			}
+			if(data.state.icon !== undefined) {
+				data.icon = data.state.icon;
+			}
+			if(data.icon === undefined || data.icon === null || data.icon === "") {
+				data.icon = true;
+			}
+			tmp = d.children("ul").children("li");
+			do {
+				tid = 'j' + this._id + '_' + (++this._cnt);
+			} while(m[tid]);
+			data.id = data.li_attr.id ? data.li_attr.id.toString() : tid;
+			if(tmp.length) {
+				tmp.each($.proxy(function (i, v) {
+					c = this._parse_model_from_html($(v), data.id, ps);
+					e = this._model.data[c];
+					data.children.push(c);
+					if(e.children_d.length) {
+						data.children_d = data.children_d.concat(e.children_d);
+					}
+				}, this));
+				data.children_d = data.children_d.concat(data.children);
+			}
+			else {
+				if(d.hasClass('jstree-closed')) {
+					data.state.loaded = false;
+				}
+			}
+			if(data.li_attr['class']) {
+				data.li_attr['class'] = data.li_attr['class'].replace('jstree-closed','').replace('jstree-open','');
+			}
+			if(data.a_attr['class']) {
+				data.a_attr['class'] = data.a_attr['class'].replace('jstree-clicked','').replace('jstree-disabled','');
+			}
+			m[data.id] = data;
+			if(data.state.selected) {
+				this._data.core.selected.push(data.id);
+			}
+			return data.id;
+		},
+		/**
+		 * parses a node from a JSON object (used when dealing with flat data, which has no nesting of children, but has id and parent properties) and appends it to the in memory tree model. Used internally.
+		 * @private
+		 * @name _parse_model_from_flat_json(d [, p, ps])
+		 * @param  {Object} d the JSON object to parse
+		 * @param  {String} p the parent ID
+		 * @param  {Array} ps list of all parents
+		 * @return {String} the ID of the object added to the model
+		 */
+		_parse_model_from_flat_json : function (d, p, ps) {
+			if(!ps) { ps = []; }
+			else { ps = ps.concat(); }
+			if(p) { ps.unshift(p); }
+			var tid = d.id.toString(),
+				m = this._model.data,
+				df = this._model.default_state,
+				i, j, c, e,
+				tmp = {
+					id			: tid,
+					text		: d.text || '',
+					icon		: d.icon !== undefined ? d.icon : true,
+					parent		: p,
+					parents		: ps,
+					children	: d.children || [],
+					children_d	: d.children_d || [],
+					data		: d.data,
+					state		: { },
+					li_attr		: { id : false },
+					a_attr		: { href : '#' },
+					original	: false
+				};
+			for(i in df) {
+				if(df.hasOwnProperty(i)) {
+					tmp.state[i] = df[i];
+				}
+			}
+			if(d && d.data && d.data.jstree && d.data.jstree.icon) {
+				tmp.icon = d.data.jstree.icon;
+			}
+			if(tmp.icon === undefined || tmp.icon === null || tmp.icon === "") {
+				tmp.icon = true;
+			}
+			if(d && d.data) {
+				tmp.data = d.data;
+				if(d.data.jstree) {
+					for(i in d.data.jstree) {
+						if(d.data.jstree.hasOwnProperty(i)) {
+							tmp.state[i] = d.data.jstree[i];
+						}
+					}
+				}
+			}
+			if(d && typeof d.state === 'object') {
+				for (i in d.state) {
+					if(d.state.hasOwnProperty(i)) {
+						tmp.state[i] = d.state[i];
+					}
+				}
+			}
+			if(d && typeof d.li_attr === 'object') {
+				for (i in d.li_attr) {
+					if(d.li_attr.hasOwnProperty(i)) {
+						tmp.li_attr[i] = d.li_attr[i];
+					}
+				}
+			}
+			if(!tmp.li_attr.id) {
+				tmp.li_attr.id = tid;
+			}
+			if(d && typeof d.a_attr === 'object') {
+				for (i in d.a_attr) {
+					if(d.a_attr.hasOwnProperty(i)) {
+						tmp.a_attr[i] = d.a_attr[i];
+					}
+				}
+			}
+			if(d && d.children && d.children === true) {
+				tmp.state.loaded = false;
+				tmp.children = [];
+				tmp.children_d = [];
+			}
+			m[tmp.id] = tmp;
+			for(i = 0, j = tmp.children.length; i < j; i++) {
+				c = this._parse_model_from_flat_json(m[tmp.children[i]], tmp.id, ps);
+				e = m[c];
+				tmp.children_d.push(c);
+				if(e.children_d.length) {
+					tmp.children_d = tmp.children_d.concat(e.children_d);
+				}
+			}
+			delete d.data;
+			delete d.children;
+			m[tmp.id].original = d;
+			if(tmp.state.selected) {
+				this._data.core.selected.push(tmp.id);
+			}
+			return tmp.id;
+		},
+		/**
+		 * parses a node from a JSON object and appends it to the in memory tree model. Used internally.
+		 * @private
+		 * @name _parse_model_from_json(d [, p, ps])
+		 * @param  {Object} d the JSON object to parse
+		 * @param  {String} p the parent ID
+		 * @param  {Array} ps list of all parents
+		 * @return {String} the ID of the object added to the model
+		 */
+		_parse_model_from_json : function (d, p, ps) {
+			if(!ps) { ps = []; }
+			else { ps = ps.concat(); }
+			if(p) { ps.unshift(p); }
+			var tid = false, i, j, c, e, m = this._model.data, df = this._model.default_state, tmp;
+			do {
+				tid = 'j' + this._id + '_' + (++this._cnt);
+			} while(m[tid]);
+
+			tmp = {
+				id			: false,
+				text		: typeof d === 'string' ? d : '',
+				icon		: typeof d === 'object' && d.icon !== undefined ? d.icon : true,
+				parent		: p,
+				parents		: ps,
+				children	: [],
+				children_d	: [],
+				data		: null,
+				state		: { },
+				li_attr		: { id : false },
+				a_attr		: { href : '#' },
+				original	: false
+			};
+			for(i in df) {
+				if(df.hasOwnProperty(i)) {
+					tmp.state[i] = df[i];
+				}
+			}
+			if(d && d.id) { tmp.id = d.id.toString(); }
+			if(d && d.text) { tmp.text = d.text; }
+			if(d && d.data && d.data.jstree && d.data.jstree.icon) {
+				tmp.icon = d.data.jstree.icon;
+			}
+			if(tmp.icon === undefined || tmp.icon === null || tmp.icon === "") {
+				tmp.icon = true;
+			}
+			if(d && d.data) {
+				tmp.data = d.data;
+				if(d.data.jstree) {
+					for(i in d.data.jstree) {
+						if(d.data.jstree.hasOwnProperty(i)) {
+							tmp.state[i] = d.data.jstree[i];
+						}
+					}
+				}
+			}
+			if(d && typeof d.state === 'object') {
+				for (i in d.state) {
+					if(d.state.hasOwnProperty(i)) {
+						tmp.state[i] = d.state[i];
+					}
+				}
+			}
+			if(d && typeof d.li_attr === 'object') {
+				for (i in d.li_attr) {
+					if(d.li_attr.hasOwnProperty(i)) {
+						tmp.li_attr[i] = d.li_attr[i];
+					}
+				}
+			}
+			if(tmp.li_attr.id && !tmp.id) {
+				tmp.id = tmp.li_attr.id.toString();
+			}
+			if(!tmp.id) {
+				tmp.id = tid;
+			}
+			if(!tmp.li_attr.id) {
+				tmp.li_attr.id = tmp.id;
+			}
+			if(d && typeof d.a_attr === 'object') {
+				for (i in d.a_attr) {
+					if(d.a_attr.hasOwnProperty(i)) {
+						tmp.a_attr[i] = d.a_attr[i];
+					}
+				}
+			}
+			if(d && d.children && d.children.length) {
+				for(i = 0, j = d.children.length; i < j; i++) {
+					c = this._parse_model_from_json(d.children[i], tmp.id, ps);
+					e = m[c];
+					tmp.children.push(c);
+					if(e.children_d.length) {
+						tmp.children_d = tmp.children_d.concat(e.children_d);
+					}
+				}
+				tmp.children_d = tmp.children_d.concat(tmp.children);
+			}
+			if(d && d.children && d.children === true) {
+				tmp.state.loaded = false;
+				tmp.children = [];
+				tmp.children_d = [];
+			}
+			delete d.data;
+			delete d.children;
+			tmp.original = d;
+			m[tmp.id] = tmp;
+			if(tmp.state.selected) {
+				this._data.core.selected.push(tmp.id);
+			}
+			return tmp.id;
+		},
+		/**
+		 * redraws all nodes that need to be redrawn. Used internally.
+		 * @private
+		 * @name _redraw()
+		 * @trigger redraw.jstree
+		 */
+		_redraw : function () {
+			var nodes = this._model.force_full_redraw ? this._model.data[$.jstree.root].children.concat([]) : this._model.changed.concat([]),
+				f = document.createElement('UL'), tmp, i, j, fe = this._data.core.focused;
+			for(i = 0, j = nodes.length; i < j; i++) {
+				tmp = this.redraw_node(nodes[i], true, this._model.force_full_redraw);
+				if(tmp && this._model.force_full_redraw) {
+					f.appendChild(tmp);
+				}
+			}
+			if(this._model.force_full_redraw) {
+				f.className = this.get_container_ul()[0].className;
+				f.setAttribute('role','group');
+				this.element.empty().append(f);
+				//this.get_container_ul()[0].appendChild(f);
+			}
+			if(fe !== null) {
+				tmp = this.get_node(fe, true);
+				if(tmp && tmp.length && tmp.children('.jstree-anchor')[0] !== document.activeElement) {
+					tmp.children('.jstree-anchor').focus();
+				}
+				else {
+					this._data.core.focused = null;
+				}
+			}
+			this._model.force_full_redraw = false;
+			this._model.changed = [];
+			/**
+			 * triggered after nodes are redrawn
+			 * @event
+			 * @name redraw.jstree
+			 * @param {array} nodes the redrawn nodes
+			 */
+			this.trigger('redraw', { "nodes" : nodes });
+		},
+		/**
+		 * redraws all nodes that need to be redrawn or optionally - the whole tree
+		 * @name redraw([full])
+		 * @param {Boolean} full if set to `true` all nodes are redrawn.
+		 */
+		redraw : function (full) {
+			if(full) {
+				this._model.force_full_redraw = true;
+			}
+			//if(this._model.redraw_timeout) {
+			//	clearTimeout(this._model.redraw_timeout);
+			//}
+			//this._model.redraw_timeout = setTimeout($.proxy(this._redraw, this),0);
+			this._redraw();
+		},
+		/**
+		 * redraws a single node's children. Used internally.
+		 * @private
+		 * @name draw_children(node)
+		 * @param {mixed} node the node whose children will be redrawn
+		 */
+		draw_children : function (node) {
+			var obj = this.get_node(node),
+				i = false,
+				j = false,
+				k = false,
+				d = document;
+			if(!obj) { return false; }
+			if(obj.id === $.jstree.root) { return this.redraw(true); }
+			node = this.get_node(node, true);
+			if(!node || !node.length) { return false; } // TODO: quick toggle
+
+			node.children('.jstree-children').remove();
+			node = node[0];
+			if(obj.children.length && obj.state.loaded) {
+				k = d.createElement('UL');
+				k.setAttribute('role', 'group');
+				k.className = 'jstree-children';
+				for(i = 0, j = obj.children.length; i < j; i++) {
+					k.appendChild(this.redraw_node(obj.children[i], true, true));
+				}
+				node.appendChild(k);
+			}
+		},
+		/**
+		 * redraws a single node. Used internally.
+		 * @private
+		 * @name redraw_node(node, deep, is_callback, force_render)
+		 * @param {mixed} node the node to redraw
+		 * @param {Boolean} deep should child nodes be redrawn too
+		 * @param {Boolean} is_callback is this a recursion call
+		 * @param {Boolean} force_render should children of closed parents be drawn anyway
+		 */
+		redraw_node : function (node, deep, is_callback, force_render) {
+			var obj = this.get_node(node),
+				par = false,
+				ind = false,
+				old = false,
+				i = false,
+				j = false,
+				k = false,
+				c = '',
+				d = document,
+				m = this._model.data,
+				f = false,
+				s = false,
+				tmp = null,
+				t = 0,
+				l = 0,
+				has_children = false,
+				last_sibling = false;
+			if(!obj) { return false; }
+			if(obj.id === $.jstree.root) {  return this.redraw(true); }
+			deep = deep || obj.children.length === 0;
+			node = !document.querySelector ? document.getElementById(obj.id) : this.element[0].querySelector('#' + ("0123456789".indexOf(obj.id[0]) !== -1 ? '\\3' + obj.id[0] + ' ' + obj.id.substr(1).replace($.jstree.idregex,'\\$&') : obj.id.replace($.jstree.idregex,'\\$&')) ); //, this.element);
+			if(!node) {
+				deep = true;
+				//node = d.createElement('LI');
+				if(!is_callback) {
+					par = obj.parent !== $.jstree.root ? $('#' + obj.parent.replace($.jstree.idregex,'\\$&'), this.element)[0] : null;
+					if(par !== null && (!par || !m[obj.parent].state.opened)) {
+						return false;
+					}
+					ind = $.inArray(obj.id, par === null ? m[$.jstree.root].children : m[obj.parent].children);
+				}
+			}
+			else {
+				node = $(node);
+				if(!is_callback) {
+					par = node.parent().parent()[0];
+					if(par === this.element[0]) {
+						par = null;
+					}
+					ind = node.index();
+				}
+				// m[obj.id].data = node.data(); // use only node's data, no need to touch jquery storage
+				if(!deep && obj.children.length && !node.children('.jstree-children').length) {
+					deep = true;
+				}
+				if(!deep) {
+					old = node.children('.jstree-children')[0];
+				}
+				f = node.children('.jstree-anchor')[0] === document.activeElement;
+				node.remove();
+				//node = d.createElement('LI');
+				//node = node[0];
+			}
+			node = this._data.core.node.cloneNode(true);
+			// node is DOM, deep is boolean
+
+			c = 'jstree-node ';
+			for(i in obj.li_attr) {
+				if(obj.li_attr.hasOwnProperty(i)) {
+					if(i === 'id') { continue; }
+					if(i !== 'class') {
+						node.setAttribute(i, obj.li_attr[i]);
+					}
+					else {
+						c += obj.li_attr[i];
+					}
+				}
+			}
+			if(!obj.a_attr.id) {
+				obj.a_attr.id = obj.id + '_anchor';
+			}
+			node.setAttribute('aria-selected', !!obj.state.selected);
+			node.setAttribute('aria-level', obj.parents.length);
+			node.setAttribute('aria-labelledby', obj.a_attr.id);
+			if(obj.state.disabled) {
+				node.setAttribute('aria-disabled', true);
+			}
+
+			for(i = 0, j = obj.children.length; i < j; i++) {
+				if(!m[obj.children[i]].state.hidden) {
+					has_children = true;
+					break;
+				}
+			}
+			if(obj.parent !== null && m[obj.parent] && !obj.state.hidden) {
+				i = $.inArray(obj.id, m[obj.parent].children);
+				last_sibling = obj.id;
+				if(i !== -1) {
+					i++;
+					for(j = m[obj.parent].children.length; i < j; i++) {
+						if(!m[m[obj.parent].children[i]].state.hidden) {
+							last_sibling = m[obj.parent].children[i];
+						}
+						if(last_sibling !== obj.id) {
+							break;
+						}
+					}
+				}
+			}
+
+			if(obj.state.hidden) {
+				c += ' jstree-hidden';
+			}
+			if (obj.state.loading) {
+				c += ' jstree-loading';
+			}
+			if(obj.state.loaded && !has_children) {
+				c += ' jstree-leaf';
+			}
+			else {
+				c += obj.state.opened && obj.state.loaded ? ' jstree-open' : ' jstree-closed';
+				node.setAttribute('aria-expanded', (obj.state.opened && obj.state.loaded) );
+			}
+			if(last_sibling === obj.id) {
+				c += ' jstree-last';
+			}
+			node.id = obj.id;
+			node.className = c;
+			c = ( obj.state.selected ? ' jstree-clicked' : '') + ( obj.state.disabled ? ' jstree-disabled' : '');
+			for(j in obj.a_attr) {
+				if(obj.a_attr.hasOwnProperty(j)) {
+					if(j === 'href' && obj.a_attr[j] === '#') { continue; }
+					if(j !== 'class') {
+						node.childNodes[1].setAttribute(j, obj.a_attr[j]);
+					}
+					else {
+						c += ' ' + obj.a_attr[j];
+					}
+				}
+			}
+			if(c.length) {
+				node.childNodes[1].className = 'jstree-anchor ' + c;
+			}
+			if((obj.icon && obj.icon !== true) || obj.icon === false) {
+				if(obj.icon === false) {
+					node.childNodes[1].childNodes[0].className += ' jstree-themeicon-hidden';
+				}
+				else if(obj.icon.indexOf('/') === -1 && obj.icon.indexOf('.') === -1) {
+					node.childNodes[1].childNodes[0].className += ' ' + obj.icon + ' jstree-themeicon-custom';
+				}
+				else {
+					node.childNodes[1].childNodes[0].style.backgroundImage = 'url("'+obj.icon+'")';
+					node.childNodes[1].childNodes[0].style.backgroundPosition = 'center center';
+					node.childNodes[1].childNodes[0].style.backgroundSize = 'auto';
+					node.childNodes[1].childNodes[0].className += ' jstree-themeicon-custom';
+				}
+			}
+
+			if(this.settings.core.force_text) {
+				node.childNodes[1].appendChild(d.createTextNode(obj.text));
+			}
+			else {
+				node.childNodes[1].innerHTML += obj.text;
+			}
+
+
+			if(deep && obj.children.length && (obj.state.opened || force_render) && obj.state.loaded) {
+				k = d.createElement('UL');
+				k.setAttribute('role', 'group');
+				k.className = 'jstree-children';
+				for(i = 0, j = obj.children.length; i < j; i++) {
+					k.appendChild(this.redraw_node(obj.children[i], deep, true));
+				}
+				node.appendChild(k);
+			}
+			if(old) {
+				node.appendChild(old);
+			}
+			if(!is_callback) {
+				// append back using par / ind
+				if(!par) {
+					par = this.element[0];
+				}
+				for(i = 0, j = par.childNodes.length; i < j; i++) {
+					if(par.childNodes[i] && par.childNodes[i].className && par.childNodes[i].className.indexOf('jstree-children') !== -1) {
+						tmp = par.childNodes[i];
+						break;
+					}
+				}
+				if(!tmp) {
+					tmp = d.createElement('UL');
+					tmp.setAttribute('role', 'group');
+					tmp.className = 'jstree-children';
+					par.appendChild(tmp);
+				}
+				par = tmp;
+
+				if(ind < par.childNodes.length) {
+					par.insertBefore(node, par.childNodes[ind]);
+				}
+				else {
+					par.appendChild(node);
+				}
+				if(f) {
+					t = this.element[0].scrollTop;
+					l = this.element[0].scrollLeft;
+					node.childNodes[1].focus();
+					this.element[0].scrollTop = t;
+					this.element[0].scrollLeft = l;
+				}
+			}
+			if(obj.state.opened && !obj.state.loaded) {
+				obj.state.opened = false;
+				setTimeout($.proxy(function () {
+					this.open_node(obj.id, false, 0);
+				}, this), 0);
+			}
+			return node;
+		},
+		/**
+		 * opens a node, revaling its children. If the node is not loaded it will be loaded and opened once ready.
+		 * @name open_node(obj [, callback, animation])
+		 * @param {mixed} obj the node to open
+		 * @param {Function} callback a function to execute once the node is opened
+		 * @param {Number} animation the animation duration in milliseconds when opening the node (overrides the `core.animation` setting). Use `false` for no animation.
+		 * @trigger open_node.jstree, after_open.jstree, before_open.jstree
+		 */
+		open_node : function (obj, callback, animation) {
+			var t1, t2, d, t;
+			if($.isArray(obj)) {
+				obj = obj.slice();
+				for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+					this.open_node(obj[t1], callback, animation);
+				}
+				return true;
+			}
+			obj = this.get_node(obj);
+			if(!obj || obj.id === $.jstree.root) {
+				return false;
+			}
+			animation = animation === undefined ? this.settings.core.animation : animation;
+			if(!this.is_closed(obj)) {
+				if(callback) {
+					callback.call(this, obj, false);
+				}
+				return false;
+			}
+			if(!this.is_loaded(obj)) {
+				if(this.is_loading(obj)) {
+					return setTimeout($.proxy(function () {
+						this.open_node(obj, callback, animation);
+					}, this), 500);
+				}
+				this.load_node(obj, function (o, ok) {
+					return ok ? this.open_node(o, callback, animation) : (callback ? callback.call(this, o, false) : false);
+				});
+			}
+			else {
+				d = this.get_node(obj, true);
+				t = this;
+				if(d.length) {
+					if(animation && d.children(".jstree-children").length) {
+						d.children(".jstree-children").stop(true, true);
+					}
+					if(obj.children.length && !this._firstChild(d.children('.jstree-children')[0])) {
+						this.draw_children(obj);
+						//d = this.get_node(obj, true);
+					}
+					if(!animation) {
+						this.trigger('before_open', { "node" : obj });
+						d[0].className = d[0].className.replace('jstree-closed', 'jstree-open');
+						d[0].setAttribute("aria-expanded", true);
+					}
+					else {
+						this.trigger('before_open', { "node" : obj });
+						d
+							.children(".jstree-children").css("display","none").end()
+							.removeClass("jstree-closed").addClass("jstree-open").attr("aria-expanded", true)
+							.children(".jstree-children").stop(true, true)
+								.slideDown(animation, function () {
+									this.style.display = "";
+									if (t.element) {
+										t.trigger("after_open", { "node" : obj });
+									}
+								});
+					}
+				}
+				obj.state.opened = true;
+				if(callback) {
+					callback.call(this, obj, true);
+				}
+				if(!d.length) {
+					/**
+					 * triggered when a node is about to be opened (if the node is supposed to be in the DOM, it will be, but it won't be visible yet)
+					 * @event
+					 * @name before_open.jstree
+					 * @param {Object} node the opened node
+					 */
+					this.trigger('before_open', { "node" : obj });
+				}
+				/**
+				 * triggered when a node is opened (if there is an animation it will not be completed yet)
+				 * @event
+				 * @name open_node.jstree
+				 * @param {Object} node the opened node
+				 */
+				this.trigger('open_node', { "node" : obj });
+				if(!animation || !d.length) {
+					/**
+					 * triggered when a node is opened and the animation is complete
+					 * @event
+					 * @name after_open.jstree
+					 * @param {Object} node the opened node
+					 */
+					this.trigger("after_open", { "node" : obj });
+				}
+				return true;
+			}
+		},
+		/**
+		 * opens every parent of a node (node should be loaded)
+		 * @name _open_to(obj)
+		 * @param {mixed} obj the node to reveal
+		 * @private
+		 */
+		_open_to : function (obj) {
+			obj = this.get_node(obj);
+			if(!obj || obj.id === $.jstree.root) {
+				return false;
+			}
+			var i, j, p = obj.parents;
+			for(i = 0, j = p.length; i < j; i+=1) {
+				if(i !== $.jstree.root) {
+					this.open_node(p[i], false, 0);
+				}
+			}
+			return $('#' + obj.id.replace($.jstree.idregex,'\\$&'), this.element);
+		},
+		/**
+		 * closes a node, hiding its children
+		 * @name close_node(obj [, animation])
+		 * @param {mixed} obj the node to close
+		 * @param {Number} animation the animation duration in milliseconds when closing the node (overrides the `core.animation` setting). Use `false` for no animation.
+		 * @trigger close_node.jstree, after_close.jstree
+		 */
+		close_node : function (obj, animation) {
+			var t1, t2, t, d;
+			if($.isArray(obj)) {
+				obj = obj.slice();
+				for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+					this.close_node(obj[t1], animation);
+				}
+				return true;
+			}
+			obj = this.get_node(obj);
+			if(!obj || obj.id === $.jstree.root) {
+				return false;
+			}
+			if(this.is_closed(obj)) {
+				return false;
+			}
+			animation = animation === undefined ? this.settings.core.animation : animation;
+			t = this;
+			d = this.get_node(obj, true);
+
+			obj.state.opened = false;
+			/**
+			 * triggered when a node is closed (if there is an animation it will not be complete yet)
+			 * @event
+			 * @name close_node.jstree
+			 * @param {Object} node the closed node
+			 */
+			this.trigger('close_node',{ "node" : obj });
+			if(!d.length) {
+				/**
+				 * triggered when a node is closed and the animation is complete
+				 * @event
+				 * @name after_close.jstree
+				 * @param {Object} node the closed node
+				 */
+				this.trigger("after_close", { "node" : obj });
+			}
+			else {
+				if(!animation) {
+					d[0].className = d[0].className.replace('jstree-open', 'jstree-closed');
+					d.attr("aria-expanded", false).children('.jstree-children').remove();
+					this.trigger("after_close", { "node" : obj });
+				}
+				else {
+					d
+						.children(".jstree-children").attr("style","display:block !important").end()
+						.removeClass("jstree-open").addClass("jstree-closed").attr("aria-expanded", false)
+						.children(".jstree-children").stop(true, true).slideUp(animation, function () {
+							this.style.display = "";
+							d.children('.jstree-children').remove();
+							if (t.element) {
+								t.trigger("after_close", { "node" : obj });
+							}
+						});
+				}
+			}
+		},
+		/**
+		 * toggles a node - closing it if it is open, opening it if it is closed
+		 * @name toggle_node(obj)
+		 * @param {mixed} obj the node to toggle
+		 */
+		toggle_node : function (obj) {
+			var t1, t2;
+			if($.isArray(obj)) {
+				obj = obj.slice();
+				for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+					this.toggle_node(obj[t1]);
+				}
+				return true;
+			}
+			if(this.is_closed(obj)) {
+				return this.open_node(obj);
+			}
+			if(this.is_open(obj)) {
+				return this.close_node(obj);
+			}
+		},
+		/**
+		 * opens all nodes within a node (or the tree), revaling their children. If the node is not loaded it will be loaded and opened once ready.
+		 * @name open_all([obj, animation, original_obj])
+		 * @param {mixed} obj the node to open recursively, omit to open all nodes in the tree
+		 * @param {Number} animation the animation duration in milliseconds when opening the nodes, the default is no animation
+		 * @param {jQuery} reference to the node that started the process (internal use)
+		 * @trigger open_all.jstree
+		 */
+		open_all : function (obj, animation, original_obj) {
+			if(!obj) { obj = $.jstree.root; }
+			obj = this.get_node(obj);
+			if(!obj) { return false; }
+			var dom = obj.id === $.jstree.root ? this.get_container_ul() : this.get_node(obj, true), i, j, _this;
+			if(!dom.length) {
+				for(i = 0, j = obj.children_d.length; i < j; i++) {
+					if(this.is_closed(this._model.data[obj.children_d[i]])) {
+						this._model.data[obj.children_d[i]].state.opened = true;
+					}
+				}
+				return this.trigger('open_all', { "node" : obj });
+			}
+			original_obj = original_obj || dom;
+			_this = this;
+			dom = this.is_closed(obj) ? dom.find('.jstree-closed').addBack() : dom.find('.jstree-closed');
+			dom.each(function () {
+				_this.open_node(
+					this,
+					function(node, status) { if(status && this.is_parent(node)) { this.open_all(node, animation, original_obj); } },
+					animation || 0
+				);
+			});
+			if(original_obj.find('.jstree-closed').length === 0) {
+				/**
+				 * triggered when an `open_all` call completes
+				 * @event
+				 * @name open_all.jstree
+				 * @param {Object} node the opened node
+				 */
+				this.trigger('open_all', { "node" : this.get_node(original_obj) });
+			}
+		},
+		/**
+		 * closes all nodes within a node (or the tree), revaling their children
+		 * @name close_all([obj, animation])
+		 * @param {mixed} obj the node to close recursively, omit to close all nodes in the tree
+		 * @param {Number} animation the animation duration in milliseconds when closing the nodes, the default is no animation
+		 * @trigger close_all.jstree
+		 */
+		close_all : function (obj, animation) {
+			if(!obj) { obj = $.jstree.root; }
+			obj = this.get_node(obj);
+			if(!obj) { return false; }
+			var dom = obj.id === $.jstree.root ? this.get_container_ul() : this.get_node(obj, true),
+				_this = this, i, j;
+			if(dom.length) {
+				dom = this.is_open(obj) ? dom.find('.jstree-open').addBack() : dom.find('.jstree-open');
+				$(dom.get().reverse()).each(function () { _this.close_node(this, animation || 0); });
+			}
+			for(i = 0, j = obj.children_d.length; i < j; i++) {
+				this._model.data[obj.children_d[i]].state.opened = false;
+			}
+			/**
+			 * triggered when an `close_all` call completes
+			 * @event
+			 * @name close_all.jstree
+			 * @param {Object} node the closed node
+			 */
+			this.trigger('close_all', { "node" : obj });
+		},
+		/**
+		 * checks if a node is disabled (not selectable)
+		 * @name is_disabled(obj)
+		 * @param  {mixed} obj
+		 * @return {Boolean}
+		 */
+		is_disabled : function (obj) {
+			obj = this.get_node(obj);
+			return obj && obj.state && obj.state.disabled;
+		},
+		/**
+		 * enables a node - so that it can be selected
+		 * @name enable_node(obj)
+		 * @param {mixed} obj the node to enable
+		 * @trigger enable_node.jstree
+		 */
+		enable_node : function (obj) {
+			var t1, t2;
+			if($.isArray(obj)) {
+				obj = obj.slice();
+				for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+					this.enable_node(obj[t1]);
+				}
+				return true;
+			}
+			obj = this.get_node(obj);
+			if(!obj || obj.id === $.jstree.root) {
+				return false;
+			}
+			obj.state.disabled = false;
+			this.get_node(obj,true).children('.jstree-anchor').removeClass('jstree-disabled').attr('aria-disabled', false);
+			/**
+			 * triggered when an node is enabled
+			 * @event
+			 * @name enable_node.jstree
+			 * @param {Object} node the enabled node
+			 */
+			this.trigger('enable_node', { 'node' : obj });
+		},
+		/**
+		 * disables a node - so that it can not be selected
+		 * @name disable_node(obj)
+		 * @param {mixed} obj the node to disable
+		 * @trigger disable_node.jstree
+		 */
+		disable_node : function (obj) {
+			var t1, t2;
+			if($.isArray(obj)) {
+				obj = obj.slice();
+				for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+					this.disable_node(obj[t1]);
+				}
+				return true;
+			}
+			obj = this.get_node(obj);
+			if(!obj || obj.id === $.jstree.root) {
+				return false;
+			}
+			obj.state.disabled = true;
+			this.get_node(obj,true).children('.jstree-anchor').addClass('jstree-disabled').attr('aria-disabled', true);
+			/**
+			 * triggered when an node is disabled
+			 * @event
+			 * @name disable_node.jstree
+			 * @param {Object} node the disabled node
+			 */
+			this.trigger('disable_node', { 'node' : obj });
+		},
+		/**
+		 * determines if a node is hidden
+		 * @name is_hidden(obj)
+		 * @param {mixed} obj the node
+		 */
+		is_hidden : function (obj) {
+			obj = this.get_node(obj);
+			return obj.state.hidden === true;
+		},
+		/**
+		 * hides a node - it is still in the structure but will not be visible
+		 * @name hide_node(obj)
+		 * @param {mixed} obj the node to hide
+		 * @param {Boolean} skip_redraw internal parameter controlling if redraw is called
+		 * @trigger hide_node.jstree
+		 */
+		hide_node : function (obj, skip_redraw) {
+			var t1, t2;
+			if($.isArray(obj)) {
+				obj = obj.slice();
+				for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+					this.hide_node(obj[t1], true);
+				}
+				if (!skip_redraw) {
+					this.redraw();
+				}
+				return true;
+			}
+			obj = this.get_node(obj);
+			if(!obj || obj.id === $.jstree.root) {
+				return false;
+			}
+			if(!obj.state.hidden) {
+				obj.state.hidden = true;
+				this._node_changed(obj.parent);
+				if(!skip_redraw) {
+					this.redraw();
+				}
+				/**
+				 * triggered when an node is hidden
+				 * @event
+				 * @name hide_node.jstree
+				 * @param {Object} node the hidden node
+				 */
+				this.trigger('hide_node', { 'node' : obj });
+			}
+		},
+		/**
+		 * shows a node
+		 * @name show_node(obj)
+		 * @param {mixed} obj the node to show
+		 * @param {Boolean} skip_redraw internal parameter controlling if redraw is called
+		 * @trigger show_node.jstree
+		 */
+		show_node : function (obj, skip_redraw) {
+			var t1, t2;
+			if($.isArray(obj)) {
+				obj = obj.slice();
+				for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+					this.show_node(obj[t1], true);
+				}
+				if (!skip_redraw) {
+					this.redraw();
+				}
+				return true;
+			}
+			obj = this.get_node(obj);
+			if(!obj || obj.id === $.jstree.root) {
+				return false;
+			}
+			if(obj.state.hidden) {
+				obj.state.hidden = false;
+				this._node_changed(obj.parent);
+				if(!skip_redraw) {
+					this.redraw();
+				}
+				/**
+				 * triggered when an node is shown
+				 * @event
+				 * @name show_node.jstree
+				 * @param {Object} node the shown node
+				 */
+				this.trigger('show_node', { 'node' : obj });
+			}
+		},
+		/**
+		 * hides all nodes
+		 * @name hide_all()
+		 * @trigger hide_all.jstree
+		 */
+		hide_all : function (skip_redraw) {
+			var i, m = this._model.data, ids = [];
+			for(i in m) {
+				if(m.hasOwnProperty(i) && i !== $.jstree.root && !m[i].state.hidden) {
+					m[i].state.hidden = true;
+					ids.push(i);
+				}
+			}
+			this._model.force_full_redraw = true;
+			if(!skip_redraw) {
+				this.redraw();
+			}
+			/**
+			 * triggered when all nodes are hidden
+			 * @event
+			 * @name hide_all.jstree
+			 * @param {Array} nodes the IDs of all hidden nodes
+			 */
+			this.trigger('hide_all', { 'nodes' : ids });
+			return ids;
+		},
+		/**
+		 * shows all nodes
+		 * @name show_all()
+		 * @trigger show_all.jstree
+		 */
+		show_all : function (skip_redraw) {
+			var i, m = this._model.data, ids = [];
+			for(i in m) {
+				if(m.hasOwnProperty(i) && i !== $.jstree.root && m[i].state.hidden) {
+					m[i].state.hidden = false;
+					ids.push(i);
+				}
+			}
+			this._model.force_full_redraw = true;
+			if(!skip_redraw) {
+				this.redraw();
+			}
+			/**
+			 * triggered when all nodes are shown
+			 * @event
+			 * @name show_all.jstree
+			 * @param {Array} nodes the IDs of all shown nodes
+			 */
+			this.trigger('show_all', { 'nodes' : ids });
+			return ids;
+		},
+		/**
+		 * called when a node is selected by the user. Used internally.
+		 * @private
+		 * @name activate_node(obj, e)
+		 * @param {mixed} obj the node
+		 * @param {Object} e the related event
+		 * @trigger activate_node.jstree, changed.jstree
+		 */
+		activate_node : function (obj, e) {
+			if(this.is_disabled(obj)) {
+				return false;
+			}
+			if(!e || typeof e !== 'object') {
+				e = {};
+			}
+
+			// ensure last_clicked is still in the DOM, make it fresh (maybe it was moved?) and make sure it is still selected, if not - make last_clicked the last selected node
+			this._data.core.last_clicked = this._data.core.last_clicked && this._data.core.last_clicked.id !== undefined ? this.get_node(this._data.core.last_clicked.id) : null;
+			if(this._data.core.last_clicked && !this._data.core.last_clicked.state.selected) { this._data.core.last_clicked = null; }
+			if(!this._data.core.last_clicked && this._data.core.selected.length) { this._data.core.last_clicked = this.get_node(this._data.core.selected[this._data.core.selected.length - 1]); }
+
+			if(!this.settings.core.multiple || (!e.metaKey && !e.ctrlKey && !e.shiftKey) || (e.shiftKey && (!this._data.core.last_clicked || !this.get_parent(obj) || this.get_parent(obj) !== this._data.core.last_clicked.parent ) )) {
+				if(!this.settings.core.multiple && (e.metaKey || e.ctrlKey || e.shiftKey) && this.is_selected(obj)) {
+					this.deselect_node(obj, false, e);
+				}
+				else {
+					this.deselect_all(true);
+					this.select_node(obj, false, false, e);
+					this._data.core.last_clicked = this.get_node(obj);
+				}
+			}
+			else {
+				if(e.shiftKey) {
+					var o = this.get_node(obj).id,
+						l = this._data.core.last_clicked.id,
+						p = this.get_node(this._data.core.last_clicked.parent).children,
+						c = false,
+						i, j;
+					for(i = 0, j = p.length; i < j; i += 1) {
+						// separate IFs work whem o and l are the same
+						if(p[i] === o) {
+							c = !c;
+						}
+						if(p[i] === l) {
+							c = !c;
+						}
+						if(!this.is_disabled(p[i]) && (c || p[i] === o || p[i] === l)) {
+							if (!this.is_hidden(p[i])) {
+								this.select_node(p[i], true, false, e);
+							}
+						}
+						else {
+							this.deselect_node(p[i], true, e);
+						}
+					}
+					this.trigger('changed', { 'action' : 'select_node', 'node' : this.get_node(obj), 'selected' : this._data.core.selected, 'event' : e });
+				}
+				else {
+					if(!this.is_selected(obj)) {
+						this.select_node(obj, false, false, e);
+					}
+					else {
+						this.deselect_node(obj, false, e);
+					}
+				}
+			}
+			/**
+			 * triggered when an node is clicked or intercated with by the user
+			 * @event
+			 * @name activate_node.jstree
+			 * @param {Object} node
+			 * @param {Object} event the ooriginal event (if any) which triggered the call (may be an empty object)
+			 */
+			this.trigger('activate_node', { 'node' : this.get_node(obj), 'event' : e });
+		},
+		/**
+		 * applies the hover state on a node, called when a node is hovered by the user. Used internally.
+		 * @private
+		 * @name hover_node(obj)
+		 * @param {mixed} obj
+		 * @trigger hover_node.jstree
+		 */
+		hover_node : function (obj) {
+			obj = this.get_node(obj, true);
+			if(!obj || !obj.length || obj.children('.jstree-hovered').length) {
+				return false;
+			}
+			var o = this.element.find('.jstree-hovered'), t = this.element;
+			if(o && o.length) { this.dehover_node(o); }
+
+			obj.children('.jstree-anchor').addClass('jstree-hovered');
+			/**
+			 * triggered when an node is hovered
+			 * @event
+			 * @name hover_node.jstree
+			 * @param {Object} node
+			 */
+			this.trigger('hover_node', { 'node' : this.get_node(obj) });
+			setTimeout(function () { t.attr('aria-activedescendant', obj[0].id); }, 0);
+		},
+		/**
+		 * removes the hover state from a nodecalled when a node is no longer hovered by the user. Used internally.
+		 * @private
+		 * @name dehover_node(obj)
+		 * @param {mixed} obj
+		 * @trigger dehover_node.jstree
+		 */
+		dehover_node : function (obj) {
+			obj = this.get_node(obj, true);
+			if(!obj || !obj.length || !obj.children('.jstree-hovered').length) {
+				return false;
+			}
+			obj.children('.jstree-anchor').removeClass('jstree-hovered');
+			/**
+			 * triggered when an node is no longer hovered
+			 * @event
+			 * @name dehover_node.jstree
+			 * @param {Object} node
+			 */
+			this.trigger('dehover_node', { 'node' : this.get_node(obj) });
+		},
+		/**
+		 * select a node
+		 * @name select_node(obj [, supress_event, prevent_open])
+		 * @param {mixed} obj an array can be used to select multiple nodes
+		 * @param {Boolean} supress_event if set to `true` the `changed.jstree` event won't be triggered
+		 * @param {Boolean} prevent_open if set to `true` parents of the selected node won't be opened
+		 * @trigger select_node.jstree, changed.jstree
+		 */
+		select_node : function (obj, supress_event, prevent_open, e) {
+			var dom, t1, t2, th;
+			if($.isArray(obj)) {
+				obj = obj.slice();
+				for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+					this.select_node(obj[t1], supress_event, prevent_open, e);
+				}
+				return true;
+			}
+			obj = this.get_node(obj);
+			if(!obj || obj.id === $.jstree.root) {
+				return false;
+			}
+			dom = this.get_node(obj, true);
+			if(!obj.state.selected) {
+				obj.state.selected = true;
+				this._data.core.selected.push(obj.id);
+				if(!prevent_open) {
+					dom = this._open_to(obj);
+				}
+				if(dom && dom.length) {
+					dom.attr('aria-selected', true).children('.jstree-anchor').addClass('jstree-clicked');
+				}
+				/**
+				 * triggered when an node is selected
+				 * @event
+				 * @name select_node.jstree
+				 * @param {Object} node
+				 * @param {Array} selected the current selection
+				 * @param {Object} event the event (if any) that triggered this select_node
+				 */
+				this.trigger('select_node', { 'node' : obj, 'selected' : this._data.core.selected, 'event' : e });
+				if(!supress_event) {
+					/**
+					 * triggered when selection changes
+					 * @event
+					 * @name changed.jstree
+					 * @param {Object} node
+					 * @param {Object} action the action that caused the selection to change
+					 * @param {Array} selected the current selection
+					 * @param {Object} event the event (if any) that triggered this changed event
+					 */
+					this.trigger('changed', { 'action' : 'select_node', 'node' : obj, 'selected' : this._data.core.selected, 'event' : e });
+				}
+			}
+		},
+		/**
+		 * deselect a node
+		 * @name deselect_node(obj [, supress_event])
+		 * @param {mixed} obj an array can be used to deselect multiple nodes
+		 * @param {Boolean} supress_event if set to `true` the `changed.jstree` event won't be triggered
+		 * @trigger deselect_node.jstree, changed.jstree
+		 */
+		deselect_node : function (obj, supress_event, e) {
+			var t1, t2, dom;
+			if($.isArray(obj)) {
+				obj = obj.slice();
+				for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+					this.deselect_node(obj[t1], supress_event, e);
+				}
+				return true;
+			}
+			obj = this.get_node(obj);
+			if(!obj || obj.id === $.jstree.root) {
+				return false;
+			}
+			dom = this.get_node(obj, true);
+			if(obj.state.selected) {
+				obj.state.selected = false;
+				this._data.core.selected = $.vakata.array_remove_item(this._data.core.selected, obj.id);
+				if(dom.length) {
+					dom.attr('aria-selected', false).children('.jstree-anchor').removeClass('jstree-clicked');
+				}
+				/**
+				 * triggered when an node is deselected
+				 * @event
+				 * @name deselect_node.jstree
+				 * @param {Object} node
+				 * @param {Array} selected the current selection
+				 * @param {Object} event the event (if any) that triggered this deselect_node
+				 */
+				this.trigger('deselect_node', { 'node' : obj, 'selected' : this._data.core.selected, 'event' : e });
+				if(!supress_event) {
+					this.trigger('changed', { 'action' : 'deselect_node', 'node' : obj, 'selected' : this._data.core.selected, 'event' : e });
+				}
+			}
+		},
+		/**
+		 * select all nodes in the tree
+		 * @name select_all([supress_event])
+		 * @param {Boolean} supress_event if set to `true` the `changed.jstree` event won't be triggered
+		 * @trigger select_all.jstree, changed.jstree
+		 */
+		select_all : function (supress_event) {
+			var tmp = this._data.core.selected.concat([]), i, j;
+			this._data.core.selected = this._model.data[$.jstree.root].children_d.concat();
+			for(i = 0, j = this._data.core.selected.length; i < j; i++) {
+				if(this._model.data[this._data.core.selected[i]]) {
+					this._model.data[this._data.core.selected[i]].state.selected = true;
+				}
+			}
+			this.redraw(true);
+			/**
+			 * triggered when all nodes are selected
+			 * @event
+			 * @name select_all.jstree
+			 * @param {Array} selected the current selection
+			 */
+			this.trigger('select_all', { 'selected' : this._data.core.selected });
+			if(!supress_event) {
+				this.trigger('changed', { 'action' : 'select_all', 'selected' : this._data.core.selected, 'old_selection' : tmp });
+			}
+		},
+		/**
+		 * deselect all selected nodes
+		 * @name deselect_all([supress_event])
+		 * @param {Boolean} supress_event if set to `true` the `changed.jstree` event won't be triggered
+		 * @trigger deselect_all.jstree, changed.jstree
+		 */
+		deselect_all : function (supress_event) {
+			var tmp = this._data.core.selected.concat([]), i, j;
+			for(i = 0, j = this._data.core.selected.length; i < j; i++) {
+				if(this._model.data[this._data.core.selected[i]]) {
+					this._model.data[this._data.core.selected[i]].state.selected = false;
+				}
+			}
+			this._data.core.selected = [];
+			this.element.find('.jstree-clicked').removeClass('jstree-clicked').parent().attr('aria-selected', false);
+			/**
+			 * triggered when all nodes are deselected
+			 * @event
+			 * @name deselect_all.jstree
+			 * @param {Object} node the previous selection
+			 * @param {Array} selected the current selection
+			 */
+			this.trigger('deselect_all', { 'selected' : this._data.core.selected, 'node' : tmp });
+			if(!supress_event) {
+				this.trigger('changed', { 'action' : 'deselect_all', 'selected' : this._data.core.selected, 'old_selection' : tmp });
+			}
+		},
+		/**
+		 * checks if a node is selected
+		 * @name is_selected(obj)
+		 * @param  {mixed}  obj
+		 * @return {Boolean}
+		 */
+		is_selected : function (obj) {
+			obj = this.get_node(obj);
+			if(!obj || obj.id === $.jstree.root) {
+				return false;
+			}
+			return obj.state.selected;
+		},
+		/**
+		 * get an array of all selected nodes
+		 * @name get_selected([full])
+		 * @param  {mixed}  full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned
+		 * @return {Array}
+		 */
+		get_selected : function (full) {
+			return full ? $.map(this._data.core.selected, $.proxy(function (i) { return this.get_node(i); }, this)) : this._data.core.selected.slice();
+		},
+		/**
+		 * get an array of all top level selected nodes (ignoring children of selected nodes)
+		 * @name get_top_selected([full])
+		 * @param  {mixed}  full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned
+		 * @return {Array}
+		 */
+		get_top_selected : function (full) {
+			var tmp = this.get_selected(true),
+				obj = {}, i, j, k, l;
+			for(i = 0, j = tmp.length; i < j; i++) {
+				obj[tmp[i].id] = tmp[i];
+			}
+			for(i = 0, j = tmp.length; i < j; i++) {
+				for(k = 0, l = tmp[i].children_d.length; k < l; k++) {
+					if(obj[tmp[i].children_d[k]]) {
+						delete obj[tmp[i].children_d[k]];
+					}
+				}
+			}
+			tmp = [];
+			for(i in obj) {
+				if(obj.hasOwnProperty(i)) {
+					tmp.push(i);
+				}
+			}
+			return full ? $.map(tmp, $.proxy(function (i) { return this.get_node(i); }, this)) : tmp;
+		},
+		/**
+		 * get an array of all bottom level selected nodes (ignoring selected parents)
+		 * @name get_bottom_selected([full])
+		 * @param  {mixed}  full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned
+		 * @return {Array}
+		 */
+		get_bottom_selected : function (full) {
+			var tmp = this.get_selected(true),
+				obj = [], i, j;
+			for(i = 0, j = tmp.length; i < j; i++) {
+				if(!tmp[i].children.length) {
+					obj.push(tmp[i].id);
+				}
+			}
+			return full ? $.map(obj, $.proxy(function (i) { return this.get_node(i); }, this)) : obj;
+		},
+		/**
+		 * gets the current state of the tree so that it can be restored later with `set_state(state)`. Used internally.
+		 * @name get_state()
+		 * @private
+		 * @return {Object}
+		 */
+		get_state : function () {
+			var state	= {
+				'core' : {
+					'open' : [],
+					'loaded' : [],
+					'scroll' : {
+						'left' : this.element.scrollLeft(),
+						'top' : this.element.scrollTop()
+					},
+					/*!
+					'themes' : {
+						'name' : this.get_theme(),
+						'icons' : this._data.core.themes.icons,
+						'dots' : this._data.core.themes.dots
+					},
+					*/
+					'selected' : []
+				}
+			}, i;
+			for(i in this._model.data) {
+				if(this._model.data.hasOwnProperty(i)) {
+					if(i !== $.jstree.root) {
+						if(this._model.data[i].state.loaded && this.settings.core.loaded_state) {
+							state.core.loaded.push(i);
+						}
+						if(this._model.data[i].state.opened) {
+							state.core.open.push(i);
+						}
+						if(this._model.data[i].state.selected) {
+							state.core.selected.push(i);
+						}
+					}
+				}
+			}
+			return state;
+		},
+		/**
+		 * sets the state of the tree. Used internally.
+		 * @name set_state(state [, callback])
+		 * @private
+		 * @param {Object} state the state to restore. Keep in mind this object is passed by reference and jstree will modify it.
+		 * @param {Function} callback an optional function to execute once the state is restored.
+		 * @trigger set_state.jstree
+		 */
+		set_state : function (state, callback) {
+			if(state) {
+				if(state.core && state.core.selected && state.core.initial_selection === undefined) {
+					state.core.initial_selection = this._data.core.selected.concat([]).sort().join(',');
+				}
+				if(state.core) {
+					var res, n, t, _this, i;
+					if(state.core.loaded) {
+						if(!this.settings.core.loaded_state || !$.isArray(state.core.loaded) || !state.core.loaded.length) {
+							delete state.core.loaded;
+							this.set_state(state, callback);
+						}
+						else {
+							this._load_nodes(state.core.loaded, function (nodes) {
+								delete state.core.loaded;
+								this.set_state(state, callback);
+							});
+						}
+						return false;
+					}
+					if(state.core.open) {
+						if(!$.isArray(state.core.open) || !state.core.open.length) {
+							delete state.core.open;
+							this.set_state(state, callback);
+						}
+						else {
+							this._load_nodes(state.core.open, function (nodes) {
+								this.open_node(nodes, false, 0);
+								delete state.core.open;
+								this.set_state(state, callback);
+							});
+						}
+						return false;
+					}
+					if(state.core.scroll) {
+						if(state.core.scroll && state.core.scroll.left !== undefined) {
+							this.element.scrollLeft(state.core.scroll.left);
+						}
+						if(state.core.scroll && state.core.scroll.top !== undefined) {
+							this.element.scrollTop(state.core.scroll.top);
+						}
+						delete state.core.scroll;
+						this.set_state(state, callback);
+						return false;
+					}
+					if(state.core.selected) {
+						_this = this;
+						if (state.core.initial_selection === undefined ||
+							state.core.initial_selection === this._data.core.selected.concat([]).sort().join(',')
+						) {
+							this.deselect_all();
+							$.each(state.core.selected, function (i, v) {
+								_this.select_node(v, false, true);
+							});
+						}
+						delete state.core.initial_selection;
+						delete state.core.selected;
+						this.set_state(state, callback);
+						return false;
+					}
+					for(i in state) {
+						if(state.hasOwnProperty(i) && i !== "core" && $.inArray(i, this.settings.plugins) === -1) {
+							delete state[i];
+						}
+					}
+					if($.isEmptyObject(state.core)) {
+						delete state.core;
+						this.set_state(state, callback);
+						return false;
+					}
+				}
+				if($.isEmptyObject(state)) {
+					state = null;
+					if(callback) { callback.call(this); }
+					/**
+					 * triggered when a `set_state` call completes
+					 * @event
+					 * @name set_state.jstree
+					 */
+					this.trigger('set_state');
+					return false;
+				}
+				return true;
+			}
+			return false;
+		},
+		/**
+		 * refreshes the tree - all nodes are reloaded with calls to `load_node`.
+		 * @name refresh()
+		 * @param {Boolean} skip_loading an option to skip showing the loading indicator
+		 * @param {Mixed} forget_state if set to `true` state will not be reapplied, if set to a function (receiving the current state as argument) the result of that function will be used as state
+		 * @trigger refresh.jstree
+		 */
+		refresh : function (skip_loading, forget_state) {
+			this._data.core.state = forget_state === true ? {} : this.get_state();
+			if(forget_state && $.isFunction(forget_state)) { this._data.core.state = forget_state.call(this, this._data.core.state); }
+			this._cnt = 0;
+			this._model.data = {};
+			this._model.data[$.jstree.root] = {
+				id : $.jstree.root,
+				parent : null,
+				parents : [],
+				children : [],
+				children_d : [],
+				state : { loaded : false }
+			};
+			this._data.core.selected = [];
+			this._data.core.last_clicked = null;
+			this._data.core.focused = null;
+
+			var c = this.get_container_ul()[0].className;
+			if(!skip_loading) {
+				this.element.html("<"+"ul class='"+c+"' role='group'><"+"li class='jstree-initial-node jstree-loading jstree-leaf jstree-last' role='treeitem' id='j"+this._id+"_loading'><i class='jstree-icon jstree-ocl'></i><"+"a class='jstree-anchor' href='#'><i class='jstree-icon jstree-themeicon-hidden'></i>" + this.get_string("Loading ...") + "</a></li></ul>");
+				this.element.attr('aria-activedescendant','j'+this._id+'_loading');
+			}
+			this.load_node($.jstree.root, function (o, s) {
+				if(s) {
+					this.get_container_ul()[0].className = c;
+					if(this._firstChild(this.get_container_ul()[0])) {
+						this.element.attr('aria-activedescendant',this._firstChild(this.get_container_ul()[0]).id);
+					}
+					this.set_state($.extend(true, {}, this._data.core.state), function () {
+						/**
+						 * triggered when a `refresh` call completes
+						 * @event
+						 * @name refresh.jstree
+						 */
+						this.trigger('refresh');
+					});
+				}
+				this._data.core.state = null;
+			});
+		},
+		/**
+		 * refreshes a node in the tree (reload its children) all opened nodes inside that node are reloaded with calls to `load_node`.
+		 * @name refresh_node(obj)
+		 * @param  {mixed} obj the node
+		 * @trigger refresh_node.jstree
+		 */
+		refresh_node : function (obj) {
+			obj = this.get_node(obj);
+			if(!obj || obj.id === $.jstree.root) { return false; }
+			var opened = [], to_load = [], s = this._data.core.selected.concat([]);
+			to_load.push(obj.id);
+			if(obj.state.opened === true) { opened.push(obj.id); }
+			this.get_node(obj, true).find('.jstree-open').each(function() { to_load.push(this.id); opened.push(this.id); });
+			this._load_nodes(to_load, $.proxy(function (nodes) {
+				this.open_node(opened, false, 0);
+				this.select_node(s);
+				/**
+				 * triggered when a node is refreshed
+				 * @event
+				 * @name refresh_node.jstree
+				 * @param {Object} node - the refreshed node
+				 * @param {Array} nodes - an array of the IDs of the nodes that were reloaded
+				 */
+				this.trigger('refresh_node', { 'node' : obj, 'nodes' : nodes });
+			}, this), false, true);
+		},
+		/**
+		 * set (change) the ID of a node
+		 * @name set_id(obj, id)
+		 * @param  {mixed} obj the node
+		 * @param  {String} id the new ID
+		 * @return {Boolean}
+		 * @trigger set_id.jstree
+		 */
+		set_id : function (obj, id) {
+			obj = this.get_node(obj);
+			if(!obj || obj.id === $.jstree.root) { return false; }
+			var i, j, m = this._model.data, old = obj.id;
+			id = id.toString();
+			// update parents (replace current ID with new one in children and children_d)
+			m[obj.parent].children[$.inArray(obj.id, m[obj.parent].children)] = id;
+			for(i = 0, j = obj.parents.length; i < j; i++) {
+				m[obj.parents[i]].children_d[$.inArray(obj.id, m[obj.parents[i]].children_d)] = id;
+			}
+			// update children (replace current ID with new one in parent and parents)
+			for(i = 0, j = obj.children.length; i < j; i++) {
+				m[obj.children[i]].parent = id;
+			}
+			for(i = 0, j = obj.children_d.length; i < j; i++) {
+				m[obj.children_d[i]].parents[$.inArray(obj.id, m[obj.children_d[i]].parents)] = id;
+			}
+			i = $.inArray(obj.id, this._data.core.selected);
+			if(i !== -1) { this._data.core.selected[i] = id; }
+			// update model and obj itself (obj.id, this._model.data[KEY])
+			i = this.get_node(obj.id, true);
+			if(i) {
+				i.attr('id', id); //.children('.jstree-anchor').attr('id', id + '_anchor').end().attr('aria-labelledby', id + '_anchor');
+				if(this.element.attr('aria-activedescendant') === obj.id) {
+					this.element.attr('aria-activedescendant', id);
+				}
+			}
+			delete m[obj.id];
+			obj.id = id;
+			obj.li_attr.id = id;
+			m[id] = obj;
+			/**
+			 * triggered when a node id value is changed
+			 * @event
+			 * @name set_id.jstree
+			 * @param {Object} node
+			 * @param {String} old the old id
+			 */
+			this.trigger('set_id',{ "node" : obj, "new" : obj.id, "old" : old });
+			return true;
+		},
+		/**
+		 * get the text value of a node
+		 * @name get_text(obj)
+		 * @param  {mixed} obj the node
+		 * @return {String}
+		 */
+		get_text : function (obj) {
+			obj = this.get_node(obj);
+			return (!obj || obj.id === $.jstree.root) ? false : obj.text;
+		},
+		/**
+		 * set the text value of a node. Used internally, please use `rename_node(obj, val)`.
+		 * @private
+		 * @name set_text(obj, val)
+		 * @param  {mixed} obj the node, you can pass an array to set the text on multiple nodes
+		 * @param  {String} val the new text value
+		 * @return {Boolean}
+		 * @trigger set_text.jstree
+		 */
+		set_text : function (obj, val) {
+			var t1, t2;
+			if($.isArray(obj)) {
+				obj = obj.slice();
+				for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+					this.set_text(obj[t1], val);
+				}
+				return true;
+			}
+			obj = this.get_node(obj);
+			if(!obj || obj.id === $.jstree.root) { return false; }
+			obj.text = val;
+			if(this.get_node(obj, true).length) {
+				this.redraw_node(obj.id);
+			}
+			/**
+			 * triggered when a node text value is changed
+			 * @event
+			 * @name set_text.jstree
+			 * @param {Object} obj
+			 * @param {String} text the new value
+			 */
+			this.trigger('set_text',{ "obj" : obj, "text" : val });
+			return true;
+		},
+		/**
+		 * gets a JSON representation of a node (or the whole tree)
+		 * @name get_json([obj, options])
+		 * @param  {mixed} obj
+		 * @param  {Object} options
+		 * @param  {Boolean} options.no_state do not return state information
+		 * @param  {Boolean} options.no_id do not return ID
+		 * @param  {Boolean} options.no_children do not include children
+		 * @param  {Boolean} options.no_data do not include node data
+		 * @param  {Boolean} options.no_li_attr do not include LI attributes
+		 * @param  {Boolean} options.no_a_attr do not include A attributes
+		 * @param  {Boolean} options.flat return flat JSON instead of nested
+		 * @return {Object}
+		 */
+		get_json : function (obj, options, flat) {
+			obj = this.get_node(obj || $.jstree.root);
+			if(!obj) { return false; }
+			if(options && options.flat && !flat) { flat = []; }
+			var tmp = {
+				'id' : obj.id,
+				'text' : obj.text,
+				'icon' : this.get_icon(obj),
+				'li_attr' : $.extend(true, {}, obj.li_attr),
+				'a_attr' : $.extend(true, {}, obj.a_attr),
+				'state' : {},
+				'data' : options && options.no_data ? false : $.extend(true, $.isArray(obj.data)?[]:{}, obj.data)
+				//( this.get_node(obj, true).length ? this.get_node(obj, true).data() : obj.data ),
+			}, i, j;
+			if(options && options.flat) {
+				tmp.parent = obj.parent;
+			}
+			else {
+				tmp.children = [];
+			}
+			if(!options || !options.no_state) {
+				for(i in obj.state) {
+					if(obj.state.hasOwnProperty(i)) {
+						tmp.state[i] = obj.state[i];
+					}
+				}
+			} else {
+				delete tmp.state;
+			}
+			if(options && options.no_li_attr) {
+				delete tmp.li_attr;
+			}
+			if(options && options.no_a_attr) {
+				delete tmp.a_attr;
+			}
+			if(options && options.no_id) {
+				delete tmp.id;
+				if(tmp.li_attr && tmp.li_attr.id) {
+					delete tmp.li_attr.id;
+				}
+				if(tmp.a_attr && tmp.a_attr.id) {
+					delete tmp.a_attr.id;
+				}
+			}
+			if(options && options.flat && obj.id !== $.jstree.root) {
+				flat.push(tmp);
+			}
+			if(!options || !options.no_children) {
+				for(i = 0, j = obj.children.length; i < j; i++) {
+					if(options && options.flat) {
+						this.get_json(obj.children[i], options, flat);
+					}
+					else {
+						tmp.children.push(this.get_json(obj.children[i], options));
+					}
+				}
+			}
+			return options && options.flat ? flat : (obj.id === $.jstree.root ? tmp.children : tmp);
+		},
+		/**
+		 * create a new node (do not confuse with load_node)
+		 * @name create_node([par, node, pos, callback, is_loaded])
+		 * @param  {mixed}   par       the parent node (to create a root node use either "#" (string) or `null`)
+		 * @param  {mixed}   node      the data for the new node (a valid JSON object, or a simple string with the name)
+		 * @param  {mixed}   pos       the index at which to insert the node, "first" and "last" are also supported, default is "last"
+		 * @param  {Function} callback a function to be called once the node is created
+		 * @param  {Boolean} is_loaded internal argument indicating if the parent node was succesfully loaded
+		 * @return {String}            the ID of the newly create node
+		 * @trigger model.jstree, create_node.jstree
+		 */
+		create_node : function (par, node, pos, callback, is_loaded) {
+			if(par === null) { par = $.jstree.root; }
+			par = this.get_node(par);
+			if(!par) { return false; }
+			pos = pos === undefined ? "last" : pos;
+			if(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) {
+				return this.load_node(par, function () { this.create_node(par, node, pos, callback, true); });
+			}
+			if(!node) { node = { "text" : this.get_string('New node') }; }
+			if(typeof node === "string") {
+				node = { "text" : node };
+			} else {
+				node = $.extend(true, {}, node);
+			}
+			if(node.text === undefined) { node.text = this.get_string('New node'); }
+			var tmp, dpc, i, j;
+
+			if(par.id === $.jstree.root) {
+				if(pos === "before") { pos = "first"; }
+				if(pos === "after") { pos = "last"; }
+			}
+			switch(pos) {
+				case "before":
+					tmp = this.get_node(par.parent);
+					pos = $.inArray(par.id, tmp.children);
+					par = tmp;
+					break;
+				case "after" :
+					tmp = this.get_node(par.parent);
+					pos = $.inArray(par.id, tmp.children) + 1;
+					par = tmp;
+					break;
+				case "inside":
+				case "first":
+					pos = 0;
+					break;
+				case "last":
+					pos = par.children.length;
+					break;
+				default:
+					if(!pos) { pos = 0; }
+					break;
+			}
+			if(pos > par.children.length) { pos = par.children.length; }
+			if(!node.id) { node.id = true; }
+			if(!this.check("create_node", node, par, pos)) {
+				this.settings.core.error.call(this, this._data.core.last_error);
+				return false;
+			}
+			if(node.id === true) { delete node.id; }
+			node = this._parse_model_from_json(node, par.id, par.parents.concat());
+			if(!node) { return false; }
+			tmp = this.get_node(node);
+			dpc = [];
+			dpc.push(node);
+			dpc = dpc.concat(tmp.children_d);
+			this.trigger('model', { "nodes" : dpc, "parent" : par.id });
+
+			par.children_d = par.children_d.concat(dpc);
+			for(i = 0, j = par.parents.length; i < j; i++) {
+				this._model.data[par.parents[i]].children_d = this._model.data[par.parents[i]].children_d.concat(dpc);
+			}
+			node = tmp;
+			tmp = [];
+			for(i = 0, j = par.children.length; i < j; i++) {
+				tmp[i >= pos ? i+1 : i] = par.children[i];
+			}
+			tmp[pos] = node.id;
+			par.children = tmp;
+
+			this.redraw_node(par, true);
+			/**
+			 * triggered when a node is created
+			 * @event
+			 * @name create_node.jstree
+			 * @param {Object} node
+			 * @param {String} parent the parent's ID
+			 * @param {Number} position the position of the new node among the parent's children
+			 */
+			this.trigger('create_node', { "node" : this.get_node(node), "parent" : par.id, "position" : pos });
+			if(callback) { callback.call(this, this.get_node(node)); }
+			return node.id;
+		},
+		/**
+		 * set the text value of a node
+		 * @name rename_node(obj, val)
+		 * @param  {mixed} obj the node, you can pass an array to rename multiple nodes to the same name
+		 * @param  {String} val the new text value
+		 * @return {Boolean}
+		 * @trigger rename_node.jstree
+		 */
+		rename_node : function (obj, val) {
+			var t1, t2, old;
+			if($.isArray(obj)) {
+				obj = obj.slice();
+				for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+					this.rename_node(obj[t1], val);
+				}
+				return true;
+			}
+			obj = this.get_node(obj);
+			if(!obj || obj.id === $.jstree.root) { return false; }
+			old = obj.text;
+			if(!this.check("rename_node", obj, this.get_parent(obj), val)) {
+				this.settings.core.error.call(this, this._data.core.last_error);
+				return false;
+			}
+			this.set_text(obj, val); // .apply(this, Array.prototype.slice.call(arguments))
+			/**
+			 * triggered when a node is renamed
+			 * @event
+			 * @name rename_node.jstree
+			 * @param {Object} node
+			 * @param {String} text the new value
+			 * @param {String} old the old value
+			 */
+			this.trigger('rename_node', { "node" : obj, "text" : val, "old" : old });
+			return true;
+		},
+		/**
+		 * remove a node
+		 * @name delete_node(obj)
+		 * @param  {mixed} obj the node, you can pass an array to delete multiple nodes
+		 * @return {Boolean}
+		 * @trigger delete_node.jstree, changed.jstree
+		 */
+		delete_node : function (obj) {
+			var t1, t2, par, pos, tmp, i, j, k, l, c, top, lft;
+			if($.isArray(obj)) {
+				obj = obj.slice();
+				for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+					this.delete_node(obj[t1]);
+				}
+				return true;
+			}
+			obj = this.get_node(obj);
+			if(!obj || obj.id === $.jstree.root) { return false; }
+			par = this.get_node(obj.parent);
+			pos = $.inArray(obj.id, par.children);
+			c = false;
+			if(!this.check("delete_node", obj, par, pos)) {
+				this.settings.core.error.call(this, this._data.core.last_error);
+				return false;
+			}
+			if(pos !== -1) {
+				par.children = $.vakata.array_remove(par.children, pos);
+			}
+			tmp = obj.children_d.concat([]);
+			tmp.push(obj.id);
+			for(i = 0, j = obj.parents.length; i < j; i++) {
+				this._model.data[obj.parents[i]].children_d = $.vakata.array_filter(this._model.data[obj.parents[i]].children_d, function (v) {
+					return $.inArray(v, tmp) === -1;
+				});
+			}
+			for(k = 0, l = tmp.length; k < l; k++) {
+				if(this._model.data[tmp[k]].state.selected) {
+					c = true;
+					break;
+				}
+			}
+			if (c) {
+				this._data.core.selected = $.vakata.array_filter(this._data.core.selected, function (v) {
+					return $.inArray(v, tmp) === -1;
+				});
+			}
+			/**
+			 * triggered when a node is deleted
+			 * @event
+			 * @name delete_node.jstree
+			 * @param {Object} node
+			 * @param {String} parent the parent's ID
+			 */
+			this.trigger('delete_node', { "node" : obj, "parent" : par.id });
+			if(c) {
+				this.trigger('changed', { 'action' : 'delete_node', 'node' : obj, 'selected' : this._data.core.selected, 'parent' : par.id });
+			}
+			for(k = 0, l = tmp.length; k < l; k++) {
+				delete this._model.data[tmp[k]];
+			}
+			if($.inArray(this._data.core.focused, tmp) !== -1) {
+				this._data.core.focused = null;
+				top = this.element[0].scrollTop;
+				lft = this.element[0].scrollLeft;
+				if(par.id === $.jstree.root) {
+					if (this._model.data[$.jstree.root].children[0]) {
+						this.get_node(this._model.data[$.jstree.root].children[0], true).children('.jstree-anchor').focus();
+					}
+				}
+				else {
+					this.get_node(par, true).children('.jstree-anchor').focus();
+				}
+				this.element[0].scrollTop  = top;
+				this.element[0].scrollLeft = lft;
+			}
+			this.redraw_node(par, true);
+			return true;
+		},
+		/**
+		 * check if an operation is premitted on the tree. Used internally.
+		 * @private
+		 * @name check(chk, obj, par, pos)
+		 * @param  {String} chk the operation to check, can be "create_node", "rename_node", "delete_node", "copy_node" or "move_node"
+		 * @param  {mixed} obj the node
+		 * @param  {mixed} par the parent
+		 * @param  {mixed} pos the position to insert at, or if "rename_node" - the new name
+		 * @param  {mixed} more some various additional information, for example if a "move_node" operations is triggered by DND this will be the hovered node
+		 * @return {Boolean}
+		 */
+		check : function (chk, obj, par, pos, more) {
+			obj = obj && obj.id ? obj : this.get_node(obj);
+			par = par && par.id ? par : this.get_node(par);
+			var tmp = chk.match(/^move_node|copy_node|create_node$/i) ? par : obj,
+				chc = this.settings.core.check_callback;
+			if(chk === "move_node" || chk === "copy_node") {
+				if((!more || !more.is_multi) && (obj.id === par.id || (chk === "move_node" && $.inArray(obj.id, par.children) === pos) || $.inArray(par.id, obj.children_d) !== -1)) {
+					this._data.core.last_error = { 'error' : 'check', 'plugin' : 'core', 'id' : 'core_01', 'reason' : 'Moving parent inside child', 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
+					return false;
+				}
+			}
+			if(tmp && tmp.data) { tmp = tmp.data; }
+			if(tmp && tmp.functions && (tmp.functions[chk] === false || tmp.functions[chk] === true)) {
+				if(tmp.functions[chk] === false) {
+					this._data.core.last_error = { 'error' : 'check', 'plugin' : 'core', 'id' : 'core_02', 'reason' : 'Node data prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
+				}
+				return tmp.functions[chk];
+			}
+			if(chc === false || ($.isFunction(chc) && chc.call(this, chk, obj, par, pos, more) === false) || (chc && chc[chk] === false)) {
+				this._data.core.last_error = { 'error' : 'check', 'plugin' : 'core', 'id' : 'core_03', 'reason' : 'User config for core.check_callback prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
+				return false;
+			}
+			return true;
+		},
+		/**
+		 * get the last error
+		 * @name last_error()
+		 * @return {Object}
+		 */
+		last_error : function () {
+			return this._data.core.last_error;
+		},
+		/**
+		 * move a node to a new parent
+		 * @name move_node(obj, par [, pos, callback, is_loaded])
+		 * @param  {mixed} obj the node to move, pass an array to move multiple nodes
+		 * @param  {mixed} par the new parent
+		 * @param  {mixed} pos the position to insert at (besides integer values, "first" and "last" are supported, as well as "before" and "after"), defaults to integer `0`
+		 * @param  {function} callback a function to call once the move is completed, receives 3 arguments - the node, the new parent and the position
+		 * @param  {Boolean} is_loaded internal parameter indicating if the parent node has been loaded
+		 * @param  {Boolean} skip_redraw internal parameter indicating if the tree should be redrawn
+		 * @param  {Boolean} instance internal parameter indicating if the node comes from another instance
+		 * @trigger move_node.jstree
+		 */
+		move_node : function (obj, par, pos, callback, is_loaded, skip_redraw, origin) {
+			var t1, t2, old_par, old_pos, new_par, old_ins, is_multi, dpc, tmp, i, j, k, l, p;
+
+			par = this.get_node(par);
+			pos = pos === undefined ? 0 : pos;
+			if(!par) { return false; }
+			if(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) {
+				return this.load_node(par, function () { this.move_node(obj, par, pos, callback, true, false, origin); });
+			}
+
+			if($.isArray(obj)) {
+				if(obj.length === 1) {
+					obj = obj[0];
+				}
+				else {
+					//obj = obj.slice();
+					for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+						if((tmp = this.move_node(obj[t1], par, pos, callback, is_loaded, false, origin))) {
+							par = tmp;
+							pos = "after";
+						}
+					}
+					this.redraw();
+					return true;
+				}
+			}
+			obj = obj && obj.id ? obj : this.get_node(obj);
+
+			if(!obj || obj.id === $.jstree.root) { return false; }
+
+			old_par = (obj.parent || $.jstree.root).toString();
+			new_par = (!pos.toString().match(/^(before|after)$/) || par.id === $.jstree.root) ? par : this.get_node(par.parent);
+			old_ins = origin ? origin : (this._model.data[obj.id] ? this : $.jstree.reference(obj.id));
+			is_multi = !old_ins || !old_ins._id || (this._id !== old_ins._id);
+			old_pos = old_ins && old_ins._id && old_par && old_ins._model.data[old_par] && old_ins._model.data[old_par].children ? $.inArray(obj.id, old_ins._model.data[old_par].children) : -1;
+			if(old_ins && old_ins._id) {
+				obj = old_ins._model.data[obj.id];
+			}
+
+			if(is_multi) {
+				if((tmp = this.copy_node(obj, par, pos, callback, is_loaded, false, origin))) {
+					if(old_ins) { old_ins.delete_node(obj); }
+					return tmp;
+				}
+				return false;
+			}
+			//var m = this._model.data;
+			if(par.id === $.jstree.root) {
+				if(pos === "before") { pos = "first"; }
+				if(pos === "after") { pos = "last"; }
+			}
+			switch(pos) {
+				case "before":
+					pos = $.inArray(par.id, new_par.children);
+					break;
+				case "after" :
+					pos = $.inArray(par.id, new_par.children) + 1;
+					break;
+				case "inside":
+				case "first":
+					pos = 0;
+					break;
+				case "last":
+					pos = new_par.children.length;
+					break;
+				default:
+					if(!pos) { pos = 0; }
+					break;
+			}
+			if(pos > new_par.children.length) { pos = new_par.children.length; }
+			if(!this.check("move_node", obj, new_par, pos, { 'core' : true, 'origin' : origin, 'is_multi' : (old_ins && old_ins._id && old_ins._id !== this._id), 'is_foreign' : (!old_ins || !old_ins._id) })) {
+				this.settings.core.error.call(this, this._data.core.last_error);
+				return false;
+			}
+			if(obj.parent === new_par.id) {
+				dpc = new_par.children.concat();
+				tmp = $.inArray(obj.id, dpc);
+				if(tmp !== -1) {
+					dpc = $.vakata.array_remove(dpc, tmp);
+					if(pos > tmp) { pos--; }
+				}
+				tmp = [];
+				for(i = 0, j = dpc.length; i < j; i++) {
+					tmp[i >= pos ? i+1 : i] = dpc[i];
+				}
+				tmp[pos] = obj.id;
+				new_par.children = tmp;
+				this._node_changed(new_par.id);
+				this.redraw(new_par.id === $.jstree.root);
+			}
+			else {
+				// clean old parent and up
+				tmp = obj.children_d.concat();
+				tmp.push(obj.id);
+				for(i = 0, j = obj.parents.length; i < j; i++) {
+					dpc = [];
+					p = old_ins._model.data[obj.parents[i]].children_d;
+					for(k = 0, l = p.length; k < l; k++) {
+						if($.inArray(p[k], tmp) === -1) {
+							dpc.push(p[k]);
+						}
+					}
+					old_ins._model.data[obj.parents[i]].children_d = dpc;
+				}
+				old_ins._model.data[old_par].children = $.vakata.array_remove_item(old_ins._model.data[old_par].children, obj.id);
+
+				// insert into new parent and up
+				for(i = 0, j = new_par.parents.length; i < j; i++) {
+					this._model.data[new_par.parents[i]].children_d = this._model.data[new_par.parents[i]].children_d.concat(tmp);
+				}
+				dpc = [];
+				for(i = 0, j = new_par.children.length; i < j; i++) {
+					dpc[i >= pos ? i+1 : i] = new_par.children[i];
+				}
+				dpc[pos] = obj.id;
+				new_par.children = dpc;
+				new_par.children_d.push(obj.id);
+				new_par.children_d = new_par.children_d.concat(obj.children_d);
+
+				// update object
+				obj.parent = new_par.id;
+				tmp = new_par.parents.concat();
+				tmp.unshift(new_par.id);
+				p = obj.parents.length;
+				obj.parents = tmp;
+
+				// update object children
+				tmp = tmp.concat();
+				for(i = 0, j = obj.children_d.length; i < j; i++) {
+					this._model.data[obj.children_d[i]].parents = this._model.data[obj.children_d[i]].parents.slice(0,p*-1);
+					Array.prototype.push.apply(this._model.data[obj.children_d[i]].parents, tmp);
+				}
+
+				if(old_par === $.jstree.root || new_par.id === $.jstree.root) {
+					this._model.force_full_redraw = true;
+				}
+				if(!this._model.force_full_redraw) {
+					this._node_changed(old_par);
+					this._node_changed(new_par.id);
+				}
+				if(!skip_redraw) {
+					this.redraw();
+				}
+			}
+			if(callback) { callback.call(this, obj, new_par, pos); }
+			/**
+			 * triggered when a node is moved
+			 * @event
+			 * @name move_node.jstree
+			 * @param {Object} node
+			 * @param {String} parent the parent's ID
+			 * @param {Number} position the position of the node among the parent's children
+			 * @param {String} old_parent the old parent of the node
+			 * @param {Number} old_position the old position of the node
+			 * @param {Boolean} is_multi do the node and new parent belong to different instances
+			 * @param {jsTree} old_instance the instance the node came from
+			 * @param {jsTree} new_instance the instance of the new parent
+			 */
+			this.trigger('move_node', { "node" : obj, "parent" : new_par.id, "position" : pos, "old_parent" : old_par, "old_position" : old_pos, 'is_multi' : (old_ins && old_ins._id && old_ins._id !== this._id), 'is_foreign' : (!old_ins || !old_ins._id), 'old_instance' : old_ins, 'new_instance' : this });
+			return obj.id;
+		},
+		/**
+		 * copy a node to a new parent
+		 * @name copy_node(obj, par [, pos, callback, is_loaded])
+		 * @param  {mixed} obj the node to copy, pass an array to copy multiple nodes
+		 * @param  {mixed} par the new parent
+		 * @param  {mixed} pos the position to insert at (besides integer values, "first" and "last" are supported, as well as "before" and "after"), defaults to integer `0`
+		 * @param  {function} callback a function to call once the move is completed, receives 3 arguments - the node, the new parent and the position
+		 * @param  {Boolean} is_loaded internal parameter indicating if the parent node has been loaded
+		 * @param  {Boolean} skip_redraw internal parameter indicating if the tree should be redrawn
+		 * @param  {Boolean} instance internal parameter indicating if the node comes from another instance
+		 * @trigger model.jstree copy_node.jstree
+		 */
+		copy_node : function (obj, par, pos, callback, is_loaded, skip_redraw, origin) {
+			var t1, t2, dpc, tmp, i, j, node, old_par, new_par, old_ins, is_multi;
+
+			par = this.get_node(par);
+			pos = pos === undefined ? 0 : pos;
+			if(!par) { return false; }
+			if(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) {
+				return this.load_node(par, function () { this.copy_node(obj, par, pos, callback, true, false, origin); });
+			}
+
+			if($.isArray(obj)) {
+				if(obj.length === 1) {
+					obj = obj[0];
+				}
+				else {
+					//obj = obj.slice();
+					for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+						if((tmp = this.copy_node(obj[t1], par, pos, callback, is_loaded, true, origin))) {
+							par = tmp;
+							pos = "after";
+						}
+					}
+					this.redraw();
+					return true;
+				}
+			}
+			obj = obj && obj.id ? obj : this.get_node(obj);
+			if(!obj || obj.id === $.jstree.root) { return false; }
+
+			old_par = (obj.parent || $.jstree.root).toString();
+			new_par = (!pos.toString().match(/^(before|after)$/) || par.id === $.jstree.root) ? par : this.get_node(par.parent);
+			old_ins = origin ? origin : (this._model.data[obj.id] ? this : $.jstree.reference(obj.id));
+			is_multi = !old_ins || !old_ins._id || (this._id !== old_ins._id);
+
+			if(old_ins && old_ins._id) {
+				obj = old_ins._model.data[obj.id];
+			}
+
+			if(par.id === $.jstree.root) {
+				if(pos === "before") { pos = "first"; }
+				if(pos === "after") { pos = "last"; }
+			}
+			switch(pos) {
+				case "before":
+					pos = $.inArray(par.id, new_par.children);
+					break;
+				case "after" :
+					pos = $.inArray(par.id, new_par.children) + 1;
+					break;
+				case "inside":
+				case "first":
+					pos = 0;
+					break;
+				case "last":
+					pos = new_par.children.length;
+					break;
+				default:
+					if(!pos) { pos = 0; }
+					break;
+			}
+			if(pos > new_par.children.length) { pos = new_par.children.length; }
+			if(!this.check("copy_node", obj, new_par, pos, { 'core' : true, 'origin' : origin, 'is_multi' : (old_ins && old_ins._id && old_ins._id !== this._id), 'is_foreign' : (!old_ins || !old_ins._id) })) {
+				this.settings.core.error.call(this, this._data.core.last_error);
+				return false;
+			}
+			node = old_ins ? old_ins.get_json(obj, { no_id : true, no_data : true, no_state : true }) : obj;
+			if(!node) { return false; }
+			if(node.id === true) { delete node.id; }
+			node = this._parse_model_from_json(node, new_par.id, new_par.parents.concat());
+			if(!node) { return false; }
+			tmp = this.get_node(node);
+			if(obj && obj.state && obj.state.loaded === false) { tmp.state.loaded = false; }
+			dpc = [];
+			dpc.push(node);
+			dpc = dpc.concat(tmp.children_d);
+			this.trigger('model', { "nodes" : dpc, "parent" : new_par.id });
+
+			// insert into new parent and up
+			for(i = 0, j = new_par.parents.length; i < j; i++) {
+				this._model.data[new_par.parents[i]].children_d = this._model.data[new_par.parents[i]].children_d.concat(dpc);
+			}
+			dpc = [];
+			for(i = 0, j = new_par.children.length; i < j; i++) {
+				dpc[i >= pos ? i+1 : i] = new_par.children[i];
+			}
+			dpc[pos] = tmp.id;
+			new_par.children = dpc;
+			new_par.children_d.push(tmp.id);
+			new_par.children_d = new_par.children_d.concat(tmp.children_d);
+
+			if(new_par.id === $.jstree.root) {
+				this._model.force_full_redraw = true;
+			}
+			if(!this._model.force_full_redraw) {
+				this._node_changed(new_par.id);
+			}
+			if(!skip_redraw) {
+				this.redraw(new_par.id === $.jstree.root);
+			}
+			if(callback) { callback.call(this, tmp, new_par, pos); }
+			/**
+			 * triggered when a node is copied
+			 * @event
+			 * @name copy_node.jstree
+			 * @param {Object} node the copied node
+			 * @param {Object} original the original node
+			 * @param {String} parent the parent's ID
+			 * @param {Number} position the position of the node among the parent's children
+			 * @param {String} old_parent the old parent of the node
+			 * @param {Number} old_position the position of the original node
+			 * @param {Boolean} is_multi do the node and new parent belong to different instances
+			 * @param {jsTree} old_instance the instance the node came from
+			 * @param {jsTree} new_instance the instance of the new parent
+			 */
+			this.trigger('copy_node', { "node" : tmp, "original" : obj, "parent" : new_par.id, "position" : pos, "old_parent" : old_par, "old_position" : old_ins && old_ins._id && old_par && old_ins._model.data[old_par] && old_ins._model.data[old_par].children ? $.inArray(obj.id, old_ins._model.data[old_par].children) : -1,'is_multi' : (old_ins && old_ins._id && old_ins._id !== this._id), 'is_foreign' : (!old_ins || !old_ins._id), 'old_instance' : old_ins, 'new_instance' : this });
+			return tmp.id;
+		},
+		/**
+		 * cut a node (a later call to `paste(obj)` would move the node)
+		 * @name cut(obj)
+		 * @param  {mixed} obj multiple objects can be passed using an array
+		 * @trigger cut.jstree
+		 */
+		cut : function (obj) {
+			if(!obj) { obj = this._data.core.selected.concat(); }
+			if(!$.isArray(obj)) { obj = [obj]; }
+			if(!obj.length) { return false; }
+			var tmp = [], o, t1, t2;
+			for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+				o = this.get_node(obj[t1]);
+				if(o && o.id && o.id !== $.jstree.root) { tmp.push(o); }
+			}
+			if(!tmp.length) { return false; }
+			ccp_node = tmp;
+			ccp_inst = this;
+			ccp_mode = 'move_node';
+			/**
+			 * triggered when nodes are added to the buffer for moving
+			 * @event
+			 * @name cut.jstree
+			 * @param {Array} node
+			 */
+			this.trigger('cut', { "node" : obj });
+		},
+		/**
+		 * copy a node (a later call to `paste(obj)` would copy the node)
+		 * @name copy(obj)
+		 * @param  {mixed} obj multiple objects can be passed using an array
+		 * @trigger copy.jstree
+		 */
+		copy : function (obj) {
+			if(!obj) { obj = this._data.core.selected.concat(); }
+			if(!$.isArray(obj)) { obj = [obj]; }
+			if(!obj.length) { return false; }
+			var tmp = [], o, t1, t2;
+			for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+				o = this.get_node(obj[t1]);
+				if(o && o.id && o.id !== $.jstree.root) { tmp.push(o); }
+			}
+			if(!tmp.length) { return false; }
+			ccp_node = tmp;
+			ccp_inst = this;
+			ccp_mode = 'copy_node';
+			/**
+			 * triggered when nodes are added to the buffer for copying
+			 * @event
+			 * @name copy.jstree
+			 * @param {Array} node
+			 */
+			this.trigger('copy', { "node" : obj });
+		},
+		/**
+		 * get the current buffer (any nodes that are waiting for a paste operation)
+		 * @name get_buffer()
+		 * @return {Object} an object consisting of `mode` ("copy_node" or "move_node"), `node` (an array of objects) and `inst` (the instance)
+		 */
+		get_buffer : function () {
+			return { 'mode' : ccp_mode, 'node' : ccp_node, 'inst' : ccp_inst };
+		},
+		/**
+		 * check if there is something in the buffer to paste
+		 * @name can_paste()
+		 * @return {Boolean}
+		 */
+		can_paste : function () {
+			return ccp_mode !== false && ccp_node !== false; // && ccp_inst._model.data[ccp_node];
+		},
+		/**
+		 * copy or move the previously cut or copied nodes to a new parent
+		 * @name paste(obj [, pos])
+		 * @param  {mixed} obj the new parent
+		 * @param  {mixed} pos the position to insert at (besides integer, "first" and "last" are supported), defaults to integer `0`
+		 * @trigger paste.jstree
+		 */
+		paste : function (obj, pos) {
+			obj = this.get_node(obj);
+			if(!obj || !ccp_mode || !ccp_mode.match(/^(copy_node|move_node)$/) || !ccp_node) { return false; }
+			if(this[ccp_mode](ccp_node, obj, pos, false, false, false, ccp_inst)) {
+				/**
+				 * triggered when paste is invoked
+				 * @event
+				 * @name paste.jstree
+				 * @param {String} parent the ID of the receiving node
+				 * @param {Array} node the nodes in the buffer
+				 * @param {String} mode the performed operation - "copy_node" or "move_node"
+				 */
+				this.trigger('paste', { "parent" : obj.id, "node" : ccp_node, "mode" : ccp_mode });
+			}
+			ccp_node = false;
+			ccp_mode = false;
+			ccp_inst = false;
+		},
+		/**
+		 * clear the buffer of previously copied or cut nodes
+		 * @name clear_buffer()
+		 * @trigger clear_buffer.jstree
+		 */
+		clear_buffer : function () {
+			ccp_node = false;
+			ccp_mode = false;
+			ccp_inst = false;
+			/**
+			 * triggered when the copy / cut buffer is cleared
+			 * @event
+			 * @name clear_buffer.jstree
+			 */
+			this.trigger('clear_buffer');
+		},
+		/**
+		 * put a node in edit mode (input field to rename the node)
+		 * @name edit(obj [, default_text, callback])
+		 * @param  {mixed} obj
+		 * @param  {String} default_text the text to populate the input with (if omitted or set to a non-string value the node's text value is used)
+		 * @param  {Function} callback a function to be called once the text box is blurred, it is called in the instance's scope and receives the node, a status parameter (true if the rename is successful, false otherwise) and a boolean indicating if the user cancelled the edit. You can access the node's title using .text
+		 */
+		edit : function (obj, default_text, callback) {
+			var rtl, w, a, s, t, h1, h2, fn, tmp, cancel = false;
+			obj = this.get_node(obj);
+			if(!obj) { return false; }
+			if(!this.check("edit", obj, this.get_parent(obj))) {
+				this.settings.core.error.call(this, this._data.core.last_error);
+				return false;
+			}
+			tmp = obj;
+			default_text = typeof default_text === 'string' ? default_text : obj.text;
+			this.set_text(obj, "");
+			obj = this._open_to(obj);
+			tmp.text = default_text;
+
+			rtl = this._data.core.rtl;
+			w  = this.element.width();
+			this._data.core.focused = tmp.id;
+			a  = obj.children('.jstree-anchor').focus();
+			s  = $('<span>');
+			/*!
+			oi = obj.children("i:visible"),
+			ai = a.children("i:visible"),
+			w1 = oi.width() * oi.length,
+			w2 = ai.width() * ai.length,
+			*/
+			t  = default_text;
+			h1 = $("<"+"div />", { css : { "position" : "absolute", "top" : "-200px", "left" : (rtl ? "0px" : "-1000px"), "visibility" : "hidden" } }).appendTo("body");
+			h2 = $("<"+"input />", {
+						"value" : t,
+						"class" : "jstree-rename-input",
+						// "size" : t.length,
+						"css" : {
+							"padding" : "0",
+							"border" : "1px solid silver",
+							"box-sizing" : "border-box",
+							"display" : "inline-block",
+							"height" : (this._data.core.li_height) + "px",
+							"lineHeight" : (this._data.core.li_height) + "px",
+							"width" : "150px" // will be set a bit further down
+						},
+						"blur" : $.proxy(function (e) {
+							e.stopImmediatePropagation();
+							e.preventDefault();
+							var i = s.children(".jstree-rename-input"),
+								v = i.val(),
+								f = this.settings.core.force_text,
+								nv;
+							if(v === "") { v = t; }
+							h1.remove();
+							s.replaceWith(a);
+							s.remove();
+							t = f ? t : $('<div></div>').append($.parseHTML(t)).html();
+							this.set_text(obj, t);
+							nv = !!this.rename_node(obj, f ? $('<div></div>').text(v).text() : $('<div></div>').append($.parseHTML(v)).html());
+							if(!nv) {
+								this.set_text(obj, t); // move this up? and fix #483
+							}
+							this._data.core.focused = tmp.id;
+							setTimeout($.proxy(function () {
+								var node = this.get_node(tmp.id, true);
+								if(node.length) {
+									this._data.core.focused = tmp.id;
+									node.children('.jstree-anchor').focus();
+								}
+							}, this), 0);
+							if(callback) {
+								callback.call(this, tmp, nv, cancel);
+							}
+							h2 = null;
+						}, this),
+						"keydown" : function (e) {
+							var key = e.which;
+							if(key === 27) {
+								cancel = true;
+								this.value = t;
+							}
+							if(key === 27 || key === 13 || key === 37 || key === 38 || key === 39 || key === 40 || key === 32) {
+								e.stopImmediatePropagation();
+							}
+							if(key === 27 || key === 13) {
+								e.preventDefault();
+								this.blur();
+							}
+						},
+						"click" : function (e) { e.stopImmediatePropagation(); },
+						"mousedown" : function (e) { e.stopImmediatePropagation(); },
+						"keyup" : function (e) {
+							h2.width(Math.min(h1.text("pW" + this.value).width(),w));
+						},
+						"keypress" : function(e) {
+							if(e.which === 13) { return false; }
+						}
+					});
+				fn = {
+						fontFamily		: a.css('fontFamily')		|| '',
+						fontSize		: a.css('fontSize')			|| '',
+						fontWeight		: a.css('fontWeight')		|| '',
+						fontStyle		: a.css('fontStyle')		|| '',
+						fontStretch		: a.css('fontStretch')		|| '',
+						fontVariant		: a.css('fontVariant')		|| '',
+						letterSpacing	: a.css('letterSpacing')	|| '',
+						wordSpacing		: a.css('wordSpacing')		|| ''
+				};
+			s.attr('class', a.attr('class')).append(a.contents().clone()).append(h2);
+			a.replaceWith(s);
+			h1.css(fn);
+			h2.css(fn).width(Math.min(h1.text("pW" + h2[0].value).width(),w))[0].select();
+			$(document).one('mousedown.jstree touchstart.jstree dnd_start.vakata', function (e) {
+				if (h2 && e.target !== h2) {
+					$(h2).blur();
+				}
+			});
+		},
+
+
+		/**
+		 * changes the theme
+		 * @name set_theme(theme_name [, theme_url])
+		 * @param {String} theme_name the name of the new theme to apply
+		 * @param {mixed} theme_url  the location of the CSS file for this theme. Omit or set to `false` if you manually included the file. Set to `true` to autoload from the `core.themes.dir` directory.
+		 * @trigger set_theme.jstree
+		 */
+		set_theme : function (theme_name, theme_url) {
+			if(!theme_name) { return false; }
+			if(theme_url === true) {
+				var dir = this.settings.core.themes.dir;
+				if(!dir) { dir = $.jstree.path + '/themes'; }
+				theme_url = dir + '/' + theme_name + '/style.css';
+			}
+			if(theme_url && $.inArray(theme_url, themes_loaded) === -1) {
+				$('head').append('<'+'link rel="stylesheet" href="' + theme_url + '" type="text/css" />');
+				themes_loaded.push(theme_url);
+			}
+			if(this._data.core.themes.name) {
+				this.element.removeClass('jstree-' + this._data.core.themes.name);
+			}
+			this._data.core.themes.name = theme_name;
+			this.element.addClass('jstree-' + theme_name);
+			this.element[this.settings.core.themes.responsive ? 'addClass' : 'removeClass' ]('jstree-' + theme_name + '-responsive');
+			/**
+			 * triggered when a theme is set
+			 * @event
+			 * @name set_theme.jstree
+			 * @param {String} theme the new theme
+			 */
+			this.trigger('set_theme', { 'theme' : theme_name });
+		},
+		/**
+		 * gets the name of the currently applied theme name
+		 * @name get_theme()
+		 * @return {String}
+		 */
+		get_theme : function () { return this._data.core.themes.name; },
+		/**
+		 * changes the theme variant (if the theme has variants)
+		 * @name set_theme_variant(variant_name)
+		 * @param {String|Boolean} variant_name the variant to apply (if `false` is used the current variant is removed)
+		 */
+		set_theme_variant : function (variant_name) {
+			if(this._data.core.themes.variant) {
+				this.element.removeClass('jstree-' + this._data.core.themes.name + '-' + this._data.core.themes.variant);
+			}
+			this._data.core.themes.variant = variant_name;
+			if(variant_name) {
+				this.element.addClass('jstree-' + this._data.core.themes.name + '-' + this._data.core.themes.variant);
+			}
+		},
+		/**
+		 * gets the name of the currently applied theme variant
+		 * @name get_theme()
+		 * @return {String}
+		 */
+		get_theme_variant : function () { return this._data.core.themes.variant; },
+		/**
+		 * shows a striped background on the container (if the theme supports it)
+		 * @name show_stripes()
+		 */
+		show_stripes : function () {
+			this._data.core.themes.stripes = true;
+			this.get_container_ul().addClass("jstree-striped");
+			/**
+			 * triggered when stripes are shown
+			 * @event
+			 * @name show_stripes.jstree
+			 */
+			this.trigger('show_stripes');
+		},
+		/**
+		 * hides the striped background on the container
+		 * @name hide_stripes()
+		 */
+		hide_stripes : function () {
+			this._data.core.themes.stripes = false;
+			this.get_container_ul().removeClass("jstree-striped");
+			/**
+			 * triggered when stripes are hidden
+			 * @event
+			 * @name hide_stripes.jstree
+			 */
+			this.trigger('hide_stripes');
+		},
+		/**
+		 * toggles the striped background on the container
+		 * @name toggle_stripes()
+		 */
+		toggle_stripes : function () { if(this._data.core.themes.stripes) { this.hide_stripes(); } else { this.show_stripes(); } },
+		/**
+		 * shows the connecting dots (if the theme supports it)
+		 * @name show_dots()
+		 */
+		show_dots : function () {
+			this._data.core.themes.dots = true;
+			this.get_container_ul().removeClass("jstree-no-dots");
+			/**
+			 * triggered when dots are shown
+			 * @event
+			 * @name show_dots.jstree
+			 */
+			this.trigger('show_dots');
+		},
+		/**
+		 * hides the connecting dots
+		 * @name hide_dots()
+		 */
+		hide_dots : function () {
+			this._data.core.themes.dots = false;
+			this.get_container_ul().addClass("jstree-no-dots");
+			/**
+			 * triggered when dots are hidden
+			 * @event
+			 * @name hide_dots.jstree
+			 */
+			this.trigger('hide_dots');
+		},
+		/**
+		 * toggles the connecting dots
+		 * @name toggle_dots()
+		 */
+		toggle_dots : function () { if(this._data.core.themes.dots) { this.hide_dots(); } else { this.show_dots(); } },
+		/**
+		 * show the node icons
+		 * @name show_icons()
+		 */
+		show_icons : function () {
+			this._data.core.themes.icons = true;
+			this.get_container_ul().removeClass("jstree-no-icons");
+			/**
+			 * triggered when icons are shown
+			 * @event
+			 * @name show_icons.jstree
+			 */
+			this.trigger('show_icons');
+		},
+		/**
+		 * hide the node icons
+		 * @name hide_icons()
+		 */
+		hide_icons : function () {
+			this._data.core.themes.icons = false;
+			this.get_container_ul().addClass("jstree-no-icons");
+			/**
+			 * triggered when icons are hidden
+			 * @event
+			 * @name hide_icons.jstree
+			 */
+			this.trigger('hide_icons');
+		},
+		/**
+		 * toggle the node icons
+		 * @name toggle_icons()
+		 */
+		toggle_icons : function () { if(this._data.core.themes.icons) { this.hide_icons(); } else { this.show_icons(); } },
+		/**
+		 * show the node ellipsis
+		 * @name show_icons()
+		 */
+		show_ellipsis : function () {
+			this._data.core.themes.ellipsis = true;
+			this.get_container_ul().addClass("jstree-ellipsis");
+			/**
+			 * triggered when ellisis is shown
+			 * @event
+			 * @name show_ellipsis.jstree
+			 */
+			this.trigger('show_ellipsis');
+		},
+		/**
+		 * hide the node ellipsis
+		 * @name hide_ellipsis()
+		 */
+		hide_ellipsis : function () {
+			this._data.core.themes.ellipsis = false;
+			this.get_container_ul().removeClass("jstree-ellipsis");
+			/**
+			 * triggered when ellisis is hidden
+			 * @event
+			 * @name hide_ellipsis.jstree
+			 */
+			this.trigger('hide_ellipsis');
+		},
+		/**
+		 * toggle the node ellipsis
+		 * @name toggle_icons()
+		 */
+		toggle_ellipsis : function () { if(this._data.core.themes.ellipsis) { this.hide_ellipsis(); } else { this.show_ellipsis(); } },
+		/**
+		 * set the node icon for a node
+		 * @name set_icon(obj, icon)
+		 * @param {mixed} obj
+		 * @param {String} icon the new icon - can be a path to an icon or a className, if using an image that is in the current directory use a `./` prefix, otherwise it will be detected as a class
+		 */
+		set_icon : function (obj, icon) {
+			var t1, t2, dom, old;
+			if($.isArray(obj)) {
+				obj = obj.slice();
+				for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+					this.set_icon(obj[t1], icon);
+				}
+				return true;
+			}
+			obj = this.get_node(obj);
+			if(!obj || obj.id === $.jstree.root) { return false; }
+			old = obj.icon;
+			obj.icon = icon === true || icon === null || icon === undefined || icon === '' ? true : icon;
+			dom = this.get_node(obj, true).children(".jstree-anchor").children(".jstree-themeicon");
+			if(icon === false) {
+				dom.removeClass('jstree-themeicon-custom ' + old).css("background","").removeAttr("rel");
+				this.hide_icon(obj);
+			}
+			else if(icon === true || icon === null || icon === undefined || icon === '') {
+				dom.removeClass('jstree-themeicon-custom ' + old).css("background","").removeAttr("rel");
+				if(old === false) { this.show_icon(obj); }
+			}
+			else if(icon.indexOf("/") === -1 && icon.indexOf(".") === -1) {
+				dom.removeClass(old).css("background","");
+				dom.addClass(icon + ' jstree-themeicon-custom').attr("rel",icon);
+				if(old === false) { this.show_icon(obj); }
+			}
+			else {
+				dom.removeClass(old).css("background","");
+				dom.addClass('jstree-themeicon-custom').css("background", "url('" + icon + "') center center no-repeat").attr("rel",icon);
+				if(old === false) { this.show_icon(obj); }
+			}
+			return true;
+		},
+		/**
+		 * get the node icon for a node
+		 * @name get_icon(obj)
+		 * @param {mixed} obj
+		 * @return {String}
+		 */
+		get_icon : function (obj) {
+			obj = this.get_node(obj);
+			return (!obj || obj.id === $.jstree.root) ? false : obj.icon;
+		},
+		/**
+		 * hide the icon on an individual node
+		 * @name hide_icon(obj)
+		 * @param {mixed} obj
+		 */
+		hide_icon : function (obj) {
+			var t1, t2;
+			if($.isArray(obj)) {
+				obj = obj.slice();
+				for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+					this.hide_icon(obj[t1]);
+				}
+				return true;
+			}
+			obj = this.get_node(obj);
+			if(!obj || obj === $.jstree.root) { return false; }
+			obj.icon = false;
+			this.get_node(obj, true).children(".jstree-anchor").children(".jstree-themeicon").addClass('jstree-themeicon-hidden');
+			return true;
+		},
+		/**
+		 * show the icon on an individual node
+		 * @name show_icon(obj)
+		 * @param {mixed} obj
+		 */
+		show_icon : function (obj) {
+			var t1, t2, dom;
+			if($.isArray(obj)) {
+				obj = obj.slice();
+				for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+					this.show_icon(obj[t1]);
+				}
+				return true;
+			}
+			obj = this.get_node(obj);
+			if(!obj || obj === $.jstree.root) { return false; }
+			dom = this.get_node(obj, true);
+			obj.icon = dom.length ? dom.children(".jstree-anchor").children(".jstree-themeicon").attr('rel') : true;
+			if(!obj.icon) { obj.icon = true; }
+			dom.children(".jstree-anchor").children(".jstree-themeicon").removeClass('jstree-themeicon-hidden');
+			return true;
+		}
+	};
+
+	// helpers
+	$.vakata = {};
+	// collect attributes
+	$.vakata.attributes = function(node, with_values) {
+		node = $(node)[0];
+		var attr = with_values ? {} : [];
+		if(node && node.attributes) {
+			$.each(node.attributes, function (i, v) {
+				if($.inArray(v.name.toLowerCase(),['style','contenteditable','hasfocus','tabindex']) !== -1) { return; }
+				if(v.value !== null && $.trim(v.value) !== '') {
+					if(with_values) { attr[v.name] = v.value; }
+					else { attr.push(v.name); }
+				}
+			});
+		}
+		return attr;
+	};
+	$.vakata.array_unique = function(array) {
+		var a = [], i, j, l, o = {};
+		for(i = 0, l = array.length; i < l; i++) {
+			if(o[array[i]] === undefined) {
+				a.push(array[i]);
+				o[array[i]] = true;
+			}
+		}
+		return a;
+	};
+	// remove item from array
+	$.vakata.array_remove = function(array, from) {
+		array.splice(from, 1);
+		return array;
+		//var rest = array.slice((to || from) + 1 || array.length);
+		//array.length = from < 0 ? array.length + from : from;
+		//array.push.apply(array, rest);
+		//return array;
+	};
+	// remove item from array
+	$.vakata.array_remove_item = function(array, item) {
+		var tmp = $.inArray(item, array);
+		return tmp !== -1 ? $.vakata.array_remove(array, tmp) : array;
+	};
+	$.vakata.array_filter = function(c,a,b,d,e) {
+		if (c.filter) {
+			return c.filter(a, b);
+		}
+		d=[];
+		for (e in c) {
+			if (~~e+''===e+'' && e>=0 && a.call(b,c[e],+e,c)) {
+				d.push(c[e]);
+			}
+		}
+		return d;
+	};
+}));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vakata-jstree-3.3.5/src/jstree.massload.js	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,137 @@
+/**
+ * ### Massload plugin
+ *
+ * Adds massload functionality to jsTree, so that multiple nodes can be loaded in a single request (only useful with lazy loading).
+ */
+/*globals jQuery, define, exports, require, document */
+(function (factory) {
+	"use strict";
+	if (typeof define === 'function' && define.amd) {
+		define('jstree.massload', ['jquery','jstree'], factory);
+	}
+	else if(typeof exports === 'object') {
+		factory(require('jquery'), require('jstree'));
+	}
+	else {
+		factory(jQuery, jQuery.jstree);
+	}
+}(function ($, jstree, undefined) {
+	"use strict";
+
+	if($.jstree.plugins.massload) { return; }
+
+	/**
+	 * massload configuration
+	 *
+	 * It is possible to set this to a standard jQuery-like AJAX config.
+	 * In addition to the standard jQuery ajax options here you can supply functions for `data` and `url`, the functions will be run in the current instance's scope and a param will be passed indicating which node IDs need to be loaded, the return value of those functions will be used.
+	 *
+	 * You can also set this to a function, that function will receive the node IDs being loaded as argument and a second param which is a function (callback) which should be called with the result.
+	 *
+	 * Both the AJAX and the function approach rely on the same return value - an object where the keys are the node IDs, and the value is the children of that node as an array.
+	 *
+	 *	{
+	 *		"id1" : [{ "text" : "Child of ID1", "id" : "c1" }, { "text" : "Another child of ID1", "id" : "c2" }],
+	 *		"id2" : [{ "text" : "Child of ID2", "id" : "c3" }]
+	 *	}
+	 * 
+	 * @name $.jstree.defaults.massload
+	 * @plugin massload
+	 */
+	$.jstree.defaults.massload = null;
+	$.jstree.plugins.massload = function (options, parent) {
+		this.init = function (el, options) {
+			this._data.massload = {};
+			parent.init.call(this, el, options);
+		};
+		this._load_nodes = function (nodes, callback, is_callback, force_reload) {
+			var s = this.settings.massload,
+				nodesString = JSON.stringify(nodes),
+				toLoad = [],
+				m = this._model.data,
+				i, j, dom;
+			if (!is_callback) {
+				for(i = 0, j = nodes.length; i < j; i++) {
+					if(!m[nodes[i]] || ( (!m[nodes[i]].state.loaded && !m[nodes[i]].state.failed) || force_reload) ) {
+						toLoad.push(nodes[i]);
+						dom = this.get_node(nodes[i], true);
+						if (dom && dom.length) {
+							dom.addClass("jstree-loading").attr('aria-busy',true);
+						}
+					}
+				}
+				this._data.massload = {};
+				if (toLoad.length) {
+					if($.isFunction(s)) {
+						return s.call(this, toLoad, $.proxy(function (data) {
+							var i, j;
+							if(data) {
+								for(i in data) {
+									if(data.hasOwnProperty(i)) {
+										this._data.massload[i] = data[i];
+									}
+								}
+							}
+							for(i = 0, j = nodes.length; i < j; i++) {
+								dom = this.get_node(nodes[i], true);
+								if (dom && dom.length) {
+									dom.removeClass("jstree-loading").attr('aria-busy',false);
+								}
+							}
+							parent._load_nodes.call(this, nodes, callback, is_callback, force_reload);
+						}, this));
+					}
+					if(typeof s === 'object' && s && s.url) {
+						s = $.extend(true, {}, s);
+						if($.isFunction(s.url)) {
+							s.url = s.url.call(this, toLoad);
+						}
+						if($.isFunction(s.data)) {
+							s.data = s.data.call(this, toLoad);
+						}
+						return $.ajax(s)
+							.done($.proxy(function (data,t,x) {
+									var i, j;
+									if(data) {
+										for(i in data) {
+											if(data.hasOwnProperty(i)) {
+												this._data.massload[i] = data[i];
+											}
+										}
+									}
+									for(i = 0, j = nodes.length; i < j; i++) {
+										dom = this.get_node(nodes[i], true);
+										if (dom && dom.length) {
+											dom.removeClass("jstree-loading").attr('aria-busy',false);
+										}
+									}
+									parent._load_nodes.call(this, nodes, callback, is_callback, force_reload);
+								}, this))
+							.fail($.proxy(function (f) {
+									parent._load_nodes.call(this, nodes, callback, is_callback, force_reload);
+								}, this));
+					}
+				}
+			}
+			return parent._load_nodes.call(this, nodes, callback, is_callback, force_reload);
+		};
+		this._load_node = function (obj, callback) {
+			var data = this._data.massload[obj.id],
+				rslt = null, dom;
+			if(data) {
+				rslt = this[typeof data === 'string' ? '_append_html_data' : '_append_json_data'](
+					obj,
+					typeof data === 'string' ? $($.parseHTML(data)).filter(function () { return this.nodeType !== 3; }) : data,
+					function (status) { callback.call(this, status); }
+				);
+				dom = this.get_node(obj.id, true);
+				if (dom && dom.length) {
+					dom.removeClass("jstree-loading").attr('aria-busy',false);
+				}
+				delete this._data.massload[obj.id];
+				return rslt;
+			}
+			return parent._load_node.call(this, obj, callback);
+		};
+	};
+}));
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vakata-jstree-3.3.5/src/jstree.search.js	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,421 @@
+/**
+ * ### Search plugin
+ *
+ * Adds search functionality to jsTree.
+ */
+/*globals jQuery, define, exports, require, document */
+(function (factory) {
+	"use strict";
+	if (typeof define === 'function' && define.amd) {
+		define('jstree.search', ['jquery','jstree'], factory);
+	}
+	else if(typeof exports === 'object') {
+		factory(require('jquery'), require('jstree'));
+	}
+	else {
+		factory(jQuery, jQuery.jstree);
+	}
+}(function ($, jstree, undefined) {
+	"use strict";
+
+	if($.jstree.plugins.search) { return; }
+
+	/**
+	 * stores all defaults for the search plugin
+	 * @name $.jstree.defaults.search
+	 * @plugin search
+	 */
+	$.jstree.defaults.search = {
+		/**
+		 * a jQuery-like AJAX config, which jstree uses if a server should be queried for results.
+		 *
+		 * A `str` (which is the search string) parameter will be added with the request, an optional `inside` parameter will be added if the search is limited to a node id. The expected result is a JSON array with nodes that need to be opened so that matching nodes will be revealed.
+		 * Leave this setting as `false` to not query the server. You can also set this to a function, which will be invoked in the instance's scope and receive 3 parameters - the search string, the callback to call with the array of nodes to load, and the optional node ID to limit the search to
+		 * @name $.jstree.defaults.search.ajax
+		 * @plugin search
+		 */
+		ajax : false,
+		/**
+		 * Indicates if the search should be fuzzy or not (should `chnd3` match `child node 3`). Default is `false`.
+		 * @name $.jstree.defaults.search.fuzzy
+		 * @plugin search
+		 */
+		fuzzy : false,
+		/**
+		 * Indicates if the search should be case sensitive. Default is `false`.
+		 * @name $.jstree.defaults.search.case_sensitive
+		 * @plugin search
+		 */
+		case_sensitive : false,
+		/**
+		 * Indicates if the tree should be filtered (by default) to show only matching nodes (keep in mind this can be a heavy on large trees in old browsers).
+		 * This setting can be changed at runtime when calling the search method. Default is `false`.
+		 * @name $.jstree.defaults.search.show_only_matches
+		 * @plugin search
+		 */
+		show_only_matches : false,
+		/**
+		 * Indicates if the children of matched element are shown (when show_only_matches is true)
+		 * This setting can be changed at runtime when calling the search method. Default is `false`.
+		 * @name $.jstree.defaults.search.show_only_matches_children
+		 * @plugin search
+		 */
+		show_only_matches_children : false,
+		/**
+		 * Indicates if all nodes opened to reveal the search result, should be closed when the search is cleared or a new search is performed. Default is `true`.
+		 * @name $.jstree.defaults.search.close_opened_onclear
+		 * @plugin search
+		 */
+		close_opened_onclear : true,
+		/**
+		 * Indicates if only leaf nodes should be included in search results. Default is `false`.
+		 * @name $.jstree.defaults.search.search_leaves_only
+		 * @plugin search
+		 */
+		search_leaves_only : false,
+		/**
+		 * If set to a function it wil be called in the instance's scope with two arguments - search string and node (where node will be every node in the structure, so use with caution).
+		 * If the function returns a truthy value the node will be considered a match (it might not be displayed if search_only_leaves is set to true and the node is not a leaf). Default is `false`.
+		 * @name $.jstree.defaults.search.search_callback
+		 * @plugin search
+		 */
+		search_callback : false
+	};
+
+	$.jstree.plugins.search = function (options, parent) {
+		this.bind = function () {
+			parent.bind.call(this);
+
+			this._data.search.str = "";
+			this._data.search.dom = $();
+			this._data.search.res = [];
+			this._data.search.opn = [];
+			this._data.search.som = false;
+			this._data.search.smc = false;
+			this._data.search.hdn = [];
+
+			this.element
+				.on("search.jstree", $.proxy(function (e, data) {
+						if(this._data.search.som && data.res.length) {
+							var m = this._model.data, i, j, p = [], k, l;
+							for(i = 0, j = data.res.length; i < j; i++) {
+								if(m[data.res[i]] && !m[data.res[i]].state.hidden) {
+									p.push(data.res[i]);
+									p = p.concat(m[data.res[i]].parents);
+									if(this._data.search.smc) {
+										for (k = 0, l = m[data.res[i]].children_d.length; k < l; k++) {
+											if (m[m[data.res[i]].children_d[k]] && !m[m[data.res[i]].children_d[k]].state.hidden) {
+												p.push(m[data.res[i]].children_d[k]);
+											}
+										}
+									}
+								}
+							}
+							p = $.vakata.array_remove_item($.vakata.array_unique(p), $.jstree.root);
+							this._data.search.hdn = this.hide_all(true);
+							this.show_node(p, true);
+							this.redraw(true);
+						}
+					}, this))
+				.on("clear_search.jstree", $.proxy(function (e, data) {
+						if(this._data.search.som && data.res.length) {
+							this.show_node(this._data.search.hdn, true);
+							this.redraw(true);
+						}
+					}, this));
+		};
+		/**
+		 * used to search the tree nodes for a given string
+		 * @name search(str [, skip_async])
+		 * @param {String} str the search string
+		 * @param {Boolean} skip_async if set to true server will not be queried even if configured
+		 * @param {Boolean} show_only_matches if set to true only matching nodes will be shown (keep in mind this can be very slow on large trees or old browsers)
+		 * @param {mixed} inside an optional node to whose children to limit the search
+		 * @param {Boolean} append if set to true the results of this search are appended to the previous search
+		 * @plugin search
+		 * @trigger search.jstree
+		 */
+		this.search = function (str, skip_async, show_only_matches, inside, append, show_only_matches_children) {
+			if(str === false || $.trim(str.toString()) === "") {
+				return this.clear_search();
+			}
+			inside = this.get_node(inside);
+			inside = inside && inside.id ? inside.id : null;
+			str = str.toString();
+			var s = this.settings.search,
+				a = s.ajax ? s.ajax : false,
+				m = this._model.data,
+				f = null,
+				r = [],
+				p = [], i, j;
+			if(this._data.search.res.length && !append) {
+				this.clear_search();
+			}
+			if(show_only_matches === undefined) {
+				show_only_matches = s.show_only_matches;
+			}
+			if(show_only_matches_children === undefined) {
+				show_only_matches_children = s.show_only_matches_children;
+			}
+			if(!skip_async && a !== false) {
+				if($.isFunction(a)) {
+					return a.call(this, str, $.proxy(function (d) {
+							if(d && d.d) { d = d.d; }
+							this._load_nodes(!$.isArray(d) ? [] : $.vakata.array_unique(d), function () {
+								this.search(str, true, show_only_matches, inside, append, show_only_matches_children);
+							});
+						}, this), inside);
+				}
+				else {
+					a = $.extend({}, a);
+					if(!a.data) { a.data = {}; }
+					a.data.str = str;
+					if(inside) {
+						a.data.inside = inside;
+					}
+					if (this._data.search.lastRequest) {
+						this._data.search.lastRequest.abort();
+					}
+					this._data.search.lastRequest = $.ajax(a)
+						.fail($.proxy(function () {
+							this._data.core.last_error = { 'error' : 'ajax', 'plugin' : 'search', 'id' : 'search_01', 'reason' : 'Could not load search parents', 'data' : JSON.stringify(a) };
+							this.settings.core.error.call(this, this._data.core.last_error);
+						}, this))
+						.done($.proxy(function (d) {
+							if(d && d.d) { d = d.d; }
+							this._load_nodes(!$.isArray(d) ? [] : $.vakata.array_unique(d), function () {
+								this.search(str, true, show_only_matches, inside, append, show_only_matches_children);
+							});
+						}, this));
+					return this._data.search.lastRequest;
+				}
+			}
+			if(!append) {
+				this._data.search.str = str;
+				this._data.search.dom = $();
+				this._data.search.res = [];
+				this._data.search.opn = [];
+				this._data.search.som = show_only_matches;
+				this._data.search.smc = show_only_matches_children;
+			}
+
+			f = new $.vakata.search(str, true, { caseSensitive : s.case_sensitive, fuzzy : s.fuzzy });
+			$.each(m[inside ? inside : $.jstree.root].children_d, function (ii, i) {
+				var v = m[i];
+				if(v.text && !v.state.hidden && (!s.search_leaves_only || (v.state.loaded && v.children.length === 0)) && ( (s.search_callback && s.search_callback.call(this, str, v)) || (!s.search_callback && f.search(v.text).isMatch) ) ) {
+					r.push(i);
+					p = p.concat(v.parents);
+				}
+			});
+			if(r.length) {
+				p = $.vakata.array_unique(p);
+				for(i = 0, j = p.length; i < j; i++) {
+					if(p[i] !== $.jstree.root && m[p[i]] && this.open_node(p[i], null, 0) === true) {
+						this._data.search.opn.push(p[i]);
+					}
+				}
+				if(!append) {
+					this._data.search.dom = $(this.element[0].querySelectorAll('#' + $.map(r, function (v) { return "0123456789".indexOf(v[0]) !== -1 ? '\\3' + v[0] + ' ' + v.substr(1).replace($.jstree.idregex,'\\$&') : v.replace($.jstree.idregex,'\\$&'); }).join(', #')));
+					this._data.search.res = r;
+				}
+				else {
+					this._data.search.dom = this._data.search.dom.add($(this.element[0].querySelectorAll('#' + $.map(r, function (v) { return "0123456789".indexOf(v[0]) !== -1 ? '\\3' + v[0] + ' ' + v.substr(1).replace($.jstree.idregex,'\\$&') : v.replace($.jstree.idregex,'\\$&'); }).join(', #'))));
+					this._data.search.res = $.vakata.array_unique(this._data.search.res.concat(r));
+				}
+				this._data.search.dom.children(".jstree-anchor").addClass('jstree-search');
+			}
+			/**
+			 * triggered after search is complete
+			 * @event
+			 * @name search.jstree
+			 * @param {jQuery} nodes a jQuery collection of matching nodes
+			 * @param {String} str the search string
+			 * @param {Array} res a collection of objects represeing the matching nodes
+			 * @plugin search
+			 */
+			this.trigger('search', { nodes : this._data.search.dom, str : str, res : this._data.search.res, show_only_matches : show_only_matches });
+		};
+		/**
+		 * used to clear the last search (removes classes and shows all nodes if filtering is on)
+		 * @name clear_search()
+		 * @plugin search
+		 * @trigger clear_search.jstree
+		 */
+		this.clear_search = function () {
+			if(this.settings.search.close_opened_onclear) {
+				this.close_node(this._data.search.opn, 0);
+			}
+			/**
+			 * triggered after search is complete
+			 * @event
+			 * @name clear_search.jstree
+			 * @param {jQuery} nodes a jQuery collection of matching nodes (the result from the last search)
+			 * @param {String} str the search string (the last search string)
+			 * @param {Array} res a collection of objects represeing the matching nodes (the result from the last search)
+			 * @plugin search
+			 */
+			this.trigger('clear_search', { 'nodes' : this._data.search.dom, str : this._data.search.str, res : this._data.search.res });
+			if(this._data.search.res.length) {
+				this._data.search.dom = $(this.element[0].querySelectorAll('#' + $.map(this._data.search.res, function (v) {
+					return "0123456789".indexOf(v[0]) !== -1 ? '\\3' + v[0] + ' ' + v.substr(1).replace($.jstree.idregex,'\\$&') : v.replace($.jstree.idregex,'\\$&');
+				}).join(', #')));
+				this._data.search.dom.children(".jstree-anchor").removeClass("jstree-search");
+			}
+			this._data.search.str = "";
+			this._data.search.res = [];
+			this._data.search.opn = [];
+			this._data.search.dom = $();
+		};
+
+		this.redraw_node = function(obj, deep, callback, force_render) {
+			obj = parent.redraw_node.apply(this, arguments);
+			if(obj) {
+				if($.inArray(obj.id, this._data.search.res) !== -1) {
+					var i, j, tmp = null;
+					for(i = 0, j = obj.childNodes.length; i < j; i++) {
+						if(obj.childNodes[i] && obj.childNodes[i].className && obj.childNodes[i].className.indexOf("jstree-anchor") !== -1) {
+							tmp = obj.childNodes[i];
+							break;
+						}
+					}
+					if(tmp) {
+						tmp.className += ' jstree-search';
+					}
+				}
+			}
+			return obj;
+		};
+	};
+
+	// helpers
+	(function ($) {
+		// from http://kiro.me/projects/fuse.html
+		$.vakata.search = function(pattern, txt, options) {
+			options = options || {};
+			options = $.extend({}, $.vakata.search.defaults, options);
+			if(options.fuzzy !== false) {
+				options.fuzzy = true;
+			}
+			pattern = options.caseSensitive ? pattern : pattern.toLowerCase();
+			var MATCH_LOCATION	= options.location,
+				MATCH_DISTANCE	= options.distance,
+				MATCH_THRESHOLD	= options.threshold,
+				patternLen = pattern.length,
+				matchmask, pattern_alphabet, match_bitapScore, search;
+			if(patternLen > 32) {
+				options.fuzzy = false;
+			}
+			if(options.fuzzy) {
+				matchmask = 1 << (patternLen - 1);
+				pattern_alphabet = (function () {
+					var mask = {},
+						i = 0;
+					for (i = 0; i < patternLen; i++) {
+						mask[pattern.charAt(i)] = 0;
+					}
+					for (i = 0; i < patternLen; i++) {
+						mask[pattern.charAt(i)] |= 1 << (patternLen - i - 1);
+					}
+					return mask;
+				}());
+				match_bitapScore = function (e, x) {
+					var accuracy = e / patternLen,
+						proximity = Math.abs(MATCH_LOCATION - x);
+					if(!MATCH_DISTANCE) {
+						return proximity ? 1.0 : accuracy;
+					}
+					return accuracy + (proximity / MATCH_DISTANCE);
+				};
+			}
+			search = function (text) {
+				text = options.caseSensitive ? text : text.toLowerCase();
+				if(pattern === text || text.indexOf(pattern) !== -1) {
+					return {
+						isMatch: true,
+						score: 0
+					};
+				}
+				if(!options.fuzzy) {
+					return {
+						isMatch: false,
+						score: 1
+					};
+				}
+				var i, j,
+					textLen = text.length,
+					scoreThreshold = MATCH_THRESHOLD,
+					bestLoc = text.indexOf(pattern, MATCH_LOCATION),
+					binMin, binMid,
+					binMax = patternLen + textLen,
+					lastRd, start, finish, rd, charMatch,
+					score = 1,
+					locations = [];
+				if (bestLoc !== -1) {
+					scoreThreshold = Math.min(match_bitapScore(0, bestLoc), scoreThreshold);
+					bestLoc = text.lastIndexOf(pattern, MATCH_LOCATION + patternLen);
+					if (bestLoc !== -1) {
+						scoreThreshold = Math.min(match_bitapScore(0, bestLoc), scoreThreshold);
+					}
+				}
+				bestLoc = -1;
+				for (i = 0; i < patternLen; i++) {
+					binMin = 0;
+					binMid = binMax;
+					while (binMin < binMid) {
+						if (match_bitapScore(i, MATCH_LOCATION + binMid) <= scoreThreshold) {
+							binMin = binMid;
+						} else {
+							binMax = binMid;
+						}
+						binMid = Math.floor((binMax - binMin) / 2 + binMin);
+					}
+					binMax = binMid;
+					start = Math.max(1, MATCH_LOCATION - binMid + 1);
+					finish = Math.min(MATCH_LOCATION + binMid, textLen) + patternLen;
+					rd = new Array(finish + 2);
+					rd[finish + 1] = (1 << i) - 1;
+					for (j = finish; j >= start; j--) {
+						charMatch = pattern_alphabet[text.charAt(j - 1)];
+						if (i === 0) {
+							rd[j] = ((rd[j + 1] << 1) | 1) & charMatch;
+						} else {
+							rd[j] = ((rd[j + 1] << 1) | 1) & charMatch | (((lastRd[j + 1] | lastRd[j]) << 1) | 1) | lastRd[j + 1];
+						}
+						if (rd[j] & matchmask) {
+							score = match_bitapScore(i, j - 1);
+							if (score <= scoreThreshold) {
+								scoreThreshold = score;
+								bestLoc = j - 1;
+								locations.push(bestLoc);
+								if (bestLoc > MATCH_LOCATION) {
+									start = Math.max(1, 2 * MATCH_LOCATION - bestLoc);
+								} else {
+									break;
+								}
+							}
+						}
+					}
+					if (match_bitapScore(i + 1, MATCH_LOCATION) > scoreThreshold) {
+						break;
+					}
+					lastRd = rd;
+				}
+				return {
+					isMatch: bestLoc >= 0,
+					score: score
+				};
+			};
+			return txt === true ? { 'search' : search } : search(txt);
+		};
+		$.vakata.search.defaults = {
+			location : 0,
+			distance : 100,
+			threshold : 0.6,
+			fuzzy : false,
+			caseSensitive : false
+		};
+	}($));
+
+	// include the search plugin by default
+	// $.jstree.defaults.plugins.push("search");
+}));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vakata-jstree-3.3.5/src/jstree.sort.js	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,74 @@
+/**
+ * ### Sort plugin
+ *
+ * Automatically sorts all siblings in the tree according to a sorting function.
+ */
+/*globals jQuery, define, exports, require */
+(function (factory) {
+	"use strict";
+	if (typeof define === 'function' && define.amd) {
+		define('jstree.sort', ['jquery','jstree'], factory);
+	}
+	else if(typeof exports === 'object') {
+		factory(require('jquery'), require('jstree'));
+	}
+	else {
+		factory(jQuery, jQuery.jstree);
+	}
+}(function ($, jstree, undefined) {
+	"use strict";
+
+	if($.jstree.plugins.sort) { return; }
+
+	/**
+	 * the settings function used to sort the nodes.
+	 * It is executed in the tree's context, accepts two nodes as arguments and should return `1` or `-1`.
+	 * @name $.jstree.defaults.sort
+	 * @plugin sort
+	 */
+	$.jstree.defaults.sort = function (a, b) {
+		//return this.get_type(a) === this.get_type(b) ? (this.get_text(a) > this.get_text(b) ? 1 : -1) : this.get_type(a) >= this.get_type(b);
+		return this.get_text(a) > this.get_text(b) ? 1 : -1;
+	};
+	$.jstree.plugins.sort = function (options, parent) {
+		this.bind = function () {
+			parent.bind.call(this);
+			this.element
+				.on("model.jstree", $.proxy(function (e, data) {
+						this.sort(data.parent, true);
+					}, this))
+				.on("rename_node.jstree create_node.jstree", $.proxy(function (e, data) {
+						this.sort(data.parent || data.node.parent, false);
+						this.redraw_node(data.parent || data.node.parent, true);
+					}, this))
+				.on("move_node.jstree copy_node.jstree", $.proxy(function (e, data) {
+						this.sort(data.parent, false);
+						this.redraw_node(data.parent, true);
+					}, this));
+		};
+		/**
+		 * used to sort a node's children
+		 * @private
+		 * @name sort(obj [, deep])
+		 * @param  {mixed} obj the node
+		 * @param {Boolean} deep if set to `true` nodes are sorted recursively.
+		 * @plugin sort
+		 * @trigger search.jstree
+		 */
+		this.sort = function (obj, deep) {
+			var i, j;
+			obj = this.get_node(obj);
+			if(obj && obj.children && obj.children.length) {
+				obj.children.sort($.proxy(this.settings.sort, this));
+				if(deep) {
+					for(i = 0, j = obj.children_d.length; i < j; i++) {
+						this.sort(obj.children_d[i], false);
+					}
+				}
+			}
+		};
+	};
+
+	// include the sort plugin by default
+	// $.jstree.defaults.plugins.push("sort");
+}));
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vakata-jstree-3.3.5/src/jstree.state.js	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,138 @@
+/**
+ * ### State plugin
+ *
+ * Saves the state of the tree (selected nodes, opened nodes) on the user's computer using available options (localStorage, cookies, etc)
+ */
+/*globals jQuery, define, exports, require */
+(function (factory) {
+	"use strict";
+	if (typeof define === 'function' && define.amd) {
+		define('jstree.state', ['jquery','jstree'], factory);
+	}
+	else if(typeof exports === 'object') {
+		factory(require('jquery'), require('jstree'));
+	}
+	else {
+		factory(jQuery, jQuery.jstree);
+	}
+}(function ($, jstree, undefined) {
+	"use strict";
+
+	if($.jstree.plugins.state) { return; }
+
+	var to = false;
+	/**
+	 * stores all defaults for the state plugin
+	 * @name $.jstree.defaults.state
+	 * @plugin state
+	 */
+	$.jstree.defaults.state = {
+		/**
+		 * A string for the key to use when saving the current tree (change if using multiple trees in your project). Defaults to `jstree`.
+		 * @name $.jstree.defaults.state.key
+		 * @plugin state
+		 */
+		key		: 'jstree',
+		/**
+		 * A space separated list of events that trigger a state save. Defaults to `changed.jstree open_node.jstree close_node.jstree`.
+		 * @name $.jstree.defaults.state.events
+		 * @plugin state
+		 */
+		events	: 'changed.jstree open_node.jstree close_node.jstree check_node.jstree uncheck_node.jstree',
+		/**
+		 * Time in milliseconds after which the state will expire. Defaults to 'false' meaning - no expire.
+		 * @name $.jstree.defaults.state.ttl
+		 * @plugin state
+		 */
+		ttl		: false,
+		/**
+		 * A function that will be executed prior to restoring state with one argument - the state object. Can be used to clear unwanted parts of the state.
+		 * @name $.jstree.defaults.state.filter
+		 * @plugin state
+		 */
+		filter	: false,
+		/**
+		 * Should loaded nodes be restored (setting this to true means that it is possible that the whole tree will be loaded for some users - use with caution). Defaults to `false`
+		 * @name $.jstree.defaults.state.preserve_loaded
+		 * @plugin state
+		 */
+		preserve_loaded : false
+	};
+	$.jstree.plugins.state = function (options, parent) {
+		this.bind = function () {
+			parent.bind.call(this);
+			var bind = $.proxy(function () {
+				this.element.on(this.settings.state.events, $.proxy(function () {
+					if(to) { clearTimeout(to); }
+					to = setTimeout($.proxy(function () { this.save_state(); }, this), 100);
+				}, this));
+				/**
+				 * triggered when the state plugin is finished restoring the state (and immediately after ready if there is no state to restore).
+				 * @event
+				 * @name state_ready.jstree
+				 * @plugin state
+				 */
+				this.trigger('state_ready');
+			}, this);
+			this.element
+				.on("ready.jstree", $.proxy(function (e, data) {
+						this.element.one("restore_state.jstree", bind);
+						if(!this.restore_state()) { bind(); }
+					}, this));
+		};
+		/**
+		 * save the state
+		 * @name save_state()
+		 * @plugin state
+		 */
+		this.save_state = function () {
+			var tm = this.get_state();
+			if (!this.settings.state.preserve_loaded) {
+				delete tm.core.loaded;
+			}
+			var st = { 'state' : tm, 'ttl' : this.settings.state.ttl, 'sec' : +(new Date()) };
+			$.vakata.storage.set(this.settings.state.key, JSON.stringify(st));
+		};
+		/**
+		 * restore the state from the user's computer
+		 * @name restore_state()
+		 * @plugin state
+		 */
+		this.restore_state = function () {
+			var k = $.vakata.storage.get(this.settings.state.key);
+			if(!!k) { try { k = JSON.parse(k); } catch(ex) { return false; } }
+			if(!!k && k.ttl && k.sec && +(new Date()) - k.sec > k.ttl) { return false; }
+			if(!!k && k.state) { k = k.state; }
+			if(!!k && $.isFunction(this.settings.state.filter)) { k = this.settings.state.filter.call(this, k); }
+			if(!!k) {
+				if (!this.settings.state.preserve_loaded) {
+					delete k.core.loaded;
+				}
+				this.element.one("set_state.jstree", function (e, data) { data.instance.trigger('restore_state', { 'state' : $.extend(true, {}, k) }); });
+				this.set_state(k);
+				return true;
+			}
+			return false;
+		};
+		/**
+		 * clear the state on the user's computer
+		 * @name clear_state()
+		 * @plugin state
+		 */
+		this.clear_state = function () {
+			return $.vakata.storage.del(this.settings.state.key);
+		};
+	};
+
+	(function ($, undefined) {
+		$.vakata.storage = {
+			// simply specifying the functions in FF throws an error
+			set : function (key, val) { return window.localStorage.setItem(key, val); },
+			get : function (key) { return window.localStorage.getItem(key); },
+			del : function (key) { return window.localStorage.removeItem(key); }
+		};
+	}($));
+
+	// include the state plugin by default
+	// $.jstree.defaults.plugins.push("state");
+}));
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vakata-jstree-3.3.5/src/jstree.types.js	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,372 @@
+/**
+ * ### Types plugin
+ *
+ * Makes it possible to add predefined types for groups of nodes, which make it possible to easily control nesting rules and icon for each group.
+ */
+/*globals jQuery, define, exports, require */
+(function (factory) {
+	"use strict";
+	if (typeof define === 'function' && define.amd) {
+		define('jstree.types', ['jquery','jstree'], factory);
+	}
+	else if(typeof exports === 'object') {
+		factory(require('jquery'), require('jstree'));
+	}
+	else {
+		factory(jQuery, jQuery.jstree);
+	}
+}(function ($, jstree, undefined) {
+	"use strict";
+
+	if($.jstree.plugins.types) { return; }
+
+	/**
+	 * An object storing all types as key value pairs, where the key is the type name and the value is an object that could contain following keys (all optional).
+	 *
+	 * * `max_children` the maximum number of immediate children this node type can have. Do not specify or set to `-1` for unlimited.
+	 * * `max_depth` the maximum number of nesting this node type can have. A value of `1` would mean that the node can have children, but no grandchildren. Do not specify or set to `-1` for unlimited.
+	 * * `valid_children` an array of node type strings, that nodes of this type can have as children. Do not specify or set to `-1` for no limits.
+	 * * `icon` a string - can be a path to an icon or a className, if using an image that is in the current directory use a `./` prefix, otherwise it will be detected as a class. Omit to use the default icon from your theme.
+	 * * `li_attr` an object of values which will be used to add HTML attributes on the resulting LI DOM node (merged with the node's own data)
+	 * * `a_attr` an object of values which will be used to add HTML attributes on the resulting A DOM node (merged with the node's own data)
+	 *
+	 * There are two predefined types:
+	 *
+	 * * `#` represents the root of the tree, for example `max_children` would control the maximum number of root nodes.
+	 * * `default` represents the default node - any settings here will be applied to all nodes that do not have a type specified.
+	 *
+	 * @name $.jstree.defaults.types
+	 * @plugin types
+	 */
+	$.jstree.defaults.types = {
+		'default' : {}
+	};
+	$.jstree.defaults.types[$.jstree.root] = {};
+
+	$.jstree.plugins.types = function (options, parent) {
+		this.init = function (el, options) {
+			var i, j;
+			if(options && options.types && options.types['default']) {
+				for(i in options.types) {
+					if(i !== "default" && i !== $.jstree.root && options.types.hasOwnProperty(i)) {
+						for(j in options.types['default']) {
+							if(options.types['default'].hasOwnProperty(j) && options.types[i][j] === undefined) {
+								options.types[i][j] = options.types['default'][j];
+							}
+						}
+					}
+				}
+			}
+			parent.init.call(this, el, options);
+			this._model.data[$.jstree.root].type = $.jstree.root;
+		};
+		this.refresh = function (skip_loading, forget_state) {
+			parent.refresh.call(this, skip_loading, forget_state);
+			this._model.data[$.jstree.root].type = $.jstree.root;
+		};
+		this.bind = function () {
+			this.element
+				.on('model.jstree', $.proxy(function (e, data) {
+						var m = this._model.data,
+							dpc = data.nodes,
+							t = this.settings.types,
+							i, j, c = 'default', k;
+						for(i = 0, j = dpc.length; i < j; i++) {
+							c = 'default';
+							if(m[dpc[i]].original && m[dpc[i]].original.type && t[m[dpc[i]].original.type]) {
+								c = m[dpc[i]].original.type;
+							}
+							if(m[dpc[i]].data && m[dpc[i]].data.jstree && m[dpc[i]].data.jstree.type && t[m[dpc[i]].data.jstree.type]) {
+								c = m[dpc[i]].data.jstree.type;
+							}
+							m[dpc[i]].type = c;
+							if(m[dpc[i]].icon === true && t[c].icon !== undefined) {
+								m[dpc[i]].icon = t[c].icon;
+							}
+							if(t[c].li_attr !== undefined && typeof t[c].li_attr === 'object') {
+								for (k in t[c].li_attr) {
+									if (t[c].li_attr.hasOwnProperty(k)) {
+										if (k === 'id') {
+											continue;
+										}
+										else if (m[dpc[i]].li_attr[k] === undefined) {
+											m[dpc[i]].li_attr[k] = t[c].li_attr[k];
+										}
+										else if (k === 'class') {
+											m[dpc[i]].li_attr['class'] = t[c].li_attr['class'] + ' ' + m[dpc[i]].li_attr['class'];
+										}
+									}
+								}
+							}
+							if(t[c].a_attr !== undefined && typeof t[c].a_attr === 'object') {
+								for (k in t[c].a_attr) {
+									if (t[c].a_attr.hasOwnProperty(k)) {
+										if (k === 'id') {
+											continue;
+										}
+										else if (m[dpc[i]].a_attr[k] === undefined) {
+											m[dpc[i]].a_attr[k] = t[c].a_attr[k];
+										}
+										else if (k === 'href' && m[dpc[i]].a_attr[k] === '#') {
+											m[dpc[i]].a_attr['href'] = t[c].a_attr['href'];
+										}
+										else if (k === 'class') {
+											m[dpc[i]].a_attr['class'] = t[c].a_attr['class'] + ' ' + m[dpc[i]].a_attr['class'];
+										}
+									}
+								}
+							}
+						}
+						m[$.jstree.root].type = $.jstree.root;
+					}, this));
+			parent.bind.call(this);
+		};
+		this.get_json = function (obj, options, flat) {
+			var i, j,
+				m = this._model.data,
+				opt = options ? $.extend(true, {}, options, {no_id:false}) : {},
+				tmp = parent.get_json.call(this, obj, opt, flat);
+			if(tmp === false) { return false; }
+			if($.isArray(tmp)) {
+				for(i = 0, j = tmp.length; i < j; i++) {
+					tmp[i].type = tmp[i].id && m[tmp[i].id] && m[tmp[i].id].type ? m[tmp[i].id].type : "default";
+					if(options && options.no_id) {
+						delete tmp[i].id;
+						if(tmp[i].li_attr && tmp[i].li_attr.id) {
+							delete tmp[i].li_attr.id;
+						}
+						if(tmp[i].a_attr && tmp[i].a_attr.id) {
+							delete tmp[i].a_attr.id;
+						}
+					}
+				}
+			}
+			else {
+				tmp.type = tmp.id && m[tmp.id] && m[tmp.id].type ? m[tmp.id].type : "default";
+				if(options && options.no_id) {
+					tmp = this._delete_ids(tmp);
+				}
+			}
+			return tmp;
+		};
+		this._delete_ids = function (tmp) {
+			if($.isArray(tmp)) {
+				for(var i = 0, j = tmp.length; i < j; i++) {
+					tmp[i] = this._delete_ids(tmp[i]);
+				}
+				return tmp;
+			}
+			delete tmp.id;
+			if(tmp.li_attr && tmp.li_attr.id) {
+				delete tmp.li_attr.id;
+			}
+			if(tmp.a_attr && tmp.a_attr.id) {
+				delete tmp.a_attr.id;
+			}
+			if(tmp.children && $.isArray(tmp.children)) {
+				tmp.children = this._delete_ids(tmp.children);
+			}
+			return tmp;
+		};
+		this.check = function (chk, obj, par, pos, more) {
+			if(parent.check.call(this, chk, obj, par, pos, more) === false) { return false; }
+			obj = obj && obj.id ? obj : this.get_node(obj);
+			par = par && par.id ? par : this.get_node(par);
+			var m = obj && obj.id ? (more && more.origin ? more.origin : $.jstree.reference(obj.id)) : null, tmp, d, i, j;
+			m = m && m._model && m._model.data ? m._model.data : null;
+			switch(chk) {
+				case "create_node":
+				case "move_node":
+				case "copy_node":
+					if(chk !== 'move_node' || $.inArray(obj.id, par.children) === -1) {
+						tmp = this.get_rules(par);
+						if(tmp.max_children !== undefined && tmp.max_children !== -1 && tmp.max_children === par.children.length) {
+							this._data.core.last_error = { 'error' : 'check', 'plugin' : 'types', 'id' : 'types_01', 'reason' : 'max_children prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
+							return false;
+						}
+						if(tmp.valid_children !== undefined && tmp.valid_children !== -1 && $.inArray((obj.type || 'default'), tmp.valid_children) === -1) {
+							this._data.core.last_error = { 'error' : 'check', 'plugin' : 'types', 'id' : 'types_02', 'reason' : 'valid_children prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
+							return false;
+						}
+						if(m && obj.children_d && obj.parents) {
+							d = 0;
+							for(i = 0, j = obj.children_d.length; i < j; i++) {
+								d = Math.max(d, m[obj.children_d[i]].parents.length);
+							}
+							d = d - obj.parents.length + 1;
+						}
+						if(d <= 0 || d === undefined) { d = 1; }
+						do {
+							if(tmp.max_depth !== undefined && tmp.max_depth !== -1 && tmp.max_depth < d) {
+								this._data.core.last_error = { 'error' : 'check', 'plugin' : 'types', 'id' : 'types_03', 'reason' : 'max_depth prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
+								return false;
+							}
+							par = this.get_node(par.parent);
+							tmp = this.get_rules(par);
+							d++;
+						} while(par);
+					}
+					break;
+			}
+			return true;
+		};
+		/**
+		 * used to retrieve the type settings object for a node
+		 * @name get_rules(obj)
+		 * @param {mixed} obj the node to find the rules for
+		 * @return {Object}
+		 * @plugin types
+		 */
+		this.get_rules = function (obj) {
+			obj = this.get_node(obj);
+			if(!obj) { return false; }
+			var tmp = this.get_type(obj, true);
+			if(tmp.max_depth === undefined) { tmp.max_depth = -1; }
+			if(tmp.max_children === undefined) { tmp.max_children = -1; }
+			if(tmp.valid_children === undefined) { tmp.valid_children = -1; }
+			return tmp;
+		};
+		/**
+		 * used to retrieve the type string or settings object for a node
+		 * @name get_type(obj [, rules])
+		 * @param {mixed} obj the node to find the rules for
+		 * @param {Boolean} rules if set to `true` instead of a string the settings object will be returned
+		 * @return {String|Object}
+		 * @plugin types
+		 */
+		this.get_type = function (obj, rules) {
+			obj = this.get_node(obj);
+			return (!obj) ? false : ( rules ? $.extend({ 'type' : obj.type }, this.settings.types[obj.type]) : obj.type);
+		};
+		/**
+		 * used to change a node's type
+		 * @name set_type(obj, type)
+		 * @param {mixed} obj the node to change
+		 * @param {String} type the new type
+		 * @plugin types
+		 */
+		this.set_type = function (obj, type) {
+			var m = this._model.data, t, t1, t2, old_type, old_icon, k, d, a;
+			if($.isArray(obj)) {
+				obj = obj.slice();
+				for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+					this.set_type(obj[t1], type);
+				}
+				return true;
+			}
+			t = this.settings.types;
+			obj = this.get_node(obj);
+			if(!t[type] || !obj) { return false; }
+			d = this.get_node(obj, true);
+			if (d && d.length) {
+				a = d.children('.jstree-anchor');
+			}
+			old_type = obj.type;
+			old_icon = this.get_icon(obj);
+			obj.type = type;
+			if(old_icon === true || !t[old_type] || (t[old_type].icon !== undefined && old_icon === t[old_type].icon)) {
+				this.set_icon(obj, t[type].icon !== undefined ? t[type].icon : true);
+			}
+
+			// remove old type props
+			if(t[old_type] && t[old_type].li_attr !== undefined && typeof t[old_type].li_attr === 'object') {
+				for (k in t[old_type].li_attr) {
+					if (t[old_type].li_attr.hasOwnProperty(k)) {
+						if (k === 'id') {
+							continue;
+						}
+						else if (k === 'class') {
+							m[obj.id].li_attr['class'] = (m[obj.id].li_attr['class'] || '').replace(t[old_type].li_attr[k], '');
+							if (d) { d.removeClass(t[old_type].li_attr[k]); }
+						}
+						else if (m[obj.id].li_attr[k] === t[old_type].li_attr[k]) {
+							m[obj.id].li_attr[k] = null;
+							if (d) { d.removeAttr(k); }
+						}
+					}
+				}
+			}
+			if(t[old_type] && t[old_type].a_attr !== undefined && typeof t[old_type].a_attr === 'object') {
+				for (k in t[old_type].a_attr) {
+					if (t[old_type].a_attr.hasOwnProperty(k)) {
+						if (k === 'id') {
+							continue;
+						}
+						else if (k === 'class') {
+							m[obj.id].a_attr['class'] = (m[obj.id].a_attr['class'] || '').replace(t[old_type].a_attr[k], '');
+							if (a) { a.removeClass(t[old_type].a_attr[k]); }
+						}
+						else if (m[obj.id].a_attr[k] === t[old_type].a_attr[k]) {
+							if (k === 'href') {
+								m[obj.id].a_attr[k] = '#';
+								if (a) { a.attr('href', '#'); }
+							}
+							else {
+								delete m[obj.id].a_attr[k];
+								if (a) { a.removeAttr(k); }
+							}
+						}
+					}
+				}
+			}
+
+			// add new props
+			if(t[type].li_attr !== undefined && typeof t[type].li_attr === 'object') {
+				for (k in t[type].li_attr) {
+					if (t[type].li_attr.hasOwnProperty(k)) {
+						if (k === 'id') {
+							continue;
+						}
+						else if (m[obj.id].li_attr[k] === undefined) {
+							m[obj.id].li_attr[k] = t[type].li_attr[k];
+							if (d) {
+								if (k === 'class') {
+									d.addClass(t[type].li_attr[k]);
+								}
+								else {
+									d.attr(k, t[type].li_attr[k]);
+								}
+							}
+						}
+						else if (k === 'class') {
+							m[obj.id].li_attr['class'] = t[type].li_attr[k] + ' ' + m[obj.id].li_attr['class'];
+							if (d) { d.addClass(t[type].li_attr[k]); }
+						}
+					}
+				}
+			}
+			if(t[type].a_attr !== undefined && typeof t[type].a_attr === 'object') {
+				for (k in t[type].a_attr) {
+					if (t[type].a_attr.hasOwnProperty(k)) {
+						if (k === 'id') {
+							continue;
+						}
+						else if (m[obj.id].a_attr[k] === undefined) {
+							m[obj.id].a_attr[k] = t[type].a_attr[k];
+							if (a) {
+								if (k === 'class') {
+									a.addClass(t[type].a_attr[k]);
+								}
+								else {
+									a.attr(k, t[type].a_attr[k]);
+								}
+							}
+						}
+						else if (k === 'href' && m[obj.id].a_attr[k] === '#') {
+							m[obj.id].a_attr['href'] = t[type].a_attr['href'];
+							if (a) { a.attr('href', t[type].a_attr['href']); }
+						}
+						else if (k === 'class') {
+							m[obj.id].a_attr['class'] = t[type].a_attr['class'] + ' ' + m[obj.id].a_attr['class'];
+							if (a) { a.addClass(t[type].a_attr[k]); }
+						}
+					}
+				}
+			}
+
+			return true;
+		};
+	};
+	// include the types plugin by default
+	// $.jstree.defaults.plugins.push("types");
+}));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vakata-jstree-3.3.5/src/jstree.unique.js	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,164 @@
+/**
+ * ### Unique plugin
+ *
+ * Enforces that no nodes with the same name can coexist as siblings.
+ */
+/*globals jQuery, define, exports, require */
+(function (factory) {
+	"use strict";
+	if (typeof define === 'function' && define.amd) {
+		define('jstree.unique', ['jquery','jstree'], factory);
+	}
+	else if(typeof exports === 'object') {
+		factory(require('jquery'), require('jstree'));
+	}
+	else {
+		factory(jQuery, jQuery.jstree);
+	}
+}(function ($, jstree, undefined) {
+	"use strict";
+
+	if($.jstree.plugins.unique) { return; }
+
+	/**
+	 * stores all defaults for the unique plugin
+	 * @name $.jstree.defaults.unique
+	 * @plugin unique
+	 */
+	$.jstree.defaults.unique = {
+		/**
+		 * Indicates if the comparison should be case sensitive. Default is `false`.
+		 * @name $.jstree.defaults.unique.case_sensitive
+		 * @plugin unique
+		 */
+		case_sensitive : false,
+		/**
+		 * Indicates if white space should be trimmed before the comparison. Default is `false`.
+		 * @name $.jstree.defaults.unique.trim_whitespace
+		 * @plugin unique
+		 */
+		trim_whitespace : false,
+		/**
+		 * A callback executed in the instance's scope when a new node is created and the name is already taken, the two arguments are the conflicting name and the counter. The default will produce results like `New node (2)`.
+		 * @name $.jstree.defaults.unique.duplicate
+		 * @plugin unique
+		 */
+		duplicate : function (name, counter) {
+			return name + ' (' + counter + ')';
+		}
+	};
+
+	$.jstree.plugins.unique = function (options, parent) {
+		this.check = function (chk, obj, par, pos, more) {
+			if(parent.check.call(this, chk, obj, par, pos, more) === false) { return false; }
+			obj = obj && obj.id ? obj : this.get_node(obj);
+			par = par && par.id ? par : this.get_node(par);
+			if(!par || !par.children) { return true; }
+			var n = chk === "rename_node" ? pos : obj.text,
+				c = [],
+				s = this.settings.unique.case_sensitive,
+				w = this.settings.unique.trim_whitespace,
+				m = this._model.data, i, j, t;
+			for(i = 0, j = par.children.length; i < j; i++) {
+				t = m[par.children[i]].text;
+				if (!s) {
+					t = t.toLowerCase();
+				}
+				if (w) {
+					t = t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
+				}
+				c.push(t);
+			}
+			if(!s) { n = n.toLowerCase(); }
+			if (w) { n = n.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); }
+			switch(chk) {
+				case "delete_node":
+					return true;
+				case "rename_node":
+					t = obj.text || '';
+					if (!s) {
+						t = t.toLowerCase();
+					}
+					if (w) {
+						t = t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
+					}
+					i = ($.inArray(n, c) === -1 || (obj.text && t === n));
+					if(!i) {
+						this._data.core.last_error = { 'error' : 'check', 'plugin' : 'unique', 'id' : 'unique_01', 'reason' : 'Child with name ' + n + ' already exists. Preventing: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
+					}
+					return i;
+				case "create_node":
+					i = ($.inArray(n, c) === -1);
+					if(!i) {
+						this._data.core.last_error = { 'error' : 'check', 'plugin' : 'unique', 'id' : 'unique_04', 'reason' : 'Child with name ' + n + ' already exists. Preventing: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
+					}
+					return i;
+				case "copy_node":
+					i = ($.inArray(n, c) === -1);
+					if(!i) {
+						this._data.core.last_error = { 'error' : 'check', 'plugin' : 'unique', 'id' : 'unique_02', 'reason' : 'Child with name ' + n + ' already exists. Preventing: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
+					}
+					return i;
+				case "move_node":
+					i = ( (obj.parent === par.id && (!more || !more.is_multi)) || $.inArray(n, c) === -1);
+					if(!i) {
+						this._data.core.last_error = { 'error' : 'check', 'plugin' : 'unique', 'id' : 'unique_03', 'reason' : 'Child with name ' + n + ' already exists. Preventing: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
+					}
+					return i;
+			}
+			return true;
+		};
+		this.create_node = function (par, node, pos, callback, is_loaded) {
+			if(!node || node.text === undefined) {
+				if(par === null) {
+					par = $.jstree.root;
+				}
+				par = this.get_node(par);
+				if(!par) {
+					return parent.create_node.call(this, par, node, pos, callback, is_loaded);
+				}
+				pos = pos === undefined ? "last" : pos;
+				if(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) {
+					return parent.create_node.call(this, par, node, pos, callback, is_loaded);
+				}
+				if(!node) { node = {}; }
+				var tmp, n, dpc, i, j, m = this._model.data, s = this.settings.unique.case_sensitive, w = this.settings.unique.trim_whitespace, cb = this.settings.unique.duplicate, t;
+				n = tmp = this.get_string('New node');
+				dpc = [];
+				for(i = 0, j = par.children.length; i < j; i++) {
+					t = m[par.children[i]].text;
+					if (!s) {
+						t = t.toLowerCase();
+					}
+					if (w) {
+						t = t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
+					}
+					dpc.push(t);
+				}
+				i = 1;
+				t = n;
+				if (!s) {
+					t = t.toLowerCase();
+				}
+				if (w) {
+					t = t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
+				}
+				while($.inArray(t, dpc) !== -1) {
+					n = cb.call(this, tmp, (++i)).toString();
+					t = n;
+					if (!s) {
+						t = t.toLowerCase();
+					}
+					if (w) {
+						t = t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
+					}
+				}
+				node.text = n;
+			}
+			return parent.create_node.call(this, par, node, pos, callback, is_loaded);
+		};
+	};
+
+	// include the unique plugin by default
+	// $.jstree.defaults.plugins.push("unique");
+}));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vakata-jstree-3.3.5/src/jstree.wholerow.js	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,122 @@
+/**
+ * ### Wholerow plugin
+ *
+ * Makes each node appear block level. Making selection easier. May cause slow down for large trees in old browsers.
+ */
+/*globals jQuery, define, exports, require */
+(function (factory) {
+	"use strict";
+	if (typeof define === 'function' && define.amd) {
+		define('jstree.wholerow', ['jquery','jstree'], factory);
+	}
+	else if(typeof exports === 'object') {
+		factory(require('jquery'), require('jstree'));
+	}
+	else {
+		factory(jQuery, jQuery.jstree);
+	}
+}(function ($, jstree, undefined) {
+	"use strict";
+
+	if($.jstree.plugins.wholerow) { return; }
+
+	var div = document.createElement('DIV');
+	div.setAttribute('unselectable','on');
+	div.setAttribute('role','presentation');
+	div.className = 'jstree-wholerow';
+	div.innerHTML = '&#160;';
+	$.jstree.plugins.wholerow = function (options, parent) {
+		this.bind = function () {
+			parent.bind.call(this);
+
+			this.element
+				.on('ready.jstree set_state.jstree', $.proxy(function () {
+						this.hide_dots();
+					}, this))
+				.on("init.jstree loading.jstree ready.jstree", $.proxy(function () {
+						//div.style.height = this._data.core.li_height + 'px';
+						this.get_container_ul().addClass('jstree-wholerow-ul');
+					}, this))
+				.on("deselect_all.jstree", $.proxy(function (e, data) {
+						this.element.find('.jstree-wholerow-clicked').removeClass('jstree-wholerow-clicked');
+					}, this))
+				.on("changed.jstree", $.proxy(function (e, data) {
+						this.element.find('.jstree-wholerow-clicked').removeClass('jstree-wholerow-clicked');
+						var tmp = false, i, j;
+						for(i = 0, j = data.selected.length; i < j; i++) {
+							tmp = this.get_node(data.selected[i], true);
+							if(tmp && tmp.length) {
+								tmp.children('.jstree-wholerow').addClass('jstree-wholerow-clicked');
+							}
+						}
+					}, this))
+				.on("open_node.jstree", $.proxy(function (e, data) {
+						this.get_node(data.node, true).find('.jstree-clicked').parent().children('.jstree-wholerow').addClass('jstree-wholerow-clicked');
+					}, this))
+				.on("hover_node.jstree dehover_node.jstree", $.proxy(function (e, data) {
+						if(e.type === "hover_node" && this.is_disabled(data.node)) { return; }
+						this.get_node(data.node, true).children('.jstree-wholerow')[e.type === "hover_node"?"addClass":"removeClass"]('jstree-wholerow-hovered');
+					}, this))
+				.on("contextmenu.jstree", ".jstree-wholerow", $.proxy(function (e) {
+						if (this._data.contextmenu) {
+							e.preventDefault();
+							var tmp = $.Event('contextmenu', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey, pageX : e.pageX, pageY : e.pageY });
+							$(e.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(tmp);
+						}
+					}, this))
+				/*!
+				.on("mousedown.jstree touchstart.jstree", ".jstree-wholerow", function (e) {
+						if(e.target === e.currentTarget) {
+							var a = $(e.currentTarget).closest(".jstree-node").children(".jstree-anchor");
+							e.target = a[0];
+							a.trigger(e);
+						}
+					})
+				*/
+				.on("click.jstree", ".jstree-wholerow", function (e) {
+						e.stopImmediatePropagation();
+						var tmp = $.Event('click', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey });
+						$(e.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(tmp).focus();
+					})
+				.on("dblclick.jstree", ".jstree-wholerow", function (e) {
+						e.stopImmediatePropagation();
+						var tmp = $.Event('dblclick', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey });
+						$(e.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(tmp).focus();
+					})
+				.on("click.jstree", ".jstree-leaf > .jstree-ocl", $.proxy(function (e) {
+						e.stopImmediatePropagation();
+						var tmp = $.Event('click', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey });
+						$(e.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(tmp).focus();
+					}, this))
+				.on("mouseover.jstree", ".jstree-wholerow, .jstree-icon", $.proxy(function (e) {
+						e.stopImmediatePropagation();
+						if(!this.is_disabled(e.currentTarget)) {
+							this.hover_node(e.currentTarget);
+						}
+						return false;
+					}, this))
+				.on("mouseleave.jstree", ".jstree-node", $.proxy(function (e) {
+						this.dehover_node(e.currentTarget);
+					}, this));
+		};
+		this.teardown = function () {
+			if(this.settings.wholerow) {
+				this.element.find(".jstree-wholerow").remove();
+			}
+			parent.teardown.call(this);
+		};
+		this.redraw_node = function(obj, deep, callback, force_render) {
+			obj = parent.redraw_node.apply(this, arguments);
+			if(obj) {
+				var tmp = div.cloneNode(true);
+				//tmp.style.height = this._data.core.li_height + 'px';
+				if($.inArray(obj.id, this._data.core.selected) !== -1) { tmp.className += ' jstree-wholerow-clicked'; }
+				if(this._data.core.focused && this._data.core.focused === obj.id) { tmp.className += ' jstree-wholerow-hovered'; }
+				obj.insertBefore(tmp, obj.childNodes[0]);
+			}
+			return obj;
+		};
+	};
+	// include the wholerow plugin by default
+	// $.jstree.defaults.plugins.push("wholerow");
+}));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vakata-jstree-3.3.5/src/misc.js	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,629 @@
+/* global jQuery */
+
+// disable all events
+(function ($, undefined) {
+	"use strict";
+	$.jstree.plugins.trigger = function (options, parent) {
+		this.init = function (el, options) {
+			// do not forget parent
+			parent.init.call(this, el, options);
+			this._data.trigger.disabled = false;
+		};
+		this.trigger = function (ev, data) {
+			if(!this._data.trigger.disabled) {
+				parent.trigger.call(this, ev, data);
+			}
+		};
+		this.disable_events = function () { this._data.trigger.disabled = true; };
+		this.enable_events = function () { this._data.trigger.disabled = false; };
+	};
+})(jQuery);
+
+// mapping
+(function ($, undefined) {
+	"use strict";
+	// use this if you need any options
+	$.jstree.defaults.mapper = {
+		option_key : "option_value"
+	};
+	$.jstree.plugins.mapper = function () {
+		this._parse_model_from_json = function (d, p, ps) {
+			// d is the node from the server, it will be called recursively for children,
+			// so you do not need to process at once
+			/* // for example
+			for(var i in d) {
+				if(d.hasOwnProperty(i)) {
+					d[i.toLowerCase()] = d[i];
+				}
+			}
+			*/
+			return parent._parse_model_from_json.call(this, d, p, ps);
+		};
+	};
+})(jQuery);
+
+// no hover
+(function ($, undefined) {
+	"use strict";
+	$.jstree.plugins.nohover = function () {
+		this.hover_node = $.noop;
+	};
+})(jQuery);
+
+// force multiple select
+(function ($, undefined) {
+	"use strict";
+	$.jstree.defaults.multiselect = {};
+	$.jstree.plugins.multiselect = function (options, parent) {
+		this.activate_node = function (obj, e) {
+			e.ctrlKey = true;
+			parent.activate_node.call(this, obj, e);
+		};
+	};
+})(jQuery);
+
+// real checkboxes
+(function ($, undefined) {
+	"use strict";
+
+	var inp = document.createElement("INPUT");
+	inp.type = "checkbox";
+	inp.className = "jstree-checkbox jstree-realcheckbox";
+
+	$.jstree.defaults.realcheckboxes = {};
+
+	$.jstree.plugins.realcheckboxes = function (options, parent) {
+		this.bind = function () {
+			parent.bind.call(this);
+			this._data.realcheckboxes.uto = false;
+			this.element
+				.on('changed.jstree uncheck_node.jstree check_node.jstree uncheck_all.jstree check_all.jstree move_node.jstree copy_node.jstree redraw.jstree open_node.jstree ready.jstree loaded.jstree', $.proxy(function () {
+						// only if undetermined is in setting
+						if(this._data.realcheckboxes.uto) { clearTimeout(this._data.realcheckboxes.uto); }
+						this._data.realcheckboxes.uto = setTimeout($.proxy(this._realcheckboxes, this), 50);
+					}, this));
+		};
+		this.redraw_node = function(obj, deep, callback, force_draw) {
+			obj = parent.redraw_node.call(this, obj, deep, callback, force_draw);
+			if(obj) {
+				var i, j, tmp = null, chk = inp.cloneNode(true);
+				for(i = 0, j = obj.childNodes.length; i < j; i++) {
+					if(obj.childNodes[i] && obj.childNodes[i].className && obj.childNodes[i].className.indexOf("jstree-anchor") !== -1) {
+						tmp = obj.childNodes[i];
+						break;
+					}
+				}
+				if(tmp) {
+					for(i = 0, j = tmp.childNodes.length; i < j; i++) {
+						if(tmp.childNodes[i] && tmp.childNodes[i].className && tmp.childNodes[i].className.indexOf("jstree-checkbox") !== -1) {
+							tmp = tmp.childNodes[i];
+							break;
+						}
+					}
+				}
+				if(tmp && tmp.tagName === "I") {
+					tmp.style.backgroundColor = "transparent";
+					tmp.style.backgroundImage = "none";
+					tmp.appendChild(chk);
+				}
+			}
+			return obj;
+		};
+		this._realcheckboxes = function () {
+			var ts = this.settings.checkbox.tie_selection;
+			console.log(ts);
+			$('.jstree-realcheckbox').each(function () {
+				this.checked = (!ts && this.parentNode.parentNode.className.indexOf("jstree-checked") !== -1) || (ts && this.parentNode.parentNode.className.indexOf('jstree-clicked') !== -1);
+				this.indeterminate = this.parentNode.className.indexOf("jstree-undetermined") !== -1;
+				this.disabled = this.parentNode.parentNode.className.indexOf("disabled") !== -1;
+			});
+		};
+	};
+})(jQuery);
+
+// no state
+(function ($, undefined) {
+	"use strict";
+	$.jstree.plugins.nostate = function () {
+		this.set_state = function (state, callback) {
+			if(callback) { callback.call(this); }
+			this.trigger('set_state');
+		};
+	};
+})(jQuery);
+
+// no selected in state
+(function ($, undefined) {
+	"use strict";
+	$.jstree.plugins.noselectedstate = function (options, parent) {
+		this.get_state = function () {
+			var state = parent.get_state.call(this);
+			delete state.core.selected;
+			return state;
+		};
+	};
+})(jQuery);
+
+// additional icon on node (outside of anchor)
+(function ($, undefined) {
+	"use strict";
+	var img = document.createElement('IMG');
+	//img.src = "http://www.dpcd.vic.gov.au/__data/assets/image/0004/30667/help.gif";
+	img.className = "jstree-questionmark";
+
+	$.jstree.defaults.questionmark = $.noop;
+	$.jstree.plugins.questionmark = function (options, parent) {
+		this.bind = function () {
+			parent.bind.call(this);
+			this.element
+				.on("click.jstree", ".jstree-questionmark", $.proxy(function (e) {
+						e.stopImmediatePropagation();
+						this.settings.questionmark.call(this, this.get_node(e.target));
+					}, this));
+		};
+		this.teardown = function () {
+			if(this.settings.questionmark) {
+				this.element.find(".jstree-questionmark").remove();
+			}
+			parent.teardown.call(this);
+		};
+		this.redraw_node = function(obj, deep, callback, force_draw) {
+			obj = parent.redraw_node.call(this, obj, deep, callback, force_draw);
+			if(obj) {
+				var tmp = img.cloneNode(true);
+				obj.insertBefore(tmp, obj.childNodes[2]);
+			}
+			return obj;
+		};
+	};
+})(jQuery);
+
+// auto numbering
+(function ($, undefined) {
+	"use strict";
+	var span = document.createElement('SPAN');
+	span.className = "jstree-numbering";
+
+	$.jstree.defaults.numbering = {};
+	$.jstree.plugins.numbering = function (options, parent) {
+		this.teardown = function () {
+			if(this.settings.questionmark) {
+				this.element.find(".jstree-numbering").remove();
+			}
+			parent.teardown.call(this);
+		};
+		this.get_number = function (obj) {
+			obj = this.get_node(obj);
+			var ind = $.inArray(obj.id, this.get_node(obj.parent).children) + 1;
+			return obj.parent === '#' ? ind : this.get_number(obj.parent) + '.' + ind;
+		};
+		this.redraw_node = function(obj, deep, callback, force_draw) {
+			var i, j, tmp = null, elm = null, org = this.get_number(obj);
+			obj = parent.redraw_node.call(this, obj, deep, callback, force_draw);
+			if(obj) {
+				for(i = 0, j = obj.childNodes.length; i < j; i++) {
+					if(obj.childNodes[i] && obj.childNodes[i].className && obj.childNodes[i].className.indexOf("jstree-anchor") !== -1) {
+						tmp = obj.childNodes[i];
+						break;
+					}
+				}
+				if(tmp) {
+					elm = span.cloneNode(true);
+					elm.innerHTML = org + '. ';
+					tmp.insertBefore(elm, tmp.childNodes[tmp.childNodes.length - 1]);
+				}
+			}
+			return obj;
+		};
+	};
+})(jQuery);
+
+// additional icon on node (inside anchor)
+(function ($, undefined) {
+	"use strict";
+	var _s = document.createElement('SPAN');
+	_s.className = 'fa-stack jstree-stackedicon';
+	var _i = document.createElement('I');
+	_i.className = 'jstree-icon';
+	_i.setAttribute('role', 'presentation');
+
+	$.jstree.plugins.stackedicon = function (options, parent) {
+		this.teardown = function () {
+			this.element.find(".jstree-stackedicon").remove();
+			parent.teardown.call(this);
+		};
+		this.redraw_node = function(obj, deep, is_callback, force_render) {
+			obj = parent.redraw_node.apply(this, arguments);
+			if(obj) {
+				var i, j, tmp = null, icon = null, temp = null;
+				for(i = 0, j = obj.childNodes.length; i < j; i++) {
+					if(obj.childNodes[i] && obj.childNodes[i].className && obj.childNodes[i].className.indexOf("jstree-anchor") !== -1) {
+						tmp = obj.childNodes[i];
+						break;
+					}
+				}
+				if(tmp) {
+					if(this._model.data[obj.id].state.icons && this._model.data[obj.id].state.icons.length) {
+						icon = _s.cloneNode(false);
+						for(i = 0, j = this._model.data[obj.id].state.icons.length; i < j; i++) {
+							temp = _i.cloneNode(false);
+							temp.className += ' ' + this._model.data[obj.id].state.icons[i];
+							icon.appendChild(temp);
+						}
+						tmp.insertBefore(icon, tmp.childNodes[0]);
+					}
+				}
+			}
+			return obj;
+		};
+	};
+})(jQuery);
+
+// selecting a node opens it
+(function ($, undefined) {
+	"use strict";
+	$.jstree.plugins.selectopens = function (options, parent) {
+		this.bind = function () {
+			parent.bind.call(this);
+			this.element.on('select_node.jstree', function (e, data) { data.instance.open_node(data.node); });
+		};
+	};
+})(jQuery);
+
+// object as data
+(function ($, undefined) {
+	"use strict";
+	$.jstree.defaults.datamodel = {};
+	$.jstree.plugins.datamodel = function (options, parent) {
+		this.init = function (el, options) {
+			this._data.datamodel = {};
+			parent.init.call(this, el, options);
+		};
+		this._datamodel = function (id, nodes, callback) {
+			var i = 0, j = nodes.length, tmp = [], obj = null;
+			for(; i < j; i++) {
+				this._data.datamodel[nodes[i].getID()] = nodes[i];
+				obj = {
+					id : nodes[i].getID(),
+					text : nodes[i].getText(),
+					children : nodes[i].hasChildren()
+				};
+				if(nodes[i].getExtra) {
+					obj = nodes[i].getExtra(obj); // icon, type
+				}
+				tmp.push(obj);
+			}
+			return this._append_json_data(id, tmp, $.proxy(function (status) {
+				callback.call(this, status);
+			}, this));
+		};
+		this._load_node = function (obj, callback) {
+			var id = obj.id;
+			var nd = obj.id === "#" ? this.settings.core.data : this._data.datamodel[obj.id].getChildren($.proxy(function (nodes) {
+				this._datamodel(id, nodes, callback);
+			}, this));
+			if($.isArray(nd)) {
+				this._datamodel(id, nd, callback);
+			}
+		};
+	};
+})(jQuery);
+/*
+	demo of the above
+	function treeNode(val) {
+		var id = ++treeNode.counter;
+		this.getID = function () {
+			return id;
+		};
+		this.getText = function () {
+			return val.toString();
+		};
+		this.getExtra = function (obj) {
+			obj.icon = false;
+			return obj;
+		};
+		this.hasChildren = function () {
+			return true;
+		};
+		this.getChildren = function () {
+			return [
+				new treeNode(Math.pow(val, 2)),
+				new treeNode(Math.sqrt(val)),
+			];
+		};
+	}
+	treeNode.counter = 0;
+
+	$('#jstree').jstree({
+		'core': {
+			'data': [
+						new treeNode(2),
+						new treeNode(3),
+						new treeNode(4),
+						new treeNode(5)
+					]
+		},
+		plugins : ['datamodel']
+	});
+*/
+
+// untested sample plugin to keep all nodes in the DOM
+(function ($, undefined) {
+	"use strict";
+	$.jstree.plugins.dom = function (options, parent) {
+		this.redraw_node = function (node, deep, is_callback, force_render) {
+			return parent.redraw_node.call(this, node, deep, is_callback, true);
+		};
+		this.close_node = function (obj, animation) {
+			var t1, t2, t, d;
+			if($.isArray(obj)) {
+				obj = obj.slice();
+				for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+					this.close_node(obj[t1], animation);
+				}
+				return true;
+			}
+			obj = this.get_node(obj);
+			if(!obj || obj.id === $.jstree.root) {
+				return false;
+			}
+			if(this.is_closed(obj)) {
+				return false;
+			}
+			animation = animation === undefined ? this.settings.core.animation : animation;
+			t = this;
+			d = this.get_node(obj, true);
+			if(d.length) {
+				if(!animation) {
+					d[0].className = d[0].className.replace('jstree-open', 'jstree-closed');
+					d.attr("aria-expanded", false);
+				}
+				else {
+					d
+						.children(".jstree-children").attr("style","display:block !important").end()
+						.removeClass("jstree-open").addClass("jstree-closed").attr("aria-expanded", false)
+						.children(".jstree-children").stop(true, true).slideUp(animation, function () {
+							this.style.display = "";
+							t.trigger("after_close", { "node" : obj });
+						});
+				}
+			}
+			obj.state.opened = false;
+			this.trigger('close_node',{ "node" : obj });
+			if(!animation || !d.length) {
+				this.trigger("after_close", { "node" : obj });
+			}
+		};
+	};
+})(jQuery);
+
+// customize plugin by @Lusito
+// https://github.com/Lusito/jstree/blob/node-customize/src/jstree-node-customize.js
+/**
+ * ### Node Customize plugin
+ *
+ * Allows to customize nodes when they are drawn.
+ */
+(function (factory) {
+	"use strict";
+	if (typeof define === 'function' && define.amd) {
+		define('jstree.node_customize', ['jquery','jstree'], factory);
+	}
+	else if(typeof exports === 'object') {
+		factory(require('jquery'), require('jstree'));
+	}
+	else {
+		factory(jQuery, jQuery.jstree);
+	}
+}(function ($, jstree, undefined) {
+	"use strict";
+
+	if($.jstree.plugins.node_customize) { return; }
+
+	/**
+	 * the settings object.
+	 * key is the attribute name to select the customizer function from switch.
+	 * switch is a key => function(el, node) map.
+	 * default: function(el, node) will be called if the type could not be mapped
+	 * @name $.jstree.defaults.node_customize
+	 * @plugin node_customize
+	 */
+	$.jstree.defaults.node_customize = {
+		"key": "type",
+		"switch": {},
+		"default": null
+	};
+
+	$.jstree.plugins.node_customize = function (options, parent) {
+		this.redraw_node = function (obj, deep, callback, force_draw) {
+			var node_id = obj;
+			var el = parent.redraw_node.apply(this, arguments);
+			if (el) {
+				var node = this._model.data[node_id];
+				var cfg = this.settings.node_customize;
+				var key = cfg.key;
+				var type =  (node && node.original && node.original[key]);
+				var customizer = (type && cfg.switch[type]) || cfg.default;
+				if(customizer)
+					customizer(el, node);
+			}
+			return el;
+		};
+	}
+}));
+
+
+// parentsload plugin by @ashl1
+/**
+ * ### Parentsload plugin
+ *
+ * Change load_node() functionality in jsTree, to possible load not yes downloaded node with all it parent in a single request (only useful with lazy loading).
+ *
+ * version 1.0.0 (Alexey Shildyakov - ashl1future@gmail.com)
+ * 2015: Compatible with jsTree-3.2.1
+ */
+/*globals jQuery, define, exports, require, document */
+(function (factory) {
+        "use strict";
+        if (typeof define === 'function' && define.amd) {
+                define('jstree.parentsload', ['jquery','jstree'], factory);
+        }
+        else if(typeof exports === 'object') {
+                factory(require('jquery'), require('jstree'));
+        }
+        else {
+                factory(jQuery, jQuery.jstree);
+        }
+}(function ($, jstree, undefined) {
+        "use strict";
+
+        if($.jstree.plugins.parentsload) { return; }
+
+        /**
+         * parentsload configuration
+         *
+         * The configuration syntax is almost the same as for core.data option. You must set parenstload.data the following:
+         *
+         * parentsload: {
+         *      data: function(){} // this function overwrites core data.data options
+         * }
+         *
+         * OR
+         *
+         * parentsload: {
+         *      data: {
+         *              url: function(node){} OR string,
+         *              data: function(node){} OR associative array as json{data} jQuery parameter
+         *      }
+         * }
+         *
+         * In last case at least on of 'url' or 'data' must be presented.
+         *
+         * At first, the plugin load_node() detects if the node already downloaded. If is - uses the core.data settings, if not - uses parentsload.data settings
+         * to fetch in one query the specified node and all its parent. The data must be in the first mentioned JSON format with set nested children[].
+         * Each node level should consist of all nodes on the level to properly work with the tree in the future. Otherwise, you must manually call load_node
+         * on every parent node to fetch all children nodes on that level.
+         *
+         * @name $.jstree.defaults.parentsload
+         * @plugin parentsload
+         */
+        $.jstree.defaults.parentsload = null;
+        $.jstree.plugins.parentsload = function (options, parent) {
+                this.init = function (el, options) {
+                        parent.init.call(this, el, options);
+                        this.patch_data()
+                };
+                this.patch_data = function(){
+                        var parentsloadSettings = this.settings.parentsload;
+                        var jsTreeDataSettings = this.settings.core.data;
+                        var self = this;
+
+                        var callError = function(number, message) {
+                                self._data.core.last_error = { 'error' : 'configuration', 'plugin' : 'parentsload', 'id' : 'parentsload_' + number, 'reason' : message, 'data' : JSON.stringify({config: parentsloadSettings}) };
+                                self.settings.core.error.call(self, self._data.core.last_error);
+                        }
+
+                        if(!parentsloadSettings) {
+                                callError('01', 'The configuration must be presented')
+                                return
+                        }
+                        parentsloadSettings = parentsloadSettings.data;
+
+                        var patchSettingsProperty = function (propertyName) {
+                                var property = parentsloadSettings[propertyName],
+                                    coreProperty = jsTreeDataSettings[propertyName];
+                                if (property) {
+                                        jsTreeDataSettings[propertyName] = function(node) {
+                                                if (this.get_node(node).parentsload_required) {
+                                                        if ($.isFunction(property)) {
+                                                                return property.call(this, node)
+                                                        } else {// (typeof property === 'string')
+                                                                return property
+                                                        }
+                                                } else {
+                                                        if ($.isFunction(coreProperty)) {
+                                                                return coreProperty.call(this, node)
+                                                        } else { // (typeof coreProperty === 'string')
+                                                                return coreProperty
+                                                        }
+                                                }
+                                        }
+                                } /* else {
+                                        use jstree the same data[propertyName] settings
+                                }*/
+                        }
+
+                        if($.isFunction(parentsloadSettings)) {
+                                this.settings.data = parentsloadSettings
+                        } else if (typeof parentsloadSettings === 'object') {
+                                if (! (parentsloadSettings.url || parentsloadSettings.data)) {
+                                        callError('02', 'The "data.url" or "data.data" must be presented in configuration')
+                                        return
+                                }
+                                patchSettingsProperty('url')
+                                patchSettingsProperty('data')
+
+                        } else {
+                                callError('03', 'The appropriate "data.url" or "data.data" must be presented in configuration')
+                        }
+                }
+
+                this.load_node = function (obj, callback) {
+                        if($.isArray(obj)) {
+                                // FIXME: _load_nodes will not load nodes not presented in the tree
+                                this._load_nodes(obj.slice(), callback);
+                                return true;
+                        }
+                        var foundObj = this.get_node(obj);
+                        if (foundObj) {
+                                return parent.load_node.apply(this, arguments)
+                        } else {
+                                // node hasn't been loaded
+                                var id = obj.id? obj.id: obj;
+                                this._model.data[id] = {
+                                        id : id,
+                                        parent : '#',
+                                        parents : [],
+                                        children : [],
+                                        children_d : [],
+                                        state : { loaded : false },
+                                        li_attr : {},
+                                        a_attr : {},
+                                        parentsload_required : true,
+                                };
+                                return parent.load_node.call(this, obj, function(obj, status){
+                                        obj.parentsload_required = !status
+                                        callback.call(this, obj, status)
+                                })
+                        }
+                }
+        };
+}));
+
+// conditional deselect
+(function (factory) {
+	"use strict";
+	if (typeof define === 'function' && define.amd) {
+		define('jstree.conditionaldeselect', ['jquery','jstree'], factory);
+	}
+	else if(typeof exports === 'object') {
+		factory(require('jquery'), require('jstree'));
+	}
+	else {
+		factory(jQuery, jQuery.jstree);
+	}
+}(function ($, jstree, undefined) {
+	"use strict";
+
+	if($.jstree.plugins.conditionaldeselect) { return; }
+	$.jstree.defaults.conditionaldeselect = function () { return true; };
+	$.jstree.plugins.conditionaldeselect = function (options, parent) {
+		// own function
+		this.deselect_node = function (obj, supress_event, e) {
+			if(this.settings.conditionaldeselect.call(this, this.get_node(obj), e)) {
+				return parent.deselect_node.call(this, obj, supress_event, e);
+			}
+		};
+	};
+
+}));
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vakata-jstree-3.3.5/src/outro.js	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,1 @@
+}));
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vakata-jstree-3.3.5/src/sample.js	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,93 @@
+/*global jQuery */
+// wrap in IIFE and pass jQuery as $
+(function ($, undefined) {
+	"use strict";
+
+	// some private plugin stuff if needed
+	var private_var = null;
+
+	// extending the defaults
+	$.jstree.defaults.sample = {
+		sample_option : 'sample_val'
+	};
+
+	// the actual plugin code
+	$.jstree.plugins.sample = function (options, parent) {
+		// own function
+		this.sample_function = function (arg) {
+			// you can chain this method if needed and available
+			if(parent.sample_function) { parent.sample_function.call(this, arg); }
+		};
+
+		// *SPECIAL* FUNCTIONS
+		this.init = function (el, options) {
+			// do not forget parent
+			parent.init.call(this, el, options);
+		};
+		// bind events if needed
+		this.bind = function () {
+			// call parent function first
+			parent.bind.call(this);
+			// do(stuff);
+		};
+		// unbind events if needed (all in jquery namespace are taken care of by the core)
+		this.unbind = function () {
+			// do(stuff);
+			// call parent function last
+			parent.unbind.call(this);
+		};
+		this.teardown = function () {
+			// do not forget parent
+			parent.teardown.call(this);
+		};
+		// state management - get and restore
+		this.get_state = function () {
+			// always get state from parent first
+			var state = parent.get_state.call(this);
+			// add own stuff to state
+			state.sample = { 'var' : 'val' };
+			return state;
+		};
+		this.set_state = function (state, callback) {
+			// only process your part if parent returns true
+			// there will be multiple times with false
+			if(parent.set_state.call(this, state, callback)) {
+				// check the key you set above
+				if(state.sample) {
+					// do(stuff); // like calling this.sample_function(state.sample.var);
+					// remove your part of the state, call again and RETURN FALSE, the next cycle will be TRUE
+					delete state.sample;
+					this.set_state(state, callback);
+					return false;
+				}
+				// return true if your state is gone (cleared in the previous step)
+				return true;
+			}
+			// parent was false - return false too
+			return false;
+		};
+		// node transportation
+		this.get_json = function (obj, options, flat) {
+			// get the node from the parent
+			var tmp = parent.get_json.call(this, obj, options, flat), i, j;
+			if($.isArray(tmp)) {
+				for(i = 0, j = tmp.length; i < j; i++) {
+					tmp[i].sample = 'value';
+				}
+			}
+			else {
+				tmp.sample = 'value';
+			}
+			// return the original / modified node
+			return tmp;
+		};
+	};
+
+	// attach to document ready if needed
+	$(function () {
+		// do(stuff);
+	});
+
+	// you can include the sample plugin in all instances by default
+	$.jstree.defaults.plugins.push("sample");
+})(jQuery);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vakata-jstree-3.3.5/src/themes/base.less	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,92 @@
+// base jstree
+.jstree-node, .jstree-children, .jstree-container-ul { display:block; margin:0; padding:0; list-style-type:none; list-style-image:none; }
+.jstree-node { white-space:nowrap; }
+.jstree-anchor { display:inline-block; color:black; white-space:nowrap; padding:0 4px 0 1px; margin:0; vertical-align:top; }
+.jstree-anchor:focus { outline:0; }
+.jstree-anchor, .jstree-anchor:link, .jstree-anchor:visited, .jstree-anchor:hover, .jstree-anchor:active { text-decoration:none; color:inherit; }
+.jstree-icon { display:inline-block; text-decoration:none; margin:0; padding:0; vertical-align:top; text-align:center; }
+.jstree-icon:empty { display:inline-block; text-decoration:none; margin:0; padding:0; vertical-align:top; text-align:center; }
+.jstree-ocl { cursor:pointer; }
+.jstree-leaf > .jstree-ocl { cursor:default; }
+.jstree .jstree-open > .jstree-children { display:block; }
+.jstree .jstree-closed > .jstree-children,
+.jstree .jstree-leaf > .jstree-children { display:none; }
+.jstree-anchor > .jstree-themeicon { margin-right:2px; }
+.jstree-no-icons .jstree-themeicon,
+.jstree-anchor > .jstree-themeicon-hidden { display:none; }
+.jstree-hidden, .jstree-node.jstree-hidden { display:none; }
+
+// base jstree rtl
+.jstree-rtl {
+	.jstree-anchor { padding:0 1px 0 4px; }
+	.jstree-anchor > .jstree-themeicon { margin-left:2px; margin-right:0; }
+	.jstree-node { margin-left:0; }
+	.jstree-container-ul > .jstree-node { margin-right:0; }
+}
+
+// base jstree wholerow
+.jstree-wholerow-ul {
+	position:relative;
+	display:inline-block;
+	min-width:100%;
+	.jstree-leaf > .jstree-ocl { cursor:pointer; }
+	.jstree-anchor, .jstree-icon { position:relative; }
+	.jstree-wholerow { width:100%; cursor:pointer; position:absolute; left:0; -webkit-user-select:none; -moz-user-select:none; -ms-user-select:none; user-select:none; }
+}
+
+// base contextmenu
+.jstree-contextmenu .jstree-anchor {
+	-webkit-user-select: none; /* disable selection/Copy of UIWebView */
+	-webkit-touch-callout: none; /* disable the IOS popup when long-press on a link */
+}
+.vakata-context {
+	display:none;
+	&, ul { margin:0; padding:2px; position:absolute; background:#f5f5f5; border:1px solid #979797; box-shadow:2px 2px 2px #999999; }
+	ul { list-style:none; left:100%; margin-top:-2.7em; margin-left:-4px; }
+	.vakata-context-right ul { left:auto; right:100%; margin-left:auto; margin-right:-4px; }
+	li {
+		list-style:none;
+		> a {
+			display:block; padding:0 2em 0 2em; text-decoration:none; width:auto; color:black; white-space:nowrap; line-height:2.4em; text-shadow:1px 1px 0 white; border-radius:1px;
+			&:hover { position:relative; background-color:#e8eff7; box-shadow:0 0 2px #0a6aa1; }
+			&.vakata-context-parent { background-image:url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAIORI4JlrqN1oMSnmmZDQUAOw=="); background-position:right center; background-repeat:no-repeat; }
+		}
+		> a:focus { outline:0; }
+	}
+	.vakata-context-hover > a { position:relative; background-color:#e8eff7; box-shadow:0 0 2px #0a6aa1; }
+	.vakata-context-separator {
+		> a, > a:hover { background:white; border:0; border-top:1px solid #e2e3e3; height:1px; min-height:1px; max-height:1px; padding:0; margin:0 0 0 2.4em; border-left:1px solid #e0e0e0; text-shadow:0 0 0 transparent; box-shadow:0 0 0 transparent; border-radius:0; }
+	}
+	.vakata-contextmenu-disabled {
+		a, a:hover { color:silver; background-color:transparent; border:0; box-shadow:0 0 0; }
+	}
+	li > a {
+		> i { text-decoration:none; display:inline-block; width:2.4em; height:2.4em; background:transparent; margin:0 0 0 -2em; vertical-align:top; text-align:center; line-height:2.4em; }
+		> i:empty { width:2.4em; line-height:2.4em; }
+		.vakata-contextmenu-sep { display:inline-block; width:1px; height:2.4em; background:white; margin:0 0.5em 0 0; border-left:1px solid #e2e3e3; }
+	}
+	.vakata-contextmenu-shortcut { font-size:0.8em; color:silver; opacity:0.5; display:none; }
+}
+.vakata-context-rtl {
+	ul { left:auto; right:100%; margin-left:auto; margin-right:-4px; }
+	li > a.vakata-context-parent { background-image:url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAINjI+AC7rWHIsPtmoxLAA7"); background-position:left center; background-repeat:no-repeat; }
+	.vakata-context-separator > a { margin:0 2.4em 0 0; border-left:0; border-right:1px solid #e2e3e3;}
+	.vakata-context-left ul { right:auto; left:100%; margin-left:-4px; margin-right:auto; }
+	li > a {
+		> i { margin:0 -2em 0 0; }
+		.vakata-contextmenu-sep { margin:0 0 0 0.5em; border-left-color:white; background:#e2e3e3; }
+	}
+}
+
+// base drag'n'drop
+#jstree-marker { position: absolute; top:0; left:0; margin:-5px 0 0 0; padding:0; border-right:0; border-top:5px solid transparent; border-bottom:5px solid transparent; border-left:5px solid; width:0; height:0; font-size:0; line-height:0; }
+#jstree-dnd {
+	line-height:16px;
+	margin:0;
+	padding:4px;
+	.jstree-icon,
+	.jstree-copy { display:inline-block; text-decoration:none; margin:0 2px 0 0; padding:0; width:16px; height:16px; }
+	.jstree-ok { background:green; }
+	.jstree-er { background:red; }
+	.jstree-copy { margin:0 2px 0 2px; }
+}
Binary file vakata-jstree-3.3.5/src/themes/default-dark/32px.png has changed
Binary file vakata-jstree-3.3.5/src/themes/default-dark/40px.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vakata-jstree-3.3.5/src/themes/default-dark/style.css	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,1152 @@
+/* jsTree default dark theme */
+.jstree-node,
+.jstree-children,
+.jstree-container-ul {
+  display: block;
+  margin: 0;
+  padding: 0;
+  list-style-type: none;
+  list-style-image: none;
+}
+.jstree-node {
+  white-space: nowrap;
+}
+.jstree-anchor {
+  display: inline-block;
+  color: black;
+  white-space: nowrap;
+  padding: 0 4px 0 1px;
+  margin: 0;
+  vertical-align: top;
+}
+.jstree-anchor:focus {
+  outline: 0;
+}
+.jstree-anchor,
+.jstree-anchor:link,
+.jstree-anchor:visited,
+.jstree-anchor:hover,
+.jstree-anchor:active {
+  text-decoration: none;
+  color: inherit;
+}
+.jstree-icon {
+  display: inline-block;
+  text-decoration: none;
+  margin: 0;
+  padding: 0;
+  vertical-align: top;
+  text-align: center;
+}
+.jstree-icon:empty {
+  display: inline-block;
+  text-decoration: none;
+  margin: 0;
+  padding: 0;
+  vertical-align: top;
+  text-align: center;
+}
+.jstree-ocl {
+  cursor: pointer;
+}
+.jstree-leaf > .jstree-ocl {
+  cursor: default;
+}
+.jstree .jstree-open > .jstree-children {
+  display: block;
+}
+.jstree .jstree-closed > .jstree-children,
+.jstree .jstree-leaf > .jstree-children {
+  display: none;
+}
+.jstree-anchor > .jstree-themeicon {
+  margin-right: 2px;
+}
+.jstree-no-icons .jstree-themeicon,
+.jstree-anchor > .jstree-themeicon-hidden {
+  display: none;
+}
+.jstree-hidden,
+.jstree-node.jstree-hidden {
+  display: none;
+}
+.jstree-rtl .jstree-anchor {
+  padding: 0 1px 0 4px;
+}
+.jstree-rtl .jstree-anchor > .jstree-themeicon {
+  margin-left: 2px;
+  margin-right: 0;
+}
+.jstree-rtl .jstree-node {
+  margin-left: 0;
+}
+.jstree-rtl .jstree-container-ul > .jstree-node {
+  margin-right: 0;
+}
+.jstree-wholerow-ul {
+  position: relative;
+  display: inline-block;
+  min-width: 100%;
+}
+.jstree-wholerow-ul .jstree-leaf > .jstree-ocl {
+  cursor: pointer;
+}
+.jstree-wholerow-ul .jstree-anchor,
+.jstree-wholerow-ul .jstree-icon {
+  position: relative;
+}
+.jstree-wholerow-ul .jstree-wholerow {
+  width: 100%;
+  cursor: pointer;
+  position: absolute;
+  left: 0;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+.jstree-contextmenu .jstree-anchor {
+  -webkit-user-select: none;
+  /* disable selection/Copy of UIWebView */
+  -webkit-touch-callout: none;
+  /* disable the IOS popup when long-press on a link */
+}
+.vakata-context {
+  display: none;
+}
+.vakata-context,
+.vakata-context ul {
+  margin: 0;
+  padding: 2px;
+  position: absolute;
+  background: #f5f5f5;
+  border: 1px solid #979797;
+  box-shadow: 2px 2px 2px #999999;
+}
+.vakata-context ul {
+  list-style: none;
+  left: 100%;
+  margin-top: -2.7em;
+  margin-left: -4px;
+}
+.vakata-context .vakata-context-right ul {
+  left: auto;
+  right: 100%;
+  margin-left: auto;
+  margin-right: -4px;
+}
+.vakata-context li {
+  list-style: none;
+}
+.vakata-context li > a {
+  display: block;
+  padding: 0 2em 0 2em;
+  text-decoration: none;
+  width: auto;
+  color: black;
+  white-space: nowrap;
+  line-height: 2.4em;
+  text-shadow: 1px 1px 0 white;
+  border-radius: 1px;
+}
+.vakata-context li > a:hover {
+  position: relative;
+  background-color: #e8eff7;
+  box-shadow: 0 0 2px #0a6aa1;
+}
+.vakata-context li > a.vakata-context-parent {
+  background-image: url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAIORI4JlrqN1oMSnmmZDQUAOw==");
+  background-position: right center;
+  background-repeat: no-repeat;
+}
+.vakata-context li > a:focus {
+  outline: 0;
+}
+.vakata-context .vakata-context-hover > a {
+  position: relative;
+  background-color: #e8eff7;
+  box-shadow: 0 0 2px #0a6aa1;
+}
+.vakata-context .vakata-context-separator > a,
+.vakata-context .vakata-context-separator > a:hover {
+  background: white;
+  border: 0;
+  border-top: 1px solid #e2e3e3;
+  height: 1px;
+  min-height: 1px;
+  max-height: 1px;
+  padding: 0;
+  margin: 0 0 0 2.4em;
+  border-left: 1px solid #e0e0e0;
+  text-shadow: 0 0 0 transparent;
+  box-shadow: 0 0 0 transparent;
+  border-radius: 0;
+}
+.vakata-context .vakata-contextmenu-disabled a,
+.vakata-context .vakata-contextmenu-disabled a:hover {
+  color: silver;
+  background-color: transparent;
+  border: 0;
+  box-shadow: 0 0 0;
+}
+.vakata-context li > a > i {
+  text-decoration: none;
+  display: inline-block;
+  width: 2.4em;
+  height: 2.4em;
+  background: transparent;
+  margin: 0 0 0 -2em;
+  vertical-align: top;
+  text-align: center;
+  line-height: 2.4em;
+}
+.vakata-context li > a > i:empty {
+  width: 2.4em;
+  line-height: 2.4em;
+}
+.vakata-context li > a .vakata-contextmenu-sep {
+  display: inline-block;
+  width: 1px;
+  height: 2.4em;
+  background: white;
+  margin: 0 0.5em 0 0;
+  border-left: 1px solid #e2e3e3;
+}
+.vakata-context .vakata-contextmenu-shortcut {
+  font-size: 0.8em;
+  color: silver;
+  opacity: 0.5;
+  display: none;
+}
+.vakata-context-rtl ul {
+  left: auto;
+  right: 100%;
+  margin-left: auto;
+  margin-right: -4px;
+}
+.vakata-context-rtl li > a.vakata-context-parent {
+  background-image: url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAINjI+AC7rWHIsPtmoxLAA7");
+  background-position: left center;
+  background-repeat: no-repeat;
+}
+.vakata-context-rtl .vakata-context-separator > a {
+  margin: 0 2.4em 0 0;
+  border-left: 0;
+  border-right: 1px solid #e2e3e3;
+}
+.vakata-context-rtl .vakata-context-left ul {
+  right: auto;
+  left: 100%;
+  margin-left: -4px;
+  margin-right: auto;
+}
+.vakata-context-rtl li > a > i {
+  margin: 0 -2em 0 0;
+}
+.vakata-context-rtl li > a .vakata-contextmenu-sep {
+  margin: 0 0 0 0.5em;
+  border-left-color: white;
+  background: #e2e3e3;
+}
+#jstree-marker {
+  position: absolute;
+  top: 0;
+  left: 0;
+  margin: -5px 0 0 0;
+  padding: 0;
+  border-right: 0;
+  border-top: 5px solid transparent;
+  border-bottom: 5px solid transparent;
+  border-left: 5px solid;
+  width: 0;
+  height: 0;
+  font-size: 0;
+  line-height: 0;
+}
+#jstree-dnd {
+  line-height: 16px;
+  margin: 0;
+  padding: 4px;
+}
+#jstree-dnd .jstree-icon,
+#jstree-dnd .jstree-copy {
+  display: inline-block;
+  text-decoration: none;
+  margin: 0 2px 0 0;
+  padding: 0;
+  width: 16px;
+  height: 16px;
+}
+#jstree-dnd .jstree-ok {
+  background: green;
+}
+#jstree-dnd .jstree-er {
+  background: red;
+}
+#jstree-dnd .jstree-copy {
+  margin: 0 2px 0 2px;
+}
+.jstree-default-dark .jstree-node,
+.jstree-default-dark .jstree-icon {
+  background-repeat: no-repeat;
+  background-color: transparent;
+}
+.jstree-default-dark .jstree-anchor,
+.jstree-default-dark .jstree-animated,
+.jstree-default-dark .jstree-wholerow {
+  transition: background-color 0.15s, box-shadow 0.15s;
+}
+.jstree-default-dark .jstree-hovered {
+  background: #555555;
+  border-radius: 2px;
+  box-shadow: inset 0 0 1px #555555;
+}
+.jstree-default-dark .jstree-context {
+  background: #555555;
+  border-radius: 2px;
+  box-shadow: inset 0 0 1px #555555;
+}
+.jstree-default-dark .jstree-clicked {
+  background: #5fa2db;
+  border-radius: 2px;
+  box-shadow: inset 0 0 1px #666666;
+}
+.jstree-default-dark .jstree-no-icons .jstree-anchor > .jstree-themeicon {
+  display: none;
+}
+.jstree-default-dark .jstree-disabled {
+  background: transparent;
+  color: #666666;
+}
+.jstree-default-dark .jstree-disabled.jstree-hovered {
+  background: transparent;
+  box-shadow: none;
+}
+.jstree-default-dark .jstree-disabled.jstree-clicked {
+  background: #333333;
+}
+.jstree-default-dark .jstree-disabled > .jstree-icon {
+  opacity: 0.8;
+  filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'jstree-grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#jstree-grayscale");
+  /* Firefox 10+ */
+  filter: gray;
+  /* IE6-9 */
+  -webkit-filter: grayscale(100%);
+  /* Chrome 19+ & Safari 6+ */
+}
+.jstree-default-dark .jstree-search {
+  font-style: italic;
+  color: #ffffff;
+  font-weight: bold;
+}
+.jstree-default-dark .jstree-no-checkboxes .jstree-checkbox {
+  display: none !important;
+}
+.jstree-default-dark.jstree-checkbox-no-clicked .jstree-clicked {
+  background: transparent;
+  box-shadow: none;
+}
+.jstree-default-dark.jstree-checkbox-no-clicked .jstree-clicked.jstree-hovered {
+  background: #555555;
+}
+.jstree-default-dark.jstree-checkbox-no-clicked > .jstree-wholerow-ul .jstree-wholerow-clicked {
+  background: transparent;
+}
+.jstree-default-dark.jstree-checkbox-no-clicked > .jstree-wholerow-ul .jstree-wholerow-clicked.jstree-wholerow-hovered {
+  background: #555555;
+}
+.jstree-default-dark > .jstree-striped {
+  min-width: 100%;
+  display: inline-block;
+  background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAMAAAB/qqA+AAAABlBMVEUAAAAAAAClZ7nPAAAAAnRSTlMNAMM9s3UAAAAXSURBVHjajcEBAQAAAIKg/H/aCQZ70AUBjAATb6YPDgAAAABJRU5ErkJggg==") left top repeat;
+}
+.jstree-default-dark > .jstree-wholerow-ul .jstree-hovered,
+.jstree-default-dark > .jstree-wholerow-ul .jstree-clicked {
+  background: transparent;
+  box-shadow: none;
+  border-radius: 0;
+}
+.jstree-default-dark .jstree-wholerow {
+  -moz-box-sizing: border-box;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+}
+.jstree-default-dark .jstree-wholerow-hovered {
+  background: #555555;
+}
+.jstree-default-dark .jstree-wholerow-clicked {
+  background: #5fa2db;
+  background: -webkit-linear-gradient(top, #5fa2db 0%, #5fa2db 100%);
+  background: linear-gradient(to bottom, #5fa2db 0%, #5fa2db 100%);
+}
+.jstree-default-dark .jstree-node {
+  min-height: 24px;
+  line-height: 24px;
+  margin-left: 24px;
+  min-width: 24px;
+}
+.jstree-default-dark .jstree-anchor {
+  line-height: 24px;
+  height: 24px;
+}
+.jstree-default-dark .jstree-icon {
+  width: 24px;
+  height: 24px;
+  line-height: 24px;
+}
+.jstree-default-dark .jstree-icon:empty {
+  width: 24px;
+  height: 24px;
+  line-height: 24px;
+}
+.jstree-default-dark.jstree-rtl .jstree-node {
+  margin-right: 24px;
+}
+.jstree-default-dark .jstree-wholerow {
+  height: 24px;
+}
+.jstree-default-dark .jstree-node,
+.jstree-default-dark .jstree-icon {
+  background-image: url("32px.png");
+}
+.jstree-default-dark .jstree-node {
+  background-position: -292px -4px;
+  background-repeat: repeat-y;
+}
+.jstree-default-dark .jstree-last {
+  background: transparent;
+}
+.jstree-default-dark .jstree-open > .jstree-ocl {
+  background-position: -132px -4px;
+}
+.jstree-default-dark .jstree-closed > .jstree-ocl {
+  background-position: -100px -4px;
+}
+.jstree-default-dark .jstree-leaf > .jstree-ocl {
+  background-position: -68px -4px;
+}
+.jstree-default-dark .jstree-themeicon {
+  background-position: -260px -4px;
+}
+.jstree-default-dark > .jstree-no-dots .jstree-node,
+.jstree-default-dark > .jstree-no-dots .jstree-leaf > .jstree-ocl {
+  background: transparent;
+}
+.jstree-default-dark > .jstree-no-dots .jstree-open > .jstree-ocl {
+  background-position: -36px -4px;
+}
+.jstree-default-dark > .jstree-no-dots .jstree-closed > .jstree-ocl {
+  background-position: -4px -4px;
+}
+.jstree-default-dark .jstree-disabled {
+  background: transparent;
+}
+.jstree-default-dark .jstree-disabled.jstree-hovered {
+  background: transparent;
+}
+.jstree-default-dark .jstree-disabled.jstree-clicked {
+  background: #efefef;
+}
+.jstree-default-dark .jstree-checkbox {
+  background-position: -164px -4px;
+}
+.jstree-default-dark .jstree-checkbox:hover {
+  background-position: -164px -36px;
+}
+.jstree-default-dark.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox,
+.jstree-default-dark .jstree-checked > .jstree-checkbox {
+  background-position: -228px -4px;
+}
+.jstree-default-dark.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover,
+.jstree-default-dark .jstree-checked > .jstree-checkbox:hover {
+  background-position: -228px -36px;
+}
+.jstree-default-dark .jstree-anchor > .jstree-undetermined {
+  background-position: -196px -4px;
+}
+.jstree-default-dark .jstree-anchor > .jstree-undetermined:hover {
+  background-position: -196px -36px;
+}
+.jstree-default-dark .jstree-checkbox-disabled {
+  opacity: 0.8;
+  filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'jstree-grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#jstree-grayscale");
+  /* Firefox 10+ */
+  filter: gray;
+  /* IE6-9 */
+  -webkit-filter: grayscale(100%);
+  /* Chrome 19+ & Safari 6+ */
+}
+.jstree-default-dark > .jstree-striped {
+  background-size: auto 48px;
+}
+.jstree-default-dark.jstree-rtl .jstree-node {
+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");
+  background-position: 100% 1px;
+  background-repeat: repeat-y;
+}
+.jstree-default-dark.jstree-rtl .jstree-last {
+  background: transparent;
+}
+.jstree-default-dark.jstree-rtl .jstree-open > .jstree-ocl {
+  background-position: -132px -36px;
+}
+.jstree-default-dark.jstree-rtl .jstree-closed > .jstree-ocl {
+  background-position: -100px -36px;
+}
+.jstree-default-dark.jstree-rtl .jstree-leaf > .jstree-ocl {
+  background-position: -68px -36px;
+}
+.jstree-default-dark.jstree-rtl > .jstree-no-dots .jstree-node,
+.jstree-default-dark.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl {
+  background: transparent;
+}
+.jstree-default-dark.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl {
+  background-position: -36px -36px;
+}
+.jstree-default-dark.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl {
+  background-position: -4px -36px;
+}
+.jstree-default-dark .jstree-themeicon-custom {
+  background-color: transparent;
+  background-image: none;
+  background-position: 0 0;
+}
+.jstree-default-dark > .jstree-container-ul .jstree-loading > .jstree-ocl {
+  background: url("throbber.gif") center center no-repeat;
+}
+.jstree-default-dark .jstree-file {
+  background: url("32px.png") -100px -68px no-repeat;
+}
+.jstree-default-dark .jstree-folder {
+  background: url("32px.png") -260px -4px no-repeat;
+}
+.jstree-default-dark > .jstree-container-ul > .jstree-node {
+  margin-left: 0;
+  margin-right: 0;
+}
+#jstree-dnd.jstree-default-dark {
+  line-height: 24px;
+  padding: 0 4px;
+}
+#jstree-dnd.jstree-default-dark .jstree-ok,
+#jstree-dnd.jstree-default-dark .jstree-er {
+  background-image: url("32px.png");
+  background-repeat: no-repeat;
+  background-color: transparent;
+}
+#jstree-dnd.jstree-default-dark i {
+  background: transparent;
+  width: 24px;
+  height: 24px;
+  line-height: 24px;
+}
+#jstree-dnd.jstree-default-dark .jstree-ok {
+  background-position: -4px -68px;
+}
+#jstree-dnd.jstree-default-dark .jstree-er {
+  background-position: -36px -68px;
+}
+.jstree-default-dark .jstree-ellipsis {
+  overflow: hidden;
+}
+.jstree-default-dark .jstree-ellipsis .jstree-anchor {
+  width: calc(100% - 29px);
+  text-overflow: ellipsis;
+  overflow: hidden;
+}
+.jstree-default-dark .jstree-ellipsis.jstree-no-icons .jstree-anchor {
+  width: calc(100% - 5px);
+}
+.jstree-default-dark.jstree-rtl .jstree-node {
+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");
+}
+.jstree-default-dark.jstree-rtl .jstree-last {
+  background: transparent;
+}
+.jstree-default-dark-small .jstree-node {
+  min-height: 18px;
+  line-height: 18px;
+  margin-left: 18px;
+  min-width: 18px;
+}
+.jstree-default-dark-small .jstree-anchor {
+  line-height: 18px;
+  height: 18px;
+}
+.jstree-default-dark-small .jstree-icon {
+  width: 18px;
+  height: 18px;
+  line-height: 18px;
+}
+.jstree-default-dark-small .jstree-icon:empty {
+  width: 18px;
+  height: 18px;
+  line-height: 18px;
+}
+.jstree-default-dark-small.jstree-rtl .jstree-node {
+  margin-right: 18px;
+}
+.jstree-default-dark-small .jstree-wholerow {
+  height: 18px;
+}
+.jstree-default-dark-small .jstree-node,
+.jstree-default-dark-small .jstree-icon {
+  background-image: url("32px.png");
+}
+.jstree-default-dark-small .jstree-node {
+  background-position: -295px -7px;
+  background-repeat: repeat-y;
+}
+.jstree-default-dark-small .jstree-last {
+  background: transparent;
+}
+.jstree-default-dark-small .jstree-open > .jstree-ocl {
+  background-position: -135px -7px;
+}
+.jstree-default-dark-small .jstree-closed > .jstree-ocl {
+  background-position: -103px -7px;
+}
+.jstree-default-dark-small .jstree-leaf > .jstree-ocl {
+  background-position: -71px -7px;
+}
+.jstree-default-dark-small .jstree-themeicon {
+  background-position: -263px -7px;
+}
+.jstree-default-dark-small > .jstree-no-dots .jstree-node,
+.jstree-default-dark-small > .jstree-no-dots .jstree-leaf > .jstree-ocl {
+  background: transparent;
+}
+.jstree-default-dark-small > .jstree-no-dots .jstree-open > .jstree-ocl {
+  background-position: -39px -7px;
+}
+.jstree-default-dark-small > .jstree-no-dots .jstree-closed > .jstree-ocl {
+  background-position: -7px -7px;
+}
+.jstree-default-dark-small .jstree-disabled {
+  background: transparent;
+}
+.jstree-default-dark-small .jstree-disabled.jstree-hovered {
+  background: transparent;
+}
+.jstree-default-dark-small .jstree-disabled.jstree-clicked {
+  background: #efefef;
+}
+.jstree-default-dark-small .jstree-checkbox {
+  background-position: -167px -7px;
+}
+.jstree-default-dark-small .jstree-checkbox:hover {
+  background-position: -167px -39px;
+}
+.jstree-default-dark-small.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox,
+.jstree-default-dark-small .jstree-checked > .jstree-checkbox {
+  background-position: -231px -7px;
+}
+.jstree-default-dark-small.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover,
+.jstree-default-dark-small .jstree-checked > .jstree-checkbox:hover {
+  background-position: -231px -39px;
+}
+.jstree-default-dark-small .jstree-anchor > .jstree-undetermined {
+  background-position: -199px -7px;
+}
+.jstree-default-dark-small .jstree-anchor > .jstree-undetermined:hover {
+  background-position: -199px -39px;
+}
+.jstree-default-dark-small .jstree-checkbox-disabled {
+  opacity: 0.8;
+  filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'jstree-grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#jstree-grayscale");
+  /* Firefox 10+ */
+  filter: gray;
+  /* IE6-9 */
+  -webkit-filter: grayscale(100%);
+  /* Chrome 19+ & Safari 6+ */
+}
+.jstree-default-dark-small > .jstree-striped {
+  background-size: auto 36px;
+}
+.jstree-default-dark-small.jstree-rtl .jstree-node {
+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");
+  background-position: 100% 1px;
+  background-repeat: repeat-y;
+}
+.jstree-default-dark-small.jstree-rtl .jstree-last {
+  background: transparent;
+}
+.jstree-default-dark-small.jstree-rtl .jstree-open > .jstree-ocl {
+  background-position: -135px -39px;
+}
+.jstree-default-dark-small.jstree-rtl .jstree-closed > .jstree-ocl {
+  background-position: -103px -39px;
+}
+.jstree-default-dark-small.jstree-rtl .jstree-leaf > .jstree-ocl {
+  background-position: -71px -39px;
+}
+.jstree-default-dark-small.jstree-rtl > .jstree-no-dots .jstree-node,
+.jstree-default-dark-small.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl {
+  background: transparent;
+}
+.jstree-default-dark-small.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl {
+  background-position: -39px -39px;
+}
+.jstree-default-dark-small.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl {
+  background-position: -7px -39px;
+}
+.jstree-default-dark-small .jstree-themeicon-custom {
+  background-color: transparent;
+  background-image: none;
+  background-position: 0 0;
+}
+.jstree-default-dark-small > .jstree-container-ul .jstree-loading > .jstree-ocl {
+  background: url("throbber.gif") center center no-repeat;
+}
+.jstree-default-dark-small .jstree-file {
+  background: url("32px.png") -103px -71px no-repeat;
+}
+.jstree-default-dark-small .jstree-folder {
+  background: url("32px.png") -263px -7px no-repeat;
+}
+.jstree-default-dark-small > .jstree-container-ul > .jstree-node {
+  margin-left: 0;
+  margin-right: 0;
+}
+#jstree-dnd.jstree-default-dark-small {
+  line-height: 18px;
+  padding: 0 4px;
+}
+#jstree-dnd.jstree-default-dark-small .jstree-ok,
+#jstree-dnd.jstree-default-dark-small .jstree-er {
+  background-image: url("32px.png");
+  background-repeat: no-repeat;
+  background-color: transparent;
+}
+#jstree-dnd.jstree-default-dark-small i {
+  background: transparent;
+  width: 18px;
+  height: 18px;
+  line-height: 18px;
+}
+#jstree-dnd.jstree-default-dark-small .jstree-ok {
+  background-position: -7px -71px;
+}
+#jstree-dnd.jstree-default-dark-small .jstree-er {
+  background-position: -39px -71px;
+}
+.jstree-default-dark-small .jstree-ellipsis {
+  overflow: hidden;
+}
+.jstree-default-dark-small .jstree-ellipsis .jstree-anchor {
+  width: calc(100% - 23px);
+  text-overflow: ellipsis;
+  overflow: hidden;
+}
+.jstree-default-dark-small .jstree-ellipsis.jstree-no-icons .jstree-anchor {
+  width: calc(100% - 5px);
+}
+.jstree-default-dark-small.jstree-rtl .jstree-node {
+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg==");
+}
+.jstree-default-dark-small.jstree-rtl .jstree-last {
+  background: transparent;
+}
+.jstree-default-dark-large .jstree-node {
+  min-height: 32px;
+  line-height: 32px;
+  margin-left: 32px;
+  min-width: 32px;
+}
+.jstree-default-dark-large .jstree-anchor {
+  line-height: 32px;
+  height: 32px;
+}
+.jstree-default-dark-large .jstree-icon {
+  width: 32px;
+  height: 32px;
+  line-height: 32px;
+}
+.jstree-default-dark-large .jstree-icon:empty {
+  width: 32px;
+  height: 32px;
+  line-height: 32px;
+}
+.jstree-default-dark-large.jstree-rtl .jstree-node {
+  margin-right: 32px;
+}
+.jstree-default-dark-large .jstree-wholerow {
+  height: 32px;
+}
+.jstree-default-dark-large .jstree-node,
+.jstree-default-dark-large .jstree-icon {
+  background-image: url("32px.png");
+}
+.jstree-default-dark-large .jstree-node {
+  background-position: -288px 0px;
+  background-repeat: repeat-y;
+}
+.jstree-default-dark-large .jstree-last {
+  background: transparent;
+}
+.jstree-default-dark-large .jstree-open > .jstree-ocl {
+  background-position: -128px 0px;
+}
+.jstree-default-dark-large .jstree-closed > .jstree-ocl {
+  background-position: -96px 0px;
+}
+.jstree-default-dark-large .jstree-leaf > .jstree-ocl {
+  background-position: -64px 0px;
+}
+.jstree-default-dark-large .jstree-themeicon {
+  background-position: -256px 0px;
+}
+.jstree-default-dark-large > .jstree-no-dots .jstree-node,
+.jstree-default-dark-large > .jstree-no-dots .jstree-leaf > .jstree-ocl {
+  background: transparent;
+}
+.jstree-default-dark-large > .jstree-no-dots .jstree-open > .jstree-ocl {
+  background-position: -32px 0px;
+}
+.jstree-default-dark-large > .jstree-no-dots .jstree-closed > .jstree-ocl {
+  background-position: 0px 0px;
+}
+.jstree-default-dark-large .jstree-disabled {
+  background: transparent;
+}
+.jstree-default-dark-large .jstree-disabled.jstree-hovered {
+  background: transparent;
+}
+.jstree-default-dark-large .jstree-disabled.jstree-clicked {
+  background: #efefef;
+}
+.jstree-default-dark-large .jstree-checkbox {
+  background-position: -160px 0px;
+}
+.jstree-default-dark-large .jstree-checkbox:hover {
+  background-position: -160px -32px;
+}
+.jstree-default-dark-large.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox,
+.jstree-default-dark-large .jstree-checked > .jstree-checkbox {
+  background-position: -224px 0px;
+}
+.jstree-default-dark-large.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover,
+.jstree-default-dark-large .jstree-checked > .jstree-checkbox:hover {
+  background-position: -224px -32px;
+}
+.jstree-default-dark-large .jstree-anchor > .jstree-undetermined {
+  background-position: -192px 0px;
+}
+.jstree-default-dark-large .jstree-anchor > .jstree-undetermined:hover {
+  background-position: -192px -32px;
+}
+.jstree-default-dark-large .jstree-checkbox-disabled {
+  opacity: 0.8;
+  filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'jstree-grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#jstree-grayscale");
+  /* Firefox 10+ */
+  filter: gray;
+  /* IE6-9 */
+  -webkit-filter: grayscale(100%);
+  /* Chrome 19+ & Safari 6+ */
+}
+.jstree-default-dark-large > .jstree-striped {
+  background-size: auto 64px;
+}
+.jstree-default-dark-large.jstree-rtl .jstree-node {
+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");
+  background-position: 100% 1px;
+  background-repeat: repeat-y;
+}
+.jstree-default-dark-large.jstree-rtl .jstree-last {
+  background: transparent;
+}
+.jstree-default-dark-large.jstree-rtl .jstree-open > .jstree-ocl {
+  background-position: -128px -32px;
+}
+.jstree-default-dark-large.jstree-rtl .jstree-closed > .jstree-ocl {
+  background-position: -96px -32px;
+}
+.jstree-default-dark-large.jstree-rtl .jstree-leaf > .jstree-ocl {
+  background-position: -64px -32px;
+}
+.jstree-default-dark-large.jstree-rtl > .jstree-no-dots .jstree-node,
+.jstree-default-dark-large.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl {
+  background: transparent;
+}
+.jstree-default-dark-large.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl {
+  background-position: -32px -32px;
+}
+.jstree-default-dark-large.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl {
+  background-position: 0px -32px;
+}
+.jstree-default-dark-large .jstree-themeicon-custom {
+  background-color: transparent;
+  background-image: none;
+  background-position: 0 0;
+}
+.jstree-default-dark-large > .jstree-container-ul .jstree-loading > .jstree-ocl {
+  background: url("throbber.gif") center center no-repeat;
+}
+.jstree-default-dark-large .jstree-file {
+  background: url("32px.png") -96px -64px no-repeat;
+}
+.jstree-default-dark-large .jstree-folder {
+  background: url("32px.png") -256px 0px no-repeat;
+}
+.jstree-default-dark-large > .jstree-container-ul > .jstree-node {
+  margin-left: 0;
+  margin-right: 0;
+}
+#jstree-dnd.jstree-default-dark-large {
+  line-height: 32px;
+  padding: 0 4px;
+}
+#jstree-dnd.jstree-default-dark-large .jstree-ok,
+#jstree-dnd.jstree-default-dark-large .jstree-er {
+  background-image: url("32px.png");
+  background-repeat: no-repeat;
+  background-color: transparent;
+}
+#jstree-dnd.jstree-default-dark-large i {
+  background: transparent;
+  width: 32px;
+  height: 32px;
+  line-height: 32px;
+}
+#jstree-dnd.jstree-default-dark-large .jstree-ok {
+  background-position: 0px -64px;
+}
+#jstree-dnd.jstree-default-dark-large .jstree-er {
+  background-position: -32px -64px;
+}
+.jstree-default-dark-large .jstree-ellipsis {
+  overflow: hidden;
+}
+.jstree-default-dark-large .jstree-ellipsis .jstree-anchor {
+  width: calc(100% - 37px);
+  text-overflow: ellipsis;
+  overflow: hidden;
+}
+.jstree-default-dark-large .jstree-ellipsis.jstree-no-icons .jstree-anchor {
+  width: calc(100% - 5px);
+}
+.jstree-default-dark-large.jstree-rtl .jstree-node {
+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg==");
+}
+.jstree-default-dark-large.jstree-rtl .jstree-last {
+  background: transparent;
+}
+@media (max-width: 768px) {
+  #jstree-dnd.jstree-dnd-responsive {
+    line-height: 40px;
+    font-weight: bold;
+    font-size: 1.1em;
+    text-shadow: 1px 1px white;
+  }
+  #jstree-dnd.jstree-dnd-responsive > i {
+    background: transparent;
+    width: 40px;
+    height: 40px;
+  }
+  #jstree-dnd.jstree-dnd-responsive > .jstree-ok {
+    background-image: url("40px.png");
+    background-position: 0 -200px;
+    background-size: 120px 240px;
+  }
+  #jstree-dnd.jstree-dnd-responsive > .jstree-er {
+    background-image: url("40px.png");
+    background-position: -40px -200px;
+    background-size: 120px 240px;
+  }
+  #jstree-marker.jstree-dnd-responsive {
+    border-left-width: 10px;
+    border-top-width: 10px;
+    border-bottom-width: 10px;
+    margin-top: -10px;
+  }
+}
+@media (max-width: 768px) {
+  .jstree-default-dark-responsive {
+    /*
+	.jstree-open > .jstree-ocl,
+	.jstree-closed > .jstree-ocl { border-radius:20px; background-color:white; }
+	*/
+  }
+  .jstree-default-dark-responsive .jstree-icon {
+    background-image: url("40px.png");
+  }
+  .jstree-default-dark-responsive .jstree-node,
+  .jstree-default-dark-responsive .jstree-leaf > .jstree-ocl {
+    background: transparent;
+  }
+  .jstree-default-dark-responsive .jstree-node {
+    min-height: 40px;
+    line-height: 40px;
+    margin-left: 40px;
+    min-width: 40px;
+    white-space: nowrap;
+  }
+  .jstree-default-dark-responsive .jstree-anchor {
+    line-height: 40px;
+    height: 40px;
+  }
+  .jstree-default-dark-responsive .jstree-icon,
+  .jstree-default-dark-responsive .jstree-icon:empty {
+    width: 40px;
+    height: 40px;
+    line-height: 40px;
+  }
+  .jstree-default-dark-responsive > .jstree-container-ul > .jstree-node {
+    margin-left: 0;
+  }
+  .jstree-default-dark-responsive.jstree-rtl .jstree-node {
+    margin-left: 0;
+    margin-right: 40px;
+    background: transparent;
+  }
+  .jstree-default-dark-responsive.jstree-rtl .jstree-container-ul > .jstree-node {
+    margin-right: 0;
+  }
+  .jstree-default-dark-responsive .jstree-ocl,
+  .jstree-default-dark-responsive .jstree-themeicon,
+  .jstree-default-dark-responsive .jstree-checkbox {
+    background-size: 120px 240px;
+  }
+  .jstree-default-dark-responsive .jstree-leaf > .jstree-ocl,
+  .jstree-default-dark-responsive.jstree-rtl .jstree-leaf > .jstree-ocl {
+    background: transparent;
+  }
+  .jstree-default-dark-responsive .jstree-open > .jstree-ocl {
+    background-position: 0 0px !important;
+  }
+  .jstree-default-dark-responsive .jstree-closed > .jstree-ocl {
+    background-position: 0 -40px !important;
+  }
+  .jstree-default-dark-responsive.jstree-rtl .jstree-closed > .jstree-ocl {
+    background-position: -40px 0px !important;
+  }
+  .jstree-default-dark-responsive .jstree-themeicon {
+    background-position: -40px -40px;
+  }
+  .jstree-default-dark-responsive .jstree-checkbox,
+  .jstree-default-dark-responsive .jstree-checkbox:hover {
+    background-position: -40px -80px;
+  }
+  .jstree-default-dark-responsive.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox,
+  .jstree-default-dark-responsive.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover,
+  .jstree-default-dark-responsive .jstree-checked > .jstree-checkbox,
+  .jstree-default-dark-responsive .jstree-checked > .jstree-checkbox:hover {
+    background-position: 0 -80px;
+  }
+  .jstree-default-dark-responsive .jstree-anchor > .jstree-undetermined,
+  .jstree-default-dark-responsive .jstree-anchor > .jstree-undetermined:hover {
+    background-position: 0 -120px;
+  }
+  .jstree-default-dark-responsive .jstree-anchor {
+    font-weight: bold;
+    font-size: 1.1em;
+    text-shadow: 1px 1px white;
+  }
+  .jstree-default-dark-responsive > .jstree-striped {
+    background: transparent;
+  }
+  .jstree-default-dark-responsive .jstree-wholerow {
+    border-top: 1px solid #666666;
+    border-bottom: 1px solid #000000;
+    background: #333333;
+    height: 40px;
+  }
+  .jstree-default-dark-responsive .jstree-wholerow-hovered {
+    background: #555555;
+  }
+  .jstree-default-dark-responsive .jstree-wholerow-clicked {
+    background: #5fa2db;
+  }
+  .jstree-default-dark-responsive .jstree-children .jstree-last > .jstree-wholerow {
+    box-shadow: inset 0 -6px 3px -5px #111111;
+  }
+  .jstree-default-dark-responsive .jstree-children .jstree-open > .jstree-wholerow {
+    box-shadow: inset 0 6px 3px -5px #111111;
+    border-top: 0;
+  }
+  .jstree-default-dark-responsive .jstree-children .jstree-open + .jstree-open {
+    box-shadow: none;
+  }
+  .jstree-default-dark-responsive .jstree-node,
+  .jstree-default-dark-responsive .jstree-icon,
+  .jstree-default-dark-responsive .jstree-node > .jstree-ocl,
+  .jstree-default-dark-responsive .jstree-themeicon,
+  .jstree-default-dark-responsive .jstree-checkbox {
+    background-image: url("40px.png");
+    background-size: 120px 240px;
+  }
+  .jstree-default-dark-responsive .jstree-node {
+    background-position: -80px 0;
+    background-repeat: repeat-y;
+  }
+  .jstree-default-dark-responsive .jstree-last {
+    background: transparent;
+  }
+  .jstree-default-dark-responsive .jstree-leaf > .jstree-ocl {
+    background-position: -40px -120px;
+  }
+  .jstree-default-dark-responsive .jstree-last > .jstree-ocl {
+    background-position: -40px -160px;
+  }
+  .jstree-default-dark-responsive .jstree-themeicon-custom {
+    background-color: transparent;
+    background-image: none;
+    background-position: 0 0;
+  }
+  .jstree-default-dark-responsive .jstree-file {
+    background: url("40px.png") 0 -160px no-repeat;
+    background-size: 120px 240px;
+  }
+  .jstree-default-dark-responsive .jstree-folder {
+    background: url("40px.png") -40px -40px no-repeat;
+    background-size: 120px 240px;
+  }
+  .jstree-default-dark-responsive > .jstree-container-ul > .jstree-node {
+    margin-left: 0;
+    margin-right: 0;
+  }
+}
+.jstree-default-dark {
+  background: #333;
+}
+.jstree-default-dark .jstree-anchor {
+  color: #999;
+  text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.5);
+}
+.jstree-default-dark .jstree-clicked,
+.jstree-default-dark .jstree-checked {
+  color: white;
+}
+.jstree-default-dark .jstree-hovered {
+  color: white;
+}
+#jstree-marker.jstree-default-dark {
+  border-left-color: #999;
+  background: transparent;
+}
+.jstree-default-dark .jstree-anchor > .jstree-icon {
+  opacity: 0.75;
+}
+.jstree-default-dark .jstree-clicked > .jstree-icon,
+.jstree-default-dark .jstree-hovered > .jstree-icon,
+.jstree-default-dark .jstree-checked > .jstree-icon {
+  opacity: 1;
+}
+.jstree-default-dark.jstree-rtl .jstree-node {
+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAACZmZl+9SADAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");
+}
+.jstree-default-dark.jstree-rtl .jstree-last {
+  background: transparent;
+}
+.jstree-default-dark-small.jstree-rtl .jstree-node {
+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAACZmZl+9SADAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg==");
+}
+.jstree-default-dark-small.jstree-rtl .jstree-last {
+  background: transparent;
+}
+.jstree-default-dark-large.jstree-rtl .jstree-node {
+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAACZmZl+9SADAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg==");
+}
+.jstree-default-dark-large.jstree-rtl .jstree-last {
+  background: transparent;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vakata-jstree-3.3.5/src/themes/default-dark/style.less	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,50 @@
+/* jsTree default dark theme */
+@theme-name:				default-dark;
+@hovered-bg-color:			#555;
+@hovered-shadow-color:		#555;
+@disabled-color:			#666666;
+@disabled-bg-color:			#333333;
+@clicked-bg-color:			#5fa2db;
+@clicked-shadow-color:		#666666;
+@clicked-gradient-color-1:	#5fa2db;
+@clicked-gradient-color-2:	#5fa2db;
+@search-result-color:		#ffffff;
+@mobile-wholerow-bg-color:	#333333;
+@mobile-wholerow-shadow:	#111111;
+@mobile-wholerow-bordert:	#666;
+@mobile-wholerow-borderb:	#000;
+@responsive:				true;
+@image-path:				"";
+@base-height:				40px;
+
+@import "../mixins.less";
+@import "../base.less";
+@import "../main.less";
+
+.jstree-@{theme-name} {
+	background:#333;
+	.jstree-anchor { color:#999; text-shadow:1px 1px 0 rgba(0,0,0,0.5); }
+	.jstree-clicked, .jstree-checked { color:white; }
+	.jstree-hovered { color:white; }
+	#jstree-marker& {
+		border-left-color:#999;
+		background:transparent;
+	}
+	.jstree-anchor > .jstree-icon { opacity:0.75; }
+	.jstree-clicked > .jstree-icon,
+	.jstree-hovered > .jstree-icon,
+	.jstree-checked > .jstree-icon { opacity:1; }
+}
+// theme variants
+.jstree-@{theme-name} {
+	&.jstree-rtl .jstree-node { background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAACZmZl+9SADAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg=="); }
+	&.jstree-rtl .jstree-last { background:transparent; }
+}
+.jstree-@{theme-name}-small {
+	&.jstree-rtl .jstree-node { background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAACZmZl+9SADAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg=="); }
+	&.jstree-rtl .jstree-last { background:transparent; }
+}
+.jstree-@{theme-name}-large {
+	&.jstree-rtl .jstree-node { background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAACZmZl+9SADAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg=="); }
+	&.jstree-rtl .jstree-last { background:transparent; }
+}
\ No newline at end of file
Binary file vakata-jstree-3.3.5/src/themes/default-dark/throbber.gif has changed
Binary file vakata-jstree-3.3.5/src/themes/default/32px.png has changed
Binary file vakata-jstree-3.3.5/src/themes/default/40px.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vakata-jstree-3.3.5/src/themes/default/style.css	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,1108 @@
+/* jsTree default theme */
+.jstree-node,
+.jstree-children,
+.jstree-container-ul {
+  display: block;
+  margin: 0;
+  padding: 0;
+  list-style-type: none;
+  list-style-image: none;
+}
+.jstree-node {
+  white-space: nowrap;
+}
+.jstree-anchor {
+  display: inline-block;
+  color: black;
+  white-space: nowrap;
+  padding: 0 4px 0 1px;
+  margin: 0;
+  vertical-align: top;
+}
+.jstree-anchor:focus {
+  outline: 0;
+}
+.jstree-anchor,
+.jstree-anchor:link,
+.jstree-anchor:visited,
+.jstree-anchor:hover,
+.jstree-anchor:active {
+  text-decoration: none;
+  color: inherit;
+}
+.jstree-icon {
+  display: inline-block;
+  text-decoration: none;
+  margin: 0;
+  padding: 0;
+  vertical-align: top;
+  text-align: center;
+}
+.jstree-icon:empty {
+  display: inline-block;
+  text-decoration: none;
+  margin: 0;
+  padding: 0;
+  vertical-align: top;
+  text-align: center;
+}
+.jstree-ocl {
+  cursor: pointer;
+}
+.jstree-leaf > .jstree-ocl {
+  cursor: default;
+}
+.jstree .jstree-open > .jstree-children {
+  display: block;
+}
+.jstree .jstree-closed > .jstree-children,
+.jstree .jstree-leaf > .jstree-children {
+  display: none;
+}
+.jstree-anchor > .jstree-themeicon {
+  margin-right: 2px;
+}
+.jstree-no-icons .jstree-themeicon,
+.jstree-anchor > .jstree-themeicon-hidden {
+  display: none;
+}
+.jstree-hidden,
+.jstree-node.jstree-hidden {
+  display: none;
+}
+.jstree-rtl .jstree-anchor {
+  padding: 0 1px 0 4px;
+}
+.jstree-rtl .jstree-anchor > .jstree-themeicon {
+  margin-left: 2px;
+  margin-right: 0;
+}
+.jstree-rtl .jstree-node {
+  margin-left: 0;
+}
+.jstree-rtl .jstree-container-ul > .jstree-node {
+  margin-right: 0;
+}
+.jstree-wholerow-ul {
+  position: relative;
+  display: inline-block;
+  min-width: 100%;
+}
+.jstree-wholerow-ul .jstree-leaf > .jstree-ocl {
+  cursor: pointer;
+}
+.jstree-wholerow-ul .jstree-anchor,
+.jstree-wholerow-ul .jstree-icon {
+  position: relative;
+}
+.jstree-wholerow-ul .jstree-wholerow {
+  width: 100%;
+  cursor: pointer;
+  position: absolute;
+  left: 0;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+.jstree-contextmenu .jstree-anchor {
+  -webkit-user-select: none;
+  /* disable selection/Copy of UIWebView */
+  -webkit-touch-callout: none;
+  /* disable the IOS popup when long-press on a link */
+}
+.vakata-context {
+  display: none;
+}
+.vakata-context,
+.vakata-context ul {
+  margin: 0;
+  padding: 2px;
+  position: absolute;
+  background: #f5f5f5;
+  border: 1px solid #979797;
+  box-shadow: 2px 2px 2px #999999;
+}
+.vakata-context ul {
+  list-style: none;
+  left: 100%;
+  margin-top: -2.7em;
+  margin-left: -4px;
+}
+.vakata-context .vakata-context-right ul {
+  left: auto;
+  right: 100%;
+  margin-left: auto;
+  margin-right: -4px;
+}
+.vakata-context li {
+  list-style: none;
+}
+.vakata-context li > a {
+  display: block;
+  padding: 0 2em 0 2em;
+  text-decoration: none;
+  width: auto;
+  color: black;
+  white-space: nowrap;
+  line-height: 2.4em;
+  text-shadow: 1px 1px 0 white;
+  border-radius: 1px;
+}
+.vakata-context li > a:hover {
+  position: relative;
+  background-color: #e8eff7;
+  box-shadow: 0 0 2px #0a6aa1;
+}
+.vakata-context li > a.vakata-context-parent {
+  background-image: url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAIORI4JlrqN1oMSnmmZDQUAOw==");
+  background-position: right center;
+  background-repeat: no-repeat;
+}
+.vakata-context li > a:focus {
+  outline: 0;
+}
+.vakata-context .vakata-context-hover > a {
+  position: relative;
+  background-color: #e8eff7;
+  box-shadow: 0 0 2px #0a6aa1;
+}
+.vakata-context .vakata-context-separator > a,
+.vakata-context .vakata-context-separator > a:hover {
+  background: white;
+  border: 0;
+  border-top: 1px solid #e2e3e3;
+  height: 1px;
+  min-height: 1px;
+  max-height: 1px;
+  padding: 0;
+  margin: 0 0 0 2.4em;
+  border-left: 1px solid #e0e0e0;
+  text-shadow: 0 0 0 transparent;
+  box-shadow: 0 0 0 transparent;
+  border-radius: 0;
+}
+.vakata-context .vakata-contextmenu-disabled a,
+.vakata-context .vakata-contextmenu-disabled a:hover {
+  color: silver;
+  background-color: transparent;
+  border: 0;
+  box-shadow: 0 0 0;
+}
+.vakata-context li > a > i {
+  text-decoration: none;
+  display: inline-block;
+  width: 2.4em;
+  height: 2.4em;
+  background: transparent;
+  margin: 0 0 0 -2em;
+  vertical-align: top;
+  text-align: center;
+  line-height: 2.4em;
+}
+.vakata-context li > a > i:empty {
+  width: 2.4em;
+  line-height: 2.4em;
+}
+.vakata-context li > a .vakata-contextmenu-sep {
+  display: inline-block;
+  width: 1px;
+  height: 2.4em;
+  background: white;
+  margin: 0 0.5em 0 0;
+  border-left: 1px solid #e2e3e3;
+}
+.vakata-context .vakata-contextmenu-shortcut {
+  font-size: 0.8em;
+  color: silver;
+  opacity: 0.5;
+  display: none;
+}
+.vakata-context-rtl ul {
+  left: auto;
+  right: 100%;
+  margin-left: auto;
+  margin-right: -4px;
+}
+.vakata-context-rtl li > a.vakata-context-parent {
+  background-image: url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAINjI+AC7rWHIsPtmoxLAA7");
+  background-position: left center;
+  background-repeat: no-repeat;
+}
+.vakata-context-rtl .vakata-context-separator > a {
+  margin: 0 2.4em 0 0;
+  border-left: 0;
+  border-right: 1px solid #e2e3e3;
+}
+.vakata-context-rtl .vakata-context-left ul {
+  right: auto;
+  left: 100%;
+  margin-left: -4px;
+  margin-right: auto;
+}
+.vakata-context-rtl li > a > i {
+  margin: 0 -2em 0 0;
+}
+.vakata-context-rtl li > a .vakata-contextmenu-sep {
+  margin: 0 0 0 0.5em;
+  border-left-color: white;
+  background: #e2e3e3;
+}
+#jstree-marker {
+  position: absolute;
+  top: 0;
+  left: 0;
+  margin: -5px 0 0 0;
+  padding: 0;
+  border-right: 0;
+  border-top: 5px solid transparent;
+  border-bottom: 5px solid transparent;
+  border-left: 5px solid;
+  width: 0;
+  height: 0;
+  font-size: 0;
+  line-height: 0;
+}
+#jstree-dnd {
+  line-height: 16px;
+  margin: 0;
+  padding: 4px;
+}
+#jstree-dnd .jstree-icon,
+#jstree-dnd .jstree-copy {
+  display: inline-block;
+  text-decoration: none;
+  margin: 0 2px 0 0;
+  padding: 0;
+  width: 16px;
+  height: 16px;
+}
+#jstree-dnd .jstree-ok {
+  background: green;
+}
+#jstree-dnd .jstree-er {
+  background: red;
+}
+#jstree-dnd .jstree-copy {
+  margin: 0 2px 0 2px;
+}
+.jstree-default .jstree-node,
+.jstree-default .jstree-icon {
+  background-repeat: no-repeat;
+  background-color: transparent;
+}
+.jstree-default .jstree-anchor,
+.jstree-default .jstree-animated,
+.jstree-default .jstree-wholerow {
+  transition: background-color 0.15s, box-shadow 0.15s;
+}
+.jstree-default .jstree-hovered {
+  background: #e7f4f9;
+  border-radius: 2px;
+  box-shadow: inset 0 0 1px #cccccc;
+}
+.jstree-default .jstree-context {
+  background: #e7f4f9;
+  border-radius: 2px;
+  box-shadow: inset 0 0 1px #cccccc;
+}
+.jstree-default .jstree-clicked {
+  background: #beebff;
+  border-radius: 2px;
+  box-shadow: inset 0 0 1px #999999;
+}
+.jstree-default .jstree-no-icons .jstree-anchor > .jstree-themeicon {
+  display: none;
+}
+.jstree-default .jstree-disabled {
+  background: transparent;
+  color: #666666;
+}
+.jstree-default .jstree-disabled.jstree-hovered {
+  background: transparent;
+  box-shadow: none;
+}
+.jstree-default .jstree-disabled.jstree-clicked {
+  background: #efefef;
+}
+.jstree-default .jstree-disabled > .jstree-icon {
+  opacity: 0.8;
+  filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'jstree-grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#jstree-grayscale");
+  /* Firefox 10+ */
+  filter: gray;
+  /* IE6-9 */
+  -webkit-filter: grayscale(100%);
+  /* Chrome 19+ & Safari 6+ */
+}
+.jstree-default .jstree-search {
+  font-style: italic;
+  color: #8b0000;
+  font-weight: bold;
+}
+.jstree-default .jstree-no-checkboxes .jstree-checkbox {
+  display: none !important;
+}
+.jstree-default.jstree-checkbox-no-clicked .jstree-clicked {
+  background: transparent;
+  box-shadow: none;
+}
+.jstree-default.jstree-checkbox-no-clicked .jstree-clicked.jstree-hovered {
+  background: #e7f4f9;
+}
+.jstree-default.jstree-checkbox-no-clicked > .jstree-wholerow-ul .jstree-wholerow-clicked {
+  background: transparent;
+}
+.jstree-default.jstree-checkbox-no-clicked > .jstree-wholerow-ul .jstree-wholerow-clicked.jstree-wholerow-hovered {
+  background: #e7f4f9;
+}
+.jstree-default > .jstree-striped {
+  min-width: 100%;
+  display: inline-block;
+  background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAMAAAB/qqA+AAAABlBMVEUAAAAAAAClZ7nPAAAAAnRSTlMNAMM9s3UAAAAXSURBVHjajcEBAQAAAIKg/H/aCQZ70AUBjAATb6YPDgAAAABJRU5ErkJggg==") left top repeat;
+}
+.jstree-default > .jstree-wholerow-ul .jstree-hovered,
+.jstree-default > .jstree-wholerow-ul .jstree-clicked {
+  background: transparent;
+  box-shadow: none;
+  border-radius: 0;
+}
+.jstree-default .jstree-wholerow {
+  -moz-box-sizing: border-box;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+}
+.jstree-default .jstree-wholerow-hovered {
+  background: #e7f4f9;
+}
+.jstree-default .jstree-wholerow-clicked {
+  background: #beebff;
+  background: -webkit-linear-gradient(top, #beebff 0%, #a8e4ff 100%);
+  background: linear-gradient(to bottom, #beebff 0%, #a8e4ff 100%);
+}
+.jstree-default .jstree-node {
+  min-height: 24px;
+  line-height: 24px;
+  margin-left: 24px;
+  min-width: 24px;
+}
+.jstree-default .jstree-anchor {
+  line-height: 24px;
+  height: 24px;
+}
+.jstree-default .jstree-icon {
+  width: 24px;
+  height: 24px;
+  line-height: 24px;
+}
+.jstree-default .jstree-icon:empty {
+  width: 24px;
+  height: 24px;
+  line-height: 24px;
+}
+.jstree-default.jstree-rtl .jstree-node {
+  margin-right: 24px;
+}
+.jstree-default .jstree-wholerow {
+  height: 24px;
+}
+.jstree-default .jstree-node,
+.jstree-default .jstree-icon {
+  background-image: url("32px.png");
+}
+.jstree-default .jstree-node {
+  background-position: -292px -4px;
+  background-repeat: repeat-y;
+}
+.jstree-default .jstree-last {
+  background: transparent;
+}
+.jstree-default .jstree-open > .jstree-ocl {
+  background-position: -132px -4px;
+}
+.jstree-default .jstree-closed > .jstree-ocl {
+  background-position: -100px -4px;
+}
+.jstree-default .jstree-leaf > .jstree-ocl {
+  background-position: -68px -4px;
+}
+.jstree-default .jstree-themeicon {
+  background-position: -260px -4px;
+}
+.jstree-default > .jstree-no-dots .jstree-node,
+.jstree-default > .jstree-no-dots .jstree-leaf > .jstree-ocl {
+  background: transparent;
+}
+.jstree-default > .jstree-no-dots .jstree-open > .jstree-ocl {
+  background-position: -36px -4px;
+}
+.jstree-default > .jstree-no-dots .jstree-closed > .jstree-ocl {
+  background-position: -4px -4px;
+}
+.jstree-default .jstree-disabled {
+  background: transparent;
+}
+.jstree-default .jstree-disabled.jstree-hovered {
+  background: transparent;
+}
+.jstree-default .jstree-disabled.jstree-clicked {
+  background: #efefef;
+}
+.jstree-default .jstree-checkbox {
+  background-position: -164px -4px;
+}
+.jstree-default .jstree-checkbox:hover {
+  background-position: -164px -36px;
+}
+.jstree-default.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox,
+.jstree-default .jstree-checked > .jstree-checkbox {
+  background-position: -228px -4px;
+}
+.jstree-default.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover,
+.jstree-default .jstree-checked > .jstree-checkbox:hover {
+  background-position: -228px -36px;
+}
+.jstree-default .jstree-anchor > .jstree-undetermined {
+  background-position: -196px -4px;
+}
+.jstree-default .jstree-anchor > .jstree-undetermined:hover {
+  background-position: -196px -36px;
+}
+.jstree-default .jstree-checkbox-disabled {
+  opacity: 0.8;
+  filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'jstree-grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#jstree-grayscale");
+  /* Firefox 10+ */
+  filter: gray;
+  /* IE6-9 */
+  -webkit-filter: grayscale(100%);
+  /* Chrome 19+ & Safari 6+ */
+}
+.jstree-default > .jstree-striped {
+  background-size: auto 48px;
+}
+.jstree-default.jstree-rtl .jstree-node {
+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");
+  background-position: 100% 1px;
+  background-repeat: repeat-y;
+}
+.jstree-default.jstree-rtl .jstree-last {
+  background: transparent;
+}
+.jstree-default.jstree-rtl .jstree-open > .jstree-ocl {
+  background-position: -132px -36px;
+}
+.jstree-default.jstree-rtl .jstree-closed > .jstree-ocl {
+  background-position: -100px -36px;
+}
+.jstree-default.jstree-rtl .jstree-leaf > .jstree-ocl {
+  background-position: -68px -36px;
+}
+.jstree-default.jstree-rtl > .jstree-no-dots .jstree-node,
+.jstree-default.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl {
+  background: transparent;
+}
+.jstree-default.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl {
+  background-position: -36px -36px;
+}
+.jstree-default.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl {
+  background-position: -4px -36px;
+}
+.jstree-default .jstree-themeicon-custom {
+  background-color: transparent;
+  background-image: none;
+  background-position: 0 0;
+}
+.jstree-default > .jstree-container-ul .jstree-loading > .jstree-ocl {
+  background: url("throbber.gif") center center no-repeat;
+}
+.jstree-default .jstree-file {
+  background: url("32px.png") -100px -68px no-repeat;
+}
+.jstree-default .jstree-folder {
+  background: url("32px.png") -260px -4px no-repeat;
+}
+.jstree-default > .jstree-container-ul > .jstree-node {
+  margin-left: 0;
+  margin-right: 0;
+}
+#jstree-dnd.jstree-default {
+  line-height: 24px;
+  padding: 0 4px;
+}
+#jstree-dnd.jstree-default .jstree-ok,
+#jstree-dnd.jstree-default .jstree-er {
+  background-image: url("32px.png");
+  background-repeat: no-repeat;
+  background-color: transparent;
+}
+#jstree-dnd.jstree-default i {
+  background: transparent;
+  width: 24px;
+  height: 24px;
+  line-height: 24px;
+}
+#jstree-dnd.jstree-default .jstree-ok {
+  background-position: -4px -68px;
+}
+#jstree-dnd.jstree-default .jstree-er {
+  background-position: -36px -68px;
+}
+.jstree-default .jstree-ellipsis {
+  overflow: hidden;
+}
+.jstree-default .jstree-ellipsis .jstree-anchor {
+  width: calc(100% - 29px);
+  text-overflow: ellipsis;
+  overflow: hidden;
+}
+.jstree-default .jstree-ellipsis.jstree-no-icons .jstree-anchor {
+  width: calc(100% - 5px);
+}
+.jstree-default.jstree-rtl .jstree-node {
+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");
+}
+.jstree-default.jstree-rtl .jstree-last {
+  background: transparent;
+}
+.jstree-default-small .jstree-node {
+  min-height: 18px;
+  line-height: 18px;
+  margin-left: 18px;
+  min-width: 18px;
+}
+.jstree-default-small .jstree-anchor {
+  line-height: 18px;
+  height: 18px;
+}
+.jstree-default-small .jstree-icon {
+  width: 18px;
+  height: 18px;
+  line-height: 18px;
+}
+.jstree-default-small .jstree-icon:empty {
+  width: 18px;
+  height: 18px;
+  line-height: 18px;
+}
+.jstree-default-small.jstree-rtl .jstree-node {
+  margin-right: 18px;
+}
+.jstree-default-small .jstree-wholerow {
+  height: 18px;
+}
+.jstree-default-small .jstree-node,
+.jstree-default-small .jstree-icon {
+  background-image: url("32px.png");
+}
+.jstree-default-small .jstree-node {
+  background-position: -295px -7px;
+  background-repeat: repeat-y;
+}
+.jstree-default-small .jstree-last {
+  background: transparent;
+}
+.jstree-default-small .jstree-open > .jstree-ocl {
+  background-position: -135px -7px;
+}
+.jstree-default-small .jstree-closed > .jstree-ocl {
+  background-position: -103px -7px;
+}
+.jstree-default-small .jstree-leaf > .jstree-ocl {
+  background-position: -71px -7px;
+}
+.jstree-default-small .jstree-themeicon {
+  background-position: -263px -7px;
+}
+.jstree-default-small > .jstree-no-dots .jstree-node,
+.jstree-default-small > .jstree-no-dots .jstree-leaf > .jstree-ocl {
+  background: transparent;
+}
+.jstree-default-small > .jstree-no-dots .jstree-open > .jstree-ocl {
+  background-position: -39px -7px;
+}
+.jstree-default-small > .jstree-no-dots .jstree-closed > .jstree-ocl {
+  background-position: -7px -7px;
+}
+.jstree-default-small .jstree-disabled {
+  background: transparent;
+}
+.jstree-default-small .jstree-disabled.jstree-hovered {
+  background: transparent;
+}
+.jstree-default-small .jstree-disabled.jstree-clicked {
+  background: #efefef;
+}
+.jstree-default-small .jstree-checkbox {
+  background-position: -167px -7px;
+}
+.jstree-default-small .jstree-checkbox:hover {
+  background-position: -167px -39px;
+}
+.jstree-default-small.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox,
+.jstree-default-small .jstree-checked > .jstree-checkbox {
+  background-position: -231px -7px;
+}
+.jstree-default-small.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover,
+.jstree-default-small .jstree-checked > .jstree-checkbox:hover {
+  background-position: -231px -39px;
+}
+.jstree-default-small .jstree-anchor > .jstree-undetermined {
+  background-position: -199px -7px;
+}
+.jstree-default-small .jstree-anchor > .jstree-undetermined:hover {
+  background-position: -199px -39px;
+}
+.jstree-default-small .jstree-checkbox-disabled {
+  opacity: 0.8;
+  filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'jstree-grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#jstree-grayscale");
+  /* Firefox 10+ */
+  filter: gray;
+  /* IE6-9 */
+  -webkit-filter: grayscale(100%);
+  /* Chrome 19+ & Safari 6+ */
+}
+.jstree-default-small > .jstree-striped {
+  background-size: auto 36px;
+}
+.jstree-default-small.jstree-rtl .jstree-node {
+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");
+  background-position: 100% 1px;
+  background-repeat: repeat-y;
+}
+.jstree-default-small.jstree-rtl .jstree-last {
+  background: transparent;
+}
+.jstree-default-small.jstree-rtl .jstree-open > .jstree-ocl {
+  background-position: -135px -39px;
+}
+.jstree-default-small.jstree-rtl .jstree-closed > .jstree-ocl {
+  background-position: -103px -39px;
+}
+.jstree-default-small.jstree-rtl .jstree-leaf > .jstree-ocl {
+  background-position: -71px -39px;
+}
+.jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-node,
+.jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl {
+  background: transparent;
+}
+.jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl {
+  background-position: -39px -39px;
+}
+.jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl {
+  background-position: -7px -39px;
+}
+.jstree-default-small .jstree-themeicon-custom {
+  background-color: transparent;
+  background-image: none;
+  background-position: 0 0;
+}
+.jstree-default-small > .jstree-container-ul .jstree-loading > .jstree-ocl {
+  background: url("throbber.gif") center center no-repeat;
+}
+.jstree-default-small .jstree-file {
+  background: url("32px.png") -103px -71px no-repeat;
+}
+.jstree-default-small .jstree-folder {
+  background: url("32px.png") -263px -7px no-repeat;
+}
+.jstree-default-small > .jstree-container-ul > .jstree-node {
+  margin-left: 0;
+  margin-right: 0;
+}
+#jstree-dnd.jstree-default-small {
+  line-height: 18px;
+  padding: 0 4px;
+}
+#jstree-dnd.jstree-default-small .jstree-ok,
+#jstree-dnd.jstree-default-small .jstree-er {
+  background-image: url("32px.png");
+  background-repeat: no-repeat;
+  background-color: transparent;
+}
+#jstree-dnd.jstree-default-small i {
+  background: transparent;
+  width: 18px;
+  height: 18px;
+  line-height: 18px;
+}
+#jstree-dnd.jstree-default-small .jstree-ok {
+  background-position: -7px -71px;
+}
+#jstree-dnd.jstree-default-small .jstree-er {
+  background-position: -39px -71px;
+}
+.jstree-default-small .jstree-ellipsis {
+  overflow: hidden;
+}
+.jstree-default-small .jstree-ellipsis .jstree-anchor {
+  width: calc(100% - 23px);
+  text-overflow: ellipsis;
+  overflow: hidden;
+}
+.jstree-default-small .jstree-ellipsis.jstree-no-icons .jstree-anchor {
+  width: calc(100% - 5px);
+}
+.jstree-default-small.jstree-rtl .jstree-node {
+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg==");
+}
+.jstree-default-small.jstree-rtl .jstree-last {
+  background: transparent;
+}
+.jstree-default-large .jstree-node {
+  min-height: 32px;
+  line-height: 32px;
+  margin-left: 32px;
+  min-width: 32px;
+}
+.jstree-default-large .jstree-anchor {
+  line-height: 32px;
+  height: 32px;
+}
+.jstree-default-large .jstree-icon {
+  width: 32px;
+  height: 32px;
+  line-height: 32px;
+}
+.jstree-default-large .jstree-icon:empty {
+  width: 32px;
+  height: 32px;
+  line-height: 32px;
+}
+.jstree-default-large.jstree-rtl .jstree-node {
+  margin-right: 32px;
+}
+.jstree-default-large .jstree-wholerow {
+  height: 32px;
+}
+.jstree-default-large .jstree-node,
+.jstree-default-large .jstree-icon {
+  background-image: url("32px.png");
+}
+.jstree-default-large .jstree-node {
+  background-position: -288px 0px;
+  background-repeat: repeat-y;
+}
+.jstree-default-large .jstree-last {
+  background: transparent;
+}
+.jstree-default-large .jstree-open > .jstree-ocl {
+  background-position: -128px 0px;
+}
+.jstree-default-large .jstree-closed > .jstree-ocl {
+  background-position: -96px 0px;
+}
+.jstree-default-large .jstree-leaf > .jstree-ocl {
+  background-position: -64px 0px;
+}
+.jstree-default-large .jstree-themeicon {
+  background-position: -256px 0px;
+}
+.jstree-default-large > .jstree-no-dots .jstree-node,
+.jstree-default-large > .jstree-no-dots .jstree-leaf > .jstree-ocl {
+  background: transparent;
+}
+.jstree-default-large > .jstree-no-dots .jstree-open > .jstree-ocl {
+  background-position: -32px 0px;
+}
+.jstree-default-large > .jstree-no-dots .jstree-closed > .jstree-ocl {
+  background-position: 0px 0px;
+}
+.jstree-default-large .jstree-disabled {
+  background: transparent;
+}
+.jstree-default-large .jstree-disabled.jstree-hovered {
+  background: transparent;
+}
+.jstree-default-large .jstree-disabled.jstree-clicked {
+  background: #efefef;
+}
+.jstree-default-large .jstree-checkbox {
+  background-position: -160px 0px;
+}
+.jstree-default-large .jstree-checkbox:hover {
+  background-position: -160px -32px;
+}
+.jstree-default-large.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox,
+.jstree-default-large .jstree-checked > .jstree-checkbox {
+  background-position: -224px 0px;
+}
+.jstree-default-large.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover,
+.jstree-default-large .jstree-checked > .jstree-checkbox:hover {
+  background-position: -224px -32px;
+}
+.jstree-default-large .jstree-anchor > .jstree-undetermined {
+  background-position: -192px 0px;
+}
+.jstree-default-large .jstree-anchor > .jstree-undetermined:hover {
+  background-position: -192px -32px;
+}
+.jstree-default-large .jstree-checkbox-disabled {
+  opacity: 0.8;
+  filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'jstree-grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#jstree-grayscale");
+  /* Firefox 10+ */
+  filter: gray;
+  /* IE6-9 */
+  -webkit-filter: grayscale(100%);
+  /* Chrome 19+ & Safari 6+ */
+}
+.jstree-default-large > .jstree-striped {
+  background-size: auto 64px;
+}
+.jstree-default-large.jstree-rtl .jstree-node {
+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");
+  background-position: 100% 1px;
+  background-repeat: repeat-y;
+}
+.jstree-default-large.jstree-rtl .jstree-last {
+  background: transparent;
+}
+.jstree-default-large.jstree-rtl .jstree-open > .jstree-ocl {
+  background-position: -128px -32px;
+}
+.jstree-default-large.jstree-rtl .jstree-closed > .jstree-ocl {
+  background-position: -96px -32px;
+}
+.jstree-default-large.jstree-rtl .jstree-leaf > .jstree-ocl {
+  background-position: -64px -32px;
+}
+.jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-node,
+.jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl {
+  background: transparent;
+}
+.jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl {
+  background-position: -32px -32px;
+}
+.jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl {
+  background-position: 0px -32px;
+}
+.jstree-default-large .jstree-themeicon-custom {
+  background-color: transparent;
+  background-image: none;
+  background-position: 0 0;
+}
+.jstree-default-large > .jstree-container-ul .jstree-loading > .jstree-ocl {
+  background: url("throbber.gif") center center no-repeat;
+}
+.jstree-default-large .jstree-file {
+  background: url("32px.png") -96px -64px no-repeat;
+}
+.jstree-default-large .jstree-folder {
+  background: url("32px.png") -256px 0px no-repeat;
+}
+.jstree-default-large > .jstree-container-ul > .jstree-node {
+  margin-left: 0;
+  margin-right: 0;
+}
+#jstree-dnd.jstree-default-large {
+  line-height: 32px;
+  padding: 0 4px;
+}
+#jstree-dnd.jstree-default-large .jstree-ok,
+#jstree-dnd.jstree-default-large .jstree-er {
+  background-image: url("32px.png");
+  background-repeat: no-repeat;
+  background-color: transparent;
+}
+#jstree-dnd.jstree-default-large i {
+  background: transparent;
+  width: 32px;
+  height: 32px;
+  line-height: 32px;
+}
+#jstree-dnd.jstree-default-large .jstree-ok {
+  background-position: 0px -64px;
+}
+#jstree-dnd.jstree-default-large .jstree-er {
+  background-position: -32px -64px;
+}
+.jstree-default-large .jstree-ellipsis {
+  overflow: hidden;
+}
+.jstree-default-large .jstree-ellipsis .jstree-anchor {
+  width: calc(100% - 37px);
+  text-overflow: ellipsis;
+  overflow: hidden;
+}
+.jstree-default-large .jstree-ellipsis.jstree-no-icons .jstree-anchor {
+  width: calc(100% - 5px);
+}
+.jstree-default-large.jstree-rtl .jstree-node {
+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg==");
+}
+.jstree-default-large.jstree-rtl .jstree-last {
+  background: transparent;
+}
+@media (max-width: 768px) {
+  #jstree-dnd.jstree-dnd-responsive {
+    line-height: 40px;
+    font-weight: bold;
+    font-size: 1.1em;
+    text-shadow: 1px 1px white;
+  }
+  #jstree-dnd.jstree-dnd-responsive > i {
+    background: transparent;
+    width: 40px;
+    height: 40px;
+  }
+  #jstree-dnd.jstree-dnd-responsive > .jstree-ok {
+    background-image: url("40px.png");
+    background-position: 0 -200px;
+    background-size: 120px 240px;
+  }
+  #jstree-dnd.jstree-dnd-responsive > .jstree-er {
+    background-image: url("40px.png");
+    background-position: -40px -200px;
+    background-size: 120px 240px;
+  }
+  #jstree-marker.jstree-dnd-responsive {
+    border-left-width: 10px;
+    border-top-width: 10px;
+    border-bottom-width: 10px;
+    margin-top: -10px;
+  }
+}
+@media (max-width: 768px) {
+  .jstree-default-responsive {
+    /*
+	.jstree-open > .jstree-ocl,
+	.jstree-closed > .jstree-ocl { border-radius:20px; background-color:white; }
+	*/
+  }
+  .jstree-default-responsive .jstree-icon {
+    background-image: url("40px.png");
+  }
+  .jstree-default-responsive .jstree-node,
+  .jstree-default-responsive .jstree-leaf > .jstree-ocl {
+    background: transparent;
+  }
+  .jstree-default-responsive .jstree-node {
+    min-height: 40px;
+    line-height: 40px;
+    margin-left: 40px;
+    min-width: 40px;
+    white-space: nowrap;
+  }
+  .jstree-default-responsive .jstree-anchor {
+    line-height: 40px;
+    height: 40px;
+  }
+  .jstree-default-responsive .jstree-icon,
+  .jstree-default-responsive .jstree-icon:empty {
+    width: 40px;
+    height: 40px;
+    line-height: 40px;
+  }
+  .jstree-default-responsive > .jstree-container-ul > .jstree-node {
+    margin-left: 0;
+  }
+  .jstree-default-responsive.jstree-rtl .jstree-node {
+    margin-left: 0;
+    margin-right: 40px;
+    background: transparent;
+  }
+  .jstree-default-responsive.jstree-rtl .jstree-container-ul > .jstree-node {
+    margin-right: 0;
+  }
+  .jstree-default-responsive .jstree-ocl,
+  .jstree-default-responsive .jstree-themeicon,
+  .jstree-default-responsive .jstree-checkbox {
+    background-size: 120px 240px;
+  }
+  .jstree-default-responsive .jstree-leaf > .jstree-ocl,
+  .jstree-default-responsive.jstree-rtl .jstree-leaf > .jstree-ocl {
+    background: transparent;
+  }
+  .jstree-default-responsive .jstree-open > .jstree-ocl {
+    background-position: 0 0px !important;
+  }
+  .jstree-default-responsive .jstree-closed > .jstree-ocl {
+    background-position: 0 -40px !important;
+  }
+  .jstree-default-responsive.jstree-rtl .jstree-closed > .jstree-ocl {
+    background-position: -40px 0px !important;
+  }
+  .jstree-default-responsive .jstree-themeicon {
+    background-position: -40px -40px;
+  }
+  .jstree-default-responsive .jstree-checkbox,
+  .jstree-default-responsive .jstree-checkbox:hover {
+    background-position: -40px -80px;
+  }
+  .jstree-default-responsive.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox,
+  .jstree-default-responsive.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover,
+  .jstree-default-responsive .jstree-checked > .jstree-checkbox,
+  .jstree-default-responsive .jstree-checked > .jstree-checkbox:hover {
+    background-position: 0 -80px;
+  }
+  .jstree-default-responsive .jstree-anchor > .jstree-undetermined,
+  .jstree-default-responsive .jstree-anchor > .jstree-undetermined:hover {
+    background-position: 0 -120px;
+  }
+  .jstree-default-responsive .jstree-anchor {
+    font-weight: bold;
+    font-size: 1.1em;
+    text-shadow: 1px 1px white;
+  }
+  .jstree-default-responsive > .jstree-striped {
+    background: transparent;
+  }
+  .jstree-default-responsive .jstree-wholerow {
+    border-top: 1px solid rgba(255, 255, 255, 0.7);
+    border-bottom: 1px solid rgba(64, 64, 64, 0.2);
+    background: #ebebeb;
+    height: 40px;
+  }
+  .jstree-default-responsive .jstree-wholerow-hovered {
+    background: #e7f4f9;
+  }
+  .jstree-default-responsive .jstree-wholerow-clicked {
+    background: #beebff;
+  }
+  .jstree-default-responsive .jstree-children .jstree-last > .jstree-wholerow {
+    box-shadow: inset 0 -6px 3px -5px #666666;
+  }
+  .jstree-default-responsive .jstree-children .jstree-open > .jstree-wholerow {
+    box-shadow: inset 0 6px 3px -5px #666666;
+    border-top: 0;
+  }
+  .jstree-default-responsive .jstree-children .jstree-open + .jstree-open {
+    box-shadow: none;
+  }
+  .jstree-default-responsive .jstree-node,
+  .jstree-default-responsive .jstree-icon,
+  .jstree-default-responsive .jstree-node > .jstree-ocl,
+  .jstree-default-responsive .jstree-themeicon,
+  .jstree-default-responsive .jstree-checkbox {
+    background-image: url("40px.png");
+    background-size: 120px 240px;
+  }
+  .jstree-default-responsive .jstree-node {
+    background-position: -80px 0;
+    background-repeat: repeat-y;
+  }
+  .jstree-default-responsive .jstree-last {
+    background: transparent;
+  }
+  .jstree-default-responsive .jstree-leaf > .jstree-ocl {
+    background-position: -40px -120px;
+  }
+  .jstree-default-responsive .jstree-last > .jstree-ocl {
+    background-position: -40px -160px;
+  }
+  .jstree-default-responsive .jstree-themeicon-custom {
+    background-color: transparent;
+    background-image: none;
+    background-position: 0 0;
+  }
+  .jstree-default-responsive .jstree-file {
+    background: url("40px.png") 0 -160px no-repeat;
+    background-size: 120px 240px;
+  }
+  .jstree-default-responsive .jstree-folder {
+    background: url("40px.png") -40px -40px no-repeat;
+    background-size: 120px 240px;
+  }
+  .jstree-default-responsive > .jstree-container-ul > .jstree-node {
+    margin-left: 0;
+    margin-right: 0;
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vakata-jstree-3.3.5/src/themes/default/style.less	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,22 @@
+/* jsTree default theme */
+@theme-name:				default;
+@hovered-bg-color:			#e7f4f9;
+@hovered-shadow-color:		#cccccc;
+@disabled-color:			#666666;
+@disabled-bg-color:			#efefef;
+@clicked-bg-color:			#beebff;
+@clicked-shadow-color:		#999999;
+@clicked-gradient-color-1:	#beebff;
+@clicked-gradient-color-2:	#a8e4ff;
+@search-result-color:		#8b0000;
+@mobile-wholerow-bg-color:	#ebebeb;
+@mobile-wholerow-shadow:	#666666;
+@mobile-wholerow-bordert:	rgba(255,255,255,0.7);
+@mobile-wholerow-borderb:	rgba(64,64,64,0.2);
+@responsive:				true;
+@image-path:				"";
+@base-height:				40px;
+
+@import "../mixins.less";
+@import "../base.less";
+@import "../main.less";
\ No newline at end of file
Binary file vakata-jstree-3.3.5/src/themes/default/throbber.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vakata-jstree-3.3.5/src/themes/main.less	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,77 @@
+.jstree-@{theme-name} {
+	.jstree-node,
+	.jstree-icon { background-repeat:no-repeat; background-color:transparent; }
+	.jstree-anchor,
+	.jstree-animated,
+	.jstree-wholerow { transition:background-color 0.15s, box-shadow 0.15s; }
+	.jstree-hovered { background:@hovered-bg-color; border-radius:2px; box-shadow:inset 0 0 1px @hovered-shadow-color; }
+	.jstree-context { background:@hovered-bg-color; border-radius:2px; box-shadow:inset 0 0 1px @hovered-shadow-color; }
+	.jstree-clicked { background:@clicked-bg-color; border-radius:2px; box-shadow:inset 0 0 1px @clicked-shadow-color; }
+	.jstree-no-icons .jstree-anchor > .jstree-themeicon { display:none; }
+	.jstree-disabled {
+		background:transparent; color:@disabled-color;
+		&.jstree-hovered { background:transparent; box-shadow:none; }
+		&.jstree-clicked { background:@disabled-bg-color; }
+		> .jstree-icon { opacity:0.8; filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'jstree-grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#jstree-grayscale"); /* Firefox 10+ */ filter: gray; /* IE6-9 */ -webkit-filter: grayscale(100%); /* Chrome 19+ & Safari 6+ */ }
+	}
+	// search
+	.jstree-search { font-style:italic; color:@search-result-color; font-weight:bold; }
+	// checkboxes
+	.jstree-no-checkboxes .jstree-checkbox { display:none !important; }
+	&.jstree-checkbox-no-clicked {
+		.jstree-clicked {
+			background:transparent;
+			box-shadow:none;
+			&.jstree-hovered { background:@hovered-bg-color; }
+		}
+		> .jstree-wholerow-ul .jstree-wholerow-clicked {
+			background:transparent;
+			&.jstree-wholerow-hovered { background:@hovered-bg-color; }
+		}
+	}
+	// stripes
+	> .jstree-striped { min-width:100%; display:inline-block; background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAMAAAB/qqA+AAAABlBMVEUAAAAAAAClZ7nPAAAAAnRSTlMNAMM9s3UAAAAXSURBVHjajcEBAQAAAIKg/H/aCQZ70AUBjAATb6YPDgAAAABJRU5ErkJggg==") left top repeat; }
+	// wholerow
+	> .jstree-wholerow-ul .jstree-hovered,
+	> .jstree-wholerow-ul .jstree-clicked { background:transparent; box-shadow:none; border-radius:0; }
+	.jstree-wholerow { -moz-box-sizing:border-box; -webkit-box-sizing:border-box; box-sizing:border-box; }
+	.jstree-wholerow-hovered { background:@hovered-bg-color; }
+	.jstree-wholerow-clicked { .gradient(@clicked-gradient-color-1, @clicked-gradient-color-2); }
+}
+
+// theme variants
+.jstree-@{theme-name} {
+	.jstree-theme(24px, "@{image-path}32px.png", 32px);
+	&.jstree-rtl .jstree-node { background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg=="); }
+	&.jstree-rtl .jstree-last { background:transparent; }
+}
+.jstree-@{theme-name}-small {
+	.jstree-theme(18px, "@{image-path}32px.png", 32px);
+	&.jstree-rtl .jstree-node { background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg=="); }
+	&.jstree-rtl .jstree-last { background:transparent; }
+}
+.jstree-@{theme-name}-large {
+	.jstree-theme(32px, "@{image-path}32px.png", 32px);
+	&.jstree-rtl .jstree-node { background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg=="); }
+	&.jstree-rtl .jstree-last { background:transparent; }
+}
+
+// mobile theme attempt
+@media (max-width: 768px) {
+	#jstree-dnd.jstree-dnd-responsive when (@responsive = true) {
+		line-height:@base-height; font-weight:bold; font-size:1.1em; text-shadow:1px 1px white;
+		> i { background:transparent; width:@base-height; height:@base-height; }
+		> .jstree-ok { background-image:url("@{image-path}@{base-height}.png"); background-position:0 -(@base-height * 5); background-size:(@base-height * 3) (@base-height * 6); }
+		> .jstree-er { background-image:url("@{image-path}@{base-height}.png"); background-position:-(@base-height * 1) -(@base-height * 5); background-size:(@base-height * 3) (@base-height * 6); }
+	}
+	#jstree-marker.jstree-dnd-responsive when (@responsive = true) {
+		border-left-width:10px;
+		border-top-width:10px;
+		border-bottom-width:10px;
+		margin-top:-10px;
+	}
+}
+
+.jstree-@{theme-name}-responsive when (@responsive = true) {
+	@import "responsive.less";
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vakata-jstree-3.3.5/src/themes/mixins.less	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,105 @@
+.gradient (@color1; @color2) {
+	background:@color1;
+	background: -webkit-linear-gradient(top, @color1 0%,@color2 100%);
+	background: linear-gradient(to bottom, @color1 0%,@color2 100%);
+}
+
+.jstree-theme (@base-height, @image, @image-height) {
+	@correction: (@image-height - @base-height) / 2;
+
+	.jstree-node { min-height:@base-height; line-height:@base-height; margin-left:@base-height; min-width:@base-height; }
+	.jstree-anchor { line-height:@base-height; height:@base-height; }
+	.jstree-icon { width:@base-height; height:@base-height; line-height:@base-height; }
+	.jstree-icon:empty { width:@base-height; height:@base-height; line-height:@base-height; }
+	&.jstree-rtl .jstree-node { margin-right:@base-height; }
+	.jstree-wholerow { height:@base-height; }
+
+	.jstree-node,
+	.jstree-icon { background-image:url("@{image}"); }
+	.jstree-node { background-position:-(@image-height * 9 + @correction) -@correction; background-repeat:repeat-y; }
+	.jstree-last { background:transparent; }
+
+	.jstree-open > .jstree-ocl { background-position:-(@image-height * 4 + @correction) -@correction; }
+	.jstree-closed > .jstree-ocl { background-position:-(@image-height * 3 + @correction) -@correction; }
+	.jstree-leaf > .jstree-ocl { background-position:-(@image-height * 2 + @correction) -@correction; }
+
+	.jstree-themeicon { background-position:-(@image-height * 8 + @correction) -@correction; }
+
+	> .jstree-no-dots {
+		.jstree-node,
+		.jstree-leaf > .jstree-ocl { background:transparent; }
+		.jstree-open > .jstree-ocl { background-position:-(@image-height * 1 + @correction) -@correction; }
+		.jstree-closed > .jstree-ocl { background-position:-@correction -@correction; }
+	}
+
+	.jstree-disabled {
+		background:transparent;
+		&.jstree-hovered {
+			background:transparent;
+		}
+		&.jstree-clicked {
+			background:#efefef;
+		}
+	}
+
+	.jstree-checkbox {
+		background-position:-(@image-height * 5 + @correction) -@correction;
+		&:hover { background-position:-(@image-height * 5 + @correction) -(@image-height * 1 + @correction); }
+	}
+
+	&.jstree-checkbox-selection .jstree-clicked, .jstree-checked {
+		> .jstree-checkbox {
+			background-position:-(@image-height * 7 + @correction) -@correction;
+			&:hover { background-position:-(@image-height * 7 + @correction) -(@image-height * 1 + @correction); }
+		}
+	}
+	.jstree-anchor {
+		> .jstree-undetermined {
+			background-position:-(@image-height * 6 + @correction) -@correction;
+			&:hover {
+				background-position:-(@image-height * 6 + @correction) -(@image-height * 1 + @correction);
+			}
+		}
+	}
+	.jstree-checkbox-disabled { opacity:0.8; filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'jstree-grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#jstree-grayscale"); /* Firefox 10+ */ filter: gray; /* IE6-9 */ -webkit-filter: grayscale(100%); /* Chrome 19+ & Safari 6+ */ }
+
+	> .jstree-striped { background-size:auto (@base-height * 2); }
+
+	&.jstree-rtl {
+		.jstree-node { background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg=="); background-position: 100% 1px; background-repeat:repeat-y; }
+		.jstree-last { background:transparent; }
+		.jstree-open > .jstree-ocl { background-position:-(@image-height * 4 + @correction) -(@image-height * 1 + @correction); }
+		.jstree-closed > .jstree-ocl { background-position:-(@image-height * 3 + @correction) -(@image-height * 1 + @correction); }
+		.jstree-leaf > .jstree-ocl { background-position:-(@image-height * 2 + @correction) -(@image-height * 1 + @correction); }
+		> .jstree-no-dots {
+			.jstree-node,
+			.jstree-leaf > .jstree-ocl { background:transparent; }
+			.jstree-open > .jstree-ocl { background-position:-(@image-height * 1 + @correction) -(@image-height * 1 + @correction); }
+			.jstree-closed > .jstree-ocl { background-position:-@correction -(@image-height * 1 + @correction); }
+		}
+	}
+	.jstree-themeicon-custom { background-color:transparent; background-image:none; background-position:0 0; }
+
+	> .jstree-container-ul .jstree-loading > .jstree-ocl { background:url("@{image-path}throbber.gif") center center no-repeat; }
+
+	.jstree-file { background:url("@{image}") -(@image-height * 3 + @correction) -(@image-height * 2 + @correction) no-repeat; }
+	.jstree-folder { background:url("@{image}") -(@image-height * 8 + @correction) -(@correction) no-repeat; }
+
+	> .jstree-container-ul > .jstree-node { margin-left:0; margin-right:0; }
+
+	// drag'n'drop
+	#jstree-dnd& {
+		line-height:@base-height; padding:0 4px;
+		.jstree-ok,
+		.jstree-er { background-image:url("@{image-path}32px.png"); background-repeat:no-repeat; background-color:transparent; }
+		i { background:transparent; width:@base-height; height:@base-height; line-height:@base-height; }
+		.jstree-ok { background-position: -(@correction) -(@image-height * 2 + @correction); }
+		.jstree-er { background-position: -(@image-height * 1 + @correction) -(@image-height * 2 + @correction); }
+	}
+
+	// ellipsis
+	.jstree-ellipsis { overflow: hidden; }
+	// base height + PADDINGS!
+	.jstree-ellipsis .jstree-anchor { width: calc(100% ~"-" (@base-height + 5px)); text-overflow: ellipsis; overflow: hidden; }
+	.jstree-ellipsis.jstree-no-icons .jstree-anchor { width: calc(100% ~"-" 5px); }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vakata-jstree-3.3.5/src/themes/responsive.less	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,67 @@
+@media (max-width: 768px) {
+	// background image
+	.jstree-icon { background-image:url("@{image-path}@{base-height}.png"); }
+
+	.jstree-node,
+	.jstree-leaf > .jstree-ocl { background:transparent; }
+
+	.jstree-node { min-height:@base-height; line-height:@base-height; margin-left:@base-height; min-width:@base-height; white-space:nowrap; }
+	.jstree-anchor { line-height:@base-height; height:@base-height; }
+	.jstree-icon, .jstree-icon:empty { width:@base-height; height:@base-height; line-height:@base-height; }
+
+	> .jstree-container-ul > .jstree-node { margin-left:0; }
+	&.jstree-rtl .jstree-node { margin-left:0; margin-right:@base-height; background:transparent; }
+	&.jstree-rtl .jstree-container-ul > .jstree-node { margin-right:0; }
+
+	.jstree-ocl,
+	.jstree-themeicon,
+	.jstree-checkbox { background-size:(@base-height * 3) (@base-height * 6); }
+	.jstree-leaf > .jstree-ocl,
+	&.jstree-rtl .jstree-leaf > .jstree-ocl { background:transparent; }
+	.jstree-open > .jstree-ocl { background-position:0 0px !important; }
+	.jstree-closed > .jstree-ocl { background-position:0 -(@base-height * 1) !important; }
+	&.jstree-rtl .jstree-closed > .jstree-ocl { background-position:-(@base-height * 1) 0px !important; }
+
+	.jstree-themeicon { background-position:-(@base-height * 1) -(@base-height * 1); }
+
+	.jstree-checkbox, .jstree-checkbox:hover { background-position:-(@base-height * 1) -(@base-height * 2); }
+	&.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox,
+	&.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover,
+	.jstree-checked > .jstree-checkbox,
+	.jstree-checked > .jstree-checkbox:hover { background-position:0 -(@base-height * 2); }
+	.jstree-anchor > .jstree-undetermined, .jstree-anchor > .jstree-undetermined:hover { background-position:0 -(@base-height * 3); }
+
+	.jstree-anchor { font-weight:bold; font-size:1.1em; text-shadow:1px 1px white; }
+
+	> .jstree-striped { background:transparent; }
+	.jstree-wholerow { border-top:1px solid @mobile-wholerow-bordert; border-bottom:1px solid @mobile-wholerow-borderb; background:@mobile-wholerow-bg-color; height:@base-height; }
+	.jstree-wholerow-hovered { background:@hovered-bg-color; }
+	.jstree-wholerow-clicked { background:@clicked-bg-color; }
+
+	// thanks to PHOTONUI
+	.jstree-children .jstree-last > .jstree-wholerow { box-shadow: inset 0 -6px 3px -5px @mobile-wholerow-shadow; }
+	.jstree-children .jstree-open > .jstree-wholerow { box-shadow: inset 0 6px 3px -5px @mobile-wholerow-shadow; border-top:0; }
+	.jstree-children .jstree-open + .jstree-open { box-shadow:none; }
+
+	// experiment
+	.jstree-node,
+	.jstree-icon,
+	.jstree-node > .jstree-ocl,
+	.jstree-themeicon,
+	.jstree-checkbox { background-image:url("@{image-path}@{base-height}.png"); background-size:(@base-height * 3) (@base-height * 6); }
+
+	.jstree-node { background-position:-(@base-height * 2) 0; background-repeat:repeat-y; }
+	.jstree-last { background:transparent; }
+	.jstree-leaf > .jstree-ocl { background-position:-(@base-height * 1) -(@base-height * 3); }
+	.jstree-last > .jstree-ocl { background-position:-(@base-height * 1) -(@base-height * 4); }
+	/*
+	.jstree-open > .jstree-ocl,
+	.jstree-closed > .jstree-ocl { border-radius:20px; background-color:white; }
+	*/
+
+	.jstree-themeicon-custom { background-color:transparent; background-image:none; background-position:0 0; }
+	.jstree-file { background:url("@{image-path}@{base-height}.png") 0 -(@base-height * 4) no-repeat; background-size:(@base-height * 3) (@base-height * 6); }
+	.jstree-folder { background:url("@{image-path}@{base-height}.png") -(@base-height * 1) -(@base-height * 1) no-repeat; background-size:(@base-height * 3) (@base-height * 6); }
+
+	> .jstree-container-ul > .jstree-node { margin-left:0; margin-right:0; }
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vakata-jstree-3.3.5/src/vakata-jstree.js	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,38 @@
+(function (factory) {
+	"use strict";
+	if (typeof define === 'function' && define.amd) {
+		define('jstree.checkbox', ['jquery','jstree'], factory);
+	}
+	else if(typeof exports === 'object') {
+		factory(require('jquery'), require('jstree'));
+	}
+	else {
+		factory(jQuery);
+	}
+}(function ($, undefined) {
+	"use strict";
+	if(document.registerElement && Object && Object.create) {
+		var proto = Object.create(HTMLElement.prototype);
+		proto.createdCallback = function () {
+			var c = { core : {}, plugins : [] }, i;
+			for(i in $.jstree.plugins) {
+				if($.jstree.plugins.hasOwnProperty(i) && this.attributes[i]) {
+					c.plugins.push(i);
+					if(this.getAttribute(i) && JSON.parse(this.getAttribute(i))) {
+						c[i] = JSON.parse(this.getAttribute(i));
+					}
+				}
+			}
+			for(i in $.jstree.defaults.core) {
+				if($.jstree.defaults.core.hasOwnProperty(i) && this.attributes[i]) {
+					c.core[i] = JSON.parse(this.getAttribute(i)) || this.getAttribute(i);
+				}
+			}
+			$(this).jstree(c);
+		};
+		// proto.attributeChangedCallback = function (name, previous, value) { };
+		try {
+			document.registerElement("vakata-jstree", { prototype: proto });
+		} catch(ignore) { }
+	}
+}));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vakata-jstree-3.3.5/test/unit/index.html	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>Basic Test Suite</title>
+  <!-- Load local QUnit. -->
+  <link rel="stylesheet" href="libs/qunit.css" media="screen">
+  <script src="libs/qunit.js"></script>
+</head>
+<body>
+  <div id="qunit"></div>
+  <div id="qunit-fixture">this had better work.</div>
+  <!-- Load local lib and tests. -->
+  <script src="test.js"></script>
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vakata-jstree-3.3.5/test/unit/libs/qunit.css	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,244 @@
+/**
+ * QUnit v1.12.0 - A JavaScript Unit Testing Framework
+ *
+ * http://qunitjs.com
+ *
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+/** Font Family and Sizes */
+
+#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult {
+  font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial, sans-serif;
+}
+
+#qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; }
+#qunit-tests { font-size: smaller; }
+
+
+/** Resets */
+
+#qunit-tests, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult, #qunit-modulefilter {
+  margin: 0;
+  padding: 0;
+}
+
+
+/** Header */
+
+#qunit-header {
+  padding: 0.5em 0 0.5em 1em;
+
+  color: #8699a4;
+  background-color: #0d3349;
+
+  font-size: 1.5em;
+  line-height: 1em;
+  font-weight: normal;
+
+  border-radius: 5px 5px 0 0;
+  -moz-border-radius: 5px 5px 0 0;
+  -webkit-border-top-right-radius: 5px;
+  -webkit-border-top-left-radius: 5px;
+}
+
+#qunit-header a {
+  text-decoration: none;
+  color: #c2ccd1;
+}
+
+#qunit-header a:hover,
+#qunit-header a:focus {
+  color: #fff;
+}
+
+#qunit-testrunner-toolbar label {
+  display: inline-block;
+  padding: 0 .5em 0 .1em;
+}
+
+#qunit-banner {
+  height: 5px;
+}
+
+#qunit-testrunner-toolbar {
+  padding: 0.5em 0 0.5em 2em;
+  color: #5E740B;
+  background-color: #eee;
+  overflow: hidden;
+}
+
+#qunit-userAgent {
+  padding: 0.5em 0 0.5em 2.5em;
+  background-color: #2b81af;
+  color: #fff;
+  text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px;
+}
+
+#qunit-modulefilter-container {
+  float: right;
+}
+
+/** Tests: Pass/Fail */
+
+#qunit-tests {
+  list-style-position: inside;
+}
+
+#qunit-tests li {
+  padding: 0.4em 0.5em 0.4em 2.5em;
+  border-bottom: 1px solid #fff;
+  list-style-position: inside;
+}
+
+#qunit-tests.hidepass li.pass, #qunit-tests.hidepass li.running  {
+  display: none;
+}
+
+#qunit-tests li strong {
+  cursor: pointer;
+}
+
+#qunit-tests li a {
+  padding: 0.5em;
+  color: #c2ccd1;
+  text-decoration: none;
+}
+#qunit-tests li a:hover,
+#qunit-tests li a:focus {
+  color: #000;
+}
+
+#qunit-tests li .runtime {
+  float: right;
+  font-size: smaller;
+}
+
+.qunit-assert-list {
+  margin-top: 0.5em;
+  padding: 0.5em;
+
+  background-color: #fff;
+
+  border-radius: 5px;
+  -moz-border-radius: 5px;
+  -webkit-border-radius: 5px;
+}
+
+.qunit-collapsed {
+  display: none;
+}
+
+#qunit-tests table {
+  border-collapse: collapse;
+  margin-top: .2em;
+}
+
+#qunit-tests th {
+  text-align: right;
+  vertical-align: top;
+  padding: 0 .5em 0 0;
+}
+
+#qunit-tests td {
+  vertical-align: top;
+}
+
+#qunit-tests pre {
+  margin: 0;
+  white-space: pre-wrap;
+  word-wrap: break-word;
+}
+
+#qunit-tests del {
+  background-color: #e0f2be;
+  color: #374e0c;
+  text-decoration: none;
+}
+
+#qunit-tests ins {
+  background-color: #ffcaca;
+  color: #500;
+  text-decoration: none;
+}
+
+/*** Test Counts */
+
+#qunit-tests b.counts                       { color: black; }
+#qunit-tests b.passed                       { color: #5E740B; }
+#qunit-tests b.failed                       { color: #710909; }
+
+#qunit-tests li li {
+  padding: 5px;
+  background-color: #fff;
+  border-bottom: none;
+  list-style-position: inside;
+}
+
+/*** Passing Styles */
+
+#qunit-tests li li.pass {
+  color: #3c510c;
+  background-color: #fff;
+  border-left: 10px solid #C6E746;
+}
+
+#qunit-tests .pass                          { color: #528CE0; background-color: #D2E0E6; }
+#qunit-tests .pass .test-name               { color: #366097; }
+
+#qunit-tests .pass .test-actual,
+#qunit-tests .pass .test-expected           { color: #999999; }
+
+#qunit-banner.qunit-pass                    { background-color: #C6E746; }
+
+/*** Failing Styles */
+
+#qunit-tests li li.fail {
+  color: #710909;
+  background-color: #fff;
+  border-left: 10px solid #EE5757;
+  white-space: pre;
+}
+
+#qunit-tests > li:last-child {
+  border-radius: 0 0 5px 5px;
+  -moz-border-radius: 0 0 5px 5px;
+  -webkit-border-bottom-right-radius: 5px;
+  -webkit-border-bottom-left-radius: 5px;
+}
+
+#qunit-tests .fail                          { color: #000000; background-color: #EE5757; }
+#qunit-tests .fail .test-name,
+#qunit-tests .fail .module-name             { color: #000000; }
+
+#qunit-tests .fail .test-actual             { color: #EE5757; }
+#qunit-tests .fail .test-expected           { color: green;   }
+
+#qunit-banner.qunit-fail                    { background-color: #EE5757; }
+
+
+/** Result */
+
+#qunit-testresult {
+  padding: 0.5em 0.5em 0.5em 2.5em;
+
+  color: #2b81af;
+  background-color: #D2E0E6;
+
+  border-bottom: 1px solid white;
+}
+#qunit-testresult .module-name {
+  font-weight: bold;
+}
+
+/** Fixture */
+
+#qunit-fixture {
+  position: absolute;
+  top: -10000px;
+  left: -10000px;
+  width: 1000px;
+  height: 1000px;
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vakata-jstree-3.3.5/test/unit/libs/qunit.js	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,2212 @@
+/**
+ * QUnit v1.12.0 - A JavaScript Unit Testing Framework
+ *
+ * http://qunitjs.com
+ *
+ * Copyright 2013 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * https://jquery.org/license/
+ */
+
+(function( window ) {
+
+var QUnit,
+  assert,
+  config,
+  onErrorFnPrev,
+  testId = 0,
+  fileName = (sourceFromStacktrace( 0 ) || "" ).replace(/(:\d+)+\)?/, "").replace(/.+\//, ""),
+  toString = Object.prototype.toString,
+  hasOwn = Object.prototype.hasOwnProperty,
+  // Keep a local reference to Date (GH-283)
+  Date = window.Date,
+  setTimeout = window.setTimeout,
+  defined = {
+    setTimeout: typeof window.setTimeout !== "undefined",
+    sessionStorage: (function() {
+      var x = "qunit-test-string";
+      try {
+        sessionStorage.setItem( x, x );
+        sessionStorage.removeItem( x );
+        return true;
+      } catch( e ) {
+        return false;
+      }
+    }())
+  },
+  /**
+   * Provides a normalized error string, correcting an issue
+   * with IE 7 (and prior) where Error.prototype.toString is
+   * not properly implemented
+   *
+   * Based on http://es5.github.com/#x15.11.4.4
+   *
+   * @param {String|Error} error
+   * @return {String} error message
+   */
+  errorString = function( error ) {
+    var name, message,
+      errorString = error.toString();
+    if ( errorString.substring( 0, 7 ) === "[object" ) {
+      name = error.name ? error.name.toString() : "Error";
+      message = error.message ? error.message.toString() : "";
+      if ( name && message ) {
+        return name + ": " + message;
+      } else if ( name ) {
+        return name;
+      } else if ( message ) {
+        return message;
+      } else {
+        return "Error";
+      }
+    } else {
+      return errorString;
+    }
+  },
+  /**
+   * Makes a clone of an object using only Array or Object as base,
+   * and copies over the own enumerable properties.
+   *
+   * @param {Object} obj
+   * @return {Object} New object with only the own properties (recursively).
+   */
+  objectValues = function( obj ) {
+    // Grunt 0.3.x uses an older version of jshint that still has jshint/jshint#392.
+    /*jshint newcap: false */
+    var key, val,
+      vals = QUnit.is( "array", obj ) ? [] : {};
+    for ( key in obj ) {
+      if ( hasOwn.call( obj, key ) ) {
+        val = obj[key];
+        vals[key] = val === Object(val) ? objectValues(val) : val;
+      }
+    }
+    return vals;
+  };
+
+function Test( settings ) {
+  extend( this, settings );
+  this.assertions = [];
+  this.testNumber = ++Test.count;
+}
+
+Test.count = 0;
+
+Test.prototype = {
+  init: function() {
+    var a, b, li,
+      tests = id( "qunit-tests" );
+
+    if ( tests ) {
+      b = document.createElement( "strong" );
+      b.innerHTML = this.nameHtml;
+
+      // `a` initialized at top of scope
+      a = document.createElement( "a" );
+      a.innerHTML = "Rerun";
+      a.href = QUnit.url({ testNumber: this.testNumber });
+
+      li = document.createElement( "li" );
+      li.appendChild( b );
+      li.appendChild( a );
+      li.className = "running";
+      li.id = this.id = "qunit-test-output" + testId++;
+
+      tests.appendChild( li );
+    }
+  },
+  setup: function() {
+    if (
+      // Emit moduleStart when we're switching from one module to another
+      this.module !== config.previousModule ||
+        // They could be equal (both undefined) but if the previousModule property doesn't
+        // yet exist it means this is the first test in a suite that isn't wrapped in a
+        // module, in which case we'll just emit a moduleStart event for 'undefined'.
+        // Without this, reporters can get testStart before moduleStart  which is a problem.
+        !hasOwn.call( config, "previousModule" )
+    ) {
+      if ( hasOwn.call( config, "previousModule" ) ) {
+        runLoggingCallbacks( "moduleDone", QUnit, {
+          name: config.previousModule,
+          failed: config.moduleStats.bad,
+          passed: config.moduleStats.all - config.moduleStats.bad,
+          total: config.moduleStats.all
+        });
+      }
+      config.previousModule = this.module;
+      config.moduleStats = { all: 0, bad: 0 };
+      runLoggingCallbacks( "moduleStart", QUnit, {
+        name: this.module
+      });
+    }
+
+    config.current = this;
+
+    this.testEnvironment = extend({
+      setup: function() {},
+      teardown: function() {}
+    }, this.moduleTestEnvironment );
+
+    this.started = +new Date();
+    runLoggingCallbacks( "testStart", QUnit, {
+      name: this.testName,
+      module: this.module
+    });
+
+    /*jshint camelcase:false */
+
+
+    /**
+     * Expose the current test environment.
+     *
+     * @deprecated since 1.12.0: Use QUnit.config.current.testEnvironment instead.
+     */
+    QUnit.current_testEnvironment = this.testEnvironment;
+
+    /*jshint camelcase:true */
+
+    if ( !config.pollution ) {
+      saveGlobal();
+    }
+    if ( config.notrycatch ) {
+      this.testEnvironment.setup.call( this.testEnvironment, QUnit.assert );
+      return;
+    }
+    try {
+      this.testEnvironment.setup.call( this.testEnvironment, QUnit.assert );
+    } catch( e ) {
+      QUnit.pushFailure( "Setup failed on " + this.testName + ": " + ( e.message || e ), extractStacktrace( e, 1 ) );
+    }
+  },
+  run: function() {
+    config.current = this;
+
+    var running = id( "qunit-testresult" );
+
+    if ( running ) {
+      running.innerHTML = "Running: <br/>" + this.nameHtml;
+    }
+
+    if ( this.async ) {
+      QUnit.stop();
+    }
+
+    this.callbackStarted = +new Date();
+
+    if ( config.notrycatch ) {
+      this.callback.call( this.testEnvironment, QUnit.assert );
+      this.callbackRuntime = +new Date() - this.callbackStarted;
+      return;
+    }
+
+    try {
+      this.callback.call( this.testEnvironment, QUnit.assert );
+      this.callbackRuntime = +new Date() - this.callbackStarted;
+    } catch( e ) {
+      this.callbackRuntime = +new Date() - this.callbackStarted;
+
+      QUnit.pushFailure( "Died on test #" + (this.assertions.length + 1) + " " + this.stack + ": " + ( e.message || e ), extractStacktrace( e, 0 ) );
+      // else next test will carry the responsibility
+      saveGlobal();
+
+      // Restart the tests if they're blocking
+      if ( config.blocking ) {
+        QUnit.start();
+      }
+    }
+  },
+  teardown: function() {
+    config.current = this;
+    if ( config.notrycatch ) {
+      if ( typeof this.callbackRuntime === "undefined" ) {
+        this.callbackRuntime = +new Date() - this.callbackStarted;
+      }
+      this.testEnvironment.teardown.call( this.testEnvironment, QUnit.assert );
+      return;
+    } else {
+      try {
+        this.testEnvironment.teardown.call( this.testEnvironment, QUnit.assert );
+      } catch( e ) {
+        QUnit.pushFailure( "Teardown failed on " + this.testName + ": " + ( e.message || e ), extractStacktrace( e, 1 ) );
+      }
+    }
+    checkPollution();
+  },
+  finish: function() {
+    config.current = this;
+    if ( config.requireExpects && this.expected === null ) {
+      QUnit.pushFailure( "Expected number of assertions to be defined, but expect() was not called.", this.stack );
+    } else if ( this.expected !== null && this.expected !== this.assertions.length ) {
+      QUnit.pushFailure( "Expected " + this.expected + " assertions, but " + this.assertions.length + " were run", this.stack );
+    } else if ( this.expected === null && !this.assertions.length ) {
+      QUnit.pushFailure( "Expected at least one assertion, but none were run - call expect(0) to accept zero assertions.", this.stack );
+    }
+
+    var i, assertion, a, b, time, li, ol,
+      test = this,
+      good = 0,
+      bad = 0,
+      tests = id( "qunit-tests" );
+
+    this.runtime = +new Date() - this.started;
+    config.stats.all += this.assertions.length;
+    config.moduleStats.all += this.assertions.length;
+
+    if ( tests ) {
+      ol = document.createElement( "ol" );
+      ol.className = "qunit-assert-list";
+
+      for ( i = 0; i < this.assertions.length; i++ ) {
+        assertion = this.assertions[i];
+
+        li = document.createElement( "li" );
+        li.className = assertion.result ? "pass" : "fail";
+        li.innerHTML = assertion.message || ( assertion.result ? "okay" : "failed" );
+        ol.appendChild( li );
+
+        if ( assertion.result ) {
+          good++;
+        } else {
+          bad++;
+          config.stats.bad++;
+          config.moduleStats.bad++;
+        }
+      }
+
+      // store result when possible
+      if ( QUnit.config.reorder && defined.sessionStorage ) {
+        if ( bad ) {
+          sessionStorage.setItem( "qunit-test-" + this.module + "-" + this.testName, bad );
+        } else {
+          sessionStorage.removeItem( "qunit-test-" + this.module + "-" + this.testName );
+        }
+      }
+
+      if ( bad === 0 ) {
+        addClass( ol, "qunit-collapsed" );
+      }
+
+      // `b` initialized at top of scope
+      b = document.createElement( "strong" );
+      b.innerHTML = this.nameHtml + " <b class='counts'>(<b class='failed'>" + bad + "</b>, <b class='passed'>" + good + "</b>, " + this.assertions.length + ")</b>";
+
+      addEvent(b, "click", function() {
+        var next = b.parentNode.lastChild,
+          collapsed = hasClass( next, "qunit-collapsed" );
+        ( collapsed ? removeClass : addClass )( next, "qunit-collapsed" );
+      });
+
+      addEvent(b, "dblclick", function( e ) {
+        var target = e && e.target ? e.target : window.event.srcElement;
+        if ( target.nodeName.toLowerCase() === "span" || target.nodeName.toLowerCase() === "b" ) {
+          target = target.parentNode;
+        }
+        if ( window.location && target.nodeName.toLowerCase() === "strong" ) {
+          window.location = QUnit.url({ testNumber: test.testNumber });
+        }
+      });
+
+      // `time` initialized at top of scope
+      time = document.createElement( "span" );
+      time.className = "runtime";
+      time.innerHTML = this.runtime + " ms";
+
+      // `li` initialized at top of scope
+      li = id( this.id );
+      li.className = bad ? "fail" : "pass";
+      li.removeChild( li.firstChild );
+      a = li.firstChild;
+      li.appendChild( b );
+      li.appendChild( a );
+      li.appendChild( time );
+      li.appendChild( ol );
+
+    } else {
+      for ( i = 0; i < this.assertions.length; i++ ) {
+        if ( !this.assertions[i].result ) {
+          bad++;
+          config.stats.bad++;
+          config.moduleStats.bad++;
+        }
+      }
+    }
+
+    runLoggingCallbacks( "testDone", QUnit, {
+      name: this.testName,
+      module: this.module,
+      failed: bad,
+      passed: this.assertions.length - bad,
+      total: this.assertions.length,
+      duration: this.runtime
+    });
+
+    QUnit.reset();
+
+    config.current = undefined;
+  },
+
+  queue: function() {
+    var bad,
+      test = this;
+
+    synchronize(function() {
+      test.init();
+    });
+    function run() {
+      // each of these can by async
+      synchronize(function() {
+        test.setup();
+      });
+      synchronize(function() {
+        test.run();
+      });
+      synchronize(function() {
+        test.teardown();
+      });
+      synchronize(function() {
+        test.finish();
+      });
+    }
+
+    // `bad` initialized at top of scope
+    // defer when previous test run passed, if storage is available
+    bad = QUnit.config.reorder && defined.sessionStorage &&
+            +sessionStorage.getItem( "qunit-test-" + this.module + "-" + this.testName );
+
+    if ( bad ) {
+      run();
+    } else {
+      synchronize( run, true );
+    }
+  }
+};
+
+// Root QUnit object.
+// `QUnit` initialized at top of scope
+QUnit = {
+
+  // call on start of module test to prepend name to all tests
+  module: function( name, testEnvironment ) {
+    config.currentModule = name;
+    config.currentModuleTestEnvironment = testEnvironment;
+    config.modules[name] = true;
+  },
+
+  asyncTest: function( testName, expected, callback ) {
+    if ( arguments.length === 2 ) {
+      callback = expected;
+      expected = null;
+    }
+
+    QUnit.test( testName, expected, callback, true );
+  },
+
+  test: function( testName, expected, callback, async ) {
+    var test,
+      nameHtml = "<span class='test-name'>" + escapeText( testName ) + "</span>";
+
+    if ( arguments.length === 2 ) {
+      callback = expected;
+      expected = null;
+    }
+
+    if ( config.currentModule ) {
+      nameHtml = "<span class='module-name'>" + escapeText( config.currentModule ) + "</span>: " + nameHtml;
+    }
+
+    test = new Test({
+      nameHtml: nameHtml,
+      testName: testName,
+      expected: expected,
+      async: async,
+      callback: callback,
+      module: config.currentModule,
+      moduleTestEnvironment: config.currentModuleTestEnvironment,
+      stack: sourceFromStacktrace( 2 )
+    });
+
+    if ( !validTest( test ) ) {
+      return;
+    }
+
+    test.queue();
+  },
+
+  // Specify the number of expected assertions to guarantee that failed test (no assertions are run at all) don't slip through.
+  expect: function( asserts ) {
+    if (arguments.length === 1) {
+      config.current.expected = asserts;
+    } else {
+      return config.current.expected;
+    }
+  },
+
+  start: function( count ) {
+    // QUnit hasn't been initialized yet.
+    // Note: RequireJS (et al) may delay onLoad
+    if ( config.semaphore === undefined ) {
+      QUnit.begin(function() {
+        // This is triggered at the top of QUnit.load, push start() to the event loop, to allow QUnit.load to finish first
+        setTimeout(function() {
+          QUnit.start( count );
+        });
+      });
+      return;
+    }
+
+    config.semaphore -= count || 1;
+    // don't start until equal number of stop-calls
+    if ( config.semaphore > 0 ) {
+      return;
+    }
+    // ignore if start is called more often then stop
+    if ( config.semaphore < 0 ) {
+      config.semaphore = 0;
+      QUnit.pushFailure( "Called start() while already started (QUnit.config.semaphore was 0 already)", null, sourceFromStacktrace(2) );
+      return;
+    }
+    // A slight delay, to avoid any current callbacks
+    if ( defined.setTimeout ) {
+      setTimeout(function() {
+        if ( config.semaphore > 0 ) {
+          return;
+        }
+        if ( config.timeout ) {
+          clearTimeout( config.timeout );
+        }
+
+        config.blocking = false;
+        process( true );
+      }, 13);
+    } else {
+      config.blocking = false;
+      process( true );
+    }
+  },
+
+  stop: function( count ) {
+    config.semaphore += count || 1;
+    config.blocking = true;
+
+    if ( config.testTimeout && defined.setTimeout ) {
+      clearTimeout( config.timeout );
+      config.timeout = setTimeout(function() {
+        QUnit.ok( false, "Test timed out" );
+        config.semaphore = 1;
+        QUnit.start();
+      }, config.testTimeout );
+    }
+  }
+};
+
+// `assert` initialized at top of scope
+// Assert helpers
+// All of these must either call QUnit.push() or manually do:
+// - runLoggingCallbacks( "log", .. );
+// - config.current.assertions.push({ .. });
+// We attach it to the QUnit object *after* we expose the public API,
+// otherwise `assert` will become a global variable in browsers (#341).
+assert = {
+  /**
+   * Asserts rough true-ish result.
+   * @name ok
+   * @function
+   * @example ok( "asdfasdf".length > 5, "There must be at least 5 chars" );
+   */
+  ok: function( result, msg ) {
+    if ( !config.current ) {
+      throw new Error( "ok() assertion outside test context, was " + sourceFromStacktrace(2) );
+    }
+    result = !!result;
+    msg = msg || (result ? "okay" : "failed" );
+
+    var source,
+      details = {
+        module: config.current.module,
+        name: config.current.testName,
+        result: result,
+        message: msg
+      };
+
+    msg = "<span class='test-message'>" + escapeText( msg ) + "</span>";
+
+    if ( !result ) {
+      source = sourceFromStacktrace( 2 );
+      if ( source ) {
+        details.source = source;
+        msg += "<table><tr class='test-source'><th>Source: </th><td><pre>" + escapeText( source ) + "</pre></td></tr></table>";
+      }
+    }
+    runLoggingCallbacks( "log", QUnit, details );
+    config.current.assertions.push({
+      result: result,
+      message: msg
+    });
+  },
+
+  /**
+   * Assert that the first two arguments are equal, with an optional message.
+   * Prints out both actual and expected values.
+   * @name equal
+   * @function
+   * @example equal( format( "Received {0} bytes.", 2), "Received 2 bytes.", "format() replaces {0} with next argument" );
+   */
+  equal: function( actual, expected, message ) {
+    /*jshint eqeqeq:false */
+    QUnit.push( expected == actual, actual, expected, message );
+  },
+
+  /**
+   * @name notEqual
+   * @function
+   */
+  notEqual: function( actual, expected, message ) {
+    /*jshint eqeqeq:false */
+    QUnit.push( expected != actual, actual, expected, message );
+  },
+
+  /**
+   * @name propEqual
+   * @function
+   */
+  propEqual: function( actual, expected, message ) {
+    actual = objectValues(actual);
+    expected = objectValues(expected);
+    QUnit.push( QUnit.equiv(actual, expected), actual, expected, message );
+  },
+
+  /**
+   * @name notPropEqual
+   * @function
+   */
+  notPropEqual: function( actual, expected, message ) {
+    actual = objectValues(actual);
+    expected = objectValues(expected);
+    QUnit.push( !QUnit.equiv(actual, expected), actual, expected, message );
+  },
+
+  /**
+   * @name deepEqual
+   * @function
+   */
+  deepEqual: function( actual, expected, message ) {
+    QUnit.push( QUnit.equiv(actual, expected), actual, expected, message );
+  },
+
+  /**
+   * @name notDeepEqual
+   * @function
+   */
+  notDeepEqual: function( actual, expected, message ) {
+    QUnit.push( !QUnit.equiv(actual, expected), actual, expected, message );
+  },
+
+  /**
+   * @name strictEqual
+   * @function
+   */
+  strictEqual: function( actual, expected, message ) {
+    QUnit.push( expected === actual, actual, expected, message );
+  },
+
+  /**
+   * @name notStrictEqual
+   * @function
+   */
+  notStrictEqual: function( actual, expected, message ) {
+    QUnit.push( expected !== actual, actual, expected, message );
+  },
+
+  "throws": function( block, expected, message ) {
+    var actual,
+      expectedOutput = expected,
+      ok = false;
+
+    // 'expected' is optional
+    if ( typeof expected === "string" ) {
+      message = expected;
+      expected = null;
+    }
+
+    config.current.ignoreGlobalErrors = true;
+    try {
+      block.call( config.current.testEnvironment );
+    } catch (e) {
+      actual = e;
+    }
+    config.current.ignoreGlobalErrors = false;
+
+    if ( actual ) {
+      // we don't want to validate thrown error
+      if ( !expected ) {
+        ok = true;
+        expectedOutput = null;
+      // expected is a regexp
+      } else if ( QUnit.objectType( expected ) === "regexp" ) {
+        ok = expected.test( errorString( actual ) );
+      // expected is a constructor
+      } else if ( actual instanceof expected ) {
+        ok = true;
+      // expected is a validation function which returns true is validation passed
+      } else if ( expected.call( {}, actual ) === true ) {
+        expectedOutput = null;
+        ok = true;
+      }
+
+      QUnit.push( ok, actual, expectedOutput, message );
+    } else {
+      QUnit.pushFailure( message, null, "No exception was thrown." );
+    }
+  }
+};
+
+/**
+ * @deprecated since 1.8.0
+ * Kept assertion helpers in root for backwards compatibility.
+ */
+extend( QUnit, assert );
+
+/**
+ * @deprecated since 1.9.0
+ * Kept root "raises()" for backwards compatibility.
+ * (Note that we don't introduce assert.raises).
+ */
+QUnit.raises = assert[ "throws" ];
+
+/**
+ * @deprecated since 1.0.0, replaced with error pushes since 1.3.0
+ * Kept to avoid TypeErrors for undefined methods.
+ */
+QUnit.equals = function() {
+  QUnit.push( false, false, false, "QUnit.equals has been deprecated since 2009 (e88049a0), use QUnit.equal instead" );
+};
+QUnit.same = function() {
+  QUnit.push( false, false, false, "QUnit.same has been deprecated since 2009 (e88049a0), use QUnit.deepEqual instead" );
+};
+
+// We want access to the constructor's prototype
+(function() {
+  function F() {}
+  F.prototype = QUnit;
+  QUnit = new F();
+  // Make F QUnit's constructor so that we can add to the prototype later
+  QUnit.constructor = F;
+}());
+
+/**
+ * Config object: Maintain internal state
+ * Later exposed as QUnit.config
+ * `config` initialized at top of scope
+ */
+config = {
+  // The queue of tests to run
+  queue: [],
+
+  // block until document ready
+  blocking: true,
+
+  // when enabled, show only failing tests
+  // gets persisted through sessionStorage and can be changed in UI via checkbox
+  hidepassed: false,
+
+  // by default, run previously failed tests first
+  // very useful in combination with "Hide passed tests" checked
+  reorder: true,
+
+  // by default, modify document.title when suite is done
+  altertitle: true,
+
+  // when enabled, all tests must call expect()
+  requireExpects: false,
+
+  // add checkboxes that are persisted in the query-string
+  // when enabled, the id is set to `true` as a `QUnit.config` property
+  urlConfig: [
+    {
+      id: "noglobals",
+      label: "Check for Globals",
+      tooltip: "Enabling this will test if any test introduces new properties on the `window` object. Stored as query-strings."
+    },
+    {
+      id: "notrycatch",
+      label: "No try-catch",
+      tooltip: "Enabling this will run tests outside of a try-catch block. Makes debugging exceptions in IE reasonable. Stored as query-strings."
+    }
+  ],
+
+  // Set of all modules.
+  modules: {},
+
+  // logging callback queues
+  begin: [],
+  done: [],
+  log: [],
+  testStart: [],
+  testDone: [],
+  moduleStart: [],
+  moduleDone: []
+};
+
+// Export global variables, unless an 'exports' object exists,
+// in that case we assume we're in CommonJS (dealt with on the bottom of the script)
+if ( typeof exports === "undefined" ) {
+  extend( window, QUnit.constructor.prototype );
+
+  // Expose QUnit object
+  window.QUnit = QUnit;
+}
+
+// Initialize more QUnit.config and QUnit.urlParams
+(function() {
+  var i,
+    location = window.location || { search: "", protocol: "file:" },
+    params = location.search.slice( 1 ).split( "&" ),
+    length = params.length,
+    urlParams = {},
+    current;
+
+  if ( params[ 0 ] ) {
+    for ( i = 0; i < length; i++ ) {
+      current = params[ i ].split( "=" );
+      current[ 0 ] = decodeURIComponent( current[ 0 ] );
+      // allow just a key to turn on a flag, e.g., test.html?noglobals
+      current[ 1 ] = current[ 1 ] ? decodeURIComponent( current[ 1 ] ) : true;
+      urlParams[ current[ 0 ] ] = current[ 1 ];
+    }
+  }
+
+  QUnit.urlParams = urlParams;
+
+  // String search anywhere in moduleName+testName
+  config.filter = urlParams.filter;
+
+  // Exact match of the module name
+  config.module = urlParams.module;
+
+  config.testNumber = parseInt( urlParams.testNumber, 10 ) || null;
+
+  // Figure out if we're running the tests from a server or not
+  QUnit.isLocal = location.protocol === "file:";
+}());
+
+// Extend QUnit object,
+// these after set here because they should not be exposed as global functions
+extend( QUnit, {
+  assert: assert,
+
+  config: config,
+
+  // Initialize the configuration options
+  init: function() {
+    extend( config, {
+      stats: { all: 0, bad: 0 },
+      moduleStats: { all: 0, bad: 0 },
+      started: +new Date(),
+      updateRate: 1000,
+      blocking: false,
+      autostart: true,
+      autorun: false,
+      filter: "",
+      queue: [],
+      semaphore: 1
+    });
+
+    var tests, banner, result,
+      qunit = id( "qunit" );
+
+    if ( qunit ) {
+      qunit.innerHTML =
+        "<h1 id='qunit-header'>" + escapeText( document.title ) + "</h1>" +
+        "<h2 id='qunit-banner'></h2>" +
+        "<div id='qunit-testrunner-toolbar'></div>" +
+        "<h2 id='qunit-userAgent'></h2>" +
+        "<ol id='qunit-tests'></ol>";
+    }
+
+    tests = id( "qunit-tests" );
+    banner = id( "qunit-banner" );
+    result = id( "qunit-testresult" );
+
+    if ( tests ) {
+      tests.innerHTML = "";
+    }
+
+    if ( banner ) {
+      banner.className = "";
+    }
+
+    if ( result ) {
+      result.parentNode.removeChild( result );
+    }
+
+    if ( tests ) {
+      result = document.createElement( "p" );
+      result.id = "qunit-testresult";
+      result.className = "result";
+      tests.parentNode.insertBefore( result, tests );
+      result.innerHTML = "Running...<br/>&nbsp;";
+    }
+  },
+
+  // Resets the test setup. Useful for tests that modify the DOM.
+  /*
+  DEPRECATED: Use multiple tests instead of resetting inside a test.
+  Use testStart or testDone for custom cleanup.
+  This method will throw an error in 2.0, and will be removed in 2.1
+  */
+  reset: function() {
+    var fixture = id( "qunit-fixture" );
+    if ( fixture ) {
+      fixture.innerHTML = config.fixture;
+    }
+  },
+
+  // Trigger an event on an element.
+  // @example triggerEvent( document.body, "click" );
+  triggerEvent: function( elem, type, event ) {
+    if ( document.createEvent ) {
+      event = document.createEvent( "MouseEvents" );
+      event.initMouseEvent(type, true, true, elem.ownerDocument.defaultView,
+        0, 0, 0, 0, 0, false, false, false, false, 0, null);
+
+      elem.dispatchEvent( event );
+    } else if ( elem.fireEvent ) {
+      elem.fireEvent( "on" + type );
+    }
+  },
+
+  // Safe object type checking
+  is: function( type, obj ) {
+    return QUnit.objectType( obj ) === type;
+  },
+
+  objectType: function( obj ) {
+    if ( typeof obj === "undefined" ) {
+        return "undefined";
+    // consider: typeof null === object
+    }
+    if ( obj === null ) {
+        return "null";
+    }
+
+    var match = toString.call( obj ).match(/^\[object\s(.*)\]$/),
+      type = match && match[1] || "";
+
+    switch ( type ) {
+      case "Number":
+        if ( isNaN(obj) ) {
+          return "nan";
+        }
+        return "number";
+      case "String":
+      case "Boolean":
+      case "Array":
+      case "Date":
+      case "RegExp":
+      case "Function":
+        return type.toLowerCase();
+    }
+    if ( typeof obj === "object" ) {
+      return "object";
+    }
+    return undefined;
+  },
+
+  push: function( result, actual, expected, message ) {
+    if ( !config.current ) {
+      throw new Error( "assertion outside test context, was " + sourceFromStacktrace() );
+    }
+
+    var output, source,
+      details = {
+        module: config.current.module,
+        name: config.current.testName,
+        result: result,
+        message: message,
+        actual: actual,
+        expected: expected
+      };
+
+    message = escapeText( message ) || ( result ? "okay" : "failed" );
+    message = "<span class='test-message'>" + message + "</span>";
+    output = message;
+
+    if ( !result ) {
+      expected = escapeText( QUnit.jsDump.parse(expected) );
+      actual = escapeText( QUnit.jsDump.parse(actual) );
+      output += "<table><tr class='test-expected'><th>Expected: </th><td><pre>" + expected + "</pre></td></tr>";
+
+      if ( actual !== expected ) {
+        output += "<tr class='test-actual'><th>Result: </th><td><pre>" + actual + "</pre></td></tr>";
+        output += "<tr class='test-diff'><th>Diff: </th><td><pre>" + QUnit.diff( expected, actual ) + "</pre></td></tr>";
+      }
+
+      source = sourceFromStacktrace();
+
+      if ( source ) {
+        details.source = source;
+        output += "<tr class='test-source'><th>Source: </th><td><pre>" + escapeText( source ) + "</pre></td></tr>";
+      }
+
+      output += "</table>";
+    }
+
+    runLoggingCallbacks( "log", QUnit, details );
+
+    config.current.assertions.push({
+      result: !!result,
+      message: output
+    });
+  },
+
+  pushFailure: function( message, source, actual ) {
+    if ( !config.current ) {
+      throw new Error( "pushFailure() assertion outside test context, was " + sourceFromStacktrace(2) );
+    }
+
+    var output,
+      details = {
+        module: config.current.module,
+        name: config.current.testName,
+        result: false,
+        message: message
+      };
+
+    message = escapeText( message ) || "error";
+    message = "<span class='test-message'>" + message + "</span>";
+    output = message;
+
+    output += "<table>";
+
+    if ( actual ) {
+      output += "<tr class='test-actual'><th>Result: </th><td><pre>" + escapeText( actual ) + "</pre></td></tr>";
+    }
+
+    if ( source ) {
+      details.source = source;
+      output += "<tr class='test-source'><th>Source: </th><td><pre>" + escapeText( source ) + "</pre></td></tr>";
+    }
+
+    output += "</table>";
+
+    runLoggingCallbacks( "log", QUnit, details );
+
+    config.current.assertions.push({
+      result: false,
+      message: output
+    });
+  },
+
+  url: function( params ) {
+    params = extend( extend( {}, QUnit.urlParams ), params );
+    var key,
+      querystring = "?";
+
+    for ( key in params ) {
+      if ( hasOwn.call( params, key ) ) {
+        querystring += encodeURIComponent( key ) + "=" +
+          encodeURIComponent( params[ key ] ) + "&";
+      }
+    }
+    return window.location.protocol + "//" + window.location.host +
+      window.location.pathname + querystring.slice( 0, -1 );
+  },
+
+  extend: extend,
+  id: id,
+  addEvent: addEvent,
+  addClass: addClass,
+  hasClass: hasClass,
+  removeClass: removeClass
+  // load, equiv, jsDump, diff: Attached later
+});
+
+/**
+ * @deprecated: Created for backwards compatibility with test runner that set the hook function
+ * into QUnit.{hook}, instead of invoking it and passing the hook function.
+ * QUnit.constructor is set to the empty F() above so that we can add to it's prototype here.
+ * Doing this allows us to tell if the following methods have been overwritten on the actual
+ * QUnit object.
+ */
+extend( QUnit.constructor.prototype, {
+
+  // Logging callbacks; all receive a single argument with the listed properties
+  // run test/logs.html for any related changes
+  begin: registerLoggingCallback( "begin" ),
+
+  // done: { failed, passed, total, runtime }
+  done: registerLoggingCallback( "done" ),
+
+  // log: { result, actual, expected, message }
+  log: registerLoggingCallback( "log" ),
+
+  // testStart: { name }
+  testStart: registerLoggingCallback( "testStart" ),
+
+  // testDone: { name, failed, passed, total, duration }
+  testDone: registerLoggingCallback( "testDone" ),
+
+  // moduleStart: { name }
+  moduleStart: registerLoggingCallback( "moduleStart" ),
+
+  // moduleDone: { name, failed, passed, total }
+  moduleDone: registerLoggingCallback( "moduleDone" )
+});
+
+if ( typeof document === "undefined" || document.readyState === "complete" ) {
+  config.autorun = true;
+}
+
+QUnit.load = function() {
+  runLoggingCallbacks( "begin", QUnit, {} );
+
+  // Initialize the config, saving the execution queue
+  var banner, filter, i, label, len, main, ol, toolbar, userAgent, val,
+    urlConfigCheckboxesContainer, urlConfigCheckboxes, moduleFilter,
+    numModules = 0,
+    moduleNames = [],
+    moduleFilterHtml = "",
+    urlConfigHtml = "",
+    oldconfig = extend( {}, config );
+
+  QUnit.init();
+  extend(config, oldconfig);
+
+  config.blocking = false;
+
+  len = config.urlConfig.length;
+
+  for ( i = 0; i < len; i++ ) {
+    val = config.urlConfig[i];
+    if ( typeof val === "string" ) {
+      val = {
+        id: val,
+        label: val,
+        tooltip: "[no tooltip available]"
+      };
+    }
+    config[ val.id ] = QUnit.urlParams[ val.id ];
+    urlConfigHtml += "<input id='qunit-urlconfig-" + escapeText( val.id ) +
+      "' name='" + escapeText( val.id ) +
+      "' type='checkbox'" + ( config[ val.id ] ? " checked='checked'" : "" ) +
+      " title='" + escapeText( val.tooltip ) +
+      "'><label for='qunit-urlconfig-" + escapeText( val.id ) +
+      "' title='" + escapeText( val.tooltip ) + "'>" + val.label + "</label>";
+  }
+  for ( i in config.modules ) {
+    if ( config.modules.hasOwnProperty( i ) ) {
+      moduleNames.push(i);
+    }
+  }
+  numModules = moduleNames.length;
+  moduleNames.sort( function( a, b ) {
+    return a.localeCompare( b );
+  });
+  moduleFilterHtml += "<label for='qunit-modulefilter'>Module: </label><select id='qunit-modulefilter' name='modulefilter'><option value='' " +
+    ( config.module === undefined  ? "selected='selected'" : "" ) +
+    ">< All Modules ></option>";
+
+
+  for ( i = 0; i < numModules; i++) {
+      moduleFilterHtml += "<option value='" + escapeText( encodeURIComponent(moduleNames[i]) ) + "' " +
+        ( config.module === moduleNames[i] ? "selected='selected'" : "" ) +
+        ">" + escapeText(moduleNames[i]) + "</option>";
+  }
+  moduleFilterHtml += "</select>";
+
+  // `userAgent` initialized at top of scope
+  userAgent = id( "qunit-userAgent" );
+  if ( userAgent ) {
+    userAgent.innerHTML = navigator.userAgent;
+  }
+
+  // `banner` initialized at top of scope
+  banner = id( "qunit-header" );
+  if ( banner ) {
+    banner.innerHTML = "<a href='" + QUnit.url({ filter: undefined, module: undefined, testNumber: undefined }) + "'>" + banner.innerHTML + "</a> ";
+  }
+
+  // `toolbar` initialized at top of scope
+  toolbar = id( "qunit-testrunner-toolbar" );
+  if ( toolbar ) {
+    // `filter` initialized at top of scope
+    filter = document.createElement( "input" );
+    filter.type = "checkbox";
+    filter.id = "qunit-filter-pass";
+
+    addEvent( filter, "click", function() {
+      var tmp,
+        ol = document.getElementById( "qunit-tests" );
+
+      if ( filter.checked ) {
+        ol.className = ol.className + " hidepass";
+      } else {
+        tmp = " " + ol.className.replace( /[\n\t\r]/g, " " ) + " ";
+        ol.className = tmp.replace( / hidepass /, " " );
+      }
+      if ( defined.sessionStorage ) {
+        if (filter.checked) {
+          sessionStorage.setItem( "qunit-filter-passed-tests", "true" );
+        } else {
+          sessionStorage.removeItem( "qunit-filter-passed-tests" );
+        }
+      }
+    });
+
+    if ( config.hidepassed || defined.sessionStorage && sessionStorage.getItem( "qunit-filter-passed-tests" ) ) {
+      filter.checked = true;
+      // `ol` initialized at top of scope
+      ol = document.getElementById( "qunit-tests" );
+      ol.className = ol.className + " hidepass";
+    }
+    toolbar.appendChild( filter );
+
+    // `label` initialized at top of scope
+    label = document.createElement( "label" );
+    label.setAttribute( "for", "qunit-filter-pass" );
+    label.setAttribute( "title", "Only show tests and assertions that fail. Stored in sessionStorage." );
+    label.innerHTML = "Hide passed tests";
+    toolbar.appendChild( label );
+
+    urlConfigCheckboxesContainer = document.createElement("span");
+    urlConfigCheckboxesContainer.innerHTML = urlConfigHtml;
+    urlConfigCheckboxes = urlConfigCheckboxesContainer.getElementsByTagName("input");
+    // For oldIE support:
+    // * Add handlers to the individual elements instead of the container
+    // * Use "click" instead of "change"
+    // * Fallback from event.target to event.srcElement
+    addEvents( urlConfigCheckboxes, "click", function( event ) {
+      var params = {},
+        target = event.target || event.srcElement;
+      params[ target.name ] = target.checked ? true : undefined;
+      window.location = QUnit.url( params );
+    });
+    toolbar.appendChild( urlConfigCheckboxesContainer );
+
+    if (numModules > 1) {
+      moduleFilter = document.createElement( "span" );
+      moduleFilter.setAttribute( "id", "qunit-modulefilter-container" );
+      moduleFilter.innerHTML = moduleFilterHtml;
+      addEvent( moduleFilter.lastChild, "change", function() {
+        var selectBox = moduleFilter.getElementsByTagName("select")[0],
+          selectedModule = decodeURIComponent(selectBox.options[selectBox.selectedIndex].value);
+
+        window.location = QUnit.url({
+          module: ( selectedModule === "" ) ? undefined : selectedModule,
+          // Remove any existing filters
+          filter: undefined,
+          testNumber: undefined
+        });
+      });
+      toolbar.appendChild(moduleFilter);
+    }
+  }
+
+  // `main` initialized at top of scope
+  main = id( "qunit-fixture" );
+  if ( main ) {
+    config.fixture = main.innerHTML;
+  }
+
+  if ( config.autostart ) {
+    QUnit.start();
+  }
+};
+
+addEvent( window, "load", QUnit.load );
+
+// `onErrorFnPrev` initialized at top of scope
+// Preserve other handlers
+onErrorFnPrev = window.onerror;
+
+// Cover uncaught exceptions
+// Returning true will suppress the default browser handler,
+// returning false will let it run.
+window.onerror = function ( error, filePath, linerNr ) {
+  var ret = false;
+  if ( onErrorFnPrev ) {
+    ret = onErrorFnPrev( error, filePath, linerNr );
+  }
+
+  // Treat return value as window.onerror itself does,
+  // Only do our handling if not suppressed.
+  if ( ret !== true ) {
+    if ( QUnit.config.current ) {
+      if ( QUnit.config.current.ignoreGlobalErrors ) {
+        return true;
+      }
+      QUnit.pushFailure( error, filePath + ":" + linerNr );
+    } else {
+      QUnit.test( "global failure", extend( function() {
+        QUnit.pushFailure( error, filePath + ":" + linerNr );
+      }, { validTest: validTest } ) );
+    }
+    return false;
+  }
+
+  return ret;
+};
+
+function done() {
+  config.autorun = true;
+
+  // Log the last module results
+  if ( config.currentModule ) {
+    runLoggingCallbacks( "moduleDone", QUnit, {
+      name: config.currentModule,
+      failed: config.moduleStats.bad,
+      passed: config.moduleStats.all - config.moduleStats.bad,
+      total: config.moduleStats.all
+    });
+  }
+  delete config.previousModule;
+
+  var i, key,
+    banner = id( "qunit-banner" ),
+    tests = id( "qunit-tests" ),
+    runtime = +new Date() - config.started,
+    passed = config.stats.all - config.stats.bad,
+    html = [
+      "Tests completed in ",
+      runtime,
+      " milliseconds.<br/>",
+      "<span class='passed'>",
+      passed,
+      "</span> assertions of <span class='total'>",
+      config.stats.all,
+      "</span> passed, <span class='failed'>",
+      config.stats.bad,
+      "</span> failed."
+    ].join( "" );
+
+  if ( banner ) {
+    banner.className = ( config.stats.bad ? "qunit-fail" : "qunit-pass" );
+  }
+
+  if ( tests ) {
+    id( "qunit-testresult" ).innerHTML = html;
+  }
+
+  if ( config.altertitle && typeof document !== "undefined" && document.title ) {
+    // show ✖ for good, ✔ for bad suite result in title
+    // use escape sequences in case file gets loaded with non-utf-8-charset
+    document.title = [
+      ( config.stats.bad ? "\u2716" : "\u2714" ),
+      document.title.replace( /^[\u2714\u2716] /i, "" )
+    ].join( " " );
+  }
+
+  // clear own sessionStorage items if all tests passed
+  if ( config.reorder && defined.sessionStorage && config.stats.bad === 0 ) {
+    // `key` & `i` initialized at top of scope
+    for ( i = 0; i < sessionStorage.length; i++ ) {
+      key = sessionStorage.key( i++ );
+      if ( key.indexOf( "qunit-test-" ) === 0 ) {
+        sessionStorage.removeItem( key );
+      }
+    }
+  }
+
+  // scroll back to top to show results
+  if ( window.scrollTo ) {
+    window.scrollTo(0, 0);
+  }
+
+  runLoggingCallbacks( "done", QUnit, {
+    failed: config.stats.bad,
+    passed: passed,
+    total: config.stats.all,
+    runtime: runtime
+  });
+}
+
+/** @return Boolean: true if this test should be ran */
+function validTest( test ) {
+  var include,
+    filter = config.filter && config.filter.toLowerCase(),
+    module = config.module && config.module.toLowerCase(),
+    fullName = (test.module + ": " + test.testName).toLowerCase();
+
+  // Internally-generated tests are always valid
+  if ( test.callback && test.callback.validTest === validTest ) {
+    delete test.callback.validTest;
+    return true;
+  }
+
+  if ( config.testNumber ) {
+    return test.testNumber === config.testNumber;
+  }
+
+  if ( module && ( !test.module || test.module.toLowerCase() !== module ) ) {
+    return false;
+  }
+
+  if ( !filter ) {
+    return true;
+  }
+
+  include = filter.charAt( 0 ) !== "!";
+  if ( !include ) {
+    filter = filter.slice( 1 );
+  }
+
+  // If the filter matches, we need to honour include
+  if ( fullName.indexOf( filter ) !== -1 ) {
+    return include;
+  }
+
+  // Otherwise, do the opposite
+  return !include;
+}
+
+// so far supports only Firefox, Chrome and Opera (buggy), Safari (for real exceptions)
+// Later Safari and IE10 are supposed to support error.stack as well
+// See also https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error/Stack
+function extractStacktrace( e, offset ) {
+  offset = offset === undefined ? 3 : offset;
+
+  var stack, include, i;
+
+  if ( e.stacktrace ) {
+    // Opera
+    return e.stacktrace.split( "\n" )[ offset + 3 ];
+  } else if ( e.stack ) {
+    // Firefox, Chrome
+    stack = e.stack.split( "\n" );
+    if (/^error$/i.test( stack[0] ) ) {
+      stack.shift();
+    }
+    if ( fileName ) {
+      include = [];
+      for ( i = offset; i < stack.length; i++ ) {
+        if ( stack[ i ].indexOf( fileName ) !== -1 ) {
+          break;
+        }
+        include.push( stack[ i ] );
+      }
+      if ( include.length ) {
+        return include.join( "\n" );
+      }
+    }
+    return stack[ offset ];
+  } else if ( e.sourceURL ) {
+    // Safari, PhantomJS
+    // hopefully one day Safari provides actual stacktraces
+    // exclude useless self-reference for generated Error objects
+    if ( /qunit.js$/.test( e.sourceURL ) ) {
+      return;
+    }
+    // for actual exceptions, this is useful
+    return e.sourceURL + ":" + e.line;
+  }
+}
+function sourceFromStacktrace( offset ) {
+  try {
+    throw new Error();
+  } catch ( e ) {
+    return extractStacktrace( e, offset );
+  }
+}
+
+/**
+ * Escape text for attribute or text content.
+ */
+function escapeText( s ) {
+  if ( !s ) {
+    return "";
+  }
+  s = s + "";
+  // Both single quotes and double quotes (for attributes)
+  return s.replace( /['"<>&]/g, function( s ) {
+    switch( s ) {
+      case "'":
+        return "&#039;";
+      case "\"":
+        return "&quot;";
+      case "<":
+        return "&lt;";
+      case ">":
+        return "&gt;";
+      case "&":
+        return "&amp;";
+    }
+  });
+}
+
+function synchronize( callback, last ) {
+  config.queue.push( callback );
+
+  if ( config.autorun && !config.blocking ) {
+    process( last );
+  }
+}
+
+function process( last ) {
+  function next() {
+    process( last );
+  }
+  var start = new Date().getTime();
+  config.depth = config.depth ? config.depth + 1 : 1;
+
+  while ( config.queue.length && !config.blocking ) {
+    if ( !defined.setTimeout || config.updateRate <= 0 || ( ( new Date().getTime() - start ) < config.updateRate ) ) {
+      config.queue.shift()();
+    } else {
+      setTimeout( next, 13 );
+      break;
+    }
+  }
+  config.depth--;
+  if ( last && !config.blocking && !config.queue.length && config.depth === 0 ) {
+    done();
+  }
+}
+
+function saveGlobal() {
+  config.pollution = [];
+
+  if ( config.noglobals ) {
+    for ( var key in window ) {
+      if ( hasOwn.call( window, key ) ) {
+        // in Opera sometimes DOM element ids show up here, ignore them
+        if ( /^qunit-test-output/.test( key ) ) {
+          continue;
+        }
+        config.pollution.push( key );
+      }
+    }
+  }
+}
+
+function checkPollution() {
+  var newGlobals,
+    deletedGlobals,
+    old = config.pollution;
+
+  saveGlobal();
+
+  newGlobals = diff( config.pollution, old );
+  if ( newGlobals.length > 0 ) {
+    QUnit.pushFailure( "Introduced global variable(s): " + newGlobals.join(", ") );
+  }
+
+  deletedGlobals = diff( old, config.pollution );
+  if ( deletedGlobals.length > 0 ) {
+    QUnit.pushFailure( "Deleted global variable(s): " + deletedGlobals.join(", ") );
+  }
+}
+
+// returns a new Array with the elements that are in a but not in b
+function diff( a, b ) {
+  var i, j,
+    result = a.slice();
+
+  for ( i = 0; i < result.length; i++ ) {
+    for ( j = 0; j < b.length; j++ ) {
+      if ( result[i] === b[j] ) {
+        result.splice( i, 1 );
+        i--;
+        break;
+      }
+    }
+  }
+  return result;
+}
+
+function extend( a, b ) {
+  for ( var prop in b ) {
+    if ( hasOwn.call( b, prop ) ) {
+      // Avoid "Member not found" error in IE8 caused by messing with window.constructor
+      if ( !( prop === "constructor" && a === window ) ) {
+        if ( b[ prop ] === undefined ) {
+          delete a[ prop ];
+        } else {
+          a[ prop ] = b[ prop ];
+        }
+      }
+    }
+  }
+
+  return a;
+}
+
+/**
+ * @param {HTMLElement} elem
+ * @param {string} type
+ * @param {Function} fn
+ */
+function addEvent( elem, type, fn ) {
+  // Standards-based browsers
+  if ( elem.addEventListener ) {
+    elem.addEventListener( type, fn, false );
+  // IE
+  } else {
+    elem.attachEvent( "on" + type, fn );
+  }
+}
+
+/**
+ * @param {Array|NodeList} elems
+ * @param {string} type
+ * @param {Function} fn
+ */
+function addEvents( elems, type, fn ) {
+  var i = elems.length;
+  while ( i-- ) {
+    addEvent( elems[i], type, fn );
+  }
+}
+
+function hasClass( elem, name ) {
+  return (" " + elem.className + " ").indexOf(" " + name + " ") > -1;
+}
+
+function addClass( elem, name ) {
+  if ( !hasClass( elem, name ) ) {
+    elem.className += (elem.className ? " " : "") + name;
+  }
+}
+
+function removeClass( elem, name ) {
+  var set = " " + elem.className + " ";
+  // Class name may appear multiple times
+  while ( set.indexOf(" " + name + " ") > -1 ) {
+    set = set.replace(" " + name + " " , " ");
+  }
+  // If possible, trim it for prettiness, but not necessarily
+  elem.className = typeof set.trim === "function" ? set.trim() : set.replace(/^\s+|\s+$/g, "");
+}
+
+function id( name ) {
+  return !!( typeof document !== "undefined" && document && document.getElementById ) &&
+    document.getElementById( name );
+}
+
+function registerLoggingCallback( key ) {
+  return function( callback ) {
+    config[key].push( callback );
+  };
+}
+
+// Supports deprecated method of completely overwriting logging callbacks
+function runLoggingCallbacks( key, scope, args ) {
+  var i, callbacks;
+  if ( QUnit.hasOwnProperty( key ) ) {
+    QUnit[ key ].call(scope, args );
+  } else {
+    callbacks = config[ key ];
+    for ( i = 0; i < callbacks.length; i++ ) {
+      callbacks[ i ].call( scope, args );
+    }
+  }
+}
+
+// Test for equality any JavaScript type.
+// Author: Philippe Rathé <prathe@gmail.com>
+QUnit.equiv = (function() {
+
+  // Call the o related callback with the given arguments.
+  function bindCallbacks( o, callbacks, args ) {
+    var prop = QUnit.objectType( o );
+    if ( prop ) {
+      if ( QUnit.objectType( callbacks[ prop ] ) === "function" ) {
+        return callbacks[ prop ].apply( callbacks, args );
+      } else {
+        return callbacks[ prop ]; // or undefined
+      }
+    }
+  }
+
+  // the real equiv function
+  var innerEquiv,
+    // stack to decide between skip/abort functions
+    callers = [],
+    // stack to avoiding loops from circular referencing
+    parents = [],
+    parentsB = [],
+
+    getProto = Object.getPrototypeOf || function ( obj ) {
+      /*jshint camelcase:false */
+      return obj.__proto__;
+    },
+    callbacks = (function () {
+
+      // for string, boolean, number and null
+      function useStrictEquality( b, a ) {
+        /*jshint eqeqeq:false */
+        if ( b instanceof a.constructor || a instanceof b.constructor ) {
+          // to catch short annotation VS 'new' annotation of a
+          // declaration
+          // e.g. var i = 1;
+          // var j = new Number(1);
+          return a == b;
+        } else {
+          return a === b;
+        }
+      }
+
+      return {
+        "string": useStrictEquality,
+        "boolean": useStrictEquality,
+        "number": useStrictEquality,
+        "null": useStrictEquality,
+        "undefined": useStrictEquality,
+
+        "nan": function( b ) {
+          return isNaN( b );
+        },
+
+        "date": function( b, a ) {
+          return QUnit.objectType( b ) === "date" && a.valueOf() === b.valueOf();
+        },
+
+        "regexp": function( b, a ) {
+          return QUnit.objectType( b ) === "regexp" &&
+            // the regex itself
+            a.source === b.source &&
+            // and its modifiers
+            a.global === b.global &&
+            // (gmi) ...
+            a.ignoreCase === b.ignoreCase &&
+            a.multiline === b.multiline &&
+            a.sticky === b.sticky;
+        },
+
+        // - skip when the property is a method of an instance (OOP)
+        // - abort otherwise,
+        // initial === would have catch identical references anyway
+        "function": function() {
+          var caller = callers[callers.length - 1];
+          return caller !== Object && typeof caller !== "undefined";
+        },
+
+        "array": function( b, a ) {
+          var i, j, len, loop, aCircular, bCircular;
+
+          // b could be an object literal here
+          if ( QUnit.objectType( b ) !== "array" ) {
+            return false;
+          }
+
+          len = a.length;
+          if ( len !== b.length ) {
+            // safe and faster
+            return false;
+          }
+
+          // track reference to avoid circular references
+          parents.push( a );
+          parentsB.push( b );
+          for ( i = 0; i < len; i++ ) {
+            loop = false;
+            for ( j = 0; j < parents.length; j++ ) {
+              aCircular = parents[j] === a[i];
+              bCircular = parentsB[j] === b[i];
+              if ( aCircular || bCircular ) {
+                if ( a[i] === b[i] || aCircular && bCircular ) {
+                  loop = true;
+                } else {
+                  parents.pop();
+                  parentsB.pop();
+                  return false;
+                }
+              }
+            }
+            if ( !loop && !innerEquiv(a[i], b[i]) ) {
+              parents.pop();
+              parentsB.pop();
+              return false;
+            }
+          }
+          parents.pop();
+          parentsB.pop();
+          return true;
+        },
+
+        "object": function( b, a ) {
+          /*jshint forin:false */
+          var i, j, loop, aCircular, bCircular,
+            // Default to true
+            eq = true,
+            aProperties = [],
+            bProperties = [];
+
+          // comparing constructors is more strict than using
+          // instanceof
+          if ( a.constructor !== b.constructor ) {
+            // Allow objects with no prototype to be equivalent to
+            // objects with Object as their constructor.
+            if ( !(( getProto(a) === null && getProto(b) === Object.prototype ) ||
+              ( getProto(b) === null && getProto(a) === Object.prototype ) ) ) {
+                return false;
+            }
+          }
+
+          // stack constructor before traversing properties
+          callers.push( a.constructor );
+
+          // track reference to avoid circular references
+          parents.push( a );
+          parentsB.push( b );
+
+          // be strict: don't ensure hasOwnProperty and go deep
+          for ( i in a ) {
+            loop = false;
+            for ( j = 0; j < parents.length; j++ ) {
+              aCircular = parents[j] === a[i];
+              bCircular = parentsB[j] === b[i];
+              if ( aCircular || bCircular ) {
+                if ( a[i] === b[i] || aCircular && bCircular ) {
+                  loop = true;
+                } else {
+                  eq = false;
+                  break;
+                }
+              }
+            }
+            aProperties.push(i);
+            if ( !loop && !innerEquiv(a[i], b[i]) ) {
+              eq = false;
+              break;
+            }
+          }
+
+          parents.pop();
+          parentsB.pop();
+          callers.pop(); // unstack, we are done
+
+          for ( i in b ) {
+            bProperties.push( i ); // collect b's properties
+          }
+
+          // Ensures identical properties name
+          return eq && innerEquiv( aProperties.sort(), bProperties.sort() );
+        }
+      };
+    }());
+
+  innerEquiv = function() { // can take multiple arguments
+    var args = [].slice.apply( arguments );
+    if ( args.length < 2 ) {
+      return true; // end transition
+    }
+
+    return (function( a, b ) {
+      if ( a === b ) {
+        return true; // catch the most you can
+      } else if ( a === null || b === null || typeof a === "undefined" ||
+          typeof b === "undefined" ||
+          QUnit.objectType(a) !== QUnit.objectType(b) ) {
+        return false; // don't lose time with error prone cases
+      } else {
+        return bindCallbacks(a, callbacks, [ b, a ]);
+      }
+
+      // apply transition with (1..n) arguments
+    }( args[0], args[1] ) && innerEquiv.apply( this, args.splice(1, args.length - 1 )) );
+  };
+
+  return innerEquiv;
+}());
+
+/**
+ * jsDump Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com |
+ * http://flesler.blogspot.com Licensed under BSD
+ * (http://www.opensource.org/licenses/bsd-license.php) Date: 5/15/2008
+ *
+ * @projectDescription Advanced and extensible data dumping for Javascript.
+ * @version 1.0.0
+ * @author Ariel Flesler
+ * @link {http://flesler.blogspot.com/2008/05/jsdump-pretty-dump-of-any-javascript.html}
+ */
+QUnit.jsDump = (function() {
+  function quote( str ) {
+    return "\"" + str.toString().replace( /"/g, "\\\"" ) + "\"";
+  }
+  function literal( o ) {
+    return o + "";
+  }
+  function join( pre, arr, post ) {
+    var s = jsDump.separator(),
+      base = jsDump.indent(),
+      inner = jsDump.indent(1);
+    if ( arr.join ) {
+      arr = arr.join( "," + s + inner );
+    }
+    if ( !arr ) {
+      return pre + post;
+    }
+    return [ pre, inner + arr, base + post ].join(s);
+  }
+  function array( arr, stack ) {
+    var i = arr.length, ret = new Array(i);
+    this.up();
+    while ( i-- ) {
+      ret[i] = this.parse( arr[i] , undefined , stack);
+    }
+    this.down();
+    return join( "[", ret, "]" );
+  }
+
+  var reName = /^function (\w+)/,
+    jsDump = {
+      // type is used mostly internally, you can fix a (custom)type in advance
+      parse: function( obj, type, stack ) {
+        stack = stack || [ ];
+        var inStack, res,
+          parser = this.parsers[ type || this.typeOf(obj) ];
+
+        type = typeof parser;
+        inStack = inArray( obj, stack );
+
+        if ( inStack !== -1 ) {
+          return "recursion(" + (inStack - stack.length) + ")";
+        }
+        if ( type === "function" )  {
+          stack.push( obj );
+          res = parser.call( this, obj, stack );
+          stack.pop();
+          return res;
+        }
+        return ( type === "string" ) ? parser : this.parsers.error;
+      },
+      typeOf: function( obj ) {
+        var type;
+        if ( obj === null ) {
+          type = "null";
+        } else if ( typeof obj === "undefined" ) {
+          type = "undefined";
+        } else if ( QUnit.is( "regexp", obj) ) {
+          type = "regexp";
+        } else if ( QUnit.is( "date", obj) ) {
+          type = "date";
+        } else if ( QUnit.is( "function", obj) ) {
+          type = "function";
+        } else if ( typeof obj.setInterval !== undefined && typeof obj.document !== "undefined" && typeof obj.nodeType === "undefined" ) {
+          type = "window";
+        } else if ( obj.nodeType === 9 ) {
+          type = "document";
+        } else if ( obj.nodeType ) {
+          type = "node";
+        } else if (
+          // native arrays
+          toString.call( obj ) === "[object Array]" ||
+          // NodeList objects
+          ( typeof obj.length === "number" && typeof obj.item !== "undefined" && ( obj.length ? obj.item(0) === obj[0] : ( obj.item( 0 ) === null && typeof obj[0] === "undefined" ) ) )
+        ) {
+          type = "array";
+        } else if ( obj.constructor === Error.prototype.constructor ) {
+          type = "error";
+        } else {
+          type = typeof obj;
+        }
+        return type;
+      },
+      separator: function() {
+        return this.multiline ? this.HTML ? "<br />" : "\n" : this.HTML ? "&nbsp;" : " ";
+      },
+      // extra can be a number, shortcut for increasing-calling-decreasing
+      indent: function( extra ) {
+        if ( !this.multiline ) {
+          return "";
+        }
+        var chr = this.indentChar;
+        if ( this.HTML ) {
+          chr = chr.replace( /\t/g, "   " ).replace( / /g, "&nbsp;" );
+        }
+        return new Array( this.depth + ( extra || 0 ) ).join(chr);
+      },
+      up: function( a ) {
+        this.depth += a || 1;
+      },
+      down: function( a ) {
+        this.depth -= a || 1;
+      },
+      setParser: function( name, parser ) {
+        this.parsers[name] = parser;
+      },
+      // The next 3 are exposed so you can use them
+      quote: quote,
+      literal: literal,
+      join: join,
+      //
+      depth: 1,
+      // This is the list of parsers, to modify them, use jsDump.setParser
+      parsers: {
+        window: "[Window]",
+        document: "[Document]",
+        error: function(error) {
+          return "Error(\"" + error.message + "\")";
+        },
+        unknown: "[Unknown]",
+        "null": "null",
+        "undefined": "undefined",
+        "function": function( fn ) {
+          var ret = "function",
+            // functions never have name in IE
+            name = "name" in fn ? fn.name : (reName.exec(fn) || [])[1];
+
+          if ( name ) {
+            ret += " " + name;
+          }
+          ret += "( ";
+
+          ret = [ ret, QUnit.jsDump.parse( fn, "functionArgs" ), "){" ].join( "" );
+          return join( ret, QUnit.jsDump.parse(fn,"functionCode" ), "}" );
+        },
+        array: array,
+        nodelist: array,
+        "arguments": array,
+        object: function( map, stack ) {
+          /*jshint forin:false */
+          var ret = [ ], keys, key, val, i;
+          QUnit.jsDump.up();
+          keys = [];
+          for ( key in map ) {
+            keys.push( key );
+          }
+          keys.sort();
+          for ( i = 0; i < keys.length; i++ ) {
+            key = keys[ i ];
+            val = map[ key ];
+            ret.push( QUnit.jsDump.parse( key, "key" ) + ": " + QUnit.jsDump.parse( val, undefined, stack ) );
+          }
+          QUnit.jsDump.down();
+          return join( "{", ret, "}" );
+        },
+        node: function( node ) {
+          var len, i, val,
+            open = QUnit.jsDump.HTML ? "&lt;" : "<",
+            close = QUnit.jsDump.HTML ? "&gt;" : ">",
+            tag = node.nodeName.toLowerCase(),
+            ret = open + tag,
+            attrs = node.attributes;
+
+          if ( attrs ) {
+            for ( i = 0, len = attrs.length; i < len; i++ ) {
+              val = attrs[i].nodeValue;
+              // IE6 includes all attributes in .attributes, even ones not explicitly set.
+              // Those have values like undefined, null, 0, false, "" or "inherit".
+              if ( val && val !== "inherit" ) {
+                ret += " " + attrs[i].nodeName + "=" + QUnit.jsDump.parse( val, "attribute" );
+              }
+            }
+          }
+          ret += close;
+
+          // Show content of TextNode or CDATASection
+          if ( node.nodeType === 3 || node.nodeType === 4 ) {
+            ret += node.nodeValue;
+          }
+
+          return ret + open + "/" + tag + close;
+        },
+        // function calls it internally, it's the arguments part of the function
+        functionArgs: function( fn ) {
+          var args,
+            l = fn.length;
+
+          if ( !l ) {
+            return "";
+          }
+
+          args = new Array(l);
+          while ( l-- ) {
+            // 97 is 'a'
+            args[l] = String.fromCharCode(97+l);
+          }
+          return " " + args.join( ", " ) + " ";
+        },
+        // object calls it internally, the key part of an item in a map
+        key: quote,
+        // function calls it internally, it's the content of the function
+        functionCode: "[code]",
+        // node calls it internally, it's an html attribute value
+        attribute: quote,
+        string: quote,
+        date: quote,
+        regexp: literal,
+        number: literal,
+        "boolean": literal
+      },
+      // if true, entities are escaped ( <, >, \t, space and \n )
+      HTML: false,
+      // indentation unit
+      indentChar: "  ",
+      // if true, items in a collection, are separated by a \n, else just a space.
+      multiline: true
+    };
+
+  return jsDump;
+}());
+
+// from jquery.js
+function inArray( elem, array ) {
+  if ( array.indexOf ) {
+    return array.indexOf( elem );
+  }
+
+  for ( var i = 0, length = array.length; i < length; i++ ) {
+    if ( array[ i ] === elem ) {
+      return i;
+    }
+  }
+
+  return -1;
+}
+
+/*
+ * Javascript Diff Algorithm
+ *  By John Resig (http://ejohn.org/)
+ *  Modified by Chu Alan "sprite"
+ *
+ * Released under the MIT license.
+ *
+ * More Info:
+ *  http://ejohn.org/projects/javascript-diff-algorithm/
+ *
+ * Usage: QUnit.diff(expected, actual)
+ *
+ * QUnit.diff( "the quick brown fox jumped over", "the quick fox jumps over" ) == "the  quick <del>brown </del> fox <del>jumped </del><ins>jumps </ins> over"
+ */
+QUnit.diff = (function() {
+  /*jshint eqeqeq:false, eqnull:true */
+  function diff( o, n ) {
+    var i,
+      ns = {},
+      os = {};
+
+    for ( i = 0; i < n.length; i++ ) {
+      if ( !hasOwn.call( ns, n[i] ) ) {
+        ns[ n[i] ] = {
+          rows: [],
+          o: null
+        };
+      }
+      ns[ n[i] ].rows.push( i );
+    }
+
+    for ( i = 0; i < o.length; i++ ) {
+      if ( !hasOwn.call( os, o[i] ) ) {
+        os[ o[i] ] = {
+          rows: [],
+          n: null
+        };
+      }
+      os[ o[i] ].rows.push( i );
+    }
+
+    for ( i in ns ) {
+      if ( hasOwn.call( ns, i ) ) {
+        if ( ns[i].rows.length === 1 && hasOwn.call( os, i ) && os[i].rows.length === 1 ) {
+          n[ ns[i].rows[0] ] = {
+            text: n[ ns[i].rows[0] ],
+            row: os[i].rows[0]
+          };
+          o[ os[i].rows[0] ] = {
+            text: o[ os[i].rows[0] ],
+            row: ns[i].rows[0]
+          };
+        }
+      }
+    }
+
+    for ( i = 0; i < n.length - 1; i++ ) {
+      if ( n[i].text != null && n[ i + 1 ].text == null && n[i].row + 1 < o.length && o[ n[i].row + 1 ].text == null &&
+            n[ i + 1 ] == o[ n[i].row + 1 ] ) {
+
+        n[ i + 1 ] = {
+          text: n[ i + 1 ],
+          row: n[i].row + 1
+        };
+        o[ n[i].row + 1 ] = {
+          text: o[ n[i].row + 1 ],
+          row: i + 1
+        };
+      }
+    }
+
+    for ( i = n.length - 1; i > 0; i-- ) {
+      if ( n[i].text != null && n[ i - 1 ].text == null && n[i].row > 0 && o[ n[i].row - 1 ].text == null &&
+            n[ i - 1 ] == o[ n[i].row - 1 ]) {
+
+        n[ i - 1 ] = {
+          text: n[ i - 1 ],
+          row: n[i].row - 1
+        };
+        o[ n[i].row - 1 ] = {
+          text: o[ n[i].row - 1 ],
+          row: i - 1
+        };
+      }
+    }
+
+    return {
+      o: o,
+      n: n
+    };
+  }
+
+  return function( o, n ) {
+    o = o.replace( /\s+$/, "" );
+    n = n.replace( /\s+$/, "" );
+
+    var i, pre,
+      str = "",
+      out = diff( o === "" ? [] : o.split(/\s+/), n === "" ? [] : n.split(/\s+/) ),
+      oSpace = o.match(/\s+/g),
+      nSpace = n.match(/\s+/g);
+
+    if ( oSpace == null ) {
+      oSpace = [ " " ];
+    }
+    else {
+      oSpace.push( " " );
+    }
+
+    if ( nSpace == null ) {
+      nSpace = [ " " ];
+    }
+    else {
+      nSpace.push( " " );
+    }
+
+    if ( out.n.length === 0 ) {
+      for ( i = 0; i < out.o.length; i++ ) {
+        str += "<del>" + out.o[i] + oSpace[i] + "</del>";
+      }
+    }
+    else {
+      if ( out.n[0].text == null ) {
+        for ( n = 0; n < out.o.length && out.o[n].text == null; n++ ) {
+          str += "<del>" + out.o[n] + oSpace[n] + "</del>";
+        }
+      }
+
+      for ( i = 0; i < out.n.length; i++ ) {
+        if (out.n[i].text == null) {
+          str += "<ins>" + out.n[i] + nSpace[i] + "</ins>";
+        }
+        else {
+          // `pre` initialized at top of scope
+          pre = "";
+
+          for ( n = out.n[i].row + 1; n < out.o.length && out.o[n].text == null; n++ ) {
+            pre += "<del>" + out.o[n] + oSpace[n] + "</del>";
+          }
+          str += " " + out.n[i].text + nSpace[i] + pre;
+        }
+      }
+    }
+
+    return str;
+  };
+}());
+
+// for CommonJS environments, export everything
+if ( typeof exports !== "undefined" ) {
+  extend( exports, QUnit.constructor.prototype );
+}
+
+// get at whatever the global object is, like window in browsers
+}( (function() {return this;}.call()) ));
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vakata-jstree-3.3.5/test/unit/test.js	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,11 @@
+test('basic test', function() {
+  expect(1);
+  ok(true, 'this had better work.');
+});
+
+
+test('can access the DOM', function() {
+  expect(1);
+  var fixture = document.getElementById('qunit-fixture');
+  equal(fixture.innerText || fixture.textContent, 'this had better work.', 'should be able to access the DOM.');
+});
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vakata-jstree-3.3.5/test/visual/desktop/index.html	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+	<meta charset="UTF-8">
+	<title>Light theme visual tests</title>
+	<link rel="stylesheet" href="./../../../dist/themes/default/style.min.css">
+	<link rel="stylesheet" href="./../../../dist/themes/default-dark/style.min.css">
+	<style>.tree { border:1px solid black; padding:10px; width:300px; margin:20px; float:left; min-height:200px; }</style>
+</head>
+<body style="background:white;">
+	<div class="tree" id="empty"></div>
+	<div class="tree" id="core"><ul><li>asdf</li></ul></div>
+	<div class="tree" id="tree">
+		<ul>
+			<li>Node 01
+				<ul>
+					<li>Node</li>
+					<li>Node</li>
+				</ul>
+			</li>
+			<li>Node 02</li>
+			<li data-jstree='{"opened" : true}'>Node 03
+				<ul>
+					<li>Node</li>
+					<li>Node</li>
+				</ul>
+			</li>
+			<li>Node 04</li>
+			<li>Node 05</li>
+		</ul>
+	</div>
+	<div class="tree" id="full"><ul><li data-jstree='{ "selected" : true, "type" : "file" }'>full</li><li>asdf</li></ul></div>
+	<div class="tree" id="dark"><ul><li data-jstree='{ "selected" : true, "type" : "file"}'>full</li><li>asdf</li></ul></div>
+
+	<script src="./../../../dist/libs/jquery.js"></script>
+	<script src="./../../../dist/jstree.min.js"></script>
+	<script>
+	$('#empty').jstree();
+	$('#tree, #core').jstree();
+	$('#full').jstree({ plugins : ["checkbox","sort","types","wholerow"], "types" : { "file" : { "icon" : "jstree-file" } } });
+	$('#dark').jstree({ plugins : ["checkbox","sort","types","wholerow"], "core" : { "themes" : { "name" : "default-dark" } }, "types" : { "file" : { "icon" : "jstree-file" } } });
+	</script>
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vakata-jstree-3.3.5/test/visual/mobile/index.html	Thu Apr 26 11:47:37 2018 -0400
@@ -0,0 +1,42 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+	<meta charset="UTF-8">
+	<title>Mobile theme visual tests</title>
+	<link rel="stylesheet" href="./../../../dist/themes/default/style.min.css">
+	<link rel="stylesheet" href="./../../../dist/themes/default-dark/style.min.css">
+	<style>.tree { border:1px solid black; padding:10px; width:300px; margin:20px; float:left; min-height:200px; }</style>
+</head>
+<body style="background:white;">
+	<div class="tree" id="tree">
+		<ul>
+			<li>Node 01
+				<ul>
+					<li>Node</li>
+					<li>Node</li>
+				</ul>
+			</li>
+			<li>Node 02</li>
+			<li data-jstree='{"opened" : true}'>Node 03
+				<ul>
+					<li>Node</li>
+					<li>Node</li>
+				</ul>
+			</li>
+			<li>Node 04</li>
+			<li>Node 05</li>
+		</ul>
+	</div>
+	<div class="tree" id="full"><ul><li data-jstree='{ "selected" : true, "type" : "file" }'>full</li><li>asdf</li></ul></div>
+	<div class="tree" id="dark"><ul><li data-jstree='{ "selected" : true, "type" : "file"}'>full</li><li>asdf</li></ul></div>
+
+	<script src="./../../../dist/libs/jquery.js"></script>
+	<script src="./../../../dist/jstree.min.js"></script>
+	<script>
+	$.jstree.defaults.core.themes.responsive = true;
+	$('#tree').jstree();
+	$('#full').jstree({ plugins : ["checkbox","sort","types","wholerow"], "types" : { "file" : { "icon" : "jstree-file" } } });
+	$('#dark').jstree({ plugins : ["checkbox","sort","types","wholerow"], "core" : { "themes" : { "name" : "default-dark" } }, "types" : { "file" : { "icon" : "jstree-file" } } });
+	</script>
+</body>
+</html>
\ No newline at end of file
Binary file vakata-jstree-3.3.5/test/visual/screenshots/desktop/.png has changed
Binary file vakata-jstree-3.3.5/test/visual/screenshots/desktop/desktop.png has changed
Binary file vakata-jstree-3.3.5/test/visual/screenshots/desktop/home.png has changed
Binary file vakata-jstree-3.3.5/test/visual/screenshots/mobile/.png has changed
Binary file vakata-jstree-3.3.5/test/visual/screenshots/mobile/home.png has changed
Binary file vakata-jstree-3.3.5/test/visual/screenshots/mobile/mobile.png has changed