diff --git a/jtg js/JTG_ORG_backup_layers_aim.js b/ATS_AIM_input_data.js
similarity index 74%
rename from jtg js/JTG_ORG_backup_layers_aim.js
rename to ATS_AIM_input_data.js
index 61ef8931d59971cf8837a43e000089434f2ea7e0..b921222f6b60ce74b620631945f54eef24fc37bd 100644
--- a/jtg js/JTG_ORG_backup_layers_aim.js	
+++ b/ATS_AIM_input_data.js
@@ -4,11 +4,17 @@ DESCRIPTION: ;
 PARAMETER:
     [
 		{
-			name : 'customer',
-			title : '客户配置',
-			type : 'LineEdit',
-			property : {tool_tip : '客户配置'},
-		}
+            name : 'auto_save',
+			title : '自动保存',
+            type : 'RadioBox',
+            property : {
+				item_list:[
+					{name:'yes',text:'YES'},
+					{name:'no',text:'NO'},
+				],
+				tool_tip:'是否自动保存料号开关'
+			}
+        }
 	]
 	
  VERSION_HISTORY:
@@ -18,10 +24,10 @@ PARAMETER:
  HELP:
  	<html><body bgcolor="#DDECFE">
 		<font size="3" color="#003DB2"><p>功能简介</p></font>
-		<p> 数据标准化 </p>
+		<p> 测试 </p>
 		<br>
 		<font size="3" color="#003DB2"><p>参数配置</p></font>
-		<p> 客户配置 </p>
+		<p> 测试 </p>
 		<br>
 		<font size="3" color="#003DB2"><p>注意事项</p></font>
 		<p> æ—  </p>
@@ -47,6 +53,7 @@ if ($.conf.product_type == "aimdfm") {
 	});
 }
 var GEN = $.gen;
+var fs = require("fs");
 var Job = $.job_name;
 var db = $.db
 var Status = 'ok';
@@ -55,11 +62,17 @@ var PAR = {};
 if ($.hasOwnProperty('script_parameter')){
 	PAR = JSON.parse($.script_parameter);
 }
+if (!$.hasOwnProperty('auto_save')){
+	PAR.auto_save = "no"
+}
 
 try {
     var par = PAR;
 
-
+	console.log("=====================================================start")
+	console.log("=====================================================start")
+	console.log("=====================================================start")
+    
     QDfm.updateRow({
 		table: "pdm_aimdfm_task",
 		data: {
@@ -85,4 +98,4 @@ try {
     Status = 'error';
     resultData.push({type: "error", title: "脚本执行出错!", detail: [{desc: _.toString(e)}]});
     return {status: Status, result_data: resultData};
-}
\ No newline at end of file
+}
diff --git a/ats/analysis/ATS_AIM_customer_data_analysis.js b/ats/analysis/ATS_AIM_customer_data_analysis.js
new file mode 100644
index 0000000000000000000000000000000000000000..d92934a0f11187ecd1cd6369542f4d68c42774bb
--- /dev/null
+++ b/ats/analysis/ATS_AIM_customer_data_analysis.js
@@ -0,0 +1,541 @@
+/*
+    NAME: 
+    DESCRIPTION: 客户数据分析
+    PARAMETER:
+	[
+		{
+			name : 'step_filter',
+			title : 'Step过滤',
+			type : 'LineEdit',
+			property : {tool_tip : '过滤step信息'}
+        },
+        {
+            name : 'erf',
+			title : 'erf名称',
+			type : 'LineEdit',
+			property : {tool_tip : ''}
+        },
+        {
+            name : 'auto_save',
+			title : '自动保存',
+            type : 'RadioBox',
+            property : {
+				item_list:[
+					{name:'yes',text:'YES'},
+					{name:'no',text:'NO'},
+				],
+				tool_tip:'是否自动保存料号开关'
+			}
+        }
+    ]
+
+    VERSION_HISTORY:
+	V1.00 2020 3-30 Scott
+	
+    HELP:
+	<html><body bgcolor="#DDECFE">
+		<font size="3" color="#003DB2"><p>功能简介</p></font>
+		  <p> 客户数据分析</p>
+		  <br>
+		<font size="3" color="#003DB2"><p>参数配置</p></font>
+		 <p> 客户参数 </p>
+		<font size="3" color="#003DB2"><p>注意事项</p></font>
+		  <p> ● 无 </p>
+		  <br>
+	</body></html>	
+*/
+
+// 引入模块 包
+var $ = require('topcam.scriptfunc').argv();
+var fs = require('fs');
+var _ = require('lodash');
+var IKM = $.ikm;
+var GEN = $.gen;
+var GUI = $.gui;
+var Job = $.job;
+var JobId = $.job_id;
+
+var mode = "develop"   // 运行模式  develop 开发模式 方便调试
+
+try {
+    // IKM.crud("insertRow",{
+    //     table:'pdm_job_org_drill',
+    //     data:{job_id:"1",step_name:"cad",step_type:"pcs", std_layer_name:"d_1-2",odb_layer_name:"d1-2",
+    //         row_num:"1", drill_size:"r2",finish_size:"r2.1",drill_type:"laser_drill",drill_shape:"s",
+    //         slot_length:"12", count:"231",drill_size_lower_tol:"23",drill_size_upper_tol:"asd"
+    //     },
+    //     return_field:'uid',
+    // })
+    var job = "1"
+
+    var matrix = UPLOAD_LAYER_MATRIX({job:job})  // 分析matrix 获得分析后的matrix信息
+
+    // 获得镭射层
+
+    var laser_drills = _.values(matrix).filter(function(v){return v.type == "laser_drill"})
+
+    laser_drills.forEach(function(layer){
+        GEN.workLayer({name:layer.name, display_number:1,clear_before:"yes"})
+        GEN.selClearFeature()
+        GEN.selAllFeat()
+        var count = GEN.getSelectCount()
+        if(GEN.getSelectCount()>0){
+            // GEN.selAddAttr({attribute:"via"})
+            var data = {
+                job_id: JobId,
+                step_name: "cad",
+                odb_layer_name: layer.odb_name,
+                row_num: layer.row_num,
+                drill_type:layer.type,
+                count:count
+            }
+           
+        }
+        GEN.selClearFeature()
+        GEN.clearLayers()
+    })
+    var laser_drills_info = laser_drills
+    // 获取钻孔信息
+
+
+   
+
+
+
+
+
+
+
+
+
+
+    GUI.msg("Done")
+    return 'Done';
+}
+catch (error) {
+    GUI.msg(error);
+    return 'Error';
+}
+
+function UPLOAD_LAYER_MATRIX(props){
+    var job = props.job
+    props.jobcategory = props.jobcategory || "work"
+	var matrix = ANALYSIS_STACKUP({job:job, jobcategory:props.jobcategory});
+	var func = 'function(ARGV)\
+	{\
+		var jobId = ARGV["job_id"];\
+		var tableName = "pdm_job_" + ARGV["jobcategory"] + "_layer";\
+		//GUI.msgbox({text: TDataParse.variant2JsonStr(tableName)});\
+		var db = new TSqlQueryV2(T_SQLCNT_POOL.getSqlDatabase());\
+		db.begin();\
+		try{\
+			var oLayers = db.selectMapMap({table:tableName, field:["odb_name","release_status"], where:{job_id:jobId}, uniquefield:"odb_name"});\
+			if (db.lastError().isValid()) throw db.lastError();\
+			//GUI.msgbox({text: TDataParse.variant2JsonStr(oLayers)});\
+			\
+			db.deleteRow({table:tableName, where:{job_id:jobId}});\
+			if (db.lastError().isValid()) throw db.lastError();\
+			\
+			var fieldLst = ["name", "odb_context", "odb_type", "odb_polarity", "odb_side", "drl_start", "drl_end",\
+					 "row_num", "type", "drl_start_num", "drl_end_num", "drl_from_num", "drl_to_num", "drl_connect_to", \
+					 "odb_name", "side", "stackup_num", "customer_field", "input_file_name", "odb_row_num"];\
+			\
+			for (var i=0;i<ARGV["layers"].length;i++)\
+			{\
+				layerName = ARGV["layers"][i];\
+				var layerInfo = ARGV["matrix"][layerName];\
+				var tmpData = {"job_id":jobId, "name": layerInfo["name"]};\
+				if (ARGV["releasestatus"] != undefined && ARGV["releasestatus"] != null && ARGV["releasestatus"].length>0\
+					&& ARGV["releasestatus"][layerInfo["odb_name"]] != undefined && ARGV["releasestatus"][layerInfo["odb_name"]] != null )\
+				{\
+					tmpData["release_status"] = ARGV["releasestatus"];\
+				}\
+				else\
+				{\
+					tmpData["release_status"] = oLayers.hasOwnProperty(layerInfo["odb_name"]) ? oLayers[layerInfo["odb_name"]]["release_status"] : null;\
+				}\
+				for (n = 0; n < fieldLst.length; n++)\
+				{\
+					tmpData[fieldLst[n]] = layerInfo[fieldLst[n]];\
+				}\
+				//GUI.msgbox({text: TDataParse.variant2JsonStr(tmpData)});\
+				db.insertRow({table:tableName, data:tmpData});\
+				if (db.lastError().isValid()) throw db.lastError();\
+			}\
+			db.commit();\
+			return new TDataResponse();\
+		}\
+		catch (err)\
+		{\
+			print(err.text());\
+			db.rollback();\
+			return new TDataResponse(err, "");\
+		}\
+    }';
+    // var ret = IKM.command( func,     // ?? =========================> tmp
+    //     {   job_id :JobId, 
+    //         matrix:matrix,
+    //         layers: Object.keys(matrix).sort(function(a,b){return matrix[a]["row"] - matrix[b]["row"]}), 
+    //         jobcategory:props.jobcategory}, 1);
+	// if (ret.errText) {                    
+	// 	return {
+	// 		jobcategory:props.jobcategory,
+	// 		errText :ret.errText,
+	// 		errCode :ret.errCode,
+	// 	};
+    // }
+    return matrix
+}
+function ANALYSIS_STACKUP(props){
+    var job = props.job
+    if(!props.hasOwnProperty("jobcategory")){ props.jobcategory = 'work' }
+    var matrix = GEN.getMatrix({job:job})
+	var layer_count = IKM.get_jobinfo({jobname:JobId,jobcategory:props.jobcategory,jobinfo:'layer_count'});
+    if(!layer_count){
+        layer_count = GEN.getLayerCount({job:job})
+    }
+	IKM.save_job_info({jobid:JobId,jobcategory:props.jobcategory,jobinfohash:{TL_layer_count:layer_count}});
+	_.values(matrix).sort(function(a,b){return a.row-b.row}).forEach(function(layer){
+        layer.odb_name = layer.name;
+		layer.name = layer.tl_name;
+		layer.odb_context = layer.context;
+		layer.odb_type = layer.layer_type;
+		layer.odb_polarity = layer.polarity;
+		layer.odb_side = layer.side;
+		layer.row_num = layer.tl_num;
+		layer.type = layer.tl_type;
+		layer.side = layer.enum_tl_side;
+		layer.input_file_name = layer.file_name;
+		layer.odb_row_num = layer.row;
+		if (layer.odb_name == 'drill'){
+			layer.name = 'drill';
+			layer.drl_start_num = 1;
+			layer.drl_end_num = layer_count;
+			layer.drl_from_num = 1;
+			layer.drl_to_num = layer_count;
+			layer.type = 'main_drill';
+		}
+		else if (/^d_(\d+)\-(\d+)$/.test(layer.odb_name)){
+            var tmp = /^d(\d+)\-(\d+)$/.exec(layer.odb_name)
+			var drl_star = tmp[1];
+			var drl_end = tmp[2];
+			layer.name = 'drill' + drl_star + '-' + drl_end;
+			layer.drl_start_num = drl_star;
+			layer.drl_end_num = drl_end;
+			layer.drl_from_num = drl_star;
+			layer.drl_to_num = drl_end;
+			if( drl_star == 1 || drl_end == layer_count ){
+				layer.type = 'blind_drill';             // 埋孔
+			}
+			else{
+				layer.type = 'bury_drill';              // 盲孔
+			}
+		}
+		else if (/^d(\d+)\-(\d+)$/.test(layer.odb_name)){
+            var tmp = /^d(\d+)\-(\d+)$/.exec(layer.odb_name)
+			var drl_star = tmp[1];
+			var drl_end = tmp[2];
+			layer.name = 'd'+drl_star+'-'+drl_end;
+			layer.drl_start_num = drl_star;
+			layer.drl_end_num = drl_end;
+			layer.drl_from_num = drl_star;
+			layer.drl_to_num = drl_end;
+			layer.type = 'laser_drill';   // é•­å°„å­”
+		}
+		else if (/\-a$/.test(layer.odb_name)){
+            layer.side = 'top';
+            if(!layer.name){
+                layer.name = '__'+layer.odb_name+'__'
+            }
+            if(!layer.type){
+                layer.type = 'other'
+            }
+		}
+		else if (/\-b$/.test(layer.odb_name)){
+            layer.side = 'bottom';
+            if(!layer.name){
+                layer.name = '__'+layer.odb_name+'__'
+            }
+            if(!layer.type){
+                layer.type = 'other'
+            }
+		}
+		else{
+            if(!layer.name){
+                layer.name = '__'+layer.odb_name+'__'
+            }
+			if(!layer.type){
+                layer.type = 'other'
+            }
+		}
+    })
+    return matrix;
+}
+
+function tmp(){
+return {
+    "sst": {
+        "row": "1","type": "solder_paste","name": "sp_fr","context": "board","layer_type": "solder_paste","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": -1000,"tl_name": "sp_fr","tl_type": "solder_paste","odb_name": "sst","odb_context": "board","odb_type": "solder_paste","odb_polarity": "positive","odb_side": "top",
+        "row_num": -1000,"odb_row_num": "1"
+    },
+    "spt": {
+        "row": "2","type": "solder_paste","name": "sp_fr(2)","context": "board","layer_type": "solder_paste","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": -999,"tl_name": "sp_fr(2)","tl_type": "solder_paste","odb_name": "spt","odb_context": "board","odb_type": "solder_paste","odb_polarity": "positive","odb_side": "top",
+        "row_num": -999,"odb_row_num": "2"
+    },
+    "smt": {
+        "row": "3","type": "solder_mask","name": "sm_fr","context": "board","layer_type": "solder_mask","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": -998,"tl_name": "sm_fr","tl_type": "solder_mask","odb_name": "smt","odb_context": "board","odb_type": "solder_mask","odb_polarity": "positive","odb_side": "top",
+        "row_num": -998,"odb_row_num": "3"
+    },
+    "top": {
+        "row": "4","type": "outer","name": "top","context": "board","layer_type": "signal","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 1,"tl_name": "top","tl_type": "outer","odb_name": "top","odb_context": "board","odb_type": "signal","odb_polarity": "positive","odb_side": "top",
+        "row_num": 1,"odb_row_num": "4"
+    },
+    "isl2": {
+        "row": "5","type": "inner","name": "l2","context": "board","layer_type": "signal","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 2,"tl_name": "l2","tl_type": "inner","odb_name": "isl2","odb_context": "board","odb_type": "signal","odb_polarity": "positive","odb_side": "inner",
+        "row_num": 2,"odb_row_num": "5"
+    },
+    "isl3": {
+        "row": "6","type": "inner","name": "l3","context": "board","layer_type": "signal","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 3,"tl_name": "l3","tl_type": "inner","odb_name": "isl3","odb_context": "board","odb_type": "signal","odb_polarity": "positive","odb_side": "inner",
+        "row_num": 3,"odb_row_num": "6"
+    },
+    "isl4": {
+        "row": "7","type": "inner","name": "l4","context": "board","layer_type": "signal","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 4,"tl_name": "l4","tl_type": "inner","odb_name": "isl4","odb_context": "board","odb_type": "signal","odb_polarity": "positive","odb_side": "inner",
+        "row_num": 4,"odb_row_num": "7"
+    },
+    "isl5": {
+        "row": "8","type": "inner","name": "l5","context": "board","layer_type": "signal","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 5,"tl_name": "l5","tl_type": "inner","odb_name": "isl5","odb_context": "board","odb_type": "signal","odb_polarity": "positive","odb_side": "inner",
+        "row_num": 5,"odb_row_num": "8"
+    },
+    "isl6": {
+        "row": "9","type": "inner","name": "l6","context": "board","layer_type": "signal","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 6,"tl_name": "l6","tl_type": "inner","odb_name": "isl6","odb_context": "board","odb_type": "signal","odb_polarity": "positive","odb_side": "inner",
+        "row_num": 6,"odb_row_num": "9"
+    },
+    "isl7": {
+        "row": "10","type": "inner","name": "l7","context": "board","layer_type": "signal","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 7,"tl_name": "l7","tl_type": "inner","odb_name": "isl7","odb_context": "board","odb_type": "signal","odb_polarity": "positive","odb_side": "inner",
+        "row_num": 7,"odb_row_num": "10"
+    },
+    "isl8": {
+        "row": "11","type": "inner","name": "l8","context": "board","layer_type": "signal","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 8,"tl_name": "l8","tl_type": "inner","odb_name": "isl8","odb_context": "board","odb_type": "signal","odb_polarity": "positive","odb_side": "inner",
+        "row_num": 8,"odb_row_num": "11"
+    },
+    "isl9": {
+        "row": "12","type": "inner","name": "l9","context": "board","layer_type": "signal","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 9,"tl_name": "l9","tl_type": "inner","odb_name": "isl9","odb_context": "board","odb_type": "signal","odb_polarity": "positive","odb_side": "inner",
+        "row_num": 9,"odb_row_num": "12"
+    },
+    "bottom": {
+        "row": "13","type": "outer","name": "bottom","context": "board","layer_type": "signal","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 10,"tl_name": "bottom","tl_type": "outer","odb_name": "bottom","odb_context": "board","odb_type": "signal","odb_polarity": "positive","odb_side": "bottom",
+        "row_num": 10,"odb_row_num": "13"
+    },
+    "smb": {
+        "row": "14","type": "solder_mask","name": "sm_ba","context": "board","layer_type": "solder_mask","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 1013,"tl_name": "sm_ba","tl_type": "solder_mask","odb_name": "smb","odb_context": "board","odb_type": "solder_mask","odb_polarity": "positive","odb_side": "bottom",
+        "row_num": 1013,"odb_row_num": "14"
+    },
+    "spb": {
+        "row": "15","type": "solder_paste","name": "sp_ba","context": "board","layer_type": "solder_paste","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 1014,"tl_name": "sp_ba","tl_type": "solder_paste","odb_name": "spb","odb_context": "board","odb_type": "solder_paste","odb_polarity": "positive","odb_side": "bottom",
+        "row_num": 1014,"odb_row_num": "15"
+    },
+    "ssb": {
+        "row": "16","type": "solder_paste","name": "sp_ba(2)","context": "board","layer_type": "solder_paste","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 1015,"tl_name": "sp_ba(2)","tl_type": "solder_paste","odb_name": "ssb","odb_context": "board","odb_type": "solder_paste","odb_polarity": "positive","odb_side": "bottom",
+        "row_num": 1015,"odb_row_num": "16"
+    },
+    "d1-2": {
+        "row": "17","type": "laser_drill","name": "d1-2","context": "board","layer_type": "drill","polarity": "positive","drl_start": "top",
+        "drl_end": "isl2","gdrl_start": "top","gdrl_end": "isl2","drl_start_num": "1","drl_end_num": "2","tl_name": "drill1-2","tl_type": "drill",
+        "tl_num": 10016,"odb_name": "d1-2","odb_context": "board","odb_type": "drill","odb_polarity": "positive","odb_side": "none",
+        "row_num": 10016,"odb_row_num": "17","drl_from_num": "1","drl_to_num": "2"
+    },
+    "d2-3": {
+        "row": "18","type": "laser_drill","name": "d2-3","context": "board","layer_type": "drill","polarity": "positive","drl_start": "isl2","drl_end": "isl3","gdrl_start": "isl2","gdrl_end": "isl3","drl_start_num": "2","drl_end_num": "3","tl_name": "drill2-3","tl_type": "drill",
+        "tl_num": 10017,"odb_name": "d2-3","odb_context": "board","odb_type": "drill","odb_polarity": "positive","odb_side": "none",
+        "row_num": 10017,"odb_row_num": "18","drl_from_num": "2","drl_to_num": "3"
+    },
+    "d3-4": {
+        "row": "19","type": "laser_drill","name": "d3-4","context": "board","layer_type": "drill","polarity": "positive","drl_start": "isl3","drl_end": "isl4","gdrl_start": "isl3","gdrl_end": "isl4","drl_start_num": "3","drl_end_num": "4","tl_name": "drill3-4","tl_type": "drill",
+        "tl_num": 10018,"odb_name": "d3-4","odb_context": "board","odb_type": "drill","odb_polarity": "positive","odb_side": "none",
+        "row_num": 10018,"odb_row_num": "19","drl_from_num": "3","drl_to_num": "4"
+    },
+    "d4-5": {
+        "row": "20","type": "laser_drill","name": "d4-5","context": "board","layer_type": "drill","polarity": "positive","drl_start": "isl4","drl_end": "isl5","gdrl_start": "isl4","gdrl_end": "isl5","drl_start_num": "4","drl_end_num": "5","tl_name": "drill4-5","tl_type": "drill",
+        "tl_num": 10019,"odb_name": "d4-5","odb_context": "board","odb_type": "drill","odb_polarity": "positive","odb_side": "none",
+        "row_num": 10019,"odb_row_num": "20","drl_from_num": "4","drl_to_num": "5"
+    },
+    "d5-6": {
+        "row": "21","type": "laser_drill","name": "d5-6","context": "board","layer_type": "drill","polarity": "positive","drl_start": "isl5","drl_end": "isl6","gdrl_start": "isl5","gdrl_end": "isl6","drl_start_num": "5","drl_end_num": "6","tl_name": "drill5-6","tl_type": "drill",
+        "tl_num": 10020,"odb_name": "d5-6","odb_context": "board","odb_type": "drill","odb_polarity": "positive","odb_side": "none",
+        "row_num": 10020,"odb_row_num": "21","drl_from_num": "5","drl_to_num": "6"
+    },
+    "d6-7": {
+        "row": "22","type": "laser_drill","name": "d6-7","context": "board","layer_type": "drill","polarity": "positive","drl_start": "isl6","drl_end": "isl7","gdrl_start": "isl6","gdrl_end": "isl7","drl_start_num": "6","drl_end_num": "7","tl_name": "drill6-7","tl_type": "drill",
+        "tl_num": 10021,"odb_name": "d6-7","odb_context": "board","odb_type": "drill","odb_polarity": "positive","odb_side": "none",
+        "row_num": 10021,"odb_row_num": "22","drl_from_num": "6","drl_to_num": "7"
+    },
+    "d7-8": {
+        "row": "23","type": "laser_drill","name": "d7-8","context": "board","layer_type": "drill","polarity": "positive","drl_start": "isl7","drl_end": "isl8","gdrl_start": "isl7","gdrl_end": "isl8","drl_start_num": "7","drl_end_num": "8","tl_name": "drill7-8","tl_type": "drill",
+        "tl_num": 10022,"odb_name": "d7-8","odb_context": "board","odb_type": "drill","odb_polarity": "positive","odb_side": "none",
+        "row_num": 10022,"odb_row_num": "23","drl_from_num": "7","drl_to_num": "8"
+    },
+    "d8-9": {
+        "row": "24","type": "laser_drill","name": "d8-9","context": "board","layer_type": "drill","polarity": "positive","drl_start": "isl8","drl_end": "isl9","gdrl_start": "isl8","gdrl_end": "isl9","drl_start_num": "8","drl_end_num": "9","tl_name": "drill8-9","tl_type": "drill",
+        "tl_num": 10023,"odb_name": "d8-9","odb_context": "board","odb_type": "drill","odb_polarity": "positive","odb_side": "none",
+        "row_num": 10023,"odb_row_num": "24","drl_from_num": "8","drl_to_num": "9"
+    },
+    "d9-10": {
+        "row": "25","type": "laser_drill","name": "d9-10","context": "board","layer_type": "drill","polarity": "positive","drl_start": "isl9","drl_end": "bottom","gdrl_start": "isl9","gdrl_end": "bottom","drl_start_num": "9","drl_end_num": "10","tl_name": "drill9-10","tl_type": "drill",
+        "tl_num": 10024,"odb_name": "d9-10","odb_context": "board","odb_type": "drill","odb_polarity": "positive","odb_side": "none",
+        "row_num": 10024,"odb_row_num": "25","drl_from_num": "9","drl_to_num": "10"
+    },
+    "drill": {
+        "row": "26","type": "main_drill","name": "drill","context": "board","layer_type": "drill","polarity": "positive","drl_start": "top","drl_end": "bottom","gdrl_start": "top","gdrl_end": "bottom","drl_start_num": 1,"drl_end_num": 10,"tl_name": "drill","tl_type": "drill",
+        "tl_num": 10025,"odb_name": "drill","odb_context": "board","odb_type": "drill","odb_polarity": "positive","odb_side": "none",
+        "row_num": 10025,"odb_row_num": "26","drl_from_num": 1,"drl_to_num": 10
+    },
+    "rout": {
+        "row": "27","type": "other","name": "__rout__","context": "board","layer_type": "rout","polarity": "positive","drl_start": "top","drl_end": "bottom","gdrl_start": "top","gdrl_end": "bottom","odb_name": "rout","odb_context": "board","odb_type": "rout","odb_polarity": "positive","odb_side": "none","odb_row_num": "27"
+    },
+    "nclegend-1-2": {
+        "row": "28","type": "other","name": "__nclegend-1-2__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 110027,"odb_name": "nclegend-1-2","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
+        "row_num": 110027,"odb_row_num": "28"
+    },
+    "nclegend-2-3": {
+        "row": "29","type": "other","name": "__nclegend-2-3__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 110028,"odb_name": "nclegend-2-3","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
+        "row_num": 110028,"odb_row_num": "29"
+    },
+    "nclegend-3-4": {
+        "row": "30","type": "other","name": "__nclegend-3-4__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 110029,"odb_name": "nclegend-3-4","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
+        "row_num": 110029,"odb_row_num": "30"
+    },
+    "nclegend-4-5": {
+        "row": "31","type": "other","name": "__nclegend-4-5__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 110030,"odb_name": "nclegend-4-5","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
+        "row_num": 110030,"odb_row_num": "31"
+    },
+    "nclegend-5-6": {
+        "row": "32","type": "other","name": "__nclegend-5-6__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 110031,"odb_name": "nclegend-5-6","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
+        "row_num": 110031,"odb_row_num": "32"
+    },
+    "nclegend-6-7": {
+        "row": "33","type": "other","name": "__nclegend-6-7__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 110032,"odb_name": "nclegend-6-7","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
+        "row_num": 110032,"odb_row_num": "33"
+    },
+    "nclegend-7-8": {
+        "row": "34","type": "other","name": "__nclegend-7-8__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 110033,"odb_name": "nclegend-7-8","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
+        "row_num": 110033,"odb_row_num": "34"
+    },
+    "nclegend-8-9": {
+        "row": "35","type": "other","name": "__nclegend-8-9__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 110034,"odb_name": "nclegend-8-9","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
+        "row_num": 110034,"odb_row_num": "35"
+    },
+    "nclegend-9-10": {
+        "row": "36","type": "other","name": "__nclegend-9-10__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 110035,"odb_name": "nclegend-9-10","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
+        "row_num": 110035,"odb_row_num": "36"
+    },
+    "nclegend-1-10": {
+        "row": "37","type": "other","name": "__nclegend-1-10__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 110036,"odb_name": "nclegend-1-10","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
+        "row_num": 110036,"odb_row_num": "37"
+    },
+    "outline": {
+        "row": "38","type": "other","name": "__outline__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 110037,"odb_name": "outline","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
+        "row_num": 110037,"odb_row_num": "38"
+    },
+    "top_assem": {
+        "row": "39","type": "other","name": "__top_assem__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 110038,"odb_name": "top_assem","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
+        "row_num": 110038,"odb_row_num": "39"
+    },
+    "bot_assem": {
+        "row": "40","type": "other","name": "__bot_assem__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 110039,"odb_name": "bot_assem","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
+        "row_num": 110039,"odb_row_num": "40"
+    },
+    "top_testpoint": {
+        "row": "41","type": "other","name": "__top_testpoint__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 110040,"odb_name": "top_testpoint","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
+        "row_num": 110040,"odb_row_num": "41"
+    },
+    "bot_testpoint": {
+        "row": "42","type": "other","name": "__bot_testpoint__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 110041,"odb_name": "bot_testpoint","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
+        "row_num": 110041,"odb_row_num": "42"
+    },
+    "top_osp": {
+        "row": "43","type": "other","name": "__top_osp__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 110042,"odb_name": "top_osp","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
+        "row_num": 110042,"odb_row_num": "43"
+    },
+    "bot_osp": {
+        "row": "44","type": "other","name": "__bot_osp__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 110043,"odb_name": "bot_osp","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
+        "row_num": 110043,"odb_row_num": "44"
+    },
+    "top_enig": {
+        "row": "45","type": "other","name": "__top_enig__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 110044,"odb_name": "top_enig","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
+        "row_num": 110044,"odb_row_num": "45"
+    },
+    "bot_enig": {
+        "row": "46","type": "other","name": "__bot_enig__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 110045,"odb_name": "bot_enig","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
+        "row_num": 110045,"odb_row_num": "46"
+    },
+    "fab_page2": {
+        "row": "47","type": "other","name": "__fab_page2__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 110046,"odb_name": "fab_page2","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
+        "row_num": 110046,"odb_row_num": "47"
+    },
+    "tmp_top_shorts": {
+        "row": "48","type": "other","name": "__tmp_top_shorts__","context": "misc","layer_type": "signal","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 110047,"odb_name": "tmp_top_shorts","odb_context": "misc","odb_type": "signal","odb_polarity": "positive","odb_side": "none",
+        "row_num": 110047,"odb_row_num": "48"
+    },
+    "tmp_bot_shorts": {
+        "row": "49","type": "other","name": "__tmp_bot_shorts__","context": "misc","layer_type": "signal","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 110048,"odb_name": "tmp_bot_shorts","odb_context": "misc","odb_type": "signal","odb_polarity": "positive","odb_side": "none",
+        "row_num": 110048,"odb_row_num": "49"
+    },
+    "bot_assy_mate": {
+        "row": "50","type": "other","name": "__bot_assy_mate__","context": "misc","layer_type": "signal","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 110049,"odb_name": "bot_assy_mate","odb_context": "misc","odb_type": "signal","odb_polarity": "positive","odb_side": "none",
+        "row_num": 110049,"odb_row_num": "50"
+    },
+    "outline+1": {
+        "row": "51","type": "other","name": "__outline+1__","context": "misc","layer_type": "signal","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 110050,"odb_name": "outline+1","odb_context": "misc","odb_type": "signal","odb_polarity": "positive","odb_side": "none",
+        "row_num": 110050,"odb_row_num": "51"
+    },
+    "top_assy_mate": {
+        "row": "52","type": "other","name": "__top_assy_mate__","context": "misc","layer_type": "signal","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 110051,"odb_name": "top_assy_mate","odb_context": "misc","odb_type": "signal","odb_polarity": "positive","odb_side": "none",
+        "row_num": 110051,"odb_row_num": "52"
+    }
+}
+}
+
+
+
+
diff --git a/ats/input/ATS_AIM_input_data.js b/ats/input/ATS_AIM_input_data.js
new file mode 100644
index 0000000000000000000000000000000000000000..99d8fe2172833527818c956bc0bce56a20612042
--- /dev/null
+++ b/ats/input/ATS_AIM_input_data.js
@@ -0,0 +1,303 @@
+
+
+/*
+NAME: 
+DESCRIPTION: ;
+PARAMETER:
+    [
+		{
+			name : 'path',
+			title : '资料路径',
+			type : 'LineEdit',
+			property : {tool_tip : '存放所有料号的文件夹路径,不需要进入到料号文件夹内'},
+		},
+		{
+			name : 'customer',
+			title : '客户配置',
+			type : 'LineEdit',
+			property : {tool_tip : '客户配置'},
+		},
+		{
+			name : 'config_path',
+			title : '配置地址',
+			type : 'LineEdit',
+			property : {tool_tip : '配置的路径'},
+		}
+	]
+	
+ VERSION_HISTORY:
+	V1.00 2020-04-16 Scott Sun
+	    1.新版本
+		
+ HELP:
+ 	<html><body bgcolor="#DDECFE">
+		<font size="3" color="#003DB2"><p>功能简介</p></font>
+		<p> 客户数据导入 </p>
+		<br>
+		<font size="3" color="#003DB2"><p>参数配置</p></font>
+		<p> 料号 和 客户配置 </p>
+		<br>
+		<font size="3" color="#003DB2"><p>注意事项</p></font>
+		<p> æ—  </p>
+		<br>
+	</body></html>	
+*/
+//////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////
+// 引入模块 包
+console.log("=============================================>input_start");
+console.log("=============================================>input_start");
+console.log("=============================================>input_start");
+console.log("=============================================>input_start");
+var $ = require('topcam.scriptfunc').argv();
+var fs = require('fs');
+var _ = require('lodash');
+var database = require("topsin.database");
+database.addConnection($.conf.database_conf, "DFM");
+var QDfm = database.query("DFM");
+if ($.conf.product_type == "aimdfm") {
+	QDfm.updateRow({
+		table: "pdm_aimdfm_task",
+		data: {
+			current_process_title: $.process_title
+		},
+		where: { id: $.task_id }
+	});
+}
+var GEN = $.gen;
+var Job = $.job_name;
+var db = $.db;
+var Status = 'ok';
+var resultData = [];
+var PAR = {};
+if ($.hasOwnProperty('script_parameter')){
+	PAR = JSON.parse($.script_parameter);
+}
+if (!$.hasOwnProperty('config_path')){
+	PAR.config_path = "cam/input_data"
+}
+try {
+	var par = PAR;
+	
+	console.log(par);
+	
+	if(!par.hasOwnProperty("customer")){throw "未填写配置"};
+	par.customer = par.customer[0].toUpperCase()+par.customer.slice(1).toLowerCase()
+	var cfg = db.query("",function(q){
+		return q.selectValue({
+			table:'pub_conf',
+			field:'text_data',
+			where:{path : par.config_path}
+		})
+	});
+
+	if (!cfg || cfg == ""){throw "cfg can not find"}  
+	
+	var config = eval(cfg);
+	if(!config.hasOwnProperty("customer")){throw "config error"}
+	var job = Job;
+	if(_.isEmpty(job)) throw "没有传入料号名!";
+	job = job.toLowerCase()
+	// 如果genesis已经存在这个料号
+	err = delSameJob({job:job,delSame:config.delSameJob}); if(err){throw err};
+	var custCfg = config.customer[par.customer]
+	if(!custCfg){throw "config error"}
+	var step = custCfg.step.toLowerCase()
+	// 获取路径下文件信息
+	var path = par.path || custCfg.path
+	var pathInfo = fs.listDir(path, 1)
+	// 判断存不存在料号文件
+	var jobFile = pathInfo.filter(function(v){return v.baseName.toLowerCase() == job})
+	if(jobFile.length == 0){throw "job file is not exist"}
+	var jobFiles = []  // 记录要分析的文件
+	if (!jobFile[0].isDir) {
+		jobFiles.push(jobFile[0])
+	} else {
+		jobFiles = fs.listDir(jobFile[0].path)
+	}
+	// 分析料号文件 得到料号导入信息 导入类型
+	var jobInfo = analyJobFiles({jobFiles:jobFiles.filter(function(v){return v.isFile}),custCfg:custCfg,config:config,job:job })
+	if(jobInfo.data.length == 0){throw "file error"}
+	var importOk = false;  // 是否成功导入
+	if(/odb/ig.test(jobInfo.type)){  // odb导入
+		if(jobInfo.data.length == 1){  // 只分析到一个tgz文件 直接导入
+			var err = importJob({name:job,db:custCfg.db,path:jobInfo.data[0].file.path},config.delSameJob)
+			if(err){throw err}
+		} else {  // 多个tgz文件 说明需要合并
+			var mergeFiles = jobInfo.data.filter(function(item){
+				var err = importJob({name:item.file.baseName,db:custCfg.db,path:item.file.path},config.delSameJob)
+				if(err){throw err}
+				return /yes/ig.test(item.format.isMerge)
+			})
+			var arr_job = mergeFiles[0]
+			var arr_step;
+			var steplist = GEN.getStepList({job:arr_job.file.baseName})
+			if(steplist.indexOf(arr_job.format.arrStep) < 0){
+				arr_step = steplist[0]
+			}else{arr_step = arr_job.format.arrStep}
+			GEN.openJob({job:job});
+			GEN.openJob({job:arr_job.file.baseName});
+			GEN.copyStep({  // 合并
+				source_job:arr_job.file.baseName,
+				source_name:arr_step,
+				dest_job:job,
+				dest_name:arr_step,
+			});
+			GEN.closeJob({ job: arr_job.file.baseName });
+			GEN.deleteJob({ job: arr_job.file.baseName });  // 合并后 删除array的料号
+		}
+		importOk = true
+	}
+
+	if(/gerber/ig.test(jobInfo.type)){  // gerber导入
+		GEN.createJob({name:job,db:custCfg.db})
+		GEN.createStep({job:job,name:step})
+		var gerberInfo = jobInfo.data.map(function(item){
+			var gerberCfg = JSON.parse(JSON.stringify(item.format));
+			var file = item.file
+			gerberCfg.layer = file.name.toLowerCase()
+			gerberCfg.path = file.path
+			gerberCfg.format = item.type
+			gerberCfg.job = job
+			gerberCfg.step = step
+			return gerberCfg
+		})
+		GEN.COM("input_manual_reset")
+		gerberInfo.forEach(function(v){
+			GEN.COM("input_manual_set",v)
+		})
+		GEN.COM("input_manual")
+		importOk = true
+	}
+
+	if(!importOk){throw "import error"}
+
+	// 导入结束
+	var matrix = GEN.getMatrix({job:job}); 
+	comp = Object.keys(matrix).filter(function(v){  // 如果有comp层 删除
+		return /^comp_\+_/ig.test(v)
+	})
+	if (comp.length > 0){
+		var tmp = GEN.getStepList({job:job})
+		GEN.openStep({job:job,name:tmp[0]})
+		GEN.COM("delete_comp")
+		GEN.closeStep()
+	}
+
+	GEN.checkInout({job:job,mode:"out"})  // 结束保存料号 关闭料号
+	GEN.saveJob({ job: job });
+	GEN.checkInout({job:job,mode:"in"})
+	GEN.closeJob({job:job})
+
+	QDfm.updateRow({
+		table: "pdm_aimdfm_task",
+		data: {
+			progress: 33.33
+		},
+		where: { id: $.task_id }
+	});
+	if (GEN.hasError()) {
+		Status = 'error';
+		resultData.push({ type: "error", title: "GEN错误!", detail: [{ desc: _.join(GEN.STATUS, "\n") }] });
+		return {
+			status: Status,
+			result_data: resultData
+		};
+	} else {
+		resultData.push({ type: "info", title: "操作完成, 请注意检查!" });
+		return {
+			status: Status,
+			result_data: resultData
+		};
+	}
+
+}
+catch (e) {
+	Status = 'error';
+	console.log("====================================>error");
+	console.log(_.toString(e));
+    resultData.push({type: "error", title: "脚本执行出错!", detail: [{desc: _.toString(e)}]});
+    return {status: Status, result_data: resultData};
+}
+
+function delSameJob(props){
+    var job = props.job
+    var delSame = props.delSame
+    if(GEN.isJobExists({job:job})){   
+        if(/^yes$/ig.test(delSame)){
+            if(GEN.isJobOpen({job:job})){ GEN.closeJob({job:job}) }
+            GEN.deleteJob({job:job})
+        } else {
+            return "job "+ job+ " exist"
+        }
+    }
+}
+function analyJobFiles(props){
+	var files = props.jobFiles;
+	var config = props.config;
+	var job = props.job;
+	var custCfg = props.custCfg;
+	var rules = custCfg.rules;
+	var paramsFile = files.filter(function(file){return /param/ig.test(file.baseName)})
+	var tmp_hash = {}
+	paramsFile.forEach(function(file){
+		tmp_hash[file.baseName] = (function(){
+			var tmparr = fs.readFile(file.path).split("\n")
+			var tmp = {}
+			tmparr.map(function(v){
+				var arr = v.split(/\b\s+\b/)
+				tmp[arr[0].replace(/-/ig,"_")] = arr[1]
+			})
+			return tmp
+		})() 
+	})
+	
+	var fileInfo = files.reduce(function(a,file){
+		try {
+			rules.forEach(function(item){
+				if(item.valid({file:file, job:job})){
+					var format = config.formats[item.format]
+					var format1;
+					if(item.format_params){
+						format1 = item.format_params({params:tmp_hash})
+					}
+					if(format1){
+						throw {file:file,type:item.type,format:format1}
+					}else{
+						throw {file:file,type:item.type,format:format}
+					}
+				}
+			})
+		} catch (info) { 
+			a.push(info)
+		}
+		return a
+	},[])
+	var odbfiles = fileInfo.filter(function(item){return /odb/ig.test(item.type)})
+	if(odbfiles.length == 0){
+		return {
+			type: "Gerber",
+			data: fileInfo
+		}
+	} else {
+		return {
+			type: "ODB",
+			data: odbfiles
+		}
+	}
+}
+function importJob(props,delSameJob){
+    var name = props.name
+    if (GEN.isJobExists({ job: name })) {
+        if (/^yes$/ig.test(delSameJob)) {
+            if(GEN.isJobOpen({ job: name })){ GEN.closeJob({ job: name }); }
+            GEN.deleteJob({ job: name });
+        }
+        else {
+            return "job "+name+" exist";
+        }
+    }
+    GEN.importJob(props);
+}
+
+
diff --git a/ats/rename/ATS_AIM_layer_rename_and_sort.js b/ats/rename/ATS_AIM_layer_rename_and_sort.js
new file mode 100644
index 0000000000000000000000000000000000000000..749ecd5c5759d36099febfabbf357da219707052
--- /dev/null
+++ b/ats/rename/ATS_AIM_layer_rename_and_sort.js
@@ -0,0 +1,405 @@
+/*
+NAME: 
+DESCRIPTION: ;
+PARAMETER:
+    [
+		{
+			name : 'customer',
+			title : '客户配置',
+			type : 'LineEdit',
+			property : {tool_tip : '客户配置'},
+        },
+        {
+			name : 'config_path',
+			title : '配置地址',
+			type : 'LineEdit',
+			property : {tool_tip : '配置的路径'},
+		}
+	]
+	
+ VERSION_HISTORY:
+	V1.00 2020-04-17 Scott Sun
+	    1.新版本
+		
+ HELP:
+ 	<html><body bgcolor="#DDECFE">
+		<font size="3" color="#003DB2"><p>功能简介</p></font>
+		<p> 数据标准化 </p>
+		<br>
+		<font size="3" color="#003DB2"><p>参数配置</p></font>
+		<p> 客户配置 </p>
+		<br>
+		<font size="3" color="#003DB2"><p>注意事项</p></font>
+		<p> æ—  </p>
+		<br>
+	</body></html>	
+*/
+//////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////
+// 引入模块 包
+console.log("==============================================>data_format")
+var $ = require('topcam.scriptfunc').argv();
+var fs = require('fs');
+var _ = require('lodash');
+var database = require("topsin.database");
+database.addConnection($.conf.database_conf, "DFM");
+var QDfm = database.query("DFM");
+if ($.conf.product_type == "aimdfm") {
+	QDfm.updateRow({
+		table: "pdm_aimdfm_task",
+		data: {
+			current_process_title: $.process_title
+		},
+		where: { id: $.task_id }
+	});
+}
+var GEN = $.gen;
+var Job = $.job_name;
+var db = $.db
+var Status = 'ok';
+var resultData = [];
+var PAR = {};
+if ($.hasOwnProperty('script_parameter')){
+	PAR = JSON.parse($.script_parameter);
+}
+if (!$.hasOwnProperty('config_path')){
+	PAR.config_path = "cam/input_data"
+}
+try {
+    var mode = "use" // develop
+    var par = PAR;
+	if(!par.hasOwnProperty("customer")){throw "未填写配置"}
+    par.customer = par.customer[0].toUpperCase()+par.customer.slice(1).toLowerCase()
+	var cfg = db.query("",function(q){
+		return q.selectValue({
+			table:'pub_conf',
+			field:'text_data',
+			where:{path : par.config_path}
+		})
+	});
+
+	var config = eval(cfg)
+	var job = Job;
+    if(_.isEmpty(job)) throw "没有传入料号名!";
+    job = job.toLowerCase()
+    
+	var custCfg = config.customer[par.customer]	// 获取客户配置
+	if(!custCfg){throw "config error"}
+	var step = custCfg.step.toLowerCase()	// 获取pcs_step
+	// 料号验证
+    if(!GEN.isJobExists({job:job})){ throw "job "+ job+ " is not exist" }
+    if(!GEN.isJobOpen({job:job})){GEN.openJob({job:job})}
+    if(GEN.checkInout({job:job,mode:"test"}) != 0 && mode != "develop"){ throw "the job check" }
+	GEN.checkInout({job:job,mode:"out"});
+
+	// if(config.hasOwnProperty("merge_drill")){ // todo
+	// 	mergeDrill({job:job})
+	// }
+	// start    martix_tl_name
+	var matrix = GEN.getMatrix({job:job})
+	var tl_name_matrix = tlNameMatrix({matrix:matrix,tl_name:custCfg.tl_name})   // 给matrix信息添加tl_name
+
+	var format_cfg = config.data_format   // 拿到数据标准化配置
+
+	// 排序和设属性
+	var ret = sortLayer({job:job, rule:format_cfg, matrix:tl_name_matrix})
+	if(ret.err){throw err}
+	var after_sort_matrix = ret.sortNames
+	// 设置钻孔
+	err = setDrill({job:job, matrix:after_sort_matrix})
+	if(err){throw err}
+	
+	// 改名
+	err = reName({job:job, matrix:after_sort_matrix, cfg:format_cfg})
+	if(err){throw err}
+    // end
+    GEN.checkInout({job:job,mode:"out"})  // 结束保存料号 关闭料号
+	GEN.saveJob({ job: job });
+	GEN.checkInout({job:job,mode:"in"})
+	GEN.closeJob({job:job})
+
+    QDfm.updateRow({
+		table: "pdm_aimdfm_task",
+		data: {
+			progress: 33.33
+		},
+		where: { id: $.task_id }
+	});
+	if (GEN.hasError()) {
+		Status = 'error';
+		resultData.push({ type: "error", title: "GEN错误!", detail: [{ desc: _.join(GEN.STATUS, "\n") }] });
+		return {
+			status: Status,
+			result_data: resultData
+		};
+	} else {
+		resultData.push({ type: "info", title: "操作完成, 请注意检查!" });
+		return {
+			status: Status,
+			result_data: resultData
+		};
+	}
+}
+catch (e) {
+	Status = 'error';
+    resultData.push({type: "error", title: "脚本执行出错!", detail: [{desc: _.toString(e)}]});
+    return {status: Status, result_data: resultData};
+}
+
+function tlNameMatrix(props){  // 设置标准名
+	var matrix = props.matrix
+	var tlname_rules = []
+	props.tl_name.forEach(function(item){
+		if(typeof item.orig_name == "string"){
+			tlname_rules.push(item)
+		} else {
+			item.orig_name.forEach(function(name2){
+				tlname_rules.push({
+					orig_name: name2,
+					tl_name: item.tl_name
+				})
+			})
+		}
+	})
+	var res = Object.keys(matrix).map(function(key){  // 将matrix信息添加tl_name 如果没有tl_name 就返回原信息
+		var val = matrix[key]
+		if(val.hasOwnProperty("tl_name")){delete val.tl_name}
+		var tlRule = tlname_rules.filter(function(rule){
+			if(rule.orig_name === key){return true}
+			var reg = new RegExp(rule.orig_name,"ig")
+			return reg.test(key)
+		})
+		if(tlRule.length == 0){return val}
+		for(var i=0;i<tlRule.length;i++){
+			if(tlRule[i].orig_name === key){return _.assign(val,{tl_name:tlRule[0].tl_name})}
+		}
+		var reg = new RegExp(tlRule[0].orig_name,"ig")
+		var tmp = reg.exec(key)
+		if(tmp && tmp.length){
+			var replaceArr = tmp.slice(1)
+			var tl_name = tlRule[0].tl_name
+			var params = {}
+			for(var i = 0; i<replaceArr.length;i++){
+				params["$"+(i+1)] = replaceArr[i]
+			}
+			replaceArr.forEach(function(v,i){
+				tl_name = tl_name.replace("($"+(i+1)+")",v)
+			})
+			tl_name = replaceTlName(tl_name)
+			function replaceTlName(name){
+				var tmp = /(\([^)]*\))/ig.exec(name)
+				if(!tmp){ return name }
+				var param_arr = tmp[1].match(/\$\d+/ig)
+				var newname = tmp[1]
+				param_arr.forEach(function(v){
+					newname = newname.replace(new RegExp("\\"+v,"ig"), params[v])
+				})
+				newname = name.replace(tmp[1],eval(newname))
+				return replaceTlName(newname)
+			}
+			return _.assign(val,{tl_name:tl_name})
+		}else {
+			return _.assign(val,{tl_name:tlRule[0].tl_name})
+		}
+	})
+	return res
+}
+
+function sortLayer(props){  // 排序方法  {job:要排序的料号, rule: {要改名的规则}
+    var job = props.job
+	var matrix =  GEN.getMatrix({job:job})
+	var tl_matrix = props.matrix
+	var matrixName = Object.keys(matrix).sort(function(a,b){return matrix[a].row - matrix[b].row})
+    var matrixFirst = matrixName[0];  // 记录matrix中第一位
+	var sortNames = [];
+    var miscName = tl_matrix.filter(function(value){  // 找出需要排序的名称列表
+		var flag = true;
+		if (!value.tl_name || value.tl_name == ""){return true}
+		var tl_name = value.tl_name
+        props.rule.forEach(function(item,i){
+            var evalReg = "/"+item.tl_name+"/ig.test(tl_name)";
+            if(tl_name == item.tl_name || eval(evalReg)){
+                flag = false;
+                if(tl_name === item.tl_name){
+                    var _item = JSON.parse(JSON.stringify(item));
+					_item.value = i;
+					_item.name = value.name
+					_item.rule = item.tl_name
+                    sortNames.push(_item);
+                } else {
+                    var _item = JSON.parse(JSON.stringify(item));
+                    _item.value = i;
+					var str = "/"+ item.tl_name +"/ig.exec(tl_name)"
+					_item.value2 = eval(str).pop() - 0;
+					_item.name = value.name
+					_item.rule = item.tl_name
+                    _item.tl_name = tl_name;
+                    sortNames.push(_item);
+                }
+            }
+        });
+        return flag;
+	}).map(function(v){return v.name})
+    miscName.forEach(function(n){ 
+        if(matrix[n].context == 'board'){
+            GEN.matrixLayerAttr({job:job,layer:n,context:'misc'}) 
+        }
+    })
+    sortNames = sortNames.sort(function(a,b){
+        return a.value - b.value || a.value2 - b.value2
+	})
+	// 排序
+    if(sortNames.length){
+        if(sortNames[0].name !== matrixFirst) {  // 如果第一位和matrix中第一位不同,先把第一位插入到最前面
+            GEN.matrixMoveRow({ job:job,layer:sortNames[0].name,before:matrixFirst })
+        }
+        sortNames.forEach(function(v,i,arr){
+            if(i !== 0){
+                GEN.matrixMoveRow({ job:job,layer:v.name,after:arr[i-1].name })             
+            }
+            GEN.matrixLayerAttr(_.assign({job:job,layer:v.name},v.attr));
+        })
+	}
+	return {
+		sortNames:sortNames
+	}
+}
+
+function setDrill(props){   // 设置钻孔
+    var job = props.job
+	var matrix = props.matrix
+	
+    // 获取所有的钻孔层
+    var drillLayer =matrix.filter(function(v){
+        return (v.attr.type == "drill" || v.attr.type == "rout") && v.attr.context == "board"
+    })
+    // 获取所有single层
+    var signalLayer =matrix.filter(function(v){
+        return v.attr.type == "signal" && v.attr.context == "board"
+	})
+	var layerCount = GEN.getLayerCount({job:job})
+    // findSignal 根据传入的数字找到对应的signal层 如 1 => top ; 2 => layer_2 
+    function findSignal(num){
+        return signalLayer[Number(num-1)].name
+	}
+    function doDrill(drills){  // 分析钻孔层
+        return drills.map(function(v){
+            if(v.name == "drill" || v.name=="rout"){
+                return {start:findSignal(1), end:findSignal(layerCount), layer:v.name}
+            } else {
+                var tmp = /(\d+)-(\d+)/ig.exec(v.tl_name);
+                if(tmp){
+                    var start = findSignal(tmp[1]); 
+                    var end = findSignal(tmp[2]); 
+                    return {start:start, end:end, layer:v.name}
+                } else {
+                    return 0;
+                }
+            }
+        })
+    }
+	var drillSetList = doDrill(drillLayer);   // 分析得到钻孔设置结果
+	drillSetList = drillSetList.filter(function(v){return v!==0})
+    drillSetList.forEach(function(v){
+        GEN.matrixLayerDrill({job:job,layer:v.layer,start:v.start ,end:v.end})
+    })
+}
+
+function reName(props) { // 改名 par{job:要改名的料号, rule: {要改名的规则}
+    var job = props.job
+	var matrix = props.matrix
+	var cfg = props.cfg
+	matrix = matrix.filter(function(v){return v.name != v.new_name})
+	var rename_list = matrix.map(function(item){
+		var new_name;
+		var tl_name = item.tl_name
+		var rule = item.rule
+		if(rule === tl_name){
+			new_name = item.new_name
+		} else {
+			var reg = new RegExp(rule,"ig")
+			var tmp = reg.exec(tl_name)
+			if(!tmp){return undefined}
+			var replaceArr = tmp.slice(1)
+			new_name = item.new_name
+			var params = {}
+			for(var i = 0; i<replaceArr.length;i++){
+				params["$"+(i+1)] = replaceArr[i]
+			}
+			replaceArr.forEach(function(v,i){
+				tl_name = tl_name.replace("($"+(i+1)+")",v)
+			})
+			new_name = replaceTlName(new_name)
+			function replaceTlName(name){
+				var tmp = /(\([^)]*\))/ig.exec(name)
+				if(!tmp){ return name }
+				var param_arr = tmp[1].match(/\$\d+/ig)
+				var newname = tmp[1]
+				param_arr.forEach(function(v){
+					newname = newname.replace(new RegExp("\\"+v,"ig"), params[v])
+				})
+				newname = name.replace(tmp[1],eval(newname))
+				return replaceTlName(newname)
+			}
+		}
+		return {
+			orig_name: item.name,
+			new_name: new_name
+		}
+	})
+	rename_list = rename_list.filter(function(v){
+		var flag = true
+		if(!v){flag = false}
+		if(!v.orig_name || !v.new_name ){flag = false}
+		return flag
+	})
+	rename_list.forEach(function(v){
+        if(v.orig_name !== v.new_name){
+            GEN.renameLayer({job:job,layer:v.orig_name,new_name:v.new_name})
+        }
+    });
+}
+
+function mergeDrill(props){ // 合并钻孔
+    var newdrills = []
+    var job = props.job;
+    var step = GEN.getStepList({job:job})[0];
+    var maxDrill = {name:"",value:0};
+    function getDrl(str){
+        var num = /(\d+)-(\d+)\.drl/ig.exec(str);  // 匹配出 num-num
+        var tmp = [];
+        for(var i = Number(num[1]);i<num[2];i++){
+            if(i == 1){
+                maxDrill = Number(num[2]) >  maxDrill.value? {name:str,value:Number(num[2])} : maxDrill;
+            }
+            tmp.push("L"+i+"-"+(i+1));
+        }
+        return tmp;
+    } 
+    var matrix = GEN.getMatrix({job:job});
+    GEN.openStep({job : job,name:step});
+    for(var key in matrix){
+        var val = matrix[key];
+        if(val.layer_type == "drill" && /(\d+)-(\d+)\.drl/ig.test(val.name)){
+            var mergeTo = getDrl(val.name) // 要合并到的地方
+            mergeTo.forEach(function(layerName){
+                if(GEN.isLayerExists({job : job ,layer:layerName.toLowerCase()}) && newdrills.indexOf(layerName.toLowerCase()) < 0){
+                    GEN.deleteLayer({job:job, layer:layerName.toLowerCase()})
+                }
+                if(!GEN.isLayerExists({job : job ,layer:layerName.toLowerCase()})){
+                    GEN.createLayer({job:job,layer:layerName.toLowerCase(),conext:'board',type:val.layer_type});
+                    newdrills.push(layerName.toLowerCase())
+                }
+                GEN.workLayer({name:layerName.toLowerCase(),display_number:1,clear_before:'yes'});
+                GEN.copyLayer({source_job:job ,mode:'append',source_step:step,source_layer:val.name,dest_layer:layerName.toLowerCase()});
+            })
+        }
+    }
+    GEN.createLayer({job:job,layer:"b1-"+maxDrill.value,conext:'board',type:'drill'});
+    GEN.workLayer({name:"b1-"+maxDrill.value,display_number:1,clear_before:'yes'});
+    GEN.copyLayer({source_job:job ,mode:'append',source_step:step,source_layer:maxDrill.name,dest_layer:"b1-"+maxDrill.value});
+	GEN.affectedLayer({affected:"no",mode:"all"});
+	GEN.clearLayers();
+    GEN.closeStep();
+}
+
diff --git a/config_ats.js b/config_ats.js
new file mode 100644
index 0000000000000000000000000000000000000000..b690dae86736bf5f0a279edfbc1bb5f0dcc04fd9
--- /dev/null
+++ b/config_ats.js
@@ -0,0 +1,491 @@
+(function(){return {
+	"formats": {
+		"ODB": {},
+		"ODB_1": { 
+			"comments": "", 
+			"arrStep": "stp",
+			"isMerge": "yes"
+		 },
+		"Gerber274x_1": { 
+			"nf1": 3,
+			"nf2": 4,
+			"units": "mm",
+			"zeroes": "leading",
+			"decimal": "no",
+			"nf_comp": 0,
+			"break_sr": "yes",
+			"data_type": "ascii",
+			"separator": "*",
+			"threshold": 200,
+			"drill_only": "no",
+			"multiplier": 1,
+			"resolution": 3,
+			"tool_units": "inch",
+			"coordinates": "absolute",
+			"merge_by_rule": "no",
+			"signed_coords": "no",
+			"text_line_width": 0.0024
+		},
+		"Gerber274x_2": {   
+			"nf1": 3,
+			"nf2": 5,
+			"units": "inch",
+			"zeroes": "leading",
+			"decimal": "no",
+			"nf_comp": 0,
+			"break_sr": "yes",
+			"data_type": "ascii",
+			"separator": "*",
+			"threshold": 200,
+			"drill_only": "no",
+			"multiplier": 1,
+			"resolution": 3,
+			"tool_units": "inch",
+			"coordinates": "absolute",
+			"merge_by_rule": "no",
+			"signed_coords": "no",
+			"text_line_width": 0.0024
+		},
+		"Excellon1_1":{ 
+			"nf1": 3,
+			"nf2": 0,
+			"units": "mm",
+			"zeroes": "leading",
+			"decimal": "yes",
+			"nf_comp": 0,
+			"break_sr": "yes",
+			"data_type": "ascii",
+			"separator": "nl",
+			"threshold": 200,
+			"drill_only": "no",
+			"multiplier": 1,
+			"resolution": 3,
+			"tool_units": "mm",
+			"coordinates": "absolute",
+			"merge_by_rule": "no",
+			"signed_coords": "no",
+			"text_line_width": 0.0024
+		},
+		"Excellon2_1": {   
+			"nf1": 3,
+			"nf2": 5,
+			"units": "mm",
+			"zeroes": "leading",
+			"decimal": "no",
+			"nf_comp": 0,
+			"break_sr": "yes",
+			"data_type": "ascii",
+			"separator": "nl",
+			"threshold": 200,
+			"drill_only": "no",
+			"multiplier": 1,
+			"resolution": 3,
+			"tool_units": "mm",
+			"coordinates": "absolute",
+			"merge_by_rule": "no",
+			"signed_coords": "no",
+			"text_line_width": 0.0024
+		},
+		"Excellon2_2": {
+			"nf1": 2,
+			"nf2": 3,
+			"units": "inch",
+			"zeroes": "leading",
+			"decimal": "no",
+			"nf_comp": 0,
+			"break_sr": "yes",
+			"data_type": "ascii",
+			"separator": "nl",
+			"threshold": 200,
+			"drill_only": "no",
+			"multiplier": 1,
+			"resolution": 3,
+			"tool_units": "inch",
+			"coordinates": "absolute",
+			"merge_by_rule": "no",
+			"signed_coords": "no",
+			"text_line_width": 0.0024
+		},
+		"Excellon2_3": { 
+			"nf1": 2,
+			"nf2": 5,
+			"units": "inch",
+			"zeroes": "trailing",
+			"decimal": "no",
+			"nf_comp": 0,
+			"break_sr": "yes",
+			"data_type": "ascii",
+			"separator": "nl",
+			"threshold": 200,
+			"drill_only": "no",
+			"multiplier": 1,
+			"resolution": 3,
+			"tool_units": "mm",
+			"coordinates": "absolute",
+			"merge_by_rule": "no",
+			"signed_coords": "no",
+			"text_line_width": 0.0024
+		},
+		"IPC356_1": {  
+			"nf1": 2,
+			"nf2": 4,
+			"units": "inch",
+			"zeroes": "none",
+			"decimal": "no",
+			"nf_comp": 0,
+			"break_sr": "yes",
+			"data_type": "ascii",
+			"separator": "*",
+			"threshold": 200,
+			"drill_only": "no",
+			"multiplier": 1,
+			"resolution": 3,
+			"tool_units": "inch",
+			"coordinates": "absolute",
+			"merge_by_rule": "no",
+			"signed_coords": "no",
+			"text_line_width": 0.0024
+		}
+	},
+	"customer": {
+		"Customer_1": {
+			"path": "/opt/resource/customer_1",
+			"db": "server_db",
+			"step": "cad",
+			"rules": [
+				{ 
+					"valid": function(props){
+						var file = props.file;
+						var job = props.job;
+						var reg = new RegExp("^"+job+"-a","ig")
+						return /.+\.tgz$/ig.test(file.name) && reg.test(file.baseName)
+					}, 
+					"type": "ODB",		
+					"format": "ODB_1"
+				},
+				{ 
+					"valid": function(props){
+						var file = props.file;
+						var job = props.job;
+						return /.+\.tgz$/ig.test(file.name) && job == file.baseName
+					}, 
+					"type": "ODB",		
+					"format": "ODB"
+				},
+				{
+					"valid": function(props){
+						var file = props.file;
+						return /.+\.drd$/ig.test(file.name)
+					},  
+					"type": "Excellon1",		
+					"format": "Excellon1_1"
+				},
+				{
+					"valid": function(props){
+						var file = props.file;
+						return /.+\.phd$/ig.test(file.name)
+					},  
+					"type": "Gerber274x",		
+					"format": "Gerber274x_1"
+				}
+			],
+			"tl_name": [
+				{"orig_name" : "^spt$", "tl_name" : "spt" },
+				{"orig_name" : "^smt$", "tl_name" : "smt" },
+				{"orig_name" : "^smb$", "tl_name" : "smb" },
+				{"orig_name" : "^spb$", "tl_name" : "spb" },
+				{"orig_name" : "^ssb$", "tl_name" : "ssb" },
+				{"orig_name" : "^sst$", "tl_name" : "sst" },
+				{"orig_name" : "^top$", "tl_name" : "top" },
+				{"orig_name" : "^drill$", "tl_name" : "drill" },
+				{"orig_name" : "^rout$", "tl_name" : "rout" },
+				{"orig_name" : "^bottom$", "tl_name" : "bottom" },
+				{"orig_name" : ["^isl(\\d+)$","^layer_(\\d+)$"], "tl_name" : "l_($1)"},
+				{"orig_name" : ["_isl(\\d+)_isl(\\d+)","d(\\d+)-(\\d+)"], "tl_name" : "d_($1)-($2)"},
+				{"orig_name" : ["_top_isl(\\d+)"], "tl_name" : "d_1-($1)"},
+				{"orig_name" : ["_isl(\\d+)_bottom"], "tl_name" : "d_($1)-($1+1)"}
+			]
+		},
+		"Customer_2": {
+			"path": "/opt/resource/customer_2",
+			"db": "server_db",
+			"step": "cad",
+			"rules": [
+				{ 
+					"valid": function(props){
+						var file = props.file;
+						return /.+\.tgz$/ig.test(file.name)
+					}, 
+					"type": "ODB",		
+					"format": "ODB"
+				},
+				{
+					"valid": function(props){
+						var file = props.file;
+						return /.+\.ipc$/ig.test(file.name)
+					},  
+					"type": "IPC356",		
+					"format": "IPC356_1"
+				},
+				{
+					"valid": function(props){
+						var file = props.file;
+						return /.+\.rou$/ig.test(file.name)
+					},  
+					"type": "Excellon2",		
+					"format": "Excellon2_3"
+				},
+				{
+					"valid": function(props){
+						var file = props.file;
+						return /.+\.art$/ig.test(file.name)
+					},  
+					"type": "Gerber274x",		
+					"format": "Gerber274x_2",
+					"format_params": function(props){
+						var params = props.params
+						if(params.art_param){
+							var leading = params.art_param["SUPPRESS_LEAD_ZEROES"]
+							var trailing = params.art_param["SUPPRESS_TRAIL_ZEROES"]
+							var zeroes = "none"
+							if(/yes/ig.test(leading)){
+								zeroes = "leading"
+							}
+							if(/yes/ig.test(trailing)){
+								zeroes = "trailing"
+							}
+							var nf1,nf2
+							if(params.art_param.hasOwnProperty("FORMAT")){
+								var tmp = params.art_param["FORMAT"].split(".")
+								if(/\d+/ig.test(tmp[0])){nf1 = Number(tmp[0])}
+								if(/\d+/ig.test(tmp[1])){nf2 = Number(tmp[1])}
+							}
+							return {
+								"nf1": nf1 || 3,
+								"nf2": nf2 || 5,
+								"units": /METRIC|MM/ig.test(params.art_param["OUTPUT_UNITS"])? "mm" :"inch",
+								"zeroes": zeroes,
+								"decimal": "no",
+								"nf_comp": 0,
+								"break_sr": "yes",
+								"data_type": "ascii",
+								"separator": "*",
+								"threshold": 200,
+								"drill_only": "no",
+								"multiplier": 1,
+								"resolution": 3,
+								"tool_units": /METRIC|MM/ig.test(params.art_param["OUTPUT_UNITS"])? "mm" :"inch",
+								"coordinates": "absolute",
+								"merge_by_rule": "no",
+								"signed_coords": "no",
+								"text_line_width": 0.0024
+							}
+						}
+					}
+				},
+				{
+					"valid": function(props){
+						var file = props.file;
+						return /.+\.drl$/ig.test(file.name)
+					},  
+					"type": "Excellon2",		
+					"format": "Excellon2_1",
+					"format_params": function(props){
+						var params = props.params
+						if(params.nc_param){
+							var leading = params.nc_param["SUPPRESS_LEAD_ZEROES"]
+							var trailing = params.nc_param["SUPPRESS_TRAIL_ZEROES"]
+							var zeroes = "none"
+							if(/yes/ig.test(leading)){
+								zeroes = "leading"
+							}
+							if(/yes/ig.test(trailing)){
+								zeroes = "trailing"
+							}
+							return {
+								"nf1": params.nc_param["INTEGER_PLACES"]? Number(params.nc_param["INTEGER_PLACES"]) : 3,
+								"nf2": params.nc_param["DECIMAL_PLACES"]? Number(params.nc_param["DECIMAL_PLACES"]) : 5,
+								"units": /METRIC|MM/ig.test(params.nc_param["OUTPUT_UNITS"])? "mm" :"inch",
+								"zeroes": zeroes,
+								"decimal": "no",
+								"nf_comp": 0,
+								"break_sr": "yes",
+								"data_type": "ascii",
+								"separator": "nl",
+								"threshold": 200,
+								"drill_only": "no",
+								"multiplier": 1,
+								"resolution": 3,
+								"tool_units": /METRIC|MM/ig.test(params.nc_param["OUTPUT_UNITS"])? "mm" :"inch",
+								"coordinates": params.nc_param["COORDINATES"]? params.nc_param["COORDINATES"].toLowerCase() :"absolute",
+								"merge_by_rule": "no",
+								"signed_coords": "no",
+								"text_line_width": 0.0024
+							}
+						}
+					}
+				}
+			],
+			"tl_name": [
+				{"orig_name" : ["assytop.art","past_top"], "tl_name" : "past_top" },
+				{"orig_name" : ["assybot.art","past_botm"], "tl_name" : "past_botm" },
+				{"orig_name" : ["pleg.art","silk_top"], "tl_name" : "silk_top" },
+				{"orig_name" : ["sleg.art","silk_bot"], "tl_name" : "silk_bot" },
+				{"orig_name" : ["ssm.art","sm_top"], "tl_name" : "sm_top" },
+				{"orig_name" : ["psm.art","sm_bot"], "tl_name" : "sm_botm" },
+				{"orig_name" : ["^top$","^top.art$"], "tl_name" : "top" },
+				{"orig_name" : ["^0(\\d+).*ccp_ms","^s(\\d+)\.art","lay(\\d+)\\.art","layer_(\\d+)"], "tl_name" : "l_($1)"},
+				{"orig_name" : ["^bottom$","^bottom.art$"], "tl_name" : "bottom" },
+				{"orig_name" : ["-(\\d+)-(\\d+)\.drl$","(\\d+)-(\\d+)-laser\.drl$","d(\\d+)-(\\d+)"], "tl_name" : "d_($1)-($2)"},
+				{"orig_name" : ["\\.rou$","rout"], "tl_name" : "rout" },
+				{"orig_name" : "fab.art", "tl_name" : "fab.art" },
+				{"orig_name" : ["multipack.art","^array$"], "tl_name" : "array" },
+				{"orig_name" : ["outline.art","^outline$"], "tl_name" : "outline" },
+				{"orig_name" : "top-enig", "tl_name" : "top-enig" },
+				{"orig_name" : "bot-enig", "tl_name" : "bot-enig" },
+				{"orig_name" : "fab_page2", "tl_name" : "fab_page2" },
+			]
+		},
+		"New_data": {
+			"path": "/opt/resource/new_data",
+			"db": "server_db",
+			"step": "cad",
+			"rules": [
+				{ 
+					"valid": function(props){
+						var file = props.file;
+						return /.+\.tgz$/ig.test(file.name)
+					}, 
+					"type": "ODB",		
+					"format": "ODB"
+				},
+				{
+					"valid": function(props){
+						var file = props.file;
+						return /.+\.art$/ig.test(file.name)
+					},  
+					"type": "Gerber274x",		
+					"format": "Gerber274x_2",
+					"format_params": function(props){
+						var params = props.params
+						if(params.art_param){
+							var leading = params.art_param["SUPPRESS_LEAD_ZEROES"]
+							var trailing = params.art_param["SUPPRESS_TRAIL_ZEROES"]
+							var zeroes = "none"
+							if(/yes/ig.test(leading)){
+								zeroes = "leading"
+							}
+							if(/yes/ig.test(trailing)){
+								zeroes = "trailing"
+							}
+							var nf1,nf2
+							if(params.art_param.hasOwnProperty("FORMAT")){
+								var tmp = params.art_param["FORMAT"].split(".")
+								if(/\d+/ig.test(tmp[0])){nf1 = Number(tmp[0])}
+								if(/\d+/ig.test(tmp[1])){nf2 = Number(tmp[1])}
+							}
+							return {
+								"nf1": nf1 || 3,
+								"nf2": nf2 || 5,
+								"units": /METRIC|MM/ig.test(params.art_param["OUTPUT_UNITS"])? "mm" :"inch",
+								"zeroes": zeroes,
+								"decimal": "no",
+								"nf_comp": 0,
+								"break_sr": "yes",
+								"data_type": "ascii",
+								"separator": "*",
+								"threshold": 200,
+								"drill_only": "no",
+								"multiplier": 1,
+								"resolution": 3,
+								"tool_units": /METRIC|MM/ig.test(params.art_param["OUTPUT_UNITS"])? "mm" :"inch",
+								"coordinates": "absolute",
+								"merge_by_rule": "no",
+								"signed_coords": "no",
+								"text_line_width": 0.0024
+							}
+						}
+					}
+				},
+				{
+					"valid": function(props){
+						var file = props.file;
+						return /.+\.drl$/ig.test(file.name)
+					},  
+					"type": "Excellon2",		
+					"format": "Excellon2_1",
+					"format_params": function(props){
+						var params = props.params
+						if(params.nc_param){
+							var leading = params.nc_param["SUPPRESS_LEAD_ZEROES"]
+							var trailing = params.nc_param["SUPPRESS_TRAIL_ZEROES"]
+							var zeroes = "none"
+							if(/yes/ig.test(leading)){
+								zeroes = "leading"
+							}
+							if(/yes/ig.test(trailing)){
+								zeroes = "trailing"
+							}
+							return {
+								"nf1": params.nc_param["INTEGER_PLACES"]? Number(params.nc_param["INTEGER_PLACES"]) : 3,
+								"nf2": params.nc_param["DECIMAL_PLACES"]? Number(params.nc_param["DECIMAL_PLACES"]) : 5,
+								"units": /METRIC|MM/ig.test(params.nc_param["OUTPUT_UNITS"])? "mm" :"inch",
+								"zeroes": zeroes,
+								"decimal": "no",
+								"nf_comp": 0,
+								"break_sr": "yes",
+								"data_type": "ascii",
+								"separator": "nl",
+								"threshold": 200,
+								"drill_only": "no",
+								"multiplier": 1,
+								"resolution": 3,
+								"tool_units": /METRIC|MM/ig.test(params.nc_param["OUTPUT_UNITS"])? "mm" :"inch",
+								"coordinates": params.nc_param["COORDINATES"]? params.nc_param["COORDINATES"].toLowerCase() :"absolute",
+								"merge_by_rule": "no",
+								"signed_coords": "no",
+								"text_line_width": 0.0024
+							}
+						}
+					}
+				}
+			],
+			"tl_name": [
+				{"orig_name" : "pasttop.art", "tl_name" : "past_top" },
+				{"orig_name" : "pleg.art", "tl_name" : "silk_top" },
+				{"orig_name" : "soldtop.art", "tl_name" : "sm_top" },
+				{"orig_name" : ["top.art","^top$"], "tl_name" : "top" },
+				{"orig_name" : ["art(\\d+)\\.art","layer_(\\d+)"], "tl_name" : "l_($1)"},
+				{"orig_name" : ["bottom.art","^bottom$"], "tl_name" : "bottom" },
+				{"orig_name" : "soldbotm.art", "tl_name" : "sm_botm" },
+				{"orig_name" : "sleg.art", "tl_name" : "silk_bot" },
+				{"orig_name" : "pastbotm.art", "tl_name" : "past_botm" },
+				{"orig_name" : "multipack.art", "tl_name" : "array" },
+				{"orig_name" : "outline.art", "tl_name" : "outline" },
+				{"orig_name" : "fab.art", "tl_name" : "fab" },
+				{"orig_name" : "top-enig", "tl_name" : "top-enig" },
+				{"orig_name" : "bot-enig", "tl_name" : "bot-enig" },
+				{"orig_name" : "fab_page2", "tl_name" : "fab_page2" },
+				{"orig_name" : ["(\\d+)-(\\d+)$","d(\\d+)-(\\d+)"], "tl_name" : "d_($1)-($2)"}
+			]
+		}
+	},
+	"data_format": [
+		{"tl_name":"past_top" , "new_name":"past_top" , "attr":{ "context":"board", "type":"solder_paste" }},
+		{"tl_name":"silk_top" , "new_name":"silk_top" , "attr":{ "context":"board", "type":"solder_paste" }},
+		{"tl_name":"sm_top" , "new_name":"sm_top" , "attr":{ "context":"board", "type":"solder_mask" }},
+		{"tl_name":"^top$" , "new_name":"top" , "attr":{ "context":"board", "type":"signal" }},
+		{"tl_name":"l_(\\d+)","new_name":"layer_($1)" ,"attr":{"context":"board","type":"signal"}},
+		{"tl_name":"^bottom$","new_name":"bottom" ,"attr":{"context":"board","type":"signal"}},
+		{"tl_name":"sm_botm" , "new_name":"sm_botm" , "attr":{ "context":"board", "type":"solder_mask" }},
+		{"tl_name":"silk_bot" , "new_name":"silk_bot" , "attr":{ "context":"board", "type":"solder_paste" }},
+		{"tl_name":"past_botm" , "new_name":"past_botm" , "attr":{ "context":"board", "type":"solder_paste" }},
+		{"tl_name":"d_(\\d+)-(\\d+)","new_name":"d($1)-($2)" ,"attr":{"context":"board","type":"drill"}},
+		{"tl_name":"drill","new_name":"drill" ,"attr":{"context":"board","type":"drill"}},
+		{"tl_name":"rout","new_name":"rout" ,"attr":{"context":"board","type":"rout"}},
+		{"tl_name":"array","new_name":"array" ,"attr":{"context":"misc"}},
+		{"tl_name":"outline","new_name":"outline" ,"attr":{"context":"misc"}},
+		{"tl_name":"fab.art","new_name":"fab.art" ,"attr":{"context":"misc"}}
+	],
+	"delSameJob": "no"
+}})()
\ No newline at end of file
diff --git a/jtg js/JTG_ORG_create_outline_aim.js b/jtg js/JTG_ORG_create_outline_aim.js
deleted file mode 100644
index 61ef8931d59971cf8837a43e000089434f2ea7e0..0000000000000000000000000000000000000000
--- a/jtg js/JTG_ORG_create_outline_aim.js	
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
-NAME: 
-DESCRIPTION: ;
-PARAMETER:
-    [
-		{
-			name : 'customer',
-			title : '客户配置',
-			type : 'LineEdit',
-			property : {tool_tip : '客户配置'},
-		}
-	]
-	
- VERSION_HISTORY:
-	V1.00 2020-04-15 Scott Sun
-	    1.新版本
-		
- HELP:
- 	<html><body bgcolor="#DDECFE">
-		<font size="3" color="#003DB2"><p>功能简介</p></font>
-		<p> 数据标准化 </p>
-		<br>
-		<font size="3" color="#003DB2"><p>参数配置</p></font>
-		<p> 客户配置 </p>
-		<br>
-		<font size="3" color="#003DB2"><p>注意事项</p></font>
-		<p> æ—  </p>
-		<br>
-	</body></html>	
-*/
-//////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////
-// 引入模块 包
-var $ = require('topcam.scriptfunc').argv();
-var fs = require('fs');
-var _ = require('lodash');
-var database = require("topsin.database");
-database.addConnection($.conf.database_conf, "DFM");
-var QDfm = database.query("DFM");
-if ($.conf.product_type == "aimdfm") {
-	QDfm.updateRow({
-		table: "pdm_aimdfm_task",
-		data: {
-			current_process_title: $.process_title
-		},
-		where: { id: $.task_id }
-	});
-}
-var GEN = $.gen;
-var Job = $.job_name;
-var db = $.db
-var Status = 'ok';
-var resultData = [];
-var PAR = {};
-if ($.hasOwnProperty('script_parameter')){
-	PAR = JSON.parse($.script_parameter);
-}
-
-try {
-    var par = PAR;
-
-
-    QDfm.updateRow({
-		table: "pdm_aimdfm_task",
-		data: {
-			progress: 33.33
-		},
-		where: { id: $.task_id }
-	});
-	if (GEN.hasError()) {
-		Status = 'error';
-		resultData.push({ type: "error", title: "GEN错误!", detail: [{ desc: _.join(GEN.STATUS, "\n") }] });
-		return {
-			status: Status,
-			result_data: resultData
-		};
-	} else {
-		resultData.push({ type: "info", title: "操作完成, 请注意检查!" });
-		return {
-			status: Status,
-			result_data: resultData
-		};
-	}
-} catch (e) {
-    Status = 'error';
-    resultData.push({type: "error", title: "脚本执行出错!", detail: [{desc: _.toString(e)}]});
-    return {status: Status, result_data: resultData};
-}
\ No newline at end of file
diff --git a/jtg js/JTG_ORG_delete_profile_aim.js b/jtg js/JTG_ORG_delete_profile_aim.js
deleted file mode 100644
index 61ef8931d59971cf8837a43e000089434f2ea7e0..0000000000000000000000000000000000000000
--- a/jtg js/JTG_ORG_delete_profile_aim.js	
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
-NAME: 
-DESCRIPTION: ;
-PARAMETER:
-    [
-		{
-			name : 'customer',
-			title : '客户配置',
-			type : 'LineEdit',
-			property : {tool_tip : '客户配置'},
-		}
-	]
-	
- VERSION_HISTORY:
-	V1.00 2020-04-15 Scott Sun
-	    1.新版本
-		
- HELP:
- 	<html><body bgcolor="#DDECFE">
-		<font size="3" color="#003DB2"><p>功能简介</p></font>
-		<p> 数据标准化 </p>
-		<br>
-		<font size="3" color="#003DB2"><p>参数配置</p></font>
-		<p> 客户配置 </p>
-		<br>
-		<font size="3" color="#003DB2"><p>注意事项</p></font>
-		<p> æ—  </p>
-		<br>
-	</body></html>	
-*/
-//////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////
-// 引入模块 包
-var $ = require('topcam.scriptfunc').argv();
-var fs = require('fs');
-var _ = require('lodash');
-var database = require("topsin.database");
-database.addConnection($.conf.database_conf, "DFM");
-var QDfm = database.query("DFM");
-if ($.conf.product_type == "aimdfm") {
-	QDfm.updateRow({
-		table: "pdm_aimdfm_task",
-		data: {
-			current_process_title: $.process_title
-		},
-		where: { id: $.task_id }
-	});
-}
-var GEN = $.gen;
-var Job = $.job_name;
-var db = $.db
-var Status = 'ok';
-var resultData = [];
-var PAR = {};
-if ($.hasOwnProperty('script_parameter')){
-	PAR = JSON.parse($.script_parameter);
-}
-
-try {
-    var par = PAR;
-
-
-    QDfm.updateRow({
-		table: "pdm_aimdfm_task",
-		data: {
-			progress: 33.33
-		},
-		where: { id: $.task_id }
-	});
-	if (GEN.hasError()) {
-		Status = 'error';
-		resultData.push({ type: "error", title: "GEN错误!", detail: [{ desc: _.join(GEN.STATUS, "\n") }] });
-		return {
-			status: Status,
-			result_data: resultData
-		};
-	} else {
-		resultData.push({ type: "info", title: "操作完成, 请注意检查!" });
-		return {
-			status: Status,
-			result_data: resultData
-		};
-	}
-} catch (e) {
-    Status = 'error';
-    resultData.push({type: "error", title: "脚本执行出错!", detail: [{desc: _.toString(e)}]});
-    return {status: Status, result_data: resultData};
-}
\ No newline at end of file
diff --git a/jtg js/JTG_ORG_input_data_aim.js b/jtg js/JTG_ORG_input_data_aim.js
deleted file mode 100644
index 9381db2891107b67e3899c846543b0083a496251..0000000000000000000000000000000000000000
--- a/jtg js/JTG_ORG_input_data_aim.js	
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
-NAME: 
-DESCRIPTION: ;
-PARAMETER:
-    [
-		{
-            name : 'auto_save',
-			title : '自动保存',
-            type : 'RadioBox',
-            property : {
-				item_list:[
-					{name:'yes',text:'YES'},
-					{name:'no',text:'NO'},
-				],
-				tool_tip:'是否自动保存料号开关'
-			}
-        }
-	]
-	
- VERSION_HISTORY:
-	V1.00 2020-04-15 Scott Sun
-	    1.新版本
-		
- HELP:
- 	<html><body bgcolor="#DDECFE">
-		<font size="3" color="#003DB2"><p>功能简介</p></font>
-		<p> 数据标准化 </p>
-		<br>
-		<font size="3" color="#003DB2"><p>参数配置</p></font>
-		<p> 客户配置 </p>
-		<br>
-		<font size="3" color="#003DB2"><p>注意事项</p></font>
-		<p> æ—  </p>
-		<br>
-	</body></html>	
-*/
-//////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////
-// 引入模块 包
-var $ = require('topcam.scriptfunc').argv();
-var fs = require('fs');
-var _ = require('lodash');
-var database = require("topsin.database");
-database.addConnection($.conf.database_conf, "DFM");
-var QDfm = database.query("DFM");
-if ($.conf.product_type == "aimdfm") {
-	QDfm.updateRow({
-		table: "pdm_aimdfm_task",
-		data: {
-			current_process_title: $.process_title
-		},
-		where: { id: $.task_id }
-	});
-}
-var GEN = $.gen;
-var fs = require("fs");
-var Job = $.job_name;
-var db = $.db
-var Status = 'ok';
-var resultData = [];
-var PAR = {};
-if ($.hasOwnProperty('script_parameter')){
-	PAR = JSON.parse($.script_parameter);
-}
-if (!$.hasOwnProperty('auto_save')){
-	PAR.auto_save = "no"
-}
-
-try {
-    var par = PAR;
-
-    // 检查原稿文件信息
-
-    // 检查料号
-    var job = Job.toLowerCase()
-    if(!GEN.isJobExists({job:job})){throw "料号已经存在"}
-
-    // 读入gerber或者odb++ 判断读入方式
-    var inputInfo = inputInfo()
-    // 读入odb++
-    if(/odb/ig.test(inputInfo.type)){
-        importJob({db:"genesis",path:inputInfo.data.path,name:job})
-    }
-    // 读入gerber
-    if(/gerber/ig.test(inputInfo.type)){
-        importGerber({})
-    }
-    // 保存 
-
-    if(/yes/.test(par.auto_save)){
-        GEN.checkInout({job:job,mode:"out"})  // 结束保存料号 关闭料号
-        GEN.saveJob({ job: job });
-        GEN.checkInout({job:job,mode:"in"})
-        GEN.closeJob({job:job})
-    }
-
-
-    QDfm.updateRow({
-		table: "pdm_aimdfm_task",
-		data: {
-			progress: 33.33
-		},
-		where: { id: $.task_id }
-	});
-	if (GEN.hasError()) {
-		Status = 'error';
-		resultData.push({ type: "error", title: "GEN错误!", detail: [{ desc: _.join(GEN.STATUS, "\n") }] });
-		return {
-			status: Status,
-			result_data: resultData
-		};
-	} else {
-		resultData.push({ type: "info", title: "操作完成, 请注意检查!" });
-		return {
-			status: Status,
-			result_data: resultData
-		};
-	}
-} catch (e) {
-    Status = 'error';
-    resultData.push({type: "error", title: "脚本执行出错!", detail: [{desc: _.toString(e)}]});
-    return {status: Status, result_data: resultData};
-}
-
-function importJob(props){
-    GEN.importJob(props);
-}
-
-function importGerber(props){  // job   db  step
-    var job = props.job
-    var step = props.
-    GEN.createJob({name:job,db:props.db})
-    GEN.createStep({job:job,name:props.step})
-    var gerberInfo = props.data.map(function(item){
-        var gerberCfg = JSON.parse(JSON.stringify(item.format));
-        var file = item.file
-        gerberCfg.layer = file.name.toLowerCase()
-        gerberCfg.path = file.path
-        gerberCfg.format = item.type
-        gerberCfg.job = job
-        gerberCfg.step = step
-        return gerberCfg
-    })
-    GEN.COM("input_manual_reset")
-    gerberInfo.forEach(function(v){
-        GEN.COM("input_manual_set",v)
-    })
-    GEN.COM("input_manual")
-}
\ No newline at end of file
diff --git a/jtg js/JTG_ORG_set_origin_aim.js b/jtg js/JTG_ORG_set_origin_aim.js
deleted file mode 100644
index 61ef8931d59971cf8837a43e000089434f2ea7e0..0000000000000000000000000000000000000000
--- a/jtg js/JTG_ORG_set_origin_aim.js	
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
-NAME: 
-DESCRIPTION: ;
-PARAMETER:
-    [
-		{
-			name : 'customer',
-			title : '客户配置',
-			type : 'LineEdit',
-			property : {tool_tip : '客户配置'},
-		}
-	]
-	
- VERSION_HISTORY:
-	V1.00 2020-04-15 Scott Sun
-	    1.新版本
-		
- HELP:
- 	<html><body bgcolor="#DDECFE">
-		<font size="3" color="#003DB2"><p>功能简介</p></font>
-		<p> 数据标准化 </p>
-		<br>
-		<font size="3" color="#003DB2"><p>参数配置</p></font>
-		<p> 客户配置 </p>
-		<br>
-		<font size="3" color="#003DB2"><p>注意事项</p></font>
-		<p> æ—  </p>
-		<br>
-	</body></html>	
-*/
-//////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////
-// 引入模块 包
-var $ = require('topcam.scriptfunc').argv();
-var fs = require('fs');
-var _ = require('lodash');
-var database = require("topsin.database");
-database.addConnection($.conf.database_conf, "DFM");
-var QDfm = database.query("DFM");
-if ($.conf.product_type == "aimdfm") {
-	QDfm.updateRow({
-		table: "pdm_aimdfm_task",
-		data: {
-			current_process_title: $.process_title
-		},
-		where: { id: $.task_id }
-	});
-}
-var GEN = $.gen;
-var Job = $.job_name;
-var db = $.db
-var Status = 'ok';
-var resultData = [];
-var PAR = {};
-if ($.hasOwnProperty('script_parameter')){
-	PAR = JSON.parse($.script_parameter);
-}
-
-try {
-    var par = PAR;
-
-
-    QDfm.updateRow({
-		table: "pdm_aimdfm_task",
-		data: {
-			progress: 33.33
-		},
-		where: { id: $.task_id }
-	});
-	if (GEN.hasError()) {
-		Status = 'error';
-		resultData.push({ type: "error", title: "GEN错误!", detail: [{ desc: _.join(GEN.STATUS, "\n") }] });
-		return {
-			status: Status,
-			result_data: resultData
-		};
-	} else {
-		resultData.push({ type: "info", title: "操作完成, 请注意检查!" });
-		return {
-			status: Status,
-			result_data: resultData
-		};
-	}
-} catch (e) {
-    Status = 'error';
-    resultData.push({type: "error", title: "脚本执行出错!", detail: [{desc: _.toString(e)}]});
-    return {status: Status, result_data: resultData};
-}
\ No newline at end of file
diff --git a/jtg js/JTG_PUB_auto_save_job_aim.js b/jtg js/JTG_PUB_auto_save_job_aim.js
deleted file mode 100644
index 61ef8931d59971cf8837a43e000089434f2ea7e0..0000000000000000000000000000000000000000
--- a/jtg js/JTG_PUB_auto_save_job_aim.js	
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
-NAME: 
-DESCRIPTION: ;
-PARAMETER:
-    [
-		{
-			name : 'customer',
-			title : '客户配置',
-			type : 'LineEdit',
-			property : {tool_tip : '客户配置'},
-		}
-	]
-	
- VERSION_HISTORY:
-	V1.00 2020-04-15 Scott Sun
-	    1.新版本
-		
- HELP:
- 	<html><body bgcolor="#DDECFE">
-		<font size="3" color="#003DB2"><p>功能简介</p></font>
-		<p> 数据标准化 </p>
-		<br>
-		<font size="3" color="#003DB2"><p>参数配置</p></font>
-		<p> 客户配置 </p>
-		<br>
-		<font size="3" color="#003DB2"><p>注意事项</p></font>
-		<p> æ—  </p>
-		<br>
-	</body></html>	
-*/
-//////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////
-// 引入模块 包
-var $ = require('topcam.scriptfunc').argv();
-var fs = require('fs');
-var _ = require('lodash');
-var database = require("topsin.database");
-database.addConnection($.conf.database_conf, "DFM");
-var QDfm = database.query("DFM");
-if ($.conf.product_type == "aimdfm") {
-	QDfm.updateRow({
-		table: "pdm_aimdfm_task",
-		data: {
-			current_process_title: $.process_title
-		},
-		where: { id: $.task_id }
-	});
-}
-var GEN = $.gen;
-var Job = $.job_name;
-var db = $.db
-var Status = 'ok';
-var resultData = [];
-var PAR = {};
-if ($.hasOwnProperty('script_parameter')){
-	PAR = JSON.parse($.script_parameter);
-}
-
-try {
-    var par = PAR;
-
-
-    QDfm.updateRow({
-		table: "pdm_aimdfm_task",
-		data: {
-			progress: 33.33
-		},
-		where: { id: $.task_id }
-	});
-	if (GEN.hasError()) {
-		Status = 'error';
-		resultData.push({ type: "error", title: "GEN错误!", detail: [{ desc: _.join(GEN.STATUS, "\n") }] });
-		return {
-			status: Status,
-			result_data: resultData
-		};
-	} else {
-		resultData.push({ type: "info", title: "操作完成, 请注意检查!" });
-		return {
-			status: Status,
-			result_data: resultData
-		};
-	}
-} catch (e) {
-    Status = 'error';
-    resultData.push({type: "error", title: "脚本执行出错!", detail: [{desc: _.toString(e)}]});
-    return {status: Status, result_data: resultData};
-}
\ No newline at end of file
diff --git a/jtg js/JTG_PUB_copy_step_aim.js b/jtg js/JTG_PUB_copy_step_aim.js
deleted file mode 100644
index 61ef8931d59971cf8837a43e000089434f2ea7e0..0000000000000000000000000000000000000000
--- a/jtg js/JTG_PUB_copy_step_aim.js	
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
-NAME: 
-DESCRIPTION: ;
-PARAMETER:
-    [
-		{
-			name : 'customer',
-			title : '客户配置',
-			type : 'LineEdit',
-			property : {tool_tip : '客户配置'},
-		}
-	]
-	
- VERSION_HISTORY:
-	V1.00 2020-04-15 Scott Sun
-	    1.新版本
-		
- HELP:
- 	<html><body bgcolor="#DDECFE">
-		<font size="3" color="#003DB2"><p>功能简介</p></font>
-		<p> 数据标准化 </p>
-		<br>
-		<font size="3" color="#003DB2"><p>参数配置</p></font>
-		<p> 客户配置 </p>
-		<br>
-		<font size="3" color="#003DB2"><p>注意事项</p></font>
-		<p> æ—  </p>
-		<br>
-	</body></html>	
-*/
-//////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////
-// 引入模块 包
-var $ = require('topcam.scriptfunc').argv();
-var fs = require('fs');
-var _ = require('lodash');
-var database = require("topsin.database");
-database.addConnection($.conf.database_conf, "DFM");
-var QDfm = database.query("DFM");
-if ($.conf.product_type == "aimdfm") {
-	QDfm.updateRow({
-		table: "pdm_aimdfm_task",
-		data: {
-			current_process_title: $.process_title
-		},
-		where: { id: $.task_id }
-	});
-}
-var GEN = $.gen;
-var Job = $.job_name;
-var db = $.db
-var Status = 'ok';
-var resultData = [];
-var PAR = {};
-if ($.hasOwnProperty('script_parameter')){
-	PAR = JSON.parse($.script_parameter);
-}
-
-try {
-    var par = PAR;
-
-
-    QDfm.updateRow({
-		table: "pdm_aimdfm_task",
-		data: {
-			progress: 33.33
-		},
-		where: { id: $.task_id }
-	});
-	if (GEN.hasError()) {
-		Status = 'error';
-		resultData.push({ type: "error", title: "GEN错误!", detail: [{ desc: _.join(GEN.STATUS, "\n") }] });
-		return {
-			status: Status,
-			result_data: resultData
-		};
-	} else {
-		resultData.push({ type: "info", title: "操作完成, 请注意检查!" });
-		return {
-			status: Status,
-			result_data: resultData
-		};
-	}
-} catch (e) {
-    Status = 'error';
-    resultData.push({type: "error", title: "脚本执行出错!", detail: [{desc: _.toString(e)}]});
-    return {status: Status, result_data: resultData};
-}
\ No newline at end of file
diff --git a/jtg js/node_modules/@types/console/index.d.ts b/jtg js/node_modules/@types/console/index.d.ts
deleted file mode 100644
index 5a3614ebcc2db8e4d00b638e2ddc3453e8e3b240..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/console/index.d.ts	
+++ /dev/null
@@ -1,12 +0,0 @@
-declare namespace TopJsConsole {
-    export function log(f:any, ...args):void
-    export function debug(f:any, ...args):void
-    export function info(f:any, ...args):void
-    export function warn(f:any, ...args):void
-    export function error(f:any, ...args):void
-    export function assert(expression:boolean,f:any, ...args):void
-}
-
-export = TopJsConsole;
-
-
diff --git a/jtg js/node_modules/@types/events/index.d.ts b/jtg js/node_modules/@types/events/index.d.ts
deleted file mode 100644
index bc744cabb1d653573f7016dad770092fee3d9fd7..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/events/index.d.ts	
+++ /dev/null
@@ -1,28 +0,0 @@
-
-declare class TopJsEvents {
-    
-    /**
-     * 绑定事件
-     * @param iEventName : 事件名称
-     * @param iCallback : 事件回调函数
-     * @param iThisObject : 回调函数的this对象
-     */
-    on(iEventName:string, iCallback:(...args)=>any, iThisObject:any):void
-    
-    /**
-     * 清除指定事件的所有回调;
-     * @param iEventName : 事件名称
-     */
-    clearEvent(iEventName):void
-
-    /**
-     * 触发一个事件
-     * @param iEventName : 事件名称
-     * @param args : 事件参数;
-     */
-    emit(iEventName, ...args):void
-}
-
-export = TopJsEvents;
-
-
diff --git a/jtg js/node_modules/@types/fs/index.d.ts b/jtg js/node_modules/@types/fs/index.d.ts
deleted file mode 100644
index 7853c2d9017821035f93cabf793ede1d6ccaa292..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/fs/index.d.ts	
+++ /dev/null
@@ -1,335 +0,0 @@
-import { mkdir } from "fs";
-
-declare namespace TopJSFileSystem {
-
-    export class TextFileStream {
-        /**
-         * 设置文件编码
-         * @param iEncoding 
-         */
-        setCodec(iEncoding:string):void
-
-        /**
-         * 获取设置的文件编码
-         */
-        codec():string
-
-        /**
-         * 设置自动检测Unicode
-         * @param iEnabled 
-         */
-        setAutoDetectUnicode(iEnabled:boolean):void
-
-        /**
-         * 是否自动检测Unicode
-         */
-        isAutoDetectUnicode():boolean
-
-        /**
-         * 设置是否添加编码BOM
-         * @param iGenerated 
-         */
-        setGenerateByteOrderMark(iGenerated:boolean):void
-
-        /**
-         * 是否设置了自动添加BOM
-         */
-        isGenerateByteOrderMark():boolean
-
-        /**
-         * 设置是否每次在写入文件时自动刷新缓存至文件
-         * @param iAutoFlush 
-         */
-        setAutoFlush(iAutoFlush:boolean):void
-
-        /**
-         * 是否每次在写入文件时自动刷新缓存至文件
-         */
-        isAutoFlush():boolean
-
-        /**
-         * 是否读取到文件结尾
-         */
-        atEnd():boolean
-
-        /**
-         * 将文件读取位置重置
-         */
-        reset():void
-
-        /**
-         * 刷新缓存至文件
-         */
-        flush():void
-
-        /**
-         * 寻找文件读取位置
-         * @param iPos 
-         */
-        seek(iPos:Number):boolean
-
-        /**
-         * 获取当前文件读取位置
-         */
-        pos():Number
-
-        /**
-         * 设置自动忽略空格
-         */
-        skipWhiteSpace():void
-
-        /**
-         * 读取一行,iMaxLen为最大读取长度;iMaxLen=0表示不限制大小;
-         * @param iMaxLen 
-         */
-        readLine(iMaxLen:Number=0):string
-
-        /**
-         * 读取全部文件内容
-         */
-        readAll():string
-
-        /**
-         * 读取指定大小文本块
-         * @param iMaxLen 
-         */
-        read(iMaxLen:Number):string
-
-        /**
-         * 写入文件
-         * @param iText 
-         */
-        write(iText:string):void
-
-        /**
-         * 关闭文件句柄
-         */
-        close():void
-    }
-
-    export class RawFileStream {
-        /**
-         * 设置是否每次在写入文件时自动刷新缓存至文件
-         * @param iAutoFlush 
-         */
-        setAutoFlush(iAutoFlush:boolean):void
-
-        /**
-         * 是否每次在写入文件时自动刷新缓存至文件
-         */
-        isAutoFlush():boolean
-
-        /**
-         * 是否读取到文件结尾
-         */
-        atEnd():boolean
-
-        /**
-         * 将文件读取位置重置
-         */
-        reset():void
-
-        /**
-         * 刷新缓存至文件
-         */
-        flush():void
-
-        /**
-         * 寻找文件读取位置
-         * @param iPos 
-         */
-        seek(iPos:Number):void
-
-        /**
-         * 获取当前文件读取位置
-         */
-        pos():Number
-
-
-        /**
-         * 读取全部文件内容
-         */
-        readAll():any
-
-        /**
-         * 读取指定大小文本块
-         * @param iMaxLen 
-         */
-        read(iMaxLen:Number):any
-
-        /**
-         * 写入文件
-         * @param iData
-         */
-        write(iData:any):void
-
-        /**
-         * 关闭文件句柄
-         */
-        close():void
-    
-    }
-
-    export interface FileStat {
-        type:'dir'|'file',
-        isDir:boolean,
-        isFile:boolean,
-        path:string,
-        dir:string,
-        name:string,
-        baseName:string,
-        suffix:string,
-        completeBaseName:string,
-        completeSuffix:string,
-        lastModified:string,
-        lastRead:string,
-        size:string,
-        owner:string,
-        ownerId:Number,
-        group:string,
-        groupId:Number,
-        isSymbolLink:boolean,
-        symbolLinkTarget:string,
-        createTime:string,
-        isExcutable:boolean,
-        isHidden:boolean,
-        isReadable:boolean,
-        isWritable:boolean,
-    }
-
-    export interface WriteFileOptions {
-        encoding:string,
-        append:boolean,
-        withbom:boolean,
-    }
-
-    /**
-     * 找开一个文本文件
-     * @param iFilePath 文件路径
-     * @param iMode 打开方式; r=只读; w=只写; rw=读写; a=以追加模式只写; ra=以追加模式读写;
-     */
-    export function openFile(iFilePath:string, iMode:string='r'):TextFileStream;
-
-    /**
-     * 找开一个二进制文件
-     * @param iFilePath 文件路径
-     * @param iMode 打开方式;默认为只读; r=只读; w=只写; rw=读写; a=以追加模式只写; ra=以追加模式读写;
-     */
-    export function openRawFile(iFilePath:string, iMode:string='r'):RawFileStream;
-
-    /**
-     * 更改文件权限;
-     * @param iPath 
-     * @param iMode 文件权限;Linux文件权限码,如'777','644'
-     */
-    export function chmod(iPath:string, iMode:string):boolean
-    
-    /**
-     * 复制文件, iOptions=false表示如果目标文件已经存在则不覆盖; 为true则强制覆盖;
-     * @param iSrc 
-     * @param iDest 
-     * @param iOptions 
-     */
-    export function copyFile(iSrc:string, iDest:String, iOptions:any=false):boolean
-
-    /**
-     * 判断文件或文件夹是否存在,(任一一种存在都返回true)
-     * @param iPath 
-     */
-    export function exists(iPath:string):boolean
-
-    /**
-     * 判断文件是否存在;
-     * @param iPath 
-     */
-    export function fileExists(iPath:string):boolean
-
-    /**
-     * 判断文件夹是否存在;
-     * @param iPath 
-     */
-    export function dirExists(iPath:string):boolean
-
-    /**
-     * link文件
-     * @param iSrc 
-     * @param iDest 
-     */
-    export function link(iSrc:string, iDest:string):boolean
-    
-    /**
-     * 获取文件信息
-     * @param iPath 
-     */
-    export function stat(iPath):FileStat
-
-    /**
-     * 创建一个文件夹
-     * @param iPath 
-     */
-    export function mkdir(iPath:string):boolean
-    
-    /**
-     * 获取文件的绝对路径
-     * @param iPath 
-     */
-    export function realpath(iPath:string):string
-
-    /**
-     * 重命名或移动文件, iOptions=false表示如果目标文件已经存在则不覆盖; 为true则强制覆盖;
-     * @param iOld 
-     * @param iNew 
-     * @param iOptions 
-     */
-    export function rename(iOld:string, iNew:string, iOptions:any=false):boolean
-
-    /**
-     * 删除文件, iOptions=true表示强制文件夹内的内容; 为false表示只有文件夹为空时才移除;
-     * @param iOld 
-     * @param iOptions 
-     */
-    export function rmdir(iDir:string, iOptions:any=true):boolean
-
-    /**
-     * 删除文件
-     * @param iFile 
-     */
-    export function unlink(iFile:string):boolean
-
-    /**
-     * 获取文件夹下的文件信息列表,iRecursiveLevel表示递归查找多少级,-1表示无限递归,iChildrenKey代表用于表示子文件不会的Key; 如果为空则表示返回结果为一维数组;
-     * @param iDir 
-     * @param iRecursiveLevel 
-     * @param iChildrenKey 
-     */
-    export function listDir(iDir:string, iRecursiveLevel:Number=-1, iChildrenKey:string=''):Array<FileStat>
-
-    /**
-     * 读取文本文件内容
-     * @param iFile 
-     * @param iCodec :文件编码,默认为UTF-8
-     * @param iOptions :预留参数,暂时未使用
-     */
-    export function readFile(iFile:string, iCodec:string='UTF-8',iOptions:any):string
-    
-    /**
-     * 写入一个文本文件
-     * @param iFile 
-     * @param iContent 
-     * @param iOptions : 读写选项;默认为{encoding:'UTF-8', append:false, withbom:false}
-     */
-    export function writeFile(iFile:string, iContent:string, iOptions:WriteFileOptions={encoding:'UTF-8', append:false, withbom:false})
-
-    /**
-     * 获取操作系统临时目录
-     */
-    export function tmpdir():string
-
-    /**
-     * 获取操作系统当前用户HOME目录;
-     */
-    export function homedir():string
-
-}
-
-export = TopJSFileSystem;
diff --git a/jtg js/node_modules/@types/lodash/LICENSE b/jtg js/node_modules/@types/lodash/LICENSE
deleted file mode 100644
index 21071075c24599ee98254f702bcfc504cdc275a6..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/LICENSE	
+++ /dev/null
@@ -1,21 +0,0 @@
-    MIT License
-
-    Copyright (c) Microsoft Corporation. All rights reserved.
-
-    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
diff --git a/jtg js/node_modules/@types/lodash/README.md b/jtg js/node_modules/@types/lodash/README.md
deleted file mode 100644
index 5c4cb7d2f9ba66e8de5933b2d3bd2f8ccd30a84d..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/README.md	
+++ /dev/null
@@ -1,16 +0,0 @@
-# Installation
-> `npm install --save @types/lodash`
-
-# Summary
-This package contains type definitions for Lo-Dash (http://lodash.com/).
-
-# Details
-Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/lodash
-
-Additional Details
- * Last updated: Mon, 18 Jun 2018 22:47:05 GMT
- * Dependencies: none
- * Global values: _
-
-# Credits
-These definitions were written by Brian Zengel <https://github.com/bczengel>, Ilya Mochalov <https://github.com/chrootsu>, Stepan Mikhaylyuk <https://github.com/stepancar>, AJ Richardson <https://github.com/aj-r>, Junyoung Clare Jang <https://github.com/ailrun>, e-cloud <https://github.com/e-cloud>, Georgii Dolzhykov <https://github.com/thorn0>, Jack Moore <https://github.com/jtmthf>, Dominique Rau <https://github.com/DomiR>.
diff --git a/jtg js/node_modules/@types/lodash/add.d.ts b/jtg js/node_modules/@types/lodash/add.d.ts
deleted file mode 100644
index 4650a89c4a043b9da3d63d2acca33e02bffb549b..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/add.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { add } from "./index";
-export = add;
diff --git a/jtg js/node_modules/@types/lodash/after.d.ts b/jtg js/node_modules/@types/lodash/after.d.ts
deleted file mode 100644
index 277ae1ea5332d27bf33f1f89290eafd17996a0b2..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/after.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { after } from "./index";
-export = after;
diff --git a/jtg js/node_modules/@types/lodash/ary.d.ts b/jtg js/node_modules/@types/lodash/ary.d.ts
deleted file mode 100644
index ac1c72e95dc85973faad48d4bc7c282f5c5b0346..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/ary.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { ary } from "./index";
-export = ary;
diff --git a/jtg js/node_modules/@types/lodash/assign.d.ts b/jtg js/node_modules/@types/lodash/assign.d.ts
deleted file mode 100644
index 5ffc1e34d7d3544d8175b972998d4f11fc9aa2c1..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/assign.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { assign } from "./index";
-export = assign;
diff --git a/jtg js/node_modules/@types/lodash/assignIn.d.ts b/jtg js/node_modules/@types/lodash/assignIn.d.ts
deleted file mode 100644
index 3cc54e81782cfef09a0cf41bf84cf6e8adc90c91..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/assignIn.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { assignIn } from "./index";
-export = assignIn;
diff --git a/jtg js/node_modules/@types/lodash/assignInWith.d.ts b/jtg js/node_modules/@types/lodash/assignInWith.d.ts
deleted file mode 100644
index b4c4dfef2b90c5f1245fde16208419754c15f33e..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/assignInWith.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { assignInWith } from "./index";
-export = assignInWith;
diff --git a/jtg js/node_modules/@types/lodash/assignWith.d.ts b/jtg js/node_modules/@types/lodash/assignWith.d.ts
deleted file mode 100644
index 97da10ceb0a3a94a3b70bc94c554178015c72c30..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/assignWith.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { assignWith } from "./index";
-export = assignWith;
diff --git a/jtg js/node_modules/@types/lodash/at.d.ts b/jtg js/node_modules/@types/lodash/at.d.ts
deleted file mode 100644
index 49e71477806a11e88dfb0f529f22300830a1e054..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/at.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { at } from "./index";
-export = at;
diff --git a/jtg js/node_modules/@types/lodash/attempt.d.ts b/jtg js/node_modules/@types/lodash/attempt.d.ts
deleted file mode 100644
index d4b608900ea76fe8edb6aba46c35bfe6fe211349..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/attempt.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { attempt } from "./index";
-export = attempt;
diff --git a/jtg js/node_modules/@types/lodash/before.d.ts b/jtg js/node_modules/@types/lodash/before.d.ts
deleted file mode 100644
index 03c45c8038f31b4f0c4b9e6f03d78d0a6941bf2b..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/before.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { before } from "./index";
-export = before;
diff --git a/jtg js/node_modules/@types/lodash/bind.d.ts b/jtg js/node_modules/@types/lodash/bind.d.ts
deleted file mode 100644
index 6367da1e1cd7307b41852d98b11f365a1d53ac7d..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/bind.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { bind } from "./index";
-export = bind;
diff --git a/jtg js/node_modules/@types/lodash/bindAll.d.ts b/jtg js/node_modules/@types/lodash/bindAll.d.ts
deleted file mode 100644
index 25d47e3972549b1806b42d089370599cba7ddd2a..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/bindAll.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { bindAll } from "./index";
-export = bindAll;
diff --git a/jtg js/node_modules/@types/lodash/bindKey.d.ts b/jtg js/node_modules/@types/lodash/bindKey.d.ts
deleted file mode 100644
index 128b065f3d39ba46975e0fa4eda1d20091f92da6..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/bindKey.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { bindKey } from "./index";
-export = bindKey;
diff --git a/jtg js/node_modules/@types/lodash/camelCase.d.ts b/jtg js/node_modules/@types/lodash/camelCase.d.ts
deleted file mode 100644
index 5c10659d925646ee7c8919c996f4edaa437d6e75..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/camelCase.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { camelCase } from "./index";
-export = camelCase;
diff --git a/jtg js/node_modules/@types/lodash/capitalize.d.ts b/jtg js/node_modules/@types/lodash/capitalize.d.ts
deleted file mode 100644
index 416f5f598acfcfb9db5cb2c210aa1ccf7e51c9cf..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/capitalize.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { capitalize } from "./index";
-export = capitalize;
diff --git a/jtg js/node_modules/@types/lodash/castArray.d.ts b/jtg js/node_modules/@types/lodash/castArray.d.ts
deleted file mode 100644
index 74ea7bd2356bba15d1715ff4e57e04964cac19c7..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/castArray.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { castArray } from "./index";
-export = castArray;
diff --git a/jtg js/node_modules/@types/lodash/ceil.d.ts b/jtg js/node_modules/@types/lodash/ceil.d.ts
deleted file mode 100644
index 0c6f1fd1caecfb774c09a2427348afde878e53fb..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/ceil.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { ceil } from "./index";
-export = ceil;
diff --git a/jtg js/node_modules/@types/lodash/chain.d.ts b/jtg js/node_modules/@types/lodash/chain.d.ts
deleted file mode 100644
index d09d2bb08fa3afddf10789bc47c4c508b1152289..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/chain.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { chain } from "./index";
-export = chain;
diff --git a/jtg js/node_modules/@types/lodash/chunk.d.ts b/jtg js/node_modules/@types/lodash/chunk.d.ts
deleted file mode 100644
index 125c98f7386bfe23e6bb05b90edb646380e24d54..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/chunk.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { chunk } from "./index";
-export = chunk;
diff --git a/jtg js/node_modules/@types/lodash/clamp.d.ts b/jtg js/node_modules/@types/lodash/clamp.d.ts
deleted file mode 100644
index df1706691a253da305ef8be8b6bb50d8100bbc55..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/clamp.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { clamp } from "./index";
-export = clamp;
diff --git a/jtg js/node_modules/@types/lodash/clone.d.ts b/jtg js/node_modules/@types/lodash/clone.d.ts
deleted file mode 100644
index c5884d700e3abe7c4c1d704572032b559c2a0b0f..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/clone.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { clone } from "./index";
-export = clone;
diff --git a/jtg js/node_modules/@types/lodash/cloneDeep.d.ts b/jtg js/node_modules/@types/lodash/cloneDeep.d.ts
deleted file mode 100644
index b7bd89327edf46a0147e0c623fc4d8fbee2b870e..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/cloneDeep.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { cloneDeep } from "./index";
-export = cloneDeep;
diff --git a/jtg js/node_modules/@types/lodash/cloneDeepWith.d.ts b/jtg js/node_modules/@types/lodash/cloneDeepWith.d.ts
deleted file mode 100644
index 3eb368ba77145d2c99e985455f9486d540f14341..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/cloneDeepWith.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { cloneDeepWith } from "./index";
-export = cloneDeepWith;
diff --git a/jtg js/node_modules/@types/lodash/cloneWith.d.ts b/jtg js/node_modules/@types/lodash/cloneWith.d.ts
deleted file mode 100644
index 1e6bf7a808e48569916eb9e1fe088cc072193adc..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/cloneWith.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { cloneWith } from "./index";
-export = cloneWith;
diff --git a/jtg js/node_modules/@types/lodash/common/array.d.ts b/jtg js/node_modules/@types/lodash/common/array.d.ts
deleted file mode 100644
index 6d4aff3056cd59602f398316c96689c08d8e9775..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/common/array.d.ts	
+++ /dev/null
@@ -1,3708 +0,0 @@
-import _ = require("../index");
-declare module "../index" {
-    // chunk
-
-    interface LoDashStatic {
-        /**
-         * Creates an array of elements split into groups the length of size. If collection can’t be split evenly, the
-         * final chunk will be the remaining elements.
-         *
-         * @param array The array to process.
-         * @param size The length of each chunk.
-         * @return Returns the new array containing chunks.
-         */
-        chunk<T>(
-            array: List<T> | null | undefined,
-            size?: number
-        ): T[][];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.chunk
-         */
-        chunk<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            size?: number,
-        ): LoDashImplicitWrapper<T[][]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.chunk
-         */
-        chunk<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            size?: number,
-        ): LoDashExplicitWrapper<T[][]>;
-    }
-
-    // compact
-
-    interface LoDashStatic {
-        /**
-         * Creates an array with all falsey values removed. The values false, null, 0, "", undefined, and NaN are
-         * falsey.
-         *
-         * @param array The array to compact.
-         * @return Returns the new array of filtered values.
-         */
-        compact<T>(array: List<T | null | undefined | false | "" | 0> | null | undefined): T[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.compact
-         */
-        compact<T>(this: LoDashImplicitWrapper<List<T | null | undefined | false | "" | 0> | null | undefined>): LoDashImplicitWrapper<T[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.compact
-         */
-        compact<T>(this: LoDashExplicitWrapper<List<T | null | undefined | false | "" | 0> | null | undefined>): LoDashExplicitWrapper<T[]>;
-    }
-
-    // concat
-
-    interface LoDashStatic {
-        /**
-         * Creates a new array concatenating `array` with any additional arrays
-         * and/or values.
-         *
-         * @category Array
-         * @param array The array to concatenate.
-         * @param [values] The values to concatenate.
-         * @returns Returns the new concatenated array.
-         * @example
-         *
-         * var array = [1];
-         * var other = _.concat(array, 2, [3], [[4]]);
-         *
-         * console.log(other);
-         * // => [1, 2, 3, [4]]
-         *
-         * console.log(array);
-         * // => [1]
-         */
-         concat<T>(array: Many<T>, ...values: Array<Many<T>>): T[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.compact
-         */
-        concat<T>(this: LoDashImplicitWrapper<Many<T>>, ...values: Array<Many<T>>): LoDashImplicitWrapper<T[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.compact
-         */
-        concat<T>(this: LoDashExplicitWrapper<Many<T>>, ...values: Array<Many<T>>): LoDashExplicitWrapper<T[]>;
-    }
-
-    // difference
-
-    interface LoDashStatic {
-        /**
-         * Creates an array of unique array values not included in the other provided arrays using SameValueZero for
-         * equality comparisons.
-         *
-         * @param array The array to inspect.
-         * @param values The arrays of values to exclude.
-         * @return Returns the new array of filtered values.
-         */
-        difference<T>(
-            array: List<T> | null | undefined,
-            ...values: Array<List<T>>
-        ): T[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.difference
-         */
-        difference<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            ...values: Array<List<T>>
-        ): LoDashImplicitWrapper<T[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.difference
-         */
-        difference<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            ...values: Array<List<T>>
-        ): LoDashExplicitWrapper<T[]>;
-    }
-
-    // differenceBy
-
-    interface LoDashStatic {
-        /**
-         * This method is like _.difference except that it accepts iteratee which is invoked for each element of array
-         * and values to generate the criterion by which uniqueness is computed. The iteratee is invoked with one
-         * argument: (value).
-         *
-         * @param array The array to inspect.
-         * @param values The values to exclude.
-         * @param iteratee The iteratee invoked per element.
-         * @returns Returns the new array of filtered values.
-         */
-        differenceBy<T1, T2>(
-            array: List<T1> | null | undefined,
-            values: List<T2>,
-            iteratee: ValueIteratee<T1 | T2>
-        ): T1[];
-
-        /**
-         * @see _.differenceBy
-         */
-        differenceBy<T1, T2, T3>(
-            array: List<T1> | null | undefined,
-            values1: List<T2>,
-            values2: List<T3>,
-            iteratee: ValueIteratee<T1 | T2 | T3>
-        ): T1[];
-
-        /**
-         * @see _.differenceBy
-         */
-        differenceBy<T1, T2, T3, T4>(
-            array: List<T1> | null | undefined,
-            values1: List<T2>,
-            values2: List<T3>,
-            values3: List<T4>,
-            iteratee: ValueIteratee<T1 | T2 | T3 | T4>
-        ): T1[];
-
-        /**
-         * @see _.differenceBy
-         */
-        differenceBy<T1, T2, T3, T4, T5>(
-            array: List<T1> | null | undefined,
-            values1: List<T2>,
-            values2: List<T3>,
-            values3: List<T4>,
-            values4: List<T5>,
-            iteratee: ValueIteratee<T1 | T2 | T3 | T4 | T5>
-        ): T1[];
-
-        /**
-         * @see _.differenceBy
-         */
-        differenceBy<T1, T2, T3, T4, T5, T6>(
-            array: List<T1> | null | undefined,
-            values1: List<T2>,
-            values2: List<T3>,
-            values3: List<T4>,
-            values4: List<T5>,
-            values5: List<T6>,
-            iteratee: ValueIteratee<T1 | T2 | T3 | T4 | T5 | T6>
-        ): T1[];
-
-        /**
-         * @see _.differenceBy
-         */
-        differenceBy<T1, T2, T3, T4, T5, T6, T7>(
-            array: List<T1> | null | undefined,
-            values1: List<T2>,
-            values2: List<T3>,
-            values3: List<T4>,
-            values4: List<T5>,
-            values5: List<T6>,
-            ...values: Array<List<T7> | ValueIteratee<T1 | T2 | T3 | T4 | T5 | T6 | T7>>
-        ): T1[];
-
-        /**
-         * @see _.differenceBy
-         */
-        differenceBy<T>(
-            array: List<T> | null | undefined,
-            ...values: Array<List<T>>
-        ): T[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.differenceBy
-         */
-        differenceBy<T1, T2>(
-            this: LoDashImplicitWrapper<List<T1> | null | undefined>,
-            values: List<T2>,
-            iteratee: ValueIteratee<T1 | T2>
-        ): LoDashImplicitWrapper<T1[]>;
-
-        /**
-         * @see _.differenceBy
-         */
-        differenceBy<T1, T2, T3>(
-            this: LoDashImplicitWrapper<List<T1> | null | undefined>,
-            values1: List<T2>,
-            values2: List<T3>,
-            iteratee: ValueIteratee<T1 | T2 | T3>
-        ): LoDashImplicitWrapper<T1[]>;
-
-        /**
-         * @see _.differenceBy
-         */
-        differenceBy<T1, T2, T3, T4>(
-            this: LoDashImplicitWrapper<List<T1> | null | undefined>,
-            values1: List<T2>,
-            values2: List<T3>,
-            values3: List<T4>,
-            iteratee: ValueIteratee<T1 | T2 | T3 | T4>
-        ): LoDashImplicitWrapper<T1[]>;
-
-        /**
-         * @see _.differenceBy
-         */
-        differenceBy<T1, T2, T3, T4, T5>(
-            this: LoDashImplicitWrapper<List<T1> | null | undefined>,
-            values1: List<T2>,
-            values2: List<T3>,
-            values3: List<T4>,
-            values4: List<T5>,
-            iteratee: ValueIteratee<T1 | T2 | T3 | T4 | T5>
-        ): LoDashImplicitWrapper<T1[]>;
-
-        /**
-         * @see _.differenceBy
-         */
-        differenceBy<T1, T2, T3, T4, T5, T6>(
-            this: LoDashImplicitWrapper<List<T1> | null | undefined>,
-            values1: List<T2>,
-            values2: List<T3>,
-            values3: List<T4>,
-            values4: List<T5>,
-            values5: List<T6>,
-            iteratee: ValueIteratee<T1 | T2 | T3 | T4 | T5 | T6>
-        ): LoDashImplicitWrapper<T1[]>;
-
-        /**
-         * @see _.differenceBy
-         */
-        differenceBy<T1, T2, T3, T4, T5, T6, T7>(
-            this: LoDashImplicitWrapper<List<T1> | null | undefined>,
-            values1: List<T2>,
-            values2: List<T3>,
-            values3: List<T4>,
-            values4: List<T5>,
-            values5: List<T6>,
-            ...values: Array<List<T7> | ValueIteratee<T1 | T2 | T3 | T4 | T5 | T6 | T7>>
-        ): LoDashImplicitWrapper<T1[]>;
-
-        /**
-         * @see _.differenceBy
-         */
-        differenceBy<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            ...values: Array<List<T>>
-        ): LoDashImplicitWrapper<T[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.differenceBy
-         */
-        differenceBy<T1, T2>(
-            this: LoDashExplicitWrapper<List<T1> | null | undefined>,
-            values: List<T2>,
-            iteratee: ValueIteratee<T1 | T2>
-        ): LoDashExplicitWrapper<T1[]>;
-
-        /**
-         * @see _.differenceBy
-         */
-        differenceBy<T1, T2, T3>(
-            this: LoDashExplicitWrapper<List<T1> | null | undefined>,
-            values1: List<T2>,
-            values2: List<T3>,
-            iteratee: ValueIteratee<T1 | T2 | T3>
-        ): LoDashExplicitWrapper<T1[]>;
-
-        /**
-         * @see _.differenceBy
-         */
-        differenceBy<T1, T2, T3, T4>(
-            this: LoDashExplicitWrapper<List<T1> | null | undefined>,
-            values1: List<T2>,
-            values2: List<T3>,
-            values3: List<T4>,
-            iteratee: ValueIteratee<T1 | T2 | T3 | T4>
-        ): LoDashExplicitWrapper<T1[]>;
-
-        /**
-         * @see _.differenceBy
-         */
-        differenceBy<T1, T2, T3, T4, T5>(
-            this: LoDashExplicitWrapper<List<T1> | null | undefined>,
-            values1: List<T2>,
-            values2: List<T3>,
-            values3: List<T4>,
-            values4: List<T5>,
-            iteratee: ValueIteratee<T1 | T2 | T3 | T4 | T5>
-        ): LoDashExplicitWrapper<T1[]>;
-
-        /**
-         * @see _.differenceBy
-         */
-        differenceBy<T1, T2, T3, T4, T5, T6>(
-            this: LoDashExplicitWrapper<List<T1> | null | undefined>,
-            values1: List<T2>,
-            values2: List<T3>,
-            values3: List<T4>,
-            values4: List<T5>,
-            values5: List<T6>,
-            iteratee: ValueIteratee<T1 | T2 | T3 | T4 | T5 | T6>
-        ): LoDashExplicitWrapper<T1[]>;
-
-        /**
-         * @see _.differenceBy
-         */
-        differenceBy<T1, T2, T3, T4, T5, T6, T7>(
-            this: LoDashExplicitWrapper<List<T1> | null | undefined>,
-            values1: List<T2>,
-            values2: List<T3>,
-            values3: List<T4>,
-            values4: List<T5>,
-            values5: List<T6>,
-            ...values: Array<List<T7> | ValueIteratee<T1 | T2 | T3 | T4 | T5 | T6 | T7>>
-        ): LoDashExplicitWrapper<T1[]>;
-
-        /**
-         * @see _.differenceBy
-         */
-        differenceBy<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            ...values: Array<List<T>>
-        ): LoDashExplicitWrapper<T[]>;
-    }
-
-    // differenceWith
-
-    interface LoDashStatic {
-        /**
-         * Creates an array of unique `array` values not included in the other
-         * provided arrays using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
-         * for equality comparisons.
-         *
-         * @category Array
-         * @param [values] The arrays to inspect.
-         * @param [comparator] The comparator invoked per element.
-         * @returns Returns the new array of filtered values.
-         * @example
-         *
-         * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
-
-         * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);
-         * // => [{ 'x': 2, 'y': 1 }]
-         */
-        differenceWith<T1, T2>(
-            array: List<T1> | null | undefined,
-            values: List<T2>,
-            comparator: Comparator2<T1, T2>
-        ): T1[];
-
-        /**
-         * @see _.differenceWith
-         */
-        differenceWith<T1, T2, T3>(
-            array: List<T1> | null | undefined,
-            values1: List<T2>,
-            values2: List<T3>,
-            comparator: Comparator2<T1, T2 | T3>
-        ): T1[];
-
-        /**
-         * @see _.differenceWith
-         */
-        differenceWith<T1, T2, T3, T4>(
-            array: List<T1> | null | undefined,
-            values1: List<T2>,
-            values2: List<T3>,
-            ...values: Array<List<T4> | Comparator2<T1, T2 | T3 | T4>>
-        ): T1[];
-
-        /**
-         * @see _.differenceWith
-         */
-        differenceWith<T>(
-            array: List<T> | null | undefined,
-            ...values: Array<List<T>>
-        ): T[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.differenceWith
-         */
-        differenceWith<T1, T2>(
-            this: LoDashImplicitWrapper<List<T1> | null | undefined>,
-            values: List<T2>,
-            comparator: Comparator2<T1, T2>
-        ): LoDashImplicitWrapper<T1[]>;
-
-        /**
-         * @see _.differenceWith
-         */
-        differenceWith<T1, T2, T3>(
-            this: LoDashImplicitWrapper<List<T1> | null | undefined>,
-            values1: List<T2>,
-            values2: List<T3>,
-            comparator: Comparator2<T1, T2 | T3>
-        ): LoDashImplicitWrapper<T1[]>;
-
-        /**
-         * @see _.differenceWith
-         */
-        differenceWith<T1, T2, T3, T4>(
-            this: LoDashImplicitWrapper<List<T1> | null | undefined>,
-            values1: List<T2>,
-            values2: List<T3>,
-            ...values: Array<List<T4> | Comparator2<T1, T2 | T3 | T4>>
-        ): LoDashImplicitWrapper<T1[]>;
-
-        /**
-         * @see _.differenceWith
-         */
-        differenceWith<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            ...values: Array<List<T>>
-        ): LoDashImplicitWrapper<T[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.differenceWith
-         */
-        differenceWith<T1, T2>(
-            this: LoDashExplicitWrapper<List<T1> | null | undefined>,
-            values: List<T2>,
-            comparator: Comparator2<T1, T2>
-        ): LoDashExplicitWrapper<T1[]>;
-
-        /**
-         * @see _.differenceWith
-         */
-        differenceWith<T1, T2, T3>(
-            this: LoDashExplicitWrapper<List<T1> | null | undefined>,
-            values1: List<T2>,
-            values2: List<T3>,
-            comparator: Comparator2<T1, T2 | T3>
-        ): LoDashExplicitWrapper<T1[]>;
-
-        /**
-         * @see _.differenceWith
-         */
-        differenceWith<T1, T2, T3, T4>(
-            this: LoDashExplicitWrapper<List<T1> | null | undefined>,
-            values1: List<T2>,
-            values2: List<T3>,
-            ...values: Array<List<T4> | Comparator2<T1, T2 | T3 | T4>>
-        ): LoDashExplicitWrapper<T1[]>;
-
-        /**
-         * @see _.differenceWith
-         */
-        differenceWith<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            ...values: Array<List<T>>
-        ): LoDashExplicitWrapper<T[]>;
-    }
-
-    // drop
-
-    interface LoDashStatic {
-        /**
-         * Creates a slice of array with n elements dropped from the beginning.
-         *
-         * @param array The array to query.
-         * @param n The number of elements to drop.
-         * @return Returns the slice of array.
-         */
-        drop<T>(array: List<T> | null | undefined, n?: number): T[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.drop
-         */
-        drop<T>(this: LoDashImplicitWrapper<List<T> | null | undefined>, n?: number): LoDashImplicitWrapper<T[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.drop
-         */
-        drop<T>(this: LoDashExplicitWrapper<List<T> | null | undefined>, n?: number): LoDashExplicitWrapper<T[]>;
-    }
-
-    // dropRight
-
-    interface LoDashStatic {
-        /**
-         * Creates a slice of array with n elements dropped from the end.
-         *
-         * @param array The array to query.
-         * @param n The number of elements to drop.
-         * @return Returns the slice of array.
-         */
-        dropRight<T>(
-            array: List<T> | null | undefined,
-            n?: number
-        ): T[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.dropRight
-         */
-        dropRight<T>(this: LoDashImplicitWrapper<List<T> | null | undefined>, n?: number): LoDashImplicitWrapper<T[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.dropRight
-         */
-        dropRight<T>(this: LoDashExplicitWrapper<List<T> | null | undefined>, n?: number): LoDashExplicitWrapper<T[]>;
-    }
-
-    // dropRightWhile
-
-    interface LoDashStatic {
-        /**
-         * Creates a slice of array excluding elements dropped from the end. Elements are dropped until predicate
-         * returns falsey. The predicate is invoked with three arguments: (value, index, array).
-         *
-         * @param array The array to query.
-         * @param predicate The function invoked per iteration.
-         * @return Returns the slice of array.
-         */
-        dropRightWhile<T>(
-            array: List<T> | null | undefined,
-            predicate?: ListIteratee<T>
-        ): T[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.dropRightWhile
-         */
-        dropRightWhile<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            predicate?: ListIteratee<T>
-        ): LoDashImplicitWrapper<T[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.dropRightWhile
-         */
-        dropRightWhile<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            predicate?: ListIteratee<T>
-        ): LoDashExplicitWrapper<T[]>;
-    }
-
-    // dropWhile
-
-    interface LoDashStatic {
-        /**
-         * Creates a slice of array excluding elements dropped from the beginning. Elements are dropped until predicate
-         * returns falsey. The predicate is invoked with three arguments: (value, index, array).
-         *
-         * @param array The array to query.
-         * @param predicate The function invoked per iteration.
-         * @return Returns the slice of array.
-         */
-        dropWhile<T>(
-            array: List<T> | null | undefined,
-            predicate?: ListIteratee<T>
-        ): T[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.dropWhile
-         */
-        dropWhile<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            predicate?: ListIteratee<T>
-        ): LoDashImplicitWrapper<T[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.dropWhile
-         */
-        dropWhile<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            predicate?: ListIteratee<T>
-        ): LoDashExplicitWrapper<T[]>;
-    }
-
-    // fill
-
-    interface LoDashStatic {
-        /**
-         * Fills elements of array with value from start up to, but not including, end.
-         *
-         * Note: This method mutates array.
-         *
-         * @param array The array to fill.
-         * @param value The value to fill array with.
-         * @param start The start position.
-         * @param end The end position.
-         * @return Returns array.
-         */
-        fill<T>(
-            array: any[] | null | undefined,
-            value: T
-        ): T[];
-
-        /**
-         * @see _.fill
-         */
-        fill<T>(
-            array: List<any> | null | undefined,
-            value: T
-        ): List<T>;
-
-        /**
-         * @see _.fill
-         */
-        fill<T, U>(
-            array: U[] | null | undefined,
-            value: T,
-            start?: number,
-            end?: number
-        ): Array<T | U>;
-
-        /**
-         * @see _.fill
-         */
-        fill<T, U>(
-            array: List<U> | null | undefined,
-            value: T,
-            start?: number,
-            end?: number
-        ): List<T | U>;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.fill
-         */
-        fill<T>(
-            this: LoDashImplicitWrapper<any[] | null | undefined>,
-            value: T
-        ): LoDashImplicitWrapper<T[]>;
-
-        /**
-         * @see _.fill
-         */
-        fill<T>(
-            this: LoDashImplicitWrapper<List<any> | null | undefined>,
-            value: T
-        ): LoDashImplicitWrapper<List<T>>;
-
-        /**
-         * @see _.fill
-         */
-        fill<T, U>(
-            this: LoDashImplicitWrapper<U[] | null | undefined>,
-            value: T,
-            start?: number,
-            end?: number
-        ): LoDashImplicitWrapper<Array<T | U>>;
-
-        /**
-         * @see _.fill
-         */
-        fill<T, U>(
-            this: LoDashImplicitWrapper<List<U> | null | undefined>,
-            value: T,
-            start?: number,
-            end?: number
-        ): LoDashImplicitWrapper<List<T | U>>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.fill
-         */
-        fill<T>(
-            this: LoDashExplicitWrapper<any[] | null | undefined>,
-            value: T
-        ): LoDashExplicitWrapper<T[]>;
-
-        /**
-         * @see _.fill
-         */
-        fill<T>(
-            this: LoDashExplicitWrapper<List<any> | null | undefined>,
-            value: T
-        ): LoDashExplicitWrapper<List<T>>;
-
-        /**
-         * @see _.fill
-         */
-        fill<T, U>(
-            this: LoDashExplicitWrapper<U[] | null | undefined>,
-            value: T,
-            start?: number,
-            end?: number
-        ): LoDashExplicitWrapper<Array<T | U>>;
-
-        /**
-         * @see _.fill
-         */
-        fill<T, U>(
-            this: LoDashExplicitWrapper<List<U> | null | undefined>,
-            value: T,
-            start?: number,
-            end?: number
-        ): LoDashExplicitWrapper<List<T | U>>;
-    }
-
-    // findIndex
-
-    interface LoDashStatic {
-        /**
-         * This method is like _.find except that it returns the index of the first element predicate returns truthy
-         * for instead of the element itself.
-         *
-         * @param array The array to search.
-         * @param predicate The function invoked per iteration.
-         * @param fromIndex The index to search from.
-         * @return Returns the index of the found element, else -1.
-         */
-        findIndex<T>(
-            array: List<T> | null | undefined,
-            predicate?: ListIterateeCustom<T, boolean>,
-            fromIndex?: number
-        ): number;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.findIndex
-         */
-        findIndex<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            predicate?: ListIterateeCustom<T, boolean>,
-            fromIndex?: number
-        ): number;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.findIndex
-         */
-        findIndex<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            predicate?: ListIterateeCustom<T, boolean>,
-            fromIndex?: number
-        ): LoDashExplicitWrapper<number>;
-    }
-
-    // findLastIndex
-
-    interface LoDashStatic {
-        /**
-         * This method is like _.findIndex except that it iterates over elements of collection from right to left.
-         *
-         * @param array The array to search.
-         * @param predicate The function invoked per iteration.
-         * @param fromIndex The index to search from.
-         * @return Returns the index of the found element, else -1.
-         */
-        findLastIndex<T>(
-            array: List<T> | null | undefined,
-            predicate?: ListIterateeCustom<T, boolean>,
-            fromIndex?: number
-        ): number;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.findLastIndex
-         */
-        findLastIndex<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            predicate?: ListIterateeCustom<T, boolean>,
-            fromIndex?: number
-        ): number;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.findLastIndex
-         */
-        findLastIndex<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            predicate?: ListIterateeCustom<T, boolean>,
-            fromIndex?: number
-        ): LoDashExplicitWrapper<number>;
-    }
-
-    // first
-
-    interface LoDashStatic {
-        first: typeof _.head; // tslint:disable-line:no-unnecessary-qualifier
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.head
-         */
-        first<T>(this: LoDashImplicitWrapper<List<T> | null | undefined>): T | undefined;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.head
-         */
-        first<T>(this: LoDashExplicitWrapper<List<T> | null | undefined>): LoDashExplicitWrapper<T | undefined>;
-    }
-
-    interface RecursiveArray<T> extends Array<T|RecursiveArray<T>> {}
-    interface ListOfRecursiveArraysOrValues<T> extends List<T|RecursiveArray<T>> {}
-
-    // flatten
-
-    interface LoDashStatic {
-        /**
-         * Flattens `array` a single level deep.
-         *
-         * @param array The array to flatten.
-         * @return Returns the new flattened array.
-         */
-        flatten<T>(array: List<Many<T>> | null | undefined): T[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.flatten
-         */
-        flatten<T>(this: LoDashImplicitWrapper<List<Many<T>> | null | undefined>): LoDashImplicitWrapper<T[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.flatten
-         */
-        flatten<T>(this: LoDashExplicitWrapper<List<Many<T>> | null | undefined>): LoDashExplicitWrapper<T[]>;
-    }
-
-    // flattenDeep
-
-    interface LoDashStatic {
-        /**
-         * Recursively flattens a nested array.
-         *
-         * @param array The array to recursively flatten.
-         * @return Returns the new flattened array.
-         */
-        flattenDeep<T>(array: ListOfRecursiveArraysOrValues<T> | null | undefined): T[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.flattenDeep
-         */
-        flattenDeep<T>(this: LoDashImplicitWrapper<ListOfRecursiveArraysOrValues<T> | null | undefined>): LoDashImplicitWrapper<T[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.flattenDeep
-         */
-        flattenDeep<T>(this: LoDashExplicitWrapper<ListOfRecursiveArraysOrValues<T> | null | undefined>): LoDashExplicitWrapper<T[]>;
-    }
-
-    // flattenDepth
-
-    interface LoDashStatic {
-        /**
-         * Recursively flatten array up to depth times.
-         *
-         * @param array The array to recursively flatten.
-         * @param number The maximum recursion depth.
-         * @return Returns the new flattened array.
-         */
-        flattenDepth<T>(array: ListOfRecursiveArraysOrValues<T> | null | undefined, depth?: number): T[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.flattenDeep
-         */
-        flattenDepth<T>(this: LoDashImplicitWrapper<ListOfRecursiveArraysOrValues<T> | null | undefined>, depth?: number): LoDashImplicitWrapper<T[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.flattenDeep
-         */
-        flattenDepth<T>(this: LoDashExplicitWrapper<ListOfRecursiveArraysOrValues<T> | null | undefined>, depth?: number): LoDashExplicitWrapper<T[]>;
-    }
-
-    // fromPairs
-
-    interface LoDashStatic {
-        /**
-         * The inverse of `_.toPairs`; this method returns an object composed
-         * from key-value `pairs`.
-         *
-         * @category Array
-         * @param pairs The key-value pairs.
-         * @returns Returns the new object.
-         * @example
-         *
-         * _.fromPairs([['fred', 30], ['barney', 40]]);
-         * // => { 'fred': 30, 'barney': 40 }
-         */
-        fromPairs<T>(
-            pairs: List<[PropertyName, T]> | null | undefined
-        ): Dictionary<T>;
-
-        /**
-         @see _.fromPairs
-         */
-        fromPairs(
-            pairs: List<any[]> | null | undefined
-        ): Dictionary<any>;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.fromPairs
-         */
-        fromPairs<T>(
-          this: LoDashImplicitWrapper<List<[PropertyName, T]> | null | undefined>
-        ): LoDashImplicitWrapper<Dictionary<T>>;
-
-        /**
-         @see _.fromPairs
-         */
-        fromPairs(
-            this: LoDashImplicitWrapper<List<any[]> | null | undefined>
-        ): LoDashImplicitWrapper<Dictionary<any>>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.fromPairs
-         */
-        fromPairs<T>(
-          this: LoDashExplicitWrapper<List<[PropertyName, T]> | null | undefined>
-        ): LoDashExplicitWrapper<Dictionary<T>>;
-
-        /**
-         @see _.fromPairs
-         */
-        fromPairs(
-            this: LoDashExplicitWrapper<List<any[]> | null | undefined>
-        ): LoDashExplicitWrapper<Dictionary<any>>;
-    }
-
-    // head
-
-    interface LoDashStatic {
-        /**
-         * Gets the first element of array.
-         *
-         * @alias _.first
-         *
-         * @param array The array to query.
-         * @return Returns the first element of array.
-         */
-        head<T>(array: List<T> | null | undefined): T | undefined;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.head
-         */
-        head<T>(this: LoDashImplicitWrapper<List<T> | null | undefined>): T | undefined;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.head
-         */
-        head<T>(this: LoDashExplicitWrapper<List<T> | null | undefined>): LoDashExplicitWrapper<T | undefined>;
-    }
-
-    // indexOf
-
-    interface LoDashStatic {
-        /**
-         * Gets the index at which the first occurrence of `value` is found in `array`
-         * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
-         * for equality comparisons. If `fromIndex` is negative, it's used as the offset
-         * from the end of `array`.
-         *
-         * @category Array
-         * @param array The array to search.
-         * @param value The value to search for.
-         * @param [fromIndex=0] The index to search from.
-         * @returns Returns the index of the matched value, else `-1`.
-         * @example
-         *
-         * _.indexOf([1, 2, 1, 2], 2);
-         * // => 1
-         *
-         * // using `fromIndex`
-         * _.indexOf([1, 2, 1, 2], 2, 2);
-         * // => 3
-         */
-        indexOf<T>(
-            array: List<T> | null | undefined,
-            value: T,
-            fromIndex?: number
-        ): number;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.indexOf
-         */
-        indexOf<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            value: T,
-            fromIndex?: number
-        ): number;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.indexOf
-         */
-        indexOf<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            value: T,
-            fromIndex?: number
-        ): LoDashExplicitWrapper<number>;
-    }
-
-    // initial
-
-    interface LoDashStatic {
-        /**
-         * Gets all but the last element of array.
-         *
-         * @param array The array to query.
-         * @return Returns the slice of array.
-         */
-        initial<T>(array: List<T> | null | undefined): T[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.initial
-         */
-        initial<T>(this: LoDashImplicitWrapper<List<T> | null | undefined>): LoDashImplicitWrapper<T[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.initial
-         */
-        initial<T>(this: LoDashExplicitWrapper<List<T> | null | undefined>): LoDashExplicitWrapper<T[]>;
-    }
-
-    // intersection
-
-    interface LoDashStatic {
-        /**
-         * Creates an array of unique values that are included in all of the provided arrays using SameValueZero for
-         * equality comparisons.
-         *
-         * @param arrays The arrays to inspect.
-         * @return Returns the new array of shared values.
-         */
-        intersection<T>(...arrays: Array<List<T>>): T[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.intersection
-         */
-        intersection<T>(
-            this: LoDashImplicitWrapper<List<T>>,
-            ...arrays: Array<List<T>>
-        ): LoDashImplicitWrapper<T[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.intersection
-         */
-        intersection<T>(
-            this: LoDashExplicitWrapper<List<T>>,
-            ...arrays: Array<List<T>>
-        ): LoDashExplicitWrapper<T[]>;
-    }
-
-    // intersectionBy
-
-    interface LoDashStatic {
-        /**
-         * This method is like `_.intersection` except that it accepts `iteratee`
-         * which is invoked for each element of each `arrays` to generate the criterion
-         * by which uniqueness is computed. The iteratee is invoked with one argument: (value).
-         *
-         * @category Array
-         * @param [arrays] The arrays to inspect.
-         * @param [iteratee=_.identity] The iteratee invoked per element.
-         * @returns Returns the new array of shared values.
-         * @example
-         *
-         * _.intersectionBy([2.1, 1.2], [4.3, 2.4], Math.floor);
-         * // => [2.1]
-         *
-         * // using the `_.property` iteratee shorthand
-         * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
-         * // => [{ 'x': 1 }]
-         */
-        intersectionBy<T1, T2>(
-            array: List<T1> | null,
-            values: List<T2>,
-            iteratee: ValueIteratee<T1 | T2>
-        ): T1[];
-
-        /**
-         * @see _.intersectionBy
-         */
-        intersectionBy<T1, T2, T3>(
-            array: List<T1> | null,
-            values1: List<T2>,
-            values2: List<T3>,
-            iteratee: ValueIteratee<T1 | T2 | T3>
-        ): T1[];
-
-        /**
-         * @see _.intersectionBy
-         */
-        intersectionBy<T1, T2, T3, T4>(
-            array: List<T1> | null | undefined,
-            values1: List<T2>,
-            values2: List<T3>,
-            ...values: Array<List<T4> | ValueIteratee<T1 | T2 | T3 | T4>>
-        ): T1[];
-
-        /**
-         * @see _.intersectionBy
-         */
-        intersectionBy<T>(
-            array?: List<T> | null,
-            ...values: Array<List<T>>
-        ): T[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.intersectionBy
-         */
-        intersectionBy<T1, T2>(
-            this: LoDashImplicitWrapper<List<T1> | null | undefined>,
-            values: List<T2>,
-            iteratee: ValueIteratee<T1 | T2>
-        ): LoDashImplicitWrapper<T1[]>;
-
-        /**
-         * @see _.intersectionBy
-         */
-        intersectionBy<T1, T2, T3>(
-            this: LoDashImplicitWrapper<List<T1> | null | undefined>,
-            values1: List<T2>,
-            values2: List<T3>,
-            iteratee: ValueIteratee<T1 | T2 | T3>
-        ): LoDashImplicitWrapper<T1[]>;
-
-        /**
-         * @see _.intersectionBy
-         */
-        intersectionBy<T1, T2, T3, T4>(
-            this: LoDashImplicitWrapper<List<T1> | null | undefined>,
-            values1: List<T2>,
-            values2: List<T3>,
-            ...values: Array<List<T4> | ValueIteratee<T1 | T2 | T3 | T4>>
-        ): LoDashImplicitWrapper<T1[]>;
-
-        /**
-         * @see _.intersectionBy
-         */
-        intersectionBy<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            ...values: Array<List<T>>
-        ): LoDashImplicitWrapper<T[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.intersectionBy
-         */
-        intersectionBy<T1, T2>(
-            this: LoDashExplicitWrapper<List<T1> | null | undefined>,
-            values: List<T2>,
-            iteratee: ValueIteratee<T1 | T2>
-        ): LoDashExplicitWrapper<T1[]>;
-
-        /**
-         * @see _.intersectionBy
-         */
-        intersectionBy<T1, T2, T3>(
-            this: LoDashExplicitWrapper<List<T1> | null | undefined>,
-            values1: List<T2>,
-            values2: List<T3>,
-            iteratee: ValueIteratee<T1 | T2 | T3>
-        ): LoDashExplicitWrapper<T1[]>;
-
-        /**
-         * @see _.intersectionBy
-         */
-        intersectionBy<T1, T2, T3, T4>(
-            this: LoDashExplicitWrapper<List<T1> | null | undefined>,
-            values1: List<T2>,
-            values2: List<T3>,
-            ...values: Array<List<T4> | ValueIteratee<T1 | T2 | T3 | T4>>
-        ): LoDashExplicitWrapper<T1[]>;
-
-        /**
-         * @see _.intersectionBy
-         */
-        intersectionBy<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            ...values: Array<List<T>>
-        ): LoDashExplicitWrapper<T[]>;
-    }
-
-    // intersectionWith
-
-    interface LoDashStatic {
-        /**
-         * Creates an array of unique `array` values not included in the other
-         * provided arrays using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
-         * for equality comparisons.
-         *
-         * @category Array
-         * @param [values] The arrays to inspect.
-         * @param [comparator] The comparator invoked per element.
-         * @returns Returns the new array of filtered values.
-         * @example
-         *
-         * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
-         * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
-
-         * _.intersectionWith(objects, others, _.isEqual);
-         * // => [{ 'x': 1, 'y': 2 }]
-         */
-        intersectionWith<T1, T2>(
-            array: List<T1> | null | undefined,
-            values: List<T2>,
-            comparator: Comparator2<T1, T2>
-        ): T1[];
-
-        /**
-         * @see _.intersectionWith
-         */
-        intersectionWith<T1, T2, T3>(
-            array: List<T1> | null | undefined,
-            values1: List<T2>,
-            values2: List<T3>,
-            comparator: Comparator2<T1, T2 | T3>
-        ): T1[];
-
-        /**
-         * @see _.intersectionWith
-         */
-        intersectionWith<T1, T2, T3, T4>(
-            array: List<T1> | null | undefined,
-            values1: List<T2>,
-            values2: List<T3>,
-            ...values: Array<List<T4> | Comparator2<T1, T2 | T3 | T4>>
-        ): T1[];
-
-        /**
-         * @see _.intersectionWith
-         */
-        intersectionWith<T>(
-            array?: List<T> | null,
-            ...values: Array<List<T>>
-        ): T[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.intersectionWith
-         */
-        intersectionWith<T1, T2>(
-            this: LoDashImplicitWrapper<List<T1> | null | undefined>,
-            values: List<T2>,
-            comparator: Comparator2<T1, T2>
-        ): LoDashImplicitWrapper<T1[]>;
-
-        /**
-         * @see _.intersectionWith
-         */
-        intersectionWith<T1, T2, T3>(
-            this: LoDashImplicitWrapper<List<T1> | null | undefined>,
-            values1: List<T2>,
-            values2: List<T3>,
-            comparator: Comparator2<T1, T2 | T3>
-        ): LoDashImplicitWrapper<T1[]>;
-
-        /**
-         * @see _.intersectionWith
-         */
-        intersectionWith<T1, T2, T3, T4>(
-            this: LoDashImplicitWrapper<List<T1> | null | undefined>,
-            values1: List<T2>,
-            values2: List<T3>,
-            ...values: Array<List<T4> | Comparator2<T1, T2 | T3 | T4>>
-        ): LoDashImplicitWrapper<T1[]>;
-
-        /**
-         * @see _.intersectionWith
-         */
-        intersectionWith<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            ...values: Array<List<T>>
-        ): LoDashImplicitWrapper<T[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.intersectionWith
-         */
-        intersectionWith<T1, T2>(
-            this: LoDashExplicitWrapper<List<T1> | null | undefined>,
-            values: List<T2>,
-            comparator: Comparator2<T1, T2>
-        ): LoDashExplicitWrapper<T1[]>;
-
-        /**
-         * @see _.intersectionWith
-         */
-        intersectionWith<T1, T2, T3>(
-            this: LoDashExplicitWrapper<List<T1> | null | undefined>,
-            values1: List<T2>,
-            values2: List<T3>,
-            comparator: Comparator2<T1, T2 | T3>
-        ): LoDashExplicitWrapper<T1[]>;
-
-        /**
-         * @see _.intersectionWith
-         */
-        intersectionWith<T1, T2, T3, T4>(
-            this: LoDashExplicitWrapper<List<T1> | null | undefined>,
-            values1: List<T2>,
-            values2: List<T3>,
-            ...values: Array<List<T4> | Comparator2<T1, T2 | T3 | T4>>
-        ): LoDashExplicitWrapper<T1[]>;
-
-        /**
-         * @see _.intersectionWith
-         */
-        intersectionWith<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            ...values: Array<List<T>>
-        ): LoDashExplicitWrapper<T[]>;
-    }
-
-    // join
-
-    interface LoDashStatic {
-        /**
-         * Converts all elements in `array` into a string separated by `separator`.
-         *
-         * @param array The array to convert.
-         * @param separator The element separator.
-         * @returns Returns the joined string.
-         */
-        join(
-            array: List<any> | null | undefined,
-            separator?: string
-        ): string;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.join
-         */
-        join(separator?: string): string;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.join
-         */
-        join(separator?: string): LoDashExplicitWrapper<string>;
-    }
-
-    // last
-
-    interface LoDashStatic {
-        /**
-         * Gets the last element of array.
-         *
-         * @param array The array to query.
-         * @return Returns the last element of array.
-         */
-        last<T>(array: List<T> | null | undefined): T | undefined;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.last
-         */
-        last<T>(this: LoDashImplicitWrapper<List<T> | null | undefined>): T | undefined;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.last
-         */
-        last<T>(this: LoDashExplicitWrapper<List<T> | null | undefined>): LoDashExplicitWrapper<T | undefined>;
-    }
-
-    // lastIndexOf
-
-    interface LoDashStatic {
-        /**
-         * This method is like _.indexOf except that it iterates over elements of array from right to left.
-         *
-         * @param array The array to search.
-         * @param value The value to search for.
-         * @param fromIndex The index to search from or true to perform a binary search on a sorted array.
-         * @return Returns the index of the matched value, else -1.
-         */
-        lastIndexOf<T>(
-            array: List<T> | null | undefined,
-            value: T,
-            fromIndex?: true|number
-        ): number;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.indexOf
-         */
-        lastIndexOf<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            value: T,
-            fromIndex?: true|number
-        ): number;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.indexOf
-         */
-        lastIndexOf<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            value: T,
-            fromIndex?: true|number
-        ): LoDashExplicitWrapper<number>;
-    }
-
-    // nth
-
-    interface LoDashStatic {
-        /**
-         * Gets the element at index `n` of `array`. If `n` is negative, the nth element from the end is returned.
-         *
-         * @param array array The array to query.
-         * @param value The index of the element to return.
-         * @return Returns the nth element of `array`.
-         */
-        nth<T>(
-            array: List<T> | null | undefined,
-            n?: number
-        ): T | undefined;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.nth
-         */
-        nth<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            n?: number
-        ): T | undefined;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.nth
-         */
-        nth<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            n?: number
-        ): LoDashExplicitWrapper<T | undefined>;
-    }
-
-    // pull
-
-    interface LoDashStatic {
-        /**
-         * Removes all provided values from array using SameValueZero for equality comparisons.
-         *
-         * Note: Unlike _.without, this method mutates array.
-         *
-         * @param array The array to modify.
-         * @param values The values to remove.
-         * @return Returns array.
-         */
-        pull<T>(
-            array: T[],
-            ...values: T[]
-        ): T[];
-
-        /**
-         * @see _.pull
-         */
-        pull<T>(
-            array: List<T>,
-            ...values: T[]
-        ): List<T>;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.pull
-         */
-        pull<T>(
-            this: LoDashImplicitWrapper<List<T>>,
-            ...values: T[]
-        ): this;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.pull
-         */
-        pull<T>(
-            this: LoDashExplicitWrapper<List<T>>,
-            ...values: T[]
-        ): this;
-    }
-
-    // pullAll
-
-    interface LoDashStatic {
-        /**
-         * This method is like `_.pull` except that it accepts an array of values to remove.
-         *
-         * **Note:** Unlike `_.difference`, this method mutates `array`.
-         *
-         * @category Array
-         * @param array The array to modify.
-         * @param values The values to remove.
-         * @returns Returns `array`.
-         * @example
-         *
-         * var array = [1, 2, 3, 1, 2, 3];
-         *
-         * _.pull(array, [2, 3]);
-         * console.log(array);
-         * // => [1, 1]
-         */
-        pullAll<T>(
-            array: T[],
-            values?: List<T>,
-        ): T[];
-
-        /**
-         * @see _.pullAll
-         */
-        pullAll<T>(
-            array: List<T>,
-            values?: List<T>,
-        ): List<T>;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.pullAll
-         */
-        pullAll<T>(
-            this: LoDashImplicitWrapper<List<T>>,
-            values?: List<T>
-        ): this;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.pullAll
-         */
-        pullAll<T>(
-            this: LoDashExplicitWrapper<List<T>>,
-            values?: List<T>
-        ): this;
-    }
-
-    // pullAllBy
-
-    interface LoDashStatic {
-        /**
-         * This method is like `_.pullAll` except that it accepts `iteratee` which is
-         * invoked for each element of `array` and `values` to to generate the criterion
-         * by which uniqueness is computed. The iteratee is invoked with one argument: (value).
-         *
-         * **Note:** Unlike `_.differenceBy`, this method mutates `array`.
-         *
-         * @category Array
-         * @param array The array to modify.
-         * @param values The values to remove.
-         * @param [iteratee=_.identity] The iteratee invoked per element.
-         * @returns Returns `array`.
-         * @example
-         *
-         * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];
-         *
-         * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');
-         * console.log(array);
-         * // => [{ 'x': 2 }]
-         */
-        pullAllBy<T>(
-            array: T[],
-            values?: List<T>,
-            iteratee?: ValueIteratee<T>
-        ): T[];
-
-        /**
-         * @see _.pullAllBy
-         */
-        pullAllBy<T>(
-            array: List<T>,
-            values?: List<T>,
-            iteratee?: ValueIteratee<T>
-        ): List<T>;
-
-        /**
-         * @see _.pullAllBy
-         */
-        pullAllBy<T1, T2>(
-            array: T1[],
-            values: List<T2>,
-            iteratee: ValueIteratee<T1 | T2>
-        ): T1[];
-
-        /**
-         * @see _.pullAllBy
-         */
-        pullAllBy<T1, T2>(
-            array: List<T1>,
-            values: List<T2>,
-            iteratee: ValueIteratee<T1 | T2>
-        ): List<T1>;
-    }
-
-    interface LoDashWrapper<TValue> {
-        /**
-         * @see _.pullAllBy
-         */
-        pullAllBy<T>(
-            this: LoDashWrapper<List<T>>,
-            values?: List<T>,
-            iteratee?: ValueIteratee<T>
-        ): this;
-
-        /**
-         * @see _.pullAllBy
-         */
-        pullAllBy<T1, T2>(
-            this: LoDashWrapper<List<T1>>,
-            values: List<T2>,
-            iteratee: ValueIteratee<T1 | T2>
-        ): this;
-    }
-
-    // pullAllWith
-
-    interface LoDashStatic {
-        /**
-         * This method is like `_.pullAll` except that it accepts `comparator` which is
-         * invoked to compare elements of array to values. The comparator is invoked with
-         * two arguments: (arrVal, othVal).
-         *
-         * **Note:** Unlike `_.differenceWith`, this method mutates `array`.
-         *
-         * @category Array
-         * @param array The array to modify.
-         * @param values The values to remove.
-         * @param [iteratee=_.identity] The iteratee invoked per element.
-         * @returns Returns `array`.
-         * @example
-         *
-         * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];
-         *
-         * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);
-         * console.log(array);
-         * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]
-         */
-        pullAllWith<T>(
-            array: T[],
-            values?: List<T>,
-            comparator?: Comparator<T>
-        ): T[];
-
-        /**
-         * @see _.pullAllWith
-         */
-        pullAllWith<T>(
-            array: List<T>,
-            values?: List<T>,
-            comparator?: Comparator<T>
-        ): List<T>;
-
-        /**
-         * @see _.pullAllWith
-         */
-        pullAllWith<T1, T2>(
-            array: T1[],
-            values: List<T2>,
-            comparator: Comparator2<T1, T2>
-        ): T1[];
-
-        /**
-         * @see _.pullAllWith
-         */
-        pullAllWith<T1, T2>(
-            array: List<T1>,
-            values: List<T2>,
-            comparator: Comparator2<T1, T2>
-        ): List<T1>;
-    }
-
-    interface LoDashWrapper<TValue> {
-        /**
-         * @see _.pullAllWith
-         */
-        pullAllWith<T>(
-            this: LoDashWrapper<List<T>>,
-            values?: List<T>,
-            comparator?: Comparator<T>
-        ): this;
-
-        /**
-         * @see _.pullAllWith
-         */
-        pullAllWith<T1, T2>(
-            this: LoDashWrapper<List<T1>>,
-            values: List<T2>,
-            comparator: Comparator2<T1, T2>
-        ): this;
-    }
-
-    // pullAt
-
-    interface LoDashStatic {
-        /**
-         * Removes elements from array corresponding to the given indexes and returns an array of the removed elements.
-         * Indexes may be specified as an array of indexes or as individual arguments.
-         *
-         * Note: Unlike _.at, this method mutates array.
-         *
-         * @param array The array to modify.
-         * @param indexes The indexes of elements to remove, specified as individual indexes or arrays of indexes.
-         * @return Returns the new array of removed elements.
-         */
-        pullAt<T>(
-            array: T[],
-            ...indexes: Array<Many<number>>
-        ): T[];
-
-        /**
-         * @see _.pullAt
-         */
-        pullAt<T>(
-            array: List<T>,
-            ...indexes: Array<Many<number>>
-        ): List<T>;
-    }
-
-    interface LoDashWrapper<TValue> {
-        /**
-         * @see _.pullAt
-         */
-        pullAt(...indexes: Array<Many<number>>): this;
-    }
-
-    // remove
-
-    interface LoDashStatic {
-        /**
-         * Removes all elements from array that predicate returns truthy for and returns an array of the removed
-         * elements. The predicate is invoked with three arguments: (value, index, array).
-         *
-         * Note: Unlike _.filter, this method mutates array.
-         *
-         * @param array The array to modify.
-         * @param predicate The function invoked per iteration.
-         * @return Returns the new array of removed elements.
-         */
-        remove<T>(
-            array: List<T>,
-            predicate?: ListIteratee<T>
-        ): T[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.remove
-         */
-        remove<T>(
-            this: LoDashImplicitWrapper<List<T>>,
-            predicate?: ListIteratee<T>
-        ): LoDashImplicitWrapper<T[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.remove
-         */
-        remove<T>(
-            this: LoDashExplicitWrapper<List<T>>,
-            predicate?: ListIteratee<T>
-        ): LoDashExplicitWrapper<T[]>;
-    }
-
-    // reverse
-
-    interface LoDashStatic {
-        /**
-         * Reverses `array` so that the first element becomes the last, the second
-         * element becomes the second to last, and so on.
-         *
-         * **Note:** This method mutates `array` and is based on
-         * [`Array#reverse`](https://mdn.io/Array/reverse).
-         *
-         * @category Array
-         * @returns Returns `array`.
-         * @example
-         *
-         * var array = [1, 2, 3];
-         *
-         * _.reverse(array);
-         * // => [3, 2, 1]
-         *
-         * console.log(array);
-         * // => [3, 2, 1]
-         */
-        reverse<TList extends List<any>>(
-            array: TList,
-        ): TList;
-    }
-
-    // slice
-
-    interface LoDashStatic {
-        /**
-         * Creates a slice of array from start up to, but not including, end.
-         *
-         * @param array The array to slice.
-         * @param start The start position.
-         * @param end The end position.
-         * @return Returns the slice of array.
-         */
-        slice<T>(
-            array: List<T> | null | undefined,
-            start?: number,
-            end?: number
-        ): T[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.slice
-         */
-        slice<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            start?: number,
-            end?: number
-        ): LoDashImplicitWrapper<T[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.slice
-         */
-        slice<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            start?: number,
-            end?: number
-        ): LoDashExplicitWrapper<T[]>;
-    }
-
-    // sortedIndex
-
-    interface LoDashStatic {
-        /**
-         * Uses a binary search to determine the lowest index at which `value` should
-         * be inserted into `array` in order to maintain its sort order.
-         *
-         * @category Array
-         * @param array The sorted array to inspect.
-         * @param value The value to evaluate.
-         * @returns Returns the index at which `value` should be inserted into `array`.
-         * @example
-         *
-         * _.sortedIndex([30, 50], 40);
-         * // => 1
-         *
-         * _.sortedIndex([4, 5], 4);
-         * // => 0
-         */
-        sortedIndex<T>(
-            array: List<T> | null | undefined,
-            value: T
-        ): number;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.sortedIndex
-         */
-        sortedIndex<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            value: T
-        ): number;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.sortedIndex
-         */
-        sortedIndex<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            value: T
-        ): LoDashExplicitWrapper<number>;
-    }
-
-    // sortedIndexBy
-
-    interface LoDashStatic {
-        /**
-         * Uses a binary search to determine the lowest index at which `value` should
-         * be inserted into `array` in order to maintain its sort order.
-         *
-         * @category Array
-         * @param array The sorted array to inspect.
-         * @param value The value to evaluate.
-         * @returns Returns the index at which `value` should be inserted into `array`.
-         * @example
-         *
-         * _.sortedIndex([30, 50], 40);
-         * // => 1
-         *
-         * _.sortedIndex([4, 5], 4);
-         * // => 0
-         */
-        sortedIndex<T>(
-            array: List<T> | null | undefined,
-            value: T
-        ): number;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.sortedIndex
-         */
-        sortedIndex<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            value: T
-        ): number;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.sortedIndex
-         */
-        sortedIndex<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            value: T
-        ): LoDashExplicitWrapper<number>;
-    }
-
-    // _.sortedIndexBy
-    interface LoDashStatic {
-        /**
-         * This method is like `_.sortedIndex` except that it accepts `iteratee`
-         * which is invoked for `value` and each element of `array` to compute their
-         * sort ranking. The iteratee is invoked with one argument: (value).
-         *
-         * @category Array
-         * @param array The sorted array to inspect.
-         * @param value The value to evaluate.
-         * @param [iteratee=_.identity] The iteratee invoked per element.
-         * @returns Returns the index at which `value` should be inserted into `array`.
-         * @example
-         *
-         * var dict = { 'thirty': 30, 'forty': 40, 'fifty': 50 };
-         *
-         * _.sortedIndexBy(['thirty', 'fifty'], 'forty', _.propertyOf(dict));
-         * // => 1
-         *
-         * // using the `_.property` iteratee shorthand
-         * _.sortedIndexBy([{ 'x': 4 }, { 'x': 5 }], { 'x': 4 }, 'x');
-         * // => 0
-         */
-        sortedIndexBy<T>(
-            array: List<T> | null | undefined,
-            value: T,
-            iteratee?: ValueIteratee<T>
-        ): number;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.sortedIndexBy
-         */
-        sortedIndexBy<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            value: T,
-            iteratee?: ValueIteratee<T>
-        ): number;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.sortedIndexBy
-         */
-        sortedIndexBy<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            value: T,
-            iteratee?: ValueIteratee<T>
-        ): LoDashExplicitWrapper<number>;
-    }
-
-    // sortedIndexOf
-
-    interface LoDashStatic {
-        /**
-         * This method is like `_.indexOf` except that it performs a binary
-         * search on a sorted `array`.
-         *
-         * @category Array
-         * @param array The array to search.
-         * @param value The value to search for.
-         * @returns Returns the index of the matched value, else `-1`.
-         * @example
-         *
-         * _.sortedIndexOf([1, 1, 2, 2], 2);
-         * // => 2
-         */
-        sortedIndexOf<T>(
-            array: List<T> | null | undefined,
-            value: T
-        ): number;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.sortedIndexOf
-         */
-        sortedIndexOf<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            value: T
-        ): number;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.sortedIndexOf
-         */
-        sortedIndexOf<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            value: T
-        ): LoDashExplicitWrapper<number>;
-    }
-
-    // sortedLastIndex
-
-    interface LoDashStatic {
-        /**
-         * This method is like `_.sortedIndex` except that it returns the highest
-         * index at which `value` should be inserted into `array` in order to
-         * maintain its sort order.
-         *
-         * @category Array
-         * @param array The sorted array to inspect.
-         * @param value The value to evaluate.
-         * @returns Returns the index at which `value` should be inserted into `array`.
-         * @example
-         *
-         * _.sortedLastIndex([4, 5], 4);
-         * // => 1
-         */
-        sortedLastIndex<T>(
-            array: List<T> | null | undefined,
-            value: T
-        ): number;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.sortedLastIndex
-         */
-        sortedLastIndex<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            value: T
-        ): number;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.sortedLastIndex
-         */
-        sortedLastIndex<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            value: T
-        ): LoDashExplicitWrapper<number>;
-    }
-
-    // sortedLastIndexBy
-
-    interface LoDashStatic {
-        /**
-         * This method is like `_.sortedLastIndex` except that it accepts `iteratee`
-         * which is invoked for `value` and each element of `array` to compute their
-         * sort ranking. The iteratee is invoked with one argument: (value).
-         *
-         * @category Array
-         * @param array The sorted array to inspect.
-         * @param value The value to evaluate.
-         * @param [iteratee=_.identity] The iteratee invoked per element.
-         * @returns Returns the index at which `value` should be inserted into `array`.
-         * @example
-         *
-         * // using the `_.property` iteratee shorthand
-         * _.sortedLastIndexBy([{ 'x': 4 }, { 'x': 5 }], { 'x': 4 }, 'x');
-         * // => 1
-         */
-        sortedLastIndexBy<T>(
-            array: List<T> | null | undefined,
-            value: T,
-            iteratee: ValueIteratee<T>
-        ): number;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.sortedLastIndexBy
-         */
-        sortedLastIndexBy<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            value: T,
-            iteratee: ValueIteratee<T>
-        ): number;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.sortedLastIndexBy
-         */
-        sortedLastIndexBy<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            value: T,
-            iteratee: ValueIteratee<T>
-        ): LoDashExplicitWrapper<number>;
-    }
-
-    // sortedLastIndexOf
-
-    interface LoDashStatic {
-        /**
-         * This method is like `_.lastIndexOf` except that it performs a binary
-         * search on a sorted `array`.
-         *
-         * @category Array
-         * @param array The array to search.
-         * @param value The value to search for.
-         * @returns Returns the index of the matched value, else `-1`.
-         * @example
-         *
-         * _.sortedLastIndexOf([1, 1, 2, 2], 2);
-         * // => 3
-         */
-        sortedLastIndexOf<T>(
-            array: List<T> | null | undefined,
-            value: T
-        ): number;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.sortedLastIndexOf
-         */
-        sortedLastIndexOf<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            value: T
-        ): number;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.sortedLastIndexOf
-         */
-        sortedLastIndexOf<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            value: T
-        ): LoDashExplicitWrapper<number>;
-    }
-
-    // sortedUniq
-
-    interface LoDashStatic {
-        /**
-         * This method is like `_.uniq` except that it's designed and optimized
-         * for sorted arrays.
-         *
-         * @category Array
-         * @param array The array to inspect.
-         * @returns Returns the new duplicate free array.
-         * @example
-         *
-         * _.sortedUniq([1, 1, 2]);
-         * // => [1, 2]
-         */
-        sortedUniq<T>(
-            array: List<T> | null | undefined
-        ): T[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.sortedUniq
-         */
-        sortedUniq<T>(this: LoDashImplicitWrapper<List<T> | null | undefined>): LoDashImplicitWrapper<T[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.sortedUniq
-         */
-        sortedUniq<T>(this: LoDashExplicitWrapper<List<T> | null | undefined>): LoDashExplicitWrapper<T[]>;
-    }
-
-    // sortedUniqBy
-
-    interface LoDashStatic {
-        /**
-         * This method is like `_.uniqBy` except that it's designed and optimized
-         * for sorted arrays.
-         *
-         * @category Array
-         * @param array The array to inspect.
-         * @param [iteratee] The iteratee invoked per element.
-         * @returns Returns the new duplicate free array.
-         * @example
-         *
-         * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);
-         * // => [1.1, 2.2]
-         */
-        sortedUniqBy<T>(
-            array: List<T> | null | undefined,
-            iteratee: ValueIteratee<T>
-        ): T[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.sortedUniqBy
-         */
-        sortedUniqBy<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            iteratee: ValueIteratee<T>
-        ): LoDashImplicitWrapper<T[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.sortedUniqBy
-         */
-        sortedUniqBy<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            iteratee: ValueIteratee<T>
-        ): LoDashExplicitWrapper<T[]>;
-    }
-
-    // tail
-
-    interface LoDashStatic {
-        /**
-         * Gets all but the first element of array.
-         *
-         * @param array The array to query.
-         * @return Returns the slice of array.
-         */
-        tail<T>(array: List<T> | null | undefined): T[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.tail
-         */
-        tail<T>(this: LoDashImplicitWrapper<List<T> | null | undefined>): LoDashImplicitWrapper<T[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.tail
-         */
-        tail<T>(this: LoDashExplicitWrapper<List<T> | null | undefined>): LoDashExplicitWrapper<T[]>;
-    }
-
-    // take
-
-    interface LoDashStatic {
-        /**
-         * Creates a slice of array with n elements taken from the beginning.
-         *
-         * @param array The array to query.
-         * @param n The number of elements to take.
-         * @return Returns the slice of array.
-         */
-        take<T>(
-            array: List<T> | null | undefined,
-            n?: number
-        ): T[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.take
-         */
-        take<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            n?: number
-        ): LoDashImplicitWrapper<T[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.take
-         */
-        take<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            n?: number
-        ): LoDashExplicitWrapper<T[]>;
-    }
-
-    // takeRight
-
-    interface LoDashStatic {
-        /**
-         * Creates a slice of array with n elements taken from the end.
-         *
-         * @param array The array to query.
-         * @param n The number of elements to take.
-         * @return Returns the slice of array.
-         */
-        takeRight<T>(
-            array: List<T> | null | undefined,
-            n?: number
-        ): T[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.takeRight
-         */
-        takeRight<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            n?: number
-        ): LoDashImplicitWrapper<T[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.takeRight
-         */
-        takeRight<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            n?: number
-        ): LoDashExplicitWrapper<T[]>;
-    }
-
-    // takeRightWhile
-
-    interface LoDashStatic {
-        /**
-         * Creates a slice of array with elements taken from the end. Elements are taken until predicate returns
-         * falsey. The predicate is invoked with three arguments: (value, index, array).
-         *
-         * @param array The array to query.
-         * @param predicate The function invoked per iteration.
-         * @return Returns the slice of array.
-         */
-        takeRightWhile<T>(
-            array: List<T> | null | undefined,
-            predicate?: ListIteratee<T>
-        ): T[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.takeRightWhile
-         */
-        takeRightWhile<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            predicate?: ListIteratee<T>
-        ): LoDashImplicitWrapper<T[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.takeRightWhile
-         */
-        takeRightWhile<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            predicate?: ListIteratee<T>
-        ): LoDashExplicitWrapper<T[]>;
-    }
-
-    // takeWhile
-
-    interface LoDashStatic {
-        /**
-         * Creates a slice of array with elements taken from the beginning. Elements are taken until predicate returns
-         * falsey. The predicate is invoked with three arguments: (value, index, array).
-         *
-         * @param array The array to query.
-         * @param predicate The function invoked per iteration.
-         * @return Returns the slice of array.
-         */
-        takeWhile<T>(
-            array: List<T> | null | undefined,
-            predicate?: ListIteratee<T>
-        ): T[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.takeWhile
-         */
-        takeWhile<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            predicate?: ListIteratee<T>
-        ): LoDashImplicitWrapper<T[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.takeWhile
-         */
-        takeWhile<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            predicate?: ListIteratee<T>
-        ): LoDashExplicitWrapper<T[]>;
-    }
-
-    // union
-
-    interface LoDashStatic {
-        /**
-         * Creates an array of unique values, in order, from all of the provided arrays using SameValueZero for
-         * equality comparisons.
-         *
-         * @param arrays The arrays to inspect.
-         * @return Returns the new array of combined values.
-         */
-        union<T>(...arrays: Array<List<T> | null | undefined>): T[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.union
-         */
-        union<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            ...arrays: Array<List<T> | null | undefined>
-        ): LoDashImplicitWrapper<T[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.union
-         */
-        union<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            ...arrays: Array<List<T> | null | undefined>
-        ): LoDashExplicitWrapper<T[]>;
-    }
-
-    // unionBy
-
-    interface LoDashStatic {
-        /**
-         * This method is like `_.union` except that it accepts `iteratee` which is
-         * invoked for each element of each `arrays` to generate the criterion by which
-         * uniqueness is computed. The iteratee is invoked with one argument: (value).
-         *
-         * @param arrays The arrays to inspect.
-         * @param iteratee The iteratee invoked per element.
-         * @return Returns the new array of combined values.
-         */
-        unionBy<T>(
-            arrays: List<T> | null | undefined,
-            iteratee?: ValueIteratee<T>
-        ): T[];
-
-        /**
-         * @see _.unionBy
-         */
-        unionBy<T>(
-            arrays1: List<T> | null | undefined,
-            arrays2: List<T> | null | undefined,
-            iteratee?: ValueIteratee<T>
-        ): T[];
-
-        /**
-         * @see _.unionBy
-         */
-        unionBy<T>(
-            arrays1: List<T> | null | undefined,
-            arrays2: List<T> | null | undefined,
-            arrays3: List<T> | null | undefined,
-            iteratee?: ValueIteratee<T>
-        ): T[];
-
-        /**
-         * @see _.unionBy
-         */
-        unionBy<T>(
-            arrays1: List<T> | null | undefined,
-            arrays2: List<T> | null | undefined,
-            arrays3: List<T> | null | undefined,
-            arrays4: List<T> | null | undefined,
-            iteratee?: ValueIteratee<T>
-        ): T[];
-
-        /**
-         * @see _.unionBy
-         */
-        unionBy<T>(
-            arrays1: List<T> | null | undefined,
-            arrays2: List<T> | null | undefined,
-            arrays3: List<T> | null | undefined,
-            arrays4: List<T> | null | undefined,
-            arrays5: List<T> | null | undefined,
-            ...iteratee: Array<ValueIteratee<T> | List<T> | null | undefined>
-        ): T[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.unionBy
-         */
-        unionBy<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            iteratee?: ValueIteratee<T>
-        ): LoDashImplicitWrapper<T[]>;
-
-        /**
-         * @see _.unionBy
-         */
-        unionBy<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            arrays2: List<T> | null | undefined,
-            iteratee?: ValueIteratee<T>
-        ): LoDashImplicitWrapper<T[]>;
-
-        /**
-         * @see _.unionBy
-         */
-        unionBy<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            arrays2: List<T> | null | undefined,
-            arrays3: List<T> | null | undefined,
-            iteratee?: ValueIteratee<T>
-        ): LoDashImplicitWrapper<T[]>;
-
-        /**
-         * @see _.unionBy
-         */
-        unionBy<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            arrays2: List<T> | null | undefined,
-            arrays3: List<T> | null | undefined,
-            arrays4: List<T> | null | undefined,
-            iteratee?: ValueIteratee<T>
-        ): LoDashImplicitWrapper<T[]>;
-
-        /**
-         * @see _.unionBy
-         */
-        unionBy<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            arrays2: List<T> | null | undefined,
-            arrays3: List<T> | null | undefined,
-            arrays4: List<T> | null | undefined,
-            arrays5: List<T> | null | undefined,
-            ...iteratee: Array<ValueIteratee<T> | List<T> | null | undefined>
-        ): LoDashImplicitWrapper<T[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.unionBy
-         */
-        unionBy<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            iteratee?: ValueIteratee<T>
-        ): LoDashExplicitWrapper<T[]>;
-
-        /**
-         * @see _.unionBy
-         */
-        unionBy<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            arrays2: List<T> | null | undefined,
-            iteratee?: ValueIteratee<T>
-        ): LoDashExplicitWrapper<T[]>;
-
-        /**
-         * @see _.unionBy
-         */
-        unionBy<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            arrays2: List<T> | null | undefined,
-            arrays3: List<T> | null | undefined,
-            iteratee?: ValueIteratee<T>
-        ): LoDashExplicitWrapper<T[]>;
-
-        /**
-         * @see _.unionBy
-         */
-        unionBy<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            arrays2: List<T> | null | undefined,
-            arrays3: List<T> | null | undefined,
-            arrays4: List<T> | null | undefined,
-            iteratee?: ValueIteratee<T>
-        ): LoDashExplicitWrapper<T[]>;
-
-        /**
-         * @see _.unionBy
-         */
-        unionBy<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            arrays2: List<T> | null | undefined,
-            arrays3: List<T> | null | undefined,
-            arrays4: List<T> | null | undefined,
-            arrays5: List<T> | null | undefined,
-            ...iteratee: Array<ValueIteratee<T> | List<T> | null | undefined>
-        ): LoDashExplicitWrapper<T[]>;
-    }
-
-    // unionWith
-
-    interface LoDashStatic {
-        /**
-         * This method is like `_.union` except that it accepts `comparator` which
-         * is invoked to compare elements of `arrays`. The comparator is invoked
-         * with two arguments: (arrVal, othVal).
-         *
-         * @category Array
-         * @param [arrays] The arrays to inspect.
-         * @param [comparator] The comparator invoked per element.
-         * @returns Returns the new array of combined values.
-         * @example
-         *
-         * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
-         * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
-         *
-         * _.unionWith(objects, others, _.isEqual);
-         * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]
-         */
-        unionWith<T>(
-            arrays: List<T> | null | undefined,
-            comparator?: Comparator<T>
-        ): T[];
-
-        /**
-         * @see _.unionBy
-         */
-        unionWith<T>(
-            arrays: List<T> | null | undefined,
-            arrays2: List<T> | null | undefined,
-            comparator?: Comparator<T>
-        ): T[];
-
-        /**
-         * @see _.unionWith
-         */
-        unionWith<T>(
-            arrays: List<T> | null | undefined,
-            arrays2: List<T> | null | undefined,
-            arrays3: List<T> | null | undefined,
-            ...comparator: Array<Comparator<T> | List<T> | null | undefined>
-        ): T[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.unionWith
-         */
-        unionWith<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            comparator?: Comparator<T>
-        ): LoDashImplicitWrapper<T[]>;
-
-        /**
-         * @see _.unionWith
-         */
-        unionWith<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            arrays2: List<T> | null | undefined,
-            comparator?: Comparator<T>
-        ): LoDashImplicitWrapper<T[]>;
-
-        /**
-         * @see _.unionWith
-         */
-        unionWith<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            arrays2: List<T> | null | undefined,
-            arrays3: List<T> | null | undefined,
-            ...comparator: Array<Comparator<T> | List<T> | null | undefined>
-        ): LoDashImplicitWrapper<T[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.unionWith
-         */
-        unionWith<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            comparator?: Comparator<T>
-        ): LoDashExplicitWrapper<T[]>;
-
-        /**
-         * @see _.unionWith
-         */
-        unionWith<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            arrays2: List<T> | null | undefined,
-            comparator?: Comparator<T>
-        ): LoDashExplicitWrapper<T[]>;
-
-        /**
-         * @see _.unionWith
-         */
-        unionWith<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            arrays2: List<T> | null | undefined,
-            arrays3: List<T> | null | undefined,
-            ...comparator: Array<Comparator<T> | List<T> | null | undefined>
-        ): LoDashExplicitWrapper<T[]>;
-    }
-
-    // uniq
-
-    interface LoDashStatic {
-        /**
-         * Creates a duplicate-free version of an array, using
-         * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
-         * for equality comparisons, in which only the first occurrence of each element
-         * is kept.
-         *
-         * @category Array
-         * @param array The array to inspect.
-         * @returns Returns the new duplicate free array.
-         * @example
-         *
-         * _.uniq([2, 1, 2]);
-         * // => [2, 1]
-         */
-        uniq<T>(
-            array: List<T> | null | undefined
-        ): T[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.uniq
-         */
-        uniq<T>(this: LoDashImplicitWrapper<List<T> | null | undefined>): LoDashImplicitWrapper<T[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.uniq
-         */
-        uniq<T>(this: LoDashExplicitWrapper<List<T> | null | undefined>): LoDashExplicitWrapper<T[]>;
-    }
-
-    // uniqBy
-
-    interface LoDashStatic {
-        /**
-         * This method is like `_.uniq` except that it accepts `iteratee` which is
-         * invoked for each element in `array` to generate the criterion by which
-         * uniqueness is computed. The iteratee is invoked with one argument: (value).
-         *
-         * @category Array
-         * @param array The array to inspect.
-         * @param [iteratee=_.identity] The iteratee invoked per element.
-         * @returns Returns the new duplicate free array.
-         * @example
-         *
-         * _.uniqBy([2.1, 1.2, 2.3], Math.floor);
-         * // => [2.1, 1.2]
-         *
-         * // using the `_.property` iteratee shorthand
-         * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');
-         * // => [{ 'x': 1 }, { 'x': 2 }]
-         */
-        uniqBy<T>(
-            array: List<T> | null | undefined,
-            iteratee: ValueIteratee<T>
-        ): T[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.uniqBy
-         */
-        uniqBy<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            iteratee: ValueIteratee<T>
-        ): LoDashImplicitWrapper<T[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.uniqBy
-         */
-        uniqBy<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            iteratee: ValueIteratee<T>
-        ): LoDashExplicitWrapper<T[]>;
-    }
-
-    // uniqWith
-
-    interface LoDashStatic {
-        /**
-         * This method is like `_.uniq` except that it accepts `comparator` which
-         * is invoked to compare elements of `array`. The comparator is invoked with
-         * two arguments: (arrVal, othVal).
-         *
-         * @category Array
-         * @param array The array to inspect.
-         * @param [comparator] The comparator invoked per element.
-         * @returns Returns the new duplicate free array.
-         * @example
-         *
-         * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 },  { 'x': 1, 'y': 2 }];
-         *
-         * _.uniqWith(objects, _.isEqual);
-         * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]
-         */
-        uniqWith<T>(
-            array: List<T> | null | undefined,
-            comparator?: Comparator<T>
-        ): T[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.uniqWith
-         */
-        uniqWith<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            comparator?: Comparator<T>
-        ): LoDashImplicitWrapper<T[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.uniqWith
-         */
-        uniqWith<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            comparator?: Comparator<T>
-        ): LoDashExplicitWrapper<T[]>;
-    }
-
-    // unzip
-
-    interface LoDashStatic {
-        /**
-         * This method is like _.zip except that it accepts an array of grouped elements and creates an array
-         * regrouping the elements to their pre-zip configuration.
-         *
-         * @param array The array of grouped elements to process.
-         * @return Returns the new array of regrouped elements.
-         */
-        unzip<T>(array: T[][] | List<List<T>> | null | undefined): T[][];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.unzip
-         */
-        unzip<T>(this: LoDashImplicitWrapper<T[][] | List<List<T>> | null | undefined>): LoDashImplicitWrapper<T[][]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.unzip
-         */
-        unzip<T>(this: LoDashExplicitWrapper<T[][] | List<List<T>> | null | undefined>): LoDashExplicitWrapper<T[][]>;
-    }
-
-    // unzipWith
-
-    interface LoDashStatic {
-        /**
-         * This method is like _.unzip except that it accepts an iteratee to specify how regrouped values should be
-         * combined. The iteratee is invoked with four arguments: (accumulator, value, index, group).
-         *
-         * @param array The array of grouped elements to process.
-         * @param iteratee The function to combine regrouped values.
-         * @return Returns the new array of regrouped elements.
-         */
-        unzipWith<T, TResult>(
-            array: List<List<T>> | null | undefined,
-            iteratee: (...values: T[]) => TResult
-        ): TResult[];
-
-        /**
-         * @see _.unzipWith
-         */
-        unzipWith<T>(
-            array: List<List<T>> | null | undefined
-        ): T[][];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.unzipWith
-         */
-        unzipWith<T, TResult>(
-            this: LoDashImplicitWrapper<List<List<T>> | null | undefined>,
-            iteratee: (...values: T[]) => TResult
-        ): LoDashImplicitWrapper<TResult[]>;
-
-        /**
-         * @see _.unzipWith
-         */
-        unzipWith<T>(
-            this: LoDashImplicitWrapper<List<List<T>> | null | undefined>
-        ): LoDashImplicitWrapper<T[][]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.unzipWith
-         */
-        unzipWith<T, TResult>(
-            this: LoDashExplicitWrapper<List<List<T>> | null | undefined>,
-            iteratee: (...values: T[]) => TResult
-        ): LoDashExplicitWrapper<TResult[]>;
-
-        /**
-         * @see _.unzipWith
-         */
-        unzipWith<T>(
-            this: LoDashExplicitWrapper<List<List<T>> | null | undefined>
-        ): LoDashExplicitWrapper<T[][]>;
-    }
-
-    // without
-
-    interface LoDashStatic {
-        /**
-         * Creates an array excluding all provided values using SameValueZero for equality comparisons.
-         *
-         * @param array The array to filter.
-         * @param values The values to exclude.
-         * @return Returns the new array of filtered values.
-         */
-        without<T>(
-            array: List<T> | null | undefined,
-            ...values: T[]
-        ): T[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.without
-         */
-        without<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            ...values: T[]
-        ): LoDashImplicitWrapper<T[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.without
-         */
-        without<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            ...values: T[]
-        ): LoDashExplicitWrapper<T[]>;
-    }
-
-    // xor
-
-    interface LoDashStatic {
-        /**
-         * Creates an array of unique values that is the symmetric difference of the provided arrays.
-         *
-         * @param arrays The arrays to inspect.
-         * @return Returns the new array of values.
-         */
-        xor<T>(...arrays: Array<List<T> | null | undefined>): T[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.xor
-         */
-        xor<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            ...arrays: Array<List<T> | null | undefined>
-        ): LoDashImplicitWrapper<T[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.xor
-         */
-        xor<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            ...arrays: Array<List<T> | null | undefined>
-        ): LoDashExplicitWrapper<T[]>;
-    }
-
-    // xorBy
-
-    interface LoDashStatic {
-        /**
-         * This method is like `_.xor` except that it accepts `iteratee` which is
-         * invoked for each element of each `arrays` to generate the criterion by which
-         * uniqueness is computed. The iteratee is invoked with one argument: (value).
-         *
-         * @category Array
-         * @param [arrays] The arrays to inspect.
-         * @param [iteratee=_.identity] The iteratee invoked per element.
-         * @returns Returns the new array of values.
-         * @example
-         *
-         * _.xorBy([2.1, 1.2], [4.3, 2.4], Math.floor);
-         * // => [1.2, 4.3]
-         *
-         * // using the `_.property` iteratee shorthand
-         * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
-         * // => [{ 'x': 2 }]
-         */
-        xorBy<T>(
-            arrays: List<T> | null | undefined,
-            iteratee?: ValueIteratee<T>
-        ): T[];
-
-        /**
-         * @see _.xorBy
-         */
-        xorBy<T>(
-            arrays: List<T> | null | undefined,
-            arrays2: List<T> | null | undefined,
-            iteratee?: ValueIteratee<T>
-        ): T[];
-
-        /**
-         * @see _.xorBy
-         */
-        xorBy<T>(
-            arrays: List<T> | null | undefined,
-            arrays2: List<T> | null | undefined,
-            arrays3: List<T> | null | undefined,
-            ...iteratee: Array<ValueIteratee<T> | List<T> | null | undefined>
-        ): T[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.xor
-         */
-        xorBy<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            iteratee?: ValueIteratee<T>
-        ): LoDashImplicitWrapper<T[]>;
-
-        /**
-         * @see _.xorBy
-         */
-        xorBy<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            arrays2: List<T> | null | undefined,
-            iteratee?: ValueIteratee<T>
-        ): LoDashImplicitWrapper<T[]>;
-
-        /**
-         * @see _.xorBy
-         */
-        xorBy<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            arrays2: List<T> | null | undefined,
-            arrays3: List<T> | null | undefined,
-            ...iteratee: Array<ValueIteratee<T> | List<T> | null | undefined>
-        ): LoDashImplicitWrapper<T[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.xorBy
-         */
-        xorBy<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            iteratee?: ValueIteratee<T>
-        ): LoDashExplicitWrapper<T[]>;
-
-        /**
-         * @see _.xorBy
-         */
-        xorBy<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            arrays2: List<T> | null | undefined,
-            iteratee?: ValueIteratee<T>
-        ): LoDashExplicitWrapper<T[]>;
-
-        /**
-         * @see _.xorBy
-         */
-        xorBy<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            arrays2: List<T> | null | undefined,
-            arrays3: List<T> | null | undefined,
-            ...iteratee: Array<ValueIteratee<T> | List<T> | null | undefined>
-        ): LoDashExplicitWrapper<T[]>;
-    }
-
-    // xorWith
-
-    interface LoDashStatic {
-        /**
-         * This method is like `_.xor` except that it accepts `comparator` which is
-         * invoked to compare elements of `arrays`. The comparator is invoked with
-         * two arguments: (arrVal, othVal).
-         *
-         * @category Array
-         * @param [arrays] The arrays to inspect.
-         * @param [comparator] The comparator invoked per element.
-         * @returns Returns the new array of values.
-         * @example
-         *
-         * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
-         * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
-         *
-         * _.xorWith(objects, others, _.isEqual);
-         * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]
-         */
-        xorWith<T>(
-            arrays: List<T> | null | undefined,
-            comparator?: Comparator<T>
-        ): T[];
-
-        /**
-         * @see _.xorWith
-         */
-        xorWith<T>(
-            arrays: List<T> | null | undefined,
-            arrays2: List<T> | null | undefined,
-            comparator?: Comparator<T>
-        ): T[];
-
-        /**
-         * @see _.xorWith
-         */
-        xorWith<T>(
-            arrays: List<T> | null | undefined,
-            arrays2: List<T> | null | undefined,
-            arrays3: List<T> | null | undefined,
-            ...comparator: Array<Comparator<T> | List<T> | null | undefined>
-        ): T[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.xorWith
-         */
-        xorWith<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            comparator?: Comparator<T>
-        ): LoDashImplicitWrapper<T[]>;
-
-        /**
-         * @see _.xorWith
-         */
-        xorWith<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            arrays2: List<T> | null | undefined,
-            comparator?: Comparator<T>
-        ): LoDashImplicitWrapper<T[]>;
-
-        /**
-         * @see _.xorWith
-         */
-        xorWith<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            arrays2: List<T> | null | undefined,
-            arrays3: List<T> | null | undefined,
-            ...comparator: Array<Comparator<T> | List<T> | null | undefined>
-        ): LoDashImplicitWrapper<T[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.xorWith
-         */
-        xorWith<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            comparator?: Comparator<T>
-        ): LoDashExplicitWrapper<T[]>;
-
-        /**
-         * @see _.xorWith
-         */
-        xorWith<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            arrays2: List<T> | null | undefined,
-            comparator?: Comparator<T>
-        ): LoDashExplicitWrapper<T[]>;
-
-        /**
-         * @see _.xorWith
-         */
-        xorWith<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            arrays2: List<T> | null | undefined,
-            arrays3: List<T> | null | undefined,
-            ...comparator: Array<Comparator<T> | List<T> | null | undefined>
-        ): LoDashExplicitWrapper<T[]>;
-    }
-
-    // zip
-
-    interface LoDashStatic {
-        /**
-         * Creates an array of grouped elements, the first of which contains the first elements of the given arrays,
-         * the second of which contains the second elements of the given arrays, and so on.
-         *
-         * @param arrays The arrays to process.
-         * @return Returns the new array of grouped elements.
-         */
-        zip<T1, T2>(arrays1: List<T1>, arrays2: List<T2>): Array<[T1 | undefined, T2 | undefined]>;
-
-        /**
-         * @see _.zip
-         */
-        zip<T1, T2, T3>(arrays1: List<T1>, arrays2: List<T2>, arrays3: List<T3>): Array<[T1 | undefined, T2 | undefined, T3 | undefined]>;
-
-        /**
-         * @see _.zip
-         */
-        zip<T1, T2, T3, T4>(arrays1: List<T1>, arrays2: List<T2>, arrays3: List<T3>, arrays4: List<T4>): Array<[T1 | undefined, T2 | undefined, T3 | undefined, T4 | undefined]>;
-
-        /**
-         * @see _.zip
-         */
-        zip<T1, T2, T3, T4, T5>(arrays1: List<T1>, arrays2: List<T2>, arrays3: List<T3>, arrays4: List<T4>, arrays5: List<T5>): Array<[T1 | undefined, T2 | undefined, T3 | undefined, T4 | undefined, T5 | undefined]>;
-
-        /**
-         * @see _.zip
-         */
-        zip<T>(...arrays: Array<List<T> | null | undefined>): Array<Array<T | undefined>>;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.zip
-         */
-        zip<T1, T2>(
-            this: LoDashImplicitWrapper<List<T1>>,
-            arrays2: List<T2>,
-        ): LoDashImplicitWrapper<Array<[T1 | undefined, T2 | undefined]>>;
-
-        /**
-         * @see _.zip
-         */
-        zip<T1, T2, T3>(
-            this: LoDashImplicitWrapper<List<T1>>,
-            arrays2: List<T2>,
-            arrays3: List<T3>,
-        ): LoDashImplicitWrapper<Array<[T1 | undefined, T2 | undefined, T3 | undefined]>>;
-
-        /**
-         * @see _.zip
-         */
-        zip<T1, T2, T3, T4>(
-            this: LoDashImplicitWrapper<List<T1>>,
-            arrays2: List<T2>,
-            arrays3: List<T3>,
-            arrays4: List<T4>,
-        ): LoDashImplicitWrapper<Array<[T1 | undefined, T2 | undefined, T3 | undefined, T4 | undefined]>>;
-
-        /**
-         * @see _.zip
-         */
-        zip<T1, T2, T3, T4, T5>(
-            this: LoDashImplicitWrapper<List<T1>>,
-            arrays2: List<T2>,
-            arrays3: List<T3>,
-            arrays4: List<T4>,
-            arrays5: List<T5>,
-        ): LoDashImplicitWrapper<Array<[T1 | undefined, T2 | undefined, T3 | undefined, T4 | undefined, T5 | undefined]>>;
-
-        /**
-         * @see _.zip
-         */
-        zip<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            ...arrays: Array<List<T> | null | undefined>
-        ): LoDashImplicitWrapper<Array<Array<T | undefined>>>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.zip
-         */
-        zip<T1, T2>(
-            this: LoDashExplicitWrapper<List<T1>>,
-            arrays2: List<T2>,
-        ): LoDashExplicitWrapper<Array<[T1 | undefined, T2 | undefined]>>;
-
-        /**
-         * @see _.zip
-         */
-        zip<T1, T2, T3>(
-            this: LoDashExplicitWrapper<List<T1>>,
-            arrays2: List<T2>,
-            arrays3: List<T3>,
-        ): LoDashExplicitWrapper<Array<[T1 | undefined, T2 | undefined, T3 | undefined]>>;
-
-        /**
-         * @see _.zip
-         */
-        zip<T1, T2, T3, T4>(
-            this: LoDashExplicitWrapper<List<T1>>,
-            arrays2: List<T2>,
-            arrays3: List<T3>,
-            arrays4: List<T4>,
-        ): LoDashExplicitWrapper<Array<[T1 | undefined, T2 | undefined, T3 | undefined, T4 | undefined]>>;
-
-        /**
-         * @see _.zip
-         */
-        zip<T1, T2, T3, T4, T5>(
-            this: LoDashExplicitWrapper<List<T1>>,
-            arrays2: List<T2>,
-            arrays3: List<T3>,
-            arrays4: List<T4>,
-            arrays5: List<T5>,
-        ): LoDashExplicitWrapper<Array<[T1 | undefined, T2 | undefined, T3 | undefined, T4 | undefined, T5 | undefined]>>;
-
-        /**
-         * @see _.zip
-         */
-        zip<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            ...arrays: Array<List<T> | null | undefined>
-        ): LoDashExplicitWrapper<Array<Array<T | undefined>>>;
-    }
-
-    // zipObject
-
-    interface LoDashStatic {
-        /**
-         * This method is like _.fromPairs except that it accepts two arrays, one of property
-         * identifiers and one of corresponding values.
-         *
-         * @param props The property names.
-         * @param values The property values.
-         * @return Returns the new object.
-         */
-        zipObject<T>(
-            props: List<PropertyName>,
-            values: List<T>
-        ): Dictionary<T>;
-
-        /**
-         * @see _.zipObject
-         */
-        zipObject(
-            props?: List<PropertyName>
-        ): Dictionary<undefined>;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.zipObject
-         */
-        zipObject<T>(
-            this: LoDashImplicitWrapper<List<PropertyName>>,
-            values: List<T>
-        ): LoDashImplicitWrapper<Dictionary<T>>;
-
-        /**
-         * @see _.zipObject
-         */
-        zipObject(
-            this: LoDashImplicitWrapper<List<PropertyName>>
-        ): LoDashImplicitWrapper<Dictionary<undefined>>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.zipObject
-         */
-        zipObject<T>(
-            this: LoDashExplicitWrapper<List<PropertyName>>,
-            values: List<T>
-        ): LoDashExplicitWrapper<Dictionary<T>>;
-
-        /**
-         * @see _.zipObject
-         */
-        zipObject(
-            this: LoDashExplicitWrapper<List<PropertyName>>
-        ): LoDashExplicitWrapper<Dictionary<undefined>>;
-    }
-
-    // zipObjectDeep
-
-    interface LoDashStatic {
-        /**
-         * This method is like _.zipObject except that it supports property paths.
-         *
-         * @param paths The property names.
-         * @param values The property values.
-         * @return Returns the new object.
-         */
-        zipObjectDeep(
-            paths?: List<PropertyPath>,
-            values?: List<any>
-        ): object;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.zipObjectDeep
-         */
-        zipObjectDeep(
-            this: LoDashImplicitWrapper<List<PropertyPath>>,
-            values?: List<any>
-        ): LoDashImplicitWrapper<object>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.zipObjectDeep
-         */
-        zipObjectDeep(
-            this: LoDashExplicitWrapper<List<PropertyPath>>,
-            values?: List<any>
-        ): LoDashExplicitWrapper<object>;
-    }
-
-    // zipWith
-
-    interface LoDashStatic {
-        /**
-         * This method is like _.zip except that it accepts an iteratee to specify how grouped values should be
-         * combined. The iteratee is invoked with four arguments: (accumulator, value, index,
-         * group).
-         * @param arrays The arrays to process.
-         * @param iteratee The function to combine grouped values.
-         * @return Returns the new array of grouped elements.
-         */
-        zipWith<T, TResult>(
-            arrays: List<T>,
-            iteratee: (value1: T) => TResult
-        ): TResult[];
-
-        /**
-         * @see _.zipWith
-         */
-        zipWith<T1, T2, TResult>(
-            arrays1: List<T1>,
-            arrays2: List<T2>,
-            iteratee: (value1: T1, value2: T2) => TResult
-        ): TResult[];
-
-        /**
-         * @see _.zipWith
-         */
-        zipWith<T1, T2, T3, TResult>(
-            arrays1: List<T1>,
-            arrays2: List<T2>,
-            arrays3: List<T3>,
-            iteratee: (value1: T1, value2: T2, value3: T3) => TResult
-        ): TResult[];
-
-        /**
-         * @see _.zipWith
-         */
-        zipWith<T1, T2, T3, T4, TResult>(
-            arrays1: List<T1>,
-            arrays2: List<T2>,
-            arrays3: List<T3>,
-            arrays4: List<T4>,
-            iteratee: (value1: T1, value2: T2, value3: T3, value4: T4) => TResult
-        ): TResult[];
-
-        /**
-         * @see _.zipWith
-         */
-        zipWith<T1, T2, T3, T4, T5, TResult>(
-            arrays1: List<T1>,
-            arrays2: List<T2>,
-            arrays3: List<T3>,
-            arrays4: List<T4>,
-            arrays5: List<T5>,
-            iteratee: (value1: T1, value2: T2, value3: T3, value4: T4, value5: T5) => TResult
-        ): TResult[];
-
-        /**
-         * @see _.zipWith
-         */
-        zipWith<T, TResult>(
-            ...iteratee: Array<((...group: T[]) => TResult) | List<T> | null | undefined>
-        ): TResult[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.zipWith
-         */
-        zipWith<T, TResult>(
-            this: LoDashImplicitWrapper<List<T>>,
-            iteratee: (value1: T) => TResult
-        ): LoDashImplicitWrapper<TResult[]>;
-
-        /**
-         * @see _.zipWith
-         */
-        zipWith<T1, T2, TResult>(
-            this: LoDashImplicitWrapper<List<T1>>,
-            arrays2: List<T2>,
-            iteratee: (value1: T1, value2: T2) => TResult
-        ): LoDashImplicitWrapper<TResult[]>;
-
-        /**
-         * @see _.zipWith
-         */
-        zipWith<T1, T2, T3, TResult>(
-            this: LoDashImplicitWrapper<List<T1>>,
-            arrays2: List<T2>,
-            arrays3: List<T3>,
-            iteratee: (value1: T1, value2: T2, value3: T3) => TResult
-        ): LoDashImplicitWrapper<TResult[]>;
-
-        /**
-         * @see _.zipWith
-         */
-        zipWith<T1, T2, T3, T4, TResult>(
-            this: LoDashImplicitWrapper<List<T1>>,
-            arrays2: List<T2>,
-            arrays3: List<T3>,
-            arrays4: List<T4>,
-            iteratee: (value1: T1, value2: T2, value3: T3, value4: T4) => TResult
-        ): LoDashImplicitWrapper<TResult[]>;
-
-        /**
-         * @see _.zipWith
-         */
-        zipWith<T1, T2, T3, T4, T5, TResult>(
-            this: LoDashImplicitWrapper<List<T1>>,
-            arrays2: List<T2>,
-            arrays3: List<T3>,
-            arrays4: List<T4>,
-            arrays5: List<T5>,
-            iteratee: (value1: T1, value2: T2, value3: T3, value4: T4, value5: T5) => TResult
-        ): LoDashImplicitWrapper<TResult[]>;
-
-        /**
-         * @see _.zipWith
-         */
-        zipWith<T, TResult>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            ...iteratee: Array<((...group: T[]) => TResult) | List<T> | null | undefined>
-        ): LoDashImplicitWrapper<TResult[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.zipWith
-         */
-        zipWith<T, TResult>(
-            this: LoDashExplicitWrapper<List<T>>,
-            iteratee: (value1: T) => TResult
-        ): LoDashExplicitWrapper<TResult[]>;
-
-        /**
-         * @see _.zipWith
-         */
-        zipWith<T1, T2, TResult>(
-            this: LoDashExplicitWrapper<List<T1>>,
-            arrays2: List<T2>,
-            iteratee: (value1: T1, value2: T2) => TResult
-        ): LoDashExplicitWrapper<TResult[]>;
-
-        /**
-         * @see _.zipWith
-         */
-        zipWith<T1, T2, T3, TResult>(
-            this: LoDashExplicitWrapper<List<T1>>,
-            arrays2: List<T2>,
-            arrays3: List<T3>,
-            iteratee: (value1: T1, value2: T2, value3: T3) => TResult
-        ): LoDashExplicitWrapper<TResult[]>;
-
-        /**
-         * @see _.zipWith
-         */
-        zipWith<T1, T2, T3, T4, TResult>(
-            this: LoDashExplicitWrapper<List<T1>>,
-            arrays2: List<T2>,
-            arrays3: List<T3>,
-            arrays4: List<T4>,
-            iteratee: (value1: T1, value2: T2, value3: T3, value4: T4) => TResult
-        ): LoDashExplicitWrapper<TResult[]>;
-
-        /**
-         * @see _.zipWith
-         */
-        zipWith<T1, T2, T3, T4, T5, TResult>(
-            this: LoDashExplicitWrapper<List<T1>>,
-            arrays2: List<T2>,
-            arrays3: List<T3>,
-            arrays4: List<T4>,
-            arrays5: List<T5>,
-            iteratee: (value1: T1, value2: T2, value3: T3, value4: T4, value5: T5) => TResult
-        ): LoDashExplicitWrapper<TResult[]>;
-
-        /**
-         * @see _.zipWith
-         */
-        zipWith<T, TResult>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            ...iteratee: Array<((...group: T[]) => TResult) | List<T> | null | undefined>
-        ): LoDashExplicitWrapper<TResult[]>;
-    }
-}
diff --git a/jtg js/node_modules/@types/lodash/common/collection.d.ts b/jtg js/node_modules/@types/lodash/common/collection.d.ts
deleted file mode 100644
index 2e38422b2d1310554e718991c2de4054ef43710c..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/common/collection.d.ts	
+++ /dev/null
@@ -1,2575 +0,0 @@
-import _ = require("../index");
-declare module "../index" {
-    // countBy
-
-    interface LoDashStatic {
-        /**
-         * Creates an object composed of keys generated from the results of running each element of collection through
-         * iteratee. The corresponding value of each key is the number of times the key was returned by iteratee. The
-         * iteratee is invoked with one argument: (value).
-         *
-         * @param collection The collection to iterate over.
-         * @param iteratee The function invoked per iteration.
-         * @return Returns the composed aggregate object.
-         */
-        countBy<T>(
-            collection: List<T> | null | undefined,
-            iteratee?: ValueIteratee<T>
-        ): Dictionary<number>;
-
-        /**
-         * @see _.countBy
-         */
-        countBy<T extends object>(
-            collection: T | null | undefined,
-            iteratee?: ValueIteratee<T[keyof T]>
-        ): Dictionary<number>;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.countBy
-         */
-        countBy<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            iteratee?: ValueIteratee<T>
-        ): LoDashImplicitWrapper<Dictionary<number>>;
-
-        /**
-         * @see _.countBy
-         */
-        countBy<T extends object>(
-            this: LoDashImplicitWrapper<T | null | undefined>,
-            iteratee?: ValueIteratee<T[keyof T]>
-        ): LoDashImplicitWrapper<Dictionary<number>>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.countBy
-         */
-        countBy<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            iteratee?: ValueIteratee<T>
-        ): LoDashExplicitWrapper<Dictionary<number>>;
-
-        /**
-         * @see _.countBy
-         */
-        countBy<T extends object>(
-            this: LoDashExplicitWrapper<T | null | undefined>,
-            iteratee?: ValueIteratee<T[keyof T]>
-        ): LoDashExplicitWrapper<Dictionary<number>>;
-    }
-
-    // each
-
-    interface LoDashStatic {
-        each: typeof _.forEach; // tslint:disable-line:no-unnecessary-qualifier
-    }
-
-    interface LoDashWrapper<TValue> {
-        /**
-         * @see _.forEach
-         */
-        each<T>(
-            this: LoDashWrapper<T[] | null | undefined>,
-            iteratee?: ArrayIterator<T, any>
-        ): this;
-
-        /**
-         * @see _.forEach
-         */
-        each(
-            this: LoDashWrapper<string | null | undefined>,
-            iteratee?: StringIterator<any>
-        ): this;
-
-        /**
-         * @see _.forEach
-         */
-        each<T>(
-            this: LoDashWrapper<List<T> | null | undefined>,
-            iteratee?: ListIterator<T, any>
-        ): this;
-
-        /**
-         * @see _.forEach
-         */
-        each<T extends object>(
-            this: LoDashWrapper<T | null | undefined>,
-            iteratee?: ObjectIterator<T, any>
-        ): this;
-    }
-
-    // eachRight
-
-    interface LoDashStatic {
-        eachRight: typeof _.forEachRight; // tslint:disable-line:no-unnecessary-qualifier
-    }
-
-    interface LoDashWrapper<TValue> {
-        /**
-         * @see _.forEachRight
-         */
-        eachRight<T>(
-            this: LoDashWrapper<T[] | null | undefined>,
-            iteratee?: ArrayIterator<T, any>
-        ): this;
-
-        /**
-         * @see _.forEachRight
-         */
-        eachRight(
-            this: LoDashWrapper<string | null | undefined>,
-            iteratee?: StringIterator<any>
-        ): this;
-
-        /**
-         * @see _.forEachRight
-         */
-        eachRight<T>(
-            this: LoDashWrapper<List<T> | null | undefined>,
-            iteratee?: ListIterator<T, any>
-        ): this;
-
-        /**
-         * @see _.forEachRight
-         */
-        eachRight<T extends object>(
-            this: LoDashWrapper<T | null | undefined>,
-            iteratee?: ObjectIterator<T, any>
-        ): this;
-    }
-
-    // every
-
-    interface LoDashStatic {
-        /**
-         * Checks if predicate returns truthy for all elements of collection. Iteration is stopped once predicate
-         * returns falsey. The predicate is invoked with three arguments: (value, index|key, collection).
-         *
-         * @param collection The collection to iterate over.
-         * @param predicate The function invoked per iteration.
-         * @return Returns true if all elements pass the predicate check, else false.
-         */
-        every<T>(
-            collection: List<T> | null | undefined,
-            predicate?: ListIterateeCustom<T, boolean>
-        ): boolean;
-
-        /**
-         * @see _.every
-         */
-        every<T extends object>(
-            collection: T | null | undefined,
-            predicate?: ObjectIterateeCustom<T, boolean>
-        ): boolean;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.every
-         */
-        every<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            predicate?: ListIterateeCustom<T, boolean>
-        ): boolean;
-
-        /**
-         * @see _.every
-         */
-        every<T extends object>(
-            this: LoDashImplicitWrapper<T | null | undefined>,
-            predicate?: ObjectIterateeCustom<T, boolean>
-        ): boolean;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.every
-         */
-        every<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            predicate?: ListIterateeCustom<T, boolean>
-        ): LoDashExplicitWrapper<boolean>;
-
-        /**
-         * @see _.every
-         */
-        every<T extends object>(
-            this: LoDashExplicitWrapper<T | null | undefined>,
-            predicate?: ObjectIterateeCustom<T, boolean>
-        ): LoDashExplicitWrapper<boolean>;
-    }
-
-    // filter
-
-    interface LoDashStatic {
-        /**
-         * Iterates over elements of collection, returning an array of all elements predicate returns truthy for. The
-         * predicate is invoked with three arguments: (value, index|key, collection).
-         *
-         * @param collection The collection to iterate over.
-         * @param predicate The function invoked per iteration.
-         * @return Returns the new filtered array.
-         */
-        filter(
-            collection: string | null | undefined,
-            predicate?: StringIterator<boolean>
-        ): string[];
-
-        /**
-         * @see _.filter
-         */
-        filter<T, S extends T>(
-            collection: List<T> | null | undefined,
-            predicate: ListIteratorTypeGuard<T, S>
-        ): S[];
-
-        /**
-         * @see _.filter
-         */
-        filter<T>(
-            collection: List<T> | null | undefined,
-            predicate?: ListIterateeCustom<T, boolean>
-        ): T[];
-
-        /**
-         * @see _.filter
-         */
-        filter<T extends object, S extends T[keyof T]>(
-            collection: T | null | undefined,
-            predicate: ObjectIteratorTypeGuard<T, S>
-        ): S[];
-
-        /**
-         * @see _.filter
-         */
-        filter<T extends object>(
-            collection: T | null | undefined,
-            predicate?: ObjectIterateeCustom<T, boolean>
-        ): Array<T[keyof T]>;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.filter
-         */
-        filter(
-            this: LoDashImplicitWrapper<string | null | undefined>,
-            predicate?: StringIterator<boolean>
-        ): LoDashImplicitWrapper<string[]>;
-
-        /**
-         * @see _.filter
-         */
-        filter<T, S extends T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            predicate: ListIteratorTypeGuard<T, S>
-        ): LoDashImplicitWrapper<S[]>;
-
-        /**
-         * @see _.filter
-         */
-        filter<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            predicate?: ListIterateeCustom<T, boolean>
-        ): LoDashImplicitWrapper<T[]>;
-
-        /**
-         * @see _.filter
-         */
-        filter<T extends object, S extends T[keyof T]>(
-            this: LoDashImplicitWrapper<T | null | undefined>,
-            predicate: ObjectIteratorTypeGuard<T, S>
-        ): LoDashImplicitWrapper<S[]>;
-
-        /**
-         * @see _.filter
-         */
-        filter<T extends object>(
-            this: LoDashImplicitWrapper<T | null | undefined>,
-            predicate?: ObjectIterateeCustom<T, boolean>
-        ): LoDashImplicitWrapper<Array<T[keyof T]>>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.filter
-         */
-        filter(
-            this: LoDashExplicitWrapper<string | null | undefined>,
-            predicate?: StringIterator<boolean>
-        ): LoDashExplicitWrapper<string[]>;
-
-        /**
-         * @see _.filter
-         */
-        filter<T, S extends T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            predicate: ListIteratorTypeGuard<T, S>
-        ): LoDashExplicitWrapper<S[]>;
-
-        /**
-         * @see _.filter
-         */
-        filter<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            predicate?: ListIterateeCustom<T, boolean>
-        ): LoDashExplicitWrapper<T[]>;
-
-        /**
-         * @see _.filter
-         */
-        filter<T extends object, S extends T[keyof T]>(
-            this: LoDashExplicitWrapper<T | null | undefined>,
-            predicate: ObjectIteratorTypeGuard<T, S>
-        ): LoDashExplicitWrapper<S[]>;
-
-        /**
-         * @see _.filter
-         */
-        filter<T extends object>(
-            this: LoDashExplicitWrapper<T | null | undefined>,
-            predicate?: ObjectIterateeCustom<T, boolean>
-        ): LoDashExplicitWrapper<Array<T[keyof T]>>;
-    }
-
-    // find
-
-    interface LoDashStatic {
-        /**
-         * Iterates over elements of collection, returning the first element predicate returns truthy for.
-         * The predicate is invoked with three arguments: (value, index|key, collection).
-         *
-         * @param collection The collection to search.
-         * @param predicate The function invoked per iteration.
-         * @param fromIndex The index to search from.
-         * @return Returns the matched element, else undefined.
-         */
-        find<T, S extends T>(
-            collection: List<T> | null | undefined,
-            predicate: ListIteratorTypeGuard<T, S>,
-            fromIndex?: number
-        ): S|undefined;
-
-        /**
-         * @see _.find
-         */
-        find<T>(
-            collection: List<T> | null | undefined,
-            predicate?: ListIterateeCustom<T, boolean>,
-            fromIndex?: number
-        ): T|undefined;
-
-        /**
-         * @see _.find
-         */
-        find<T extends object, S extends T[keyof T]>(
-            collection: T | null | undefined,
-            predicate: ObjectIteratorTypeGuard<T, S>,
-            fromIndex?: number
-        ): S|undefined;
-
-        /**
-         * @see _.find
-         */
-        find<T extends object>(
-            collection: T | null | undefined,
-            predicate?: ObjectIterateeCustom<T, boolean>,
-            fromIndex?: number
-        ): T[keyof T]|undefined;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.find
-         */
-        find<T, S extends T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            predicate: ListIteratorTypeGuard<T, S>,
-            fromIndex?: number
-        ): S|undefined;
-
-        /**
-         * @see _.find
-         */
-        find<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            predicate?: ListIterateeCustom<T, boolean>,
-            fromIndex?: number
-        ): T|undefined;
-
-        /**
-         * @see _.find
-         */
-        find<T extends object, S extends T[keyof T]>(
-            this: LoDashImplicitWrapper<T | null | undefined>,
-            predicate: ObjectIteratorTypeGuard<T, S>,
-            fromIndex?: number
-        ): S|undefined;
-
-        /**
-         * @see _.find
-         */
-        find<T extends object>(
-            this: LoDashImplicitWrapper<T | null | undefined>,
-            predicate?: ObjectIterateeCustom<T, boolean>,
-            fromIndex?: number
-        ): T[keyof T]|undefined;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.find
-         */
-        find<T, S extends T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            predicate: ListIteratorTypeGuard<T, S>,
-            fromIndex?: number
-        ): LoDashExplicitWrapper<S|undefined>;
-
-        /**
-         * @see _.find
-         */
-        find<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            predicate?: ListIterateeCustom<T, boolean>,
-            fromIndex?: number
-        ): LoDashExplicitWrapper<T|undefined>;
-
-        /**
-         * @see _.find
-         */
-        find<T extends object, S extends T[keyof T]>(
-            this: LoDashExplicitWrapper<T | null | undefined>,
-            predicate: ObjectIteratorTypeGuard<T, S>,
-            fromIndex?: number
-        ): LoDashExplicitWrapper<S|undefined>;
-
-        /**
-         * @see _.find
-         */
-        find<T extends object>(
-            this: LoDashExplicitWrapper<T | null | undefined>,
-            predicate?: ObjectIterateeCustom<T, boolean>,
-            fromIndex?: number
-        ): LoDashExplicitWrapper<T[keyof T]|undefined>;
-    }
-
-    // findLast
-
-    interface LoDashStatic {
-        /**
-         * This method is like _.find except that it iterates over elements of a collection from
-         * right to left.
-         * @param collection Searches for a value in this list.
-         * @param predicate The function called per iteration.
-         * @param fromIndex The index to search from.
-         * @return The found element, else undefined.
-         */
-        findLast<T, S extends T>(
-            collection: List<T> | null | undefined,
-            predicate: ListIteratorTypeGuard<T, S>,
-            fromIndex?: number
-        ): S|undefined;
-
-        /**
-         * @see _.findLast
-         */
-        findLast<T>(
-            collection: List<T> | null | undefined,
-            predicate?: ListIterateeCustom<T, boolean>,
-            fromIndex?: number
-        ): T|undefined;
-
-        /**
-         * @see _.findLast
-         */
-        findLast<T extends object, S extends T[keyof T]>(
-            collection: T | null | undefined,
-            predicate: ObjectIteratorTypeGuard<T, S>,
-            fromIndex?: number
-        ): S|undefined;
-
-        /**
-         * @see _.findLast
-         */
-        findLast<T extends object>(
-            collection: T | null | undefined,
-            predicate?: ObjectIterateeCustom<T, boolean>,
-            fromIndex?: number
-        ): T[keyof T]|undefined;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.findLast
-         */
-        findLast<T, S extends T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            predicate: ListIteratorTypeGuard<T, S>,
-            fromIndex?: number
-        ): S | undefined;
-
-        /**
-         * @see _.findLast
-         */
-        findLast<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            predicate?: ListIterateeCustom<T, boolean>,
-            fromIndex?: number
-        ): T | undefined;
-
-        /**
-         * @see _.findLast
-         */
-        findLast<T extends object, S extends T[keyof T]>(
-            this: LoDashImplicitWrapper<T | null | undefined>,
-            predicate: ObjectIteratorTypeGuard<T, S>,
-            fromIndex?: number
-        ): S|undefined;
-
-        /**
-         * @see _.findLast
-         */
-        findLast<T extends object>(
-            this: LoDashImplicitWrapper<T | null | undefined>,
-            predicate?: ObjectIterateeCustom<T, boolean>,
-            fromIndex?: number
-        ): T[keyof T]|undefined;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.findLast
-         */
-        findLast<T, S extends T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            predicate: ListIteratorTypeGuard<T, S>,
-            fromIndex?: number
-        ): LoDashExplicitWrapper<S | undefined>;
-
-        /**
-         * @see _.findLast
-         */
-        findLast<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            predicate?: ListIterateeCustom<T, boolean>,
-            fromIndex?: number
-        ): LoDashExplicitWrapper<T | undefined>;
-
-        /**
-         * @see _.findLast
-         */
-        findLast<T extends object, S extends T[keyof T]>(
-            this: LoDashExplicitWrapper<T | null | undefined>,
-            predicate: ObjectIteratorTypeGuard<T, S>,
-            fromIndex?: number
-        ): LoDashExplicitWrapper<S|undefined>;
-
-        /**
-         * @see _.findLast
-         */
-        findLast<T extends object>(
-            this: LoDashExplicitWrapper<T | null | undefined>,
-            predicate?: ObjectIterateeCustom<T, boolean>,
-            fromIndex?: number
-        ): LoDashExplicitWrapper<T[keyof T]|undefined>;
-    }
-
-    // flatMap
-
-    interface LoDashStatic {
-        /**
-         * Creates an array of flattened values by running each element in collection through iteratee
-         * and concating its result to the other mapped values. The iteratee is invoked with three arguments:
-         * (value, index|key, collection).
-         *
-         * @param collection The collection to iterate over.
-         * @param iteratee The function invoked per iteration.
-         * @return Returns the new flattened array.
-         */
-        flatMap<T>(
-            collection: List<Many<T>> | Dictionary<Many<T>> | NumericDictionary<Many<T>> | null | undefined
-        ): T[];
-
-        /**
-         * @see _.flatMap
-         */
-        flatMap(
-            collection: object | null | undefined
-        ): any[];
-
-        /**
-         * @see _.flatMap
-         */
-        flatMap<T, TResult>(
-            collection: List<T> | null | undefined,
-            iteratee: ListIterator<T, Many<TResult>>
-        ): TResult[];
-
-        /**
-         * @see _.flatMap
-         */
-        flatMap<T extends object, TResult>(
-            collection: T | null | undefined,
-            iteratee: ObjectIterator<T, Many<TResult>>
-        ): TResult[];
-
-        /**
-         * @see _.flatMap
-         */
-        flatMap(
-            collection: object | null | undefined,
-            iteratee: string
-        ): any[];
-
-        /**
-         * @see _.flatMap
-         */
-        flatMap(
-            collection: object | null | undefined,
-            iteratee: object
-        ): boolean[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.flatMap
-         */
-        flatMap<T>(this: LoDashImplicitWrapper<List<Many<T>> | Dictionary<Many<T>> | NumericDictionary<Many<T>> | null | undefined>): LoDashImplicitWrapper<T[]>;
-
-        /**
-         * @see _.flatMap
-         */
-        flatMap(): LoDashImplicitWrapper<any[]>;
-
-        /**
-         * @see _.flatMap
-         */
-        flatMap<T, TResult>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            iteratee: ListIterator<T, Many<TResult>>
-        ): LoDashImplicitWrapper<TResult[]>;
-
-        /**
-         * @see _.flatMap
-         */
-        flatMap<T extends object, TResult>(
-            this: LoDashImplicitWrapper<T | null | undefined>,
-            iteratee: ObjectIterator<T, Many<TResult>>
-        ): LoDashImplicitWrapper<TResult[]>;
-
-        /**
-         * @see _.flatMap
-         */
-        flatMap(
-            iteratee: string
-        ): LoDashImplicitWrapper<any[]>;
-
-        /**
-         * @see _.flatMap
-         */
-        flatMap(
-            iteratee: object
-        ): LoDashImplicitWrapper<boolean[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.flatMap
-         */
-        flatMap<T>(this: LoDashExplicitWrapper<List<Many<T>> | Dictionary<Many<T>> | NumericDictionary<Many<T>> | null | undefined>): LoDashExplicitWrapper<T[]>;
-
-        /**
-         * @see _.flatMap
-         */
-        flatMap(): LoDashExplicitWrapper<any[]>;
-
-        /**
-         * @see _.flatMap
-         */
-        flatMap<T, TResult>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            iteratee: ListIterator<T, Many<TResult>>
-        ): LoDashExplicitWrapper<TResult[]>;
-
-        /**
-         * @see _.flatMap
-         */
-        flatMap<T extends object, TResult>(
-            this: LoDashExplicitWrapper<T | null | undefined>,
-            iteratee: ObjectIterator<T, Many<TResult>>
-        ): LoDashExplicitWrapper<TResult[]>;
-
-        /**
-         * @see _.flatMap
-         */
-        flatMap(
-            iteratee: string
-        ): LoDashExplicitWrapper<any[]>;
-
-        /**
-         * @see _.flatMap
-         */
-        flatMap(
-            iteratee: object
-        ): LoDashExplicitWrapper<boolean[]>;
-    }
-
-    // flatMapDeep
-
-    interface LoDashStatic {
-        /**
-         * This method is like `_.flatMap` except that it recursively flattens the
-         * mapped results.
-         *
-         * @since 4.7.0
-         * @category Collection
-         * @param collection The collection to iterate over.
-         * @param [iteratee=_.identity] The function invoked per iteration.
-         * @returns Returns the new flattened array.
-         * @example
-         *
-         * function duplicate(n) {
-         *   return [[[n, n]]];
-         * }
-         *
-         * _.flatMapDeep([1, 2], duplicate);
-         * // => [1, 1, 2, 2]
-         */
-        flatMapDeep<T>(
-            collection: List<ListOfRecursiveArraysOrValues<T> | T> | Dictionary<ListOfRecursiveArraysOrValues<T> | T> | NumericDictionary<ListOfRecursiveArraysOrValues<T> | T> | null | undefined
-        ): T[];
-
-        /**
-         * @see _.flatMapDeep
-         */
-        flatMapDeep<T, TResult>(
-            collection: List<T> | null | undefined,
-            iteratee: ListIterator<T, ListOfRecursiveArraysOrValues<TResult> | TResult>
-        ): TResult[];
-
-        /**
-         * @see _.flatMapDeep
-         */
-        flatMapDeep<T extends object, TResult>(
-            collection: T | null | undefined,
-            iteratee: ObjectIterator<T, ListOfRecursiveArraysOrValues<TResult> | TResult>
-        ): TResult[];
-
-        /**
-         * @see _.flatMapDeep
-         */
-        flatMapDeep(
-            collection: object | null | undefined,
-            iteratee: string
-        ): any[];
-
-        /**
-         * @see _.flatMapDeep
-         */
-        flatMapDeep(
-            collection: object | null | undefined,
-            iteratee: object
-        ): boolean[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.flatMapDeep
-         */
-        flatMapDeep<T>(
-            this: LoDashImplicitWrapper<List<ListOfRecursiveArraysOrValues<T> | T> | Dictionary<ListOfRecursiveArraysOrValues<T> | T> | NumericDictionary<ListOfRecursiveArraysOrValues<T> | T> | null | undefined>
-        ): LoDashImplicitWrapper<T[]>;
-
-        /**
-         * @see _.flatMapDeep
-         */
-        flatMapDeep<T, TResult>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            iteratee: ListIterator<T, ListOfRecursiveArraysOrValues<TResult> | TResult>
-        ): LoDashImplicitWrapper<TResult[]>;
-
-        /**
-         * @see _.flatMapDeep
-         */
-        flatMapDeep<T extends object, TResult>(
-            this: LoDashImplicitWrapper<T | null | undefined>,
-            iteratee: ObjectIterator<T, ListOfRecursiveArraysOrValues<TResult> | TResult>
-        ): LoDashImplicitWrapper<TResult[]>;
-
-        /**
-         * @see _.flatMapDeep
-         */
-        flatMapDeep(
-            this: LoDashImplicitWrapper<object | null | undefined>,
-            iteratee: string
-        ): LoDashImplicitWrapper<any[]>;
-
-        /**
-         * @see _.flatMapDeep
-         */
-        flatMapDeep(
-            this: LoDashImplicitWrapper<object | null | undefined>,
-            iteratee: object
-        ): LoDashImplicitWrapper<boolean[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.flatMapDeep
-         */
-        flatMapDeep<T>(
-            this: LoDashExplicitWrapper<List<ListOfRecursiveArraysOrValues<T> | T> | Dictionary<ListOfRecursiveArraysOrValues<T> | T> | NumericDictionary<ListOfRecursiveArraysOrValues<T> | T> | null | undefined>
-        ): LoDashExplicitWrapper<T[]>;
-
-        /**
-         * @see _.flatMapDeep
-         */
-        flatMapDeep<T, TResult>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            iteratee: ListIterator<T, ListOfRecursiveArraysOrValues<TResult> | TResult>
-        ): LoDashExplicitWrapper<TResult[]>;
-
-        /**
-         * @see _.flatMapDeep
-         */
-        flatMapDeep<T extends object, TResult>(
-            this: LoDashExplicitWrapper<T | null | undefined>,
-            iteratee: ObjectIterator<T, ListOfRecursiveArraysOrValues<TResult> | TResult>
-        ): LoDashExplicitWrapper<TResult[]>;
-
-        /**
-         * @see _.flatMapDeep
-         */
-        flatMapDeep(
-            this: LoDashExplicitWrapper<object | null | undefined>,
-            iteratee: string
-        ): LoDashExplicitWrapper<any[]>;
-
-        /**
-         * @see _.flatMapDeep
-         */
-        flatMapDeep(
-            this: LoDashExplicitWrapper<object | null | undefined>,
-            iteratee: object
-        ): LoDashExplicitWrapper<boolean[]>;
-    }
-
-    // flatMapDepth
-
-    interface LoDashStatic {
-        /**
-         * This method is like `_.flatMap` except that it recursively flattens the
-         * mapped results up to `depth` times.
-         *
-         * @since 4.7.0
-         * @category Collection
-         * @param collection The collection to iterate over.
-         * @param [iteratee=_.identity] The function invoked per iteration.
-         * @param [depth=1] The maximum recursion depth.
-         * @returns Returns the new flattened array.
-         * @example
-         *
-         * function duplicate(n) {
-         *   return [[[n, n]]];
-         * }
-         *
-         * _.flatMapDepth([1, 2], duplicate, 2);
-         * // => [[1, 1], [2, 2]]
-         */
-        flatMapDepth<T>(
-            collection: List<ListOfRecursiveArraysOrValues<T> | T> | Dictionary<ListOfRecursiveArraysOrValues<T> | T> | NumericDictionary<ListOfRecursiveArraysOrValues<T> | T> | null | undefined
-        ): T[];
-
-        /**
-         * @see _.flatMapDepth
-         */
-        flatMapDepth<T, TResult>(
-            collection: List<T> | null | undefined,
-            iteratee: ListIterator<T, ListOfRecursiveArraysOrValues<TResult> | TResult>,
-            depth?: number
-        ): TResult[];
-
-        /**
-         * @see _.flatMapDepth
-         */
-        flatMapDepth<T extends object, TResult>(
-            collection: T | null | undefined,
-            iteratee: ObjectIterator<T, ListOfRecursiveArraysOrValues<TResult> | TResult>,
-            depth?: number
-        ): TResult[];
-
-        /**
-         * @see _.flatMapDepth
-         */
-        flatMapDepth(
-            collection: object | null | undefined,
-            iteratee: string,
-            depth?: number
-        ): any[];
-
-        /**
-         * @see _.flatMapDepth
-         */
-        flatMapDepth(
-            collection: object | null | undefined,
-            iteratee: object,
-            depth?: number
-        ): boolean[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.flatMapDepth
-         */
-        flatMapDepth<T>(
-            this: LoDashImplicitWrapper<List<ListOfRecursiveArraysOrValues<T> | T> | Dictionary<ListOfRecursiveArraysOrValues<T> | T> | NumericDictionary<ListOfRecursiveArraysOrValues<T> | T> | null | undefined>
-        ): LoDashImplicitWrapper<T[]>;
-
-        /**
-         * @see _.flatMapDepth
-         */
-        flatMapDepth<T, TResult>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            iteratee: ListIterator<T, ListOfRecursiveArraysOrValues<TResult> | TResult>,
-            depth?: number
-        ): LoDashImplicitWrapper<TResult[]>;
-
-        /**
-         * @see _.flatMapDepth
-         */
-        flatMapDepth<T extends object, TResult>(
-            this: LoDashImplicitWrapper<T | null | undefined>,
-            iteratee: ObjectIterator<T, ListOfRecursiveArraysOrValues<TResult> | TResult>,
-            depth?: number
-        ): LoDashImplicitWrapper<TResult[]>;
-
-        /**
-         * @see _.flatMapDepth
-         */
-        flatMapDepth(
-            this: LoDashImplicitWrapper<object | null | undefined>,
-            iteratee: string,
-            depth?: number
-        ): LoDashImplicitWrapper<any[]>;
-
-        /**
-         * @see _.flatMapDepth
-         */
-        flatMapDepth(
-            this: LoDashImplicitWrapper<object | null | undefined>,
-            iteratee: object,
-            depth?: number
-        ): LoDashImplicitWrapper<boolean[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.flatMapDepth
-         */
-        flatMapDepth<T>(
-            this: LoDashExplicitWrapper<List<ListOfRecursiveArraysOrValues<T> | T> | Dictionary<ListOfRecursiveArraysOrValues<T> | T> | NumericDictionary<ListOfRecursiveArraysOrValues<T> | T> | null | undefined>
-        ): LoDashExplicitWrapper<T[]>;
-
-        /**
-         * @see _.flatMapDepth
-         */
-        flatMapDepth<T, TResult>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            iteratee: ListIterator<T, ListOfRecursiveArraysOrValues<TResult> | TResult>,
-            depth?: number
-        ): LoDashExplicitWrapper<TResult[]>;
-
-        /**
-         * @see _.flatMapDepth
-         */
-        flatMapDepth<T extends object, TResult>(
-            this: LoDashExplicitWrapper<T | null | undefined>,
-            iteratee: ObjectIterator<T, ListOfRecursiveArraysOrValues<TResult> | TResult>,
-            depth?: number
-        ): LoDashExplicitWrapper<TResult[]>;
-
-        /**
-         * @see _.flatMapDepth
-         */
-        flatMapDepth(
-            this: LoDashExplicitWrapper<object | null | undefined>,
-            iteratee: string,
-            depth?: number
-        ): LoDashExplicitWrapper<any[]>;
-
-        /**
-         * @see _.flatMapDepth
-         */
-        flatMapDepth(
-            this: LoDashExplicitWrapper<object | null | undefined>,
-            iteratee: object,
-            depth?: number
-        ): LoDashExplicitWrapper<boolean[]>;
-    }
-
-    // forEach
-
-    interface LoDashStatic {
-        /**
-         * Iterates over elements of collection invoking iteratee for each element. The iteratee is invoked with three arguments:
-         * (value, index|key, collection). Iteratee functions may exit iteration early by explicitly returning false.
-         *
-         * Note: As with other "Collections" methods, objects with a "length" property are iterated like arrays. To
-         * avoid this behavior _.forIn or _.forOwn may be used for object iteration.
-         *
-         * @alias _.each
-         *
-         * @param collection The collection to iterate over.
-         * @param iteratee The function invoked per iteration.
-         */
-        forEach<T>(
-            collection: T[],
-            iteratee?: ArrayIterator<T, any>
-        ): T[];
-
-        /**
-         * @see _.forEach
-         */
-        forEach(
-            collection: string,
-            iteratee?: StringIterator<any>
-        ): string;
-
-        /**
-         * @see _.forEach
-         */
-        forEach<T>(
-            collection: List<T>,
-            iteratee?: ListIterator<T, any>
-        ): List<T>;
-
-        /**
-         * @see _.forEach
-         */
-        forEach<T extends object>(
-            collection: T,
-            iteratee?: ObjectIterator<T, any>
-        ): T;
-
-        /**
-         * @see _.forEach
-         */
-        forEach<T, TArray extends T[] | null | undefined>(
-            collection: TArray & (T[] | null | undefined),
-            iteratee?: ArrayIterator<T, any>
-        ): TArray;
-
-        /**
-         * @see _.forEach
-         */
-        forEach<TString extends string | null | undefined>(
-            collection: TString,
-            iteratee?: StringIterator<any>
-        ): TString;
-
-        /**
-         * @see _.forEach
-         */
-        forEach<T, TList extends List<T> | null | undefined>(
-            collection: TList & (List<T> | null | undefined),
-            iteratee?: ListIterator<T, any>
-        ): TList;
-
-        /**
-         * @see _.forEach
-         */
-        forEach<T extends object>(
-            collection: T | null | undefined,
-            iteratee?: ObjectIterator<T, any>
-        ): T | null | undefined;
-    }
-
-    interface LoDashWrapper<TValue> {
-        /**
-         * @see _.forEach
-         */
-        forEach<T>(
-            this: LoDashWrapper<T[] | null | undefined>,
-            iteratee?: ArrayIterator<T, any>
-        ): this;
-
-        /**
-         * @see _.forEach
-         */
-        forEach(
-            this: LoDashWrapper<string | null | undefined>,
-            iteratee?: StringIterator<any>
-        ): this;
-
-        /**
-         * @see _.forEach
-         */
-        forEach<T>(
-            this: LoDashWrapper<List<T> | null | undefined>,
-            iteratee?: ListIterator<T, any>
-        ): this;
-
-        /**
-         * @see _.forEach
-         */
-        forEach<T extends object>(
-            this: LoDashWrapper<T | null | undefined>,
-            iteratee?: ObjectIterator<T, any>
-        ): this;
-    }
-
-    // forEachRight
-
-    interface LoDashStatic {
-        /**
-         * This method is like _.forEach except that it iterates over elements of collection from right to left.
-         *
-         * @alias _.eachRight
-         *
-         * @param collection The collection to iterate over.
-         * @param iteratee The function called per iteration.
-         */
-        forEachRight<T>(
-            collection: T[],
-            iteratee?: ArrayIterator<T, any>
-        ): T[];
-
-        /**
-         * @see _.forEachRight
-         */
-        forEachRight(
-            collection: string,
-            iteratee?: StringIterator<any>
-        ): string;
-
-        /**
-         * @see _.forEachRight
-         */
-        forEachRight<T>(
-            collection: List<T>,
-            iteratee?: ListIterator<T, any>
-        ): List<T>;
-
-        /**
-         * @see _.forEachRight
-         */
-        forEachRight<T extends object>(
-            collection: T,
-            iteratee?: ObjectIterator<T, any>
-        ): T;
-
-        /**
-         * @see _.forEachRight
-         */
-        forEachRight<T, TArray extends T[] | null | undefined>(
-            collection: TArray & (T[] | null | undefined),
-            iteratee?: ArrayIterator<T, any>
-        ): TArray;
-
-        /**
-         * @see _.forEachRight
-         */
-        forEachRight<TString extends string | null | undefined>(
-            collection: TString,
-            iteratee?: StringIterator<any>
-        ): TString;
-
-        /**
-         * @see _.forEachRight
-         */
-        forEachRight<T, TList extends List<T> | null | undefined>(
-            collection: TList & (List<T> | null | undefined),
-            iteratee?: ListIterator<T, any>
-        ): TList;
-
-        /**
-         * @see _.forEachRight
-         */
-        forEachRight<T extends object>(
-            collection: T | null | undefined,
-            iteratee?: ObjectIterator<T, any>
-        ): T | null | undefined;
-    }
-
-    interface LoDashWrapper<TValue> {
-        /**
-         * @see _.forEachRight
-         */
-        forEachRight<T>(
-            this: LoDashWrapper<T[] | null | undefined>,
-            iteratee?: ArrayIterator<T, any>
-        ): this;
-
-        /**
-         * @see _.forEachRight
-         */
-        forEachRight(
-            this: LoDashWrapper<string | null | undefined>,
-            iteratee?: StringIterator<any>
-        ): this;
-
-        /**
-         * @see _.forEachRight
-         */
-        forEachRight<T>(
-            this: LoDashWrapper<List<T> | null | undefined>,
-            iteratee?: ListIterator<T, any>
-        ): this;
-
-        /**
-         * @see _.forEachRight
-         */
-        forEachRight<T extends object>(
-            this: LoDashWrapper<T | null | undefined>,
-            iteratee?: ObjectIterator<T, any>
-        ): this;
-    }
-
-    // groupBy
-
-    interface LoDashStatic {
-        /**
-         * Creates an object composed of keys generated from the results of running each element of collection through
-         * iteratee. The corresponding value of each key is an array of the elements responsible for generating the
-         * key. The iteratee is invoked with one argument: (value).
-         *
-         * @param collection The collection to iterate over.
-         * @param iteratee The function invoked per iteration.
-         * @return Returns the composed aggregate object.
-         */
-        groupBy<T>(
-            collection: List<T> | null | undefined,
-            iteratee?: ValueIteratee<T>
-        ): Dictionary<T[]>;
-
-        /**
-         * @see _.groupBy
-         */
-        groupBy<T extends object>(
-            collection: T | null | undefined,
-            iteratee?: ValueIteratee<T[keyof T]>
-        ): Dictionary<Array<T[keyof T]>>;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.groupBy
-         */
-        groupBy<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            iteratee?: ValueIteratee<T>
-        ): LoDashImplicitWrapper<Dictionary<T[]>>;
-
-        /**
-         * @see _.groupBy
-         */
-        groupBy<T extends object>(
-            this: LoDashImplicitWrapper<T | null | undefined>,
-            iteratee?: ValueIteratee<T[keyof T]>
-        ): LoDashImplicitWrapper<Dictionary<Array<T[keyof T]>>>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.groupBy
-         */
-        groupBy<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            iteratee?: ValueIteratee<T>
-        ): LoDashExplicitWrapper<Dictionary<T[]>>;
-
-        /**
-         * @see _.groupBy
-         */
-        groupBy<T extends object>(
-            this: LoDashExplicitWrapper<T | null | undefined>,
-            iteratee?: ValueIteratee<T[keyof T]>
-        ): LoDashExplicitWrapper<Dictionary<Array<T[keyof T]>>>;
-    }
-
-    // includes
-
-    interface LoDashStatic {
-        /**
-         * Checks if target is in collection using SameValueZero for equality comparisons. If fromIndex is negative,
-         * it’s used as the offset from the end of collection.
-         *
-         * @param collection The collection to search.
-         * @param target The value to search for.
-         * @param fromIndex The index to search from.
-         * @return True if the target element is found, else false.
-         */
-        includes<T>(
-            collection: List<T> | Dictionary<T> | NumericDictionary<T> | null | undefined,
-            target: T,
-            fromIndex?: number
-        ): boolean;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.includes
-         */
-        includes<T>(
-            this: LoDashImplicitWrapper<List<T> | Dictionary<T> | NumericDictionary<T> | null | undefined>,
-            target: T,
-            fromIndex?: number
-        ): boolean;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.includes
-         */
-        includes<T>(
-            this: LoDashExplicitWrapper<List<T> | Dictionary<T> | NumericDictionary<T> | null | undefined>,
-            target: T,
-            fromIndex?: number
-        ): LoDashExplicitWrapper<boolean>;
-    }
-
-    // invokeMap
-
-    interface LoDashStatic {
-        /**
-        * Invokes the method named by methodName on each element in the collection returning
-        * an array of the results of each invoked method. Additional arguments will be provided
-        * to each invoked method. If methodName is a function it will be invoked for, and this
-        * bound to, each element in the collection.
-        * @param collection The collection to iterate over.
-        * @param methodName The name of the method to invoke.
-        * @param args Arguments to invoke the method with.
-        **/
-        invokeMap(
-            collection: object | null | undefined,
-            methodName: string,
-            ...args: any[]): any[];
-
-        /**
-        * @see _.invokeMap
-        **/
-        invokeMap<TResult>(
-            collection: object | null | undefined,
-            method: (...args: any[]) => TResult,
-            ...args: any[]): TResult[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-        * @see _.invokeMap
-        **/
-        invokeMap(
-            methodName: string,
-            ...args: any[]): LoDashImplicitWrapper<any[]>;
-
-        /**
-        * @see _.invokeMap
-        **/
-        invokeMap<TResult>(
-            method: (...args: any[]) => TResult,
-            ...args: any[]): LoDashImplicitWrapper<TResult[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-        * @see _.invokeMap
-        **/
-        invokeMap(
-            methodName: string,
-            ...args: any[]): LoDashExplicitWrapper<any[]>;
-
-        /**
-        * @see _.invokeMap
-        **/
-        invokeMap<TResult>(
-            method: (...args: any[]) => TResult,
-            ...args: any[]): LoDashExplicitWrapper<TResult[]>;
-    }
-
-    // keyBy
-
-    interface LoDashStatic {
-        /**
-         * Creates an object composed of keys generated from the results of running each element of collection through
-         * iteratee. The corresponding value of each key is the last element responsible for generating the key. The
-         * iteratee function is invoked with one argument: (value).
-         *
-         * @param collection The collection to iterate over.
-         * @param iteratee The function invoked per iteration.
-         * @return Returns the composed aggregate object.
-         */
-        keyBy<T>(
-            collection: List<T> | null | undefined,
-            iteratee?: ValueIterateeCustom<T, PropertyName>
-        ): Dictionary<T>;
-
-        /**
-         * @see _.keyBy
-         */
-        keyBy<T extends object>(
-            collection: T | null | undefined,
-            iteratee?: ValueIterateeCustom<T[keyof T], PropertyName>
-        ): Dictionary<T[keyof T]>;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.keyBy
-         */
-        keyBy<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            iteratee?: ValueIterateeCustom<T, PropertyName>
-        ): LoDashImplicitWrapper<Dictionary<T>>;
-
-        /**
-         * @see _.keyBy
-         */
-        keyBy<T extends object>(
-            this: LoDashImplicitWrapper<T | null | undefined>,
-            iteratee?: ValueIterateeCustom<T[keyof T], PropertyName>
-        ): LoDashImplicitWrapper<Dictionary<T[keyof T]>>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.keyBy
-         */
-        keyBy<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            iteratee?: ValueIterateeCustom<T, PropertyName>
-        ): LoDashExplicitWrapper<Dictionary<T>>;
-
-        /**
-         * @see _.keyBy
-         */
-        keyBy<T extends object>(
-            this: LoDashExplicitWrapper<T | null | undefined>,
-            iteratee?: ValueIterateeCustom<T[keyof T], PropertyName>
-        ): LoDashExplicitWrapper<Dictionary<T[keyof T]>>;
-    }
-
-    // map
-
-    interface LoDashStatic {
-        /**
-         * Creates an array of values by running each element in collection through iteratee. The iteratee is
-         * invoked with three arguments: (value, index|key, collection).
-         *
-         * Many lodash methods are guarded to work as iteratees for methods like _.every, _.filter, _.map, _.mapValues,
-         * _.reject, and _.some.
-         *
-         * The guarded methods are:
-         * ary, callback, chunk, clone, create, curry, curryRight, drop, dropRight, every, fill, flatten, invert, max,
-         * min, parseInt, slice, sortBy, take, takeRight, template, trim, trimLeft, trimRight, trunc, random, range,
-         * sample, some, sum, uniq, and words
-         *
-         * @param collection The collection to iterate over.
-         * @param iteratee The function invoked per iteration.
-         * @return Returns the new mapped array.
-         */
-        map<T, TResult>(
-            collection: T[] | null | undefined,
-            iteratee: ArrayIterator<T, TResult>
-        ): TResult[];
-
-        /**
-         * @see _.map
-         */
-        map<T, TResult>(
-            collection: List<T> | null | undefined,
-            iteratee: ListIterator<T, TResult>
-        ): TResult[];
-
-        /**
-         * @see _.map
-         */
-        map<T>(collection: List<T> | Dictionary<T> | NumericDictionary<T> | null | undefined): T[];
-
-        /**
-         * @see _.map
-         */
-        map<T extends object, TResult>(
-            collection: T | null | undefined,
-            iteratee: ObjectIterator<T, TResult>
-        ): TResult[];
-
-        /** @see _.map */
-        map<T, K extends keyof T>(
-            collection: List<T> | Dictionary<T> | NumericDictionary<T> | null | undefined,
-            iteratee: K
-        ): Array<T[K]>;
-
-        /**
-         * @see _.map
-         */
-        map<T>(
-            collection: List<T> | Dictionary<T> | NumericDictionary<T> | null | undefined,
-            iteratee?: string
-        ): any[];
-
-        /**
-         * @see _.map
-         */
-        map<T>(
-            collection: List<T> | Dictionary<T> | NumericDictionary<T> | null | undefined,
-            iteratee?: object
-        ): boolean[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.map
-         */
-        map<T, TResult>(
-            this: LoDashImplicitWrapper<T[] | null | undefined>,
-            iteratee: ArrayIterator<T, TResult>
-        ): LoDashImplicitWrapper<TResult[]>;
-
-        /**
-         * @see _.map
-         */
-        map<T, TResult>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            iteratee: ListIterator<T, TResult>
-        ): LoDashImplicitWrapper<TResult[]>;
-
-        /**
-         * @see _.map
-         */
-        map<T>(this: LoDashImplicitWrapper<List<T> | Dictionary<T> | NumericDictionary<T> | null | undefined>): LoDashImplicitWrapper<T[]>;
-
-        /**
-         * @see _.map
-         */
-        map<T extends object, TResult>(
-            this: LoDashImplicitWrapper<T | null | undefined>,
-            iteratee: ObjectIterator<T, TResult>
-        ): LoDashImplicitWrapper<TResult[]>;
-
-        /** @see _.map */
-        map<T, K extends keyof T>(
-            this: LoDashImplicitWrapper<List<T> | Dictionary<T> | NumericDictionary<T> | null | undefined>,
-            iteratee: K
-        ): LoDashImplicitWrapper<Array<T[K]>>;
-
-        /**
-         * @see _.map
-         */
-        map<T>(
-            this: LoDashImplicitWrapper<List<T> | Dictionary<T> | NumericDictionary<T> | null | undefined>,
-            iteratee?: string
-        ): LoDashImplicitWrapper<any[]>;
-
-        /**
-         * @see _.map
-         */
-        map<T>(
-            this: LoDashImplicitWrapper<List<T> | Dictionary<T> | NumericDictionary<T> | null | undefined>,
-            iteratee?: object
-        ): LoDashImplicitWrapper<boolean[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.map
-         */
-        map<T, TResult>(
-            this: LoDashExplicitWrapper<T[] | null | undefined>,
-            iteratee: ArrayIterator<T, TResult>
-        ): LoDashExplicitWrapper<TResult[]>;
-
-        /**
-         * @see _.map
-         */
-        map<T, TResult>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            iteratee: ListIterator<T, TResult>
-        ): LoDashExplicitWrapper<TResult[]>;
-
-        /**
-         * @see _.map
-         */
-        map<T>(this: LoDashExplicitWrapper<List<T> | Dictionary<T> | NumericDictionary<T> | null | undefined>): LoDashExplicitWrapper<T[]>;
-
-        /**
-         * @see _.map
-         */
-        map<T extends object, TResult>(
-            this: LoDashExplicitWrapper<T | null | undefined>,
-            iteratee: ObjectIterator<T, TResult>
-        ): LoDashExplicitWrapper<TResult[]>;
-
-        /** @see _.map */
-        map<T, K extends keyof T>(
-            this: LoDashExplicitWrapper<List<T> | Dictionary<T> | NumericDictionary<T> | null | undefined>,
-            iteratee: K
-        ): LoDashExplicitWrapper<Array<T[K]>>;
-
-        /**
-         * @see _.map
-         */
-        map<T>(
-            this: LoDashExplicitWrapper<List<T> | Dictionary<T> | NumericDictionary<T> | null | undefined>,
-            iteratee?: string
-        ): LoDashExplicitWrapper<any[]>;
-
-        /**
-         * @see _.map
-         */
-        map<T>(
-            this: LoDashExplicitWrapper<List<T> | Dictionary<T> | NumericDictionary<T> | null | undefined>,
-            iteratee?: object
-        ): LoDashExplicitWrapper<boolean[]>;
-    }
-
-    // orderBy
-
-    interface LoDashStatic {
-        /**
-         * This method is like `_.sortBy` except that it allows specifying the sort
-         * orders of the iteratees to sort by. If `orders` is unspecified, all values
-         * are sorted in ascending order. Otherwise, specify an order of "desc" for
-         * descending or "asc" for ascending sort order of corresponding values.
-         *
-         * @category Collection
-         * @param collection The collection to iterate over.
-         * @param [iteratees=[_.identity]] The iteratees to sort by.
-         * @param [orders] The sort orders of `iteratees`.
-         * @param- {Object} [guard] Enables use as an iteratee for functions like `_.reduce`.
-         * @returns Returns the new sorted array.
-         * @example
-         *
-         * var users = [
-         *   { 'user': 'fred',   'age': 48 },
-         *   { 'user': 'barney', 'age': 34 },
-         *   { 'user': 'fred',   'age': 42 },
-         *   { 'user': 'barney', 'age': 36 }
-         * ];
-         *
-         * // sort by `user` in ascending order and by `age` in descending order
-         * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);
-         * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]]
-         */
-        orderBy<T>(
-            collection: List<T> | null | undefined,
-            iteratees?: Many<ListIterator<T, NotVoid>>,
-            orders?: Many<boolean|string>
-        ): T[];
-
-        /**
-         * @see _.orderBy
-         */
-        orderBy<T>(
-            collection: List<T> | null | undefined,
-            iteratees?: Many<ListIteratee<T>>,
-            orders?: Many<boolean|string>
-        ): T[];
-
-        /**
-         * @see _.orderBy
-         */
-        orderBy<T extends object>(
-            collection: T | null | undefined,
-            iteratees?: Many<ObjectIterator<T, NotVoid>>,
-            orders?: Many<boolean|string>
-        ): Array<T[keyof T]>;
-
-        /**
-         * @see _.orderBy
-         */
-        orderBy<T extends object>(
-            collection: T | null | undefined,
-            iteratees?: Many<ObjectIteratee<T>>,
-            orders?: Many<boolean|string>
-        ): Array<T[keyof T]>;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.orderBy
-         */
-        orderBy<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            iteratees?: Many<ListIterator<T, NotVoid>>,
-            orders?: Many<boolean|string>
-        ): LoDashImplicitWrapper<T[]>;
-
-        /**
-         * @see _.orderBy
-         */
-        orderBy<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            iteratees?: Many<ListIteratee<T>>,
-            orders?: Many<boolean|string>
-        ): LoDashImplicitWrapper<T[]>;
-
-        /**
-         * @see _.orderBy
-         */
-        orderBy<T extends object>(
-            this: LoDashImplicitWrapper<T | null | undefined>,
-            iteratees?: Many<ObjectIterator<T, NotVoid>>,
-            orders?: Many<boolean|string>
-        ): LoDashImplicitWrapper<Array<T[keyof T]>>;
-
-        /**
-         * @see _.orderBy
-         */
-        orderBy<T extends object>(
-            this: LoDashImplicitWrapper<T | null | undefined>,
-            iteratees?: Many<ObjectIteratee<T>>,
-            orders?: Many<boolean|string>
-        ): LoDashImplicitWrapper<Array<T[keyof T]>>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.orderBy
-         */
-        orderBy<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            iteratees?: Many<ListIterator<T, NotVoid>>,
-            orders?: Many<boolean|string>
-        ): LoDashExplicitWrapper<T[]>;
-
-        /**
-         * @see _.orderBy
-         */
-        orderBy<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            iteratees?: Many<ListIteratee<T>>,
-            orders?: Many<boolean|string>
-        ): LoDashExplicitWrapper<T[]>;
-
-        /**
-         * @see _.orderBy
-         */
-        orderBy<T extends object>(
-            this: LoDashExplicitWrapper<T | null | undefined>,
-            iteratees?: Many<ObjectIterator<T, NotVoid>>,
-            orders?: Many<boolean|string>
-        ): LoDashExplicitWrapper<Array<T[keyof T]>>;
-
-        /**
-         * @see _.orderBy
-         */
-        orderBy<T extends object>(
-            this: LoDashExplicitWrapper<T | null | undefined>,
-            iteratees?: Many<ObjectIteratee<T>>,
-            orders?: Many<boolean|string>
-        ): LoDashExplicitWrapper<Array<T[keyof T]>>;
-    }
-
-    // partition
-
-    interface LoDashStatic {
-        /**
-        * Creates an array of elements split into two groups, the first of which contains elements predicate returns truthy for,
-        * while the second of which contains elements predicate returns falsey for.
-        * The predicate is invoked with three arguments: (value, index|key, collection).
-        *
-        * @param collection The collection to iterate over.
-        * @param callback The function called per iteration.
-        * @return Returns the array of grouped elements.
-        **/
-        partition<T>(
-            collection: List<T> | null | undefined,
-            callback: ValueIteratee<T>
-        ): [T[], T[]];
-
-        /**
-         * @see _.partition
-         */
-        partition<T extends object>(
-            collection: T | null | undefined,
-            callback: ValueIteratee<T[keyof T]>
-        ): [Array<T[keyof T]>, Array<T[keyof T]>];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.partition
-         */
-        partition<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            callback: ValueIteratee<T>
-        ): LoDashImplicitWrapper<[T[], T[]]>;
-
-        /**
-         * @see _.partition
-         */
-        partition<T>(
-            this: LoDashImplicitWrapper<T | null | undefined>,
-            callback: ValueIteratee<T[keyof T]>
-        ): LoDashImplicitWrapper<[Array<T[keyof T]>, Array<T[keyof T]>]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.partition
-         */
-        partition<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            callback: ValueIteratee<T>
-        ): LoDashExplicitWrapper<[T[], T[]]>;
-
-        /**
-         * @see _.partition
-         */
-        partition<T>(
-            this: LoDashExplicitWrapper<T | null | undefined>,
-            callback: ValueIteratee<T[keyof T]>
-        ): LoDashExplicitWrapper<[Array<T[keyof T]>, Array<T[keyof T]>]>;
-    }
-
-    // reduce
-
-    interface LoDashStatic {
-        /**
-        * Reduces a collection to a value which is the accumulated result of running each
-        * element in the collection through the callback, where each successive callback execution
-        * consumes the return value of the previous execution. If accumulator is not provided the
-        * first element of the collection will be used as the initial accumulator value. The callback
-        * is invoked with four arguments: (accumulator, value, index|key, collection).
-        * @param collection The collection to iterate over.
-        * @param callback The function called per iteration.
-        * @param accumulator Initial value of the accumulator.
-        * @return Returns the accumulated value.
-        **/
-        reduce<T, TResult>(
-            collection: T[] | null | undefined,
-            callback: MemoListIterator<T, TResult, T[]>,
-            accumulator: TResult
-        ): TResult;
-
-        /**
-        * @see _.reduce
-        **/
-        reduce<T, TResult>(
-            collection: List<T> | null | undefined,
-            callback: MemoListIterator<T, TResult, List<T>>,
-            accumulator: TResult
-        ): TResult;
-
-        /**
-        * @see _.reduce
-        **/
-        reduce<T extends object, TResult>(
-            collection: T | null | undefined,
-            callback: MemoObjectIterator<T[keyof T], TResult, T>,
-            accumulator: TResult
-        ): TResult;
-
-        /**
-        * @see _.reduce
-        **/
-        reduce<T>(
-            collection: T[] | null | undefined,
-            callback: MemoListIterator<T, T, T[]>
-        ): T | undefined;
-
-        /**
-         * @see _.reduce
-         **/
-        reduce<T>(
-            collection: List<T> | null | undefined,
-            callback: MemoListIterator<T, T, List<T>>
-        ): T | undefined;
-
-        /**
-        * @see _.reduce
-        **/
-        reduce<T extends object>(
-            collection: T | null | undefined,
-            callback: MemoObjectIterator<T[keyof T], T[keyof T], T>
-        ): T[keyof T] | undefined;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-         /**
-        * @see _.reduce
-        **/
-        reduce<T, TResult>(
-            this: LoDashImplicitWrapper<T[] | null | undefined>,
-            callback: MemoListIterator<T, TResult, T[]>,
-            accumulator: TResult
-        ): TResult;
-
-        /**
-         * @see _.reduce
-         **/
-        reduce<T, TResult>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            callback: MemoListIterator<T, TResult, List<T>>,
-            accumulator: TResult
-        ): TResult;
-
-        /**
-        * @see _.reduce
-        **/
-        reduce<T extends object, TResult>(
-            this: LoDashImplicitWrapper<T | null | undefined>,
-            callback: MemoObjectIterator<T[keyof T], TResult, T>,
-            accumulator: TResult
-        ): TResult;
-
-        /**
-        * @see _.reduce
-        **/
-        reduce<T>(
-            this: LoDashImplicitWrapper<T[] | null | undefined>,
-            callback: MemoListIterator<T, T, T[]>
-        ): T | undefined;
-
-        /**
-        * @see _.reduce
-        **/
-        reduce<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            callback: MemoListIterator<T, T, List<T>>
-        ): T | undefined;
-
-        /**
-        * @see _.reduce
-        **/
-        reduce<T extends object>(
-            this: LoDashImplicitWrapper<T | null | undefined>,
-            callback: MemoObjectIterator<T[keyof T], T[keyof T], T>
-        ): T[keyof T] | undefined;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-        * @see _.reduce
-        **/
-        reduce<T, TResult>(
-            this: LoDashExplicitWrapper<T[] | null | undefined>,
-            callback: MemoListIterator<T, TResult, T[]>,
-            accumulator: TResult
-        ): LoDashExplicitWrapper<TResult>;
-
-        /**
-        * @see _.reduce
-        **/
-        reduce<T, TResult>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            callback: MemoListIterator<T, TResult, List<T>>,
-            accumulator: TResult
-        ): LoDashExplicitWrapper<TResult>;
-
-        /**
-        * @see _.reduce
-        **/
-        reduce<T extends object, TResult>(
-            this: LoDashExplicitWrapper<T | null | undefined>,
-            callback: MemoObjectIterator<T[keyof T], TResult, T>,
-            accumulator: TResult
-        ): LoDashExplicitWrapper<TResult>;
-
-        /**
-        * @see _.reduce
-        **/
-        reduce<T>(
-            this: LoDashExplicitWrapper<T[] | null | undefined>,
-            callback: MemoListIterator<T, T, T[]>
-        ): LoDashExplicitWrapper<T | undefined>;
-
-        /**
-        * @see _.reduce
-        **/
-        reduce<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            callback: MemoListIterator<T, T, List<T>>
-        ): LoDashExplicitWrapper<T | undefined>;
-
-        /**
-        * @see _.reduce
-        **/
-        reduce<T extends object>(
-            this: LoDashExplicitWrapper<T | null | undefined>,
-            callback: MemoObjectIterator<T[keyof T], T[keyof T], T>
-        ): LoDashExplicitWrapper<T[keyof T] | undefined>;
-    }
-
-    // reduceRight
-
-    interface LoDashStatic {
-        /**
-        * This method is like _.reduce except that it iterates over elements of a collection from
-        * right to left.
-        * @param collection The collection to iterate over.
-        * @param callback The function called per iteration.
-        * @param accumulator Initial value of the accumulator.
-        * @return The accumulated value.
-        **/
-        reduceRight<T, TResult>(
-            collection: T[] | null | undefined,
-            callback: MemoListIterator<T, TResult, T[]>,
-            accumulator: TResult
-        ): TResult;
-
-        /**
-        * @see _.reduceRight
-        **/
-        reduceRight<T, TResult>(
-            collection: List<T> | null | undefined,
-            callback: MemoListIterator<T, TResult, List<T>>,
-            accumulator: TResult
-        ): TResult;
-
-        /**
-        * @see _.reduceRight
-        **/
-        reduceRight<T extends object, TResult>(
-            collection: T | null | undefined,
-            callback: MemoObjectIterator<T[keyof T], TResult, T>,
-            accumulator: TResult
-        ): TResult;
-
-        /**
-        * @see _.reduceRight
-        **/
-        reduceRight<T>(
-            collection: T[] | null | undefined,
-            callback: MemoListIterator<T, T, T[]>
-        ): T | undefined;
-
-        /**
-        * @see _.reduceRight
-        **/
-        reduceRight<T>(
-            collection: List<T> | null | undefined,
-            callback: MemoListIterator<T, T, List<T>>
-        ): T | undefined;
-
-        /**
-        * @see _.reduceRight
-        **/
-        reduceRight<T extends object>(
-            collection: T | null | undefined,
-            callback: MemoObjectIterator<T[keyof T], T[keyof T], T>
-        ): T[keyof T] | undefined;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-         /**
-        * @see _.reduceRight
-        **/
-        reduceRight<T, TResult>(
-            this: LoDashImplicitWrapper<T[] | null | undefined>,
-            callback: MemoListIterator<T, TResult, T[]>,
-            accumulator: TResult
-        ): TResult;
-
-        /**
-        * @see _.reduceRight
-        **/
-        reduceRight<T, TResult>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            callback: MemoListIterator<T, TResult, List<T>>,
-            accumulator: TResult
-        ): TResult;
-
-        /**
-        * @see _.reduceRight
-        **/
-        reduceRight<T extends object, TResult>(
-            this: LoDashImplicitWrapper<T | null | undefined>,
-            callback: MemoObjectIterator<T[keyof T], TResult, T>,
-            accumulator: TResult
-        ): TResult;
-
-        /**
-        * @see _.reduceRight
-        **/
-        reduceRight<T>(
-            this: LoDashImplicitWrapper<T[] | null | undefined>,
-            callback: MemoListIterator<T, T, T[]>
-        ): T | undefined;
-
-        /**
-        * @see _.reduceRight
-        **/
-        reduceRight<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            callback: MemoListIterator<T, T, List<T>>
-        ): T | undefined;
-
-        /**
-        * @see _.reduceRight
-        **/
-        reduceRight<T extends object>(
-            this: LoDashImplicitWrapper<T | null | undefined>,
-            callback: MemoObjectIterator<T[keyof T], T[keyof T], T>
-        ): T[keyof T] | undefined;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-        * @see _.reduceRight
-        **/
-        reduceRight<T, TResult>(
-            this: LoDashExplicitWrapper<T[] | null | undefined>,
-            callback: MemoListIterator<T, TResult, T[]>,
-            accumulator: TResult
-        ): LoDashExplicitWrapper<TResult>;
-
-        /**
-        * @see _.reduceRight
-        **/
-        reduceRight<T, TResult>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            callback: MemoListIterator<T, TResult, List<T>>,
-            accumulator: TResult
-        ): LoDashExplicitWrapper<TResult>;
-
-        /**
-        * @see _.reduceRight
-        **/
-        reduceRight<T extends object, TResult>(
-            this: LoDashExplicitWrapper<T | null | undefined>,
-            callback: MemoObjectIterator<T[keyof T], TResult, T>,
-            accumulator: TResult
-        ): LoDashExplicitWrapper<TResult>;
-
-        /**
-        * @see _.reduceRight
-        **/
-        reduceRight<T>(
-            this: LoDashExplicitWrapper<T[] | null | undefined>,
-            callback: MemoListIterator<T, T, T[]>
-        ): LoDashExplicitWrapper<T | undefined>;
-
-        /**
-        * @see _.reduceRight
-        **/
-        reduceRight<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            callback: MemoListIterator<T, T, List<T>>
-        ): LoDashExplicitWrapper<T | undefined>;
-
-        /**
-        * @see _.reduceRight
-        **/
-        reduceRight<T extends object>(
-            this: LoDashExplicitWrapper<T | null | undefined>,
-            callback: MemoObjectIterator<T[keyof T], T[keyof T], T>
-        ): LoDashExplicitWrapper<T[keyof T] | undefined>;
-    }
-
-    // reject
-
-    interface LoDashStatic {
-        /**
-         * The opposite of _.filter; this method returns the elements of collection that predicate does not return
-         * truthy for.
-         *
-         * @param collection The collection to iterate over.
-         * @param predicate The function invoked per iteration.
-         * @return Returns the new filtered array.
-         */
-        reject(
-            collection: string | null | undefined,
-            predicate?: StringIterator<boolean>
-        ): string[];
-
-        /**
-         * @see _.reject
-         */
-        reject<T>(
-            collection: List<T> | null | undefined,
-            predicate?: ListIterateeCustom<T, boolean>
-        ): T[];
-
-        /**
-         * @see _.reject
-         */
-        reject<T extends object>(
-            collection: T | null | undefined,
-            predicate?: ObjectIterateeCustom<T, boolean>
-        ): Array<T[keyof T]>;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.reject
-         */
-        reject(
-            this: LoDashImplicitWrapper<string | null | undefined>,
-            predicate?: StringIterator<boolean>
-        ): LoDashImplicitWrapper<string[]>;
-
-        /**
-         * @see _.reject
-         */
-        reject<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            predicate?: ListIterateeCustom<T, boolean>
-        ): LoDashImplicitWrapper<T[]>;
-
-        /**
-         * @see _.reject
-         */
-        reject<T extends object>(
-            this: LoDashImplicitWrapper<T | null | undefined>,
-            predicate?: ObjectIterateeCustom<T, boolean>
-        ): LoDashImplicitWrapper<Array<T[keyof T]>>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.reject
-         */
-        reject(
-            this: LoDashExplicitWrapper<string | null | undefined>,
-            predicate?: StringIterator<boolean>
-        ): LoDashExplicitWrapper<string[]>;
-
-        /**
-         * @see _.reject
-         */
-        reject<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            predicate?: ListIterateeCustom<T, boolean>
-        ): LoDashExplicitWrapper<T[]>;
-
-        /**
-         * @see _.reject
-         */
-        reject<T extends object>(
-            this: LoDashExplicitWrapper<T | null | undefined>,
-            predicate?: ObjectIterateeCustom<T, boolean>
-        ): LoDashExplicitWrapper<Array<T[keyof T]>>;
-    }
-
-    // sample
-
-    interface LoDashStatic {
-        /**
-         * Gets a random element from collection.
-         *
-         * @param collection The collection to sample.
-         * @return Returns the random element.
-         */
-        sample<T>(
-            collection: List<T> | Dictionary<T> | NumericDictionary<T> | null | undefined
-        ): T | undefined;
-
-        /**
-         * @see _.sample
-         */
-        sample<T extends object>(
-            collection: T | null | undefined
-        ): T[keyof T] | undefined;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.sample
-         */
-        sample<T>(
-            this: LoDashImplicitWrapper<List<T> | Dictionary<T> | NumericDictionary<T> | null | undefined>
-        ): T | undefined;
-
-        /**
-         * @see _.sample
-         */
-        sample<T extends object>(
-            this: LoDashImplicitWrapper<T | null | undefined>
-        ): T[keyof T] | undefined;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.sample
-         */
-        sample<T>(
-            this: LoDashExplicitWrapper<List<T> | Dictionary<T> | NumericDictionary<T> | null | undefined>
-        ): LoDashExplicitWrapper<T | undefined>;
-
-        /**
-         * @see _.sample
-         */
-        sample<T extends object>(
-            this: LoDashExplicitWrapper<T | null | undefined>
-        ): LoDashExplicitWrapper<T[keyof T] | undefined>;
-    }
-
-    // sampleSize
-
-    interface LoDashStatic {
-        /**
-         * Gets n random elements at unique keys from collection up to the size of collection.
-         *
-         * @param collection The collection to sample.
-         * @param n The number of elements to sample.
-         * @return Returns the random elements.
-         */
-        sampleSize<T>(
-            collection: List<T> | Dictionary<T> | NumericDictionary<T> | null | undefined,
-            n?: number
-        ): T[];
-
-        /**
-         * @see _.sampleSize
-         */
-        sampleSize<T extends object>(
-            collection: T | null | undefined,
-            n?: number
-        ): Array<T[keyof T]>;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.sampleSize
-         */
-        sampleSize<T>(
-            this: LoDashImplicitWrapper<List<T> | Dictionary<T> | NumericDictionary<T> | null | undefined>,
-            n?: number
-        ): LoDashImplicitWrapper<T[]>;
-
-        /**
-         * @see _.sampleSize
-         */
-        sampleSize<T extends object>(
-            this: LoDashImplicitWrapper<T | null | undefined>,
-            n?: number
-        ): LoDashImplicitWrapper<Array<T[keyof T]>>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.sampleSize
-         */
-        sampleSize<T>(
-            this: LoDashExplicitWrapper<List<T> | Dictionary<T> | NumericDictionary<T> | null | undefined>,
-            n?: number
-        ): LoDashExplicitWrapper<T[]>;
-
-        /**
-         * @see _.sampleSize
-         */
-        sampleSize<T extends object>(
-            this: LoDashExplicitWrapper<T | null | undefined>,
-            n?: number
-        ): LoDashExplicitWrapper<Array<T[keyof T]>>;
-    }
-
-    // shuffle
-
-    interface LoDashStatic {
-        /**
-         * Creates an array of shuffled values, using a version of the Fisher-Yates shuffle.
-         *
-         * @param collection The collection to shuffle.
-         * @return Returns the new shuffled array.
-         */
-        shuffle<T>(collection: List<T> | null | undefined): T[];
-
-        /**
-         * @see _.shuffle
-         */
-        shuffle<T extends object>(collection: T | null | undefined): Array<T[keyof T]>;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.shuffle
-         */
-        shuffle<T>(this: LoDashImplicitWrapper<List<T> | null | undefined>): LoDashImplicitWrapper<T[]>;
-
-        /**
-         * @see _.shuffle
-         */
-        shuffle<T extends object>(this: LoDashImplicitWrapper<T | null | undefined>): LoDashImplicitWrapper<Array<T[keyof T]>>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.shuffle
-         */
-        shuffle<T>(this: LoDashExplicitWrapper<List<T> | null | undefined>): LoDashExplicitWrapper<T[]>;
-
-        /**
-         * @see _.shuffle
-         */
-        shuffle<T extends object>(this: LoDashExplicitWrapper<T | null | undefined>): LoDashExplicitWrapper<Array<T[keyof T]>>;
-    }
-
-    // size
-
-    interface LoDashStatic {
-        /**
-         * Gets the size of collection by returning its length for array-like values or the number of own enumerable
-         * properties for objects.
-         *
-         * @param collection The collection to inspect.
-         * @return Returns the size of collection.
-         */
-        size(collection: object | string | null | undefined): number;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.size
-         */
-        size(): number;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.size
-         */
-        size(): LoDashExplicitWrapper<number>;
-    }
-
-    // some
-
-    interface LoDashStatic {
-        /**
-         * Checks if predicate returns truthy for any element of collection. Iteration is stopped once predicate
-         * returns truthy. The predicate is invoked with three arguments: (value, index|key, collection).
-         *
-         * @param collection The collection to iterate over.
-         * @param predicate The function invoked per iteration.
-         * @return Returns true if any element passes the predicate check, else false.
-         */
-        some<T>(
-            collection: List<T> | null | undefined,
-            predicate?: ListIterateeCustom<T, boolean>
-        ): boolean;
-
-        /**
-         * @see _.some
-         */
-        some<T extends object>(
-            collection: T | null | undefined,
-            predicate?: ObjectIterateeCustom<T, boolean>
-        ): boolean;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.some
-         */
-        some<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            predicate?: ListIterateeCustom<T, boolean>
-        ): boolean;
-
-        /**
-         * @see _.some
-         */
-        some<T extends object>(
-            this: LoDashImplicitWrapper<T | null | undefined>,
-            predicate?: ObjectIterateeCustom<T, boolean>
-        ): boolean;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.some
-         */
-        some<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            predicate?: ListIterateeCustom<T, boolean>
-        ): LoDashExplicitWrapper<boolean>;
-
-        /**
-         * @see _.some
-         */
-        some<T extends object>(
-            this: LoDashExplicitWrapper<T | null | undefined>,
-            predicate?: ObjectIterateeCustom<T, boolean>
-        ): LoDashExplicitWrapper<boolean>;
-    }
-
-    // sortBy
-
-    interface LoDashStatic {
-        /**
-         * Creates an array of elements, sorted in ascending order by the results of
-         * running each element in a collection through each iteratee. This method
-         * performs a stable sort, that is, it preserves the original sort order of
-         * equal elements. The iteratees are invoked with one argument: (value).
-         *
-         * @category Collection
-         * @param collection The collection to iterate over.
-         * @param [iteratees=[_.identity]]
-         *  The iteratees to sort by, specified individually or in arrays.
-         * @returns Returns the new sorted array.
-         * @example
-         *
-         * var users = [
-         *   { 'user': 'fred',   'age': 48 },
-         *   { 'user': 'barney', 'age': 36 },
-         *   { 'user': 'fred',   'age': 42 },
-         *   { 'user': 'barney', 'age': 34 }
-         * ];
-         *
-         * _.sortBy(users, function(o) { return o.user; });
-         * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]]
-         *
-         * _.sortBy(users, ['user', 'age']);
-         * // => objects for [['barney', 34], ['barney', 36], ['fred', 42], ['fred', 48]]
-         *
-         * _.sortBy(users, 'user', function(o) {
-         *   return Math.floor(o.age / 10);
-         * });
-         * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]]
-         */
-        sortBy<T>(
-            collection: List<T> | null | undefined,
-            ...iteratees: Array<Many<ListIteratee<T>>>
-        ): T[];
-
-        /**
-         * @see _.sortBy
-         */
-        sortBy<T extends object>(
-            collection: T | null | undefined,
-            ...iteratees: Array<Many<ObjectIteratee<T>>>
-        ): Array<T[keyof T]>;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.sortBy
-         */
-        sortBy<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            ...iteratees: Array<Many<ListIteratee<T>>>
-        ): LoDashImplicitWrapper<T[]>;
-
-        /**
-         * @see _.sortBy
-         */
-        sortBy<T extends object>(
-            this: LoDashImplicitWrapper<T | null | undefined>,
-            ...iteratees: Array<Many<ObjectIteratee<T>>>
-        ): LoDashImplicitWrapper<Array<T[keyof T]>>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.sortBy
-         */
-        sortBy<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            ...iteratees: Array<Many<ListIteratee<T>>>
-        ): LoDashExplicitWrapper<T[]>;
-
-        /**
-         * @see _.sortBy
-         */
-        sortBy<T extends object>(
-            this: LoDashExplicitWrapper<T | null | undefined>,
-            ...iteratees: Array<Many<ObjectIteratee<T>>>
-        ): LoDashExplicitWrapper<Array<T[keyof T]>>;
-    }
-}
diff --git a/jtg js/node_modules/@types/lodash/common/common.d.ts b/jtg js/node_modules/@types/lodash/common/common.d.ts
deleted file mode 100644
index d0856a006b2773d80b7f1d9189f875309879933d..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/common/common.d.ts	
+++ /dev/null
@@ -1,268 +0,0 @@
-import _ = require("../index");
-// tslint:disable-next-line:strict-export-declare-modifiers
-type GlobalPartial<T> = Partial<T>;
-declare module "../index" {
-    type PartialObject<T> = GlobalPartial<T>;
-    type Many<T> = T | T[]; // TODO: Should be ReadonlyArray<T>, but requires ts2.5 to not infinitely loop
-    interface LoDashStatic {
-        /**
-        * Creates a lodash object which wraps value to enable implicit method chain sequences.
-        * Methods that operate on and return arrays, collections, and functions can be chained together.
-        * Methods that retrieve a single value or may return a primitive value will automatically end the
-        * chain sequence and return the unwrapped value. Otherwise, the value must be unwrapped with value().
-        *
-        * Explicit chain sequences, which must be unwrapped with value(), may be enabled using _.chain.
-        *
-        * The execution of chained methods is lazy, that is, it's deferred until value() is
-        * implicitly or explicitly called.
-        *
-        * Lazy evaluation allows several methods to support shortcut fusion. Shortcut fusion
-        * is an optimization to merge iteratee calls; this avoids the creation of intermediate
-        * arrays and can greatly reduce the number of iteratee executions. Sections of a chain
-        * sequence qualify for shortcut fusion if the section is applied to an array and iteratees
-        * accept only one argument. The heuristic for whether a section qualifies for shortcut
-        * fusion is subject to change.
-        *
-        * Chaining is supported in custom builds as long as the value() method is directly or
-        * indirectly included in the build.
-        *
-        * In addition to lodash methods, wrappers have Array and String methods.
-        * The wrapper Array methods are:
-        * concat, join, pop, push, shift, sort, splice, and unshift.
-        * The wrapper String methods are:
-        * replace and split.
-        *
-        * The wrapper methods that support shortcut fusion are:
-        * at, compact, drop, dropRight, dropWhile, filter, find, findLast, head, initial, last,
-        * map, reject, reverse, slice, tail, take, takeRight, takeRightWhile, takeWhile, and toArray
-        *
-        * The chainable wrapper methods are:
-        * after, ary, assign, assignIn, assignInWith, assignWith, at, before, bind, bindAll, bindKey,
-        * castArray, chain, chunk, commit, compact, concat, conforms, constant, countBy, create,
-        * curry, debounce, defaults, defaultsDeep, defer, delay, difference, differenceBy, differenceWith,
-        * drop, dropRight, dropRightWhile, dropWhile, extend, extendWith, fill, filter, flatMap,
-        * flatMapDeep, flatMapDepth, flatten, flattenDeep, flattenDepth, flip, flow, flowRight,
-        * fromPairs, functions, functionsIn, groupBy, initial, intersection, intersectionBy, intersectionWith,
-        * invert, invertBy, invokeMap, iteratee, keyBy, keys, keysIn, map, mapKeys, mapValues,
-        * matches, matchesProperty, memoize, merge, mergeWith, method, methodOf, mixin, negate,
-        * nthArg, omit, omitBy, once, orderBy, over, overArgs, overEvery, overSome, partial, partialRight,
-        * partition, pick, pickBy, plant, property, propertyOf, pull, pullAll, pullAllBy, pullAllWith, pullAt,
-        * push, range, rangeRight, rearg, reject, remove, rest, reverse, sampleSize, set, setWith,
-        * shuffle, slice, sort, sortBy, sortedUniq, sortedUniqBy, splice, spread, tail, take,
-        * takeRight, takeRightWhile, takeWhile, tap, throttle, thru, toArray, toPairs, toPairsIn,
-        * toPath, toPlainObject, transform, unary, union, unionBy, unionWith, uniq, uniqBy, uniqWith,
-        * unset, unshift, unzip, unzipWith, update, updateWith, values, valuesIn, without, wrap,
-        * xor, xorBy, xorWith, zip, zipObject, zipObjectDeep, and zipWith.
-        *
-        * The wrapper methods that are not chainable by default are:
-        * add, attempt, camelCase, capitalize, ceil, clamp, clone, cloneDeep, cloneDeepWith, cloneWith,
-        * conformsTo, deburr, defaultTo, divide, each, eachRight, endsWith, eq, escape, escapeRegExp,
-        * every, find, findIndex, findKey, findLast, findLastIndex, findLastKey, first, floor, forEach,
-        * forEachRight, forIn, forInRight, forOwn, forOwnRight, get, gt, gte, has, hasIn, head,
-        * identity, includes, indexOf, inRange, invoke, isArguments, isArray, isArrayBuffer,
-        * isArrayLike, isArrayLikeObject, isBoolean, isBuffer, isDate, isElement, isEmpty, isEqual, isEqualWith,
-        * isError, isFinite, isFunction, isInteger, isLength, isMap, isMatch, isMatchWith, isNaN,
-        * isNative, isNil, isNull, isNumber, isObject, isObjectLike, isPlainObject, isRegExp,
-        * isSafeInteger, isSet, isString, isUndefined, isTypedArray, isWeakMap, isWeakSet, join,
-        * kebabCase, last, lastIndexOf, lowerCase, lowerFirst, lt, lte, max, maxBy, mean, meanBy,
-        * min, minBy, multiply, noConflict, noop, now, nth, pad, padEnd, padStart, parseInt, pop,
-        * random, reduce, reduceRight, repeat, result, round, runInContext, sample, shift, size,
-        * snakeCase, some, sortedIndex, sortedIndexBy, sortedLastIndex, sortedLastIndexBy, startCase,
-        * startsWith, stubArray, stubFalse, stubObject, stubString, stubTrue, subtract, sum, sumBy,
-        * template, times, toFinite, toInteger, toJSON, toLength, toLower, toNumber, toSafeInteger,
-        * toString, toUpper, trim, trimEnd, trimStart, truncate, unescape, uniqueId, upperCase,
-        * upperFirst, value, and words.
-        **/
-        <T>(value: T): LoDashImplicitWrapper<T>;
-
-        /**
-        * The semantic version number.
-        **/
-        VERSION: string;
-
-        /**
-        * By default, the template delimiters used by Lo-Dash are similar to those in embedded Ruby
-        * (ERB). Change the following template settings to use alternative delimiters.
-        **/
-        templateSettings: TemplateSettings;
-    }
-
-    /**
-    * By default, the template delimiters used by Lo-Dash are similar to those in embedded Ruby
-    * (ERB). Change the following template settings to use alternative delimiters.
-    **/
-    interface TemplateSettings {
-        /**
-        * The "escape" delimiter.
-        **/
-        escape?: RegExp;
-
-        /**
-        * The "evaluate" delimiter.
-        **/
-        evaluate?: RegExp;
-
-        /**
-        * An object to import into the template as local variables.
-        **/
-        imports?: Dictionary<any>;
-
-        /**
-        * The "interpolate" delimiter.
-        **/
-        interpolate?: RegExp;
-
-        /**
-        * Used to reference the data object in the template text.
-        **/
-        variable?: string;
-    }
-
-    /**
-     * Creates a cache object to store key/value pairs.
-     */
-    interface MapCache {
-        /**
-         * Removes `key` and its value from the cache.
-         * @param key The key of the value to remove.
-         * @return Returns `true` if the entry was removed successfully, else `false`.
-         */
-        delete(key: string): boolean;
-
-        /**
-         * Gets the cached value for `key`.
-         * @param key The key of the value to get.
-         * @return Returns the cached value.
-         */
-        get(key: string): any;
-
-        /**
-         * Checks if a cached value for `key` exists.
-         * @param key The key of the entry to check.
-         * @return Returns `true` if an entry for `key` exists, else `false`.
-         */
-        has(key: string): boolean;
-
-        /**
-         * Sets `value` to `key` of the cache.
-         * @param key The key of the value to cache.
-         * @param value The value to cache.
-         * @return Returns the cache object.
-         */
-        set(key: string, value: any): Dictionary<any>;
-
-        /**
-         * Removes all key-value entries from the map.
-         */
-        clear(): void;
-    }
-    interface MapCacheConstructor {
-        new (): MapCache;
-    }
-
-    interface LoDashImplicitWrapper<TValue> extends LoDashWrapper<TValue> {
-        pop<T>(this: LoDashImplicitWrapper<List<T> | null | undefined>): T | undefined;
-        push<T>(this: LoDashImplicitWrapper<List<T> | null | undefined>, ...items: T[]): this;
-        shift<T>(this: LoDashImplicitWrapper<List<T> | null | undefined>): T | undefined;
-        sort<T>(this: LoDashImplicitWrapper<List<T> | null | undefined>, compareFn?: (a: T, b: T) => number): this;
-        splice<T>(this: LoDashImplicitWrapper<List<T> | null | undefined>, start: number, deleteCount?: number, ...items: T[]): this;
-        unshift<T>(this: LoDashImplicitWrapper<List<T> | null | undefined>, ...items: T[]): this;
-    }
-
-    interface LoDashExplicitWrapper<TValue> extends LoDashWrapper<TValue> {
-        pop<T>(this: LoDashExplicitWrapper<List<T> | null | undefined>): LoDashExplicitWrapper<T | undefined>;
-        push<T>(this: LoDashExplicitWrapper<List<T> | null | undefined>, ...items: T[]): this;
-        shift<T>(this: LoDashExplicitWrapper<List<T> | null | undefined>): LoDashExplicitWrapper<T | undefined>;
-        sort<T>(this: LoDashExplicitWrapper<List<T> | null | undefined>, compareFn?: (a: T, b: T) => number): this;
-        splice<T>(this: LoDashExplicitWrapper<List<T> | null | undefined>, start: number, deleteCount?: number, ...items: T[]): this;
-        unshift<T>(this: LoDashExplicitWrapper<List<T> | null | undefined>, ...items: T[]): this;
-    }
-
-    type NotVoid = {} | null | undefined;
-    type ArrayIterator<T, TResult> = (value: T, index: number, collection: T[]) => TResult;
-    type ListIterator<T, TResult> = (value: T, index: number, collection: List<T>) => TResult;
-    type ListIteratee<T> = ListIterator<T, NotVoid> | string | [string, any] | PartialDeep<T>;
-    type ListIterateeCustom<T, TResult> = ListIterator<T, TResult> | string | [string, any] | PartialDeep<T>;
-    type ListIteratorTypeGuard<T, S extends T> = (value: T, index: number, collection: List<T>) => value is S;
-
-    // Note: key should be string, not keyof T, because the actual object may contain extra properties that were not specified in the type.
-    type ObjectIterator<TObject, TResult> = (value: TObject[keyof TObject], key: string, collection: TObject) => TResult;
-    type ObjectIteratee<TObject> = ObjectIterator<TObject, NotVoid> | string | [string, any] | PartialDeep<TObject[keyof TObject]>;
-    type ObjectIterateeCustom<TObject, TResult> = ObjectIterator<TObject, TResult> | string | [string, any] | PartialDeep<TObject[keyof TObject]>;
-    type ObjectIteratorTypeGuard<TObject, S extends TObject[keyof TObject]> = (value: TObject[keyof TObject], key: string, collection: TObject) => value is S;
-
-    type StringIterator<TResult> = (char: string, index: number, string: string) => TResult;
-
-    /** @deprecated Use MemoVoidArrayIterator or MemoVoidDictionaryIterator instead. */
-    type MemoVoidIterator<T, TResult> = (prev: TResult, curr: T, indexOrKey: any, list: T[]) => void;
-
-    /** @deprecated Use MemoListIterator or MemoObjectIterator instead. */
-    type MemoIterator<T, TResult> = (prev: TResult, curr: T, indexOrKey: any, list: T[]) => TResult;
-    type MemoListIterator<T, TResult, TList> = (prev: TResult, curr: T, index: number, list: TList) => TResult;
-    type MemoObjectIterator<T, TResult, TList> = (prev: TResult, curr: T, key: string, list: TList) => TResult;
-    type MemoIteratorCapped<T, TResult> = (prev: TResult, curr: T) => TResult;
-    type MemoIteratorCappedRight<T, TResult> = (curr: T, prev: TResult) => TResult;
-
-    type MemoVoidArrayIterator<T, TResult> = (acc: TResult, curr: T, index: number, arr: T[]) => void;
-    type MemoVoidDictionaryIterator<T, TResult> = (acc: TResult, curr: T, key: string, dict: Dictionary<T>) => void;
-    type MemoVoidIteratorCapped<T, TResult> = (acc: TResult, curr: T) => void;
-
-    type ValueIteratee<T> = ((value: T) => NotVoid) | string | [string, any] | PartialDeep<T>;
-    type ValueIterateeCustom<T, TResult> = ((value: T) => TResult) | string | [string, any] | PartialDeep<T>;
-    type ValueIteratorTypeGuard<T, S extends T> = (value: T) => value is S;
-    type ValueKeyIteratee<T> = ((value: T, key: string) => NotVoid) | string | [string, any] | PartialDeep<T>;
-    type Comparator<T> = (a: T, b: T) => boolean;
-    type Comparator2<T1, T2> = (a: T1, b: T2) => boolean;
-
-    type PropertyName = string | number | symbol;
-    type PropertyPath = Many<PropertyName>;
-
-    type Omit<T, K extends keyof T> = Pick<T, ({ [P in keyof T]: P } & { [P in K]: never } & { [x: string]: never })[keyof T]>;
-
-    /** Common interface between Arrays and jQuery objects */
-    type List<T> = ArrayLike<T>;
-
-    interface Dictionary<T> {
-        [index: string]: T;
-    }
-
-    interface NumericDictionary<T> {
-        [index: number]: T;
-    }
-
-    // Crazy typedef needed get _.omit to work properly with Dictionary and NumericDictionary
-    type AnyKindOfDictionary =
-        | Dictionary<{} | null | undefined>
-        | NumericDictionary<{} | null | undefined>;
-
-    interface Cancelable {
-        cancel(): void;
-        flush(): void;
-    }
-
-    type PartialDeep<T> = {
-        [P in keyof T]?: PartialDeep<T[P]>;
-    };
-
-    // For backwards compatibility
-    type LoDashImplicitArrayWrapper<T> = LoDashImplicitWrapper<T[]>;
-    type LoDashImplicitNillableArrayWrapper<T> = LoDashImplicitWrapper<T[] | null | undefined>;
-    type LoDashImplicitObjectWrapper<T> = LoDashImplicitWrapper<T>;
-    type LoDashImplicitNillableObjectWrapper<T> = LoDashImplicitWrapper<T | null | undefined>;
-    type LoDashImplicitNumberArrayWrapper = LoDashImplicitWrapper<number[]>;
-    type LoDashImplicitStringWrapper = LoDashImplicitWrapper<string>;
-    type LoDashExplicitArrayWrapper<T> = LoDashExplicitWrapper<T[]>;
-    type LoDashExplicitNillableArrayWrapper<T> = LoDashExplicitWrapper<T[] | null | undefined>;
-    type LoDashExplicitObjectWrapper<T> = LoDashExplicitWrapper<T>;
-    type LoDashExplicitNillableObjectWrapper<T> = LoDashExplicitWrapper<T | null | undefined>;
-    type LoDashExplicitNumberArrayWrapper = LoDashExplicitWrapper<number[]>;
-    type LoDashExplicitStringWrapper = LoDashExplicitWrapper<string>;
-
-    type DictionaryIterator<T, TResult> = ObjectIterator<Dictionary<T>, TResult>;
-    type DictionaryIteratee<T> = ObjectIteratee<Dictionary<T>>;
-    type DictionaryIteratorTypeGuard<T, S extends T> = ObjectIteratorTypeGuard<Dictionary<T>, S>;
-    // NOTE: keys of objects at run time are always strings, even when a NumericDictionary is being iterated.
-    type NumericDictionaryIterator<T, TResult> = (value: T, key: string, collection: NumericDictionary<T>) => TResult;
-    type NumericDictionaryIteratee<T> = NumericDictionaryIterator<T, NotVoid> | string | [string, any] | PartialDeep<T>;
-    type NumericDictionaryIterateeCustom<T, TResult> = NumericDictionaryIterator<T, TResult> | string | [string, any] | PartialDeep<T>;
-}
diff --git a/jtg js/node_modules/@types/lodash/common/date.d.ts b/jtg js/node_modules/@types/lodash/common/date.d.ts
deleted file mode 100644
index 79131e45603ecd7fe430442cd428fc7ae4441c45..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/common/date.d.ts	
+++ /dev/null
@@ -1,27 +0,0 @@
-import _ = require("../index");
-declare module "../index" {
-    // now
-
-    interface LoDashStatic {
-        /**
-         * Gets the number of milliseconds that have elapsed since the Unix epoch (1 January 1970 00:00:00 UTC).
-         *
-         * @return The number of milliseconds.
-         */
-        now(): number;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.now
-         */
-        now(): number;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.now
-         */
-        now(): LoDashExplicitWrapper<number>;
-    }
-}
diff --git a/jtg js/node_modules/@types/lodash/common/function.d.ts b/jtg js/node_modules/@types/lodash/common/function.d.ts
deleted file mode 100644
index 71ec3bb88426d6d7b2b668c8f827e1235501b222..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/common/function.d.ts	
+++ /dev/null
@@ -1,1473 +0,0 @@
-import _ = require("../index");
-declare module "../index" {
-    // after
-
-    interface LoDashStatic {
-        /**
-         * The opposite of _.before; this method creates a function that invokes func once it’s called n or more times.
-         *
-         * @param n The number of calls before func is invoked.
-         * @param func The function to restrict.
-         * @return Returns the new restricted function.
-         */
-        after<TFunc extends (...args: any[]) => any>(
-            n: number,
-            func: TFunc
-        ): TFunc;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-        * @see _.after
-        **/
-        after<TFunc extends (...args: any[]) => any>(func: TFunc): LoDashImplicitWrapper<TFunc>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.after
-         **/
-        after<TFunc extends (...args: any[]) => any>(func: TFunc): LoDashExplicitWrapper<TFunc>;
-    }
-
-    // ary
-
-    interface LoDashStatic {
-        /**
-         * Creates a function that accepts up to n arguments ignoring any additional arguments.
-         *
-         * @param func The function to cap arguments for.
-         * @param n The arity cap.
-         * @returns Returns the new function.
-         */
-        ary(
-            func: (...args: any[]) => any,
-            n?: number
-        ): (...args: any[]) => any;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.ary
-         */
-        ary(n?: number): LoDashImplicitWrapper<(...args: any[]) => any>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.ary
-         */
-        ary(n?: number): LoDashExplicitWrapper<(...args: any[]) => any>;
-    }
-
-    // before
-
-    interface LoDashStatic {
-        /**
-         * Creates a function that invokes func, with the this binding and arguments of the created function, while
-         * it’s called less than n times. Subsequent calls to the created function return the result of the last func
-         * invocation.
-         *
-         * @param n The number of calls at which func is no longer invoked.
-         * @param func The function to restrict.
-         * @return Returns the new restricted function.
-         */
-        before<TFunc extends (...args: any[]) => any>(
-            n: number,
-            func: TFunc
-        ): TFunc;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.before
-         **/
-        before<TFunc extends (...args: any[]) => any>(func: TFunc): LoDashImplicitWrapper<TFunc>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.before
-         **/
-        before<TFunc extends (...args: any[]) => any>(func: TFunc): LoDashExplicitWrapper<TFunc>;
-    }
-
-    // bind
-
-    interface FunctionBind {
-        placeholder: __;
-
-        (
-            func: (...args: any[]) => any,
-            thisArg: any,
-            ...partials: any[]
-        ): (...args: any[]) => any;
-    }
-
-    interface LoDashStatic {
-        /**
-         * Creates a function that invokes func with the this binding of thisArg and prepends any additional _.bind
-         * arguments to those provided to the bound function.
-         *
-         * The _.bind.placeholder value, which defaults to _ in monolithic builds, may be used as a placeholder for
-         * partially applied arguments.
-         *
-         * Note: Unlike native Function#bind this method does not set the "length" property of bound functions.
-         *
-         * @param func The function to bind.
-         * @param thisArg The this binding of func.
-         * @param partials The arguments to be partially applied.
-         * @return Returns the new bound function.
-         */
-        bind: FunctionBind;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.bind
-         */
-        bind(
-            thisArg: any,
-            ...partials: any[]
-        ): LoDashImplicitWrapper<(...args: any[]) => any>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.bind
-         */
-        bind(
-            thisArg: any,
-            ...partials: any[]
-        ): LoDashExplicitWrapper<(...args: any[]) => any>;
-    }
-
-    // bindKey
-
-    interface FunctionBindKey {
-        placeholder: __;
-
-        (
-            object: object,
-            key: string,
-            ...partials: any[]
-        ): (...args: any[]) => any;
-    }
-
-    interface LoDashStatic {
-        /**
-         * Creates a function that invokes the method at object[key] and prepends any additional _.bindKey arguments
-         * to those provided to the bound function.
-         *
-         * This method differs from _.bind by allowing bound functions to reference methods that may be redefined
-         * or don’t yet exist. See Peter Michaux’s article for more details.
-         *
-         * The _.bindKey.placeholder value, which defaults to _ in monolithic builds, may be used as a placeholder
-         * for partially applied arguments.
-         *
-         * @param object The object the method belongs to.
-         * @param key The key of the method.
-         * @param partials The arguments to be partially applied.
-         * @return Returns the new bound function.
-         */
-        bindKey: FunctionBindKey;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.bindKey
-         */
-        bindKey(
-            key: string,
-            ...partials: any[]
-        ): LoDashImplicitWrapper<(...args: any[]) => any>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.bindKey
-         */
-        bindKey(
-            key: string,
-            ...partials: any[]
-        ): LoDashExplicitWrapper<(...args: any[]) => any>;
-    }
-
-    // curry
-
-    interface Curry {
-        /**
-         * Creates a function that accepts one or more arguments of func that when called either invokes func returning
-         * its result, if all func arguments have been provided, or returns a function that accepts one or more of the
-         * remaining func arguments, and so on. The arity of func may be specified if func.length is not sufficient.
-         * @param func The function to curry.
-         * @param arity The arity of func.
-         * @return Returns the new curried function.
-         */
-        <T1, R>(func: (t1: T1) => R, arity?: number):
-            CurriedFunction1<T1, R>;
-        /**
-         * Creates a function that accepts one or more arguments of func that when called either invokes func returning
-         * its result, if all func arguments have been provided, or returns a function that accepts one or more of the
-         * remaining func arguments, and so on. The arity of func may be specified if func.length is not sufficient.
-         * @param func The function to curry.
-         * @param arity The arity of func.
-         * @return Returns the new curried function.
-         */
-        <T1, T2, R>(func: (t1: T1, t2: T2) => R, arity?: number):
-            CurriedFunction2<T1, T2, R>;
-        /**
-         * Creates a function that accepts one or more arguments of func that when called either invokes func returning
-         * its result, if all func arguments have been provided, or returns a function that accepts one or more of the
-         * remaining func arguments, and so on. The arity of func may be specified if func.length is not sufficient.
-         * @param func The function to curry.
-         * @param arity The arity of func.
-         * @return Returns the new curried function.
-         */
-        <T1, T2, T3, R>(func: (t1: T1, t2: T2, t3: T3) => R, arity?: number):
-            CurriedFunction3<T1, T2, T3, R>;
-        /**
-         * Creates a function that accepts one or more arguments of func that when called either invokes func returning
-         * its result, if all func arguments have been provided, or returns a function that accepts one or more of the
-         * remaining func arguments, and so on. The arity of func may be specified if func.length is not sufficient.
-         * @param func The function to curry.
-         * @param arity The arity of func.
-         * @return Returns the new curried function.
-         */
-        <T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arity?: number):
-            CurriedFunction4<T1, T2, T3, T4, R>;
-        /**
-         * Creates a function that accepts one or more arguments of func that when called either invokes func returning
-         * its result, if all func arguments have been provided, or returns a function that accepts one or more of the
-         * remaining func arguments, and so on. The arity of func may be specified if func.length is not sufficient.
-         * @param func The function to curry.
-         * @param arity The arity of func.
-         * @return Returns the new curried function.
-         */
-        <T1, T2, T3, T4, T5, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5) => R, arity?: number):
-            CurriedFunction5<T1, T2, T3, T4, T5, R>;
-        /**
-         * Creates a function that accepts one or more arguments of func that when called either invokes func returning
-         * its result, if all func arguments have been provided, or returns a function that accepts one or more of the
-         * remaining func arguments, and so on. The arity of func may be specified if func.length is not sufficient.
-         * @param func The function to curry.
-         * @param arity The arity of func.
-         * @return Returns the new curried function.
-         */
-        (func: (...args: any[]) => any, arity?: number): (...args: any[]) => any;
-
-        placeholder: __;
-    }
-
-    interface LoDashStatic {
-        curry: Curry;
-    }
-
-    interface CurriedFunction1<T1, R> {
-        (): CurriedFunction1<T1, R>;
-        (t1: T1): R;
-    }
-
-    interface CurriedFunction2<T1, T2, R> {
-        (): CurriedFunction2<T1, T2, R>;
-        (t1: T1): CurriedFunction1<T2, R>;
-        (t1: __, t2: T2): CurriedFunction1<T1, R>;
-        (t1: T1, t2: T2): R;
-    }
-
-    interface CurriedFunction3<T1, T2, T3, R> {
-        (): CurriedFunction3<T1, T2, T3, R>;
-        (t1: T1): CurriedFunction2<T2, T3, R>;
-        (t1: __, t2: T2): CurriedFunction2<T1, T3, R>;
-        (t1: T1, t2: T2): CurriedFunction1<T3, R>;
-        (t1: __, t2: __, t3: T3): CurriedFunction2<T1, T2, R>;
-        (t1: T1, t2: __, t3: T3): CurriedFunction1<T2, R>;
-        (t1: __, t2: T2, t3: T3): CurriedFunction1<T1, R>;
-        (t1: T1, t2: T2, t3: T3): R;
-    }
-
-    interface CurriedFunction4<T1, T2, T3, T4, R> {
-        (): CurriedFunction4<T1, T2, T3, T4, R>;
-        (t1: T1): CurriedFunction3<T2, T3, T4, R>;
-        (t1: __, t2: T2): CurriedFunction3<T1, T3, T4, R>;
-        (t1: T1, t2: T2): CurriedFunction2<T3, T4, R>;
-        (t1: __, t2: __, t3: T3): CurriedFunction3<T1, T2, T4, R>;
-        (t1: __, t2: __, t3: T3): CurriedFunction2<T2, T4, R>;
-        (t1: __, t2: T2, t3: T3): CurriedFunction2<T1, T4, R>;
-        (t1: T1, t2: T2, t3: T3): CurriedFunction1<T4, R>;
-        (t1: __, t2: __, t3: __, t4: T4): CurriedFunction3<T1, T2, T3, R>;
-        (t1: T1, t2: __, t3: __, t4: T4): CurriedFunction2<T2, T3, R>;
-        (t1: __, t2: T2, t3: __, t4: T4): CurriedFunction2<T1, T3, R>;
-        (t1: __, t2: __, t3: T3, t4: T4): CurriedFunction2<T1, T2, R>;
-        (t1: T1, t2: T2, t3: __, t4: T4): CurriedFunction1<T3, R>;
-        (t1: T1, t2: __, t3: T3, t4: T4): CurriedFunction1<T2, R>;
-        (t1: __, t2: T2, t3: T3, t4: T4): CurriedFunction1<T1, R>;
-        (t1: T1, t2: T2, t3: T3, t4: T4): R;
-    }
-
-    interface CurriedFunction5<T1, T2, T3, T4, T5, R> {
-        (): CurriedFunction5<T1, T2, T3, T4, T5, R>;
-        (t1: T1): CurriedFunction4<T2, T3, T4, T5, R>;
-        (t1: __, t2: T2): CurriedFunction4<T1, T3, T4, T5, R>;
-        (t1: T1, t2: T2): CurriedFunction3<T3, T4, T5, R>;
-        (t1: __, t2: __, t3: T3): CurriedFunction4<T1, T2, T4, T5, R>;
-        (t1: T1, t2: __, t3: T3): CurriedFunction3<T2, T4, T5, R>;
-        (t1: __, t2: T2, t3: T3): CurriedFunction3<T1, T4, T5, R>;
-        (t1: T1, t2: T2, t3: T3): CurriedFunction2<T4, T5, R>;
-        (t1: __, t2: __, t3: __, t4: T4): CurriedFunction4<T1, T2, T3, T5, R>;
-        (t1: T1, t2: __, t3: __, t4: T4): CurriedFunction3<T2, T3, T5, R>;
-        (t1: __, t2: T2, t3: __, t4: T4): CurriedFunction3<T1, T3, T5, R>;
-        (t1: __, t2: __, t3: T3, t4: T4): CurriedFunction3<T1, T2, T5, R>;
-        (t1: T1, t2: T2, t3: __, t4: T4): CurriedFunction2<T3, T5, R>;
-        (t1: T1, t2: __, t3: T3, t4: T4): CurriedFunction2<T2, T5, R>;
-        (t1: __, t2: T2, t3: T3, t4: T4): CurriedFunction2<T1, T5, R>;
-        (t1: T1, t2: T2, t3: T3, t4: T4): CurriedFunction1<T5, R>;
-        (t1: __, t2: __, t3: __, t4: __, t5: T5): CurriedFunction4<T1, T2, T3, T4, R>;
-        (t1: T1, t2: __, t3: __, t4: __, t5: T5): CurriedFunction3<T2, T3, T4, R>;
-        (t1: __, t2: T2, t3: __, t4: __, t5: T5): CurriedFunction3<T1, T3, T4, R>;
-        (t1: __, t2: __, t3: T3, t4: __, t5: T5): CurriedFunction3<T1, T2, T4, R>;
-        (t1: __, t2: __, t3: __, t4: T4, t5: T5): CurriedFunction3<T1, T2, T3, R>;
-        (t1: T1, t2: T2, t3: __, t4: __, t5: T5): CurriedFunction2<T3, T4, R>;
-        (t1: T1, t2: __, t3: T3, t4: __, t5: T5): CurriedFunction2<T2, T4, R>;
-        (t1: T1, t2: __, t3: __, t4: T4, t5: T5): CurriedFunction2<T2, T3, R>;
-        (t1: __, t2: T2, t3: T3, t4: __, t5: T5): CurriedFunction2<T1, T4, R>;
-        (t1: __, t2: T2, t3: __, t4: T4, t5: T5): CurriedFunction2<T1, T3, R>;
-        (t1: __, t2: __, t3: T3, t4: T4, t5: T5): CurriedFunction2<T1, T2, R>;
-        (t1: T1, t2: T2, t3: T3, t4: __, t5: T5): CurriedFunction1<T4, R>;
-        (t1: T1, t2: T2, t3: __, t4: T4, t5: T5): CurriedFunction1<T3, R>;
-        (t1: T1, t2: __, t3: T3, t4: T4, t5: T5): CurriedFunction1<T2, R>;
-        (t1: __, t2: T2, t3: T3, t4: T4, t5: T5): CurriedFunction1<T1, R>;
-        (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5): R;
-    }
-
-    interface RightCurriedFunction1<T1, R> {
-        (): RightCurriedFunction1<T1, R>;
-        (t1: T1): R;
-    }
-
-    interface RightCurriedFunction2<T1, T2, R> {
-        (): RightCurriedFunction2<T1, T2, R>;
-        (t2: T2): RightCurriedFunction1<T1, R>;
-        (t1: T1, t2: __): RightCurriedFunction1<T2, R>;
-        (t1: T1, t2: T2): R;
-    }
-
-    interface RightCurriedFunction3<T1, T2, T3, R> {
-        (): RightCurriedFunction3<T1, T2, T3, R>;
-        (t3: T3): RightCurriedFunction2<T1, T2, R>;
-        (t2: T2, t3: __): RightCurriedFunction2<T1, T3, R>;
-        (t2: T2, t3: T3): RightCurriedFunction1<T1, R>;
-        (t1: T1, t2: __, t3: __): RightCurriedFunction2<T2, T3, R>;
-        (t1: T1, t2: T2, t3: __): RightCurriedFunction1<T3, R>;
-        (t1: T1, t2: __, t3: T3): RightCurriedFunction1<T2, R>;
-        (t1: T1, t2: T2, t3: T3): R;
-    }
-
-    interface RightCurriedFunction4<T1, T2, T3, T4, R> {
-        (): RightCurriedFunction4<T1, T2, T3, T4, R>;
-        (t4: T4): RightCurriedFunction3<T1, T2, T3, R>;
-        (t3: T3, t4: __): RightCurriedFunction3<T1, T2, T4, R>;
-        (t3: T3, t4: T4): RightCurriedFunction2<T1, T2, R>;
-        (t2: T2, t3: __, t4: __): RightCurriedFunction3<T1, T3, T4, R>;
-        (t2: T2, t3: T3, t4: __): RightCurriedFunction2<T1, T4, R>;
-        (t2: T2, t3: __, t4: T4): RightCurriedFunction2<T1, T3, R>;
-        (t2: T2, t3: T3, t4: T4): RightCurriedFunction1<T1, R>;
-        (t1: T1, t2: __, t3: __, t4: __): RightCurriedFunction3<T2, T3, T4, R>;
-        (t1: T1, t2: T2, t3: __, t4: __): RightCurriedFunction2<T3, T4, R>;
-        (t1: T1, t2: __, t3: T3, t4: __): RightCurriedFunction2<T2, T4, R>;
-        (t1: T1, t2: __, t3: __, t4: T4): RightCurriedFunction2<T2, T3, R>;
-        (t1: T1, t2: T2, t3: T3, t4: __): RightCurriedFunction1<T4, R>;
-        (t1: T1, t2: T2, t3: __, t4: T4): RightCurriedFunction1<T3, R>;
-        (t1: T1, t2: __, t3: T3, t4: T4): RightCurriedFunction1<T2, R>;
-        (t1: T1, t2: T2, t3: T3, t4: T4): R;
-    }
-
-    interface RightCurriedFunction5<T1, T2, T3, T4, T5, R> {
-        (): RightCurriedFunction5<T1, T2, T3, T4, T5, R>;
-        (t5: T5): RightCurriedFunction4<T1, T2, T3, T4, R>;
-        (t4: T4, t5: __): RightCurriedFunction4<T1, T2, T3, T5, R>;
-        (t4: T4, t5: T5): RightCurriedFunction3<T1, T2, T3, R>;
-        (t3: T3, t4: __, t5: __): RightCurriedFunction4<T1, T2, T4, T5, R>;
-        (t3: T3, t4: T4, t5: __): RightCurriedFunction3<T1, T2, T5, R>;
-        (t3: T3, t4: __, t5: T5): RightCurriedFunction3<T1, T2, T4, R>;
-        (t3: T3, t4: T4, t5: T5): RightCurriedFunction2<T1, T2, R>;
-        (t2: T2, t3: __, t4: __, t5: __): RightCurriedFunction4<T1, T3, T4, T5, R>;
-        (t2: T2, t3: T3, t4: __, t5: __): RightCurriedFunction3<T1, T4, T5, R>;
-        (t2: T2, t3: __, t4: T4, t5: __): RightCurriedFunction3<T1, T3, T5, R>;
-        (t2: T2, t3: __, t4: __, t5: T5): RightCurriedFunction3<T1, T3, T4, R>;
-        (t2: T2, t3: T3, t4: T4, t5: __): RightCurriedFunction2<T1, T5, R>;
-        (t2: T2, t3: T3, t4: __, t5: T5): RightCurriedFunction2<T1, T4, R>;
-        (t2: T2, t3: __, t4: T4, t5: T5): RightCurriedFunction2<T1, T3, R>;
-        (t2: T2, t3: T3, t4: T4, t5: T5): RightCurriedFunction1<T1, R>;
-        (t1: T1, t2: __, t3: __, t4: __, t5: __): RightCurriedFunction4<T2, T3, T4, T5, R>;
-        (t1: T1, t2: T2, t3: __, t4: __, t5: __): RightCurriedFunction3<T3, T4, T5, R>;
-        (t1: T1, t2: __, t3: T3, t4: __, t5: __): RightCurriedFunction3<T2, T4, T5, R>;
-        (t1: T1, t2: __, t3: __, t4: T4, t5: __): RightCurriedFunction3<T2, T3, T5, R>;
-        (t1: T1, t2: __, t3: __, t4: __, t5: T5): RightCurriedFunction3<T2, T3, T4, R>;
-        (t1: T1, t2: T2, t3: T3, t4: __, t5: __): RightCurriedFunction2<T4, T5, R>;
-        (t1: T1, t2: T2, t3: __, t4: T4, t5: __): RightCurriedFunction2<T3, T5, R>;
-        (t1: T1, t2: T2, t3: __, t4: __, t5: T5): RightCurriedFunction2<T3, T4, R>;
-        (t1: T1, t2: __, t3: T3, t4: T4, t5: __): RightCurriedFunction2<T2, T5, R>;
-        (t1: T1, t2: __, t3: T3, t4: __, t5: T5): RightCurriedFunction2<T2, T4, R>;
-        (t1: T1, t2: __, t3: __, t4: T4, t5: T5): RightCurriedFunction2<T2, T3, R>;
-        (t1: T1, t2: T2, t3: T3, t4: T4, t5: __): RightCurriedFunction1<T5, R>;
-        (t1: T1, t2: T2, t3: T3, t4: __, t5: T5): RightCurriedFunction1<T4, R>;
-        (t1: T1, t2: T2, t3: __, t4: T4, t5: T5): RightCurriedFunction1<T3, R>;
-        (t1: T1, t2: __, t3: T3, t4: T4, t5: T5): RightCurriedFunction1<T2, R>;
-        (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5): R;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-        * @see _.curry
-        **/
-        curry<T1, R>(this: LoDashImplicitWrapper<(t1: T1) => R>, arity?: number):
-            LoDashImplicitWrapper<CurriedFunction1<T1, R>>;
-
-        /**
-        * @see _.curry
-        **/
-        curry<T1, T2, R>(this: LoDashImplicitWrapper<(t1: T1, t2: T2) => R>, arity?: number):
-            LoDashImplicitWrapper<CurriedFunction2<T1, T2, R>>;
-
-        /**
-        * @see _.curry
-        **/
-        curry<T1, T2, T3, R>(this: LoDashImplicitWrapper<(t1: T1, t2: T2, t3: T3) => R>, arity?: number):
-            LoDashImplicitWrapper<CurriedFunction3<T1, T2, T3, R>>;
-
-        /**
-        * @see _.curry
-        **/
-        curry<T1, T2, T3, T4, R>(this: LoDashImplicitWrapper<(t1: T1, t2: T2, t3: T3, t4: T4) => R>, arity?: number):
-            LoDashImplicitWrapper<CurriedFunction4<T1, T2, T3, T4, R>>;
-
-        /**
-        * @see _.curry
-        **/
-        curry<T1, T2, T3, T4, T5, R>(this: LoDashImplicitWrapper<(t1: T1, t2: T2, t3: T3, t4: T4, t5: T5) => R>, arity?: number):
-            LoDashImplicitWrapper<CurriedFunction5<T1, T2, T3, T4, T5, R>>;
-
-        /**
-        * @see _.curry
-        **/
-        curry(arity?: number): LoDashImplicitWrapper<(...args: any[]) => any>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-        * @see _.curry
-        **/
-        curry<T1, R>(this: LoDashExplicitWrapper<(t1: T1) => R>):
-            LoDashExplicitWrapper<CurriedFunction1<T1, R>>;
-
-        /**
-        * @see _.curry
-        **/
-        curry<T1, T2, R>(this: LoDashExplicitWrapper<(t1: T1, t2: T2) => R>):
-            LoDashExplicitWrapper<CurriedFunction2<T1, T2, R>>;
-
-        /**
-        * @see _.curry
-        **/
-        curry<T1, T2, T3, R>(this: LoDashExplicitWrapper<(t1: T1, t2: T2, t3: T3) => R>):
-            LoDashExplicitWrapper<CurriedFunction3<T1, T2, T3, R>>;
-
-        /**
-        * @see _.curry
-        **/
-        curry<T1, T2, T3, T4, R>(this: LoDashExplicitWrapper<(t1: T1, t2: T2, t3: T3, t4: T4) => R>):
-            LoDashExplicitWrapper<CurriedFunction4<T1, T2, T3, T4, R>>;
-
-        /**
-        * @see _.curry
-        **/
-        curry<T1, T2, T3, T4, T5, R>(this: LoDashExplicitWrapper<(t1: T1, t2: T2, t3: T3, t4: T4, t5: T5) => R>):
-            LoDashExplicitWrapper<CurriedFunction5<T1, T2, T3, T4, T5, R>>;
-
-        /**
-        * @see _.curry
-        **/
-        curry(arity?: number): LoDashExplicitWrapper<(...args: any[]) => any>;
-    }
-
-    // curryRight
-
-    interface CurryRight {
-        /**
-         * This method is like _.curry except that arguments are applied to func in the manner of _.partialRight
-         * instead of _.partial.
-         * @param func The function to curry.
-         * @param arity The arity of func.
-         * @return Returns the new curried function.
-         */
-        <T1, R>(func: (t1: T1) => R, arity?: number):
-            RightCurriedFunction1<T1, R>;
-        /**
-         * This method is like _.curry except that arguments are applied to func in the manner of _.partialRight
-         * instead of _.partial.
-         * @param func The function to curry.
-         * @param arity The arity of func.
-         * @return Returns the new curried function.
-         */
-        <T1, T2, R>(func: (t1: T1, t2: T2) => R, arity?: number):
-            RightCurriedFunction2<T1, T2, R>;
-        /**
-         * This method is like _.curry except that arguments are applied to func in the manner of _.partialRight
-         * instead of _.partial.
-         * @param func The function to curry.
-         * @param arity The arity of func.
-         * @return Returns the new curried function.
-         */
-        <T1, T2, T3, R>(func: (t1: T1, t2: T2, t3: T3) => R, arity?: number):
-            RightCurriedFunction3<T1, T2, T3, R>;
-        /**
-         * This method is like _.curry except that arguments are applied to func in the manner of _.partialRight
-         * instead of _.partial.
-         * @param func The function to curry.
-         * @param arity The arity of func.
-         * @return Returns the new curried function.
-         */
-        <T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arity?: number):
-            RightCurriedFunction4<T1, T2, T3, T4, R>;
-        /**
-         * This method is like _.curry except that arguments are applied to func in the manner of _.partialRight
-         * instead of _.partial.
-         * @param func The function to curry.
-         * @param arity The arity of func.
-         * @return Returns the new curried function.
-         */
-        <T1, T2, T3, T4, T5, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5) => R, arity?: number):
-            RightCurriedFunction5<T1, T2, T3, T4, T5, R>;
-        /**
-         * This method is like _.curry except that arguments are applied to func in the manner of _.partialRight
-         * instead of _.partial.
-         * @param func The function to curry.
-         * @param arity The arity of func.
-         * @return Returns the new curried function.
-         */
-        (func: (...args: any[]) => any, arity?: number): (...args: any[]) => any;
-
-        placeholder: __;
-    }
-
-    interface LoDashStatic {
-        curryRight: CurryRight;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.curryRight
-         **/
-        curryRight<T1, R>(this: LoDashImplicitWrapper<(t1: T1) => R>, arity?: number):
-            LoDashImplicitWrapper<RightCurriedFunction1<T1, R>>;
-
-        /**
-         * @see _.curryRight
-         **/
-        curryRight<T1, T2, R>(this: LoDashImplicitWrapper<(t1: T1, t2: T2) => R>, arity?: number):
-            LoDashImplicitWrapper<RightCurriedFunction2<T1, T2, R>>;
-
-        /**
-         * @see _.curryRight
-         **/
-        curryRight<T1, T2, T3, R>(this: LoDashImplicitWrapper<(t1: T1, t2: T2, t3: T3) => R>, arity?: number):
-            LoDashImplicitWrapper<RightCurriedFunction3<T1, T2, T3, R>>;
-
-        /**
-         * @see _.curryRight
-         **/
-        curryRight<T1, T2, T3, T4, R>(this: LoDashImplicitWrapper<(t1: T1, t2: T2, t3: T3, t4: T4) => R>, arity?: number):
-            LoDashImplicitWrapper<RightCurriedFunction4<T1, T2, T3, T4, R>>;
-
-        /**
-         * @see _.curryRight
-         **/
-        curryRight<T1, T2, T3, T4, T5, R>(this: LoDashImplicitWrapper<(t1: T1, t2: T2, t3: T3, t4: T4, t5: T5) => R>, arity?: number):
-            LoDashImplicitWrapper<RightCurriedFunction5<T1, T2, T3, T4, T5, R>>;
-
-        /**
-         * @see _.curryRight
-         **/
-        curryRight(arity?: number): LoDashImplicitWrapper<(...args: any[]) => any>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.curryRight
-         **/
-        curryRight<T1, R>(this: LoDashExplicitWrapper<(t1: T1) => R>, arity?: number):
-            LoDashExplicitWrapper<RightCurriedFunction1<T1, R>>;
-
-        /**
-         * @see _.curryRight
-         **/
-        curryRight<T1, T2, R>(this: LoDashExplicitWrapper<(t1: T1, t2: T2) => R>, arity?: number):
-            LoDashExplicitWrapper<RightCurriedFunction2<T1, T2, R>>;
-
-        /**
-         * @see _.curryRight
-         **/
-        curryRight<T1, T2, T3, R>(this: LoDashExplicitWrapper<(t1: T1, t2: T2, t3: T3) => R>, arity?: number):
-            LoDashExplicitWrapper<RightCurriedFunction3<T1, T2, T3, R>>;
-
-        /**
-         * @see _.curryRight
-         **/
-        curryRight<T1, T2, T3, T4, R>(this: LoDashExplicitWrapper<(t1: T1, t2: T2, t3: T3, t4: T4) => R>, arity?: number):
-            LoDashExplicitWrapper<RightCurriedFunction4<T1, T2, T3, T4, R>>;
-
-        /**
-         * @see _.curryRight
-         **/
-        curryRight<T1, T2, T3, T4, T5, R>(this: LoDashExplicitWrapper<(t1: T1, t2: T2, t3: T3, t4: T4, t5: T5) => R>, arity?: number):
-            LoDashExplicitWrapper<RightCurriedFunction5<T1, T2, T3, T4, T5, R>>;
-
-        /**
-         * @see _.curryRight
-         **/
-        curryRight(arity?: number): LoDashExplicitWrapper<(...args: any[]) => any>;
-    }
-
-    // debounce
-
-    interface DebounceSettings {
-        /**
-         * Specify invoking on the leading edge of the timeout.
-         */
-        leading?: boolean;
-
-        /**
-         * The maximum time func is allowed to be delayed before it’s invoked.
-         */
-        maxWait?: number;
-
-        /**
-         * Specify invoking on the trailing edge of the timeout.
-         */
-        trailing?: boolean;
-    }
-
-    interface LoDashStatic {
-        /**
-         * Creates a debounced function that delays invoking func until after wait milliseconds have elapsed since
-         * the last time the debounced function was invoked. The debounced function comes with a cancel method to
-         * cancel delayed invocations and a flush method to immediately invoke them. Provide an options object to
-         * indicate that func should be invoked on the leading and/or trailing edge of the wait timeout. Subsequent
-         * calls to the debounced function return the result of the last func invocation.
-         *
-         * Note: If leading and trailing options are true, func is invoked on the trailing edge of the timeout only
-         * if the the debounced function is invoked more than once during the wait timeout.
-         *
-         * See David Corbacho’s article for details over the differences between _.debounce and _.throttle.
-         *
-         * @param func The function to debounce.
-         * @param wait The number of milliseconds to delay.
-         * @param options The options object.
-         * @param options.leading Specify invoking on the leading edge of the timeout.
-         * @param options.maxWait The maximum time func is allowed to be delayed before it’s invoked.
-         * @param options.trailing Specify invoking on the trailing edge of the timeout.
-         * @return Returns the new debounced function.
-         */
-        debounce<T extends (...args: any[]) => any>(
-            func: T,
-            wait?: number,
-            options?: DebounceSettings
-        ): T & Cancelable;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.debounce
-         */
-        debounce(
-            wait?: number,
-            options?: DebounceSettings
-        ): LoDashImplicitWrapper<TValue & Cancelable>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.debounce
-         */
-        debounce(
-            wait?: number,
-            options?: DebounceSettings
-        ): LoDashExplicitWrapper<TValue & Cancelable>;
-    }
-
-    // defer
-
-    interface LoDashStatic {
-        /**
-         * Defers invoking the func until the current call stack has cleared. Any additional arguments are provided to
-         * func when it’s invoked.
-         *
-         * @param func The function to defer.
-         * @param args The arguments to invoke the function with.
-         * @return Returns the timer id.
-         */
-        defer(
-            func: (...args: any[]) => any,
-            ...args: any[]
-        ): number;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.defer
-         */
-        defer(...args: any[]): LoDashImplicitWrapper<number>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.defer
-         */
-        defer(...args: any[]): LoDashExplicitWrapper<number>;
-    }
-
-    // delay
-
-    interface LoDashStatic {
-        /**
-         * Invokes func after wait milliseconds. Any additional arguments are provided to func when it’s invoked.
-         *
-         * @param func The function to delay.
-         * @param wait The number of milliseconds to delay invocation.
-         * @param args The arguments to invoke the function with.
-         * @return Returns the timer id.
-         */
-        delay(
-            func: (...args: any[]) => any,
-            wait: number,
-            ...args: any[]
-        ): number;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.delay
-         */
-        delay(
-            wait: number,
-            ...args: any[]
-        ): LoDashImplicitWrapper<number>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.delay
-         */
-        delay(
-            wait: number,
-            ...args: any[]
-        ): LoDashExplicitWrapper<number>;
-    }
-
-    // flip
-
-    interface LoDashStatic {
-        /**
-         * Creates a function that invokes `func` with arguments reversed.
-         *
-         * @category Function
-         * @param func The function to flip arguments for.
-         * @returns Returns the new function.
-         * @example
-         *
-         * var flipped = _.flip(function() {
-         *   return _.toArray(arguments);
-         * });
-         *
-         * flipped('a', 'b', 'c', 'd');
-         * // => ['d', 'c', 'b', 'a']
-         */
-        flip<T extends (...args: any[]) => any>(func: T): T;
-    }
-
-    interface LoDashWrapper<TValue> {
-        /**
-         * @see _.flip
-         */
-        flip(): this;
-    }
-
-    // memoize
-
-    interface MemoizedFunction {
-        cache: MapCache;
-    }
-
-    interface LoDashStatic {
-        /**
-         * Creates a function that memoizes the result of func. If resolver is provided it determines the cache key for
-         * storing the result based on the arguments provided to the memoized function. By default, the first argument
-         * provided to the memoized function is coerced to a string and used as the cache key. The func is invoked with
-         * the this binding of the memoized function.
-         *
-         * @param func The function to have its output memoized.
-         * @param resolver The function to resolve the cache key.
-         * @return Returns the new memoizing function.
-         */
-        memoize: {
-            <T extends (...args: any[]) => any>(func: T, resolver?: (...args: any[]) => any): T & MemoizedFunction;
-            Cache: MapCacheConstructor;
-        };
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.memoize
-         */
-        memoize(resolver?: (...args: any[]) => any): LoDashImplicitWrapper<TValue & MemoizedFunction>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.memoize
-         */
-        memoize(resolver?: (...args: any[]) => any): LoDashExplicitWrapper<TValue & MemoizedFunction>;
-    }
-
-    // negate
-
-    interface LoDashStatic {
-        /**
-         * Creates a function that negates the result of the predicate func. The func predicate is invoked with
-         * the this binding and arguments of the created function.
-         *
-         * @param predicate The predicate to negate.
-         * @return Returns the new function.
-         */
-        negate<T extends (...args: any[]) => any>(predicate: T): T;
-    }
-
-    interface LoDashWrapper<TValue> {
-        /**
-         * @see _.negate
-         */
-        negate(): this;
-    }
-
-    // once
-
-    interface LoDashStatic {
-        /**
-         * Creates a function that is restricted to invoking func once. Repeat calls to the function return the value
-         * of the first call. The func is invoked with the this binding and arguments of the created function.
-         *
-         * @param func The function to restrict.
-         * @return Returns the new restricted function.
-         */
-        once<T extends (...args: any[]) => any>(func: T): T;
-    }
-
-    interface LoDashWrapper<TValue> {
-        /**
-         * @see _.once
-         */
-        once(): this;
-    }
-
-    // overArgs
-
-    interface LoDashStatic {
-        /**
-         * Creates a function that runs each argument through a corresponding transform function.
-         *
-         * @param func The function to wrap.
-         * @param transforms The functions to transform arguments, specified as individual functions or arrays
-         * of functions.
-         * @return Returns the new function.
-         */
-        overArgs(
-            func: (...args: any[]) => any,
-            ...transforms: Array<Many<(...args: any[]) => any>>
-        ): (...args: any[]) => any;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.overArgs
-         */
-        overArgs(...transforms: Array<Many<(...args: any[]) => any>>): LoDashImplicitWrapper<(...args: any[]) => any>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.overArgs
-         */
-        overArgs(...transforms: Array<Many<(...args: any[]) => any>>): LoDashExplicitWrapper<(...args: any[]) => any>;
-    }
-
-    // partial
-
-    interface LoDashStatic {
-        /**
-        * Creates a function that, when called, invokes func with any additional partial arguments
-        * prepended to those provided to the new function. This method is similar to _.bind except
-        * it does not alter the this binding.
-        * @param func The function to partially apply arguments to.
-        * @param args Arguments to be partially applied.
-        * @return The new partially applied function.
-        **/
-        partial: Partial;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.partial
-         */
-        partial: ImplicitPartial;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.partial
-         */
-        partial: ExplicitPartial;
-    }
-
-    /** The placeholder, to be used in curried functions */
-    type __ = LoDashStatic;
-
-    type Function0<R> = () => R;
-    type Function1<T1, R> = (t1: T1) => R;
-    type Function2<T1, T2, R> = (t1: T1, t2: T2) => R;
-    type Function3<T1, T2, T3, R> = (t1: T1, t2: T2, t3: T3) => R;
-    type Function4<T1, T2, T3, T4, R> = (t1: T1, t2: T2, t3: T3, t4: T4) => R;
-
-    interface Partial {
-        // arity 0
-        <R>(func: Function0<R>): Function0<R>;
-        // arity 1
-        <T1, R>(func: Function1<T1, R>): Function1<T1, R>;
-        <T1, R>(func: Function1<T1, R>, arg1: T1): Function0<R>;
-        // arity 2
-        <T1, T2, R>(func: Function2<T1, T2, R>):                      Function2<T1, T2, R>;
-        <T1, T2, R>(func: Function2<T1, T2, R>, arg1: T1):            Function1<    T2, R>;
-        <T1, T2, R>(func: Function2<T1, T2, R>, plc1: __, arg2: T2):  Function1<T1,     R>;
-        <T1, T2, R>(func: Function2<T1, T2, R>, arg1: T1, arg2: T2):  Function0<        R>;
-        // arity 3
-        <T1, T2, T3, R>(func: Function3<T1, T2, T3, R>):                                Function3<T1, T2, T3, R>;
-        <T1, T2, T3, R>(func: Function3<T1, T2, T3, R>, arg1: T1):                      Function2<    T2, T3, R>;
-        <T1, T2, T3, R>(func: Function3<T1, T2, T3, R>, plc1: __, arg2: T2):            Function2<T1,     T3, R>;
-        <T1, T2, T3, R>(func: Function3<T1, T2, T3, R>, arg1: T1, arg2: T2):            Function1<        T3, R>;
-        <T1, T2, T3, R>(func: Function3<T1, T2, T3, R>, plc1: __, plc2: __, arg3: T3):  Function2<T1, T2,     R>;
-        <T1, T2, T3, R>(func: Function3<T1, T2, T3, R>, arg1: T1, plc2: __, arg3: T3):  Function1<    T2,     R>;
-        <T1, T2, T3, R>(func: Function3<T1, T2, T3, R>, plc1: __, arg2: T2, arg3: T3):  Function1<T1,         R>;
-        <T1, T2, T3, R>(func: Function3<T1, T2, T3, R>, arg1: T1, arg2: T2, arg3: T3):  Function0<            R>;
-        // arity 4
-        <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>):                                          Function4<T1, T2, T3, T4, R>;
-        <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1):                                Function3<    T2, T3, T4, R>;
-        <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, plc1: __, arg2: T2):                      Function3<T1,     T3, T4, R>;
-        <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, arg2: T2):                      Function2<        T3, T4, R>;
-        <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, plc1: __, plc2: __, arg3: T3):            Function3<T1, T2,     T4, R>;
-        <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, plc2: __, arg3: T3):            Function2<    T2,     T4, R>;
-        <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, plc1: __, arg2: T2, arg3: T3):            Function2<T1,         T4, R>;
-        <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, arg2: T2, arg3: T3):            Function1<            T4, R>;
-        <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, plc1: __, plc2: __, plc3: __, arg4: T4):  Function3<T1, T2, T3,     R>;
-        <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, plc2: __, plc3: __, arg4: T4):  Function2<    T2, T3,     R>;
-        <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, plc1: __, arg2: T2, plc3: __, arg4: T4):  Function2<T1,     T3,     R>;
-        <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, arg2: T2, plc3: __, arg4: T4):  Function1<        T3,     R>;
-        <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, plc1: __, plc2: __, arg3: T3, arg4: T4):  Function2<T1, T2,         R>;
-        <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, plc2: __, arg3: T3, arg4: T4):  Function1<    T2,         R>;
-        <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, plc1: __, arg2: T2, arg3: T3, arg4: T4):  Function1<T1,             R>;
-        <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, arg2: T2, arg3: T3, arg4: T4):  Function0<                R>;
-        // catch-all
-        (func: (...args: any[]) => any, ...args: any[]): (...args: any[]) => any;
-
-        placeholder: __;
-    }
-
-    interface ImplicitPartial {
-        // arity 0
-        <R>(this: LoDashImplicitWrapper<Function0<R>>): LoDashImplicitWrapper<Function0<R>>;
-        // arity 1
-        <T1, R>(this: LoDashImplicitWrapper<Function1<T1, R>>): LoDashImplicitWrapper<Function1<T1, R>>;
-        <T1, R>(this: LoDashImplicitWrapper<Function1<T1, R>>, arg1: T1): LoDashImplicitWrapper<Function0<R>>;
-        // arity 2
-        <T1, T2, R>(this: LoDashImplicitWrapper<Function2<T1, T2, R>>):                      LoDashImplicitWrapper<Function2<T1, T2, R>>;
-        <T1, T2, R>(this: LoDashImplicitWrapper<Function2<T1, T2, R>>, arg1: T1):            LoDashImplicitWrapper<Function1<    T2, R>>;
-        <T1, T2, R>(this: LoDashImplicitWrapper<Function2<T1, T2, R>>, plc1: __, arg2: T2):  LoDashImplicitWrapper<Function1<T1,     R>>;
-        <T1, T2, R>(this: LoDashImplicitWrapper<Function2<T1, T2, R>>, arg1: T1, arg2: T2):  LoDashImplicitWrapper<Function0<        R>>;
-        // arity 3
-        <T1, T2, T3, R>(this: LoDashImplicitWrapper<Function3<T1, T2, T3, R>>):                                LoDashImplicitWrapper<Function3<T1, T2, T3, R>>;
-        <T1, T2, T3, R>(this: LoDashImplicitWrapper<Function3<T1, T2, T3, R>>, arg1: T1):                      LoDashImplicitWrapper<Function2<    T2, T3, R>>;
-        <T1, T2, T3, R>(this: LoDashImplicitWrapper<Function3<T1, T2, T3, R>>, plc1: __, arg2: T2):            LoDashImplicitWrapper<Function2<T1,     T3, R>>;
-        <T1, T2, T3, R>(this: LoDashImplicitWrapper<Function3<T1, T2, T3, R>>, arg1: T1, arg2: T2):            LoDashImplicitWrapper<Function1<        T3, R>>;
-        <T1, T2, T3, R>(this: LoDashImplicitWrapper<Function3<T1, T2, T3, R>>, plc1: __, plc2: __, arg3: T3):  LoDashImplicitWrapper<Function2<T1, T2,     R>>;
-        <T1, T2, T3, R>(this: LoDashImplicitWrapper<Function3<T1, T2, T3, R>>, arg1: T1, plc2: __, arg3: T3):  LoDashImplicitWrapper<Function1<    T2,     R>>;
-        <T1, T2, T3, R>(this: LoDashImplicitWrapper<Function3<T1, T2, T3, R>>, plc1: __, arg2: T2, arg3: T3):  LoDashImplicitWrapper<Function1<T1,         R>>;
-        <T1, T2, T3, R>(this: LoDashImplicitWrapper<Function3<T1, T2, T3, R>>, arg1: T1, arg2: T2, arg3: T3):  LoDashImplicitWrapper<Function0<            R>>;
-        // arity 4
-        <T1, T2, T3, T4, R>(this: LoDashImplicitWrapper<Function4<T1, T2, T3, T4, R>>):                                          LoDashImplicitWrapper<Function4<T1, T2, T3, T4, R>>;
-        <T1, T2, T3, T4, R>(this: LoDashImplicitWrapper<Function4<T1, T2, T3, T4, R>>, arg1: T1):                                LoDashImplicitWrapper<Function3<    T2, T3, T4, R>>;
-        <T1, T2, T3, T4, R>(this: LoDashImplicitWrapper<Function4<T1, T2, T3, T4, R>>, plc1: __, arg2: T2):                      LoDashImplicitWrapper<Function3<T1,     T3, T4, R>>;
-        <T1, T2, T3, T4, R>(this: LoDashImplicitWrapper<Function4<T1, T2, T3, T4, R>>, arg1: T1, arg2: T2):                      LoDashImplicitWrapper<Function2<        T3, T4, R>>;
-        <T1, T2, T3, T4, R>(this: LoDashImplicitWrapper<Function4<T1, T2, T3, T4, R>>, plc1: __, plc2: __, arg3: T3):            LoDashImplicitWrapper<Function3<T1, T2,     T4, R>>;
-        <T1, T2, T3, T4, R>(this: LoDashImplicitWrapper<Function4<T1, T2, T3, T4, R>>, arg1: T1, plc2: __, arg3: T3):            LoDashImplicitWrapper<Function2<    T2,     T4, R>>;
-        <T1, T2, T3, T4, R>(this: LoDashImplicitWrapper<Function4<T1, T2, T3, T4, R>>, plc1: __, arg2: T2, arg3: T3):            LoDashImplicitWrapper<Function2<T1,         T4, R>>;
-        <T1, T2, T3, T4, R>(this: LoDashImplicitWrapper<Function4<T1, T2, T3, T4, R>>, arg1: T1, arg2: T2, arg3: T3):            LoDashImplicitWrapper<Function1<            T4, R>>;
-        <T1, T2, T3, T4, R>(this: LoDashImplicitWrapper<Function4<T1, T2, T3, T4, R>>, plc1: __, plc2: __, plc3: __, arg4: T4):  LoDashImplicitWrapper<Function3<T1, T2, T3,     R>>;
-        <T1, T2, T3, T4, R>(this: LoDashImplicitWrapper<Function4<T1, T2, T3, T4, R>>, arg1: T1, plc2: __, plc3: __, arg4: T4):  LoDashImplicitWrapper<Function2<    T2, T3,     R>>;
-        <T1, T2, T3, T4, R>(this: LoDashImplicitWrapper<Function4<T1, T2, T3, T4, R>>, plc1: __, arg2: T2, plc3: __, arg4: T4):  LoDashImplicitWrapper<Function2<T1,     T3,     R>>;
-        <T1, T2, T3, T4, R>(this: LoDashImplicitWrapper<Function4<T1, T2, T3, T4, R>>, arg1: T1, arg2: T2, plc3: __, arg4: T4):  LoDashImplicitWrapper<Function1<        T3,     R>>;
-        <T1, T2, T3, T4, R>(this: LoDashImplicitWrapper<Function4<T1, T2, T3, T4, R>>, plc1: __, plc2: __, arg3: T3, arg4: T4):  LoDashImplicitWrapper<Function2<T1, T2,         R>>;
-        <T1, T2, T3, T4, R>(this: LoDashImplicitWrapper<Function4<T1, T2, T3, T4, R>>, arg1: T1, plc2: __, arg3: T3, arg4: T4):  LoDashImplicitWrapper<Function1<    T2,         R>>;
-        <T1, T2, T3, T4, R>(this: LoDashImplicitWrapper<Function4<T1, T2, T3, T4, R>>, plc1: __, arg2: T2, arg3: T3, arg4: T4):  LoDashImplicitWrapper<Function1<T1,             R>>;
-        <T1, T2, T3, T4, R>(this: LoDashImplicitWrapper<Function4<T1, T2, T3, T4, R>>, arg1: T1, arg2: T2, arg3: T3, arg4: T4):  LoDashImplicitWrapper<Function0<                R>>;
-        // catch-all
-        (...args: any[]): LoDashImplicitWrapper<(...args: any[]) => any>;
-    }
-
-    interface ExplicitPartial {
-        // arity 0
-        <R>(this: LoDashExplicitWrapper<Function0<R>>): LoDashExplicitWrapper<Function0<R>>;
-        // arity 1
-        <T1, R>(this: LoDashExplicitWrapper<Function1<T1, R>>): LoDashExplicitWrapper<Function1<T1, R>>;
-        <T1, R>(this: LoDashExplicitWrapper<Function1<T1, R>>, arg1: T1): LoDashExplicitWrapper<Function0<R>>;
-        // arity 2
-        <T1, T2, R>(this: LoDashExplicitWrapper<Function2<T1, T2, R>>):                      LoDashExplicitWrapper<Function2<T1, T2, R>>;
-        <T1, T2, R>(this: LoDashExplicitWrapper<Function2<T1, T2, R>>, arg1: T1):            LoDashExplicitWrapper<Function1<    T2, R>>;
-        <T1, T2, R>(this: LoDashExplicitWrapper<Function2<T1, T2, R>>, plc1: __, arg2: T2):  LoDashExplicitWrapper<Function1<T1,     R>>;
-        <T1, T2, R>(this: LoDashExplicitWrapper<Function2<T1, T2, R>>, arg1: T1, arg2: T2):  LoDashExplicitWrapper<Function0<        R>>;
-        // arity 3
-        <T1, T2, T3, R>(this: LoDashExplicitWrapper<Function3<T1, T2, T3, R>>):                                LoDashExplicitWrapper<Function3<T1, T2, T3, R>>;
-        <T1, T2, T3, R>(this: LoDashExplicitWrapper<Function3<T1, T2, T3, R>>, arg1: T1):                      LoDashExplicitWrapper<Function2<    T2, T3, R>>;
-        <T1, T2, T3, R>(this: LoDashExplicitWrapper<Function3<T1, T2, T3, R>>, plc1: __, arg2: T2):            LoDashExplicitWrapper<Function2<T1,     T3, R>>;
-        <T1, T2, T3, R>(this: LoDashExplicitWrapper<Function3<T1, T2, T3, R>>, arg1: T1, arg2: T2):            LoDashExplicitWrapper<Function1<        T3, R>>;
-        <T1, T2, T3, R>(this: LoDashExplicitWrapper<Function3<T1, T2, T3, R>>, plc1: __, plc2: __, arg3: T3):  LoDashExplicitWrapper<Function2<T1, T2,     R>>;
-        <T1, T2, T3, R>(this: LoDashExplicitWrapper<Function3<T1, T2, T3, R>>, arg1: T1, plc2: __, arg3: T3):  LoDashExplicitWrapper<Function1<    T2,     R>>;
-        <T1, T2, T3, R>(this: LoDashExplicitWrapper<Function3<T1, T2, T3, R>>, plc1: __, arg2: T2, arg3: T3):  LoDashExplicitWrapper<Function1<T1,         R>>;
-        <T1, T2, T3, R>(this: LoDashExplicitWrapper<Function3<T1, T2, T3, R>>, arg1: T1, arg2: T2, arg3: T3):  LoDashExplicitWrapper<Function0<            R>>;
-        // arity 4
-        <T1, T2, T3, T4, R>(this: LoDashExplicitWrapper<Function4<T1, T2, T3, T4, R>>):                                          LoDashExplicitWrapper<Function4<T1, T2, T3, T4, R>>;
-        <T1, T2, T3, T4, R>(this: LoDashExplicitWrapper<Function4<T1, T2, T3, T4, R>>, arg1: T1):                                LoDashExplicitWrapper<Function3<    T2, T3, T4, R>>;
-        <T1, T2, T3, T4, R>(this: LoDashExplicitWrapper<Function4<T1, T2, T3, T4, R>>, plc1: __, arg2: T2):                      LoDashExplicitWrapper<Function3<T1,     T3, T4, R>>;
-        <T1, T2, T3, T4, R>(this: LoDashExplicitWrapper<Function4<T1, T2, T3, T4, R>>, arg1: T1, arg2: T2):                      LoDashExplicitWrapper<Function2<        T3, T4, R>>;
-        <T1, T2, T3, T4, R>(this: LoDashExplicitWrapper<Function4<T1, T2, T3, T4, R>>, plc1: __, plc2: __, arg3: T3):            LoDashExplicitWrapper<Function3<T1, T2,     T4, R>>;
-        <T1, T2, T3, T4, R>(this: LoDashExplicitWrapper<Function4<T1, T2, T3, T4, R>>, arg1: T1, plc2: __, arg3: T3):            LoDashExplicitWrapper<Function2<    T2,     T4, R>>;
-        <T1, T2, T3, T4, R>(this: LoDashExplicitWrapper<Function4<T1, T2, T3, T4, R>>, plc1: __, arg2: T2, arg3: T3):            LoDashExplicitWrapper<Function2<T1,         T4, R>>;
-        <T1, T2, T3, T4, R>(this: LoDashExplicitWrapper<Function4<T1, T2, T3, T4, R>>, arg1: T1, arg2: T2, arg3: T3):            LoDashExplicitWrapper<Function1<            T4, R>>;
-        <T1, T2, T3, T4, R>(this: LoDashExplicitWrapper<Function4<T1, T2, T3, T4, R>>, plc1: __, plc2: __, plc3: __, arg4: T4):  LoDashExplicitWrapper<Function3<T1, T2, T3,     R>>;
-        <T1, T2, T3, T4, R>(this: LoDashExplicitWrapper<Function4<T1, T2, T3, T4, R>>, arg1: T1, plc2: __, plc3: __, arg4: T4):  LoDashExplicitWrapper<Function2<    T2, T3,     R>>;
-        <T1, T2, T3, T4, R>(this: LoDashExplicitWrapper<Function4<T1, T2, T3, T4, R>>, plc1: __, arg2: T2, plc3: __, arg4: T4):  LoDashExplicitWrapper<Function2<T1,     T3,     R>>;
-        <T1, T2, T3, T4, R>(this: LoDashExplicitWrapper<Function4<T1, T2, T3, T4, R>>, arg1: T1, arg2: T2, plc3: __, arg4: T4):  LoDashExplicitWrapper<Function1<        T3,     R>>;
-        <T1, T2, T3, T4, R>(this: LoDashExplicitWrapper<Function4<T1, T2, T3, T4, R>>, plc1: __, plc2: __, arg3: T3, arg4: T4):  LoDashExplicitWrapper<Function2<T1, T2,         R>>;
-        <T1, T2, T3, T4, R>(this: LoDashExplicitWrapper<Function4<T1, T2, T3, T4, R>>, arg1: T1, plc2: __, arg3: T3, arg4: T4):  LoDashExplicitWrapper<Function1<    T2,         R>>;
-        <T1, T2, T3, T4, R>(this: LoDashExplicitWrapper<Function4<T1, T2, T3, T4, R>>, plc1: __, arg2: T2, arg3: T3, arg4: T4):  LoDashExplicitWrapper<Function1<T1,             R>>;
-        <T1, T2, T3, T4, R>(this: LoDashExplicitWrapper<Function4<T1, T2, T3, T4, R>>, arg1: T1, arg2: T2, arg3: T3, arg4: T4):  LoDashExplicitWrapper<Function0<                R>>;
-        // catch-all
-        (...args: any[]): LoDashExplicitWrapper<(...args: any[]) => any>;
-    }
-
-    // partialRight
-
-    interface LoDashStatic {
-        /**
-        * This method is like _.partial except that partial arguments are appended to those provided
-        * to the new function.
-        * @param func The function to partially apply arguments to.
-        * @param args Arguments to be partially applied.
-        * @return The new partially applied function.
-        **/
-        partialRight: PartialRight;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.partialRight
-         */
-        partialRight: ImplicitPartialRight;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.partialRight
-         */
-        partialRight: ExplicitPartialRight;
-    }
-
-    interface PartialRight {
-        // arity 0
-        <R>(func: Function0<R>): Function0<R>;
-        // arity 1
-        <T1, R>(func: Function1<T1, R>): Function1<T1, R>;
-        <T1, R>(func: Function1<T1, R>, arg1: T1): Function0<R>;
-        // arity 2
-        <T1, T2, R>(func: Function2<T1, T2, R>):                      Function2<T1, T2, R>;
-        <T1, T2, R>(func: Function2<T1, T2, R>, arg1: T1, plc2: __):  Function1<    T2, R>;
-        <T1, T2, R>(func: Function2<T1, T2, R>,           arg2: T2):  Function1<T1,     R>;
-        <T1, T2, R>(func: Function2<T1, T2, R>, arg1: T1, arg2: T2):  Function0<        R>;
-        // arity 3
-        <T1, T2, T3, R>(func: Function3<T1, T2, T3, R>):                                Function3<T1, T2, T3, R>;
-        <T1, T2, T3, R>(func: Function3<T1, T2, T3, R>, arg1: T1, plc2: __, plc3: __):  Function2<    T2, T3, R>;
-        <T1, T2, T3, R>(func: Function3<T1, T2, T3, R>,           arg2: T2, plc3: __):  Function2<T1,     T3, R>;
-        <T1, T2, T3, R>(func: Function3<T1, T2, T3, R>, arg1: T1, arg2: T2, plc3: __):  Function1<        T3, R>;
-        <T1, T2, T3, R>(func: Function3<T1, T2, T3, R>,                     arg3: T3):  Function2<T1, T2,     R>;
-        <T1, T2, T3, R>(func: Function3<T1, T2, T3, R>, arg1: T1, plc2: __, arg3: T3):  Function1<    T2,     R>;
-        <T1, T2, T3, R>(func: Function3<T1, T2, T3, R>,           arg2: T2, arg3: T3):  Function1<T1,         R>;
-        <T1, T2, T3, R>(func: Function3<T1, T2, T3, R>, arg1: T1, arg2: T2, arg3: T3):  Function0<            R>;
-        // arity 4
-        <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>):                                          Function4<T1, T2, T3, T4, R>;
-        <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, plc2: __, plc3: __, plc4: __):  Function3<    T2, T3, T4, R>;
-        <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>,           arg2: T2, plc3: __, plc4: __):  Function3<T1,     T3, T4, R>;
-        <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, arg2: T2, plc3: __, plc4: __):  Function2<        T3, T4, R>;
-        <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>,                     arg3: T3, plc4: __):  Function3<T1, T2,     T4, R>;
-        <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, plc2: __, arg3: T3, plc4: __):  Function2<    T2,     T4, R>;
-        <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>,           arg2: T2, arg3: T3, plc4: __):  Function2<T1,         T4, R>;
-        <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, arg2: T2, arg3: T3, plc4: __):  Function1<            T4, R>;
-        <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>,                               arg4: T4):  Function3<T1, T2, T3,     R>;
-        <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, plc2: __, plc3: __, arg4: T4):  Function2<    T2, T3,     R>;
-        <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>,           arg2: T2, plc3: __, arg4: T4):  Function2<T1,     T3,     R>;
-        <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, arg2: T2, plc3: __, arg4: T4):  Function1<        T3,     R>;
-        <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>,                     arg3: T3, arg4: T4):  Function2<T1, T2,         R>;
-        <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, plc2: __, arg3: T3, arg4: T4):  Function1<    T2,         R>;
-        <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>,           arg2: T2, arg3: T3, arg4: T4):  Function1<T1,             R>;
-        <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, arg2: T2, arg3: T3, arg4: T4):  Function0<                R>;
-        // catch-all
-        (func: (...args: any[]) => any, ...args: any[]): (...args: any[]) => any;
-
-        placeholder: __;
-    }
-
-    interface ImplicitPartialRight {
-        // arity 0
-        <R>(this: LoDashImplicitWrapper<Function0<R>>): LoDashImplicitWrapper<Function0<R>>;
-        // arity 1
-        <T1, R>(this: LoDashImplicitWrapper<Function1<T1, R>>): LoDashImplicitWrapper<Function1<T1, R>>;
-        <T1, R>(this: LoDashImplicitWrapper<Function1<T1, R>>, arg1: T1): LoDashImplicitWrapper<Function0<R>>;
-        // arity 2
-        <T1, T2, R>(this: LoDashImplicitWrapper<Function2<T1, T2, R>>):                      LoDashImplicitWrapper<Function2<T1, T2, R>>;
-        <T1, T2, R>(this: LoDashImplicitWrapper<Function2<T1, T2, R>>, arg1: T1, plc2: __):  LoDashImplicitWrapper<Function1<    T2, R>>;
-        <T1, T2, R>(this: LoDashImplicitWrapper<Function2<T1, T2, R>>,           arg2: T2):  LoDashImplicitWrapper<Function1<T1,     R>>;
-        <T1, T2, R>(this: LoDashImplicitWrapper<Function2<T1, T2, R>>, arg1: T1, arg2: T2):  LoDashImplicitWrapper<Function0<        R>>;
-        // arity 3
-        <T1, T2, T3, R>(this: LoDashImplicitWrapper<Function3<T1, T2, T3, R>>):                                LoDashImplicitWrapper<Function3<T1, T2, T3, R>>;
-        <T1, T2, T3, R>(this: LoDashImplicitWrapper<Function3<T1, T2, T3, R>>, arg1: T1, plc2: __, plc3: __):  LoDashImplicitWrapper<Function2<    T2, T3, R>>;
-        <T1, T2, T3, R>(this: LoDashImplicitWrapper<Function3<T1, T2, T3, R>>,           arg2: T2, plc3: __):  LoDashImplicitWrapper<Function2<T1,     T3, R>>;
-        <T1, T2, T3, R>(this: LoDashImplicitWrapper<Function3<T1, T2, T3, R>>, arg1: T1, arg2: T2, plc3: __):  LoDashImplicitWrapper<Function1<        T3, R>>;
-        <T1, T2, T3, R>(this: LoDashImplicitWrapper<Function3<T1, T2, T3, R>>,                     arg3: T3):  LoDashImplicitWrapper<Function2<T1, T2,     R>>;
-        <T1, T2, T3, R>(this: LoDashImplicitWrapper<Function3<T1, T2, T3, R>>, arg1: T1, plc2: __, arg3: T3):  LoDashImplicitWrapper<Function1<    T2,     R>>;
-        <T1, T2, T3, R>(this: LoDashImplicitWrapper<Function3<T1, T2, T3, R>>,           arg2: T2, arg3: T3):  LoDashImplicitWrapper<Function1<T1,         R>>;
-        <T1, T2, T3, R>(this: LoDashImplicitWrapper<Function3<T1, T2, T3, R>>, arg1: T1, arg2: T2, arg3: T3):  LoDashImplicitWrapper<Function0<            R>>;
-        // arity 4
-        <T1, T2, T3, T4, R>(this: LoDashImplicitWrapper<Function4<T1, T2, T3, T4, R>>):                                          LoDashImplicitWrapper<Function4<T1, T2, T3, T4, R>>;
-        <T1, T2, T3, T4, R>(this: LoDashImplicitWrapper<Function4<T1, T2, T3, T4, R>>, arg1: T1, plc2: __, plc3: __, plc4: __):  LoDashImplicitWrapper<Function3<    T2, T3, T4, R>>;
-        <T1, T2, T3, T4, R>(this: LoDashImplicitWrapper<Function4<T1, T2, T3, T4, R>>,           arg2: T2, plc3: __, plc4: __):  LoDashImplicitWrapper<Function3<T1,     T3, T4, R>>;
-        <T1, T2, T3, T4, R>(this: LoDashImplicitWrapper<Function4<T1, T2, T3, T4, R>>, arg1: T1, arg2: T2, plc3: __, plc4: __):  LoDashImplicitWrapper<Function2<        T3, T4, R>>;
-        <T1, T2, T3, T4, R>(this: LoDashImplicitWrapper<Function4<T1, T2, T3, T4, R>>,                     arg3: T3, plc4: __):  LoDashImplicitWrapper<Function3<T1, T2,     T4, R>>;
-        <T1, T2, T3, T4, R>(this: LoDashImplicitWrapper<Function4<T1, T2, T3, T4, R>>, arg1: T1, plc2: __, arg3: T3, plc4: __):  LoDashImplicitWrapper<Function2<    T2,     T4, R>>;
-        <T1, T2, T3, T4, R>(this: LoDashImplicitWrapper<Function4<T1, T2, T3, T4, R>>,           arg2: T2, arg3: T3, plc4: __):  LoDashImplicitWrapper<Function2<T1,         T4, R>>;
-        <T1, T2, T3, T4, R>(this: LoDashImplicitWrapper<Function4<T1, T2, T3, T4, R>>, arg1: T1, arg2: T2, arg3: T3, plc4: __):  LoDashImplicitWrapper<Function1<            T4, R>>;
-        <T1, T2, T3, T4, R>(this: LoDashImplicitWrapper<Function4<T1, T2, T3, T4, R>>,                               arg4: T4):  LoDashImplicitWrapper<Function3<T1, T2, T3,     R>>;
-        <T1, T2, T3, T4, R>(this: LoDashImplicitWrapper<Function4<T1, T2, T3, T4, R>>, arg1: T1, plc2: __, plc3: __, arg4: T4):  LoDashImplicitWrapper<Function2<    T2, T3,     R>>;
-        <T1, T2, T3, T4, R>(this: LoDashImplicitWrapper<Function4<T1, T2, T3, T4, R>>,           arg2: T2, plc3: __, arg4: T4):  LoDashImplicitWrapper<Function2<T1,     T3,     R>>;
-        <T1, T2, T3, T4, R>(this: LoDashImplicitWrapper<Function4<T1, T2, T3, T4, R>>, arg1: T1, arg2: T2, plc3: __, arg4: T4):  LoDashImplicitWrapper<Function1<        T3,     R>>;
-        <T1, T2, T3, T4, R>(this: LoDashImplicitWrapper<Function4<T1, T2, T3, T4, R>>,                     arg3: T3, arg4: T4):  LoDashImplicitWrapper<Function2<T1, T2,         R>>;
-        <T1, T2, T3, T4, R>(this: LoDashImplicitWrapper<Function4<T1, T2, T3, T4, R>>, arg1: T1, plc2: __, arg3: T3, arg4: T4):  LoDashImplicitWrapper<Function1<    T2,         R>>;
-        <T1, T2, T3, T4, R>(this: LoDashImplicitWrapper<Function4<T1, T2, T3, T4, R>>,           arg2: T2, arg3: T3, arg4: T4):  LoDashImplicitWrapper<Function1<T1,             R>>;
-        <T1, T2, T3, T4, R>(this: LoDashImplicitWrapper<Function4<T1, T2, T3, T4, R>>, arg1: T1, arg2: T2, arg3: T3, arg4: T4):  LoDashImplicitWrapper<Function0<                R>>;
-        // catch-all
-        (...args: any[]): LoDashImplicitWrapper<(...args: any[]) => any>;
-    }
-
-    interface ExplicitPartialRight {
-        // arity 0
-        <R>(this: LoDashExplicitWrapper<Function0<R>>): LoDashExplicitWrapper<Function0<R>>;
-        // arity 1
-        <T1, R>(this: LoDashExplicitWrapper<Function1<T1, R>>): LoDashExplicitWrapper<Function1<T1, R>>;
-        <T1, R>(this: LoDashExplicitWrapper<Function1<T1, R>>, arg1: T1): LoDashExplicitWrapper<Function0<R>>;
-        // arity 2
-        <T1, T2, R>(this: LoDashExplicitWrapper<Function2<T1, T2, R>>):                      LoDashExplicitWrapper<Function2<T1, T2, R>>;
-        <T1, T2, R>(this: LoDashExplicitWrapper<Function2<T1, T2, R>>, arg1: T1, plc2: __):  LoDashExplicitWrapper<Function1<    T2, R>>;
-        <T1, T2, R>(this: LoDashExplicitWrapper<Function2<T1, T2, R>>,           arg2: T2):  LoDashExplicitWrapper<Function1<T1,     R>>;
-        <T1, T2, R>(this: LoDashExplicitWrapper<Function2<T1, T2, R>>, arg1: T1, arg2: T2):  LoDashExplicitWrapper<Function0<        R>>;
-        // arity 3
-        <T1, T2, T3, R>(this: LoDashExplicitWrapper<Function3<T1, T2, T3, R>>):                                LoDashExplicitWrapper<Function3<T1, T2, T3, R>>;
-        <T1, T2, T3, R>(this: LoDashExplicitWrapper<Function3<T1, T2, T3, R>>, arg1: T1, plc2: __, plc3: __):  LoDashExplicitWrapper<Function2<    T2, T3, R>>;
-        <T1, T2, T3, R>(this: LoDashExplicitWrapper<Function3<T1, T2, T3, R>>,           arg2: T2, plc3: __):  LoDashExplicitWrapper<Function2<T1,     T3, R>>;
-        <T1, T2, T3, R>(this: LoDashExplicitWrapper<Function3<T1, T2, T3, R>>, arg1: T1, arg2: T2, plc3: __):  LoDashExplicitWrapper<Function1<        T3, R>>;
-        <T1, T2, T3, R>(this: LoDashExplicitWrapper<Function3<T1, T2, T3, R>>,                     arg3: T3):  LoDashExplicitWrapper<Function2<T1, T2,     R>>;
-        <T1, T2, T3, R>(this: LoDashExplicitWrapper<Function3<T1, T2, T3, R>>, arg1: T1, plc2: __, arg3: T3):  LoDashExplicitWrapper<Function1<    T2,     R>>;
-        <T1, T2, T3, R>(this: LoDashExplicitWrapper<Function3<T1, T2, T3, R>>,           arg2: T2, arg3: T3):  LoDashExplicitWrapper<Function1<T1,         R>>;
-        <T1, T2, T3, R>(this: LoDashExplicitWrapper<Function3<T1, T2, T3, R>>, arg1: T1, arg2: T2, arg3: T3):  LoDashExplicitWrapper<Function0<            R>>;
-        // arity 4
-        <T1, T2, T3, T4, R>(this: LoDashExplicitWrapper<Function4<T1, T2, T3, T4, R>>):                                          LoDashExplicitWrapper<Function4<T1, T2, T3, T4, R>>;
-        <T1, T2, T3, T4, R>(this: LoDashExplicitWrapper<Function4<T1, T2, T3, T4, R>>, arg1: T1, plc2: __, plc3: __, plc4: __):  LoDashExplicitWrapper<Function3<    T2, T3, T4, R>>;
-        <T1, T2, T3, T4, R>(this: LoDashExplicitWrapper<Function4<T1, T2, T3, T4, R>>,           arg2: T2, plc3: __, plc4: __):  LoDashExplicitWrapper<Function3<T1,     T3, T4, R>>;
-        <T1, T2, T3, T4, R>(this: LoDashExplicitWrapper<Function4<T1, T2, T3, T4, R>>, arg1: T1, arg2: T2, plc3: __, plc4: __):  LoDashExplicitWrapper<Function2<        T3, T4, R>>;
-        <T1, T2, T3, T4, R>(this: LoDashExplicitWrapper<Function4<T1, T2, T3, T4, R>>,                     arg3: T3, plc4: __):  LoDashExplicitWrapper<Function3<T1, T2,     T4, R>>;
-        <T1, T2, T3, T4, R>(this: LoDashExplicitWrapper<Function4<T1, T2, T3, T4, R>>, arg1: T1, plc2: __, arg3: T3, plc4: __):  LoDashExplicitWrapper<Function2<    T2,     T4, R>>;
-        <T1, T2, T3, T4, R>(this: LoDashExplicitWrapper<Function4<T1, T2, T3, T4, R>>,           arg2: T2, arg3: T3, plc4: __):  LoDashExplicitWrapper<Function2<T1,         T4, R>>;
-        <T1, T2, T3, T4, R>(this: LoDashExplicitWrapper<Function4<T1, T2, T3, T4, R>>, arg1: T1, arg2: T2, arg3: T3, plc4: __):  LoDashExplicitWrapper<Function1<            T4, R>>;
-        <T1, T2, T3, T4, R>(this: LoDashExplicitWrapper<Function4<T1, T2, T3, T4, R>>,                               arg4: T4):  LoDashExplicitWrapper<Function3<T1, T2, T3,     R>>;
-        <T1, T2, T3, T4, R>(this: LoDashExplicitWrapper<Function4<T1, T2, T3, T4, R>>, arg1: T1, plc2: __, plc3: __, arg4: T4):  LoDashExplicitWrapper<Function2<    T2, T3,     R>>;
-        <T1, T2, T3, T4, R>(this: LoDashExplicitWrapper<Function4<T1, T2, T3, T4, R>>,           arg2: T2, plc3: __, arg4: T4):  LoDashExplicitWrapper<Function2<T1,     T3,     R>>;
-        <T1, T2, T3, T4, R>(this: LoDashExplicitWrapper<Function4<T1, T2, T3, T4, R>>, arg1: T1, arg2: T2, plc3: __, arg4: T4):  LoDashExplicitWrapper<Function1<        T3,     R>>;
-        <T1, T2, T3, T4, R>(this: LoDashExplicitWrapper<Function4<T1, T2, T3, T4, R>>,                     arg3: T3, arg4: T4):  LoDashExplicitWrapper<Function2<T1, T2,         R>>;
-        <T1, T2, T3, T4, R>(this: LoDashExplicitWrapper<Function4<T1, T2, T3, T4, R>>, arg1: T1, plc2: __, arg3: T3, arg4: T4):  LoDashExplicitWrapper<Function1<    T2,         R>>;
-        <T1, T2, T3, T4, R>(this: LoDashExplicitWrapper<Function4<T1, T2, T3, T4, R>>,           arg2: T2, arg3: T3, arg4: T4):  LoDashExplicitWrapper<Function1<T1,             R>>;
-        <T1, T2, T3, T4, R>(this: LoDashExplicitWrapper<Function4<T1, T2, T3, T4, R>>, arg1: T1, arg2: T2, arg3: T3, arg4: T4):  LoDashExplicitWrapper<Function0<                R>>;
-        // catch-all
-        (...args: any[]): LoDashExplicitWrapper<(...args: any[]) => any>;
-    }
-
-    // rearg
-
-    interface LoDashStatic {
-        /**
-         * Creates a function that invokes func with arguments arranged according to the specified indexes where the
-         * argument value at the first index is provided as the first argument, the argument value at the second index
-         * is provided as the second argument, and so on.
-         * @param func The function to rearrange arguments for.
-         * @param indexes The arranged argument indexes, specified as individual indexes or arrays of indexes.
-         * @return Returns the new function.
-         */
-        rearg(func: (...args: any[]) => any, ...indexes: Array<Many<number>>): (...args: any[]) => any;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.rearg
-         */
-        rearg(...indexes: Array<Many<number>>): LoDashImplicitWrapper<(...args: any[]) => any>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.rearg
-         */
-        rearg(...indexes: Array<Many<number>>): LoDashExplicitWrapper<(...args: any[]) => any>;
-    }
-
-    // rest
-
-    interface LoDashStatic {
-        /**
-         * Creates a function that invokes func with the this binding of the created function and arguments from start
-         * and beyond provided as an array.
-         *
-         * Note: This method is based on the rest parameter.
-         *
-         * @param func The function to apply a rest parameter to.
-         * @param start The start position of the rest parameter.
-         * @return Returns the new function.
-         */
-        rest(
-            func: (...args: any[]) => any,
-            start?: number
-        ): (...args: any[]) => any;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.rest
-         */
-        rest(start?: number): LoDashImplicitWrapper<(...args: any[]) => any>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.rest
-         */
-        rest(start?: number): LoDashExplicitWrapper<(...args: any[]) => any>;
-    }
-
-    // spread
-
-    interface LoDashStatic {
-        /**
-         * Creates a function that invokes func with the this binding of the created function and an array of arguments
-         * much like Function#apply.
-         *
-         * Note: This method is based on the spread operator.
-         *
-         * @param func The function to spread arguments over.
-         * @return Returns the new function.
-         */
-        spread<TResult>(func: (...args: any[]) => TResult): (...args: any[]) => TResult;
-
-        /**
-         * @see _.spread
-         */
-        spread<TResult>(func: (...args: any[]) => TResult, start: number): (...args: any[]) => TResult;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.spread
-         */
-        spread<TResult>(this: LoDashImplicitWrapper<(...args: any[]) => TResult>): LoDashImplicitWrapper<(...args: any[]) => TResult>;
-
-        /**
-         * @see _.spread
-         */
-        spread<TResult>(this: LoDashImplicitWrapper<(...args: any[]) => TResult>, start: number): LoDashImplicitWrapper<(...args: any[]) => TResult>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.spread
-         */
-        spread<TResult>(this: LoDashExplicitWrapper<(...args: any[]) => TResult>): LoDashExplicitWrapper<(...args: any[]) => TResult>;
-
-        /**
-         * @see _.spread
-         */
-        spread<TResult>(this: LoDashExplicitWrapper<(...args: any[]) => TResult>, start: number): LoDashExplicitWrapper<(...args: any[]) => TResult>;
-    }
-
-    // throttle
-
-    interface ThrottleSettings {
-        /**
-         * If you'd like to disable the leading-edge call, pass this as false.
-         */
-        leading?: boolean;
-
-        /**
-         * If you'd like to disable the execution on the trailing-edge, pass false.
-         */
-        trailing?: boolean;
-    }
-
-    interface LoDashStatic {
-        /**
-         * Creates a throttled function that only invokes func at most once per every wait milliseconds. The throttled
-         * function comes with a cancel method to cancel delayed invocations and a flush method to immediately invoke
-         * them. Provide an options object to indicate that func should be invoked on the leading and/or trailing edge
-         * of the wait timeout. Subsequent calls to the throttled function return the result of the last func call.
-         *
-         * Note: If leading and trailing options are true, func is invoked on the trailing edge of the timeout only if
-         * the the throttled function is invoked more than once during the wait timeout.
-         *
-         * @param func The function to throttle.
-         * @param wait The number of milliseconds to throttle invocations to.
-         * @param options The options object.
-         * @param options.leading Specify invoking on the leading edge of the timeout.
-         * @param options.trailing Specify invoking on the trailing edge of the timeout.
-         * @return Returns the new throttled function.
-         */
-        throttle<T extends (...args: any[]) => any>(
-            func: T,
-            wait?: number,
-            options?: ThrottleSettings
-        ): T & Cancelable;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.throttle
-         */
-        throttle(
-            wait?: number,
-            options?: ThrottleSettings
-        ): LoDashImplicitWrapper<TValue & Cancelable>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.throttle
-         */
-        throttle(
-            wait?: number,
-            options?: ThrottleSettings
-        ): LoDashExplicitWrapper<TValue & Cancelable>;
-    }
-
-    // unary
-
-    interface LoDashStatic {
-        /**
-         * Creates a function that accepts up to one argument, ignoring any
-         * additional arguments.
-         *
-         * @category Function
-         * @param func The function to cap arguments for.
-         * @returns Returns the new function.
-         * @example
-         *
-         * _.map(['6', '8', '10'], _.unary(parseInt));
-         * // => [6, 8, 10]
-         */
-        unary<T, TResult>(func: (arg1: T, ...args: any[]) => TResult): (arg1: T) => TResult;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.unary
-         */
-        unary<T, TResult>(this: LoDashImplicitWrapper<(arg1: T, ...args: any[]) => TResult>): LoDashImplicitWrapper<(arg1: T) => TResult>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.unary
-         */
-        unary<T, TResult>(this: LoDashExplicitWrapper<(arg1: T, ...args: any[]) => TResult>): LoDashExplicitWrapper<(arg1: T) => TResult>;
-    }
-
-    // wrap
-
-    interface LoDashStatic {
-        /**
-         * Creates a function that provides value to the wrapper function as its first argument. Any additional
-         * arguments provided to the function are appended to those provided to the wrapper function. The wrapper is
-         * invoked with the this binding of the created function.
-         *
-         * @param value The value to wrap.
-         * @param wrapper The wrapper function.
-         * @return Returns the new function.
-         */
-        wrap<T, TArgs, TResult>(
-            value: T,
-            wrapper: (value: T, ...args: TArgs[]) => TResult
-        ): (...args: TArgs[]) => TResult;
-
-        /**
-         * @see _.wrap
-         */
-        wrap<T, TResult>(
-            value: T,
-            wrapper: (value: T, ...args: any[]) => TResult
-        ): (...args: any[]) => TResult;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.wrap
-         */
-        wrap<TArgs, TResult>(
-            wrapper: (value: TValue, ...args: TArgs[]) => TResult
-        ): LoDashImplicitWrapper<(...args: TArgs[]) => TResult>;
-
-        /**
-         * @see _.wrap
-         */
-        wrap<TResult>(
-            wrapper: (value: TValue, ...args: any[]) => TResult
-        ): LoDashImplicitWrapper<(...args: any[]) => TResult>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.wrap
-         */
-        /**
-         * @see _.wrap
-         */
-        wrap<TArgs, TResult>(
-            wrapper: (value: TValue, ...args: TArgs[]) => TResult
-        ): LoDashExplicitWrapper<(...args: TArgs[]) => TResult>;
-
-        /**
-         * @see _.wrap
-         */
-        wrap<TResult>(
-            wrapper: (value: TValue, ...args: any[]) => TResult
-        ): LoDashExplicitWrapper<(...args: any[]) => TResult>;
-    }
-}
diff --git a/jtg js/node_modules/@types/lodash/common/lang.d.ts b/jtg js/node_modules/@types/lodash/common/lang.d.ts
deleted file mode 100644
index a185402988f4178d1c5a9e267470b144a8237ad2..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/common/lang.d.ts	
+++ /dev/null
@@ -1,2065 +0,0 @@
-import _ = require("../index");
-declare module "../index" {
-    // castArray
-
-    interface LoDashStatic {
-        /**
-         * Casts value as an array if it’s not one.
-         *
-         * @param value The value to inspect.
-         * @return Returns the cast array.
-         */
-        castArray<T>(value?: Many<T>): T[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.castArray
-         */
-        castArray<T>(this: LoDashImplicitWrapper<Many<T>>): LoDashImplicitWrapper<T[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.castArray
-         */
-        castArray<T>(this: LoDashExplicitWrapper<Many<T>>): LoDashExplicitWrapper<T[]>;
-    }
-
-    // clone
-
-    interface LoDashStatic {
-        /**
-         * Creates a shallow clone of value.
-         *
-         * Note: This method is loosely based on the structured clone algorithm and supports cloning arrays,
-         * array buffers, booleans, date objects, maps, numbers, Object objects, regexes, sets, strings, symbols,
-         * and typed arrays. The own enumerable properties of arguments objects are cloned as plain objects. An empty
-         * object is returned for uncloneable values such as error objects, functions, DOM nodes, and WeakMaps.
-         *
-         * @param value The value to clone.
-         * @return Returns the cloned value.
-         */
-        clone<T>(value: T): T;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.clone
-         */
-        clone(): TValue;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.clone
-         */
-        clone(): this;
-    }
-
-    // cloneDeep
-
-    interface LoDashStatic {
-        /**
-         * This method is like _.clone except that it recursively clones value.
-         *
-         * @param value The value to recursively clone.
-         * @return Returns the deep cloned value.
-         */
-        cloneDeep<T>(value: T): T;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.cloneDeep
-         */
-        cloneDeep(): TValue;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.cloneDeep
-         */
-        cloneDeep(): this;
-    }
-
-    // cloneDeepWith
-
-    type CloneDeepWithCustomizer<TObject> = (value: any, key: number | string | undefined, object: TObject | undefined, stack: any) => any;
-
-    interface LoDashStatic {
-        /**
-         * This method is like _.cloneWith except that it recursively clones value.
-         *
-         * @param value The value to recursively clone.
-         * @param customizer The function to customize cloning.
-         * @return Returns the deep cloned value.
-         */
-        cloneDeepWith<T>(
-            value: T,
-            customizer: CloneDeepWithCustomizer<T>
-        ): any;
-
-        /**
-         * @see _.cloneDeepWith
-         */
-        cloneDeepWith<T>(value: T): T;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.cloneDeepWith
-         */
-        cloneDeepWith(
-            customizer: CloneDeepWithCustomizer<TValue>
-        ): any;
-
-        /**
-         * @see _.cloneDeepWith
-         */
-        cloneDeepWith(): TValue;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.cloneDeepWith
-         */
-        cloneDeepWith(
-            customizer: CloneDeepWithCustomizer<TValue>
-        ): LoDashExplicitWrapper<any>;
-
-        /**
-         * @see _.cloneDeepWith
-         */
-        cloneDeepWith(): this;
-    }
-
-    // cloneWith
-
-    type CloneWithCustomizer<TValue, TResult> = (value: TValue, key: number | string | undefined, object: any, stack: any) => TResult;
-
-    interface LoDashStatic {
-        /**
-         * This method is like _.clone except that it accepts customizer which is invoked to produce the cloned value.
-         * If customizer returns undefined cloning is handled by the method instead.
-         *
-         * @param value The value to clone.
-         * @param customizer The function to customize cloning.
-         * @return Returns the cloned value.
-         */
-        cloneWith<T, TResult extends object | string | number | boolean | null>(
-            value: T,
-            customizer: CloneWithCustomizer<T, TResult>
-        ): TResult;
-
-        /**
-         * @see _.cloneWith
-         */
-        cloneWith<T, TResult>(
-            value: T,
-            customizer: CloneWithCustomizer<T, TResult | undefined>
-        ): TResult | T;
-
-        /**
-         * @see _.cloneWith
-         */
-        cloneWith<T>(value: T): T;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.cloneWith
-         */
-        cloneWith<TResult extends object | string | number | boolean | null>(
-            customizer: CloneWithCustomizer<TValue, TResult>
-        ): TResult;
-
-        /**
-         * @see _.cloneWith
-         */
-        cloneWith<TResult>(
-            customizer: CloneWithCustomizer<TValue, TResult | undefined>
-        ): TResult | TValue;
-
-        /**
-         * @see _.cloneWith
-         */
-        cloneWith(): TValue;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.cloneWith
-         */
-        cloneWith<TResult extends object | string | number | boolean | null>(
-            customizer: CloneWithCustomizer<TValue, TResult>
-        ): LoDashExplicitWrapper<TResult>;
-
-        /**
-         * @see _.cloneWith
-         */
-        cloneWith<TResult>(
-            customizer: CloneWithCustomizer<TValue, TResult | undefined>
-        ): LoDashExplicitWrapper<TResult | TValue>;
-
-        /**
-         * @see _.cloneWith
-         */
-        cloneWith(): this;
-    }
-
-    // conformsTo
-
-    interface LoDashStatic {
-        /**
-         * Checks if object conforms to source by invoking the predicate properties of source with the
-         * corresponding property values of object.
-         *
-         * Note: This method is equivalent to _.conforms when source is partially applied.
-         */
-        conformsTo<T>(object: T, source: ConformsPredicateObject<T>): boolean;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.conformsTo
-         */
-        conformsTo<T>(this: LoDashImplicitWrapper<T>, source: ConformsPredicateObject<T>): boolean;
-        // Note: we can't use TValue here,  because it generates a typescript error when strictFunctionTypes is enabled.
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.conformsTo
-         */
-        conformsTo<T>(this: LoDashExplicitWrapper<T>, source: ConformsPredicateObject<T>): LoDashExplicitWrapper<boolean>;
-        // Note: we can't use TValue here,  because it generates a typescript error when strictFunctionTypes is enabled.
-    }
-
-    type CondPair<T, R> = [(val: T) => boolean, (val: T) => R];
-
-    // eq
-
-    interface LoDashStatic {
-        /**
-         * Performs a [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
-         * comparison between two values to determine if they are equivalent.
-         *
-         * @category Lang
-         * @param value The value to compare.
-         * @param other The other value to compare.
-         * @returns Returns `true` if the values are equivalent, else `false`.
-         * @example
-         *
-         * var object = { 'user': 'fred' };
-         * var other = { 'user': 'fred' };
-         *
-         * _.eq(object, object);
-         * // => true
-         *
-         * _.eq(object, other);
-         * // => false
-         *
-         * _.eq('a', 'a');
-         * // => true
-         *
-         * _.eq('a', Object('a'));
-         * // => false
-         *
-         * _.eq(NaN, NaN);
-         * // => true
-         */
-        eq(
-            value: any,
-            other: any
-        ): boolean;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.eq
-         */
-        eq(
-            other: any
-        ): boolean;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.eq
-         */
-        eq(
-            other: any
-        ): LoDashExplicitWrapper<boolean>;
-    }
-
-    // gt
-
-    interface LoDashStatic {
-        /**
-         * Checks if value is greater than other.
-         *
-         * @param value The value to compare.
-         * @param other The other value to compare.
-         * @return Returns true if value is greater than other, else false.
-         */
-        gt(
-            value: any,
-            other: any
-        ): boolean;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.gt
-         */
-        gt(other: any): boolean;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.gt
-         */
-        gt(other: any): LoDashExplicitWrapper<boolean>;
-    }
-
-    // gte
-
-    interface LoDashStatic {
-        /**
-         * Checks if value is greater than or equal to other.
-         *
-         * @param value The value to compare.
-         * @param other The other value to compare.
-         * @return Returns true if value is greater than or equal to other, else false.
-         */
-        gte(
-            value: any,
-            other: any
-        ): boolean;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.gte
-         */
-        gte(other: any): boolean;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.gte
-         */
-        gte(other: any): LoDashExplicitWrapper<boolean>;
-    }
-
-    // isArguments
-
-    interface LoDashStatic {
-        /**
-         * Checks if value is classified as an arguments object.
-         *
-         * @param value The value to check.
-         * @return Returns true if value is correctly classified, else false.
-         */
-        isArguments(value?: any): value is IArguments;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.isArguments
-         */
-        isArguments(): boolean;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.isArguments
-         */
-        isArguments(): LoDashExplicitWrapper<boolean>;
-    }
-
-    // isArray
-
-    interface LoDashStatic {
-        /**
-         * Checks if value is classified as an Array object.
-         * @param value The value to check.
-         *
-         * @return Returns true if value is correctly classified, else false.
-         */
-        isArray(value?: any): value is any[];
-
-        /**
-         * DEPRECATED
-         */
-        isArray<T>(value?: any): value is any[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.isArray
-         */
-        isArray(): boolean;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.isArray
-         */
-        isArray(): LoDashExplicitWrapper<boolean>;
-    }
-
-    // isArrayBuffer
-
-    interface LoDashStatic {
-        /**
-         * Checks if value is classified as an ArrayBuffer object.
-         *
-         * @param value The value to check.
-         * @return Returns true if value is correctly classified, else false.
-         */
-        isArrayBuffer(value?: any): value is ArrayBuffer;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.isArrayBuffer
-         */
-        isArrayBuffer(): boolean;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.isArrayBuffer
-         */
-        isArrayBuffer(): LoDashExplicitWrapper<boolean>;
-    }
-
-    // isArrayLike
-
-    interface LoDashStatic {
-        /**
-         * Checks if `value` is array-like. A value is considered array-like if it's
-         * not a function and has a `value.length` that's an integer greater than or
-         * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
-         *
-         * @category Lang
-         * @param value The value to check.
-         * @returns Returns `true` if `value` is array-like, else `false`.
-         * @example
-         *
-         * _.isArrayLike([1, 2, 3]);
-         * // => true
-         *
-         * _.isArrayLike(document.body.children);
-         * // => true
-         *
-         * _.isArrayLike('abc');
-         * // => true
-         *
-         * _.isArrayLike(_.noop);
-         * // => false
-         */
-        isArrayLike<T>(value: T & string & number): boolean; // should only match if T = any
-
-        /**
-         * @see _.isArrayLike
-         */
-        isArrayLike(value: ((...args: any[]) => any) | null | undefined): value is never;
-
-        /**
-         * @see _.isArrayLike
-         */
-        isArrayLike(value: any): value is { length: number };
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.isArrayLike
-         */
-        isArrayLike(): boolean;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.isArrayLike
-         */
-        isArrayLike(): LoDashExplicitWrapper<boolean>;
-    }
-
-    // isArrayLikeObject
-
-    interface LoDashStatic {
-        /**
-         * This method is like `_.isArrayLike` except that it also checks if `value`
-         * is an object.
-         *
-         * @category Lang
-         * @param value The value to check.
-         * @returns Returns `true` if `value` is an array-like object, else `false`.
-         * @example
-         *
-         * _.isArrayLikeObject([1, 2, 3]);
-         * // => true
-         *
-         * _.isArrayLikeObject(document.body.children);
-         * // => true
-         *
-         * _.isArrayLikeObject('abc');
-         * // => false
-         *
-         * _.isArrayLikeObject(_.noop);
-         * // => false
-         */
-        isArrayLikeObject<T>(value: T & string & number): boolean; // should only match if T = any
-
-        /**
-         * @see _.isArrayLike
-         */
-        // tslint:disable-next-line:ban-types (type guard doesn't seem to work correctly without the Function type)
-        isArrayLikeObject(value: ((...args: any[]) => any) | Function | string | boolean | number | null | undefined): value is never;
-
-        /**
-         * @see _.isArrayLike
-         */
-        // tslint:disable-next-line:ban-types (type guard doesn't seem to work correctly without the Function type)
-        isArrayLikeObject<T extends object>(value: T | ((...args: any[]) => any) | Function | string | boolean | number | null | undefined): value is T & { length: number };
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.isArrayLikeObject
-         */
-        isArrayLikeObject(): boolean;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.isArrayLikeObject
-         */
-        isArrayLikeObject(): LoDashExplicitWrapper<boolean>;
-    }
-
-    // isBoolean
-
-    interface LoDashStatic {
-        /**
-         * Checks if value is classified as a boolean primitive or object.
-         *
-         * @param value The value to check.
-         * @return Returns true if value is correctly classified, else false.
-         */
-        isBoolean(value?: any): value is boolean;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.isBoolean
-         */
-        isBoolean(): boolean;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.isBoolean
-         */
-        isBoolean(): LoDashExplicitWrapper<boolean>;
-    }
-
-    // isBuffer
-
-    interface LoDashStatic {
-        /**
-         * Checks if value is a buffer.
-         *
-         * @param value The value to check.
-         * @return Returns true if value is a buffer, else false.
-         */
-        isBuffer(value?: any): boolean;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.isBuffer
-         */
-        isBuffer(): boolean;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.isBuffer
-         */
-        isBuffer(): LoDashExplicitWrapper<boolean>;
-    }
-
-    // isDate
-
-    interface LoDashStatic {
-        /**
-         * Checks if value is classified as a Date object.
-         * @param value The value to check.
-         *
-         * @return Returns true if value is correctly classified, else false.
-         */
-        isDate(value?: any): value is Date;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.isDate
-         */
-        isDate(): boolean;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.isDate
-         */
-        isDate(): LoDashExplicitWrapper<boolean>;
-    }
-
-    // isElement
-
-    interface LoDashStatic {
-        /**
-         * Checks if value is a DOM element.
-         *
-         * @param value The value to check.
-         * @return Returns true if value is a DOM element, else false.
-         */
-        isElement(value?: any): boolean;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.isElement
-         */
-        isElement(): boolean;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.isElement
-         */
-        isElement(): LoDashExplicitWrapper<boolean>;
-    }
-
-    // isEmpty
-
-    interface LoDashStatic {
-        /**
-         * Checks if value is empty. A value is considered empty unless it’s an arguments object, array, string, or
-         * jQuery-like collection with a length greater than 0 or an object with own enumerable properties.
-         *
-         * @param value The value to inspect.
-         * @return Returns true if value is empty, else false.
-         */
-        isEmpty(value?: any): boolean;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.isEmpty
-         */
-        isEmpty(): boolean;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.isEmpty
-         */
-        isEmpty(): LoDashExplicitWrapper<boolean>;
-    }
-
-    // isEqual
-
-    interface LoDashStatic {
-        /**
-         * Performs a deep comparison between two values to determine if they are
-         * equivalent.
-         *
-         * **Note:** This method supports comparing arrays, array buffers, booleans,
-         * date objects, error objects, maps, numbers, `Object` objects, regexes,
-         * sets, strings, symbols, and typed arrays. `Object` objects are compared
-         * by their own, not inherited, enumerable properties. Functions and DOM
-         * nodes are **not** supported.
-         *
-         * @category Lang
-         * @param value The value to compare.
-         * @param other The other value to compare.
-         * @returns Returns `true` if the values are equivalent, else `false`.
-         * @example
-         *
-         * var object = { 'user': 'fred' };
-         * var other = { 'user': 'fred' };
-         *
-         * _.isEqual(object, other);
-         * // => true
-         *
-         * object === other;
-         * // => false
-         */
-        isEqual(
-            value: any,
-            other: any
-        ): boolean;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.isEqual
-         */
-        isEqual(
-            other: any
-        ): boolean;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.isEqual
-         */
-        isEqual(
-            other: any
-        ): LoDashExplicitWrapper<boolean>;
-    }
-
-    // isEqualWith
-
-    type IsEqualCustomizer = (value: any, other: any, indexOrKey: PropertyName | undefined, parent: any, otherParent: any, stack: any) => boolean|undefined;
-
-    interface LoDashStatic {
-        /**
-         * This method is like `_.isEqual` except that it accepts `customizer` which is
-         * invoked to compare values. If `customizer` returns `undefined` comparisons are
-         * handled by the method instead. The `customizer` is invoked with up to seven arguments:
-         * (objValue, othValue [, index|key, object, other, stack]).
-         *
-         * @category Lang
-         * @param value The value to compare.
-         * @param other The other value to compare.
-         * @param [customizer] The function to customize comparisons.
-         * @returns Returns `true` if the values are equivalent, else `false`.
-         * @example
-         *
-         * function isGreeting(value) {
-         *   return /^h(?:i|ello)$/.test(value);
-         * }
-         *
-         * function customizer(objValue, othValue) {
-         *   if (isGreeting(objValue) && isGreeting(othValue)) {
-         *     return true;
-         *   }
-         * }
-         *
-         * var array = ['hello', 'goodbye'];
-         * var other = ['hi', 'goodbye'];
-         *
-         * _.isEqualWith(array, other, customizer);
-         * // => true
-         */
-        isEqualWith(
-            value: any,
-            other: any,
-            customizer?: IsEqualCustomizer
-        ): boolean;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.isEqualWith
-         */
-        isEqualWith(
-            other: any,
-            customizer?: IsEqualCustomizer
-        ): boolean;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.isEqualWith
-         */
-        isEqualWith(
-            other: any,
-            customizer?: IsEqualCustomizer
-        ): LoDashExplicitWrapper<boolean>;
-    }
-
-    // isError
-
-    interface LoDashStatic {
-        /**
-         * Checks if value is an Error, EvalError, RangeError, ReferenceError, SyntaxError, TypeError, or URIError
-         * object.
-         *
-         * @param value The value to check.
-         * @return Returns true if value is an error object, else false.
-         */
-        isError(value: any): value is Error;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.isError
-         */
-        isError(): boolean;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.isError
-         */
-        isError(): LoDashExplicitWrapper<boolean>;
-    }
-
-    // isFinite
-
-    interface LoDashStatic {
-        /**
-         * Checks if value is a finite primitive number.
-         *
-         * Note: This method is based on Number.isFinite.
-         *
-         * @param value The value to check.
-         * @return Returns true if value is a finite number, else false.
-         */
-        isFinite(value?: any): boolean;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.isFinite
-         */
-        isFinite(): boolean;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.isFinite
-         */
-        isFinite(): LoDashExplicitWrapper<boolean>;
-    }
-
-    // isFunction
-
-    interface LoDashStatic {
-        /**
-         * Checks if value is a callable function.
-         *
-         * @param value The value to check.
-         * @return Returns true if value is correctly classified, else false.
-         */
-        isFunction(value: any): value is (...args: any[]) => any;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.isFunction
-         */
-        isFunction(): boolean;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.isFunction
-         */
-        isFunction(): LoDashExplicitWrapper<boolean>;
-    }
-
-    // isInteger
-
-    interface LoDashStatic {
-        /**
-         * Checks if `value` is an integer.
-         *
-         * **Note:** This method is based on [`Number.isInteger`](https://mdn.io/Number/isInteger).
-         *
-         * @category Lang
-         * @param value The value to check.
-         * @returns Returns `true` if `value` is an integer, else `false`.
-         * @example
-         *
-         * _.isInteger(3);
-         * // => true
-         *
-         * _.isInteger(Number.MIN_VALUE);
-         * // => false
-         *
-         * _.isInteger(Infinity);
-         * // => false
-         *
-         * _.isInteger('3');
-         * // => false
-         */
-        isInteger(value?: any): boolean;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.isInteger
-         */
-        isInteger(): boolean;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.isInteger
-         */
-        isInteger(): LoDashExplicitWrapper<boolean>;
-    }
-
-    // isLength
-
-    interface LoDashStatic {
-        /**
-         * Checks if `value` is a valid array-like length.
-         *
-         * **Note:** This function is loosely based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).
-         *
-         * @category Lang
-         * @param value The value to check.
-         * @returns Returns `true` if `value` is a valid length, else `false`.
-         * @example
-         *
-         * _.isLength(3);
-         * // => true
-         *
-         * _.isLength(Number.MIN_VALUE);
-         * // => false
-         *
-         * _.isLength(Infinity);
-         * // => false
-         *
-         * _.isLength('3');
-         * // => false
-         */
-        isLength(value?: any): boolean;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.isLength
-         */
-        isLength(): boolean;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.isLength
-         */
-        isLength(): LoDashExplicitWrapper<boolean>;
-    }
-
-    // isMap
-
-    interface LoDashStatic {
-        /**
-         * Checks if value is classified as a Map object.
-         *
-         * @param value The value to check.
-         * @returns Returns true if value is correctly classified, else false.
-         */
-        isMap(value?: any): value is Map<any, any>;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.isMap
-         */
-        isMap(): boolean;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.isMap
-         */
-        isMap(): LoDashExplicitWrapper<boolean>;
-    }
-
-    // isMatch
-
-    type isMatchCustomizer = (value: any, other: any, indexOrKey?: PropertyName) => boolean;
-
-    interface LoDashStatic {
-        /**
-         * Performs a deep comparison between `object` and `source` to determine if
-         * `object` contains equivalent property values.
-         *
-         * **Note:** This method supports comparing the same values as `_.isEqual`.
-         *
-         * @category Lang
-         * @param object The object to inspect.
-         * @param source The object of property values to match.
-         * @returns Returns `true` if `object` is a match, else `false`.
-         * @example
-         *
-         * var object = { 'user': 'fred', 'age': 40 };
-         *
-         * _.isMatch(object, { 'age': 40 });
-         * // => true
-         *
-         * _.isMatch(object, { 'age': 36 });
-         * // => false
-         */
-        isMatch(object: object, source: object): boolean;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.isMatch
-         */
-        isMatch(source: object): boolean;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.isMatch
-         */
-        isMatch(source: object): LoDashExplicitWrapper<boolean>;
-    }
-
-    // isMatchWith
-
-    type isMatchWithCustomizer = (value: any, other: any, indexOrKey: PropertyName) => boolean;
-
-    interface LoDashStatic {
-        /**
-         * This method is like `_.isMatch` except that it accepts `customizer` which
-         * is invoked to compare values. If `customizer` returns `undefined` comparisons
-         * are handled by the method instead. The `customizer` is invoked with three
-         * arguments: (objValue, srcValue, index|key, object, source).
-         *
-         * @category Lang
-         * @param object The object to inspect.
-         * @param source The object of property values to match.
-         * @param [customizer] The function to customize comparisons.
-         * @returns Returns `true` if `object` is a match, else `false`.
-         * @example
-         *
-         * function isGreeting(value) {
-         *   return /^h(?:i|ello)$/.test(value);
-         * }
-         *
-         * function customizer(objValue, srcValue) {
-         *   if (isGreeting(objValue) && isGreeting(srcValue)) {
-         *     return true;
-         *   }
-         * }
-         *
-         * var object = { 'greeting': 'hello' };
-         * var source = { 'greeting': 'hi' };
-         *
-         * _.isMatchWith(object, source, customizer);
-         * // => true
-         */
-        isMatchWith(object: object, source: object, customizer: isMatchWithCustomizer): boolean;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.isMatchWith
-         */
-        isMatchWith(source: object, customizer: isMatchWithCustomizer): boolean;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.isMatchWith
-         */
-        isMatchWith(source: object, customizer: isMatchWithCustomizer): LoDashExplicitWrapper<boolean>;
-    }
-
-    // isNaN
-
-    interface LoDashStatic {
-        /**
-         * Checks if value is NaN.
-         *
-         * Note: This method is not the same as isNaN which returns true for undefined and other non-numeric values.
-         *
-         * @param value The value to check.
-         * @return Returns true if value is NaN, else false.
-         */
-        isNaN(value?: any): boolean;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.isNaN
-         */
-        isNaN(): boolean;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.isNaN
-         */
-        isNaN(): LoDashExplicitWrapper<boolean>;
-    }
-
-    // isNative
-
-    interface LoDashStatic {
-        /**
-         * Checks if value is a native function.
-         * @param value The value to check.
-         *
-         * @retrun Returns true if value is a native function, else false.
-         */
-        isNative(value: any): value is (...args: any[]) => any;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * see _.isNative
-         */
-        isNative(): boolean;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * see _.isNative
-         */
-        isNative(): LoDashExplicitWrapper<boolean>;
-    }
-
-    // isNil
-
-    interface LoDashStatic {
-        /**
-         * Checks if `value` is `null` or `undefined`.
-         *
-         * @category Lang
-         * @param value The value to check.
-         * @returns Returns `true` if `value` is nullish, else `false`.
-         * @example
-         *
-         * _.isNil(null);
-         * // => true
-         *
-         * _.isNil(void 0);
-         * // => true
-         *
-         * _.isNil(NaN);
-         * // => false
-         */
-        isNil(value: any): value is null | undefined;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * see _.isNil
-         */
-        isNil(): boolean;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * see _.isNil
-         */
-        isNil(): LoDashExplicitWrapper<boolean>;
-    }
-
-    // isNull
-
-    interface LoDashStatic {
-        /**
-         * Checks if value is null.
-         *
-         * @param value The value to check.
-         * @return Returns true if value is null, else false.
-         */
-        isNull(value: any): value is null;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * see _.isNull
-         */
-        isNull(): boolean;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * see _.isNull
-         */
-        isNull(): LoDashExplicitWrapper<boolean>;
-    }
-
-    // isNumber
-
-    interface LoDashStatic {
-        /**
-         * Checks if value is classified as a Number primitive or object.
-         *
-         * Note: To exclude Infinity, -Infinity, and NaN, which are classified as numbers, use the _.isFinite method.
-         *
-         * @param value The value to check.
-         * @return Returns true if value is correctly classified, else false.
-         */
-        isNumber(value?: any): value is number;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * see _.isNumber
-         */
-        isNumber(): boolean;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * see _.isNumber
-         */
-        isNumber(): LoDashExplicitWrapper<boolean>;
-    }
-
-    // isObject
-
-    interface LoDashStatic {
-        /**
-         * Checks if value is the language type of Object. (e.g. arrays, functions, objects, regexes, new Number(0),
-         * and new String(''))
-         *
-         * @param value The value to check.
-         * @return Returns true if value is an object, else false.
-         */
-        isObject(value?: any): boolean;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * see _.isObject
-         */
-        isObject(): boolean;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * see _.isObject
-         */
-        isObject(): LoDashExplicitWrapper<boolean>;
-    }
-
-    // isObjectLike
-
-    interface LoDashStatic {
-        /**
-         * Checks if `value` is object-like. A value is object-like if it's not `null`
-         * and has a `typeof` result of "object".
-         *
-         * @category Lang
-         * @param value The value to check.
-         * @returns Returns `true` if `value` is object-like, else `false`.
-         * @example
-         *
-         * _.isObjectLike({});
-         * // => true
-         *
-         * _.isObjectLike([1, 2, 3]);
-         * // => true
-         *
-         * _.isObjectLike(_.noop);
-         * // => false
-         *
-         * _.isObjectLike(null);
-         * // => false
-         */
-        isObjectLike(value?: any): boolean;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * see _.isObjectLike
-         */
-        isObjectLike(): boolean;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * see _.isObjectLike
-         */
-        isObjectLike(): LoDashExplicitWrapper<boolean>;
-    }
-
-    // isPlainObject
-
-    interface LoDashStatic {
-        /**
-         * Checks if value is a plain object, that is, an object created by the Object constructor or one with a
-         * [[Prototype]] of null.
-         *
-         * Note: This method assumes objects created by the Object constructor have no inherited enumerable properties.
-         *
-         * @param value The value to check.
-         * @return Returns true if value is a plain object, else false.
-         */
-        isPlainObject(value?: any): boolean;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * see _.isPlainObject
-         */
-        isPlainObject(): boolean;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * see _.isPlainObject
-         */
-        isPlainObject(): LoDashExplicitWrapper<boolean>;
-    }
-
-    // isRegExp
-
-    interface LoDashStatic {
-        /**
-         * Checks if value is classified as a RegExp object.
-         * @param value The value to check.
-         *
-         * @return Returns true if value is correctly classified, else false.
-         */
-        isRegExp(value?: any): value is RegExp;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * see _.isRegExp
-         */
-        isRegExp(): boolean;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * see _.isRegExp
-         */
-        isRegExp(): LoDashExplicitWrapper<boolean>;
-    }
-
-    // isSafeInteger
-
-    interface LoDashStatic {
-        /**
-         * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754
-         * double precision number which isn't the result of a rounded unsafe integer.
-         *
-         * **Note:** This method is based on [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).
-         *
-         * @category Lang
-         * @param value The value to check.
-         * @returns Returns `true` if `value` is a safe integer, else `false`.
-         * @example
-         *
-         * _.isSafeInteger(3);
-         * // => true
-         *
-         * _.isSafeInteger(Number.MIN_VALUE);
-         * // => false
-         *
-         * _.isSafeInteger(Infinity);
-         * // => false
-         *
-         * _.isSafeInteger('3');
-         * // => false
-         */
-        isSafeInteger(value: any): boolean;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * see _.isSafeInteger
-         */
-        isSafeInteger(): boolean;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * see _.isSafeInteger
-         */
-        isSafeInteger(): LoDashExplicitWrapper<boolean>;
-    }
-
-    // isSet
-
-    interface LoDashStatic {
-        /**
-         * Checks if value is classified as a Set object.
-         *
-         * @param value The value to check.
-         * @returns Returns true if value is correctly classified, else false.
-         */
-        isSet(value?: any): value is Set<any>;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.isSet
-         */
-        isSet(): boolean;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.isSet
-         */
-        isSet(): LoDashExplicitWrapper<boolean>;
-    }
-
-    // isString
-
-    interface LoDashStatic {
-        /**
-         * Checks if value is classified as a String primitive or object.
-         *
-         * @param value The value to check.
-         * @return Returns true if value is correctly classified, else false.
-         */
-        isString(value?: any): value is string;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * see _.isString
-         */
-        isString(): boolean;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * see _.isString
-         */
-        isString(): LoDashExplicitWrapper<boolean>;
-    }
-
-    // isSymbol
-
-    interface LoDashStatic {
-        /**
-         * Checks if `value` is classified as a `Symbol` primitive or object.
-         *
-         * @category Lang
-         * @param value The value to check.
-         * @returns Returns `true` if `value` is correctly classified, else `false`.
-         * @example
-         *
-         * _.isSymbol(Symbol.iterator);
-         * // => true
-         *
-         * _.isSymbol('abc');
-         * // => false
-         */
-        isSymbol(value: any): boolean;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * see _.isSymbol
-         */
-        isSymbol(): boolean;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * see _.isSymbol
-         */
-        isSymbol(): LoDashExplicitWrapper<boolean>;
-    }
-
-    // isTypedArray
-
-    interface LoDashStatic {
-        /**
-         * Checks if value is classified as a typed array.
-         *
-         * @param value The value to check.
-         * @return Returns true if value is correctly classified, else false.
-         */
-        isTypedArray(value: any): boolean;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * see _.isTypedArray
-         */
-        isTypedArray(): boolean;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * see _.isTypedArray
-         */
-        isTypedArray(): LoDashExplicitWrapper<boolean>;
-    }
-
-    // isUndefined
-
-    interface LoDashStatic {
-        /**
-         * Checks if value is undefined.
-         *
-         * @param value The value to check.
-         * @return Returns true if value is undefined, else false.
-         */
-        isUndefined(value: any): value is undefined;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * see _.isUndefined
-         */
-        isUndefined(): boolean;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * see _.isUndefined
-         */
-        isUndefined(): LoDashExplicitWrapper<boolean>;
-    }
-
-    // isWeakMap
-
-    interface LoDashStatic {
-        /**
-         * Checks if value is classified as a WeakMap object.
-         *
-         * @param value The value to check.
-         * @returns Returns true if value is correctly classified, else false.
-         */
-        isWeakMap(value?: any): value is WeakMap<object, any>;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.isSet
-         */
-        isWeakMap(): boolean;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.isSet
-         */
-        isWeakMap(): LoDashExplicitWrapper<boolean>;
-    }
-
-    // isWeakSet
-
-    interface LoDashStatic {
-        /**
-         * Checks if value is classified as a WeakSet object.
-         *
-         * @param value The value to check.
-         * @returns Returns true if value is correctly classified, else false.
-         */
-        isWeakSet(value?: any): value is WeakSet<object>;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.isWeakSet
-         */
-        isWeakSet(): boolean;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.isWeakSet
-         */
-        isWeakSet(): LoDashExplicitWrapper<boolean>;
-    }
-
-    // lt
-
-    interface LoDashStatic {
-        /**
-         * Checks if value is less than other.
-         *
-         * @param value The value to compare.
-         * @param other The other value to compare.
-         * @return Returns true if value is less than other, else false.
-         */
-        lt(
-            value: any,
-            other: any
-        ): boolean;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.lt
-         */
-        lt(other: any): boolean;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.lt
-         */
-        lt(other: any): LoDashExplicitWrapper<boolean>;
-    }
-
-    // lte
-
-    interface LoDashStatic {
-        /**
-         * Checks if value is less than or equal to other.
-         *
-         * @param value The value to compare.
-         * @param other The other value to compare.
-         * @return Returns true if value is less than or equal to other, else false.
-         */
-        lte(
-            value: any,
-            other: any
-        ): boolean;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.lte
-         */
-        lte(other: any): boolean;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.lte
-         */
-        lte(other: any): LoDashExplicitWrapper<boolean>;
-    }
-
-    // toArray
-
-    interface LoDashStatic {
-        /**
-         * Converts value to an array.
-         *
-         * @param value The value to convert.
-         * @return Returns the converted array.
-         */
-        toArray<T>(value: List<T> | Dictionary<T> | NumericDictionary<T> | null | undefined): T[];
-
-        /**
-         * @see _.toArray
-         */
-        toArray<T>(value: T): Array<T[keyof T]>;
-
-        /**
-         * @see _.toArray
-         */
-        toArray(): any[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.toArray
-         */
-        toArray<T>(this: LoDashImplicitWrapper<List<T> | Dictionary<T> | NumericDictionary<T> | null | undefined>): LoDashImplicitWrapper<T[]>;
-
-        /**
-         * @see _.toArray
-         */
-        toArray<T extends object>(this: LoDashImplicitWrapper<T>): LoDashImplicitWrapper<Array<T[keyof T]>>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.toArray
-         */
-        toArray<T>(this: LoDashExplicitWrapper<List<T> | Dictionary<T> | NumericDictionary<T> | null | undefined>): LoDashExplicitWrapper<T[]>;
-
-        /**
-         * @see _.toArray
-         */
-        toArray<T extends object>(this: LoDashImplicitWrapper<T>): LoDashExplicitWrapper<Array<T[keyof T]>>;
-    }
-
-    // toFinite
-
-    interface LoDashStatic {
-        /**
-         * Converts `value` to a finite number.
-         *
-         * @since 4.12.0
-         * @category Lang
-         * @param value The value to convert.
-         * @returns Returns the converted number.
-         * @example
-         *
-         * _.toFinite(3.2);
-         * // => 3.2
-         *
-         * _.toFinite(Number.MIN_VALUE);
-         * // => 5e-324
-         *
-         * _.toFinite(Infinity);
-         * // => 1.7976931348623157e+308
-         *
-         * _.toFinite('3.2');
-         * // => 3.2
-         */
-        toFinite(value: any): number;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.toFinite
-         */
-        toFinite(): number;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.toFinite
-         */
-        toFinite(): LoDashExplicitWrapper<number>;
-    }
-
-    // toInteger
-
-    interface LoDashStatic {
-        /**
-         * Converts `value` to an integer.
-         *
-         * **Note:** This function is loosely based on [`ToInteger`](http://www.ecma-international.org/ecma-262/6.0/#sec-tointeger).
-         *
-         * @category Lang
-         * @param value The value to convert.
-         * @returns Returns the converted integer.
-         * @example
-         *
-         * _.toInteger(3);
-         * // => 3
-         *
-         * _.toInteger(Number.MIN_VALUE);
-         * // => 0
-         *
-         * _.toInteger(Infinity);
-         * // => 1.7976931348623157e+308
-         *
-         * _.toInteger('3');
-         * // => 3
-         */
-        toInteger(value: any): number;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.toInteger
-         */
-        toInteger(): number;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.toInteger
-         */
-        toInteger(): LoDashExplicitWrapper<number>;
-    }
-
-    // toLength
-
-    interface LoDashStatic {
-        /**
-         * Converts `value` to an integer suitable for use as the length of an
-         * array-like object.
-         *
-         * **Note:** This method is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).
-         *
-         * @category Lang
-         * @param value The value to convert.
-         * @return Returns the converted integer.
-         * @example
-         *
-         * _.toLength(3);
-         * // => 3
-         *
-         * _.toLength(Number.MIN_VALUE);
-         * // => 0
-         *
-         * _.toLength(Infinity);
-         * // => 4294967295
-         *
-         * _.toLength('3');
-         * // => 3
-         */
-        toLength(value: any): number;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.toLength
-         */
-        toLength(): number;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.toLength
-         */
-        toLength(): LoDashExplicitWrapper<number>;
-    }
-
-    // toNumber
-
-    interface LoDashStatic {
-        /**
-         * Converts `value` to a number.
-         *
-         * @category Lang
-         * @param value The value to process.
-         * @returns Returns the number.
-         * @example
-         *
-         * _.toNumber(3);
-         * // => 3
-         *
-         * _.toNumber(Number.MIN_VALUE);
-         * // => 5e-324
-         *
-         * _.toNumber(Infinity);
-         * // => Infinity
-         *
-         * _.toNumber('3');
-         * // => 3
-         */
-        toNumber(value: any): number;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.toNumber
-         */
-        toNumber(): number;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.toNumber
-         */
-        toNumber(): LoDashExplicitWrapper<number>;
-    }
-
-    // toPlainObject
-
-    interface LoDashStatic {
-        /**
-         * Converts value to a plain object flattening inherited enumerable properties of value to own properties
-         * of the plain object.
-         *
-         * @param value The value to convert.
-         * @return Returns the converted plain object.
-         */
-        toPlainObject(value?: any): any;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.toPlainObject
-         */
-        toPlainObject(): LoDashImplicitWrapper<any>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.toPlainObject
-         */
-        toPlainObject(): LoDashExplicitWrapper<any>;
-    }
-
-    // toSafeInteger
-
-    interface LoDashStatic {
-        /**
-         * Converts `value` to a safe integer. A safe integer can be compared and
-         * represented correctly.
-         *
-         * @category Lang
-         * @param value The value to convert.
-         * @returns Returns the converted integer.
-         * @example
-         *
-         * _.toSafeInteger(3);
-         * // => 3
-         *
-         * _.toSafeInteger(Number.MIN_VALUE);
-         * // => 0
-         *
-         * _.toSafeInteger(Infinity);
-         * // => 9007199254740991
-         *
-         * _.toSafeInteger('3');
-         * // => 3
-         */
-        toSafeInteger(value: any): number;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.toSafeInteger
-         */
-        toSafeInteger(): number;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.toSafeInteger
-         */
-        toSafeInteger(): LoDashExplicitWrapper<number>;
-    }
-
-    // toString
-
-    interface LoDashStatic {
-        /**
-         * Converts `value` to a string if it's not one. An empty string is returned
-         * for `null` and `undefined` values. The sign of `-0` is preserved.
-         *
-         * @category Lang
-         * @param value The value to process.
-         * @returns Returns the string.
-         * @example
-         *
-         * _.toString(null);
-         * // => ''
-         *
-         * _.toString(-0);
-         * // => '-0'
-         *
-         * _.toString([1, 2, 3]);
-         * // => '1,2,3'
-         */
-        toString(value: any): string;
-    }
-	
-	// isValid
-    interface LoDashStatic {
-        /**
-         * 检查对象是否有效.
-         *
-         * @param value to inspect.
-         * @return null or undefined return false, else return true.
-         */
-        isValid(value?: any): boolean;
-    }
-	
-	// isTrue
-    interface LoDashStatic {
-        /**
-         * 检查对象是否有效.
-         *
-         * @param value to inspect.
-         * @return boolean.
-         */
-        isTrue(value?: any): boolean;
-    }
-	
-	// fuzzyEqual
-    interface LoDashStatic {
-        /**
-         * 模糊比较两个数字是否相等.
-         *
-         * @param value1 .
-		 * @param value2 .
-         * @return boolean.
-         */
-        fuzzyEqual(value1: number, value2: number): boolean;
-    }
-	
-	// fuzzyLessThan
-    interface LoDashStatic {
-        /**
-         * 模糊比较value1是否<value2,比较公差为0.000001
-         *
-         * @param value1 .
-		 * @param value2 .
-         * @return boolean.
-         */
-        fuzzyLessThan(value1: number, value2: number): boolean;
-    }
-	
-	// fuzzyLessEqual
-    interface LoDashStatic {
-        /**
-         * 模糊比较value1是否<=value2,比较公差为0.000001
-         *
-         * @param value1 .
-		 * @param value2 .
-         * @return boolean.
-         */
-        fuzzyLessEqual(value1: number, value2: number): boolean;
-    }
-	
-	// fuzzyGreaterThan
-    interface LoDashStatic {
-        /**
-         * 模糊比较value1是否>value2,比较公差为0.000001
-         *
-         * @param value1 .
-		 * @param value2 .
-         * @return boolean.
-         */
-        fuzzyGreaterThan(value1: number, value2: number): boolean;
-    }
-	
-	
-	// fuzzyGreaterEqual
-    interface LoDashStatic {
-        /**
-         * 模糊比较value1是否>=value2,比较公差为0.000001
-         *
-         * @param value1 .
-		 * @param value2 .
-         * @return boolean.
-         */
-        fuzzyGreaterEqual(value1: number, value2: number): boolean;
-    }
-	
-	// format
-    interface LoDashStatic {
-        /**
-         * 使用 values...替换`template`中的占位符, 占位符为`{number}`
-         *
-         * @param template 模版字符串.
-		 * @param values 替换值.
-         * @return string 替换后的字符串.
-         */
-        format(template: string, values:((...args: any[]) => any)): string;
-    }
-	
-	// formatUnicorn
-    interface LoDashStatic {
-        /**
-         * 使用value中匹配的键的值替换模板中的占位符,占位符为`${key}`
-         *
-         * @param template 模版字符串.
-		 * @param object 替换值.
-         * @return string 替换后的字符串.
-         */
-        formatUnicorn(template: string, values:object): string;
-    }
-	
-	// romanize
-    interface LoDashStatic {
-        /**
-         * 将十进制数字转换成罗马数字
-         *
-         * @param value 十进制数字.
-         * @return string 罗马字符串.
-         */
-        romanize(value:number): string;
-    }
-	
-	// deromanize
-    interface LoDashStatic {
-        /**
-         * 将罗马数字转换成十进制数字
-         *
-         * @param value 罗马数字.
-         * @return number 十进制数字.
-         */
-        deromanize(value:number): string;
-    }
-}
diff --git a/jtg js/node_modules/@types/lodash/common/math.d.ts b/jtg js/node_modules/@types/lodash/common/math.d.ts
deleted file mode 100644
index 640fbc429de47f1d221aa09d6fbdce909229666b..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/common/math.d.ts	
+++ /dev/null
@@ -1,532 +0,0 @@
-import _ = require("../index");
-declare module "../index" {
-    // add
-
-    interface LoDashStatic {
-        /**
-         * Adds two numbers.
-         *
-         * @param augend The first number to add.
-         * @param addend The second number to add.
-         * @return Returns the sum.
-         */
-        add(
-            augend: number,
-            addend: number
-        ): number;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.add
-         */
-        add(addend: number): number;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.add
-         */
-        add(addend: number): LoDashExplicitWrapper<number>;
-    }
-
-    // ceil
-
-    interface LoDashStatic {
-        /**
-         * Calculates n rounded up to precision.
-         *
-         * @param n The number to round up.
-         * @param precision The precision to round up to.
-         * @return Returns the rounded up number.
-         */
-        ceil(
-            n: number,
-            precision?: number
-        ): number;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.ceil
-         */
-        ceil(precision?: number): number;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.ceil
-         */
-        ceil(precision?: number): LoDashExplicitWrapper<number>;
-    }
-
-    // divide
-
-    interface LoDashStatic {
-       /**
-        * Divide two numbers.
-        *
-        * @param dividend The first number in a division.
-        * @param divisor The second number in a division.
-        * @returns Returns the quotient.
-        */
-        divide(
-            dividend: number,
-            divisor: number
-        ): number;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.divide
-         */
-        divide(divisor: number): number;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.divide
-         */
-        divide(divisor: number): LoDashExplicitWrapper<number>;
-    }
-
-    // floor
-
-    interface LoDashStatic {
-        /**
-         * Calculates n rounded down to precision.
-         *
-         * @param n The number to round down.
-         * @param precision The precision to round down to.
-         * @return Returns the rounded down number.
-         */
-        floor(
-            n: number,
-            precision?: number
-        ): number;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.floor
-         */
-        floor(precision?: number): number;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.floor
-         */
-        floor(precision?: number): LoDashExplicitWrapper<number>;
-    }
-
-    // max
-
-    interface LoDashStatic {
-         /**
-          * Computes the maximum value of `array`. If `array` is empty or falsey
-          * `undefined` is returned.
-          *
-          * @category Math
-          * @param array The array to iterate over.
-          * @returns Returns the maximum value.
-          */
-        max<T>(
-            collection: List<T> | null | undefined
-        ): T | undefined;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.max
-         */
-        max<T>(this: LoDashImplicitWrapper<List<T> | null | undefined>): T | undefined;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.max
-         */
-        max<T>(this: LoDashExplicitWrapper<List<T> | null | undefined>): LoDashExplicitWrapper<T | undefined>;
-    }
-
-    // maxBy
-
-    interface LoDashStatic {
-        /**
-         * This method is like `_.max` except that it accepts `iteratee` which is
-         * invoked for each element in `array` to generate the criterion by which
-         * the value is ranked. The iteratee is invoked with one argument: (value).
-         *
-         * @category Math
-         * @param array The array to iterate over.
-         * @param iteratee The iteratee invoked per element.
-         * @returns Returns the maximum value.
-         * @example
-         *
-         * var objects = [{ 'n': 1 }, { 'n': 2 }];
-         *
-         * _.maxBy(objects, function(o) { return o.a; });
-         * // => { 'n': 2 }
-         *
-         * // using the `_.property` iteratee shorthand
-         * _.maxBy(objects, 'n');
-         * // => { 'n': 2 }
-         */
-        maxBy<T>(
-            collection: List<T> | null | undefined,
-            iteratee?: ValueIteratee<T>
-        ): T | undefined;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.maxBy
-         */
-        maxBy<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            iteratee?: ValueIteratee<T>
-        ): T | undefined;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.maxBy
-         */
-        maxBy<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            iteratee?: ValueIteratee<T>
-        ): LoDashExplicitWrapper<T | undefined>;
-    }
-
-    // mean
-
-    interface LoDashStatic {
-        /**
-         * Computes the mean of the values in `array`.
-         *
-         * @category Math
-         * @param array The array to iterate over.
-         * @returns Returns the mean.
-         * @example
-         *
-         * _.mean([4, 2, 8, 6]);
-         * // => 5
-         */
-        mean(
-            collection: List<any> | null | undefined
-        ): number;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.mean
-         */
-        mean(): number;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.mean
-         */
-        mean(): LoDashExplicitWrapper<number>;
-    }
-
-    // meanBy
-
-    interface LoDashStatic {
-      /**
-       * Computes the mean of the provided propties of the objects in the `array`
-       *
-       * @category Math
-       * @param array The array to iterate over.
-       * @param iteratee The iteratee invoked per element.
-       * @returns Returns the mean.
-       * @example
-       *
-       * _.mean([{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }], 'n');
-       * // => 5
-       */
-        meanBy<T>(
-            collection: List<T> | null | undefined,
-            iteratee?: ValueIteratee<T>
-        ): number;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.meanBy
-         */
-        meanBy<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            iteratee?: ValueIteratee<T>
-        ): number;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.meanBy
-         */
-        meanBy<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            iteratee?: ValueIteratee<T>
-        ): LoDashExplicitWrapper<number>;
-    }
-
-    // min
-
-    interface LoDashStatic {
-        /**
-         * Computes the minimum value of `array`. If `array` is empty or falsey
-         * `undefined` is returned.
-         *
-         * @category Math
-         * @param array The array to iterate over.
-         * @returns Returns the minimum value.
-         */
-        min<T>(
-            collection: List<T> | null | undefined
-        ): T | undefined;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.min
-         */
-        min<T>(this: LoDashImplicitWrapper<List<T> | null | undefined>): T | undefined;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.min
-         */
-        min<T>(this: LoDashExplicitWrapper<List<T> | null | undefined>): LoDashExplicitWrapper<T | undefined>;
-    }
-
-    // minBy
-
-    interface LoDashStatic {
-        /**
-         * This method is like `_.min` except that it accepts `iteratee` which is
-         * invoked for each element in `array` to generate the criterion by which
-         * the value is ranked. The iteratee is invoked with one argument: (value).
-         *
-         * @category Math
-         * @param array The array to iterate over.
-         * @param iteratee The iteratee invoked per element.
-         * @returns Returns the minimum value.
-         * @example
-         *
-         * var objects = [{ 'n': 1 }, { 'n': 2 }];
-         *
-         * _.minBy(objects, function(o) { return o.a; });
-         * // => { 'n': 1 }
-         *
-         * // using the `_.property` iteratee shorthand
-         * _.minBy(objects, 'n');
-         * // => { 'n': 1 }
-         */
-        minBy<T>(
-            collection: List<T> | null | undefined,
-            iteratee?: ValueIteratee<T>
-        ): T | undefined;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.minBy
-         */
-        minBy<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            iteratee?: ValueIteratee<T>
-        ): T | undefined;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.minBy
-         */
-        minBy<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            iteratee?: ValueIteratee<T>
-        ): LoDashExplicitWrapper<T | undefined>;
-    }
-
-    // multiply
-
-    interface LoDashStatic {
-        /**
-         * Multiply two numbers.
-         * @param multiplier The first number in a multiplication.
-         * @param multiplicand The second number in a multiplication.
-         * @returns Returns the product.
-         */
-        multiply(
-            multiplier: number,
-            multiplicand: number
-        ): number;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.multiply
-         */
-        multiply(multiplicand: number): number;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.multiply
-         */
-        multiply(multiplicand: number): LoDashExplicitWrapper<number>;
-    }
-
-    // round
-
-    interface LoDashStatic {
-        /**
-         * Calculates n rounded to precision.
-         *
-         * @param n The number to round.
-         * @param precision The precision to round to.
-         * @return Returns the rounded number.
-         */
-        round(
-            n: number,
-            precision?: number
-        ): number;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.round
-         */
-        round(precision?: number): number;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.round
-         */
-        round(precision?: number): LoDashExplicitWrapper<number>;
-    }
-
-    // subtract
-
-    interface LoDashStatic {
-        /**
-         * Subtract two numbers.
-         *
-         * @category Math
-         * @param minuend The first number in a subtraction.
-         * @param subtrahend The second number in a subtraction.
-         * @returns Returns the difference.
-         * @example
-         *
-         * _.subtract(6, 4);
-         * // => 2
-         */
-        subtract(
-            minuend: number,
-            subtrahend: number
-        ): number;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.subtract
-         */
-        subtract(
-            subtrahend: number
-        ): number;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.subtract
-         */
-        subtract(
-            subtrahend: number
-        ): LoDashExplicitWrapper<number>;
-    }
-
-    // sum
-
-    interface LoDashStatic {
-        /**
-         * Computes the sum of the values in `array`.
-         *
-         * @category Math
-         * @param array The array to iterate over.
-         * @returns Returns the sum.
-         * @example
-         *
-         * _.sum([4, 2, 8, 6]);
-         * // => 20
-         */
-        sum(collection: List<any> | null | undefined): number;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.sum
-         */
-        sum(): number;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.sum
-         */
-        sum(): LoDashExplicitWrapper<number>;
-    }
-
-    // sumBy
-
-    interface LoDashStatic {
-        /**
-         * This method is like `_.sum` except that it accepts `iteratee` which is
-         * invoked for each element in `array` to generate the value to be summed.
-         * The iteratee is invoked with one argument: (value).
-         *
-         * @category Math
-         * @param array The array to iterate over.
-         * @param [iteratee=_.identity] The iteratee invoked per element.
-         * @returns Returns the sum.
-         * @example
-         *
-         * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];
-         *
-         * _.sumBy(objects, function(o) { return o.n; });
-         * // => 20
-         *
-         * // using the `_.property` iteratee shorthand
-         * _.sumBy(objects, 'n');
-         * // => 20
-         */
-        sumBy<T>(
-            collection: List<T> | null | undefined,
-            iteratee?: ((value: T) => number) | string
-        ): number;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.sumBy
-         */
-        sumBy<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            iteratee?: ((value: T) => number) | string
-        ): number;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.sumBy
-         */
-        sumBy<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            iteratee?: ((value: T) => number) | string
-        ): LoDashExplicitWrapper<number>;
-    }
-}
diff --git a/jtg js/node_modules/@types/lodash/common/number.d.ts b/jtg js/node_modules/@types/lodash/common/number.d.ts
deleted file mode 100644
index 7da1cab03a25f39cc6dbda8acb4d83733afd7770..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/common/number.d.ts	
+++ /dev/null
@@ -1,178 +0,0 @@
-import _ = require("../index");
-declare module "../index" {
-    // clamp
-
-    interface LoDashStatic {
-        /**
-         * Clamps `number` within the inclusive `lower` and `upper` bounds.
-         *
-         * @category Number
-         * @param number The number to clamp.
-         * @param [lower] The lower bound.
-         * @param upper The upper bound.
-         * @returns Returns the clamped number.
-         * @example
-         *
-         * _.clamp(-10, -5, 5);
-         * // => -5
-         *
-         * _.clamp(10, -5, 5);
-         * // => 5
-         */
-        clamp(
-            number: number,
-            lower: number,
-            upper: number
-        ): number;
-        clamp(
-            number: number,
-            upper: number
-        ): number;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.clamp
-         */
-        clamp(
-            lower: number,
-            upper: number
-        ): number;
-        clamp(
-            upper: number
-        ): number;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.clamp
-         */
-        clamp(
-            lower: number,
-            upper: number
-        ): LoDashExplicitWrapper<number>;
-        clamp(
-            upper: number
-        ): LoDashExplicitWrapper<number>;
-    }
-
-    // inRange
-
-    interface LoDashStatic {
-        /**
-         * Checks if n is between start and up to but not including, end. If end is not specified it’s set to start
-         * with start then set to 0.
-         *
-         * @param n The number to check.
-         * @param start The start of the range.
-         * @param end The end of the range.
-         * @return Returns true if n is in the range, else false.
-         */
-        inRange(
-            n: number,
-            start: number,
-            end?: number
-        ): boolean;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.inRange
-         */
-        inRange(
-            start: number,
-            end?: number
-        ): boolean;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.inRange
-         */
-        inRange(
-            start: number,
-            end?: number
-        ): LoDashExplicitWrapper<boolean>;
-    }
-
-    // random
-
-    interface LoDashStatic {
-        /**
-         * Produces a random number between min and max (inclusive). If only one argument is provided a number between
-         * 0 and the given number is returned. If floating is true, or either min or max are floats, a floating-point
-         * number is returned instead of an integer.
-         *
-         * @param min The minimum possible value.
-         * @param max The maximum possible value.
-         * @param floating Specify returning a floating-point number.
-         * @return Returns the random number.
-         */
-        random(
-            floating?: boolean
-        ): number;
-
-        /**
-         * @see _.random
-         */
-        random(
-            max: number,
-            floating?: boolean
-        ): number;
-
-        /**
-         * @see _.random
-         */
-        random(
-            min: number,
-            max: number,
-            floating?: boolean
-        ): number;
-
-        /**
-         * Produces a random number between min and max (inclusive). If only one argument is provided a number between
-         * 0 and the given number is returned. If floating is true, or either min or max are floats, a floating-point
-         * number is returned instead of an integer.
-         *
-         * @param min The minimum possible value.
-         * @param index Not used in this overload.
-         * @param guard Enables use as an iteratee for methods like _.map. You should not pass this parameter directly in your code.
-         * @return Returns the random number.
-         */
-        random(
-            min: number,
-            index: string | number,
-            guard: object
-        ): number;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.random
-         */
-        random(floating?: boolean): number;
-
-        /**
-         * @see _.random
-         */
-        random(
-            max: number,
-            floating?: boolean
-        ): number;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.random
-         */
-        random(floating?: boolean): LoDashExplicitWrapper<number>;
-
-        /**
-         * @see _.random
-         */
-        random(
-            max: number,
-            floating?: boolean
-        ): LoDashExplicitWrapper<number>;
-    }
-}
diff --git a/jtg js/node_modules/@types/lodash/common/object.d.ts b/jtg js/node_modules/@types/lodash/common/object.d.ts
deleted file mode 100644
index 5e2d539c2345d47122fec7dfe61a15523085691b..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/common/object.d.ts	
+++ /dev/null
@@ -1,3761 +0,0 @@
-import _ = require("../index");
-declare module "../index" {
-    // assign
-
-    interface LoDashStatic {
-        /**
-         * Assigns own enumerable properties of source objects to the destination
-         * object. Source objects are applied from left to right. Subsequent sources
-         * overwrite property assignments of previous sources.
-         *
-         * **Note:** This method mutates `object` and is loosely based on
-         * [`Object.assign`](https://mdn.io/Object/assign).
-         *
-         * @category Object
-         * @param object The destination object.
-         * @param [sources] The source objects.
-         * @returns Returns `object`.
-         * @example
-         *
-         * function Foo() {
-         *   this.c = 3;
-         * }
-         *
-         * function Bar() {
-         *   this.e = 5;
-         * }
-         *
-         * Foo.prototype.d = 4;
-         * Bar.prototype.f = 6;
-         *
-         * _.assign({ 'a': 1 }, new Foo, new Bar);
-         * // => { 'a': 1, 'c': 3, 'e': 5 }
-         */
-        assign<TObject, TSource>(
-            object: TObject,
-            source: TSource
-        ): TObject & TSource;
-
-        /**
-         * @see assign
-         */
-        assign<TObject, TSource1, TSource2>(
-            object: TObject,
-            source1: TSource1,
-            source2: TSource2
-        ): TObject & TSource1 & TSource2;
-
-        /**
-         * @see assign
-         */
-        assign<TObject, TSource1, TSource2, TSource3>(
-            object: TObject,
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3
-        ): TObject & TSource1 & TSource2 & TSource3;
-
-        /**
-         * @see assign
-         */
-        assign<TObject, TSource1, TSource2, TSource3, TSource4>(
-            object: TObject,
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3,
-            source4: TSource4
-        ): TObject & TSource1 & TSource2 & TSource3 & TSource4;
-
-        /**
-         * @see _.assign
-         */
-        assign<TObject>(object: TObject): TObject;
-
-        /**
-         * @see _.assign
-         */
-        assign(
-            object: any,
-            ...otherArgs: any[]
-        ): any;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.assign
-         */
-        assign<TSource>(
-            source: TSource
-        ): LoDashImplicitWrapper<TValue & TSource>;
-
-        /**
-         * @see assign
-         */
-        assign<TSource1, TSource2>(
-            source1: TSource1,
-            source2: TSource2
-        ): LoDashImplicitWrapper<TValue & TSource1 & TSource2>;
-
-        /**
-         * @see assign
-         */
-        assign<TSource1, TSource2, TSource3>(
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3
-        ): LoDashImplicitWrapper<TValue & TSource1 & TSource2 & TSource3>;
-
-        /**
-         * @see assign
-         */
-        assign<TSource1, TSource2, TSource3, TSource4>(
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3,
-            source4: TSource4
-        ): LoDashImplicitWrapper<TValue & TSource1 & TSource2 & TSource3 & TSource4>;
-
-        /**
-         * @see _.assign
-         */
-        assign(): LoDashImplicitWrapper<TValue>;
-
-        /**
-         * @see _.assign
-         */
-        assign(...otherArgs: any[]): LoDashImplicitWrapper<any>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.assign
-         */
-        assign<TSource>(
-            source: TSource
-        ): LoDashExplicitWrapper<TValue & TSource>;
-
-        /**
-         * @see assign
-         */
-        assign<TSource1, TSource2>(
-            source1: TSource1,
-            source2: TSource2
-        ): LoDashExplicitWrapper<TValue & TSource1 & TSource2>;
-
-        /**
-         * @see assign
-         */
-        assign<TSource1, TSource2, TSource3>(
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3
-        ): LoDashExplicitWrapper<TValue & TSource1 & TSource2 & TSource3>;
-
-        /**
-         * @see assign
-         */
-        assign<TSource1, TSource2, TSource3, TSource4>(
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3,
-            source4: TSource4
-        ): LoDashExplicitWrapper<TValue & TSource1 & TSource2 & TSource3 & TSource4>;
-
-        /**
-         * @see _.assign
-         */
-        assign(): LoDashExplicitWrapper<TValue>;
-
-        /**
-         * @see _.assign
-         */
-        assign(...otherArgs: any[]): LoDashExplicitWrapper<any>;
-    }
-
-    // assignIn
-
-    interface LoDashStatic {
-        /**
-         * This method is like `_.assign` except that it iterates over own and
-         * inherited source properties.
-         *
-         * **Note:** This method mutates `object`.
-         *
-         * @alias extend
-         * @category Object
-         * @param object The destination object.
-         * @param [sources] The source objects.
-         * @returns Returns `object`.
-         * @example
-         *
-         * function Foo() {
-         *   this.b = 2;
-         * }
-         *
-         * function Bar() {
-         *   this.d = 4;
-         * }
-         *
-         * Foo.prototype.c = 3;
-         * Bar.prototype.e = 5;
-         *
-         * _.assignIn({ 'a': 1 }, new Foo, new Bar);
-         * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5 }
-         */
-        assignIn<TObject, TSource>(
-            object: TObject,
-            source: TSource
-        ): TObject & TSource;
-
-        /**
-         * @see assignIn
-         */
-        assignIn<TObject, TSource1, TSource2>(
-            object: TObject,
-            source1: TSource1,
-            source2: TSource2
-        ): TObject & TSource1 & TSource2;
-
-        /**
-         * @see assignIn
-         */
-        assignIn<TObject, TSource1, TSource2, TSource3>(
-            object: TObject,
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3
-        ): TObject & TSource1 & TSource2 & TSource3;
-
-        /**
-         * @see assignIn
-         */
-        assignIn<TObject, TSource1, TSource2, TSource3, TSource4>(
-            object: TObject,
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3,
-            source4: TSource4
-        ): TObject & TSource1 & TSource2 & TSource3 & TSource4;
-
-        /**
-         * @see _.assignIn
-         */
-        assignIn<TObject>(object: TObject): TObject;
-
-        /**
-         * @see _.assignIn
-         */
-        assignIn<TResult>(
-            object: any,
-            ...otherArgs: any[]
-        ): TResult;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.assignIn
-         */
-        assignIn<TSource>(
-            source: TSource
-        ): LoDashImplicitWrapper<TValue & TSource>;
-
-        /**
-         * @see assignIn
-         */
-        assignIn<TSource1, TSource2>(
-            source1: TSource1,
-            source2: TSource2
-        ): LoDashImplicitWrapper<TValue & TSource1 & TSource2>;
-
-        /**
-         * @see assignIn
-         */
-        assignIn<TSource1, TSource2, TSource3>(
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3
-        ): LoDashImplicitWrapper<TValue & TSource1 & TSource2 & TSource3>;
-
-        /**
-         * @see assignIn
-         */
-        assignIn<TSource1, TSource2, TSource3, TSource4>(
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3,
-            source4: TSource4
-        ): LoDashImplicitWrapper<TValue & TSource1 & TSource2 & TSource3 & TSource4>;
-
-        /**
-         * @see _.assignIn
-         */
-        assignIn(): LoDashImplicitWrapper<TValue>;
-
-        /**
-         * @see _.assignIn
-         */
-        assignIn<TResult>(...otherArgs: any[]): LoDashImplicitWrapper<TResult>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.assignIn
-         */
-        assignIn<TSource>(
-            source: TSource
-        ): LoDashExplicitWrapper<TValue & TSource>;
-
-        /**
-         * @see assignIn
-         */
-        assignIn<TSource1, TSource2>(
-            source1: TSource1,
-            source2: TSource2
-        ): LoDashExplicitWrapper<TValue & TSource1 & TSource2>;
-
-        /**
-         * @see assignIn
-         */
-        assignIn<TSource1, TSource2, TSource3>(
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3
-        ): LoDashExplicitWrapper<TValue & TSource1 & TSource2 & TSource3>;
-
-        /**
-         * @see assignIn
-         */
-        assignIn<TSource1, TSource2, TSource3, TSource4>(
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3,
-            source4: TSource4
-        ): LoDashExplicitWrapper<TValue & TSource1 & TSource2 & TSource3 & TSource4>;
-
-        /**
-         * @see _.assignIn
-         */
-        assignIn(): LoDashExplicitWrapper<TValue>;
-
-        /**
-         * @see _.assignIn
-         */
-        assignIn(...otherArgs: any[]): LoDashExplicitWrapper<any>;
-    }
-
-    // assignInWith
-
-    type AssignCustomizer = (objectValue: any, sourceValue: any, key?: string, object?: {}, source?: {}) => any;
-
-    interface LoDashStatic {
-        /**
-         * This method is like `_.assignIn` except that it accepts `customizer` which
-         * is invoked to produce the assigned values. If `customizer` returns `undefined`
-         * assignment is handled by the method instead. The `customizer` is invoked
-         * with five arguments: (objValue, srcValue, key, object, source).
-         *
-         * **Note:** This method mutates `object`.
-         *
-         * @alias extendWith
-         * @category Object
-         * @param object The destination object.
-         * @param sources The source objects.
-         * @param [customizer] The function to customize assigned values.
-         * @returns Returns `object`.
-         * @example
-         *
-         * function customizer(objValue, srcValue) {
-         *   return _.isUndefined(objValue) ? srcValue : objValue;
-         * }
-         *
-         * var defaults = _.partialRight(_.assignInWith, customizer);
-         *
-         * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
-         * // => { 'a': 1, 'b': 2 }
-         */
-        assignInWith<TObject, TSource>(
-            object: TObject,
-            source: TSource,
-            customizer: AssignCustomizer
-        ): TObject & TSource;
-
-        /**
-         * @see assignInWith
-         */
-        assignInWith<TObject, TSource1, TSource2>(
-            object: TObject,
-            source1: TSource1,
-            source2: TSource2,
-            customizer: AssignCustomizer
-        ): TObject & TSource1 & TSource2;
-
-        /**
-         * @see assignInWith
-         */
-        assignInWith<TObject, TSource1, TSource2, TSource3>(
-            object: TObject,
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3,
-            customizer: AssignCustomizer
-        ): TObject & TSource1 & TSource2 & TSource3;
-
-        /**
-         * @see assignInWith
-         */
-        assignInWith<TObject, TSource1, TSource2, TSource3, TSource4>(
-            object: TObject,
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3,
-            source4: TSource4,
-            customizer: AssignCustomizer
-        ): TObject & TSource1 & TSource2 & TSource3 & TSource4;
-
-        /**
-         * @see _.assignInWith
-         */
-        assignInWith<TObject>(object: TObject): TObject;
-
-        /**
-         * @see _.assignInWith
-         */
-        assignInWith<TResult>(
-            object: any,
-            ...otherArgs: any[]
-        ): TResult;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.assignInWith
-         */
-        assignInWith<TSource>(
-            source: TSource,
-            customizer: AssignCustomizer
-        ): LoDashImplicitWrapper<TValue & TSource>;
-
-        /**
-         * @see assignInWith
-         */
-        assignInWith<TSource1, TSource2>(
-            source1: TSource1,
-            source2: TSource2,
-            customizer: AssignCustomizer
-        ): LoDashImplicitWrapper<TValue & TSource1 & TSource2>;
-
-        /**
-         * @see assignInWith
-         */
-        assignInWith<TSource1, TSource2, TSource3>(
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3,
-            customizer: AssignCustomizer
-        ): LoDashImplicitWrapper<TValue & TSource1 & TSource2 & TSource3>;
-
-        /**
-         * @see assignInWith
-         */
-        assignInWith<TSource1, TSource2, TSource3, TSource4>(
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3,
-            source4: TSource4,
-            customizer: AssignCustomizer
-        ): LoDashImplicitWrapper<TValue & TSource1 & TSource2 & TSource3 & TSource4>;
-
-        /**
-         * @see _.assignInWith
-         */
-        assignInWith(): LoDashImplicitWrapper<TValue>;
-
-        /**
-         * @see _.assignInWith
-         */
-        assignInWith<TResult>(...otherArgs: any[]): LoDashImplicitWrapper<TResult>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.assignInWith
-         */
-        assignInWith<TSource>(
-            source: TSource,
-            customizer: AssignCustomizer
-        ): LoDashExplicitWrapper<TValue & TSource>;
-
-        /**
-         * @see assignInWith
-         */
-        assignInWith<TSource1, TSource2>(
-            source1: TSource1,
-            source2: TSource2,
-            customizer: AssignCustomizer
-        ): LoDashExplicitWrapper<TValue & TSource1 & TSource2>;
-
-        /**
-         * @see assignInWith
-         */
-        assignInWith<TSource1, TSource2, TSource3>(
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3,
-            customizer: AssignCustomizer
-        ): LoDashExplicitWrapper<TValue & TSource1 & TSource2 & TSource3>;
-
-        /**
-         * @see assignInWith
-         */
-        assignInWith<TSource1, TSource2, TSource3, TSource4>(
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3,
-            source4: TSource4,
-            customizer: AssignCustomizer
-        ): LoDashExplicitWrapper<TValue & TSource1 & TSource2 & TSource3 & TSource4>;
-
-        /**
-         * @see _.assignInWith
-         */
-        assignInWith(): LoDashExplicitWrapper<TValue>;
-
-        /**
-         * @see _.assignInWith
-         */
-        assignInWith(...otherArgs: any[]): LoDashExplicitWrapper<any>;
-    }
-
-    // assignWith
-
-    interface LoDashStatic {
-        /**
-         * This method is like `_.assign` except that it accepts `customizer` which
-         * is invoked to produce the assigned values. If `customizer` returns `undefined`
-         * assignment is handled by the method instead. The `customizer` is invoked
-         * with five arguments: (objValue, srcValue, key, object, source).
-         *
-         * **Note:** This method mutates `object`.
-         *
-         * @category Object
-         * @param object The destination object.
-         * @param sources The source objects.
-         * @param [customizer] The function to customize assigned values.
-         * @returns Returns `object`.
-         * @example
-         *
-         * function customizer(objValue, srcValue) {
-         *   return _.isUndefined(objValue) ? srcValue : objValue;
-         * }
-         *
-         * var defaults = _.partialRight(_.assignWith, customizer);
-         *
-         * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
-         * // => { 'a': 1, 'b': 2 }
-         */
-        assignWith<TObject, TSource>(
-            object: TObject,
-            source: TSource,
-            customizer: AssignCustomizer
-        ): TObject & TSource;
-
-        /**
-         * @see assignWith
-         */
-        assignWith<TObject, TSource1, TSource2>(
-            object: TObject,
-            source1: TSource1,
-            source2: TSource2,
-            customizer: AssignCustomizer
-        ): TObject & TSource1 & TSource2;
-
-        /**
-         * @see assignWith
-         */
-        assignWith<TObject, TSource1, TSource2, TSource3>(
-            object: TObject,
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3,
-            customizer: AssignCustomizer
-        ): TObject & TSource1 & TSource2 & TSource3;
-
-        /**
-         * @see assignWith
-         */
-        assignWith<TObject, TSource1, TSource2, TSource3, TSource4>(
-            object: TObject,
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3,
-            source4: TSource4,
-            customizer: AssignCustomizer
-        ): TObject & TSource1 & TSource2 & TSource3 & TSource4;
-
-        /**
-         * @see _.assignWith
-         */
-        assignWith<TObject>(object: TObject): TObject;
-
-        /**
-         * @see _.assignWith
-         */
-        assignWith<TResult>(
-            object: any,
-            ...otherArgs: any[]
-        ): TResult;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.assignWith
-         */
-        assignWith<TSource>(
-            source: TSource,
-            customizer: AssignCustomizer
-        ): LoDashImplicitWrapper<TValue & TSource>;
-
-        /**
-         * @see assignWith
-         */
-        assignWith<TSource1, TSource2>(
-            source1: TSource1,
-            source2: TSource2,
-            customizer: AssignCustomizer
-        ): LoDashImplicitWrapper<TValue & TSource1 & TSource2>;
-
-        /**
-         * @see assignWith
-         */
-        assignWith<TSource1, TSource2, TSource3>(
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3,
-            customizer: AssignCustomizer
-        ): LoDashImplicitWrapper<TValue & TSource1 & TSource2 & TSource3>;
-
-        /**
-         * @see assignWith
-         */
-        assignWith<TSource1, TSource2, TSource3, TSource4>(
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3,
-            source4: TSource4,
-            customizer: AssignCustomizer
-        ): LoDashImplicitWrapper<TValue & TSource1 & TSource2 & TSource3 & TSource4>;
-
-        /**
-         * @see _.assignWith
-         */
-        assignWith(): LoDashImplicitWrapper<TValue>;
-
-        /**
-         * @see _.assignWith
-         */
-        assignWith<TResult>(...otherArgs: any[]): LoDashImplicitWrapper<TResult>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.assignWith
-         */
-        assignWith<TSource>(
-            source: TSource,
-            customizer: AssignCustomizer
-        ): LoDashExplicitWrapper<TValue & TSource>;
-
-        /**
-         * @see assignWith
-         */
-        assignWith<TSource1, TSource2>(
-            source1: TSource1,
-            source2: TSource2,
-            customizer: AssignCustomizer
-        ): LoDashExplicitWrapper<TValue & TSource1 & TSource2>;
-
-        /**
-         * @see assignWith
-         */
-        assignWith<TSource1, TSource2, TSource3>(
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3,
-            customizer: AssignCustomizer
-        ): LoDashExplicitWrapper<TValue & TSource1 & TSource2 & TSource3>;
-
-        /**
-         * @see assignWith
-         */
-        assignWith<TSource1, TSource2, TSource3, TSource4>(
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3,
-            source4: TSource4,
-            customizer: AssignCustomizer
-        ): LoDashExplicitWrapper<TValue & TSource1 & TSource2 & TSource3 & TSource4>;
-
-        /**
-         * @see _.assignWith
-         */
-        assignWith(): LoDashExplicitWrapper<TValue>;
-
-        /**
-         * @see _.assignWith
-         */
-        assignWith(...otherArgs: any[]): LoDashExplicitWrapper<any>;
-    }
-
-    // at
-
-    interface LoDashStatic {
-        /**
-         * Creates an array of elements corresponding to the given keys, or indexes, of collection. Keys may be
-         * specified as individual arguments or as arrays of keys.
-         *
-         * @param object The object to iterate over.
-         * @param props The property names or indexes of elements to pick, specified individually or in arrays.
-         * @return Returns the new array of picked elements.
-         */
-        at<T>(
-            object: List<T> | Dictionary<T> | NumericDictionary<T> | null | undefined,
-            ...props: PropertyPath[]
-        ): T[];
-
-        /**
-         * @see _.at
-         */
-        at<T extends object>(
-            object: T | null | undefined,
-            ...props: Array<Many<keyof T>>
-        ): Array<T[keyof T]>;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.at
-         */
-        at<T>(
-            this: LoDashImplicitWrapper<List<T> | Dictionary<T> | NumericDictionary<T> | null | undefined>,
-            ...props: PropertyPath[]
-        ): LoDashImplicitWrapper<T[]>;
-
-        /**
-         * @see _.at
-         */
-        at<T extends object>(
-            this: LoDashImplicitWrapper<T | null | undefined>,
-            ...props: Array<Many<keyof T>>
-        ): LoDashImplicitWrapper<Array<T[keyof T]>>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.at
-         */
-        at<T>(
-            this: LoDashExplicitWrapper<List<T> | Dictionary<T> | NumericDictionary<T> | null | undefined>,
-            ...props: PropertyPath[]
-        ): LoDashExplicitWrapper<T[]>;
-
-        /**
-         * @see _.at
-         */
-        at<T extends object>(
-            this: LoDashExplicitWrapper<T | null | undefined>,
-            ...props: Array<Many<keyof T>>
-        ): LoDashExplicitWrapper<Array<T[keyof T]>>;
-    }
-
-    // create
-
-    interface LoDashStatic {
-        /**
-         * Creates an object that inherits from the given prototype object. If a properties object is provided its own
-         * enumerable properties are assigned to the created object.
-         *
-         * @param prototype The object to inherit from.
-         * @param properties The properties to assign to the object.
-         * @return Returns the new object.
-         */
-        create<T extends object, U extends object>(
-            prototype: T,
-            properties?: U
-        ): T & U;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.create
-         */
-        create<U extends object>(properties?: U): LoDashImplicitWrapper<TValue & U>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.create
-         */
-        create<U extends object>(properties?: U): LoDashExplicitWrapper<TValue & U>;
-    }
-
-    // defaults
-
-    interface LoDashStatic {
-        /**
-         * Assigns own enumerable properties of source object(s) to the destination object for all destination
-         * properties that resolve to undefined. Once a property is set, additional values of the same property are
-         * ignored.
-         *
-         * Note: This method mutates object.
-         *
-         * @param object The destination object.
-         * @param sources The source objects.
-         * @return The destination object.
-         */
-        defaults<TObject, TSource>(
-            object: TObject,
-            source: TSource
-        ): TSource & TObject;
-
-        /**
-         * @see _.defaults
-         */
-        defaults<TObject, TSource1, TSource2>(
-            object: TObject,
-            source1: TSource1,
-            source2: TSource2
-        ): TSource2 & TSource1 & TObject;
-
-        /**
-         * @see _.defaults
-         */
-        defaults<TObject, TSource1, TSource2, TSource3>(
-            object: TObject,
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3
-        ): TSource3 & TSource2 & TSource1 & TObject;
-
-        /**
-         * @see _.defaults
-         */
-        defaults<TObject, TSource1, TSource2, TSource3, TSource4>(
-            object: TObject,
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3,
-            source4: TSource4
-        ): TSource4 & TSource3 & TSource2 & TSource1 & TObject;
-
-        /**
-         * @see _.defaults
-         */
-        defaults<TObject>(object: TObject): TObject;
-
-        /**
-         * @see _.defaults
-         */
-        defaults(
-            object: any,
-            ...sources: any[]
-        ): any;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.defaults
-         */
-        defaults<TSource>(
-            source: TSource
-        ): LoDashImplicitWrapper<TSource & TValue>;
-
-        /**
-         * @see _.defaults
-         */
-        defaults<TSource1, TSource2>(
-            source1: TSource1,
-            source2: TSource2
-        ): LoDashImplicitWrapper<TSource2 & TSource1 & TValue>;
-
-        /**
-         * @see _.defaults
-         */
-        defaults<TSource1, TSource2, TSource3>(
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3
-        ): LoDashImplicitWrapper<TSource3 & TSource2 & TSource1 & TValue>;
-
-        /**
-         * @see _.defaults
-         */
-        defaults<TSource1, TSource2, TSource3, TSource4>(
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3,
-            source4: TSource4
-        ): LoDashImplicitWrapper<TSource4 & TSource3 & TSource2 & TSource1 & TValue>;
-
-        /**
-         * @see _.defaults
-         */
-        defaults(): LoDashImplicitWrapper<TValue>;
-
-        /**
-         * @see _.defaults
-         */
-        defaults(...sources: any[]): LoDashImplicitWrapper<any>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.defaults
-         */
-        defaults<TSource>(
-            source: TSource
-        ): LoDashExplicitWrapper<TSource & TValue>;
-
-        /**
-         * @see _.defaults
-         */
-        defaults<TSource1, TSource2>(
-            source1: TSource1,
-            source2: TSource2
-        ): LoDashExplicitWrapper<TSource2 & TSource1 & TValue>;
-
-        /**
-         * @see _.defaults
-         */
-        defaults<TSource1, TSource2, TSource3>(
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3
-        ): LoDashExplicitWrapper<TSource3 & TSource2 & TSource1 & TValue>;
-
-        /**
-         * @see _.defaults
-         */
-        defaults<TSource1, TSource2, TSource3, TSource4>(
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3,
-            source4: TSource4
-        ): LoDashExplicitWrapper<TSource4 & TSource3 & TSource2 & TSource1 & TValue>;
-
-        /**
-         * @see _.defaults
-         */
-        defaults(): LoDashExplicitWrapper<TValue>;
-
-        /**
-         * @see _.defaults
-         */
-        defaults(...sources: any[]): LoDashExplicitWrapper<any>;
-    }
-
-    // defaultsDeep
-
-    interface LoDashStatic {
-        /**
-         * This method is like _.defaults except that it recursively assigns default properties.
-         * @param object The destination object.
-         * @param sources The source objects.
-         * @return Returns object.
-         **/
-        defaultsDeep(
-            object: any,
-            ...sources: any[]): any;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.defaultsDeep
-         **/
-        defaultsDeep(...sources: any[]): LoDashImplicitWrapper<any>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.defaultsDeep
-         **/
-        defaultsDeep(...sources: any[]): LoDashExplicitWrapper<any>;
-    }
-
-    // entries
-
-    interface LoDashStatic {
-        /**
-         * @see _.toPairs
-         */
-        entries<T>(object?: Dictionary<T> | NumericDictionary<T>): Array<[string, T]>;
-
-        /**
-         * @see _.toPairs
-         */
-        entries(object?: object): Array<[string, any]>;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.toPairs
-         */
-        entries<T>(this: LoDashImplicitWrapper<Dictionary<T> | NumericDictionary<T>>): LoDashImplicitWrapper<Array<[string, T]>>;
-
-        /**
-         * @see _.toPairs
-         */
-        entries(): LoDashImplicitWrapper<Array<[string, any]>>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.toPairs
-         */
-        entries<T>(this: LoDashExplicitWrapper<Dictionary<T> | NumericDictionary<T>>): LoDashExplicitWrapper<Array<[string, T]>>;
-
-        /**
-         * @see _.toPairs
-         */
-        entries(): LoDashExplicitWrapper<Array<[string, any]>>;
-    }
-
-    // entriesIn
-
-    interface LoDashStatic {
-        /**
-         * @see _.entriesIn
-         */
-        entriesIn<T>(object?: Dictionary<T> | NumericDictionary<T>): Array<[string, T]>;
-
-        /**
-         * @see _.entriesIn
-         */
-        entriesIn(object?: object): Array<[string, any]>;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.entriesIn
-         */
-        entriesIn<T>(this: LoDashImplicitWrapper<Dictionary<T> | NumericDictionary<T>>): LoDashImplicitWrapper<Array<[string, T]>>;
-
-        /**
-         * @see _.entriesIn
-         */
-        entriesIn(): LoDashImplicitWrapper<Array<[string, any]>>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.entriesIn
-         */
-        entriesIn<T>(this: LoDashExplicitWrapper<Dictionary<T> | NumericDictionary<T>>): LoDashExplicitWrapper<Array<[string, T]>>;
-
-        /**
-         * @see _.entriesIn
-         */
-        entriesIn(): LoDashExplicitWrapper<Array<[string, any]>>;
-    }
-
-    // extend
-
-    interface LoDashStatic {
-        /**
-         * @see _.extend
-         */
-        extend<TObject, TSource>(
-            object: TObject,
-            source: TSource
-        ): TObject & TSource;
-
-        /**
-         * @see _.extend
-         */
-        extend<TObject, TSource1, TSource2>(
-            object: TObject,
-            source1: TSource1,
-            source2: TSource2
-        ): TObject & TSource1 & TSource2;
-
-        /**
-         * @see _.extend
-         */
-        extend<TObject, TSource1, TSource2, TSource3>(
-            object: TObject,
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3
-        ): TObject & TSource1 & TSource2 & TSource3;
-
-        /**
-         * @see _.extend
-         */
-        extend<TObject, TSource1, TSource2, TSource3, TSource4>(
-            object: TObject,
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3,
-            source4: TSource4
-        ): TObject & TSource1 & TSource2 & TSource3 & TSource4;
-
-        /**
-         * @see _.extend
-         */
-        extend<TObject>(object: TObject): TObject;
-
-        /**
-         * @see _.extend
-         */
-        extend<TResult>(
-            object: any,
-            ...otherArgs: any[]
-        ): TResult;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.extend
-         */
-        extend<TSource>(
-            source: TSource
-        ): LoDashImplicitWrapper<TValue & TSource>;
-
-        /**
-         * @see _.extend
-         */
-        extend<TSource1, TSource2>(
-            source1: TSource1,
-            source2: TSource2
-        ): LoDashImplicitWrapper<TValue & TSource1 & TSource2>;
-
-        /**
-         * @see _.extend
-         */
-        extend<TSource1, TSource2, TSource3>(
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3
-        ): LoDashImplicitWrapper<TValue & TSource1 & TSource2 & TSource3>;
-
-        /**
-         * @see _.extend
-         */
-        extend<TSource1, TSource2, TSource3, TSource4>(
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3,
-            source4: TSource4
-        ): LoDashImplicitWrapper<TValue & TSource1 & TSource2 & TSource3 & TSource4>;
-
-        /**
-         * @see _.extend
-         */
-        extend(): LoDashImplicitWrapper<TValue>;
-
-        /**
-         * @see _.extend
-         */
-        extend(...otherArgs: any[]): LoDashImplicitWrapper<any>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.extend
-         */
-        extend<TSource>(
-            source: TSource
-        ): LoDashExplicitWrapper<TValue & TSource>;
-
-        /**
-         * @see _.extend
-         */
-        extend<TSource1, TSource2>(
-            source1: TSource1,
-            source2: TSource2
-        ): LoDashExplicitWrapper<TValue & TSource1 & TSource2>;
-
-        /**
-         * @see _.extend
-         */
-        extend<TSource1, TSource2, TSource3>(
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3
-        ): LoDashExplicitWrapper<TValue & TSource1 & TSource2 & TSource3>;
-
-        /**
-         * @see _.extend
-         */
-        extend<TSource1, TSource2, TSource3, TSource4>(
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3,
-            source4: TSource4
-        ): LoDashExplicitWrapper<TValue & TSource1 & TSource2 & TSource3 & TSource4>;
-
-        /**
-         * @see _.extend
-         */
-        extend(): LoDashExplicitWrapper<TValue>;
-
-        /**
-         * @see _.extend
-         */
-        extend(...otherArgs: any[]): LoDashExplicitWrapper<any>;
-    }
-
-    // extendWith
-
-    interface LoDashStatic {
-        /**
-         * @see _.extendWith
-         */
-        extendWith<TObject, TSource>(
-            object: TObject,
-            source: TSource,
-            customizer: AssignCustomizer
-        ): TObject & TSource;
-
-        /**
-         * @see _.extendWith
-         */
-        extendWith<TObject, TSource1, TSource2>(
-            object: TObject,
-            source1: TSource1,
-            source2: TSource2,
-            customizer: AssignCustomizer
-        ): TObject & TSource1 & TSource2;
-
-        /**
-         * @see _.extendWith
-         */
-        extendWith<TObject, TSource1, TSource2, TSource3>(
-            object: TObject,
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3,
-            customizer: AssignCustomizer
-        ): TObject & TSource1 & TSource2 & TSource3;
-
-        /**
-         * @see _.extendWith
-         */
-        extendWith<TObject, TSource1, TSource2, TSource3, TSource4>(
-            object: TObject,
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3,
-            source4: TSource4,
-            customizer: AssignCustomizer
-        ): TObject & TSource1 & TSource2 & TSource3 & TSource4;
-
-        /**
-         * @see _.extendWith
-         */
-        extendWith<TObject>(object: TObject): TObject;
-
-        /**
-         * @see _.extendWith
-         */
-        extendWith<TResult>(
-            object: any,
-            ...otherArgs: any[]
-        ): TResult;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.extendWith
-         */
-        extendWith<TSource>(
-            source: TSource,
-            customizer: AssignCustomizer
-        ): LoDashImplicitWrapper<TValue & TSource>;
-
-        /**
-         * @see _.extendWith
-         */
-        extendWith<TSource1, TSource2>(
-            source1: TSource1,
-            source2: TSource2,
-            customizer: AssignCustomizer
-        ): LoDashImplicitWrapper<TValue & TSource1 & TSource2>;
-
-        /**
-         * @see _.extendWith
-         */
-        extendWith<TSource1, TSource2, TSource3>(
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3,
-            customizer: AssignCustomizer
-        ): LoDashImplicitWrapper<TValue & TSource1 & TSource2 & TSource3>;
-
-        /**
-         * @see _.extendWith
-         */
-        extendWith<TSource1, TSource2, TSource3, TSource4>(
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3,
-            source4: TSource4,
-            customizer: AssignCustomizer
-        ): LoDashImplicitWrapper<TValue & TSource1 & TSource2 & TSource3 & TSource4>;
-
-        /**
-         * @see _.extendWith
-         */
-        extendWith(): LoDashImplicitWrapper<TValue>;
-
-        /**
-         * @see _.extendWith
-         */
-        extendWith(...otherArgs: any[]): LoDashImplicitWrapper<any>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.extendWith
-         */
-        extendWith<TSource>(
-            source: TSource,
-            customizer: AssignCustomizer
-        ): LoDashExplicitWrapper<TValue & TSource>;
-
-        /**
-         * @see _.extendWith
-         */
-        extendWith<TSource1, TSource2>(
-            source1: TSource1,
-            source2: TSource2,
-            customizer: AssignCustomizer
-        ): LoDashExplicitWrapper<TValue & TSource1 & TSource2>;
-
-        /**
-         * @see _.extendWith
-         */
-        extendWith<TSource1, TSource2, TSource3>(
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3,
-            customizer: AssignCustomizer
-        ): LoDashExplicitWrapper<TValue & TSource1 & TSource2 & TSource3>;
-
-        /**
-         * @see _.extendWith
-         */
-        extendWith<TSource1, TSource2, TSource3, TSource4>(
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3,
-            source4: TSource4,
-            customizer: AssignCustomizer
-        ): LoDashExplicitWrapper<TValue & TSource1 & TSource2 & TSource3 & TSource4>;
-
-        /**
-         * @see _.extendWith
-         */
-        extendWith(): LoDashExplicitWrapper<TValue>;
-
-        /**
-         * @see _.extendWith
-         */
-        extendWith(...otherArgs: any[]): LoDashExplicitWrapper<any>;
-    }
-
-    // findKey
-
-    interface LoDashStatic {
-        /**
-         * This method is like _.find except that it returns the key of the first element predicate returns truthy for
-         * instead of the element itself.
-         *
-         * @param object The object to search.
-         * @param predicate The function invoked per iteration.
-         * @return Returns the key of the matched element, else undefined.
-         */
-        findKey<T>(
-            object: T | null | undefined,
-            predicate?: ObjectIteratee<T>
-        ): string | undefined;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.findKey
-         */
-        findKey<T>(
-            this: LoDashImplicitWrapper<T | null | undefined>,
-            predicate?: ObjectIteratee<T>
-        ): string | undefined;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.findKey
-         */
-        findKey<T>(
-            this: LoDashExplicitWrapper<T | null | undefined>,
-            predicate?: ObjectIteratee<T>
-        ): LoDashExplicitWrapper<string | undefined>;
-    }
-
-    // findLastKey
-
-    interface LoDashStatic {
-        /**
-         * This method is like _.findKey except that it iterates over elements of a collection in the opposite order.
-         *
-         * @param object The object to search.
-         * @param predicate The function invoked per iteration.
-         * @return Returns the key of the matched element, else undefined.
-         */
-        findLastKey<T>(
-            object: T | null | undefined,
-            predicate?: ObjectIteratee<T>
-        ): string | undefined;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.findLastKey
-         */
-        findLastKey<T>(
-            this: LoDashImplicitWrapper<T | null | undefined>,
-            predicate?: ObjectIteratee<T>
-        ): string | undefined;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.findLastKey
-         */
-        findLastKey<T>(
-            this: LoDashExplicitWrapper<T | null | undefined>,
-            predicate?: ObjectIteratee<T>
-        ): LoDashExplicitWrapper<string | undefined>;
-    }
-
-    // forIn
-
-    interface LoDashStatic {
-        /**
-         * Iterates over own and inherited enumerable properties of an object invoking iteratee for each property. The
-         * iteratee is invoked with three arguments: (value, key, object). Iteratee functions may
-         * exit iteration early by explicitly returning false.
-         *
-         * @param object The object to iterate over.
-         * @param iteratee The function invoked per iteration.
-         * @return Returns object.
-         */
-        forIn<T>(
-            object: T,
-            iteratee?: ObjectIterator<T, any>
-        ): T;
-
-        /**
-         * @see _.forIn
-         */
-        forIn<T>(
-            object: T | null | undefined,
-            iteratee?: ObjectIterator<T, any>
-        ): T | null | undefined;
-    }
-
-    interface LoDashWrapper<TValue> {
-        /**
-         * @see _.forIn
-         */
-        forIn<T>(
-            this: LoDashWrapper<T | null | undefined>,
-            iteratee?: ObjectIterator<T, any>
-        ): this;
-    }
-
-    // forInRight
-
-    interface LoDashStatic {
-        /**
-         * This method is like _.forIn except that it iterates over properties of object in the opposite order.
-         *
-         * @param object The object to iterate over.
-         * @param iteratee The function invoked per iteration.
-         * @return Returns object.
-         */
-        forInRight<T>(
-            object: T,
-            iteratee?: ObjectIterator<T, any>
-        ): T;
-
-        /**
-         * @see _.forInRight
-         */
-        forInRight<T>(
-            object: T | null | undefined,
-            iteratee?: ObjectIterator<T, any>
-        ): T | null | undefined;
-    }
-
-    interface LoDashWrapper<TValue> {
-        /**
-         * @see _.forInRight
-         */
-        forInRight<T>(
-            this: LoDashWrapper<T | null | undefined>,
-            iteratee?: ObjectIterator<T, any>
-        ): this;
-    }
-
-    // forOwn
-
-    interface LoDashStatic {
-        /**
-         * Iterates over own enumerable properties of an object invoking iteratee for each property. The iteratee is
-         * invoked with three arguments: (value, key, object). Iteratee functions may exit
-         * iteration early by explicitly returning false.
-         *
-         * @param object The object to iterate over.
-         * @param iteratee The function invoked per iteration.
-         * @return Returns object.
-         */
-        forOwn<T>(
-            object: T,
-            iteratee?: ObjectIterator<T, any>
-        ): T;
-
-        /**
-         * @see _.forOwn
-         */
-        forOwn<T>(
-            object: T | null | undefined,
-            iteratee?: ObjectIterator<T, any>
-        ): T | null | undefined;
-    }
-
-    interface LoDashWrapper<TValue> {
-        /**
-         * @see _.forOwn
-         */
-        forOwn<T>(
-            this: LoDashWrapper<T | null | undefined>,
-            iteratee?: ObjectIterator<T, any>
-        ): this;
-    }
-
-    // forOwnRight
-
-    interface LoDashStatic {
-        /**
-         * This method is like _.forOwn except that it iterates over properties of object in the opposite order.
-         *
-         * @param object The object to iterate over.
-         * @param iteratee The function invoked per iteration.
-         * @return Returns object.
-         */
-        forOwnRight<T>(
-            object: T,
-            iteratee?: ObjectIterator<T, any>
-        ): T;
-
-        /**
-         * @see _.forOwnRight
-         */
-        forOwnRight<T>(
-            object: T | null | undefined,
-            iteratee?: ObjectIterator<T, any>
-        ): T | null | undefined;
-    }
-
-    interface LoDashWrapper<TValue> {
-        /**
-         * @see _.forOwnRight
-         */
-        forOwnRight<T>(
-            this: LoDashWrapper<T | null | undefined>,
-            iteratee?: ObjectIterator<T, any>
-        ): this;
-    }
-
-    // functions
-
-    interface LoDashStatic {
-        /**
-         * Creates an array of function property names from own enumerable properties
-         * of `object`.
-         *
-         * @category Object
-         * @param object The object to inspect.
-         * @returns Returns the new array of property names.
-         * @example
-         *
-         * function Foo() {
-         *   this.a = _.constant('a');
-         *   this.b = _.constant('b');
-         * }
-         *
-         * Foo.prototype.c = _.constant('c');
-         *
-         * _.functions(new Foo);
-         * // => ['a', 'b']
-         */
-        functions(object: any): string[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.functions
-         */
-        functions(): LoDashImplicitWrapper<string[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.functions
-         */
-        functions(): LoDashExplicitWrapper<string[]>;
-    }
-
-    // functionsIn
-
-    interface LoDashStatic {
-        /**
-         * Creates an array of function property names from own and inherited
-         * enumerable properties of `object`.
-         *
-         * @category Object
-         * @param object The object to inspect.
-         * @returns Returns the new array of property names.
-         * @example
-         *
-         * function Foo() {
-         *   this.a = _.constant('a');
-         *   this.b = _.constant('b');
-         * }
-         *
-         * Foo.prototype.c = _.constant('c');
-         *
-         * _.functionsIn(new Foo);
-         * // => ['a', 'b', 'c']
-         */
-        functionsIn<T extends {}>(object: any): string[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.functionsIn
-         */
-        functionsIn(): LoDashImplicitWrapper<string[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.functionsIn
-         */
-        functionsIn(): LoDashExplicitWrapper<string[]>;
-    }
-
-    // get
-
-    interface LoDashStatic {
-        /**
-         * Gets the property value at path of object. If the resolved value is undefined the defaultValue is used
-         * in its place.
-         *
-         * @param object The object to query.
-         * @param path The path of the property to get.
-         * @param defaultValue The value returned if the resolved value is undefined.
-         * @return Returns the resolved value.
-         */
-        get<TObject extends object, TKey extends keyof TObject>(
-            object: TObject,
-            path: TKey | [TKey]
-        ): TObject[TKey];
-
-        /**
-         * @see _.get
-         */
-        get<TObject extends object, TKey extends keyof TObject>(
-            object: TObject | null | undefined,
-            path: TKey | [TKey]
-        ): TObject[TKey] | undefined;
-
-        /**
-         * @see _.get
-         */
-        get<TObject extends object, TKey extends keyof TObject, TDefault>(
-            object: TObject | null | undefined,
-            path: TKey | [TKey],
-            defaultValue: TDefault
-        ): TObject[TKey] | TDefault;
-
-        /**
-         * @see _.get
-         */
-        get<T>(
-            object: NumericDictionary<T>,
-            path: number
-        ): T;
-
-        /**
-         * @see _.get
-         */
-        get<T>(
-            object: NumericDictionary<T> | null | undefined,
-            path: number
-        ): T | undefined;
-
-        /**
-         * @see _.get
-         */
-        get<T, TDefault>(
-            object: NumericDictionary<T> | null | undefined,
-            path: number,
-            defaultValue: TDefault
-        ): T | TDefault;
-
-        /**
-         * @see _.get
-         */
-        get<TDefault>(
-            object: null | undefined,
-            path: PropertyPath,
-            defaultValue: TDefault
-        ): TDefault;
-
-        /**
-         * @see _.get
-         */
-        get(
-            object: null | undefined,
-            path: PropertyPath
-        ): undefined;
-
-        /**
-         * @see _.get
-         */
-        get(
-            object: any,
-            path: PropertyPath,
-            defaultValue?: any
-        ): any;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.get
-         */
-        get<TKey extends keyof TValue>(
-            path: TKey | [TKey]
-        ): TValue[TKey];
-
-        /**
-         * @see _.get
-         */
-        get<TObject extends object, TKey extends keyof TObject>(
-            this: LoDashImplicitWrapper<TObject | null | undefined>,
-            path: TKey | [TKey],
-        ): TObject[TKey] | undefined;
-
-        /**
-         * @see _.get
-         */
-        get<TObject extends object, TKey extends keyof TObject, TDefault>(
-            this: LoDashImplicitWrapper<TObject | null | undefined>,
-            path: TKey | [TKey],
-            defaultValue: TDefault
-        ): TObject[TKey] | TDefault;
-
-        /**
-         * @see _.get
-         */
-        get<T>(
-            this: LoDashImplicitWrapper<NumericDictionary<T>>,
-            path: number
-        ): T;
-
-        /**
-         * @see _.get
-         */
-        get<T>(
-            this: LoDashImplicitWrapper<NumericDictionary<T> | null | undefined>,
-            path: number
-        ): T | undefined;
-
-        /**
-         * @see _.get
-         */
-        get<T, TDefault>(
-            this: LoDashImplicitWrapper<NumericDictionary<T> | null | undefined>,
-            path: number,
-            defaultValue: TDefault
-        ): T | TDefault;
-
-        /**
-         * @see _.get
-         */
-        get<TDefault>(
-            this: LoDashImplicitWrapper<null | undefined>,
-            path: PropertyPath,
-            defaultValue: TDefault
-        ): TDefault;
-
-        /**
-         * @see _.get
-         */
-        get(
-            this: LoDashImplicitWrapper<null | undefined>,
-            path: PropertyPath
-        ): undefined;
-
-        /**
-         * @see _.get
-         */
-        get<TResult>(
-            path: PropertyPath,
-            defaultValue?: any
-        ): any;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.get
-         */
-        get<TKey extends keyof TValue>(
-            path: TKey | [TKey]
-        ): LoDashExplicitWrapper<TValue[TKey]>;
-
-        /**
-         * @see _.get
-         */
-        get<TObject extends object, TKey extends keyof TObject>(
-            this: LoDashExplicitWrapper<TObject | null | undefined>,
-            path: TKey | [TKey],
-        ): LoDashExplicitWrapper<TObject[TKey] | undefined>;
-
-        /**
-         * @see _.get
-         */
-        get<TObject extends object, TKey extends keyof TObject, TDefault>(
-            this: LoDashExplicitWrapper<TObject | null | undefined>,
-            path: TKey | [TKey],
-            defaultValue: TDefault
-        ): LoDashExplicitWrapper<TObject[TKey] | TDefault>;
-
-        /**
-         * @see _.get
-         */
-        get<T>(
-            this: LoDashExplicitWrapper<NumericDictionary<T>>,
-            path: number
-        ): LoDashExplicitWrapper<T>;
-
-        /**
-         * @see _.get
-         */
-        get<T>(
-            this: LoDashExplicitWrapper<NumericDictionary<T> | null | undefined>,
-            path: number
-        ): LoDashExplicitWrapper<T | undefined>;
-
-        /**
-         * @see _.get
-         */
-        get<T, TDefault>(
-            this: LoDashExplicitWrapper<NumericDictionary<T> | null | undefined>,
-            path: number,
-            defaultValue: TDefault
-        ): LoDashExplicitWrapper<T | undefined>;
-
-        /**
-         * @see _.get
-         */
-        get<TDefault>(
-            this: LoDashExplicitWrapper<null | undefined>,
-            path: PropertyPath,
-            defaultValue: TDefault
-        ): LoDashExplicitWrapper<TDefault>;
-
-        /**
-         * @see _.get
-         */
-        get(
-            this: LoDashExplicitWrapper<null | undefined>,
-            path: PropertyPath
-        ): LoDashExplicitWrapper<undefined>;
-
-        /**
-         * @see _.get
-         */
-        get(
-            path: PropertyPath,
-            defaultValue?: any
-        ): LoDashExplicitWrapper<any>;
-    }
-
-    // has
-
-    interface LoDashStatic {
-        /**
-         * Checks if `path` is a direct property of `object`.
-         *
-         * @category Object
-         * @param object The object to query.
-         * @param path The path to check.
-         * @returns Returns `true` if `path` exists, else `false`.
-         * @example
-         *
-         * var object = { 'a': { 'b': { 'c': 3 } } };
-         * var other = _.create({ 'a': _.create({ 'b': _.create({ 'c': 3 }) }) });
-         *
-         * _.has(object, 'a');
-         * // => true
-         *
-         * _.has(object, 'a.b.c');
-         * // => true
-         *
-         * _.has(object, ['a', 'b', 'c']);
-         * // => true
-         *
-         * _.has(other, 'a');
-         * // => false
-         */
-        has<T>(
-            object: T,
-            path: PropertyPath
-        ): boolean;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.has
-         */
-        has(path: PropertyPath): boolean;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.has
-         */
-        has(path: PropertyPath): LoDashExplicitWrapper<boolean>;
-    }
-
-    // hasIn
-
-    interface LoDashStatic {
-        /**
-         * Checks if `path` is a direct or inherited property of `object`.
-         *
-         * @category Object
-         * @param object The object to query.
-         * @param path The path to check.
-         * @returns Returns `true` if `path` exists, else `false`.
-         * @example
-         *
-         * var object = _.create({ 'a': _.create({ 'b': _.create({ 'c': 3 }) }) });
-         *
-         * _.hasIn(object, 'a');
-         * // => true
-         *
-         * _.hasIn(object, 'a.b.c');
-         * // => true
-         *
-         * _.hasIn(object, ['a', 'b', 'c']);
-         * // => true
-         *
-         * _.hasIn(object, 'b');
-         * // => false
-         */
-        hasIn<T>(
-            object: T,
-            path: PropertyPath
-        ): boolean;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.hasIn
-         */
-        hasIn(path: PropertyPath): boolean;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.hasIn
-         */
-        hasIn(path: PropertyPath): LoDashExplicitWrapper<boolean>;
-    }
-
-    // invert
-
-    interface LoDashStatic {
-        /**
-         * Creates an object composed of the inverted keys and values of object. If object contains duplicate values,
-         * subsequent values overwrite property assignments of previous values unless multiValue is true.
-         *
-         * @param object The object to invert.
-         * @param multiValue Allow multiple values per key.
-         * @return Returns the new inverted object.
-         */
-        invert(
-            object: object
-        ): Dictionary<string>;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.invert
-         */
-        invert(): LoDashImplicitWrapper<Dictionary<string>>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.invert
-         */
-        invert(): LoDashExplicitWrapper<Dictionary<string>>;
-    }
-
-    // invertBy
-
-    interface LoDashStatic {
-        /**
-         * This method is like _.invert except that the inverted object is generated from the results of running each
-         * element of object through iteratee. The corresponding inverted value of each inverted key is an array of
-         * keys responsible for generating the inverted value. The iteratee is invoked with one argument: (value).
-         *
-         * @param object The object to invert.
-         * @param interatee The iteratee invoked per element.
-         * @return Returns the new inverted object.
-         */
-        invertBy<T>(
-            object: List<T> | Dictionary<T> | NumericDictionary<T> | null | undefined,
-            interatee?: ValueIteratee<T>
-        ): Dictionary<string[]>;
-
-        /**
-         * @see _.invertBy
-         */
-        invertBy<T extends object>(
-            object: T | null | undefined,
-            interatee?: ValueIteratee<T[keyof T]>
-        ): Dictionary<string[]>;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.invertBy
-         */
-        invertBy<T>(
-            this: LoDashImplicitWrapper<List<T> | Dictionary<T> | NumericDictionary<T> | null | undefined>,
-            interatee?: ValueIteratee<T>
-        ): LoDashImplicitWrapper<Dictionary<string[]>>;
-
-        /**
-         * @see _.invertBy
-         */
-        invertBy<T extends object>(
-            this: LoDashImplicitWrapper<T | null | undefined>,
-            interatee?: ValueIteratee<T[keyof T]>
-        ): LoDashImplicitWrapper<Dictionary<string[]>>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.invertBy
-         */
-        invertBy<T>(
-            this: LoDashExplicitWrapper<List<T> | Dictionary<T> | NumericDictionary<T> | null | undefined>,
-            interatee?: ValueIteratee<T>
-        ): LoDashExplicitWrapper<Dictionary<string[]>>;
-
-        /**
-         * @see _.invertBy
-         */
-        invertBy<T extends object>(
-            this: LoDashExplicitWrapper<T | null | undefined>,
-            interatee?: ValueIteratee<T[keyof T]>
-        ): LoDashExplicitWrapper<Dictionary<string[]>>;
-    }
-
-    // invoke
-
-    interface LoDashStatic {
-        /**
-        * Invokes the method at path of object.
-        * @param object The object to query.
-        * @param path The path of the method to invoke.
-        * @param args The arguments to invoke the method with.
-        **/
-        invoke(
-            object: any,
-            path: PropertyPath,
-            ...args: any[]): any;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-        * @see _.invoke
-        **/
-        invoke(
-            path: PropertyPath,
-            ...args: any[]): any;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-        * @see _.invoke
-        **/
-        invoke(
-            path: PropertyPath,
-            ...args: any[]): LoDashExplicitWrapper<any>;
-    }
-
-    // keys
-
-    interface LoDashStatic {
-        /**
-         * Creates an array of the own enumerable property names of object.
-         *
-         * Note: Non-object values are coerced to objects. See the ES spec for more details.
-         *
-         * @param object The object to query.
-         * @return Returns the array of property names.
-         */
-        keys(object?: any): string[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.keys
-         */
-        keys(): LoDashImplicitWrapper<string[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.keys
-         */
-        keys(): LoDashExplicitWrapper<string[]>;
-    }
-
-    // keysIn
-
-    interface LoDashStatic {
-        /**
-         * Creates an array of the own and inherited enumerable property names of object.
-         *
-         * Note: Non-object values are coerced to objects.
-         *
-         * @param object The object to query.
-         * @return An array of property names.
-         */
-        keysIn(object?: any): string[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.keysIn
-         */
-        keysIn(): LoDashImplicitWrapper<string[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.keysIn
-         */
-        keysIn(): LoDashExplicitWrapper<string[]>;
-    }
-
-    // mapKeys
-
-    interface LoDashStatic {
-        /**
-         * The opposite of _.mapValues; this method creates an object with the same values as object and keys generated
-         * by running each own enumerable property of object through iteratee.
-         *
-         * @param object The object to iterate over.
-         * @param iteratee The function invoked per iteration.
-         * @return Returns the new mapped object.
-         */
-        mapKeys<T>(
-            object: List<T> | null | undefined,
-            iteratee?: ListIteratee<T>
-        ): Dictionary<T>;
-
-        /**
-         * @see _.mapKeys
-         */
-        mapKeys<T extends object>(
-            object: T | null | undefined,
-            iteratee?: ObjectIteratee<T>
-        ): Dictionary<T[keyof T]>;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.mapKeys
-         */
-        mapKeys<T>(
-            this: LoDashImplicitWrapper<List<T> | null | undefined>,
-            iteratee?: ListIteratee<T>
-        ): LoDashImplicitWrapper<Dictionary<T>>;
-
-        /**
-         * @see _.mapKeys
-         */
-        mapKeys<T extends object>(
-            this: LoDashImplicitWrapper<T | null | undefined>,
-            iteratee?: ObjectIteratee<T>
-        ): LoDashImplicitWrapper<Dictionary<T[keyof T]>>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.mapKeys
-         */
-        mapKeys<T>(
-            this: LoDashExplicitWrapper<List<T> | null | undefined>,
-            iteratee?: ListIteratee<T>
-        ): LoDashExplicitWrapper<Dictionary<T>>;
-
-        /**
-         * @see _.mapKeys
-         */
-        mapKeys<T extends object>(
-            this: LoDashExplicitWrapper<T | null | undefined>,
-            iteratee?: ObjectIteratee<T>
-        ): LoDashExplicitWrapper<Dictionary<T[keyof T]>>;
-    }
-
-    // mapValues
-
-    interface LoDashStatic {
-        /**
-        * Creates an object with the same keys as object and values generated by running each own
-        * enumerable property of object through iteratee. The iteratee function is
-        * invoked with three arguments: (value, key, object).
-        *
-        * @param object The object to iterate over.
-        * @param iteratee  The function invoked per iteration.
-        * @return Returns the new mapped object.
-        */
-        mapValues<TResult>(obj: string | null | undefined, callback: StringIterator<TResult>): NumericDictionary<TResult>;
-
-        /**
-         * @see _.mapValues
-         * TODO: This would be better if we had a separate overload for obj: NumericDictionary that returned a NumericDictionary,
-         *       but TypeScript cannot select overload signatures based on number vs string index key type.
-         */
-        mapValues<T, TResult>(obj: Dictionary<T> | NumericDictionary<T> | null | undefined, callback: DictionaryIterator<T, TResult>): Dictionary<TResult>;
-
-        /**
-         * @see _.mapValues
-         */
-        mapValues<T extends object, TResult>(obj: T | null | undefined, callback: ObjectIterator<T, TResult>): { [P in keyof T]: TResult };
-
-        /**
-         * @see _.mapValues
-         * TODO: This would be better if we had a separate overload for obj: NumericDictionary that returned a NumericDictionary,
-         *       but TypeScript cannot select overload signatures based on number vs string index key type.
-         */
-        mapValues<T>(obj: Dictionary<T> | NumericDictionary<T> | null | undefined, iteratee: object): Dictionary<boolean>;
-
-        /**
-         * @see _.mapValues
-         */
-        mapValues<T extends object>(obj: T | null | undefined, iteratee: object): { [P in keyof T]: boolean };
-
-        /**
-         * @see _.mapValues
-         * TODO: This would be better if we had a separate overload for obj: NumericDictionary that returned a NumericDictionary,
-         *       but TypeScript cannot select overload signatures based on number vs string index key type.
-         */
-        mapValues<T, TKey extends keyof T>(obj: Dictionary<T> | NumericDictionary<T> | null | undefined, iteratee: TKey): Dictionary<T[TKey]>;
-
-        /**
-         * @see _.mapValues
-         * TODO: This would be better if we had a separate overload for obj: NumericDictionary that returned a NumericDictionary,
-         *       but TypeScript cannot select overload signatures based on number vs string index key type.
-         */
-        mapValues<T>(obj: Dictionary<T> | NumericDictionary<T> | null | undefined, iteratee: string): Dictionary<any>;
-
-        /**
-         * @see _.mapValues
-         */
-        mapValues<T extends object>(obj: T | null | undefined, iteratee: string): { [P in keyof T]: any };
-
-        /**
-         * @see _.mapValues
-         */
-        mapValues(obj: string | null | undefined): NumericDictionary<string>;
-
-        /**
-         * @see _.mapValues
-         * TODO: This would be better if we had a separate overload for obj: NumericDictionary that returned a NumericDictionary,
-         *       but TypeScript cannot select overload signatures based on number vs string index key type.
-         */
-        mapValues<T>(obj: Dictionary<T> | NumericDictionary<T> | null | undefined): Dictionary<T>;
-
-        /**
-         * @see _.mapValues
-         */
-        mapValues<T extends object>(obj: T): T;
-
-        /**
-         * @see _.mapValues
-         */
-        mapValues<T extends object>(obj: T | null | undefined): PartialObject<T>;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.mapValues
-         */
-        mapValues<TResult>(
-            this: LoDashImplicitWrapper<string | null | undefined>,
-            callback: StringIterator<TResult>
-        ): LoDashImplicitWrapper<NumericDictionary<TResult>>;
-
-        /**
-         * @see _.mapValues
-         * TODO: This would be better if we had a separate overload for obj: NumericDictionary that returned a NumericDictionary,
-         *       but TypeScript cannot select overload signatures based on number vs string index key type.
-         */
-        mapValues<T, TResult>(
-            this: LoDashImplicitWrapper<Dictionary<T> | NumericDictionary<T> | null | undefined>,
-            callback: DictionaryIterator<T, TResult>
-        ): LoDashImplicitWrapper<Dictionary<TResult>>;
-
-        /**
-         * @see _.mapValues
-         */
-        mapValues<T extends object, TResult>(
-            this: LoDashImplicitWrapper<T | null | undefined>,
-            callback: ObjectIterator<T, TResult>
-        ): LoDashImplicitWrapper<{ [P in keyof T]: TResult }>;
-
-        /**
-         * @see _.mapValues
-         * TODO: This would be better if we had a separate overload for obj: NumericDictionary that returned a NumericDictionary,
-         *       but TypeScript cannot select overload signatures based on number vs string index key type.
-         */
-        mapValues<T>(
-            this: LoDashImplicitWrapper<Dictionary<T> | NumericDictionary<T> | null | undefined>,
-            iteratee: object
-        ): LoDashImplicitWrapper<Dictionary<boolean>>;
-
-        /**
-         * @see _.mapValues
-         */
-        mapValues<T extends object>(
-            this: LoDashImplicitWrapper<T | null | undefined>,
-            iteratee: object
-        ): LoDashImplicitWrapper<{ [P in keyof T]: boolean }>;
-
-        /**
-         * @see _.mapValues
-         * TODO: This would be better if we had a separate overload for obj: NumericDictionary that returned a NumericDictionary,
-         *       but TypeScript cannot select overload signatures based on number vs string index key type.
-         */
-        mapValues<T, TKey extends keyof T>(
-            this: LoDashImplicitWrapper<Dictionary<T> | NumericDictionary<T> | null | undefined>,
-            iteratee: TKey
-        ): LoDashImplicitWrapper<Dictionary<T[TKey]>>;
-
-        /**
-         * @see _.mapValues
-         * TODO: This would be better if we had a separate overload for obj: NumericDictionary that returned a NumericDictionary,
-         *       but TypeScript cannot select overload signatures based on number vs string index key type.
-         */
-        mapValues<T>(
-            this: LoDashImplicitWrapper<Dictionary<T> | NumericDictionary<T> | null | undefined>,
-            iteratee: string
-        ): LoDashImplicitWrapper<Dictionary<any>>;
-
-        /**
-         * @see _.mapValues
-         */
-        mapValues<T extends object>(
-            this: LoDashImplicitWrapper<T | null | undefined>,
-            iteratee: string
-        ): LoDashImplicitWrapper<{ [P in keyof T]: any }>;
-
-        /**
-         * @see _.mapValues
-         */
-        mapValues(this: LoDashImplicitWrapper<string | null | undefined>): LoDashImplicitWrapper<NumericDictionary<string>>;
-
-        /**
-         * @see _.mapValues
-         * TODO: This would be better if we had a separate overload for obj: NumericDictionary that returned a NumericDictionary,
-         *       but TypeScript cannot select overload signatures based on number vs string index key type.
-         */
-        mapValues<T>(this: LoDashImplicitWrapper<Dictionary<T> | NumericDictionary<T> | null | undefined>): LoDashImplicitWrapper<Dictionary<T>>;
-
-        /**
-         * @see _.mapValues
-         */
-        mapValues<T extends object>(this: LoDashImplicitWrapper<T>): LoDashImplicitWrapper<T>;
-
-        /**
-         * @see _.mapValues
-         */
-        mapValues<T extends object>(this: LoDashImplicitWrapper<T | null | undefined>): LoDashImplicitWrapper<PartialObject<T>>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.mapValues
-         */
-        mapValues<TResult>(
-            this: LoDashExplicitWrapper<string | null | undefined>,
-            callback: StringIterator<TResult>
-        ): LoDashExplicitWrapper<NumericDictionary<TResult>>;
-
-        /**
-         * @see _.mapValues
-         * TODO: This would be better if we had a separate overload for obj: NumericDictionary that returned a NumericDictionary,
-         *       but TypeScript cannot select overload signatures based on number vs string index key type.
-         */
-        mapValues<T, TResult>(
-            this: LoDashExplicitWrapper<Dictionary<T> | NumericDictionary<T> | null | undefined>,
-            callback: DictionaryIterator<T, TResult>
-        ): LoDashExplicitWrapper<Dictionary<TResult>>;
-
-        /**
-         * @see _.mapValues
-         */
-        mapValues<T extends object, TResult>(
-            this: LoDashExplicitWrapper<T | null | undefined>,
-            callback: ObjectIterator<T, TResult>
-        ): LoDashExplicitWrapper<{ [P in keyof T]: TResult }>;
-
-        /**
-         * @see _.mapValues
-         * TODO: This would be better if we had a separate overload for obj: NumericDictionary that returned a NumericDictionary,
-         *       but TypeScript cannot select overload signatures based on number vs string index key type.
-         */
-        mapValues<T>(
-            this: LoDashExplicitWrapper<Dictionary<T> | NumericDictionary<T> | null | undefined>,
-            iteratee: object
-        ): LoDashExplicitWrapper<Dictionary<boolean>>;
-
-        /**
-         * @see _.mapValues
-         */
-        mapValues<T extends object>(
-            this: LoDashExplicitWrapper<T | null | undefined>,
-            iteratee: object
-        ): LoDashExplicitWrapper<{ [P in keyof T]: boolean }>;
-
-        /**
-         * @see _.mapValues
-         * TODO: This would be better if we had a separate overload for obj: NumericDictionary that returned a NumericDictionary,
-         *       but TypeScript cannot select overload signatures based on number vs string index key type.
-         */
-        mapValues<T, TKey extends keyof T>(
-            this: LoDashExplicitWrapper<Dictionary<T> | NumericDictionary<T> | null | undefined>,
-            iteratee: TKey
-        ): LoDashExplicitWrapper<Dictionary<T[TKey]>>;
-
-        /**
-         * @see _.mapValues
-         * TODO: This would be better if we had a separate overload for obj: NumericDictionary that returned a NumericDictionary,
-         *       but TypeScript cannot select overload signatures based on number vs string index key type.
-         */
-        mapValues<T>(
-            this: LoDashExplicitWrapper<Dictionary<T> | NumericDictionary<T> | null | undefined>,
-            iteratee: string
-        ): LoDashExplicitWrapper<Dictionary<any>>;
-
-        /**
-         * @see _.mapValues
-         */
-        mapValues<T extends object>(
-            this: LoDashExplicitWrapper<T | null | undefined>,
-            iteratee: string
-        ): LoDashExplicitWrapper<{ [P in keyof T]: any }>;
-
-        /**
-         * @see _.mapValues
-         */
-        mapValues(this: LoDashExplicitWrapper<string | null | undefined>): LoDashExplicitWrapper<NumericDictionary<string>>;
-
-        /**
-         * @see _.mapValues
-         * TODO: This would be better if we had a separate overload for obj: NumericDictionary that returned a NumericDictionary,
-         *       but TypeScript cannot select overload signatures based on number vs string index key type.
-         */
-        mapValues<T>(this: LoDashExplicitWrapper<Dictionary<T> | NumericDictionary<T> | null | undefined>): LoDashExplicitWrapper<Dictionary<T>>;
-
-        /**
-         * @see _.mapValues
-         */
-        mapValues<T extends object>(this: LoDashExplicitWrapper<T>): LoDashExplicitWrapper<T>;
-
-        /**
-         * @see _.mapValues
-         */
-        mapValues<T extends object>(this: LoDashExplicitWrapper<T | null | undefined>): LoDashExplicitWrapper<PartialObject<T>>;
-    }
-
-    // merge
-
-    interface LoDashStatic {
-        /**
-         * Recursively merges own and inherited enumerable properties of source
-         * objects into the destination object, skipping source properties that resolve
-         * to `undefined`. Array and plain object properties are merged recursively.
-         * Other objects and value types are overridden by assignment. Source objects
-         * are applied from left to right. Subsequent sources overwrite property
-         * assignments of previous sources.
-         *
-         * **Note:** This method mutates `object`.
-         *
-         * @category Object
-         * @param object The destination object.
-         * @param [sources] The source objects.
-         * @returns Returns `object`.
-         * @example
-         *
-         * var users = {
-         *   'data': [{ 'user': 'barney' }, { 'user': 'fred' }]
-         * };
-         *
-         * var ages = {
-         *   'data': [{ 'age': 36 }, { 'age': 40 }]
-         * };
-         *
-         * _.merge(users, ages);
-         * // => { 'data': [{ 'user': 'barney', 'age': 36 }, { 'user': 'fred', 'age': 40 }] }
-         */
-        merge<TObject, TSource>(
-            object: TObject,
-            source: TSource
-        ): TObject & TSource;
-
-        /**
-         * @see _.merge
-         */
-        merge<TObject, TSource1, TSource2>(
-            object: TObject,
-            source1: TSource1,
-            source2: TSource2
-        ): TObject & TSource1 & TSource2;
-
-        /**
-         * @see _.merge
-         */
-        merge<TObject, TSource1, TSource2, TSource3>(
-            object: TObject,
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3
-        ): TObject & TSource1 & TSource2 & TSource3;
-
-        /**
-         * @see _.merge
-         */
-        merge<TObject, TSource1, TSource2, TSource3, TSource4>(
-            object: TObject,
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3,
-            source4: TSource4
-        ): TObject & TSource1 & TSource2 & TSource3 & TSource4;
-
-        /**
-         * @see _.merge
-         */
-        merge(
-            object: any,
-            ...otherArgs: any[]
-        ): any;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.merge
-         */
-        merge<TSource>(
-            source: TSource
-        ): LoDashImplicitWrapper<TValue & TSource>;
-
-        /**
-         * @see _.merge
-         */
-        merge<TSource1, TSource2>(
-            source1: TSource1,
-            source2: TSource2
-        ): LoDashImplicitWrapper<TValue & TSource1 & TSource2>;
-
-        /**
-         * @see _.merge
-         */
-        merge<TSource1, TSource2, TSource3>(
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3
-        ): LoDashImplicitWrapper<TValue & TSource1 & TSource2 & TSource3>;
-
-        /**
-         * @see _.merge
-         */
-        merge<TSource1, TSource2, TSource3, TSource4>(
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3,
-            source4: TSource4
-        ): LoDashImplicitWrapper<TValue & TSource1 & TSource2 & TSource3 & TSource4>;
-
-        /**
-         * @see _.merge
-         */
-        merge(
-            ...otherArgs: any[]
-        ): LoDashImplicitWrapper<any>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.merge
-         */
-        merge<TSource>(
-            source: TSource
-        ): LoDashExplicitWrapper<TValue & TSource>;
-
-        /**
-         * @see _.merge
-         */
-        merge<TSource1, TSource2>(
-            source1: TSource1,
-            source2: TSource2
-        ): LoDashExplicitWrapper<TValue & TSource1 & TSource2>;
-
-        /**
-         * @see _.merge
-         */
-        merge<TSource1, TSource2, TSource3>(
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3
-        ): LoDashExplicitWrapper<TValue & TSource1 & TSource2 & TSource3>;
-
-        /**
-         * @see _.merge
-         */
-        merge<TSource1, TSource2, TSource3, TSource4>(
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3,
-            source4: TSource4
-        ): LoDashExplicitWrapper<TValue & TSource1 & TSource2 & TSource3 & TSource4>;
-
-        /**
-         * @see _.merge
-         */
-        merge(
-            ...otherArgs: any[]
-        ): LoDashExplicitWrapper<any>;
-    }
-
-    // mergeWith
-
-    type MergeWithCustomizer = { bivariantHack(value: any, srcValue: any, key: string, object: any, source: any): any; }["bivariantHack"];
-
-    interface LoDashStatic {
-        /**
-         * This method is like `_.merge` except that it accepts `customizer` which
-         * is invoked to produce the merged values of the destination and source
-         * properties. If `customizer` returns `undefined` merging is handled by the
-         * method instead. The `customizer` is invoked with seven arguments:
-         * (objValue, srcValue, key, object, source, stack).
-         *
-         * @category Object
-         * @param object The destination object.
-         * @param sources The source objects.
-         * @param customizer The function to customize assigned values.
-         * @returns Returns `object`.
-         * @example
-         *
-         * function customizer(objValue, srcValue) {
-         *   if (_.isArray(objValue)) {
-         *     return objValue.concat(srcValue);
-         *   }
-         * }
-         *
-         * var object = {
-         *   'fruits': ['apple'],
-         *   'vegetables': ['beet']
-         * };
-         *
-         * var other = {
-         *   'fruits': ['banana'],
-         *   'vegetables': ['carrot']
-         * };
-         *
-         * _.merge(object, other, customizer);
-         * // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot'] }
-         */
-        mergeWith<TObject, TSource>(
-            object: TObject,
-            source: TSource,
-            customizer: MergeWithCustomizer
-        ): TObject & TSource;
-
-        /**
-         * @see _.mergeWith
-         */
-        mergeWith<TObject, TSource1, TSource2>(
-            object: TObject,
-            source1: TSource1,
-            source2: TSource2,
-            customizer: MergeWithCustomizer
-        ): TObject & TSource1 & TSource2;
-
-        /**
-         * @see _.mergeWith
-         */
-        mergeWith<TObject, TSource1, TSource2, TSource3>(
-            object: TObject,
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3,
-            customizer: MergeWithCustomizer
-        ): TObject & TSource1 & TSource2 & TSource3;
-
-        /**
-         * @see _.mergeWith
-         */
-        mergeWith<TObject, TSource1, TSource2, TSource3, TSource4>(
-            object: TObject,
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3,
-            source4: TSource4,
-            customizer: MergeWithCustomizer
-        ): TObject & TSource1 & TSource2 & TSource3 & TSource4;
-
-        /**
-         * @see _.mergeWith
-         */
-        mergeWith(
-            object: any,
-            ...otherArgs: any[]
-        ): any;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.mergeWith
-         */
-        mergeWith<TSource>(
-            source: TSource,
-            customizer: MergeWithCustomizer
-        ): LoDashImplicitWrapper<TValue & TSource>;
-
-        /**
-         * @see _.mergeWith
-         */
-        mergeWith<TSource1, TSource2>(
-            source1: TSource1,
-            source2: TSource2,
-            customizer: MergeWithCustomizer
-        ): LoDashImplicitWrapper<TValue & TSource1 & TSource2>;
-
-        /**
-         * @see _.mergeWith
-         */
-        mergeWith<TSource1, TSource2, TSource3>(
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3,
-            customizer: MergeWithCustomizer
-        ): LoDashImplicitWrapper<TValue & TSource1 & TSource2 & TSource3>;
-
-        /**
-         * @see _.mergeWith
-         */
-        mergeWith<TSource1, TSource2, TSource3, TSource4>(
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3,
-            source4: TSource4,
-            customizer: MergeWithCustomizer
-        ): LoDashImplicitWrapper<TValue & TSource1 & TSource2 & TSource3 & TSource4>;
-
-        /**
-         * @see _.mergeWith
-         */
-        mergeWith(
-            ...otherArgs: any[]
-        ): LoDashImplicitWrapper<any>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.mergeWith
-         */
-        mergeWith<TSource>(
-            source: TSource,
-            customizer: MergeWithCustomizer
-        ): LoDashExplicitWrapper<TValue & TSource>;
-
-        /**
-         * @see _.mergeWith
-         */
-        mergeWith<TSource1, TSource2>(
-            source1: TSource1,
-            source2: TSource2,
-            customizer: MergeWithCustomizer
-        ): LoDashExplicitWrapper<TValue & TSource1 & TSource2>;
-
-        /**
-         * @see _.mergeWith
-         */
-        mergeWith<TSource1, TSource2, TSource3>(
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3,
-            customizer: MergeWithCustomizer
-        ): LoDashExplicitWrapper<TValue & TSource1 & TSource2 & TSource3>;
-
-        /**
-         * @see _.mergeWith
-         */
-        mergeWith<TSource1, TSource2, TSource3, TSource4>(
-            source1: TSource1,
-            source2: TSource2,
-            source3: TSource3,
-            source4: TSource4,
-            customizer: MergeWithCustomizer
-        ): LoDashExplicitWrapper<TValue & TSource1 & TSource2 & TSource3 & TSource4>;
-
-        /**
-         * @see _.mergeWith
-         */
-        mergeWith(
-            ...otherArgs: any[]
-        ): LoDashExplicitWrapper<any>;
-    }
-
-    // omit
-
-    interface LoDashStatic {
-        /**
-         * The opposite of `_.pick`; this method creates an object composed of the
-         * own and inherited enumerable properties of `object` that are not omitted.
-         *
-         * @category Object
-         * @param object The source object.
-         * @param [paths] The property names to omit, specified
-         *  individually or in arrays..
-         * @returns Returns the new object.
-         * @example
-         *
-         * var object = { 'a': 1, 'b': '2', 'c': 3 };
-         *
-         * _.omit(object, ['a', 'c']);
-         * // => { 'b': '2' }
-         */
-        omit<T extends AnyKindOfDictionary>(
-            object: T | null | undefined,
-            ...paths: Array<Many<PropertyName>>
-        ): T;
-
-        /**
-         * @see _.omit
-         */
-        omit<T extends object, K extends keyof T>(
-            object: T | null | undefined,
-            ...paths: Array<Many<K>>
-        ): Omit<T, K>;
-
-        /**
-         * @see _.omit
-         */
-        omit<T extends object>(
-            object: T | null | undefined,
-            ...paths: Array<Many<PropertyName>>
-        ): PartialObject<T>;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.omit
-         */
-        omit<T extends AnyKindOfDictionary>(
-            this: LoDashImplicitWrapper<T | null | undefined>,
-            ...paths: Array<Many<PropertyName>>
-        ): LoDashImplicitWrapper<T>;
-
-        /**
-         * @see _.omit
-         */
-        omit<T extends object, K extends keyof T>(
-            this: LoDashImplicitWrapper<T | null | undefined>,
-            ...paths: Array<Many<K>>
-        ): LoDashImplicitWrapper<Omit<T, K>>;
-
-        /**
-         * @see _.omit
-         */
-        omit<T extends object>(
-            this: LoDashImplicitWrapper<T | null | undefined>,
-            ...paths: Array<Many<PropertyName>>
-        ): LoDashImplicitWrapper<PartialObject<T>>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.omit
-         */
-        omit<T extends AnyKindOfDictionary>(
-            this: LoDashExplicitWrapper<T | null | undefined>,
-            ...paths: Array<Many<PropertyName>>
-        ): LoDashExplicitWrapper<T>;
-
-        /**
-         * @see _.omit
-         */
-        omit<T extends object, K extends keyof T>(
-            this: LoDashExplicitWrapper<T | null | undefined>,
-            ...paths: Array<Many<K>>
-        ): LoDashExplicitWrapper<Omit<T, K>>;
-
-        /**
-         * @see _.omit
-         */
-        omit<T extends object>(
-            this: LoDashExplicitWrapper<T | null | undefined>,
-            ...paths: Array<Many<PropertyName>>
-        ): LoDashExplicitWrapper<PartialObject<T>>;
-    }
-
-    // omitBy
-
-    interface LoDashStatic {
-        /**
-         * The opposite of `_.pickBy`; this method creates an object composed of the
-         * own and inherited enumerable properties of `object` that `predicate`
-         * doesn't return truthy for.
-         *
-         * @category Object
-         * @param object The source object.
-         * @param [predicate=_.identity] The function invoked per property.
-         * @returns Returns the new object.
-         * @example
-         *
-         * var object = { 'a': 1, 'b': '2', 'c': 3 };
-         *
-         * _.omitBy(object, _.isNumber);
-         * // => { 'b': '2' }
-         */
-        omitBy<T extends object>(
-            object: T | null | undefined,
-            predicate: ValueKeyIteratee<T[keyof T]>
-        ): PartialObject<T>;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.omitBy
-         */
-        omitBy<T extends object>(
-            this: LoDashImplicitWrapper<T | null | undefined>,
-            predicate: ValueKeyIteratee<T[keyof T]>
-        ): LoDashImplicitWrapper<PartialObject<T>>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.omitBy
-         */
-        omitBy<T extends object>(
-            this: LoDashExplicitWrapper<T | null | undefined>,
-            predicate: ValueKeyIteratee<T[keyof T]>
-        ): LoDashExplicitWrapper<PartialObject<T>>;
-    }
-
-    // pick
-
-    interface LoDashStatic {
-        /**
-         * Creates an object composed of the picked `object` properties.
-         *
-         * @category Object
-         * @param object The source object.
-         * @param [props] The property names to pick, specified
-         *  individually or in arrays.
-         * @returns Returns the new object.
-         * @example
-         *
-         * var object = { 'a': 1, 'b': '2', 'c': 3 };
-         *
-         * _.pick(object, ['a', 'c']);
-         * // => { 'a': 1, 'c': 3 }
-         */
-        pick<T extends object, U extends keyof T>(
-            object: T,
-             ...props: Array<Many<U>>
-        ): Pick<T, U>;
-
-        /**
-         * @see _.pick
-         */
-        pick<T>(
-            object: T | null | undefined,
-            ...props: PropertyPath[]
-        ): PartialDeep<T>;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.pick
-         */
-        pick<T extends object, U extends keyof T>(
-            this: LoDashImplicitWrapper<T>,
-            ...props: Array<Many<U>>
-        ): LoDashImplicitWrapper<Pick<T, U>>;
-
-        /**
-         * @see _.pick
-         */
-        pick<T extends object>(
-            this: LoDashImplicitWrapper<T | null | undefined>,
-            ...props: PropertyPath[]
-        ): LoDashImplicitWrapper<PartialObject<T>>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.pick
-         */
-        pick<T extends object, U extends keyof T>(
-            this: LoDashExplicitWrapper<T>,
-            ...props: Array<Many<U>>
-        ): LoDashExplicitWrapper<Pick<T, U>>;
-
-        /**
-         * @see _.pick
-         */
-        pick<T extends object>(
-            this: LoDashExplicitWrapper<T | null | undefined>,
-            ...props: PropertyPath[]
-        ): LoDashExplicitWrapper<PartialObject<T>>;
-    }
-
-    // pickBy
-
-    interface LoDashStatic {
-        /**
-         * Creates an object composed of the `object` properties `predicate` returns
-         * truthy for. The predicate is invoked with two arguments: (value, key).
-         *
-         * @category Object
-         * @param object The source object.
-         * @param [predicate=_.identity] The function invoked per property.
-         * @returns Returns the new object.
-         * @example
-         *
-         * var object = { 'a': 1, 'b': '2', 'c': 3 };
-         *
-         * _.pickBy(object, _.isNumber);
-         * // => { 'a': 1, 'c': 3 }
-         */
-        pickBy<T extends object>(
-            object: T | null | undefined,
-            predicate?: ValueKeyIteratee<T[keyof T]>
-        ): PartialObject<T>;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.pickBy
-         */
-        pickBy<T extends object>(
-            this: LoDashImplicitWrapper<T | null | undefined>,
-            predicate?: ValueKeyIteratee<T[keyof T]>
-        ): LoDashImplicitWrapper<PartialObject<T>>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.pickBy
-         */
-        pickBy<T extends object>(
-            this: LoDashExplicitWrapper<T | null | undefined>,
-            predicate?: ValueKeyIteratee<T[keyof T]>
-        ): LoDashExplicitWrapper<PartialObject<T>>;
-    }
-
-    // result
-
-    interface LoDashStatic {
-        /**
-         * This method is like _.get except that if the resolved value is a function it’s invoked with the this binding
-         * of its parent object and its result is returned.
-         *
-         * @param object The object to query.
-         * @param path The path of the property to resolve.
-         * @param defaultValue The value returned if the resolved value is undefined.
-         * @return Returns the resolved value.
-         */
-        result<TResult>(
-            object: any,
-            path: PropertyPath,
-            defaultValue?: TResult|((...args: any[]) => TResult)
-        ): TResult;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.result
-         */
-        result<TResult>(
-            path: PropertyPath,
-            defaultValue?: TResult|((...args: any[]) => TResult)
-        ): TResult;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.result
-         */
-        result<TResult>(
-            path: PropertyPath,
-            defaultValue?: TResult|((...args: any[]) => TResult)
-        ): LoDashExplicitWrapper<TResult>;
-    }
-
-    // set
-
-    interface LoDashStatic {
-        /**
-         * Sets the value at path of object. If a portion of path doesn’t exist it’s created. Arrays are created for
-         * missing index properties while objects are created for all other missing properties. Use _.setWith to
-         * customize path creation.
-         *
-         * @param object The object to modify.
-         * @param path The path of the property to set.
-         * @param value The value to set.
-         * @return Returns object.
-         */
-        set<T extends object>(
-            object: T,
-            path: PropertyPath,
-            value: any
-        ): T;
-
-        /**
-         * @see _.set
-         */
-        set<TResult>(
-            object: object,
-            path: PropertyPath,
-            value: any
-        ): TResult;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.set
-         */
-        set(
-            path: PropertyPath,
-            value: any
-        ): this;
-
-        /**
-         * @see _.set
-         */
-        set<TResult>(
-            path: PropertyPath,
-            value: any
-        ): LoDashImplicitWrapper<TResult>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.set
-         */
-        set(
-            path: PropertyPath,
-            value: any
-        ): this;
-
-        /**
-         * @see _.set
-         */
-        set<TResult>(
-            path: PropertyPath,
-            value: any
-        ): LoDashExplicitWrapper<TResult>;
-    }
-
-    // setWith
-
-    type SetWithCustomizer<T> = (nsValue: any, key: string, nsObject: T) => any;
-
-    interface LoDashStatic {
-        /**
-         * This method is like _.set except that it accepts customizer which is invoked to produce the objects of
-         * path. If customizer returns undefined path creation is handled by the method instead. The customizer is
-         * invoked with three arguments: (nsValue, key, nsObject).
-         *
-         * @param object The object to modify.
-         * @param path The path of the property to set.
-         * @param value The value to set.
-         * @param customizer The function to customize assigned values.
-         * @return Returns object.
-         */
-        setWith<T extends object>(
-            object: T,
-            path: PropertyPath,
-            value: any,
-            customizer?: SetWithCustomizer<T>
-        ): T;
-
-        setWith<T extends object, TResult>(
-            object: T,
-            path: PropertyPath,
-            value: any,
-            customizer?: SetWithCustomizer<T>
-        ): TResult;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.setWith
-         */
-        setWith(
-            path: PropertyPath,
-            value: any,
-            customizer?: SetWithCustomizer<TValue>
-        ): this;
-
-        /**
-         * @see _.setWith
-         */
-        setWith<TResult>(
-            path: PropertyPath,
-            value: any,
-            customizer?: SetWithCustomizer<TValue>
-        ): LoDashImplicitWrapper<TResult>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.setWith
-         */
-        setWith(
-            path: PropertyPath,
-            value: any,
-            customizer?: SetWithCustomizer<TValue>
-        ): this;
-
-        /**
-         * @see _.setWith
-         */
-        setWith<TResult>(
-            path: PropertyPath,
-            value: any,
-            customizer?: SetWithCustomizer<TValue>
-        ): LoDashExplicitWrapper<TResult>;
-    }
-
-    // toPairs
-
-    interface LoDashStatic {
-        /**
-         * Creates an array of own enumerable key-value pairs for object.
-         *
-         * @param object The object to query.
-         * @return Returns the new array of key-value pairs.
-         */
-        toPairs<T>(object?: Dictionary<T> | NumericDictionary<T>): Array<[string, T]>;
-
-        /**
-         * @see _.toPairs
-         */
-        toPairs(object?: object): Array<[string, any]>;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.toPairs
-         */
-        toPairs<T>(this: LoDashImplicitWrapper<Dictionary<T> | NumericDictionary<T>>): LoDashImplicitWrapper<Array<[string, T]>>;
-
-        /**
-         * @see _.toPairs
-         */
-        toPairs(): LoDashImplicitWrapper<Array<[string, any]>>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.toPairs
-         */
-        toPairs<T>(this: LoDashExplicitWrapper<Dictionary<T> | NumericDictionary<T>>): LoDashExplicitWrapper<Array<[string, T]>>;
-
-        /**
-         * @see _.toPairs
-         */
-        toPairs(): LoDashExplicitWrapper<Array<[string, any]>>;
-    }
-
-    // toPairsIn
-
-    interface LoDashStatic {
-        /**
-         * Creates an array of own and inherited enumerable key-value pairs for object.
-         *
-         * @param object The object to query.
-         * @return Returns the new array of key-value pairs.
-         */
-        toPairsIn<T>(object?: Dictionary<T> | NumericDictionary<T>): Array<[string, T]>;
-
-        /**
-         * @see _.toPairsIn
-         */
-        toPairsIn(object?: object): Array<[string, any]>;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.toPairsIn
-         */
-        toPairsIn<T>(this: LoDashImplicitWrapper<Dictionary<T> | NumericDictionary<T>>): LoDashImplicitWrapper<Array<[string, T]>>;
-
-        /**
-         * @see _.toPairsIn
-         */
-        toPairsIn(): LoDashImplicitWrapper<Array<[string, any]>>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.toPairsIn
-         */
-        toPairsIn<T>(this: LoDashExplicitWrapper<Dictionary<T> | NumericDictionary<T>>): LoDashExplicitWrapper<Array<[string, T]>>;
-
-        /**
-         * @see _.toPairsIn
-         */
-        toPairsIn(): LoDashExplicitWrapper<Array<[string, any]>>;
-    }
-
-    // transform
-
-    interface LoDashStatic {
-        /**
-         * An alternative to _.reduce; this method transforms object to a new accumulator object which is the result of
-         * running each of its own enumerable properties through iteratee, with each invocation potentially mutating
-         * the accumulator object. The iteratee is invoked with four arguments: (accumulator,
-         * value, key, object). Iteratee functions may exit iteration early by explicitly returning false.
-         *
-         * @param object The object to iterate over.
-         * @param iteratee The function invoked per iteration.
-         * @param accumulator The custom accumulator value.
-         * @return Returns the accumulated value.
-         */
-        transform<T, TResult>(
-            object: T[],
-            iteratee: MemoVoidArrayIterator<T, TResult[]>,
-            accumulator?: TResult[]
-        ): TResult[];
-
-        /**
-         * @see _.transform
-         */
-        transform<T, TResult>(
-            object: T[],
-            iteratee: MemoVoidArrayIterator<T, Dictionary<TResult>>,
-            accumulator: Dictionary<TResult>
-        ): Dictionary<TResult>;
-
-        /**
-         * @see _.transform
-         */
-        transform<T, TResult>(
-            object: Dictionary<T>,
-            iteratee: MemoVoidDictionaryIterator<T, Dictionary<TResult>>,
-            accumulator?: Dictionary<TResult>
-        ): Dictionary<TResult>;
-
-        /**
-         * @see _.transform
-         */
-        transform<T, TResult>(
-            object: Dictionary<T>,
-            iteratee: MemoVoidDictionaryIterator<T, TResult[]>,
-            accumulator: TResult[]
-        ): TResult[];
-
-        /**
-         * @see _.transform
-         */
-        transform(
-            object: any[],
-        ): any[];
-
-        /**
-         * @see _.transform
-         */
-        transform(
-            object: object,
-        ): Dictionary<any>;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.transform
-         */
-        transform<T, TResult>(
-            this: LoDashImplicitWrapper<T[]>,
-            iteratee: MemoVoidArrayIterator<T, TResult[]>,
-            accumulator?: TResult[]
-        ): LoDashImplicitWrapper<TResult[]>;
-
-        /**
-         * @see _.transform
-         */
-        transform<T, TResult>(
-            this: LoDashImplicitWrapper<T[]>,
-            iteratee: MemoVoidArrayIterator<T, Dictionary<TResult>>,
-            accumulator: Dictionary<TResult>
-        ): LoDashImplicitWrapper<Dictionary<TResult>>;
-
-        /**
-         * @see _.transform
-         */
-        transform<T, TResult>(
-            this: LoDashImplicitWrapper<Dictionary<T>>,
-            iteratee: MemoVoidDictionaryIterator<T, Dictionary<TResult>>,
-            accumulator?: Dictionary<TResult>
-        ): LoDashImplicitWrapper<Dictionary<TResult>>;
-
-        /**
-         * @see _.transform
-         */
-        transform<T, TResult>(
-            this: LoDashImplicitWrapper<Dictionary<T>>,
-            iteratee: MemoVoidDictionaryIterator<T, TResult[]>,
-            accumulator: TResult[]
-        ): LoDashImplicitWrapper<TResult[]>;
-
-        /**
-         * @see _.transform
-         */
-        transform(
-            this: LoDashImplicitWrapper<any[]>,
-        ): LoDashImplicitWrapper<any[]>;
-
-        /**
-         * @see _.transform
-         */
-        transform(): LoDashImplicitWrapper<Dictionary<any>>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.transform
-         */
-        transform<T, TResult>(
-            this: LoDashExplicitWrapper<T[]>,
-            iteratee: MemoVoidArrayIterator<T, TResult[]>,
-            accumulator?: TResult[]
-        ): LoDashExplicitWrapper<TResult[]>;
-
-        /**
-         * @see _.transform
-         */
-        transform<T, TResult>(
-            this: LoDashExplicitWrapper<T[]>,
-            iteratee: MemoVoidArrayIterator<T, Dictionary<TResult>>,
-            accumulator?: Dictionary<TResult>
-        ): LoDashExplicitWrapper<Dictionary<TResult>>;
-
-        /**
-         * @see _.transform
-         */
-        transform<T, TResult>(
-            this: LoDashExplicitWrapper<Dictionary<T>>,
-            iteratee: MemoVoidDictionaryIterator<T, Dictionary<TResult>>,
-            accumulator?: Dictionary<TResult>
-        ): LoDashExplicitWrapper<Dictionary<TResult>>;
-
-        /**
-         * @see _.transform
-         */
-        transform<T, TResult>(
-            this: LoDashExplicitWrapper<Dictionary<T>>,
-            iteratee: MemoVoidDictionaryIterator<T, TResult[]>,
-            accumulator?: TResult[]
-        ): LoDashExplicitWrapper<TResult[]>;
-
-        /**
-         * @see _.transform
-         */
-        transform(
-            this: LoDashExplicitWrapper<any[]>,
-        ): LoDashExplicitWrapper<any[]>;
-
-        /**
-         * @see _.transform
-         */
-        transform(): LoDashExplicitWrapper<Dictionary<any>>;
-    }
-
-    // unset
-
-    interface LoDashStatic {
-        /**
-         * Removes the property at path of object.
-         *
-         * Note: This method mutates object.
-         *
-         * @param object The object to modify.
-         * @param path The path of the property to unset.
-         * @return Returns true if the property is deleted, else false.
-         */
-        unset(
-            object: any,
-            path: PropertyPath
-        ): boolean;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.unset
-         */
-        unset(path: PropertyPath): LoDashImplicitWrapper<boolean>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.unset
-         */
-        unset(path: PropertyPath): LoDashExplicitWrapper<boolean>;
-    }
-
-    // update
-
-    interface LoDashStatic {
-        /**
-         * This method is like _.set except that accepts updater to produce the value to set. Use _.updateWith to
-         * customize path creation. The updater is invoked with one argument: (value).
-         *
-         * @param object The object to modify.
-         * @param path The path of the property to set.
-         * @param updater The function to produce the updated value.
-         * @return Returns object.
-         */
-        update(
-            object: object,
-            path: PropertyPath,
-            updater: (value: any) => any
-        ): any;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.update
-         */
-        update(
-            path: PropertyPath,
-            updater: (value: any) => any
-        ): LoDashImplicitWrapper<any>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.update
-         */
-        update(
-            path: PropertyPath,
-            updater: (value: any) => any
-        ): LoDashExplicitWrapper<any>;
-    }
-
-    // updateWith
-
-    interface LoDashStatic {
-        /**
-         * This method is like `_.update` except that it accepts `customizer` which is
-         * invoked to produce the objects of `path`.  If `customizer` returns `undefined`
-         * path creation is handled by the method instead. The `customizer` is invoked
-         * with three arguments: (nsValue, key, nsObject).
-         *
-         * **Note:** This method mutates `object`.
-         *
-         * @since 4.6.0
-         * @category Object
-         * @param object The object to modify.
-         * @param path The path of the property to set.
-         * @param updater The function to produce the updated value.
-         * @param [customizer] The function to customize assigned values.
-         * @returns Returns `object`.
-         * @example
-         *
-         * var object = {};
-         *
-         * _.updateWith(object, '[0][1]', _.constant('a'), Object);
-         * // => { '0': { '1': 'a' } }
-         */
-        updateWith<T extends object>(
-            object: T,
-            path: PropertyPath,
-            updater: (oldValue: any) => any,
-            customizer?: SetWithCustomizer<T>
-        ): T;
-
-        /**
-         * @see _.updateWith
-         */
-        updateWith<T extends object, TResult>(
-            object: T,
-            path: PropertyPath,
-            updater: (oldValue: any) => any,
-            customizer?: SetWithCustomizer<T>
-        ): TResult;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.updateWith
-         */
-        updateWith(
-            path: PropertyPath,
-            updater: (oldValue: any) => any,
-            customizer?: SetWithCustomizer<TValue>
-        ): this;
-
-        /**
-         * @see _.updateWith
-         */
-        updateWith<TResult>(
-            path: PropertyPath,
-            updater: (oldValue: any) => any,
-            customizer?: SetWithCustomizer<TValue>
-        ): LoDashImplicitWrapper<TResult>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.updateWith
-         */
-        updateWith(
-            path: PropertyPath,
-            updater: (oldValue: any) => any,
-            customizer?: SetWithCustomizer<TValue>
-        ): this;
-
-        /**
-         * @see _.updateWith
-         */
-        updateWith<TResult>(
-            path: PropertyPath,
-            updater: (oldValue: any) => any,
-            customizer?: SetWithCustomizer<TValue>
-        ): LoDashExplicitWrapper<TResult>;
-    }
-
-    // values
-
-    interface LoDashStatic {
-        /**
-         * Creates an array of the own enumerable property values of object.
-         *
-         * @param object The object to query.
-         * @return Returns an array of property values.
-         */
-        values<T>(object: Dictionary<T> | NumericDictionary<T> | List<T> | null | undefined): T[];
-
-        /**
-         * @see _.values
-         */
-        values<T extends object>(object: T | null | undefined): Array<T[keyof T]>;
-
-        /**
-         * @see _.values
-         */
-        values(object: any): any[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.values
-         */
-        values<T>(this: LoDashImplicitWrapper<Dictionary<T> | NumericDictionary<T> | List<T> | null | undefined>): LoDashImplicitWrapper<T[]>;
-
-        /**
-         * @see _.values
-         */
-        values<T extends object>(this: LoDashImplicitWrapper<T | null | undefined>): LoDashImplicitWrapper<Array<T[keyof T]>>;
-
-        /**
-         * @see _.values
-         */
-        values(): LoDashImplicitWrapper<any[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.values
-         */
-        values<T>(this: LoDashExplicitWrapper<Dictionary<T> | NumericDictionary<T> | List<T> | null | undefined>): LoDashExplicitWrapper<T[]>;
-
-        /**
-         * @see _.values
-         */
-        values<T extends object>(this: LoDashExplicitWrapper<T | null | undefined>): LoDashExplicitWrapper<Array<T[keyof T]>>;
-
-        /**
-         * @see _.values
-         */
-        values(): LoDashExplicitWrapper<any[]>;
-    }
-
-    // valuesIn
-
-    interface LoDashStatic {
-        /**
-         * Creates an array of the own and inherited enumerable property values of object.
-         *
-         * @param object The object to query.
-         * @return Returns the array of property values.
-         */
-        valuesIn<T>(object: Dictionary<T>|NumericDictionary<T>|List<T> | null | undefined): T[];
-
-        /**
-         * @see _.valuesIn
-         */
-        valuesIn<T extends object>(object: T | null | undefined): Array<T[keyof T]>;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.valuesIn
-         */
-        valuesIn<T>(this: LoDashImplicitWrapper<Dictionary<T> | NumericDictionary<T> | List<T> | null | undefined>): LoDashImplicitWrapper<T[]>;
-
-        /**
-         * @see _.valuesIn
-         */
-        valuesIn<T extends object>(this: LoDashImplicitWrapper<T | null | undefined>): LoDashImplicitWrapper<Array<T[keyof T]>>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.valuesIn
-         */
-        valuesIn<T>(this: LoDashExplicitWrapper<Dictionary<T> | NumericDictionary<T> | List<T> | null | undefined>): LoDashExplicitWrapper<T[]>;
-
-        /**
-         * @see _.valuesIn
-         */
-        valuesIn<T extends object>(this: LoDashExplicitWrapper<T | null | undefined>): LoDashExplicitWrapper<Array<T[keyof T]>>;
-    }
-}
diff --git a/jtg js/node_modules/@types/lodash/common/seq.d.ts b/jtg js/node_modules/@types/lodash/common/seq.d.ts
deleted file mode 100644
index bc3cc39963ee07fb8d252e39e5395231f5a7d6a7..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/common/seq.d.ts	
+++ /dev/null
@@ -1,196 +0,0 @@
-import _ = require("../index");
-declare module "../index" {
-    // chain
-
-    interface LoDashStatic {
-        /**
-         * Creates a lodash object that wraps value with explicit method chaining enabled.
-         *
-         * @param value The value to wrap.
-         * @return Returns the new lodash wrapper instance.
-         */
-        chain<T>(value: T): LoDashExplicitWrapper<T>;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.chain
-         */
-        chain(): LoDashExplicitWrapper<TValue>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.chain
-         */
-        chain(): this;
-    }
-
-    // prototype.chain
-
-    interface LoDashStatic {
-        /**
-         * Creates a lodash object that wraps value with explicit method chaining enabled.
-         *
-         * @param value The value to wrap.
-         * @return Returns the new lodash wrapper instance.
-         */
-        chain<T>(value: T): LoDashExplicitWrapper<T>;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.chain
-         */
-        chain(): LoDashExplicitWrapper<TValue>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.chain
-         */
-        chain(): this;
-    }
-
-    // prototype.commit
-
-    interface LoDashWrapper<TValue> {
-        /**
-         * Executes the chained sequence and returns the wrapped result.
-         *
-         * @return Returns the new lodash wrapper instance.
-         */
-        commit(): this;
-    }
-
-    // prototype.plant
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * Creates a clone of the chained sequence planting value as the wrapped value.
-         * @param value The value to plant as the wrapped value.
-         * @return Returns the new lodash wrapper instance.
-         */
-        plant<T>(value: T): LoDashImplicitWrapper<T>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.plant
-         */
-        plant<T>(value: T): LoDashExplicitWrapper<T>;
-    }
-
-    // prototype.reverse
-
-    interface LoDashWrapper<TValue> {
-        /**
-         * Reverses the wrapped array so the first element becomes the last, the second element becomes the second to
-         * last, and so on.
-         *
-         * Note: This method mutates the wrapped array.
-         *
-         * @return Returns the new reversed lodash wrapper instance.
-         */
-        reverse(): this;
-    }
-
-    // prototype.toJSON
-
-    interface LoDashWrapper<TValue> {
-        /**
-         * @see _.value
-         */
-        toJSON(): TValue;
-    }
-
-    // prototype.toString
-
-    interface LoDashWrapper<TValue> {
-        /**
-         * Produces the result of coercing the unwrapped value to a string.
-         *
-         * @return Returns the coerced string value.
-         */
-        toString(): string;
-    }
-
-    // prototype.value
-
-    interface LoDashWrapper<TValue> {
-        /**
-         * Executes the chained sequence to extract the unwrapped value.
-         *
-         * @alias _.toJSON, _.valueOf
-         *
-         * @return Returns the resolved unwrapped value.
-         */
-        value(): TValue;
-    }
-
-    // prototype.valueOf
-
-    interface LoDashWrapper<TValue> {
-        /**
-         * @see _.value
-         */
-        valueOf(): TValue;
-    }
-
-    // tap
-
-    interface LoDashStatic {
-        /**
-         * This method invokes interceptor and returns value. The interceptor is invoked with one
-         * argument; (value). The purpose of this method is to "tap into" a method chain in order to perform operations
-         * on intermediate results within the chain.
-         *
-         * @param value The value to provide to interceptor.
-         * @param interceptor The function to invoke.
-         * @return Returns value.
-         **/
-        tap<T>(
-            value: T,
-            interceptor: (value: T) => void
-        ): T;
-    }
-
-    interface LoDashWrapper<TValue> {
-        /**
-         * @see _.tap
-         */
-        tap(
-            interceptor: (value: TValue) => void
-        ): this;
-    }
-
-    // thru
-
-    interface LoDashStatic {
-        /**
-         * This method is like _.tap except that it returns the result of interceptor.
-         *
-         * @param value The value to provide to interceptor.
-         * @param interceptor The function to invoke.
-         * @return Returns the result of interceptor.
-         */
-        thru<T, TResult>(
-            value: T,
-            interceptor: (value: T) => TResult
-        ): TResult;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.thru
-         */
-        thru<TResult>(interceptor: (value: TValue) => TResult): LoDashImplicitWrapper<TResult>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.thru
-         */
-        thru<TResult>(interceptor: (value: TValue) => TResult): LoDashExplicitWrapper<TResult>;
-    }
-}
diff --git a/jtg js/node_modules/@types/lodash/common/string.d.ts b/jtg js/node_modules/@types/lodash/common/string.d.ts
deleted file mode 100644
index d940406d0d42ec6e78652dc9e641f33ae7c9a2f2..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/common/string.d.ts	
+++ /dev/null
@@ -1,1059 +0,0 @@
-import _ = require("../index");
-declare module "../index" {
-    // camelCase
-
-    interface LoDashStatic {
-        /**
-         * Converts string to camel case.
-         *
-         * @param string The string to convert.
-         * @return Returns the camel cased string.
-         */
-        camelCase(string?: string): string;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.camelCase
-         */
-        camelCase(): string;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.camelCase
-         */
-        camelCase(): LoDashExplicitWrapper<string>;
-    }
-
-    // capitalize
-
-    interface LoDashStatic {
-        /**
-         * Converts the first character of string to upper case and the remaining to lower case.
-         *
-         * @param string The string to capitalize.
-         * @return Returns the capitalized string.
-         */
-        capitalize(string?: string): string;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.capitalize
-         */
-        capitalize(): string;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.capitalize
-         */
-        capitalize(): LoDashExplicitWrapper<string>;
-    }
-
-    // deburr
-
-    interface LoDashStatic {
-        /**
-         * Deburrs string by converting latin-1 supplementary letters to basic latin letters and removing combining
-         * diacritical marks.
-         *
-         * @param string The string to deburr.
-         * @return Returns the deburred string.
-         */
-        deburr(string?: string): string;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.deburr
-         */
-        deburr(): string;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.deburr
-         */
-        deburr(): LoDashExplicitWrapper<string>;
-    }
-
-    // endsWith
-
-    interface LoDashStatic {
-        /**
-         * Checks if string ends with the given target string.
-         *
-         * @param string The string to search.
-         * @param target The string to search for.
-         * @param position The position to search from.
-         * @return Returns true if string ends with target, else false.
-         */
-        endsWith(
-            string?: string,
-            target?: string,
-            position?: number
-        ): boolean;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.endsWith
-         */
-        endsWith(
-            target?: string,
-            position?: number
-        ): boolean;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.endsWith
-         */
-        endsWith(
-            target?: string,
-            position?: number
-        ): LoDashExplicitWrapper<boolean>;
-    }
-
-    // escape
-
-    interface LoDashStatic {
-        /**
-         * Converts the characters "&", "<", ">", '"', "'", and "`" in string to their corresponding HTML entities.
-         *
-         * Note: No other characters are escaped. To escape additional characters use a third-party library like he.
-         *
-         * hough the ">" character is escaped for symmetry, characters like ">" and "/" don’t need escaping in HTML
-         * and have no special meaning unless they're part of a tag or unquoted attribute value. See Mathias Bynens’s
-         * article (under "semi-related fun fact") for more details.
-         *
-         * Backticks are escaped because in IE < 9, they can break out of attribute values or HTML comments. See #59,
-         * #102, #108, and #133 of the HTML5 Security Cheatsheet for more details.
-         *
-         * When working with HTML you should always quote attribute values to reduce XSS vectors.
-         *
-         * @param string The string to escape.
-         * @return Returns the escaped string.
-         */
-        escape(string?: string): string;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.escape
-         */
-        escape(): string;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.escape
-         */
-        escape(): LoDashExplicitWrapper<string>;
-    }
-
-    // escapeRegExp
-
-    interface LoDashStatic {
-        /**
-         * Escapes the RegExp special characters "^", "$", "\", ".", "*", "+", "?", "(", ")", "[", "]",
-         * "{", "}", and "|" in string.
-         *
-         * @param string The string to escape.
-         * @return Returns the escaped string.
-         */
-        escapeRegExp(string?: string): string;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.escapeRegExp
-         */
-        escapeRegExp(): string;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.escapeRegExp
-         */
-        escapeRegExp(): LoDashExplicitWrapper<string>;
-    }
-
-    // kebabCase
-
-    interface LoDashStatic {
-        /**
-         * Converts string to kebab case.
-         *
-         * @param string The string to convert.
-         * @return Returns the kebab cased string.
-         */
-        kebabCase(string?: string): string;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.kebabCase
-         */
-        kebabCase(): string;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.kebabCase
-         */
-        kebabCase(): LoDashExplicitWrapper<string>;
-    }
-
-    // lowerCase
-
-    interface LoDashStatic {
-        /**
-         * Converts `string`, as space separated words, to lower case.
-         *
-         * @param string The string to convert.
-         * @return Returns the lower cased string.
-         */
-        lowerCase(string?: string): string;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.lowerCase
-         */
-        lowerCase(): string;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.lowerCase
-         */
-        lowerCase(): LoDashExplicitWrapper<string>;
-    }
-
-    // lowerFirst
-
-    interface LoDashStatic {
-        /**
-         * Converts the first character of `string` to lower case.
-         *
-         * @param string The string to convert.
-         * @return Returns the converted string.
-         */
-        lowerFirst(string?: string): string;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.lowerFirst
-         */
-        lowerFirst(): string;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.lowerFirst
-         */
-        lowerFirst(): LoDashExplicitWrapper<string>;
-    }
-
-    // pad
-
-    interface LoDashStatic {
-        /**
-         * Pads string on the left and right sides if it’s shorter than length. Padding characters are truncated if
-         * they can’t be evenly divided by length.
-         *
-         * @param string The string to pad.
-         * @param length The padding length.
-         * @param chars The string used as padding.
-         * @return Returns the padded string.
-         */
-        pad(
-            string?: string,
-            length?: number,
-            chars?: string
-        ): string;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.pad
-         */
-        pad(
-            length?: number,
-            chars?: string
-        ): string;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.pad
-         */
-        pad(
-            length?: number,
-            chars?: string
-        ): LoDashExplicitWrapper<string>;
-    }
-
-    // padEnd
-
-    interface LoDashStatic {
-        /**
-         * Pads string on the right side if it’s shorter than length. Padding characters are truncated if they exceed
-         * length.
-         *
-         * @param string The string to pad.
-         * @param length The padding length.
-         * @param chars The string used as padding.
-         * @return Returns the padded string.
-         */
-        padEnd(
-            string?: string,
-            length?: number,
-            chars?: string
-        ): string;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.padEnd
-         */
-        padEnd(
-            length?: number,
-            chars?: string
-        ): string;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.padEnd
-         */
-        padEnd(
-            length?: number,
-            chars?: string
-        ): LoDashExplicitWrapper<string>;
-    }
-
-    // padStart
-
-    interface LoDashStatic {
-        /**
-         * Pads string on the left side if it’s shorter than length. Padding characters are truncated if they exceed
-         * length.
-         *
-         * @param string The string to pad.
-         * @param length The padding length.
-         * @param chars The string used as padding.
-         * @return Returns the padded string.
-         */
-        padStart(
-            string?: string,
-            length?: number,
-            chars?: string
-        ): string;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.padStart
-         */
-        padStart(
-            length?: number,
-            chars?: string
-        ): string;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.padStart
-         */
-        padStart(
-            length?: number,
-            chars?: string
-        ): LoDashExplicitWrapper<string>;
-    }
-
-    // parseInt
-
-    interface LoDashStatic {
-        /**
-         * Converts string to an integer of the specified radix. If radix is undefined or 0, a radix of 10 is used
-         * unless value is a hexadecimal, in which case a radix of 16 is used.
-         *
-         * Note: This method aligns with the ES5 implementation of parseInt.
-         *
-         * @param string The string to convert.
-         * @param radix The radix to interpret value by.
-         * @return Returns the converted integer.
-         */
-        parseInt(
-            string: string,
-            radix?: number
-        ): number;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.parseInt
-         */
-        parseInt(radix?: number): number;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.parseInt
-         */
-        parseInt(radix?: number): LoDashExplicitWrapper<number>;
-    }
-
-    // repeat
-
-    interface LoDashStatic {
-        /**
-         * Repeats the given string n times.
-         *
-         * @param string The string to repeat.
-         * @param n The number of times to repeat the string.
-         * @return Returns the repeated string.
-         */
-        repeat(
-            string?: string,
-            n?: number
-        ): string;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.repeat
-         */
-        repeat(n?: number): string;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.repeat
-         */
-        repeat(n?: number): LoDashExplicitWrapper<string>;
-    }
-
-    type ReplaceFunction = (match: string, ...args: any[]) => string;
-
-    // replace
-
-    interface LoDashStatic {
-        /**
-         * Replaces matches for pattern in string with replacement.
-         *
-         * Note: This method is based on String#replace.
-         *
-         * @return Returns the modified string.
-         */
-        replace(
-            string: string,
-            pattern: RegExp | string,
-            replacement: ReplaceFunction | string
-        ): string;
-
-        /**
-         * @see _.replace
-         */
-        replace(
-            pattern: RegExp | string,
-            replacement: ReplaceFunction | string
-        ): string;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.replace
-         */
-        replace(
-            pattern: RegExp|string,
-            replacement: ReplaceFunction | string
-        ): string;
-
-        /**
-         * @see _.replace
-         */
-        replace(
-            replacement: ReplaceFunction | string
-        ): string;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.replace
-         */
-        replace(
-            pattern: RegExp | string,
-            replacement: ReplaceFunction | string
-        ): LoDashExplicitWrapper<string>;
-
-        /**
-         * @see _.replace
-         */
-        replace(
-            replacement: ReplaceFunction | string
-        ): LoDashExplicitWrapper<string>;
-    }
-
-    // snakeCase
-
-    interface LoDashStatic {
-        /**
-         * Converts string to snake case.
-         *
-         * @param string The string to convert.
-         * @return Returns the snake cased string.
-         */
-        snakeCase(string?: string): string;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.snakeCase
-         */
-        snakeCase(): string;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.snakeCase
-         */
-        snakeCase(): LoDashExplicitWrapper<string>;
-    }
-
-    // split
-
-    interface LoDashStatic {
-        /**
-         * Splits string by separator.
-         *
-         * Note: This method is based on String#split.
-         *
-         * @param string The string to trim.
-         * @param separator The separator pattern to split by.
-         * @param limit The length to truncate results to.
-         * @return Returns the new array of string segments.
-         */
-        split(
-            string: string,
-            separator?: RegExp|string,
-            limit?: number
-        ): string[];
-
-        /**
-         * Splits string by separator.
-         *
-         * Note: This method is based on String#split.
-         *
-         * @param string The string to trim.
-         * @param index Not used in this overload.
-         * @param guard Enables use as an iteratee for methods like _.map. You should not pass this parameter directly in your code.
-         * @return Returns the new array of string segments.
-         */
-        split(
-            string: string,
-            index: string | number,
-            guard: object
-        ): string[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.split
-         */
-        split(
-            separator?: RegExp|string,
-            limit?: number
-        ): LoDashImplicitWrapper<string[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.split
-         */
-        split(
-            separator?: RegExp|string,
-            limit?: number
-        ): LoDashExplicitWrapper<string[]>;
-    }
-
-    // startCase
-
-    interface LoDashStatic {
-        /**
-         * Converts string to start case.
-         *
-         * @param string The string to convert.
-         * @return Returns the start cased string.
-         */
-        startCase(string?: string): string;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.startCase
-         */
-        startCase(): string;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.startCase
-         */
-        startCase(): LoDashExplicitWrapper<string>;
-    }
-
-    // startsWith
-
-    interface LoDashStatic {
-        /**
-         * Checks if string starts with the given target string.
-         *
-         * @param string The string to search.
-         * @param target The string to search for.
-         * @param position The position to search from.
-         * @return Returns true if string starts with target, else false.
-         */
-        startsWith(
-            string?: string,
-            target?: string,
-            position?: number
-        ): boolean;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.startsWith
-         */
-        startsWith(
-            target?: string,
-            position?: number
-        ): boolean;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.startsWith
-         */
-        startsWith(
-            target?: string,
-            position?: number
-        ): LoDashExplicitWrapper<boolean>;
-    }
-
-    // template
-
-    interface TemplateOptions extends TemplateSettings {
-        /**
-         * The sourceURL of the template's compiled source.
-         */
-        sourceURL?: string;
-    }
-
-    interface TemplateExecutor {
-        (data?: object): string;
-        source: string;
-    }
-
-    interface LoDashStatic {
-        /**
-         * Creates a compiled template function that can interpolate data properties in "interpolate" delimiters,
-         * HTML-escape interpolated data properties in "escape" delimiters, and execute JavaScript in "evaluate"
-         * delimiters. Data properties may be accessed as free variables in the template. If a setting object is
-         * provided it takes precedence over _.templateSettings values.
-         *
-         * Note: In the development build _.template utilizes
-         * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl) for easier
-         * debugging.
-         *
-         * For more information on precompiling templates see
-         * [lodash's custom builds documentation](https://lodash.com/custom-builds).
-         *
-         * For more information on Chrome extension sandboxes see
-         * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).
-         *
-         * @param string The template string.
-         * @param options The options object.
-         * @param options.escape The HTML "escape" delimiter.
-         * @param options.evaluate The "evaluate" delimiter.
-         * @param options.imports An object to import into the template as free variables.
-         * @param options.interpolate The "interpolate" delimiter.
-         * @param options.sourceURL The sourceURL of the template's compiled source.
-         * @param options.variable The data object variable name.
-         * @return Returns the compiled template function.
-         */
-        template(
-            string?: string,
-            options?: TemplateOptions
-        ): TemplateExecutor;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.template
-         */
-        template(options?: TemplateOptions): TemplateExecutor;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.template
-         */
-        template(options?: TemplateOptions): LoDashExplicitWrapper<TemplateExecutor>;
-    }
-
-    // toLower
-
-    interface LoDashStatic {
-        /**
-         * Converts `string`, as a whole, to lower case.
-         *
-         * @param string The string to convert.
-         * @return Returns the lower cased string.
-         */
-        toLower(string?: string): string;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.toLower
-         */
-        toLower(): string;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.toLower
-         */
-        toLower(): LoDashExplicitWrapper<string>;
-    }
-
-    // toUpper
-
-    interface LoDashStatic {
-        /**
-         * Converts `string`, as a whole, to upper case.
-         *
-         * @param string The string to convert.
-         * @return Returns the upper cased string.
-         */
-        toUpper(string?: string): string;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.toUpper
-         */
-        toUpper(): string;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.toUpper
-         */
-        toUpper(): LoDashExplicitWrapper<string>;
-    }
-
-    // trim
-
-    interface LoDashStatic {
-        /**
-         * Removes leading and trailing whitespace or specified characters from string.
-         *
-         * @param string The string to trim.
-         * @param chars The characters to trim.
-         * @return Returns the trimmed string.
-         */
-        trim(
-            string?: string,
-            chars?: string
-        ): string;
-
-        /**
-         * Removes leading and trailing whitespace or specified characters from string.
-         *
-         * @param string The string to trim.
-         * @param index Not used in this overload.
-         * @param guard Enables use as an iteratee for methods like _.map. You should not pass this parameter directly in your code.
-         * @return Returns the trimmed string.
-         */
-        trim(
-            string: string,
-            index: string | number,
-            guard: object
-        ): string;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.trim
-         */
-        trim(chars?: string): string;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.trim
-         */
-        trim(chars?: string): LoDashExplicitWrapper<string>;
-    }
-
-    // trimEnd
-
-    interface LoDashStatic {
-        /**
-         * Removes trailing whitespace or specified characters from string.
-         *
-         * @param string The string to trim.
-         * @param chars The characters to trim.
-         * @return Returns the trimmed string.
-         */
-        trimEnd(
-            string?: string,
-            chars?: string
-        ): string;
-
-        /**
-         * Removes trailing whitespace or specified characters from string.
-         *
-         * @param string The string to trim.
-         * @param index Not used in this overload.
-         * @param guard Enables use as an iteratee for methods like _.map. You should not pass this parameter directly in your code.
-         * @return Returns the trimmed string.
-         */
-        trimEnd(
-            string: string,
-            index: string | number,
-            guard: object
-        ): string;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.trimEnd
-         */
-        trimEnd(chars?: string): string;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.trimEnd
-         */
-        trimEnd(chars?: string): LoDashExplicitWrapper<string>;
-    }
-
-    // trimStart
-
-    interface LoDashStatic {
-        /**
-         * Removes leading whitespace or specified characters from string.
-         *
-         * @param string The string to trim.
-         * @param chars The characters to trim.
-         * @return Returns the trimmed string.
-         */
-        trimStart(
-            string?: string,
-            chars?: string
-        ): string;
-
-        /**
-         * Removes leading whitespace or specified characters from string.
-         *
-         * @param string The string to trim.
-         * @param index Not used in this overload.
-         * @param guard Enables use as an iteratee for methods like _.map. You should not pass this parameter directly in your code.
-         * @return Returns the trimmed string.
-         */
-        trimStart(
-            string: string,
-            index: string | number,
-            guard: object
-        ): string;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.trimStart
-         */
-        trimStart(chars?: string): string;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.trimStart
-         */
-        trimStart(chars?: string): LoDashExplicitWrapper<string>;
-    }
-
-    // truncate
-
-    interface TruncateOptions {
-        /** The maximum string length. */
-        length?: number;
-        /** The string to indicate text is omitted. */
-        omission?: string;
-        /** The separator pattern to truncate to. */
-        separator?: string|RegExp;
-    }
-
-    interface LoDashStatic {
-        /**
-         * Truncates string if it’s longer than the given maximum string length. The last characters of the truncated
-         * string are replaced with the omission string which defaults to "…".
-         *
-         * @param string The string to truncate.
-         * @param options The options object or maximum string length.
-         * @return Returns the truncated string.
-         */
-        truncate(
-            string?: string,
-            options?: TruncateOptions
-        ): string;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.truncate
-         */
-        truncate(options?: TruncateOptions): string;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.truncate
-         */
-        truncate(options?: TruncateOptions): LoDashExplicitWrapper<string>;
-    }
-
-    // unescape
-
-    interface LoDashStatic {
-        /**
-         * The inverse of _.escape; this method converts the HTML entities &amp;, &lt;, &gt;, &quot;, &#39;, and &#96;
-         * in string to their corresponding characters.
-         *
-         * Note: No other HTML entities are unescaped. To unescape additional HTML entities use a third-party library
-         * like he.
-         *
-         * @param string The string to unescape.
-         * @return Returns the unescaped string.
-         */
-        unescape(string?: string): string;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.unescape
-         */
-        unescape(): string;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.unescape
-         */
-        unescape(): LoDashExplicitWrapper<string>;
-    }
-
-    // upperCase
-
-    interface LoDashStatic {
-        /**
-         * Converts `string`, as space separated words, to upper case.
-         *
-         * @param string The string to convert.
-         * @return Returns the upper cased string.
-         */
-        upperCase(string?: string): string;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.upperCase
-         */
-        upperCase(): string;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.upperCase
-         */
-        upperCase(): LoDashExplicitWrapper<string>;
-    }
-
-    // upperFirst
-
-    interface LoDashStatic {
-        /**
-         * Converts the first character of `string` to upper case.
-         *
-         * @param string The string to convert.
-         * @return Returns the converted string.
-         */
-        upperFirst(string?: string): string;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.upperFirst
-         */
-        upperFirst(): string;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.upperFirst
-         */
-        upperFirst(): LoDashExplicitWrapper<string>;
-    }
-
-    // words
-
-    interface LoDashStatic {
-        /**
-         * Splits `string` into an array of its words.
-         *
-         * @param string The string to inspect.
-         * @param pattern The pattern to match words.
-         * @return Returns the words of `string`.
-         */
-        words(
-            string?: string,
-            pattern?: string|RegExp
-        ): string[];
-
-        /**
-         * Splits `string` into an array of its words.
-         *
-         * @param string The string to inspect.
-         * @param index Not used in this overload.
-         * @param guard Enables use as an iteratee for methods like _.map. You should not pass this parameter directly in your code.
-         * @return Returns the words of `string`.
-         */
-        words(
-            string: string,
-            index: string | number,
-            guard: object
-        ): string[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.words
-         */
-        words(pattern?: string|RegExp): string[];
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.words
-         */
-        words(pattern?: string|RegExp): LoDashExplicitWrapper<string[]>;
-    }
-}
diff --git a/jtg js/node_modules/@types/lodash/common/util.d.ts b/jtg js/node_modules/@types/lodash/common/util.d.ts
deleted file mode 100644
index 80b06778fdb51e9adcffd4922e0a91b7187b6003..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/common/util.d.ts	
+++ /dev/null
@@ -1,1463 +0,0 @@
-import _ = require("../index");
-declare module "../index" {
-    // attempt
-
-    interface LoDashStatic {
-        /**
-         * Attempts to invoke func, returning either the result or the caught error object. Any additional arguments
-         * are provided to func when it’s invoked.
-         *
-         * @param func The function to attempt.
-         * @return Returns the func result or error object.
-         */
-        attempt<TResult>(func: (...args: any[]) => TResult, ...args: any[]): TResult|Error;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.attempt
-         */
-        attempt<TResult>(...args: any[]): TResult|Error;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.attempt
-         */
-        attempt<TResult>(...args: any[]): LoDashExplicitWrapper<TResult|Error>;
-    }
-
-    // bindAll
-
-    interface LoDashStatic {
-        /**
-         * Binds methods of an object to the object itself, overwriting the existing method. Method names may be
-         * specified as individual arguments or as arrays of method names. If no method names are provided all
-         * enumerable function properties, own and inherited, of object are bound.
-         *
-         * Note: This method does not set the "length" property of bound functions.
-         *
-         * @param object The object to bind and assign the bound methods to.
-         * @param methodNames The object method names to bind, specified as individual method names or arrays of
-         * method names.
-         * @return Returns object.
-         */
-        bindAll<T>(
-            object: T,
-            ...methodNames: Array<Many<string>>
-        ): T;
-    }
-
-    interface LoDashWrapper<TValue> {
-        /**
-         * @see _.bindAll
-         */
-        bindAll(...methodNames: Array<Many<string>>): this;
-    }
-
-    // cond
-
-    interface LoDashStatic {
-        /**
-         * Creates a function that iterates over `pairs` and invokes the corresponding
-         * function of the first predicate to return truthy. The predicate-function
-         * pairs are invoked with the `this` binding and arguments of the created
-         * function.
-         *
-         * @since 4.0.0
-         * @category Util
-         * @param pairs The predicate-function pairs.
-         * @returns Returns the new composite function.
-         * @example
-         *
-         * var func = _.cond([
-         *   [_.matches({ 'a': 1 }),           _.constant('matches A')],
-         *   [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],
-         *   [_.stubTrue,                      _.constant('no match')]
-         * ]);
-         *
-         * func({ 'a': 1, 'b': 2 });
-         * // => 'matches A'
-         *
-         * func({ 'a': 0, 'b': 1 });
-         * // => 'matches B'
-         *
-         * func({ 'a': '1', 'b': '2' });
-         * // => 'no match'
-         */
-        cond<T, R>(pairs: Array<CondPair<T, R>>): (Target: T) => R;
-    }
-
-    // conforms
-
-    type ConformsPredicateObject<T> = {
-        [P in keyof T]?: (val: T[P]) => boolean;
-    };
-
-    interface LoDashStatic {
-        /**
-         * Creates a function that invokes the predicate properties of `source` with the corresponding
-         * property values of a given object, returning true if all predicates return truthy, else false.
-         */
-        conforms<T>(source: ConformsPredicateObject<T>): (value: T) => boolean;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.conforms
-         */
-        conforms<T>(this: LoDashImplicitWrapper<ConformsPredicateObject<T>>): LoDashImplicitWrapper<(value: T) => boolean>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.conforms
-         */
-        conforms<T>(this: LoDashExplicitWrapper<ConformsPredicateObject<T>>): LoDashExplicitWrapper<(value: T) => boolean>;
-    }
-
-    // constant
-
-    interface LoDashStatic {
-        /**
-         * Creates a function that returns value.
-         *
-         * @param value The value to return from the new function.
-         * @return Returns the new function.
-         */
-        constant<T>(value: T): () => T;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.constant
-         */
-        constant(): LoDashImplicitWrapper<() => TValue>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.constant
-         */
-        constant(): LoDashExplicitWrapper<() => TValue>;
-    }
-
-    // defaultTo
-
-    interface LoDashStatic {
-        /**
-         * Checks `value` to determine whether a default value should be returned in
-         * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,
-         * or `undefined`.
-         *
-         * @param value The value to check.
-         * @param defaultValue The default value.
-         * @returns Returns the resolved value.
-         */
-        defaultTo<T>(value: T | null | undefined, defaultValue: T): T;
-
-        /**
-         * @see _.defaultTo
-         */
-        defaultTo<T, TDefault>(
-            value: T | null | undefined,
-            defaultValue: TDefault
-        ): T | TDefault;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.defaultTo
-         */
-        defaultTo<T>(this: LoDashImplicitWrapper<T | null | undefined>, defaultValue: T): T;
-
-        /**
-         * @see _.defaultTo
-         */
-        defaultTo<T, TDefault>(
-            this: LoDashImplicitWrapper<T | null | undefined>,
-            defaultValue: TDefault
-        ): T | TDefault;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.defaultTo
-         */
-        defaultTo<T>(this: LoDashExplicitWrapper<T | null | undefined>, defaultValue: T): LoDashExplicitWrapper<T>;
-
-        /**
-         * @see _.defaultTo
-         */
-        defaultTo<T, TDefault>(
-            this: LoDashExplicitWrapper<T | null | undefined>,
-            defaultValue: TDefault
-        ): LoDashExplicitWrapper<T | TDefault>;
-    }
-
-    // flow
-
-    interface LoDashStatic {
-        /**
-         * Creates a function that returns the result of invoking the provided functions with the this binding of the
-         * created function, where each successive invocation is supplied the return value of the previous.
-         *
-         * @param funcs Functions to invoke.
-         * @return Returns the new function.
-         */
-        // 0-argument first function
-        flow<R1, R2>(f1: () => R1, f2: (a: R1) => R2): () => R2;
-        flow<R1, R2, R3>(f1: () => R1, f2: (a: R1) => R2, f3: (a: R2) => R3): () => R3;
-        flow<R1, R2, R3, R4>(f1: () => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4): () => R4;
-        flow<R1, R2, R3, R4, R5>(f1: () => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5): () => R5;
-        flow<R1, R2, R3, R4, R5, R6>(f1: () => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6): () => R6;
-        flow<R1, R2, R3, R4, R5, R6, R7>(f1: () => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7): () => R7;
-        flow<R1, R2, R3, R4, R5, R6, R7>(f1: () => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7, ...funcs: Array<Many<(a: any) => any>>): () => any;
-        // 1-argument first function
-        flow<A1, R1, R2>(f1: (a1: A1) => R1, f2: (a: R1) => R2): (a1: A1) => R2;
-        flow<A1, R1, R2, R3>(f1: (a1: A1) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3): (a1: A1) => R3;
-        flow<A1, R1, R2, R3, R4>(f1: (a1: A1) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4): (a1: A1) => R4;
-        flow<A1, R1, R2, R3, R4, R5>(f1: (a1: A1) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5): (a1: A1) => R5;
-        flow<A1, R1, R2, R3, R4, R5, R6>(f1: (a1: A1) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6): (a1: A1) => R6;
-        flow<A1, R1, R2, R3, R4, R5, R6, R7>(f1: (a1: A1) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7): (a1: A1) => R7;
-        flow<A1, R1, R2, R3, R4, R5, R6, R7>(f1: (a1: A1) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7, ...funcs: Array<Many<(a: any) => any>>): (a1: A1) => any;
-        // 2-argument first function
-        flow<A1, A2, R1, R2>(f1: (a1: A1, a2: A2) => R1, f2: (a: R1) => R2): (a1: A1, a2: A2) => R2;
-        flow<A1, A2, R1, R2, R3>(f1: (a1: A1, a2: A2) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3): (a1: A1, a2: A2) => R3;
-        flow<A1, A2, R1, R2, R3, R4>(f1: (a1: A1, a2: A2) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4): (a1: A1, a2: A2) => R4;
-        flow<A1, A2, R1, R2, R3, R4, R5>(f1: (a1: A1, a2: A2) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5): (a1: A1, a2: A2) => R5;
-        flow<A1, A2, R1, R2, R3, R4, R5, R6>(f1: (a1: A1, a2: A2) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6): (a1: A1, a2: A2) => R6;
-        flow<A1, A2, R1, R2, R3, R4, R5, R6, R7>(f1: (a1: A1, a2: A2) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7): (a1: A1, a2: A2) => R7;
-        flow<A1, A2, R1, R2, R3, R4, R5, R6, R7>(f1: (a1: A1, a2: A2) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7, ...funcs: Array<Many<(a: any) => any>>): (a1: A1, a2: A2) => any;
-        // 3-argument first function
-        flow<A1, A2, A3, R1, R2>(f1: (a1: A1, a2: A2, a3: A3) => R1, f2: (a: R1) => R2): (a1: A1, a2: A2, a3: A3) => R2;
-        flow<A1, A2, A3, R1, R2, R3>(f1: (a1: A1, a2: A2, a3: A3) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3): (a1: A1, a2: A2, a3: A3) => R3;
-        flow<A1, A2, A3, R1, R2, R3, R4>(f1: (a1: A1, a2: A2, a3: A3) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4): (a1: A1, a2: A2, a3: A3) => R4;
-        flow<A1, A2, A3, R1, R2, R3, R4, R5>(f1: (a1: A1, a2: A2, a3: A3) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5): (a1: A1, a2: A2, a3: A3) => R5;
-        flow<A1, A2, A3, R1, R2, R3, R4, R5, R6>(f1: (a1: A1, a2: A2, a3: A3) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6): (a1: A1, a2: A2, a3: A3) => R6;
-        flow<A1, A2, A3, R1, R2, R3, R4, R5, R6, R7>(f1: (a1: A1, a2: A2, a3: A3) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7): (a1: A1, a2: A2, a3: A3) => R7;
-        flow<A1, A2, A3, R1, R2, R3, R4, R5, R6, R7>(f1: (a1: A1, a2: A2, a3: A3) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7, ...funcs: Array<Many<(a: any) => any>>): (a1: A1, a2: A2, a3: A3) => any;
-        // 4-argument first function
-        flow<A1, A2, A3, A4, R1, R2>(f1: (a1: A1, a2: A2, a3: A3, a4: A4) => R1, f2: (a: R1) => R2): (a1: A1, a2: A2, a3: A3, a4: A4) => R2;
-        flow<A1, A2, A3, A4, R1, R2, R3>(f1: (a1: A1, a2: A2, a3: A3, a4: A4) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3): (a1: A1, a2: A2, a3: A3, a4: A4) => R3;
-        flow<A1, A2, A3, A4, R1, R2, R3, R4>(f1: (a1: A1, a2: A2, a3: A3, a4: A4) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4): (a1: A1, a2: A2, a3: A3, a4: A4) => R4;
-        flow<A1, A2, A3, A4, R1, R2, R3, R4, R5>(f1: (a1: A1, a2: A2, a3: A3, a4: A4) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5): (a1: A1, a2: A2, a3: A3, a4: A4) => R5;
-        flow<A1, A2, A3, A4, R1, R2, R3, R4, R5, R6>(f1: (a1: A1, a2: A2, a3: A3, a4: A4) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6): (a1: A1, a2: A2, a3: A3, a4: A4) => R6;
-        flow<A1, A2, A3, A4, R1, R2, R3, R4, R5, R6, R7>(f1: (a1: A1, a2: A2, a3: A3, a4: A4) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7): (a1: A1, a2: A2, a3: A3, a4: A4) => R7;
-        flow<A1, A2, A3, A4, R1, R2, R3, R4, R5, R6, R7>(f1: (a1: A1, a2: A2, a3: A3, a4: A4) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7, ...funcs: Array<Many<(a: any) => any>>): (a1: A1, a2: A2, a3: A3, a4: A4) => any;
-        // any-argument first function
-        flow<A1, A2, A3, A4, R1, R2>(f1: (a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R1, f2: (a: R1) => R2): (a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R2;
-        flow<A1, A2, A3, A4, R1, R2, R3>(f1: (a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3): (a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R3;
-        flow<A1, A2, A3, A4, R1, R2, R3, R4>(f1: (a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4): (a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R4;
-        flow<A1, A2, A3, A4, R1, R2, R3, R4, R5>(f1: (a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5): (a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R5;
-        flow<A1, A2, A3, A4, R1, R2, R3, R4, R5, R6>(f1: (a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6): (a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R6;
-        flow<A1, A2, A3, A4, R1, R2, R3, R4, R5, R6, R7>(f1: (a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7): (a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R7;
-        flow<A1, A2, A3, A4, R1, R2, R3, R4, R5, R6, R7>(f1: (a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7, ...funcs: Array<Many<(a: any) => any>>): (a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => any;
-        flow(funcs: Array<Many<(...args: any[]) => any>>): (...args: any[]) => any;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.flow
-         */
-        // 0-argument first function
-        flow<R1, R2>(this: LoDashImplicitWrapper<() => R1>, f2: (a: R1) => R2): LoDashImplicitWrapper<() => R2>;
-        flow<R1, R2, R3>(this: LoDashImplicitWrapper<() => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3): LoDashImplicitWrapper<() => R3>;
-        flow<R1, R2, R3, R4>(this: LoDashImplicitWrapper<() => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4): LoDashImplicitWrapper<() => R4>;
-        flow<R1, R2, R3, R4, R5>(this: LoDashImplicitWrapper<() => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5): LoDashImplicitWrapper<() => R5>;
-        flow<R1, R2, R3, R4, R5, R6>(this: LoDashImplicitWrapper<() => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6): LoDashImplicitWrapper<() => R6>;
-        flow<R1, R2, R3, R4, R5, R6, R7>(this: LoDashImplicitWrapper<() => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7): LoDashImplicitWrapper<() => R7>;
-        flow<R1, R2, R3, R4, R5, R6, R7>(this: LoDashImplicitWrapper<() => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7, ...funcs: Array<Many<(a: any) => any>>): LoDashImplicitWrapper<() => any>;
-        // 1-argument first function
-        flow<A1, R1, R2>(this: LoDashImplicitWrapper<(a1: A1) => R1>, f2: (a: R1) => R2): LoDashImplicitWrapper<(a1: A1) => R2>;
-        flow<A1, R1, R2, R3>(this: LoDashImplicitWrapper<(a1: A1) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3): LoDashImplicitWrapper<(a1: A1) => R3>;
-        flow<A1, R1, R2, R3, R4>(this: LoDashImplicitWrapper<(a1: A1) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4): LoDashImplicitWrapper<(a1: A1) => R4>;
-        flow<A1, R1, R2, R3, R4, R5>(this: LoDashImplicitWrapper<(a1: A1) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5): LoDashImplicitWrapper<(a1: A1) => R5>;
-        flow<A1, R1, R2, R3, R4, R5, R6>(this: LoDashImplicitWrapper<(a1: A1) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6): LoDashImplicitWrapper<(a1: A1) => R6>;
-        flow<A1, R1, R2, R3, R4, R5, R6, R7>(this: LoDashImplicitWrapper<(a1: A1) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7): LoDashImplicitWrapper<(a1: A1) => R7>;
-        flow<A1, R1, R2, R3, R4, R5, R6, R7>(this: LoDashImplicitWrapper<(a1: A1) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7, ...funcs: Array<Many<(a: any) => any>>): LoDashImplicitWrapper<(a1: A1) => any>;
-        // 2-argument first function
-        flow<A1, A2, R1, R2>(this: LoDashImplicitWrapper<(a1: A1, a2: A2) => R1>, f2: (a: R1) => R2): LoDashImplicitWrapper<(a1: A1, a2: A2) => R2>;
-        flow<A1, A2, R1, R2, R3>(this: LoDashImplicitWrapper<(a1: A1, a2: A2) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3): LoDashImplicitWrapper<(a1: A1, a2: A2) => R3>;
-        flow<A1, A2, R1, R2, R3, R4>(this: LoDashImplicitWrapper<(a1: A1, a2: A2) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4): LoDashImplicitWrapper<(a1: A1, a2: A2) => R4>;
-        flow<A1, A2, R1, R2, R3, R4, R5>(this: LoDashImplicitWrapper<(a1: A1, a2: A2) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5): LoDashImplicitWrapper<(a1: A1, a2: A2) => R5>;
-        flow<A1, A2, R1, R2, R3, R4, R5, R6>(this: LoDashImplicitWrapper<(a1: A1, a2: A2) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6): LoDashImplicitWrapper<(a1: A1, a2: A2) => R6>;
-        flow<A1, A2, R1, R2, R3, R4, R5, R6, R7>(this: LoDashImplicitWrapper<(a1: A1, a2: A2) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7): LoDashImplicitWrapper<(a1: A1, a2: A2) => R7>;
-        flow<A1, A2, R1, R2, R3, R4, R5, R6, R7>(this: LoDashImplicitWrapper<(a1: A1, a2: A2) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7, ...funcs: Array<Many<(a: any) => any>>): LoDashImplicitWrapper<(a1: A1, a2: A2) => any>;
-        // 3-argument first function
-        flow<A1, A2, A3, R1, R2>(this: LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3) => R1>, f2: (a: R1) => R2): LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3) => R2>;
-        flow<A1, A2, A3, R1, R2, R3>(this: LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3): LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3) => R3>;
-        flow<A1, A2, A3, R1, R2, R3, R4>(this: LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4): LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3) => R4>;
-        flow<A1, A2, A3, R1, R2, R3, R4, R5>(this: LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5): LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3) => R5>;
-        flow<A1, A2, A3, R1, R2, R3, R4, R5, R6>(this: LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6): LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3) => R6>;
-        flow<A1, A2, A3, R1, R2, R3, R4, R5, R6, R7>(this: LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7): LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3) => R7>;
-        flow<A1, A2, A3, R1, R2, R3, R4, R5, R6, R7>(this: LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7, ...funcs: Array<Many<(a: any) => any>>): LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3) => any>;
-        // 4-argument first function
-        flow<A1, A2, A3, A4, R1, R2>(this: LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4) => R1>, f2: (a: R1) => R2): LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4) => R2>;
-        flow<A1, A2, A3, A4, R1, R2, R3>(this: LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3): LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4) => R3>;
-        flow<A1, A2, A3, A4, R1, R2, R3, R4>(this: LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4): LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4) => R4>;
-        flow<A1, A2, A3, A4, R1, R2, R3, R4, R5>(this: LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5): LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4) => R5>;
-        flow<A1, A2, A3, A4, R1, R2, R3, R4, R5, R6>(this: LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6): LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4) => R6>;
-        flow<A1, A2, A3, A4, R1, R2, R3, R4, R5, R6, R7>(this: LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7): LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4) => R7>;
-        flow<A1, A2, A3, A4, R1, R2, R3, R4, R5, R6, R7>(this: LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7, ...funcs: Array<Many<(a: any) => any>>): LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4) => any>;
-        // any-argument first function
-        flow<A1, A2, A3, A4, R1, R2>(this: LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R1>, f2: (a: R1) => R2): LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R2>;
-        flow<A1, A2, A3, A4, R1, R2, R3>(this: LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3): LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R3>;
-        flow<A1, A2, A3, A4, R1, R2, R3, R4>(this: LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4): LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R4>;
-        flow<A1, A2, A3, A4, R1, R2, R3, R4, R5>(this: LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5): LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R5>;
-        flow<A1, A2, A3, A4, R1, R2, R3, R4, R5, R6>(this: LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6): LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R6>;
-        flow<A1, A2, A3, A4, R1, R2, R3, R4, R5, R6, R7>(this: LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7): LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R7>;
-        flow<A1, A2, A3, A4, R1, R2, R3, R4, R5, R6, R7>(this: LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7, ...funcs: Array<Many<(a: any) => any>>): LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => any>;
-        flow(this: LoDashImplicitWrapper<(...args: any[]) => any>, funcs: Array<Many<(a: any) => any>>): LoDashImplicitWrapper<(...args: any[]) => any>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.flow
-         */
-        // 0-argument first function
-        flow<R1, R2>(this: LoDashExplicitWrapper<() => R1>, f2: (a: R1) => R2): LoDashExplicitWrapper<() => R2>;
-        flow<R1, R2, R3>(this: LoDashExplicitWrapper<() => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3): LoDashExplicitWrapper<() => R3>;
-        flow<R1, R2, R3, R4>(this: LoDashExplicitWrapper<() => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4): LoDashExplicitWrapper<() => R4>;
-        flow<R1, R2, R3, R4, R5>(this: LoDashExplicitWrapper<() => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5): LoDashExplicitWrapper<() => R5>;
-        flow<R1, R2, R3, R4, R5, R6>(this: LoDashExplicitWrapper<() => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6): LoDashExplicitWrapper<() => R6>;
-        flow<R1, R2, R3, R4, R5, R6, R7>(this: LoDashExplicitWrapper<() => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7): LoDashExplicitWrapper<() => R7>;
-        flow<R1, R2, R3, R4, R5, R6, R7>(this: LoDashExplicitWrapper<() => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7, ...funcs: Array<Many<(a: any) => any>>): LoDashExplicitWrapper<() => any>;
-        // 1-argument first function
-        flow<A1, R1, R2>(this: LoDashExplicitWrapper<(a1: A1) => R1>, f2: (a: R1) => R2): LoDashExplicitWrapper<(a1: A1) => R2>;
-        flow<A1, R1, R2, R3>(this: LoDashExplicitWrapper<(a1: A1) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3): LoDashExplicitWrapper<(a1: A1) => R3>;
-        flow<A1, R1, R2, R3, R4>(this: LoDashExplicitWrapper<(a1: A1) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4): LoDashExplicitWrapper<(a1: A1) => R4>;
-        flow<A1, R1, R2, R3, R4, R5>(this: LoDashExplicitWrapper<(a1: A1) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5): LoDashExplicitWrapper<(a1: A1) => R5>;
-        flow<A1, R1, R2, R3, R4, R5, R6>(this: LoDashExplicitWrapper<(a1: A1) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6): LoDashExplicitWrapper<(a1: A1) => R6>;
-        flow<A1, R1, R2, R3, R4, R5, R6, R7>(this: LoDashExplicitWrapper<(a1: A1) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7): LoDashExplicitWrapper<(a1: A1) => R7>;
-        flow<A1, R1, R2, R3, R4, R5, R6, R7>(this: LoDashExplicitWrapper<(a1: A1) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7, ...funcs: Array<Many<(a: any) => any>>): LoDashExplicitWrapper<(a1: A1) => any>;
-        // 2-argument first function
-        flow<A1, A2, R1, R2>(this: LoDashExplicitWrapper<(a1: A1, a2: A2) => R1>, f2: (a: R1) => R2): LoDashExplicitWrapper<(a1: A1, a2: A2) => R2>;
-        flow<A1, A2, R1, R2, R3>(this: LoDashExplicitWrapper<(a1: A1, a2: A2) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3): LoDashExplicitWrapper<(a1: A1, a2: A2) => R3>;
-        flow<A1, A2, R1, R2, R3, R4>(this: LoDashExplicitWrapper<(a1: A1, a2: A2) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4): LoDashExplicitWrapper<(a1: A1, a2: A2) => R4>;
-        flow<A1, A2, R1, R2, R3, R4, R5>(this: LoDashExplicitWrapper<(a1: A1, a2: A2) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5): LoDashExplicitWrapper<(a1: A1, a2: A2) => R5>;
-        flow<A1, A2, R1, R2, R3, R4, R5, R6>(this: LoDashExplicitWrapper<(a1: A1, a2: A2) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6): LoDashExplicitWrapper<(a1: A1, a2: A2) => R6>;
-        flow<A1, A2, R1, R2, R3, R4, R5, R6, R7>(this: LoDashExplicitWrapper<(a1: A1, a2: A2) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7): LoDashExplicitWrapper<(a1: A1, a2: A2) => R7>;
-        flow<A1, A2, R1, R2, R3, R4, R5, R6, R7>(this: LoDashExplicitWrapper<(a1: A1, a2: A2) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7, ...funcs: Array<Many<(a: any) => any>>): LoDashExplicitWrapper<(a1: A1, a2: A2) => any>;
-        // 3-argument first function
-        flow<A1, A2, A3, R1, R2>(this: LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3) => R1>, f2: (a: R1) => R2): LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3) => R2>;
-        flow<A1, A2, A3, R1, R2, R3>(this: LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3): LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3) => R3>;
-        flow<A1, A2, A3, R1, R2, R3, R4>(this: LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4): LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3) => R4>;
-        flow<A1, A2, A3, R1, R2, R3, R4, R5>(this: LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5): LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3) => R5>;
-        flow<A1, A2, A3, R1, R2, R3, R4, R5, R6>(this: LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6): LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3) => R6>;
-        flow<A1, A2, A3, R1, R2, R3, R4, R5, R6, R7>(this: LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7): LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3) => R7>;
-        flow<A1, A2, A3, R1, R2, R3, R4, R5, R6, R7>(this: LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7, ...funcs: Array<Many<(a: any) => any>>): LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3) => any>;
-        // 4-argument first function
-        flow<A1, A2, A3, A4, R1, R2>(this: LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4) => R1>, f2: (a: R1) => R2): LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4) => R2>;
-        flow<A1, A2, A3, A4, R1, R2, R3>(this: LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3): LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4) => R3>;
-        flow<A1, A2, A3, A4, R1, R2, R3, R4>(this: LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4): LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4) => R4>;
-        flow<A1, A2, A3, A4, R1, R2, R3, R4, R5>(this: LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5): LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4) => R5>;
-        flow<A1, A2, A3, A4, R1, R2, R3, R4, R5, R6>(this: LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6): LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4) => R6>;
-        flow<A1, A2, A3, A4, R1, R2, R3, R4, R5, R6, R7>(this: LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7): LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4) => R7>;
-        flow<A1, A2, A3, A4, R1, R2, R3, R4, R5, R6, R7>(this: LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7, ...funcs: Array<Many<(a: any) => any>>): LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4) => any>;
-        // any-argument first function
-        flow<A1, A2, A3, A4, R1, R2>(this: LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R1>, f2: (a: R1) => R2): LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R2>;
-        flow<A1, A2, A3, A4, R1, R2, R3>(this: LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3): LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R3>;
-        flow<A1, A2, A3, A4, R1, R2, R3, R4>(this: LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4): LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R4>;
-        flow<A1, A2, A3, A4, R1, R2, R3, R4, R5>(this: LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5): LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R5>;
-        flow<A1, A2, A3, A4, R1, R2, R3, R4, R5, R6>(this: LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6): LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R6>;
-        flow<A1, A2, A3, A4, R1, R2, R3, R4, R5, R6, R7>(this: LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7): LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R7>;
-        flow<A1, A2, A3, A4, R1, R2, R3, R4, R5, R6, R7>(this: LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R1>, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7, ...funcs: Array<Many<(a: any) => any>>): LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => any>;
-        flow(this: LoDashExplicitWrapper<(...args: any[]) => any>, funcs: Array<Many<(a: any) => any>>): LoDashExplicitWrapper<(...args: any[]) => any>;
-    }
-
-    // flowRight
-
-    interface LoDashStatic {
-        /**
-         * This method is like _.flow except that it creates a function that invokes the provided functions from right
-         * to left.
-         *
-         * @param funcs Functions to invoke.
-         * @return Returns the new function.
-         */
-        // 0-argument first function
-        flowRight<R2, R1>(f2: (a: R1) => R2, f1: () => R1): () => R2;
-        flowRight<R3, R2, R1>(f3: (a: R2) => R3, f2: (a: R1) => R2, f1: () => R1): () => R3;
-        flowRight<R4, R3, R2, R1>(f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: () => R1): () => R4;
-        flowRight<R5, R4, R3, R2, R1>(f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: () => R1): () => R5;
-        flowRight<R6, R5, R4, R3, R2, R1>(f6: (a: R5) => R6, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: () => R1): () => R6;
-        flowRight<R7, R6, R5, R4, R3, R2, R1>(f7: (a: R6) => R7, f6: (a: R5) => R6, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: () => R1): () => R7;
-        // 1-argument first function
-        flowRight<A1, R2, R1>(f2: (a: R1) => R2, f1: (a1: A1) => R1): (a1: A1) => R2;
-        flowRight<A1, R3, R2, R1>(f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1) => R1): (a1: A1) => R3;
-        flowRight<A1, R4, R3, R2, R1>(f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1) => R1): (a1: A1) => R4;
-        flowRight<A1, R5, R4, R3, R2, R1>(f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1) => R1): (a1: A1) => R5;
-        flowRight<A1, R6, R5, R4, R3, R2, R1>(f6: (a: R5) => R6, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1) => R1): (a1: A1) => R6;
-        flowRight<A1, R7, R6, R5, R4, R3, R2, R1>(f7: (a: R6) => R7, f6: (a: R5) => R6, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1) => R1): (a1: A1) => R7;
-        // 2-argument first function
-        flowRight<A1, A2, R2, R1>(f2: (a: R1) => R2, f1: (a1: A1, a2: A2) => R1): (a1: A1, a2: A2) => R2;
-        flowRight<A1, A2, R3, R2, R1>(f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2) => R1): (a1: A1, a2: A2) => R3;
-        flowRight<A1, A2, R4, R3, R2, R1>(f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2) => R1): (a1: A1, a2: A2) => R4;
-        flowRight<A1, A2, R5, R4, R3, R2, R1>(f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2) => R1): (a1: A1, a2: A2) => R5;
-        flowRight<A1, A2, R6, R5, R4, R3, R2, R1>(f6: (a: R5) => R6, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2) => R1): (a1: A1, a2: A2) => R6;
-        flowRight<A1, A2, R7, R6, R5, R4, R3, R2, R1>(f7: (a: R6) => R7, f6: (a: R5) => R6, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2) => R1): (a1: A1, a2: A2) => R7;
-        // 3-argument first function
-        flowRight<A1, A2, A3, R2, R1>(f2: (a: R1) => R2, f1: (a1: A1, a2: A2, a3: A3) => R1): (a1: A1, a2: A2, a3: A3) => R2;
-        flowRight<A1, A2, A3, R3, R2, R1>(f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2, a3: A3) => R1): (a1: A1, a2: A2, a3: A3) => R3;
-        flowRight<A1, A2, A3, R4, R3, R2, R1>(f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2, a3: A3) => R1): (a1: A1, a2: A2, a3: A3) => R4;
-        flowRight<A1, A2, A3, R5, R4, R3, R2, R1>(f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2, a3: A3) => R1): (a1: A1, a2: A2, a3: A3) => R5;
-        flowRight<A1, A2, A3, R6, R5, R4, R3, R2, R1>(f6: (a: R5) => R6, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2, a3: A3) => R1): (a1: A1, a2: A2, a3: A3) => R6;
-        flowRight<A1, A2, A3, R7, R6, R5, R4, R3, R2, R1>(f7: (a: R6) => R7, f6: (a: R5) => R6, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2, a3: A3) => R1): (a1: A1, a2: A2, a3: A3) => R7;
-        // 4-argument first function
-        flowRight<A1, A2, A3, A4, R2, R1>(f2: (a: R1) => R2, f1: (a1: A1, a2: A2, a3: A3, a4: A4) => R1): (a1: A1, a2: A2, a3: A3, a4: A4) => R2;
-        flowRight<A1, A2, A3, A4, R3, R2, R1>(f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2, a3: A3, a4: A4) => R1): (a1: A1, a2: A2, a3: A3, a4: A4) => R3;
-        flowRight<A1, A2, A3, A4, R4, R3, R2, R1>(f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2, a3: A3, a4: A4) => R1): (a1: A1, a2: A2, a3: A3, a4: A4) => R4;
-        flowRight<A1, A2, A3, A4, R5, R4, R3, R2, R1>(f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2, a3: A3, a4: A4) => R1): (a1: A1, a2: A2, a3: A3, a4: A4) => R5;
-        flowRight<A1, A2, A3, A4, R6, R5, R4, R3, R2, R1>(f6: (a: R5) => R6, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2, a3: A3, a4: A4) => R1): (a1: A1, a2: A2, a3: A3, a4: A4) => R6;
-        flowRight<A1, A2, A3, A4, R7, R6, R5, R4, R3, R2, R1>(f7: (a: R6) => R7, f6: (a: R5) => R6, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2, a3: A3, a4: A4) => R1): (a1: A1, a2: A2, a3: A3, a4: A4) => R7;
-        // any-argument first function
-        flowRight<R2, R1>(f2: (a: R1) => R2, f1: (...args: any[]) => R1): (...args: any[]) => R2;
-        flowRight<R3, R2, R1>(f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (...args: any[]) => R1): (...args: any[]) => R3;
-        flowRight<R4, R3, R2, R1>(f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (...args: any[]) => R1): (...args: any[]) => R4;
-        flowRight<R5, R4, R3, R2, R1>(f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (...args: any[]) => R1): (...args: any[]) => R5;
-        flowRight<R6, R5, R4, R3, R2, R1>(f6: (a: R5) => R6, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (...args: any[]) => R1): (...args: any[]) => R6;
-        flowRight<R7, R6, R5, R4, R3, R2, R1>(f7: (a: R6) => R7, f6: (a: R5) => R6, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (...args: any[]) => R1): (...args: any[]) => R7;
-        flowRight(f7: (a: any) => any, f6: (a: any) => any, f5: (a: any) => any, f4: (a: any) => any, f3: (a: any) => any, f2: (a: any) => any, f1: () => any, ...funcs: Array<Many<(...args: any[]) => any>>): (...args: any[]) => any;
-        flowRight(funcs: Array<Many<(...args: any[]) => any>>): (...args: any[]) => any;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.flowRight
-         */
-        // 0-argument first function
-        flowRight<R2, R1>(this: LoDashImplicitWrapper<(a: R1) => R2>, f1: () => R1): LoDashImplicitWrapper<() => R2>;
-        flowRight<R3, R2, R1>(this: LoDashImplicitWrapper<(a: R2) => R3>, f2: (a: R1) => R2, f1: () => R1): LoDashImplicitWrapper<() => R3>;
-        flowRight<R4, R3, R2, R1>(this: LoDashImplicitWrapper<(a: R3) => R4>, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: () => R1): LoDashImplicitWrapper<() => R4>;
-        flowRight<R5, R4, R3, R2, R1>(this: LoDashImplicitWrapper<(a: R4) => R5>, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: () => R1): LoDashImplicitWrapper<() => R5>;
-        flowRight<R6, R5, R4, R3, R2, R1>(this: LoDashImplicitWrapper<(a: R5) => R6>, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: () => R1): LoDashImplicitWrapper<() => R6>;
-        flowRight<R7, R6, R5, R4, R3, R2, R1>(this: LoDashImplicitWrapper<(a: R6) => R7>, f6: (a: R5) => R6, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: () => R1): LoDashImplicitWrapper<() => R7>;
-        // 1-argument first function
-        flowRight<A1, R2, R1>(this: LoDashImplicitWrapper<(a: R1) => R2>, f1: (a1: A1) => R1): LoDashImplicitWrapper<(a1: A1) => R2>;
-        flowRight<A1, R3, R2, R1>(this: LoDashImplicitWrapper<(a: R2) => R3>, f2: (a: R1) => R2, f1: (a1: A1) => R1): LoDashImplicitWrapper<(a1: A1) => R3>;
-        flowRight<A1, R4, R3, R2, R1>(this: LoDashImplicitWrapper<(a: R3) => R4>, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1) => R1): LoDashImplicitWrapper<(a1: A1) => R4>;
-        flowRight<A1, R5, R4, R3, R2, R1>(this: LoDashImplicitWrapper<(a: R4) => R5>, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1) => R1): LoDashImplicitWrapper<(a1: A1) => R5>;
-        flowRight<A1, R6, R5, R4, R3, R2, R1>(this: LoDashImplicitWrapper<(a: R5) => R6>, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1) => R1): LoDashImplicitWrapper<(a1: A1) => R6>;
-        flowRight<A1, R7, R6, R5, R4, R3, R2, R1>(this: LoDashImplicitWrapper<(a: R6) => R7>, f6: (a: R5) => R6, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1) => R1): LoDashImplicitWrapper<(a1: A1) => R7>;
-        // 2-argument first function
-        flowRight<A1, A2, R2, R1>(this: LoDashImplicitWrapper<(a: R1) => R2>, f1: (a1: A1, a2: A2) => R1): LoDashImplicitWrapper<(a1: A1, a2: A2) => R2>;
-        flowRight<A1, A2, R3, R2, R1>(this: LoDashImplicitWrapper<(a: R2) => R3>, f2: (a: R1) => R2, f1: (a1: A1, a2: A2) => R1): LoDashImplicitWrapper<(a1: A1, a2: A2) => R3>;
-        flowRight<A1, A2, R4, R3, R2, R1>(this: LoDashImplicitWrapper<(a: R3) => R4>, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2) => R1): LoDashImplicitWrapper<(a1: A1, a2: A2) => R4>;
-        flowRight<A1, A2, R5, R4, R3, R2, R1>(this: LoDashImplicitWrapper<(a: R4) => R5>, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2) => R1): LoDashImplicitWrapper<(a1: A1, a2: A2) => R5>;
-        flowRight<A1, A2, R6, R5, R4, R3, R2, R1>(this: LoDashImplicitWrapper<(a: R5) => R6>, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2) => R1): LoDashImplicitWrapper<(a1: A1, a2: A2) => R6>;
-        flowRight<A1, A2, R7, R6, R5, R4, R3, R2, R1>(this: LoDashImplicitWrapper<(a: R6) => R7>, f6: (a: R5) => R6, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2) => R1): LoDashImplicitWrapper<(a1: A1, a2: A2) => R7>;
-        // 3-argument first function
-        flowRight<A1, A2, A3, R2, R1>(this: LoDashImplicitWrapper<(a: R1) => R2>, f1: (a1: A1, a2: A2, a3: A3) => R1): LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3) => R2>;
-        flowRight<A1, A2, A3, R3, R2, R1>(this: LoDashImplicitWrapper<(a: R2) => R3>, f2: (a: R1) => R2, f1: (a1: A1, a2: A2, a3: A3) => R1): LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3) => R3>;
-        flowRight<A1, A2, A3, R4, R3, R2, R1>(this: LoDashImplicitWrapper<(a: R3) => R4>, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2, a3: A3) => R1): LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3) => R4>;
-        flowRight<A1, A2, A3, R5, R4, R3, R2, R1>(this: LoDashImplicitWrapper<(a: R4) => R5>, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2, a3: A3) => R1): LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3) => R5>;
-        flowRight<A1, A2, A3, R6, R5, R4, R3, R2, R1>(this: LoDashImplicitWrapper<(a: R5) => R6>, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2, a3: A3) => R1): LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3) => R6>;
-        flowRight<A1, A2, A3, R7, R6, R5, R4, R3, R2, R1>(this: LoDashImplicitWrapper<(a: R6) => R7>, f6: (a: R5) => R6, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2, a3: A3) => R1): LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3) => R7>;
-        // 4-argument first function
-        flowRight<A1, A2, A3, A4, R2, R1>(this: LoDashImplicitWrapper<(a: R1) => R2>, f1: (a1: A1, a2: A2, a3: A3, a4: A4) => R1): LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4) => R2>;
-        flowRight<A1, A2, A3, A4, R3, R2, R1>(this: LoDashImplicitWrapper<(a: R2) => R3>, f2: (a: R1) => R2, f1: (a1: A1, a2: A2, a3: A3, a4: A4) => R1): LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4) => R3>;
-        flowRight<A1, A2, A3, A4, R4, R3, R2, R1>(this: LoDashImplicitWrapper<(a: R3) => R4>, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2, a3: A3, a4: A4) => R1): LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4) => R4>;
-        flowRight<A1, A2, A3, A4, R5, R4, R3, R2, R1>(this: LoDashImplicitWrapper<(a: R4) => R5>, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2, a3: A3, a4: A4) => R1): LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4) => R5>;
-        flowRight<A1, A2, A3, A4, R6, R5, R4, R3, R2, R1>(this: LoDashImplicitWrapper<(a: R5) => R6>, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2, a3: A3, a4: A4) => R1): LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4) => R6>;
-        flowRight<A1, A2, A3, A4, R7, R6, R5, R4, R3, R2, R1>(this: LoDashImplicitWrapper<(a: R6) => R7>, f6: (a: R5) => R6, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2, a3: A3, a4: A4) => R1): LoDashImplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4) => R7>;
-        // any-argument first function
-        flowRight<R2, R1>(this: LoDashImplicitWrapper<(a: R1) => R2>, f1: (...args: any[]) => R1): LoDashImplicitWrapper<(...args: any[]) => R2>;
-        flowRight<R3, R2, R1>(this: LoDashImplicitWrapper<(a: R1) => R2>, f2: (a: R1) => R2, f1: (...args: any[]) => R1): LoDashImplicitWrapper<(...args: any[]) => R3>;
-        flowRight<R4, R3, R2, R1>(this: LoDashImplicitWrapper<(a: R1) => R2>, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (...args: any[]) => R1): LoDashImplicitWrapper<(...args: any[]) => R4>;
-        flowRight<R5, R4, R3, R2, R1>(this: LoDashImplicitWrapper<(a: R1) => R2>, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (...args: any[]) => R1): LoDashImplicitWrapper<(...args: any[]) => R5>;
-        flowRight<R6, R5, R4, R3, R2, R1>(this: LoDashImplicitWrapper<(a: R1) => R2>, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (...args: any[]) => R1): LoDashImplicitWrapper<(...args: any[]) => R6>;
-        flowRight<R7, R6, R5, R4, R3, R2, R1>(this: LoDashImplicitWrapper<(a: R1) => R2>, f6: (a: R5) => R6, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (...args: any[]) => R1): LoDashImplicitWrapper<(...args: any[]) => R7>;
-        flowRight(this: LoDashImplicitWrapper<(a: any) => any>, f6: (a: any) => any, f5: (a: any) => any, f4: (a: any) => any, f3: (a: any) => any, f2: (a: any) => any, f1: () => any, ...funcs: Array<Many<(...args: any[]) => any>>): LoDashImplicitWrapper<(...args: any[]) => any>;
-        flowRight(this: LoDashImplicitWrapper<(a: any) => any>, funcs: Array<Many<(...args: any[]) => any>>): LoDashImplicitWrapper<(...args: any[]) => any>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.flowRight
-         */
-        // 0-argument first function
-        flowRight<R2, R1>(this: LoDashExplicitWrapper<(a: R1) => R2>, f1: () => R1): LoDashExplicitWrapper<() => R2>;
-        flowRight<R3, R2, R1>(this: LoDashExplicitWrapper<(a: R2) => R3>, f2: (a: R1) => R2, f1: () => R1): LoDashExplicitWrapper<() => R3>;
-        flowRight<R4, R3, R2, R1>(this: LoDashExplicitWrapper<(a: R3) => R4>, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: () => R1): LoDashExplicitWrapper<() => R4>;
-        flowRight<R5, R4, R3, R2, R1>(this: LoDashExplicitWrapper<(a: R4) => R5>, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: () => R1): LoDashExplicitWrapper<() => R5>;
-        flowRight<R6, R5, R4, R3, R2, R1>(this: LoDashExplicitWrapper<(a: R5) => R6>, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: () => R1): LoDashExplicitWrapper<() => R6>;
-        flowRight<R7, R6, R5, R4, R3, R2, R1>(this: LoDashExplicitWrapper<(a: R6) => R7>, f6: (a: R5) => R6, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: () => R1): LoDashExplicitWrapper<() => R7>;
-        // 1-argument first function
-        flowRight<A1, R2, R1>(this: LoDashExplicitWrapper<(a: R1) => R2>, f1: (a1: A1) => R1): LoDashExplicitWrapper<(a1: A1) => R2>;
-        flowRight<A1, R3, R2, R1>(this: LoDashExplicitWrapper<(a: R2) => R3>, f2: (a: R1) => R2, f1: (a1: A1) => R1): LoDashExplicitWrapper<(a1: A1) => R3>;
-        flowRight<A1, R4, R3, R2, R1>(this: LoDashExplicitWrapper<(a: R3) => R4>, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1) => R1): LoDashExplicitWrapper<(a1: A1) => R4>;
-        flowRight<A1, R5, R4, R3, R2, R1>(this: LoDashExplicitWrapper<(a: R4) => R5>, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1) => R1): LoDashExplicitWrapper<(a1: A1) => R5>;
-        flowRight<A1, R6, R5, R4, R3, R2, R1>(this: LoDashExplicitWrapper<(a: R5) => R6>, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1) => R1): LoDashExplicitWrapper<(a1: A1) => R6>;
-        flowRight<A1, R7, R6, R5, R4, R3, R2, R1>(this: LoDashExplicitWrapper<(a: R6) => R7>, f6: (a: R5) => R6, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1) => R1): LoDashExplicitWrapper<(a1: A1) => R7>;
-        // 2-argument first function
-        flowRight<A1, A2, R2, R1>(this: LoDashExplicitWrapper<(a: R1) => R2>, f1: (a1: A1, a2: A2) => R1): LoDashExplicitWrapper<(a1: A1, a2: A2) => R2>;
-        flowRight<A1, A2, R3, R2, R1>(this: LoDashExplicitWrapper<(a: R2) => R3>, f2: (a: R1) => R2, f1: (a1: A1, a2: A2) => R1): LoDashExplicitWrapper<(a1: A1, a2: A2) => R3>;
-        flowRight<A1, A2, R4, R3, R2, R1>(this: LoDashExplicitWrapper<(a: R3) => R4>, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2) => R1): LoDashExplicitWrapper<(a1: A1, a2: A2) => R4>;
-        flowRight<A1, A2, R5, R4, R3, R2, R1>(this: LoDashExplicitWrapper<(a: R4) => R5>, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2) => R1): LoDashExplicitWrapper<(a1: A1, a2: A2) => R5>;
-        flowRight<A1, A2, R6, R5, R4, R3, R2, R1>(this: LoDashExplicitWrapper<(a: R5) => R6>, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2) => R1): LoDashExplicitWrapper<(a1: A1, a2: A2) => R6>;
-        flowRight<A1, A2, R7, R6, R5, R4, R3, R2, R1>(this: LoDashExplicitWrapper<(a: R6) => R7>, f6: (a: R5) => R6, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2) => R1): LoDashExplicitWrapper<(a1: A1, a2: A2) => R7>;
-        // 3-argument first function
-        flowRight<A1, A2, A3, R2, R1>(this: LoDashExplicitWrapper<(a: R1) => R2>, f1: (a1: A1, a2: A2, a3: A3) => R1): LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3) => R2>;
-        flowRight<A1, A2, A3, R3, R2, R1>(this: LoDashExplicitWrapper<(a: R2) => R3>, f2: (a: R1) => R2, f1: (a1: A1, a2: A2, a3: A3) => R1): LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3) => R3>;
-        flowRight<A1, A2, A3, R4, R3, R2, R1>(this: LoDashExplicitWrapper<(a: R3) => R4>, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2, a3: A3) => R1): LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3) => R4>;
-        flowRight<A1, A2, A3, R5, R4, R3, R2, R1>(this: LoDashExplicitWrapper<(a: R4) => R5>, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2, a3: A3) => R1): LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3) => R5>;
-        flowRight<A1, A2, A3, R6, R5, R4, R3, R2, R1>(this: LoDashExplicitWrapper<(a: R5) => R6>, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2, a3: A3) => R1): LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3) => R6>;
-        flowRight<A1, A2, A3, R7, R6, R5, R4, R3, R2, R1>(this: LoDashExplicitWrapper<(a: R6) => R7>, f6: (a: R5) => R6, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2, a3: A3) => R1): LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3) => R7>;
-        // 4-argument first function
-        flowRight<A1, A2, A3, A4, R2, R1>(this: LoDashExplicitWrapper<(a: R1) => R2>, f1: (a1: A1, a2: A2, a3: A3, a4: A4) => R1): LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4) => R2>;
-        flowRight<A1, A2, A3, A4, R3, R2, R1>(this: LoDashExplicitWrapper<(a: R2) => R3>, f2: (a: R1) => R2, f1: (a1: A1, a2: A2, a3: A3, a4: A4) => R1): LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4) => R3>;
-        flowRight<A1, A2, A3, A4, R4, R3, R2, R1>(this: LoDashExplicitWrapper<(a: R3) => R4>, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2, a3: A3, a4: A4) => R1): LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4) => R4>;
-        flowRight<A1, A2, A3, A4, R5, R4, R3, R2, R1>(this: LoDashExplicitWrapper<(a: R4) => R5>, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2, a3: A3, a4: A4) => R1): LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4) => R5>;
-        flowRight<A1, A2, A3, A4, R6, R5, R4, R3, R2, R1>(this: LoDashExplicitWrapper<(a: R5) => R6>, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2, a3: A3, a4: A4) => R1): LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4) => R6>;
-        flowRight<A1, A2, A3, A4, R7, R6, R5, R4, R3, R2, R1>(this: LoDashExplicitWrapper<(a: R6) => R7>, f6: (a: R5) => R6, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2, a3: A3, a4: A4) => R1): LoDashExplicitWrapper<(a1: A1, a2: A2, a3: A3, a4: A4) => R7>;
-        // any-argument first function
-        flowRight<R2, R1>(this: LoDashExplicitWrapper<(a: R1) => R2>, f1: (...args: any[]) => R1): LoDashExplicitWrapper<(...args: any[]) => R2>;
-        flowRight<R3, R2, R1>(this: LoDashExplicitWrapper<(a: R1) => R2>, f2: (a: R1) => R2, f1: (...args: any[]) => R1): LoDashExplicitWrapper<(...args: any[]) => R3>;
-        flowRight<R4, R3, R2, R1>(this: LoDashExplicitWrapper<(a: R1) => R2>, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (...args: any[]) => R1): LoDashExplicitWrapper<(...args: any[]) => R4>;
-        flowRight<R5, R4, R3, R2, R1>(this: LoDashExplicitWrapper<(a: R1) => R2>, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (...args: any[]) => R1): LoDashExplicitWrapper<(...args: any[]) => R5>;
-        flowRight<R6, R5, R4, R3, R2, R1>(this: LoDashExplicitWrapper<(a: R1) => R2>, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (...args: any[]) => R1): LoDashExplicitWrapper<(...args: any[]) => R6>;
-        flowRight<R7, R6, R5, R4, R3, R2, R1>(this: LoDashExplicitWrapper<(a: R1) => R2>, f6: (a: R5) => R6, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (...args: any[]) => R1): LoDashExplicitWrapper<(...args: any[]) => R7>;
-        flowRight(this: LoDashExplicitWrapper<(a: any) => any>, f6: (a: any) => any, f5: (a: any) => any, f4: (a: any) => any, f3: (a: any) => any, f2: (a: any) => any, f1: () => any, ...funcs: Array<Many<(...args: any[]) => any>>): LoDashExplicitWrapper<(...args: any[]) => any>;
-        flowRight(this: LoDashExplicitWrapper<(a: any) => any>, funcs: Array<Many<(...args: any[]) => any>>): LoDashExplicitWrapper<(...args: any[]) => any>;
-    }
-
-    // identity
-
-    interface LoDashStatic {
-        /**
-         * This method returns the first argument provided to it.
-         *
-         * @param value Any value.
-         * @return Returns value.
-         */
-        identity<T>(value: T): T;
-
-        /**
-         * @see _.identity
-         */
-        identity(): undefined;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.identity
-         */
-        identity(): TValue;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.identity
-         */
-        identity(): this;
-    }
-
-    // iteratee
-
-    interface LoDashStatic {
-        /**
-         * Creates a function that invokes `func` with the arguments of the created
-         * function. If `func` is a property name the created callback returns the
-         * property value for a given element. If `func` is an object the created
-         * callback returns `true` for elements that contain the equivalent object properties, otherwise it returns `false`.
-         *
-         * @category Util
-         * @param [func=_.identity] The value to convert to a callback.
-         * @returns Returns the callback.
-         * @example
-         *
-         * var users = [
-         *   { 'user': 'barney', 'age': 36 },
-         *   { 'user': 'fred',   'age': 40 }
-         * ];
-         *
-         * // create custom iteratee shorthands
-         * _.iteratee = _.wrap(_.iteratee, function(callback, func) {
-         *   var p = /^(\S+)\s*([<>])\s*(\S+)$/.exec(func);
-         *   return !p ? callback(func) : function(object) {
-         *     return (p[2] == '>' ? object[p[1]] > p[3] : object[p[1]] < p[3]);
-         *   };
-         * });
-         *
-         * _.filter(users, 'age > 36');
-         * // => [{ 'user': 'fred', 'age': 40 }]
-         */
-        iteratee<TFunction extends (...args: any[]) => any>(
-            func: TFunction
-        ): TFunction;
-
-        /**
-         * @see _.iteratee
-         */
-        // tslint:disable-next-line:unified-signatures Tests fail in TS2.3 if the overloads are joined
-        iteratee(
-            func: string | object
-        ): (...args: any[]) => any;
-
-        /**
-         * @see _.iteratee
-         */
-        iteratee(): typeof _.identity; // tslint:disable-line:no-unnecessary-qualifier
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.iteratee
-         */
-        iteratee<TFunction extends (...args: any[]) => any>(
-            this: LoDashImplicitWrapper<TFunction | string | object>
-        ): LoDashImplicitWrapper<TFunction>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.iteratee
-         */
-        iteratee<TFunction extends (...args: any[]) => any>(
-            this: LoDashExplicitWrapper<TFunction | string | object>
-        ): LoDashExplicitWrapper<TFunction>;
-    }
-
-    // matches
-
-    interface LoDashStatic {
-        /**
-         * Creates a function that performs a deep comparison between a given object and source, returning true if the
-         * given object has equivalent property values, else false.
-         *
-         * Note: This method supports comparing arrays, booleans, Date objects, numbers, Object objects, regexes, and
-         * strings. Objects are compared by their own, not inherited, enumerable properties. For comparing a single own
-         * or inherited property value see _.matchesProperty.
-         *
-         * @param source The object of property values to match.
-         * @return Returns the new function.
-         */
-        matches<T>(source: T): (value: any) => boolean;
-
-        /**
-         * @see _.matches
-         */
-        matches<T, V>(source: T): (value: V) => boolean;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.matches
-         */
-        matches<V>(): LoDashImplicitWrapper<(value: V) => boolean>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.matches
-         */
-        matches<V>(): LoDashExplicitWrapper<(value: V) => boolean>;
-    }
-
-    // matchesProperty
-
-    interface LoDashStatic {
-        /**
-         * Creates a function that compares the property value of path on a given object to value.
-         *
-         * Note: This method supports comparing arrays, booleans, Date objects, numbers, Object objects, regexes, and
-         * strings. Objects are compared by their own, not inherited, enumerable properties.
-         *
-         * @param path The path of the property to get.
-         * @param srcValue The value to match.
-         * @return Returns the new function.
-         */
-        matchesProperty<T>(
-            path: PropertyPath,
-            srcValue: T
-        ): (value: any) => boolean;
-
-        /**
-         * @see _.matchesProperty
-         */
-        matchesProperty<T, V>(
-            path: PropertyPath,
-            srcValue: T
-        ): (value: V) => boolean;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.matchesProperty
-         */
-        matchesProperty<SrcValue>(
-            srcValue: SrcValue
-        ): LoDashImplicitWrapper<(value: any) => boolean>;
-
-        /**
-         * @see _.matchesProperty
-         */
-        matchesProperty<SrcValue, Value>(
-            srcValue: SrcValue
-        ): LoDashImplicitWrapper<(value: Value) => boolean>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.matchesProperty
-         */
-        matchesProperty<SrcValue>(
-            srcValue: SrcValue
-        ): LoDashExplicitWrapper<(value: any) => boolean>;
-
-        /**
-         * @see _.matchesProperty
-         */
-        matchesProperty<SrcValue, Value>(
-            srcValue: SrcValue
-        ): LoDashExplicitWrapper<(value: Value) => boolean>;
-    }
-
-    // method
-
-    interface LoDashStatic {
-        /**
-         * Creates a function that invokes the method at path on a given object. Any additional arguments are provided
-         * to the invoked method.
-         *
-         * @param path The path of the method to invoke.
-         * @param args The arguments to invoke the method with.
-         * @return Returns the new function.
-         */
-        method(
-            path: PropertyPath,
-            ...args: any[]
-        ): (object: any) => any;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.method
-         */
-        method(...args: any[]): LoDashImplicitWrapper<(object: any) => any>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.method
-         */
-        method(...args: any[]): LoDashExplicitWrapper<(object: any) => any>;
-    }
-
-    // methodOf
-
-    interface LoDashStatic {
-        /**
-         * The opposite of _.method; this method creates a function that invokes the method at a given path on object.
-         * Any additional arguments are provided to the invoked method.
-         *
-         * @param object The object to query.
-         * @param args The arguments to invoke the method with.
-         * @return Returns the new function.
-         */
-        methodOf(
-            object: object,
-            ...args: any[]
-        ): (path: PropertyPath) => any;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.methodOf
-         */
-        methodOf(
-            ...args: any[]
-        ): LoDashImplicitWrapper<(path: PropertyPath) => any>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.methodOf
-         */
-        methodOf(
-            ...args: any[]
-        ): LoDashExplicitWrapper<(path: PropertyPath) => any>;
-    }
-
-    // mixin
-
-    interface MixinOptions {
-        chain?: boolean;
-    }
-
-    interface LoDashStatic {
-        /**
-         * Adds all own enumerable function properties of a source object to the destination object. If object is a
-         * function then methods are added to its prototype as well.
-         *
-         * Note: Use _.runInContext to create a pristine lodash function to avoid conflicts caused by modifying
-         * the original.
-         *
-         * @param object The destination object.
-         * @param source The object of functions to add.
-         * @param options The options object.
-         * @param options.chain Specify whether the functions added are chainable.
-         * @return Returns object.
-         */
-        mixin<TObject>(
-            object: TObject,
-            source: Dictionary<(...args: any[]) => any>,
-            options?: MixinOptions
-        ): TObject;
-
-        /**
-         * @see _.mixin
-         */
-        mixin<TResult>(
-            source: Dictionary<(...args: any[]) => any>,
-            options?: MixinOptions
-        ): LoDashStatic;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.mixin
-         */
-        mixin(
-            source: Dictionary<(...args: any[]) => any>,
-            options?: MixinOptions
-        ): this;
-
-        /**
-         * @see _.mixin
-         */
-        mixin(
-            options?: MixinOptions
-        ): LoDashImplicitWrapper<LoDashStatic>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.mixin
-         */
-        mixin(
-            source: Dictionary<(...args: any[]) => any>,
-            options?: MixinOptions
-        ): this;
-
-        /**
-         * @see _.mixin
-         */
-        mixin(
-            options?: MixinOptions
-        ): LoDashExplicitWrapper<LoDashStatic>;
-    }
-
-    // noConflict
-
-    interface LoDashStatic {
-        /**
-         * Reverts the _ variable to its previous value and returns a reference to the lodash function.
-         *
-         * @return Returns the lodash function.
-         */
-        noConflict(): typeof _;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.noConflict
-         */
-        noConflict(): typeof _;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.noConflict
-         */
-        noConflict(): LoDashExplicitWrapper<typeof _>;
-    }
-
-    // noop
-
-    interface LoDashStatic {
-        /**
-         * A no-operation function that returns undefined regardless of the arguments it receives.
-         *
-         * @return undefined
-         */
-        noop(...args: any[]): void;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.noop
-         */
-        noop(...args: any[]): void;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.noop
-         */
-        noop(...args: any[]): LoDashExplicitWrapper<undefined>;
-    }
-
-    // nthArg
-
-    interface LoDashStatic {
-        /**
-         * Creates a function that returns its nth argument.
-         *
-         * @param n The index of the argument to return.
-         * @return Returns the new function.
-         */
-        nthArg(n?: number): (...args: any[]) => any;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.nthArg
-         */
-        nthArg(): LoDashImplicitWrapper<(...args: any[]) => any>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.nthArg
-         */
-        nthArg(): LoDashExplicitWrapper<(...args: any[]) => any>;
-    }
-
-    // over
-
-    interface LoDashStatic {
-        /**
-         * Creates a function that invokes iteratees with the arguments provided to the created function and returns
-         * their results.
-         *
-         * @param iteratees The iteratees to invoke.
-         * @return Returns the new function.
-         */
-        over<TResult>(...iteratees: Array<Many<(...args: any[]) => TResult>>): (...args: any[]) => TResult[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.over
-         */
-        over<TResult>(
-            this: LoDashImplicitWrapper<Many<(...args: any[]) => TResult>>,
-            ...iteratees: Array<Many<(...args: any[]) => TResult>>
-        ): LoDashImplicitWrapper<(...args: any[]) => TResult[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.over
-         */
-        over<TResult>(
-            this: LoDashExplicitWrapper<Many<(...args: any[]) => TResult>>,
-            ...iteratees: Array<Many<(...args: any[]) => TResult>>
-        ): LoDashExplicitWrapper<(...args: any[]) => TResult[]>;
-    }
-
-    // overEvery
-
-    interface LoDashStatic {
-        /**
-         * Creates a function that checks if all of the predicates return truthy when invoked with the arguments
-         * provided to the created function.
-         *
-         * @param predicates The predicates to check.
-         * @return Returns the new function.
-         */
-        overEvery<T>(...predicates: Array<Many<(...args: T[]) => boolean>>): (...args: T[]) => boolean;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.overEvery
-         */
-        overEvery<T>(...predicates: Array<Many<(...args: T[]) => boolean>>): LoDashImplicitWrapper<(...args: T[]) => boolean>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.overEvery
-         */
-        overEvery<T>(...predicates: Array<Many<(...args: T[]) => boolean>>): LoDashExplicitWrapper<(...args: T[]) => boolean>;
-    }
-
-    // overSome
-
-    interface LoDashStatic {
-        /**
-         * Creates a function that checks if any of the predicates return truthy when invoked with the arguments
-         * provided to the created function.
-         *
-         * @param predicates The predicates to check.
-         * @return Returns the new function.
-         */
-        overSome<T>(...predicates: Array<Many<(...args: T[]) => boolean>>): (...args: T[]) => boolean;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.overSome
-         */
-        overSome<T>(...predicates: Array<Many<(...args: T[]) => boolean>>): LoDashImplicitWrapper<(...args: T[]) => boolean>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.overSome
-         */
-        overSome<T>(...predicates: Array<Many<(...args: T[]) => boolean>>): LoDashExplicitWrapper<(...args: T[]) => boolean>;
-    }
-
-    // property
-
-    interface LoDashStatic {
-        /**
-         * Creates a function that returns the property value at path on a given object.
-         *
-         * @param path The path of the property to get.
-         * @return Returns the new function.
-         */
-        property<TObj, TResult>(path: PropertyPath): (obj: TObj) => TResult;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.property
-         */
-        property<TObj, TResult>(): LoDashImplicitWrapper<(obj: TObj) => TResult>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.property
-         */
-        property<TObj, TResult>(): LoDashExplicitWrapper<(obj: TObj) => TResult>;
-    }
-
-    // propertyOf
-
-    interface LoDashStatic {
-        /**
-         * The opposite of _.property; this method creates a function that returns the property value at a given path
-         * on object.
-         *
-         * @param object The object to query.
-         * @return Returns the new function.
-         */
-        propertyOf<T extends {}>(object: T): (path: PropertyPath) => any;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.propertyOf
-         */
-        propertyOf(): LoDashImplicitWrapper<(path: PropertyPath) => any>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.propertyOf
-         */
-        propertyOf(): LoDashExplicitWrapper<(path: PropertyPath) => any>;
-    }
-
-    // range
-
-    interface LoDashStatic {
-        /**
-         * Creates an array of numbers (positive and/or negative) progressing from start up to, but not including, end.
-         * If end is not specified it’s set to start with start then set to 0. If end is less than start a zero-length
-         * range is created unless a negative step is specified.
-         *
-         * @param start The start of the range.
-         * @param end The end of the range.
-         * @param step The value to increment or decrement by.
-         * @return Returns a new range array.
-         */
-        range(
-            start: number,
-            end?: number,
-            step?: number
-        ): number[];
-
-        /**
-         * Creates an array of numbers (positive and/or negative) progressing from start up to, but not including, end.
-         * If end is not specified it’s set to start with start then set to 0. If end is less than start a zero-length
-         * range is created unless a negative step is specified.
-         *
-         * @param start The start of the range.
-         * @param index Not used in this overload.
-         * @param guard Enables use as an iteratee for methods like _.map. You should not pass this parameter directly in your code.
-         * @return Returns a new range array.
-         */
-        range(
-            end: number,
-            index: string | number,
-            guard: object
-        ): number[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.range
-         */
-        range(
-            end?: number,
-            step?: number
-        ): LoDashImplicitWrapper<number[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.range
-         */
-        range(
-            end?: number,
-            step?: number
-        ): LoDashExplicitWrapper<number[]>;
-    }
-
-    // rangeRight
-
-    interface LoDashStatic {
-        /**
-         * This method is like `_.range` except that it populates values in
-         * descending order.
-         *
-         * @category Util
-         * @param start The start of the range.
-         * @param end The end of the range.
-         * @param step The value to increment or decrement by.
-         * @returns Returns the new array of numbers.
-         * @example
-         *
-         * _.rangeRight(4);
-         * // => [3, 2, 1, 0]
-         *
-         * _.rangeRight(-4);
-         * // => [-3, -2, -1, 0]
-         *
-         * _.rangeRight(1, 5);
-         * // => [4, 3, 2, 1]
-         *
-         * _.rangeRight(0, 20, 5);
-         * // => [15, 10, 5, 0]
-         *
-         * _.rangeRight(0, -4, -1);
-         * // => [-3, -2, -1, 0]
-         *
-         * _.rangeRight(1, 4, 0);
-         * // => [1, 1, 1]
-         *
-         * _.rangeRight(0);
-         * // => []
-         */
-        rangeRight(
-            start: number,
-            end?: number,
-            step?: number
-        ): number[];
-
-        /**
-         * This method is like _.range except that it populates values in
-         * descending order.
-         *
-         * @param start The start of the range.
-         * @param index Not used in this overload.
-         * @param guard Enables use as an iteratee for methods like _.map. You should not pass this parameter directly in your code.
-         * @return Returns a new range array.
-         */
-        rangeRight(
-            end: number,
-            index: string | number,
-            guard: object
-        ): number[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.rangeRight
-         */
-        rangeRight(
-            end?: number,
-            step?: number
-        ): LoDashImplicitWrapper<number[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.rangeRight
-         */
-        rangeRight(
-            end?: number,
-            step?: number
-        ): LoDashExplicitWrapper<number[]>;
-    }
-
-    // runInContext
-
-    interface LoDashStatic {
-        /**
-         * Create a new pristine lodash function using the given context object.
-         *
-         * @param context The context object.
-         * @return Returns a new lodash function.
-         */
-        runInContext(context?: object): LoDashStatic;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.runInContext
-         */
-        runInContext(): LoDashStatic;
-    }
-
-    // stubArray
-
-    interface LoDashStatic {
-        /**
-         * This method returns a new empty array.
-         *
-         * @returns Returns the new empty array.
-         */
-        stubArray(): any[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.stubArray
-         */
-        stubArray(): any[];
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.stubArray
-         */
-        stubArray(): LoDashExplicitWrapper<any[]>;
-    }
-
-    // stubFalse
-
-    interface LoDashStatic {
-        /**
-         * This method returns `false`.
-         *
-         * @returns Returns `false`.
-         */
-        stubFalse(): false;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.stubFalse
-         */
-        stubFalse(): false;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.stubFalse
-         */
-        stubFalse(): LoDashExplicitWrapper<false>;
-    }
-
-    // stubObject
-
-    interface LoDashStatic {
-        /**
-         * This method returns a new empty object.
-         *
-         * @returns Returns the new empty object.
-         */
-        stubObject(): any;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.stubObject
-         */
-        stubObject(): any;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.stubObject
-         */
-        stubObject(): LoDashExplicitWrapper<any>;
-    }
-
-    // stubString
-
-    interface LoDashStatic {
-        /**
-         * This method returns an empty string.
-         *
-         * @returns Returns the empty string.
-         */
-        stubString(): string;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.stubString
-         */
-        stubString(): string;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.stubString
-         */
-        stubString(): LoDashExplicitWrapper<string>;
-    }
-
-    // stubTrue
-
-    interface LoDashStatic {
-        /**
-         * This method returns `true`.
-         *
-         * @returns Returns `true`.
-         */
-        stubTrue(): true;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.stubTrue
-         */
-        stubTrue(): true;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.stubTrue
-         */
-        stubTrue(): LoDashExplicitWrapper<true>;
-    }
-
-    // times
-
-    interface LoDashStatic {
-        /**
-         * Invokes the iteratee function n times, returning an array of the results of each invocation. The iteratee
-         * is invoked with one argument; (index).
-         *
-         * @param n The number of times to invoke iteratee.
-         * @param iteratee The function invoked per iteration.
-         * @return Returns the array of results.
-         */
-        times<TResult>(
-            n: number,
-            iteratee: (num: number) => TResult
-        ): TResult[];
-
-        /**
-         * @see _.times
-         */
-        times(n: number): number[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.times
-         */
-        times<TResult>(
-            iteratee: (num: number) => TResult
-        ): TResult[];
-
-        /**
-         * @see _.times
-         */
-        times(): number[];
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.times
-         */
-        times<TResult>(
-            iteratee: (num: number) => TResult
-        ): LoDashExplicitWrapper<TResult[]>;
-
-        /**
-         * @see _.times
-         */
-        times(): LoDashExplicitWrapper<number[]>;
-    }
-
-    // toPath
-
-    interface LoDashStatic {
-        /**
-         * Converts `value` to a property path array.
-         *
-         * @category Util
-         * @param value The value to convert.
-         * @returns Returns the new property path array.
-         * @example
-         *
-         * _.toPath('a.b.c');
-         * // => ['a', 'b', 'c']
-         *
-         * _.toPath('a[0].b.c');
-         * // => ['a', '0', 'b', 'c']
-         *
-         * var path = ['a', 'b', 'c'],
-         *     newPath = _.toPath(path);
-         *
-         * console.log(newPath);
-         * // => ['a', 'b', 'c']
-         *
-         * console.log(path === newPath);
-         * // => false
-         */
-        toPath(value: any): string[];
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.toPath
-         */
-        toPath(): LoDashImplicitWrapper<string[]>;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.toPath
-         */
-        toPath(): LoDashExplicitWrapper<string[]>;
-    }
-
-    // uniqueId
-
-    interface LoDashStatic {
-        /**
-         * Generates a unique ID. If prefix is provided the ID is appended to it.
-         *
-         * @param prefix The value to prefix the ID with.
-         * @return Returns the unique ID.
-         */
-        uniqueId(prefix?: string): string;
-    }
-
-    interface LoDashImplicitWrapper<TValue> {
-        /**
-         * @see _.uniqueId
-         */
-        uniqueId(): string;
-    }
-
-    interface LoDashExplicitWrapper<TValue> {
-        /**
-         * @see _.uniqueId
-         */
-        uniqueId(): LoDashExplicitWrapper<string>;
-    }
-}
diff --git a/jtg js/node_modules/@types/lodash/compact.d.ts b/jtg js/node_modules/@types/lodash/compact.d.ts
deleted file mode 100644
index 94a539778dddf5d52ff64687cc580fcdff15f728..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/compact.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { compact } from "./index";
-export = compact;
diff --git a/jtg js/node_modules/@types/lodash/concat.d.ts b/jtg js/node_modules/@types/lodash/concat.d.ts
deleted file mode 100644
index f8c26122c7fe21a496e659c6fd40ecf1b896c5ee..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/concat.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { concat } from "./index";
-export = concat;
diff --git a/jtg js/node_modules/@types/lodash/cond.d.ts b/jtg js/node_modules/@types/lodash/cond.d.ts
deleted file mode 100644
index a325bad4bb9c9e2d8f08493b689e533926e48ec7..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/cond.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { cond } from "./index";
-export = cond;
diff --git a/jtg js/node_modules/@types/lodash/conformsTo.d.ts b/jtg js/node_modules/@types/lodash/conformsTo.d.ts
deleted file mode 100644
index 320b1806e04e8f3cd21168d4f8b61a17223524fa..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/conformsTo.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { conformsTo } from "./index";
-export = conformsTo;
diff --git a/jtg js/node_modules/@types/lodash/constant.d.ts b/jtg js/node_modules/@types/lodash/constant.d.ts
deleted file mode 100644
index ebab572c1d71d39b741f5507dbff0ea2e9c35fe2..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/constant.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { constant } from "./index";
-export = constant;
diff --git a/jtg js/node_modules/@types/lodash/countBy.d.ts b/jtg js/node_modules/@types/lodash/countBy.d.ts
deleted file mode 100644
index db56ff3c1109772c0e16b5e312b4032596a49cfb..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/countBy.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { countBy } from "./index";
-export = countBy;
diff --git a/jtg js/node_modules/@types/lodash/create.d.ts b/jtg js/node_modules/@types/lodash/create.d.ts
deleted file mode 100644
index 5c7dc7a21ceada8c2f03e5eeca6146ef39e1e5e4..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/create.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { create } from "./index";
-export = create;
diff --git a/jtg js/node_modules/@types/lodash/curry.d.ts b/jtg js/node_modules/@types/lodash/curry.d.ts
deleted file mode 100644
index afbb8f47dc6a6c5f892cfbd02a958d4afdb3c128..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/curry.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { curry } from "./index";
-export = curry;
diff --git a/jtg js/node_modules/@types/lodash/curryRight.d.ts b/jtg js/node_modules/@types/lodash/curryRight.d.ts
deleted file mode 100644
index 7d224c9722073716cae2cf4e87f861ad0360ff0e..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/curryRight.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { curryRight } from "./index";
-export = curryRight;
diff --git a/jtg js/node_modules/@types/lodash/debounce.d.ts b/jtg js/node_modules/@types/lodash/debounce.d.ts
deleted file mode 100644
index 983edd74c7275025c5d1ba3c4d2c34e35c9563cc..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/debounce.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { debounce } from "./index";
-export = debounce;
diff --git a/jtg js/node_modules/@types/lodash/deburr.d.ts b/jtg js/node_modules/@types/lodash/deburr.d.ts
deleted file mode 100644
index cf1fa376f30dd839b909bb95c171f6addb33a004..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/deburr.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { deburr } from "./index";
-export = deburr;
diff --git a/jtg js/node_modules/@types/lodash/defaultTo.d.ts b/jtg js/node_modules/@types/lodash/defaultTo.d.ts
deleted file mode 100644
index 89fb56505f1febf46809e45472451ea1e01213bf..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/defaultTo.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { defaultTo } from "./index";
-export = defaultTo;
diff --git a/jtg js/node_modules/@types/lodash/defaults.d.ts b/jtg js/node_modules/@types/lodash/defaults.d.ts
deleted file mode 100644
index e83508d126fc11ef4d2e568fb8830ab9b31c7353..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/defaults.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { defaults } from "./index";
-export = defaults;
diff --git a/jtg js/node_modules/@types/lodash/defaultsDeep.d.ts b/jtg js/node_modules/@types/lodash/defaultsDeep.d.ts
deleted file mode 100644
index 19ff55129643c408c35be95405a46092940a4f27..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/defaultsDeep.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { defaultsDeep } from "./index";
-export = defaultsDeep;
diff --git a/jtg js/node_modules/@types/lodash/defer.d.ts b/jtg js/node_modules/@types/lodash/defer.d.ts
deleted file mode 100644
index 144bf5b014713c4ae495b4c20736739e595f8bd0..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/defer.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { defer } from "./index";
-export = defer;
diff --git a/jtg js/node_modules/@types/lodash/delay.d.ts b/jtg js/node_modules/@types/lodash/delay.d.ts
deleted file mode 100644
index ead89c10073ceb445981f4d7e4a17cc9b2ca1a08..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/delay.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { delay } from "./index";
-export = delay;
diff --git a/jtg js/node_modules/@types/lodash/difference.d.ts b/jtg js/node_modules/@types/lodash/difference.d.ts
deleted file mode 100644
index 4a73c5659978e825c7e434e9fb5388249fafbee9..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/difference.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { difference } from "./index";
-export = difference;
diff --git a/jtg js/node_modules/@types/lodash/differenceBy.d.ts b/jtg js/node_modules/@types/lodash/differenceBy.d.ts
deleted file mode 100644
index 34558c4ef31b722479804203d891f6540f73f6f1..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/differenceBy.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { differenceBy } from "./index";
-export = differenceBy;
diff --git a/jtg js/node_modules/@types/lodash/differenceWith.d.ts b/jtg js/node_modules/@types/lodash/differenceWith.d.ts
deleted file mode 100644
index 86aebd889e061c20b724ffca954065b86a9e5a7a..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/differenceWith.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { differenceWith } from "./index";
-export = differenceWith;
diff --git a/jtg js/node_modules/@types/lodash/divide.d.ts b/jtg js/node_modules/@types/lodash/divide.d.ts
deleted file mode 100644
index 3d8e39316641dc36561bf481033458e3cce399d2..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/divide.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { divide } from "./index";
-export = divide;
diff --git a/jtg js/node_modules/@types/lodash/drop.d.ts b/jtg js/node_modules/@types/lodash/drop.d.ts
deleted file mode 100644
index 1283f99a58d2de6b50d5e75854fdf140dab8501c..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/drop.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { drop } from "./index";
-export = drop;
diff --git a/jtg js/node_modules/@types/lodash/dropRight.d.ts b/jtg js/node_modules/@types/lodash/dropRight.d.ts
deleted file mode 100644
index 4133c9850b42668cae840b4d1bc3ff2b8c609895..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/dropRight.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { dropRight } from "./index";
-export = dropRight;
diff --git a/jtg js/node_modules/@types/lodash/dropRightWhile.d.ts b/jtg js/node_modules/@types/lodash/dropRightWhile.d.ts
deleted file mode 100644
index 0dda808d497474ea249df857e99423c1df7d8d7d..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/dropRightWhile.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { dropRightWhile } from "./index";
-export = dropRightWhile;
diff --git a/jtg js/node_modules/@types/lodash/dropWhile.d.ts b/jtg js/node_modules/@types/lodash/dropWhile.d.ts
deleted file mode 100644
index 894ebaa234ebe6171c0560235dedafaff319fa18..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/dropWhile.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { dropWhile } from "./index";
-export = dropWhile;
diff --git a/jtg js/node_modules/@types/lodash/each.d.ts b/jtg js/node_modules/@types/lodash/each.d.ts
deleted file mode 100644
index 608f8a9b92275cec04beb08ff1e75d0dda43787d..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/each.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { each } from "./index";
-export = each;
diff --git a/jtg js/node_modules/@types/lodash/eachRight.d.ts b/jtg js/node_modules/@types/lodash/eachRight.d.ts
deleted file mode 100644
index ae0bb6f87879bbf2358b6712593bf5a89a3dbbc4..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/eachRight.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { eachRight } from "./index";
-export = eachRight;
diff --git a/jtg js/node_modules/@types/lodash/endsWith.d.ts b/jtg js/node_modules/@types/lodash/endsWith.d.ts
deleted file mode 100644
index d8475b13a9e70e50fd18ab8128404a6def94f089..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/endsWith.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { endsWith } from "./index";
-export = endsWith;
diff --git a/jtg js/node_modules/@types/lodash/entries.d.ts b/jtg js/node_modules/@types/lodash/entries.d.ts
deleted file mode 100644
index 24b241751bf48d9cb39ca599a71c243f5e30e4b6..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/entries.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { entries } from "./index";
-export = entries;
diff --git a/jtg js/node_modules/@types/lodash/entriesIn.d.ts b/jtg js/node_modules/@types/lodash/entriesIn.d.ts
deleted file mode 100644
index a68ab1e576e548bf219965d4ce68d6a038ea8903..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/entriesIn.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { entriesIn } from "./index";
-export = entriesIn;
diff --git a/jtg js/node_modules/@types/lodash/eq.d.ts b/jtg js/node_modules/@types/lodash/eq.d.ts
deleted file mode 100644
index 88ec88791262b24fcb1c0ca8d789078115876b80..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/eq.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { eq } from "./index";
-export = eq;
diff --git a/jtg js/node_modules/@types/lodash/escape.d.ts b/jtg js/node_modules/@types/lodash/escape.d.ts
deleted file mode 100644
index 9f628a3baae024a7f2a303cdf53d05b7659a454c..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/escape.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { escape } from "./index";
-export = escape;
diff --git a/jtg js/node_modules/@types/lodash/escapeRegExp.d.ts b/jtg js/node_modules/@types/lodash/escapeRegExp.d.ts
deleted file mode 100644
index 97519c10f30b25a9a9bda219e7eb7cd977021779..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/escapeRegExp.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { escapeRegExp } from "./index";
-export = escapeRegExp;
diff --git a/jtg js/node_modules/@types/lodash/every.d.ts b/jtg js/node_modules/@types/lodash/every.d.ts
deleted file mode 100644
index d9717d4b11043be438423af731e755cb97b52b1f..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/every.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { every } from "./index";
-export = every;
diff --git a/jtg js/node_modules/@types/lodash/extend.d.ts b/jtg js/node_modules/@types/lodash/extend.d.ts
deleted file mode 100644
index 1b3107a0071a0129257627d0c57851a0d9145347..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/extend.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { extend } from "./index";
-export = extend;
diff --git a/jtg js/node_modules/@types/lodash/extendWith.d.ts b/jtg js/node_modules/@types/lodash/extendWith.d.ts
deleted file mode 100644
index 99ca5d04ea699dfc0a39c5bdb662549e0682e2eb..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/extendWith.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { extendWith } from "./index";
-export = extendWith;
diff --git a/jtg js/node_modules/@types/lodash/fill.d.ts b/jtg js/node_modules/@types/lodash/fill.d.ts
deleted file mode 100644
index f595dfcd0b6763318155a023021516e0e8eb3680..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fill.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { fill } from "./index";
-export = fill;
diff --git a/jtg js/node_modules/@types/lodash/filter.d.ts b/jtg js/node_modules/@types/lodash/filter.d.ts
deleted file mode 100644
index a4496de6a67be0711bc4366896618c1c5eaa85d5..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/filter.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { filter } from "./index";
-export = filter;
diff --git a/jtg js/node_modules/@types/lodash/find.d.ts b/jtg js/node_modules/@types/lodash/find.d.ts
deleted file mode 100644
index e8da4b4f504df4d876b3af23ff8dd0c935c6c457..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/find.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { find } from "./index";
-export = find;
diff --git a/jtg js/node_modules/@types/lodash/findIndex.d.ts b/jtg js/node_modules/@types/lodash/findIndex.d.ts
deleted file mode 100644
index 6b724446b7529481086dc91d062f3d3739f5e689..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/findIndex.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { findIndex } from "./index";
-export = findIndex;
diff --git a/jtg js/node_modules/@types/lodash/findKey.d.ts b/jtg js/node_modules/@types/lodash/findKey.d.ts
deleted file mode 100644
index 90230b4370e01e0136d5e6a4ef1486e64b66d736..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/findKey.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { findKey } from "./index";
-export = findKey;
diff --git a/jtg js/node_modules/@types/lodash/findLast.d.ts b/jtg js/node_modules/@types/lodash/findLast.d.ts
deleted file mode 100644
index c4f24fc17a80502ddec2a24c01a1ddb0673778fb..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/findLast.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { findLast } from "./index";
-export = findLast;
diff --git a/jtg js/node_modules/@types/lodash/findLastIndex.d.ts b/jtg js/node_modules/@types/lodash/findLastIndex.d.ts
deleted file mode 100644
index 21856e532ba0cab9fd62c9f6c0b9cc314e033438..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/findLastIndex.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { findLastIndex } from "./index";
-export = findLastIndex;
diff --git a/jtg js/node_modules/@types/lodash/findLastKey.d.ts b/jtg js/node_modules/@types/lodash/findLastKey.d.ts
deleted file mode 100644
index ed7ff798d70028524cde02fa8a35265cb187d51d..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/findLastKey.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { findLastKey } from "./index";
-export = findLastKey;
diff --git a/jtg js/node_modules/@types/lodash/first.d.ts b/jtg js/node_modules/@types/lodash/first.d.ts
deleted file mode 100644
index fd1cda7af053e9805679bf9ba3b770ea5832d9a2..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/first.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { first } from "./index";
-export = first;
diff --git a/jtg js/node_modules/@types/lodash/flatMap.d.ts b/jtg js/node_modules/@types/lodash/flatMap.d.ts
deleted file mode 100644
index 00570530ef4041a9dd766902539cae36467a5d9e..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/flatMap.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { flatMap } from "./index";
-export = flatMap;
diff --git a/jtg js/node_modules/@types/lodash/flatMapDeep.d.ts b/jtg js/node_modules/@types/lodash/flatMapDeep.d.ts
deleted file mode 100644
index c65639a1fadf43b071d1c042cf6df22261b6235b..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/flatMapDeep.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { flatMapDeep } from "./index";
-export = flatMapDeep;
diff --git a/jtg js/node_modules/@types/lodash/flatMapDepth.d.ts b/jtg js/node_modules/@types/lodash/flatMapDepth.d.ts
deleted file mode 100644
index 7ec18534b0a7a6f15b336603a5612bd6749ebb2d..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/flatMapDepth.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { flatMapDepth } from "./index";
-export = flatMapDepth;
diff --git a/jtg js/node_modules/@types/lodash/flatten.d.ts b/jtg js/node_modules/@types/lodash/flatten.d.ts
deleted file mode 100644
index 43ac0f444ea287234403221dd46ed738f00d78b2..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/flatten.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { flatten } from "./index";
-export = flatten;
diff --git a/jtg js/node_modules/@types/lodash/flattenDeep.d.ts b/jtg js/node_modules/@types/lodash/flattenDeep.d.ts
deleted file mode 100644
index df08bfa55d4c1829c210d86548271428a65d618f..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/flattenDeep.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { flattenDeep } from "./index";
-export = flattenDeep;
diff --git a/jtg js/node_modules/@types/lodash/flattenDepth.d.ts b/jtg js/node_modules/@types/lodash/flattenDepth.d.ts
deleted file mode 100644
index f6be541f8db4f210bea8662541f328779f7ff236..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/flattenDepth.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { flattenDepth } from "./index";
-export = flattenDepth;
diff --git a/jtg js/node_modules/@types/lodash/flip.d.ts b/jtg js/node_modules/@types/lodash/flip.d.ts
deleted file mode 100644
index 48c9924eca273ec892f9f00e57c0a375204dc88d..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/flip.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { flip } from "./index";
-export = flip;
diff --git a/jtg js/node_modules/@types/lodash/floor.d.ts b/jtg js/node_modules/@types/lodash/floor.d.ts
deleted file mode 100644
index a101e5de0fb3535137c994d49ed8352dc783c712..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/floor.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { floor } from "./index";
-export = floor;
diff --git a/jtg js/node_modules/@types/lodash/flow.d.ts b/jtg js/node_modules/@types/lodash/flow.d.ts
deleted file mode 100644
index 37af0d4797b6b27c07c7fb0d710571a55d5d67f2..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/flow.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { flow } from "./index";
-export = flow;
diff --git a/jtg js/node_modules/@types/lodash/flowRight.d.ts b/jtg js/node_modules/@types/lodash/flowRight.d.ts
deleted file mode 100644
index 6c63f3edc18b0b3c4def75d735f74c838a631ffe..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/flowRight.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { flowRight } from "./index";
-export = flowRight;
diff --git a/jtg js/node_modules/@types/lodash/forEach.d.ts b/jtg js/node_modules/@types/lodash/forEach.d.ts
deleted file mode 100644
index 8416aab76cd7f05b1b08b8033554d6adeadfda53..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/forEach.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { forEach } from "./index";
-export = forEach;
diff --git a/jtg js/node_modules/@types/lodash/forEachRight.d.ts b/jtg js/node_modules/@types/lodash/forEachRight.d.ts
deleted file mode 100644
index af65b5c1cfc3a39c39580394f3f2e9bf037f376f..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/forEachRight.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { forEachRight } from "./index";
-export = forEachRight;
diff --git a/jtg js/node_modules/@types/lodash/forIn.d.ts b/jtg js/node_modules/@types/lodash/forIn.d.ts
deleted file mode 100644
index 77d6f4853f3a682ddc5671fe4e93ddbe4bab118a..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/forIn.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { forIn } from "./index";
-export = forIn;
diff --git a/jtg js/node_modules/@types/lodash/forInRight.d.ts b/jtg js/node_modules/@types/lodash/forInRight.d.ts
deleted file mode 100644
index d732969421b64e3572877e16cf22b48b87b37f5e..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/forInRight.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { forInRight } from "./index";
-export = forInRight;
diff --git a/jtg js/node_modules/@types/lodash/forOwn.d.ts b/jtg js/node_modules/@types/lodash/forOwn.d.ts
deleted file mode 100644
index dfa930f27858348024f6383b0ec7ccf9a3267bbb..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/forOwn.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { forOwn } from "./index";
-export = forOwn;
diff --git a/jtg js/node_modules/@types/lodash/forOwnRight.d.ts b/jtg js/node_modules/@types/lodash/forOwnRight.d.ts
deleted file mode 100644
index fddde6a77e8d2ccf9482b1f9fa7b2775b1d7e51c..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/forOwnRight.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { forOwnRight } from "./index";
-export = forOwnRight;
diff --git a/jtg js/node_modules/@types/lodash/fp.d.ts b/jtg js/node_modules/@types/lodash/fp.d.ts
deleted file mode 100644
index c799bd734b24fbbb13200e4a9310e194e906e71e..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp.d.ts	
+++ /dev/null
@@ -1,4765 +0,0 @@
-// AUTO-GENERATED: do not modify this file directly.
-// If you need to make changes, modify generate-fp.ts (if necessary), then open a terminal in types/lodash/scripts, and do:
-// npm install && npm run generate
-
-import lodash = require("./index");
-
-export = _;
-
-declare const _: _.LoDashFp;
-declare namespace _ {
-    interface LodashAdd {
-        (augend: number): LodashAdd1x1;
-        (augend: lodash.__, addend: number): LodashAdd1x2;
-        (augend: number, addend: number): number;
-    }
-    type LodashAdd1x1 = (addend: number) => number;
-    type LodashAdd1x2 = (augend: number) => number;
-    interface LodashAfter {
-        <TFunc extends (...args: any[]) => any>(func: TFunc): LodashAfter1x1<TFunc>;
-        (func: lodash.__, n: number): LodashAfter1x2;
-        <TFunc extends (...args: any[]) => any>(func: TFunc, n: number): TFunc;
-    }
-    type LodashAfter1x1<TFunc> = (n: number) => TFunc;
-    type LodashAfter1x2 = <TFunc extends (...args: any[]) => any>(func: TFunc) => TFunc;
-    interface LodashEvery {
-        <T>(predicate: lodash.ValueIterateeCustom<T, boolean>): LodashEvery1x1<T>;
-        <T>(predicate: lodash.__, collection: lodash.List<T> | null | undefined): LodashEvery1x2<T>;
-        <T>(predicate: lodash.ValueIterateeCustom<T, boolean>, collection: lodash.List<T> | null | undefined): boolean;
-        <T extends object>(predicate: lodash.__, collection: T | null | undefined): LodashEvery2x2<T>;
-        <T extends object>(predicate: lodash.ValueIterateeCustom<T[keyof T], boolean>, collection: T | null | undefined): boolean;
-    }
-    type LodashEvery1x1<T> = (collection: lodash.List<T> | object | null | undefined) => boolean;
-    type LodashEvery1x2<T> = (predicate: lodash.ValueIterateeCustom<T, boolean>) => boolean;
-    type LodashEvery2x2<T> = (predicate: lodash.ValueIterateeCustom<T[keyof T], boolean>) => boolean;
-    type LodashOverEvery = <T>(predicates: lodash.Many<(...args: T[]) => boolean>) => (...args: T[]) => boolean;
-    type LodashConstant = <T>(value: T) => () => T;
-    interface LodashSome {
-        <T>(predicate: lodash.ValueIterateeCustom<T, boolean>): LodashSome1x1<T>;
-        <T>(predicate: lodash.__, collection: lodash.List<T> | null | undefined): LodashSome1x2<T>;
-        <T>(predicate: lodash.ValueIterateeCustom<T, boolean>, collection: lodash.List<T> | null | undefined): boolean;
-        <T extends object>(predicate: lodash.__, collection: T | null | undefined): LodashSome2x2<T>;
-        <T extends object>(predicate: lodash.ValueIterateeCustom<T[keyof T], boolean>, collection: T | null | undefined): boolean;
-    }
-    type LodashSome1x1<T> = (collection: lodash.List<T> | object | null | undefined) => boolean;
-    type LodashSome1x2<T> = (predicate: lodash.ValueIterateeCustom<T, boolean>) => boolean;
-    type LodashSome2x2<T> = (predicate: lodash.ValueIterateeCustom<T[keyof T], boolean>) => boolean;
-    type LodashOverSome = <T>(predicates: lodash.Many<(...args: T[]) => boolean>) => (...args: T[]) => boolean;
-    type LodashApply = <TResult>(func: (...args: any[]) => TResult) => (...args: any[]) => TResult;
-    interface LodashAry {
-        (n: number): LodashAry1x1;
-        (n: lodash.__, func: (...args: any[]) => any): LodashAry1x2;
-        (n: number, func: (...args: any[]) => any): (...args: any[]) => any;
-    }
-    type LodashAry1x1 = (func: (...args: any[]) => any) => (...args: any[]) => any;
-    type LodashAry1x2 = (n: number) => (...args: any[]) => any;
-    interface LodashAssign {
-        <TObject>(object: TObject): LodashAssign1x1<TObject>;
-        <TSource>(object: lodash.__, source: TSource): LodashAssign1x2<TSource>;
-        <TObject, TSource>(object: TObject, source: TSource): TObject & TSource;
-    }
-    type LodashAssign1x1<TObject> = <TSource>(source: TSource) => TObject & TSource;
-    type LodashAssign1x2<TSource> = <TObject>(object: TObject) => TObject & TSource;
-    interface LodashAssignAll {
-        <TObject, TSource>(object: [TObject, TSource]): TObject & TSource;
-        <TObject, TSource1, TSource2>(object: [TObject, TSource1, TSource2]): TObject & TSource1 & TSource2;
-        <TObject, TSource1, TSource2, TSource3>(object: [TObject, TSource1, TSource2, TSource3]): TObject & TSource1 & TSource2 & TSource3;
-        <TObject, TSource1, TSource2, TSource3, TSource4>(object: [TObject, TSource1, TSource2, TSource3, TSource4]): TObject & TSource1 & TSource2 & TSource3 & TSource4;
-        <TObject>(object: [TObject]): TObject;
-        (object: ReadonlyArray<any>): any;
-    }
-    interface LodashAssignAllWith {
-        (customizer: lodash.AssignCustomizer): LodashAssignAllWith1x1;
-        (customizer: lodash.__, args: ReadonlyArray<any>): LodashAssignAllWith1x2;
-        (customizer: lodash.AssignCustomizer, args: ReadonlyArray<any>): any;
-    }
-    type LodashAssignAllWith1x1 = (args: ReadonlyArray<any>) => any;
-    type LodashAssignAllWith1x2 = (customizer: lodash.AssignCustomizer) => any;
-    interface LodashAssignIn {
-        <TObject>(object: TObject): LodashAssignIn1x1<TObject>;
-        <TSource>(object: lodash.__, source: TSource): LodashAssignIn1x2<TSource>;
-        <TObject, TSource>(object: TObject, source: TSource): TObject & TSource;
-    }
-    type LodashAssignIn1x1<TObject> = <TSource>(source: TSource) => TObject & TSource;
-    type LodashAssignIn1x2<TSource> = <TObject>(object: TObject) => TObject & TSource;
-    interface LodashAssignInAll {
-        <TObject, TSource>(object: [TObject, TSource]): TObject & TSource;
-        <TObject, TSource1, TSource2>(object: [TObject, TSource1, TSource2]): TObject & TSource1 & TSource2;
-        <TObject, TSource1, TSource2, TSource3>(object: [TObject, TSource1, TSource2, TSource3]): TObject & TSource1 & TSource2 & TSource3;
-        <TObject, TSource1, TSource2, TSource3, TSource4>(object: [TObject, TSource1, TSource2, TSource3, TSource4]): TObject & TSource1 & TSource2 & TSource3 & TSource4;
-        <TObject>(object: [TObject]): TObject;
-        <TResult>(object: ReadonlyArray<any>): TResult;
-    }
-    interface LodashAssignInAllWith {
-        (customizer: lodash.AssignCustomizer): LodashAssignInAllWith1x1;
-        (customizer: lodash.__, args: ReadonlyArray<any>): LodashAssignInAllWith1x2;
-        (customizer: lodash.AssignCustomizer, args: ReadonlyArray<any>): any;
-    }
-    type LodashAssignInAllWith1x1 = (args: ReadonlyArray<any>) => any;
-    type LodashAssignInAllWith1x2 = (customizer: lodash.AssignCustomizer) => any;
-    interface LodashAssignInWith {
-        (customizer: lodash.AssignCustomizer): LodashAssignInWith1x1;
-        <TObject>(customizer: lodash.__, object: TObject): LodashAssignInWith1x2<TObject>;
-        <TObject>(customizer: lodash.AssignCustomizer, object: TObject): LodashAssignInWith1x3<TObject>;
-        <TSource>(customizer: lodash.__, object: lodash.__, source: TSource): LodashAssignInWith1x4<TSource>;
-        <TSource>(customizer: lodash.AssignCustomizer, object: lodash.__, source: TSource): LodashAssignInWith1x5<TSource>;
-        <TObject, TSource>(customizer: lodash.__, object: TObject, source: TSource): LodashAssignInWith1x6<TObject, TSource>;
-        <TObject, TSource>(customizer: lodash.AssignCustomizer, object: TObject, source: TSource): TObject & TSource;
-    }
-    interface LodashAssignInWith1x1 {
-        <TObject>(object: TObject): LodashAssignInWith1x3<TObject>;
-        <TSource>(object: lodash.__, source: TSource): LodashAssignInWith1x5<TSource>;
-        <TObject, TSource>(object: TObject, source: TSource): TObject & TSource;
-    }
-    interface LodashAssignInWith1x2<TObject> {
-        (customizer: lodash.AssignCustomizer): LodashAssignInWith1x3<TObject>;
-        <TSource>(customizer: lodash.__, source: TSource): LodashAssignInWith1x6<TObject, TSource>;
-        <TSource>(customizer: lodash.AssignCustomizer, source: TSource): TObject & TSource;
-    }
-    type LodashAssignInWith1x3<TObject> = <TSource>(source: TSource) => TObject & TSource;
-    interface LodashAssignInWith1x4<TSource> {
-        (customizer: lodash.AssignCustomizer): LodashAssignInWith1x5<TSource>;
-        <TObject>(customizer: lodash.__, object: TObject): LodashAssignInWith1x6<TObject, TSource>;
-        <TObject>(customizer: lodash.AssignCustomizer, object: TObject): TObject & TSource;
-    }
-    type LodashAssignInWith1x5<TSource> = <TObject>(object: TObject) => TObject & TSource;
-    type LodashAssignInWith1x6<TObject, TSource> = (customizer: lodash.AssignCustomizer) => TObject & TSource;
-    interface LodashAssignWith {
-        (customizer: lodash.AssignCustomizer): LodashAssignWith1x1;
-        <TObject>(customizer: lodash.__, object: TObject): LodashAssignWith1x2<TObject>;
-        <TObject>(customizer: lodash.AssignCustomizer, object: TObject): LodashAssignWith1x3<TObject>;
-        <TSource>(customizer: lodash.__, object: lodash.__, source: TSource): LodashAssignWith1x4<TSource>;
-        <TSource>(customizer: lodash.AssignCustomizer, object: lodash.__, source: TSource): LodashAssignWith1x5<TSource>;
-        <TObject, TSource>(customizer: lodash.__, object: TObject, source: TSource): LodashAssignWith1x6<TObject, TSource>;
-        <TObject, TSource>(customizer: lodash.AssignCustomizer, object: TObject, source: TSource): TObject & TSource;
-    }
-    interface LodashAssignWith1x1 {
-        <TObject>(object: TObject): LodashAssignWith1x3<TObject>;
-        <TSource>(object: lodash.__, source: TSource): LodashAssignWith1x5<TSource>;
-        <TObject, TSource>(object: TObject, source: TSource): TObject & TSource;
-    }
-    interface LodashAssignWith1x2<TObject> {
-        (customizer: lodash.AssignCustomizer): LodashAssignWith1x3<TObject>;
-        <TSource>(customizer: lodash.__, source: TSource): LodashAssignWith1x6<TObject, TSource>;
-        <TSource>(customizer: lodash.AssignCustomizer, source: TSource): TObject & TSource;
-    }
-    type LodashAssignWith1x3<TObject> = <TSource>(source: TSource) => TObject & TSource;
-    interface LodashAssignWith1x4<TSource> {
-        (customizer: lodash.AssignCustomizer): LodashAssignWith1x5<TSource>;
-        <TObject>(customizer: lodash.__, object: TObject): LodashAssignWith1x6<TObject, TSource>;
-        <TObject>(customizer: lodash.AssignCustomizer, object: TObject): TObject & TSource;
-    }
-    type LodashAssignWith1x5<TSource> = <TObject>(object: TObject) => TObject & TSource;
-    type LodashAssignWith1x6<TObject, TSource> = (customizer: lodash.AssignCustomizer) => TObject & TSource;
-    interface LodashSet {
-        (path: lodash.PropertyPath): LodashSet1x1;
-        (path: lodash.__, value: any): LodashSet1x2;
-        (path: lodash.PropertyPath, value: any): LodashSet1x3;
-        <T extends object>(path: lodash.__, value: lodash.__, object: T): LodashSet1x4<T>;
-        <T extends object>(path: lodash.PropertyPath, value: lodash.__, object: T): LodashSet1x5<T>;
-        <T extends object>(path: lodash.__, value: any, object: T): LodashSet1x6<T>;
-        <T extends object>(path: lodash.PropertyPath, value: any, object: T): T;
-        (path: lodash.__, value: lodash.__, object: object): LodashSet2x4;
-        (path: lodash.PropertyPath, value: lodash.__, object: object): LodashSet2x5;
-        (path: lodash.__, value: any, object: object): LodashSet2x6;
-        <TResult>(path: lodash.PropertyPath, value: any, object: object): TResult;
-    }
-    interface LodashSet1x1 {
-        (value: any): LodashSet1x3;
-        <T extends object>(value: lodash.__, object: T): LodashSet1x5<T>;
-        <T extends object>(value: any, object: T): T;
-        (value: lodash.__, object: object): LodashSet2x5;
-        <TResult>(value: any, object: object): TResult;
-    }
-    interface LodashSet1x2 {
-        (path: lodash.PropertyPath): LodashSet1x3;
-        <T extends object>(path: lodash.__, object: T): LodashSet1x6<T>;
-        <T extends object>(path: lodash.PropertyPath, object: T): T;
-        (path: lodash.__, object: object): LodashSet2x6;
-        <TResult>(path: lodash.PropertyPath, object: object): TResult;
-    }
-    interface LodashSet1x3 {
-        <T extends object>(object: T): T;
-        <TResult>(object: object): TResult;
-    }
-    interface LodashSet1x4<T> {
-        (path: lodash.PropertyPath): LodashSet1x5<T>;
-        (path: lodash.__, value: any): LodashSet1x6<T>;
-        (path: lodash.PropertyPath, value: any): T;
-    }
-    type LodashSet1x5<T> = (value: any) => T;
-    type LodashSet1x6<T> = (path: lodash.PropertyPath) => T;
-    interface LodashSet2x4 {
-        (path: lodash.PropertyPath): LodashSet2x5;
-        (path: lodash.__, value: any): LodashSet2x6;
-        <TResult>(path: lodash.PropertyPath, value: any): TResult;
-    }
-    type LodashSet2x5 = <TResult>(value: any) => TResult;
-    type LodashSet2x6 = <TResult>(path: lodash.PropertyPath) => TResult;
-    interface LodashAt {
-        (props: lodash.PropertyPath): LodashAt1x1;
-        <T>(props: lodash.__, object: lodash.List<T> | lodash.Dictionary<T> | lodash.NumericDictionary<T> | null | undefined): LodashAt1x2<T>;
-        <T>(props: lodash.PropertyPath, object: lodash.List<T> | lodash.Dictionary<T> | lodash.NumericDictionary<T> | null | undefined): T[];
-        <T extends object>(props: lodash.Many<keyof T>): LodashAt2x1<T>;
-        <T extends object>(props: lodash.__, object: T | null | undefined): LodashAt2x2<T>;
-        <T extends object>(props: lodash.Many<keyof T>, object: T | null | undefined): Array<T[keyof T]>;
-    }
-    type LodashAt1x1 = <T>(object: lodash.List<T> | lodash.Dictionary<T> | lodash.NumericDictionary<T> | null | undefined) => T[];
-    type LodashAt1x2<T> = (props: lodash.PropertyPath) => T[];
-    type LodashAt2x1<T> = (object: T | null | undefined) => Array<T[keyof T]>;
-    type LodashAt2x2<T> = (props: lodash.Many<keyof T>) => Array<T[keyof T]>;
-    type LodashAttempt = <TResult>(func: (...args: any[]) => TResult) => TResult|Error;
-    interface LodashBefore {
-        <TFunc extends (...args: any[]) => any>(func: TFunc): LodashBefore1x1<TFunc>;
-        (func: lodash.__, n: number): LodashBefore1x2;
-        <TFunc extends (...args: any[]) => any>(func: TFunc, n: number): TFunc;
-    }
-    type LodashBefore1x1<TFunc> = (n: number) => TFunc;
-    type LodashBefore1x2 = <TFunc extends (...args: any[]) => any>(func: TFunc) => TFunc;
-    interface LodashBind {
-        (func: (...args: any[]) => any): LodashBind1x1;
-        (func: lodash.__, thisArg: any): LodashBind1x2;
-        (func: (...args: any[]) => any, thisArg: any): (...args: any[]) => any;
-        placeholder: lodash.__;
-    }
-    type LodashBind1x1 = (thisArg: any) => (...args: any[]) => any;
-    type LodashBind1x2 = (func: (...args: any[]) => any) => (...args: any[]) => any;
-    interface LodashBindAll {
-        (methodNames: lodash.Many<string>): LodashBindAll1x1;
-        <T>(methodNames: lodash.__, object: T): LodashBindAll1x2<T>;
-        <T>(methodNames: lodash.Many<string>, object: T): T;
-    }
-    type LodashBindAll1x1 = <T>(object: T) => T;
-    type LodashBindAll1x2<T> = (methodNames: lodash.Many<string>) => T;
-    interface LodashBindKey {
-        (object: object): LodashBindKey1x1;
-        (object: lodash.__, key: string): LodashBindKey1x2;
-        (object: object, key: string): (...args: any[]) => any;
-        placeholder: lodash.__;
-    }
-    type LodashBindKey1x1 = (key: string) => (...args: any[]) => any;
-    type LodashBindKey1x2 = (object: object) => (...args: any[]) => any;
-    type LodashCamelCase = (string: string) => string;
-    type LodashCapitalize = (string: string) => string;
-    type LodashCastArray = <T>(value: lodash.Many<T>) => T[];
-    type LodashCeil = (n: number) => number;
-    interface LodashChunk {
-        (size: number): LodashChunk1x1;
-        <T>(size: lodash.__, array: lodash.List<T> | null | undefined): LodashChunk1x2<T>;
-        <T>(size: number, array: lodash.List<T> | null | undefined): T[][];
-    }
-    type LodashChunk1x1 = <T>(array: lodash.List<T> | null | undefined) => T[][];
-    type LodashChunk1x2<T> = (size: number) => T[][];
-    interface LodashClamp {
-        (lower: number): LodashClamp1x1;
-        (lower: lodash.__, upper: number): LodashClamp1x2;
-        (lower: number, upper: number): LodashClamp1x3;
-        (lower: lodash.__, upper: lodash.__, number: number): LodashClamp1x4;
-        (lower: number, upper: lodash.__, number: number): LodashClamp1x5;
-        (lower: lodash.__, upper: number, number: number): LodashClamp1x6;
-        (lower: number, upper: number, number: number): number;
-    }
-    interface LodashClamp1x1 {
-        (upper: number): LodashClamp1x3;
-        (upper: lodash.__, number: number): LodashClamp1x5;
-        (upper: number, number: number): number;
-    }
-    interface LodashClamp1x2 {
-        (lower: number): LodashClamp1x3;
-        (lower: lodash.__, number: number): LodashClamp1x6;
-        (lower: number, number: number): number;
-    }
-    type LodashClamp1x3 = (number: number) => number;
-    interface LodashClamp1x4 {
-        (lower: number): LodashClamp1x5;
-        (lower: lodash.__, upper: number): LodashClamp1x6;
-        (lower: number, upper: number): number;
-    }
-    type LodashClamp1x5 = (upper: number) => number;
-    type LodashClamp1x6 = (lower: number) => number;
-    type LodashClone = <T>(value: T) => T;
-    type LodashCloneDeep = <T>(value: T) => T;
-    interface LodashCloneDeepWith {
-        <T>(customizer: lodash.CloneDeepWithCustomizer<T>): LodashCloneDeepWith1x1<T>;
-        <T>(customizer: lodash.__, value: T): LodashCloneDeepWith1x2<T>;
-        <T>(customizer: lodash.CloneDeepWithCustomizer<T>, value: T): any;
-    }
-    type LodashCloneDeepWith1x1<T> = (value: T) => any;
-    type LodashCloneDeepWith1x2<T> = (customizer: lodash.CloneDeepWithCustomizer<T>) => any;
-    interface LodashCloneWith {
-        <T, TResult extends object | string | number | boolean | null>(customizer: lodash.CloneWithCustomizer<T, TResult>): LodashCloneWith1x1<T, TResult>;
-        <T>(customizer: lodash.__, value: T): LodashCloneWith1x2<T>;
-        <T, TResult extends object | string | number | boolean | null>(customizer: lodash.CloneWithCustomizer<T, TResult>, value: T): TResult;
-        <T, TResult>(customizer: lodash.CloneWithCustomizer<T, TResult | undefined>): LodashCloneWith2x1<T, TResult>;
-        <T, TResult>(customizer: lodash.CloneWithCustomizer<T, TResult | undefined>, value: T): TResult | T;
-    }
-    type LodashCloneWith1x1<T, TResult> = (value: T) => TResult;
-    interface LodashCloneWith1x2<T> {
-        <TResult extends object | string | number | boolean | null>(customizer: lodash.CloneWithCustomizer<T, TResult>): TResult;
-        <TResult>(customizer: lodash.CloneWithCustomizer<T, TResult | undefined>): TResult | T;
-    }
-    type LodashCloneWith2x1<T, TResult> = (value: T) => TResult | T;
-    type LodashCompact = <T>(array: lodash.List<T | null | undefined | false | "" | 0> | null | undefined) => T[];
-    type LodashNegate = <T extends (...args: any[]) => any>(predicate: T) => T;
-    interface LodashFlowRight {
-        <R2, R1>(f2: (a: R1) => R2, f1: () => R1): () => R2;
-        <R3, R2, R1>(f3: (a: R2) => R3, f2: (a: R1) => R2, f1: () => R1): () => R3;
-        <R4, R3, R2, R1>(f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: () => R1): () => R4;
-        <R5, R4, R3, R2, R1>(f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: () => R1): () => R5;
-        <R6, R5, R4, R3, R2, R1>(f6: (a: R5) => R6, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: () => R1): () => R6;
-        <R7, R6, R5, R4, R3, R2, R1>(f7: (a: R6) => R7, f6: (a: R5) => R6, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: () => R1): () => R7;
-        <A1, R2, R1>(f2: (a: R1) => R2, f1: (a1: A1) => R1): (a1: A1) => R2;
-        <A1, R3, R2, R1>(f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1) => R1): (a1: A1) => R3;
-        <A1, R4, R3, R2, R1>(f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1) => R1): (a1: A1) => R4;
-        <A1, R5, R4, R3, R2, R1>(f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1) => R1): (a1: A1) => R5;
-        <A1, R6, R5, R4, R3, R2, R1>(f6: (a: R5) => R6, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1) => R1): (a1: A1) => R6;
-        <A1, R7, R6, R5, R4, R3, R2, R1>(f7: (a: R6) => R7, f6: (a: R5) => R6, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1) => R1): (a1: A1) => R7;
-        <A1, A2, R2, R1>(f2: (a: R1) => R2, f1: (a1: A1, a2: A2) => R1): (a1: A1, a2: A2) => R2;
-        <A1, A2, R3, R2, R1>(f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2) => R1): (a1: A1, a2: A2) => R3;
-        <A1, A2, R4, R3, R2, R1>(f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2) => R1): (a1: A1, a2: A2) => R4;
-        <A1, A2, R5, R4, R3, R2, R1>(f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2) => R1): (a1: A1, a2: A2) => R5;
-        <A1, A2, R6, R5, R4, R3, R2, R1>(f6: (a: R5) => R6, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2) => R1): (a1: A1, a2: A2) => R6;
-        <A1, A2, R7, R6, R5, R4, R3, R2, R1>(f7: (a: R6) => R7, f6: (a: R5) => R6, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2) => R1): (a1: A1, a2: A2) => R7;
-        <A1, A2, A3, R2, R1>(f2: (a: R1) => R2, f1: (a1: A1, a2: A2, a3: A3) => R1): (a1: A1, a2: A2, a3: A3) => R2;
-        <A1, A2, A3, R3, R2, R1>(f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2, a3: A3) => R1): (a1: A1, a2: A2, a3: A3) => R3;
-        <A1, A2, A3, R4, R3, R2, R1>(f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2, a3: A3) => R1): (a1: A1, a2: A2, a3: A3) => R4;
-        <A1, A2, A3, R5, R4, R3, R2, R1>(f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2, a3: A3) => R1): (a1: A1, a2: A2, a3: A3) => R5;
-        <A1, A2, A3, R6, R5, R4, R3, R2, R1>(f6: (a: R5) => R6, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2, a3: A3) => R1): (a1: A1, a2: A2, a3: A3) => R6;
-        <A1, A2, A3, R7, R6, R5, R4, R3, R2, R1>(f7: (a: R6) => R7, f6: (a: R5) => R6, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2, a3: A3) => R1): (a1: A1, a2: A2, a3: A3) => R7;
-        <A1, A2, A3, A4, R2, R1>(f2: (a: R1) => R2, f1: (a1: A1, a2: A2, a3: A3, a4: A4) => R1): (a1: A1, a2: A2, a3: A3, a4: A4) => R2;
-        <A1, A2, A3, A4, R3, R2, R1>(f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2, a3: A3, a4: A4) => R1): (a1: A1, a2: A2, a3: A3, a4: A4) => R3;
-        <A1, A2, A3, A4, R4, R3, R2, R1>(f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2, a3: A3, a4: A4) => R1): (a1: A1, a2: A2, a3: A3, a4: A4) => R4;
-        <A1, A2, A3, A4, R5, R4, R3, R2, R1>(f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2, a3: A3, a4: A4) => R1): (a1: A1, a2: A2, a3: A3, a4: A4) => R5;
-        <A1, A2, A3, A4, R6, R5, R4, R3, R2, R1>(f6: (a: R5) => R6, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2, a3: A3, a4: A4) => R1): (a1: A1, a2: A2, a3: A3, a4: A4) => R6;
-        <A1, A2, A3, A4, R7, R6, R5, R4, R3, R2, R1>(f7: (a: R6) => R7, f6: (a: R5) => R6, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (a1: A1, a2: A2, a3: A3, a4: A4) => R1): (a1: A1, a2: A2, a3: A3, a4: A4) => R7;
-        <R2, R1>(f2: (a: R1) => R2, f1: (...args: any[]) => R1): (...args: any[]) => R2;
-        <R3, R2, R1>(f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (...args: any[]) => R1): (...args: any[]) => R3;
-        <R4, R3, R2, R1>(f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (...args: any[]) => R1): (...args: any[]) => R4;
-        <R5, R4, R3, R2, R1>(f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (...args: any[]) => R1): (...args: any[]) => R5;
-        <R6, R5, R4, R3, R2, R1>(f6: (a: R5) => R6, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (...args: any[]) => R1): (...args: any[]) => R6;
-        <R7, R6, R5, R4, R3, R2, R1>(f7: (a: R6) => R7, f6: (a: R5) => R6, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (...args: any[]) => R1): (...args: any[]) => R7;
-        (f7: (a: any) => any, f6: (a: any) => any, f5: (a: any) => any, f4: (a: any) => any, f3: (a: any) => any, f2: (a: any) => any, f1: () => any, ...funcs: Array<lodash.Many<(...args: any[]) => any>>): (...args: any[]) => any;
-        (funcs: Array<lodash.Many<(...args: any[]) => any>>): (...args: any[]) => any;
-    }
-    interface LodashConcat {
-        <T>(array: lodash.Many<T>): LodashConcat1x1<T>;
-        <T>(array: lodash.__, values: lodash.Many<T>): LodashConcat1x2<T>;
-        <T>(array: lodash.Many<T>, values: lodash.Many<T>): T[];
-    }
-    type LodashConcat1x1<T> = (values: lodash.Many<T>) => T[];
-    type LodashConcat1x2<T> = (array: lodash.Many<T>) => T[];
-    type LodashCond = <T, R>(pairs: Array<lodash.CondPair<T, R>>) => (Target: T) => R;
-    interface LodashConformsTo {
-        <T>(source: lodash.ConformsPredicateObject<T>): LodashConformsTo1x1<T>;
-        <T>(source: lodash.__, object: T): LodashConformsTo1x2<T>;
-        <T>(source: lodash.ConformsPredicateObject<T>, object: T): boolean;
-    }
-    type LodashConformsTo1x1<T> = (object: T) => boolean;
-    type LodashConformsTo1x2<T> = (source: lodash.ConformsPredicateObject<T>) => boolean;
-    interface LodashContains {
-        <T>(target: T): LodashContains1x1<T>;
-        <T>(target: lodash.__, collection: lodash.List<T> | lodash.Dictionary<T> | lodash.NumericDictionary<T> | null | undefined): LodashContains1x2<T>;
-        <T>(target: T, collection: lodash.List<T> | lodash.Dictionary<T> | lodash.NumericDictionary<T> | null | undefined): boolean;
-    }
-    type LodashContains1x1<T> = (collection: lodash.List<T> | lodash.Dictionary<T> | lodash.NumericDictionary<T> | null | undefined) => boolean;
-    type LodashContains1x2<T> = (target: T) => boolean;
-    interface LodashCountBy {
-        <T>(iteratee: lodash.ValueIteratee<T>): LodashCountBy1x1<T>;
-        <T>(iteratee: lodash.__, collection: lodash.List<T> | null | undefined): LodashCountBy1x2<T>;
-        <T>(iteratee: lodash.ValueIteratee<T>, collection: lodash.List<T> | null | undefined): lodash.Dictionary<number>;
-        <T extends object>(iteratee: lodash.__, collection: T | null | undefined): LodashCountBy2x2<T>;
-        <T extends object>(iteratee: lodash.ValueIteratee<T[keyof T]>, collection: T | null | undefined): lodash.Dictionary<number>;
-    }
-    type LodashCountBy1x1<T> = (collection: lodash.List<T> | object | null | undefined) => lodash.Dictionary<number>;
-    type LodashCountBy1x2<T> = (iteratee: lodash.ValueIteratee<T>) => lodash.Dictionary<number>;
-    type LodashCountBy2x2<T> = (iteratee: lodash.ValueIteratee<T[keyof T]>) => lodash.Dictionary<number>;
-    type LodashCreate = <T extends object, U extends object>(prototype: T) => T & U;
-    interface LodashCurry {
-        <T1, R>(func: (t1: T1) => R): lodash.CurriedFunction1<T1, R>;
-        <T1, T2, R>(func: (t1: T1, t2: T2) => R): lodash.CurriedFunction2<T1, T2, R>;
-        <T1, T2, T3, R>(func: (t1: T1, t2: T2, t3: T3) => R): lodash.CurriedFunction3<T1, T2, T3, R>;
-        <T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R): lodash.CurriedFunction4<T1, T2, T3, T4, R>;
-        <T1, T2, T3, T4, T5, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5) => R): lodash.CurriedFunction5<T1, T2, T3, T4, T5, R>;
-        (func: (...args: any[]) => any): (...args: any[]) => any;
-        placeholder: lodash.__;
-    }
-    interface LodashCurryN {
-        (arity: number): LodashCurryN1x1;
-        <T1, R>(arity: lodash.__, func: (t1: T1) => R): LodashCurryN1x2<T1, R>;
-        <T1, R>(arity: number, func: (t1: T1) => R): lodash.CurriedFunction1<T1, R>;
-        <T1, T2, R>(arity: lodash.__, func: (t1: T1, t2: T2) => R): LodashCurryN2x2<T1, T2, R>;
-        <T1, T2, R>(arity: number, func: (t1: T1, t2: T2) => R): lodash.CurriedFunction2<T1, T2, R>;
-        <T1, T2, T3, R>(arity: lodash.__, func: (t1: T1, t2: T2, t3: T3) => R): LodashCurryN3x2<T1, T2, T3, R>;
-        <T1, T2, T3, R>(arity: number, func: (t1: T1, t2: T2, t3: T3) => R): lodash.CurriedFunction3<T1, T2, T3, R>;
-        <T1, T2, T3, T4, R>(arity: lodash.__, func: (t1: T1, t2: T2, t3: T3, t4: T4) => R): LodashCurryN4x2<T1, T2, T3, T4, R>;
-        <T1, T2, T3, T4, R>(arity: number, func: (t1: T1, t2: T2, t3: T3, t4: T4) => R): lodash.CurriedFunction4<T1, T2, T3, T4, R>;
-        <T1, T2, T3, T4, T5, R>(arity: lodash.__, func: (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5) => R): LodashCurryN5x2<T1, T2, T3, T4, T5, R>;
-        <T1, T2, T3, T4, T5, R>(arity: number, func: (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5) => R): lodash.CurriedFunction5<T1, T2, T3, T4, T5, R>;
-        (arity: lodash.__, func: (...args: any[]) => any): LodashCurryN6x2;
-        (arity: number, func: (...args: any[]) => any): (...args: any[]) => any;
-        placeholder: lodash.__;
-    }
-    interface LodashCurryN1x1 {
-        <T1, R>(func: (t1: T1) => R): lodash.CurriedFunction1<T1, R>;
-        <T1, T2, R>(func: (t1: T1, t2: T2) => R): lodash.CurriedFunction2<T1, T2, R>;
-        <T1, T2, T3, R>(func: (t1: T1, t2: T2, t3: T3) => R): lodash.CurriedFunction3<T1, T2, T3, R>;
-        <T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R): lodash.CurriedFunction4<T1, T2, T3, T4, R>;
-        <T1, T2, T3, T4, T5, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5) => R): lodash.CurriedFunction5<T1, T2, T3, T4, T5, R>;
-        (func: (...args: any[]) => any): (...args: any[]) => any;
-    }
-    type LodashCurryN1x2<T1, R> = (arity: number) => lodash.CurriedFunction1<T1, R>;
-    type LodashCurryN2x2<T1, T2, R> = (arity: number) => lodash.CurriedFunction2<T1, T2, R>;
-    type LodashCurryN3x2<T1, T2, T3, R> = (arity: number) => lodash.CurriedFunction3<T1, T2, T3, R>;
-    type LodashCurryN4x2<T1, T2, T3, T4, R> = (arity: number) => lodash.CurriedFunction4<T1, T2, T3, T4, R>;
-    type LodashCurryN5x2<T1, T2, T3, T4, T5, R> = (arity: number) => lodash.CurriedFunction5<T1, T2, T3, T4, T5, R>;
-    type LodashCurryN6x2 = (arity: number) => (...args: any[]) => any;
-    interface LodashCurryRight {
-        <T1, R>(func: (t1: T1) => R): lodash.RightCurriedFunction1<T1, R>;
-        <T1, T2, R>(func: (t1: T1, t2: T2) => R): lodash.RightCurriedFunction2<T1, T2, R>;
-        <T1, T2, T3, R>(func: (t1: T1, t2: T2, t3: T3) => R): lodash.RightCurriedFunction3<T1, T2, T3, R>;
-        <T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R): lodash.RightCurriedFunction4<T1, T2, T3, T4, R>;
-        <T1, T2, T3, T4, T5, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5) => R): lodash.RightCurriedFunction5<T1, T2, T3, T4, T5, R>;
-        (func: (...args: any[]) => any): (...args: any[]) => any;
-        placeholder: lodash.__;
-    }
-    interface LodashCurryRightN {
-        (arity: number): LodashCurryRightN1x1;
-        <T1, R>(arity: lodash.__, func: (t1: T1) => R): LodashCurryRightN1x2<T1, R>;
-        <T1, R>(arity: number, func: (t1: T1) => R): lodash.RightCurriedFunction1<T1, R>;
-        <T1, T2, R>(arity: lodash.__, func: (t1: T1, t2: T2) => R): LodashCurryRightN2x2<T1, T2, R>;
-        <T1, T2, R>(arity: number, func: (t1: T1, t2: T2) => R): lodash.RightCurriedFunction2<T1, T2, R>;
-        <T1, T2, T3, R>(arity: lodash.__, func: (t1: T1, t2: T2, t3: T3) => R): LodashCurryRightN3x2<T1, T2, T3, R>;
-        <T1, T2, T3, R>(arity: number, func: (t1: T1, t2: T2, t3: T3) => R): lodash.RightCurriedFunction3<T1, T2, T3, R>;
-        <T1, T2, T3, T4, R>(arity: lodash.__, func: (t1: T1, t2: T2, t3: T3, t4: T4) => R): LodashCurryRightN4x2<T1, T2, T3, T4, R>;
-        <T1, T2, T3, T4, R>(arity: number, func: (t1: T1, t2: T2, t3: T3, t4: T4) => R): lodash.RightCurriedFunction4<T1, T2, T3, T4, R>;
-        <T1, T2, T3, T4, T5, R>(arity: lodash.__, func: (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5) => R): LodashCurryRightN5x2<T1, T2, T3, T4, T5, R>;
-        <T1, T2, T3, T4, T5, R>(arity: number, func: (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5) => R): lodash.RightCurriedFunction5<T1, T2, T3, T4, T5, R>;
-        (arity: lodash.__, func: (...args: any[]) => any): LodashCurryRightN6x2;
-        (arity: number, func: (...args: any[]) => any): (...args: any[]) => any;
-        placeholder: lodash.__;
-    }
-    interface LodashCurryRightN1x1 {
-        <T1, R>(func: (t1: T1) => R): lodash.RightCurriedFunction1<T1, R>;
-        <T1, T2, R>(func: (t1: T1, t2: T2) => R): lodash.RightCurriedFunction2<T1, T2, R>;
-        <T1, T2, T3, R>(func: (t1: T1, t2: T2, t3: T3) => R): lodash.RightCurriedFunction3<T1, T2, T3, R>;
-        <T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R): lodash.RightCurriedFunction4<T1, T2, T3, T4, R>;
-        <T1, T2, T3, T4, T5, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5) => R): lodash.RightCurriedFunction5<T1, T2, T3, T4, T5, R>;
-        (func: (...args: any[]) => any): (...args: any[]) => any;
-    }
-    type LodashCurryRightN1x2<T1, R> = (arity: number) => lodash.RightCurriedFunction1<T1, R>;
-    type LodashCurryRightN2x2<T1, T2, R> = (arity: number) => lodash.RightCurriedFunction2<T1, T2, R>;
-    type LodashCurryRightN3x2<T1, T2, T3, R> = (arity: number) => lodash.RightCurriedFunction3<T1, T2, T3, R>;
-    type LodashCurryRightN4x2<T1, T2, T3, T4, R> = (arity: number) => lodash.RightCurriedFunction4<T1, T2, T3, T4, R>;
-    type LodashCurryRightN5x2<T1, T2, T3, T4, T5, R> = (arity: number) => lodash.RightCurriedFunction5<T1, T2, T3, T4, T5, R>;
-    type LodashCurryRightN6x2 = (arity: number) => (...args: any[]) => any;
-    interface LodashDebounce {
-        (wait: number): LodashDebounce1x1;
-        <T extends (...args: any[]) => any>(wait: lodash.__, func: T): LodashDebounce1x2<T>;
-        <T extends (...args: any[]) => any>(wait: number, func: T): T & lodash.Cancelable;
-    }
-    type LodashDebounce1x1 = <T extends (...args: any[]) => any>(func: T) => T & lodash.Cancelable;
-    type LodashDebounce1x2<T> = (wait: number) => T & lodash.Cancelable;
-    type LodashDeburr = (string: string) => string;
-    interface LodashDefaults {
-        <TSource>(source: TSource): LodashDefaults1x1<TSource>;
-        <TObject>(source: lodash.__, object: TObject): LodashDefaults1x2<TObject>;
-        <TObject, TSource>(source: TSource, object: TObject): TSource & TObject;
-    }
-    type LodashDefaults1x1<TSource> = <TObject>(object: TObject) => TSource & TObject;
-    type LodashDefaults1x2<TObject> = <TSource>(source: TSource) => TSource & TObject;
-    interface LodashDefaultsAll {
-        <TObject, TSource>(object: [TObject, TSource]): TSource & TObject;
-        <TObject, TSource1, TSource2>(object: [TObject, TSource1, TSource2]): TSource2 & TSource1 & TObject;
-        <TObject, TSource1, TSource2, TSource3>(object: [TObject, TSource1, TSource2, TSource3]): TSource3 & TSource2 & TSource1 & TObject;
-        <TObject, TSource1, TSource2, TSource3, TSource4>(object: [TObject, TSource1, TSource2, TSource3, TSource4]): TSource4 & TSource3 & TSource2 & TSource1 & TObject;
-        <TObject>(object: [TObject]): TObject;
-        (object: ReadonlyArray<any>): any;
-    }
-    interface LodashDefaultsDeep {
-        (sources: any): LodashDefaultsDeep1x1;
-        (sources: lodash.__, object: any): LodashDefaultsDeep1x2;
-        (sources: any, object: any): any;
-    }
-    type LodashDefaultsDeep1x1 = (object: any) => any;
-    type LodashDefaultsDeep1x2 = (sources: any) => any;
-    type LodashDefaultsDeepAll = (object: ReadonlyArray<any>) => any;
-    interface LodashDefaultTo {
-        <T>(defaultValue: T): LodashDefaultTo1x1<T>;
-        <T>(defaultValue: lodash.__, value: T | null | undefined): LodashDefaultTo1x2<T>;
-        <T>(defaultValue: T, value: T | null | undefined): T;
-        <TDefault>(defaultValue: TDefault): LodashDefaultTo2x1<TDefault>;
-        <T, TDefault>(defaultValue: TDefault, value: T | null | undefined): T | TDefault;
-    }
-    type LodashDefaultTo1x1<T> = (value: T | null | undefined) => T;
-    interface LodashDefaultTo1x2<T> {
-        (defaultValue: T): T;
-        <TDefault>(defaultValue: TDefault): T | TDefault;
-    }
-    type LodashDefaultTo2x1<TDefault> = <T>(value: T | null | undefined) => T | TDefault;
-    type LodashDefer = (func: (...args: any[]) => any, ...args: any[]) => number;
-    interface LodashDelay {
-        (wait: number): LodashDelay1x1;
-        (wait: lodash.__, func: (...args: any[]) => any): LodashDelay1x2;
-        (wait: number, func: (...args: any[]) => any): number;
-    }
-    type LodashDelay1x1 = (func: (...args: any[]) => any) => number;
-    type LodashDelay1x2 = (wait: number) => number;
-    interface LodashDifference {
-        <T>(array: lodash.List<T> | null | undefined): LodashDifference1x1<T>;
-        <T>(array: lodash.__, values: lodash.List<T>): LodashDifference1x2<T>;
-        <T>(array: lodash.List<T> | null | undefined, values: lodash.List<T>): T[];
-    }
-    type LodashDifference1x1<T> = (values: lodash.List<T>) => T[];
-    type LodashDifference1x2<T> = (array: lodash.List<T> | null | undefined) => T[];
-    interface LodashDifferenceBy {
-        <T1, T2>(iteratee: lodash.ValueIteratee<T1 | T2>): LodashDifferenceBy1x1<T1, T2>;
-        <T1>(iteratee: lodash.__, array: lodash.List<T1> | null | undefined): LodashDifferenceBy1x2<T1>;
-        <T1, T2>(iteratee: lodash.ValueIteratee<T1 | T2>, array: lodash.List<T1> | null | undefined): LodashDifferenceBy1x3<T1, T2>;
-        <T2>(iteratee: lodash.__, array: lodash.__, values: lodash.List<T2>): LodashDifferenceBy1x4<T2>;
-        <T1, T2>(iteratee: lodash.ValueIteratee<T1 | T2>, array: lodash.__, values: lodash.List<T2>): LodashDifferenceBy1x5<T1>;
-        <T1, T2>(iteratee: lodash.__, array: lodash.List<T1> | null | undefined, values: lodash.List<T2>): LodashDifferenceBy1x6<T1, T2>;
-        <T1, T2>(iteratee: lodash.ValueIteratee<T1 | T2>, array: lodash.List<T1> | null | undefined, values: lodash.List<T2>): T1[];
-    }
-    interface LodashDifferenceBy1x1<T1, T2> {
-        (array: lodash.List<T1> | null | undefined): LodashDifferenceBy1x3<T1, T2>;
-        (array: lodash.__, values: lodash.List<T2>): LodashDifferenceBy1x5<T1>;
-        (array: lodash.List<T1> | null | undefined, values: lodash.List<T2>): T1[];
-    }
-    interface LodashDifferenceBy1x2<T1> {
-        <T2>(iteratee: lodash.ValueIteratee<T1 | T2>): LodashDifferenceBy1x3<T1, T2>;
-        <T2>(iteratee: lodash.__, values: lodash.List<T2>): LodashDifferenceBy1x6<T1, T2>;
-        <T2>(iteratee: lodash.ValueIteratee<T1 | T2>, values: lodash.List<T2>): T1[];
-    }
-    type LodashDifferenceBy1x3<T1, T2> = (values: lodash.List<T2>) => T1[];
-    interface LodashDifferenceBy1x4<T2> {
-        <T1>(iteratee: lodash.ValueIteratee<T1 | T2>): LodashDifferenceBy1x5<T1>;
-        <T1>(iteratee: lodash.__, array: lodash.List<T1> | null | undefined): LodashDifferenceBy1x6<T1, T2>;
-        <T1>(iteratee: lodash.ValueIteratee<T1 | T2>, array: lodash.List<T1> | null | undefined): T1[];
-    }
-    type LodashDifferenceBy1x5<T1> = (array: lodash.List<T1> | null | undefined) => T1[];
-    type LodashDifferenceBy1x6<T1, T2> = (iteratee: lodash.ValueIteratee<T1 | T2>) => T1[];
-    interface LodashDifferenceWith {
-        <T1, T2>(comparator: lodash.Comparator2<T1, T2>): LodashDifferenceWith1x1<T1, T2>;
-        <T1>(comparator: lodash.__, array: lodash.List<T1> | null | undefined): LodashDifferenceWith1x2<T1>;
-        <T1, T2>(comparator: lodash.Comparator2<T1, T2>, array: lodash.List<T1> | null | undefined): LodashDifferenceWith1x3<T1, T2>;
-        <T2>(comparator: lodash.__, array: lodash.__, values: lodash.List<T2>): LodashDifferenceWith1x4<T2>;
-        <T1, T2>(comparator: lodash.Comparator2<T1, T2>, array: lodash.__, values: lodash.List<T2>): LodashDifferenceWith1x5<T1>;
-        <T1, T2>(comparator: lodash.__, array: lodash.List<T1> | null | undefined, values: lodash.List<T2>): LodashDifferenceWith1x6<T1, T2>;
-        <T1, T2>(comparator: lodash.Comparator2<T1, T2>, array: lodash.List<T1> | null | undefined, values: lodash.List<T2>): T1[];
-    }
-    interface LodashDifferenceWith1x1<T1, T2> {
-        (array: lodash.List<T1> | null | undefined): LodashDifferenceWith1x3<T1, T2>;
-        (array: lodash.__, values: lodash.List<T2>): LodashDifferenceWith1x5<T1>;
-        (array: lodash.List<T1> | null | undefined, values: lodash.List<T2>): T1[];
-    }
-    interface LodashDifferenceWith1x2<T1> {
-        <T2>(comparator: lodash.Comparator2<T1, T2>): LodashDifferenceWith1x3<T1, T2>;
-        <T2>(comparator: lodash.__, values: lodash.List<T2>): LodashDifferenceWith1x6<T1, T2>;
-        <T2>(comparator: lodash.Comparator2<T1, T2>, values: lodash.List<T2>): T1[];
-    }
-    type LodashDifferenceWith1x3<T1, T2> = (values: lodash.List<T2>) => T1[];
-    interface LodashDifferenceWith1x4<T2> {
-        <T1>(comparator: lodash.Comparator2<T1, T2>): LodashDifferenceWith1x5<T1>;
-        <T1>(comparator: lodash.__, array: lodash.List<T1> | null | undefined): LodashDifferenceWith1x6<T1, T2>;
-        <T1>(comparator: lodash.Comparator2<T1, T2>, array: lodash.List<T1> | null | undefined): T1[];
-    }
-    type LodashDifferenceWith1x5<T1> = (array: lodash.List<T1> | null | undefined) => T1[];
-    type LodashDifferenceWith1x6<T1, T2> = (comparator: lodash.Comparator2<T1, T2>) => T1[];
-    interface LodashUnset {
-        (path: lodash.PropertyPath): LodashUnset1x1;
-        <T>(path: lodash.__, object: T): LodashUnset1x2<T>;
-        <T>(path: lodash.PropertyPath, object: T): T;
-    }
-    type LodashUnset1x1 = <T>(object: T) => T;
-    type LodashUnset1x2<T> = (path: lodash.PropertyPath) => T;
-    interface LodashDivide {
-        (dividend: number): LodashDivide1x1;
-        (dividend: lodash.__, divisor: number): LodashDivide1x2;
-        (dividend: number, divisor: number): number;
-    }
-    type LodashDivide1x1 = (divisor: number) => number;
-    type LodashDivide1x2 = (dividend: number) => number;
-    interface LodashDrop {
-        (n: number): LodashDrop1x1;
-        <T>(n: lodash.__, array: lodash.List<T> | null | undefined): LodashDrop1x2<T>;
-        <T>(n: number, array: lodash.List<T> | null | undefined): T[];
-    }
-    type LodashDrop1x1 = <T>(array: lodash.List<T> | null | undefined) => T[];
-    type LodashDrop1x2<T> = (n: number) => T[];
-    interface LodashDropRight {
-        (n: number): LodashDropRight1x1;
-        <T>(n: lodash.__, array: lodash.List<T> | null | undefined): LodashDropRight1x2<T>;
-        <T>(n: number, array: lodash.List<T> | null | undefined): T[];
-    }
-    type LodashDropRight1x1 = <T>(array: lodash.List<T> | null | undefined) => T[];
-    type LodashDropRight1x2<T> = (n: number) => T[];
-    interface LodashDropRightWhile {
-        <T>(predicate: lodash.ValueIteratee<T>): LodashDropRightWhile1x1<T>;
-        <T>(predicate: lodash.__, array: lodash.List<T> | null | undefined): LodashDropRightWhile1x2<T>;
-        <T>(predicate: lodash.ValueIteratee<T>, array: lodash.List<T> | null | undefined): T[];
-    }
-    type LodashDropRightWhile1x1<T> = (array: lodash.List<T> | null | undefined) => T[];
-    type LodashDropRightWhile1x2<T> = (predicate: lodash.ValueIteratee<T>) => T[];
-    interface LodashDropWhile {
-        <T>(predicate: lodash.ValueIteratee<T>): LodashDropWhile1x1<T>;
-        <T>(predicate: lodash.__, array: lodash.List<T> | null | undefined): LodashDropWhile1x2<T>;
-        <T>(predicate: lodash.ValueIteratee<T>, array: lodash.List<T> | null | undefined): T[];
-    }
-    type LodashDropWhile1x1<T> = (array: lodash.List<T> | null | undefined) => T[];
-    type LodashDropWhile1x2<T> = (predicate: lodash.ValueIteratee<T>) => T[];
-    interface LodashForEach {
-        <T>(iteratee: (value: T) => any): LodashForEach1x1<T>;
-        <T>(iteratee: lodash.__, collection: ReadonlyArray<T>): LodashForEach1x2<T>;
-        <T>(iteratee: (value: T) => any, collection: ReadonlyArray<T>): T[];
-        (iteratee: (value: string) => any): LodashForEach2x1;
-        (iteratee: lodash.__, collection: string): LodashForEach2x2;
-        (iteratee: (value: string) => any, collection: string): string;
-        <T>(iteratee: lodash.__, collection: lodash.List<T>): LodashForEach3x2<T>;
-        <T>(iteratee: (value: T) => any, collection: lodash.List<T>): lodash.List<T>;
-        <T extends object>(iteratee: lodash.__, collection: T): LodashForEach4x2<T>;
-        <T extends object>(iteratee: (value: T[keyof T]) => any, collection: T): T;
-        <T, TArray extends T[] | null | undefined>(iteratee: lodash.__, collection: TArray & (T[] | null | undefined)): LodashForEach5x2<T, TArray>;
-        <T, TArray extends T[] | null | undefined>(iteratee: (value: T) => any, collection: TArray & (T[] | null | undefined)): TArray;
-        <TString extends string | null | undefined>(iteratee: lodash.__, collection: TString): LodashForEach6x2<TString>;
-        <TString extends string | null | undefined>(iteratee: (value: string) => any, collection: TString): TString;
-        <T, TList extends lodash.List<T> | null | undefined>(iteratee: lodash.__, collection: TList & (lodash.List<T> | null | undefined)): LodashForEach7x2<T, TList>;
-        <T, TList extends lodash.List<T> | null | undefined>(iteratee: (value: T) => any, collection: TList & (lodash.List<T> | null | undefined)): TList;
-        <T extends object>(iteratee: lodash.__, collection: T | null | undefined): LodashForEach8x2<T>;
-        <T extends object>(iteratee: (value: T[keyof T]) => any, collection: T | null | undefined): T | null | undefined;
-    }
-    interface LodashForEach1x1<T> {
-        (collection: ReadonlyArray<T>): T[];
-        (collection: lodash.List<T>): lodash.List<T>;
-        <T1 extends object>(collection: T1): T1;
-        <TArray extends T[] | null | undefined>(collection: TArray & (T[] | null | undefined)): TArray;
-        <TList extends lodash.List<T> | null | undefined>(collection: TList & (lodash.List<T> | null | undefined)): TList;
-        <T1 extends object>(collection: T1 | null | undefined): T1 | null | undefined;
-    }
-    type LodashForEach1x2<T> = (iteratee: (value: T) => any) => T[];
-    interface LodashForEach2x1 {
-        (collection: string): string;
-        <TString extends string | null | undefined>(collection: TString): TString;
-    }
-    type LodashForEach2x2 = (iteratee: (value: string) => any) => string;
-    type LodashForEach3x2<T> = (iteratee: (value: T) => any) => lodash.List<T>;
-    type LodashForEach4x2<T> = (iteratee: (value: T[keyof T]) => any) => T;
-    type LodashForEach5x2<T, TArray> = (iteratee: (value: T) => any) => TArray;
-    type LodashForEach6x2<TString> = (iteratee: (value: string) => any) => TString;
-    type LodashForEach7x2<T, TList> = (iteratee: (value: T) => any) => TList;
-    type LodashForEach8x2<T> = (iteratee: (value: T[keyof T]) => any) => T | null | undefined;
-    interface LodashForEachRight {
-        <T>(iteratee: (value: T) => any): LodashForEachRight1x1<T>;
-        <T>(iteratee: lodash.__, collection: ReadonlyArray<T>): LodashForEachRight1x2<T>;
-        <T>(iteratee: (value: T) => any, collection: ReadonlyArray<T>): T[];
-        (iteratee: (value: string) => any): LodashForEachRight2x1;
-        (iteratee: lodash.__, collection: string): LodashForEachRight2x2;
-        (iteratee: (value: string) => any, collection: string): string;
-        <T>(iteratee: lodash.__, collection: lodash.List<T>): LodashForEachRight3x2<T>;
-        <T>(iteratee: (value: T) => any, collection: lodash.List<T>): lodash.List<T>;
-        <T extends object>(iteratee: lodash.__, collection: T): LodashForEachRight4x2<T>;
-        <T extends object>(iteratee: (value: T[keyof T]) => any, collection: T): T;
-        <T, TArray extends T[] | null | undefined>(iteratee: lodash.__, collection: TArray & (T[] | null | undefined)): LodashForEachRight5x2<T, TArray>;
-        <T, TArray extends T[] | null | undefined>(iteratee: (value: T) => any, collection: TArray & (T[] | null | undefined)): TArray;
-        <TString extends string | null | undefined>(iteratee: lodash.__, collection: TString): LodashForEachRight6x2<TString>;
-        <TString extends string | null | undefined>(iteratee: (value: string) => any, collection: TString): TString;
-        <T, TList extends lodash.List<T> | null | undefined>(iteratee: lodash.__, collection: TList & (lodash.List<T> | null | undefined)): LodashForEachRight7x2<T, TList>;
-        <T, TList extends lodash.List<T> | null | undefined>(iteratee: (value: T) => any, collection: TList & (lodash.List<T> | null | undefined)): TList;
-        <T extends object>(iteratee: lodash.__, collection: T | null | undefined): LodashForEachRight8x2<T>;
-        <T extends object>(iteratee: (value: T[keyof T]) => any, collection: T | null | undefined): T | null | undefined;
-    }
-    interface LodashForEachRight1x1<T> {
-        (collection: ReadonlyArray<T>): T[];
-        (collection: lodash.List<T>): lodash.List<T>;
-        <T1 extends object>(collection: T1): T1;
-        <TArray extends T[] | null | undefined>(collection: TArray & (T[] | null | undefined)): TArray;
-        <TList extends lodash.List<T> | null | undefined>(collection: TList & (lodash.List<T> | null | undefined)): TList;
-        <T1 extends object>(collection: T1 | null | undefined): T1 | null | undefined;
-    }
-    type LodashForEachRight1x2<T> = (iteratee: (value: T) => any) => T[];
-    interface LodashForEachRight2x1 {
-        (collection: string): string;
-        <TString extends string | null | undefined>(collection: TString): TString;
-    }
-    type LodashForEachRight2x2 = (iteratee: (value: string) => any) => string;
-    type LodashForEachRight3x2<T> = (iteratee: (value: T) => any) => lodash.List<T>;
-    type LodashForEachRight4x2<T> = (iteratee: (value: T[keyof T]) => any) => T;
-    type LodashForEachRight5x2<T, TArray> = (iteratee: (value: T) => any) => TArray;
-    type LodashForEachRight6x2<TString> = (iteratee: (value: string) => any) => TString;
-    type LodashForEachRight7x2<T, TList> = (iteratee: (value: T) => any) => TList;
-    type LodashForEachRight8x2<T> = (iteratee: (value: T[keyof T]) => any) => T | null | undefined;
-    interface LodashEndsWith {
-        (target: string): LodashEndsWith1x1;
-        (target: lodash.__, string: string): LodashEndsWith1x2;
-        (target: string, string: string): boolean;
-    }
-    type LodashEndsWith1x1 = (string: string) => boolean;
-    type LodashEndsWith1x2 = (target: string) => boolean;
-    interface LodashToPairs {
-        <T>(object: lodash.Dictionary<T> | lodash.NumericDictionary<T>): Array<[string, T]>;
-        (object: object): Array<[string, any]>;
-    }
-    interface LodashToPairsIn {
-        <T>(object: lodash.Dictionary<T> | lodash.NumericDictionary<T>): Array<[string, T]>;
-        (object: object): Array<[string, any]>;
-    }
-    interface LodashEq {
-        (value: any): LodashEq1x1;
-        (value: lodash.__, other: any): LodashEq1x2;
-        (value: any, other: any): boolean;
-    }
-    type LodashEq1x1 = (other: any) => boolean;
-    type LodashEq1x2 = (value: any) => boolean;
-    interface LodashIsEqual {
-        (value: any): LodashIsEqual1x1;
-        (value: lodash.__, other: any): LodashIsEqual1x2;
-        (value: any, other: any): boolean;
-    }
-    type LodashIsEqual1x1 = (other: any) => boolean;
-    type LodashIsEqual1x2 = (value: any) => boolean;
-    type LodashEscape = (string: string) => string;
-    type LodashEscapeRegExp = (string: string) => string;
-    interface LodashExtend {
-        <TObject>(object: TObject): LodashExtend1x1<TObject>;
-        <TSource>(object: lodash.__, source: TSource): LodashExtend1x2<TSource>;
-        <TObject, TSource>(object: TObject, source: TSource): TObject & TSource;
-    }
-    type LodashExtend1x1<TObject> = <TSource>(source: TSource) => TObject & TSource;
-    type LodashExtend1x2<TSource> = <TObject>(object: TObject) => TObject & TSource;
-    interface LodashExtendAll {
-        <TObject, TSource>(object: [TObject, TSource]): TObject & TSource;
-        <TObject, TSource1, TSource2>(object: [TObject, TSource1, TSource2]): TObject & TSource1 & TSource2;
-        <TObject, TSource1, TSource2, TSource3>(object: [TObject, TSource1, TSource2, TSource3]): TObject & TSource1 & TSource2 & TSource3;
-        <TObject, TSource1, TSource2, TSource3, TSource4>(object: [TObject, TSource1, TSource2, TSource3, TSource4]): TObject & TSource1 & TSource2 & TSource3 & TSource4;
-        <TObject>(object: [TObject]): TObject;
-        <TResult>(object: ReadonlyArray<any>): TResult;
-    }
-    interface LodashExtendAllWith {
-        (customizer: lodash.AssignCustomizer): LodashExtendAllWith1x1;
-        (customizer: lodash.__, args: ReadonlyArray<any>): LodashExtendAllWith1x2;
-        (customizer: lodash.AssignCustomizer, args: ReadonlyArray<any>): any;
-    }
-    type LodashExtendAllWith1x1 = (args: ReadonlyArray<any>) => any;
-    type LodashExtendAllWith1x2 = (customizer: lodash.AssignCustomizer) => any;
-    interface LodashExtendWith {
-        (customizer: lodash.AssignCustomizer): LodashExtendWith1x1;
-        <TObject>(customizer: lodash.__, object: TObject): LodashExtendWith1x2<TObject>;
-        <TObject>(customizer: lodash.AssignCustomizer, object: TObject): LodashExtendWith1x3<TObject>;
-        <TSource>(customizer: lodash.__, object: lodash.__, source: TSource): LodashExtendWith1x4<TSource>;
-        <TSource>(customizer: lodash.AssignCustomizer, object: lodash.__, source: TSource): LodashExtendWith1x5<TSource>;
-        <TObject, TSource>(customizer: lodash.__, object: TObject, source: TSource): LodashExtendWith1x6<TObject, TSource>;
-        <TObject, TSource>(customizer: lodash.AssignCustomizer, object: TObject, source: TSource): TObject & TSource;
-    }
-    interface LodashExtendWith1x1 {
-        <TObject>(object: TObject): LodashExtendWith1x3<TObject>;
-        <TSource>(object: lodash.__, source: TSource): LodashExtendWith1x5<TSource>;
-        <TObject, TSource>(object: TObject, source: TSource): TObject & TSource;
-    }
-    interface LodashExtendWith1x2<TObject> {
-        (customizer: lodash.AssignCustomizer): LodashExtendWith1x3<TObject>;
-        <TSource>(customizer: lodash.__, source: TSource): LodashExtendWith1x6<TObject, TSource>;
-        <TSource>(customizer: lodash.AssignCustomizer, source: TSource): TObject & TSource;
-    }
-    type LodashExtendWith1x3<TObject> = <TSource>(source: TSource) => TObject & TSource;
-    interface LodashExtendWith1x4<TSource> {
-        (customizer: lodash.AssignCustomizer): LodashExtendWith1x5<TSource>;
-        <TObject>(customizer: lodash.__, object: TObject): LodashExtendWith1x6<TObject, TSource>;
-        <TObject>(customizer: lodash.AssignCustomizer, object: TObject): TObject & TSource;
-    }
-    type LodashExtendWith1x5<TSource> = <TObject>(object: TObject) => TObject & TSource;
-    type LodashExtendWith1x6<TObject, TSource> = (customizer: lodash.AssignCustomizer) => TObject & TSource;
-    type LodashStubFalse = () => false;
-    interface LodashFill {
-        (start: number): LodashFill1x1;
-        (start: lodash.__, end: number): LodashFill1x2;
-        (start: number, end: number): LodashFill1x3;
-        <T>(start: lodash.__, end: lodash.__, value: T): LodashFill1x4<T>;
-        <T>(start: number, end: lodash.__, value: T): LodashFill1x5<T>;
-        <T>(start: lodash.__, end: number, value: T): LodashFill1x6<T>;
-        <T>(start: number, end: number, value: T): LodashFill1x7<T>;
-        <U>(start: lodash.__, end: lodash.__, value: lodash.__, array: U[] | null | undefined): LodashFill1x8<U>;
-        <U>(start: number, end: lodash.__, value: lodash.__, array: U[] | null | undefined): LodashFill1x9<U>;
-        <U>(start: lodash.__, end: number, value: lodash.__, array: U[] | null | undefined): LodashFill1x10<U>;
-        <U>(start: number, end: number, value: lodash.__, array: U[] | null | undefined): LodashFill1x11<U>;
-        <T, U>(start: lodash.__, end: lodash.__, value: T, array: U[] | null | undefined): LodashFill1x12<T, U>;
-        <T, U>(start: number, end: lodash.__, value: T, array: U[] | null | undefined): LodashFill1x13<T, U>;
-        <T, U>(start: lodash.__, end: number, value: T, array: U[] | null | undefined): LodashFill1x14<T, U>;
-        <T, U>(start: number, end: number, value: T, array: U[] | null | undefined): Array<T | U>;
-        <U>(start: lodash.__, end: lodash.__, value: lodash.__, array: lodash.List<U> | null | undefined): LodashFill2x8<U>;
-        <U>(start: number, end: lodash.__, value: lodash.__, array: lodash.List<U> | null | undefined): LodashFill2x9<U>;
-        <U>(start: lodash.__, end: number, value: lodash.__, array: lodash.List<U> | null | undefined): LodashFill2x10<U>;
-        <U>(start: number, end: number, value: lodash.__, array: lodash.List<U> | null | undefined): LodashFill2x11<U>;
-        <T, U>(start: lodash.__, end: lodash.__, value: T, array: lodash.List<U> | null | undefined): LodashFill2x12<T, U>;
-        <T, U>(start: number, end: lodash.__, value: T, array: lodash.List<U> | null | undefined): LodashFill2x13<T, U>;
-        <T, U>(start: lodash.__, end: number, value: T, array: lodash.List<U> | null | undefined): LodashFill2x14<T, U>;
-        <T, U>(start: number, end: number, value: T, array: lodash.List<U> | null | undefined): lodash.List<T | U>;
-    }
-    interface LodashFill1x1 {
-        (end: number): LodashFill1x3;
-        <T>(end: lodash.__, value: T): LodashFill1x5<T>;
-        <T>(end: number, value: T): LodashFill1x7<T>;
-        <U>(end: lodash.__, value: lodash.__, array: U[] | null | undefined): LodashFill1x9<U>;
-        <U>(end: number, value: lodash.__, array: U[] | null | undefined): LodashFill1x11<U>;
-        <T, U>(end: lodash.__, value: T, array: U[] | null | undefined): LodashFill1x13<T, U>;
-        <T, U>(end: number, value: T, array: U[] | null | undefined): Array<T | U>;
-        <U>(end: lodash.__, value: lodash.__, array: lodash.List<U> | null | undefined): LodashFill2x9<U>;
-        <U>(end: number, value: lodash.__, array: lodash.List<U> | null | undefined): LodashFill2x11<U>;
-        <T, U>(end: lodash.__, value: T, array: lodash.List<U> | null | undefined): LodashFill2x13<T, U>;
-        <T, U>(end: number, value: T, array: lodash.List<U> | null | undefined): lodash.List<T | U>;
-    }
-    interface LodashFill1x2 {
-        (start: number): LodashFill1x3;
-        <T>(start: lodash.__, value: T): LodashFill1x6<T>;
-        <T>(start: number, value: T): LodashFill1x7<T>;
-        <U>(start: lodash.__, value: lodash.__, array: U[] | null | undefined): LodashFill1x10<U>;
-        <U>(start: number, value: lodash.__, array: U[] | null | undefined): LodashFill1x11<U>;
-        <T, U>(start: lodash.__, value: T, array: U[] | null | undefined): LodashFill1x14<T, U>;
-        <T, U>(start: number, value: T, array: U[] | null | undefined): Array<T | U>;
-        <U>(start: lodash.__, value: lodash.__, array: lodash.List<U> | null | undefined): LodashFill2x10<U>;
-        <U>(start: number, value: lodash.__, array: lodash.List<U> | null | undefined): LodashFill2x11<U>;
-        <T, U>(start: lodash.__, value: T, array: lodash.List<U> | null | undefined): LodashFill2x14<T, U>;
-        <T, U>(start: number, value: T, array: lodash.List<U> | null | undefined): lodash.List<T | U>;
-    }
-    interface LodashFill1x3 {
-        <T>(value: T): LodashFill1x7<T>;
-        <U>(value: lodash.__, array: U[] | null | undefined): LodashFill1x11<U>;
-        <T, U>(value: T, array: U[] | null | undefined): Array<T | U>;
-        <U>(value: lodash.__, array: lodash.List<U> | null | undefined): LodashFill2x11<U>;
-        <T, U>(value: T, array: lodash.List<U> | null | undefined): lodash.List<T | U>;
-    }
-    interface LodashFill1x4<T> {
-        (start: number): LodashFill1x5<T>;
-        (start: lodash.__, end: number): LodashFill1x6<T>;
-        (start: number, end: number): LodashFill1x7<T>;
-        <U>(start: lodash.__, end: lodash.__, array: U[] | null | undefined): LodashFill1x12<T, U>;
-        <U>(start: number, end: lodash.__, array: U[] | null | undefined): LodashFill1x13<T, U>;
-        <U>(start: lodash.__, end: number, array: U[] | null | undefined): LodashFill1x14<T, U>;
-        <U>(start: number, end: number, array: U[] | null | undefined): Array<T | U>;
-        <U>(start: lodash.__, end: lodash.__, array: lodash.List<U> | null | undefined): LodashFill2x12<T, U>;
-        <U>(start: number, end: lodash.__, array: lodash.List<U> | null | undefined): LodashFill2x13<T, U>;
-        <U>(start: lodash.__, end: number, array: lodash.List<U> | null | undefined): LodashFill2x14<T, U>;
-        <U>(start: number, end: number, array: lodash.List<U> | null | undefined): lodash.List<T | U>;
-    }
-    interface LodashFill1x5<T> {
-        (end: number): LodashFill1x7<T>;
-        <U>(end: lodash.__, array: U[] | null | undefined): LodashFill1x13<T, U>;
-        <U>(end: number, array: U[] | null | undefined): Array<T | U>;
-        <U>(end: lodash.__, array: lodash.List<U> | null | undefined): LodashFill2x13<T, U>;
-        <U>(end: number, array: lodash.List<U> | null | undefined): lodash.List<T | U>;
-    }
-    interface LodashFill1x6<T> {
-        (start: number): LodashFill1x7<T>;
-        <U>(start: lodash.__, array: U[] | null | undefined): LodashFill1x14<T, U>;
-        <U>(start: number, array: U[] | null | undefined): Array<T | U>;
-        <U>(start: lodash.__, array: lodash.List<U> | null | undefined): LodashFill2x14<T, U>;
-        <U>(start: number, array: lodash.List<U> | null | undefined): lodash.List<T | U>;
-    }
-    interface LodashFill1x7<T> {
-        <U>(array: U[] | null | undefined): Array<T | U>;
-        <U>(array: lodash.List<U> | null | undefined): lodash.List<T | U>;
-    }
-    interface LodashFill1x8<U> {
-        (start: number): LodashFill1x9<U>;
-        (start: lodash.__, end: number): LodashFill1x10<U>;
-        (start: number, end: number): LodashFill1x11<U>;
-        <T>(start: lodash.__, end: lodash.__, value: T): LodashFill1x12<T, U>;
-        <T>(start: number, end: lodash.__, value: T): LodashFill1x13<T, U>;
-        <T>(start: lodash.__, end: number, value: T): LodashFill1x14<T, U>;
-        <T>(start: number, end: number, value: T): Array<T | U>;
-    }
-    interface LodashFill1x9<U> {
-        (end: number): LodashFill1x11<U>;
-        <T>(end: lodash.__, value: T): LodashFill1x13<T, U>;
-        <T>(end: number, value: T): Array<T | U>;
-    }
-    interface LodashFill1x10<U> {
-        (start: number): LodashFill1x11<U>;
-        <T>(start: lodash.__, value: T): LodashFill1x14<T, U>;
-        <T>(start: number, value: T): Array<T | U>;
-    }
-    type LodashFill1x11<U> = <T>(value: T) => Array<T | U>;
-    interface LodashFill1x12<T, U> {
-        (start: number): LodashFill1x13<T, U>;
-        (start: lodash.__, end: number): LodashFill1x14<T, U>;
-        (start: number, end: number): Array<T | U>;
-    }
-    type LodashFill1x13<T, U> = (end: number) => Array<T | U>;
-    type LodashFill1x14<T, U> = (start: number) => Array<T | U>;
-    interface LodashFill2x8<U> {
-        (start: number): LodashFill2x9<U>;
-        (start: lodash.__, end: number): LodashFill2x10<U>;
-        (start: number, end: number): LodashFill2x11<U>;
-        <T>(start: lodash.__, end: lodash.__, value: T): LodashFill2x12<T, U>;
-        <T>(start: number, end: lodash.__, value: T): LodashFill2x13<T, U>;
-        <T>(start: lodash.__, end: number, value: T): LodashFill2x14<T, U>;
-        <T>(start: number, end: number, value: T): lodash.List<T | U>;
-    }
-    interface LodashFill2x9<U> {
-        (end: number): LodashFill2x11<U>;
-        <T>(end: lodash.__, value: T): LodashFill2x13<T, U>;
-        <T>(end: number, value: T): lodash.List<T | U>;
-    }
-    interface LodashFill2x10<U> {
-        (start: number): LodashFill2x11<U>;
-        <T>(start: lodash.__, value: T): LodashFill2x14<T, U>;
-        <T>(start: number, value: T): lodash.List<T | U>;
-    }
-    type LodashFill2x11<U> = <T>(value: T) => lodash.List<T | U>;
-    interface LodashFill2x12<T, U> {
-        (start: number): LodashFill2x13<T, U>;
-        (start: lodash.__, end: number): LodashFill2x14<T, U>;
-        (start: number, end: number): lodash.List<T | U>;
-    }
-    type LodashFill2x13<T, U> = (end: number) => lodash.List<T | U>;
-    type LodashFill2x14<T, U> = (start: number) => lodash.List<T | U>;
-    interface LodashFilter {
-        (predicate: (value: string) => boolean): LodashFilter1x1;
-        (predicate: lodash.__, collection: string | null | undefined): LodashFilter1x2;
-        (predicate: (value: string) => boolean, collection: string | null | undefined): string[];
-        <T, S extends T>(predicate: lodash.ValueIteratorTypeGuard<T, S>): LodashFilter2x1<T, S>;
-        <T>(predicate: lodash.__, collection: lodash.List<T> | null | undefined): LodashFilter2x2<T>;
-        <T, S extends T>(predicate: lodash.ValueIteratorTypeGuard<T, S>, collection: lodash.List<T> | null | undefined): S[];
-        <T>(predicate: lodash.ValueIterateeCustom<T, boolean>): LodashFilter3x1<T>;
-        <T>(predicate: lodash.ValueIterateeCustom<T, boolean>, collection: lodash.List<T> | null | undefined): T[];
-        <T extends object, S extends T[keyof T]>(predicate: lodash.ValueIteratorTypeGuard<T[keyof T], S>): LodashFilter4x1<T, S>;
-        <T extends object>(predicate: lodash.__, collection: T | null | undefined): LodashFilter4x2<T>;
-        <T extends object, S extends T[keyof T]>(predicate: lodash.ValueIteratorTypeGuard<T[keyof T], S>, collection: T | null | undefined): S[];
-        <T extends object>(predicate: lodash.ValueIterateeCustom<T[keyof T], boolean>, collection: T | null | undefined): Array<T[keyof T]>;
-    }
-    type LodashFilter1x1 = (collection: string | null | undefined) => string[];
-    type LodashFilter1x2 = (predicate: (value: string) => boolean) => string[];
-    type LodashFilter2x1<T, S> = (collection: lodash.List<T> | null | undefined) => S[];
-    interface LodashFilter2x2<T> {
-        <S extends T>(predicate: lodash.ValueIteratorTypeGuard<T, S>): S[];
-        (predicate: lodash.ValueIterateeCustom<T, boolean>): T[];
-    }
-    type LodashFilter3x1<T> = (collection: lodash.List<T> | object | null | undefined) => T[];
-    type LodashFilter4x1<T, S> = (collection: T | null | undefined) => S[];
-    interface LodashFilter4x2<T> {
-        <S extends T[keyof T]>(predicate: lodash.ValueIteratorTypeGuard<T[keyof T], S>): S[];
-        (predicate: lodash.ValueIterateeCustom<T[keyof T], boolean>): Array<T[keyof T]>;
-    }
-    interface LodashFind {
-        <T, S extends T>(predicate: lodash.ValueIteratorTypeGuard<T, S>): LodashFind1x1<T, S>;
-        <T>(predicate: lodash.__, collection: lodash.List<T> | null | undefined): LodashFind1x2<T>;
-        <T, S extends T>(predicate: lodash.ValueIteratorTypeGuard<T, S>, collection: lodash.List<T> | null | undefined): S|undefined;
-        <T>(predicate: lodash.ValueIterateeCustom<T, boolean>): LodashFind2x1<T>;
-        <T>(predicate: lodash.ValueIterateeCustom<T, boolean>, collection: lodash.List<T> | null | undefined): T|undefined;
-        <T extends object, S extends T[keyof T]>(predicate: lodash.ValueIteratorTypeGuard<T[keyof T], S>): LodashFind3x1<T, S>;
-        <T extends object>(predicate: lodash.__, collection: T | null | undefined): LodashFind3x2<T>;
-        <T extends object, S extends T[keyof T]>(predicate: lodash.ValueIteratorTypeGuard<T[keyof T], S>, collection: T | null | undefined): S|undefined;
-        <T extends object>(predicate: lodash.ValueIterateeCustom<T[keyof T], boolean>, collection: T | null | undefined): T[keyof T]|undefined;
-    }
-    type LodashFind1x1<T, S> = (collection: lodash.List<T> | null | undefined) => S|undefined;
-    interface LodashFind1x2<T> {
-        <S extends T>(predicate: lodash.ValueIteratorTypeGuard<T, S>): S|undefined;
-        (predicate: lodash.ValueIterateeCustom<T, boolean>): T|undefined;
-    }
-    type LodashFind2x1<T> = (collection: lodash.List<T> | object | null | undefined) => T|undefined;
-    type LodashFind3x1<T, S> = (collection: T | null | undefined) => S|undefined;
-    interface LodashFind3x2<T> {
-        <S extends T[keyof T]>(predicate: lodash.ValueIteratorTypeGuard<T[keyof T], S>): S|undefined;
-        (predicate: lodash.ValueIterateeCustom<T[keyof T], boolean>): T[keyof T]|undefined;
-    }
-    interface LodashFindFrom {
-        <T, S extends T>(predicate: lodash.ValueIteratorTypeGuard<T, S>): LodashFindFrom1x1<T, S>;
-        (predicate: lodash.__, fromIndex: number): LodashFindFrom1x2;
-        <T, S extends T>(predicate: lodash.ValueIteratorTypeGuard<T, S>, fromIndex: number): LodashFindFrom1x3<T, S>;
-        <T>(predicate: lodash.__, fromIndex: lodash.__, collection: lodash.List<T> | null | undefined): LodashFindFrom1x4<T>;
-        <T, S extends T>(predicate: lodash.ValueIteratorTypeGuard<T, S>, fromIndex: lodash.__, collection: lodash.List<T> | null | undefined): LodashFindFrom1x5<S>;
-        <T>(predicate: lodash.__, fromIndex: number, collection: lodash.List<T> | null | undefined): LodashFindFrom1x6<T>;
-        <T, S extends T>(predicate: lodash.ValueIteratorTypeGuard<T, S>, fromIndex: number, collection: lodash.List<T> | null | undefined): S|undefined;
-        <T>(predicate: lodash.ValueIterateeCustom<T, boolean>): LodashFindFrom2x1<T>;
-        <T>(predicate: lodash.ValueIterateeCustom<T, boolean>, fromIndex: number): LodashFindFrom2x3<T>;
-        <T>(predicate: lodash.ValueIterateeCustom<T, boolean>, fromIndex: lodash.__, collection: lodash.List<T> | null | undefined): LodashFindFrom2x5<T>;
-        <T>(predicate: lodash.ValueIterateeCustom<T, boolean>, fromIndex: number, collection: lodash.List<T> | null | undefined): T|undefined;
-        <T extends object, S extends T[keyof T]>(predicate: lodash.ValueIteratorTypeGuard<T[keyof T], S>): LodashFindFrom3x1<T, S>;
-        <T extends object, S extends T[keyof T]>(predicate: lodash.ValueIteratorTypeGuard<T[keyof T], S>, fromIndex: number): LodashFindFrom3x3<T, S>;
-        <T extends object>(predicate: lodash.__, fromIndex: lodash.__, collection: T | null | undefined): LodashFindFrom3x4<T>;
-        <T extends object, S extends T[keyof T]>(predicate: lodash.ValueIteratorTypeGuard<T[keyof T], S>, fromIndex: lodash.__, collection: T | null | undefined): LodashFindFrom3x5<S>;
-        <T extends object>(predicate: lodash.__, fromIndex: number, collection: T | null | undefined): LodashFindFrom3x6<T>;
-        <T extends object, S extends T[keyof T]>(predicate: lodash.ValueIteratorTypeGuard<T[keyof T], S>, fromIndex: number, collection: T | null | undefined): S|undefined;
-        <T extends object>(predicate: lodash.ValueIterateeCustom<T[keyof T], boolean>, fromIndex: lodash.__, collection: T | null | undefined): LodashFindFrom4x5<T>;
-        <T extends object>(predicate: lodash.ValueIterateeCustom<T[keyof T], boolean>, fromIndex: number, collection: T | null | undefined): T[keyof T]|undefined;
-    }
-    interface LodashFindFrom1x1<T, S> {
-        (fromIndex: number): LodashFindFrom1x3<T, S>;
-        (fromIndex: lodash.__, collection: lodash.List<T> | null | undefined): LodashFindFrom1x5<S>;
-        (fromIndex: number, collection: lodash.List<T> | null | undefined): S|undefined;
-    }
-    interface LodashFindFrom1x2 {
-        <T, S extends T>(predicate: lodash.ValueIteratorTypeGuard<T, S>): LodashFindFrom1x3<T, S>;
-        <T>(predicate: lodash.__, collection: lodash.List<T> | null | undefined): LodashFindFrom1x6<T>;
-        <T, S extends T>(predicate: lodash.ValueIteratorTypeGuard<T, S>, collection: lodash.List<T> | null | undefined): S|undefined;
-        <T>(predicate: lodash.ValueIterateeCustom<T, boolean>): LodashFindFrom2x3<T>;
-        <T>(predicate: lodash.ValueIterateeCustom<T, boolean>, collection: lodash.List<T> | null | undefined): T|undefined;
-        <T extends object, S extends T[keyof T]>(predicate: lodash.ValueIteratorTypeGuard<T[keyof T], S>): LodashFindFrom3x3<T, S>;
-        <T extends object>(predicate: lodash.__, collection: T | null | undefined): LodashFindFrom3x6<T>;
-        <T extends object, S extends T[keyof T]>(predicate: lodash.ValueIteratorTypeGuard<T[keyof T], S>, collection: T | null | undefined): S|undefined;
-        <T extends object>(predicate: lodash.ValueIterateeCustom<T[keyof T], boolean>, collection: T | null | undefined): T[keyof T]|undefined;
-    }
-    type LodashFindFrom1x3<T, S> = (collection: lodash.List<T> | null | undefined) => S|undefined;
-    interface LodashFindFrom1x4<T> {
-        <S extends T>(predicate: lodash.ValueIteratorTypeGuard<T, S>): LodashFindFrom1x5<S>;
-        (predicate: lodash.__, fromIndex: number): LodashFindFrom1x6<T>;
-        <S extends T>(predicate: lodash.ValueIteratorTypeGuard<T, S>, fromIndex: number): S|undefined;
-        (predicate: lodash.ValueIterateeCustom<T, boolean>): LodashFindFrom2x5<T>;
-        (predicate: lodash.ValueIterateeCustom<T, boolean>, fromIndex: number): T|undefined;
-    }
-    type LodashFindFrom1x5<S> = (fromIndex: number) => S|undefined;
-    interface LodashFindFrom1x6<T> {
-        <S extends T>(predicate: lodash.ValueIteratorTypeGuard<T, S>): S|undefined;
-        (predicate: lodash.ValueIterateeCustom<T, boolean>): T|undefined;
-    }
-    interface LodashFindFrom2x1<T> {
-        (fromIndex: number): LodashFindFrom2x3<T>;
-        (fromIndex: lodash.__, collection: lodash.List<T> | null | undefined): LodashFindFrom2x5<T>;
-        (fromIndex: number, collection: lodash.List<T> | object | null | undefined): T|undefined;
-        <T1 extends object>(fromIndex: lodash.__, collection: T1 | null | undefined): LodashFindFrom4x5<T>;
-    }
-    interface LodashFindFrom2x3<T> {
-        (collection: lodash.List<T> | null | undefined): T|undefined;
-        (collection: object | null | undefined): object|undefined;
-    }
-    type LodashFindFrom2x5<T> = (fromIndex: number) => T|undefined;
-    interface LodashFindFrom3x1<T, S> {
-        (fromIndex: number): LodashFindFrom3x3<T, S>;
-        (fromIndex: lodash.__, collection: T | null | undefined): LodashFindFrom3x5<S>;
-        (fromIndex: number, collection: T | null | undefined): S|undefined;
-    }
-    type LodashFindFrom3x3<T, S> = (collection: T | null | undefined) => S|undefined;
-    interface LodashFindFrom3x4<T> {
-        <S extends T[keyof T]>(predicate: lodash.ValueIteratorTypeGuard<T[keyof T], S>): LodashFindFrom3x5<S>;
-        (predicate: lodash.__, fromIndex: number): LodashFindFrom3x6<T>;
-        <S extends T[keyof T]>(predicate: lodash.ValueIteratorTypeGuard<T[keyof T], S>, fromIndex: number): S|undefined;
-        (predicate: lodash.ValueIterateeCustom<T[keyof T], boolean>): LodashFindFrom4x5<T>;
-        (predicate: lodash.ValueIterateeCustom<T[keyof T], boolean>, fromIndex: number): T[keyof T]|undefined;
-    }
-    type LodashFindFrom3x5<S> = (fromIndex: number) => S|undefined;
-    interface LodashFindFrom3x6<T> {
-        <S extends T[keyof T]>(predicate: lodash.ValueIteratorTypeGuard<T[keyof T], S>): S|undefined;
-        (predicate: lodash.ValueIterateeCustom<T[keyof T], boolean>): T[keyof T]|undefined;
-    }
-    type LodashFindFrom4x5<T> = (fromIndex: number) => T[keyof T]|undefined;
-    interface LodashFindIndex {
-        <T>(predicate: lodash.ValueIterateeCustom<T, boolean>): LodashFindIndex1x1<T>;
-        <T>(predicate: lodash.__, array: lodash.List<T> | null | undefined): LodashFindIndex1x2<T>;
-        <T>(predicate: lodash.ValueIterateeCustom<T, boolean>, array: lodash.List<T> | null | undefined): number;
-    }
-    type LodashFindIndex1x1<T> = (array: lodash.List<T> | null | undefined) => number;
-    type LodashFindIndex1x2<T> = (predicate: lodash.ValueIterateeCustom<T, boolean>) => number;
-    interface LodashFindIndexFrom {
-        <T>(predicate: lodash.ValueIterateeCustom<T, boolean>): LodashFindIndexFrom1x1<T>;
-        (predicate: lodash.__, fromIndex: number): LodashFindIndexFrom1x2;
-        <T>(predicate: lodash.ValueIterateeCustom<T, boolean>, fromIndex: number): LodashFindIndexFrom1x3<T>;
-        <T>(predicate: lodash.__, fromIndex: lodash.__, array: lodash.List<T> | null | undefined): LodashFindIndexFrom1x4<T>;
-        <T>(predicate: lodash.ValueIterateeCustom<T, boolean>, fromIndex: lodash.__, array: lodash.List<T> | null | undefined): LodashFindIndexFrom1x5;
-        <T>(predicate: lodash.__, fromIndex: number, array: lodash.List<T> | null | undefined): LodashFindIndexFrom1x6<T>;
-        <T>(predicate: lodash.ValueIterateeCustom<T, boolean>, fromIndex: number, array: lodash.List<T> | null | undefined): number;
-    }
-    interface LodashFindIndexFrom1x1<T> {
-        (fromIndex: number): LodashFindIndexFrom1x3<T>;
-        (fromIndex: lodash.__, array: lodash.List<T> | null | undefined): LodashFindIndexFrom1x5;
-        (fromIndex: number, array: lodash.List<T> | null | undefined): number;
-    }
-    interface LodashFindIndexFrom1x2 {
-        <T>(predicate: lodash.ValueIterateeCustom<T, boolean>): LodashFindIndexFrom1x3<T>;
-        <T>(predicate: lodash.__, array: lodash.List<T> | null | undefined): LodashFindIndexFrom1x6<T>;
-        <T>(predicate: lodash.ValueIterateeCustom<T, boolean>, array: lodash.List<T> | null | undefined): number;
-    }
-    type LodashFindIndexFrom1x3<T> = (array: lodash.List<T> | null | undefined) => number;
-    interface LodashFindIndexFrom1x4<T> {
-        (predicate: lodash.ValueIterateeCustom<T, boolean>): LodashFindIndexFrom1x5;
-        (predicate: lodash.__, fromIndex: number): LodashFindIndexFrom1x6<T>;
-        (predicate: lodash.ValueIterateeCustom<T, boolean>, fromIndex: number): number;
-    }
-    type LodashFindIndexFrom1x5 = (fromIndex: number) => number;
-    type LodashFindIndexFrom1x6<T> = (predicate: lodash.ValueIterateeCustom<T, boolean>) => number;
-    interface LodashFindKey {
-        <T>(predicate: lodash.ValueIteratee<T>): LodashFindKey1x1<T>;
-        <T>(predicate: lodash.__, object: T | null | undefined): LodashFindKey1x2<T>;
-        <T>(predicate: lodash.ValueIteratee<T[keyof T]>, object: T | null | undefined): string | undefined;
-    }
-    type LodashFindKey1x1<T> = (object: object | null | undefined) => string | undefined;
-    type LodashFindKey1x2<T> = (predicate: lodash.ValueIteratee<T[keyof T]>) => string | undefined;
-    interface LodashFindLast {
-        <T, S extends T>(predicate: lodash.ValueIteratorTypeGuard<T, S>): LodashFindLast1x1<T, S>;
-        <T>(predicate: lodash.__, collection: lodash.List<T> | null | undefined): LodashFindLast1x2<T>;
-        <T, S extends T>(predicate: lodash.ValueIteratorTypeGuard<T, S>, collection: lodash.List<T> | null | undefined): S|undefined;
-        <T>(predicate: lodash.ValueIterateeCustom<T, boolean>): LodashFindLast2x1<T>;
-        <T>(predicate: lodash.ValueIterateeCustom<T, boolean>, collection: lodash.List<T> | null | undefined): T|undefined;
-        <T extends object, S extends T[keyof T]>(predicate: lodash.ValueIteratorTypeGuard<T[keyof T], S>): LodashFindLast3x1<T, S>;
-        <T extends object>(predicate: lodash.__, collection: T | null | undefined): LodashFindLast3x2<T>;
-        <T extends object, S extends T[keyof T]>(predicate: lodash.ValueIteratorTypeGuard<T[keyof T], S>, collection: T | null | undefined): S|undefined;
-        <T extends object>(predicate: lodash.ValueIterateeCustom<T[keyof T], boolean>, collection: T | null | undefined): T[keyof T]|undefined;
-    }
-    type LodashFindLast1x1<T, S> = (collection: lodash.List<T> | null | undefined) => S|undefined;
-    interface LodashFindLast1x2<T> {
-        <S extends T>(predicate: lodash.ValueIteratorTypeGuard<T, S>): S|undefined;
-        (predicate: lodash.ValueIterateeCustom<T, boolean>): T|undefined;
-    }
-    type LodashFindLast2x1<T> = (collection: lodash.List<T> | object | null | undefined) => T|undefined;
-    type LodashFindLast3x1<T, S> = (collection: T | null | undefined) => S|undefined;
-    interface LodashFindLast3x2<T> {
-        <S extends T[keyof T]>(predicate: lodash.ValueIteratorTypeGuard<T[keyof T], S>): S|undefined;
-        (predicate: lodash.ValueIterateeCustom<T[keyof T], boolean>): T[keyof T]|undefined;
-    }
-    interface LodashFindLastFrom {
-        <T, S extends T>(predicate: lodash.ValueIteratorTypeGuard<T, S>): LodashFindLastFrom1x1<T, S>;
-        (predicate: lodash.__, fromIndex: number): LodashFindLastFrom1x2;
-        <T, S extends T>(predicate: lodash.ValueIteratorTypeGuard<T, S>, fromIndex: number): LodashFindLastFrom1x3<T, S>;
-        <T>(predicate: lodash.__, fromIndex: lodash.__, collection: lodash.List<T> | null | undefined): LodashFindLastFrom1x4<T>;
-        <T, S extends T>(predicate: lodash.ValueIteratorTypeGuard<T, S>, fromIndex: lodash.__, collection: lodash.List<T> | null | undefined): LodashFindLastFrom1x5<S>;
-        <T>(predicate: lodash.__, fromIndex: number, collection: lodash.List<T> | null | undefined): LodashFindLastFrom1x6<T>;
-        <T, S extends T>(predicate: lodash.ValueIteratorTypeGuard<T, S>, fromIndex: number, collection: lodash.List<T> | null | undefined): S|undefined;
-        <T>(predicate: lodash.ValueIterateeCustom<T, boolean>): LodashFindLastFrom2x1<T>;
-        <T>(predicate: lodash.ValueIterateeCustom<T, boolean>, fromIndex: number): LodashFindLastFrom2x3<T>;
-        <T>(predicate: lodash.ValueIterateeCustom<T, boolean>, fromIndex: lodash.__, collection: lodash.List<T> | null | undefined): LodashFindLastFrom2x5<T>;
-        <T>(predicate: lodash.ValueIterateeCustom<T, boolean>, fromIndex: number, collection: lodash.List<T> | null | undefined): T|undefined;
-        <T extends object, S extends T[keyof T]>(predicate: lodash.ValueIteratorTypeGuard<T[keyof T], S>): LodashFindLastFrom3x1<T, S>;
-        <T extends object, S extends T[keyof T]>(predicate: lodash.ValueIteratorTypeGuard<T[keyof T], S>, fromIndex: number): LodashFindLastFrom3x3<T, S>;
-        <T extends object>(predicate: lodash.__, fromIndex: lodash.__, collection: T | null | undefined): LodashFindLastFrom3x4<T>;
-        <T extends object, S extends T[keyof T]>(predicate: lodash.ValueIteratorTypeGuard<T[keyof T], S>, fromIndex: lodash.__, collection: T | null | undefined): LodashFindLastFrom3x5<S>;
-        <T extends object>(predicate: lodash.__, fromIndex: number, collection: T | null | undefined): LodashFindLastFrom3x6<T>;
-        <T extends object, S extends T[keyof T]>(predicate: lodash.ValueIteratorTypeGuard<T[keyof T], S>, fromIndex: number, collection: T | null | undefined): S|undefined;
-        <T extends object>(predicate: lodash.ValueIterateeCustom<T[keyof T], boolean>, fromIndex: lodash.__, collection: T | null | undefined): LodashFindLastFrom4x5<T>;
-        <T extends object>(predicate: lodash.ValueIterateeCustom<T[keyof T], boolean>, fromIndex: number, collection: T | null | undefined): T[keyof T]|undefined;
-    }
-    interface LodashFindLastFrom1x1<T, S> {
-        (fromIndex: number): LodashFindLastFrom1x3<T, S>;
-        (fromIndex: lodash.__, collection: lodash.List<T> | null | undefined): LodashFindLastFrom1x5<S>;
-        (fromIndex: number, collection: lodash.List<T> | null | undefined): S|undefined;
-    }
-    interface LodashFindLastFrom1x2 {
-        <T, S extends T>(predicate: lodash.ValueIteratorTypeGuard<T, S>): LodashFindLastFrom1x3<T, S>;
-        <T>(predicate: lodash.__, collection: lodash.List<T> | null | undefined): LodashFindLastFrom1x6<T>;
-        <T, S extends T>(predicate: lodash.ValueIteratorTypeGuard<T, S>, collection: lodash.List<T> | null | undefined): S|undefined;
-        <T>(predicate: lodash.ValueIterateeCustom<T, boolean>): LodashFindLastFrom2x3<T>;
-        <T>(predicate: lodash.ValueIterateeCustom<T, boolean>, collection: lodash.List<T> | null | undefined): T|undefined;
-        <T extends object, S extends T[keyof T]>(predicate: lodash.ValueIteratorTypeGuard<T[keyof T], S>): LodashFindLastFrom3x3<T, S>;
-        <T extends object>(predicate: lodash.__, collection: T | null | undefined): LodashFindLastFrom3x6<T>;
-        <T extends object, S extends T[keyof T]>(predicate: lodash.ValueIteratorTypeGuard<T[keyof T], S>, collection: T | null | undefined): S|undefined;
-        <T extends object>(predicate: lodash.ValueIterateeCustom<T[keyof T], boolean>, collection: T | null | undefined): T[keyof T]|undefined;
-    }
-    type LodashFindLastFrom1x3<T, S> = (collection: lodash.List<T> | null | undefined) => S|undefined;
-    interface LodashFindLastFrom1x4<T> {
-        <S extends T>(predicate: lodash.ValueIteratorTypeGuard<T, S>): LodashFindLastFrom1x5<S>;
-        (predicate: lodash.__, fromIndex: number): LodashFindLastFrom1x6<T>;
-        <S extends T>(predicate: lodash.ValueIteratorTypeGuard<T, S>, fromIndex: number): S|undefined;
-        (predicate: lodash.ValueIterateeCustom<T, boolean>): LodashFindLastFrom2x5<T>;
-        (predicate: lodash.ValueIterateeCustom<T, boolean>, fromIndex: number): T|undefined;
-    }
-    type LodashFindLastFrom1x5<S> = (fromIndex: number) => S|undefined;
-    interface LodashFindLastFrom1x6<T> {
-        <S extends T>(predicate: lodash.ValueIteratorTypeGuard<T, S>): S|undefined;
-        (predicate: lodash.ValueIterateeCustom<T, boolean>): T|undefined;
-    }
-    interface LodashFindLastFrom2x1<T> {
-        (fromIndex: number): LodashFindLastFrom2x3<T>;
-        (fromIndex: lodash.__, collection: lodash.List<T> | null | undefined): LodashFindLastFrom2x5<T>;
-        (fromIndex: number, collection: lodash.List<T> | object | null | undefined): T|undefined;
-        <T1 extends object>(fromIndex: lodash.__, collection: T1 | null | undefined): LodashFindLastFrom4x5<T>;
-    }
-    interface LodashFindLastFrom2x3<T> {
-        (collection: lodash.List<T> | null | undefined): T|undefined;
-        (collection: object | null | undefined): object|undefined;
-    }
-    type LodashFindLastFrom2x5<T> = (fromIndex: number) => T|undefined;
-    interface LodashFindLastFrom3x1<T, S> {
-        (fromIndex: number): LodashFindLastFrom3x3<T, S>;
-        (fromIndex: lodash.__, collection: T | null | undefined): LodashFindLastFrom3x5<S>;
-        (fromIndex: number, collection: T | null | undefined): S|undefined;
-    }
-    type LodashFindLastFrom3x3<T, S> = (collection: T | null | undefined) => S|undefined;
-    interface LodashFindLastFrom3x4<T> {
-        <S extends T[keyof T]>(predicate: lodash.ValueIteratorTypeGuard<T[keyof T], S>): LodashFindLastFrom3x5<S>;
-        (predicate: lodash.__, fromIndex: number): LodashFindLastFrom3x6<T>;
-        <S extends T[keyof T]>(predicate: lodash.ValueIteratorTypeGuard<T[keyof T], S>, fromIndex: number): S|undefined;
-        (predicate: lodash.ValueIterateeCustom<T[keyof T], boolean>): LodashFindLastFrom4x5<T>;
-        (predicate: lodash.ValueIterateeCustom<T[keyof T], boolean>, fromIndex: number): T[keyof T]|undefined;
-    }
-    type LodashFindLastFrom3x5<S> = (fromIndex: number) => S|undefined;
-    interface LodashFindLastFrom3x6<T> {
-        <S extends T[keyof T]>(predicate: lodash.ValueIteratorTypeGuard<T[keyof T], S>): S|undefined;
-        (predicate: lodash.ValueIterateeCustom<T[keyof T], boolean>): T[keyof T]|undefined;
-    }
-    type LodashFindLastFrom4x5<T> = (fromIndex: number) => T[keyof T]|undefined;
-    interface LodashFindLastIndex {
-        <T>(predicate: lodash.ValueIterateeCustom<T, boolean>): LodashFindLastIndex1x1<T>;
-        <T>(predicate: lodash.__, array: lodash.List<T> | null | undefined): LodashFindLastIndex1x2<T>;
-        <T>(predicate: lodash.ValueIterateeCustom<T, boolean>, array: lodash.List<T> | null | undefined): number;
-    }
-    type LodashFindLastIndex1x1<T> = (array: lodash.List<T> | null | undefined) => number;
-    type LodashFindLastIndex1x2<T> = (predicate: lodash.ValueIterateeCustom<T, boolean>) => number;
-    interface LodashFindLastIndexFrom {
-        <T>(predicate: lodash.ValueIterateeCustom<T, boolean>): LodashFindLastIndexFrom1x1<T>;
-        (predicate: lodash.__, fromIndex: number): LodashFindLastIndexFrom1x2;
-        <T>(predicate: lodash.ValueIterateeCustom<T, boolean>, fromIndex: number): LodashFindLastIndexFrom1x3<T>;
-        <T>(predicate: lodash.__, fromIndex: lodash.__, array: lodash.List<T> | null | undefined): LodashFindLastIndexFrom1x4<T>;
-        <T>(predicate: lodash.ValueIterateeCustom<T, boolean>, fromIndex: lodash.__, array: lodash.List<T> | null | undefined): LodashFindLastIndexFrom1x5;
-        <T>(predicate: lodash.__, fromIndex: number, array: lodash.List<T> | null | undefined): LodashFindLastIndexFrom1x6<T>;
-        <T>(predicate: lodash.ValueIterateeCustom<T, boolean>, fromIndex: number, array: lodash.List<T> | null | undefined): number;
-    }
-    interface LodashFindLastIndexFrom1x1<T> {
-        (fromIndex: number): LodashFindLastIndexFrom1x3<T>;
-        (fromIndex: lodash.__, array: lodash.List<T> | null | undefined): LodashFindLastIndexFrom1x5;
-        (fromIndex: number, array: lodash.List<T> | null | undefined): number;
-    }
-    interface LodashFindLastIndexFrom1x2 {
-        <T>(predicate: lodash.ValueIterateeCustom<T, boolean>): LodashFindLastIndexFrom1x3<T>;
-        <T>(predicate: lodash.__, array: lodash.List<T> | null | undefined): LodashFindLastIndexFrom1x6<T>;
-        <T>(predicate: lodash.ValueIterateeCustom<T, boolean>, array: lodash.List<T> | null | undefined): number;
-    }
-    type LodashFindLastIndexFrom1x3<T> = (array: lodash.List<T> | null | undefined) => number;
-    interface LodashFindLastIndexFrom1x4<T> {
-        (predicate: lodash.ValueIterateeCustom<T, boolean>): LodashFindLastIndexFrom1x5;
-        (predicate: lodash.__, fromIndex: number): LodashFindLastIndexFrom1x6<T>;
-        (predicate: lodash.ValueIterateeCustom<T, boolean>, fromIndex: number): number;
-    }
-    type LodashFindLastIndexFrom1x5 = (fromIndex: number) => number;
-    type LodashFindLastIndexFrom1x6<T> = (predicate: lodash.ValueIterateeCustom<T, boolean>) => number;
-    interface LodashFindLastKey {
-        <T>(predicate: lodash.ValueIteratee<T>): LodashFindLastKey1x1<T>;
-        <T>(predicate: lodash.__, object: T | null | undefined): LodashFindLastKey1x2<T>;
-        <T>(predicate: lodash.ValueIteratee<T[keyof T]>, object: T | null | undefined): string | undefined;
-    }
-    type LodashFindLastKey1x1<T> = (object: object | null | undefined) => string | undefined;
-    type LodashFindLastKey1x2<T> = (predicate: lodash.ValueIteratee<T[keyof T]>) => string | undefined;
-    type LodashHead = <T>(array: lodash.List<T> | null | undefined) => T | undefined;
-    interface LodashFlatMap {
-        <T, TResult>(iteratee: (value: T) => lodash.Many<TResult>): LodashFlatMap1x1<T, TResult>;
-        <T>(iteratee: lodash.__, collection: lodash.List<T> | null | undefined): LodashFlatMap1x2<T>;
-        <T, TResult>(iteratee: (value: T) => lodash.Many<TResult>, collection: lodash.List<T> | null | undefined): TResult[];
-        <T extends object, TResult>(iteratee: (value: T[keyof T]) => lodash.Many<TResult>): LodashFlatMap2x1<T, TResult>;
-        <T extends object>(iteratee: lodash.__, collection: T | null | undefined): LodashFlatMap2x2<T>;
-        <T extends object, TResult>(iteratee: (value: T[keyof T]) => lodash.Many<TResult>, collection: T | null | undefined): TResult[];
-        (iteratee: string): LodashFlatMap3x1;
-        (iteratee: lodash.__, collection: object | null | undefined): LodashFlatMap3x2;
-        (iteratee: string, collection: object | null | undefined): any[];
-        (iteratee: object): LodashFlatMap4x1;
-        (iteratee: object, collection: object | null | undefined): boolean[];
-    }
-    type LodashFlatMap1x1<T, TResult> = (collection: lodash.List<T> | null | undefined) => TResult[];
-    type LodashFlatMap1x2<T> = <TResult>(iteratee: (value: T) => lodash.Many<TResult>) => TResult[];
-    type LodashFlatMap2x1<T, TResult> = (collection: T | null | undefined) => TResult[];
-    type LodashFlatMap2x2<T> = <TResult>(iteratee: (value: T[keyof T]) => lodash.Many<TResult>) => TResult[];
-    type LodashFlatMap3x1 = (collection: object | null | undefined) => any[];
-    interface LodashFlatMap3x2 {
-        (iteratee: string): any[];
-        (iteratee: object): boolean[];
-    }
-    type LodashFlatMap4x1 = (collection: object | null | undefined) => boolean[];
-    interface LodashFlatMapDeep {
-        <T, TResult>(iteratee: (value: T) => lodash.ListOfRecursiveArraysOrValues<TResult> | TResult): LodashFlatMapDeep1x1<T, TResult>;
-        <T>(iteratee: lodash.__, collection: lodash.List<T> | null | undefined): LodashFlatMapDeep1x2<T>;
-        <T, TResult>(iteratee: (value: T) => lodash.ListOfRecursiveArraysOrValues<TResult> | TResult, collection: lodash.List<T> | null | undefined): TResult[];
-        <T extends object, TResult>(iteratee: (value: T[keyof T]) => lodash.ListOfRecursiveArraysOrValues<TResult> | TResult): LodashFlatMapDeep2x1<T, TResult>;
-        <T extends object>(iteratee: lodash.__, collection: T | null | undefined): LodashFlatMapDeep2x2<T>;
-        <T extends object, TResult>(iteratee: (value: T[keyof T]) => lodash.ListOfRecursiveArraysOrValues<TResult> | TResult, collection: T | null | undefined): TResult[];
-        (iteratee: string): LodashFlatMapDeep3x1;
-        (iteratee: lodash.__, collection: object | null | undefined): LodashFlatMapDeep3x2;
-        (iteratee: string, collection: object | null | undefined): any[];
-        (iteratee: object): LodashFlatMapDeep4x1;
-        (iteratee: object, collection: object | null | undefined): boolean[];
-    }
-    type LodashFlatMapDeep1x1<T, TResult> = (collection: lodash.List<T> | null | undefined) => TResult[];
-    type LodashFlatMapDeep1x2<T> = <TResult>(iteratee: (value: T) => lodash.ListOfRecursiveArraysOrValues<TResult> | TResult) => TResult[];
-    type LodashFlatMapDeep2x1<T, TResult> = (collection: T | null | undefined) => TResult[];
-    type LodashFlatMapDeep2x2<T> = <TResult>(iteratee: (value: T[keyof T]) => lodash.ListOfRecursiveArraysOrValues<TResult> | TResult) => TResult[];
-    type LodashFlatMapDeep3x1 = (collection: object | null | undefined) => any[];
-    interface LodashFlatMapDeep3x2 {
-        (iteratee: string): any[];
-        (iteratee: object): boolean[];
-    }
-    type LodashFlatMapDeep4x1 = (collection: object | null | undefined) => boolean[];
-    interface LodashFlatMapDepth {
-        <T, TResult>(iteratee: (value: T) => lodash.ListOfRecursiveArraysOrValues<TResult> | TResult): LodashFlatMapDepth1x1<T, TResult>;
-        (iteratee: lodash.__, depth: number): LodashFlatMapDepth1x2;
-        <T, TResult>(iteratee: (value: T) => lodash.ListOfRecursiveArraysOrValues<TResult> | TResult, depth: number): LodashFlatMapDepth1x3<T, TResult>;
-        <T>(iteratee: lodash.__, depth: lodash.__, collection: lodash.List<T> | null | undefined): LodashFlatMapDepth1x4<T>;
-        <T, TResult>(iteratee: (value: T) => lodash.ListOfRecursiveArraysOrValues<TResult> | TResult, depth: lodash.__, collection: lodash.List<T> | null | undefined): LodashFlatMapDepth1x5<TResult>;
-        <T>(iteratee: lodash.__, depth: number, collection: lodash.List<T> | null | undefined): LodashFlatMapDepth1x6<T>;
-        <T, TResult>(iteratee: (value: T) => lodash.ListOfRecursiveArraysOrValues<TResult> | TResult, depth: number, collection: lodash.List<T> | null | undefined): TResult[];
-        <T extends object, TResult>(iteratee: (value: T[keyof T]) => lodash.ListOfRecursiveArraysOrValues<TResult> | TResult): LodashFlatMapDepth2x1<T, TResult>;
-        <T extends object, TResult>(iteratee: (value: T[keyof T]) => lodash.ListOfRecursiveArraysOrValues<TResult> | TResult, depth: number): LodashFlatMapDepth2x3<T, TResult>;
-        <T extends object>(iteratee: lodash.__, depth: lodash.__, collection: T | null | undefined): LodashFlatMapDepth2x4<T>;
-        <T extends object, TResult>(iteratee: (value: T[keyof T]) => lodash.ListOfRecursiveArraysOrValues<TResult> | TResult, depth: lodash.__, collection: T | null | undefined): LodashFlatMapDepth2x5<TResult>;
-        <T extends object>(iteratee: lodash.__, depth: number, collection: T | null | undefined): LodashFlatMapDepth2x6<T>;
-        <T extends object, TResult>(iteratee: (value: T[keyof T]) => lodash.ListOfRecursiveArraysOrValues<TResult> | TResult, depth: number, collection: T | null | undefined): TResult[];
-        (iteratee: string): LodashFlatMapDepth3x1;
-        (iteratee: string, depth: number): LodashFlatMapDepth3x3;
-        (iteratee: lodash.__, depth: lodash.__, collection: object | null | undefined): LodashFlatMapDepth3x4;
-        (iteratee: string, depth: lodash.__, collection: object | null | undefined): LodashFlatMapDepth3x5;
-        (iteratee: lodash.__, depth: number, collection: object | null | undefined): LodashFlatMapDepth3x6;
-        (iteratee: string, depth: number, collection: object | null | undefined): any[];
-        (iteratee: object): LodashFlatMapDepth4x1;
-        (iteratee: object, depth: number): LodashFlatMapDepth4x3;
-        (iteratee: object, depth: lodash.__, collection: object | null | undefined): LodashFlatMapDepth4x5;
-        (iteratee: object, depth: number, collection: object | null | undefined): boolean[];
-    }
-    interface LodashFlatMapDepth1x1<T, TResult> {
-        (depth: number): LodashFlatMapDepth1x3<T, TResult>;
-        (depth: lodash.__, collection: lodash.List<T> | null | undefined): LodashFlatMapDepth1x5<TResult>;
-        (depth: number, collection: lodash.List<T> | null | undefined): TResult[];
-    }
-    interface LodashFlatMapDepth1x2 {
-        <T, TResult>(iteratee: (value: T) => lodash.ListOfRecursiveArraysOrValues<TResult> | TResult): LodashFlatMapDepth1x3<T, TResult>;
-        <T>(iteratee: lodash.__, collection: lodash.List<T> | null | undefined): LodashFlatMapDepth1x6<T>;
-        <T, TResult>(iteratee: (value: T) => lodash.ListOfRecursiveArraysOrValues<TResult> | TResult, collection: lodash.List<T> | null | undefined): TResult[];
-        <T extends object, TResult>(iteratee: (value: T[keyof T]) => lodash.ListOfRecursiveArraysOrValues<TResult> | TResult): LodashFlatMapDepth2x3<T, TResult>;
-        <T extends object>(iteratee: lodash.__, collection: T | null | undefined): LodashFlatMapDepth2x6<T>;
-        <T extends object, TResult>(iteratee: (value: T[keyof T]) => lodash.ListOfRecursiveArraysOrValues<TResult> | TResult, collection: T | null | undefined): TResult[];
-        (iteratee: string): LodashFlatMapDepth3x3;
-        (iteratee: lodash.__, collection: object | null | undefined): LodashFlatMapDepth3x6;
-        (iteratee: string, collection: object | null | undefined): any[];
-        (iteratee: object): LodashFlatMapDepth4x3;
-        (iteratee: object, collection: object | null | undefined): boolean[];
-    }
-    type LodashFlatMapDepth1x3<T, TResult> = (collection: lodash.List<T> | null | undefined) => TResult[];
-    interface LodashFlatMapDepth1x4<T> {
-        <TResult>(iteratee: (value: T) => lodash.ListOfRecursiveArraysOrValues<TResult> | TResult): LodashFlatMapDepth1x5<TResult>;
-        (iteratee: lodash.__, depth: number): LodashFlatMapDepth1x6<T>;
-        <TResult>(iteratee: (value: T) => lodash.ListOfRecursiveArraysOrValues<TResult> | TResult, depth: number): TResult[];
-    }
-    type LodashFlatMapDepth1x5<TResult> = (depth: number) => TResult[];
-    type LodashFlatMapDepth1x6<T> = <TResult>(iteratee: (value: T) => lodash.ListOfRecursiveArraysOrValues<TResult> | TResult) => TResult[];
-    interface LodashFlatMapDepth2x1<T, TResult> {
-        (depth: number): LodashFlatMapDepth2x3<T, TResult>;
-        (depth: lodash.__, collection: T | null | undefined): LodashFlatMapDepth2x5<TResult>;
-        (depth: number, collection: T | null | undefined): TResult[];
-    }
-    type LodashFlatMapDepth2x3<T, TResult> = (collection: T | null | undefined) => TResult[];
-    interface LodashFlatMapDepth2x4<T> {
-        <TResult>(iteratee: (value: T[keyof T]) => lodash.ListOfRecursiveArraysOrValues<TResult> | TResult): LodashFlatMapDepth2x5<TResult>;
-        (iteratee: lodash.__, depth: number): LodashFlatMapDepth2x6<T>;
-        <TResult>(iteratee: (value: T[keyof T]) => lodash.ListOfRecursiveArraysOrValues<TResult> | TResult, depth: number): TResult[];
-    }
-    type LodashFlatMapDepth2x5<TResult> = (depth: number) => TResult[];
-    type LodashFlatMapDepth2x6<T> = <TResult>(iteratee: (value: T[keyof T]) => lodash.ListOfRecursiveArraysOrValues<TResult> | TResult) => TResult[];
-    interface LodashFlatMapDepth3x1 {
-        (depth: number): LodashFlatMapDepth3x3;
-        (depth: lodash.__, collection: object | null | undefined): LodashFlatMapDepth3x5;
-        (depth: number, collection: object | null | undefined): any[];
-    }
-    type LodashFlatMapDepth3x3 = (collection: object | null | undefined) => any[];
-    interface LodashFlatMapDepth3x4 {
-        (iteratee: string): LodashFlatMapDepth3x5;
-        (iteratee: lodash.__, depth: number): LodashFlatMapDepth3x6;
-        (iteratee: string, depth: number): any[];
-        (iteratee: object): LodashFlatMapDepth4x5;
-        (iteratee: object, depth: number): boolean[];
-    }
-    type LodashFlatMapDepth3x5 = (depth: number) => any[];
-    interface LodashFlatMapDepth3x6 {
-        (iteratee: string): any[];
-        (iteratee: object): boolean[];
-    }
-    interface LodashFlatMapDepth4x1 {
-        (depth: number): LodashFlatMapDepth4x3;
-        (depth: lodash.__, collection: object | null | undefined): LodashFlatMapDepth4x5;
-        (depth: number, collection: object | null | undefined): boolean[];
-    }
-    type LodashFlatMapDepth4x3 = (collection: object | null | undefined) => boolean[];
-    type LodashFlatMapDepth4x5 = (depth: number) => boolean[];
-    type LodashFlatten = <T>(array: lodash.List<lodash.Many<T>> | null | undefined) => T[];
-    type LodashFlattenDeep = <T>(array: lodash.ListOfRecursiveArraysOrValues<T> | null | undefined) => T[];
-    interface LodashFlattenDepth {
-        (depth: number): LodashFlattenDepth1x1;
-        <T>(depth: lodash.__, array: lodash.ListOfRecursiveArraysOrValues<T> | null | undefined): LodashFlattenDepth1x2<T>;
-        <T>(depth: number, array: lodash.ListOfRecursiveArraysOrValues<T> | null | undefined): T[];
-    }
-    type LodashFlattenDepth1x1 = <T>(array: lodash.ListOfRecursiveArraysOrValues<T> | null | undefined) => T[];
-    type LodashFlattenDepth1x2<T> = (depth: number) => T[];
-    type LodashFlip = <T extends (...args: any[]) => any>(func: T) => T;
-    type LodashFloor = (n: number) => number;
-    interface LodashFlow {
-        <R1, R2>(f1: () => R1, f2: (a: R1) => R2): () => R2;
-        <R1, R2, R3>(f1: () => R1, f2: (a: R1) => R2, f3: (a: R2) => R3): () => R3;
-        <R1, R2, R3, R4>(f1: () => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4): () => R4;
-        <R1, R2, R3, R4, R5>(f1: () => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5): () => R5;
-        <R1, R2, R3, R4, R5, R6>(f1: () => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6): () => R6;
-        <R1, R2, R3, R4, R5, R6, R7>(f1: () => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7): () => R7;
-        <R1, R2, R3, R4, R5, R6, R7>(f1: () => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7, ...funcs: Array<lodash.Many<(a: any) => any>>): () => any;
-        <A1, R1, R2>(f1: (a1: A1) => R1, f2: (a: R1) => R2): (a1: A1) => R2;
-        <A1, R1, R2, R3>(f1: (a1: A1) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3): (a1: A1) => R3;
-        <A1, R1, R2, R3, R4>(f1: (a1: A1) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4): (a1: A1) => R4;
-        <A1, R1, R2, R3, R4, R5>(f1: (a1: A1) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5): (a1: A1) => R5;
-        <A1, R1, R2, R3, R4, R5, R6>(f1: (a1: A1) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6): (a1: A1) => R6;
-        <A1, R1, R2, R3, R4, R5, R6, R7>(f1: (a1: A1) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7): (a1: A1) => R7;
-        <A1, R1, R2, R3, R4, R5, R6, R7>(f1: (a1: A1) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7, ...funcs: Array<lodash.Many<(a: any) => any>>): (a1: A1) => any;
-        <A1, A2, R1, R2>(f1: (a1: A1, a2: A2) => R1, f2: (a: R1) => R2): (a1: A1, a2: A2) => R2;
-        <A1, A2, R1, R2, R3>(f1: (a1: A1, a2: A2) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3): (a1: A1, a2: A2) => R3;
-        <A1, A2, R1, R2, R3, R4>(f1: (a1: A1, a2: A2) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4): (a1: A1, a2: A2) => R4;
-        <A1, A2, R1, R2, R3, R4, R5>(f1: (a1: A1, a2: A2) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5): (a1: A1, a2: A2) => R5;
-        <A1, A2, R1, R2, R3, R4, R5, R6>(f1: (a1: A1, a2: A2) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6): (a1: A1, a2: A2) => R6;
-        <A1, A2, R1, R2, R3, R4, R5, R6, R7>(f1: (a1: A1, a2: A2) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7): (a1: A1, a2: A2) => R7;
-        <A1, A2, R1, R2, R3, R4, R5, R6, R7>(f1: (a1: A1, a2: A2) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7, ...funcs: Array<lodash.Many<(a: any) => any>>): (a1: A1, a2: A2) => any;
-        <A1, A2, A3, R1, R2>(f1: (a1: A1, a2: A2, a3: A3) => R1, f2: (a: R1) => R2): (a1: A1, a2: A2, a3: A3) => R2;
-        <A1, A2, A3, R1, R2, R3>(f1: (a1: A1, a2: A2, a3: A3) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3): (a1: A1, a2: A2, a3: A3) => R3;
-        <A1, A2, A3, R1, R2, R3, R4>(f1: (a1: A1, a2: A2, a3: A3) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4): (a1: A1, a2: A2, a3: A3) => R4;
-        <A1, A2, A3, R1, R2, R3, R4, R5>(f1: (a1: A1, a2: A2, a3: A3) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5): (a1: A1, a2: A2, a3: A3) => R5;
-        <A1, A2, A3, R1, R2, R3, R4, R5, R6>(f1: (a1: A1, a2: A2, a3: A3) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6): (a1: A1, a2: A2, a3: A3) => R6;
-        <A1, A2, A3, R1, R2, R3, R4, R5, R6, R7>(f1: (a1: A1, a2: A2, a3: A3) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7): (a1: A1, a2: A2, a3: A3) => R7;
-        <A1, A2, A3, R1, R2, R3, R4, R5, R6, R7>(f1: (a1: A1, a2: A2, a3: A3) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7, ...funcs: Array<lodash.Many<(a: any) => any>>): (a1: A1, a2: A2, a3: A3) => any;
-        <A1, A2, A3, A4, R1, R2>(f1: (a1: A1, a2: A2, a3: A3, a4: A4) => R1, f2: (a: R1) => R2): (a1: A1, a2: A2, a3: A3, a4: A4) => R2;
-        <A1, A2, A3, A4, R1, R2, R3>(f1: (a1: A1, a2: A2, a3: A3, a4: A4) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3): (a1: A1, a2: A2, a3: A3, a4: A4) => R3;
-        <A1, A2, A3, A4, R1, R2, R3, R4>(f1: (a1: A1, a2: A2, a3: A3, a4: A4) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4): (a1: A1, a2: A2, a3: A3, a4: A4) => R4;
-        <A1, A2, A3, A4, R1, R2, R3, R4, R5>(f1: (a1: A1, a2: A2, a3: A3, a4: A4) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5): (a1: A1, a2: A2, a3: A3, a4: A4) => R5;
-        <A1, A2, A3, A4, R1, R2, R3, R4, R5, R6>(f1: (a1: A1, a2: A2, a3: A3, a4: A4) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6): (a1: A1, a2: A2, a3: A3, a4: A4) => R6;
-        <A1, A2, A3, A4, R1, R2, R3, R4, R5, R6, R7>(f1: (a1: A1, a2: A2, a3: A3, a4: A4) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7): (a1: A1, a2: A2, a3: A3, a4: A4) => R7;
-        <A1, A2, A3, A4, R1, R2, R3, R4, R5, R6, R7>(f1: (a1: A1, a2: A2, a3: A3, a4: A4) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7, ...funcs: Array<lodash.Many<(a: any) => any>>): (a1: A1, a2: A2, a3: A3, a4: A4) => any;
-        <A1, A2, A3, A4, R1, R2>(f1: (a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R1, f2: (a: R1) => R2): (a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R2;
-        <A1, A2, A3, A4, R1, R2, R3>(f1: (a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3): (a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R3;
-        <A1, A2, A3, A4, R1, R2, R3, R4>(f1: (a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4): (a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R4;
-        <A1, A2, A3, A4, R1, R2, R3, R4, R5>(f1: (a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5): (a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R5;
-        <A1, A2, A3, A4, R1, R2, R3, R4, R5, R6>(f1: (a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6): (a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R6;
-        <A1, A2, A3, A4, R1, R2, R3, R4, R5, R6, R7>(f1: (a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7): (a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R7;
-        <A1, A2, A3, A4, R1, R2, R3, R4, R5, R6, R7>(f1: (a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7, ...funcs: Array<lodash.Many<(a: any) => any>>): (a1: A1, a2: A2, a3: A3, a4: A4, ...args: any[]) => any;
-        (funcs: Array<lodash.Many<(...args: any[]) => any>>): (...args: any[]) => any;
-    }
-    interface LodashForIn {
-        <T>(iteratee: (value: T) => any): LodashForIn1x1<T>;
-        <T>(iteratee: lodash.__, object: T): LodashForIn1x2<T>;
-        <T>(iteratee: (value: T[keyof T]) => any, object: T): T;
-        <T>(iteratee: lodash.__, object: T | null | undefined): LodashForIn2x2<T>;
-        <T>(iteratee: (value: T[keyof T]) => any, object: T | null | undefined): T | null | undefined;
-    }
-    interface LodashForIn1x1<T> {
-        <T1 extends object>(object: T1): T1;
-        <T1 extends object>(object: T1 | null | undefined): T1 | null | undefined;
-    }
-    type LodashForIn1x2<T> = (iteratee: (value: T[keyof T]) => any) => T;
-    type LodashForIn2x2<T> = (iteratee: (value: T[keyof T]) => any) => T | null | undefined;
-    interface LodashForInRight {
-        <T>(iteratee: (value: T) => any): LodashForInRight1x1<T>;
-        <T>(iteratee: lodash.__, object: T): LodashForInRight1x2<T>;
-        <T>(iteratee: (value: T[keyof T]) => any, object: T): T;
-        <T>(iteratee: lodash.__, object: T | null | undefined): LodashForInRight2x2<T>;
-        <T>(iteratee: (value: T[keyof T]) => any, object: T | null | undefined): T | null | undefined;
-    }
-    interface LodashForInRight1x1<T> {
-        <T1 extends object>(object: T1): T1;
-        <T1 extends object>(object: T1 | null | undefined): T1 | null | undefined;
-    }
-    type LodashForInRight1x2<T> = (iteratee: (value: T[keyof T]) => any) => T;
-    type LodashForInRight2x2<T> = (iteratee: (value: T[keyof T]) => any) => T | null | undefined;
-    interface LodashForOwn {
-        <T>(iteratee: (value: T) => any): LodashForOwn1x1<T>;
-        <T>(iteratee: lodash.__, object: T): LodashForOwn1x2<T>;
-        <T>(iteratee: (value: T[keyof T]) => any, object: T): T;
-        <T>(iteratee: lodash.__, object: T | null | undefined): LodashForOwn2x2<T>;
-        <T>(iteratee: (value: T[keyof T]) => any, object: T | null | undefined): T | null | undefined;
-    }
-    interface LodashForOwn1x1<T> {
-        <T1 extends object>(object: T1): T1;
-        <T1 extends object>(object: T1 | null | undefined): T1 | null | undefined;
-    }
-    type LodashForOwn1x2<T> = (iteratee: (value: T[keyof T]) => any) => T;
-    type LodashForOwn2x2<T> = (iteratee: (value: T[keyof T]) => any) => T | null | undefined;
-    interface LodashForOwnRight {
-        <T>(iteratee: (value: T) => any): LodashForOwnRight1x1<T>;
-        <T>(iteratee: lodash.__, object: T): LodashForOwnRight1x2<T>;
-        <T>(iteratee: (value: T[keyof T]) => any, object: T): T;
-        <T>(iteratee: lodash.__, object: T | null | undefined): LodashForOwnRight2x2<T>;
-        <T>(iteratee: (value: T[keyof T]) => any, object: T | null | undefined): T | null | undefined;
-    }
-    interface LodashForOwnRight1x1<T> {
-        <T1 extends object>(object: T1): T1;
-        <T1 extends object>(object: T1 | null | undefined): T1 | null | undefined;
-    }
-    type LodashForOwnRight1x2<T> = (iteratee: (value: T[keyof T]) => any) => T;
-    type LodashForOwnRight2x2<T> = (iteratee: (value: T[keyof T]) => any) => T | null | undefined;
-    interface LodashFromPairs {
-        <T>(pairs: lodash.List<[lodash.PropertyName, T]> | null | undefined): lodash.Dictionary<T>;
-        (pairs: lodash.List<any[]> | null | undefined): lodash.Dictionary<any>;
-    }
-    type LodashFunctions = (object: any) => string[];
-    type LodashFunctionsIn = (object: any) => string[];
-    interface LodashGet {
-        <TObject extends object, TKey extends keyof TObject>(path: TKey | [TKey]): LodashGet1x1<TObject, TKey>;
-        <TObject extends object>(path: lodash.__, object: TObject): LodashGet1x2<TObject>;
-        <TObject extends object, TKey extends keyof TObject>(path: TKey | [TKey], object: TObject): TObject[TKey];
-        <TObject extends object>(path: lodash.__, object: TObject | null | undefined): LodashGet2x2<TObject>;
-        <TObject extends object, TKey extends keyof TObject>(path: TKey | [TKey], object: TObject | null | undefined): TObject[TKey] | undefined;
-        (path: number): LodashGet3x1;
-        <T>(path: lodash.__, object: lodash.NumericDictionary<T>): LodashGet3x2<T>;
-        <T>(path: number, object: lodash.NumericDictionary<T>): T;
-        <T>(path: lodash.__, object: lodash.NumericDictionary<T> | null | undefined): LodashGet4x2<T>;
-        <T>(path: number, object: lodash.NumericDictionary<T> | null | undefined): T | undefined;
-        (path: lodash.PropertyPath): LodashGet5x1;
-        (path: lodash.__, object: null | undefined): LodashGet5x2;
-        (path: lodash.PropertyPath, object: null | undefined): undefined;
-        (path: lodash.__, object: any): LodashGet6x2;
-        (path: lodash.PropertyPath, object: any): any;
-    }
-    interface LodashGet1x1<TObject, TKey extends keyof TObject> {
-        (object: TObject): TObject[TKey];
-        (object: TObject | null | undefined): TObject[TKey] | undefined;
-    }
-    type LodashGet1x2<TObject> = <TKey extends keyof TObject>(path: TKey | [TKey]) => TObject[TKey];
-    type LodashGet2x2<TObject> = <TKey extends keyof TObject>(path: TKey | [TKey]) => TObject[TKey] | undefined;
-    interface LodashGet3x1 {
-        <T>(object: lodash.NumericDictionary<T>): T;
-        <T>(object: lodash.NumericDictionary<T> | null | undefined): T | undefined;
-    }
-    type LodashGet3x2<T> = (path: number) => T;
-    type LodashGet4x2<T> = (path: number) => T | undefined;
-    interface LodashGet5x1 {
-        (object: null | undefined): undefined;
-        (object: any): any;
-    }
-    type LodashGet5x2 = (path: lodash.PropertyPath) => undefined;
-    type LodashGet6x2 = (path: lodash.PropertyPath) => any;
-    interface LodashGetOr {
-        <TDefault>(defaultValue: TDefault): LodashGetOr1x1<TDefault>;
-        <TObject extends object, TKey extends keyof TObject>(defaultValue: lodash.__, path: TKey | [TKey]): LodashGetOr1x2<TObject, TKey>;
-        <TObject extends object, TKey extends keyof TObject, TDefault>(defaultValue: TDefault, path: TKey | [TKey]): LodashGetOr1x3<TObject, TKey, TDefault>;
-        <TObject extends object>(defaultValue: lodash.__, path: lodash.__, object: TObject | null | undefined): LodashGetOr1x4<TObject>;
-        <TObject extends object, TDefault>(defaultValue: TDefault, path: lodash.__, object: TObject | null | undefined): LodashGetOr1x5<TObject, TDefault>;
-        <TObject extends object, TKey extends keyof TObject>(defaultValue: lodash.__, path: TKey | [TKey], object: TObject | null | undefined): LodashGetOr1x6<TObject, TKey>;
-        <TObject extends object, TKey extends keyof TObject, TDefault>(defaultValue: TDefault, path: TKey | [TKey], object: TObject | null | undefined): TObject[TKey] | TDefault;
-        (defaultValue: lodash.__, path: number): LodashGetOr2x2;
-        <TDefault>(defaultValue: TDefault, path: number): LodashGetOr2x3<TDefault>;
-        <T>(defaultValue: lodash.__, path: lodash.__, object: lodash.NumericDictionary<T> | null | undefined): LodashGetOr2x4<T>;
-        <T, TDefault>(defaultValue: TDefault, path: lodash.__, object: lodash.NumericDictionary<T> | null | undefined): LodashGetOr2x5<T, TDefault>;
-        <T>(defaultValue: lodash.__, path: number, object: lodash.NumericDictionary<T> | null | undefined): LodashGetOr2x6<T>;
-        <T, TDefault>(defaultValue: TDefault, path: number, object: lodash.NumericDictionary<T> | null | undefined): T | TDefault;
-        (defaultValue: lodash.__, path: lodash.PropertyPath): LodashGetOr3x2;
-        <TDefault>(defaultValue: TDefault, path: lodash.PropertyPath): LodashGetOr3x3<TDefault>;
-        (defaultValue: lodash.__, path: lodash.__, object: null | undefined): LodashGetOr3x4;
-        <TDefault>(defaultValue: TDefault, path: lodash.__, object: null | undefined): LodashGetOr3x5<TDefault>;
-        (defaultValue: lodash.__, path: lodash.PropertyPath, object: null | undefined): LodashGetOr3x6;
-        <TDefault>(defaultValue: TDefault, path: lodash.PropertyPath, object: null | undefined): TDefault;
-        (defaultValue: any): LodashGetOr4x1;
-        (defaultValue: any, path: lodash.PropertyPath): LodashGetOr4x3;
-        (defaultValue: lodash.__, path: lodash.__, object: any): LodashGetOr4x4;
-        (defaultValue: any, path: lodash.__, object: any): LodashGetOr4x5;
-        (defaultValue: lodash.__, path: lodash.PropertyPath, object: any): LodashGetOr4x6;
-        (defaultValue: any, path: lodash.PropertyPath, object: any): any;
-    }
-    interface LodashGetOr1x1<TDefault> {
-        <TObject extends object, TKey extends keyof TObject>(path: TKey | [TKey]): LodashGetOr1x3<TObject, TKey, TDefault>;
-        <TObject extends object>(path: lodash.__, object: TObject | null | undefined): LodashGetOr1x5<TObject, TDefault>;
-        <TObject extends object, TKey extends keyof TObject>(path: TKey | [TKey], object: TObject | null | undefined): TObject[TKey] | TDefault;
-        (path: number): LodashGetOr2x3<TDefault>;
-        <T>(path: lodash.__, object: lodash.NumericDictionary<T> | null | undefined): LodashGetOr2x5<T, TDefault>;
-        <T>(path: number, object: lodash.NumericDictionary<T> | null | undefined): T | TDefault;
-        (path: lodash.PropertyPath): LodashGetOr3x3<TDefault>;
-        (path: lodash.__, object: null | undefined): LodashGetOr3x5<TDefault>;
-        (path: lodash.PropertyPath, object: null | undefined): TDefault;
-    }
-    interface LodashGetOr1x2<TObject, TKey extends keyof TObject> {
-        <TDefault>(defaultValue: TDefault): LodashGetOr1x3<TObject, TKey, TDefault>;
-        (defaultValue: lodash.__, object: TObject | null | undefined): LodashGetOr1x6<TObject, TKey>;
-        <TDefault>(defaultValue: TDefault, object: TObject | null | undefined): TObject[TKey] | TDefault;
-    }
-    type LodashGetOr1x3<TObject, TKey extends keyof TObject, TDefault> = (object: TObject | null | undefined) => TObject[TKey] | TDefault;
-    interface LodashGetOr1x4<TObject> {
-        <TDefault>(defaultValue: TDefault): LodashGetOr1x5<TObject, TDefault>;
-        <TKey extends keyof TObject>(defaultValue: lodash.__, path: TKey | [TKey]): LodashGetOr1x6<TObject, TKey>;
-        <TKey extends keyof TObject, TDefault>(defaultValue: TDefault, path: TKey | [TKey]): TObject[TKey] | TDefault;
-    }
-    type LodashGetOr1x5<TObject, TDefault> = <TKey extends keyof TObject>(path: TKey | [TKey]) => TObject[TKey] | TDefault;
-    type LodashGetOr1x6<TObject, TKey extends keyof TObject> = <TDefault>(defaultValue: TDefault) => TObject[TKey] | TDefault;
-    interface LodashGetOr2x2 {
-        <TDefault>(defaultValue: TDefault): LodashGetOr2x3<TDefault>;
-        <T>(defaultValue: lodash.__, object: lodash.NumericDictionary<T> | null | undefined): LodashGetOr2x6<T>;
-        <T, TDefault>(defaultValue: TDefault, object: lodash.NumericDictionary<T> | null | undefined): T | TDefault;
-    }
-    type LodashGetOr2x3<TDefault> = <T>(object: lodash.NumericDictionary<T> | null | undefined) => T | TDefault;
-    interface LodashGetOr2x4<T> {
-        <TDefault>(defaultValue: TDefault): LodashGetOr2x5<T, TDefault>;
-        (defaultValue: lodash.__, path: number): LodashGetOr2x6<T>;
-        <TDefault>(defaultValue: TDefault, path: number): T | TDefault;
-    }
-    type LodashGetOr2x5<T, TDefault> = (path: number) => T | TDefault;
-    type LodashGetOr2x6<T> = <TDefault>(defaultValue: TDefault) => T | TDefault;
-    interface LodashGetOr3x2 {
-        <TDefault>(defaultValue: TDefault): LodashGetOr3x3<TDefault>;
-        (defaultValue: lodash.__, object: null | undefined): LodashGetOr3x6;
-        <TDefault>(defaultValue: TDefault, object: null | undefined): TDefault;
-        (defaultValue: any): LodashGetOr4x3;
-        (defaultValue: lodash.__, object: any): LodashGetOr4x6;
-        (defaultValue: any, object: any): any;
-    }
-    type LodashGetOr3x3<TDefault> = (object: null | undefined) => TDefault;
-    interface LodashGetOr3x4 {
-        <TDefault>(defaultValue: TDefault): LodashGetOr3x5<TDefault>;
-        (defaultValue: lodash.__, path: lodash.PropertyPath): LodashGetOr3x6;
-        <TDefault>(defaultValue: TDefault, path: lodash.PropertyPath): TDefault;
-    }
-    type LodashGetOr3x5<TDefault> = (path: lodash.PropertyPath) => TDefault;
-    type LodashGetOr3x6 = <TDefault>(defaultValue: TDefault) => TDefault;
-    interface LodashGetOr4x1 {
-        (path: lodash.PropertyPath): LodashGetOr4x3;
-        (path: lodash.__, object: any): LodashGetOr4x5;
-        (path: lodash.PropertyPath, object: any): any;
-    }
-    type LodashGetOr4x3 = (object: any) => any;
-    interface LodashGetOr4x4 {
-        (defaultValue: any): LodashGetOr4x5;
-        (defaultValue: lodash.__, path: lodash.PropertyPath): LodashGetOr4x6;
-        (defaultValue: any, path: lodash.PropertyPath): any;
-    }
-    type LodashGetOr4x5 = (path: lodash.PropertyPath) => any;
-    type LodashGetOr4x6 = (defaultValue: any) => any;
-    interface LodashGroupBy {
-        <T>(iteratee: lodash.ValueIteratee<T>): LodashGroupBy1x1<T>;
-        <T>(iteratee: lodash.__, collection: lodash.List<T> | null | undefined): LodashGroupBy1x2<T>;
-        <T>(iteratee: lodash.ValueIteratee<T>, collection: lodash.List<T> | null | undefined): lodash.Dictionary<T[]>;
-        <T extends object>(iteratee: lodash.__, collection: T | null | undefined): LodashGroupBy2x2<T>;
-        <T extends object>(iteratee: lodash.ValueIteratee<T[keyof T]>, collection: T | null | undefined): lodash.Dictionary<Array<T[keyof T]>>;
-    }
-    type LodashGroupBy1x1<T> = (collection: lodash.List<T> | object | null | undefined) => lodash.Dictionary<T[]>;
-    type LodashGroupBy1x2<T> = (iteratee: lodash.ValueIteratee<T>) => lodash.Dictionary<T[]>;
-    type LodashGroupBy2x2<T> = (iteratee: lodash.ValueIteratee<T[keyof T]>) => lodash.Dictionary<Array<T[keyof T]>>;
-    interface LodashGt {
-        (value: any): LodashGt1x1;
-        (value: lodash.__, other: any): LodashGt1x2;
-        (value: any, other: any): boolean;
-    }
-    type LodashGt1x1 = (other: any) => boolean;
-    type LodashGt1x2 = (value: any) => boolean;
-    interface LodashGte {
-        (value: any): LodashGte1x1;
-        (value: lodash.__, other: any): LodashGte1x2;
-        (value: any, other: any): boolean;
-    }
-    type LodashGte1x1 = (other: any) => boolean;
-    type LodashGte1x2 = (value: any) => boolean;
-    interface LodashHas {
-        (path: lodash.PropertyPath): LodashHas1x1;
-        <T>(path: lodash.__, object: T): LodashHas1x2;
-        <T>(path: lodash.PropertyPath, object: T): boolean;
-    }
-    type LodashHas1x1 = <T>(object: T) => boolean;
-    type LodashHas1x2 = (path: lodash.PropertyPath) => boolean;
-    interface LodashHasIn {
-        (path: lodash.PropertyPath): LodashHasIn1x1;
-        <T>(path: lodash.__, object: T): LodashHasIn1x2;
-        <T>(path: lodash.PropertyPath, object: T): boolean;
-    }
-    type LodashHasIn1x1 = <T>(object: T) => boolean;
-    type LodashHasIn1x2 = (path: lodash.PropertyPath) => boolean;
-    interface LodashIdentity {
-        <T>(value: T): T;
-        (): undefined;
-    }
-    interface LodashIncludes {
-        <T>(target: T): LodashIncludes1x1<T>;
-        <T>(target: lodash.__, collection: lodash.List<T> | lodash.Dictionary<T> | lodash.NumericDictionary<T> | null | undefined): LodashIncludes1x2<T>;
-        <T>(target: T, collection: lodash.List<T> | lodash.Dictionary<T> | lodash.NumericDictionary<T> | null | undefined): boolean;
-    }
-    type LodashIncludes1x1<T> = (collection: lodash.List<T> | lodash.Dictionary<T> | lodash.NumericDictionary<T> | null | undefined) => boolean;
-    type LodashIncludes1x2<T> = (target: T) => boolean;
-    interface LodashIncludesFrom {
-        <T>(target: T): LodashIncludesFrom1x1<T>;
-        (target: lodash.__, fromIndex: number): LodashIncludesFrom1x2;
-        <T>(target: T, fromIndex: number): LodashIncludesFrom1x3<T>;
-        <T>(target: lodash.__, fromIndex: lodash.__, collection: lodash.List<T> | lodash.Dictionary<T> | lodash.NumericDictionary<T> | null | undefined): LodashIncludesFrom1x4<T>;
-        <T>(target: T, fromIndex: lodash.__, collection: lodash.List<T> | lodash.Dictionary<T> | lodash.NumericDictionary<T> | null | undefined): LodashIncludesFrom1x5;
-        <T>(target: lodash.__, fromIndex: number, collection: lodash.List<T> | lodash.Dictionary<T> | lodash.NumericDictionary<T> | null | undefined): LodashIncludesFrom1x6<T>;
-        <T>(target: T, fromIndex: number, collection: lodash.List<T> | lodash.Dictionary<T> | lodash.NumericDictionary<T> | null | undefined): boolean;
-    }
-    interface LodashIncludesFrom1x1<T> {
-        (fromIndex: number): LodashIncludesFrom1x3<T>;
-        (fromIndex: lodash.__, collection: lodash.List<T> | lodash.Dictionary<T> | lodash.NumericDictionary<T> | null | undefined): LodashIncludesFrom1x5;
-        (fromIndex: number, collection: lodash.List<T> | lodash.Dictionary<T> | lodash.NumericDictionary<T> | null | undefined): boolean;
-    }
-    interface LodashIncludesFrom1x2 {
-        <T>(target: T): LodashIncludesFrom1x3<T>;
-        <T>(target: lodash.__, collection: lodash.List<T> | lodash.Dictionary<T> | lodash.NumericDictionary<T> | null | undefined): LodashIncludesFrom1x6<T>;
-        <T>(target: T, collection: lodash.List<T> | lodash.Dictionary<T> | lodash.NumericDictionary<T> | null | undefined): boolean;
-    }
-    type LodashIncludesFrom1x3<T> = (collection: lodash.List<T> | lodash.Dictionary<T> | lodash.NumericDictionary<T> | null | undefined) => boolean;
-    interface LodashIncludesFrom1x4<T> {
-        (target: T): LodashIncludesFrom1x5;
-        (target: lodash.__, fromIndex: number): LodashIncludesFrom1x6<T>;
-        (target: T, fromIndex: number): boolean;
-    }
-    type LodashIncludesFrom1x5 = (fromIndex: number) => boolean;
-    type LodashIncludesFrom1x6<T> = (target: T) => boolean;
-    interface LodashKeyBy {
-        <T>(iteratee: lodash.ValueIterateeCustom<T, lodash.PropertyName>): LodashKeyBy1x1<T>;
-        <T>(iteratee: lodash.__, collection: lodash.List<T> | null | undefined): LodashKeyBy1x2<T>;
-        <T>(iteratee: lodash.ValueIterateeCustom<T, lodash.PropertyName>, collection: lodash.List<T> | null | undefined): lodash.Dictionary<T>;
-        <T extends object>(iteratee: lodash.__, collection: T | null | undefined): LodashKeyBy2x2<T>;
-        <T extends object>(iteratee: lodash.ValueIterateeCustom<T[keyof T], lodash.PropertyName>, collection: T | null | undefined): lodash.Dictionary<T[keyof T]>;
-    }
-    type LodashKeyBy1x1<T> = (collection: lodash.List<T> | object | null | undefined) => lodash.Dictionary<T>;
-    type LodashKeyBy1x2<T> = (iteratee: lodash.ValueIterateeCustom<T, lodash.PropertyName>) => lodash.Dictionary<T>;
-    type LodashKeyBy2x2<T> = (iteratee: lodash.ValueIterateeCustom<T[keyof T], lodash.PropertyName>) => lodash.Dictionary<T[keyof T]>;
-    interface LodashIndexOf {
-        <T>(value: T): LodashIndexOf1x1<T>;
-        <T>(value: lodash.__, array: lodash.List<T> | null | undefined): LodashIndexOf1x2<T>;
-        <T>(value: T, array: lodash.List<T> | null | undefined): number;
-    }
-    type LodashIndexOf1x1<T> = (array: lodash.List<T> | null | undefined) => number;
-    type LodashIndexOf1x2<T> = (value: T) => number;
-    interface LodashIndexOfFrom {
-        <T>(value: T): LodashIndexOfFrom1x1<T>;
-        (value: lodash.__, fromIndex: number): LodashIndexOfFrom1x2;
-        <T>(value: T, fromIndex: number): LodashIndexOfFrom1x3<T>;
-        <T>(value: lodash.__, fromIndex: lodash.__, array: lodash.List<T> | null | undefined): LodashIndexOfFrom1x4<T>;
-        <T>(value: T, fromIndex: lodash.__, array: lodash.List<T> | null | undefined): LodashIndexOfFrom1x5;
-        <T>(value: lodash.__, fromIndex: number, array: lodash.List<T> | null | undefined): LodashIndexOfFrom1x6<T>;
-        <T>(value: T, fromIndex: number, array: lodash.List<T> | null | undefined): number;
-    }
-    interface LodashIndexOfFrom1x1<T> {
-        (fromIndex: number): LodashIndexOfFrom1x3<T>;
-        (fromIndex: lodash.__, array: lodash.List<T> | null | undefined): LodashIndexOfFrom1x5;
-        (fromIndex: number, array: lodash.List<T> | null | undefined): number;
-    }
-    interface LodashIndexOfFrom1x2 {
-        <T>(value: T): LodashIndexOfFrom1x3<T>;
-        <T>(value: lodash.__, array: lodash.List<T> | null | undefined): LodashIndexOfFrom1x6<T>;
-        <T>(value: T, array: lodash.List<T> | null | undefined): number;
-    }
-    type LodashIndexOfFrom1x3<T> = (array: lodash.List<T> | null | undefined) => number;
-    interface LodashIndexOfFrom1x4<T> {
-        (value: T): LodashIndexOfFrom1x5;
-        (value: lodash.__, fromIndex: number): LodashIndexOfFrom1x6<T>;
-        (value: T, fromIndex: number): number;
-    }
-    type LodashIndexOfFrom1x5 = (fromIndex: number) => number;
-    type LodashIndexOfFrom1x6<T> = (value: T) => number;
-    type LodashInitial = <T>(array: lodash.List<T> | null | undefined) => T[];
-    interface LodashInRange {
-        (start: number): LodashInRange1x1;
-        (start: lodash.__, end: number): LodashInRange1x2;
-        (start: number, end: number): LodashInRange1x3;
-        (start: lodash.__, end: lodash.__, n: number): LodashInRange1x4;
-        (start: number, end: lodash.__, n: number): LodashInRange1x5;
-        (start: lodash.__, end: number, n: number): LodashInRange1x6;
-        (start: number, end: number, n: number): boolean;
-    }
-    interface LodashInRange1x1 {
-        (end: number): LodashInRange1x3;
-        (end: lodash.__, n: number): LodashInRange1x5;
-        (end: number, n: number): boolean;
-    }
-    interface LodashInRange1x2 {
-        (start: number): LodashInRange1x3;
-        (start: lodash.__, n: number): LodashInRange1x6;
-        (start: number, n: number): boolean;
-    }
-    type LodashInRange1x3 = (n: number) => boolean;
-    interface LodashInRange1x4 {
-        (start: number): LodashInRange1x5;
-        (start: lodash.__, end: number): LodashInRange1x6;
-        (start: number, end: number): boolean;
-    }
-    type LodashInRange1x5 = (end: number) => boolean;
-    type LodashInRange1x6 = (start: number) => boolean;
-    interface LodashIntersection {
-        <T>(arrays2: lodash.List<T>): LodashIntersection1x1<T>;
-        <T>(arrays2: lodash.__, arrays: lodash.List<T>): LodashIntersection1x2<T>;
-        <T>(arrays2: lodash.List<T>, arrays: lodash.List<T>): T[];
-    }
-    type LodashIntersection1x1<T> = (arrays: lodash.List<T>) => T[];
-    type LodashIntersection1x2<T> = (arrays2: lodash.List<T>) => T[];
-    interface LodashIntersectionBy {
-        <T1, T2>(iteratee: lodash.ValueIteratee<T1 | T2>): LodashIntersectionBy1x1<T1, T2>;
-        <T1>(iteratee: lodash.__, array: lodash.List<T1> | null): LodashIntersectionBy1x2<T1>;
-        <T1, T2>(iteratee: lodash.ValueIteratee<T1 | T2>, array: lodash.List<T1> | null): LodashIntersectionBy1x3<T1, T2>;
-        <T2>(iteratee: lodash.__, array: lodash.__, values: lodash.List<T2>): LodashIntersectionBy1x4<T2>;
-        <T1, T2>(iteratee: lodash.ValueIteratee<T1 | T2>, array: lodash.__, values: lodash.List<T2>): LodashIntersectionBy1x5<T1>;
-        <T1, T2>(iteratee: lodash.__, array: lodash.List<T1> | null, values: lodash.List<T2>): LodashIntersectionBy1x6<T1, T2>;
-        <T1, T2>(iteratee: lodash.ValueIteratee<T1 | T2>, array: lodash.List<T1> | null, values: lodash.List<T2>): T1[];
-    }
-    interface LodashIntersectionBy1x1<T1, T2> {
-        (array: lodash.List<T1> | null): LodashIntersectionBy1x3<T1, T2>;
-        (array: lodash.__, values: lodash.List<T2>): LodashIntersectionBy1x5<T1>;
-        (array: lodash.List<T1> | null, values: lodash.List<T2>): T1[];
-    }
-    interface LodashIntersectionBy1x2<T1> {
-        <T2>(iteratee: lodash.ValueIteratee<T1 | T2>): LodashIntersectionBy1x3<T1, T2>;
-        <T2>(iteratee: lodash.__, values: lodash.List<T2>): LodashIntersectionBy1x6<T1, T2>;
-        <T2>(iteratee: lodash.ValueIteratee<T1 | T2>, values: lodash.List<T2>): T1[];
-    }
-    type LodashIntersectionBy1x3<T1, T2> = (values: lodash.List<T2>) => T1[];
-    interface LodashIntersectionBy1x4<T2> {
-        <T1>(iteratee: lodash.ValueIteratee<T1 | T2>): LodashIntersectionBy1x5<T1>;
-        <T1>(iteratee: lodash.__, array: lodash.List<T1> | null): LodashIntersectionBy1x6<T1, T2>;
-        <T1>(iteratee: lodash.ValueIteratee<T1 | T2>, array: lodash.List<T1> | null): T1[];
-    }
-    type LodashIntersectionBy1x5<T1> = (array: lodash.List<T1> | null) => T1[];
-    type LodashIntersectionBy1x6<T1, T2> = (iteratee: lodash.ValueIteratee<T1 | T2>) => T1[];
-    interface LodashIntersectionWith {
-        <T1, T2>(comparator: lodash.Comparator2<T1, T2>): LodashIntersectionWith1x1<T1, T2>;
-        <T1>(comparator: lodash.__, array: lodash.List<T1> | null | undefined): LodashIntersectionWith1x2<T1>;
-        <T1, T2>(comparator: lodash.Comparator2<T1, T2>, array: lodash.List<T1> | null | undefined): LodashIntersectionWith1x3<T1, T2>;
-        <T2>(comparator: lodash.__, array: lodash.__, values: lodash.List<T2>): LodashIntersectionWith1x4<T2>;
-        <T1, T2>(comparator: lodash.Comparator2<T1, T2>, array: lodash.__, values: lodash.List<T2>): LodashIntersectionWith1x5<T1>;
-        <T1, T2>(comparator: lodash.__, array: lodash.List<T1> | null | undefined, values: lodash.List<T2>): LodashIntersectionWith1x6<T1, T2>;
-        <T1, T2>(comparator: lodash.Comparator2<T1, T2>, array: lodash.List<T1> | null | undefined, values: lodash.List<T2>): T1[];
-    }
-    interface LodashIntersectionWith1x1<T1, T2> {
-        (array: lodash.List<T1> | null | undefined): LodashIntersectionWith1x3<T1, T2>;
-        (array: lodash.__, values: lodash.List<T2>): LodashIntersectionWith1x5<T1>;
-        (array: lodash.List<T1> | null | undefined, values: lodash.List<T2>): T1[];
-    }
-    interface LodashIntersectionWith1x2<T1> {
-        <T2>(comparator: lodash.Comparator2<T1, T2>): LodashIntersectionWith1x3<T1, T2>;
-        <T2>(comparator: lodash.__, values: lodash.List<T2>): LodashIntersectionWith1x6<T1, T2>;
-        <T2>(comparator: lodash.Comparator2<T1, T2>, values: lodash.List<T2>): T1[];
-    }
-    type LodashIntersectionWith1x3<T1, T2> = (values: lodash.List<T2>) => T1[];
-    interface LodashIntersectionWith1x4<T2> {
-        <T1>(comparator: lodash.Comparator2<T1, T2>): LodashIntersectionWith1x5<T1>;
-        <T1>(comparator: lodash.__, array: lodash.List<T1> | null | undefined): LodashIntersectionWith1x6<T1, T2>;
-        <T1>(comparator: lodash.Comparator2<T1, T2>, array: lodash.List<T1> | null | undefined): T1[];
-    }
-    type LodashIntersectionWith1x5<T1> = (array: lodash.List<T1> | null | undefined) => T1[];
-    type LodashIntersectionWith1x6<T1, T2> = (comparator: lodash.Comparator2<T1, T2>) => T1[];
-    type LodashInvert = (object: object) => lodash.Dictionary<string>;
-    interface LodashInvertBy {
-        <T>(interatee: lodash.ValueIteratee<T>): LodashInvertBy1x1<T>;
-        <T>(interatee: lodash.__, object: lodash.List<T> | lodash.Dictionary<T> | lodash.NumericDictionary<T> | null | undefined): LodashInvertBy1x2<T>;
-        <T>(interatee: lodash.ValueIteratee<T>, object: lodash.List<T> | lodash.Dictionary<T> | lodash.NumericDictionary<T> | null | undefined): lodash.Dictionary<string[]>;
-        <T extends object>(interatee: lodash.__, object: T | null | undefined): LodashInvertBy2x2<T>;
-        <T extends object>(interatee: lodash.ValueIteratee<T[keyof T]>, object: T | null | undefined): lodash.Dictionary<string[]>;
-    }
-    type LodashInvertBy1x1<T> = (object: lodash.List<T> | lodash.Dictionary<T> | lodash.NumericDictionary<T> | object | null | undefined) => lodash.Dictionary<string[]>;
-    type LodashInvertBy1x2<T> = (interatee: lodash.ValueIteratee<T>) => lodash.Dictionary<string[]>;
-    type LodashInvertBy2x2<T> = (interatee: lodash.ValueIteratee<T[keyof T]>) => lodash.Dictionary<string[]>;
-    interface LodashInvoke {
-        (path: lodash.PropertyPath): LodashInvoke1x1;
-        (path: lodash.__, object: any): LodashInvoke1x2;
-        (path: lodash.PropertyPath, object: any): any;
-    }
-    type LodashInvoke1x1 = (object: any) => any;
-    type LodashInvoke1x2 = (path: lodash.PropertyPath) => any;
-    interface LodashInvokeArgs {
-        (path: lodash.PropertyPath): LodashInvokeArgs1x1;
-        (path: lodash.__, args: ReadonlyArray<any>): LodashInvokeArgs1x2;
-        (path: lodash.PropertyPath, args: ReadonlyArray<any>): LodashInvokeArgs1x3;
-        (path: lodash.__, args: lodash.__, object: any): LodashInvokeArgs1x4;
-        (path: lodash.PropertyPath, args: lodash.__, object: any): LodashInvokeArgs1x5;
-        (path: lodash.__, args: ReadonlyArray<any>, object: any): LodashInvokeArgs1x6;
-        (path: lodash.PropertyPath, args: ReadonlyArray<any>, object: any): any;
-    }
-    interface LodashInvokeArgs1x1 {
-        (args: ReadonlyArray<any>): LodashInvokeArgs1x3;
-        (args: lodash.__, object: any): LodashInvokeArgs1x5;
-        (args: ReadonlyArray<any>, object: any): any;
-    }
-    interface LodashInvokeArgs1x2 {
-        (path: lodash.PropertyPath): LodashInvokeArgs1x3;
-        (path: lodash.__, object: any): LodashInvokeArgs1x6;
-        (path: lodash.PropertyPath, object: any): any;
-    }
-    type LodashInvokeArgs1x3 = (object: any) => any;
-    interface LodashInvokeArgs1x4 {
-        (path: lodash.PropertyPath): LodashInvokeArgs1x5;
-        (path: lodash.__, args: ReadonlyArray<any>): LodashInvokeArgs1x6;
-        (path: lodash.PropertyPath, args: ReadonlyArray<any>): any;
-    }
-    type LodashInvokeArgs1x5 = (args: ReadonlyArray<any>) => any;
-    type LodashInvokeArgs1x6 = (path: lodash.PropertyPath) => any;
-    interface LodashInvokeArgsMap {
-        (methodName: string): LodashInvokeArgsMap1x1;
-        (methodNameOrMethod: lodash.__, args: ReadonlyArray<any>): LodashInvokeArgsMap1x2;
-        (methodName: string, args: ReadonlyArray<any>): LodashInvokeArgsMap1x3;
-        (methodNameOrMethod: lodash.__, args: lodash.__, collection: object | null | undefined): LodashInvokeArgsMap1x4;
-        (methodName: string, args: lodash.__, collection: object | null | undefined): LodashInvokeArgsMap1x5;
-        (methodNameOrMethod: lodash.__, args: ReadonlyArray<any>, collection: object | null | undefined): LodashInvokeArgsMap1x6;
-        (methodName: string, args: ReadonlyArray<any>, collection: object | null | undefined): any[];
-        <TResult>(method: (...args: any[]) => TResult): LodashInvokeArgsMap2x1<TResult>;
-        <TResult>(method: (...args: any[]) => TResult, args: ReadonlyArray<any>): LodashInvokeArgsMap2x3<TResult>;
-        <TResult>(method: (...args: any[]) => TResult, args: lodash.__, collection: object | null | undefined): LodashInvokeArgsMap2x5<TResult>;
-        <TResult>(method: (...args: any[]) => TResult, args: ReadonlyArray<any>, collection: object | null | undefined): TResult[];
-    }
-    interface LodashInvokeArgsMap1x1 {
-        (args: ReadonlyArray<any>): LodashInvokeArgsMap1x3;
-        (args: lodash.__, collection: object | null | undefined): LodashInvokeArgsMap1x5;
-        (args: ReadonlyArray<any>, collection: object | null | undefined): any[];
-    }
-    interface LodashInvokeArgsMap1x2 {
-        (methodName: string): LodashInvokeArgsMap1x3;
-        (methodNameOrMethod: lodash.__, collection: object | null | undefined): LodashInvokeArgsMap1x6;
-        (methodName: string, collection: object | null | undefined): any[];
-        <TResult>(method: (...args: any[]) => TResult): LodashInvokeArgsMap2x3<TResult>;
-        <TResult>(method: (...args: any[]) => TResult, collection: object | null | undefined): TResult[];
-    }
-    type LodashInvokeArgsMap1x3 = (collection: object | null | undefined) => any[];
-    interface LodashInvokeArgsMap1x4 {
-        (methodName: string): LodashInvokeArgsMap1x5;
-        (methodNameOrMethod: lodash.__, args: ReadonlyArray<any>): LodashInvokeArgsMap1x6;
-        (methodName: string, args: ReadonlyArray<any>): any[];
-        <TResult>(method: (...args: any[]) => TResult): LodashInvokeArgsMap2x5<TResult>;
-        <TResult>(method: (...args: any[]) => TResult, args: ReadonlyArray<any>): TResult[];
-    }
-    type LodashInvokeArgsMap1x5 = (args: ReadonlyArray<any>) => any[];
-    interface LodashInvokeArgsMap1x6 {
-        (methodName: string): any[];
-        <TResult>(method: (...args: any[]) => TResult): TResult[];
-    }
-    interface LodashInvokeArgsMap2x1<TResult> {
-        (args: ReadonlyArray<any>): LodashInvokeArgsMap2x3<TResult>;
-        (args: lodash.__, collection: object | null | undefined): LodashInvokeArgsMap2x5<TResult>;
-        (args: ReadonlyArray<any>, collection: object | null | undefined): TResult[];
-    }
-    type LodashInvokeArgsMap2x3<TResult> = (collection: object | null | undefined) => TResult[];
-    type LodashInvokeArgsMap2x5<TResult> = (args: ReadonlyArray<any>) => TResult[];
-    interface LodashInvokeMap {
-        (methodName: string): LodashInvokeMap1x1;
-        (methodNameOrMethod: lodash.__, collection: object | null | undefined): LodashInvokeMap1x2;
-        (methodName: string, collection: object | null | undefined): any[];
-        <TResult>(method: (...args: any[]) => TResult): LodashInvokeMap2x1<TResult>;
-        <TResult>(method: (...args: any[]) => TResult, collection: object | null | undefined): TResult[];
-    }
-    type LodashInvokeMap1x1 = (collection: object | null | undefined) => any[];
-    interface LodashInvokeMap1x2 {
-        (methodName: string): any[];
-        <TResult>(method: (...args: any[]) => TResult): TResult[];
-    }
-    type LodashInvokeMap2x1<TResult> = (collection: object | null | undefined) => TResult[];
-    type LodashIsArguments = (value: any) => value is IArguments;
-    type LodashIsArray = (value: any) => value is any[];
-    type LodashIsArrayBuffer = (value: any) => value is ArrayBuffer;
-    interface LodashIsArrayLike {
-        <T>(value: T & string & number): boolean;
-        (value: ((...args: any[]) => any) | null | undefined): value is never;
-        (value: any): value is { length: number };
-    }
-    interface LodashIsArrayLikeObject {
-        <T>(value: T & string & number): boolean;
-        // tslint:disable-next-line:ban-types (type guard doesn't seem to work correctly without the Function type)
-        (value: ((...args: any[]) => any) | Function | string | boolean | number | null | undefined): value is never;
-        // tslint:disable-next-line:ban-types (type guard doesn't seem to work correctly without the Function type)
-        <T extends object>(value: T | ((...args: any[]) => any) | Function | string | boolean | number | null | undefined): value is T & { length: number };
-    }
-    type LodashIsBoolean = (value: any) => value is boolean;
-    type LodashIsBuffer = (value: any) => boolean;
-    type LodashIsDate = (value: any) => value is Date;
-    type LodashIsElement = (value: any) => boolean;
-    type LodashIsEmpty = (value: any) => boolean;
-    interface LodashIsEqualWith {
-        (customizer: lodash.IsEqualCustomizer): LodashIsEqualWith1x1;
-        (customizer: lodash.__, value: any): LodashIsEqualWith1x2;
-        (customizer: lodash.IsEqualCustomizer, value: any): LodashIsEqualWith1x3;
-        (customizer: lodash.__, value: lodash.__, other: any): LodashIsEqualWith1x4;
-        (customizer: lodash.IsEqualCustomizer, value: lodash.__, other: any): LodashIsEqualWith1x5;
-        (customizer: lodash.__, value: any, other: any): LodashIsEqualWith1x6;
-        (customizer: lodash.IsEqualCustomizer, value: any, other: any): boolean;
-    }
-    interface LodashIsEqualWith1x1 {
-        (value: any): LodashIsEqualWith1x3;
-        (value: lodash.__, other: any): LodashIsEqualWith1x5;
-        (value: any, other: any): boolean;
-    }
-    interface LodashIsEqualWith1x2 {
-        (customizer: lodash.IsEqualCustomizer): LodashIsEqualWith1x3;
-        (customizer: lodash.__, other: any): LodashIsEqualWith1x6;
-        (customizer: lodash.IsEqualCustomizer, other: any): boolean;
-    }
-    type LodashIsEqualWith1x3 = (other: any) => boolean;
-    interface LodashIsEqualWith1x4 {
-        (customizer: lodash.IsEqualCustomizer): LodashIsEqualWith1x5;
-        (customizer: lodash.__, value: any): LodashIsEqualWith1x6;
-        (customizer: lodash.IsEqualCustomizer, value: any): boolean;
-    }
-    type LodashIsEqualWith1x5 = (value: any) => boolean;
-    type LodashIsEqualWith1x6 = (customizer: lodash.IsEqualCustomizer) => boolean;
-    type LodashIsError = (value: any) => value is Error;
-    type LodashIsFinite = (value: any) => boolean;
-    type LodashIsFunction = (value: any) => value is (...args: any[]) => any;
-    type LodashIsInteger = (value: any) => boolean;
-    type LodashIsLength = (value: any) => boolean;
-    type LodashIsMap = (value: any) => value is Map<any, any>;
-    interface LodashIsMatch {
-        (source: object): LodashIsMatch1x1;
-        (source: lodash.__, object: object): LodashIsMatch1x2;
-        (source: object, object: object): boolean;
-    }
-    type LodashIsMatch1x1 = (object: object) => boolean;
-    type LodashIsMatch1x2 = (source: object) => boolean;
-    interface LodashIsMatchWith {
-        (customizer: lodash.isMatchWithCustomizer): LodashIsMatchWith1x1;
-        (customizer: lodash.__, source: object): LodashIsMatchWith1x2;
-        (customizer: lodash.isMatchWithCustomizer, source: object): LodashIsMatchWith1x3;
-        (customizer: lodash.__, source: lodash.__, object: object): LodashIsMatchWith1x4;
-        (customizer: lodash.isMatchWithCustomizer, source: lodash.__, object: object): LodashIsMatchWith1x5;
-        (customizer: lodash.__, source: object, object: object): LodashIsMatchWith1x6;
-        (customizer: lodash.isMatchWithCustomizer, source: object, object: object): boolean;
-    }
-    interface LodashIsMatchWith1x1 {
-        (source: object): LodashIsMatchWith1x3;
-        (source: lodash.__, object: object): LodashIsMatchWith1x5;
-        (source: object, object: object): boolean;
-    }
-    interface LodashIsMatchWith1x2 {
-        (customizer: lodash.isMatchWithCustomizer): LodashIsMatchWith1x3;
-        (customizer: lodash.__, object: object): LodashIsMatchWith1x6;
-        (customizer: lodash.isMatchWithCustomizer, object: object): boolean;
-    }
-    type LodashIsMatchWith1x3 = (object: object) => boolean;
-    interface LodashIsMatchWith1x4 {
-        (customizer: lodash.isMatchWithCustomizer): LodashIsMatchWith1x5;
-        (customizer: lodash.__, source: object): LodashIsMatchWith1x6;
-        (customizer: lodash.isMatchWithCustomizer, source: object): boolean;
-    }
-    type LodashIsMatchWith1x5 = (source: object) => boolean;
-    type LodashIsMatchWith1x6 = (customizer: lodash.isMatchWithCustomizer) => boolean;
-    type LodashIsNaN = (value: any) => boolean;
-    type LodashIsNative = (value: any) => value is (...args: any[]) => any;
-    type LodashIsNil = (value: any) => value is null | undefined;
-    type LodashIsNull = (value: any) => value is null;
-    type LodashIsNumber = (value: any) => value is number;
-    type LodashIsObject = (value: any) => boolean;
-    type LodashIsObjectLike = (value: any) => boolean;
-    type LodashIsPlainObject = (value: any) => boolean;
-    type LodashIsRegExp = (value: any) => value is RegExp;
-    type LodashIsSafeInteger = (value: any) => boolean;
-    type LodashIsSet = (value: any) => value is Set<any>;
-    type LodashIsString = (value: any) => value is string;
-    type LodashIsSymbol = (value: any) => boolean;
-    type LodashIsTypedArray = (value: any) => boolean;
-    type LodashIsUndefined = (value: any) => value is undefined;
-    type LodashIsWeakMap = (value: any) => value is WeakMap<object, any>;
-    type LodashIsWeakSet = (value: any) => value is WeakSet<object>;
-    interface LodashIteratee {
-        <TFunction extends (...args: any[]) => any>(func: TFunction): TFunction;
-        (func: string | object): (...args: any[]) => any;
-    }
-    interface LodashJoin {
-        (separator: string): LodashJoin1x1;
-        (separator: lodash.__, array: lodash.List<any> | null | undefined): LodashJoin1x2;
-        (separator: string, array: lodash.List<any> | null | undefined): string;
-    }
-    type LodashJoin1x1 = (array: lodash.List<any> | null | undefined) => string;
-    type LodashJoin1x2 = (separator: string) => string;
-    type LodashOver = <TResult>(iteratees: lodash.Many<(...args: any[]) => TResult>) => (...args: any[]) => TResult[];
-    type LodashKebabCase = (string: string) => string;
-    type LodashKeys = (object: any) => string[];
-    type LodashKeysIn = (object: any) => string[];
-    type LodashLast = <T>(array: lodash.List<T> | null | undefined) => T | undefined;
-    interface LodashLastIndexOf {
-        <T>(value: T): LodashLastIndexOf1x1<T>;
-        <T>(value: lodash.__, array: lodash.List<T> | null | undefined): LodashLastIndexOf1x2<T>;
-        <T>(value: T, array: lodash.List<T> | null | undefined): number;
-    }
-    type LodashLastIndexOf1x1<T> = (array: lodash.List<T> | null | undefined) => number;
-    type LodashLastIndexOf1x2<T> = (value: T) => number;
-    interface LodashLastIndexOfFrom {
-        <T>(value: T): LodashLastIndexOfFrom1x1<T>;
-        (value: lodash.__, fromIndex: true|number): LodashLastIndexOfFrom1x2;
-        <T>(value: T, fromIndex: true|number): LodashLastIndexOfFrom1x3<T>;
-        <T>(value: lodash.__, fromIndex: lodash.__, array: lodash.List<T> | null | undefined): LodashLastIndexOfFrom1x4<T>;
-        <T>(value: T, fromIndex: lodash.__, array: lodash.List<T> | null | undefined): LodashLastIndexOfFrom1x5;
-        <T>(value: lodash.__, fromIndex: true|number, array: lodash.List<T> | null | undefined): LodashLastIndexOfFrom1x6<T>;
-        <T>(value: T, fromIndex: true|number, array: lodash.List<T> | null | undefined): number;
-    }
-    interface LodashLastIndexOfFrom1x1<T> {
-        (fromIndex: true|number): LodashLastIndexOfFrom1x3<T>;
-        (fromIndex: lodash.__, array: lodash.List<T> | null | undefined): LodashLastIndexOfFrom1x5;
-        (fromIndex: true|number, array: lodash.List<T> | null | undefined): number;
-    }
-    interface LodashLastIndexOfFrom1x2 {
-        <T>(value: T): LodashLastIndexOfFrom1x3<T>;
-        <T>(value: lodash.__, array: lodash.List<T> | null | undefined): LodashLastIndexOfFrom1x6<T>;
-        <T>(value: T, array: lodash.List<T> | null | undefined): number;
-    }
-    type LodashLastIndexOfFrom1x3<T> = (array: lodash.List<T> | null | undefined) => number;
-    interface LodashLastIndexOfFrom1x4<T> {
-        (value: T): LodashLastIndexOfFrom1x5;
-        (value: lodash.__, fromIndex: true|number): LodashLastIndexOfFrom1x6<T>;
-        (value: T, fromIndex: true|number): number;
-    }
-    type LodashLastIndexOfFrom1x5 = (fromIndex: true|number) => number;
-    type LodashLastIndexOfFrom1x6<T> = (value: T) => number;
-    type LodashLowerCase = (string: string) => string;
-    type LodashLowerFirst = (string: string) => string;
-    interface LodashLt {
-        (value: any): LodashLt1x1;
-        (value: lodash.__, other: any): LodashLt1x2;
-        (value: any, other: any): boolean;
-    }
-    type LodashLt1x1 = (other: any) => boolean;
-    type LodashLt1x2 = (value: any) => boolean;
-    interface LodashLte {
-        (value: any): LodashLte1x1;
-        (value: lodash.__, other: any): LodashLte1x2;
-        (value: any, other: any): boolean;
-    }
-    type LodashLte1x1 = (other: any) => boolean;
-    type LodashLte1x2 = (value: any) => boolean;
-    interface LodashMap {
-        <T, TResult>(iteratee: (value: T) => TResult): LodashMap1x1<T, TResult>;
-        <T>(iteratee: lodash.__, collection: T[] | null | undefined): LodashMap1x2<T>;
-        <T, TResult>(iteratee: (value: T) => TResult, collection: T[] | lodash.List<T> | null | undefined): TResult[];
-        <T>(iteratee: lodash.__, collection: lodash.List<T> | null | undefined): LodashMap2x2<T>;
-        <T extends object, TResult>(iteratee: (value: T[keyof T]) => TResult): LodashMap3x1<T, TResult>;
-        <T extends object>(iteratee: lodash.__, collection: T | null | undefined): LodashMap3x2<T>;
-        <T extends object, TResult>(iteratee: (value: T[keyof T]) => TResult, collection: T | null | undefined): TResult[];
-        <T, K extends keyof T>(iteratee: K): LodashMap4x1<T, K>;
-        <T>(iteratee: lodash.__, collection: lodash.List<T> | lodash.Dictionary<T> | lodash.NumericDictionary<T> | null | undefined): LodashMap4x2<T>;
-        <T, K extends keyof T>(iteratee: K, collection: lodash.List<T> | lodash.Dictionary<T> | lodash.NumericDictionary<T> | null | undefined): Array<T[K]>;
-        (iteratee: string): LodashMap5x1;
-        <T>(iteratee: string, collection: lodash.List<T> | lodash.Dictionary<T> | lodash.NumericDictionary<T> | null | undefined): any[];
-        (iteratee: object): LodashMap6x1;
-        <T>(iteratee: object, collection: lodash.List<T> | lodash.Dictionary<T> | lodash.NumericDictionary<T> | null | undefined): boolean[];
-    }
-    type LodashMap1x1<T, TResult> = (collection: T[] | lodash.List<T> | null | undefined) => TResult[];
-    type LodashMap1x2<T> = <TResult>(iteratee: (value: T) => TResult) => TResult[];
-    type LodashMap2x2<T> = <TResult>(iteratee: (value: T) => TResult) => TResult[];
-    type LodashMap3x1<T, TResult> = (collection: T | null | undefined) => TResult[];
-    type LodashMap3x2<T> = <TResult>(iteratee: (value: T[keyof T]) => TResult) => TResult[];
-    type LodashMap4x1<T, K extends keyof T> = (collection: lodash.List<T> | lodash.Dictionary<T> | lodash.NumericDictionary<T> | null | undefined) => Array<T[K]>;
-    interface LodashMap4x2<T> {
-        <K extends keyof T>(iteratee: K): Array<T[K]>;
-        (iteratee: string): any[];
-        (iteratee: object): boolean[];
-    }
-    type LodashMap5x1 = <T>(collection: lodash.List<T> | lodash.Dictionary<T> | lodash.NumericDictionary<T> | null | undefined) => any[];
-    type LodashMap6x1 = <T>(collection: lodash.List<T> | lodash.Dictionary<T> | lodash.NumericDictionary<T> | null | undefined) => boolean[];
-    interface LodashMapKeys {
-        (iteratee: lodash.ValueIteratee<number>): LodashMapKeys1x1;
-        <T>(iteratee: lodash.__, object: lodash.List<T> | null | undefined): LodashMapKeys1x2<T>;
-        <T>(iteratee: lodash.ValueIteratee<number>, object: lodash.List<T> | null | undefined): lodash.Dictionary<T>;
-        (iteratee: lodash.ValueIteratee<string>): LodashMapKeys2x1;
-        <T extends object>(iteratee: lodash.__, object: T | null | undefined): LodashMapKeys2x2<T>;
-        <T extends object>(iteratee: lodash.ValueIteratee<string>, object: T | null | undefined): lodash.Dictionary<T[keyof T]>;
-    }
-    type LodashMapKeys1x1 = <T>(object: lodash.List<T> | null | undefined) => lodash.Dictionary<T>;
-    type LodashMapKeys1x2<T> = (iteratee: lodash.ValueIteratee<number>) => lodash.Dictionary<T>;
-    type LodashMapKeys2x1 = <T extends object>(object: T | null | undefined) => lodash.Dictionary<T[keyof T]>;
-    type LodashMapKeys2x2<T> = (iteratee: lodash.ValueIteratee<string>) => lodash.Dictionary<T[keyof T]>;
-    interface LodashMapValues {
-        <TResult>(callback: (value: string) => TResult): LodashMapValues1x1<TResult>;
-        (callback: lodash.__, obj: string | null | undefined): LodashMapValues1x2;
-        <TResult>(callback: (value: string) => TResult, obj: string | null | undefined): lodash.NumericDictionary<TResult>;
-        <T, TResult>(callback: (value: T) => TResult): LodashMapValues2x1<T, TResult>;
-        <T>(callbackOrIterateeOrIterateeOrIteratee: lodash.__, obj: lodash.Dictionary<T> | lodash.NumericDictionary<T> | null | undefined): LodashMapValues2x2<T>;
-        <T, TResult>(callback: (value: T) => TResult, obj: lodash.Dictionary<T> | lodash.NumericDictionary<T> | null | undefined): lodash.Dictionary<TResult>;
-        <T extends object, TResult>(callback: (value: T[keyof T]) => TResult): LodashMapValues3x1<T, TResult>;
-        <T extends object>(callbackOrIterateeOrIteratee: lodash.__, obj: T | null | undefined): LodashMapValues3x2<T>;
-        <T extends object, TResult>(callback: (value: T[keyof T]) => TResult, obj: T | null | undefined): { [P in keyof T]: TResult };
-        (iteratee: object): LodashMapValues4x1;
-        <T>(iteratee: object, obj: lodash.Dictionary<T> | lodash.NumericDictionary<T> | null | undefined): lodash.Dictionary<boolean>;
-        <T extends object>(iteratee: object, obj: T | null | undefined): { [P in keyof T]: boolean };
-        <T, TKey extends keyof T>(iteratee: TKey): LodashMapValues6x1<T, TKey>;
-        <T, TKey extends keyof T>(iteratee: TKey, obj: lodash.Dictionary<T> | lodash.NumericDictionary<T> | null | undefined): lodash.Dictionary<T[TKey]>;
-        (iteratee: string): LodashMapValues7x1;
-        <T>(iteratee: string, obj: lodash.Dictionary<T> | lodash.NumericDictionary<T> | null | undefined): lodash.Dictionary<any>;
-        <T extends object>(iteratee: string, obj: T | null | undefined): { [P in keyof T]: any };
-    }
-    type LodashMapValues1x1<TResult> = (obj: string | null | undefined) => lodash.NumericDictionary<TResult>;
-    type LodashMapValues1x2 = <TResult>(callback: (value: string) => TResult) => lodash.NumericDictionary<TResult>;
-    type LodashMapValues2x1<T, TResult> = (obj: lodash.Dictionary<T> | lodash.NumericDictionary<T> | null | undefined) => lodash.Dictionary<TResult>;
-    interface LodashMapValues2x2<T> {
-        <TResult>(callback: (value: T) => TResult): lodash.Dictionary<TResult>;
-        (iteratee: object): lodash.Dictionary<boolean>;
-        <TKey extends keyof T>(iteratee: TKey): lodash.Dictionary<T[TKey]>;
-        (iteratee: string): lodash.Dictionary<any>;
-    }
-    type LodashMapValues3x1<T, TResult> = (obj: T | null | undefined) => { [P in keyof T]: TResult };
-    interface LodashMapValues3x2<T> {
-        <TResult>(callback: (value: T[keyof T]) => TResult): { [P in keyof T]: TResult };
-        (iteratee: object): { [P in keyof T]: boolean };
-        (iteratee: string): { [P in keyof T]: any };
-    }
-    interface LodashMapValues4x1 {
-        <T>(obj: lodash.Dictionary<T> | lodash.NumericDictionary<T> | null | undefined): lodash.Dictionary<boolean>;
-        <T extends object>(obj: T | null | undefined): { [P in keyof T]: boolean };
-    }
-    type LodashMapValues6x1<T, TKey extends keyof T> = (obj: lodash.Dictionary<T> | lodash.NumericDictionary<T> | null | undefined) => lodash.Dictionary<T[TKey]>;
-    interface LodashMapValues7x1 {
-        <T>(obj: lodash.Dictionary<T> | lodash.NumericDictionary<T> | null | undefined): lodash.Dictionary<any>;
-        <T extends object>(obj: T | null | undefined): { [P in keyof T]: any };
-    }
-    interface LodashMatchesProperty {
-        (path: lodash.PropertyPath): LodashMatchesProperty1x1;
-        <T>(path: lodash.__, srcValue: T): LodashMatchesProperty1x2;
-        <T>(path: lodash.PropertyPath, srcValue: T): (value: any) => boolean;
-    }
-    type LodashMatchesProperty1x1 = <T>(srcValue: T) => (value: any) => boolean;
-    type LodashMatchesProperty1x2 = (path: lodash.PropertyPath) => (value: any) => boolean;
-    type LodashMax = <T>(collection: lodash.List<T> | null | undefined) => T | undefined;
-    interface LodashMaxBy {
-        <T>(iteratee: lodash.ValueIteratee<T>): LodashMaxBy1x1<T>;
-        <T>(iteratee: lodash.__, collection: lodash.List<T> | null | undefined): LodashMaxBy1x2<T>;
-        <T>(iteratee: lodash.ValueIteratee<T>, collection: lodash.List<T> | null | undefined): T | undefined;
-    }
-    type LodashMaxBy1x1<T> = (collection: lodash.List<T> | null | undefined) => T | undefined;
-    type LodashMaxBy1x2<T> = (iteratee: lodash.ValueIteratee<T>) => T | undefined;
-    type LodashMean = (collection: lodash.List<any> | null | undefined) => number;
-    interface LodashMeanBy {
-        <T>(iteratee: lodash.ValueIteratee<T>): LodashMeanBy1x1<T>;
-        <T>(iteratee: lodash.__, collection: lodash.List<T> | null | undefined): LodashMeanBy1x2<T>;
-        <T>(iteratee: lodash.ValueIteratee<T>, collection: lodash.List<T> | null | undefined): number;
-    }
-    type LodashMeanBy1x1<T> = (collection: lodash.List<T> | null | undefined) => number;
-    type LodashMeanBy1x2<T> = (iteratee: lodash.ValueIteratee<T>) => number;
-    type LodashMemoize = <T extends (...args: any[]) => any>(func: T) => T & lodash.MemoizedFunction;
-    interface LodashMerge {
-        <TObject>(object: TObject): LodashMerge1x1<TObject>;
-        <TSource>(object: lodash.__, source: TSource): LodashMerge1x2<TSource>;
-        <TObject, TSource>(object: TObject, source: TSource): TObject & TSource;
-    }
-    type LodashMerge1x1<TObject> = <TSource>(source: TSource) => TObject & TSource;
-    type LodashMerge1x2<TSource> = <TObject>(object: TObject) => TObject & TSource;
-    interface LodashMergeAll {
-        <TObject, TSource>(object: [TObject, TSource]): TObject & TSource;
-        <TObject, TSource1, TSource2>(object: [TObject, TSource1, TSource2]): TObject & TSource1 & TSource2;
-        <TObject, TSource1, TSource2, TSource3>(object: [TObject, TSource1, TSource2, TSource3]): TObject & TSource1 & TSource2 & TSource3;
-        <TObject, TSource1, TSource2, TSource3, TSource4>(object: [TObject, TSource1, TSource2, TSource3, TSource4]): TObject & TSource1 & TSource2 & TSource3 & TSource4;
-        (object: ReadonlyArray<any>): any;
-    }
-    interface LodashMergeAllWith {
-        (customizer: lodash.MergeWithCustomizer): LodashMergeAllWith1x1;
-        (customizer: lodash.__, args: ReadonlyArray<any>): LodashMergeAllWith1x2;
-        (customizer: lodash.MergeWithCustomizer, args: ReadonlyArray<any>): any;
-    }
-    type LodashMergeAllWith1x1 = (args: ReadonlyArray<any>) => any;
-    type LodashMergeAllWith1x2 = (customizer: lodash.MergeWithCustomizer) => any;
-    interface LodashMergeWith {
-        (customizer: lodash.MergeWithCustomizer): LodashMergeWith1x1;
-        <TObject>(customizer: lodash.__, object: TObject): LodashMergeWith1x2<TObject>;
-        <TObject>(customizer: lodash.MergeWithCustomizer, object: TObject): LodashMergeWith1x3<TObject>;
-        <TSource>(customizer: lodash.__, object: lodash.__, source: TSource): LodashMergeWith1x4<TSource>;
-        <TSource>(customizer: lodash.MergeWithCustomizer, object: lodash.__, source: TSource): LodashMergeWith1x5<TSource>;
-        <TObject, TSource>(customizer: lodash.__, object: TObject, source: TSource): LodashMergeWith1x6<TObject, TSource>;
-        <TObject, TSource>(customizer: lodash.MergeWithCustomizer, object: TObject, source: TSource): TObject & TSource;
-    }
-    interface LodashMergeWith1x1 {
-        <TObject>(object: TObject): LodashMergeWith1x3<TObject>;
-        <TSource>(object: lodash.__, source: TSource): LodashMergeWith1x5<TSource>;
-        <TObject, TSource>(object: TObject, source: TSource): TObject & TSource;
-    }
-    interface LodashMergeWith1x2<TObject> {
-        (customizer: lodash.MergeWithCustomizer): LodashMergeWith1x3<TObject>;
-        <TSource>(customizer: lodash.__, source: TSource): LodashMergeWith1x6<TObject, TSource>;
-        <TSource>(customizer: lodash.MergeWithCustomizer, source: TSource): TObject & TSource;
-    }
-    type LodashMergeWith1x3<TObject> = <TSource>(source: TSource) => TObject & TSource;
-    interface LodashMergeWith1x4<TSource> {
-        (customizer: lodash.MergeWithCustomizer): LodashMergeWith1x5<TSource>;
-        <TObject>(customizer: lodash.__, object: TObject): LodashMergeWith1x6<TObject, TSource>;
-        <TObject>(customizer: lodash.MergeWithCustomizer, object: TObject): TObject & TSource;
-    }
-    type LodashMergeWith1x5<TSource> = <TObject>(object: TObject) => TObject & TSource;
-    type LodashMergeWith1x6<TObject, TSource> = (customizer: lodash.MergeWithCustomizer) => TObject & TSource;
-    type LodashMethod = (path: lodash.PropertyPath) => (object: any) => any;
-    type LodashMethodOf = (object: object) => (path: lodash.PropertyPath) => any;
-    type LodashMin = <T>(collection: lodash.List<T> | null | undefined) => T | undefined;
-    interface LodashMinBy {
-        <T>(iteratee: lodash.ValueIteratee<T>): LodashMinBy1x1<T>;
-        <T>(iteratee: lodash.__, collection: lodash.List<T> | null | undefined): LodashMinBy1x2<T>;
-        <T>(iteratee: lodash.ValueIteratee<T>, collection: lodash.List<T> | null | undefined): T | undefined;
-    }
-    type LodashMinBy1x1<T> = (collection: lodash.List<T> | null | undefined) => T | undefined;
-    type LodashMinBy1x2<T> = (iteratee: lodash.ValueIteratee<T>) => T | undefined;
-    interface LodashMultiply {
-        (multiplier: number): LodashMultiply1x1;
-        (multiplier: lodash.__, multiplicand: number): LodashMultiply1x2;
-        (multiplier: number, multiplicand: number): number;
-    }
-    type LodashMultiply1x1 = (multiplicand: number) => number;
-    type LodashMultiply1x2 = (multiplier: number) => number;
-    type LodashNoConflict = () => typeof _;
-    type LodashNoop = (...args: any[]) => void;
-    type LodashNow = () => number;
-    interface LodashNth {
-        (n: number): LodashNth1x1;
-        <T>(n: lodash.__, array: lodash.List<T> | null | undefined): LodashNth1x2<T>;
-        <T>(n: number, array: lodash.List<T> | null | undefined): T | undefined;
-    }
-    type LodashNth1x1 = <T>(array: lodash.List<T> | null | undefined) => T | undefined;
-    type LodashNth1x2<T> = (n: number) => T | undefined;
-    type LodashNthArg = (n: number) => (...args: any[]) => any;
-    interface LodashOmit {
-        (paths: lodash.Many<lodash.PropertyName>): LodashOmit1x1;
-        <T extends lodash.AnyKindOfDictionary>(paths: lodash.__, object: T | null | undefined): LodashOmit1x2<T>;
-        <T extends lodash.AnyKindOfDictionary>(paths: lodash.Many<lodash.PropertyName>, object: T | null | undefined): T;
-        <T extends object, K extends keyof T>(paths: lodash.Many<K>): LodashOmit2x1<T, K>;
-        <T extends object>(paths: lodash.__, object: T | null | undefined): LodashOmit2x2<T>;
-        <T extends object, K extends keyof T>(paths: lodash.Many<K>, object: T | null | undefined): lodash.Omit<T, K>;
-        <T extends object>(paths: lodash.Many<lodash.PropertyName>, object: T | null | undefined): lodash.PartialObject<T>;
-    }
-    interface LodashOmit1x1 {
-        <T extends lodash.AnyKindOfDictionary>(object: T | null | undefined): T;
-        <T extends object>(object: T | null | undefined): lodash.PartialObject<T>;
-    }
-    type LodashOmit1x2<T> = (paths: lodash.Many<lodash.PropertyName>) => T;
-    type LodashOmit2x1<T, K extends keyof T> = (object: T | null | undefined) => lodash.Omit<T, K>;
-    interface LodashOmit2x2<T> {
-        <K extends keyof T>(paths: lodash.Many<K>): lodash.Omit<T, K>;
-        (paths: lodash.Many<lodash.PropertyName>): lodash.PartialObject<T>;
-    }
-    interface LodashOmitBy {
-        <T>(predicate: lodash.ValueKeyIteratee<T>): LodashOmitBy1x1<T>;
-        <T extends object>(predicate: lodash.__, object: T | null | undefined): LodashOmitBy1x2<T>;
-        <T extends object>(predicate: lodash.ValueKeyIteratee<T[keyof T]>, object: T | null | undefined): lodash.PartialObject<T>;
-    }
-    type LodashOmitBy1x1<T> = <T1 extends object>(object: T1 | null | undefined) => lodash.PartialObject<T1>;
-    type LodashOmitBy1x2<T> = (predicate: lodash.ValueKeyIteratee<T[keyof T]>) => lodash.PartialObject<T>;
-    type LodashOnce = <T extends (...args: any[]) => any>(func: T) => T;
-    interface LodashOrderBy {
-        <T>(iteratees: lodash.Many<(value: T) => lodash.NotVoid>): LodashOrderBy1x1<T>;
-        (iteratees: lodash.__, orders: lodash.Many<boolean|string>): LodashOrderBy1x2;
-        <T>(iteratees: lodash.Many<(value: T) => lodash.NotVoid>, orders: lodash.Many<boolean|string>): LodashOrderBy1x3<T>;
-        <T>(iteratees: lodash.__, orders: lodash.__, collection: lodash.List<T> | null | undefined): LodashOrderBy1x4<T>;
-        <T>(iteratees: lodash.Many<(value: T) => lodash.NotVoid>, orders: lodash.__, collection: lodash.List<T> | null | undefined): LodashOrderBy1x5<T>;
-        <T>(iteratees: lodash.__, orders: lodash.Many<boolean|string>, collection: lodash.List<T> | null | undefined): LodashOrderBy1x6<T>;
-        <T>(iteratees: lodash.Many<(value: T) => lodash.NotVoid> | lodash.Many<lodash.ValueIteratee<T>>, orders: lodash.Many<boolean | string>, collection: lodash.List<T> | null | undefined): T[];
-        <T>(iteratees: lodash.Many<lodash.ValueIteratee<T>>): LodashOrderBy2x1<T>;
-        <T>(iteratees: lodash.Many<lodash.ValueIteratee<T>>, orders: lodash.Many<boolean|string>): LodashOrderBy2x3<T>;
-        <T>(iteratees: lodash.Many<lodash.ValueIteratee<T>>, orders: lodash.__, collection: lodash.List<T> | null | undefined): LodashOrderBy2x5<T>;
-        <T extends object>(iteratees: lodash.__, orders: lodash.__, collection: T | null | undefined): LodashOrderBy3x4<T>;
-        <T extends object>(iteratees: lodash.Many<(value: T[keyof T]) => lodash.NotVoid>, orders: lodash.__, collection: T | null | undefined): LodashOrderBy3x5<T>;
-        <T extends object>(iteratees: lodash.__, orders: lodash.Many<boolean|string>, collection: T | null | undefined): LodashOrderBy3x6<T>;
-        <T extends object>(iteratees: lodash.Many<(value: T[keyof T]) => lodash.NotVoid> | lodash.Many<lodash.ValueIteratee<T[keyof T]>>, orders: lodash.Many<boolean | string>, collection: T | null | undefined): Array<T[keyof T]>;
-        <T extends object>(iteratees: lodash.Many<lodash.ValueIteratee<T[keyof T]>>, orders: lodash.__, collection: T | null | undefined): LodashOrderBy4x5<T>;
-    }
-    interface LodashOrderBy1x1<T> {
-        (orders: lodash.Many<boolean | string>): LodashOrderBy1x3<T>;
-        (orders: lodash.__, collection: lodash.List<T> | null | undefined): LodashOrderBy1x5<T>;
-        (orders: lodash.Many<boolean | string>, collection: lodash.List<T> | object | null | undefined): T[];
-        <T1 extends object>(orders: lodash.__, collection: T1 | null | undefined): LodashOrderBy3x5<T>;
-    }
-    interface LodashOrderBy1x2 {
-        <T>(iteratees: lodash.Many<(value: T) => lodash.NotVoid>): LodashOrderBy1x3<T>;
-        <T>(iteratees: lodash.__, collection: lodash.List<T> | null | undefined): LodashOrderBy1x6<T>;
-        <T>(iteratees: lodash.Many<(value: T) => lodash.NotVoid> | lodash.Many<lodash.ValueIteratee<T>>, collection: lodash.List<T> | null | undefined): T[];
-        <T>(iteratees: lodash.Many<lodash.ValueIteratee<T>>): LodashOrderBy2x3<T>;
-        <T extends object>(iteratees: lodash.__, collection: T | null | undefined): LodashOrderBy3x6<T>;
-        <T extends object>(iteratees: lodash.Many<(value: T[keyof T]) => lodash.NotVoid> | lodash.Many<lodash.ValueIteratee<T[keyof T]>>, collection: T | null | undefined): Array<T[keyof T]>;
-    }
-    interface LodashOrderBy1x3<T> {
-        (collection: lodash.List<T> | null | undefined): T[];
-        (collection: object | null | undefined): object[];
-    }
-    interface LodashOrderBy1x4<T> {
-        (iteratees: lodash.Many<(value: T) => lodash.NotVoid>): LodashOrderBy1x5<T>;
-        (iteratees: lodash.__, orders: lodash.Many<boolean | string>): LodashOrderBy1x6<T>;
-        (iteratees: lodash.Many<(value: T) => lodash.NotVoid> | lodash.Many<lodash.ValueIteratee<T>>, orders: lodash.Many<boolean | string>): T[];
-        (iteratees: lodash.Many<lodash.ValueIteratee<T>>): LodashOrderBy2x5<T>;
-    }
-    type LodashOrderBy1x5<T> = (orders: lodash.Many<boolean|string>) => T[];
-    type LodashOrderBy1x6<T> = (iteratees: lodash.Many<(value: T) => lodash.NotVoid> | lodash.Many<lodash.ValueIteratee<T>>) => T[];
-    interface LodashOrderBy2x1<T> {
-        (orders: lodash.Many<boolean | string>): LodashOrderBy2x3<T>;
-        (orders: lodash.__, collection: lodash.List<T> | null | undefined): LodashOrderBy2x5<T>;
-        (orders: lodash.Many<boolean | string>, collection: lodash.List<T> | object | null | undefined): T[];
-        <T1 extends object>(orders: lodash.__, collection: T1 | null | undefined): LodashOrderBy4x5<T>;
-    }
-    interface LodashOrderBy2x3<T> {
-        (collection: lodash.List<T> | null | undefined): T[];
-        (collection: object | null | undefined): object[];
-    }
-    type LodashOrderBy2x5<T> = (orders: lodash.Many<boolean|string>) => T[];
-    interface LodashOrderBy3x4<T> {
-        (iteratees: lodash.Many<(value: T[keyof T]) => lodash.NotVoid>): LodashOrderBy3x5<T>;
-        (iteratees: lodash.__, orders: lodash.Many<boolean | string>): LodashOrderBy3x6<T>;
-        (iteratees: lodash.Many<(value: T[keyof T]) => lodash.NotVoid> | lodash.Many<lodash.ValueIteratee<T[keyof T]>>, orders: lodash.Many<boolean | string>): Array<T[keyof T]>;
-        (iteratees: lodash.Many<lodash.ValueIteratee<T[keyof T]>>): LodashOrderBy4x5<T>;
-    }
-    type LodashOrderBy3x5<T> = (orders: lodash.Many<boolean|string>) => Array<T[keyof T]>;
-    type LodashOrderBy3x6<T> = (iteratees: lodash.Many<(value: T[keyof T]) => lodash.NotVoid> | lodash.Many<lodash.ValueIteratee<T[keyof T]>>) => Array<T[keyof T]>;
-    type LodashOrderBy4x5<T> = (orders: lodash.Many<boolean|string>) => Array<T[keyof T]>;
-    interface LodashOverArgs {
-        (func: (...args: any[]) => any): LodashOverArgs1x1;
-        (func: lodash.__, transforms: lodash.Many<(...args: any[]) => any>): LodashOverArgs1x2;
-        (func: (...args: any[]) => any, transforms: lodash.Many<(...args: any[]) => any>): (...args: any[]) => any;
-    }
-    type LodashOverArgs1x1 = (transforms: lodash.Many<(...args: any[]) => any>) => (...args: any[]) => any;
-    type LodashOverArgs1x2 = (func: (...args: any[]) => any) => (...args: any[]) => any;
-    interface LodashPad {
-        (length: number): LodashPad1x1;
-        (length: lodash.__, string: string): LodashPad1x2;
-        (length: number, string: string): string;
-    }
-    type LodashPad1x1 = (string: string) => string;
-    type LodashPad1x2 = (length: number) => string;
-    interface LodashPadChars {
-        (chars: string): LodashPadChars1x1;
-        (chars: lodash.__, length: number): LodashPadChars1x2;
-        (chars: string, length: number): LodashPadChars1x3;
-        (chars: lodash.__, length: lodash.__, string: string): LodashPadChars1x4;
-        (chars: string, length: lodash.__, string: string): LodashPadChars1x5;
-        (chars: lodash.__, length: number, string: string): LodashPadChars1x6;
-        (chars: string, length: number, string: string): string;
-    }
-    interface LodashPadChars1x1 {
-        (length: number): LodashPadChars1x3;
-        (length: lodash.__, string: string): LodashPadChars1x5;
-        (length: number, string: string): string;
-    }
-    interface LodashPadChars1x2 {
-        (chars: string): LodashPadChars1x3;
-        (chars: lodash.__, string: string): LodashPadChars1x6;
-        (chars: string, string: string): string;
-    }
-    type LodashPadChars1x3 = (string: string) => string;
-    interface LodashPadChars1x4 {
-        (chars: string): LodashPadChars1x5;
-        (chars: lodash.__, length: number): LodashPadChars1x6;
-        (chars: string, length: number): string;
-    }
-    type LodashPadChars1x5 = (length: number) => string;
-    type LodashPadChars1x6 = (chars: string) => string;
-    interface LodashPadCharsEnd {
-        (chars: string): LodashPadCharsEnd1x1;
-        (chars: lodash.__, length: number): LodashPadCharsEnd1x2;
-        (chars: string, length: number): LodashPadCharsEnd1x3;
-        (chars: lodash.__, length: lodash.__, string: string): LodashPadCharsEnd1x4;
-        (chars: string, length: lodash.__, string: string): LodashPadCharsEnd1x5;
-        (chars: lodash.__, length: number, string: string): LodashPadCharsEnd1x6;
-        (chars: string, length: number, string: string): string;
-    }
-    interface LodashPadCharsEnd1x1 {
-        (length: number): LodashPadCharsEnd1x3;
-        (length: lodash.__, string: string): LodashPadCharsEnd1x5;
-        (length: number, string: string): string;
-    }
-    interface LodashPadCharsEnd1x2 {
-        (chars: string): LodashPadCharsEnd1x3;
-        (chars: lodash.__, string: string): LodashPadCharsEnd1x6;
-        (chars: string, string: string): string;
-    }
-    type LodashPadCharsEnd1x3 = (string: string) => string;
-    interface LodashPadCharsEnd1x4 {
-        (chars: string): LodashPadCharsEnd1x5;
-        (chars: lodash.__, length: number): LodashPadCharsEnd1x6;
-        (chars: string, length: number): string;
-    }
-    type LodashPadCharsEnd1x5 = (length: number) => string;
-    type LodashPadCharsEnd1x6 = (chars: string) => string;
-    interface LodashPadCharsStart {
-        (chars: string): LodashPadCharsStart1x1;
-        (chars: lodash.__, length: number): LodashPadCharsStart1x2;
-        (chars: string, length: number): LodashPadCharsStart1x3;
-        (chars: lodash.__, length: lodash.__, string: string): LodashPadCharsStart1x4;
-        (chars: string, length: lodash.__, string: string): LodashPadCharsStart1x5;
-        (chars: lodash.__, length: number, string: string): LodashPadCharsStart1x6;
-        (chars: string, length: number, string: string): string;
-    }
-    interface LodashPadCharsStart1x1 {
-        (length: number): LodashPadCharsStart1x3;
-        (length: lodash.__, string: string): LodashPadCharsStart1x5;
-        (length: number, string: string): string;
-    }
-    interface LodashPadCharsStart1x2 {
-        (chars: string): LodashPadCharsStart1x3;
-        (chars: lodash.__, string: string): LodashPadCharsStart1x6;
-        (chars: string, string: string): string;
-    }
-    type LodashPadCharsStart1x3 = (string: string) => string;
-    interface LodashPadCharsStart1x4 {
-        (chars: string): LodashPadCharsStart1x5;
-        (chars: lodash.__, length: number): LodashPadCharsStart1x6;
-        (chars: string, length: number): string;
-    }
-    type LodashPadCharsStart1x5 = (length: number) => string;
-    type LodashPadCharsStart1x6 = (chars: string) => string;
-    interface LodashPadEnd {
-        (length: number): LodashPadEnd1x1;
-        (length: lodash.__, string: string): LodashPadEnd1x2;
-        (length: number, string: string): string;
-    }
-    type LodashPadEnd1x1 = (string: string) => string;
-    type LodashPadEnd1x2 = (length: number) => string;
-    interface LodashPadStart {
-        (length: number): LodashPadStart1x1;
-        (length: lodash.__, string: string): LodashPadStart1x2;
-        (length: number, string: string): string;
-    }
-    type LodashPadStart1x1 = (string: string) => string;
-    type LodashPadStart1x2 = (length: number) => string;
-    interface LodashParseInt {
-        (radix: number): LodashParseInt1x1;
-        (radix: lodash.__, string: string): LodashParseInt1x2;
-        (radix: number, string: string): number;
-    }
-    type LodashParseInt1x1 = (string: string) => number;
-    type LodashParseInt1x2 = (radix: number) => number;
-    interface LodashPartial {
-        <T1, R>(func: lodash.Function1<T1, R>): LodashPartial1x1<T1, R>;
-        <T1>(func: lodash.__, arg1: [T1]): LodashPartial1x2<T1>;
-        <T1, R>(func: lodash.Function1<T1, R>, arg1: [T1]): lodash.Function0<R>;
-        <T1, T2, R>(func: lodash.Function2<T1, T2, R>): LodashPartial2x1<T1, T2, R>;
-        <T1, T2, R>(func: lodash.Function2<T1, T2, R>, arg1: [T1]): lodash.Function1<    T2, R>;
-        <T2>(func: lodash.__, plc1: [lodash.__, T2]): LodashPartial3x2<T2>;
-        <T1, T2, R>(func: lodash.Function2<T1, T2, R>, plc1: [lodash.__, T2]): lodash.Function1<T1,     R>;
-        <T1, T2>(func: lodash.__, arg1: [T1, T2]): LodashPartial4x2<T1, T2>;
-        <T1, T2, R>(func: lodash.Function2<T1, T2, R>, arg1: [T1, T2]): lodash.Function0<        R>;
-        <T1, T2, T3, R>(func: lodash.Function3<T1, T2, T3, R>): LodashPartial5x1<T1, T2, T3, R>;
-        <T1, T2, T3, R>(func: lodash.Function3<T1, T2, T3, R>, arg1: [T1]): lodash.Function2<    T2, T3, R>;
-        <T1, T2, T3, R>(func: lodash.Function3<T1, T2, T3, R>, plc1: [lodash.__, T2]): lodash.Function2<T1,     T3, R>;
-        <T1, T2, T3, R>(func: lodash.Function3<T1, T2, T3, R>, arg1: [T1, T2]): lodash.Function1<        T3, R>;
-        <T3>(func: lodash.__, plc1: [lodash.__, lodash.__, T3]): LodashPartial8x2<T3>;
-        <T1, T2, T3, R>(func: lodash.Function3<T1, T2, T3, R>, plc1: [lodash.__, lodash.__, T3]): lodash.Function2<T1, T2,     R>;
-        <T1, T3>(func: lodash.__, arg1: [T1, lodash.__, T3]): LodashPartial9x2<T1, T3>;
-        <T1, T2, T3, R>(func: lodash.Function3<T1, T2, T3, R>, arg1: [T1, lodash.__, T3]): lodash.Function1<    T2,     R>;
-        <T2, T3>(func: lodash.__, plc1: [lodash.__, T2, T3]): LodashPartial10x2<T2, T3>;
-        <T1, T2, T3, R>(func: lodash.Function3<T1, T2, T3, R>, plc1: [lodash.__, T2, T3]): lodash.Function1<T1,         R>;
-        <T1, T2, T3>(func: lodash.__, arg1: [T1, T2, T3]): LodashPartial11x2<T1, T2, T3>;
-        <T1, T2, T3, R>(func: lodash.Function3<T1, T2, T3, R>, arg1: [T1, T2, T3]): lodash.Function0<            R>;
-        <T1, T2, T3, T4, R>(func: lodash.Function4<T1, T2, T3, T4, R>): LodashPartial12x1<T1, T2, T3, T4, R>;
-        <T1, T2, T3, T4, R>(func: lodash.Function4<T1, T2, T3, T4, R>, arg1: [T1]): lodash.Function3<    T2, T3, T4, R>;
-        <T1, T2, T3, T4, R>(func: lodash.Function4<T1, T2, T3, T4, R>, plc1: [lodash.__, T2]): lodash.Function3<T1,     T3, T4, R>;
-        <T1, T2, T3, T4, R>(func: lodash.Function4<T1, T2, T3, T4, R>, arg1: [T1, T2]): lodash.Function2<        T3, T4, R>;
-        <T1, T2, T3, T4, R>(func: lodash.Function4<T1, T2, T3, T4, R>, plc1: [lodash.__, lodash.__, T3]): lodash.Function3<T1, T2,     T4, R>;
-        <T1, T2, T3, T4, R>(func: lodash.Function4<T1, T2, T3, T4, R>, arg1: [T1, lodash.__, T3]): lodash.Function2<    T2,     T4, R>;
-        <T1, T2, T3, T4, R>(func: lodash.Function4<T1, T2, T3, T4, R>, plc1: [lodash.__, T2, T3]): lodash.Function2<T1,         T4, R>;
-        <T1, T2, T3, T4, R>(func: lodash.Function4<T1, T2, T3, T4, R>, arg1: [T1, T2, T3]): lodash.Function1<            T4, R>;
-        <T4>(func: lodash.__, plc1: [lodash.__, lodash.__, lodash.__, T4]): LodashPartial19x2<T4>;
-        <T1, T2, T3, T4, R>(func: lodash.Function4<T1, T2, T3, T4, R>, plc1: [lodash.__, lodash.__, lodash.__, T4]): lodash.Function3<T1, T2, T3,     R>;
-        <T1, T4>(func: lodash.__, arg1: [T1, lodash.__, lodash.__, T4]): LodashPartial20x2<T1, T4>;
-        <T1, T2, T3, T4, R>(func: lodash.Function4<T1, T2, T3, T4, R>, arg1: [T1, lodash.__, lodash.__, T4]): lodash.Function2<    T2, T3,     R>;
-        <T2, T4>(func: lodash.__, plc1: [lodash.__, T2, lodash.__, T4]): LodashPartial21x2<T2, T4>;
-        <T1, T2, T3, T4, R>(func: lodash.Function4<T1, T2, T3, T4, R>, plc1: [lodash.__, T2, lodash.__, T4]): lodash.Function2<T1,     T3,     R>;
-        <T1, T2, T4>(func: lodash.__, arg1: [T1, T2, lodash.__, T4]): LodashPartial22x2<T1, T2, T4>;
-        <T1, T2, T3, T4, R>(func: lodash.Function4<T1, T2, T3, T4, R>, arg1: [T1, T2, lodash.__, T4]): lodash.Function1<        T3,     R>;
-        <T3, T4>(func: lodash.__, plc1: [lodash.__, lodash.__, T3, T4]): LodashPartial23x2<T3, T4>;
-        <T1, T2, T3, T4, R>(func: lodash.Function4<T1, T2, T3, T4, R>, plc1: [lodash.__, lodash.__, T3, T4]): lodash.Function2<T1, T2,         R>;
-        <T1, T3, T4>(func: lodash.__, arg1: [T1, lodash.__, T3, T4]): LodashPartial24x2<T1, T3, T4>;
-        <T1, T2, T3, T4, R>(func: lodash.Function4<T1, T2, T3, T4, R>, arg1: [T1, lodash.__, T3, T4]): lodash.Function1<    T2,         R>;
-        <T2, T3, T4>(func: lodash.__, plc1: [lodash.__, T2, T3, T4]): LodashPartial25x2<T2, T3, T4>;
-        <T1, T2, T3, T4, R>(func: lodash.Function4<T1, T2, T3, T4, R>, plc1: [lodash.__, T2, T3, T4]): lodash.Function1<T1,             R>;
-        <T1, T2, T3, T4>(func: lodash.__, arg1: [T1, T2, T3, T4]): LodashPartial26x2<T1, T2, T3, T4>;
-        <T1, T2, T3, T4, R>(func: lodash.Function4<T1, T2, T3, T4, R>, arg1: [T1, T2, T3, T4]): lodash.Function0<                R>;
-        (func: (...args: any[]) => any): LodashPartial27x1;
-        (func: lodash.__, args: ReadonlyArray<any>): LodashPartial27x2;
-        (func: (...args: any[]) => any, args: ReadonlyArray<any>): (...args: any[]) => any;
-        placeholder: lodash.__;
-    }
-    type LodashPartial1x1<T1, R> = (arg1: [T1]) => lodash.Function0<R>;
-    interface LodashPartial1x2<T1> {
-        <R>(func: lodash.Function1<T1, R>): lodash.Function0<R>;
-        <T2, R>(func: lodash.Function2<T1, T2, R>): lodash.Function1<    T2, R>;
-        <T2, T3, R>(func: lodash.Function3<T1, T2, T3, R>): lodash.Function2<    T2, T3, R>;
-        <T2, T3, T4, R>(func: lodash.Function4<T1, T2, T3, T4, R>): lodash.Function3<    T2, T3, T4, R>;
-    }
-    interface LodashPartial2x1<T1, T2, R> {
-        (arg1: [T1]): lodash.Function1<    T2, R>;
-        (plc1: [lodash.__, T2]): lodash.Function1<T1,     R>;
-        (arg1: [T1, T2]): lodash.Function0<        R>;
-    }
-    interface LodashPartial3x2<T2> {
-        <T1, R>(func: lodash.Function2<T1, T2, R>): lodash.Function1<T1,     R>;
-        <T1, T3, R>(func: lodash.Function3<T1, T2, T3, R>): lodash.Function2<T1,     T3, R>;
-        <T1, T3, T4, R>(func: lodash.Function4<T1, T2, T3, T4, R>): lodash.Function3<T1,     T3, T4, R>;
-    }
-    interface LodashPartial4x2<T1, T2> {
-        <R>(func: lodash.Function2<T1, T2, R>): lodash.Function0<        R>;
-        <T3, R>(func: lodash.Function3<T1, T2, T3, R>): lodash.Function1<        T3, R>;
-        <T3, T4, R>(func: lodash.Function4<T1, T2, T3, T4, R>): lodash.Function2<        T3, T4, R>;
-    }
-    interface LodashPartial5x1<T1, T2, T3, R> {
-        (arg1: [T1]): lodash.Function2<    T2, T3, R>;
-        (plc1: [lodash.__, T2]): lodash.Function2<T1,     T3, R>;
-        (arg1: [T1, T2]): lodash.Function1<        T3, R>;
-        (plc1: [lodash.__, lodash.__, T3]): lodash.Function2<T1, T2,     R>;
-        (arg1: [T1, lodash.__, T3]): lodash.Function1<    T2,     R>;
-        (plc1: [lodash.__, T2, T3]): lodash.Function1<T1,         R>;
-        (arg1: [T1, T2, T3]): lodash.Function0<            R>;
-    }
-    interface LodashPartial8x2<T3> {
-        <T1, T2, R>(func: lodash.Function3<T1, T2, T3, R>): lodash.Function2<T1, T2,     R>;
-        <T1, T2, T4, R>(func: lodash.Function4<T1, T2, T3, T4, R>): lodash.Function3<T1, T2,     T4, R>;
-    }
-    interface LodashPartial9x2<T1, T3> {
-        <T2, R>(func: lodash.Function3<T1, T2, T3, R>): lodash.Function1<    T2,     R>;
-        <T2, T4, R>(func: lodash.Function4<T1, T2, T3, T4, R>): lodash.Function2<    T2,     T4, R>;
-    }
-    interface LodashPartial10x2<T2, T3> {
-        <T1, R>(func: lodash.Function3<T1, T2, T3, R>): lodash.Function1<T1,         R>;
-        <T1, T4, R>(func: lodash.Function4<T1, T2, T3, T4, R>): lodash.Function2<T1,         T4, R>;
-    }
-    interface LodashPartial11x2<T1, T2, T3> {
-        <R>(func: lodash.Function3<T1, T2, T3, R>): lodash.Function0<            R>;
-        <T4, R>(func: lodash.Function4<T1, T2, T3, T4, R>): lodash.Function1<            T4, R>;
-    }
-    interface LodashPartial12x1<T1, T2, T3, T4, R> {
-        (arg1: [T1]): lodash.Function3<    T2, T3, T4, R>;
-        (plc1: [lodash.__, T2]): lodash.Function3<T1,     T3, T4, R>;
-        (arg1: [T1, T2]): lodash.Function2<        T3, T4, R>;
-        (plc1: [lodash.__, lodash.__, T3]): lodash.Function3<T1, T2,     T4, R>;
-        (arg1: [T1, lodash.__, T3]): lodash.Function2<    T2,     T4, R>;
-        (plc1: [lodash.__, T2, T3]): lodash.Function2<T1,         T4, R>;
-        (arg1: [T1, T2, T3]): lodash.Function1<            T4, R>;
-        (plc1: [lodash.__, lodash.__, lodash.__, T4]): lodash.Function3<T1, T2, T3,     R>;
-        (arg1: [T1, lodash.__, lodash.__, T4]): lodash.Function2<    T2, T3,     R>;
-        (plc1: [lodash.__, T2, lodash.__, T4]): lodash.Function2<T1,     T3,     R>;
-        (arg1: [T1, T2, lodash.__, T4]): lodash.Function1<        T3,     R>;
-        (plc1: [lodash.__, lodash.__, T3, T4]): lodash.Function2<T1, T2,         R>;
-        (arg1: [T1, lodash.__, T3, T4]): lodash.Function1<    T2,         R>;
-        (plc1: [lodash.__, T2, T3, T4]): lodash.Function1<T1,             R>;
-        (arg1: [T1, T2, T3, T4]): lodash.Function0<                R>;
-    }
-    type LodashPartial19x2<T4> = <T1, T2, T3, R>(func: lodash.Function4<T1, T2, T3, T4, R>) => lodash.Function3<T1, T2, T3,     R>;
-    type LodashPartial20x2<T1, T4> = <T2, T3, R>(func: lodash.Function4<T1, T2, T3, T4, R>) => lodash.Function2<    T2, T3,     R>;
-    type LodashPartial21x2<T2, T4> = <T1, T3, R>(func: lodash.Function4<T1, T2, T3, T4, R>) => lodash.Function2<T1,     T3,     R>;
-    type LodashPartial22x2<T1, T2, T4> = <T3, R>(func: lodash.Function4<T1, T2, T3, T4, R>) => lodash.Function1<        T3,     R>;
-    type LodashPartial23x2<T3, T4> = <T1, T2, R>(func: lodash.Function4<T1, T2, T3, T4, R>) => lodash.Function2<T1, T2,         R>;
-    type LodashPartial24x2<T1, T3, T4> = <T2, R>(func: lodash.Function4<T1, T2, T3, T4, R>) => lodash.Function1<    T2,         R>;
-    type LodashPartial25x2<T2, T3, T4> = <T1, R>(func: lodash.Function4<T1, T2, T3, T4, R>) => lodash.Function1<T1,             R>;
-    type LodashPartial26x2<T1, T2, T3, T4> = <R>(func: lodash.Function4<T1, T2, T3, T4, R>) => lodash.Function0<                R>;
-    type LodashPartial27x1 = (args: ReadonlyArray<any>) => (...args: any[]) => any;
-    type LodashPartial27x2 = (func: (...args: any[]) => any) => (...args: any[]) => any;
-    interface LodashPartialRight {
-        <T1, R>(func: lodash.Function1<T1, R>): LodashPartialRight1x1<T1, R>;
-        <T1>(func: lodash.__, arg1: [T1]): LodashPartialRight1x2<T1>;
-        <T1, R>(func: lodash.Function1<T1, R>, arg1: [T1]): lodash.Function0<R>;
-        <T1, T2, R>(func: lodash.Function2<T1, T2, R>): LodashPartialRight2x1<T1, T2, R>;
-        <T1>(func: lodash.__, arg1: [T1, lodash.__]): LodashPartialRight2x2<T1>;
-        <T1, T2, R>(func: lodash.Function2<T1, T2, R>, arg1: [T1, lodash.__]): lodash.Function1<    T2, R>;
-        <T2>(func: lodash.__, arg2: [T2]): LodashPartialRight3x2<T2>;
-        <T1, T2, R>(func: lodash.Function2<T1, T2, R>, arg2: [T2]): lodash.Function1<T1,     R>;
-        <T1, T2>(func: lodash.__, arg1: [T1, T2]): LodashPartialRight4x2<T1, T2>;
-        <T1, T2, R>(func: lodash.Function2<T1, T2, R>, arg1: [T1, T2]): lodash.Function0<        R>;
-        <T1, T2, T3, R>(func: lodash.Function3<T1, T2, T3, R>): LodashPartialRight5x1<T1, T2, T3, R>;
-        <T1>(func: lodash.__, arg1: [T1, lodash.__, lodash.__]): LodashPartialRight5x2<T1>;
-        <T1, T2, T3, R>(func: lodash.Function3<T1, T2, T3, R>, arg1: [T1, lodash.__, lodash.__]): lodash.Function2<    T2, T3, R>;
-        <T2>(func: lodash.__, arg2: [T2, lodash.__]): LodashPartialRight6x2<T2>;
-        <T1, T2, T3, R>(func: lodash.Function3<T1, T2, T3, R>, arg2: [T2, lodash.__]): lodash.Function2<T1,     T3, R>;
-        <T1, T2>(func: lodash.__, arg1: [T1, T2, lodash.__]): LodashPartialRight7x2<T1, T2>;
-        <T1, T2, T3, R>(func: lodash.Function3<T1, T2, T3, R>, arg1: [T1, T2, lodash.__]): lodash.Function1<        T3, R>;
-        <T3>(func: lodash.__, arg3: [T3]): LodashPartialRight8x2<T3>;
-        <T1, T2, T3, R>(func: lodash.Function3<T1, T2, T3, R>, arg3: [T3]): lodash.Function2<T1, T2,     R>;
-        <T1, T3>(func: lodash.__, arg1: [T1, lodash.__, T3]): LodashPartialRight9x2<T1, T3>;
-        <T1, T2, T3, R>(func: lodash.Function3<T1, T2, T3, R>, arg1: [T1, lodash.__, T3]): lodash.Function1<    T2,     R>;
-        <T2, T3>(func: lodash.__, arg2: [T2, T3]): LodashPartialRight10x2<T2, T3>;
-        <T1, T2, T3, R>(func: lodash.Function3<T1, T2, T3, R>, arg2: [T2, T3]): lodash.Function1<T1,         R>;
-        <T1, T2, T3>(func: lodash.__, arg1: [T1, T2, T3]): LodashPartialRight11x2<T1, T2, T3>;
-        <T1, T2, T3, R>(func: lodash.Function3<T1, T2, T3, R>, arg1: [T1, T2, T3]): lodash.Function0<            R>;
-        <T1, T2, T3, T4, R>(func: lodash.Function4<T1, T2, T3, T4, R>): LodashPartialRight12x1<T1, T2, T3, T4, R>;
-        <T1>(func: lodash.__, arg1: [T1, lodash.__, lodash.__, lodash.__]): LodashPartialRight12x2<T1>;
-        <T1, T2, T3, T4, R>(func: lodash.Function4<T1, T2, T3, T4, R>, arg1: [T1, lodash.__, lodash.__, lodash.__]): lodash.Function3<    T2, T3, T4, R>;
-        <T2>(func: lodash.__, arg2: [T2, lodash.__, lodash.__]): LodashPartialRight13x2<T2>;
-        <T1, T2, T3, T4, R>(func: lodash.Function4<T1, T2, T3, T4, R>, arg2: [T2, lodash.__, lodash.__]): lodash.Function3<T1,     T3, T4, R>;
-        <T1, T2>(func: lodash.__, arg1: [T1, T2, lodash.__, lodash.__]): LodashPartialRight14x2<T1, T2>;
-        <T1, T2, T3, T4, R>(func: lodash.Function4<T1, T2, T3, T4, R>, arg1: [T1, T2, lodash.__, lodash.__]): lodash.Function2<        T3, T4, R>;
-        <T3>(func: lodash.__, arg3: [T3, lodash.__]): LodashPartialRight15x2<T3>;
-        <T1, T2, T3, T4, R>(func: lodash.Function4<T1, T2, T3, T4, R>, arg3: [T3, lodash.__]): lodash.Function3<T1, T2,     T4, R>;
-        <T1, T3>(func: lodash.__, arg1: [T1, lodash.__, T3, lodash.__]): LodashPartialRight16x2<T1, T3>;
-        <T1, T2, T3, T4, R>(func: lodash.Function4<T1, T2, T3, T4, R>, arg1: [T1, lodash.__, T3, lodash.__]): lodash.Function2<    T2,     T4, R>;
-        <T2, T3>(func: lodash.__, arg2: [T2, T3, lodash.__]): LodashPartialRight17x2<T2, T3>;
-        <T1, T2, T3, T4, R>(func: lodash.Function4<T1, T2, T3, T4, R>, arg2: [T2, T3, lodash.__]): lodash.Function2<T1,         T4, R>;
-        <T1, T2, T3>(func: lodash.__, arg1: [T1, T2, T3, lodash.__]): LodashPartialRight18x2<T1, T2, T3>;
-        <T1, T2, T3, T4, R>(func: lodash.Function4<T1, T2, T3, T4, R>, arg1: [T1, T2, T3, lodash.__]): lodash.Function1<            T4, R>;
-        <T4>(func: lodash.__, arg4: [T4]): LodashPartialRight19x2<T4>;
-        <T1, T2, T3, T4, R>(func: lodash.Function4<T1, T2, T3, T4, R>, arg4: [T4]): lodash.Function3<T1, T2, T3,     R>;
-        <T1, T4>(func: lodash.__, arg1: [T1, lodash.__, lodash.__, T4]): LodashPartialRight20x2<T1, T4>;
-        <T1, T2, T3, T4, R>(func: lodash.Function4<T1, T2, T3, T4, R>, arg1: [T1, lodash.__, lodash.__, T4]): lodash.Function2<    T2, T3,     R>;
-        <T2, T4>(func: lodash.__, arg2: [T2, lodash.__, T4]): LodashPartialRight21x2<T2, T4>;
-        <T1, T2, T3, T4, R>(func: lodash.Function4<T1, T2, T3, T4, R>, arg2: [T2, lodash.__, T4]): lodash.Function2<T1,     T3,     R>;
-        <T1, T2, T4>(func: lodash.__, arg1: [T1, T2, lodash.__, T4]): LodashPartialRight22x2<T1, T2, T4>;
-        <T1, T2, T3, T4, R>(func: lodash.Function4<T1, T2, T3, T4, R>, arg1: [T1, T2, lodash.__, T4]): lodash.Function1<        T3,     R>;
-        <T3, T4>(func: lodash.__, arg3: [T3, T4]): LodashPartialRight23x2<T3, T4>;
-        <T1, T2, T3, T4, R>(func: lodash.Function4<T1, T2, T3, T4, R>, arg3: [T3, T4]): lodash.Function2<T1, T2,         R>;
-        <T1, T3, T4>(func: lodash.__, arg1: [T1, lodash.__, T3, T4]): LodashPartialRight24x2<T1, T3, T4>;
-        <T1, T2, T3, T4, R>(func: lodash.Function4<T1, T2, T3, T4, R>, arg1: [T1, lodash.__, T3, T4]): lodash.Function1<    T2,         R>;
-        <T2, T3, T4>(func: lodash.__, arg2: [T2, T3, T4]): LodashPartialRight25x2<T2, T3, T4>;
-        <T1, T2, T3, T4, R>(func: lodash.Function4<T1, T2, T3, T4, R>, arg2: [T2, T3, T4]): lodash.Function1<T1,             R>;
-        <T1, T2, T3, T4>(func: lodash.__, arg1: [T1, T2, T3, T4]): LodashPartialRight26x2<T1, T2, T3, T4>;
-        <T1, T2, T3, T4, R>(func: lodash.Function4<T1, T2, T3, T4, R>, arg1: [T1, T2, T3, T4]): lodash.Function0<                R>;
-        (func: (...args: any[]) => any): LodashPartialRight27x1;
-        (func: lodash.__, args: ReadonlyArray<any>): LodashPartialRight27x2;
-        (func: (...args: any[]) => any, args: ReadonlyArray<any>): (...args: any[]) => any;
-        placeholder: lodash.__;
-    }
-    type LodashPartialRight1x1<T1, R> = (arg1: [T1]) => lodash.Function0<R>;
-    type LodashPartialRight1x2<T1> = <R>(func: lodash.Function1<T1, R>) => lodash.Function0<R>;
-    interface LodashPartialRight2x1<T1, T2, R> {
-        (arg1: [T1, lodash.__]): lodash.Function1<    T2, R>;
-        (arg2: [T2]): lodash.Function1<T1,     R>;
-        (arg1: [T1, T2]): lodash.Function0<        R>;
-    }
-    type LodashPartialRight2x2<T1> = <T2, R>(func: lodash.Function2<T1, T2, R>) => lodash.Function1<    T2, R>;
-    type LodashPartialRight3x2<T2> = <T1, R>(func: lodash.Function2<T1, T2, R>) => lodash.Function1<T1,     R>;
-    type LodashPartialRight4x2<T1, T2> = <R>(func: lodash.Function2<T1, T2, R>) => lodash.Function0<        R>;
-    interface LodashPartialRight5x1<T1, T2, T3, R> {
-        (arg1: [T1, lodash.__, lodash.__]): lodash.Function2<    T2, T3, R>;
-        (arg2: [T2, lodash.__]): lodash.Function2<T1,     T3, R>;
-        (arg1: [T1, T2, lodash.__]): lodash.Function1<        T3, R>;
-        (arg3: [T3]): lodash.Function2<T1, T2,     R>;
-        (arg1: [T1, lodash.__, T3]): lodash.Function1<    T2,     R>;
-        (arg2: [T2, T3]): lodash.Function1<T1,         R>;
-        (arg1: [T1, T2, T3]): lodash.Function0<            R>;
-    }
-    type LodashPartialRight5x2<T1> = <T2, T3, R>(func: lodash.Function3<T1, T2, T3, R>) => lodash.Function2<    T2, T3, R>;
-    type LodashPartialRight6x2<T2> = <T1, T3, R>(func: lodash.Function3<T1, T2, T3, R>) => lodash.Function2<T1,     T3, R>;
-    type LodashPartialRight7x2<T1, T2> = <T3, R>(func: lodash.Function3<T1, T2, T3, R>) => lodash.Function1<        T3, R>;
-    type LodashPartialRight8x2<T3> = <T1, T2, R>(func: lodash.Function3<T1, T2, T3, R>) => lodash.Function2<T1, T2,     R>;
-    type LodashPartialRight9x2<T1, T3> = <T2, R>(func: lodash.Function3<T1, T2, T3, R>) => lodash.Function1<    T2,     R>;
-    type LodashPartialRight10x2<T2, T3> = <T1, R>(func: lodash.Function3<T1, T2, T3, R>) => lodash.Function1<T1,         R>;
-    type LodashPartialRight11x2<T1, T2, T3> = <R>(func: lodash.Function3<T1, T2, T3, R>) => lodash.Function0<            R>;
-    interface LodashPartialRight12x1<T1, T2, T3, T4, R> {
-        (arg1: [T1, lodash.__, lodash.__, lodash.__]): lodash.Function3<    T2, T3, T4, R>;
-        (arg2: [T2, lodash.__, lodash.__]): lodash.Function3<T1,     T3, T4, R>;
-        (arg1: [T1, T2, lodash.__, lodash.__]): lodash.Function2<        T3, T4, R>;
-        (arg3: [T3, lodash.__]): lodash.Function3<T1, T2,     T4, R>;
-        (arg1: [T1, lodash.__, T3, lodash.__]): lodash.Function2<    T2,     T4, R>;
-        (arg2: [T2, T3, lodash.__]): lodash.Function2<T1,         T4, R>;
-        (arg1: [T1, T2, T3, lodash.__]): lodash.Function1<            T4, R>;
-        (arg4: [T4]): lodash.Function3<T1, T2, T3,     R>;
-        (arg1: [T1, lodash.__, lodash.__, T4]): lodash.Function2<    T2, T3,     R>;
-        (arg2: [T2, lodash.__, T4]): lodash.Function2<T1,     T3,     R>;
-        (arg1: [T1, T2, lodash.__, T4]): lodash.Function1<        T3,     R>;
-        (arg3: [T3, T4]): lodash.Function2<T1, T2,         R>;
-        (arg1: [T1, lodash.__, T3, T4]): lodash.Function1<    T2,         R>;
-        (arg2: [T2, T3, T4]): lodash.Function1<T1,             R>;
-        (arg1: [T1, T2, T3, T4]): lodash.Function0<                R>;
-    }
-    type LodashPartialRight12x2<T1> = <T2, T3, T4, R>(func: lodash.Function4<T1, T2, T3, T4, R>) => lodash.Function3<    T2, T3, T4, R>;
-    type LodashPartialRight13x2<T2> = <T1, T3, T4, R>(func: lodash.Function4<T1, T2, T3, T4, R>) => lodash.Function3<T1,     T3, T4, R>;
-    type LodashPartialRight14x2<T1, T2> = <T3, T4, R>(func: lodash.Function4<T1, T2, T3, T4, R>) => lodash.Function2<        T3, T4, R>;
-    type LodashPartialRight15x2<T3> = <T1, T2, T4, R>(func: lodash.Function4<T1, T2, T3, T4, R>) => lodash.Function3<T1, T2,     T4, R>;
-    type LodashPartialRight16x2<T1, T3> = <T2, T4, R>(func: lodash.Function4<T1, T2, T3, T4, R>) => lodash.Function2<    T2,     T4, R>;
-    type LodashPartialRight17x2<T2, T3> = <T1, T4, R>(func: lodash.Function4<T1, T2, T3, T4, R>) => lodash.Function2<T1,         T4, R>;
-    type LodashPartialRight18x2<T1, T2, T3> = <T4, R>(func: lodash.Function4<T1, T2, T3, T4, R>) => lodash.Function1<            T4, R>;
-    type LodashPartialRight19x2<T4> = <T1, T2, T3, R>(func: lodash.Function4<T1, T2, T3, T4, R>) => lodash.Function3<T1, T2, T3,     R>;
-    type LodashPartialRight20x2<T1, T4> = <T2, T3, R>(func: lodash.Function4<T1, T2, T3, T4, R>) => lodash.Function2<    T2, T3,     R>;
-    type LodashPartialRight21x2<T2, T4> = <T1, T3, R>(func: lodash.Function4<T1, T2, T3, T4, R>) => lodash.Function2<T1,     T3,     R>;
-    type LodashPartialRight22x2<T1, T2, T4> = <T3, R>(func: lodash.Function4<T1, T2, T3, T4, R>) => lodash.Function1<        T3,     R>;
-    type LodashPartialRight23x2<T3, T4> = <T1, T2, R>(func: lodash.Function4<T1, T2, T3, T4, R>) => lodash.Function2<T1, T2,         R>;
-    type LodashPartialRight24x2<T1, T3, T4> = <T2, R>(func: lodash.Function4<T1, T2, T3, T4, R>) => lodash.Function1<    T2,         R>;
-    type LodashPartialRight25x2<T2, T3, T4> = <T1, R>(func: lodash.Function4<T1, T2, T3, T4, R>) => lodash.Function1<T1,             R>;
-    type LodashPartialRight26x2<T1, T2, T3, T4> = <R>(func: lodash.Function4<T1, T2, T3, T4, R>) => lodash.Function0<                R>;
-    type LodashPartialRight27x1 = (args: ReadonlyArray<any>) => (...args: any[]) => any;
-    type LodashPartialRight27x2 = (func: (...args: any[]) => any) => (...args: any[]) => any;
-    interface LodashPartition {
-        <T>(callback: lodash.ValueIteratee<T>): LodashPartition1x1<T>;
-        <T>(callback: lodash.__, collection: lodash.List<T> | null | undefined): LodashPartition1x2<T>;
-        <T>(callback: lodash.ValueIteratee<T>, collection: lodash.List<T> | null | undefined): [T[], T[]];
-        <T extends object>(callback: lodash.__, collection: T | null | undefined): LodashPartition2x2<T>;
-        <T extends object>(callback: lodash.ValueIteratee<T[keyof T]>, collection: T | null | undefined): [Array<T[keyof T]>, Array<T[keyof T]>];
-    }
-    type LodashPartition1x1<T> = (collection: lodash.List<T> | object | null | undefined) => [T[], T[]];
-    type LodashPartition1x2<T> = (callback: lodash.ValueIteratee<T>) => [T[], T[]];
-    type LodashPartition2x2<T> = (callback: lodash.ValueIteratee<T[keyof T]>) => [Array<T[keyof T]>, Array<T[keyof T]>];
-    interface LodashPath {
-        <TObject extends object, TKey extends keyof TObject>(path: TKey | [TKey]): LodashPath1x1<TObject, TKey>;
-        <TObject extends object>(path: lodash.__, object: TObject): LodashPath1x2<TObject>;
-        <TObject extends object, TKey extends keyof TObject>(path: TKey | [TKey], object: TObject): TObject[TKey];
-        <TObject extends object>(path: lodash.__, object: TObject | null | undefined): LodashPath2x2<TObject>;
-        <TObject extends object, TKey extends keyof TObject>(path: TKey | [TKey], object: TObject | null | undefined): TObject[TKey] | undefined;
-        (path: number): LodashPath3x1;
-        <T>(path: lodash.__, object: lodash.NumericDictionary<T>): LodashPath3x2<T>;
-        <T>(path: number, object: lodash.NumericDictionary<T>): T;
-        <T>(path: lodash.__, object: lodash.NumericDictionary<T> | null | undefined): LodashPath4x2<T>;
-        <T>(path: number, object: lodash.NumericDictionary<T> | null | undefined): T | undefined;
-        (path: lodash.PropertyPath): LodashPath5x1;
-        (path: lodash.__, object: null | undefined): LodashPath5x2;
-        (path: lodash.PropertyPath, object: null | undefined): undefined;
-        (path: lodash.__, object: any): LodashPath6x2;
-        (path: lodash.PropertyPath, object: any): any;
-    }
-    interface LodashPath1x1<TObject, TKey extends keyof TObject> {
-        (object: TObject): TObject[TKey];
-        (object: TObject | null | undefined): TObject[TKey] | undefined;
-    }
-    type LodashPath1x2<TObject> = <TKey extends keyof TObject>(path: TKey | [TKey]) => TObject[TKey];
-    type LodashPath2x2<TObject> = <TKey extends keyof TObject>(path: TKey | [TKey]) => TObject[TKey] | undefined;
-    interface LodashPath3x1 {
-        <T>(object: lodash.NumericDictionary<T>): T;
-        <T>(object: lodash.NumericDictionary<T> | null | undefined): T | undefined;
-    }
-    type LodashPath3x2<T> = (path: number) => T;
-    type LodashPath4x2<T> = (path: number) => T | undefined;
-    interface LodashPath5x1 {
-        (object: null | undefined): undefined;
-        (object: any): any;
-    }
-    type LodashPath5x2 = (path: lodash.PropertyPath) => undefined;
-    type LodashPath6x2 = (path: lodash.PropertyPath) => any;
-    interface LodashPathOr {
-        <TDefault>(defaultValue: TDefault): LodashPathOr1x1<TDefault>;
-        <TObject extends object, TKey extends keyof TObject>(defaultValue: lodash.__, path: TKey | [TKey]): LodashPathOr1x2<TObject, TKey>;
-        <TObject extends object, TKey extends keyof TObject, TDefault>(defaultValue: TDefault, path: TKey | [TKey]): LodashPathOr1x3<TObject, TKey, TDefault>;
-        <TObject extends object>(defaultValue: lodash.__, path: lodash.__, object: TObject | null | undefined): LodashPathOr1x4<TObject>;
-        <TObject extends object, TDefault>(defaultValue: TDefault, path: lodash.__, object: TObject | null | undefined): LodashPathOr1x5<TObject, TDefault>;
-        <TObject extends object, TKey extends keyof TObject>(defaultValue: lodash.__, path: TKey | [TKey], object: TObject | null | undefined): LodashPathOr1x6<TObject, TKey>;
-        <TObject extends object, TKey extends keyof TObject, TDefault>(defaultValue: TDefault, path: TKey | [TKey], object: TObject | null | undefined): TObject[TKey] | TDefault;
-        (defaultValue: lodash.__, path: number): LodashPathOr2x2;
-        <TDefault>(defaultValue: TDefault, path: number): LodashPathOr2x3<TDefault>;
-        <T>(defaultValue: lodash.__, path: lodash.__, object: lodash.NumericDictionary<T> | null | undefined): LodashPathOr2x4<T>;
-        <T, TDefault>(defaultValue: TDefault, path: lodash.__, object: lodash.NumericDictionary<T> | null | undefined): LodashPathOr2x5<T, TDefault>;
-        <T>(defaultValue: lodash.__, path: number, object: lodash.NumericDictionary<T> | null | undefined): LodashPathOr2x6<T>;
-        <T, TDefault>(defaultValue: TDefault, path: number, object: lodash.NumericDictionary<T> | null | undefined): T | TDefault;
-        (defaultValue: lodash.__, path: lodash.PropertyPath): LodashPathOr3x2;
-        <TDefault>(defaultValue: TDefault, path: lodash.PropertyPath): LodashPathOr3x3<TDefault>;
-        (defaultValue: lodash.__, path: lodash.__, object: null | undefined): LodashPathOr3x4;
-        <TDefault>(defaultValue: TDefault, path: lodash.__, object: null | undefined): LodashPathOr3x5<TDefault>;
-        (defaultValue: lodash.__, path: lodash.PropertyPath, object: null | undefined): LodashPathOr3x6;
-        <TDefault>(defaultValue: TDefault, path: lodash.PropertyPath, object: null | undefined): TDefault;
-        (defaultValue: any): LodashPathOr4x1;
-        (defaultValue: any, path: lodash.PropertyPath): LodashPathOr4x3;
-        (defaultValue: lodash.__, path: lodash.__, object: any): LodashPathOr4x4;
-        (defaultValue: any, path: lodash.__, object: any): LodashPathOr4x5;
-        (defaultValue: lodash.__, path: lodash.PropertyPath, object: any): LodashPathOr4x6;
-        (defaultValue: any, path: lodash.PropertyPath, object: any): any;
-    }
-    interface LodashPathOr1x1<TDefault> {
-        <TObject extends object, TKey extends keyof TObject>(path: TKey | [TKey]): LodashPathOr1x3<TObject, TKey, TDefault>;
-        <TObject extends object>(path: lodash.__, object: TObject | null | undefined): LodashPathOr1x5<TObject, TDefault>;
-        <TObject extends object, TKey extends keyof TObject>(path: TKey | [TKey], object: TObject | null | undefined): TObject[TKey] | TDefault;
-        (path: number): LodashPathOr2x3<TDefault>;
-        <T>(path: lodash.__, object: lodash.NumericDictionary<T> | null | undefined): LodashPathOr2x5<T, TDefault>;
-        <T>(path: number, object: lodash.NumericDictionary<T> | null | undefined): T | TDefault;
-        (path: lodash.PropertyPath): LodashPathOr3x3<TDefault>;
-        (path: lodash.__, object: null | undefined): LodashPathOr3x5<TDefault>;
-        (path: lodash.PropertyPath, object: null | undefined): TDefault;
-    }
-    interface LodashPathOr1x2<TObject, TKey extends keyof TObject> {
-        <TDefault>(defaultValue: TDefault): LodashPathOr1x3<TObject, TKey, TDefault>;
-        (defaultValue: lodash.__, object: TObject | null | undefined): LodashPathOr1x6<TObject, TKey>;
-        <TDefault>(defaultValue: TDefault, object: TObject | null | undefined): TObject[TKey] | TDefault;
-    }
-    type LodashPathOr1x3<TObject, TKey extends keyof TObject, TDefault> = (object: TObject | null | undefined) => TObject[TKey] | TDefault;
-    interface LodashPathOr1x4<TObject> {
-        <TDefault>(defaultValue: TDefault): LodashPathOr1x5<TObject, TDefault>;
-        <TKey extends keyof TObject>(defaultValue: lodash.__, path: TKey | [TKey]): LodashPathOr1x6<TObject, TKey>;
-        <TKey extends keyof TObject, TDefault>(defaultValue: TDefault, path: TKey | [TKey]): TObject[TKey] | TDefault;
-    }
-    type LodashPathOr1x5<TObject, TDefault> = <TKey extends keyof TObject>(path: TKey | [TKey]) => TObject[TKey] | TDefault;
-    type LodashPathOr1x6<TObject, TKey extends keyof TObject> = <TDefault>(defaultValue: TDefault) => TObject[TKey] | TDefault;
-    interface LodashPathOr2x2 {
-        <TDefault>(defaultValue: TDefault): LodashPathOr2x3<TDefault>;
-        <T>(defaultValue: lodash.__, object: lodash.NumericDictionary<T> | null | undefined): LodashPathOr2x6<T>;
-        <T, TDefault>(defaultValue: TDefault, object: lodash.NumericDictionary<T> | null | undefined): T | TDefault;
-    }
-    type LodashPathOr2x3<TDefault> = <T>(object: lodash.NumericDictionary<T> | null | undefined) => T | TDefault;
-    interface LodashPathOr2x4<T> {
-        <TDefault>(defaultValue: TDefault): LodashPathOr2x5<T, TDefault>;
-        (defaultValue: lodash.__, path: number): LodashPathOr2x6<T>;
-        <TDefault>(defaultValue: TDefault, path: number): T | TDefault;
-    }
-    type LodashPathOr2x5<T, TDefault> = (path: number) => T | TDefault;
-    type LodashPathOr2x6<T> = <TDefault>(defaultValue: TDefault) => T | TDefault;
-    interface LodashPathOr3x2 {
-        <TDefault>(defaultValue: TDefault): LodashPathOr3x3<TDefault>;
-        (defaultValue: lodash.__, object: null | undefined): LodashPathOr3x6;
-        <TDefault>(defaultValue: TDefault, object: null | undefined): TDefault;
-        (defaultValue: any): LodashPathOr4x3;
-        (defaultValue: lodash.__, object: any): LodashPathOr4x6;
-        (defaultValue: any, object: any): any;
-    }
-    type LodashPathOr3x3<TDefault> = (object: null | undefined) => TDefault;
-    interface LodashPathOr3x4 {
-        <TDefault>(defaultValue: TDefault): LodashPathOr3x5<TDefault>;
-        (defaultValue: lodash.__, path: lodash.PropertyPath): LodashPathOr3x6;
-        <TDefault>(defaultValue: TDefault, path: lodash.PropertyPath): TDefault;
-    }
-    type LodashPathOr3x5<TDefault> = (path: lodash.PropertyPath) => TDefault;
-    type LodashPathOr3x6 = <TDefault>(defaultValue: TDefault) => TDefault;
-    interface LodashPathOr4x1 {
-        (path: lodash.PropertyPath): LodashPathOr4x3;
-        (path: lodash.__, object: any): LodashPathOr4x5;
-        (path: lodash.PropertyPath, object: any): any;
-    }
-    type LodashPathOr4x3 = (object: any) => any;
-    interface LodashPathOr4x4 {
-        (defaultValue: any): LodashPathOr4x5;
-        (defaultValue: lodash.__, path: lodash.PropertyPath): LodashPathOr4x6;
-        (defaultValue: any, path: lodash.PropertyPath): any;
-    }
-    type LodashPathOr4x5 = (path: lodash.PropertyPath) => any;
-    type LodashPathOr4x6 = (defaultValue: any) => any;
-    interface LodashPick {
-        <T extends object, U extends keyof T>(props: lodash.Many<U>): LodashPick1x1<T, U>;
-        <T extends object>(props: lodash.__, object: T): LodashPick1x2<T>;
-        <T extends object, U extends keyof T>(props: lodash.Many<U>, object: T): Pick<T, U>;
-        (props: lodash.PropertyPath): LodashPick2x1;
-        <T>(props: lodash.__, object: T | null | undefined): LodashPick2x2<T>;
-        <T>(props: lodash.PropertyPath, object: T | null | undefined): lodash.PartialDeep<T>;
-    }
-    type LodashPick1x1<T, U extends keyof T> = (object: T) => Pick<T, U>;
-    type LodashPick1x2<T> = <U extends keyof T>(props: lodash.Many<U>) => Pick<T, U>;
-    type LodashPick2x1 = <T>(object: T | null | undefined) => lodash.PartialDeep<T>;
-    type LodashPick2x2<T> = (props: lodash.PropertyPath) => lodash.PartialDeep<T>;
-    interface LodashPickBy {
-        <T>(predicate: lodash.ValueKeyIteratee<T>): LodashPickBy1x1<T>;
-        <T extends object>(predicate: lodash.__, object: T | null | undefined): LodashPickBy1x2<T>;
-        <T extends object>(predicate: lodash.ValueKeyIteratee<T[keyof T]>, object: T | null | undefined): lodash.PartialObject<T>;
-    }
-    type LodashPickBy1x1<T> = <T1 extends object>(object: T1 | null | undefined) => lodash.PartialObject<T1>;
-    type LodashPickBy1x2<T> = (predicate: lodash.ValueKeyIteratee<T[keyof T]>) => lodash.PartialObject<T>;
-    interface LodashProp {
-        <TObject extends object, TKey extends keyof TObject>(path: TKey | [TKey]): LodashProp1x1<TObject, TKey>;
-        <TObject extends object>(path: lodash.__, object: TObject): LodashProp1x2<TObject>;
-        <TObject extends object, TKey extends keyof TObject>(path: TKey | [TKey], object: TObject): TObject[TKey];
-        <TObject extends object>(path: lodash.__, object: TObject | null | undefined): LodashProp2x2<TObject>;
-        <TObject extends object, TKey extends keyof TObject>(path: TKey | [TKey], object: TObject | null | undefined): TObject[TKey] | undefined;
-        (path: number): LodashProp3x1;
-        <T>(path: lodash.__, object: lodash.NumericDictionary<T>): LodashProp3x2<T>;
-        <T>(path: number, object: lodash.NumericDictionary<T>): T;
-        <T>(path: lodash.__, object: lodash.NumericDictionary<T> | null | undefined): LodashProp4x2<T>;
-        <T>(path: number, object: lodash.NumericDictionary<T> | null | undefined): T | undefined;
-        (path: lodash.PropertyPath): LodashProp5x1;
-        (path: lodash.__, object: null | undefined): LodashProp5x2;
-        (path: lodash.PropertyPath, object: null | undefined): undefined;
-        (path: lodash.__, object: any): LodashProp6x2;
-        (path: lodash.PropertyPath, object: any): any;
-    }
-    interface LodashProp1x1<TObject, TKey extends keyof TObject> {
-        (object: TObject): TObject[TKey];
-        (object: TObject | null | undefined): TObject[TKey] | undefined;
-    }
-    type LodashProp1x2<TObject> = <TKey extends keyof TObject>(path: TKey | [TKey]) => TObject[TKey];
-    type LodashProp2x2<TObject> = <TKey extends keyof TObject>(path: TKey | [TKey]) => TObject[TKey] | undefined;
-    interface LodashProp3x1 {
-        <T>(object: lodash.NumericDictionary<T>): T;
-        <T>(object: lodash.NumericDictionary<T> | null | undefined): T | undefined;
-    }
-    type LodashProp3x2<T> = (path: number) => T;
-    type LodashProp4x2<T> = (path: number) => T | undefined;
-    interface LodashProp5x1 {
-        (object: null | undefined): undefined;
-        (object: any): any;
-    }
-    type LodashProp5x2 = (path: lodash.PropertyPath) => undefined;
-    type LodashProp6x2 = (path: lodash.PropertyPath) => any;
-    interface LodashProperty {
-        <TObject extends object, TKey extends keyof TObject>(path: TKey | [TKey]): LodashProperty1x1<TObject, TKey>;
-        <TObject extends object>(path: lodash.__, object: TObject): LodashProperty1x2<TObject>;
-        <TObject extends object, TKey extends keyof TObject>(path: TKey | [TKey], object: TObject): TObject[TKey];
-        <TObject extends object>(path: lodash.__, object: TObject | null | undefined): LodashProperty2x2<TObject>;
-        <TObject extends object, TKey extends keyof TObject>(path: TKey | [TKey], object: TObject | null | undefined): TObject[TKey] | undefined;
-        (path: number): LodashProperty3x1;
-        <T>(path: lodash.__, object: lodash.NumericDictionary<T>): LodashProperty3x2<T>;
-        <T>(path: number, object: lodash.NumericDictionary<T>): T;
-        <T>(path: lodash.__, object: lodash.NumericDictionary<T> | null | undefined): LodashProperty4x2<T>;
-        <T>(path: number, object: lodash.NumericDictionary<T> | null | undefined): T | undefined;
-        (path: lodash.PropertyPath): LodashProperty5x1;
-        (path: lodash.__, object: null | undefined): LodashProperty5x2;
-        (path: lodash.PropertyPath, object: null | undefined): undefined;
-        (path: lodash.__, object: any): LodashProperty6x2;
-        (path: lodash.PropertyPath, object: any): any;
-    }
-    interface LodashProperty1x1<TObject, TKey extends keyof TObject> {
-        (object: TObject): TObject[TKey];
-        (object: TObject | null | undefined): TObject[TKey] | undefined;
-    }
-    type LodashProperty1x2<TObject> = <TKey extends keyof TObject>(path: TKey | [TKey]) => TObject[TKey];
-    type LodashProperty2x2<TObject> = <TKey extends keyof TObject>(path: TKey | [TKey]) => TObject[TKey] | undefined;
-    interface LodashProperty3x1 {
-        <T>(object: lodash.NumericDictionary<T>): T;
-        <T>(object: lodash.NumericDictionary<T> | null | undefined): T | undefined;
-    }
-    type LodashProperty3x2<T> = (path: number) => T;
-    type LodashProperty4x2<T> = (path: number) => T | undefined;
-    interface LodashProperty5x1 {
-        (object: null | undefined): undefined;
-        (object: any): any;
-    }
-    type LodashProperty5x2 = (path: lodash.PropertyPath) => undefined;
-    type LodashProperty6x2 = (path: lodash.PropertyPath) => any;
-    interface LodashPropertyOf {
-        <TObject extends object, TKey extends keyof TObject>(path: TKey | [TKey]): LodashPropertyOf1x1<TObject, TKey>;
-        <TObject extends object>(path: lodash.__, object: TObject): LodashPropertyOf1x2<TObject>;
-        <TObject extends object, TKey extends keyof TObject>(path: TKey | [TKey], object: TObject): TObject[TKey];
-        <TObject extends object>(path: lodash.__, object: TObject | null | undefined): LodashPropertyOf2x2<TObject>;
-        <TObject extends object, TKey extends keyof TObject>(path: TKey | [TKey], object: TObject | null | undefined): TObject[TKey] | undefined;
-        (path: number): LodashPropertyOf3x1;
-        <T>(path: lodash.__, object: lodash.NumericDictionary<T>): LodashPropertyOf3x2<T>;
-        <T>(path: number, object: lodash.NumericDictionary<T>): T;
-        <T>(path: lodash.__, object: lodash.NumericDictionary<T> | null | undefined): LodashPropertyOf4x2<T>;
-        <T>(path: number, object: lodash.NumericDictionary<T> | null | undefined): T | undefined;
-        (path: lodash.PropertyPath): LodashPropertyOf5x1;
-        (path: lodash.__, object: null | undefined): LodashPropertyOf5x2;
-        (path: lodash.PropertyPath, object: null | undefined): undefined;
-        (path: lodash.__, object: any): LodashPropertyOf6x2;
-        (path: lodash.PropertyPath, object: any): any;
-    }
-    interface LodashPropertyOf1x1<TObject, TKey extends keyof TObject> {
-        (object: TObject): TObject[TKey];
-        (object: TObject | null | undefined): TObject[TKey] | undefined;
-    }
-    type LodashPropertyOf1x2<TObject> = <TKey extends keyof TObject>(path: TKey | [TKey]) => TObject[TKey];
-    type LodashPropertyOf2x2<TObject> = <TKey extends keyof TObject>(path: TKey | [TKey]) => TObject[TKey] | undefined;
-    interface LodashPropertyOf3x1 {
-        <T>(object: lodash.NumericDictionary<T>): T;
-        <T>(object: lodash.NumericDictionary<T> | null | undefined): T | undefined;
-    }
-    type LodashPropertyOf3x2<T> = (path: number) => T;
-    type LodashPropertyOf4x2<T> = (path: number) => T | undefined;
-    interface LodashPropertyOf5x1 {
-        (object: null | undefined): undefined;
-        (object: any): any;
-    }
-    type LodashPropertyOf5x2 = (path: lodash.PropertyPath) => undefined;
-    type LodashPropertyOf6x2 = (path: lodash.PropertyPath) => any;
-    interface LodashPropOr {
-        <TDefault>(defaultValue: TDefault): LodashPropOr1x1<TDefault>;
-        <TObject extends object, TKey extends keyof TObject>(defaultValue: lodash.__, path: TKey | [TKey]): LodashPropOr1x2<TObject, TKey>;
-        <TObject extends object, TKey extends keyof TObject, TDefault>(defaultValue: TDefault, path: TKey | [TKey]): LodashPropOr1x3<TObject, TKey, TDefault>;
-        <TObject extends object>(defaultValue: lodash.__, path: lodash.__, object: TObject | null | undefined): LodashPropOr1x4<TObject>;
-        <TObject extends object, TDefault>(defaultValue: TDefault, path: lodash.__, object: TObject | null | undefined): LodashPropOr1x5<TObject, TDefault>;
-        <TObject extends object, TKey extends keyof TObject>(defaultValue: lodash.__, path: TKey | [TKey], object: TObject | null | undefined): LodashPropOr1x6<TObject, TKey>;
-        <TObject extends object, TKey extends keyof TObject, TDefault>(defaultValue: TDefault, path: TKey | [TKey], object: TObject | null | undefined): TObject[TKey] | TDefault;
-        (defaultValue: lodash.__, path: number): LodashPropOr2x2;
-        <TDefault>(defaultValue: TDefault, path: number): LodashPropOr2x3<TDefault>;
-        <T>(defaultValue: lodash.__, path: lodash.__, object: lodash.NumericDictionary<T> | null | undefined): LodashPropOr2x4<T>;
-        <T, TDefault>(defaultValue: TDefault, path: lodash.__, object: lodash.NumericDictionary<T> | null | undefined): LodashPropOr2x5<T, TDefault>;
-        <T>(defaultValue: lodash.__, path: number, object: lodash.NumericDictionary<T> | null | undefined): LodashPropOr2x6<T>;
-        <T, TDefault>(defaultValue: TDefault, path: number, object: lodash.NumericDictionary<T> | null | undefined): T | TDefault;
-        (defaultValue: lodash.__, path: lodash.PropertyPath): LodashPropOr3x2;
-        <TDefault>(defaultValue: TDefault, path: lodash.PropertyPath): LodashPropOr3x3<TDefault>;
-        (defaultValue: lodash.__, path: lodash.__, object: null | undefined): LodashPropOr3x4;
-        <TDefault>(defaultValue: TDefault, path: lodash.__, object: null | undefined): LodashPropOr3x5<TDefault>;
-        (defaultValue: lodash.__, path: lodash.PropertyPath, object: null | undefined): LodashPropOr3x6;
-        <TDefault>(defaultValue: TDefault, path: lodash.PropertyPath, object: null | undefined): TDefault;
-        (defaultValue: any): LodashPropOr4x1;
-        (defaultValue: any, path: lodash.PropertyPath): LodashPropOr4x3;
-        (defaultValue: lodash.__, path: lodash.__, object: any): LodashPropOr4x4;
-        (defaultValue: any, path: lodash.__, object: any): LodashPropOr4x5;
-        (defaultValue: lodash.__, path: lodash.PropertyPath, object: any): LodashPropOr4x6;
-        (defaultValue: any, path: lodash.PropertyPath, object: any): any;
-    }
-    interface LodashPropOr1x1<TDefault> {
-        <TObject extends object, TKey extends keyof TObject>(path: TKey | [TKey]): LodashPropOr1x3<TObject, TKey, TDefault>;
-        <TObject extends object>(path: lodash.__, object: TObject | null | undefined): LodashPropOr1x5<TObject, TDefault>;
-        <TObject extends object, TKey extends keyof TObject>(path: TKey | [TKey], object: TObject | null | undefined): TObject[TKey] | TDefault;
-        (path: number): LodashPropOr2x3<TDefault>;
-        <T>(path: lodash.__, object: lodash.NumericDictionary<T> | null | undefined): LodashPropOr2x5<T, TDefault>;
-        <T>(path: number, object: lodash.NumericDictionary<T> | null | undefined): T | TDefault;
-        (path: lodash.PropertyPath): LodashPropOr3x3<TDefault>;
-        (path: lodash.__, object: null | undefined): LodashPropOr3x5<TDefault>;
-        (path: lodash.PropertyPath, object: null | undefined): TDefault;
-    }
-    interface LodashPropOr1x2<TObject, TKey extends keyof TObject> {
-        <TDefault>(defaultValue: TDefault): LodashPropOr1x3<TObject, TKey, TDefault>;
-        (defaultValue: lodash.__, object: TObject | null | undefined): LodashPropOr1x6<TObject, TKey>;
-        <TDefault>(defaultValue: TDefault, object: TObject | null | undefined): TObject[TKey] | TDefault;
-    }
-    type LodashPropOr1x3<TObject, TKey extends keyof TObject, TDefault> = (object: TObject | null | undefined) => TObject[TKey] | TDefault;
-    interface LodashPropOr1x4<TObject> {
-        <TDefault>(defaultValue: TDefault): LodashPropOr1x5<TObject, TDefault>;
-        <TKey extends keyof TObject>(defaultValue: lodash.__, path: TKey | [TKey]): LodashPropOr1x6<TObject, TKey>;
-        <TKey extends keyof TObject, TDefault>(defaultValue: TDefault, path: TKey | [TKey]): TObject[TKey] | TDefault;
-    }
-    type LodashPropOr1x5<TObject, TDefault> = <TKey extends keyof TObject>(path: TKey | [TKey]) => TObject[TKey] | TDefault;
-    type LodashPropOr1x6<TObject, TKey extends keyof TObject> = <TDefault>(defaultValue: TDefault) => TObject[TKey] | TDefault;
-    interface LodashPropOr2x2 {
-        <TDefault>(defaultValue: TDefault): LodashPropOr2x3<TDefault>;
-        <T>(defaultValue: lodash.__, object: lodash.NumericDictionary<T> | null | undefined): LodashPropOr2x6<T>;
-        <T, TDefault>(defaultValue: TDefault, object: lodash.NumericDictionary<T> | null | undefined): T | TDefault;
-    }
-    type LodashPropOr2x3<TDefault> = <T>(object: lodash.NumericDictionary<T> | null | undefined) => T | TDefault;
-    interface LodashPropOr2x4<T> {
-        <TDefault>(defaultValue: TDefault): LodashPropOr2x5<T, TDefault>;
-        (defaultValue: lodash.__, path: number): LodashPropOr2x6<T>;
-        <TDefault>(defaultValue: TDefault, path: number): T | TDefault;
-    }
-    type LodashPropOr2x5<T, TDefault> = (path: number) => T | TDefault;
-    type LodashPropOr2x6<T> = <TDefault>(defaultValue: TDefault) => T | TDefault;
-    interface LodashPropOr3x2 {
-        <TDefault>(defaultValue: TDefault): LodashPropOr3x3<TDefault>;
-        (defaultValue: lodash.__, object: null | undefined): LodashPropOr3x6;
-        <TDefault>(defaultValue: TDefault, object: null | undefined): TDefault;
-        (defaultValue: any): LodashPropOr4x3;
-        (defaultValue: lodash.__, object: any): LodashPropOr4x6;
-        (defaultValue: any, object: any): any;
-    }
-    type LodashPropOr3x3<TDefault> = (object: null | undefined) => TDefault;
-    interface LodashPropOr3x4 {
-        <TDefault>(defaultValue: TDefault): LodashPropOr3x5<TDefault>;
-        (defaultValue: lodash.__, path: lodash.PropertyPath): LodashPropOr3x6;
-        <TDefault>(defaultValue: TDefault, path: lodash.PropertyPath): TDefault;
-    }
-    type LodashPropOr3x5<TDefault> = (path: lodash.PropertyPath) => TDefault;
-    type LodashPropOr3x6 = <TDefault>(defaultValue: TDefault) => TDefault;
-    interface LodashPropOr4x1 {
-        (path: lodash.PropertyPath): LodashPropOr4x3;
-        (path: lodash.__, object: any): LodashPropOr4x5;
-        (path: lodash.PropertyPath, object: any): any;
-    }
-    type LodashPropOr4x3 = (object: any) => any;
-    interface LodashPropOr4x4 {
-        (defaultValue: any): LodashPropOr4x5;
-        (defaultValue: lodash.__, path: lodash.PropertyPath): LodashPropOr4x6;
-        (defaultValue: any, path: lodash.PropertyPath): any;
-    }
-    type LodashPropOr4x5 = (path: lodash.PropertyPath) => any;
-    type LodashPropOr4x6 = (defaultValue: any) => any;
-    interface LodashPull {
-        <T>(values: T): LodashPull1x1<T>;
-        <T>(values: lodash.__, array: ReadonlyArray<T>): LodashPull1x2<T>;
-        <T>(values: T, array: ReadonlyArray<T>): T[];
-        <T>(values: lodash.__, array: lodash.List<T>): LodashPull2x2<T>;
-        <T>(values: T, array: lodash.List<T>): lodash.List<T>;
-    }
-    interface LodashPull1x1<T> {
-        (array: ReadonlyArray<T>): T[];
-        (array: lodash.List<T>): lodash.List<T>;
-    }
-    type LodashPull1x2<T> = (values: T) => T[];
-    type LodashPull2x2<T> = (values: T) => lodash.List<T>;
-    interface LodashPullAll {
-        <T>(values: lodash.List<T>): LodashPullAll1x1<T>;
-        <T>(values: lodash.__, array: ReadonlyArray<T>): LodashPullAll1x2<T>;
-        <T>(values: lodash.List<T>, array: ReadonlyArray<T>): T[];
-        <T>(values: lodash.__, array: lodash.List<T>): LodashPullAll2x2<T>;
-        <T>(values: lodash.List<T>, array: lodash.List<T>): lodash.List<T>;
-    }
-    interface LodashPullAll1x1<T> {
-        (array: ReadonlyArray<T>): T[];
-        (array: lodash.List<T>): lodash.List<T>;
-    }
-    type LodashPullAll1x2<T> = (values: lodash.List<T>) => T[];
-    type LodashPullAll2x2<T> = (values: lodash.List<T>) => lodash.List<T>;
-    interface LodashPullAllBy {
-        <T>(iteratee: lodash.ValueIteratee<T>): LodashPullAllBy1x1<T>;
-        <T>(iteratee: lodash.__, values: lodash.List<T>): LodashPullAllBy1x2<T>;
-        <T>(iteratee: lodash.ValueIteratee<T>, values: lodash.List<T>): LodashPullAllBy1x3<T>;
-        <T>(iteratee: lodash.__, values: lodash.__, array: ReadonlyArray<T>): LodashPullAllBy1x4<T>;
-        <T>(iteratee: lodash.ValueIteratee<T>, values: lodash.__, array: ReadonlyArray<T>): LodashPullAllBy1x5<T>;
-        <T>(iteratee: lodash.__, values: lodash.List<T>, array: ReadonlyArray<T>): LodashPullAllBy1x6<T>;
-        <T>(iteratee: lodash.ValueIteratee<T>, values: lodash.List<T>, array: ReadonlyArray<T>): T[];
-        <T>(iteratee: lodash.__, values: lodash.__, array: lodash.List<T>): LodashPullAllBy2x4<T>;
-        <T>(iteratee: lodash.ValueIteratee<T>, values: lodash.__, array: lodash.List<T>): LodashPullAllBy2x5<T>;
-        <T>(iteratee: lodash.__, values: lodash.List<T>, array: lodash.List<T>): LodashPullAllBy2x6<T>;
-        <T>(iteratee: lodash.ValueIteratee<T>, values: lodash.List<T>, array: lodash.List<T>): lodash.List<T>;
-        <T1, T2>(iteratee: lodash.ValueIteratee<T1 | T2>): LodashPullAllBy3x1<T1, T2>;
-        <T2>(iteratee: lodash.__, values: lodash.List<T2>): LodashPullAllBy3x2<T2>;
-        <T1, T2>(iteratee: lodash.ValueIteratee<T1 | T2>, values: lodash.List<T2>): LodashPullAllBy3x3<T1>;
-        <T1>(iteratee: lodash.__, values: lodash.__, array: ReadonlyArray<T1>): LodashPullAllBy3x4<T1>;
-        <T1, T2>(iteratee: lodash.ValueIteratee<T1 | T2>, values: lodash.__, array: ReadonlyArray<T1>): LodashPullAllBy3x5<T1, T2>;
-        <T1, T2>(iteratee: lodash.__, values: lodash.List<T2>, array: ReadonlyArray<T1>): LodashPullAllBy3x6<T1, T2>;
-        <T1, T2>(iteratee: lodash.ValueIteratee<T1 | T2>, values: lodash.List<T2>, array: ReadonlyArray<T1>): T1[];
-        <T1>(iteratee: lodash.__, values: lodash.__, array: lodash.List<T1>): LodashPullAllBy4x4<T1>;
-        <T1, T2>(iteratee: lodash.ValueIteratee<T1 | T2>, values: lodash.__, array: lodash.List<T1>): LodashPullAllBy4x5<T1, T2>;
-        <T1, T2>(iteratee: lodash.__, values: lodash.List<T2>, array: lodash.List<T1>): LodashPullAllBy4x6<T1, T2>;
-        <T1, T2>(iteratee: lodash.ValueIteratee<T1 | T2>, values: lodash.List<T2>, array: lodash.List<T1>): lodash.List<T1>;
-    }
-    interface LodashPullAllBy1x1<T> {
-        (values: lodash.List<T>): LodashPullAllBy1x3<T>;
-        (values: lodash.__, array: ReadonlyArray<T>): LodashPullAllBy1x5<T>;
-        (values: lodash.List<T>, array: ReadonlyArray<T>): T[];
-        (values: lodash.__, array: lodash.List<T>): LodashPullAllBy2x5<T>;
-        (values: lodash.List<T>, array: lodash.List<T>): lodash.List<T>;
-    }
-    interface LodashPullAllBy1x2<T> {
-        (iteratee: lodash.ValueIteratee<T>): LodashPullAllBy1x3<T>;
-        (iteratee: lodash.__, array: ReadonlyArray<T>): LodashPullAllBy1x6<T>;
-        (iteratee: lodash.ValueIteratee<T>, array: ReadonlyArray<T>): T[];
-        (iteratee: lodash.__, array: lodash.List<T>): LodashPullAllBy2x6<T>;
-        (iteratee: lodash.ValueIteratee<T>, array: lodash.List<T>): lodash.List<T>;
-    }
-    interface LodashPullAllBy1x3<T> {
-        (array: ReadonlyArray<T>): T[];
-        (array: lodash.List<T>): lodash.List<T>;
-    }
-    interface LodashPullAllBy1x4<T> {
-        (iteratee: lodash.ValueIteratee<T>): LodashPullAllBy1x5<T>;
-        (iteratee: lodash.__, values: lodash.List<T>): LodashPullAllBy1x6<T>;
-        (iteratee: lodash.ValueIteratee<T>, values: lodash.List<T>): T[];
-    }
-    type LodashPullAllBy1x5<T> = (values: lodash.List<T>) => T[];
-    type LodashPullAllBy1x6<T> = (iteratee: lodash.ValueIteratee<T>) => T[];
-    interface LodashPullAllBy2x4<T> {
-        (iteratee: lodash.ValueIteratee<T>): LodashPullAllBy2x5<T>;
-        (iteratee: lodash.__, values: lodash.List<T>): LodashPullAllBy2x6<T>;
-        (iteratee: lodash.ValueIteratee<T>, values: lodash.List<T>): lodash.List<T>;
-    }
-    type LodashPullAllBy2x5<T> = (values: lodash.List<T>) => lodash.List<T>;
-    type LodashPullAllBy2x6<T> = (iteratee: lodash.ValueIteratee<T>) => lodash.List<T>;
-    interface LodashPullAllBy3x1<T1, T2> {
-        (values: lodash.List<T2>): LodashPullAllBy3x3<T1>;
-        (values: lodash.__, array: ReadonlyArray<T1>): LodashPullAllBy3x5<T1, T2>;
-        (values: lodash.List<T2>, array: ReadonlyArray<T1>): T1[];
-        (values: lodash.__, array: lodash.List<T1>): LodashPullAllBy4x5<T1, T2>;
-        (values: lodash.List<T2>, array: lodash.List<T1>): lodash.List<T1>;
-    }
-    interface LodashPullAllBy3x2<T2> {
-        <T1>(iteratee: lodash.ValueIteratee<T1 | T2>): LodashPullAllBy3x3<T1>;
-        <T1>(iteratee: lodash.__, array: ReadonlyArray<T1>): LodashPullAllBy3x6<T1, T2>;
-        <T1>(iteratee: lodash.ValueIteratee<T1 | T2>, array: ReadonlyArray<T1>): T1[];
-        <T1>(iteratee: lodash.__, array: lodash.List<T1>): LodashPullAllBy4x6<T1, T2>;
-        <T1>(iteratee: lodash.ValueIteratee<T1 | T2>, array: lodash.List<T1>): lodash.List<T1>;
-    }
-    interface LodashPullAllBy3x3<T1> {
-        (array: ReadonlyArray<T1>): T1[];
-        (array: lodash.List<T1>): lodash.List<T1>;
-    }
-    interface LodashPullAllBy3x4<T1> {
-        <T2>(iteratee: lodash.ValueIteratee<T1 | T2>): LodashPullAllBy3x5<T1, T2>;
-        <T2>(iteratee: lodash.__, values: lodash.List<T2>): LodashPullAllBy3x6<T1, T2>;
-        <T2>(iteratee: lodash.ValueIteratee<T1 | T2>, values: lodash.List<T2>): T1[];
-    }
-    type LodashPullAllBy3x5<T1, T2> = (values: lodash.List<T2>) => T1[];
-    type LodashPullAllBy3x6<T1, T2> = (iteratee: lodash.ValueIteratee<T1 | T2>) => T1[];
-    interface LodashPullAllBy4x4<T1> {
-        <T2>(iteratee: lodash.ValueIteratee<T1 | T2>): LodashPullAllBy4x5<T1, T2>;
-        <T2>(iteratee: lodash.__, values: lodash.List<T2>): LodashPullAllBy4x6<T1, T2>;
-        <T2>(iteratee: lodash.ValueIteratee<T1 | T2>, values: lodash.List<T2>): lodash.List<T1>;
-    }
-    type LodashPullAllBy4x5<T1, T2> = (values: lodash.List<T2>) => lodash.List<T1>;
-    type LodashPullAllBy4x6<T1, T2> = (iteratee: lodash.ValueIteratee<T1 | T2>) => lodash.List<T1>;
-    interface LodashPullAllWith {
-        <T>(comparator: lodash.Comparator<T>): LodashPullAllWith1x1<T>;
-        <T>(comparator: lodash.__, values: lodash.List<T>): LodashPullAllWith1x2<T>;
-        <T>(comparator: lodash.Comparator<T>, values: lodash.List<T>): LodashPullAllWith1x3<T>;
-        <T>(comparator: lodash.__, values: lodash.__, array: ReadonlyArray<T>): LodashPullAllWith1x4<T>;
-        <T>(comparator: lodash.Comparator<T>, values: lodash.__, array: ReadonlyArray<T>): LodashPullAllWith1x5<T>;
-        <T>(comparator: lodash.__, values: lodash.List<T>, array: ReadonlyArray<T>): LodashPullAllWith1x6<T>;
-        <T>(comparator: lodash.Comparator<T>, values: lodash.List<T>, array: ReadonlyArray<T>): T[];
-        <T>(comparator: lodash.__, values: lodash.__, array: lodash.List<T>): LodashPullAllWith2x4<T>;
-        <T>(comparator: lodash.Comparator<T>, values: lodash.__, array: lodash.List<T>): LodashPullAllWith2x5<T>;
-        <T>(comparator: lodash.__, values: lodash.List<T>, array: lodash.List<T>): LodashPullAllWith2x6<T>;
-        <T>(comparator: lodash.Comparator<T>, values: lodash.List<T>, array: lodash.List<T>): lodash.List<T>;
-        <T1, T2>(comparator: lodash.Comparator2<T1, T2>): LodashPullAllWith3x1<T1, T2>;
-        <T2>(comparator: lodash.__, values: lodash.List<T2>): LodashPullAllWith3x2<T2>;
-        <T1, T2>(comparator: lodash.Comparator2<T1, T2>, values: lodash.List<T2>): LodashPullAllWith3x3<T1>;
-        <T1>(comparator: lodash.__, values: lodash.__, array: ReadonlyArray<T1>): LodashPullAllWith3x4<T1>;
-        <T1, T2>(comparator: lodash.Comparator2<T1, T2>, values: lodash.__, array: ReadonlyArray<T1>): LodashPullAllWith3x5<T1, T2>;
-        <T1, T2>(comparator: lodash.__, values: lodash.List<T2>, array: ReadonlyArray<T1>): LodashPullAllWith3x6<T1, T2>;
-        <T1, T2>(comparator: lodash.Comparator2<T1, T2>, values: lodash.List<T2>, array: ReadonlyArray<T1>): T1[];
-        <T1>(comparator: lodash.__, values: lodash.__, array: lodash.List<T1>): LodashPullAllWith4x4<T1>;
-        <T1, T2>(comparator: lodash.Comparator2<T1, T2>, values: lodash.__, array: lodash.List<T1>): LodashPullAllWith4x5<T1, T2>;
-        <T1, T2>(comparator: lodash.__, values: lodash.List<T2>, array: lodash.List<T1>): LodashPullAllWith4x6<T1, T2>;
-        <T1, T2>(comparator: lodash.Comparator2<T1, T2>, values: lodash.List<T2>, array: lodash.List<T1>): lodash.List<T1>;
-    }
-    interface LodashPullAllWith1x1<T> {
-        (values: lodash.List<T>): LodashPullAllWith1x3<T>;
-        (values: lodash.__, array: ReadonlyArray<T>): LodashPullAllWith1x5<T>;
-        (values: lodash.List<T>, array: ReadonlyArray<T>): T[];
-        (values: lodash.__, array: lodash.List<T>): LodashPullAllWith2x5<T>;
-        (values: lodash.List<T>, array: lodash.List<T>): lodash.List<T>;
-    }
-    interface LodashPullAllWith1x2<T> {
-        (comparator: lodash.Comparator<T>): LodashPullAllWith1x3<T>;
-        (comparator: lodash.__, array: ReadonlyArray<T>): LodashPullAllWith1x6<T>;
-        (comparator: lodash.Comparator<T>, array: ReadonlyArray<T>): T[];
-        (comparator: lodash.__, array: lodash.List<T>): LodashPullAllWith2x6<T>;
-        (comparator: lodash.Comparator<T>, array: lodash.List<T>): lodash.List<T>;
-    }
-    interface LodashPullAllWith1x3<T> {
-        (array: ReadonlyArray<T>): T[];
-        (array: lodash.List<T>): lodash.List<T>;
-    }
-    interface LodashPullAllWith1x4<T> {
-        (comparator: lodash.Comparator<T>): LodashPullAllWith1x5<T>;
-        (comparator: lodash.__, values: lodash.List<T>): LodashPullAllWith1x6<T>;
-        (comparator: lodash.Comparator<T>, values: lodash.List<T>): T[];
-    }
-    type LodashPullAllWith1x5<T> = (values: lodash.List<T>) => T[];
-    type LodashPullAllWith1x6<T> = (comparator: lodash.Comparator<T>) => T[];
-    interface LodashPullAllWith2x4<T> {
-        (comparator: lodash.Comparator<T>): LodashPullAllWith2x5<T>;
-        (comparator: lodash.__, values: lodash.List<T>): LodashPullAllWith2x6<T>;
-        (comparator: lodash.Comparator<T>, values: lodash.List<T>): lodash.List<T>;
-    }
-    type LodashPullAllWith2x5<T> = (values: lodash.List<T>) => lodash.List<T>;
-    type LodashPullAllWith2x6<T> = (comparator: lodash.Comparator<T>) => lodash.List<T>;
-    interface LodashPullAllWith3x1<T1, T2> {
-        (values: lodash.List<T2>): LodashPullAllWith3x3<T1>;
-        (values: lodash.__, array: ReadonlyArray<T1>): LodashPullAllWith3x5<T1, T2>;
-        (values: lodash.List<T2>, array: ReadonlyArray<T1>): T1[];
-        (values: lodash.__, array: lodash.List<T1>): LodashPullAllWith4x5<T1, T2>;
-        (values: lodash.List<T2>, array: lodash.List<T1>): lodash.List<T1>;
-    }
-    interface LodashPullAllWith3x2<T2> {
-        <T1>(comparator: lodash.Comparator2<T1, T2>): LodashPullAllWith3x3<T1>;
-        <T1>(comparator: lodash.__, array: ReadonlyArray<T1>): LodashPullAllWith3x6<T1, T2>;
-        <T1>(comparator: lodash.Comparator2<T1, T2>, array: ReadonlyArray<T1>): T1[];
-        <T1>(comparator: lodash.__, array: lodash.List<T1>): LodashPullAllWith4x6<T1, T2>;
-        <T1>(comparator: lodash.Comparator2<T1, T2>, array: lodash.List<T1>): lodash.List<T1>;
-    }
-    interface LodashPullAllWith3x3<T1> {
-        (array: ReadonlyArray<T1>): T1[];
-        (array: lodash.List<T1>): lodash.List<T1>;
-    }
-    interface LodashPullAllWith3x4<T1> {
-        <T2>(comparator: lodash.Comparator2<T1, T2>): LodashPullAllWith3x5<T1, T2>;
-        <T2>(comparator: lodash.__, values: lodash.List<T2>): LodashPullAllWith3x6<T1, T2>;
-        <T2>(comparator: lodash.Comparator2<T1, T2>, values: lodash.List<T2>): T1[];
-    }
-    type LodashPullAllWith3x5<T1, T2> = (values: lodash.List<T2>) => T1[];
-    type LodashPullAllWith3x6<T1, T2> = (comparator: lodash.Comparator2<T1, T2>) => T1[];
-    interface LodashPullAllWith4x4<T1> {
-        <T2>(comparator: lodash.Comparator2<T1, T2>): LodashPullAllWith4x5<T1, T2>;
-        <T2>(comparator: lodash.__, values: lodash.List<T2>): LodashPullAllWith4x6<T1, T2>;
-        <T2>(comparator: lodash.Comparator2<T1, T2>, values: lodash.List<T2>): lodash.List<T1>;
-    }
-    type LodashPullAllWith4x5<T1, T2> = (values: lodash.List<T2>) => lodash.List<T1>;
-    type LodashPullAllWith4x6<T1, T2> = (comparator: lodash.Comparator2<T1, T2>) => lodash.List<T1>;
-    interface LodashPullAt {
-        (indexes: lodash.Many<number>): LodashPullAt1x1;
-        <T>(indexes: lodash.__, array: ReadonlyArray<T>): LodashPullAt1x2<T>;
-        <T>(indexes: lodash.Many<number>, array: ReadonlyArray<T>): T[];
-        <T>(indexes: lodash.__, array: lodash.List<T>): LodashPullAt2x2<T>;
-        <T>(indexes: lodash.Many<number>, array: lodash.List<T>): lodash.List<T>;
-    }
-    interface LodashPullAt1x1 {
-        <T>(array: ReadonlyArray<T>): T[];
-        <T>(array: lodash.List<T>): lodash.List<T>;
-    }
-    type LodashPullAt1x2<T> = (indexes: lodash.Many<number>) => T[];
-    type LodashPullAt2x2<T> = (indexes: lodash.Many<number>) => lodash.List<T>;
-    interface LodashRandom {
-        (maxOrMin: number): LodashRandom1x1;
-        (max: lodash.__, floating: boolean): LodashRandom1x2;
-        (maxOrMin: number, floatingOrMax: boolean | number): number;
-        (min: lodash.__, max: number): LodashRandom2x2;
-    }
-    type LodashRandom1x1 = (floatingOrMax: boolean | number) => number;
-    type LodashRandom1x2 = (max: number) => number;
-    type LodashRandom2x2 = (min: number) => number;
-    interface LodashRange {
-        (start: number): LodashRange1x1;
-        (start: lodash.__, end: number): LodashRange1x2;
-        (start: number, end: number): number[];
-    }
-    type LodashRange1x1 = (end: number) => number[];
-    type LodashRange1x2 = (start: number) => number[];
-    interface LodashRangeRight {
-        (start: number): LodashRangeRight1x1;
-        (start: lodash.__, end: number): LodashRangeRight1x2;
-        (start: number, end: number): number[];
-    }
-    type LodashRangeRight1x1 = (end: number) => number[];
-    type LodashRangeRight1x2 = (start: number) => number[];
-    interface LodashRangeStep {
-        (start: number): LodashRangeStep1x1;
-        (start: lodash.__, end: number): LodashRangeStep1x2;
-        (start: number, end: number): LodashRangeStep1x3;
-        (start: lodash.__, end: lodash.__, step: number): LodashRangeStep1x4;
-        (start: number, end: lodash.__, step: number): LodashRangeStep1x5;
-        (start: lodash.__, end: number, step: number): LodashRangeStep1x6;
-        (start: number, end: number, step: number): number[];
-    }
-    interface LodashRangeStep1x1 {
-        (end: number): LodashRangeStep1x3;
-        (end: lodash.__, step: number): LodashRangeStep1x5;
-        (end: number, step: number): number[];
-    }
-    interface LodashRangeStep1x2 {
-        (start: number): LodashRangeStep1x3;
-        (start: lodash.__, step: number): LodashRangeStep1x6;
-        (start: number, step: number): number[];
-    }
-    type LodashRangeStep1x3 = (step: number) => number[];
-    interface LodashRangeStep1x4 {
-        (start: number): LodashRangeStep1x5;
-        (start: lodash.__, end: number): LodashRangeStep1x6;
-        (start: number, end: number): number[];
-    }
-    type LodashRangeStep1x5 = (end: number) => number[];
-    type LodashRangeStep1x6 = (start: number) => number[];
-    interface LodashRangeStepRight {
-        (start: number): LodashRangeStepRight1x1;
-        (start: lodash.__, end: number): LodashRangeStepRight1x2;
-        (start: number, end: number): LodashRangeStepRight1x3;
-        (start: lodash.__, end: lodash.__, step: number): LodashRangeStepRight1x4;
-        (start: number, end: lodash.__, step: number): LodashRangeStepRight1x5;
-        (start: lodash.__, end: number, step: number): LodashRangeStepRight1x6;
-        (start: number, end: number, step: number): number[];
-    }
-    interface LodashRangeStepRight1x1 {
-        (end: number): LodashRangeStepRight1x3;
-        (end: lodash.__, step: number): LodashRangeStepRight1x5;
-        (end: number, step: number): number[];
-    }
-    interface LodashRangeStepRight1x2 {
-        (start: number): LodashRangeStepRight1x3;
-        (start: lodash.__, step: number): LodashRangeStepRight1x6;
-        (start: number, step: number): number[];
-    }
-    type LodashRangeStepRight1x3 = (step: number) => number[];
-    interface LodashRangeStepRight1x4 {
-        (start: number): LodashRangeStepRight1x5;
-        (start: lodash.__, end: number): LodashRangeStepRight1x6;
-        (start: number, end: number): number[];
-    }
-    type LodashRangeStepRight1x5 = (end: number) => number[];
-    type LodashRangeStepRight1x6 = (start: number) => number[];
-    interface LodashRearg {
-        (indexes: lodash.Many<number>): LodashRearg1x1;
-        (indexes: lodash.__, func: (...args: any[]) => any): LodashRearg1x2;
-        (indexes: lodash.Many<number>, func: (...args: any[]) => any): (...args: any[]) => any;
-    }
-    type LodashRearg1x1 = (func: (...args: any[]) => any) => (...args: any[]) => any;
-    type LodashRearg1x2 = (indexes: lodash.Many<number>) => (...args: any[]) => any;
-    interface LodashReduce {
-        <T, TResult>(callback: lodash.MemoIteratorCapped<T, TResult>): LodashReduce1x1<T, TResult>;
-        <TResult>(callback: lodash.__, accumulator: TResult): LodashReduce1x2<TResult>;
-        <T, TResult>(callback: lodash.MemoIteratorCapped<T, TResult>, accumulator: TResult): LodashReduce1x3<T, TResult>;
-        <T>(callback: lodash.__, accumulator: lodash.__, collection: T[] | null | undefined): LodashReduce1x4<T>;
-        <T, TResult>(callback: lodash.MemoIteratorCapped<T, TResult>, accumulator: lodash.__, collection: T[] | null | undefined): LodashReduce1x5<TResult>;
-        <T, TResult>(callback: lodash.__, accumulator: TResult, collection: T[] | null | undefined): LodashReduce1x6<T, TResult>;
-        <T, TResult>(callback: lodash.MemoIteratorCapped<T, TResult>, accumulator: TResult, collection: T[] | lodash.List<T> | null | undefined): TResult;
-        <T>(callback: lodash.__, accumulator: lodash.__, collection: lodash.List<T> | null | undefined): LodashReduce2x4<T>;
-        <T, TResult>(callback: lodash.MemoIteratorCapped<T, TResult>, accumulator: lodash.__, collection: lodash.List<T> | null | undefined): LodashReduce2x5<TResult>;
-        <T, TResult>(callback: lodash.__, accumulator: TResult, collection: lodash.List<T> | null | undefined): LodashReduce2x6<T, TResult>;
-        <T extends object, TResult>(callback: lodash.MemoIteratorCapped<T[keyof T], TResult>): LodashReduce3x1<T, TResult>;
-        <T extends object, TResult>(callback: lodash.MemoIteratorCapped<T[keyof T], TResult>, accumulator: TResult): LodashReduce3x3<T, TResult>;
-        <T extends object>(callback: lodash.__, accumulator: lodash.__, collection: T | null | undefined): LodashReduce3x4<T>;
-        <T extends object, TResult>(callback: lodash.MemoIteratorCapped<T[keyof T], TResult>, accumulator: lodash.__, collection: T | null | undefined): LodashReduce3x5<TResult>;
-        <T extends object, TResult>(callback: lodash.__, accumulator: TResult, collection: T | null | undefined): LodashReduce3x6<T, TResult>;
-        <T extends object, TResult>(callback: lodash.MemoIteratorCapped<T[keyof T], TResult>, accumulator: TResult, collection: T | null | undefined): TResult;
-    }
-    interface LodashReduce1x1<T, TResult> {
-        (accumulator: TResult): LodashReduce1x3<T, TResult>;
-        (accumulator: lodash.__, collection: T[] | null | undefined): LodashReduce1x5<TResult>;
-        (accumulator: TResult, collection: T[] | lodash.List<T> | null | undefined): TResult;
-        (accumulator: lodash.__, collection: lodash.List<T> | null | undefined): LodashReduce2x5<TResult>;
-    }
-    interface LodashReduce1x2<TResult> {
-        <T>(callback: lodash.MemoIteratorCapped<T, TResult>): LodashReduce1x3<T, TResult>;
-        <T>(callback: lodash.__, collection: T[] | null | undefined): LodashReduce1x6<T, TResult>;
-        <T>(callback: lodash.MemoIteratorCapped<T, TResult>, collection: T[] | lodash.List<T> | null | undefined): TResult;
-        <T>(callback: lodash.__, collection: lodash.List<T> | null | undefined): LodashReduce2x6<T, TResult>;
-        <T extends object>(callback: lodash.MemoIteratorCapped<T[keyof T], TResult>): LodashReduce3x3<T, TResult>;
-        <T extends object>(callback: lodash.__, collection: T | null | undefined): LodashReduce3x6<T, TResult>;
-        <T extends object>(callback: lodash.MemoIteratorCapped<T[keyof T], TResult>, collection: T | null | undefined): TResult;
-    }
-    type LodashReduce1x3<T, TResult> = (collection: T[] | lodash.List<T> | null | undefined) => TResult;
-    interface LodashReduce1x4<T> {
-        <TResult>(callback: lodash.MemoIteratorCapped<T, TResult>): LodashReduce1x5<TResult>;
-        <TResult>(callback: lodash.__, accumulator: TResult): LodashReduce1x6<T, TResult>;
-        <TResult>(callback: lodash.MemoIteratorCapped<T, TResult>, accumulator: TResult): TResult;
-    }
-    type LodashReduce1x5<TResult> = (accumulator: TResult) => TResult;
-    type LodashReduce1x6<T, TResult> = (callback: lodash.MemoIteratorCapped<T, TResult>) => TResult;
-    interface LodashReduce2x4<T> {
-        <TResult>(callback: lodash.MemoIteratorCapped<T, TResult>): LodashReduce2x5<TResult>;
-        <TResult>(callback: lodash.__, accumulator: TResult): LodashReduce2x6<T, TResult>;
-        <TResult>(callback: lodash.MemoIteratorCapped<T, TResult>, accumulator: TResult): TResult;
-    }
-    type LodashReduce2x5<TResult> = (accumulator: TResult) => TResult;
-    type LodashReduce2x6<T, TResult> = (callback: lodash.MemoIteratorCapped<T, TResult>) => TResult;
-    interface LodashReduce3x1<T, TResult> {
-        (accumulator: TResult): LodashReduce3x3<T, TResult>;
-        (accumulator: lodash.__, collection: T | null | undefined): LodashReduce3x5<TResult>;
-        (accumulator: TResult, collection: T | null | undefined): TResult;
-    }
-    type LodashReduce3x3<T, TResult> = (collection: T | null | undefined) => TResult;
-    interface LodashReduce3x4<T> {
-        <TResult>(callback: lodash.MemoIteratorCapped<T[keyof T], TResult>): LodashReduce3x5<TResult>;
-        <TResult>(callback: lodash.__, accumulator: TResult): LodashReduce3x6<T, TResult>;
-        <TResult>(callback: lodash.MemoIteratorCapped<T[keyof T], TResult>, accumulator: TResult): TResult;
-    }
-    type LodashReduce3x5<TResult> = (accumulator: TResult) => TResult;
-    type LodashReduce3x6<T, TResult> = (callback: lodash.MemoIteratorCapped<T[keyof T], TResult>) => TResult;
-    interface LodashReduceRight {
-        <T, TResult>(callback: lodash.MemoIteratorCappedRight<T, TResult>): LodashReduceRight1x1<T, TResult>;
-        <TResult>(callback: lodash.__, accumulator: TResult): LodashReduceRight1x2<TResult>;
-        <T, TResult>(callback: lodash.MemoIteratorCappedRight<T, TResult>, accumulator: TResult): LodashReduceRight1x3<T, TResult>;
-        <T>(callback: lodash.__, accumulator: lodash.__, collection: T[] | null | undefined): LodashReduceRight1x4<T>;
-        <T, TResult>(callback: lodash.MemoIteratorCappedRight<T, TResult>, accumulator: lodash.__, collection: T[] | null | undefined): LodashReduceRight1x5<TResult>;
-        <T, TResult>(callback: lodash.__, accumulator: TResult, collection: T[] | null | undefined): LodashReduceRight1x6<T, TResult>;
-        <T, TResult>(callback: lodash.MemoIteratorCappedRight<T, TResult>, accumulator: TResult, collection: T[] | lodash.List<T> | null | undefined): TResult;
-        <T>(callback: lodash.__, accumulator: lodash.__, collection: lodash.List<T> | null | undefined): LodashReduceRight2x4<T>;
-        <T, TResult>(callback: lodash.MemoIteratorCappedRight<T, TResult>, accumulator: lodash.__, collection: lodash.List<T> | null | undefined): LodashReduceRight2x5<TResult>;
-        <T, TResult>(callback: lodash.__, accumulator: TResult, collection: lodash.List<T> | null | undefined): LodashReduceRight2x6<T, TResult>;
-        <T extends object, TResult>(callback: lodash.MemoIteratorCappedRight<T[keyof T], TResult>): LodashReduceRight3x1<T, TResult>;
-        <T extends object, TResult>(callback: lodash.MemoIteratorCappedRight<T[keyof T], TResult>, accumulator: TResult): LodashReduceRight3x3<T, TResult>;
-        <T extends object>(callback: lodash.__, accumulator: lodash.__, collection: T | null | undefined): LodashReduceRight3x4<T>;
-        <T extends object, TResult>(callback: lodash.MemoIteratorCappedRight<T[keyof T], TResult>, accumulator: lodash.__, collection: T | null | undefined): LodashReduceRight3x5<TResult>;
-        <T extends object, TResult>(callback: lodash.__, accumulator: TResult, collection: T | null | undefined): LodashReduceRight3x6<T, TResult>;
-        <T extends object, TResult>(callback: lodash.MemoIteratorCappedRight<T[keyof T], TResult>, accumulator: TResult, collection: T | null | undefined): TResult;
-    }
-    interface LodashReduceRight1x1<T, TResult> {
-        (accumulator: TResult): LodashReduceRight1x3<T, TResult>;
-        (accumulator: lodash.__, collection: T[] | null | undefined): LodashReduceRight1x5<TResult>;
-        (accumulator: TResult, collection: T[] | lodash.List<T> | null | undefined): TResult;
-        (accumulator: lodash.__, collection: lodash.List<T> | null | undefined): LodashReduceRight2x5<TResult>;
-    }
-    interface LodashReduceRight1x2<TResult> {
-        <T>(callback: lodash.MemoIteratorCappedRight<T, TResult>): LodashReduceRight1x3<T, TResult>;
-        <T>(callback: lodash.__, collection: T[] | null | undefined): LodashReduceRight1x6<T, TResult>;
-        <T>(callback: lodash.MemoIteratorCappedRight<T, TResult>, collection: T[] | lodash.List<T> | null | undefined): TResult;
-        <T>(callback: lodash.__, collection: lodash.List<T> | null | undefined): LodashReduceRight2x6<T, TResult>;
-        <T extends object>(callback: lodash.MemoIteratorCappedRight<T[keyof T], TResult>): LodashReduceRight3x3<T, TResult>;
-        <T extends object>(callback: lodash.__, collection: T | null | undefined): LodashReduceRight3x6<T, TResult>;
-        <T extends object>(callback: lodash.MemoIteratorCappedRight<T[keyof T], TResult>, collection: T | null | undefined): TResult;
-    }
-    type LodashReduceRight1x3<T, TResult> = (collection: T[] | lodash.List<T> | null | undefined) => TResult;
-    interface LodashReduceRight1x4<T> {
-        <TResult>(callback: lodash.MemoIteratorCappedRight<T, TResult>): LodashReduceRight1x5<TResult>;
-        <TResult>(callback: lodash.__, accumulator: TResult): LodashReduceRight1x6<T, TResult>;
-        <TResult>(callback: lodash.MemoIteratorCappedRight<T, TResult>, accumulator: TResult): TResult;
-    }
-    type LodashReduceRight1x5<TResult> = (accumulator: TResult) => TResult;
-    type LodashReduceRight1x6<T, TResult> = (callback: lodash.MemoIteratorCappedRight<T, TResult>) => TResult;
-    interface LodashReduceRight2x4<T> {
-        <TResult>(callback: lodash.MemoIteratorCappedRight<T, TResult>): LodashReduceRight2x5<TResult>;
-        <TResult>(callback: lodash.__, accumulator: TResult): LodashReduceRight2x6<T, TResult>;
-        <TResult>(callback: lodash.MemoIteratorCappedRight<T, TResult>, accumulator: TResult): TResult;
-    }
-    type LodashReduceRight2x5<TResult> = (accumulator: TResult) => TResult;
-    type LodashReduceRight2x6<T, TResult> = (callback: lodash.MemoIteratorCappedRight<T, TResult>) => TResult;
-    interface LodashReduceRight3x1<T, TResult> {
-        (accumulator: TResult): LodashReduceRight3x3<T, TResult>;
-        (accumulator: lodash.__, collection: T | null | undefined): LodashReduceRight3x5<TResult>;
-        (accumulator: TResult, collection: T | null | undefined): TResult;
-    }
-    type LodashReduceRight3x3<T, TResult> = (collection: T | null | undefined) => TResult;
-    interface LodashReduceRight3x4<T> {
-        <TResult>(callback: lodash.MemoIteratorCappedRight<T[keyof T], TResult>): LodashReduceRight3x5<TResult>;
-        <TResult>(callback: lodash.__, accumulator: TResult): LodashReduceRight3x6<T, TResult>;
-        <TResult>(callback: lodash.MemoIteratorCappedRight<T[keyof T], TResult>, accumulator: TResult): TResult;
-    }
-    type LodashReduceRight3x5<TResult> = (accumulator: TResult) => TResult;
-    type LodashReduceRight3x6<T, TResult> = (callback: lodash.MemoIteratorCappedRight<T[keyof T], TResult>) => TResult;
-    interface LodashReject {
-        (predicate: (value: string) => boolean): LodashReject1x1;
-        (predicate: lodash.__, collection: string | null | undefined): LodashReject1x2;
-        (predicate: (value: string) => boolean, collection: string | null | undefined): string[];
-        <T>(predicate: lodash.ValueIterateeCustom<T, boolean>): LodashReject2x1<T>;
-        <T>(predicate: lodash.__, collection: lodash.List<T> | null | undefined): LodashReject2x2<T>;
-        <T>(predicate: lodash.ValueIterateeCustom<T, boolean>, collection: lodash.List<T> | null | undefined): T[];
-        <T extends object>(predicate: lodash.__, collection: T | null | undefined): LodashReject3x2<T>;
-        <T extends object>(predicate: lodash.ValueIterateeCustom<T[keyof T], boolean>, collection: T | null | undefined): Array<T[keyof T]>;
-    }
-    type LodashReject1x1 = (collection: string | null | undefined) => string[];
-    type LodashReject1x2 = (predicate: (value: string) => boolean) => string[];
-    type LodashReject2x1<T> = (collection: lodash.List<T> | object | null | undefined) => T[];
-    type LodashReject2x2<T> = (predicate: lodash.ValueIterateeCustom<T, boolean>) => T[];
-    type LodashReject3x2<T> = (predicate: lodash.ValueIterateeCustom<T[keyof T], boolean>) => Array<T[keyof T]>;
-    interface LodashRemove {
-        <T>(predicate: lodash.ValueIteratee<T>): LodashRemove1x1<T>;
-        <T>(predicate: lodash.__, array: lodash.List<T>): LodashRemove1x2<T>;
-        <T>(predicate: lodash.ValueIteratee<T>, array: lodash.List<T>): T[];
-    }
-    type LodashRemove1x1<T> = (array: lodash.List<T>) => T[];
-    type LodashRemove1x2<T> = (predicate: lodash.ValueIteratee<T>) => T[];
-    interface LodashRepeat {
-        (n: number): LodashRepeat1x1;
-        (n: lodash.__, string: string): LodashRepeat1x2;
-        (n: number, string: string): string;
-    }
-    type LodashRepeat1x1 = (string: string) => string;
-    type LodashRepeat1x2 = (n: number) => string;
-    interface LodashReplace {
-        (pattern: RegExp | string): LodashReplace1x1;
-        (pattern: lodash.__, replacement: lodash.ReplaceFunction | string): LodashReplace1x2;
-        (pattern: RegExp | string, replacement: lodash.ReplaceFunction | string): LodashReplace1x3;
-        (pattern: lodash.__, replacement: lodash.__, string: string): LodashReplace1x4;
-        (pattern: RegExp | string, replacement: lodash.__, string: string): LodashReplace1x5;
-        (pattern: lodash.__, replacement: lodash.ReplaceFunction | string, string: string): LodashReplace1x6;
-        (pattern: RegExp | string, replacement: lodash.ReplaceFunction | string, string: string): string;
-    }
-    interface LodashReplace1x1 {
-        (replacement: lodash.ReplaceFunction | string): LodashReplace1x3;
-        (replacement: lodash.__, string: string): LodashReplace1x5;
-        (replacement: lodash.ReplaceFunction | string, string: string): string;
-    }
-    interface LodashReplace1x2 {
-        (pattern: RegExp | string): LodashReplace1x3;
-        (pattern: lodash.__, string: string): LodashReplace1x6;
-        (pattern: RegExp | string, string: string): string;
-    }
-    type LodashReplace1x3 = (string: string) => string;
-    interface LodashReplace1x4 {
-        (pattern: RegExp | string): LodashReplace1x5;
-        (pattern: lodash.__, replacement: lodash.ReplaceFunction | string): LodashReplace1x6;
-        (pattern: RegExp | string, replacement: lodash.ReplaceFunction | string): string;
-    }
-    type LodashReplace1x5 = (replacement: lodash.ReplaceFunction | string) => string;
-    type LodashReplace1x6 = (pattern: RegExp | string) => string;
-    type LodashRest = (func: (...args: any[]) => any) => (...args: any[]) => any;
-    interface LodashRestFrom {
-        (start: number): LodashRestFrom1x1;
-        (start: lodash.__, func: (...args: any[]) => any): LodashRestFrom1x2;
-        (start: number, func: (...args: any[]) => any): (...args: any[]) => any;
-    }
-    type LodashRestFrom1x1 = (func: (...args: any[]) => any) => (...args: any[]) => any;
-    type LodashRestFrom1x2 = (start: number) => (...args: any[]) => any;
-    interface LodashResult {
-        (path: lodash.PropertyPath): LodashResult1x1;
-        (path: lodash.__, object: any): LodashResult1x2;
-        <TResult>(path: lodash.PropertyPath, object: any): TResult;
-    }
-    type LodashResult1x1 = <TResult>(object: any) => TResult;
-    type LodashResult1x2 = <TResult>(path: lodash.PropertyPath) => TResult;
-    type LodashReverse = <TList extends lodash.List<any>>(array: TList) => TList;
-    type LodashRound = (n: number) => number;
-    type LodashRunInContext = (context: object) => lodash.LoDashStatic;
-    interface LodashSample {
-        <T>(collection: lodash.List<T> | lodash.Dictionary<T> | lodash.NumericDictionary<T> | null | undefined): T | undefined;
-        <T extends object>(collection: T | null | undefined): T[keyof T] | undefined;
-    }
-    interface LodashSampleSize {
-        (n: number): LodashSampleSize1x1;
-        <T>(n: lodash.__, collection: lodash.List<T> | lodash.Dictionary<T> | lodash.NumericDictionary<T> | null | undefined): LodashSampleSize1x2<T>;
-        <T>(n: number, collection: lodash.List<T> | lodash.Dictionary<T> | lodash.NumericDictionary<T> | null | undefined): T[];
-        <T extends object>(n: lodash.__, collection: T | null | undefined): LodashSampleSize2x2<T>;
-        <T extends object>(n: number, collection: T | null | undefined): Array<T[keyof T]>;
-    }
-    interface LodashSampleSize1x1 {
-        <T>(collection: lodash.List<T> | lodash.Dictionary<T> | lodash.NumericDictionary<T> | null | undefined): T[];
-        <T extends object>(collection: T | null | undefined): Array<T[keyof T]>;
-    }
-    type LodashSampleSize1x2<T> = (n: number) => T[];
-    type LodashSampleSize2x2<T> = (n: number) => Array<T[keyof T]>;
-    interface LodashSetWith {
-        <T extends object>(customizer: lodash.SetWithCustomizer<T>): LodashSetWith1x1<T>;
-        (customizer: lodash.__, path: lodash.PropertyPath): LodashSetWith1x2;
-        <T extends object>(customizer: lodash.SetWithCustomizer<T>, path: lodash.PropertyPath): LodashSetWith1x3<T>;
-        (customizer: lodash.__, path: lodash.__, value: any): LodashSetWith1x4;
-        <T extends object>(customizer: lodash.SetWithCustomizer<T>, path: lodash.__, value: any): LodashSetWith1x5<T>;
-        (customizer: lodash.__, path: lodash.PropertyPath, value: any): LodashSetWith1x6;
-        <T extends object>(customizer: lodash.SetWithCustomizer<T>, path: lodash.PropertyPath, value: any): LodashSetWith1x7<T>;
-        <T extends object>(customizer: lodash.__, path: lodash.__, value: lodash.__, object: T): LodashSetWith1x8<T>;
-        <T extends object>(customizer: lodash.SetWithCustomizer<T>, path: lodash.__, value: lodash.__, object: T): LodashSetWith1x9<T>;
-        <T extends object>(customizer: lodash.__, path: lodash.PropertyPath, value: lodash.__, object: T): LodashSetWith1x10<T>;
-        <T extends object>(customizer: lodash.SetWithCustomizer<T>, path: lodash.PropertyPath, value: lodash.__, object: T): LodashSetWith1x11<T>;
-        <T extends object>(customizer: lodash.__, path: lodash.__, value: any, object: T): LodashSetWith1x12<T>;
-        <T extends object>(customizer: lodash.SetWithCustomizer<T>, path: lodash.__, value: any, object: T): LodashSetWith1x13<T>;
-        <T extends object>(customizer: lodash.__, path: lodash.PropertyPath, value: any, object: T): LodashSetWith1x14<T>;
-        <T extends object>(customizer: lodash.SetWithCustomizer<T>, path: lodash.PropertyPath, value: any, object: T): T;
-    }
-    interface LodashSetWith1x1<T> {
-        (path: lodash.PropertyPath): LodashSetWith1x3<T>;
-        (path: lodash.__, value: any): LodashSetWith1x5<T>;
-        (path: lodash.PropertyPath, value: any): LodashSetWith1x7<T>;
-        (path: lodash.__, value: lodash.__, object: T): LodashSetWith1x9<T>;
-        (path: lodash.PropertyPath, value: lodash.__, object: T): LodashSetWith1x11<T>;
-        (path: lodash.__, value: any, object: T): LodashSetWith1x13<T>;
-        (path: lodash.PropertyPath, value: any, object: T): T;
-    }
-    interface LodashSetWith1x2 {
-        <T extends object>(customizer: lodash.SetWithCustomizer<T>): LodashSetWith1x3<T>;
-        (customizer: lodash.__, value: any): LodashSetWith1x6;
-        <T extends object>(customizer: lodash.SetWithCustomizer<T>, value: any): LodashSetWith1x7<T>;
-        <T extends object>(customizer: lodash.__, value: lodash.__, object: T): LodashSetWith1x10<T>;
-        <T extends object>(customizer: lodash.SetWithCustomizer<T>, value: lodash.__, object: T): LodashSetWith1x11<T>;
-        <T extends object>(customizer: lodash.__, value: any, object: T): LodashSetWith1x14<T>;
-        <T extends object>(customizer: lodash.SetWithCustomizer<T>, value: any, object: T): T;
-    }
-    interface LodashSetWith1x3<T> {
-        (value: any): LodashSetWith1x7<T>;
-        (value: lodash.__, object: T): LodashSetWith1x11<T>;
-        (value: any, object: T): T;
-    }
-    interface LodashSetWith1x4 {
-        <T extends object>(customizer: lodash.SetWithCustomizer<T>): LodashSetWith1x5<T>;
-        (customizer: lodash.__, path: lodash.PropertyPath): LodashSetWith1x6;
-        <T extends object>(customizer: lodash.SetWithCustomizer<T>, path: lodash.PropertyPath): LodashSetWith1x7<T>;
-        <T extends object>(customizer: lodash.__, path: lodash.__, object: T): LodashSetWith1x12<T>;
-        <T extends object>(customizer: lodash.SetWithCustomizer<T>, path: lodash.__, object: T): LodashSetWith1x13<T>;
-        <T extends object>(customizer: lodash.__, path: lodash.PropertyPath, object: T): LodashSetWith1x14<T>;
-        <T extends object>(customizer: lodash.SetWithCustomizer<T>, path: lodash.PropertyPath, object: T): T;
-    }
-    interface LodashSetWith1x5<T> {
-        (path: lodash.PropertyPath): LodashSetWith1x7<T>;
-        (path: lodash.__, object: T): LodashSetWith1x13<T>;
-        (path: lodash.PropertyPath, object: T): T;
-    }
-    interface LodashSetWith1x6 {
-        <T extends object>(customizer: lodash.SetWithCustomizer<T>): LodashSetWith1x7<T>;
-        <T extends object>(customizer: lodash.__, object: T): LodashSetWith1x14<T>;
-        <T extends object>(customizer: lodash.SetWithCustomizer<T>, object: T): T;
-    }
-    type LodashSetWith1x7<T> = (object: T) => T;
-    interface LodashSetWith1x8<T> {
-        (customizer: lodash.SetWithCustomizer<T>): LodashSetWith1x9<T>;
-        (customizer: lodash.__, path: lodash.PropertyPath): LodashSetWith1x10<T>;
-        (customizer: lodash.SetWithCustomizer<T>, path: lodash.PropertyPath): LodashSetWith1x11<T>;
-        (customizer: lodash.__, path: lodash.__, value: any): LodashSetWith1x12<T>;
-        (customizer: lodash.SetWithCustomizer<T>, path: lodash.__, value: any): LodashSetWith1x13<T>;
-        (customizer: lodash.__, path: lodash.PropertyPath, value: any): LodashSetWith1x14<T>;
-        (customizer: lodash.SetWithCustomizer<T>, path: lodash.PropertyPath, value: any): T;
-    }
-    interface LodashSetWith1x9<T> {
-        (path: lodash.PropertyPath): LodashSetWith1x11<T>;
-        (path: lodash.__, value: any): LodashSetWith1x13<T>;
-        (path: lodash.PropertyPath, value: any): T;
-    }
-    interface LodashSetWith1x10<T> {
-        (customizer: lodash.SetWithCustomizer<T>): LodashSetWith1x11<T>;
-        (customizer: lodash.__, value: any): LodashSetWith1x14<T>;
-        (customizer: lodash.SetWithCustomizer<T>, value: any): T;
-    }
-    type LodashSetWith1x11<T> = (value: any) => T;
-    interface LodashSetWith1x12<T> {
-        (customizer: lodash.SetWithCustomizer<T>): LodashSetWith1x13<T>;
-        (customizer: lodash.__, path: lodash.PropertyPath): LodashSetWith1x14<T>;
-        (customizer: lodash.SetWithCustomizer<T>, path: lodash.PropertyPath): T;
-    }
-    type LodashSetWith1x13<T> = (path: lodash.PropertyPath) => T;
-    type LodashSetWith1x14<T> = (customizer: lodash.SetWithCustomizer<T>) => T;
-    interface LodashShuffle {
-        <T>(collection: lodash.List<T> | null | undefined): T[];
-        <T extends object>(collection: T | null | undefined): Array<T[keyof T]>;
-    }
-    type LodashSize = (collection: object | string | null | undefined) => number;
-    interface LodashSlice {
-        (start: number): LodashSlice1x1;
-        (start: lodash.__, end: number): LodashSlice1x2;
-        (start: number, end: number): LodashSlice1x3;
-        <T>(start: lodash.__, end: lodash.__, array: lodash.List<T> | null | undefined): LodashSlice1x4<T>;
-        <T>(start: number, end: lodash.__, array: lodash.List<T> | null | undefined): LodashSlice1x5<T>;
-        <T>(start: lodash.__, end: number, array: lodash.List<T> | null | undefined): LodashSlice1x6<T>;
-        <T>(start: number, end: number, array: lodash.List<T> | null | undefined): T[];
-    }
-    interface LodashSlice1x1 {
-        (end: number): LodashSlice1x3;
-        <T>(end: lodash.__, array: lodash.List<T> | null | undefined): LodashSlice1x5<T>;
-        <T>(end: number, array: lodash.List<T> | null | undefined): T[];
-    }
-    interface LodashSlice1x2 {
-        (start: number): LodashSlice1x3;
-        <T>(start: lodash.__, array: lodash.List<T> | null | undefined): LodashSlice1x6<T>;
-        <T>(start: number, array: lodash.List<T> | null | undefined): T[];
-    }
-    type LodashSlice1x3 = <T>(array: lodash.List<T> | null | undefined) => T[];
-    interface LodashSlice1x4<T> {
-        (start: number): LodashSlice1x5<T>;
-        (start: lodash.__, end: number): LodashSlice1x6<T>;
-        (start: number, end: number): T[];
-    }
-    type LodashSlice1x5<T> = (end: number) => T[];
-    type LodashSlice1x6<T> = (start: number) => T[];
-    type LodashSnakeCase = (string: string) => string;
-    interface LodashSortBy {
-        <T>(iteratees: lodash.Many<lodash.ValueIteratee<T>>): LodashSortBy1x1<T>;
-        <T>(iteratees: lodash.__, collection: lodash.List<T> | null | undefined): LodashSortBy1x2<T>;
-        <T>(iteratees: lodash.Many<lodash.ValueIteratee<T>>, collection: lodash.List<T> | null | undefined): T[];
-        <T extends object>(iteratees: lodash.__, collection: T | null | undefined): LodashSortBy2x2<T>;
-        <T extends object>(iteratees: lodash.Many<lodash.ValueIteratee<T[keyof T]>>, collection: T | null | undefined): Array<T[keyof T]>;
-    }
-    type LodashSortBy1x1<T> = (collection: lodash.List<T> | object | null | undefined) => T[];
-    type LodashSortBy1x2<T> = (iteratees: lodash.Many<lodash.ValueIteratee<T>>) => T[];
-    type LodashSortBy2x2<T> = (iteratees: lodash.Many<lodash.ValueIteratee<T[keyof T]>>) => Array<T[keyof T]>;
-    interface LodashSortedIndex {
-        <T>(value: T): LodashSortedIndex1x1<T>;
-        <T>(value: lodash.__, array: lodash.List<T> | null | undefined): LodashSortedIndex1x2<T>;
-        <T>(value: T, array: lodash.List<T> | null | undefined): number;
-    }
-    type LodashSortedIndex1x1<T> = (array: lodash.List<T> | null | undefined) => number;
-    type LodashSortedIndex1x2<T> = (value: T) => number;
-    interface LodashSortedIndexBy {
-        <T>(iteratee: lodash.ValueIteratee<T>): LodashSortedIndexBy1x1<T>;
-        <T>(iteratee: lodash.__, value: T): LodashSortedIndexBy1x2<T>;
-        <T>(iteratee: lodash.ValueIteratee<T>, value: T): LodashSortedIndexBy1x3<T>;
-        <T>(iteratee: lodash.__, value: lodash.__, array: lodash.List<T> | null | undefined): LodashSortedIndexBy1x4<T>;
-        <T>(iteratee: lodash.ValueIteratee<T>, value: lodash.__, array: lodash.List<T> | null | undefined): LodashSortedIndexBy1x5<T>;
-        <T>(iteratee: lodash.__, value: T, array: lodash.List<T> | null | undefined): LodashSortedIndexBy1x6<T>;
-        <T>(iteratee: lodash.ValueIteratee<T>, value: T, array: lodash.List<T> | null | undefined): number;
-    }
-    interface LodashSortedIndexBy1x1<T> {
-        (value: T): LodashSortedIndexBy1x3<T>;
-        (value: lodash.__, array: lodash.List<T> | null | undefined): LodashSortedIndexBy1x5<T>;
-        (value: T, array: lodash.List<T> | null | undefined): number;
-    }
-    interface LodashSortedIndexBy1x2<T> {
-        (iteratee: lodash.ValueIteratee<T>): LodashSortedIndexBy1x3<T>;
-        (iteratee: lodash.__, array: lodash.List<T> | null | undefined): LodashSortedIndexBy1x6<T>;
-        (iteratee: lodash.ValueIteratee<T>, array: lodash.List<T> | null | undefined): number;
-    }
-    type LodashSortedIndexBy1x3<T> = (array: lodash.List<T> | null | undefined) => number;
-    interface LodashSortedIndexBy1x4<T> {
-        (iteratee: lodash.ValueIteratee<T>): LodashSortedIndexBy1x5<T>;
-        (iteratee: lodash.__, value: T): LodashSortedIndexBy1x6<T>;
-        (iteratee: lodash.ValueIteratee<T>, value: T): number;
-    }
-    type LodashSortedIndexBy1x5<T> = (value: T) => number;
-    type LodashSortedIndexBy1x6<T> = (iteratee: lodash.ValueIteratee<T>) => number;
-    interface LodashSortedIndexOf {
-        <T>(value: T): LodashSortedIndexOf1x1<T>;
-        <T>(value: lodash.__, array: lodash.List<T> | null | undefined): LodashSortedIndexOf1x2<T>;
-        <T>(value: T, array: lodash.List<T> | null | undefined): number;
-    }
-    type LodashSortedIndexOf1x1<T> = (array: lodash.List<T> | null | undefined) => number;
-    type LodashSortedIndexOf1x2<T> = (value: T) => number;
-    interface LodashSortedLastIndex {
-        <T>(value: T): LodashSortedLastIndex1x1<T>;
-        <T>(value: lodash.__, array: lodash.List<T> | null | undefined): LodashSortedLastIndex1x2<T>;
-        <T>(value: T, array: lodash.List<T> | null | undefined): number;
-    }
-    type LodashSortedLastIndex1x1<T> = (array: lodash.List<T> | null | undefined) => number;
-    type LodashSortedLastIndex1x2<T> = (value: T) => number;
-    interface LodashSortedLastIndexBy {
-        <T>(iteratee: lodash.ValueIteratee<T>): LodashSortedLastIndexBy1x1<T>;
-        <T>(iteratee: lodash.__, value: T): LodashSortedLastIndexBy1x2<T>;
-        <T>(iteratee: lodash.ValueIteratee<T>, value: T): LodashSortedLastIndexBy1x3<T>;
-        <T>(iteratee: lodash.__, value: lodash.__, array: lodash.List<T> | null | undefined): LodashSortedLastIndexBy1x4<T>;
-        <T>(iteratee: lodash.ValueIteratee<T>, value: lodash.__, array: lodash.List<T> | null | undefined): LodashSortedLastIndexBy1x5<T>;
-        <T>(iteratee: lodash.__, value: T, array: lodash.List<T> | null | undefined): LodashSortedLastIndexBy1x6<T>;
-        <T>(iteratee: lodash.ValueIteratee<T>, value: T, array: lodash.List<T> | null | undefined): number;
-    }
-    interface LodashSortedLastIndexBy1x1<T> {
-        (value: T): LodashSortedLastIndexBy1x3<T>;
-        (value: lodash.__, array: lodash.List<T> | null | undefined): LodashSortedLastIndexBy1x5<T>;
-        (value: T, array: lodash.List<T> | null | undefined): number;
-    }
-    interface LodashSortedLastIndexBy1x2<T> {
-        (iteratee: lodash.ValueIteratee<T>): LodashSortedLastIndexBy1x3<T>;
-        (iteratee: lodash.__, array: lodash.List<T> | null | undefined): LodashSortedLastIndexBy1x6<T>;
-        (iteratee: lodash.ValueIteratee<T>, array: lodash.List<T> | null | undefined): number;
-    }
-    type LodashSortedLastIndexBy1x3<T> = (array: lodash.List<T> | null | undefined) => number;
-    interface LodashSortedLastIndexBy1x4<T> {
-        (iteratee: lodash.ValueIteratee<T>): LodashSortedLastIndexBy1x5<T>;
-        (iteratee: lodash.__, value: T): LodashSortedLastIndexBy1x6<T>;
-        (iteratee: lodash.ValueIteratee<T>, value: T): number;
-    }
-    type LodashSortedLastIndexBy1x5<T> = (value: T) => number;
-    type LodashSortedLastIndexBy1x6<T> = (iteratee: lodash.ValueIteratee<T>) => number;
-    interface LodashSortedLastIndexOf {
-        <T>(value: T): LodashSortedLastIndexOf1x1<T>;
-        <T>(value: lodash.__, array: lodash.List<T> | null | undefined): LodashSortedLastIndexOf1x2<T>;
-        <T>(value: T, array: lodash.List<T> | null | undefined): number;
-    }
-    type LodashSortedLastIndexOf1x1<T> = (array: lodash.List<T> | null | undefined) => number;
-    type LodashSortedLastIndexOf1x2<T> = (value: T) => number;
-    type LodashSortedUniq = <T>(array: lodash.List<T> | null | undefined) => T[];
-    interface LodashSortedUniqBy {
-        <T>(iteratee: lodash.ValueIteratee<T>): LodashSortedUniqBy1x1<T>;
-        <T>(iteratee: lodash.__, array: lodash.List<T> | null | undefined): LodashSortedUniqBy1x2<T>;
-        <T>(iteratee: lodash.ValueIteratee<T>, array: lodash.List<T> | null | undefined): T[];
-    }
-    type LodashSortedUniqBy1x1<T> = (array: lodash.List<T> | null | undefined) => T[];
-    type LodashSortedUniqBy1x2<T> = (iteratee: lodash.ValueIteratee<T>) => T[];
-    interface LodashSplit {
-        (separator: RegExp|string): LodashSplit1x1;
-        (separator: lodash.__, string: string): LodashSplit1x2;
-        (separator: RegExp|string, string: string): string[];
-    }
-    type LodashSplit1x1 = (string: string) => string[];
-    type LodashSplit1x2 = (separator: RegExp|string) => string[];
-    type LodashSpread = <TResult>(func: (...args: any[]) => TResult) => (...args: any[]) => TResult;
-    interface LodashSpreadFrom {
-        (start: number): LodashSpreadFrom1x1;
-        <TResult>(start: lodash.__, func: (...args: any[]) => TResult): LodashSpreadFrom1x2<TResult>;
-        <TResult>(start: number, func: (...args: any[]) => TResult): (...args: any[]) => TResult;
-    }
-    type LodashSpreadFrom1x1 = <TResult>(func: (...args: any[]) => TResult) => (...args: any[]) => TResult;
-    type LodashSpreadFrom1x2<TResult> = (start: number) => (...args: any[]) => TResult;
-    type LodashStartCase = (string: string) => string;
-    interface LodashStartsWith {
-        (target: string): LodashStartsWith1x1;
-        (target: lodash.__, string: string): LodashStartsWith1x2;
-        (target: string, string: string): boolean;
-    }
-    type LodashStartsWith1x1 = (string: string) => boolean;
-    type LodashStartsWith1x2 = (target: string) => boolean;
-    type LodashStubArray = () => any[];
-    type LodashStubObject = () => any;
-    type LodashStubString = () => string;
-    type LodashStubTrue = () => true;
-    interface LodashSubtract {
-        (minuend: number): LodashSubtract1x1;
-        (minuend: lodash.__, subtrahend: number): LodashSubtract1x2;
-        (minuend: number, subtrahend: number): number;
-    }
-    type LodashSubtract1x1 = (subtrahend: number) => number;
-    type LodashSubtract1x2 = (minuend: number) => number;
-    type LodashSum = (collection: lodash.List<any> | null | undefined) => number;
-    interface LodashSumBy {
-        <T>(iteratee: ((value: T) => number) | string): LodashSumBy1x1<T>;
-        <T>(iteratee: lodash.__, collection: lodash.List<T> | null | undefined): LodashSumBy1x2<T>;
-        <T>(iteratee: ((value: T) => number) | string, collection: lodash.List<T> | null | undefined): number;
-    }
-    type LodashSumBy1x1<T> = (collection: lodash.List<T> | null | undefined) => number;
-    type LodashSumBy1x2<T> = (iteratee: ((value: T) => number) | string) => number;
-    interface LodashXor {
-        <T>(arrays2: lodash.List<T> | null | undefined): LodashXor1x1<T>;
-        <T>(arrays2: lodash.__, arrays: lodash.List<T> | null | undefined): LodashXor1x2<T>;
-        <T>(arrays2: lodash.List<T> | null | undefined, arrays: lodash.List<T> | null | undefined): T[];
-    }
-    type LodashXor1x1<T> = (arrays: lodash.List<T> | null | undefined) => T[];
-    type LodashXor1x2<T> = (arrays2: lodash.List<T> | null | undefined) => T[];
-    interface LodashXorBy {
-        <T>(iteratee: lodash.ValueIteratee<T>): LodashXorBy1x1<T>;
-        <T>(iteratee: lodash.__, arrays: lodash.List<T> | null | undefined): LodashXorBy1x2<T>;
-        <T>(iteratee: lodash.ValueIteratee<T>, arrays: lodash.List<T> | null | undefined): LodashXorBy1x3<T>;
-        <T>(iteratee: lodash.__, arrays: lodash.__, arrays2: lodash.List<T> | null | undefined): LodashXorBy1x4<T>;
-        <T>(iteratee: lodash.ValueIteratee<T>, arrays: lodash.__, arrays2: lodash.List<T> | null | undefined): LodashXorBy1x5<T>;
-        <T>(iteratee: lodash.__, arrays: lodash.List<T> | null | undefined, arrays2: lodash.List<T> | null | undefined): LodashXorBy1x6<T>;
-        <T>(iteratee: lodash.ValueIteratee<T>, arrays: lodash.List<T> | null | undefined, arrays2: lodash.List<T> | null | undefined): T[];
-    }
-    interface LodashXorBy1x1<T> {
-        (arrays: lodash.List<T> | null | undefined): LodashXorBy1x3<T>;
-        (arrays: lodash.__, arrays2: lodash.List<T> | null | undefined): LodashXorBy1x5<T>;
-        (arrays: lodash.List<T> | null | undefined, arrays2: lodash.List<T> | null | undefined): T[];
-    }
-    interface LodashXorBy1x2<T> {
-        (iteratee: lodash.ValueIteratee<T>): LodashXorBy1x3<T>;
-        (iteratee: lodash.__, arrays2: lodash.List<T> | null | undefined): LodashXorBy1x6<T>;
-        (iteratee: lodash.ValueIteratee<T>, arrays2: lodash.List<T> | null | undefined): T[];
-    }
-    type LodashXorBy1x3<T> = (arrays2: lodash.List<T> | null | undefined) => T[];
-    interface LodashXorBy1x4<T> {
-        (iteratee: lodash.ValueIteratee<T>): LodashXorBy1x5<T>;
-        (iteratee: lodash.__, arrays: lodash.List<T> | null | undefined): LodashXorBy1x6<T>;
-        (iteratee: lodash.ValueIteratee<T>, arrays: lodash.List<T> | null | undefined): T[];
-    }
-    type LodashXorBy1x5<T> = (arrays: lodash.List<T> | null | undefined) => T[];
-    type LodashXorBy1x6<T> = (iteratee: lodash.ValueIteratee<T>) => T[];
-    interface LodashXorWith {
-        <T>(comparator: lodash.Comparator<T>): LodashXorWith1x1<T>;
-        <T>(comparator: lodash.__, arrays: lodash.List<T> | null | undefined): LodashXorWith1x2<T>;
-        <T>(comparator: lodash.Comparator<T>, arrays: lodash.List<T> | null | undefined): LodashXorWith1x3<T>;
-        <T>(comparator: lodash.__, arrays: lodash.__, arrays2: lodash.List<T> | null | undefined): LodashXorWith1x4<T>;
-        <T>(comparator: lodash.Comparator<T>, arrays: lodash.__, arrays2: lodash.List<T> | null | undefined): LodashXorWith1x5<T>;
-        <T>(comparator: lodash.__, arrays: lodash.List<T> | null | undefined, arrays2: lodash.List<T> | null | undefined): LodashXorWith1x6<T>;
-        <T>(comparator: lodash.Comparator<T>, arrays: lodash.List<T> | null | undefined, arrays2: lodash.List<T> | null | undefined): T[];
-    }
-    interface LodashXorWith1x1<T> {
-        (arrays: lodash.List<T> | null | undefined): LodashXorWith1x3<T>;
-        (arrays: lodash.__, arrays2: lodash.List<T> | null | undefined): LodashXorWith1x5<T>;
-        (arrays: lodash.List<T> | null | undefined, arrays2: lodash.List<T> | null | undefined): T[];
-    }
-    interface LodashXorWith1x2<T> {
-        (comparator: lodash.Comparator<T>): LodashXorWith1x3<T>;
-        (comparator: lodash.__, arrays2: lodash.List<T> | null | undefined): LodashXorWith1x6<T>;
-        (comparator: lodash.Comparator<T>, arrays2: lodash.List<T> | null | undefined): T[];
-    }
-    type LodashXorWith1x3<T> = (arrays2: lodash.List<T> | null | undefined) => T[];
-    interface LodashXorWith1x4<T> {
-        (comparator: lodash.Comparator<T>): LodashXorWith1x5<T>;
-        (comparator: lodash.__, arrays: lodash.List<T> | null | undefined): LodashXorWith1x6<T>;
-        (comparator: lodash.Comparator<T>, arrays: lodash.List<T> | null | undefined): T[];
-    }
-    type LodashXorWith1x5<T> = (arrays: lodash.List<T> | null | undefined) => T[];
-    type LodashXorWith1x6<T> = (comparator: lodash.Comparator<T>) => T[];
-    type LodashTail = <T>(array: lodash.List<T> | null | undefined) => T[];
-    interface LodashTake {
-        (n: number): LodashTake1x1;
-        <T>(n: lodash.__, array: lodash.List<T> | null | undefined): LodashTake1x2<T>;
-        <T>(n: number, array: lodash.List<T> | null | undefined): T[];
-    }
-    type LodashTake1x1 = <T>(array: lodash.List<T> | null | undefined) => T[];
-    type LodashTake1x2<T> = (n: number) => T[];
-    interface LodashTakeRight {
-        (n: number): LodashTakeRight1x1;
-        <T>(n: lodash.__, array: lodash.List<T> | null | undefined): LodashTakeRight1x2<T>;
-        <T>(n: number, array: lodash.List<T> | null | undefined): T[];
-    }
-    type LodashTakeRight1x1 = <T>(array: lodash.List<T> | null | undefined) => T[];
-    type LodashTakeRight1x2<T> = (n: number) => T[];
-    interface LodashTakeRightWhile {
-        <T>(predicate: lodash.ValueIteratee<T>): LodashTakeRightWhile1x1<T>;
-        <T>(predicate: lodash.__, array: lodash.List<T> | null | undefined): LodashTakeRightWhile1x2<T>;
-        <T>(predicate: lodash.ValueIteratee<T>, array: lodash.List<T> | null | undefined): T[];
-    }
-    type LodashTakeRightWhile1x1<T> = (array: lodash.List<T> | null | undefined) => T[];
-    type LodashTakeRightWhile1x2<T> = (predicate: lodash.ValueIteratee<T>) => T[];
-    interface LodashTakeWhile {
-        <T>(predicate: lodash.ValueIteratee<T>): LodashTakeWhile1x1<T>;
-        <T>(predicate: lodash.__, array: lodash.List<T> | null | undefined): LodashTakeWhile1x2<T>;
-        <T>(predicate: lodash.ValueIteratee<T>, array: lodash.List<T> | null | undefined): T[];
-    }
-    type LodashTakeWhile1x1<T> = (array: lodash.List<T> | null | undefined) => T[];
-    type LodashTakeWhile1x2<T> = (predicate: lodash.ValueIteratee<T>) => T[];
-    interface LodashTap {
-        <T>(interceptor: (value: T) => void): LodashTap1x1<T>;
-        <T>(interceptor: lodash.__, value: T): LodashTap1x2<T>;
-        <T>(interceptor: (value: T) => void, value: T): T;
-    }
-    type LodashTap1x1<T> = (value: T) => T;
-    type LodashTap1x2<T> = (interceptor: (value: T) => void) => T;
-    type LodashTemplate = (string: string) => lodash.TemplateExecutor;
-    interface LodashThrottle {
-        (wait: number): LodashThrottle1x1;
-        <T extends (...args: any[]) => any>(wait: lodash.__, func: T): LodashThrottle1x2<T>;
-        <T extends (...args: any[]) => any>(wait: number, func: T): T & lodash.Cancelable;
-    }
-    type LodashThrottle1x1 = <T extends (...args: any[]) => any>(func: T) => T & lodash.Cancelable;
-    type LodashThrottle1x2<T> = (wait: number) => T & lodash.Cancelable;
-    interface LodashThru {
-        <T, TResult>(interceptor: (value: T) => TResult): LodashThru1x1<T, TResult>;
-        <T>(interceptor: lodash.__, value: T): LodashThru1x2<T>;
-        <T, TResult>(interceptor: (value: T) => TResult, value: T): TResult;
-    }
-    type LodashThru1x1<T, TResult> = (value: T) => TResult;
-    type LodashThru1x2<T> = <TResult>(interceptor: (value: T) => TResult) => TResult;
-    interface LodashTimes {
-        <TResult>(iteratee: (num: number) => TResult): LodashTimes1x1<TResult>;
-        (iteratee: lodash.__, n: number): LodashTimes1x2;
-        <TResult>(iteratee: (num: number) => TResult, n: number): TResult[];
-    }
-    type LodashTimes1x1<TResult> = (n: number) => TResult[];
-    type LodashTimes1x2 = <TResult>(iteratee: (num: number) => TResult) => TResult[];
-    interface LodashToArray {
-        <T>(value: lodash.List<T> | lodash.Dictionary<T> | lodash.NumericDictionary<T> | null | undefined): T[];
-        <T>(value: T): Array<T[keyof T]>;
-        (): any[];
-    }
-    type LodashToFinite = (value: any) => number;
-    type LodashToInteger = (value: any) => number;
-    type LodashToLength = (value: any) => number;
-    type LodashToLower = (string: string) => string;
-    type LodashToNumber = (value: any) => number;
-    type LodashToPath = (value: any) => string[];
-    type LodashToPlainObject = (value: any) => any;
-    type LodashToSafeInteger = (value: any) => number;
-    type LodashToString = (value: any) => string;
-    type LodashToUpper = (string: string) => string;
-    interface LodashTransform {
-        <T, TResult>(iteratee: lodash.MemoVoidIteratorCapped<T, TResult[]>): LodashTransform1x1<T, TResult>;
-        <TResult>(iteratee: lodash.__, accumulator: ReadonlyArray<TResult>): LodashTransform1x2<TResult>;
-        <T, TResult>(iteratee: lodash.MemoVoidIteratorCapped<T, TResult[]>, accumulator: ReadonlyArray<TResult>): LodashTransform1x3<T, TResult>;
-        <T>(iteratee: lodash.__, accumulator: lodash.__, object: ReadonlyArray<T>): LodashTransform1x4<T>;
-        <T, TResult>(iteratee: lodash.MemoVoidIteratorCapped<T, TResult[]>, accumulator: lodash.__, object: ReadonlyArray<T>): LodashTransform1x5<TResult>;
-        <T, TResult>(iteratee: lodash.__, accumulator: ReadonlyArray<TResult>, object: ReadonlyArray<T>): LodashTransform1x6<T, TResult>;
-        <T, TResult>(iteratee: lodash.MemoVoidIteratorCapped<T, TResult[]>, accumulator: ReadonlyArray<TResult>, object: ReadonlyArray<T> | lodash.Dictionary<T>): TResult[];
-        <T, TResult>(iteratee: lodash.MemoVoidIteratorCapped<T, lodash.Dictionary<TResult>>): LodashTransform2x1<T, TResult>;
-        <TResult>(iteratee: lodash.__, accumulator: lodash.Dictionary<TResult>): LodashTransform2x2<TResult>;
-        <T, TResult>(iteratee: lodash.MemoVoidIteratorCapped<T, lodash.Dictionary<TResult>>, accumulator: lodash.Dictionary<TResult>): LodashTransform2x3<T, TResult>;
-        <T, TResult>(iteratee: lodash.MemoVoidIteratorCapped<T, lodash.Dictionary<TResult>>, accumulator: lodash.__, object: ReadonlyArray<T>): LodashTransform2x5<TResult>;
-        <T, TResult>(iteratee: lodash.__, accumulator: lodash.Dictionary<TResult>, object: ReadonlyArray<T>): LodashTransform2x6<T, TResult>;
-        <T, TResult>(iteratee: lodash.MemoVoidIteratorCapped<T, lodash.Dictionary<TResult>>, accumulator: lodash.Dictionary<TResult>, object: ReadonlyArray<T> | lodash.Dictionary<T>): lodash.Dictionary<TResult>;
-        <T>(iteratee: lodash.__, accumulator: lodash.__, object: lodash.Dictionary<T>): LodashTransform3x4<T>;
-        <T, TResult>(iteratee: lodash.MemoVoidIteratorCapped<T, lodash.Dictionary<TResult>>, accumulator: lodash.__, object: lodash.Dictionary<T>): LodashTransform3x5<TResult>;
-        <T, TResult>(iteratee: lodash.__, accumulator: lodash.Dictionary<TResult>, object: lodash.Dictionary<T>): LodashTransform3x6<T, TResult>;
-        <T, TResult>(iteratee: lodash.MemoVoidIteratorCapped<T, TResult[]>, accumulator: lodash.__, object: lodash.Dictionary<T>): LodashTransform4x5<TResult>;
-        <T, TResult>(iteratee: lodash.__, accumulator: ReadonlyArray<TResult>, object: lodash.Dictionary<T>): LodashTransform4x6<T, TResult>;
-    }
-    interface LodashTransform1x1<T, TResult> {
-        (accumulator: ReadonlyArray<TResult>): LodashTransform1x3<T, TResult>;
-        (accumulator: lodash.__, object: ReadonlyArray<T>): LodashTransform1x5<TResult>;
-        (accumulator: ReadonlyArray<TResult>, object: ReadonlyArray<T> | lodash.Dictionary<T>): TResult[];
-        (accumulator: lodash.__, object: lodash.Dictionary<T>): LodashTransform4x5<TResult>;
-    }
-    interface LodashTransform1x2<TResult> {
-        <T>(iteratee: lodash.MemoVoidIteratorCapped<T, TResult[]>): LodashTransform1x3<T, TResult>;
-        <T>(iteratee: lodash.__, object: ReadonlyArray<T>): LodashTransform1x6<T, TResult>;
-        <T>(iteratee: lodash.MemoVoidIteratorCapped<T, TResult[]>, object: ReadonlyArray<T> | lodash.Dictionary<T>): TResult[];
-        <T>(iteratee: lodash.__, object: lodash.Dictionary<T>): LodashTransform4x6<T, TResult>;
-    }
-    type LodashTransform1x3<T, TResult> = (object: ReadonlyArray<T> | lodash.Dictionary<T>) => TResult[];
-    interface LodashTransform1x4<T> {
-        <TResult>(iteratee: lodash.MemoVoidIteratorCapped<T, TResult[]>): LodashTransform1x5<TResult>;
-        <TResult>(iteratee: lodash.__, accumulator: ReadonlyArray<TResult>): LodashTransform1x6<T, TResult>;
-        <TResult>(iteratee: lodash.MemoVoidIteratorCapped<T, TResult[]>, accumulator: ReadonlyArray<TResult>): TResult[];
-        <TResult>(iteratee: lodash.MemoVoidIteratorCapped<T, lodash.Dictionary<TResult>>): LodashTransform2x5<TResult>;
-        <TResult>(iteratee: lodash.__, accumulator: lodash.Dictionary<TResult>): LodashTransform2x6<T, TResult>;
-        <TResult>(iteratee: lodash.MemoVoidIteratorCapped<T, lodash.Dictionary<TResult>>, accumulator: lodash.Dictionary<TResult>): lodash.Dictionary<TResult>;
-    }
-    type LodashTransform1x5<TResult> = (accumulator: ReadonlyArray<TResult>) => TResult[];
-    type LodashTransform1x6<T, TResult> = (iteratee: lodash.MemoVoidIteratorCapped<T, TResult[]>) => TResult[];
-    interface LodashTransform2x1<T, TResult> {
-        (accumulator: lodash.Dictionary<TResult>): LodashTransform2x3<T, TResult>;
-        (accumulator: lodash.__, object: ReadonlyArray<T>): LodashTransform2x5<TResult>;
-        (accumulator: lodash.Dictionary<TResult>, object: ReadonlyArray<T> | lodash.Dictionary<T>): lodash.Dictionary<TResult>;
-        (accumulator: lodash.__, object: lodash.Dictionary<T>): LodashTransform3x5<TResult>;
-    }
-    interface LodashTransform2x2<TResult> {
-        <T>(iteratee: lodash.MemoVoidIteratorCapped<T, lodash.Dictionary<TResult>>): LodashTransform2x3<T, TResult>;
-        <T>(iteratee: lodash.__, object: ReadonlyArray<T>): LodashTransform2x6<T, TResult>;
-        <T>(iteratee: lodash.MemoVoidIteratorCapped<T, lodash.Dictionary<TResult>>, object: ReadonlyArray<T> | lodash.Dictionary<T>): lodash.Dictionary<TResult>;
-        <T>(iteratee: lodash.__, object: lodash.Dictionary<T>): LodashTransform3x6<T, TResult>;
-    }
-    type LodashTransform2x3<T, TResult> = (object: ReadonlyArray<T> | lodash.Dictionary<T>) => lodash.Dictionary<TResult>;
-    type LodashTransform2x5<TResult> = (accumulator: lodash.Dictionary<TResult>) => lodash.Dictionary<TResult>;
-    type LodashTransform2x6<T, TResult> = (iteratee: lodash.MemoVoidIteratorCapped<T, lodash.Dictionary<TResult>>) => lodash.Dictionary<TResult>;
-    interface LodashTransform3x4<T> {
-        <TResult>(iteratee: lodash.MemoVoidIteratorCapped<T, lodash.Dictionary<TResult>>): LodashTransform3x5<TResult>;
-        <TResult>(iteratee: lodash.__, accumulator: lodash.Dictionary<TResult>): LodashTransform3x6<T, TResult>;
-        <TResult>(iteratee: lodash.MemoVoidIteratorCapped<T, lodash.Dictionary<TResult>>, accumulator: lodash.Dictionary<TResult>): lodash.Dictionary<TResult>;
-        <TResult>(iteratee: lodash.MemoVoidIteratorCapped<T, TResult[]>): LodashTransform4x5<TResult>;
-        <TResult>(iteratee: lodash.__, accumulator: ReadonlyArray<TResult>): LodashTransform4x6<T, TResult>;
-        <TResult>(iteratee: lodash.MemoVoidIteratorCapped<T, TResult[]>, accumulator: ReadonlyArray<TResult>): TResult[];
-    }
-    type LodashTransform3x5<TResult> = (accumulator: lodash.Dictionary<TResult>) => lodash.Dictionary<TResult>;
-    type LodashTransform3x6<T, TResult> = (iteratee: lodash.MemoVoidIteratorCapped<T, lodash.Dictionary<TResult>>) => lodash.Dictionary<TResult>;
-    type LodashTransform4x5<TResult> = (accumulator: ReadonlyArray<TResult>) => TResult[];
-    type LodashTransform4x6<T, TResult> = (iteratee: lodash.MemoVoidIteratorCapped<T, TResult[]>) => TResult[];
-    type LodashTrim = (string: string) => string;
-    interface LodashTrimChars {
-        (chars: string): LodashTrimChars1x1;
-        (chars: lodash.__, string: string): LodashTrimChars1x2;
-        (chars: string, string: string): string;
-    }
-    type LodashTrimChars1x1 = (string: string) => string;
-    type LodashTrimChars1x2 = (chars: string) => string;
-    interface LodashTrimCharsEnd {
-        (chars: string): LodashTrimCharsEnd1x1;
-        (chars: lodash.__, string: string): LodashTrimCharsEnd1x2;
-        (chars: string, string: string): string;
-    }
-    type LodashTrimCharsEnd1x1 = (string: string) => string;
-    type LodashTrimCharsEnd1x2 = (chars: string) => string;
-    interface LodashTrimCharsStart {
-        (chars: string): LodashTrimCharsStart1x1;
-        (chars: lodash.__, string: string): LodashTrimCharsStart1x2;
-        (chars: string, string: string): string;
-    }
-    type LodashTrimCharsStart1x1 = (string: string) => string;
-    type LodashTrimCharsStart1x2 = (chars: string) => string;
-    type LodashTrimEnd = (string: string) => string;
-    type LodashTrimStart = (string: string) => string;
-    interface LodashTruncate {
-        (options: lodash.TruncateOptions): LodashTruncate1x1;
-        (options: lodash.__, string: string): LodashTruncate1x2;
-        (options: lodash.TruncateOptions, string: string): string;
-    }
-    type LodashTruncate1x1 = (string: string) => string;
-    type LodashTruncate1x2 = (options: lodash.TruncateOptions) => string;
-    type LodashUnapply = (func: (...args: any[]) => any) => (...args: any[]) => any;
-    type LodashUnary = <T, TResult>(func: (arg1: T, ...args: any[]) => TResult) => (arg1: T) => TResult;
-    type LodashUnescape = (string: string) => string;
-    interface LodashUnion {
-        <T>(arrays2: lodash.List<T> | null | undefined): LodashUnion1x1<T>;
-        <T>(arrays2: lodash.__, arrays: lodash.List<T> | null | undefined): LodashUnion1x2<T>;
-        <T>(arrays2: lodash.List<T> | null | undefined, arrays: lodash.List<T> | null | undefined): T[];
-    }
-    type LodashUnion1x1<T> = (arrays: lodash.List<T> | null | undefined) => T[];
-    type LodashUnion1x2<T> = (arrays2: lodash.List<T> | null | undefined) => T[];
-    interface LodashUnionBy {
-        <T>(iteratee: lodash.ValueIteratee<T>): LodashUnionBy1x1<T>;
-        <T>(iteratee: lodash.__, arrays1: lodash.List<T> | null | undefined): LodashUnionBy1x2<T>;
-        <T>(iteratee: lodash.ValueIteratee<T>, arrays1: lodash.List<T> | null | undefined): LodashUnionBy1x3<T>;
-        <T>(iteratee: lodash.__, arrays1: lodash.__, arrays2: lodash.List<T> | null | undefined): LodashUnionBy1x4<T>;
-        <T>(iteratee: lodash.ValueIteratee<T>, arrays1: lodash.__, arrays2: lodash.List<T> | null | undefined): LodashUnionBy1x5<T>;
-        <T>(iteratee: lodash.__, arrays1: lodash.List<T> | null | undefined, arrays2: lodash.List<T> | null | undefined): LodashUnionBy1x6<T>;
-        <T>(iteratee: lodash.ValueIteratee<T>, arrays1: lodash.List<T> | null | undefined, arrays2: lodash.List<T> | null | undefined): T[];
-    }
-    interface LodashUnionBy1x1<T> {
-        (arrays1: lodash.List<T> | null | undefined): LodashUnionBy1x3<T>;
-        (arrays1: lodash.__, arrays2: lodash.List<T> | null | undefined): LodashUnionBy1x5<T>;
-        (arrays1: lodash.List<T> | null | undefined, arrays2: lodash.List<T> | null | undefined): T[];
-    }
-    interface LodashUnionBy1x2<T> {
-        (iteratee: lodash.ValueIteratee<T>): LodashUnionBy1x3<T>;
-        (iteratee: lodash.__, arrays2: lodash.List<T> | null | undefined): LodashUnionBy1x6<T>;
-        (iteratee: lodash.ValueIteratee<T>, arrays2: lodash.List<T> | null | undefined): T[];
-    }
-    type LodashUnionBy1x3<T> = (arrays2: lodash.List<T> | null | undefined) => T[];
-    interface LodashUnionBy1x4<T> {
-        (iteratee: lodash.ValueIteratee<T>): LodashUnionBy1x5<T>;
-        (iteratee: lodash.__, arrays1: lodash.List<T> | null | undefined): LodashUnionBy1x6<T>;
-        (iteratee: lodash.ValueIteratee<T>, arrays1: lodash.List<T> | null | undefined): T[];
-    }
-    type LodashUnionBy1x5<T> = (arrays1: lodash.List<T> | null | undefined) => T[];
-    type LodashUnionBy1x6<T> = (iteratee: lodash.ValueIteratee<T>) => T[];
-    interface LodashUnionWith {
-        <T>(comparator: lodash.Comparator<T>): LodashUnionWith1x1<T>;
-        <T>(comparator: lodash.__, arrays: lodash.List<T> | null | undefined): LodashUnionWith1x2<T>;
-        <T>(comparator: lodash.Comparator<T>, arrays: lodash.List<T> | null | undefined): LodashUnionWith1x3<T>;
-        <T>(comparator: lodash.__, arrays: lodash.__, arrays2: lodash.List<T> | null | undefined): LodashUnionWith1x4<T>;
-        <T>(comparator: lodash.Comparator<T>, arrays: lodash.__, arrays2: lodash.List<T> | null | undefined): LodashUnionWith1x5<T>;
-        <T>(comparator: lodash.__, arrays: lodash.List<T> | null | undefined, arrays2: lodash.List<T> | null | undefined): LodashUnionWith1x6<T>;
-        <T>(comparator: lodash.Comparator<T>, arrays: lodash.List<T> | null | undefined, arrays2: lodash.List<T> | null | undefined): T[];
-    }
-    interface LodashUnionWith1x1<T> {
-        (arrays: lodash.List<T> | null | undefined): LodashUnionWith1x3<T>;
-        (arrays: lodash.__, arrays2: lodash.List<T> | null | undefined): LodashUnionWith1x5<T>;
-        (arrays: lodash.List<T> | null | undefined, arrays2: lodash.List<T> | null | undefined): T[];
-    }
-    interface LodashUnionWith1x2<T> {
-        (comparator: lodash.Comparator<T>): LodashUnionWith1x3<T>;
-        (comparator: lodash.__, arrays2: lodash.List<T> | null | undefined): LodashUnionWith1x6<T>;
-        (comparator: lodash.Comparator<T>, arrays2: lodash.List<T> | null | undefined): T[];
-    }
-    type LodashUnionWith1x3<T> = (arrays2: lodash.List<T> | null | undefined) => T[];
-    interface LodashUnionWith1x4<T> {
-        (comparator: lodash.Comparator<T>): LodashUnionWith1x5<T>;
-        (comparator: lodash.__, arrays: lodash.List<T> | null | undefined): LodashUnionWith1x6<T>;
-        (comparator: lodash.Comparator<T>, arrays: lodash.List<T> | null | undefined): T[];
-    }
-    type LodashUnionWith1x5<T> = (arrays: lodash.List<T> | null | undefined) => T[];
-    type LodashUnionWith1x6<T> = (comparator: lodash.Comparator<T>) => T[];
-    type LodashUniq = <T>(array: lodash.List<T> | null | undefined) => T[];
-    interface LodashUniqBy {
-        <T>(iteratee: lodash.ValueIteratee<T>): LodashUniqBy1x1<T>;
-        <T>(iteratee: lodash.__, array: lodash.List<T> | null | undefined): LodashUniqBy1x2<T>;
-        <T>(iteratee: lodash.ValueIteratee<T>, array: lodash.List<T> | null | undefined): T[];
-    }
-    type LodashUniqBy1x1<T> = (array: lodash.List<T> | null | undefined) => T[];
-    type LodashUniqBy1x2<T> = (iteratee: lodash.ValueIteratee<T>) => T[];
-    type LodashUniqueId = (prefix: string) => string;
-    interface LodashUniqWith {
-        <T>(comparator: lodash.Comparator<T>): LodashUniqWith1x1<T>;
-        <T>(comparator: lodash.__, array: lodash.List<T> | null | undefined): LodashUniqWith1x2<T>;
-        <T>(comparator: lodash.Comparator<T>, array: lodash.List<T> | null | undefined): T[];
-    }
-    type LodashUniqWith1x1<T> = (array: lodash.List<T> | null | undefined) => T[];
-    type LodashUniqWith1x2<T> = (comparator: lodash.Comparator<T>) => T[];
-    type LodashUnzip = <T>(array: T[][] | lodash.List<lodash.List<T>> | null | undefined) => T[][];
-    interface LodashUnzipWith {
-        <T, TResult>(iteratee: (...values: T[]) => TResult): LodashUnzipWith1x1<T, TResult>;
-        <T>(iteratee: lodash.__, array: lodash.List<lodash.List<T>> | null | undefined): LodashUnzipWith1x2<T>;
-        <T, TResult>(iteratee: (...values: T[]) => TResult, array: lodash.List<lodash.List<T>> | null | undefined): TResult[];
-    }
-    type LodashUnzipWith1x1<T, TResult> = (array: lodash.List<lodash.List<T>> | null | undefined) => TResult[];
-    type LodashUnzipWith1x2<T> = <TResult>(iteratee: (...values: T[]) => TResult) => TResult[];
-    interface LodashUpdate {
-        (path: lodash.PropertyPath): LodashUpdate1x1;
-        (path: lodash.__, updater: (value: any) => any): LodashUpdate1x2;
-        (path: lodash.PropertyPath, updater: (value: any) => any): LodashUpdate1x3;
-        (path: lodash.__, updater: lodash.__, object: object): LodashUpdate1x4;
-        (path: lodash.PropertyPath, updater: lodash.__, object: object): LodashUpdate1x5;
-        (path: lodash.__, updater: (value: any) => any, object: object): LodashUpdate1x6;
-        (path: lodash.PropertyPath, updater: (value: any) => any, object: object): any;
-    }
-    interface LodashUpdate1x1 {
-        (updater: (value: any) => any): LodashUpdate1x3;
-        (updater: lodash.__, object: object): LodashUpdate1x5;
-        (updater: (value: any) => any, object: object): any;
-    }
-    interface LodashUpdate1x2 {
-        (path: lodash.PropertyPath): LodashUpdate1x3;
-        (path: lodash.__, object: object): LodashUpdate1x6;
-        (path: lodash.PropertyPath, object: object): any;
-    }
-    type LodashUpdate1x3 = (object: object) => any;
-    interface LodashUpdate1x4 {
-        (path: lodash.PropertyPath): LodashUpdate1x5;
-        (path: lodash.__, updater: (value: any) => any): LodashUpdate1x6;
-        (path: lodash.PropertyPath, updater: (value: any) => any): any;
-    }
-    type LodashUpdate1x5 = (updater: (value: any) => any) => any;
-    type LodashUpdate1x6 = (path: lodash.PropertyPath) => any;
-    interface LodashUpdateWith {
-        <T extends object>(customizer: lodash.SetWithCustomizer<T>): LodashUpdateWith1x1<T>;
-        (customizer: lodash.__, path: lodash.PropertyPath): LodashUpdateWith1x2;
-        <T extends object>(customizer: lodash.SetWithCustomizer<T>, path: lodash.PropertyPath): LodashUpdateWith1x3<T>;
-        (customizer: lodash.__, path: lodash.__, updater: (oldValue: any) => any): LodashUpdateWith1x4;
-        <T extends object>(customizer: lodash.SetWithCustomizer<T>, path: lodash.__, updater: (oldValue: any) => any): LodashUpdateWith1x5<T>;
-        (customizer: lodash.__, path: lodash.PropertyPath, updater: (oldValue: any) => any): LodashUpdateWith1x6;
-        <T extends object>(customizer: lodash.SetWithCustomizer<T>, path: lodash.PropertyPath, updater: (oldValue: any) => any): LodashUpdateWith1x7<T>;
-        <T extends object>(customizer: lodash.__, path: lodash.__, updater: lodash.__, object: T): LodashUpdateWith1x8<T>;
-        <T extends object>(customizer: lodash.SetWithCustomizer<T>, path: lodash.__, updater: lodash.__, object: T): LodashUpdateWith1x9<T>;
-        <T extends object>(customizer: lodash.__, path: lodash.PropertyPath, updater: lodash.__, object: T): LodashUpdateWith1x10<T>;
-        <T extends object>(customizer: lodash.SetWithCustomizer<T>, path: lodash.PropertyPath, updater: lodash.__, object: T): LodashUpdateWith1x11<T>;
-        <T extends object>(customizer: lodash.__, path: lodash.__, updater: (oldValue: any) => any, object: T): LodashUpdateWith1x12<T>;
-        <T extends object>(customizer: lodash.SetWithCustomizer<T>, path: lodash.__, updater: (oldValue: any) => any, object: T): LodashUpdateWith1x13<T>;
-        <T extends object>(customizer: lodash.__, path: lodash.PropertyPath, updater: (oldValue: any) => any, object: T): LodashUpdateWith1x14<T>;
-        <T extends object>(customizer: lodash.SetWithCustomizer<T>, path: lodash.PropertyPath, updater: (oldValue: any) => any, object: T): T;
-    }
-    interface LodashUpdateWith1x1<T> {
-        (path: lodash.PropertyPath): LodashUpdateWith1x3<T>;
-        (path: lodash.__, updater: (oldValue: any) => any): LodashUpdateWith1x5<T>;
-        (path: lodash.PropertyPath, updater: (oldValue: any) => any): LodashUpdateWith1x7<T>;
-        (path: lodash.__, updater: lodash.__, object: T): LodashUpdateWith1x9<T>;
-        (path: lodash.PropertyPath, updater: lodash.__, object: T): LodashUpdateWith1x11<T>;
-        (path: lodash.__, updater: (oldValue: any) => any, object: T): LodashUpdateWith1x13<T>;
-        (path: lodash.PropertyPath, updater: (oldValue: any) => any, object: T): T;
-    }
-    interface LodashUpdateWith1x2 {
-        <T extends object>(customizer: lodash.SetWithCustomizer<T>): LodashUpdateWith1x3<T>;
-        (customizer: lodash.__, updater: (oldValue: any) => any): LodashUpdateWith1x6;
-        <T extends object>(customizer: lodash.SetWithCustomizer<T>, updater: (oldValue: any) => any): LodashUpdateWith1x7<T>;
-        <T extends object>(customizer: lodash.__, updater: lodash.__, object: T): LodashUpdateWith1x10<T>;
-        <T extends object>(customizer: lodash.SetWithCustomizer<T>, updater: lodash.__, object: T): LodashUpdateWith1x11<T>;
-        <T extends object>(customizer: lodash.__, updater: (oldValue: any) => any, object: T): LodashUpdateWith1x14<T>;
-        <T extends object>(customizer: lodash.SetWithCustomizer<T>, updater: (oldValue: any) => any, object: T): T;
-    }
-    interface LodashUpdateWith1x3<T> {
-        (updater: (oldValue: any) => any): LodashUpdateWith1x7<T>;
-        (updater: lodash.__, object: T): LodashUpdateWith1x11<T>;
-        (updater: (oldValue: any) => any, object: T): T;
-    }
-    interface LodashUpdateWith1x4 {
-        <T extends object>(customizer: lodash.SetWithCustomizer<T>): LodashUpdateWith1x5<T>;
-        (customizer: lodash.__, path: lodash.PropertyPath): LodashUpdateWith1x6;
-        <T extends object>(customizer: lodash.SetWithCustomizer<T>, path: lodash.PropertyPath): LodashUpdateWith1x7<T>;
-        <T extends object>(customizer: lodash.__, path: lodash.__, object: T): LodashUpdateWith1x12<T>;
-        <T extends object>(customizer: lodash.SetWithCustomizer<T>, path: lodash.__, object: T): LodashUpdateWith1x13<T>;
-        <T extends object>(customizer: lodash.__, path: lodash.PropertyPath, object: T): LodashUpdateWith1x14<T>;
-        <T extends object>(customizer: lodash.SetWithCustomizer<T>, path: lodash.PropertyPath, object: T): T;
-    }
-    interface LodashUpdateWith1x5<T> {
-        (path: lodash.PropertyPath): LodashUpdateWith1x7<T>;
-        (path: lodash.__, object: T): LodashUpdateWith1x13<T>;
-        (path: lodash.PropertyPath, object: T): T;
-    }
-    interface LodashUpdateWith1x6 {
-        <T extends object>(customizer: lodash.SetWithCustomizer<T>): LodashUpdateWith1x7<T>;
-        <T extends object>(customizer: lodash.__, object: T): LodashUpdateWith1x14<T>;
-        <T extends object>(customizer: lodash.SetWithCustomizer<T>, object: T): T;
-    }
-    type LodashUpdateWith1x7<T> = (object: T) => T;
-    interface LodashUpdateWith1x8<T> {
-        (customizer: lodash.SetWithCustomizer<T>): LodashUpdateWith1x9<T>;
-        (customizer: lodash.__, path: lodash.PropertyPath): LodashUpdateWith1x10<T>;
-        (customizer: lodash.SetWithCustomizer<T>, path: lodash.PropertyPath): LodashUpdateWith1x11<T>;
-        (customizer: lodash.__, path: lodash.__, updater: (oldValue: any) => any): LodashUpdateWith1x12<T>;
-        (customizer: lodash.SetWithCustomizer<T>, path: lodash.__, updater: (oldValue: any) => any): LodashUpdateWith1x13<T>;
-        (customizer: lodash.__, path: lodash.PropertyPath, updater: (oldValue: any) => any): LodashUpdateWith1x14<T>;
-        (customizer: lodash.SetWithCustomizer<T>, path: lodash.PropertyPath, updater: (oldValue: any) => any): T;
-    }
-    interface LodashUpdateWith1x9<T> {
-        (path: lodash.PropertyPath): LodashUpdateWith1x11<T>;
-        (path: lodash.__, updater: (oldValue: any) => any): LodashUpdateWith1x13<T>;
-        (path: lodash.PropertyPath, updater: (oldValue: any) => any): T;
-    }
-    interface LodashUpdateWith1x10<T> {
-        (customizer: lodash.SetWithCustomizer<T>): LodashUpdateWith1x11<T>;
-        (customizer: lodash.__, updater: (oldValue: any) => any): LodashUpdateWith1x14<T>;
-        (customizer: lodash.SetWithCustomizer<T>, updater: (oldValue: any) => any): T;
-    }
-    type LodashUpdateWith1x11<T> = (updater: (oldValue: any) => any) => T;
-    interface LodashUpdateWith1x12<T> {
-        (customizer: lodash.SetWithCustomizer<T>): LodashUpdateWith1x13<T>;
-        (customizer: lodash.__, path: lodash.PropertyPath): LodashUpdateWith1x14<T>;
-        (customizer: lodash.SetWithCustomizer<T>, path: lodash.PropertyPath): T;
-    }
-    type LodashUpdateWith1x13<T> = (path: lodash.PropertyPath) => T;
-    type LodashUpdateWith1x14<T> = (customizer: lodash.SetWithCustomizer<T>) => T;
-    type LodashUpperCase = (string: string) => string;
-    type LodashUpperFirst = (string: string) => string;
-    interface LodashValues {
-        <T>(object: lodash.Dictionary<T> | lodash.NumericDictionary<T> | lodash.List<T> | null | undefined): T[];
-        <T extends object>(object: T | null | undefined): Array<T[keyof T]>;
-        (object: any): any[];
-    }
-    interface LodashValuesIn {
-        <T>(object: lodash.Dictionary<T>|lodash.NumericDictionary<T>|lodash.List<T> | null | undefined): T[];
-        <T extends object>(object: T | null | undefined): Array<T[keyof T]>;
-    }
-    interface LodashWithout {
-        <T>(values: ReadonlyArray<T>): LodashWithout1x1<T>;
-        <T>(values: lodash.__, array: lodash.List<T> | null | undefined): LodashWithout1x2<T>;
-        <T>(values: ReadonlyArray<T>, array: lodash.List<T> | null | undefined): T[];
-    }
-    type LodashWithout1x1<T> = (array: lodash.List<T> | null | undefined) => T[];
-    type LodashWithout1x2<T> = (values: ReadonlyArray<T>) => T[];
-    type LodashWords = (string: string) => string[];
-    interface LodashWrap {
-        <T, TArgs, TResult>(wrapper: (value: T, ...args: TArgs[]) => TResult): LodashWrap1x1<T, TArgs, TResult>;
-        <T>(wrapper: lodash.__, value: T): LodashWrap1x2<T>;
-        <T, TArgs, TResult>(wrapper: (value: T, ...args: TArgs[]) => TResult, value: T): (...args: TArgs[]) => TResult;
-        <T, TResult>(wrapper: (value: T, ...args: any[]) => TResult): LodashWrap2x1<T, TResult>;
-        <T, TResult>(wrapper: (value: T, ...args: any[]) => TResult, value: T): (...args: any[]) => TResult;
-    }
-    type LodashWrap1x1<T, TArgs, TResult> = (value: T) => (...args: TArgs[]) => TResult;
-    interface LodashWrap1x2<T> {
-        <TArgs, TResult>(wrapper: (value: T, ...args: TArgs[]) => TResult): (...args: TArgs[]) => TResult;
-        <TResult>(wrapper: (value: T, ...args: any[]) => TResult): (...args: any[]) => TResult;
-    }
-    type LodashWrap2x1<T, TResult> = (value: T) => (...args: any[]) => TResult;
-    interface LodashZip {
-        <T1>(arrays1: lodash.List<T1>): LodashZip1x1<T1>;
-        <T2>(arrays1: lodash.__, arrays2: lodash.List<T2>): LodashZip1x2<T2>;
-        <T1, T2>(arrays1: lodash.List<T1>, arrays2: lodash.List<T2>): Array<[T1 | undefined, T2 | undefined]>;
-    }
-    type LodashZip1x1<T1> = <T2>(arrays2: lodash.List<T2>) => Array<[T1 | undefined, T2 | undefined]>;
-    type LodashZip1x2<T2> = <T1>(arrays1: lodash.List<T1>) => Array<[T1 | undefined, T2 | undefined]>;
-    interface LodashZipAll {
-        <T1, T2>(arrays1: [lodash.List<T1>, lodash.List<T2>]): Array<[T1 | undefined, T2 | undefined]>;
-        <T1, T2, T3>(arrays1: [lodash.List<T1>, lodash.List<T2>, lodash.List<T3>]): Array<[T1 | undefined, T2 | undefined, T3 | undefined]>;
-        <T1, T2, T3, T4>(arrays1: [lodash.List<T1>, lodash.List<T2>, lodash.List<T3>, lodash.List<T4>]): Array<[T1 | undefined, T2 | undefined, T3 | undefined, T4 | undefined]>;
-        <T1, T2, T3, T4, T5>(arrays1: [lodash.List<T1>, lodash.List<T2>, lodash.List<T3>, lodash.List<T4>, lodash.List<T5>]): Array<[T1 | undefined, T2 | undefined, T3 | undefined, T4 | undefined, T5 | undefined]>;
-        <T>(arrays: ReadonlyArray<lodash.List<T> | null | undefined>): Array<Array<T | undefined>>;
-    }
-    interface LodashZipObject {
-        (props: lodash.List<lodash.PropertyName>): LodashZipObject1x1;
-        <T>(props: lodash.__, values: lodash.List<T>): LodashZipObject1x2<T>;
-        <T>(props: lodash.List<lodash.PropertyName>, values: lodash.List<T>): lodash.Dictionary<T>;
-    }
-    type LodashZipObject1x1 = <T>(values: lodash.List<T>) => lodash.Dictionary<T>;
-    type LodashZipObject1x2<T> = (props: lodash.List<lodash.PropertyName>) => lodash.Dictionary<T>;
-    interface LodashZipObjectDeep {
-        (paths: lodash.List<lodash.PropertyPath>): LodashZipObjectDeep1x1;
-        (paths: lodash.__, values: lodash.List<any>): LodashZipObjectDeep1x2;
-        (paths: lodash.List<lodash.PropertyPath>, values: lodash.List<any>): object;
-    }
-    type LodashZipObjectDeep1x1 = (values: lodash.List<any>) => object;
-    type LodashZipObjectDeep1x2 = (paths: lodash.List<lodash.PropertyPath>) => object;
-    interface LodashZipWith {
-        <T1, T2, TResult>(iteratee: (value1: T1, value2: T2) => TResult): LodashZipWith1x1<T1, T2, TResult>;
-        <T1>(iteratee: lodash.__, arrays1: lodash.List<T1>): LodashZipWith1x2<T1>;
-        <T1, T2, TResult>(iteratee: (value1: T1, value2: T2) => TResult, arrays1: lodash.List<T1>): LodashZipWith1x3<T2, TResult>;
-        <T2>(iteratee: lodash.__, arrays1: lodash.__, arrays2: lodash.List<T2>): LodashZipWith1x4<T2>;
-        <T1, T2, TResult>(iteratee: (value1: T1, value2: T2) => TResult, arrays1: lodash.__, arrays2: lodash.List<T2>): LodashZipWith1x5<T1, TResult>;
-        <T1, T2>(iteratee: lodash.__, arrays1: lodash.List<T1>, arrays2: lodash.List<T2>): LodashZipWith1x6<T1, T2>;
-        <T1, T2, TResult>(iteratee: (value1: T1, value2: T2) => TResult, arrays1: lodash.List<T1>, arrays2: lodash.List<T2>): TResult[];
-    }
-    interface LodashZipWith1x1<T1, T2, TResult> {
-        (arrays1: lodash.List<T1>): LodashZipWith1x3<T2, TResult>;
-        (arrays1: lodash.__, arrays2: lodash.List<T2>): LodashZipWith1x5<T1, TResult>;
-        (arrays1: lodash.List<T1>, arrays2: lodash.List<T2>): TResult[];
-    }
-    interface LodashZipWith1x2<T1> {
-        <T2, TResult>(iteratee: (value1: T1, value2: T2) => TResult): LodashZipWith1x3<T2, TResult>;
-        <T2>(iteratee: lodash.__, arrays2: lodash.List<T2>): LodashZipWith1x6<T1, T2>;
-        <T2, TResult>(iteratee: (value1: T1, value2: T2) => TResult, arrays2: lodash.List<T2>): TResult[];
-    }
-    type LodashZipWith1x3<T2, TResult> = (arrays2: lodash.List<T2>) => TResult[];
-    interface LodashZipWith1x4<T2> {
-        <T1, TResult>(iteratee: (value1: T1, value2: T2) => TResult): LodashZipWith1x5<T1, TResult>;
-        <T1>(iteratee: lodash.__, arrays1: lodash.List<T1>): LodashZipWith1x6<T1, T2>;
-        <T1, TResult>(iteratee: (value1: T1, value2: T2) => TResult, arrays1: lodash.List<T1>): TResult[];
-    }
-    type LodashZipWith1x5<T1, TResult> = (arrays1: lodash.List<T1>) => TResult[];
-    type LodashZipWith1x6<T1, T2> = <TResult>(iteratee: (value1: T1, value2: T2) => TResult) => TResult[];
-
-    interface LoDashFp {
-        add: LodashAdd;
-        after: LodashAfter;
-        all: LodashEvery;
-        allPass: LodashOverEvery;
-        always: LodashConstant;
-        any: LodashSome;
-        anyPass: LodashOverSome;
-        apply: LodashApply;
-        ary: LodashAry;
-        assign: LodashAssign;
-        assignAll: LodashAssignAll;
-        assignAllWith: LodashAssignAllWith;
-        assignIn: LodashAssignIn;
-        assignInAll: LodashAssignInAll;
-        assignInAllWith: LodashAssignInAllWith;
-        assignInWith: LodashAssignInWith;
-        assignWith: LodashAssignWith;
-        assoc: LodashSet;
-        assocPath: LodashSet;
-        at: LodashAt;
-        attempt: LodashAttempt;
-        before: LodashBefore;
-        bind: LodashBind;
-        bindAll: LodashBindAll;
-        bindKey: LodashBindKey;
-        camelCase: LodashCamelCase;
-        capitalize: LodashCapitalize;
-        castArray: LodashCastArray;
-        ceil: LodashCeil;
-        chunk: LodashChunk;
-        clamp: LodashClamp;
-        clone: LodashClone;
-        cloneDeep: LodashCloneDeep;
-        cloneDeepWith: LodashCloneDeepWith;
-        cloneWith: LodashCloneWith;
-        compact: LodashCompact;
-        complement: LodashNegate;
-        compose: LodashFlowRight;
-        concat: LodashConcat;
-        cond: LodashCond;
-        conforms: LodashConformsTo;
-        conformsTo: LodashConformsTo;
-        constant: LodashConstant;
-        contains: LodashContains;
-        countBy: LodashCountBy;
-        create: LodashCreate;
-        curry: LodashCurry;
-        curryN: LodashCurryN;
-        curryRight: LodashCurryRight;
-        curryRightN: LodashCurryRightN;
-        debounce: LodashDebounce;
-        deburr: LodashDeburr;
-        defaults: LodashDefaults;
-        defaultsAll: LodashDefaultsAll;
-        defaultsDeep: LodashDefaultsDeep;
-        defaultsDeepAll: LodashDefaultsDeepAll;
-        defaultTo: LodashDefaultTo;
-        defer: LodashDefer;
-        delay: LodashDelay;
-        difference: LodashDifference;
-        differenceBy: LodashDifferenceBy;
-        differenceWith: LodashDifferenceWith;
-        dissoc: LodashUnset;
-        dissocPath: LodashUnset;
-        divide: LodashDivide;
-        drop: LodashDrop;
-        dropLast: LodashDropRight;
-        dropLastWhile: LodashDropRightWhile;
-        dropRight: LodashDropRight;
-        dropRightWhile: LodashDropRightWhile;
-        dropWhile: LodashDropWhile;
-        each: LodashForEach;
-        eachRight: LodashForEachRight;
-        endsWith: LodashEndsWith;
-        entries: LodashToPairs;
-        entriesIn: LodashToPairsIn;
-        eq: LodashEq;
-        equals: LodashIsEqual;
-        escape: LodashEscape;
-        escapeRegExp: LodashEscapeRegExp;
-        every: LodashEvery;
-        extend: LodashExtend;
-        extendAll: LodashExtendAll;
-        extendAllWith: LodashExtendAllWith;
-        extendWith: LodashExtendWith;
-        F: LodashStubFalse;
-        fill: LodashFill;
-        filter: LodashFilter;
-        find: LodashFind;
-        findFrom: LodashFindFrom;
-        findIndex: LodashFindIndex;
-        findIndexFrom: LodashFindIndexFrom;
-        findKey: LodashFindKey;
-        findLast: LodashFindLast;
-        findLastFrom: LodashFindLastFrom;
-        findLastIndex: LodashFindLastIndex;
-        findLastIndexFrom: LodashFindLastIndexFrom;
-        findLastKey: LodashFindLastKey;
-        first: LodashHead;
-        flatMap: LodashFlatMap;
-        flatMapDeep: LodashFlatMapDeep;
-        flatMapDepth: LodashFlatMapDepth;
-        flatten: LodashFlatten;
-        flattenDeep: LodashFlattenDeep;
-        flattenDepth: LodashFlattenDepth;
-        flip: LodashFlip;
-        floor: LodashFloor;
-        flow: LodashFlow;
-        flowRight: LodashFlowRight;
-        forEach: LodashForEach;
-        forEachRight: LodashForEachRight;
-        forIn: LodashForIn;
-        forInRight: LodashForInRight;
-        forOwn: LodashForOwn;
-        forOwnRight: LodashForOwnRight;
-        fromPairs: LodashFromPairs;
-        functions: LodashFunctions;
-        functionsIn: LodashFunctionsIn;
-        get: LodashGet;
-        getOr: LodashGetOr;
-        groupBy: LodashGroupBy;
-        gt: LodashGt;
-        gte: LodashGte;
-        has: LodashHas;
-        hasIn: LodashHasIn;
-        head: LodashHead;
-        identical: LodashEq;
-        identity: LodashIdentity;
-        includes: LodashIncludes;
-        includesFrom: LodashIncludesFrom;
-        indexBy: LodashKeyBy;
-        indexOf: LodashIndexOf;
-        indexOfFrom: LodashIndexOfFrom;
-        init: LodashInitial;
-        initial: LodashInitial;
-        inRange: LodashInRange;
-        intersection: LodashIntersection;
-        intersectionBy: LodashIntersectionBy;
-        intersectionWith: LodashIntersectionWith;
-        invert: LodashInvert;
-        invertBy: LodashInvertBy;
-        invertObj: LodashInvert;
-        invoke: LodashInvoke;
-        invokeArgs: LodashInvokeArgs;
-        invokeArgsMap: LodashInvokeArgsMap;
-        invokeMap: LodashInvokeMap;
-        isArguments: LodashIsArguments;
-        isArray: LodashIsArray;
-        isArrayBuffer: LodashIsArrayBuffer;
-        isArrayLike: LodashIsArrayLike;
-        isArrayLikeObject: LodashIsArrayLikeObject;
-        isBoolean: LodashIsBoolean;
-        isBuffer: LodashIsBuffer;
-        isDate: LodashIsDate;
-        isElement: LodashIsElement;
-        isEmpty: LodashIsEmpty;
-        isEqual: LodashIsEqual;
-        isEqualWith: LodashIsEqualWith;
-        isError: LodashIsError;
-        isFinite: LodashIsFinite;
-        isFunction: LodashIsFunction;
-        isInteger: LodashIsInteger;
-        isLength: LodashIsLength;
-        isMap: LodashIsMap;
-        isMatch: LodashIsMatch;
-        isMatchWith: LodashIsMatchWith;
-        isNaN: LodashIsNaN;
-        isNative: LodashIsNative;
-        isNil: LodashIsNil;
-        isNull: LodashIsNull;
-        isNumber: LodashIsNumber;
-        isObject: LodashIsObject;
-        isObjectLike: LodashIsObjectLike;
-        isPlainObject: LodashIsPlainObject;
-        isRegExp: LodashIsRegExp;
-        isSafeInteger: LodashIsSafeInteger;
-        isSet: LodashIsSet;
-        isString: LodashIsString;
-        isSymbol: LodashIsSymbol;
-        isTypedArray: LodashIsTypedArray;
-        isUndefined: LodashIsUndefined;
-        isWeakMap: LodashIsWeakMap;
-        isWeakSet: LodashIsWeakSet;
-        iteratee: LodashIteratee;
-        join: LodashJoin;
-        juxt: LodashOver;
-        kebabCase: LodashKebabCase;
-        keyBy: LodashKeyBy;
-        keys: LodashKeys;
-        keysIn: LodashKeysIn;
-        last: LodashLast;
-        lastIndexOf: LodashLastIndexOf;
-        lastIndexOfFrom: LodashLastIndexOfFrom;
-        lowerCase: LodashLowerCase;
-        lowerFirst: LodashLowerFirst;
-        lt: LodashLt;
-        lte: LodashLte;
-        map: LodashMap;
-        mapKeys: LodashMapKeys;
-        mapValues: LodashMapValues;
-        matches: LodashIsMatch;
-        matchesProperty: LodashMatchesProperty;
-        max: LodashMax;
-        maxBy: LodashMaxBy;
-        mean: LodashMean;
-        meanBy: LodashMeanBy;
-        memoize: LodashMemoize;
-        merge: LodashMerge;
-        mergeAll: LodashMergeAll;
-        mergeAllWith: LodashMergeAllWith;
-        mergeWith: LodashMergeWith;
-        method: LodashMethod;
-        methodOf: LodashMethodOf;
-        min: LodashMin;
-        minBy: LodashMinBy;
-        multiply: LodashMultiply;
-        nAry: LodashAry;
-        negate: LodashNegate;
-        noConflict: LodashNoConflict;
-        noop: LodashNoop;
-        now: LodashNow;
-        nth: LodashNth;
-        nthArg: LodashNthArg;
-        omit: LodashOmit;
-        omitAll: LodashOmit;
-        omitBy: LodashOmitBy;
-        once: LodashOnce;
-        orderBy: LodashOrderBy;
-        over: LodashOver;
-        overArgs: LodashOverArgs;
-        overEvery: LodashOverEvery;
-        overSome: LodashOverSome;
-        pad: LodashPad;
-        padChars: LodashPadChars;
-        padCharsEnd: LodashPadCharsEnd;
-        padCharsStart: LodashPadCharsStart;
-        padEnd: LodashPadEnd;
-        padStart: LodashPadStart;
-        parseInt: LodashParseInt;
-        partial: LodashPartial;
-        partialRight: LodashPartialRight;
-        partition: LodashPartition;
-        path: LodashPath;
-        pathEq: LodashMatchesProperty;
-        pathOr: LodashPathOr;
-        paths: LodashAt;
-        pick: LodashPick;
-        pickAll: LodashPick;
-        pickBy: LodashPickBy;
-        pipe: LodashFlow;
-        pluck: LodashMap;
-        prop: LodashProp;
-        propEq: LodashMatchesProperty;
-        property: LodashProperty;
-        propertyOf: LodashPropertyOf;
-        propOr: LodashPropOr;
-        props: LodashAt;
-        pull: LodashPull;
-        pullAll: LodashPullAll;
-        pullAllBy: LodashPullAllBy;
-        pullAllWith: LodashPullAllWith;
-        pullAt: LodashPullAt;
-        random: LodashRandom;
-        range: LodashRange;
-        rangeRight: LodashRangeRight;
-        rangeStep: LodashRangeStep;
-        rangeStepRight: LodashRangeStepRight;
-        rearg: LodashRearg;
-        reduce: LodashReduce;
-        reduceRight: LodashReduceRight;
-        reject: LodashReject;
-        remove: LodashRemove;
-        repeat: LodashRepeat;
-        replace: LodashReplace;
-        rest: LodashRest;
-        restFrom: LodashRestFrom;
-        result: LodashResult;
-        reverse: LodashReverse;
-        round: LodashRound;
-        runInContext: LodashRunInContext;
-        sample: LodashSample;
-        sampleSize: LodashSampleSize;
-        set: LodashSet;
-        setWith: LodashSetWith;
-        shuffle: LodashShuffle;
-        size: LodashSize;
-        slice: LodashSlice;
-        snakeCase: LodashSnakeCase;
-        some: LodashSome;
-        sortBy: LodashSortBy;
-        sortedIndex: LodashSortedIndex;
-        sortedIndexBy: LodashSortedIndexBy;
-        sortedIndexOf: LodashSortedIndexOf;
-        sortedLastIndex: LodashSortedLastIndex;
-        sortedLastIndexBy: LodashSortedLastIndexBy;
-        sortedLastIndexOf: LodashSortedLastIndexOf;
-        sortedUniq: LodashSortedUniq;
-        sortedUniqBy: LodashSortedUniqBy;
-        split: LodashSplit;
-        spread: LodashSpread;
-        spreadFrom: LodashSpreadFrom;
-        startCase: LodashStartCase;
-        startsWith: LodashStartsWith;
-        stubArray: LodashStubArray;
-        stubFalse: LodashStubFalse;
-        stubObject: LodashStubObject;
-        stubString: LodashStubString;
-        stubTrue: LodashStubTrue;
-        subtract: LodashSubtract;
-        sum: LodashSum;
-        sumBy: LodashSumBy;
-        symmetricDifference: LodashXor;
-        symmetricDifferenceBy: LodashXorBy;
-        symmetricDifferenceWith: LodashXorWith;
-        T: LodashStubTrue;
-        tail: LodashTail;
-        take: LodashTake;
-        takeLast: LodashTakeRight;
-        takeLastWhile: LodashTakeRightWhile;
-        takeRight: LodashTakeRight;
-        takeRightWhile: LodashTakeRightWhile;
-        takeWhile: LodashTakeWhile;
-        tap: LodashTap;
-        template: LodashTemplate;
-        throttle: LodashThrottle;
-        thru: LodashThru;
-        times: LodashTimes;
-        toArray: LodashToArray;
-        toFinite: LodashToFinite;
-        toInteger: LodashToInteger;
-        toLength: LodashToLength;
-        toLower: LodashToLower;
-        toNumber: LodashToNumber;
-        toPairs: LodashToPairs;
-        toPairsIn: LodashToPairsIn;
-        toPath: LodashToPath;
-        toPlainObject: LodashToPlainObject;
-        toSafeInteger: LodashToSafeInteger;
-        toString: LodashToString;
-        toUpper: LodashToUpper;
-        transform: LodashTransform;
-        trim: LodashTrim;
-        trimChars: LodashTrimChars;
-        trimCharsEnd: LodashTrimCharsEnd;
-        trimCharsStart: LodashTrimCharsStart;
-        trimEnd: LodashTrimEnd;
-        trimStart: LodashTrimStart;
-        truncate: LodashTruncate;
-        unapply: LodashUnapply;
-        unary: LodashUnary;
-        unescape: LodashUnescape;
-        union: LodashUnion;
-        unionBy: LodashUnionBy;
-        unionWith: LodashUnionWith;
-        uniq: LodashUniq;
-        uniqBy: LodashUniqBy;
-        uniqueId: LodashUniqueId;
-        uniqWith: LodashUniqWith;
-        unnest: LodashFlatten;
-        unset: LodashUnset;
-        unzip: LodashUnzip;
-        unzipWith: LodashUnzipWith;
-        update: LodashUpdate;
-        updateWith: LodashUpdateWith;
-        upperCase: LodashUpperCase;
-        upperFirst: LodashUpperFirst;
-        useWith: LodashOverArgs;
-        values: LodashValues;
-        valuesIn: LodashValuesIn;
-        where: LodashConformsTo;
-        whereEq: LodashIsMatch;
-        without: LodashWithout;
-        words: LodashWords;
-        wrap: LodashWrap;
-        xor: LodashXor;
-        xorBy: LodashXorBy;
-        xorWith: LodashXorWith;
-        zip: LodashZip;
-        zipAll: LodashZipAll;
-        zipObj: LodashZipObject;
-        zipObject: LodashZipObject;
-        zipObjectDeep: LodashZipObjectDeep;
-        zipWith: LodashZipWith;
-        __: lodash.__;
-        placeholder: lodash.__;
-    }
-}
diff --git a/jtg js/node_modules/@types/lodash/fp/F.d.ts b/jtg js/node_modules/@types/lodash/fp/F.d.ts
deleted file mode 100644
index 33fc57930d8e2581d594e66394b3ac1157cb3f1e..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/F.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { F } from "../fp";
-export = F;
diff --git a/jtg js/node_modules/@types/lodash/fp/T.d.ts b/jtg js/node_modules/@types/lodash/fp/T.d.ts
deleted file mode 100644
index 886606ef6fcaa4618ad36886009c74a01c31d2d9..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/T.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { T } from "../fp";
-export = T;
diff --git a/jtg js/node_modules/@types/lodash/fp/__.d.ts b/jtg js/node_modules/@types/lodash/fp/__.d.ts
deleted file mode 100644
index aec0a514221fa580cbe226a335e2122424d764f9..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/__.d.ts	
+++ /dev/null
@@ -1,3 +0,0 @@
-import _ = require("../index");
-declare const __: _.__;
-export = __;
diff --git a/jtg js/node_modules/@types/lodash/fp/add.d.ts b/jtg js/node_modules/@types/lodash/fp/add.d.ts
deleted file mode 100644
index 47c9c6a1a4b75e10a708b3f91ae88171abacae33..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/add.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { add } from "../fp";
-export = add;
diff --git a/jtg js/node_modules/@types/lodash/fp/after.d.ts b/jtg js/node_modules/@types/lodash/fp/after.d.ts
deleted file mode 100644
index 93863a5613802fdc8f22e93675bd258120c54968..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/after.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { after } from "../fp";
-export = after;
diff --git a/jtg js/node_modules/@types/lodash/fp/all.d.ts b/jtg js/node_modules/@types/lodash/fp/all.d.ts
deleted file mode 100644
index 5ca0f707360767c43d1b2df94ae32bcc0e20ecee..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/all.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { all } from "../fp";
-export = all;
diff --git a/jtg js/node_modules/@types/lodash/fp/allPass.d.ts b/jtg js/node_modules/@types/lodash/fp/allPass.d.ts
deleted file mode 100644
index 5013913efc9545dd0b732c650966460b72d61f02..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/allPass.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { allPass } from "../fp";
-export = allPass;
diff --git a/jtg js/node_modules/@types/lodash/fp/always.d.ts b/jtg js/node_modules/@types/lodash/fp/always.d.ts
deleted file mode 100644
index 07bd82d47c50dbd3fa6c858c9591f98d05a8b454..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/always.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { always } from "../fp";
-export = always;
diff --git a/jtg js/node_modules/@types/lodash/fp/any.d.ts b/jtg js/node_modules/@types/lodash/fp/any.d.ts
deleted file mode 100644
index 5d8c38f27c63cd4d34599dbfa76100d7d6be6bb4..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/any.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { any } from "../fp";
-export = any;
diff --git a/jtg js/node_modules/@types/lodash/fp/anyPass.d.ts b/jtg js/node_modules/@types/lodash/fp/anyPass.d.ts
deleted file mode 100644
index b69becfaf381d362be8335da5e6f5c5626575f8a..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/anyPass.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { anyPass } from "../fp";
-export = anyPass;
diff --git a/jtg js/node_modules/@types/lodash/fp/apply.d.ts b/jtg js/node_modules/@types/lodash/fp/apply.d.ts
deleted file mode 100644
index e13c42c5debd088f75a45bc4cb1e34f74d3a3747..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/apply.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { apply } from "../fp";
-export = apply;
diff --git a/jtg js/node_modules/@types/lodash/fp/ary.d.ts b/jtg js/node_modules/@types/lodash/fp/ary.d.ts
deleted file mode 100644
index 932d7f45f3e00e680cd096cf41527bb46ca1e245..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/ary.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { ary } from "../fp";
-export = ary;
diff --git a/jtg js/node_modules/@types/lodash/fp/assign.d.ts b/jtg js/node_modules/@types/lodash/fp/assign.d.ts
deleted file mode 100644
index cf173104ab294cd7416898f5b1e189ee64b32403..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/assign.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { assign } from "../fp";
-export = assign;
diff --git a/jtg js/node_modules/@types/lodash/fp/assignAll.d.ts b/jtg js/node_modules/@types/lodash/fp/assignAll.d.ts
deleted file mode 100644
index f95b06b4755baa52de21c65ac42dbe1b2805b9c6..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/assignAll.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { assignAll } from "../fp";
-export = assignAll;
diff --git a/jtg js/node_modules/@types/lodash/fp/assignAllWith.d.ts b/jtg js/node_modules/@types/lodash/fp/assignAllWith.d.ts
deleted file mode 100644
index c2695a07a6da41eada4c1454163b7825bbfe3852..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/assignAllWith.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { assignAllWith } from "../fp";
-export = assignAllWith;
diff --git a/jtg js/node_modules/@types/lodash/fp/assignIn.d.ts b/jtg js/node_modules/@types/lodash/fp/assignIn.d.ts
deleted file mode 100644
index f6cdee768b386ee697b75c4ce72c23547493ec03..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/assignIn.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { assignIn } from "../fp";
-export = assignIn;
diff --git a/jtg js/node_modules/@types/lodash/fp/assignInAll.d.ts b/jtg js/node_modules/@types/lodash/fp/assignInAll.d.ts
deleted file mode 100644
index 539344b67b455e8c7a48270e2de129674b88b964..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/assignInAll.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { assignInAll } from "../fp";
-export = assignInAll;
diff --git a/jtg js/node_modules/@types/lodash/fp/assignInAllWith.d.ts b/jtg js/node_modules/@types/lodash/fp/assignInAllWith.d.ts
deleted file mode 100644
index 3b421fb33234cb832f524665a3f9062c492a79cf..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/assignInAllWith.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { assignInAllWith } from "../fp";
-export = assignInAllWith;
diff --git a/jtg js/node_modules/@types/lodash/fp/assignInWith.d.ts b/jtg js/node_modules/@types/lodash/fp/assignInWith.d.ts
deleted file mode 100644
index c410091c62aa2d748e721eb5c2986c65b8a7fe22..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/assignInWith.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { assignInWith } from "../fp";
-export = assignInWith;
diff --git a/jtg js/node_modules/@types/lodash/fp/assignWith.d.ts b/jtg js/node_modules/@types/lodash/fp/assignWith.d.ts
deleted file mode 100644
index 2205db0119c043799db35b54df6a7b0f25eb642a..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/assignWith.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { assignWith } from "../fp";
-export = assignWith;
diff --git a/jtg js/node_modules/@types/lodash/fp/assoc.d.ts b/jtg js/node_modules/@types/lodash/fp/assoc.d.ts
deleted file mode 100644
index 2a2e29c6f0aaed0fdcedc78a1d7b5a865426b515..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/assoc.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { assoc } from "../fp";
-export = assoc;
diff --git a/jtg js/node_modules/@types/lodash/fp/assocPath.d.ts b/jtg js/node_modules/@types/lodash/fp/assocPath.d.ts
deleted file mode 100644
index e2dd5179e395e8212b1e9ad554abb77f8c6843c7..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/assocPath.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { assocPath } from "../fp";
-export = assocPath;
diff --git a/jtg js/node_modules/@types/lodash/fp/at.d.ts b/jtg js/node_modules/@types/lodash/fp/at.d.ts
deleted file mode 100644
index beefa3343bec86b0efd2fe659ed8d2cfb685f5d8..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/at.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { at } from "../fp";
-export = at;
diff --git a/jtg js/node_modules/@types/lodash/fp/attempt.d.ts b/jtg js/node_modules/@types/lodash/fp/attempt.d.ts
deleted file mode 100644
index 72d60af08f63221e7bf42bd03c4b497690b249bb..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/attempt.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { attempt } from "../fp";
-export = attempt;
diff --git a/jtg js/node_modules/@types/lodash/fp/before.d.ts b/jtg js/node_modules/@types/lodash/fp/before.d.ts
deleted file mode 100644
index ead286909399c3722c5d54c5eb49fdf19a1f30c9..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/before.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { before } from "../fp";
-export = before;
diff --git a/jtg js/node_modules/@types/lodash/fp/bind.d.ts b/jtg js/node_modules/@types/lodash/fp/bind.d.ts
deleted file mode 100644
index a312192a31ad09309abe5bfa54fcce1b7c8a02e9..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/bind.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { bind } from "../fp";
-export = bind;
diff --git a/jtg js/node_modules/@types/lodash/fp/bindAll.d.ts b/jtg js/node_modules/@types/lodash/fp/bindAll.d.ts
deleted file mode 100644
index 4f7c7dbffcf4ebb2c4af4b9ca2712231b5c20304..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/bindAll.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { bindAll } from "../fp";
-export = bindAll;
diff --git a/jtg js/node_modules/@types/lodash/fp/bindKey.d.ts b/jtg js/node_modules/@types/lodash/fp/bindKey.d.ts
deleted file mode 100644
index 8986b2f3a5b8da2152357a73486496e1c7cf1c47..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/bindKey.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { bindKey } from "../fp";
-export = bindKey;
diff --git a/jtg js/node_modules/@types/lodash/fp/camelCase.d.ts b/jtg js/node_modules/@types/lodash/fp/camelCase.d.ts
deleted file mode 100644
index be6628dd27d0ae83f3e19585e9edb3e2d745a71d..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/camelCase.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { camelCase } from "../fp";
-export = camelCase;
diff --git a/jtg js/node_modules/@types/lodash/fp/capitalize.d.ts b/jtg js/node_modules/@types/lodash/fp/capitalize.d.ts
deleted file mode 100644
index 7dc552f9e4f29e6a483e0ed152b178a21b331442..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/capitalize.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { capitalize } from "../fp";
-export = capitalize;
diff --git a/jtg js/node_modules/@types/lodash/fp/castArray.d.ts b/jtg js/node_modules/@types/lodash/fp/castArray.d.ts
deleted file mode 100644
index a431805adf9ca1eb7c2f5fed57dfc28e08c824fd..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/castArray.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { castArray } from "../fp";
-export = castArray;
diff --git a/jtg js/node_modules/@types/lodash/fp/ceil.d.ts b/jtg js/node_modules/@types/lodash/fp/ceil.d.ts
deleted file mode 100644
index 13cd7317b162b502fb44e4cdad74a5324624d4c1..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/ceil.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { ceil } from "../fp";
-export = ceil;
diff --git a/jtg js/node_modules/@types/lodash/fp/chunk.d.ts b/jtg js/node_modules/@types/lodash/fp/chunk.d.ts
deleted file mode 100644
index 2e4066660bd9ac4364696379f739836067338900..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/chunk.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { chunk } from "../fp";
-export = chunk;
diff --git a/jtg js/node_modules/@types/lodash/fp/clamp.d.ts b/jtg js/node_modules/@types/lodash/fp/clamp.d.ts
deleted file mode 100644
index 121c6f9b9c64669cd3559d46362d52a32e75f3e6..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/clamp.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { clamp } from "../fp";
-export = clamp;
diff --git a/jtg js/node_modules/@types/lodash/fp/clone.d.ts b/jtg js/node_modules/@types/lodash/fp/clone.d.ts
deleted file mode 100644
index 9edf0c8d134369974088401768cb2afa9b30b54f..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/clone.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { clone } from "../fp";
-export = clone;
diff --git a/jtg js/node_modules/@types/lodash/fp/cloneDeep.d.ts b/jtg js/node_modules/@types/lodash/fp/cloneDeep.d.ts
deleted file mode 100644
index 3bdab159acd1d4e1754ca31a53e00888fddb7a32..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/cloneDeep.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { cloneDeep } from "../fp";
-export = cloneDeep;
diff --git a/jtg js/node_modules/@types/lodash/fp/cloneDeepWith.d.ts b/jtg js/node_modules/@types/lodash/fp/cloneDeepWith.d.ts
deleted file mode 100644
index 57cf5af8bddae59d6dd0acfd08b33015cfc1de75..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/cloneDeepWith.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { cloneDeepWith } from "../fp";
-export = cloneDeepWith;
diff --git a/jtg js/node_modules/@types/lodash/fp/cloneWith.d.ts b/jtg js/node_modules/@types/lodash/fp/cloneWith.d.ts
deleted file mode 100644
index 9c63e136934a2ab9a8f9dfca9826593db281008e..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/cloneWith.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { cloneWith } from "../fp";
-export = cloneWith;
diff --git a/jtg js/node_modules/@types/lodash/fp/compact.d.ts b/jtg js/node_modules/@types/lodash/fp/compact.d.ts
deleted file mode 100644
index 6ca1547040986053d864cbe86aa7d1154c83b4d7..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/compact.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { compact } from "../fp";
-export = compact;
diff --git a/jtg js/node_modules/@types/lodash/fp/complement.d.ts b/jtg js/node_modules/@types/lodash/fp/complement.d.ts
deleted file mode 100644
index e4c31125346dd540739329c2e75d33dccf90b4c0..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/complement.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { complement } from "../fp";
-export = complement;
diff --git a/jtg js/node_modules/@types/lodash/fp/compose.d.ts b/jtg js/node_modules/@types/lodash/fp/compose.d.ts
deleted file mode 100644
index 7950c7c585ab124738c9e7be48d4afbb8a8fb331..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/compose.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { compose } from "../fp";
-export = compose;
diff --git a/jtg js/node_modules/@types/lodash/fp/concat.d.ts b/jtg js/node_modules/@types/lodash/fp/concat.d.ts
deleted file mode 100644
index 5e109d1daad524904b8e61f3796d3c60831e06d0..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/concat.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { concat } from "../fp";
-export = concat;
diff --git a/jtg js/node_modules/@types/lodash/fp/cond.d.ts b/jtg js/node_modules/@types/lodash/fp/cond.d.ts
deleted file mode 100644
index b9216e308f22255a2b239ab96abe19b846727be9..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/cond.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { cond } from "../fp";
-export = cond;
diff --git a/jtg js/node_modules/@types/lodash/fp/conforms.d.ts b/jtg js/node_modules/@types/lodash/fp/conforms.d.ts
deleted file mode 100644
index 9bd3353f4486f438e63f5298ce6e014872997475..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/conforms.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { conforms } from "../fp";
-export = conforms;
diff --git a/jtg js/node_modules/@types/lodash/fp/conformsTo.d.ts b/jtg js/node_modules/@types/lodash/fp/conformsTo.d.ts
deleted file mode 100644
index ad1728006dddd8cc62ab4083077e23afdfb0baf6..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/conformsTo.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { conformsTo } from "../fp";
-export = conformsTo;
diff --git a/jtg js/node_modules/@types/lodash/fp/constant.d.ts b/jtg js/node_modules/@types/lodash/fp/constant.d.ts
deleted file mode 100644
index ef80ff57c3a09e672a5b03c372ed6717bd3ade85..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/constant.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { constant } from "../fp";
-export = constant;
diff --git a/jtg js/node_modules/@types/lodash/fp/contains.d.ts b/jtg js/node_modules/@types/lodash/fp/contains.d.ts
deleted file mode 100644
index 6c29e95f1a95b3039b3757bec552c6f3fbd8d66a..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/contains.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { contains } from "../fp";
-export = contains;
diff --git a/jtg js/node_modules/@types/lodash/fp/convert.d.ts b/jtg js/node_modules/@types/lodash/fp/convert.d.ts
deleted file mode 100644
index c06ecd9370040033a305e93120095903b9c32927..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/convert.d.ts	
+++ /dev/null
@@ -1,15 +0,0 @@
-interface ConvertOptions {
-    cap?: boolean;
-    curry?: boolean;
-    fixed?: boolean;
-    immutable?: boolean;
-    rearg?: boolean;
-}
-
-interface Convert {
-    (func: object, options?: ConvertOptions): any;
-    (name: string, func: (...args: any[]) => any, options?: ConvertOptions): any;
-}
-
-declare const convert: Convert;
-export = convert;
diff --git a/jtg js/node_modules/@types/lodash/fp/countBy.d.ts b/jtg js/node_modules/@types/lodash/fp/countBy.d.ts
deleted file mode 100644
index e3725c35215a4d1cfb3eb4e9b35a7d74089e31fb..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/countBy.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { countBy } from "../fp";
-export = countBy;
diff --git a/jtg js/node_modules/@types/lodash/fp/create.d.ts b/jtg js/node_modules/@types/lodash/fp/create.d.ts
deleted file mode 100644
index 2818e10e8db19f84ab3eb929c483c2fe8680faf6..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/create.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { create } from "../fp";
-export = create;
diff --git a/jtg js/node_modules/@types/lodash/fp/curry.d.ts b/jtg js/node_modules/@types/lodash/fp/curry.d.ts
deleted file mode 100644
index e8fcf1ded7dbf27d26ea58ef4d9911e6530c0a59..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/curry.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { curry } from "../fp";
-export = curry;
diff --git a/jtg js/node_modules/@types/lodash/fp/curryN.d.ts b/jtg js/node_modules/@types/lodash/fp/curryN.d.ts
deleted file mode 100644
index 55b579b716f578424f45178510cf33617c118aac..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/curryN.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { curryN } from "../fp";
-export = curryN;
diff --git a/jtg js/node_modules/@types/lodash/fp/curryRight.d.ts b/jtg js/node_modules/@types/lodash/fp/curryRight.d.ts
deleted file mode 100644
index d431f3c673de0fab7b3a931029d97939588ff9af..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/curryRight.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { curryRight } from "../fp";
-export = curryRight;
diff --git a/jtg js/node_modules/@types/lodash/fp/curryRightN.d.ts b/jtg js/node_modules/@types/lodash/fp/curryRightN.d.ts
deleted file mode 100644
index 89866d16ae32d09580be0ac13717d40b53dc296e..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/curryRightN.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { curryRightN } from "../fp";
-export = curryRightN;
diff --git a/jtg js/node_modules/@types/lodash/fp/debounce.d.ts b/jtg js/node_modules/@types/lodash/fp/debounce.d.ts
deleted file mode 100644
index 88b003cbb01937b15d43fdc81daf577f6359ee11..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/debounce.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { debounce } from "../fp";
-export = debounce;
diff --git a/jtg js/node_modules/@types/lodash/fp/deburr.d.ts b/jtg js/node_modules/@types/lodash/fp/deburr.d.ts
deleted file mode 100644
index 769abfb50449a40c0c17ba41c31b671cf57327e2..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/deburr.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { deburr } from "../fp";
-export = deburr;
diff --git a/jtg js/node_modules/@types/lodash/fp/defaultTo.d.ts b/jtg js/node_modules/@types/lodash/fp/defaultTo.d.ts
deleted file mode 100644
index e02cc46fed0c4b28302a918805a4c2ae2bd1f086..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/defaultTo.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { defaultTo } from "../fp";
-export = defaultTo;
diff --git a/jtg js/node_modules/@types/lodash/fp/defaults.d.ts b/jtg js/node_modules/@types/lodash/fp/defaults.d.ts
deleted file mode 100644
index 132e47ba2ed727f40d2c04c08c29eb137f2d15a0..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/defaults.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { defaults } from "../fp";
-export = defaults;
diff --git a/jtg js/node_modules/@types/lodash/fp/defaultsAll.d.ts b/jtg js/node_modules/@types/lodash/fp/defaultsAll.d.ts
deleted file mode 100644
index 1f2a3309e7c207b1b18607bb1d1f26deeba4c24e..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/defaultsAll.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { defaultsAll } from "../fp";
-export = defaultsAll;
diff --git a/jtg js/node_modules/@types/lodash/fp/defaultsDeep.d.ts b/jtg js/node_modules/@types/lodash/fp/defaultsDeep.d.ts
deleted file mode 100644
index 6268a0259479a7d6c59e7f2b8153f8481ee809c5..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/defaultsDeep.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { defaultsDeep } from "../fp";
-export = defaultsDeep;
diff --git a/jtg js/node_modules/@types/lodash/fp/defaultsDeepAll.d.ts b/jtg js/node_modules/@types/lodash/fp/defaultsDeepAll.d.ts
deleted file mode 100644
index 7791666232c69154cb8bf5573e01f58dcd52112c..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/defaultsDeepAll.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { defaultsDeepAll } from "../fp";
-export = defaultsDeepAll;
diff --git a/jtg js/node_modules/@types/lodash/fp/defer.d.ts b/jtg js/node_modules/@types/lodash/fp/defer.d.ts
deleted file mode 100644
index f8be4ae8e226818eccdd958aa2613ead2247bd61..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/defer.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { defer } from "../fp";
-export = defer;
diff --git a/jtg js/node_modules/@types/lodash/fp/delay.d.ts b/jtg js/node_modules/@types/lodash/fp/delay.d.ts
deleted file mode 100644
index 2f0c39909f622cd670d563aa7768a8cc028a617e..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/delay.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { delay } from "../fp";
-export = delay;
diff --git a/jtg js/node_modules/@types/lodash/fp/difference.d.ts b/jtg js/node_modules/@types/lodash/fp/difference.d.ts
deleted file mode 100644
index 944808504109cb0c54eeb9a05c6faae1bd4dc52f..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/difference.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { difference } from "../fp";
-export = difference;
diff --git a/jtg js/node_modules/@types/lodash/fp/differenceBy.d.ts b/jtg js/node_modules/@types/lodash/fp/differenceBy.d.ts
deleted file mode 100644
index 52ba5b80ac58ff49039ef7d6ad01878ab5812a30..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/differenceBy.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { differenceBy } from "../fp";
-export = differenceBy;
diff --git a/jtg js/node_modules/@types/lodash/fp/differenceWith.d.ts b/jtg js/node_modules/@types/lodash/fp/differenceWith.d.ts
deleted file mode 100644
index fd3c9a2cd43e93b0cd519107c89d568460f7b76a..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/differenceWith.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { differenceWith } from "../fp";
-export = differenceWith;
diff --git a/jtg js/node_modules/@types/lodash/fp/dissoc.d.ts b/jtg js/node_modules/@types/lodash/fp/dissoc.d.ts
deleted file mode 100644
index 9b0fd6bb90632ef1607f677f73793b9def43bc40..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/dissoc.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { dissoc } from "../fp";
-export = dissoc;
diff --git a/jtg js/node_modules/@types/lodash/fp/dissocPath.d.ts b/jtg js/node_modules/@types/lodash/fp/dissocPath.d.ts
deleted file mode 100644
index a201aa4b881a06eb6e8e25bf392a504fbc3fa366..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/dissocPath.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { dissocPath } from "../fp";
-export = dissocPath;
diff --git a/jtg js/node_modules/@types/lodash/fp/divide.d.ts b/jtg js/node_modules/@types/lodash/fp/divide.d.ts
deleted file mode 100644
index 5cd02e49dcc6a3bfa016c9f3cad38a8b87d3eea5..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/divide.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { divide } from "../fp";
-export = divide;
diff --git a/jtg js/node_modules/@types/lodash/fp/drop.d.ts b/jtg js/node_modules/@types/lodash/fp/drop.d.ts
deleted file mode 100644
index bc3b9b20490c15adc2ec0855ae65ae081c1f1d11..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/drop.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { drop } from "../fp";
-export = drop;
diff --git a/jtg js/node_modules/@types/lodash/fp/dropLast.d.ts b/jtg js/node_modules/@types/lodash/fp/dropLast.d.ts
deleted file mode 100644
index 1dd388ae15a6991709a7f0264d5c92eaadb56ff5..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/dropLast.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { dropLast } from "../fp";
-export = dropLast;
diff --git a/jtg js/node_modules/@types/lodash/fp/dropLastWhile.d.ts b/jtg js/node_modules/@types/lodash/fp/dropLastWhile.d.ts
deleted file mode 100644
index 97529a6a498e8ba5fab983d19450a07ed185e0eb..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/dropLastWhile.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { dropLastWhile } from "../fp";
-export = dropLastWhile;
diff --git a/jtg js/node_modules/@types/lodash/fp/dropRight.d.ts b/jtg js/node_modules/@types/lodash/fp/dropRight.d.ts
deleted file mode 100644
index a2740ff0290c293ca76dbf5843d9893b0d67b6a7..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/dropRight.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { dropRight } from "../fp";
-export = dropRight;
diff --git a/jtg js/node_modules/@types/lodash/fp/dropRightWhile.d.ts b/jtg js/node_modules/@types/lodash/fp/dropRightWhile.d.ts
deleted file mode 100644
index 1a5aa5fe3e64d7cc89048b8e800d43d4c412e8d3..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/dropRightWhile.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { dropRightWhile } from "../fp";
-export = dropRightWhile;
diff --git a/jtg js/node_modules/@types/lodash/fp/dropWhile.d.ts b/jtg js/node_modules/@types/lodash/fp/dropWhile.d.ts
deleted file mode 100644
index 2cab8d8698fe62de0caf5f01ba48fe7387ea7dd1..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/dropWhile.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { dropWhile } from "../fp";
-export = dropWhile;
diff --git a/jtg js/node_modules/@types/lodash/fp/each.d.ts b/jtg js/node_modules/@types/lodash/fp/each.d.ts
deleted file mode 100644
index af1d3b20a69ce72ab9c8d11447471b8aa4a2c799..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/each.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { each } from "../fp";
-export = each;
diff --git a/jtg js/node_modules/@types/lodash/fp/eachRight.d.ts b/jtg js/node_modules/@types/lodash/fp/eachRight.d.ts
deleted file mode 100644
index 5ca2934abd6e0b0212b857692de39ef23ad43e57..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/eachRight.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { eachRight } from "../fp";
-export = eachRight;
diff --git a/jtg js/node_modules/@types/lodash/fp/endsWith.d.ts b/jtg js/node_modules/@types/lodash/fp/endsWith.d.ts
deleted file mode 100644
index 7e1b243d6f6e2216ade43066d497f4c10b58ce77..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/endsWith.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { endsWith } from "../fp";
-export = endsWith;
diff --git a/jtg js/node_modules/@types/lodash/fp/entries.d.ts b/jtg js/node_modules/@types/lodash/fp/entries.d.ts
deleted file mode 100644
index 534c7bda3dc08c6c8f227e7bc6ce362f2a6e3b7a..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/entries.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { entries } from "../fp";
-export = entries;
diff --git a/jtg js/node_modules/@types/lodash/fp/entriesIn.d.ts b/jtg js/node_modules/@types/lodash/fp/entriesIn.d.ts
deleted file mode 100644
index 932b17f625882930d7ee16f0cc65111b74ca10d2..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/entriesIn.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { entriesIn } from "../fp";
-export = entriesIn;
diff --git a/jtg js/node_modules/@types/lodash/fp/eq.d.ts b/jtg js/node_modules/@types/lodash/fp/eq.d.ts
deleted file mode 100644
index 4778846a303681817dcf789ae092768230a2f7e4..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/eq.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { eq } from "../fp";
-export = eq;
diff --git a/jtg js/node_modules/@types/lodash/fp/equals.d.ts b/jtg js/node_modules/@types/lodash/fp/equals.d.ts
deleted file mode 100644
index 18ec108d66a892a8a34efa81f131303dee5a93b7..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/equals.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { equals } from "../fp";
-export = equals;
diff --git a/jtg js/node_modules/@types/lodash/fp/escape.d.ts b/jtg js/node_modules/@types/lodash/fp/escape.d.ts
deleted file mode 100644
index 36e7e87556dfe0751e45099cea202326f43f9adf..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/escape.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { escape } from "../fp";
-export = escape;
diff --git a/jtg js/node_modules/@types/lodash/fp/escapeRegExp.d.ts b/jtg js/node_modules/@types/lodash/fp/escapeRegExp.d.ts
deleted file mode 100644
index 6adc20e8069f4bf9bcb6d31b7d6e7ef2eee73bf2..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/escapeRegExp.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { escapeRegExp } from "../fp";
-export = escapeRegExp;
diff --git a/jtg js/node_modules/@types/lodash/fp/every.d.ts b/jtg js/node_modules/@types/lodash/fp/every.d.ts
deleted file mode 100644
index 7fbeaf7b150f3c3388e1470ca652428fbd156c62..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/every.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { every } from "../fp";
-export = every;
diff --git a/jtg js/node_modules/@types/lodash/fp/extend.d.ts b/jtg js/node_modules/@types/lodash/fp/extend.d.ts
deleted file mode 100644
index cbe294ee0be11928bbb63f432e0676c4cd248c20..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/extend.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { extend } from "../fp";
-export = extend;
diff --git a/jtg js/node_modules/@types/lodash/fp/extendAll.d.ts b/jtg js/node_modules/@types/lodash/fp/extendAll.d.ts
deleted file mode 100644
index 92cb3d6e0c10e0a89d9dd3bc7f7e07d8619be451..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/extendAll.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { extendAll } from "../fp";
-export = extendAll;
diff --git a/jtg js/node_modules/@types/lodash/fp/extendAllWith.d.ts b/jtg js/node_modules/@types/lodash/fp/extendAllWith.d.ts
deleted file mode 100644
index 712d1d8eea55277c89f4c1551fa3a6d606351d53..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/extendAllWith.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { extendAllWith } from "../fp";
-export = extendAllWith;
diff --git a/jtg js/node_modules/@types/lodash/fp/extendWith.d.ts b/jtg js/node_modules/@types/lodash/fp/extendWith.d.ts
deleted file mode 100644
index 9681360bbf9c589c330f7d177bded1ab08a06f61..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/extendWith.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { extendWith } from "../fp";
-export = extendWith;
diff --git a/jtg js/node_modules/@types/lodash/fp/fill.d.ts b/jtg js/node_modules/@types/lodash/fp/fill.d.ts
deleted file mode 100644
index 577801504df52cd22c11e6fdb82bbd699df62184..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/fill.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { fill } from "../fp";
-export = fill;
diff --git a/jtg js/node_modules/@types/lodash/fp/filter.d.ts b/jtg js/node_modules/@types/lodash/fp/filter.d.ts
deleted file mode 100644
index 8619741343d773aeca46443d786cdd24a43e4d6a..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/filter.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { filter } from "../fp";
-export = filter;
diff --git a/jtg js/node_modules/@types/lodash/fp/find.d.ts b/jtg js/node_modules/@types/lodash/fp/find.d.ts
deleted file mode 100644
index 06418fb4563088d743e22fc0a5edfa735a5ccf2f..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/find.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { find } from "../fp";
-export = find;
diff --git a/jtg js/node_modules/@types/lodash/fp/findFrom.d.ts b/jtg js/node_modules/@types/lodash/fp/findFrom.d.ts
deleted file mode 100644
index 64275d0c8391c003054c6412ddd96116fac09435..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/findFrom.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { findFrom } from "../fp";
-export = findFrom;
diff --git a/jtg js/node_modules/@types/lodash/fp/findIndex.d.ts b/jtg js/node_modules/@types/lodash/fp/findIndex.d.ts
deleted file mode 100644
index 77d1f7b6be95a8ba8ae0bbe3c4712777090b9078..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/findIndex.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { findIndex } from "../fp";
-export = findIndex;
diff --git a/jtg js/node_modules/@types/lodash/fp/findIndexFrom.d.ts b/jtg js/node_modules/@types/lodash/fp/findIndexFrom.d.ts
deleted file mode 100644
index 22330adc539f133f348cea6041271daf712967f4..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/findIndexFrom.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { findIndexFrom } from "../fp";
-export = findIndexFrom;
diff --git a/jtg js/node_modules/@types/lodash/fp/findKey.d.ts b/jtg js/node_modules/@types/lodash/fp/findKey.d.ts
deleted file mode 100644
index c5a225a776115fc31880331f32b6182376790f81..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/findKey.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { findKey } from "../fp";
-export = findKey;
diff --git a/jtg js/node_modules/@types/lodash/fp/findLast.d.ts b/jtg js/node_modules/@types/lodash/fp/findLast.d.ts
deleted file mode 100644
index b400c946b0581dd8f5992e0d1882f434b862780d..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/findLast.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { findLast } from "../fp";
-export = findLast;
diff --git a/jtg js/node_modules/@types/lodash/fp/findLastFrom.d.ts b/jtg js/node_modules/@types/lodash/fp/findLastFrom.d.ts
deleted file mode 100644
index 1f034dfa887b15402f816205ef64fc38c7344c66..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/findLastFrom.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { findLastFrom } from "../fp";
-export = findLastFrom;
diff --git a/jtg js/node_modules/@types/lodash/fp/findLastIndex.d.ts b/jtg js/node_modules/@types/lodash/fp/findLastIndex.d.ts
deleted file mode 100644
index 51ee410fb12c6b62b26cea455be1a7b3b0a40946..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/findLastIndex.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { findLastIndex } from "../fp";
-export = findLastIndex;
diff --git a/jtg js/node_modules/@types/lodash/fp/findLastIndexFrom.d.ts b/jtg js/node_modules/@types/lodash/fp/findLastIndexFrom.d.ts
deleted file mode 100644
index 08bd53a087e1553bcd0f2fb03db7170f13ed12a7..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/findLastIndexFrom.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { findLastIndexFrom } from "../fp";
-export = findLastIndexFrom;
diff --git a/jtg js/node_modules/@types/lodash/fp/findLastKey.d.ts b/jtg js/node_modules/@types/lodash/fp/findLastKey.d.ts
deleted file mode 100644
index 7437a9dddacefab4b6d8823f16131aec5447b5d7..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/findLastKey.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { findLastKey } from "../fp";
-export = findLastKey;
diff --git a/jtg js/node_modules/@types/lodash/fp/first.d.ts b/jtg js/node_modules/@types/lodash/fp/first.d.ts
deleted file mode 100644
index 4554ad0e92328560142e638641d1798fecf55473..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/first.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { first } from "../fp";
-export = first;
diff --git a/jtg js/node_modules/@types/lodash/fp/flatMap.d.ts b/jtg js/node_modules/@types/lodash/fp/flatMap.d.ts
deleted file mode 100644
index eb6d80434f38e458aa1b03b071a2a2d2e5935e3d..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/flatMap.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { flatMap } from "../fp";
-export = flatMap;
diff --git a/jtg js/node_modules/@types/lodash/fp/flatMapDeep.d.ts b/jtg js/node_modules/@types/lodash/fp/flatMapDeep.d.ts
deleted file mode 100644
index 0ce4db48012c6dd076a3e7efd70e2bb8449889d8..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/flatMapDeep.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { flatMapDeep } from "../fp";
-export = flatMapDeep;
diff --git a/jtg js/node_modules/@types/lodash/fp/flatMapDepth.d.ts b/jtg js/node_modules/@types/lodash/fp/flatMapDepth.d.ts
deleted file mode 100644
index b60af92cc4b7b6559f69f4835085ebcfe669100e..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/flatMapDepth.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { flatMapDepth } from "../fp";
-export = flatMapDepth;
diff --git a/jtg js/node_modules/@types/lodash/fp/flatten.d.ts b/jtg js/node_modules/@types/lodash/fp/flatten.d.ts
deleted file mode 100644
index 02c051ff0b3fc660d5597b4c82a0de8ab09323b8..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/flatten.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { flatten } from "../fp";
-export = flatten;
diff --git a/jtg js/node_modules/@types/lodash/fp/flattenDeep.d.ts b/jtg js/node_modules/@types/lodash/fp/flattenDeep.d.ts
deleted file mode 100644
index 44b40e3a1f21a6a5320b571eff97be99d57d129f..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/flattenDeep.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { flattenDeep } from "../fp";
-export = flattenDeep;
diff --git a/jtg js/node_modules/@types/lodash/fp/flattenDepth.d.ts b/jtg js/node_modules/@types/lodash/fp/flattenDepth.d.ts
deleted file mode 100644
index f046f2086a655cc9b98c09ff0dab525dcee4d246..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/flattenDepth.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { flattenDepth } from "../fp";
-export = flattenDepth;
diff --git a/jtg js/node_modules/@types/lodash/fp/flip.d.ts b/jtg js/node_modules/@types/lodash/fp/flip.d.ts
deleted file mode 100644
index e5b3b7d4f9623926ca5aed2068f1bb5e12c9597e..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/flip.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { flip } from "../fp";
-export = flip;
diff --git a/jtg js/node_modules/@types/lodash/fp/floor.d.ts b/jtg js/node_modules/@types/lodash/fp/floor.d.ts
deleted file mode 100644
index 167ab954388db988241cd15b91eadf8775b79aaf..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/floor.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { floor } from "../fp";
-export = floor;
diff --git a/jtg js/node_modules/@types/lodash/fp/flow.d.ts b/jtg js/node_modules/@types/lodash/fp/flow.d.ts
deleted file mode 100644
index 97f0fb82b24e89ba038c57a3be9b2bee206320a7..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/flow.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { flow } from "../fp";
-export = flow;
diff --git a/jtg js/node_modules/@types/lodash/fp/flowRight.d.ts b/jtg js/node_modules/@types/lodash/fp/flowRight.d.ts
deleted file mode 100644
index f148feaad9e1f75b7ceb7021b41ca01a23736240..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/flowRight.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { flowRight } from "../fp";
-export = flowRight;
diff --git a/jtg js/node_modules/@types/lodash/fp/forEach.d.ts b/jtg js/node_modules/@types/lodash/fp/forEach.d.ts
deleted file mode 100644
index f8aa7a4a1aa1d232581f19d46e3bd5697928ee0d..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/forEach.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { forEach } from "../fp";
-export = forEach;
diff --git a/jtg js/node_modules/@types/lodash/fp/forEachRight.d.ts b/jtg js/node_modules/@types/lodash/fp/forEachRight.d.ts
deleted file mode 100644
index 135a4243a98e84c8dc01768bb6ae72fe5853dc53..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/forEachRight.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { forEachRight } from "../fp";
-export = forEachRight;
diff --git a/jtg js/node_modules/@types/lodash/fp/forIn.d.ts b/jtg js/node_modules/@types/lodash/fp/forIn.d.ts
deleted file mode 100644
index dab37b1075b62f2b42023c6ad99795c788d77323..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/forIn.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { forIn } from "../fp";
-export = forIn;
diff --git a/jtg js/node_modules/@types/lodash/fp/forInRight.d.ts b/jtg js/node_modules/@types/lodash/fp/forInRight.d.ts
deleted file mode 100644
index c560df0cef19a1af0df5d34162efc899de558af1..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/forInRight.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { forInRight } from "../fp";
-export = forInRight;
diff --git a/jtg js/node_modules/@types/lodash/fp/forOwn.d.ts b/jtg js/node_modules/@types/lodash/fp/forOwn.d.ts
deleted file mode 100644
index 7099c48a9d0a8dbe9dc3dd8e8cb88b6478e55097..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/forOwn.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { forOwn } from "../fp";
-export = forOwn;
diff --git a/jtg js/node_modules/@types/lodash/fp/forOwnRight.d.ts b/jtg js/node_modules/@types/lodash/fp/forOwnRight.d.ts
deleted file mode 100644
index f1e39288668b3c0393dc2a86b1fb273071462616..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/forOwnRight.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { forOwnRight } from "../fp";
-export = forOwnRight;
diff --git a/jtg js/node_modules/@types/lodash/fp/fromPairs.d.ts b/jtg js/node_modules/@types/lodash/fp/fromPairs.d.ts
deleted file mode 100644
index b0d0082a599a5256ad94ddd34924da72f165a684..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/fromPairs.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { fromPairs } from "../fp";
-export = fromPairs;
diff --git a/jtg js/node_modules/@types/lodash/fp/functions.d.ts b/jtg js/node_modules/@types/lodash/fp/functions.d.ts
deleted file mode 100644
index 727d68e138eed39890c57775e442a275bb5f11bb..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/functions.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { functions } from "../fp";
-export = functions;
diff --git a/jtg js/node_modules/@types/lodash/fp/functionsIn.d.ts b/jtg js/node_modules/@types/lodash/fp/functionsIn.d.ts
deleted file mode 100644
index 448746e61995ce819d8156c88a2da495150037bb..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/functionsIn.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { functionsIn } from "../fp";
-export = functionsIn;
diff --git a/jtg js/node_modules/@types/lodash/fp/get.d.ts b/jtg js/node_modules/@types/lodash/fp/get.d.ts
deleted file mode 100644
index ff3ab8b09d8cd10527f13bf5aadc680703c240e3..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/get.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { get } from "../fp";
-export = get;
diff --git a/jtg js/node_modules/@types/lodash/fp/getOr.d.ts b/jtg js/node_modules/@types/lodash/fp/getOr.d.ts
deleted file mode 100644
index ce3d5bba3114c9d2caa25c873504d9adc2bbc3d3..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/getOr.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { getOr } from "../fp";
-export = getOr;
diff --git a/jtg js/node_modules/@types/lodash/fp/groupBy.d.ts b/jtg js/node_modules/@types/lodash/fp/groupBy.d.ts
deleted file mode 100644
index 813830aa0e3e7366fdbb0cfc2ad77d3bfaf46a2f..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/groupBy.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { groupBy } from "../fp";
-export = groupBy;
diff --git a/jtg js/node_modules/@types/lodash/fp/gt.d.ts b/jtg js/node_modules/@types/lodash/fp/gt.d.ts
deleted file mode 100644
index 517071f511a36f14a4213c6bd9e12420e6f93467..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/gt.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { gt } from "../fp";
-export = gt;
diff --git a/jtg js/node_modules/@types/lodash/fp/gte.d.ts b/jtg js/node_modules/@types/lodash/fp/gte.d.ts
deleted file mode 100644
index 5f6d85c7f00c08d86b01919427a894ee65d54060..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/gte.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { gte } from "../fp";
-export = gte;
diff --git a/jtg js/node_modules/@types/lodash/fp/has.d.ts b/jtg js/node_modules/@types/lodash/fp/has.d.ts
deleted file mode 100644
index 8cbda7fb8c286588d8f2dc7c8a5a75fd3fedb66b..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/has.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { has } from "../fp";
-export = has;
diff --git a/jtg js/node_modules/@types/lodash/fp/hasIn.d.ts b/jtg js/node_modules/@types/lodash/fp/hasIn.d.ts
deleted file mode 100644
index 7e06a87ae3c188e7b1554e1f96878ef2a5b89337..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/hasIn.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { hasIn } from "../fp";
-export = hasIn;
diff --git a/jtg js/node_modules/@types/lodash/fp/head.d.ts b/jtg js/node_modules/@types/lodash/fp/head.d.ts
deleted file mode 100644
index 4a7d5e59cd574e5913d09d01c59de40c121f6068..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/head.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { head } from "../fp";
-export = head;
diff --git a/jtg js/node_modules/@types/lodash/fp/identical.d.ts b/jtg js/node_modules/@types/lodash/fp/identical.d.ts
deleted file mode 100644
index 954dff556916cc71ba5d369b2cbab5961d1a931e..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/identical.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { identical } from "../fp";
-export = identical;
diff --git a/jtg js/node_modules/@types/lodash/fp/identity.d.ts b/jtg js/node_modules/@types/lodash/fp/identity.d.ts
deleted file mode 100644
index 97e613c6c81067963e7abcfce50ae1bfdc591fd0..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/identity.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { identity } from "../fp";
-export = identity;
diff --git a/jtg js/node_modules/@types/lodash/fp/inRange.d.ts b/jtg js/node_modules/@types/lodash/fp/inRange.d.ts
deleted file mode 100644
index 06ed3126871e959fafac7ba71272419af7794012..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/inRange.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { inRange } from "../fp";
-export = inRange;
diff --git a/jtg js/node_modules/@types/lodash/fp/includes.d.ts b/jtg js/node_modules/@types/lodash/fp/includes.d.ts
deleted file mode 100644
index afc998428639d8915c7271487ef396433969d262..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/includes.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { includes } from "../fp";
-export = includes;
diff --git a/jtg js/node_modules/@types/lodash/fp/includesFrom.d.ts b/jtg js/node_modules/@types/lodash/fp/includesFrom.d.ts
deleted file mode 100644
index 13042d029a7fd432f8e53bced72bdbcba337a105..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/includesFrom.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { includesFrom } from "../fp";
-export = includesFrom;
diff --git a/jtg js/node_modules/@types/lodash/fp/indexBy.d.ts b/jtg js/node_modules/@types/lodash/fp/indexBy.d.ts
deleted file mode 100644
index f3f75a41fa06a2113f85955b2cbd64a25587ec3f..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/indexBy.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { indexBy } from "../fp";
-export = indexBy;
diff --git a/jtg js/node_modules/@types/lodash/fp/indexOf.d.ts b/jtg js/node_modules/@types/lodash/fp/indexOf.d.ts
deleted file mode 100644
index 8078c468fdd6b0cd53b4ce5b91a2453346001c39..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/indexOf.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { indexOf } from "../fp";
-export = indexOf;
diff --git a/jtg js/node_modules/@types/lodash/fp/indexOfFrom.d.ts b/jtg js/node_modules/@types/lodash/fp/indexOfFrom.d.ts
deleted file mode 100644
index fe66609f7a8c7c2d5db17917343065746c856e95..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/indexOfFrom.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { indexOfFrom } from "../fp";
-export = indexOfFrom;
diff --git a/jtg js/node_modules/@types/lodash/fp/init.d.ts b/jtg js/node_modules/@types/lodash/fp/init.d.ts
deleted file mode 100644
index 2f37ecd28439aede94949ac10493cb6db2d24629..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/init.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { init } from "../fp";
-export = init;
diff --git a/jtg js/node_modules/@types/lodash/fp/initial.d.ts b/jtg js/node_modules/@types/lodash/fp/initial.d.ts
deleted file mode 100644
index 446da0678bcff5d774272e8048dd40e9b5352956..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/initial.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { initial } from "../fp";
-export = initial;
diff --git a/jtg js/node_modules/@types/lodash/fp/intersection.d.ts b/jtg js/node_modules/@types/lodash/fp/intersection.d.ts
deleted file mode 100644
index 41d7915841a025b8550575bfa2e371040f769e44..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/intersection.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { intersection } from "../fp";
-export = intersection;
diff --git a/jtg js/node_modules/@types/lodash/fp/intersectionBy.d.ts b/jtg js/node_modules/@types/lodash/fp/intersectionBy.d.ts
deleted file mode 100644
index a123ddda0d2eb603fb7dac3416ccfbeafba9dd36..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/intersectionBy.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { intersectionBy } from "../fp";
-export = intersectionBy;
diff --git a/jtg js/node_modules/@types/lodash/fp/intersectionWith.d.ts b/jtg js/node_modules/@types/lodash/fp/intersectionWith.d.ts
deleted file mode 100644
index 9ad994157005c94e7a2ba1a2e57058300b0187b6..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/intersectionWith.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { intersectionWith } from "../fp";
-export = intersectionWith;
diff --git a/jtg js/node_modules/@types/lodash/fp/invert.d.ts b/jtg js/node_modules/@types/lodash/fp/invert.d.ts
deleted file mode 100644
index a41c2bc244a5ed8eb18882b5fbd274d0230e18b8..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/invert.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { invert } from "../fp";
-export = invert;
diff --git a/jtg js/node_modules/@types/lodash/fp/invertBy.d.ts b/jtg js/node_modules/@types/lodash/fp/invertBy.d.ts
deleted file mode 100644
index e28f7135f4d0df6afc18d6f2a37d7914c64cb8e7..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/invertBy.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { invertBy } from "../fp";
-export = invertBy;
diff --git a/jtg js/node_modules/@types/lodash/fp/invertObj.d.ts b/jtg js/node_modules/@types/lodash/fp/invertObj.d.ts
deleted file mode 100644
index 2e16c4f8fb7a62af0316a9d6de205fdeee3dfc5c..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/invertObj.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { invertObj } from "../fp";
-export = invertObj;
diff --git a/jtg js/node_modules/@types/lodash/fp/invoke.d.ts b/jtg js/node_modules/@types/lodash/fp/invoke.d.ts
deleted file mode 100644
index 1a9ce3b3556851667d329671387cfb18c7215687..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/invoke.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { invoke } from "../fp";
-export = invoke;
diff --git a/jtg js/node_modules/@types/lodash/fp/invokeArgs.d.ts b/jtg js/node_modules/@types/lodash/fp/invokeArgs.d.ts
deleted file mode 100644
index 8b498e0ec1a9835a30fea2fe5c757ac7beb27d81..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/invokeArgs.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { invokeArgs } from "../fp";
-export = invokeArgs;
diff --git a/jtg js/node_modules/@types/lodash/fp/invokeArgsMap.d.ts b/jtg js/node_modules/@types/lodash/fp/invokeArgsMap.d.ts
deleted file mode 100644
index f5ba3e7ec5955ef319d277c6680186d0e09acf10..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/invokeArgsMap.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { invokeArgsMap } from "../fp";
-export = invokeArgsMap;
diff --git a/jtg js/node_modules/@types/lodash/fp/invokeMap.d.ts b/jtg js/node_modules/@types/lodash/fp/invokeMap.d.ts
deleted file mode 100644
index 9f0aea9c11612c0fca2172f6bca0683cd9d0432f..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/invokeMap.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { invokeMap } from "../fp";
-export = invokeMap;
diff --git a/jtg js/node_modules/@types/lodash/fp/isArguments.d.ts b/jtg js/node_modules/@types/lodash/fp/isArguments.d.ts
deleted file mode 100644
index 23c438c0a5d730ea1b98eb7178b70d45a7e6755d..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/isArguments.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isArguments } from "../fp";
-export = isArguments;
diff --git a/jtg js/node_modules/@types/lodash/fp/isArray.d.ts b/jtg js/node_modules/@types/lodash/fp/isArray.d.ts
deleted file mode 100644
index dadecce65fe2c6b55c9c978070603bf748e15493..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/isArray.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isArray } from "../fp";
-export = isArray;
diff --git a/jtg js/node_modules/@types/lodash/fp/isArrayBuffer.d.ts b/jtg js/node_modules/@types/lodash/fp/isArrayBuffer.d.ts
deleted file mode 100644
index 32018346ba3e4864a5937924076ceb111a8cb524..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/isArrayBuffer.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isArrayBuffer } from "../fp";
-export = isArrayBuffer;
diff --git a/jtg js/node_modules/@types/lodash/fp/isArrayLike.d.ts b/jtg js/node_modules/@types/lodash/fp/isArrayLike.d.ts
deleted file mode 100644
index 2be9b54c93d38ca422efd9e119b8d5350c966363..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/isArrayLike.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isArrayLike } from "../fp";
-export = isArrayLike;
diff --git a/jtg js/node_modules/@types/lodash/fp/isArrayLikeObject.d.ts b/jtg js/node_modules/@types/lodash/fp/isArrayLikeObject.d.ts
deleted file mode 100644
index 709f5135fe4040bc4c3f7bab72242fc7420cee54..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/isArrayLikeObject.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isArrayLikeObject } from "../fp";
-export = isArrayLikeObject;
diff --git a/jtg js/node_modules/@types/lodash/fp/isBoolean.d.ts b/jtg js/node_modules/@types/lodash/fp/isBoolean.d.ts
deleted file mode 100644
index 605cb2cb7e144820a20d5855b1c88511f0744439..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/isBoolean.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isBoolean } from "../fp";
-export = isBoolean;
diff --git a/jtg js/node_modules/@types/lodash/fp/isBuffer.d.ts b/jtg js/node_modules/@types/lodash/fp/isBuffer.d.ts
deleted file mode 100644
index 3d06b548c142e3c7f176aedef416146ad6aefbb3..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/isBuffer.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isBuffer } from "../fp";
-export = isBuffer;
diff --git a/jtg js/node_modules/@types/lodash/fp/isDate.d.ts b/jtg js/node_modules/@types/lodash/fp/isDate.d.ts
deleted file mode 100644
index 979594f9954ca0b0245b5ff3d12210655aa64fd0..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/isDate.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isDate } from "../fp";
-export = isDate;
diff --git a/jtg js/node_modules/@types/lodash/fp/isElement.d.ts b/jtg js/node_modules/@types/lodash/fp/isElement.d.ts
deleted file mode 100644
index 26739ad952965e9e1cb79f63294cad1a168ef7a5..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/isElement.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isElement } from "../fp";
-export = isElement;
diff --git a/jtg js/node_modules/@types/lodash/fp/isEmpty.d.ts b/jtg js/node_modules/@types/lodash/fp/isEmpty.d.ts
deleted file mode 100644
index ed9b33f8223034cfb45292f8ce1cef4580ef831d..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/isEmpty.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isEmpty } from "../fp";
-export = isEmpty;
diff --git a/jtg js/node_modules/@types/lodash/fp/isEqual.d.ts b/jtg js/node_modules/@types/lodash/fp/isEqual.d.ts
deleted file mode 100644
index 0a51c5c80dba5e30878d83082bb52c7b18ad3797..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/isEqual.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isEqual } from "../fp";
-export = isEqual;
diff --git a/jtg js/node_modules/@types/lodash/fp/isEqualWith.d.ts b/jtg js/node_modules/@types/lodash/fp/isEqualWith.d.ts
deleted file mode 100644
index 27fa4414cbb4a5fc87bf9fa747d84e1375c68f37..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/isEqualWith.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isEqualWith } from "../fp";
-export = isEqualWith;
diff --git a/jtg js/node_modules/@types/lodash/fp/isError.d.ts b/jtg js/node_modules/@types/lodash/fp/isError.d.ts
deleted file mode 100644
index 4adb9885ca378181ad98e4fc3b27f4bfaa1debe5..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/isError.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isError } from "../fp";
-export = isError;
diff --git a/jtg js/node_modules/@types/lodash/fp/isFinite.d.ts b/jtg js/node_modules/@types/lodash/fp/isFinite.d.ts
deleted file mode 100644
index 5641edc0aebde34cc7a3a0d376783cf2b530fb38..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/isFinite.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isFinite } from "../fp";
-export = isFinite;
diff --git a/jtg js/node_modules/@types/lodash/fp/isFunction.d.ts b/jtg js/node_modules/@types/lodash/fp/isFunction.d.ts
deleted file mode 100644
index 3404e748711944e3a19a0e80eac505334b6e41e8..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/isFunction.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isFunction } from "../fp";
-export = isFunction;
diff --git a/jtg js/node_modules/@types/lodash/fp/isInteger.d.ts b/jtg js/node_modules/@types/lodash/fp/isInteger.d.ts
deleted file mode 100644
index 310df93478bbdd7c06ea41e97e2ea2c5b7ea30e8..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/isInteger.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isInteger } from "../fp";
-export = isInteger;
diff --git a/jtg js/node_modules/@types/lodash/fp/isLength.d.ts b/jtg js/node_modules/@types/lodash/fp/isLength.d.ts
deleted file mode 100644
index 3073b672b682b53f82643e07b185ecef9261417d..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/isLength.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isLength } from "../fp";
-export = isLength;
diff --git a/jtg js/node_modules/@types/lodash/fp/isMap.d.ts b/jtg js/node_modules/@types/lodash/fp/isMap.d.ts
deleted file mode 100644
index e76745c1e2654c4562c53894d188633767e3624f..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/isMap.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isMap } from "../fp";
-export = isMap;
diff --git a/jtg js/node_modules/@types/lodash/fp/isMatch.d.ts b/jtg js/node_modules/@types/lodash/fp/isMatch.d.ts
deleted file mode 100644
index 58a0a2db95567dae4b0f4bd7fd3f37dc82a752d4..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/isMatch.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isMatch } from "../fp";
-export = isMatch;
diff --git a/jtg js/node_modules/@types/lodash/fp/isMatchWith.d.ts b/jtg js/node_modules/@types/lodash/fp/isMatchWith.d.ts
deleted file mode 100644
index 40ff3a691b133df5bdee3b9215e4f504ee635ece..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/isMatchWith.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isMatchWith } from "../fp";
-export = isMatchWith;
diff --git a/jtg js/node_modules/@types/lodash/fp/isNaN.d.ts b/jtg js/node_modules/@types/lodash/fp/isNaN.d.ts
deleted file mode 100644
index 2f92885d0937d1ec7dadb69892596afd7cd4c06b..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/isNaN.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isNaN } from "../fp";
-export = isNaN;
diff --git a/jtg js/node_modules/@types/lodash/fp/isNative.d.ts b/jtg js/node_modules/@types/lodash/fp/isNative.d.ts
deleted file mode 100644
index 6e189a8e52c18ca36661fbb561ea28c86ed51860..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/isNative.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isNative } from "../fp";
-export = isNative;
diff --git a/jtg js/node_modules/@types/lodash/fp/isNil.d.ts b/jtg js/node_modules/@types/lodash/fp/isNil.d.ts
deleted file mode 100644
index 0baee7ff8b0181f24b2affe3f0f71e5098d0b558..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/isNil.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isNil } from "../fp";
-export = isNil;
diff --git a/jtg js/node_modules/@types/lodash/fp/isNull.d.ts b/jtg js/node_modules/@types/lodash/fp/isNull.d.ts
deleted file mode 100644
index 5e5fad5575f8e187ad2e52624aed208e96776ee6..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/isNull.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isNull } from "../fp";
-export = isNull;
diff --git a/jtg js/node_modules/@types/lodash/fp/isNumber.d.ts b/jtg js/node_modules/@types/lodash/fp/isNumber.d.ts
deleted file mode 100644
index 93368f1726840d30354cb36a9fc59fdbc12f3c57..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/isNumber.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isNumber } from "../fp";
-export = isNumber;
diff --git a/jtg js/node_modules/@types/lodash/fp/isObject.d.ts b/jtg js/node_modules/@types/lodash/fp/isObject.d.ts
deleted file mode 100644
index 7e9e2575ab8c66045cb804d82b02e888690db0af..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/isObject.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isObject } from "../fp";
-export = isObject;
diff --git a/jtg js/node_modules/@types/lodash/fp/isObjectLike.d.ts b/jtg js/node_modules/@types/lodash/fp/isObjectLike.d.ts
deleted file mode 100644
index ba03ddc0f7febba4dcac1b4c57ce89d7f3be54d7..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/isObjectLike.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isObjectLike } from "../fp";
-export = isObjectLike;
diff --git a/jtg js/node_modules/@types/lodash/fp/isPlainObject.d.ts b/jtg js/node_modules/@types/lodash/fp/isPlainObject.d.ts
deleted file mode 100644
index 87da4bdb4728f81575d8b6b486669cd87ab5db85..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/isPlainObject.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isPlainObject } from "../fp";
-export = isPlainObject;
diff --git a/jtg js/node_modules/@types/lodash/fp/isRegExp.d.ts b/jtg js/node_modules/@types/lodash/fp/isRegExp.d.ts
deleted file mode 100644
index 47edf50a1f1e86c7df5a33ad8ed9fdb370e60f21..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/isRegExp.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isRegExp } from "../fp";
-export = isRegExp;
diff --git a/jtg js/node_modules/@types/lodash/fp/isSafeInteger.d.ts b/jtg js/node_modules/@types/lodash/fp/isSafeInteger.d.ts
deleted file mode 100644
index a32b12cfd8a84ee2c99074136ebac06426e371b3..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/isSafeInteger.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isSafeInteger } from "../fp";
-export = isSafeInteger;
diff --git a/jtg js/node_modules/@types/lodash/fp/isSet.d.ts b/jtg js/node_modules/@types/lodash/fp/isSet.d.ts
deleted file mode 100644
index 85e493338e58ecf5d8aabb5da0c75faa7105ca3f..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/isSet.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isSet } from "../fp";
-export = isSet;
diff --git a/jtg js/node_modules/@types/lodash/fp/isString.d.ts b/jtg js/node_modules/@types/lodash/fp/isString.d.ts
deleted file mode 100644
index 9a2149451db22dc95d077ea5e78ad30fa0ae5115..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/isString.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isString } from "../fp";
-export = isString;
diff --git a/jtg js/node_modules/@types/lodash/fp/isSymbol.d.ts b/jtg js/node_modules/@types/lodash/fp/isSymbol.d.ts
deleted file mode 100644
index 3d82e9719c845b6560d407775122fb491a4db668..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/isSymbol.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isSymbol } from "../fp";
-export = isSymbol;
diff --git a/jtg js/node_modules/@types/lodash/fp/isTypedArray.d.ts b/jtg js/node_modules/@types/lodash/fp/isTypedArray.d.ts
deleted file mode 100644
index fce6c44a69fead33d33d728c7092f59881edf367..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/isTypedArray.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isTypedArray } from "../fp";
-export = isTypedArray;
diff --git a/jtg js/node_modules/@types/lodash/fp/isUndefined.d.ts b/jtg js/node_modules/@types/lodash/fp/isUndefined.d.ts
deleted file mode 100644
index ccb010033b5bf453c6c479e92be178302a5347c3..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/isUndefined.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isUndefined } from "../fp";
-export = isUndefined;
diff --git a/jtg js/node_modules/@types/lodash/fp/isWeakMap.d.ts b/jtg js/node_modules/@types/lodash/fp/isWeakMap.d.ts
deleted file mode 100644
index 11edaab05dd3e9a323caad2aa0ff1b7f6d772811..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/isWeakMap.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isWeakMap } from "../fp";
-export = isWeakMap;
diff --git a/jtg js/node_modules/@types/lodash/fp/isWeakSet.d.ts b/jtg js/node_modules/@types/lodash/fp/isWeakSet.d.ts
deleted file mode 100644
index 6d877e9e23429405b0487fe41f902a2ba2555bb0..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/isWeakSet.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isWeakSet } from "../fp";
-export = isWeakSet;
diff --git a/jtg js/node_modules/@types/lodash/fp/iteratee.d.ts b/jtg js/node_modules/@types/lodash/fp/iteratee.d.ts
deleted file mode 100644
index 0ec2832c84fc5fa617a9760a0cc2459c0e81db29..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/iteratee.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { iteratee } from "../fp";
-export = iteratee;
diff --git a/jtg js/node_modules/@types/lodash/fp/join.d.ts b/jtg js/node_modules/@types/lodash/fp/join.d.ts
deleted file mode 100644
index beee04ccf59f8b8671397dad721331e7480700a3..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/join.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { join } from "../fp";
-export = join;
diff --git a/jtg js/node_modules/@types/lodash/fp/juxt.d.ts b/jtg js/node_modules/@types/lodash/fp/juxt.d.ts
deleted file mode 100644
index 5e972d448844cf3ddb572ef8a8a82e2fb2b240aa..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/juxt.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { juxt } from "../fp";
-export = juxt;
diff --git a/jtg js/node_modules/@types/lodash/fp/kebabCase.d.ts b/jtg js/node_modules/@types/lodash/fp/kebabCase.d.ts
deleted file mode 100644
index 8231b1593a2ea25442b367b2dea354bc22923d55..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/kebabCase.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { kebabCase } from "../fp";
-export = kebabCase;
diff --git a/jtg js/node_modules/@types/lodash/fp/keyBy.d.ts b/jtg js/node_modules/@types/lodash/fp/keyBy.d.ts
deleted file mode 100644
index e4b1381096dac8e68b8b9d0b71ba2b08895fd967..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/keyBy.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { keyBy } from "../fp";
-export = keyBy;
diff --git a/jtg js/node_modules/@types/lodash/fp/keys.d.ts b/jtg js/node_modules/@types/lodash/fp/keys.d.ts
deleted file mode 100644
index 0323484453f0533713d74b4d323974dc6342ceac..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/keys.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { keys } from "../fp";
-export = keys;
diff --git a/jtg js/node_modules/@types/lodash/fp/keysIn.d.ts b/jtg js/node_modules/@types/lodash/fp/keysIn.d.ts
deleted file mode 100644
index f6f3482852aa6f06e7b5e46a5eed9a8a6595b5df..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/keysIn.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { keysIn } from "../fp";
-export = keysIn;
diff --git a/jtg js/node_modules/@types/lodash/fp/last.d.ts b/jtg js/node_modules/@types/lodash/fp/last.d.ts
deleted file mode 100644
index f74171a309f2b97cff0d2f8f25f5ec226efcf452..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/last.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { last } from "../fp";
-export = last;
diff --git a/jtg js/node_modules/@types/lodash/fp/lastIndexOf.d.ts b/jtg js/node_modules/@types/lodash/fp/lastIndexOf.d.ts
deleted file mode 100644
index 2d60e64837a9ac968bb356d524cfbd8c89563168..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/lastIndexOf.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { lastIndexOf } from "../fp";
-export = lastIndexOf;
diff --git a/jtg js/node_modules/@types/lodash/fp/lastIndexOfFrom.d.ts b/jtg js/node_modules/@types/lodash/fp/lastIndexOfFrom.d.ts
deleted file mode 100644
index 7a2f23e5ae85a0726aae6f788268bbbccf0067fb..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/lastIndexOfFrom.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { lastIndexOfFrom } from "../fp";
-export = lastIndexOfFrom;
diff --git a/jtg js/node_modules/@types/lodash/fp/lowerCase.d.ts b/jtg js/node_modules/@types/lodash/fp/lowerCase.d.ts
deleted file mode 100644
index 1a5360fdbcb87c618d456e23669ae9f244efca75..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/lowerCase.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { lowerCase } from "../fp";
-export = lowerCase;
diff --git a/jtg js/node_modules/@types/lodash/fp/lowerFirst.d.ts b/jtg js/node_modules/@types/lodash/fp/lowerFirst.d.ts
deleted file mode 100644
index 23ce92585d731535e6a40a88d36aecfde5ac5421..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/lowerFirst.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { lowerFirst } from "../fp";
-export = lowerFirst;
diff --git a/jtg js/node_modules/@types/lodash/fp/lt.d.ts b/jtg js/node_modules/@types/lodash/fp/lt.d.ts
deleted file mode 100644
index a309bdce1aed6fd9a995e914debf9d997750f347..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/lt.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { lt } from "../fp";
-export = lt;
diff --git a/jtg js/node_modules/@types/lodash/fp/lte.d.ts b/jtg js/node_modules/@types/lodash/fp/lte.d.ts
deleted file mode 100644
index 0d4af2cbe358dd7a6cd916c37822902a3f84f6bd..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/lte.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { lte } from "../fp";
-export = lte;
diff --git a/jtg js/node_modules/@types/lodash/fp/map.d.ts b/jtg js/node_modules/@types/lodash/fp/map.d.ts
deleted file mode 100644
index 17d014caf49132d1b366f056a2ba825c252ea6c2..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/map.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { map } from "../fp";
-export = map;
diff --git a/jtg js/node_modules/@types/lodash/fp/mapKeys.d.ts b/jtg js/node_modules/@types/lodash/fp/mapKeys.d.ts
deleted file mode 100644
index acc6d752d804f9aeb51fa59958d9146f6ef50385..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/mapKeys.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { mapKeys } from "../fp";
-export = mapKeys;
diff --git a/jtg js/node_modules/@types/lodash/fp/mapValues.d.ts b/jtg js/node_modules/@types/lodash/fp/mapValues.d.ts
deleted file mode 100644
index abef821aaba9587175a4c95873e1777c15c16a76..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/mapValues.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { mapValues } from "../fp";
-export = mapValues;
diff --git a/jtg js/node_modules/@types/lodash/fp/matches.d.ts b/jtg js/node_modules/@types/lodash/fp/matches.d.ts
deleted file mode 100644
index e9796de4fb9ac2b55c9e89ae6d74eebd8d22be94..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/matches.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { matches } from "../fp";
-export = matches;
diff --git a/jtg js/node_modules/@types/lodash/fp/matchesProperty.d.ts b/jtg js/node_modules/@types/lodash/fp/matchesProperty.d.ts
deleted file mode 100644
index 81db8f75da226db977c1174b4bd7c3d83f946fcd..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/matchesProperty.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { matchesProperty } from "../fp";
-export = matchesProperty;
diff --git a/jtg js/node_modules/@types/lodash/fp/max.d.ts b/jtg js/node_modules/@types/lodash/fp/max.d.ts
deleted file mode 100644
index 7b08dc52c6adf79a0b47e82a0e6a9174dcba1dc6..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/max.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { max } from "../fp";
-export = max;
diff --git a/jtg js/node_modules/@types/lodash/fp/maxBy.d.ts b/jtg js/node_modules/@types/lodash/fp/maxBy.d.ts
deleted file mode 100644
index 68f30dd8964734e3d1d223ab72e48610ab2bed8a..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/maxBy.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { maxBy } from "../fp";
-export = maxBy;
diff --git a/jtg js/node_modules/@types/lodash/fp/mean.d.ts b/jtg js/node_modules/@types/lodash/fp/mean.d.ts
deleted file mode 100644
index a0b7e22e5b21a93b237a72b8ff8c08f9977dabaf..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/mean.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { mean } from "../fp";
-export = mean;
diff --git a/jtg js/node_modules/@types/lodash/fp/meanBy.d.ts b/jtg js/node_modules/@types/lodash/fp/meanBy.d.ts
deleted file mode 100644
index d76afd77c10ed979d530c3c5bd8749b3b6d4e50f..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/meanBy.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { meanBy } from "../fp";
-export = meanBy;
diff --git a/jtg js/node_modules/@types/lodash/fp/memoize.d.ts b/jtg js/node_modules/@types/lodash/fp/memoize.d.ts
deleted file mode 100644
index a60b79cafa71e20e9a1ce131b15a15e20bae2977..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/memoize.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { memoize } from "../fp";
-export = memoize;
diff --git a/jtg js/node_modules/@types/lodash/fp/merge.d.ts b/jtg js/node_modules/@types/lodash/fp/merge.d.ts
deleted file mode 100644
index f80117b7e9621ddbf8814e5eecd7abaaf33b50e7..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/merge.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { merge } from "../fp";
-export = merge;
diff --git a/jtg js/node_modules/@types/lodash/fp/mergeAll.d.ts b/jtg js/node_modules/@types/lodash/fp/mergeAll.d.ts
deleted file mode 100644
index 6b462d85cbc24c6b36cd18d60b39c3b623777252..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/mergeAll.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { mergeAll } from "../fp";
-export = mergeAll;
diff --git a/jtg js/node_modules/@types/lodash/fp/mergeAllWith.d.ts b/jtg js/node_modules/@types/lodash/fp/mergeAllWith.d.ts
deleted file mode 100644
index 3d2f7f296ebea63305778de534e97b22b6cce283..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/mergeAllWith.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { mergeAllWith } from "../fp";
-export = mergeAllWith;
diff --git a/jtg js/node_modules/@types/lodash/fp/mergeWith.d.ts b/jtg js/node_modules/@types/lodash/fp/mergeWith.d.ts
deleted file mode 100644
index d1f541e81b250af945f65b91e5e5ecce74cef5e2..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/mergeWith.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { mergeWith } from "../fp";
-export = mergeWith;
diff --git a/jtg js/node_modules/@types/lodash/fp/method.d.ts b/jtg js/node_modules/@types/lodash/fp/method.d.ts
deleted file mode 100644
index f9f2ee8795711cffc4be84730a12347fd1105b41..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/method.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { method } from "../fp";
-export = method;
diff --git a/jtg js/node_modules/@types/lodash/fp/methodOf.d.ts b/jtg js/node_modules/@types/lodash/fp/methodOf.d.ts
deleted file mode 100644
index a9e0e4fe14eb42224ecbc9321c7b99f523b9e4f2..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/methodOf.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { methodOf } from "../fp";
-export = methodOf;
diff --git a/jtg js/node_modules/@types/lodash/fp/min.d.ts b/jtg js/node_modules/@types/lodash/fp/min.d.ts
deleted file mode 100644
index 7c80ab0ff91af6694c5279cdc60e68842fcc2213..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/min.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { min } from "../fp";
-export = min;
diff --git a/jtg js/node_modules/@types/lodash/fp/minBy.d.ts b/jtg js/node_modules/@types/lodash/fp/minBy.d.ts
deleted file mode 100644
index 020a8f506c7327355972450e277fdd529e57b401..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/minBy.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { minBy } from "../fp";
-export = minBy;
diff --git a/jtg js/node_modules/@types/lodash/fp/multiply.d.ts b/jtg js/node_modules/@types/lodash/fp/multiply.d.ts
deleted file mode 100644
index b3e5f3abd9352e3ffdd8fb05f7c789d3bf20ed7b..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/multiply.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { multiply } from "../fp";
-export = multiply;
diff --git a/jtg js/node_modules/@types/lodash/fp/nAry.d.ts b/jtg js/node_modules/@types/lodash/fp/nAry.d.ts
deleted file mode 100644
index 882e4a37d64a925b918f95fde2db03d40cfd87b5..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/nAry.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { nAry } from "../fp";
-export = nAry;
diff --git a/jtg js/node_modules/@types/lodash/fp/negate.d.ts b/jtg js/node_modules/@types/lodash/fp/negate.d.ts
deleted file mode 100644
index a7693c192814c229e2e1cf1df11641e31d6833f0..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/negate.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { negate } from "../fp";
-export = negate;
diff --git a/jtg js/node_modules/@types/lodash/fp/noConflict.d.ts b/jtg js/node_modules/@types/lodash/fp/noConflict.d.ts
deleted file mode 100644
index 7694f5aa5a07273bb86cf01704b484adb1a0bbdc..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/noConflict.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { noConflict } from "../fp";
-export = noConflict;
diff --git a/jtg js/node_modules/@types/lodash/fp/noop.d.ts b/jtg js/node_modules/@types/lodash/fp/noop.d.ts
deleted file mode 100644
index 5b6a27b61ace9eb2fb777bb33713806016bf083d..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/noop.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { noop } from "../fp";
-export = noop;
diff --git a/jtg js/node_modules/@types/lodash/fp/now.d.ts b/jtg js/node_modules/@types/lodash/fp/now.d.ts
deleted file mode 100644
index fdbbd2bcf7e6bbb35e139ff982e3e65bbcefbb42..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/now.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { now } from "../fp";
-export = now;
diff --git a/jtg js/node_modules/@types/lodash/fp/nth.d.ts b/jtg js/node_modules/@types/lodash/fp/nth.d.ts
deleted file mode 100644
index e3987e17cb2bba6f0d65b5fdc522602e5f0ff66e..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/nth.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { nth } from "../fp";
-export = nth;
diff --git a/jtg js/node_modules/@types/lodash/fp/nthArg.d.ts b/jtg js/node_modules/@types/lodash/fp/nthArg.d.ts
deleted file mode 100644
index 216c9bbab2f6ccb7613f843708d7893082182ce0..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/nthArg.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { nthArg } from "../fp";
-export = nthArg;
diff --git a/jtg js/node_modules/@types/lodash/fp/omit.d.ts b/jtg js/node_modules/@types/lodash/fp/omit.d.ts
deleted file mode 100644
index 1cd1b7fcc30c0d3c2fc23ed0461e817831f53b13..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/omit.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { omit } from "../fp";
-export = omit;
diff --git a/jtg js/node_modules/@types/lodash/fp/omitAll.d.ts b/jtg js/node_modules/@types/lodash/fp/omitAll.d.ts
deleted file mode 100644
index dab5cfa5fcd3a327e3a31060cf1d015d8b649d57..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/omitAll.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { omitAll } from "../fp";
-export = omitAll;
diff --git a/jtg js/node_modules/@types/lodash/fp/omitBy.d.ts b/jtg js/node_modules/@types/lodash/fp/omitBy.d.ts
deleted file mode 100644
index 8be4f5b40b46ba29e99fc81e253adb824985bf35..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/omitBy.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { omitBy } from "../fp";
-export = omitBy;
diff --git a/jtg js/node_modules/@types/lodash/fp/once.d.ts b/jtg js/node_modules/@types/lodash/fp/once.d.ts
deleted file mode 100644
index 24d859cc53cdc5817bcf25ab76f8b8ce0bd0ec5c..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/once.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { once } from "../fp";
-export = once;
diff --git a/jtg js/node_modules/@types/lodash/fp/orderBy.d.ts b/jtg js/node_modules/@types/lodash/fp/orderBy.d.ts
deleted file mode 100644
index 9443fcfc2267f81d7544b542628aa32fcca9d30c..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/orderBy.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { orderBy } from "../fp";
-export = orderBy;
diff --git a/jtg js/node_modules/@types/lodash/fp/over.d.ts b/jtg js/node_modules/@types/lodash/fp/over.d.ts
deleted file mode 100644
index 1bd2502fdcd654a1cd4eebad2e2d54d887d1d508..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/over.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { over } from "../fp";
-export = over;
diff --git a/jtg js/node_modules/@types/lodash/fp/overArgs.d.ts b/jtg js/node_modules/@types/lodash/fp/overArgs.d.ts
deleted file mode 100644
index c054c9270725ff1d05ab2989d03f19c9b6bedf2b..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/overArgs.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { overArgs } from "../fp";
-export = overArgs;
diff --git a/jtg js/node_modules/@types/lodash/fp/overEvery.d.ts b/jtg js/node_modules/@types/lodash/fp/overEvery.d.ts
deleted file mode 100644
index 1cf8b4061bd073d3b0e22e497cf3770b13f1f673..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/overEvery.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { overEvery } from "../fp";
-export = overEvery;
diff --git a/jtg js/node_modules/@types/lodash/fp/overSome.d.ts b/jtg js/node_modules/@types/lodash/fp/overSome.d.ts
deleted file mode 100644
index 6b098b73b3389c08dedb5fc98b8783c82a02d3ed..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/overSome.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { overSome } from "../fp";
-export = overSome;
diff --git a/jtg js/node_modules/@types/lodash/fp/pad.d.ts b/jtg js/node_modules/@types/lodash/fp/pad.d.ts
deleted file mode 100644
index a5519771dd11d26f8f543c9f430b9e960203756e..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/pad.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { pad } from "../fp";
-export = pad;
diff --git a/jtg js/node_modules/@types/lodash/fp/padChars.d.ts b/jtg js/node_modules/@types/lodash/fp/padChars.d.ts
deleted file mode 100644
index 74d1aabbbfec5ec03e9b65e8733a99ee005b5552..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/padChars.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { padChars } from "../fp";
-export = padChars;
diff --git a/jtg js/node_modules/@types/lodash/fp/padCharsEnd.d.ts b/jtg js/node_modules/@types/lodash/fp/padCharsEnd.d.ts
deleted file mode 100644
index 3a468dc11f367932d663e00b2da356e30932e5f7..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/padCharsEnd.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { padCharsEnd } from "../fp";
-export = padCharsEnd;
diff --git a/jtg js/node_modules/@types/lodash/fp/padCharsStart.d.ts b/jtg js/node_modules/@types/lodash/fp/padCharsStart.d.ts
deleted file mode 100644
index a22523505f6c6221e40dfe3b3577ef03e4d4e4af..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/padCharsStart.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { padCharsStart } from "../fp";
-export = padCharsStart;
diff --git a/jtg js/node_modules/@types/lodash/fp/padEnd.d.ts b/jtg js/node_modules/@types/lodash/fp/padEnd.d.ts
deleted file mode 100644
index 5c4e4d80bace5ca6f7a6666b5a64dc35de23cb39..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/padEnd.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { padEnd } from "../fp";
-export = padEnd;
diff --git a/jtg js/node_modules/@types/lodash/fp/padStart.d.ts b/jtg js/node_modules/@types/lodash/fp/padStart.d.ts
deleted file mode 100644
index a4fca5d1ec02fe34cb70bc9739d2ab3aea7d7a2d..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/padStart.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { padStart } from "../fp";
-export = padStart;
diff --git a/jtg js/node_modules/@types/lodash/fp/parseInt.d.ts b/jtg js/node_modules/@types/lodash/fp/parseInt.d.ts
deleted file mode 100644
index 47aff97b71590efb007c5c4b9290eb9f3e700b8c..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/parseInt.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { parseInt } from "../fp";
-export = parseInt;
diff --git a/jtg js/node_modules/@types/lodash/fp/partial.d.ts b/jtg js/node_modules/@types/lodash/fp/partial.d.ts
deleted file mode 100644
index f5ebd726e556e3f98f8160a4af2b0e68d83fd2bb..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/partial.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { partial } from "../fp";
-export = partial;
diff --git a/jtg js/node_modules/@types/lodash/fp/partialRight.d.ts b/jtg js/node_modules/@types/lodash/fp/partialRight.d.ts
deleted file mode 100644
index bc0fa1b9c6d391459cb6250ab31826772eca3a4b..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/partialRight.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { partialRight } from "../fp";
-export = partialRight;
diff --git a/jtg js/node_modules/@types/lodash/fp/partition.d.ts b/jtg js/node_modules/@types/lodash/fp/partition.d.ts
deleted file mode 100644
index 6ad41cd7dbc7a7dd96b013393e8b5a3167d5b3d6..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/partition.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { partition } from "../fp";
-export = partition;
diff --git a/jtg js/node_modules/@types/lodash/fp/path.d.ts b/jtg js/node_modules/@types/lodash/fp/path.d.ts
deleted file mode 100644
index db86d6023d382ba817281f9f40111759bb8501f1..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/path.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { path } from "../fp";
-export = path;
diff --git a/jtg js/node_modules/@types/lodash/fp/pathEq.d.ts b/jtg js/node_modules/@types/lodash/fp/pathEq.d.ts
deleted file mode 100644
index 9f328756c3fd623b2a1807b15b277f12f74f595e..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/pathEq.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { pathEq } from "../fp";
-export = pathEq;
diff --git a/jtg js/node_modules/@types/lodash/fp/pathOr.d.ts b/jtg js/node_modules/@types/lodash/fp/pathOr.d.ts
deleted file mode 100644
index 6cad6b18364ce5cc616ff399f9b21c0e5feecf76..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/pathOr.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { pathOr } from "../fp";
-export = pathOr;
diff --git a/jtg js/node_modules/@types/lodash/fp/paths.d.ts b/jtg js/node_modules/@types/lodash/fp/paths.d.ts
deleted file mode 100644
index 1e6eb8908f6553ed48942fccbf389e8dd553d09d..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/paths.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { paths } from "../fp";
-export = paths;
diff --git a/jtg js/node_modules/@types/lodash/fp/pick.d.ts b/jtg js/node_modules/@types/lodash/fp/pick.d.ts
deleted file mode 100644
index 4772ecacc3276c246b7f33edf5afc191b8d08fd5..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/pick.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { pick } from "../fp";
-export = pick;
diff --git a/jtg js/node_modules/@types/lodash/fp/pickAll.d.ts b/jtg js/node_modules/@types/lodash/fp/pickAll.d.ts
deleted file mode 100644
index 38d2e3fe2b10a2ed7af911ea0ade5bb83a8c7971..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/pickAll.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { pickAll } from "../fp";
-export = pickAll;
diff --git a/jtg js/node_modules/@types/lodash/fp/pickBy.d.ts b/jtg js/node_modules/@types/lodash/fp/pickBy.d.ts
deleted file mode 100644
index 0b192629e03e3e857325e7aafa24f467c19e93bf..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/pickBy.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { pickBy } from "../fp";
-export = pickBy;
diff --git a/jtg js/node_modules/@types/lodash/fp/pipe.d.ts b/jtg js/node_modules/@types/lodash/fp/pipe.d.ts
deleted file mode 100644
index a53a04823bc40f2d9b81b6ed603a18b2b29c29e4..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/pipe.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { pipe } from "../fp";
-export = pipe;
diff --git a/jtg js/node_modules/@types/lodash/fp/placeholder.d.ts b/jtg js/node_modules/@types/lodash/fp/placeholder.d.ts
deleted file mode 100644
index ddaed8ed1b668b6d0320f7e19739e85c6c1d9dd2..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/placeholder.d.ts	
+++ /dev/null
@@ -1,3 +0,0 @@
-import _ = require("../index");
-declare const placeholder: _.__;
-export = placeholder;
diff --git a/jtg js/node_modules/@types/lodash/fp/pluck.d.ts b/jtg js/node_modules/@types/lodash/fp/pluck.d.ts
deleted file mode 100644
index c5c916f8141c84e8f0897a7b8f1565e58bc3c687..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/pluck.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { pluck } from "../fp";
-export = pluck;
diff --git a/jtg js/node_modules/@types/lodash/fp/prop.d.ts b/jtg js/node_modules/@types/lodash/fp/prop.d.ts
deleted file mode 100644
index f2061e7d61aea8823c79cbcf4d02cbb69effee70..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/prop.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { prop } from "../fp";
-export = prop;
diff --git a/jtg js/node_modules/@types/lodash/fp/propEq.d.ts b/jtg js/node_modules/@types/lodash/fp/propEq.d.ts
deleted file mode 100644
index 5e3f4b413fa75419ce9c68b105a706b290cfd3ba..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/propEq.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { propEq } from "../fp";
-export = propEq;
diff --git a/jtg js/node_modules/@types/lodash/fp/propOr.d.ts b/jtg js/node_modules/@types/lodash/fp/propOr.d.ts
deleted file mode 100644
index feabcf6e9500e02fb711e2da1888f3f7c999c67c..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/propOr.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { propOr } from "../fp";
-export = propOr;
diff --git a/jtg js/node_modules/@types/lodash/fp/property.d.ts b/jtg js/node_modules/@types/lodash/fp/property.d.ts
deleted file mode 100644
index aaa6c257111868cc8f13ff735fedf250e1c37b85..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/property.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { property } from "../fp";
-export = property;
diff --git a/jtg js/node_modules/@types/lodash/fp/propertyOf.d.ts b/jtg js/node_modules/@types/lodash/fp/propertyOf.d.ts
deleted file mode 100644
index a4d55130c6eda819e46f2216cf2be7ba2f9b28e9..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/propertyOf.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { propertyOf } from "../fp";
-export = propertyOf;
diff --git a/jtg js/node_modules/@types/lodash/fp/props.d.ts b/jtg js/node_modules/@types/lodash/fp/props.d.ts
deleted file mode 100644
index 46addba7ad064ac30cfed6e6c4363538c54e1525..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/props.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { props } from "../fp";
-export = props;
diff --git a/jtg js/node_modules/@types/lodash/fp/pull.d.ts b/jtg js/node_modules/@types/lodash/fp/pull.d.ts
deleted file mode 100644
index 801cf3377140c529ca1cf92dfce7c195b310622a..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/pull.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { pull } from "../fp";
-export = pull;
diff --git a/jtg js/node_modules/@types/lodash/fp/pullAll.d.ts b/jtg js/node_modules/@types/lodash/fp/pullAll.d.ts
deleted file mode 100644
index 042fe89ac199f339113c4de641a72b9ffb15afe8..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/pullAll.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { pullAll } from "../fp";
-export = pullAll;
diff --git a/jtg js/node_modules/@types/lodash/fp/pullAllBy.d.ts b/jtg js/node_modules/@types/lodash/fp/pullAllBy.d.ts
deleted file mode 100644
index 5e5de1fc0723ba1b64165bcf6b84b2e68f15581e..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/pullAllBy.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { pullAllBy } from "../fp";
-export = pullAllBy;
diff --git a/jtg js/node_modules/@types/lodash/fp/pullAllWith.d.ts b/jtg js/node_modules/@types/lodash/fp/pullAllWith.d.ts
deleted file mode 100644
index 0c448bf8c8c41fe4b975503f9a8850f80b6c93f9..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/pullAllWith.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { pullAllWith } from "../fp";
-export = pullAllWith;
diff --git a/jtg js/node_modules/@types/lodash/fp/pullAt.d.ts b/jtg js/node_modules/@types/lodash/fp/pullAt.d.ts
deleted file mode 100644
index 4bdffd993f2ff20a2bbe308bc49856e22117853d..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/pullAt.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { pullAt } from "../fp";
-export = pullAt;
diff --git a/jtg js/node_modules/@types/lodash/fp/random.d.ts b/jtg js/node_modules/@types/lodash/fp/random.d.ts
deleted file mode 100644
index a69555ca1676e0760f5fa3da6856a91e88a4b91a..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/random.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { random } from "../fp";
-export = random;
diff --git a/jtg js/node_modules/@types/lodash/fp/range.d.ts b/jtg js/node_modules/@types/lodash/fp/range.d.ts
deleted file mode 100644
index ace50ce46b2d3d79976e55b0dfdaf17c5a5f6865..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/range.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { range } from "../fp";
-export = range;
diff --git a/jtg js/node_modules/@types/lodash/fp/rangeRight.d.ts b/jtg js/node_modules/@types/lodash/fp/rangeRight.d.ts
deleted file mode 100644
index 20c8baefaab8ef771e58b7671ec39550f9655a85..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/rangeRight.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { rangeRight } from "../fp";
-export = rangeRight;
diff --git a/jtg js/node_modules/@types/lodash/fp/rangeStep.d.ts b/jtg js/node_modules/@types/lodash/fp/rangeStep.d.ts
deleted file mode 100644
index e5f4c891ce064a3c31b371d9705a96b7ba60cae8..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/rangeStep.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { rangeStep } from "../fp";
-export = rangeStep;
diff --git a/jtg js/node_modules/@types/lodash/fp/rangeStepRight.d.ts b/jtg js/node_modules/@types/lodash/fp/rangeStepRight.d.ts
deleted file mode 100644
index 6c7add468d861bd90f0416fd3c9737c713de3571..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/rangeStepRight.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { rangeStepRight } from "../fp";
-export = rangeStepRight;
diff --git a/jtg js/node_modules/@types/lodash/fp/rearg.d.ts b/jtg js/node_modules/@types/lodash/fp/rearg.d.ts
deleted file mode 100644
index 5c407d13a48fb8573d9c1381efb8b448dbfeaaac..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/rearg.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { rearg } from "../fp";
-export = rearg;
diff --git a/jtg js/node_modules/@types/lodash/fp/reduce.d.ts b/jtg js/node_modules/@types/lodash/fp/reduce.d.ts
deleted file mode 100644
index e262f393708273bd1ae1bb5681604f2dedb60c7a..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/reduce.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { reduce } from "../fp";
-export = reduce;
diff --git a/jtg js/node_modules/@types/lodash/fp/reduceRight.d.ts b/jtg js/node_modules/@types/lodash/fp/reduceRight.d.ts
deleted file mode 100644
index fa54fa3a5e934d4d1e776b4282e55131928ccd38..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/reduceRight.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { reduceRight } from "../fp";
-export = reduceRight;
diff --git a/jtg js/node_modules/@types/lodash/fp/reject.d.ts b/jtg js/node_modules/@types/lodash/fp/reject.d.ts
deleted file mode 100644
index d0a12af9635569a83c90f58513221154e9f32a00..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/reject.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { reject } from "../fp";
-export = reject;
diff --git a/jtg js/node_modules/@types/lodash/fp/remove.d.ts b/jtg js/node_modules/@types/lodash/fp/remove.d.ts
deleted file mode 100644
index e0da9b147c269bde054c7a153f15e28f6925d3be..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/remove.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { remove } from "../fp";
-export = remove;
diff --git a/jtg js/node_modules/@types/lodash/fp/repeat.d.ts b/jtg js/node_modules/@types/lodash/fp/repeat.d.ts
deleted file mode 100644
index 1f757a277867bbf6850956513dd7062069a99ecc..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/repeat.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { repeat } from "../fp";
-export = repeat;
diff --git a/jtg js/node_modules/@types/lodash/fp/replace.d.ts b/jtg js/node_modules/@types/lodash/fp/replace.d.ts
deleted file mode 100644
index c7a75d1fa1e86f233e08d34477c26220aafc6173..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/replace.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { replace } from "../fp";
-export = replace;
diff --git a/jtg js/node_modules/@types/lodash/fp/rest.d.ts b/jtg js/node_modules/@types/lodash/fp/rest.d.ts
deleted file mode 100644
index b059d673e1a9b7e83515ac5f8ef86d19ea93c90d..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/rest.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { rest } from "../fp";
-export = rest;
diff --git a/jtg js/node_modules/@types/lodash/fp/restFrom.d.ts b/jtg js/node_modules/@types/lodash/fp/restFrom.d.ts
deleted file mode 100644
index 218edbd5a38c7fc1b4c03c506fecf0450cdf0e94..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/restFrom.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { restFrom } from "../fp";
-export = restFrom;
diff --git a/jtg js/node_modules/@types/lodash/fp/result.d.ts b/jtg js/node_modules/@types/lodash/fp/result.d.ts
deleted file mode 100644
index 5a919dd45583fca681e2c9eb0d193c30e97bd578..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/result.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { result } from "../fp";
-export = result;
diff --git a/jtg js/node_modules/@types/lodash/fp/reverse.d.ts b/jtg js/node_modules/@types/lodash/fp/reverse.d.ts
deleted file mode 100644
index f754d6aac6e1305ca176edf3c46a737eafaeab89..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/reverse.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { reverse } from "../fp";
-export = reverse;
diff --git a/jtg js/node_modules/@types/lodash/fp/round.d.ts b/jtg js/node_modules/@types/lodash/fp/round.d.ts
deleted file mode 100644
index 02f4e6f300e09fc40f2110386e318b4774ff17fe..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/round.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { round } from "../fp";
-export = round;
diff --git a/jtg js/node_modules/@types/lodash/fp/runInContext.d.ts b/jtg js/node_modules/@types/lodash/fp/runInContext.d.ts
deleted file mode 100644
index 6041db7053584b1d16f1e214c8e4e6945bf836ae..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/runInContext.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { runInContext } from "../fp";
-export = runInContext;
diff --git a/jtg js/node_modules/@types/lodash/fp/sample.d.ts b/jtg js/node_modules/@types/lodash/fp/sample.d.ts
deleted file mode 100644
index f2fcf1ac03275ea28976dee79b6453908ff40c64..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/sample.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { sample } from "../fp";
-export = sample;
diff --git a/jtg js/node_modules/@types/lodash/fp/sampleSize.d.ts b/jtg js/node_modules/@types/lodash/fp/sampleSize.d.ts
deleted file mode 100644
index 41a3cabf92412a852919f8c4cbeb7c8de8ce602e..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/sampleSize.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { sampleSize } from "../fp";
-export = sampleSize;
diff --git a/jtg js/node_modules/@types/lodash/fp/set.d.ts b/jtg js/node_modules/@types/lodash/fp/set.d.ts
deleted file mode 100644
index 57960cba78080a88ed44cbf7d62d6392e891dd62..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/set.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { set } from "../fp";
-export = set;
diff --git a/jtg js/node_modules/@types/lodash/fp/setWith.d.ts b/jtg js/node_modules/@types/lodash/fp/setWith.d.ts
deleted file mode 100644
index 800a49429ca62f12625cf12fa27cfdc8a0ed6795..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/setWith.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { setWith } from "../fp";
-export = setWith;
diff --git a/jtg js/node_modules/@types/lodash/fp/shuffle.d.ts b/jtg js/node_modules/@types/lodash/fp/shuffle.d.ts
deleted file mode 100644
index 7f07282642ef35624a5b0b3a5c1c4999b244068c..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/shuffle.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { shuffle } from "../fp";
-export = shuffle;
diff --git a/jtg js/node_modules/@types/lodash/fp/size.d.ts b/jtg js/node_modules/@types/lodash/fp/size.d.ts
deleted file mode 100644
index 657c8b7c208bb56220ea2632aebfac002f9780af..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/size.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { size } from "../fp";
-export = size;
diff --git a/jtg js/node_modules/@types/lodash/fp/slice.d.ts b/jtg js/node_modules/@types/lodash/fp/slice.d.ts
deleted file mode 100644
index fabbbe0eebdb9001d7c70f5a30caaa29239aea26..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/slice.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { slice } from "../fp";
-export = slice;
diff --git a/jtg js/node_modules/@types/lodash/fp/snakeCase.d.ts b/jtg js/node_modules/@types/lodash/fp/snakeCase.d.ts
deleted file mode 100644
index a06ac452feb4ab3d46d3125d5355503363fec2dd..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/snakeCase.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { snakeCase } from "../fp";
-export = snakeCase;
diff --git a/jtg js/node_modules/@types/lodash/fp/some.d.ts b/jtg js/node_modules/@types/lodash/fp/some.d.ts
deleted file mode 100644
index 870b23160d3ba5f98c77c06836b0a3485b4dd27b..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/some.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { some } from "../fp";
-export = some;
diff --git a/jtg js/node_modules/@types/lodash/fp/sortBy.d.ts b/jtg js/node_modules/@types/lodash/fp/sortBy.d.ts
deleted file mode 100644
index 72c5799b3675e94f07c89bb36e63a483b5ecede2..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/sortBy.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { sortBy } from "../fp";
-export = sortBy;
diff --git a/jtg js/node_modules/@types/lodash/fp/sortedIndex.d.ts b/jtg js/node_modules/@types/lodash/fp/sortedIndex.d.ts
deleted file mode 100644
index 35b57feed23466fcb45a9e8120473ad8dac9592b..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/sortedIndex.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { sortedIndex } from "../fp";
-export = sortedIndex;
diff --git a/jtg js/node_modules/@types/lodash/fp/sortedIndexBy.d.ts b/jtg js/node_modules/@types/lodash/fp/sortedIndexBy.d.ts
deleted file mode 100644
index f6968df69174a3c1ba258dfd65f6198fd916fa80..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/sortedIndexBy.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { sortedIndexBy } from "../fp";
-export = sortedIndexBy;
diff --git a/jtg js/node_modules/@types/lodash/fp/sortedIndexOf.d.ts b/jtg js/node_modules/@types/lodash/fp/sortedIndexOf.d.ts
deleted file mode 100644
index beeb6db0ca49861cbe4d27c34263bfbad8a359b5..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/sortedIndexOf.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { sortedIndexOf } from "../fp";
-export = sortedIndexOf;
diff --git a/jtg js/node_modules/@types/lodash/fp/sortedLastIndex.d.ts b/jtg js/node_modules/@types/lodash/fp/sortedLastIndex.d.ts
deleted file mode 100644
index eea77a0382b7a78a05a94af2e723be2a254c09f3..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/sortedLastIndex.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { sortedLastIndex } from "../fp";
-export = sortedLastIndex;
diff --git a/jtg js/node_modules/@types/lodash/fp/sortedLastIndexBy.d.ts b/jtg js/node_modules/@types/lodash/fp/sortedLastIndexBy.d.ts
deleted file mode 100644
index 6c8e4ee54533efa41a496867f7d19a94fe5e184d..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/sortedLastIndexBy.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { sortedLastIndexBy } from "../fp";
-export = sortedLastIndexBy;
diff --git a/jtg js/node_modules/@types/lodash/fp/sortedLastIndexOf.d.ts b/jtg js/node_modules/@types/lodash/fp/sortedLastIndexOf.d.ts
deleted file mode 100644
index a02caf3ce57df2a3d28e7a68fdc731fc53140655..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/sortedLastIndexOf.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { sortedLastIndexOf } from "../fp";
-export = sortedLastIndexOf;
diff --git a/jtg js/node_modules/@types/lodash/fp/sortedUniq.d.ts b/jtg js/node_modules/@types/lodash/fp/sortedUniq.d.ts
deleted file mode 100644
index 03d8e691e0abaaa1487822c3eec6e1d6cf5a509a..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/sortedUniq.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { sortedUniq } from "../fp";
-export = sortedUniq;
diff --git a/jtg js/node_modules/@types/lodash/fp/sortedUniqBy.d.ts b/jtg js/node_modules/@types/lodash/fp/sortedUniqBy.d.ts
deleted file mode 100644
index 466981a264f64369b79491246effbf147f004c4f..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/sortedUniqBy.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { sortedUniqBy } from "../fp";
-export = sortedUniqBy;
diff --git a/jtg js/node_modules/@types/lodash/fp/split.d.ts b/jtg js/node_modules/@types/lodash/fp/split.d.ts
deleted file mode 100644
index 8274d4081f34c7fe41f229cb7e3bae2f6a889444..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/split.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { split } from "../fp";
-export = split;
diff --git a/jtg js/node_modules/@types/lodash/fp/spread.d.ts b/jtg js/node_modules/@types/lodash/fp/spread.d.ts
deleted file mode 100644
index 44eb90cd21ec88e8b34f419dd2623fe7d0d1677a..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/spread.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { spread } from "../fp";
-export = spread;
diff --git a/jtg js/node_modules/@types/lodash/fp/spreadFrom.d.ts b/jtg js/node_modules/@types/lodash/fp/spreadFrom.d.ts
deleted file mode 100644
index 7eb840b036d645f45d0a737c7b5f721039bb4ba4..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/spreadFrom.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { spreadFrom } from "../fp";
-export = spreadFrom;
diff --git a/jtg js/node_modules/@types/lodash/fp/startCase.d.ts b/jtg js/node_modules/@types/lodash/fp/startCase.d.ts
deleted file mode 100644
index 4f580aa5d0e6ce78f5d4cbd253c3817f7520fa5d..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/startCase.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { startCase } from "../fp";
-export = startCase;
diff --git a/jtg js/node_modules/@types/lodash/fp/startsWith.d.ts b/jtg js/node_modules/@types/lodash/fp/startsWith.d.ts
deleted file mode 100644
index f84397dc688a7dd3ecaa41fc4bfd286557c9e536..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/startsWith.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { startsWith } from "../fp";
-export = startsWith;
diff --git a/jtg js/node_modules/@types/lodash/fp/stubArray.d.ts b/jtg js/node_modules/@types/lodash/fp/stubArray.d.ts
deleted file mode 100644
index 8ff910e5919d60fd649792cb19750bb37f254ade..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/stubArray.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { stubArray } from "../fp";
-export = stubArray;
diff --git a/jtg js/node_modules/@types/lodash/fp/stubFalse.d.ts b/jtg js/node_modules/@types/lodash/fp/stubFalse.d.ts
deleted file mode 100644
index 4cc041482d89086f620efe68f249d3727786b662..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/stubFalse.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { stubFalse } from "../fp";
-export = stubFalse;
diff --git a/jtg js/node_modules/@types/lodash/fp/stubObject.d.ts b/jtg js/node_modules/@types/lodash/fp/stubObject.d.ts
deleted file mode 100644
index d7c826997fe6465b1d98d21ba368f2bc788ceb3e..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/stubObject.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { stubObject } from "../fp";
-export = stubObject;
diff --git a/jtg js/node_modules/@types/lodash/fp/stubString.d.ts b/jtg js/node_modules/@types/lodash/fp/stubString.d.ts
deleted file mode 100644
index cbfa449758be56fff44a14523c48acd55e5eeaed..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/stubString.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { stubString } from "../fp";
-export = stubString;
diff --git a/jtg js/node_modules/@types/lodash/fp/stubTrue.d.ts b/jtg js/node_modules/@types/lodash/fp/stubTrue.d.ts
deleted file mode 100644
index 0ed7e5b9276d5ae9f09ec6a9a3134b8d28e6f6ca..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/stubTrue.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { stubTrue } from "../fp";
-export = stubTrue;
diff --git a/jtg js/node_modules/@types/lodash/fp/subtract.d.ts b/jtg js/node_modules/@types/lodash/fp/subtract.d.ts
deleted file mode 100644
index 201301b300f0f56d5e54d81e26188584f3c4165e..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/subtract.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { subtract } from "../fp";
-export = subtract;
diff --git a/jtg js/node_modules/@types/lodash/fp/sum.d.ts b/jtg js/node_modules/@types/lodash/fp/sum.d.ts
deleted file mode 100644
index 6d7d02026ebfb6c28a98e989eae39e598d630587..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/sum.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { sum } from "../fp";
-export = sum;
diff --git a/jtg js/node_modules/@types/lodash/fp/sumBy.d.ts b/jtg js/node_modules/@types/lodash/fp/sumBy.d.ts
deleted file mode 100644
index 3f44c3f6c5095a90aa82f134139bf189f5da2e7b..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/sumBy.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { sumBy } from "../fp";
-export = sumBy;
diff --git a/jtg js/node_modules/@types/lodash/fp/symmetricDifference.d.ts b/jtg js/node_modules/@types/lodash/fp/symmetricDifference.d.ts
deleted file mode 100644
index cba1d1f70d42348dbf8753d682ae503f72a270c0..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/symmetricDifference.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { symmetricDifference } from "../fp";
-export = symmetricDifference;
diff --git a/jtg js/node_modules/@types/lodash/fp/symmetricDifferenceBy.d.ts b/jtg js/node_modules/@types/lodash/fp/symmetricDifferenceBy.d.ts
deleted file mode 100644
index 8e9316cf423d79be1ebbfdc6a795fd726a9d73b3..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/symmetricDifferenceBy.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { symmetricDifferenceBy } from "../fp";
-export = symmetricDifferenceBy;
diff --git a/jtg js/node_modules/@types/lodash/fp/symmetricDifferenceWith.d.ts b/jtg js/node_modules/@types/lodash/fp/symmetricDifferenceWith.d.ts
deleted file mode 100644
index 864ec01b503e7215aac2c271f59cb095d2084e65..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/symmetricDifferenceWith.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { symmetricDifferenceWith } from "../fp";
-export = symmetricDifferenceWith;
diff --git a/jtg js/node_modules/@types/lodash/fp/tail.d.ts b/jtg js/node_modules/@types/lodash/fp/tail.d.ts
deleted file mode 100644
index df9bcdcd57601577b6e13bb0527d7932f2f02ebc..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/tail.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { tail } from "../fp";
-export = tail;
diff --git a/jtg js/node_modules/@types/lodash/fp/take.d.ts b/jtg js/node_modules/@types/lodash/fp/take.d.ts
deleted file mode 100644
index ab46aca056dd98cfe648f85a4009c8f26b8de76b..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/take.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { take } from "../fp";
-export = take;
diff --git a/jtg js/node_modules/@types/lodash/fp/takeLast.d.ts b/jtg js/node_modules/@types/lodash/fp/takeLast.d.ts
deleted file mode 100644
index 027dcda5eeb5f1fb557d24f6d617a586584e61e3..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/takeLast.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { takeLast } from "../fp";
-export = takeLast;
diff --git a/jtg js/node_modules/@types/lodash/fp/takeLastWhile.d.ts b/jtg js/node_modules/@types/lodash/fp/takeLastWhile.d.ts
deleted file mode 100644
index c6729c3529ff5caf6051f8c8940ec22ae3c1fd71..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/takeLastWhile.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { takeLastWhile } from "../fp";
-export = takeLastWhile;
diff --git a/jtg js/node_modules/@types/lodash/fp/takeRight.d.ts b/jtg js/node_modules/@types/lodash/fp/takeRight.d.ts
deleted file mode 100644
index 162c5166e4a896c3d43ca96895a212b3c0d856b3..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/takeRight.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { takeRight } from "../fp";
-export = takeRight;
diff --git a/jtg js/node_modules/@types/lodash/fp/takeRightWhile.d.ts b/jtg js/node_modules/@types/lodash/fp/takeRightWhile.d.ts
deleted file mode 100644
index b23f7a46085c8d8b10a766b6612b665347f2b47e..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/takeRightWhile.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { takeRightWhile } from "../fp";
-export = takeRightWhile;
diff --git a/jtg js/node_modules/@types/lodash/fp/takeWhile.d.ts b/jtg js/node_modules/@types/lodash/fp/takeWhile.d.ts
deleted file mode 100644
index b8cb51760680b672ba43ac0f37797851f624e38c..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/takeWhile.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { takeWhile } from "../fp";
-export = takeWhile;
diff --git a/jtg js/node_modules/@types/lodash/fp/tap.d.ts b/jtg js/node_modules/@types/lodash/fp/tap.d.ts
deleted file mode 100644
index 8ffbbd7f23b9f52b5b21d43c22e5fea9571f0cb4..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/tap.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { tap } from "../fp";
-export = tap;
diff --git a/jtg js/node_modules/@types/lodash/fp/template.d.ts b/jtg js/node_modules/@types/lodash/fp/template.d.ts
deleted file mode 100644
index 3a37ed1af7febd23ad31451938a4059d4eba6c93..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/template.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { template } from "../fp";
-export = template;
diff --git a/jtg js/node_modules/@types/lodash/fp/throttle.d.ts b/jtg js/node_modules/@types/lodash/fp/throttle.d.ts
deleted file mode 100644
index 24d8b7f4efe3f49ec30180095cf6ff12d80f13a5..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/throttle.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { throttle } from "../fp";
-export = throttle;
diff --git a/jtg js/node_modules/@types/lodash/fp/thru.d.ts b/jtg js/node_modules/@types/lodash/fp/thru.d.ts
deleted file mode 100644
index b9725820ad1909b51f6a1656e882aa6c01c5a2e2..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/thru.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { thru } from "../fp";
-export = thru;
diff --git a/jtg js/node_modules/@types/lodash/fp/times.d.ts b/jtg js/node_modules/@types/lodash/fp/times.d.ts
deleted file mode 100644
index 3d9f0c6077ddbd221740c849db8199a78f452bbe..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/times.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { times } from "../fp";
-export = times;
diff --git a/jtg js/node_modules/@types/lodash/fp/toArray.d.ts b/jtg js/node_modules/@types/lodash/fp/toArray.d.ts
deleted file mode 100644
index 4b18ce6d55c06d5bf554b75839ea0a07dc257628..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/toArray.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { toArray } from "../fp";
-export = toArray;
diff --git a/jtg js/node_modules/@types/lodash/fp/toFinite.d.ts b/jtg js/node_modules/@types/lodash/fp/toFinite.d.ts
deleted file mode 100644
index 1d41996182eadc7b67d21a3c8b7c230a1be10e0c..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/toFinite.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { toFinite } from "../fp";
-export = toFinite;
diff --git a/jtg js/node_modules/@types/lodash/fp/toInteger.d.ts b/jtg js/node_modules/@types/lodash/fp/toInteger.d.ts
deleted file mode 100644
index 46ccaf945b956442cc518b66570ba97789c1ee60..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/toInteger.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { toInteger } from "../fp";
-export = toInteger;
diff --git a/jtg js/node_modules/@types/lodash/fp/toLength.d.ts b/jtg js/node_modules/@types/lodash/fp/toLength.d.ts
deleted file mode 100644
index bb629243180cf5c81849ca34be8e75b05305af60..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/toLength.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { toLength } from "../fp";
-export = toLength;
diff --git a/jtg js/node_modules/@types/lodash/fp/toLower.d.ts b/jtg js/node_modules/@types/lodash/fp/toLower.d.ts
deleted file mode 100644
index 64e6e364d0ad33040a7d0fd7ab1ef0b61bfe289d..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/toLower.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { toLower } from "../fp";
-export = toLower;
diff --git a/jtg js/node_modules/@types/lodash/fp/toNumber.d.ts b/jtg js/node_modules/@types/lodash/fp/toNumber.d.ts
deleted file mode 100644
index 262b91c52d2de454307e8d7e8403784295952fad..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/toNumber.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { toNumber } from "../fp";
-export = toNumber;
diff --git a/jtg js/node_modules/@types/lodash/fp/toPairs.d.ts b/jtg js/node_modules/@types/lodash/fp/toPairs.d.ts
deleted file mode 100644
index 89334fcb5d113bd8124ba36076bf53ddc6fa07f7..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/toPairs.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { toPairs } from "../fp";
-export = toPairs;
diff --git a/jtg js/node_modules/@types/lodash/fp/toPairsIn.d.ts b/jtg js/node_modules/@types/lodash/fp/toPairsIn.d.ts
deleted file mode 100644
index 278ff0b1dfa93e6ce90d3b2fe77a8015c3afda44..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/toPairsIn.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { toPairsIn } from "../fp";
-export = toPairsIn;
diff --git a/jtg js/node_modules/@types/lodash/fp/toPath.d.ts b/jtg js/node_modules/@types/lodash/fp/toPath.d.ts
deleted file mode 100644
index 9f2287ceae8ab039006758b83e0579578bbb8ee8..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/toPath.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { toPath } from "../fp";
-export = toPath;
diff --git a/jtg js/node_modules/@types/lodash/fp/toPlainObject.d.ts b/jtg js/node_modules/@types/lodash/fp/toPlainObject.d.ts
deleted file mode 100644
index 22fa070387080bc9a9cec8a0f99fcf7f18243102..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/toPlainObject.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { toPlainObject } from "../fp";
-export = toPlainObject;
diff --git a/jtg js/node_modules/@types/lodash/fp/toSafeInteger.d.ts b/jtg js/node_modules/@types/lodash/fp/toSafeInteger.d.ts
deleted file mode 100644
index 2f85078fcbbeb4c94141d6edd6b0d071dc9cec42..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/toSafeInteger.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { toSafeInteger } from "../fp";
-export = toSafeInteger;
diff --git a/jtg js/node_modules/@types/lodash/fp/toString.d.ts b/jtg js/node_modules/@types/lodash/fp/toString.d.ts
deleted file mode 100644
index ee6703c068ba4e1b1ce5225924696363789d9d2b..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/toString.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { toString } from "../fp";
-export = toString;
diff --git a/jtg js/node_modules/@types/lodash/fp/toUpper.d.ts b/jtg js/node_modules/@types/lodash/fp/toUpper.d.ts
deleted file mode 100644
index 6bf21c1fcef2f220d8b77b739631c4389c9ee7c2..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/toUpper.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { toUpper } from "../fp";
-export = toUpper;
diff --git a/jtg js/node_modules/@types/lodash/fp/transform.d.ts b/jtg js/node_modules/@types/lodash/fp/transform.d.ts
deleted file mode 100644
index ab0653cb7cac98003702f9a9181a2f3be10ff7d4..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/transform.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { transform } from "../fp";
-export = transform;
diff --git a/jtg js/node_modules/@types/lodash/fp/trim.d.ts b/jtg js/node_modules/@types/lodash/fp/trim.d.ts
deleted file mode 100644
index f0f9b905d068518d139f380e2002a68b938a219b..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/trim.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { trim } from "../fp";
-export = trim;
diff --git a/jtg js/node_modules/@types/lodash/fp/trimChars.d.ts b/jtg js/node_modules/@types/lodash/fp/trimChars.d.ts
deleted file mode 100644
index 929a49300ea7ef433074fba0a394e9095f191a84..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/trimChars.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { trimChars } from "../fp";
-export = trimChars;
diff --git a/jtg js/node_modules/@types/lodash/fp/trimCharsEnd.d.ts b/jtg js/node_modules/@types/lodash/fp/trimCharsEnd.d.ts
deleted file mode 100644
index 2f5609ae2dd3d0810d440001df6e05466840f5f1..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/trimCharsEnd.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { trimCharsEnd } from "../fp";
-export = trimCharsEnd;
diff --git a/jtg js/node_modules/@types/lodash/fp/trimCharsStart.d.ts b/jtg js/node_modules/@types/lodash/fp/trimCharsStart.d.ts
deleted file mode 100644
index fb998f7e502297b2834c044156687f23db4bd9cc..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/trimCharsStart.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { trimCharsStart } from "../fp";
-export = trimCharsStart;
diff --git a/jtg js/node_modules/@types/lodash/fp/trimEnd.d.ts b/jtg js/node_modules/@types/lodash/fp/trimEnd.d.ts
deleted file mode 100644
index b6664944837e4ed65d267cd97546dc1276d12d83..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/trimEnd.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { trimEnd } from "../fp";
-export = trimEnd;
diff --git a/jtg js/node_modules/@types/lodash/fp/trimStart.d.ts b/jtg js/node_modules/@types/lodash/fp/trimStart.d.ts
deleted file mode 100644
index 988227ca74be5ca5b2b036cf60da8b00a2593990..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/trimStart.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { trimStart } from "../fp";
-export = trimStart;
diff --git a/jtg js/node_modules/@types/lodash/fp/truncate.d.ts b/jtg js/node_modules/@types/lodash/fp/truncate.d.ts
deleted file mode 100644
index d38b7b18b6945e507a82e353125e44b5794b976f..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/truncate.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { truncate } from "../fp";
-export = truncate;
diff --git a/jtg js/node_modules/@types/lodash/fp/unapply.d.ts b/jtg js/node_modules/@types/lodash/fp/unapply.d.ts
deleted file mode 100644
index c59b6b2a19ebda42f841219ba8685b7c72f487f1..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/unapply.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { unapply } from "../fp";
-export = unapply;
diff --git a/jtg js/node_modules/@types/lodash/fp/unary.d.ts b/jtg js/node_modules/@types/lodash/fp/unary.d.ts
deleted file mode 100644
index 02e319576a7ceb4b2cb3cd9c7b42efbbff0ea8b7..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/unary.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { unary } from "../fp";
-export = unary;
diff --git a/jtg js/node_modules/@types/lodash/fp/unescape.d.ts b/jtg js/node_modules/@types/lodash/fp/unescape.d.ts
deleted file mode 100644
index efcccf2a513ac333385eedc875070383f2e6a1d5..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/unescape.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { unescape } from "../fp";
-export = unescape;
diff --git a/jtg js/node_modules/@types/lodash/fp/union.d.ts b/jtg js/node_modules/@types/lodash/fp/union.d.ts
deleted file mode 100644
index 8e098ee7f618e3de63755ea47e7a84c9a7fad719..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/union.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { union } from "../fp";
-export = union;
diff --git a/jtg js/node_modules/@types/lodash/fp/unionBy.d.ts b/jtg js/node_modules/@types/lodash/fp/unionBy.d.ts
deleted file mode 100644
index f3882c6b4a3e84bb82c76aefc64136428527ce1e..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/unionBy.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { unionBy } from "../fp";
-export = unionBy;
diff --git a/jtg js/node_modules/@types/lodash/fp/unionWith.d.ts b/jtg js/node_modules/@types/lodash/fp/unionWith.d.ts
deleted file mode 100644
index 46e19fd17669d897efef1fb8b275fbeceb0a407a..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/unionWith.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { unionWith } from "../fp";
-export = unionWith;
diff --git a/jtg js/node_modules/@types/lodash/fp/uniq.d.ts b/jtg js/node_modules/@types/lodash/fp/uniq.d.ts
deleted file mode 100644
index 877d0d94d91d220594d10b9705bacd94bb68784d..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/uniq.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { uniq } from "../fp";
-export = uniq;
diff --git a/jtg js/node_modules/@types/lodash/fp/uniqBy.d.ts b/jtg js/node_modules/@types/lodash/fp/uniqBy.d.ts
deleted file mode 100644
index 0e6522d70434e7e88053efd929d856790fd2e332..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/uniqBy.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { uniqBy } from "../fp";
-export = uniqBy;
diff --git a/jtg js/node_modules/@types/lodash/fp/uniqWith.d.ts b/jtg js/node_modules/@types/lodash/fp/uniqWith.d.ts
deleted file mode 100644
index 165f45f1e3452562d6b8fc08ae4604159d4cef62..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/uniqWith.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { uniqWith } from "../fp";
-export = uniqWith;
diff --git a/jtg js/node_modules/@types/lodash/fp/uniqueId.d.ts b/jtg js/node_modules/@types/lodash/fp/uniqueId.d.ts
deleted file mode 100644
index 57736d9ccd846be42f6235f68c11ff67c2c359d5..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/uniqueId.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { uniqueId } from "../fp";
-export = uniqueId;
diff --git a/jtg js/node_modules/@types/lodash/fp/unnest.d.ts b/jtg js/node_modules/@types/lodash/fp/unnest.d.ts
deleted file mode 100644
index 852e9a13677acd4b25bfe78e58e58c40935a0cfd..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/unnest.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { unnest } from "../fp";
-export = unnest;
diff --git a/jtg js/node_modules/@types/lodash/fp/unset.d.ts b/jtg js/node_modules/@types/lodash/fp/unset.d.ts
deleted file mode 100644
index 3e992477142b6ecb707b52066012b6d06d488138..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/unset.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { unset } from "../fp";
-export = unset;
diff --git a/jtg js/node_modules/@types/lodash/fp/unzip.d.ts b/jtg js/node_modules/@types/lodash/fp/unzip.d.ts
deleted file mode 100644
index ba9d4cd709525a94c6691e61203eeff7975a45d4..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/unzip.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { unzip } from "../fp";
-export = unzip;
diff --git a/jtg js/node_modules/@types/lodash/fp/unzipWith.d.ts b/jtg js/node_modules/@types/lodash/fp/unzipWith.d.ts
deleted file mode 100644
index 599eadb355c7d35e295490ee98cb1ce61f0c80c0..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/unzipWith.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { unzipWith } from "../fp";
-export = unzipWith;
diff --git a/jtg js/node_modules/@types/lodash/fp/update.d.ts b/jtg js/node_modules/@types/lodash/fp/update.d.ts
deleted file mode 100644
index 76dfe482f8b04ce81582a9c73f39f57a377bfbfe..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/update.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { update } from "../fp";
-export = update;
diff --git a/jtg js/node_modules/@types/lodash/fp/updateWith.d.ts b/jtg js/node_modules/@types/lodash/fp/updateWith.d.ts
deleted file mode 100644
index 6d6331d1b590c9ec06c0c7ad385d34e25aeff4c5..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/updateWith.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { updateWith } from "../fp";
-export = updateWith;
diff --git a/jtg js/node_modules/@types/lodash/fp/upperCase.d.ts b/jtg js/node_modules/@types/lodash/fp/upperCase.d.ts
deleted file mode 100644
index 10aadb28ec0152e1560cb9f3d00f506bae2678a9..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/upperCase.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { upperCase } from "../fp";
-export = upperCase;
diff --git a/jtg js/node_modules/@types/lodash/fp/upperFirst.d.ts b/jtg js/node_modules/@types/lodash/fp/upperFirst.d.ts
deleted file mode 100644
index e2c9adfd57de4bc28b9bce7c9c71e43047bb9456..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/upperFirst.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { upperFirst } from "../fp";
-export = upperFirst;
diff --git a/jtg js/node_modules/@types/lodash/fp/useWith.d.ts b/jtg js/node_modules/@types/lodash/fp/useWith.d.ts
deleted file mode 100644
index 991905a4025521726215f0994647f7a86edc0af5..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/useWith.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { useWith } from "../fp";
-export = useWith;
diff --git a/jtg js/node_modules/@types/lodash/fp/values.d.ts b/jtg js/node_modules/@types/lodash/fp/values.d.ts
deleted file mode 100644
index 75ec6fb4e569ab803b0165be191b5dc0b70ad470..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/values.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { values } from "../fp";
-export = values;
diff --git a/jtg js/node_modules/@types/lodash/fp/valuesIn.d.ts b/jtg js/node_modules/@types/lodash/fp/valuesIn.d.ts
deleted file mode 100644
index 6f4f3b43bbc676fafd138a74f159e08c9c3c76c1..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/valuesIn.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { valuesIn } from "../fp";
-export = valuesIn;
diff --git a/jtg js/node_modules/@types/lodash/fp/where.d.ts b/jtg js/node_modules/@types/lodash/fp/where.d.ts
deleted file mode 100644
index 41e21ec8ac8ebd13828af8aff93fe7e2d9396fc2..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/where.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { where } from "../fp";
-export = where;
diff --git a/jtg js/node_modules/@types/lodash/fp/whereEq.d.ts b/jtg js/node_modules/@types/lodash/fp/whereEq.d.ts
deleted file mode 100644
index 893316d62572bc0acb9d3683dd0b8859aced4f2e..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/whereEq.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { whereEq } from "../fp";
-export = whereEq;
diff --git a/jtg js/node_modules/@types/lodash/fp/without.d.ts b/jtg js/node_modules/@types/lodash/fp/without.d.ts
deleted file mode 100644
index 600890a40036c4930d4cd9977c38e62ca9f5bc3d..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/without.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { without } from "../fp";
-export = without;
diff --git a/jtg js/node_modules/@types/lodash/fp/words.d.ts b/jtg js/node_modules/@types/lodash/fp/words.d.ts
deleted file mode 100644
index 2b06b2636818d65994af5b308c38882d58cbce2c..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/words.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { words } from "../fp";
-export = words;
diff --git a/jtg js/node_modules/@types/lodash/fp/wrap.d.ts b/jtg js/node_modules/@types/lodash/fp/wrap.d.ts
deleted file mode 100644
index d9c2a283e2941ccafd7adaf2605d0afe3fa665d0..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/wrap.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { wrap } from "../fp";
-export = wrap;
diff --git a/jtg js/node_modules/@types/lodash/fp/xor.d.ts b/jtg js/node_modules/@types/lodash/fp/xor.d.ts
deleted file mode 100644
index ac69bde23650ff512d2b0439f314ee45f6ba28a4..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/xor.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { xor } from "../fp";
-export = xor;
diff --git a/jtg js/node_modules/@types/lodash/fp/xorBy.d.ts b/jtg js/node_modules/@types/lodash/fp/xorBy.d.ts
deleted file mode 100644
index 123297232306f08e9454442c7477b2b8037f2881..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/xorBy.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { xorBy } from "../fp";
-export = xorBy;
diff --git a/jtg js/node_modules/@types/lodash/fp/xorWith.d.ts b/jtg js/node_modules/@types/lodash/fp/xorWith.d.ts
deleted file mode 100644
index ec93e40b30cfbe09818fd4058eab4f670d25f25c..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/xorWith.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { xorWith } from "../fp";
-export = xorWith;
diff --git a/jtg js/node_modules/@types/lodash/fp/zip.d.ts b/jtg js/node_modules/@types/lodash/fp/zip.d.ts
deleted file mode 100644
index 2a83e733b698ac7eaae1762b644ac2035a4f3f8c..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/zip.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { zip } from "../fp";
-export = zip;
diff --git a/jtg js/node_modules/@types/lodash/fp/zipAll.d.ts b/jtg js/node_modules/@types/lodash/fp/zipAll.d.ts
deleted file mode 100644
index af0b3ed3f5c2efc311de3f0ed67e4bfcf4ec2668..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/zipAll.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { zipAll } from "../fp";
-export = zipAll;
diff --git a/jtg js/node_modules/@types/lodash/fp/zipObj.d.ts b/jtg js/node_modules/@types/lodash/fp/zipObj.d.ts
deleted file mode 100644
index 4f4c19a87d6a5123d89c07812528706e9e436111..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/zipObj.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { zipObj } from "../fp";
-export = zipObj;
diff --git a/jtg js/node_modules/@types/lodash/fp/zipObject.d.ts b/jtg js/node_modules/@types/lodash/fp/zipObject.d.ts
deleted file mode 100644
index f302d7b155bee4eb92f6da9e6f85dc725d59ca11..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/zipObject.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { zipObject } from "../fp";
-export = zipObject;
diff --git a/jtg js/node_modules/@types/lodash/fp/zipObjectDeep.d.ts b/jtg js/node_modules/@types/lodash/fp/zipObjectDeep.d.ts
deleted file mode 100644
index 601063489d97b1783a1a912eec63543feb99ffaa..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/zipObjectDeep.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { zipObjectDeep } from "../fp";
-export = zipObjectDeep;
diff --git a/jtg js/node_modules/@types/lodash/fp/zipWith.d.ts b/jtg js/node_modules/@types/lodash/fp/zipWith.d.ts
deleted file mode 100644
index 9faaf3c589768757bd78eacaf4c03699d5ab2b78..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fp/zipWith.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { zipWith } from "../fp";
-export = zipWith;
diff --git a/jtg js/node_modules/@types/lodash/fromPairs.d.ts b/jtg js/node_modules/@types/lodash/fromPairs.d.ts
deleted file mode 100644
index 1c2006c63d970d92f82352d93fb34906ee8d0244..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/fromPairs.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { fromPairs } from "./index";
-export = fromPairs;
diff --git a/jtg js/node_modules/@types/lodash/functions.d.ts b/jtg js/node_modules/@types/lodash/functions.d.ts
deleted file mode 100644
index 86983361a4b62b9d173afb3c5d86efe062d68dbb..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/functions.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { functions } from "./index";
-export = functions;
diff --git a/jtg js/node_modules/@types/lodash/functionsIn.d.ts b/jtg js/node_modules/@types/lodash/functionsIn.d.ts
deleted file mode 100644
index 9f72a78382cc6e738c86b6ef4dedcdf7d6865b82..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/functionsIn.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { functionsIn } from "./index";
-export = functionsIn;
diff --git a/jtg js/node_modules/@types/lodash/get.d.ts b/jtg js/node_modules/@types/lodash/get.d.ts
deleted file mode 100644
index 5ea7a5a41c6128c6b01d2df22a5098884255260e..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/get.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { get } from "./index";
-export = get;
diff --git a/jtg js/node_modules/@types/lodash/groupBy.d.ts b/jtg js/node_modules/@types/lodash/groupBy.d.ts
deleted file mode 100644
index ef49718e57bb27da05f33533779ce035e0f32134..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/groupBy.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { groupBy } from "./index";
-export = groupBy;
diff --git a/jtg js/node_modules/@types/lodash/gt.d.ts b/jtg js/node_modules/@types/lodash/gt.d.ts
deleted file mode 100644
index 860134fbea1d4736c86ee6bc5dda108afa66b629..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/gt.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { gt } from "./index";
-export = gt;
diff --git a/jtg js/node_modules/@types/lodash/gte.d.ts b/jtg js/node_modules/@types/lodash/gte.d.ts
deleted file mode 100644
index 994e882646851cd8d709b324f0dbe7747671fe38..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/gte.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { gte } from "./index";
-export = gte;
diff --git a/jtg js/node_modules/@types/lodash/has.d.ts b/jtg js/node_modules/@types/lodash/has.d.ts
deleted file mode 100644
index fff14686936a2a43ebbefee962440dceedce1dad..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/has.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { has } from "./index";
-export = has;
diff --git a/jtg js/node_modules/@types/lodash/hasIn.d.ts b/jtg js/node_modules/@types/lodash/hasIn.d.ts
deleted file mode 100644
index a898071b1693f0ebd9e766c4b36f5ab14203cbc5..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/hasIn.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { hasIn } from "./index";
-export = hasIn;
diff --git a/jtg js/node_modules/@types/lodash/head.d.ts b/jtg js/node_modules/@types/lodash/head.d.ts
deleted file mode 100644
index 0e16da17117dac91684aeeeb2ffb018bdf3882e3..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/head.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { head } from "./index";
-export = head;
diff --git a/jtg js/node_modules/@types/lodash/identity.d.ts b/jtg js/node_modules/@types/lodash/identity.d.ts
deleted file mode 100644
index 6814a16538b8f7ee679f11e2822a0dc7dd5e5b71..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/identity.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { identity } from "./index";
-export = identity;
diff --git a/jtg js/node_modules/@types/lodash/inRange.d.ts b/jtg js/node_modules/@types/lodash/inRange.d.ts
deleted file mode 100644
index d9c57c0e8f8c7d02a86d6132479bb07c6de47ef7..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/inRange.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { inRange } from "./index";
-export = inRange;
diff --git a/jtg js/node_modules/@types/lodash/includes.d.ts b/jtg js/node_modules/@types/lodash/includes.d.ts
deleted file mode 100644
index 4edd22619fc14fbd122d97b114eb7f661044364a..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/includes.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { includes } from "./index";
-export = includes;
diff --git a/jtg js/node_modules/@types/lodash/index.d.ts b/jtg js/node_modules/@types/lodash/index.d.ts
deleted file mode 100644
index 67e9c8f0cb8c482ff2b356a6e165af6e22ee455d..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/index.d.ts	
+++ /dev/null
@@ -1,47 +0,0 @@
-// Type definitions for Lo-Dash 4.14
-// Project: http://lodash.com/
-// Definitions by: Brian Zengel <https://github.com/bczengel>,
-//                 Ilya Mochalov <https://github.com/chrootsu>,
-//                 Stepan Mikhaylyuk <https://github.com/stepancar>,
-//                 AJ Richardson <https://github.com/aj-r>,
-//                 Junyoung Clare Jang <https://github.com/ailrun>,
-//                 e-cloud <https://github.com/e-cloud>,
-//                 Georgii Dolzhykov <https://github.com/thorn0>,
-//                 Jack Moore <https://github.com/jtmthf>,
-//                 Dominique Rau <https://github.com/DomiR>
-// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
-// TypeScript Version: 2.2
-
-/// <reference path="./common/common.d.ts" />
-/// <reference path="./common/array.d.ts" />
-/// <reference path="./common/collection.d.ts" />
-/// <reference path="./common/date.d.ts" />
-/// <reference path="./common/function.d.ts" />
-/// <reference path="./common/lang.d.ts" />
-/// <reference path="./common/math.d.ts" />
-/// <reference path="./common/number.d.ts" />
-/// <reference path="./common/object.d.ts" />
-/// <reference path="./common/seq.d.ts" />
-/// <reference path="./common/string.d.ts" />
-/// <reference path="./common/util.d.ts" />
-
-export = _;
-export as namespace _;
-
-declare const _: _.LoDashStatic;
-declare namespace _ {
-    // tslint:disable-next-line no-empty-interface (This will be augmented)
-    interface LoDashStatic {}
-}
-
-// Backward compatibility with --target es5
-declare global {
-    // tslint:disable-next-line:no-empty-interface
-    interface Set<T> { }
-    // tslint:disable-next-line:no-empty-interface
-    interface Map<K, V> { }
-    // tslint:disable-next-line:no-empty-interface
-    interface WeakSet<T> { }
-    // tslint:disable-next-line:no-empty-interface
-    interface WeakMap<K extends object, V> { }
-}
diff --git a/jtg js/node_modules/@types/lodash/indexOf.d.ts b/jtg js/node_modules/@types/lodash/indexOf.d.ts
deleted file mode 100644
index 50b8f702c9a9ddfc5992c75d374774860a75fc68..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/indexOf.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { indexOf } from "./index";
-export = indexOf;
diff --git a/jtg js/node_modules/@types/lodash/initial.d.ts b/jtg js/node_modules/@types/lodash/initial.d.ts
deleted file mode 100644
index 3ce64ebc02a9c994d2b560c8f3e5d8cf5d96f8e5..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/initial.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { initial } from "./index";
-export = initial;
diff --git a/jtg js/node_modules/@types/lodash/intersection.d.ts b/jtg js/node_modules/@types/lodash/intersection.d.ts
deleted file mode 100644
index 1fbe4e59652116e8994c878373faf27866e020c8..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/intersection.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { intersection } from "./index";
-export = intersection;
diff --git a/jtg js/node_modules/@types/lodash/intersectionBy.d.ts b/jtg js/node_modules/@types/lodash/intersectionBy.d.ts
deleted file mode 100644
index b4885da5e13b5ad0aaf2287d6b9f727c830a37c1..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/intersectionBy.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { intersectionBy } from "./index";
-export = intersectionBy;
diff --git a/jtg js/node_modules/@types/lodash/intersectionWith.d.ts b/jtg js/node_modules/@types/lodash/intersectionWith.d.ts
deleted file mode 100644
index bacccd045a4038a7e3d8cb1a2d848df4190f00c7..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/intersectionWith.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { intersectionWith } from "./index";
-export = intersectionWith;
diff --git a/jtg js/node_modules/@types/lodash/invert.d.ts b/jtg js/node_modules/@types/lodash/invert.d.ts
deleted file mode 100644
index 2287ea1f935f0d6e3d3d8b5d33d8f1763b432ab8..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/invert.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { invert } from "./index";
-export = invert;
diff --git a/jtg js/node_modules/@types/lodash/invertBy.d.ts b/jtg js/node_modules/@types/lodash/invertBy.d.ts
deleted file mode 100644
index 5951600e23be5240dcaef3ed79e85e13e2e030e0..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/invertBy.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { invertBy } from "./index";
-export = invertBy;
diff --git a/jtg js/node_modules/@types/lodash/invoke.d.ts b/jtg js/node_modules/@types/lodash/invoke.d.ts
deleted file mode 100644
index eea6b3888f2cf3fe4ec84c9f9a4ea65e9610825b..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/invoke.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { invoke } from "./index";
-export = invoke;
diff --git a/jtg js/node_modules/@types/lodash/invokeMap.d.ts b/jtg js/node_modules/@types/lodash/invokeMap.d.ts
deleted file mode 100644
index 814cf05fdd9dcfab30ac554fdc7110bd74574bd0..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/invokeMap.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { invokeMap } from "./index";
-export = invokeMap;
diff --git a/jtg js/node_modules/@types/lodash/isArguments.d.ts b/jtg js/node_modules/@types/lodash/isArguments.d.ts
deleted file mode 100644
index 5b225723132465d09ca98e071c129d6570b69065..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/isArguments.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isArguments } from "./index";
-export = isArguments;
diff --git a/jtg js/node_modules/@types/lodash/isArray.d.ts b/jtg js/node_modules/@types/lodash/isArray.d.ts
deleted file mode 100644
index a35ab5a629e010950ba25f3ddf1d2be968b59c01..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/isArray.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isArray } from "./index";
-export = isArray;
diff --git a/jtg js/node_modules/@types/lodash/isArrayBuffer.d.ts b/jtg js/node_modules/@types/lodash/isArrayBuffer.d.ts
deleted file mode 100644
index ec7c68ce2cd1040caea1f29351d17086deb4cad7..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/isArrayBuffer.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isArrayBuffer } from "./index";
-export = isArrayBuffer;
diff --git a/jtg js/node_modules/@types/lodash/isArrayLike.d.ts b/jtg js/node_modules/@types/lodash/isArrayLike.d.ts
deleted file mode 100644
index aa95c770064b0342536d2c170333d92ac322ef60..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/isArrayLike.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isArrayLike } from "./index";
-export = isArrayLike;
diff --git a/jtg js/node_modules/@types/lodash/isArrayLikeObject.d.ts b/jtg js/node_modules/@types/lodash/isArrayLikeObject.d.ts
deleted file mode 100644
index 736c91db1dc372bb473273be199a9febcb6b54a4..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/isArrayLikeObject.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isArrayLikeObject } from "./index";
-export = isArrayLikeObject;
diff --git a/jtg js/node_modules/@types/lodash/isBoolean.d.ts b/jtg js/node_modules/@types/lodash/isBoolean.d.ts
deleted file mode 100644
index 96c306d9cce61ac43387634d9d54248b4ed1497e..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/isBoolean.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isBoolean } from "./index";
-export = isBoolean;
diff --git a/jtg js/node_modules/@types/lodash/isBuffer.d.ts b/jtg js/node_modules/@types/lodash/isBuffer.d.ts
deleted file mode 100644
index b22d78244b5e85dc7d26eef6730f604c3000b1c1..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/isBuffer.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isBuffer } from "./index";
-export = isBuffer;
diff --git a/jtg js/node_modules/@types/lodash/isDate.d.ts b/jtg js/node_modules/@types/lodash/isDate.d.ts
deleted file mode 100644
index 1269a69d43487ae39879054b9fec624db3e0ac00..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/isDate.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isDate } from "./index";
-export = isDate;
diff --git a/jtg js/node_modules/@types/lodash/isElement.d.ts b/jtg js/node_modules/@types/lodash/isElement.d.ts
deleted file mode 100644
index e4510cd9ceb018f261788c411214ebfdf52ed3e2..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/isElement.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isElement } from "./index";
-export = isElement;
diff --git a/jtg js/node_modules/@types/lodash/isEmpty.d.ts b/jtg js/node_modules/@types/lodash/isEmpty.d.ts
deleted file mode 100644
index 9e71bfa96b91aba3a1479966fa811e5e993ca800..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/isEmpty.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isEmpty } from "./index";
-export = isEmpty;
diff --git a/jtg js/node_modules/@types/lodash/isEqual.d.ts b/jtg js/node_modules/@types/lodash/isEqual.d.ts
deleted file mode 100644
index 1e065fa839c1849c2e98720031cd2bb9d44ee959..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/isEqual.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isEqual } from "./index";
-export = isEqual;
diff --git a/jtg js/node_modules/@types/lodash/isEqualWith.d.ts b/jtg js/node_modules/@types/lodash/isEqualWith.d.ts
deleted file mode 100644
index e14d005c42804b25e67cfede7f3e3f85edde5848..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/isEqualWith.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isEqualWith } from "./index";
-export = isEqualWith;
diff --git a/jtg js/node_modules/@types/lodash/isError.d.ts b/jtg js/node_modules/@types/lodash/isError.d.ts
deleted file mode 100644
index d9d5785777a32ad908255c807e2e7437e8e72011..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/isError.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isError } from "./index";
-export = isError;
diff --git a/jtg js/node_modules/@types/lodash/isFinite.d.ts b/jtg js/node_modules/@types/lodash/isFinite.d.ts
deleted file mode 100644
index 7aba1dc6fb50542aa7dbfaf27f2004c132c4eabd..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/isFinite.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isFinite } from "./index";
-export = isFinite;
diff --git a/jtg js/node_modules/@types/lodash/isFunction.d.ts b/jtg js/node_modules/@types/lodash/isFunction.d.ts
deleted file mode 100644
index 0a22d6cc76a7b9809b8d6c6b7e287c703b929cf5..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/isFunction.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isFunction } from "./index";
-export = isFunction;
diff --git a/jtg js/node_modules/@types/lodash/isInteger.d.ts b/jtg js/node_modules/@types/lodash/isInteger.d.ts
deleted file mode 100644
index 40d33d39e9ec56c3b98e8e68fa2b5a4c5ffdcb7d..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/isInteger.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isInteger } from "./index";
-export = isInteger;
diff --git a/jtg js/node_modules/@types/lodash/isLength.d.ts b/jtg js/node_modules/@types/lodash/isLength.d.ts
deleted file mode 100644
index ee5a93304da2bc0401697f697bec929a096a0c26..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/isLength.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isLength } from "./index";
-export = isLength;
diff --git a/jtg js/node_modules/@types/lodash/isMap.d.ts b/jtg js/node_modules/@types/lodash/isMap.d.ts
deleted file mode 100644
index 441c5388cbc2c96341222461a93b527dddfce214..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/isMap.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isMap } from "./index";
-export = isMap;
diff --git a/jtg js/node_modules/@types/lodash/isMatch.d.ts b/jtg js/node_modules/@types/lodash/isMatch.d.ts
deleted file mode 100644
index 69d194a285037fd26881186e244c9c11fe5eba75..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/isMatch.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isMatch } from "./index";
-export = isMatch;
diff --git a/jtg js/node_modules/@types/lodash/isMatchWith.d.ts b/jtg js/node_modules/@types/lodash/isMatchWith.d.ts
deleted file mode 100644
index 932310af41ac34d3a3bb5a303dca46e76bdc2725..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/isMatchWith.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isMatchWith } from "./index";
-export = isMatchWith;
diff --git a/jtg js/node_modules/@types/lodash/isNaN.d.ts b/jtg js/node_modules/@types/lodash/isNaN.d.ts
deleted file mode 100644
index 970702b50c20e8e46491d701ae018e3a18ac5d48..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/isNaN.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isNaN } from "./index";
-export = isNaN;
diff --git a/jtg js/node_modules/@types/lodash/isNative.d.ts b/jtg js/node_modules/@types/lodash/isNative.d.ts
deleted file mode 100644
index 3174f8a8c20a24f8a3e218c9c437f00e714fe393..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/isNative.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isNative } from "./index";
-export = isNative;
diff --git a/jtg js/node_modules/@types/lodash/isNil.d.ts b/jtg js/node_modules/@types/lodash/isNil.d.ts
deleted file mode 100644
index 9e1581976c7915ed372847f3d3853caa434e71a7..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/isNil.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isNil } from "./index";
-export = isNil;
diff --git a/jtg js/node_modules/@types/lodash/isNull.d.ts b/jtg js/node_modules/@types/lodash/isNull.d.ts
deleted file mode 100644
index e572c456ed80e1762ed07e1a64d9239bb5eeedb9..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/isNull.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isNull } from "./index";
-export = isNull;
diff --git a/jtg js/node_modules/@types/lodash/isNumber.d.ts b/jtg js/node_modules/@types/lodash/isNumber.d.ts
deleted file mode 100644
index 91c83598c8454f060e63f92b53211b9d23189f79..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/isNumber.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isNumber } from "./index";
-export = isNumber;
diff --git a/jtg js/node_modules/@types/lodash/isObject.d.ts b/jtg js/node_modules/@types/lodash/isObject.d.ts
deleted file mode 100644
index 9a43544c2832d140361c298d57263b09c13426bf..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/isObject.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isObject } from "./index";
-export = isObject;
diff --git a/jtg js/node_modules/@types/lodash/isObjectLike.d.ts b/jtg js/node_modules/@types/lodash/isObjectLike.d.ts
deleted file mode 100644
index a17d39c4e949d456e5ecca86045a55a6a4d21216..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/isObjectLike.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isObjectLike } from "./index";
-export = isObjectLike;
diff --git a/jtg js/node_modules/@types/lodash/isPlainObject.d.ts b/jtg js/node_modules/@types/lodash/isPlainObject.d.ts
deleted file mode 100644
index 4df85e28b814bf8f57990903892a7229cf353ec6..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/isPlainObject.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isPlainObject } from "./index";
-export = isPlainObject;
diff --git a/jtg js/node_modules/@types/lodash/isRegExp.d.ts b/jtg js/node_modules/@types/lodash/isRegExp.d.ts
deleted file mode 100644
index ed206d9728f4c8e3249fd68e8caa9f12b593498a..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/isRegExp.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isRegExp } from "./index";
-export = isRegExp;
diff --git a/jtg js/node_modules/@types/lodash/isSafeInteger.d.ts b/jtg js/node_modules/@types/lodash/isSafeInteger.d.ts
deleted file mode 100644
index 6bc6083319769656e4cec49b3bd9607599d8687b..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/isSafeInteger.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isSafeInteger } from "./index";
-export = isSafeInteger;
diff --git a/jtg js/node_modules/@types/lodash/isSet.d.ts b/jtg js/node_modules/@types/lodash/isSet.d.ts
deleted file mode 100644
index 7967b50d29c669b719d415ca0b0bdd7ff561a698..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/isSet.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isSet } from "./index";
-export = isSet;
diff --git a/jtg js/node_modules/@types/lodash/isString.d.ts b/jtg js/node_modules/@types/lodash/isString.d.ts
deleted file mode 100644
index 757802e17888c6441c1a451dab68a54901ed9cc4..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/isString.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isString } from "./index";
-export = isString;
diff --git a/jtg js/node_modules/@types/lodash/isSymbol.d.ts b/jtg js/node_modules/@types/lodash/isSymbol.d.ts
deleted file mode 100644
index e28b2b0c7381a6b26b1bab96e9038994e9c6cf81..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/isSymbol.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isSymbol } from "./index";
-export = isSymbol;
diff --git a/jtg js/node_modules/@types/lodash/isTypedArray.d.ts b/jtg js/node_modules/@types/lodash/isTypedArray.d.ts
deleted file mode 100644
index 7f3260122523e2dd93411c138e332f5214117033..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/isTypedArray.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isTypedArray } from "./index";
-export = isTypedArray;
diff --git a/jtg js/node_modules/@types/lodash/isUndefined.d.ts b/jtg js/node_modules/@types/lodash/isUndefined.d.ts
deleted file mode 100644
index 7a5c64ff74910e0a48083147ae17e23084acb39d..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/isUndefined.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isUndefined } from "./index";
-export = isUndefined;
diff --git a/jtg js/node_modules/@types/lodash/isWeakMap.d.ts b/jtg js/node_modules/@types/lodash/isWeakMap.d.ts
deleted file mode 100644
index b0609daab59b9cd4bd4dd0e3094e61bfb61cd335..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/isWeakMap.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isWeakMap } from "./index";
-export = isWeakMap;
diff --git a/jtg js/node_modules/@types/lodash/isWeakSet.d.ts b/jtg js/node_modules/@types/lodash/isWeakSet.d.ts
deleted file mode 100644
index 6beda3d0fac5f7ffa6120b81e1cfe23dbee7776f..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/isWeakSet.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { isWeakSet } from "./index";
-export = isWeakSet;
diff --git a/jtg js/node_modules/@types/lodash/iteratee.d.ts b/jtg js/node_modules/@types/lodash/iteratee.d.ts
deleted file mode 100644
index 493b39c4bab9e74298867d8c5cfd2f2a3bfcd09e..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/iteratee.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { iteratee } from "./index";
-export = iteratee;
diff --git a/jtg js/node_modules/@types/lodash/join.d.ts b/jtg js/node_modules/@types/lodash/join.d.ts
deleted file mode 100644
index b2c5fb40124fa13f42933d2728f6a0c154efbdd7..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/join.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { join } from "./index";
-export = join;
diff --git a/jtg js/node_modules/@types/lodash/kebabCase.d.ts b/jtg js/node_modules/@types/lodash/kebabCase.d.ts
deleted file mode 100644
index c088ef7c24de8599706ff302b281f7f0a451cb17..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/kebabCase.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { kebabCase } from "./index";
-export = kebabCase;
diff --git a/jtg js/node_modules/@types/lodash/keyBy.d.ts b/jtg js/node_modules/@types/lodash/keyBy.d.ts
deleted file mode 100644
index 664a7229a13c9341e267fe5edeec9670633ca8ab..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/keyBy.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { keyBy } from "./index";
-export = keyBy;
diff --git a/jtg js/node_modules/@types/lodash/keys.d.ts b/jtg js/node_modules/@types/lodash/keys.d.ts
deleted file mode 100644
index 7eb29a0b916a1793c7e3c4a1712d13bae64327db..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/keys.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { keys } from "./index";
-export = keys;
diff --git a/jtg js/node_modules/@types/lodash/keysIn.d.ts b/jtg js/node_modules/@types/lodash/keysIn.d.ts
deleted file mode 100644
index c9eeee6c279542aedda21aa9d45833bc3042ef37..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/keysIn.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { keysIn } from "./index";
-export = keysIn;
diff --git a/jtg js/node_modules/@types/lodash/last.d.ts b/jtg js/node_modules/@types/lodash/last.d.ts
deleted file mode 100644
index cfdeb757ee3f9c2fe088cc7f898a43be3779f59a..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/last.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { last } from "./index";
-export = last;
diff --git a/jtg js/node_modules/@types/lodash/lastIndexOf.d.ts b/jtg js/node_modules/@types/lodash/lastIndexOf.d.ts
deleted file mode 100644
index 979d80dd9ef720943c39885b9a2163d5c3f7c3cc..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/lastIndexOf.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { lastIndexOf } from "./index";
-export = lastIndexOf;
diff --git a/jtg js/node_modules/@types/lodash/lowerCase.d.ts b/jtg js/node_modules/@types/lodash/lowerCase.d.ts
deleted file mode 100644
index 475297d8cfb5508212c4cf9290c3fd8c1c9101d5..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/lowerCase.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { lowerCase } from "./index";
-export = lowerCase;
diff --git a/jtg js/node_modules/@types/lodash/lowerFirst.d.ts b/jtg js/node_modules/@types/lodash/lowerFirst.d.ts
deleted file mode 100644
index 0836228fcc400b00abb62d362185047ae2baa724..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/lowerFirst.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { lowerFirst } from "./index";
-export = lowerFirst;
diff --git a/jtg js/node_modules/@types/lodash/lt.d.ts b/jtg js/node_modules/@types/lodash/lt.d.ts
deleted file mode 100644
index 92cd4e26f81ce84fb5a612453d180813489727a7..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/lt.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { lt } from "./index";
-export = lt;
diff --git a/jtg js/node_modules/@types/lodash/lte.d.ts b/jtg js/node_modules/@types/lodash/lte.d.ts
deleted file mode 100644
index 7c80f37c01f1bc67d35e35a2639d3f42c6a8fefb..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/lte.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { lte } from "./index";
-export = lte;
diff --git a/jtg js/node_modules/@types/lodash/map.d.ts b/jtg js/node_modules/@types/lodash/map.d.ts
deleted file mode 100644
index 2f783cb7f56928e2d739fe72a3da3cfe83c47873..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/map.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { map } from "./index";
-export = map;
diff --git a/jtg js/node_modules/@types/lodash/mapKeys.d.ts b/jtg js/node_modules/@types/lodash/mapKeys.d.ts
deleted file mode 100644
index 7c7e1b5ce6d74b5c956452425fed7afbc31fe3bf..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/mapKeys.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { mapKeys } from "./index";
-export = mapKeys;
diff --git a/jtg js/node_modules/@types/lodash/mapValues.d.ts b/jtg js/node_modules/@types/lodash/mapValues.d.ts
deleted file mode 100644
index 3e87ea61efd9244025a85d0b901d80bf7844a9a4..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/mapValues.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { mapValues } from "./index";
-export = mapValues;
diff --git a/jtg js/node_modules/@types/lodash/matches.d.ts b/jtg js/node_modules/@types/lodash/matches.d.ts
deleted file mode 100644
index 5bb3cc268658b982f9ae9a8cebbfcfde63bd258e..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/matches.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { matches } from "./index";
-export = matches;
diff --git a/jtg js/node_modules/@types/lodash/matchesProperty.d.ts b/jtg js/node_modules/@types/lodash/matchesProperty.d.ts
deleted file mode 100644
index 7378498533f5114fb05e7137c7a54e4b63cb97b9..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/matchesProperty.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { matchesProperty } from "./index";
-export = matchesProperty;
diff --git a/jtg js/node_modules/@types/lodash/max.d.ts b/jtg js/node_modules/@types/lodash/max.d.ts
deleted file mode 100644
index 36d06461388edfe1f7d21c54571c42f625d11505..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/max.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { max } from "./index";
-export = max;
diff --git a/jtg js/node_modules/@types/lodash/maxBy.d.ts b/jtg js/node_modules/@types/lodash/maxBy.d.ts
deleted file mode 100644
index d483d95f95824a0dd23d406e74ccd53d7b62020f..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/maxBy.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { maxBy } from "./index";
-export = maxBy;
diff --git a/jtg js/node_modules/@types/lodash/mean.d.ts b/jtg js/node_modules/@types/lodash/mean.d.ts
deleted file mode 100644
index 983ad77282630dda349908c4ab137cdf73ace543..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/mean.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { mean } from "./index";
-export = mean;
diff --git a/jtg js/node_modules/@types/lodash/meanBy.d.ts b/jtg js/node_modules/@types/lodash/meanBy.d.ts
deleted file mode 100644
index 67aebbbe82c3509aef5ed6a78f3f833d1cc6263f..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/meanBy.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { meanBy } from "./index";
-export = meanBy;
diff --git a/jtg js/node_modules/@types/lodash/memoize.d.ts b/jtg js/node_modules/@types/lodash/memoize.d.ts
deleted file mode 100644
index 6ff535b91ee30ab872c83a38c1de008366cedc94..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/memoize.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { memoize } from "./index";
-export = memoize;
diff --git a/jtg js/node_modules/@types/lodash/merge.d.ts b/jtg js/node_modules/@types/lodash/merge.d.ts
deleted file mode 100644
index eb8bd95e8aac6ba644a3653096441e4d9e0d8f66..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/merge.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { merge } from "./index";
-export = merge;
diff --git a/jtg js/node_modules/@types/lodash/mergeWith.d.ts b/jtg js/node_modules/@types/lodash/mergeWith.d.ts
deleted file mode 100644
index a58dd908b43404e0b832805a44c529817c76fbc4..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/mergeWith.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { mergeWith } from "./index";
-export = mergeWith;
diff --git a/jtg js/node_modules/@types/lodash/method.d.ts b/jtg js/node_modules/@types/lodash/method.d.ts
deleted file mode 100644
index cc3058870f5634d01d31fddbb08643e2410dc573..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/method.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { method } from "./index";
-export = method;
diff --git a/jtg js/node_modules/@types/lodash/methodOf.d.ts b/jtg js/node_modules/@types/lodash/methodOf.d.ts
deleted file mode 100644
index af7f19aa6bb57d0672a03b837bc724304bc584f4..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/methodOf.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { methodOf } from "./index";
-export = methodOf;
diff --git a/jtg js/node_modules/@types/lodash/min.d.ts b/jtg js/node_modules/@types/lodash/min.d.ts
deleted file mode 100644
index e8ba597cd6ab7d9ee31f7b6882bd4645f26ea3db..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/min.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { min } from "./index";
-export = min;
diff --git a/jtg js/node_modules/@types/lodash/minBy.d.ts b/jtg js/node_modules/@types/lodash/minBy.d.ts
deleted file mode 100644
index 74860f90820f9d9547d1b95d6175065f3931f2e2..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/minBy.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { minBy } from "./index";
-export = minBy;
diff --git a/jtg js/node_modules/@types/lodash/mixin.d.ts b/jtg js/node_modules/@types/lodash/mixin.d.ts
deleted file mode 100644
index 7984246792a35df455ca3e2e9029a2d95649b0b3..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/mixin.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { mixin } from "./index";
-export = mixin;
diff --git a/jtg js/node_modules/@types/lodash/negate.d.ts b/jtg js/node_modules/@types/lodash/negate.d.ts
deleted file mode 100644
index 46d0596446f382c7673cbd198bda81919ecd2140..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/negate.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { negate } from "./index";
-export = negate;
diff --git a/jtg js/node_modules/@types/lodash/noConflict.d.ts b/jtg js/node_modules/@types/lodash/noConflict.d.ts
deleted file mode 100644
index 78b3c921b4d09b7fea8196b8a217220361abd5d3..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/noConflict.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { noConflict } from "./index";
-export = noConflict;
diff --git a/jtg js/node_modules/@types/lodash/noop.d.ts b/jtg js/node_modules/@types/lodash/noop.d.ts
deleted file mode 100644
index bfaeb880d0ec58bc299d9b47a8478ae23bbbc522..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/noop.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { noop } from "./index";
-export = noop;
diff --git a/jtg js/node_modules/@types/lodash/now.d.ts b/jtg js/node_modules/@types/lodash/now.d.ts
deleted file mode 100644
index 00f807eb50f8c767fdb25c387a7af80f1bd04f5c..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/now.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { now } from "./index";
-export = now;
diff --git a/jtg js/node_modules/@types/lodash/nth.d.ts b/jtg js/node_modules/@types/lodash/nth.d.ts
deleted file mode 100644
index ce1013f23b1534ee04fc3acb097eaa22eef4d26b..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/nth.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { nth } from "./index";
-export = nth;
diff --git a/jtg js/node_modules/@types/lodash/nthArg.d.ts b/jtg js/node_modules/@types/lodash/nthArg.d.ts
deleted file mode 100644
index 2729d70e08d2506957e24ad04ef4090a513a4347..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/nthArg.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { nthArg } from "./index";
-export = nthArg;
diff --git a/jtg js/node_modules/@types/lodash/omit.d.ts b/jtg js/node_modules/@types/lodash/omit.d.ts
deleted file mode 100644
index 5868a07bf9185ad565d001519f65eb1a47cd9de3..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/omit.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { omit } from "./index";
-export = omit;
diff --git a/jtg js/node_modules/@types/lodash/omitBy.d.ts b/jtg js/node_modules/@types/lodash/omitBy.d.ts
deleted file mode 100644
index 41bf6b48ace14773e21f56f8b2299b9e4bbcd30a..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/omitBy.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { omitBy } from "./index";
-export = omitBy;
diff --git a/jtg js/node_modules/@types/lodash/once.d.ts b/jtg js/node_modules/@types/lodash/once.d.ts
deleted file mode 100644
index 4340e8805050231432e75cbaf64c90c534080134..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/once.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { once } from "./index";
-export = once;
diff --git a/jtg js/node_modules/@types/lodash/orderBy.d.ts b/jtg js/node_modules/@types/lodash/orderBy.d.ts
deleted file mode 100644
index 02320d506d770379e02b73ee176116e5dbe200c6..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/orderBy.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { orderBy } from "./index";
-export = orderBy;
diff --git a/jtg js/node_modules/@types/lodash/over.d.ts b/jtg js/node_modules/@types/lodash/over.d.ts
deleted file mode 100644
index 172c822bd89094ca11a89f57ac5b2e0ed5206809..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/over.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { over } from "./index";
-export = over;
diff --git a/jtg js/node_modules/@types/lodash/overArgs.d.ts b/jtg js/node_modules/@types/lodash/overArgs.d.ts
deleted file mode 100644
index f8518f68d1d1df69b4666201a043ecff1be26caf..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/overArgs.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { overArgs } from "./index";
-export = overArgs;
diff --git a/jtg js/node_modules/@types/lodash/overEvery.d.ts b/jtg js/node_modules/@types/lodash/overEvery.d.ts
deleted file mode 100644
index b8328fb520770dba6efc3bc39a67753f2916d238..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/overEvery.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { overEvery } from "./index";
-export = overEvery;
diff --git a/jtg js/node_modules/@types/lodash/overSome.d.ts b/jtg js/node_modules/@types/lodash/overSome.d.ts
deleted file mode 100644
index 2f172581ca540966090c0c300a581aa3fe4195e1..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/overSome.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { overSome } from "./index";
-export = overSome;
diff --git a/jtg js/node_modules/@types/lodash/package.json b/jtg js/node_modules/@types/lodash/package.json
deleted file mode 100644
index 4d921028b96e6c774ac54ab9171f3e483e44a774..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/package.json	
+++ /dev/null
@@ -1,84 +0,0 @@
-{
-  "_from": "@types/lodash",
-  "_id": "@types/lodash@4.14.110",
-  "_inBundle": false,
-  "_integrity": "sha1-+wdJj4QVKUfzDqCdiSB8oHEjRh4=",
-  "_location": "/@types/lodash",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "tag",
-    "registry": true,
-    "raw": "@types/lodash",
-    "name": "@types/lodash",
-    "escapedName": "@types%2flodash",
-    "scope": "@types",
-    "rawSpec": "",
-    "saveSpec": null,
-    "fetchSpec": "latest"
-  },
-  "_requiredBy": [
-    "#USER",
-    "/"
-  ],
-  "_resolved": "http://registry.npm.taobao.org/@types/lodash/download/@types/lodash-4.14.110.tgz",
-  "_shasum": "fb07498f84152947f30ea09d89207ca07123461e",
-  "_spec": "@types/lodash",
-  "_where": "Y:\\Downloads\\lodash-4.17.10",
-  "bugs": {
-    "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/issues"
-  },
-  "bundleDependencies": false,
-  "contributors": [
-    {
-      "name": "Brian Zengel",
-      "url": "https://github.com/bczengel"
-    },
-    {
-      "name": "Ilya Mochalov",
-      "url": "https://github.com/chrootsu"
-    },
-    {
-      "name": "Stepan Mikhaylyuk",
-      "url": "https://github.com/stepancar"
-    },
-    {
-      "name": "AJ Richardson",
-      "url": "https://github.com/aj-r"
-    },
-    {
-      "name": "Junyoung Clare Jang",
-      "url": "https://github.com/ailrun"
-    },
-    {
-      "name": "e-cloud",
-      "url": "https://github.com/e-cloud"
-    },
-    {
-      "name": "Georgii Dolzhykov",
-      "url": "https://github.com/thorn0"
-    },
-    {
-      "name": "Jack Moore",
-      "url": "https://github.com/jtmthf"
-    },
-    {
-      "name": "Dominique Rau",
-      "url": "https://github.com/DomiR"
-    }
-  ],
-  "dependencies": {},
-  "deprecated": false,
-  "description": "TypeScript definitions for Lo-Dash",
-  "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped#readme",
-  "license": "MIT",
-  "main": "",
-  "name": "@types/lodash",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/DefinitelyTyped/DefinitelyTyped.git"
-  },
-  "scripts": {},
-  "typeScriptVersion": "2.2",
-  "typesPublisherContentHash": "ddbd26faa38670a880f723bf4ae03db414e3aeaea656dff9a89414e0ed6fc685",
-  "version": "4.14.110"
-}
diff --git a/jtg js/node_modules/@types/lodash/pad.d.ts b/jtg js/node_modules/@types/lodash/pad.d.ts
deleted file mode 100644
index 552667ada928418636b6fc0c056b737a82a2cd0c..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/pad.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { pad } from "./index";
-export = pad;
diff --git a/jtg js/node_modules/@types/lodash/padEnd.d.ts b/jtg js/node_modules/@types/lodash/padEnd.d.ts
deleted file mode 100644
index c81a7b0e139f145918dca05c6ce9e8497d985bd5..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/padEnd.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { padEnd } from "./index";
-export = padEnd;
diff --git a/jtg js/node_modules/@types/lodash/padStart.d.ts b/jtg js/node_modules/@types/lodash/padStart.d.ts
deleted file mode 100644
index c119c3584dfcab5956b6bc06499bf538f4f42202..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/padStart.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { padStart } from "./index";
-export = padStart;
diff --git a/jtg js/node_modules/@types/lodash/parseInt.d.ts b/jtg js/node_modules/@types/lodash/parseInt.d.ts
deleted file mode 100644
index de59e7be9aa1bbbb4b4b0ce3a4adfa88964a361b..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/parseInt.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { parseInt } from "./index";
-export = parseInt;
diff --git a/jtg js/node_modules/@types/lodash/partial.d.ts b/jtg js/node_modules/@types/lodash/partial.d.ts
deleted file mode 100644
index d764f6e0579f122b115f01766af2e1f1974caa1b..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/partial.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { partial } from "./index";
-export = partial;
diff --git a/jtg js/node_modules/@types/lodash/partialRight.d.ts b/jtg js/node_modules/@types/lodash/partialRight.d.ts
deleted file mode 100644
index ed60160c62b04858976e11a98a053d07f364a3ed..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/partialRight.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { partialRight } from "./index";
-export = partialRight;
diff --git a/jtg js/node_modules/@types/lodash/partition.d.ts b/jtg js/node_modules/@types/lodash/partition.d.ts
deleted file mode 100644
index f26ab15a5afdd4b22d976dde74dc4fff78c600d2..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/partition.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { partition } from "./index";
-export = partition;
diff --git a/jtg js/node_modules/@types/lodash/pick.d.ts b/jtg js/node_modules/@types/lodash/pick.d.ts
deleted file mode 100644
index 6d346f8f6b31dcf22d515fbdc06afb768c216aac..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/pick.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { pick } from "./index";
-export = pick;
diff --git a/jtg js/node_modules/@types/lodash/pickBy.d.ts b/jtg js/node_modules/@types/lodash/pickBy.d.ts
deleted file mode 100644
index 5285ead8f7ea3b5afa5679755c756b1b6df8acd9..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/pickBy.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { pickBy } from "./index";
-export = pickBy;
diff --git a/jtg js/node_modules/@types/lodash/property.d.ts b/jtg js/node_modules/@types/lodash/property.d.ts
deleted file mode 100644
index 3ff96f0e1807880761a42d8a68905de8ad707434..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/property.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { property } from "./index";
-export = property;
diff --git a/jtg js/node_modules/@types/lodash/propertyOf.d.ts b/jtg js/node_modules/@types/lodash/propertyOf.d.ts
deleted file mode 100644
index 27c628fa9d7c518fb4f7bd8d50aa7c3d41d172e8..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/propertyOf.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { propertyOf } from "./index";
-export = propertyOf;
diff --git a/jtg js/node_modules/@types/lodash/pull.d.ts b/jtg js/node_modules/@types/lodash/pull.d.ts
deleted file mode 100644
index b496ebde8d72b452118a67959c8183da7ba92f26..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/pull.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { pull } from "./index";
-export = pull;
diff --git a/jtg js/node_modules/@types/lodash/pullAll.d.ts b/jtg js/node_modules/@types/lodash/pullAll.d.ts
deleted file mode 100644
index 22c81c48af0afdffbf850dfd02462f0a12412a39..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/pullAll.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { pullAll } from "./index";
-export = pullAll;
diff --git a/jtg js/node_modules/@types/lodash/pullAllBy.d.ts b/jtg js/node_modules/@types/lodash/pullAllBy.d.ts
deleted file mode 100644
index e0629ce99cb909d71da49cbe708341c0ee1fdd31..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/pullAllBy.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { pullAllBy } from "./index";
-export = pullAllBy;
diff --git a/jtg js/node_modules/@types/lodash/pullAllWith.d.ts b/jtg js/node_modules/@types/lodash/pullAllWith.d.ts
deleted file mode 100644
index d3ce829804b091f11cebec7b03ba702b757e7be6..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/pullAllWith.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { pullAllWith } from "./index";
-export = pullAllWith;
diff --git a/jtg js/node_modules/@types/lodash/pullAt.d.ts b/jtg js/node_modules/@types/lodash/pullAt.d.ts
deleted file mode 100644
index 47be38253c29542b58ee9e91699c18540be39047..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/pullAt.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { pullAt } from "./index";
-export = pullAt;
diff --git a/jtg js/node_modules/@types/lodash/random.d.ts b/jtg js/node_modules/@types/lodash/random.d.ts
deleted file mode 100644
index a68cc27202f001058c8ae6c1f6ffbe73b72ba01e..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/random.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { random } from "./index";
-export = random;
diff --git a/jtg js/node_modules/@types/lodash/range.d.ts b/jtg js/node_modules/@types/lodash/range.d.ts
deleted file mode 100644
index 8f737ca5e0a145fb9230afcbfe2629aef6517809..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/range.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { range } from "./index";
-export = range;
diff --git a/jtg js/node_modules/@types/lodash/rangeRight.d.ts b/jtg js/node_modules/@types/lodash/rangeRight.d.ts
deleted file mode 100644
index cabd0ed7c4963e33aea9975913056a1e65b5d997..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/rangeRight.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { rangeRight } from "./index";
-export = rangeRight;
diff --git a/jtg js/node_modules/@types/lodash/rearg.d.ts b/jtg js/node_modules/@types/lodash/rearg.d.ts
deleted file mode 100644
index 7684e867bfaa3829475f976dfcf13dfeab98195a..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/rearg.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { rearg } from "./index";
-export = rearg;
diff --git a/jtg js/node_modules/@types/lodash/reduce.d.ts b/jtg js/node_modules/@types/lodash/reduce.d.ts
deleted file mode 100644
index 4765fcd909f363dd4c66f8fca9c1cde4c27ce51f..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/reduce.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { reduce } from "./index";
-export = reduce;
diff --git a/jtg js/node_modules/@types/lodash/reduceRight.d.ts b/jtg js/node_modules/@types/lodash/reduceRight.d.ts
deleted file mode 100644
index 1cfdb5f80273d5f7b20edb17f2f40ad10d851216..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/reduceRight.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { reduceRight } from "./index";
-export = reduceRight;
diff --git a/jtg js/node_modules/@types/lodash/reject.d.ts b/jtg js/node_modules/@types/lodash/reject.d.ts
deleted file mode 100644
index aabc1413191efb951ff22569691fd5fa4976388c..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/reject.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { reject } from "./index";
-export = reject;
diff --git a/jtg js/node_modules/@types/lodash/remove.d.ts b/jtg js/node_modules/@types/lodash/remove.d.ts
deleted file mode 100644
index dca471886f7cfb38107ec689b2da6bd8f9eace8f..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/remove.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { remove } from "./index";
-export = remove;
diff --git a/jtg js/node_modules/@types/lodash/repeat.d.ts b/jtg js/node_modules/@types/lodash/repeat.d.ts
deleted file mode 100644
index ca3c7fcb26e53bda3a5cc86aa24ed6df50d540f6..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/repeat.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { repeat } from "./index";
-export = repeat;
diff --git a/jtg js/node_modules/@types/lodash/replace.d.ts b/jtg js/node_modules/@types/lodash/replace.d.ts
deleted file mode 100644
index 70154112678f3c12009f316e3dd0a107d17ea1d9..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/replace.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { replace } from "./index";
-export = replace;
diff --git a/jtg js/node_modules/@types/lodash/rest.d.ts b/jtg js/node_modules/@types/lodash/rest.d.ts
deleted file mode 100644
index 433a4fde722edc003ca8f35634564d8fba8146ae..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/rest.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { rest } from "./index";
-export = rest;
diff --git a/jtg js/node_modules/@types/lodash/result.d.ts b/jtg js/node_modules/@types/lodash/result.d.ts
deleted file mode 100644
index 65786428e3a827a58b02c379ee0f52f81b40411b..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/result.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { result } from "./index";
-export = result;
diff --git a/jtg js/node_modules/@types/lodash/reverse.d.ts b/jtg js/node_modules/@types/lodash/reverse.d.ts
deleted file mode 100644
index ecef17389c5cc2913535dd74706b3d015cb05a0d..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/reverse.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { reverse } from "./index";
-export = reverse;
diff --git a/jtg js/node_modules/@types/lodash/round.d.ts b/jtg js/node_modules/@types/lodash/round.d.ts
deleted file mode 100644
index ed2c1792663b1fa769a62f6546b73cc87da174fb..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/round.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { round } from "./index";
-export = round;
diff --git a/jtg js/node_modules/@types/lodash/runInContext.d.ts b/jtg js/node_modules/@types/lodash/runInContext.d.ts
deleted file mode 100644
index 9ee01f324fad798793b8ac48d4e074e60fb37f12..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/runInContext.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { runInContext } from "./index";
-export = runInContext;
diff --git a/jtg js/node_modules/@types/lodash/sample.d.ts b/jtg js/node_modules/@types/lodash/sample.d.ts
deleted file mode 100644
index c225178692321f1db2bec436d20011171b3f6627..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/sample.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { sample } from "./index";
-export = sample;
diff --git a/jtg js/node_modules/@types/lodash/sampleSize.d.ts b/jtg js/node_modules/@types/lodash/sampleSize.d.ts
deleted file mode 100644
index 0f1ed89ee7e4657517dce1d757192fa7d8fd7e9b..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/sampleSize.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { sampleSize } from "./index";
-export = sampleSize;
diff --git a/jtg js/node_modules/@types/lodash/set.d.ts b/jtg js/node_modules/@types/lodash/set.d.ts
deleted file mode 100644
index 09d0c24706fb79a00a003ee1afc0ba368fecddb3..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/set.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { set } from "./index";
-export = set;
diff --git a/jtg js/node_modules/@types/lodash/setWith.d.ts b/jtg js/node_modules/@types/lodash/setWith.d.ts
deleted file mode 100644
index d4e319a051e837bdbeb33c77da047bd3e92267a9..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/setWith.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { setWith } from "./index";
-export = setWith;
diff --git a/jtg js/node_modules/@types/lodash/shuffle.d.ts b/jtg js/node_modules/@types/lodash/shuffle.d.ts
deleted file mode 100644
index ff96f884bcb8bf9624724c5a94290e5d62a9ab46..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/shuffle.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { shuffle } from "./index";
-export = shuffle;
diff --git a/jtg js/node_modules/@types/lodash/size.d.ts b/jtg js/node_modules/@types/lodash/size.d.ts
deleted file mode 100644
index 13d492f3904685c6db34970ba0bc1667f73f3402..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/size.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { size } from "./index";
-export = size;
diff --git a/jtg js/node_modules/@types/lodash/slice.d.ts b/jtg js/node_modules/@types/lodash/slice.d.ts
deleted file mode 100644
index 311d2fa5d8cd4b6e8a2272bc1863c704feb4285e..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/slice.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { slice } from "./index";
-export = slice;
diff --git a/jtg js/node_modules/@types/lodash/snakeCase.d.ts b/jtg js/node_modules/@types/lodash/snakeCase.d.ts
deleted file mode 100644
index 8245a7da1d71aff0eab97f99de51b489dcfcf237..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/snakeCase.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { snakeCase } from "./index";
-export = snakeCase;
diff --git a/jtg js/node_modules/@types/lodash/some.d.ts b/jtg js/node_modules/@types/lodash/some.d.ts
deleted file mode 100644
index 90ef478bbef27ec8224ec2d977ca1500210d9e67..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/some.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { some } from "./index";
-export = some;
diff --git a/jtg js/node_modules/@types/lodash/sortBy.d.ts b/jtg js/node_modules/@types/lodash/sortBy.d.ts
deleted file mode 100644
index 5f3d4f2a7bddae7bdff4726ee91d0363b13c412c..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/sortBy.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { sortBy } from "./index";
-export = sortBy;
diff --git a/jtg js/node_modules/@types/lodash/sortedIndex.d.ts b/jtg js/node_modules/@types/lodash/sortedIndex.d.ts
deleted file mode 100644
index c9c79114d03994d0bb4e78e05cdce83d6b27fd97..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/sortedIndex.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { sortedIndex } from "./index";
-export = sortedIndex;
diff --git a/jtg js/node_modules/@types/lodash/sortedIndexBy.d.ts b/jtg js/node_modules/@types/lodash/sortedIndexBy.d.ts
deleted file mode 100644
index fdbedac57016999e17ab65ef826e18eb1bce7117..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/sortedIndexBy.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { sortedIndexBy } from "./index";
-export = sortedIndexBy;
diff --git a/jtg js/node_modules/@types/lodash/sortedIndexOf.d.ts b/jtg js/node_modules/@types/lodash/sortedIndexOf.d.ts
deleted file mode 100644
index a076c4a40e15f407a385166f3feddc401ae46536..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/sortedIndexOf.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { sortedIndexOf } from "./index";
-export = sortedIndexOf;
diff --git a/jtg js/node_modules/@types/lodash/sortedLastIndex.d.ts b/jtg js/node_modules/@types/lodash/sortedLastIndex.d.ts
deleted file mode 100644
index 808c2c0ff240f76e5462f47f2a3efe58db395059..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/sortedLastIndex.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { sortedLastIndex } from "./index";
-export = sortedLastIndex;
diff --git a/jtg js/node_modules/@types/lodash/sortedLastIndexBy.d.ts b/jtg js/node_modules/@types/lodash/sortedLastIndexBy.d.ts
deleted file mode 100644
index 9f23b9b83f025c1dcf38ee0047e753dd00250a88..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/sortedLastIndexBy.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { sortedLastIndexBy } from "./index";
-export = sortedLastIndexBy;
diff --git a/jtg js/node_modules/@types/lodash/sortedLastIndexOf.d.ts b/jtg js/node_modules/@types/lodash/sortedLastIndexOf.d.ts
deleted file mode 100644
index abdeba0246f3d4f899d805654d718361be6e879d..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/sortedLastIndexOf.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { sortedLastIndexOf } from "./index";
-export = sortedLastIndexOf;
diff --git a/jtg js/node_modules/@types/lodash/sortedUniq.d.ts b/jtg js/node_modules/@types/lodash/sortedUniq.d.ts
deleted file mode 100644
index 257d35aeaa8655b1f3bb60d8f9af5998d295643e..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/sortedUniq.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { sortedUniq } from "./index";
-export = sortedUniq;
diff --git a/jtg js/node_modules/@types/lodash/sortedUniqBy.d.ts b/jtg js/node_modules/@types/lodash/sortedUniqBy.d.ts
deleted file mode 100644
index 316156ec2a2ef0d8da92032693aeef757f48991e..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/sortedUniqBy.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { sortedUniqBy } from "./index";
-export = sortedUniqBy;
diff --git a/jtg js/node_modules/@types/lodash/split.d.ts b/jtg js/node_modules/@types/lodash/split.d.ts
deleted file mode 100644
index 8879eb004d9369ba6ad3100e73dbcedf0bbbcf3d..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/split.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { split } from "./index";
-export = split;
diff --git a/jtg js/node_modules/@types/lodash/spread.d.ts b/jtg js/node_modules/@types/lodash/spread.d.ts
deleted file mode 100644
index 4f816b2ab43321072968f922e28219191d06e123..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/spread.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { spread } from "./index";
-export = spread;
diff --git a/jtg js/node_modules/@types/lodash/startCase.d.ts b/jtg js/node_modules/@types/lodash/startCase.d.ts
deleted file mode 100644
index c201a11c6d908f35c654bd2fd11143e16cd5c4b1..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/startCase.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { startCase } from "./index";
-export = startCase;
diff --git a/jtg js/node_modules/@types/lodash/startsWith.d.ts b/jtg js/node_modules/@types/lodash/startsWith.d.ts
deleted file mode 100644
index a18b54f5842722ea93ff02757e6ca018d359fed5..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/startsWith.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { startsWith } from "./index";
-export = startsWith;
diff --git a/jtg js/node_modules/@types/lodash/subtract.d.ts b/jtg js/node_modules/@types/lodash/subtract.d.ts
deleted file mode 100644
index 6502fe2f447eab7e03271d39ade9318d14f38d3a..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/subtract.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { subtract } from "./index";
-export = subtract;
diff --git a/jtg js/node_modules/@types/lodash/sum.d.ts b/jtg js/node_modules/@types/lodash/sum.d.ts
deleted file mode 100644
index 4e01cb4aad8a068e8bc9bcf4d679bec5af5c9cfd..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/sum.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { sum } from "./index";
-export = sum;
diff --git a/jtg js/node_modules/@types/lodash/sumBy.d.ts b/jtg js/node_modules/@types/lodash/sumBy.d.ts
deleted file mode 100644
index 92c4342aada4ac9d28f40983be06a56b1a325e6c..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/sumBy.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { sumBy } from "./index";
-export = sumBy;
diff --git a/jtg js/node_modules/@types/lodash/tail.d.ts b/jtg js/node_modules/@types/lodash/tail.d.ts
deleted file mode 100644
index 2d80b444b18dd3a0f597f95e2f1f1f338474ee71..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/tail.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { tail } from "./index";
-export = tail;
diff --git a/jtg js/node_modules/@types/lodash/take.d.ts b/jtg js/node_modules/@types/lodash/take.d.ts
deleted file mode 100644
index be9912245dc033e0adf9304e2d3669cc05e94cde..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/take.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { take } from "./index";
-export = take;
diff --git a/jtg js/node_modules/@types/lodash/takeRight.d.ts b/jtg js/node_modules/@types/lodash/takeRight.d.ts
deleted file mode 100644
index 9d7886647848ac5dc62c8b165f0dff6c2b89e398..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/takeRight.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { takeRight } from "./index";
-export = takeRight;
diff --git a/jtg js/node_modules/@types/lodash/takeRightWhile.d.ts b/jtg js/node_modules/@types/lodash/takeRightWhile.d.ts
deleted file mode 100644
index 3b293de7ae5282f55d3b9857170cb3ddd231cf82..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/takeRightWhile.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { takeRightWhile } from "./index";
-export = takeRightWhile;
diff --git a/jtg js/node_modules/@types/lodash/takeWhile.d.ts b/jtg js/node_modules/@types/lodash/takeWhile.d.ts
deleted file mode 100644
index 088234a8a0feec234e3e70e901505c16af5ba84a..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/takeWhile.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { takeWhile } from "./index";
-export = takeWhile;
diff --git a/jtg js/node_modules/@types/lodash/tap.d.ts b/jtg js/node_modules/@types/lodash/tap.d.ts
deleted file mode 100644
index e15a13cf432cd2cb84808a8f887512c93ba4c505..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/tap.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { tap } from "./index";
-export = tap;
diff --git a/jtg js/node_modules/@types/lodash/template.d.ts b/jtg js/node_modules/@types/lodash/template.d.ts
deleted file mode 100644
index 854e7539bdc5d747e2af21223199832974002baa..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/template.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { template } from "./index";
-export = template;
diff --git a/jtg js/node_modules/@types/lodash/throttle.d.ts b/jtg js/node_modules/@types/lodash/throttle.d.ts
deleted file mode 100644
index 2650896a0a3bbbcbc23c16224b396ec9640835a4..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/throttle.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { throttle } from "./index";
-export = throttle;
diff --git a/jtg js/node_modules/@types/lodash/thru.d.ts b/jtg js/node_modules/@types/lodash/thru.d.ts
deleted file mode 100644
index 0447e1271ea8eb8cfe68989859dbaea7949dc779..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/thru.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { thru } from "./index";
-export = thru;
diff --git a/jtg js/node_modules/@types/lodash/times.d.ts b/jtg js/node_modules/@types/lodash/times.d.ts
deleted file mode 100644
index 7fda4de03b739b3d0c7f33c03852b1c345bb2a76..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/times.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { times } from "./index";
-export = times;
diff --git a/jtg js/node_modules/@types/lodash/toArray.d.ts b/jtg js/node_modules/@types/lodash/toArray.d.ts
deleted file mode 100644
index dd94c8a967cb24d0a24dcb88f91c8e0e52143d38..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/toArray.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { toArray } from "./index";
-export = toArray;
diff --git a/jtg js/node_modules/@types/lodash/toFinite.d.ts b/jtg js/node_modules/@types/lodash/toFinite.d.ts
deleted file mode 100644
index c575b478470138354ce2e99def4e1654c1d23c97..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/toFinite.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { toFinite } from "./index";
-export = toFinite;
diff --git a/jtg js/node_modules/@types/lodash/toInteger.d.ts b/jtg js/node_modules/@types/lodash/toInteger.d.ts
deleted file mode 100644
index 021a9c08917de7924808cccccd330b7ced165898..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/toInteger.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { toInteger } from "./index";
-export = toInteger;
diff --git a/jtg js/node_modules/@types/lodash/toLength.d.ts b/jtg js/node_modules/@types/lodash/toLength.d.ts
deleted file mode 100644
index 41a4098c2edb6b5169be6bbaf218d3db340a99ea..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/toLength.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { toLength } from "./index";
-export = toLength;
diff --git a/jtg js/node_modules/@types/lodash/toLower.d.ts b/jtg js/node_modules/@types/lodash/toLower.d.ts
deleted file mode 100644
index 766c173ee6626db984851c71fc9401761d9ab39f..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/toLower.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { toLower } from "./index";
-export = toLower;
diff --git a/jtg js/node_modules/@types/lodash/toNumber.d.ts b/jtg js/node_modules/@types/lodash/toNumber.d.ts
deleted file mode 100644
index a6c5e1fc0d7cddb9203e71489b70ffb073c7f6e4..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/toNumber.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { toNumber } from "./index";
-export = toNumber;
diff --git a/jtg js/node_modules/@types/lodash/toPairs.d.ts b/jtg js/node_modules/@types/lodash/toPairs.d.ts
deleted file mode 100644
index 4a7846ed299596d08bf9e82b0d1a636342dbaf45..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/toPairs.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { toPairs } from "./index";
-export = toPairs;
diff --git a/jtg js/node_modules/@types/lodash/toPairsIn.d.ts b/jtg js/node_modules/@types/lodash/toPairsIn.d.ts
deleted file mode 100644
index 82d71b3f4987cd119a5b0f588f6fafc0bd03dcd8..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/toPairsIn.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { toPairsIn } from "./index";
-export = toPairsIn;
diff --git a/jtg js/node_modules/@types/lodash/toPath.d.ts b/jtg js/node_modules/@types/lodash/toPath.d.ts
deleted file mode 100644
index ff354e5d323bbdf71ba6c67b33481b4d6d38f9b7..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/toPath.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { toPath } from "./index";
-export = toPath;
diff --git a/jtg js/node_modules/@types/lodash/toPlainObject.d.ts b/jtg js/node_modules/@types/lodash/toPlainObject.d.ts
deleted file mode 100644
index 0561ab6cd878dfea453ccbb8158ddca518b6c289..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/toPlainObject.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { toPlainObject } from "./index";
-export = toPlainObject;
diff --git a/jtg js/node_modules/@types/lodash/toSafeInteger.d.ts b/jtg js/node_modules/@types/lodash/toSafeInteger.d.ts
deleted file mode 100644
index 6bb24d89521fbcb3edb4905b0c7af6f8781577e1..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/toSafeInteger.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { toSafeInteger } from "./index";
-export = toSafeInteger;
diff --git a/jtg js/node_modules/@types/lodash/toString.d.ts b/jtg js/node_modules/@types/lodash/toString.d.ts
deleted file mode 100644
index 7765d108af0a20ac9550b5f00a46dcbc48e74d4a..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/toString.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { toString } from "./index";
-export = toString;
diff --git a/jtg js/node_modules/@types/lodash/toUpper.d.ts b/jtg js/node_modules/@types/lodash/toUpper.d.ts
deleted file mode 100644
index af4304122911f4b72767f1b7a32352051bed7625..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/toUpper.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { toUpper } from "./index";
-export = toUpper;
diff --git a/jtg js/node_modules/@types/lodash/transform.d.ts b/jtg js/node_modules/@types/lodash/transform.d.ts
deleted file mode 100644
index 05e65434104bdc2837277747ccfe310708b72245..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/transform.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { transform } from "./index";
-export = transform;
diff --git a/jtg js/node_modules/@types/lodash/trim.d.ts b/jtg js/node_modules/@types/lodash/trim.d.ts
deleted file mode 100644
index 7d0bf90b7715d6d4eee3ca34de5f924e83862a39..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/trim.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { trim } from "./index";
-export = trim;
diff --git a/jtg js/node_modules/@types/lodash/trimEnd.d.ts b/jtg js/node_modules/@types/lodash/trimEnd.d.ts
deleted file mode 100644
index b80c844814ffd3e0e6244974cec000c051978e00..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/trimEnd.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { trimEnd } from "./index";
-export = trimEnd;
diff --git a/jtg js/node_modules/@types/lodash/trimStart.d.ts b/jtg js/node_modules/@types/lodash/trimStart.d.ts
deleted file mode 100644
index a040712eb15ad3bfc4f17ec06627deec15c4a4e1..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/trimStart.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { trimStart } from "./index";
-export = trimStart;
diff --git a/jtg js/node_modules/@types/lodash/truncate.d.ts b/jtg js/node_modules/@types/lodash/truncate.d.ts
deleted file mode 100644
index 0ae065b303919dacf26c2733e1d507536342c6eb..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/truncate.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { truncate } from "./index";
-export = truncate;
diff --git a/jtg js/node_modules/@types/lodash/unary.d.ts b/jtg js/node_modules/@types/lodash/unary.d.ts
deleted file mode 100644
index 44569978f725d011cb74ccb26f31e43b1e6dcab3..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/unary.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { unary } from "./index";
-export = unary;
diff --git a/jtg js/node_modules/@types/lodash/unescape.d.ts b/jtg js/node_modules/@types/lodash/unescape.d.ts
deleted file mode 100644
index 71ba85d89fdbccfa8a9adfacf539938e2cb3fa69..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/unescape.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { unescape } from "./index";
-export = unescape;
diff --git a/jtg js/node_modules/@types/lodash/union.d.ts b/jtg js/node_modules/@types/lodash/union.d.ts
deleted file mode 100644
index 7b12e92f6de3e5f20cd8f226ae29ac6caa6235bb..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/union.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { union } from "./index";
-export = union;
diff --git a/jtg js/node_modules/@types/lodash/unionBy.d.ts b/jtg js/node_modules/@types/lodash/unionBy.d.ts
deleted file mode 100644
index 0cb199245f25ed9d88145fce739073a2a898c88a..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/unionBy.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { unionBy } from "./index";
-export = unionBy;
diff --git a/jtg js/node_modules/@types/lodash/unionWith.d.ts b/jtg js/node_modules/@types/lodash/unionWith.d.ts
deleted file mode 100644
index 9888092f8de076f68a7a04fd3c6809e7cd15d293..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/unionWith.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { unionWith } from "./index";
-export = unionWith;
diff --git a/jtg js/node_modules/@types/lodash/uniq.d.ts b/jtg js/node_modules/@types/lodash/uniq.d.ts
deleted file mode 100644
index 6c105ac3ea7baab4a1dfd3853782d876002e2d02..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/uniq.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { uniq } from "./index";
-export = uniq;
diff --git a/jtg js/node_modules/@types/lodash/uniqBy.d.ts b/jtg js/node_modules/@types/lodash/uniqBy.d.ts
deleted file mode 100644
index 7101b0e306c805f279266efa65838894fc89338a..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/uniqBy.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { uniqBy } from "./index";
-export = uniqBy;
diff --git a/jtg js/node_modules/@types/lodash/uniqWith.d.ts b/jtg js/node_modules/@types/lodash/uniqWith.d.ts
deleted file mode 100644
index 72c3f8fc139144e524c552997fd3524b6cd47243..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/uniqWith.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { uniqWith } from "./index";
-export = uniqWith;
diff --git a/jtg js/node_modules/@types/lodash/uniqueId.d.ts b/jtg js/node_modules/@types/lodash/uniqueId.d.ts
deleted file mode 100644
index 4ea55f92f39fc3338934f1c1fd17a33b4e7a350c..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/uniqueId.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { uniqueId } from "./index";
-export = uniqueId;
diff --git a/jtg js/node_modules/@types/lodash/unset.d.ts b/jtg js/node_modules/@types/lodash/unset.d.ts
deleted file mode 100644
index 1eac8ddb725616bda51018b4c45e0f17aaabfdaa..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/unset.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { unset } from "./index";
-export = unset;
diff --git a/jtg js/node_modules/@types/lodash/unzip.d.ts b/jtg js/node_modules/@types/lodash/unzip.d.ts
deleted file mode 100644
index 7e320a27f2f37ebf1550436bae1de6e03f5bb59e..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/unzip.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { unzip } from "./index";
-export = unzip;
diff --git a/jtg js/node_modules/@types/lodash/unzipWith.d.ts b/jtg js/node_modules/@types/lodash/unzipWith.d.ts
deleted file mode 100644
index 2bf5394b29b0bc6f2e949435e53f26daef9d9743..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/unzipWith.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { unzipWith } from "./index";
-export = unzipWith;
diff --git a/jtg js/node_modules/@types/lodash/update.d.ts b/jtg js/node_modules/@types/lodash/update.d.ts
deleted file mode 100644
index d072c0fe94db12bded16d5eef85b667ebe442fe7..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/update.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { update } from "./index";
-export = update;
diff --git a/jtg js/node_modules/@types/lodash/updateWith.d.ts b/jtg js/node_modules/@types/lodash/updateWith.d.ts
deleted file mode 100644
index 44175423ec5d67dac2ebd038180eca0864d690b4..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/updateWith.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { updateWith } from "./index";
-export = updateWith;
diff --git a/jtg js/node_modules/@types/lodash/upperCase.d.ts b/jtg js/node_modules/@types/lodash/upperCase.d.ts
deleted file mode 100644
index c33598a93529236bdb2fedf59d0473ef376c26fa..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/upperCase.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { upperCase } from "./index";
-export = upperCase;
diff --git a/jtg js/node_modules/@types/lodash/upperFirst.d.ts b/jtg js/node_modules/@types/lodash/upperFirst.d.ts
deleted file mode 100644
index 1f1b2a798a7f532d68df35ae27ddb447e2c1d68b..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/upperFirst.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { upperFirst } from "./index";
-export = upperFirst;
diff --git a/jtg js/node_modules/@types/lodash/values.d.ts b/jtg js/node_modules/@types/lodash/values.d.ts
deleted file mode 100644
index 2015ebf8ac6c33bf4e6c545da7f0d167a54c3f4f..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/values.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { values } from "./index";
-export = values;
diff --git a/jtg js/node_modules/@types/lodash/valuesIn.d.ts b/jtg js/node_modules/@types/lodash/valuesIn.d.ts
deleted file mode 100644
index 6f8d6a3efa74c52ffa324123acf09b72614a6b8c..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/valuesIn.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { valuesIn } from "./index";
-export = valuesIn;
diff --git a/jtg js/node_modules/@types/lodash/without.d.ts b/jtg js/node_modules/@types/lodash/without.d.ts
deleted file mode 100644
index bbdfe163e5e0fdb250417624ac7a8f699868d479..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/without.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { without } from "./index";
-export = without;
diff --git a/jtg js/node_modules/@types/lodash/words.d.ts b/jtg js/node_modules/@types/lodash/words.d.ts
deleted file mode 100644
index 22da6cb9435eeab16408f16e53b495a5f25d6fbf..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/words.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { words } from "./index";
-export = words;
diff --git a/jtg js/node_modules/@types/lodash/wrap.d.ts b/jtg js/node_modules/@types/lodash/wrap.d.ts
deleted file mode 100644
index 3c20f28ed2258b50f4c64663aab841cfe4183a9b..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/wrap.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { wrap } from "./index";
-export = wrap;
diff --git a/jtg js/node_modules/@types/lodash/xor.d.ts b/jtg js/node_modules/@types/lodash/xor.d.ts
deleted file mode 100644
index 894735c45d3dd1b80e4f909f9769676ff56c03f8..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/xor.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { xor } from "./index";
-export = xor;
diff --git a/jtg js/node_modules/@types/lodash/xorBy.d.ts b/jtg js/node_modules/@types/lodash/xorBy.d.ts
deleted file mode 100644
index 6a08c6a874679f2a5a937166cd8d8a86730a984e..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/xorBy.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { xorBy } from "./index";
-export = xorBy;
diff --git a/jtg js/node_modules/@types/lodash/xorWith.d.ts b/jtg js/node_modules/@types/lodash/xorWith.d.ts
deleted file mode 100644
index 7cdcaf339f216ab1d8b798232660a69ef01bdf12..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/xorWith.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { xorWith } from "./index";
-export = xorWith;
diff --git a/jtg js/node_modules/@types/lodash/zip.d.ts b/jtg js/node_modules/@types/lodash/zip.d.ts
deleted file mode 100644
index e7467cdf96a9c8a730f358cd3c046af903e846d3..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/zip.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { zip } from "./index";
-export = zip;
diff --git a/jtg js/node_modules/@types/lodash/zipObject.d.ts b/jtg js/node_modules/@types/lodash/zipObject.d.ts
deleted file mode 100644
index ad049fd15301eefee360dd8eac64cccdb0cc7f3c..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/zipObject.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { zipObject } from "./index";
-export = zipObject;
diff --git a/jtg js/node_modules/@types/lodash/zipObjectDeep.d.ts b/jtg js/node_modules/@types/lodash/zipObjectDeep.d.ts
deleted file mode 100644
index 2a483e83938d4c46bd0b37644ca8b53c8931ecae..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/zipObjectDeep.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { zipObjectDeep } from "./index";
-export = zipObjectDeep;
diff --git a/jtg js/node_modules/@types/lodash/zipWith.d.ts b/jtg js/node_modules/@types/lodash/zipWith.d.ts
deleted file mode 100644
index 48693742fbf7db5f5316ff585c641ff51302675f..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/lodash/zipWith.d.ts	
+++ /dev/null
@@ -1,2 +0,0 @@
-import { zipWith } from "./index";
-export = zipWith;
diff --git a/jtg js/node_modules/@types/os/index.d.ts b/jtg js/node_modules/@types/os/index.d.ts
deleted file mode 100644
index 78b6d75524d96c4a8f68fb6f2f9b18928b7e3ed4..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/os/index.d.ts	
+++ /dev/null
@@ -1,77 +0,0 @@
-declare namespace TopJsSystem {
-
-    export interface NetworkInterface {
-        name:string,
-        mac:string,
-        address:string,
-        netmask:string,
-    }
-
-    /**
-     * 获取操作系统位数;'x32'|'x64'
-     */
-    export function arch():string
-
-    /**
-     * 返回计算机主机名
-     */
-    export function hostname():string
-
-    /**
-     * 返回计算机网卡信息
-     */
-    export function networkInterfaces():Map<string, Array<NetworkInterface>>
-
-    /**
-     * 获取操作系统临时目录
-     */
-    export function tmpdir():string
-
-    /**
-     * 获取操作系统当前用户HOME目录;
-     */
-    export function homedir():string
-
-    /**
-     * 返回操作系统类型'windows'|'linux'|'mac'
-     */
-    export function type():string
-    
-
-    /**
-     * 获取操作系统内核类型
-     */
-    export function kernelType():string
-
-    /**
-     * 获取操作系统内核版本
-     */
-    export function kernelVersion():string
-
-    /**
-     * 获取操作系统版本
-     */
-    export function version():string
-
-    /**
-     * 获取操作系统名称
-     */
-    export function name():string
-
-    /**
-     * 获取操作系统名称2
-     */
-    export function prettyName():string
-
-    /**
-     * 获取操作系统时间
-     */
-    export function getNow():string
-
-    /**
-     * 获取操作系统日期
-     */
-    export function getToday():string
-}
-
-export = TopJsSystem;
diff --git a/jtg js/node_modules/@types/process/index.d.ts b/jtg js/node_modules/@types/process/index.d.ts
deleted file mode 100644
index e47ab43132ffc6134c5b89050033fce4b212d9fa..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/process/index.d.ts	
+++ /dev/null
@@ -1,172 +0,0 @@
-declare namespace TopJsProcess {
-
-    export class ProcessStream {
-        /**
-         * 设置文件编码
-         * @param iEncoding 
-         */
-        setCodec(iEncoding:string):void
-
-        /**
-         * 获取设置的文件编码
-         */
-        codec():string
-
-        /**
-         * 设置自动检测Unicode
-         * @param iEnabled 
-         */
-        setAutoDetectUnicode(iEnabled:boolean):void
-
-        /**
-         * 是否自动检测Unicode
-         */
-        isAutoDetectUnicode():boolean
-
-        /**
-         * 设置是否每次在写入文件时自动刷新缓存至文件
-         * @param iAutoFlush 
-         */
-        setAutoFlush(iAutoFlush:boolean):void
-
-        /**
-         * 是否每次在写入文件时自动刷新缓存至文件
-         */
-        isAutoFlush():boolean
-
-        /**
-         * 是否读取到文件结尾
-         */
-        atEnd():boolean
-
-        /**
-         * 将文件读取位置重置
-         */
-        reset():void
-
-        /**
-         * 刷新缓存至文件
-         */
-        flush():void
-
-        /**
-         * 读取一行,iMaxLen为最大读取长度;iMaxLen=0表示不限制大小;
-         * @param iMaxLen 
-         */
-        readLine(iMaxLen:Number=0):string
-
-        /**
-         * 读取全部文件内容
-         */
-        readAll():string
-
-        /**
-         * 读取指定大小文本块
-         * @param iMaxLen 
-         */
-        read(iMaxLen:Number):string
-
-        /**
-         * 写入文件
-         * @param iText 
-         */
-        write(iText:string):void
-    }
-
-
-    /**
-     * 命令行参数
-     */
-    export var argv:Array<string>
-
-    /**
-     * 标准输出流
-     */
-    export var stdout:ProcessStream
-
-    /**
-     * 标准输入流
-     */
-    export var stdin:ProcessStream
-
-    /**
-     * 标准错误流
-     */
-    export var stderr:ProcessStream
-
-    /**
-     * 获取topjs执行文件路径
-     */
-    export function topjsBinPath():string
-
-    /**
-     * 获取当前进程PID号
-     */
-    export function pid():number
-    
-
-    /**
-     * 获取平台名称
-     */
-    export function platform():string
-
-    /**
-     * 获取当前执行的脚本文件路径;(不包含文件名)
-     */
-    export function evalFileDir():string
-
-    /**
-     * 获取当前执行的脚本文件名;
-     */
-    export function evalFileName():string
-
-    /**
-     * 获取当前执行的脚本文件除去后缀后的名称;
-     */
-    export function evalFileBaseName():string
-
-    /**
-     * 创建一个事件对象
-     */
-    export function createEvent():any
-
-    /**
-     * 获取环境变量
-     * @param iName 
-     */
-    export function getEnv(iName:string):string
-
-    /**
-     * 设置环境变量
-     * @param iName 
-     * @param iValue 
-     */
-    export function setEnv(iName:string, iValue:string):boolean
-    
-    /**
-     * 立即对进程进行垃圾回收;
-     */
-    export function gc():null
-
-    /**
-     * 退出
-     * @param iCode 
-     */
-    export function exit(iCode:Number):void
-
-    /**
-     * 开始事件主循环
-     */
-    export function mainLoop():void
-
-
-    /**
-     * 执行外部命令
-     * @param iCmd 
-     * @param iArgs 
-     */
-    export function exec(iCmd:string,iArgs:Array<string>):string
-
-}
-
-export = TopJsProcess;
diff --git a/jtg js/node_modules/@types/topcam.gencom/index.d.ts b/jtg js/node_modules/@types/topcam.gencom/index.d.ts
deleted file mode 100644
index fdb7026a73b552e625f69efff6dd0f126aae1ef9..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/topcam.gencom/index.d.ts	
+++ /dev/null
@@ -1,1434 +0,0 @@
-import { type } from "os";
-
-declare class TopCamGenCom {
-    constructor(p?:{cam_type?:'genesis'|'incam'='genesis', error_handle?:0|1=1});
-    /**
-     * 获取当前料号
-     * @returns 返回当前料号名
-     */
-    currentJob():string;
-
-    /**
-     * 获取当前工作层
-     * @returns 返回当前工作层名
-     */
-    getWorkLayer():string;
-
-    /**
-     * 获取当前影响层
-     * @returns 返回当前影响层
-     */
-    getAffectLayer(): string[];
-
-    /**
-     * 获取当前显示的层
-     * @returns 返回当前显示的层
-     */
-    getDispLayers():string[];
-
-    /**
-     * 获取所有`genesis`料号列表
-     * @returns 返回料号列表
-     */
-    getJobList():string[];
-
-    /**
-     * 获取当前`genesis`登录用户名
-     * @returns 返回当前登录用户名
-     */
-    getUserName():string;
-
-    /**
-     * 获取指定料号所在路径
-     * @returns 返回料号所在路径
-     * @example 
-     * var getJobPath = $.gen.getJobPath({job:jobname});
-     */
-    getJobPath(object:object):string;
-
-    /**
-     * 获取指定料号所属DB,暂不支持incam
-     * @returns 返回料号所属DB
-     * @example 
-     * var getJobDbName = $.gen.getJobDbName({job:jobname});
-     */
-    getJobDbName(object:object):string;
-
-    /**
-     * 判断料号是不是存在
-     * @returns 返回真 或者 假
-     * @example 
-     * var isJobExists = $.gen.isJobExists({job:jobname});
-     */
-    isJobExists(object:object):boolean;
-
-    /**
-     * 判断料号是不是被打开 
-     * @returns 返回真 或者 假
-     * @example 
-     * var isJobOpen = $.gen.isJobOpen({job:jobname});
-     */
-    isJobOpen(object:object):boolean;
-
-    /**
-     * 创建一个新料号 
-     * @returns 返回exists(料号存在) or 1(创建成功)
-     * @example 
-     * var createJob = $.gen.createJob({name:'aa',db:'genesis'});
-     */
-    createJob(p:{name:string,db:string}):string;
-
-    /**
-     * 打开一个存在的料号 
-     * @returns æ— 
-     * @example 
-     * $.gen.openJob({job:jobname});
-     */
-    openJob(p:{job:string,update_clipboard?: 'view_job'|''}):void;
-
-    /**
-     * 关闭一个打开的料号 
-     * @returns 真 或者 假
-     * @example 
-     * var closeJob = $.gen.closeJob({job:jobname});
-     */
-    closeJob(p:{job:string}):boolean;
-
-    /**
-     * 删除一个存在的料号,如果料号是打开的, 将自动关闭 
-     * @returns 真 或者 假
-     * @example 
-     * var deleteJob = $.gen.deleteJob({job:jobname});
-     */
-    deleteJob(p:{job:string}):boolean;
-
-    /**
-     * 删除一个存在的step,如果不存在将返回0 
-     * @returns 真 或者 假
-     * @example 
-     * var deleteStep = $.gen.deleteStep({job:jobname,step:stepname});
-     */
-    deleteStep(p:{job:string,step:string}):boolean;
-
-    /**
-     * 导入一个`odb++`料号 
-     * @returns 真 或者 假
-     * @example 
-     * var importJob = $.gen.importJob({db:'genesis',path:'/tmp/aaa.tgz',name:jobname,analyze_surfaces:'yes'});
-     */
-    importJob(p:{db:string,path:string,name:string,analyze_surfaces:string}):boolean;
-
-    /**
-     * 列举所有genesis中打开的料号 
-     * @returns 料号列表和打开的用户(数组或数组引用)
-     * @example 
-     * var listOpenJobs = $.gen.listOpenJobs();
-     */
-    listOpenJobs():T[];
-
-    /**
-     * 创建一个step 
-     * @returns 真 或者 假
-     * @example 
-     * var createStep = $.gen.createStep({job:jobname,name:stepname});
-     */
-    createStep(p:{job:string,name:string}):boolean;
-
-    /**
-     * 检查step是不是存在 
-     * @returns 真 或者 假
-     * @example 
-     * var isStepExists = $.gen.isStepExists({job:jobname,step:stepname});
-     */
-    isStepExists(p:{job:string,step:string}):boolean;
-
-    /**
-     * 取得指定料号所有step名字 
-     * @returns step列表
-     * @example 
-     * var getStepList = $.gen.getStepList({job:jobname});
-     */
-    getStepList(p:{job:string}):T[];
-
-    /**
-     * 打开一个step 
-     * @returns 真 或者 假
-     * @example 
-     * var openStep = $.gen.openStep({job:jobname,name:stepname});
-     */
-    openStep(p:{job:string,name:string,iconic?:'no'|'yes'}):boolean;
-
-    /**
-     * 设置当前工作group 
-     * @returns æ— 
-     * @example 
-     * $.gen.setGroup({group:group});
-     */
-    setGroup(p:{group:number}):void;
-
-    /**
-     * 取得指定料号的matrix信息 
-     * @returns matrix信息
-     * @example 
-     * var getMatrix = $.gen.getMatrix({job:jobname});
-     */
-    getMatrix(p:{job:string,type?:'hash'|'array'='hash',layer?:string}):object;
-
-    /**
-     * 在matrix中增加一个层 
-     * @param after将优先于before
-     * @returns æ— 
-     * @example 
-     * $.gen.matrixAddLayer({job:jobname,layer:name,type:'signal',context:'board',polarity:'positive',before:'l1'});
-     */
-    matrixAddLayer(p:{job:string,layer:string,type:string,context:string,polarity:string,row:number,after:string,before:string}):void;
-
-    /**
-     * 在matrix中移动指定的行(或者层)到相应的位置(ins_row,after,before) 
-     * @param row将优先于layer
-     * @param ins_row将优先于after,after将优先于before
-     * @returns æ— 
-     * @example 
-     * $.gen.matrixMoveRow({job:jobname,layer:name,before:'l1'});
-     */
-    matrixMoveRow(p:{job:string,layer:string,row:number,ins_row:number,after:string,before:string}):void;
-
-    /**
-     * 在matrix中增加一个Step  
-     * @param after将优先于before
-     * @returns æ— 
-     * @example 
-     * $.gen.matrixAddStep({job:jobname,step:step,before:'pcb'});
-     */
-    matrixAddStep(p:{job:string,layer:string,after:string,before:string}):void;
-
-    /**
-     * 在matrix中删除一个Step  
-     * @returns æ— 
-     * @example 
-     * $.gen.matrixDeleteStep({job:jobname,step:step});
-     */
-    matrixDeleteStep(p:{job:string,step:string}):void;
-
-    /**
-     * 在matrix中Copy一个Step  
-     * @param after将优先于before
-     * @returns æ— 
-     * @example 
-     * $.gen.matrixCopyStep({job:jobname,step:step,new_name:'net'});
-     */
-    matrixCopyStep(p:{job:string,step:string,new_name:string,after:string,before:string}):void;
-
-    /**
-     * 在matrix中Copy一个Layer  
-     * @param after将优先于before
-     * @returns æ— 
-     * @example 
-     * $.gen.matrixCopyLayer({job:jobname,layer:layer,new_name:'new_layer'});
-     */
-    matrixCopyLayer(p:{job:string,layer:string,new_name:string,after?:string,before?:string,type?:'signal'|'solder_mask',context?:'board'|'misc',polarity?:'positive'|'negative'}):void;
-
-    /**
-     * 打开指定料号的matrix编辑窗口
-     * @returns æ— 
-     * @example 
-     * $.gen.openMatrix({job:jobname});
-     */
-    openMatrix(p:{job:string}):void;
-
-    /**
-     * 刷新指定料号的matrix信息
-     * @returns æ— 
-     * @example 
-     * $.gen.matrixRefresh({job:jobname});
-     */
-    matrixRefresh(p:{job:string}):void;
-
-    /**
-     * 设定指定层的matrix信息
-     * @returns æ— 
-     * @example 
-     * $.gen.matrixLayerAttr({job:jobname,layer:layername,type:'drill'});
-     */
-    matrixLayerAttr(p:{job:string,layer?:string|T,type?:string,context?:string,polarity?:string}):void;
-
-    /**
-     * 设定钻孔层的开始与结束
-     * @returns æ— 
-     * @example 
-     * $.gen.matrixLayerDrill({job:jobname,layer:layername,start:startlayer,end:endlayer});
-     */
-    matrixLayerDrill(p:{job:string,layer:string,start:string,end:string}):void;
-
-    /**
-     * 根据matrix,计算出板子的层数
-     * @returns 层数
-     * @example 
-     * var getLayerCount = $.gen.getLayerCount({job:jobname});
-     */
-    getLayerCount(p:{job:string}):number;
-
-    /**
-     * 取得drill tool manage 中的所有钻孔信息
-     * @returns drill信息(array or hash)
-     * @example 
-     * var getTool = $.gen.getTool({job:jobname,step:step,layer:layer});
-     */
-    getTool(p:{job:string,step:string,layer:string,type?:'hash'|"array",hashkey?:'num'|"count",units?:'inch'|"mm"}):any;
-
-    /**
-     * 设置drill tool manage 中参数(只有当genesis ver > 9.1才有效)
-     * @returns æ— 
-     * @example 
-     * $.gen.toolSet({job:jobname,step:step,layer:layer,slots:'by_length'});
-     */
-    toolSet(p:{job:string,step:string,layer:string,thickness?:string,user_params?:string,slots?:'by_length'}):void;
-
-    /**
-     * 输出PostScript格式
-     * @returns æ— 
-     * @example 
-     * $.gen.outputPostScript({job:'demo',step:'pcb',layer:'drawing',dir_path:'d:/test/',layer_params:{angle:90,mirror:'yes',x_scale:1,yscale:1,..},outpu_params:{break_symbols:'yes',break_arc:'no',surface_mode:'fill',...}});
-     */
-    outputPostScript(p:{job:string,step:string,layer:string,dir_path:string,layer_params:object,output_params:object}):void;
-
-    /**
-     * 输出RS274X格式
-     * @returns æ— 
-     * @example 
-     * $.gen.outputRs274x({job:'demo',step:'pcb',layer:'drawing',dir_path:'d:/test/',layer_params:{angle:90,mirror:'yes',x_scale:1,yscale:1,..},outpu_params:{break_symbols:'yes',break_arc:'no',surface_mode:'fill',...}});
-     */
-    outputRs274x(p:{job:string,step:string,layer:string,dir_path:string,layer_params:object,output_params:object}):void;
-
-    /**
-     * 输出DXF格式
-     * @returns æ— 
-     * @example 
-     * $.gen.outputDxf({job:'demo',step:'pcb',layer:'drawing',dir_path:'d:/test/',layer_params:{angle:90,mirror:'yes',x_scale:1,yscale:1,..},outpu_params:{break_symbols:'yes',break_arc:'no',surface_mode:'fill',...}});
-     */
-    outputDxf(p:{job:string,step:string,layer:string,dir_path:string,layer_params:object,output_params:object}):void;
-
-    /**
-     * 检查层是否存在 
-     * @returns 存在返回1,不存在返回0
-     * @example 
-     * var isLayerExists = $.gen.isLayerExists({job:jobname,layer:layer});
-     */
-    isLayerExists(p:{job:string,layer:string}):boolean;    
-
-    /**
-     * 创建一个新层 
-     * @returns æ— 
-     * @example 
-     * $.gen.createLayer({job:'demo',layer:'drawing',conext:'board',type:'document'});
-     */
-    createLayer(p:{job:string,layer:string,conext?:'misc'|'board',type?:'signal'|'document',before?:string,after?:string,delete_exists ?:'no'|'yes'}):void;  
-
-    /**
-     * 在step上删除一层 
-     * @returns æ— 
-     * @example 
-     * $.gen.deleteLayer({job:'Job',layer:'tmp',step:'step'});
-     * $.gen.deleteLayer({job:'Job',layer:['tmp','tmp2']});
-     * $.gen.deleteLayer({job:'Job',layer:['~^tmp']});
-     */
-    deleteLayer(p:{job:string,layer:string}):void;  
-
-    /**
-     * 获取层图形范围 
-     * @returns {xmin:?, ymin:?,xmax:?,ymax:?,xsize:?,ysize:?}
-     * @example 
-     * var getLayerLimits = $.gen.getLayerLimits({job:'demo',step:'pcb',layer:'drawing',units:'mm'});
-     */
-    getLayerLimits(p:{job:string,step:string,layer:string,units?:'inch'|'mm'}):object;    
-
-    /**
-     * 获取Symbol范围 
-     * @returns {xmin:?, ymin:?,xmax:?,ymax:?,xsize:?,ysize:?}
-     * @example 
-     * var getSymbolLimits = $.gen.getSymbolLimits({job:'demo',symbol:'symbol1',units:'mm'});
-     */
-    getSymbolLimits(p:{job:string,symbol:string,units?:'inch'|'mm'}):object;    
-
-    /**
-     * 获取profile范围 
-     * @returns {xmin:?, ymin:?,xmax:?,ymax:?,xsize:?,ysize:?}
-     * @example 
-     * var getProfileLimits = $.gen.getProfileLimits({job:'demo',step:'pcb',units:'mm'});
-     */
-    getProfileLimits(p:{job:string,step:string,units?:'inch'|'mm'}):object;    
-
-    /**
-     * 设置影响层
-     * @returns æ— 
-     * @example 
-     * $.gen.affectedLayer({affected:'no',mode:'all'});
-     * $.gen.affectedLayer({affected:'yes',mode:'single',layer:['l1','l2','l3','l4'],clear_before:'yes'});
-     */
-    affectedLayer(p:{affected:'no'|'yes',mode:'all'|'single',layer:string,clear_before?:'yes'|'no'}):void;    
-
-    /**
-     * 获取选择的Feature总数 
-     * @returns 返回选择上的Feature总数
-     * @example 
-     * var getSelectCount = $.gen.getSelectCount();
-     */
-    getSelectCount():number; 
-
-    /**
-     * 将选择的Feature复制到另一层
-     * @returns æ— 
-     * @example 
-     * $.gen.selCopyOther({dest:'layer_name',target_layer:'temp',invert:'no',dx:0,dy:0,size:0});
-     */
-    selCopyOther(p:{dest:'affected_layers'|'layer_name',target_layer:string,invert:string,dx:number,dy:number,size:number}):void;    
-
-
-    /**
-     * 将选择的Feature移到另一层
-     * @returns æ— 
-     * @example 
-     * $.gen.selMoveOther({target_layer:'temp',invert:'no',dx:0,dy:0,size:0});
-     */
-    selMoveOther(p:{target_layer:string,invert:string,dx:number,dy:number,size:number}):void;
-    
-    /**
-     * 清除层显示
-     * @returns æ— 
-     * @example 
-     * $.gen.clearLayers();
-     */
-    clearLayers():void;
-    
-    /**
-     * 设置当前工作层
-     * @returns æ— 
-     * @example 
-     * $.gen.workLayer({name:'l1',display_number:2,clear_before:'yes'});
-     */
-    workLayer(p:{name:string,display_number:number,clear_before:'yes'|'no'}):void;
-
-    /**
-     * 放大缩小显示
-     * @returns æ— 
-     * @example 
-     * $.gen.zoomArea({x1:1,x2:1,y1:2,y2:3});
-     */
-    zoomArea(p:{x1:number,x2:number,y1:number,y2:number}):void;
-
-    /**
-     * 设置当前单位
-     * @returns æ— 
-     * @example 
-     * $.gen.units({type:'mm'});
-     */
-    units(p:{type:'inch'|'mm'}):void;
-
-    /**
-     * 通过选择过滤器进行选择Feature
-     * @returns æ— 
-     * @example 
-     * $.gen.selectByFilter({feat_types:'pad\;text',polarity:'positive',include_syms:'r100;r200',exclude_syms:'s200,s100',attribute:[{attribute:'.drill',option:'plated'}],profile:'all'});
-     */
-    selectByFilter(p:{feat_types:'text'|'pad\;text',polarity:'positive'|'positive\;negative',include_syms:string,exclude_syms:string,attribute: '.smd'|[{attribute:'.drill',option:'plated'}],profile:'all'|'in'|'out',area_rect?:{x1:?,y1:?,x2:?,y2:?},filter_name?:string,operation?:string,area_type?:string}):void;
-
-    /**
-     * 通过选择过滤器进行高亮Feature
-     * @returns æ— 
-     * @example 
-     * $.gen.highlightByFilter({feat_types:'pad\;text',polarity:'positive',include_syms:'r100;r200',exclude_syms:'s200,s100',attribute:[{attribute:'.drill',option:'plated'}],profile:'all'});
-     */
-    highlightByFilter(p:{feat_types:'text'|'pad\;text',polarity:'positive'|'positive\;negative',include_syms:string,exclude_syms:string,attribute: '.smd'|[{attribute:'.drill',option:'plated'}],profile:'all'|'in'|'out',filter_name?:string}):void;
-
-    /**
-     * 参考选择
-     * @returns æ— 
-     * @example 
-     * $.gen.selRefFeat({layers:'l2',use:'filter',mode:'touch',f_types:'line\;arc',polarity:'positive',filter:{feat_types:'pad\;text'polarity:'positive',include_syms:'r100;r200',exclude_syms:'s200,s100',attribute:[{attribute:'.drill',option:'plated'}],}});
-     */
-    selRefFeat(p:{layers:string,use:'filter'|'select',mode:'touch'|'disjoint'|'cover'|'include',f_types:'pad'|'line\;arc',polarity:'positive'|'positive;\negative',filter:object}):void;
-
-    /**
-     * 设置选择过滤器
-     * @returns æ— 
-     * @example 
-     * $.gen.filterSet({feat_types:'pad\;text',polarity:'positive',include_syms:'r100;r200',exclude_syms:'s200,s100',attribute:[{attribute:'.drill',option:'plated'}],profile:'all'});
-     */
-    filterSet(p:{feat_types:'text'|'pad\;text',polarity:'positive'|'positive\;negative',dcode:?,include_syms:string,exclude_syms:string,attribute: '.smd'|[{attribute:'.drill',option:'plated'}],profile:'all'|'in'|'out',filter_name?:string}):void;
-
-    /**
-     * check in ,check out 料号
-     * @returns 如果mode:'test',返回checkout的用户
-     * @example 
-     * var checkInout = $.gen.checkInout({job:'demo',mode:'test'});
-     */
-    checkInout(p:{job:string,mode:'in'|'out'|'test',type?:'job'}):string;    
-
-    /**
-     * 保存料号
-     * @returns æ— 
-     * @example 
-     * $.gen.saveJob({job:'demo'});
-     */
-    saveJob(p:{job:string,override?:'no'|'yes'}):void;    
-
-    /**
-     * 复制料号
-     * @returns æ— 
-     * @example 
-     * $.gen.copyJob({source_job:'demo',dest_job:'demo1',dest_database:'genesis'});
-     */
-    copyJob(p:{source_job:string,dest_job:string,dest_database:string}):void;   
-
-    /**
-     * 复制层
-     * @returns æ— 
-     * @example 
-     * $.gen.copyLayer({source_job:'org_job',source_step:'org',source_layer:'l1',dest_layer:'org_l1'});
-     */
-    copyLayer(p:{source_job:string,source_step:string,source_layer:string,dest_layer:string,mode?:'replace'|'append',invert?:'no'|'yes'}):void;   
-
-    /**
-     * 获取料号的checklist
-     * @returns 返回checklist名称列表;['check1','check2']
-     * @example 
-     * var getChecklist = $.gen.getChecklist({job:'demo1',step:'pcb'});
-     */
-    getChecklist(p:{job:string,step:string}):t[];    
-
-    /**
-     * 从Lib中复制checklist
-     * @returns æ— 
-     * @example 
-     * $.gen.chklistFromLib({chklist:'pcb_check'});
-     */
-    chklistFromLib(p:{chklist:string}):void;   
-
-    /**
-     * 创建checklist
-     * @returns object
-     * @example 
-     * var createChklist = $.gen.createChklist({chklist:'drill_check_tmp',items:[drill_check : {name:'drill_check',nact:1,action:'valor_analysis_drill',erf:'SRC',params:{pp_layer:?}},]});
-     */
-    createChklist(p:{chklist:string,items:Array[]}):object;    
-
-    /**
-     * 检查checklist是否存在
-     * @returns 存在返回1,不存在返回0
-     * @example 
-     * var isChklistExists = $.gen.isChklistExists({job:'demo1',step:'pcb',chklist:'pcb_check'});
-     */
-    isChklistExists(p:{job:string,step:string,chklist:string}):boolean;    
-
-    /**
-     * 显示checklist
-     * @returns 存在返回1,不存在返回0
-     * @example 
-     * var chklistShow = $.gen.chklistShow({chklist:'pcb_check'});
-     */
-    chklistShow(p:{chklist:string}):boolean;  
-
-    /**
-     * 运行checklist
-     * @returns 存在返回1,不存在返回0
-     * @example 
-     * var chklistRun = $.gen.chklistRun({chklist:'pcb_check'});
-     */
-    chklistRun(p:{chklist:string,nact?:'a'|'1...n',area?:'profile'|'local'|'global'}):boolean;  
-
-    /**
-     * 获取checklist运行结果
-     * @returns 返回结果列表,如(  )
-     * @example 
-     * var getCheckMeas = $.gen.getCheckMeas({job:'demo',step:'pcb',chklist:'pcb_check',nact:2});
-     */
-    getCheckMeas(p:{job:string,step:string,chklist:string,nact:number,units?:'inch'|'mm',category?:?,severity?:?,layer?:?}):object;  
-
-    /**
-     * 运行单个dfm功能
-     * @returns æ— 
-     * @example 
-     * $.gen.runSingleDfm({chklist:'valor_dfm_nfpr',params:{pp_layer : map_layer,pp_delete : 'Duplicate',},area : 'global',show : 'no',show_res:'no'});
-     */
-    runSingleDfm(p:{chklist:string,show?:'no'|'yes',area?:'profile'|'global'|'local',erf?:'Mil',params?:object,show_res?:'no'|'yes'}):void;   
-
-    /**
-     * 计算铜面积
-     * @returns 返回hash{area:?,percent:?}
-     * @example 
-     * var copperArea = $.gen.copperArea({layer1:layer});
-     */
-    copperArea(p:{layer1:string,layer2?:'',drills?:'no',drills_source?:'matrix',thickness?:0,resolution_value?:1,x_boxes?:3,y_boxes?:3,area?:'no',x1?:0,x2?:0,y1?:0,y2?:0,dist_map?:'yes',f_type?:'all',out_file?:'',out_layer?:'first'}):object;  
-
-    /**
-     * 计算曝光面积
-     * @returns 返回hash{area:?,percent:?}
-     * @example 
-     * var exposedArea = $.gen.exposedArea({layer1:layer,mask1:mask});
-     */
-    exposedArea(p:{layer1:string,mask1:string,consider_route:'yes'|'no',layer2?:'',mask1?:'',drills?:'no',drills_source?:'matrix',thickness?:0,resolution_value?:1,x_boxes?:3,y_boxes?:3,area?:'no',dist_map?:'yes',f_type?:'all'}):object;  
-
-
-    /**
-     * 把选择到的元素转成surface
-     * @returns æ— 
-     * @example 
-     * $.gen.selContourize();
-     */
-    selContourize(p:{accuracy?:0,break_to_islands?:'yes',clean_hole_size?:0,clean_hole_mode?:'x_and_y'}):void;   
-
-    /**
-     * 窗口显示回到原始位置
-     * @returns æ— 
-     * @example 
-     * $.gen.zoomHome();
-     */
-    zoomHome():void;   
-
-    /**
-     * 设置step尺寸
-     * @returns æ— 
-     * @example 
-     * $.gen.panelSize({width:18,height:24});
-     */
-    panelSize(p:{width:number,height:number}):void;   
-
-    /**
-     * 拼版填铜
-     * @returns æ— 
-     * @example 
-     * $.gen.srFill({layer:layer});
-     */
-    srFill(p:{layer:string,dest:'layer_name'|'affected_layers',polarity?:'positive'|'negative',type?:'solid'|'pattern',origin_type?:'datum'|'limits'}):void;   
-
-    /**
-     * 加一个pad到指定位置
-     * @returns æ— 
-     * @example 
-     * $.gen.addPad({x:0,y:0,symbol:'r100'});
-     */
-    addPad(p:{x:number,y:number,symbol:string,polarity?:?,angle?:?,mirror?:?,nx?:?,ny?:?,dx?:?,dy?:?,xscale?:?,yscale?:?,attributes?:?}):void;   
-
-    /**
-     * 加一根线到指定位置
-     * @returns æ— 
-     * @example 
-     * $.gen.addLine({xs:0,ys:0,xe:1,ye:1,symbol:'r100'});
-     */
-    addLine(p:{xs:number,ys:number,xe:number,ye:number,symbo:string,polarity?:?,attributes?:?}):void;   
-
-    /**
-     * 加弧到指定位置
-     * @returns æ— 
-     * @example 
-     * $.gen.addArc({xc:0.7,yc:0.7,xs:0,ys:0,xe:1,ye:1,symbo:'r100'});
-     */
-    addArc(p:{xc:number,yc:number,xs:number,ys:number,xe:number,ye:number,symbo:string,polarity?:?,attributes?:?}):void;   
-
-    /**
-     * 元素坐标转换(不调用genesis命令)(mirror,shift,rotation)
-     * @returns 返回{x:?,y:?}
-     * @example 
-     * var transCoordinate = $.gen.transCoordinate({x:0,y:0,cx:1,cy:1,mirror:'yes'});
-     */
-    transCoordinate(p:{x:number,y:number,cx:number,cy:number,angle:0|90|180|270,mirror?:'no'|'yes',shiftx?:0,shifty?:0}):object;  
-
-    /**
-     * 加text到指定位置
-     * @returns æ— 
-     * @example 
-     * $.gen.addText({xc:0.7,yc:0.7,xs:0,ys:0,xe:1,ye:1,symbo:'r100'});
-     */
-    addText(p:{x:number,y:number,text:string,x_size:number,y_size:number,anchor:'center'|'s'|'w'|'n'|'e'|'se'|'ne'|'sw'|'nw',w_factor?:?,line_width?:'unit: mil'}):void;   
-
-    /**
-     * 添加一个长方形的块
-     * @returns æ— 
-     * @example 
-     * $.gen.addRectangle({x1:0,y1:0,x2:1,y2:1});
-     */
-    addRectangle(p:{x1:number,y1:number,x2:number,y2:number,type?:'surface'|'line',symbol?:'line',polarity?:'positive'|'negative',attributes?:'no'|'yes'}):void;   
-
-    /**
-     * 添加Surface
-     * @returns æ— 
-     * @example 
-     * $.gen.addPolygon({items:[{x:,y:},{xc:,yc:,xe:,ye:,cw:'yes'|'no'}],polarity:'positive',attributes:[]});
-     */
-    addPolygon(p:{items:[{x:number,y:number},{xc:number,yc:number,xe:number,ye:number,cw:'yes'|'no'}],type?:'surface'|'line',symbol?:'line',polarity?:'positive'|'negative',attributes?:'no'|'yes'}):void;   
-
-    /**
-     * 对选择的物件进行填充
-     * @returns æ— 
-     * @example 
-     * $.gen.selFill();
-     */
-    selFill():void;  
-
-    /**
-     * 做反选动作
-     * @returns æ— 
-     * @example 
-     * $.gen.selReverse();
-     */
-    selReverse():void;  
-
-    /**
-     * 删除选中的物件,如果一个都没有选择将删除所有的
-     * @returns æ— 
-     * @example 
-     * $.gen.selDelete();
-     */
-    selDelete():void;  
-
-    /**
-     * panel拼版
-     * @returns æ— 
-     * @example 
-     * $.gen.panelSR({line:1,step:'pcb',x:1,y:1,nx:2,ny:2,dx:3.6,dy:1.8});
-     */
-    panelSR(p:{line:number,step:string,x:number,y:number,nx:number,ny:number,dx:number,dy:number,angle:?,mirror:?}):void;  
-
-    /**
-     * flatten all information to defined layer如果传了job和step参数,如果没有拼版,则自动调用copy_layer功能
-     * @returns æ— 
-     * @example 
-     * $.gen.flattenLayer({source_layer:'comp',target_layer:'test'});
-     * $.gen.flattenLayer({job:'test',step:'pcb',source_layer:'comp',target_layer:'test'});
-     */
-    flattenLayer(p:{source_layer:'comp',target_layer:'test',job?:string,step?:string}):void;  
-
-    /**
-     * 取得指定symbol上的所有元素信息
-     * @returns [{type:'line',xs:0,ys:0,xe:0,ye:0,symbol:'r5',polarity:'positive'},
-     *            {type:'pad',x:0,y:0,symbol:'r5',polarity:'positive',mirror:'yes',angle:0}]
-     * @example 
-     * var getSymbolFeatures = $.gen.getSymbolFeatures({job:job,symbol:symbol});
-     */
-    getSymbolFeatures(p:{job:string,symbol:string,units:'inch'|'mm'}):t[];  
-
-    /**
-     * 取得指定层上的元素信息
-     * @returns [{type:'line',xs:0,ys:0,xe:0,ye:0,symbol:'r5',polarity:'positive'},
-     *            {type:'pad',x:0,y:0,symbol:'r5',polarity:'positive',mirror:'yes',angle:0}]
-     * @example 
-     * var getFeatures = $.gen.getFeatures({job:job,step:step,layer:layer});
-     */
-    getFeatures(p:{job:string,step:string,layer:string,options:''|'select'|'break_sr',units:'inch'|'mm',surface:0|1}):t[];  
-
-    /**
-     * 拷贝step到指定的job
-     * @returns æ— 
-     * @example 
-     * $.gen.copyStep({source_job:job,source_name:step,dest_job:job1,dest_name:name1});
-     */
-    copyStep(p:{source_job:string,source_name:string,dest_job:string,dest_name:string}):void;   
-
-    /**
-     * 更改选择到的symbol
-     * @returns æ— 
-     * @example 
-     * $.gen.selChangeSym({symbol:'r22.5'});
-     */
-    selChangeSym(p:{symbol:string,reset_angle?:'no'|'yes'}):void;   
-
-    /**
-     * 选择属于同一网络的元素(board)
-     * @returns æ— 
-     * @example 
-     * $.gen.selBoardNetFeat({x:1,y:1});
-     */
-    selBoardNetFeat(p:{x:number,y:number,operation?:'select'|'unselect',tol?:'8.947inch'}):void;  
-
-    /**
-     * 显示层
-     * @returns æ— 
-     * @example 
-     * $.gen.displayLayer({name:'l2',number:2});
-     */
-    displayLayer(p:{name:'l2',number?:1,display?:'yes'|'no'}):void;  
-
-    /**
-     * 获取NcSet列表
-     * @returns 返回NcSet名称列表
-     * @example 
-     * var getNcsetsList = $.gen.getNcsetsList({job:'demo',step:'panel',layer:'drill'});
-     */
-    getNcsetsList(p:{job:string,step:string,layer:string}):t[];  
-
-    /**
-     * 获取NcReg参数
-     * @returns 返回NcReg参数
-     * @example 
-     * var getNcsetReg = $.gen.getNcsetReg({job:'demo',step:'panel',layer:'drill',name:'set1'});
-     */
-    getNcsetReg(p:{job:string,step:string,layer:string,name:string}):object;  
-
-    /**
-     * 将选择的对像创建为一个step
-     * @returns æ— 
-     * @example 
-     * $.gen.selCreateStep({step:'pcb1',delete:'yes'});
-     */
-    selCreateStep(p:{step:string,x_datum?:0,y_datum?:0,delete?:'no'|'yes'}):void;  
-
-    /**
-     * 将选择对象以Step and Repeat方式移动
-     * @returns æ— 
-     * @example 
-     * $.gen.selMoveRepeat({dest_step:'panel',delete_orig:'yes'});
-     */
-    selMoveRepeat(p:{dest_step:string,x_repeats?:0,y_repeats?:0,delete_orig?:'yes'|'no'}):void;  
-
-    /**
-     * 创建一个新symbol
-     * @returns æ— 
-     * @example 
-     * $.gen.createSymbol({job:'demo',name:'symbol1'});
-     */
-    createSymbol(p:{job:string,name:string}):void;  
-
-    /**
-     * 检查symbol是否存在
-     * @returns 存在返回1,不存在返回0
-     * @example 
-     * var isSymbolExists = $.gen.isSymbolExists({job:'demo',symbol:'symbol1'});
-     */
-    isSymbolExists(p:{job:string,symbol:string}):boolean;  
-
-    /**
-     * 打开symbol编辑窗口
-     * @returns æ— 
-     * @example 
-     * $.gen.openSymbol({job:'demo',name:'symbol1'});
-     */
-    openSymbol(p:{job:string,name:string,iconic?:'no'|'yes'}):void;   
-
-    /**
-     * 关闭symbol编辑窗口
-     * @returns æ— 
-     * @example 
-     * $.gen.closeSymbol({);
-     */
-    closeSymbol():void;   
-
-    /**
-     * 获取checklist属性
-     * @returns 返回属性值;如果attr为一个字符串,则返回一个单值;如果attr为数组,则返回以属性名为key的hash
-     * @example 
-     * var getCheckAttr = $.gen.getCheckAttr({job:'demo',step:'pcb',checklist:'chklist1',attr:'min_via',nact:1,units:'mm'});
-     * //--> getCheckAttr = 0.12
-     * var getCheckAttr = $.gen.getCheckAttr({job:'demo',step:'pcb',checklist:'chklist1',attr:['min_via','min_spacing'],nact:1,units:'mm'});
-     * //--> getCheckAttr = {min_via:0.12,min_spacing:0.3}
-     */
-    getCheckAttr(p:{job:string,step:string,checklist:string,attr:string|Array[],nact:number,units?:'inch'|'mm'}):number|object;  
-
-    /**
-     * 获取profile的描述字符
-     * @returns 返回profile描述字符
-     * @example 
-     * var getProfile = $.gen.getProfile({job:'demo',step:'pcb',units:'mm'});
-     */
-    getProfile(p:{job:string,step:string,units?:'inch'|'mm'}):string;  
-
-    /**
-     * 清除高亮显示
-     * @returns æ— 
-     * @example 
-     * $.gen.clearHighlight();
-     */
-    clearHighlight():void;   
-
-    /**
-     * 选择打散
-     * @returns æ— 
-     * @example 
-     * $.gen.selBreak();
-     */
-    selBreak():void;   
-
-    /**
-     * 获取当前使用的单位    
-     * @returns 返回'inch'或'mm'
-     * @example 
-     * var getUnits = $.gen.getUnits();
-     */
-    getUnits():string;  
-
-    /**
-     * 获取层symbol列表
-     * @returns 返回层symbol列表
-     * @example 
-     * var getLayerSymsHist = $.gen.getLayerSymsHist({job:'demo',step:'panel',layer:'l2',options:'break_sr',units:'mm'});
-     */
-    getLayerSymsHist(p:{job:string,step:string,layer:string,options?:'undef'|'break_sr',units?:'inch'|'mm'}):object;  
-
-    /**
-     * 获取Symbol symbol列表
-     * @returns 返回层Symbol symbol列表
-     * @example 
-     * var getSymbolSymsHist = $.gen.getSymbolSymsHist({job:'demo',symbol:'struct1',units:'mm'});
-     */
-    getSymbolSymsHist(p:{job:string,symbol:string,units?:'inch'|'mm'}):object;  
-
-    /**
-     * 打开netlist窗口
-     * @returns æ— 
-     * @example 
-     * $.gen.netlistPageOpen();
-     */
-    netlistPageOpen(p:{set?:'no'|'yes'}):void;   
-
-
-    /**
-     * 重新计算netlist数据
-     * @returns æ— 
-     * @example 
-     * $.gen.netlistRecalc({job:'demo',step:'pcb',type:'cur_cad',display:'top'});
-     */
-    netlistRecalc(p:{job:string,step:string,type:'cad'|'ref'|'cur'|'cur_cad',display:'top'|'bottom'}):void;   
-
-    /**
-     * 比较netlist
-     * @returns 返回{full_report:'',shorted:1,broken:9,extra:3, missing:0,[possible_shorted:0],[possible_broken:0]}
-     * @example 
-     * var netlistCompare = $.gen.netlistCompare({job1:'demo',step1:'net',type1:'ref',job2:'demo',step2:'pcb',type2:'cur'});
-     */
-    netlistCompare(p:{job1:string,step1:string,type1:'cad'|'ref'|'cur'|'cur_cad',job2:string,step2:string,type2:'cad'|'ref'|'cur'|'cur_cad',display?:'yes'|'no'}):object; 
-
-    /**
-     * 关闭netlist窗口
-     * @returns æ— 
-     * @example 
-     * $.gen.netlistPageClose();
-     */
-    netlistPageClose():void;   
-
-    /**
-     * 清除选择的数据
-     * @returns æ— 
-     * @example 
-     * $.gen.selClearFeature();
-     */
-    selClearFeature():void;   
-
-    /**
-     * 获取Step and Repeat范围
-     * @returns 返回{xmin:,ymin:,xmax:,ymax:,xsize:,ysize:}
-     * @example 
-     * var getSRLimits = $.gen.getSRLimits({job:'demo',step:'panel'});
-     * var getSRLimits = $.gen.getSRLimits({job:'demo',step:'panel',include_step:'^(pcb|array)'});
-     */
-    getSRLimits(p:{job:string,step:string,include_step?:string,units?:'inch'|'mm'}):object; 
-
-    /**
-     * 获取Active范围
-     * @returns 返回{xmin:,ymin:,xmax:,ymax:,xsize:,ysize:}
-     * @example 
-     * var getActiveArea = $.gen.getActiveArea({job:'demo',step:'panel'});
-     */
-    getActiveArea(p:{job:string,step:string,units?:'inch'|'mm'}):object; 
-
-    /**
-     * 设定checklist参数
-     * @returns æ— 
-     * @example 
-     * $.gen.chklistCupd({chklist:'chk1',nact:2,params:{pp_layer:'l1;l2'}});
-     */
-    chklistCupd(p:{chklist:string,nact?:number,params:object,mode?:'regular'}):void;   
-
-    /**
-     * 获取checklist ERF 范围
-     * @returns 返回{
-                        p2p : [1,5,7],
-                        p2l : [2,5,6],
-                    }
-     * @example 
-     * var getChklistRange = $.gen.getChklistRange({job:'demo',step:'pcb',chklist:'pcb_check',nact:2});
-     */
-    getChklistRange(p:{job:string,step:string,chklist:string,nact:number,units?:'inch'|'mm'}):object; 
-
-    /**
-     * 设置checklist ERF 范围
-     * @returns æ— 
-     * @example 
-     * $.gen.chklistErfRange({job:'demo',step:'pcb',chklist:'pcb_check',nact:2,range:{p2p:[1,2,5],p2l:[4,5,6]},default_range:[0,0,0]});
-     */
-    chklistErfRange(p:{job:string,step:string,chklist:string,nact:number,range:object,default_range:[]}):void;   
-
-    /**
-     * 设置checklist ERF
-     * @returns æ— 
-     * @example 
-     * $.gen.chklistErf({chklist:'pcb_check',nact:2,erf:'STD mm'});
-     */
-    chklistErf(p:{chklist:string,nact:number,erf:string}):void; 
-
-    /**
-     * 重读checklist ERF
-     * @returns æ— 
-     * @example 
-     * $.gen.chklistRereadErf({chklist:'pcb_check',nact:2});
-     */
-    chklistRereadErf(p:{chklist:string,nact:number}):void; 
-
-    /**
-     * 选择checklist条目
-     * @returns æ— 
-     * @example 
-     * $.gen.chklistSelectAct({job:Job,step:Step,chklist:'pcb_check',nact:2,select:'yes',clear_before:'yes'});
-     */
-    chklistSelectAct(p:{job:string,step:string,chklist:string,nact:number,select:'yes'|'no',clear_before:'yes'|'no',nact_count:number}):void; 
-  
-    /**
-     * 选择所有checklist条目
-     * @returns æ— 
-     * @example 
-     * $.gen.chklistSelectAll({job:Job,step:Step,chklist:'pcb_check',select:'yes'});
-     */
-    chklistSelectAll(p:{job:string,step:string,chklist:string,select:'yes'|'no',nact_count:number}):void; 
-
-    /**
-     * 获取checklist条目总数
-     * @returns checklist条目总数
-     * @example 
-     * var getChklistActCount = $.gen.getChklistActCount({job:Job,step:Step,chklist:'pcb_check'});
-     */
-    getChklistActCount(p:{job:string,step:string,chklist:string}):number; 
-
-    /**
-     * chklist生成层
-     * @returns æ— 
-     * @example 
-     * $.gen.chklistCreateLyrs({chklist:'pcb_check',severity:0,suffix:'_tmp'});
-     */
-    chklistCreateLyrs(p:{chklist:string,severity:0|1|2|3,suffix:string}):void; 
-
-    /**
-     * 获取step范围
-     * @returns 返回{xmin:,ymin:,xmax:,ymax:,xsize:,ysize:}
-     * @example 
-     * var getStepLimits = $.gen.getStepLimits({job:'demo',step:'panel'});
-     */
-    getStepLimits(p:{job:string,step:string,units?:'inch'|'mm'}):object; 
-
-    /**
-     * 移动选择数据
-     * @returns æ— 
-     * @example 
-     * $.gen.selMove({dx:2,dy:2});
-     */
-    selMove(p:{dx:number,dy:number}):void;   
-
-    /**
-     * 替换
-     * @returns æ— 
-     * @example 
-     * $.gen.selSubstitute({mode:'substitute',symbol:'r100',tol:2.5});
-     */
-    selSubstitute(p:{mode?:'select'|'substitute',symbol:string,tol:number,x_datum:number,y_datum:number,dcode:number}):void;   
-
-    /**
-     * 变形
-     * @returns æ— 
-     * @example 
-     * $.gen.selTransform({});
-     */
-    selTransform(p:{mode?:'anchor'|'axis',oper:string,x_anchor:0,y_anchor:0,duplicate?:'no'|'yes',angle?:0,x_scale?:1,y_scale?:1,x_offset?:0,y_offset?:0}):void;   
-
-    /**
-     * 获取排版数据
-     * @returns 返回[{step:,xa:,ya:,dx:,dy:,nx:,ny:,angle:,mirror:,xmin:,ymin:,xmax:,ymax:,xsize:,ysize:}]
-     * @example 
-     * var getSR1 = $.gen.getSR1({job:'demo',step:'panel'});
-     */
-    getSR1(p:{job:string,step:string,units?:'inch'|'mm'}):t[]; 
-
-    /**
-     * 获取打散后的排版数据
-     * @returns 返回[{step:,xa:,ya:,angle:,mirror:,xmin:,ymin:,xmax:,ymax:,xsize:,ysize:}]
-     * @example 
-     * var getRepeat = $.gen.getRepeat({job:'demo',step:'panel'});
-     */
-    getRepeat(p:{job:string,step:string,units?:'inch'|'mm'}):t[]; 
-
-    /**
-     * 获取某个step内所有用到的step名称列表
-     * @returns 返回['step1','step2',...]
-     * @example 
-     * var getSubSteps = $.gen.getSubSteps({job:'demo',step:'panel'});
-     */
-    getSubSteps(p:{job:string,step:string}):t[]; 
-
-    /**
-     * 获取Datum点
-     * @returns 返回{x:?,y:?}
-     * @example 
-     * var getDatum = $.gen.getDatum({job:'demo',step:'panel'});
-     */
-    getDatum(p:{job:string,step:string,units?:'inch'|'mm'}):object; 
-
-    /**
-     * 获取Step属性
-     * @returns 返回属性值;如果attr为一个字符串,则返回一个单值;如果attr为数组,则返回以属性名为key的hash,如果attr没有定义,则返回所有属性
-     * @example 
-     * var getStepAttr = $.gen.getStepAttr({job:'demo',step:'pcb',attr:'attr1'});
-     * //--> getStepAttr = 0.12
-     * var getStepAttr = $.gen.getStepAttr({job:'demo',step:'pcb',attr:['attr1','attr2']});
-     * //--> getStepAttr = {attr1:0.12,attr2:0.3}
-     */
-    getStepAttr(p:{job:string,step:string,attr:'name'|['name1','name2']|'undef '}):number|object;  
-
-    /**
-     * 获取料号属性
-     * @returns 返回属性值;如果attr为一个字符串,则返回一个单值;如果attr为数组,则返回以属性名为key的hash,如果attr没有定义,则返回所有属性
-     * @example 
-     * var getJobAttr = $.gen.getJobAttr({job:'demo',attr:'attr1'});
-     * //--> getJobAttr = 0.12
-     * var getJobAttr = $.gen.getJobAttr({job:'demo',attr:['attr1','attr2']});
-     * //--> getJobAttr = {attr1:0.12,attr2:0.3}
-     */
-    getJobAttr(p:{job:string,attr:'name'|['name1','name2']|'undef '}):number|object;  
-
-    /**
-     * 设置料号属性
-     * @returns æ— 
-     * @example 
-     * $.gen.setJobAttr({job:'demo',attr:{name:2}});
-     */
-    setJobAttr(p:{job:string,attr:{},units?:'inch'|'mm'}):void;   
-
-    /**
-     * 获取绘底光绘参数
-     * @returns 返回{polarity:?,
-                    stretch_x:?,
-                    stretch_y:?,
-                    shift_x:?,
-                    shift_y:?,
-                    mirror_x:?,
-                    mirror_y:?,
-                    resolution:?,
-                    swap:?}
-     * @example 
-     * var getLPD = $.gen.getLPD({job:'demo',step:'panel',layer:'l2'});
-     */
-    getLPD(p:{job:string,step:string,layer:string}):object;  
-
-    /**
-     * 获取绘底片光绘所有参数
-     * @returns 返回{ lp7008 :{polarity:?,
-                                stretch_x:?,
-                                stretch_y:?,
-                                shift_x:?,
-                                shift_y:?,
-                                mirror_x:?,
-                                mirror_y:?,
-                                resolution:?,
-                                swap:?},
-        }
-     * @example 
-     * var getLPM = $.gen.getLPM({job:'demo',step:'panel',layer:'l2'});
-     */
-    getLPM(p:{job:string,step:string,layer:string,device?:string}):object;  
-
-    /**
-     * 设置当前属性
-     * @returns æ— 
-     * @example 
-     * $.gen.setCurrentAttribute({attribute:'.smd'});
-     * $.gen.setCurrentAttribute({attribute:['.smd','.bga']);
-     * $.gen.setCurrentAttribute({attribute:'.drill',option:'plated'});
-     * $.gen.setCurrentAttribute({attribute:['.smd',{attribute:'.drill',option:'plated'});
-     */
-    setCurrentAttribute(p:{attribute:[]|{}|''}):void;   
-
-    /**
-     * 重置当前属性
-     * @returns æ— 
-     * @example 
-     * $.gen.attributeReset();
-     */
-    attributeReset():void;   
-
-    /**
-     * 为选择的数据添加属性
-     * @returns æ— 
-     * @example 
-     * $.gen.selAddAttr({attribute:'.smd'});
-     * $.gen.selAddAttr({attribute:['.smd','.bga']);
-     * $.gen.selAddAttr({attribute:'.drill',option:'plated'});
-     * $.gen.selAddAttr({attribute:['.smd',{attribute:'.drill',option:'plated'});
-     */
-    selAddAttr(p:{attribute:[]|{}|''}):void;   
-
-    /**
-     * 设置Datum点
-     * @returns æ— 
-     * @example 
-     * $.gen.setDatum({x:0,y:0});
-     */
-    setDatum(p:{x:number,y:number}):void;  
-
-    /**
-     * 以layer net方式选择
-     * @returns æ— 
-     * @example 
-     * $.gen.selNetFeat({x:1,y:1});
-     */
-    selNetFeat(p:{x:number,y:number,operation?:'select'|'unselect',tol:'float'}):void;  
-
-    /**
-     * 获取原点座标
-     * @returns 返回 {x:?,y:?}
-     * @example 
-     * var getOrigin = $.gen.getOrigin();
-     */
-    getOrigin():object;  
-
-    /**
-     * 设置原点
-     * @returns æ— 
-     * @example 
-     * $.gen.origin({x:0,y:0});
-     */
-    origin(p:{x:number,y:number,push_in_stack?:0|1}):void;  
-
-    /**
-     * 显示check显示结果
-     * @returns æ— 
-     * @example 
-     * $.gen.chklistResShow({chklist:'chk1',nact:2});
-     */
-    chklistResShow(p:{chklist:string,nact?:number,x:0,y:0,w:0,h:0}):void;  
-
-    /**
-     * 关闭check list
-     * @returns æ— 
-     * @example 
-     * $.gen.chklistClose({chklist:'chk1'});
-     */
-    chklistClose(p:{chklist:string,mode?:'hide'}):void;  
-
-    /**
-     * 获取genesis database 列表
-     * @returns 返回 {'db1':'/gen_db/db2','db2':'/gen_db/db1',..}
-     * @example 
-     * var getDbList = $.gen.getDbList();
-     */
-    getDbList():object;  
-
-    /**
-     * 获取层属性
-     * @returns 返回属性值;如果attr为一个字符串,则返回一个单值;如果attr为数组,则返回以属性名为key的hash,如果attr没有定义,则返回所有属性
-     * @example 
-     * var getLayerAttr = $.gen.getLayerAttr({job:'demo',step:'pcb',layer:'l2',attr:'attr1'});
-     * //--> getLayerAttr = 0.12
-     * var getLayerAttr = $.gen.getLayerAttr({job:'demo',step:'pcb',layer:'l2',attr:['attr1','attr2']});
-     * //--> getLayerAttr = {attr1:0.12,attr2:0.3}
-     */
-    getLayerAttr(p:{job:string,step:string,layer:string,attr:'name'|['name1','name2']|'undef '}):number|object;  
-
-    /**
-     * 料号是否修改
-     * @returns 更改返回1,没有更改返回0
-     * @example 
-     * var isJobChanged = $.gen.isJobChanged({job:'demo'});
-     */
-    isJobChanged(p:{job:string}):boolean;  
-
-    /**
-     * Step是否修改
-     * @returns 更改返回1,没有更改返回0
-     * @example 
-     * var isStepChanged = $.gen.isStepChanged({job:'demo',step:'pcb'});
-     */
-    isStepChanged(p:{job:string,step:string}):boolean;  
-
-    /**
-     * 层是否修改
-     * @returns 更改返回1,没有更改返回0
-     * @example 
-     * var isLayerChanged = $.gen.isLayerChanged({job:'demo',step:'pcb',layer:'map'});
-     */
-    isLayerChanged(p:{job:string,step:string,layer:string}):boolean;  
-
-    /**
-     * 矩形选择
-     * @returns æ— 
-     * @example 
-     * $.gen.selectRectangle({x1:1,y1:1,x2:2,y2:3});
-     */
-    selectRectangle(p:{x1:number,y1:number,x2:number,y2:number}):void;  
-
-    /**
-     * 更改层名
-     * @returns æ— 
-     * @example 
-     * $.gen.renameLayer({job:'demo',layer:'top.art',new_name:'l1'});
-     */
-    renameLayer(p:{job:string,layer:string,new_name:string}):void;  
-
-    /**
-     * 更改step名
-     * @returns æ— 
-     * @example 
-     * $.gen.renameStep({job:'demo',name:'pcb_1',new_name:'pcb_a'});
-     */
-    renameStep(p:{job:string,name:string,new_name:string}):void;  
-
-    /**
-     * 设置层属性
-     * @returns æ— 
-     * @example 
-     * $.gen.setLayerAttr({job:'demo',step:'pcb',layer:'l2',attr:{name:2}});
-     */
-    setLayerAttr(p:{job:string,step:string,layer:string,attr:{name:number},units?:'inch'|'mm'}):void;  
-
-    /**
-     * 设置step属性
-     * @returns æ— 
-     * @example 
-     * $.gen.setStepAttr({job:'demo',step:'pcb',attr:{name:2}});
-     */
-    setStepAttr(p:{job:string,step:string,attr:{name:number},units?:'inch'|'mm'}):void;  
-
-    /**
-     * 设置钻孔Tool的User参数名称
-     * @returns 返回Tool User名称
-     * @example 
-     * var getToolUser = $.gen.getToolUser({job:'demo',step:'pcb',layer:'drill'});
-     */
-    getToolUser(p:{job:string,step:string,layer:string}):string;  
-
-    /**
-     * 设置钻孔Tool的Thick参数名称
-     * @returns 返回Tool Thick
-     * @example 
-     * var getToolThick = $.gen.getToolThick({job:'demo',step:'pcb',layer:'drill'});
-     */
-    getToolThick(p:{job:string,step:string,layer:string}):string;  
-
-    /**
-     * 设置钻孔Tool的slot参数名称
-     * @returns 返回Tool slots
-     * @example 
-     * var getToolSlots = $.gen.getToolSlots({job:'demo',step:'pcb',layer:'drill'});
-     */
-    getToolSlots(p:{job:string,step:string,layer:string}):string;  
-
-    /**
-     * 获取是否存在cad netlist
-     * @returns 代表存在返回1,不存在返回0
-     * @example 
-     * var cadNetlistExists = $.gen.cadNetlistExists({job:'demo',step:'pcb'});
-     */
-    cadNetlistExists(p:{job:string,step:string}):boolean;  
-
-    /**
-     * 获取是否存在 netlist是否存在
-     * @returns 代表存在返回1,不存在返回0
-     * @example 
-     * var netlistExists = $.gen.netlistExists({job:'demo',step:'net',type:'cadnet'});
-     */
-    netlistExists(p:{job:string,step:string,type:'cadnet'|'refnet'|'curnet'}):boolean;  
-
-    /**
-     * 层是否为空
-     * @returns 代表存在返回1,不存在返回0
-     * @example 
-     * var isLayerEmpty = $.gen.isLayerEmpty({job:'demo',step:'pcb',layer:'map'});
-     */
-    isLayerEmpty(p:{job:string,step:string,layer:string}):boolean;  
-
-    /**
-     * 返回genesis版本
-     * @returns type为`number`时返加 82|90,...
-                //type为`string`时返回 V8.2c (14Mar04)
-     * @example 
-     * var getGenVersion = $.gen.getGenVersion();
-     */
-    getGenVersion(p:{type?:'number'|'string'}):number|string;  
-
-    /**
-     * 获取层FeatHist
-     * @returns 返回{
-                        line:1,
-                        pad:10,
-                        surf:22,
-                        arc:4,
-                        text:1,
-                        total:38,
-                }
-     * @example 
-     * var getLayerFeatHist = $.gen.getLayerFeatHist({job:Job,step:Step,layer:'l2'});
-     */
-    getLayerFeatHist(p:{job:string,step:string,layer:string,options?:'undef'|'break_sr'|'select'}):object;  
-
-    /**
-     * 取得指定料号所有Symbol名字
-     * @returns 返回step列表
-     * @example 
-     * var getSymbolList = $.gen.getSymbolList({job:jobname});
-     */
-    getSymbolList(p:{job:string}):t[]; 
-
-    /**
-     * Copy Symbol
-     * @returns æ— 
-     * @example 
-     * $.gen.copySymbol({source_job:job1,source_name:'symbol1',dest_job:job1,source_name:'symbol2'});
-     */
-    copySymbol(p:{source_job:string,source_name:string,dest_job:string,source_name:string}):void;   
-
-    /**
-     * Clip Area
-     * @returns æ— 
-     * @example 
-     * $.gen.clipArea({area_rect:{x1:,y1:,x2:,y2:},inout:'in',contour_cut:'no'});
-     */
-    clipArea(p:{layers_mode:'layer_name'|'affected_layers',layer:string,margin:?,inout:'in'|'out',contour_cut:'no'|'yes',area_rect:{x1:number,y1:number,x2:number,y2:number},area_polygon:'mannual',ref_layer:'reference',area:'profile'|'reference'|'mannual'}):void;   
-
-    /**
-     * Compare Layers
-     * @returns 返回 0|1, 0:表示相同,1:表示不同
-     * @example 
-     * var compareLayers = $.gen.compareLayers();
-     */
-    compareLayers(p:{layer1?:string,job2?:string,step2?:string,layer2?:string,layer2_ext?:string,tol?:string,area?:'global'|'profile',ignore_attr?:string,map_layer?:string,map_layer_res?:string}):boolean;    
-
-    /**
-     * 暂停提示
-     * @returns 继续则返回:'OK',退出则返回:'underfined'
-     * @example 
-     * $.gen.PAUSE('暂停提示的内容');
-     */
-    PAUSE(p:string):string;   
-
-    /**
-     * 选择当前层所有Feature
-     * @returns æ— 
-     * @example 
-     * $.gen.selAllFeat();
-     */
-    selAllFeat():void;
-
-    /**
-     * 依照所选feature创建profile
-     * @returns æ— 
-     * @example 
-     * $.gen.selCreateProfile();
-     */
-    selCreateProfile():void;
-
-    /**
-     * 将选择的Feature加大
-     * @returns æ— 
-     * @example 
-     * $.gen.selResize({size: 3});
-     */
-    selResize(p:{size:number,corner_ctl:'no'}):void;
-
-}
-
-export = TopCamGenCom;
-
diff --git a/jtg js/node_modules/@types/topcam.ikm6/index.d.ts b/jtg js/node_modules/@types/topcam.ikm6/index.d.ts
deleted file mode 100644
index ef79a34aeba576b548d5ea928c39af04ad9c85cd..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/topcam.ikm6/index.d.ts	
+++ /dev/null
@@ -1,141 +0,0 @@
-import { type } from "os";
-
-declare class TopCamIkm6 {
-    constructor(p?:{cam_type?:'genesis'|'incam'='genesis', error_handle?:0|1=1});
-    /**
-     * 获取料号id
-     * @returns 返回料号名对应的id
-     * @example 
-     * var jobid = ikm.get_job_id("demo");
-     */
-    get_job_id(job_name:string):number;
-
-    
-    /**
-     * 获取列表数据
-     * @example 
-     * ikm.select_fieldarray({ 
-        table:'pdm_job',field:'jobname',order:'id DESC'
-    })
-     */
-    select_fieldarray(p:{table:string, field: any, order: any}):any;
-    
-    /**
-     * 获取数据,返回查找到的第一个
-     * @example 
-     * ikm.select_value({
-        table: 'pdm_job', field: 'jobname', 'where': { id: 1 }  
-    })
-     */
-    select_value(p:{table:string, field: any, where: any}):any;
-
-    /**
-     * 获取时间日期 
-     * @example 
-     * console.log('获取时间日期:' + ikm.get_now());
-     */
-    get_now():string;
-    
-    /**
-     * 获取时间日期 
-     * @example 
-     * console.log('获取时间日期:' + ikm.get_today());
-     */
-    get_today():string;
-
-     /**
-     * 获取配置 
-     * @example 
-     * ikm.get_config("measure-report-config","excel_template")
-     */
-    get_config( path:string, name:string ):any;
-    
-    /**
-     * 保存配置 
-     * @example 
-     * ikm.save_config({path:"test",name:"test",value:'test'})
-     */
-    save_config(p:{path: string , name:string, value: string }):void;
-
-    /**
-     * 插入数据 
-     * @example 
-     * ikm.insert({
-        table:"pdm_job", data:{jobname:"test"}
-    })
-     */
-    insert(p:{table: string , data:object }):void;
-
-    /**
-     * 删除数据 
-     * @example 
-     * ikm.dele({
-        table:"pdm_job", where: { jobname:"test2" }
-    })
-     */
-    dele(p:{table: string , where:Object }):void;
-
-    /**
-     * 更新数据 
-     * @example 
-     * ikm.update({
-        table:"pdm_job", data:{jobname:"test2"}, where: { jobname:"test" }
-    })
-     */
-    update(p:{table: string , data:Object, where:Object }):void;
-
-    /**
-     * 批量插入数据 
-     * @example 
-     * ikm.batch_insert({
-        table:"pdm_job", 
-        field: ["jobname"],
-        data: [{jobname:"test7""}, {jobname:"test8""}]
-    })
-     */
-    batch_insert(p:{table: string , field:array, data:array }):void;
-    
-    /**
-     * 更新料号工作流程日志
-     * @returns 
-     * @example 
-     * ikm.update_flow_report({job_id:1 , process_id: 1, report: '<html><head></head><body>test</body></html>'});
-     */
-    update_flow_report(p:{job_id: number, process_id:number, report:string }):void;
-    
-    /**
-     * get_info_style
-     * @returns 
-     * @example 
-     * var res = ikm.get_info_style({infoname:'pcb_type'});
-     */
-    get_info_style(p:{infoname: string }):[Object];
-
-    /**
-     * 获取流程状态
-     * @returns 返回流程的状态
-     * @example 
-     * var res = ikm.get_process_status({jobid:1, process_id:16});
-     */
-    get_process_status(p:{jobid: number, process_id:number}):Object;
-
-    /**
-     * round_number
-     * @returns number
-     * @example 
-     * var res = ikm.round_number(13.16221, 2);
-     */
-    round_number(number:number, precision:number):number;
-
-    /**
-     * 获取IKM的DB连接参数
-     * 
-     * @param 
-     * @returns 返回IKM的DB连接参数
-     */
-    getIkmConnectParameter():JSON
-}
-    
-export = TopCamIkm6;
-
-
diff --git a/jtg js/node_modules/@types/topcam.scriptfunc/index.d.ts b/jtg js/node_modules/@types/topcam.scriptfunc/index.d.ts
deleted file mode 100644
index 2d27651ba953b5d31d76b726ebb1c41621130bcd..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/topcam.scriptfunc/index.d.ts	
+++ /dev/null
@@ -1,77 +0,0 @@
-
-import * as TopCamGenCom from "topcam.gencom";
-import * as TopSinDatabase from "topsin.database";
-import * as TopCamIkm6 from "topcam.ikm6";
-import * as Gui from "topsin.gengui";
-declare namespace TopCamScriptFunc {
-    export interface ScriptArgv {
-        /**
-         * genesis接口对象
-         */
-        gen:TopCamGenCom
-
-        /**
-         * ikm6 接口对象
-         */
-        ikm:TopCamIkm6
-
-        /**
-         * gui 接口对象
-         */
-        gui:Gui
-
-        /**
-         * 配置文件
-         */
-        conf:Object
-        
-        /**
-         * 料号名
-         */
-        job:string
-
-        /**
-         * 料号ID
-         */
-        id:number
-
-        /**
-         * 用户ID
-         */
-        user_id:number
-
-        /**
-         * 用户名
-         */
-        user_name:string
-
-        /**
-         *  脚本名
-         */
-        script_name: string
-
-        /**
-         * 用户完整名
-         */
-        user_full_name:string
-
-        /**
-         * gen类型
-         */
-        gen_type:string
-
-        /**
-         * 框架传入的参数
-         */
-        par:object
-    }    
-
-    /**
-     * 获取脚本函数参数
-     */
-    export function argv():ScriptArgv;
-}
-
-export = TopCamScriptFunc;
-
-
diff --git a/jtg js/node_modules/@types/topsin.crypto/index.d.ts b/jtg js/node_modules/@types/topsin.crypto/index.d.ts
deleted file mode 100644
index dea414eede12b3295dddb56d8b0e1e6d46cdca2b..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/topsin.crypto/index.d.ts	
+++ /dev/null
@@ -1,105 +0,0 @@
-declare class TopSinCrypto {
-    /**
-     * 获取数据的MD5码
-     * @param iData 
-     */
-    md5(iData:string):string
-
-    /**
-     * 获取文件的MD5码
-     * @param iFilePath 
-     */
-    fileMd5(iFilePath:string):string
-
-    /**
-     * 获取数据的SHA256码
-     * @param iData 
-     */
-    sha256(iData:string):string
-
-    /**
-     * 获取文件的SHA256码
-     * @param iFilePath 
-     */
-    fileSha256(iFilePath:string):string
-
-    /**
-     * 获取数据的SHA256_3码
-     * @param iData 
-     */
-    sha3_256(iData:string):string
-
-    /**
-     * 获取文件的SHA256_3码
-     * @param iFilePath 
-     */
-    fileSha3_256(iFilePath:string):string
-    
-    /**
-     * 转为base64
-     * @param iData
-     */
-    encodeBase64(iData:any):any
-
-    /**
-     * 反解base64
-     * @param iData
-     */
-    decodeBase64(iData:any):any
-
-    /**获取uuid
-    */
-    uuid():string
-
-    /**
-     * 加密1版
-     * 
-     * @param key 加密用的key
-     * @param data 要加密的数据
-     * @returns 返回加密后的数据
-     */
-    e(key:String, data:String):String
-
-    /**
-     * 解密1版
-     * 
-     * @param key 解密用的key
-     * @param data 要解密的数据
-     * @returns 返回解密后的数据
-     */
-    d(key:String, data:String):String
-
-    /**
-     * 加密2版
-     * 
-     * @param data 要加密的数据
-     * @returns 返回加密后的数据
-     */
-    e2(data:String):String
-
-    /**
-     * 解密2版
-     * 
-     * @param data 要解密的数据
-     * @returns 返回解密后的数据
-     */
-    d2(data:String):String
-
-    /**
-     * 加密3版
-     * 
-     * @param data 要加密的数据
-     * @reutrns 返回解密后的数据
-     */
-    e3(data:String):String
-
-    /**
-     * 解密3版
-     * 
-     * @param data 要解密的数据
-     * @returns 返回解密后的数据
-     */
-    d3(data:String):String
-}
-
-export = TopSinCrypto;
diff --git a/jtg js/node_modules/@types/topsin.database/index.d.ts b/jtg js/node_modules/@types/topsin.database/index.d.ts
deleted file mode 100644
index c8d87f55f2dca0c3ab4f225662d47f2175f0a4a9..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/topsin.database/index.d.ts	
+++ /dev/null
@@ -1,619 +0,0 @@
-import * as TopSinError from "topsin.error";
-declare namespace TopSinDatabase {
-    export var DbType: { pg: 'pg', mysql:'mysql', mssql:'mssql',oracle:'oracle',sqlite:'sqlite'};
-    export type DbType = "pg" | "mysql" | "mssql" | "oracle" | "sqlite";
-    export type DbEncrypt = "" | "EB642";
-    export type FieldFormat = '' | 'string' | 'json' | 'array' | 'yyyy-MM' |'yyyy-MM-dd' | 'yyyy-MM-dd hh:mm' | 'yyyy-MM-dd hh:mm:ss';
-    export type UpdatePolicy = '' | 'json_merge' | 'array_append';
-    export interface SqlConnectionParam {
-        database_host:string,
-        database_name:string,
-        database_type:DbType,
-        database_user:string,
-        database_pwd:string,
-        database_encrypt?:DbEncrypt,
-        database_options?:string,
-        auto_close_timeout?:number,
-    }
-
-    export interface SqlSelectorMap {
-        table:string,
-        field?:string | Array<string>,
-        where?:string | Array<any> | Map<string,any>,
-        group?:string | Array<string>,
-        order?:string | Array<string>,
-        offset?:number,
-        limit?:number,
-        unique_field?:string,
-        value_field?:string,
-        field_format?:Map<string,FieldFormat>,
-    }
-
-    export interface SqlInserterMap {
-        table:string,
-        field?:string | Array<string>,
-        data:Map<string,any>,
-        unique_field?:string | Array<string>,
-        return_field?:string,
-        update_policy?:Map<string, UpdatePolicy>
-    }
-
-    export interface SqlUpdaterMap {
-        table:string,
-        data:Map<string, any>,
-        field?:string | Array<string>,
-        where?:string | Array<string> | Map<string,any>,
-        update_policy?:Map<string, UpdatePolicy>
-    }
-
-    export interface SqlDeleterMap {
-        table:string,
-        where?:string | Array<any> | Map<string,any>,
-    }
-
-
-    export interface SelectArrayDataResult {
-        field:Array<string>,
-        data: Array<Array<any>>
-    }
-
-    export class SqlQuery {
-        /**
-         * 查询一行数据,返回为一个Array<any>数组;
-         * 
-         * @param iSelectorMap 查询参数
-         * @returns 返回Array<any>结构
-         * @example
-         * query.selectArray({
-         *   table:'sys_user',
-         *   field:['id','username','fullname','tags','attr_data'],
-         *   field_format:{tags:'array','attr_data':'json'},
-         *   where:{username:'admin'}
-         * });
-         */
-        selectArray(iSelectorMap:SqlSelectorMap):Array<any>;
-
-        /**
-         * 查询一行数据,返回为一个Array<any>数组;
-         * 
-         * @param iSql Sql语句
-         * @param iFieldFormat 字段数据类型定义
-         * @param iValues Sql语句变量替换
-         * @returns 返回Array<any>结构
-         * @example
-         * query.selectArray(
-         *   "SELECT id,username,fullname,tags,attr_data FROM sys_user where username=:username",
-         *   {tags:'array', attr_data:'json'},
-         *  {username:'admin'}
-         * );
-         */
-        selectArray(iSql:string, iFieldFormat?:Map<string, FieldFormat>, iValues?:Map<string,any>):Array<any>;
-
-
-        /**
-         * 查询一行数据,返回为一个Map<string,any>数组;
-         * 
-         * @param iSelectorMap 查询参数
-         * @returns 返回Map<string,any>结构
-         * @example
-         * query.selectMap({
-         *   table:'sys_user',
-         *   field:['id','username','fullname','tags','attr_data'],
-         *   field_format:{tags:'array','attr_data':'json'},
-         *   where:{username:'admin'}
-         * });
-         */
-        selectMap(iSelectorMap:SqlSelectorMap):Map<string,any>;
-
-        /**
-         * 查询一行数据,返回为一个Map<string,any>数组;
-         * 
-         * @param iSql Sql语句
-         * @param iFieldFormat 字段数据类型定义
-         * @param iValues Sql语句变量替换
-         * @returns 返回Map<string,any>结构
-         * @example
-         * query.selectMap(
-         *   "SELECT id,username,fullname,tags,attr_data FROM sys_user where username=:username",
-         *   {tags:'array', attr_data:'json'},
-         *  {username:'admin'}
-         * );
-         */
-        selectMap(iSql:string, iFieldFormat?:Map<string, FieldFormat>, iValues?:Map<string,any>):Map<string,any>;
-
-
-        /**
-         * 查询数据,返回第一行第一列;
-         * 
-         * @param iSelector 查询参数
-         * @returns 返回第一行第一列数据
-         * @example
-         * query.selectValue({ table:'sys_user', field:'id',where:{username:'admin'}});
-         */
-        selectValue(iSelector:SqlSelectorMap):any;
-
-        /**
-         * 查询数据,返回第一行第一列;
-         * 
-         * @param iSql Sql语句
-         * @param iFieldFormat 字段数据类型定义
-         * @param iValues Sql语句变量替换
-         * @returns 返回第一行第一列数据
-         * @example
-         * query.selecValue( "SELECT id FROM sys_user where username=:username", {}, {username:'admin'});
-         */
-        selectValue(iSql:string, iFieldFormat?:Map<string, FieldFormat>, iValues?:Map<string,any>):any;
-
-        /**
-         * 查询数据,返回Array<Array<any>>结构;
-         * 
-         * @param iSelectorMap 查询参数
-         * @returns 返回Array<Array<any>>结构
-         * @example
-         * query.selectArraryArray({
-         *   table:'sys_user',
-         *   field:['id','username','fullname','tags','attr_data'],
-         *   field_format:{tags:'array','attr_data':'json'},
-         *   order:'id ASC',
-         *   limit:10,
-         * });
-         */
-        selectArrayArray(iSelectorMap:SqlSelectorMap):Array<Array<any>>;
-
-        /**
-         * 查询数据,返回Array<Array<any>>结构;
-         * 
-         * @param iSql Sql语句
-         * @param iFieldFormat 字段数据类型定义
-         * @param iValues Sql语句变量替换
-         * @returns 返回Array<Array<any>>结构
-         * @example
-         * query.selectArraryArray(
-         *   "SELECT id,username,fullname,tags,attr_data FROM sys_user where id < :maxid",
-         *   {tags:'array', attr_data:'json'},
-         *   {maxid:1000}
-         * );
-         */
-        selectArrayArray(iSql:string, iFieldFormat?:Map<string, FieldFormat>, iValues?:Map<string,any>):Array<Array<any>>;
-
-        /**
-         * 查询数据,返回Array<Map<string,any>>结构;
-         * 
-         * @param iSelectorMap 查询参数
-         * @returns 返回Array<Map<string,any>>结构
-         * @example
-         * query.selectArraryMap({
-         *   table:'sys_user',
-         *   field:['id','username','fullname','tags','attr_data'],
-         *   field_format:{tags:'array','attr_data':'json'},
-         *   order:'id ASC',
-         *   limit:10,
-         * });
-         */
-        selectArrayMap(iSelectorMap:SqlSelectorMap):Array<Map<string,any>>;
-
-        /**
-         * 查询数据,返回Array<Map<string,any>结构;
-         * 
-         * @param iSql Sql语句
-         * @param iFieldFormat 字段数据类型定义
-         * @param iValues Sql语句变量替换
-         * @returns 返回Array<Map<string,any>结构
-         * @example
-         * query.selectArrayMap(
-         *   "SELECT id,username,fullname,tags,attr_data FROM sys_user where id < :maxid",
-         *   {tags:'array', attr_data:'json'},
-         *   {maxid:1000}
-         * );
-         */
-        selectArrayMap(iSql:string, iFieldFormat?:Map<string, FieldFormat>, iValues?:Map<string,any>):Array<Map<string,any>>;
-
-        /**
-         * 查询数据,返回{field:Array<string>, data:Array<Array<any>>}结构;
-         * 
-         * @param iSelectorMap 查询参数
-         * @returns 返回{field:Array<string>, data:Array<Array<any>>}结构
-         * @example
-         * query.selectArraryData({
-         *   table:'sys_user',
-         *   field:['id','username','fullname','tags','attr_data'],
-         *   field_format:{tags:'array','attr_data':'json'},
-         *   order:'id ASC',
-         *   limit:10,
-         * });
-         */
-        selectArrayData(iSelectorMap:SqlSelectorMap):SelectArrayDataResult;
-
-        /**
-         * 查询数据,返回{field:Array<string>, data:Array<Array<any>>}结构;
-         * 
-         * @param iSql Sql语句
-         * @param iFieldFormat 字段数据类型定义
-         * @param iValues Sql语句变量替换
-         * @returns 返回{field:Array<string>, data:Array<Array<any>>}}结构
-         * @example
-         * query.selectArrayData(
-         *   "SELECT id,username,fullname,tags,attr_data FROM sys_user where id < :maxid",
-         *   {tags:'array', attr_data:'json'},
-         *   {maxid:1000}
-         * );
-         */
-        selectArrayData(iSql:string, iFieldFormat?:Map<string, FieldFormat>, iValues?:Map<string,any>):SelectArrayDataResult;
-
-       /**
-         * 查询数据,返回Map<string,Map<string,any>>结构;
-         * 
-         * @param iSelectorMap 查询参数
-         * @returns 返回Map<string,Map<string,any>>结构
-         * @example
-         * query.selectMapMap({
-         *   table:'sys_user',
-         *   field:['id','username','fullname','tags','attr_data'],
-         *   field_format:{tags:'array','attr_data':'json'},
-         *   unique_field:'id'
-         * });
-         */
-        selectMapMap(iSelectorMap:SqlSelectorMap):Map<string,Map<string,any>>;
-
-        /**
-         * 查询数据,返回Map<string,Map<string,any>>结构;
-         * 
-         * @param iSql Sql语句
-         * @param iUniqueField 唯一字段名 
-         * @param iFieldFormat 字段数据类型定义
-         * @param iValues Sql语句变量替换
-         * @returns 返回Map<string,Map<string,any>>结构
-         * @example
-         * query.selectMapMap(
-         *   "SELECT id,username,fullname,tags,attr_data FROM sys_user where id < :maxid",
-         *   "id",
-         *   {tags:'array', attr_data:'json'},
-         *   {maxid:1000}
-         * );
-         */
-        selectMapMap(iSql:string, iUniqueField:string, iFieldFormat?:Map<string, FieldFormat>, iValues?:Map<string,any>):Map<string,Map<string,any>>;
-
-         /**
-         * 查询数据,返回Map<string,any>结构;
-         * 
-         * @param iSelectorMap 查询参数
-         * @returns 返回Map<string,any>结构
-         * @example
-         * query.selectMapValue({
-         *   table:'sys_user',
-         *   field:['id','username','fullname','tags','attr_data'],
-         *   field_format:{tags:'array','attr_data':'json'},
-         *   unique_field:'id',
-         *   value_field:'username',
-         * });
-         */
-        selectMapValue(iSelectorMap:SqlSelectorMap):Map<string,any>;
-
-        /**
-         * 查询数据,返回Map<string,any>结构;
-         * 
-         * @param iSql Sql语句
-         * @param iUniqueField 唯一字段名 
-         * @param iValueField 值字段名
-         * @param iFieldFormat 字段数据类型定义
-         * @param iValues Sql语句变量替换
-         * @returns 返回Map<string,any>结构
-         * @example
-         * query.selectMapValue(
-         *   "SELECT id,username,fullname,tags,attr_data FROM sys_user where id < :maxid",
-         *   "id", "username",
-         *   {tags:'array', attr_data:'json'},
-         *   {maxid:1000}
-         * );
-         */
-        selectMapValue(iSql:string, iUniqueField:string, iValueField:string, iFieldFormat?:Map<string, FieldFormat>, iValues?:Map<string,any>):Map<string,any>;
-
-        /**
-         * 查询数据,返回Array<any>结构;
-         * 
-         * @param iSelectorMap 查询参数
-         * @returns 返回Array<any>结构
-         * @example
-         * query.selectArrayValue({
-         *   table:'sys_user',
-         *   field:['id','username','fullname','tags','attr_data'],
-         *   field_format:{tags:'array','attr_data':'json'},
-         *   value_field:'username',
-         * });
-         */
-        selectArrayValue(iSelectorMap:SqlSelectorMap):Array<any>;
-
-        /**
-         * 查询数据,返回Array<any>结构;
-         * @param iSql Sql语句
-         * @param iValueField 值字段名
-         * @param iFieldFormat 字段数据类型定义
-         * @param iValues Sql语句变量替换
-         * @returns 返回Array<any>结构
-         * @example
-         * query.selectArrayValue(
-         *   "SELECT id,username,fullname,tags,attr_data FROM sys_user where id < :maxid",
-         *   "username",
-         *   {tags:'array', attr_data:'json'},
-         *   {maxid:1000}
-         * );
-         */
-        selectArrayValue(iSql:string, iValueField:string, iFieldFormat?:Map<string, FieldFormat>, iValues?:Map<string,any>):Array<any>;
-
-
-        /**
-         * 查询数据的行数;
-         * @param iSelectorMap 查询参数
-         * @returns 返回行数
-         * @example
-         * query.selectCount({
-         *   table:'sys_user',
-         *   where:'id < 100',
-         * });
-         */
-        selectCount(iSelectorMap:SqlSelectorMap):number;
-
-        /**
-         * 插入一行
-         * 
-         * @param iInserterMap 插入参数
-         * @returns 返回定义的return_field列数据;
-         * @example
-         * var id = query.insertRow({
-         *   table:'sys_user',
-         *   data:{username:'tony', fullname:'Tony Guo', status:'active'},
-         *   return_field:'id',
-         * }); 
-         */
-        insertRow(iInserterMap:SqlInserterMap):any;
-
-        /**
-         * 批量插入数据
-         * 
-         * @param iTable 表名 
-         * @param iField 字段
-         * @param iData 数据
-         * @example
-         * query.batchInsert('sys_user',['username','fullname'], [{username:'user1',fullname:'User 1'},{username:'user2',fullname:'User2'}])
-         */
-        batchInsert(iTable:string, iField:Array<string>, iData:Array<Map<string, any>>);
-
-        /**
-         * 更新数据;
-         * @param iUpdaterMap 更新参数
-         * @returns 影响行数
-         * @example
-         * query.updateRow({
-         *   table:'sys_user',
-         *   field:['tags'],
-         *   data:{tags:'{a,b}']},
-         *   where:{username:'admin'},
-         * })
-         */
-        updateRow(iUpdaterMap:SqlUpdaterMap):number;
-
-
-        /**
-         * 更新数据;
-         * 
-         * @param iTable 表名
-         * @param iData 更新数据
-         * @param iWhere Where条件
-         * @param iUpdatePolicy æ›´æ–°ç­–ç•¥
-         * @param iField 更新字段
-         * @returns 返回影响行数
-         */
-        updateRow(iTable:string, iData:Map<string,any>,
-            iWhere:string|Array<string>|Map<string,any>,
-            iUpdatePolicy?:Map<string,any>,
-            iField?:Array<string>
-        ):number;
-
-        /**
-         * 替换行(存在则更新,不存在则插入)
-         * @param iReplacerMap 更新参数
-         * @returns 返回指定的字段数据
-         * @example
-         * query.replaceRow({
-         *   talbe:'sys_user',
-         *   data:{username:'tony',fullname:'Tony GUO'},
-         *   unique_field:['username'],
-         *   return_field:'id'
-         * });
-         */
-        replaceRow(iReplacerMap:SqlInserterMap):any;
-
-         /**
-         * 替换行(存在则更新,不存在则插入)
-         * @param iTable 表名
-         * @param iData 替换数据
-         * @param iUniqueField 只一字段
-         * @param iUpdatePolicy æ›´æ–°ç­–ç•¥
-         * @param iReturnField 返回字段
-         * @returns 返回指定的字段数据
-         * @example
-         * query.replaceRow({
-         *   talbe:'sys_user',
-         *   data:{username:'tony',fullname:'Tony GUO'},
-         *   unique_field:['username'],
-         *   return_field:'id'
-         * });
-         */
-        replaceRow(iTable:string, iData:Map<string,any>, 
-            iUniqueField:Array<string>, iUpdatePolicy?:Map<string,UpdatePolicy>,
-            iReturnField?:string
-        ):any;
-
-
-        /**
-         * 删除行;
-         * 
-         * @param iDeleterMap 删除参数
-         * @returns 返回影响行数
-         * @example
-         * query.deleteRow({table:'sys_user', where: {username:'tony'}});
-         */
-        deleteRow(iDeleterMap:SqlDeleterMap):number;
-
-         /**
-         * 删除行;
-         * 
-         * @param iTable 表名
-         * @param iWhere Where条件
-         * @returns 返回影响行数
-         * @example
-         * query.deleteRow('sys_user'{username:'tony'});
-         */
-        deleteRow(iTable:string, iWhere:string|Array<any>|Map<string,any>):number;
-
-        /**
-         * 执行SQL语句;
-         * 
-         * @param iSql sql语句
-         * @returns 返回执行是否成功
-         */
-        execSql(iSql:string):boolean;
-
-        /**
-         * 判断表是否存在;
-         * 
-         * @param iTable 表名
-         * @returns 返回表是否存在
-         */
-        isTableExists(iTable:string):boolean
-
-        /**
-         * 获取表列表;
-         * 
-         * @returns 返回表列表
-         */
-        getTableList():Array<string>
-
-        /**
-         * 判断字段是否存在;
-         * 
-         * @param iTable 表名 
-         * @param iField 字段名
-         * @returns 返回字段是否存在
-         */
-        isFieldExists(iTable:string, iField:string):boolean;
-        
-        /**
-         * 获取字段列表;
-         * 
-         * @param iTable 表名
-         * @returns 返回字段列表
-         */
-        getFieldList(iTable:string):Array<string>;
-
-        /**
-         * 设置在新增数据时,是否可以设置自增长字段;(仅对Sql Server有效);
-         * 
-         * @param iTable 表名
-         * @param iStatus 状态
-         * 
-         */
-        setAutoIncrementStatus(iTable:string, iStatus:string):boolean;
-
-        /**
-         * 获取数据库当前时间,格式为yyyy-MM-dd hh:mm:ss
-         */
-        getNow():string;
-
-        /**
-         * 获取数据库当前日期,格式为yyyy-MM-dd
-         */
-        getToday():string;
-
-
-        /**
-         * 获取错误文本信息;
-         */
-        errorString():string;
-
-        /**
-         * 获取最后一次错误消息;
-         */
-        lastError():TopSinError;
-
-        /**
-         * 清除错误;
-         */
-        clearError():void;
-
-        /**
-         * 事务开始;
-         * @param iCheckConnection 是否检查连接是否正常;
-         */
-        begin(iCheckConnection?:boolean):boolean;
-
-        /**
-         * 提交事务;返回当前事务嵌套层级;
-         */
-        commit():number;
-
-        /**
-         * 回滚事务;返回当前事务的嵌套层级;
-         */
-        rollback():number;
-
-        /**
-         * 打开数据库连接;
-         * @param iCheckConnection 是否检查连接是否正常;
-         */
-        open(iCheckConnection?:boolean):boolean;
-
-        /**
-         * 关闭数据库连接;
-         */
-        close():boolean
-
-        /**
-         * 判断数据库是否连接上;
-         */
-        isConnected():boolean;
-
-        /**
-         * 返回数据库类型;
-         */
-        databaseType():string;
-    }
-    /**
-     * 添加数据库连接;
-     *
-     * @param iCntParam 连接参数
-     * @param iCntName 连接名称,默认为空;为空时代表默认连接
-     * @example 
-     *db.addConnection({databse_type:db.DbType.pg,
-     *  database_host:'127.0.0.1:5433',
-     *  database_name:'TOPMES_SNAPSHOT_V6',
-     *  database_user:'toplinker',
-     *  database_pwd:'Password'
-     *});
-     */
-    export function addConnection(iCntParam:SqlConnectionParam, iCntName?:string):void;
-
-   /**
-    * 移除已添加的连接;
-    * @param iCntName 连接名称
-    */
-    export function removeConnection(iCntName:string):void
-    
-    /**
-     * 获取一个数据库操作对象;
-     * @param iCntName 连接名称
-     */
-    export function query(iCntName?:string):SqlQuery
-
-    /**
-     * 获取一个数据库操作对象并执行回调函数;
-     * @param iCntName 连接名称
-     * @param iCallback 回调函数
-     */
-    export function query(iCntName:string, iCallback:(query:SqlQuery) => any):any
-
-}
-
-export = TopSinDatabase;
-
-
diff --git a/jtg js/node_modules/@types/topsin.gengui/index.d.ts b/jtg js/node_modules/@types/topsin.gengui/index.d.ts
deleted file mode 100644
index 2624d375deab1f02a331e5fbf681a58d127d9ef9..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/topsin.gengui/index.d.ts	
+++ /dev/null
@@ -1,343 +0,0 @@
-declare namespace TopSinSocket {
-    export class TcpSocketImpl {
-        /**
-         * 中止连接
-         */
-        abort():void
-
-        /**
-         * 绑定地址和端口,返回是否成功
-         */
-        bind(ip:String, port:Number):boolean
-
-        /**
-         * 连接到主机
-         */
-        connectToHost(ip:String, port:Number):void
-
-        /**
-         * 断开与主机的连接,如果还有数据在写,那么会在结束后断开
-         */
-        disconnectFromHost();
-
-        /**
-         * 返回最近的一次错误
-         */
-        error():String
-
-        /**
-         * 冲刷缓存
-         */
-        flush():boolean
-
-        /**
-         * socket是否可用
-         */
-        isValid():boolean
-
-        /**
-         * 本地ip
-         */
-        localAddress():String
-
-        /**
-         * 本地port
-         */
-        localPort():Number
-
-        /**
-         * 对端ip
-         */
-        peerAddress():String
-
-        /**
-         * 对端port
-         */
-        peerPort():Number
-
-        /**
-         * 读缓存大小
-         */
-        readBufferSize():Number
-        
-        /**
-         * 设置读缓存大小
-         */
-        setReadBufferSize(size:Number):void
-
-        /**
-         * 等待直到连接成功或超时
-         * 
-         * @param msec 超时时间(毫秒)
-         * @return true 表示连接成功,false表示超时
-         */
-        waitForConnected(msec:Number):boolean
-
-        /**
-         * 等待直到断开连接
-         * 
-         * @param msec 超时时间(毫秒)
-         * @return true 表示断开成功,false表示超时
-         */
-        waitForDisconnected(msec:Number):boolean
-
-        /**
-         * 等待直到发送完至少1字节或超时
-         * 
-         * @param msec 超时时间(毫秒)
-         * @return true 表示已发送至少1字节, false表示超时
-         */
-        waitForReadyRead(msec:Number):boolean
-
-        /**
-         * 是否已读完
-         */
-        atEnd():boolean
-
-        /**
-         * 可读字节数
-         */
-        bytesAvailable():Number
-
-        /**
-         * 待写字节数
-         */
-        bytesToWrite():Number
-
-        /**
-         * 是否可读一行数据
-         * 注意:二进制数据不一定存在换行
-         */
-        canReadLine():boolean
-
-        /**
-         * 关闭连接
-         */
-        close():void
-
-        /**
-         * 错误消息
-         */
-        errorString():String
-
-        /**
-         * 连接是否打开
-         */
-        isOpen():boolean
-
-        /**
-         * 是否可读
-         */
-        isReadable():boolean
-
-        /**
-         * 是否可写
-         */
-        isWritable():boolean
-
-        /**
-         * 读取数据
-         * 如果数据不够会发生阻塞
-         * 
-         * @param size 数据大小
-         * @return 返回size大小的数据
-         */
-        read(size:Number):String
-
-        /**
-         * 读取全部数据直到不可读
-         * 
-         * @return 读到的数据
-         */
-        readAll():String
-
-        /**
-         * 读取一行数据
-         * 注意:二进制数据不一定存在换行
-         */
-        readLine():String
-
-        /**
-         * 发送数据
-         * 
-         * @param data 字符串(准确的说是 node 中的Buffer)
-         * @return 发送完成的字节数
-         */
-        write(data:String):Number
-
-        /**
-         *  注册事件
-         * 
-         * connected
-         * 连接成功,对应的callback: function(conn: TcpSocket) {}
-         * 
-         * disconnected
-         * 连接断开,对应的callback: function(conn: TcpSocket) {}
-         * 
-         * error
-         * 发生错误, 对应的callback: function(conn: TcpSocket, error:String) {}
-         * 
-         * byteswritten
-         * 发送完数据, 对应的callback: function(conn: TcpSocket, nbytes: Number) {}
-         * 
-         * readready
-         * 连接可读, 对应的callback: function(conn: TcpSocket) {}
-         */
-        on(event:TcpSocketEvent, callback:Function)
-    }
-    
-
-    export class TcpServerImpl {
-        constructor(parent:mainLoop):void
-
-        /**
-         * 关闭连接
-         */
-        close():void
-    
-        /**
-         * 最后一个错误原因
-         */
-        errorString():String
-    
-        /**
-         * 是否有排队连接
-         */
-        hasPendingConnections():boolean
-    
-        /**
-         * 监听地址、端口
-         */
-        listten(addr:String, port:Number):boolean
-    
-        /*** accepterror
-     * accept出错,对应的callback: function(err: string) {}
-         * 是否在监听
-         */
-        isListening():boolean
-    
-        /**
-         * 最大排队连接数
-         */
-        maxPendingConnections():Number
-    
-        /**
-         * 下一个排队连接
-         */
-        nextPendingConnection():TcpSocket
-    
-        /**
-         * 暂停接受新的连接
-         */
-        pauseAccepting():void
-    
-        /**
-         * 恢复接受新的连接
-         */
-        resumeAcception():void
-    
-        /**
-         * 服务端监听地址
-         */
-        serverAddress():String
-    
-        /**
-         * 服务端监听端口
-         */
-        serverPort():Number
-    
-        /**
-         * 服务端错误
-         */
-        serverError():String
-    
-        /**
-         * 设置最大排队连接
-         */
-        setMaxPendingConnections(n:Number):void
-    
-        /**
-         * 等待下一个连接
-         * 
-         * @param msec 等待的毫秒数
-         * @return 是否成功
-         */
-        waitForNewConnection(msec:Number):boolean
-    
-        /**
-         * 注册事件
-         * 
-         * accepterror
-         * accept出错,对应的callback: function(server: TcpServer, err: string) {}
-         * 
-         * newconnection
-         * 新的客户端连接成功,对应的callback: function(conn: TcpSocket) {}
-         */
-        on(event:TcpServerEvent, callback:Function):void
-    }
-
-    /**
-    * 创建一个新的TcpServer对象
-    * 
-    * @param parent 全局的事件循环
-    * @example
-    * 
-    * var socket = require('topsin.socket');
-    * var server = socket.TcpServer(mainLoop);
-    * 
-    * server.on('newconnection', function(conn) {
-    *      console.log("client: " + conn.peerPort() + ", connected");
-    *      conn.on('readready', function(conn) {
-    *          var data = conn.readAll();
-    *          console.log(data);
-    *          conn.write(data);
-    *      });
-    *      conn.on("disconnected", function(c) {
-    *          console.log("client: " + c.peerPort() + ", closed");
-    *      });
-    * );
-    * 
-    * server.on('accepterror', function(server) {
-    *      server.close();
-    *      console.log("exit");
-    *      mainLoop.quit();
-    * });
-    * 
-    * server.listen("127.0.0.1", 8888);
-    * mainLoop.exec();
-    */
-    export function TcpServer(parent:mainLoop):TcpServerImpl;
-
-    /**
-     * 创建一个新的TcpSocket对象
-     * 
-     * @param parent 全局的事件循环
-     * 
-     * @example
-     *  
-     * var socket = require('topsin.socket');
-     * 
-     * var client = socket.TcpSocket(mainLoop);
-     * client.on('connected', function(conn) {
-     *       console.log("connected");
-     * });
-     *  
-     * conn.on('readready', function(conn) {
-     *       var data = conn.readAll();
-     *       console.log(data);
-     *       conn.write(data);
-     *  });
-     *  
-     *  conn.on('disconnected', function(conn) {
-     *       console.log(conn.errorString());
-     *       mainLoop.quit();     
-     *  });
-     *  
-     *  client.connectToHost("127.0.0.1", 8888);
-     *  mainLoop.exec();
-     */
-    export function TcpSocket(parent:mainLoop):TcpSocketImpl;
-}
-
-export class mainLoop {};
-export = TopSinSocket;
\ No newline at end of file
diff --git a/jtg js/node_modules/@types/topsin.genmath/index.d.ts b/jtg js/node_modules/@types/topsin.genmath/index.d.ts
deleted file mode 100644
index 3c89c1305d675222f81be1222c5669be28fe5161..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/topsin.genmath/index.d.ts	
+++ /dev/null
@@ -1,451 +0,0 @@
-declare class GenMath {
-    /**
-     * 调整box大小
-     * 
-     * @param box map结构如: {xmin: 0, xmax: 1, ymin: 0, ymax: 1}
-     * @param size 要调整的大小如: 1
-     * @returns 调整大小后的box
-     */
-    resizeBox(box:JSON, size: Number):JSON
-
-    /**
-     * 偏移点坐标
-     * 
-     * @param point 点的坐标如: {x: 1, y:1}
-     * @param shiftx x偏移,如 1
-     * @param shifty y偏移,如 2
-     * @param attr 其他属性,JSON类型,如 {mirror: false}
-     * @returns 偏移后的点
-     */
-    gpShift(point:JSON, shiftx:Number, shifty:Number, attr:JSON):JSON
-
-    /**
-     * 变换点列表
-     * 
-     * @param base 基准点坐标
-     * @param angle 选择角度,可选角度为 0, 90, 180, 270
-     * @param mirror 是否镜像 true/false
-     * @param shiftx x偏移 1
-     * @param shifty y偏移 0
-     * @param point 进行平移操作的点列表 [{x: .0, y: .0}, {x: 1.0, y: 2.0}]
-     * @returns 变换后的点列表
-     */
-    pTrans(base:JSON, angle:Number, mirror:Boolean, shiftx:Number, shifty:Number, points:[JSON]):[JSON]
-
-    /**
-     * 旋转box
-     * 
-     * @param box 如 {xmin: 0, ymin: 0, xmax: 1, ymax: 1}
-     * @angle 选择角度 0, 90, 180, 270
-     * @returns 旋转后的box
-     */
-    rotateBox(box:JSON, angle:Number):JSON
-
-    /**
-     * 点到点的最小距离
-     * @param p1 第一个点如 {x: .0, y: .0}
-     * @param p2 第二个点如 {x: 1, y: .0}
-     * @returns 距离
-     */
-    point2PointDis(p1:JSON, p2:JSON):Number
-
-    /**
-     * 线段长度,等同于点到点的最小距离
-     * 
-     * @param line 输入线段如: {xs: .0, ys: .0, xe: 1.0, ye: .0}
-     * @returns 距离
-     */
-    lineLength(line:JSON):Number
-
-    /**
-     * 点到线段的最短距离
-     * 
-     * @param p 输入点
-     * @param line 输入线段
-     * @returns 距离
-     */
-    point2LineDis(p:JSON, line:JSON):Number
-
-    /**
-     * 线段是否相交
-     * 
-     * @param line1 第一条线段如 {xs: -1, ys: 0, xe: 2, ye: 0}
-     * @param line2 第二条线段如 {xs: 0, ys: -1, xe: 0, ye: 1}
-     * @param extend true/false,可选,是否判断延长线相交
-     * @returns 相交返回true否则false
-     */
-    lineIntersect(line1:JSON, line2:JSON, extend:Boolean):Boolean
-
-    /**
-     * 线段到线段的距离
-     * 
-     * @param line1 第一条线段如 {xs: -1, ys: 0, xe: 2, ye: 0}
-     * @param line2 第二条线段如 {xs: 0, ys: -1, xe: 0, ye: 1}
-     * @returns 距离
-     */
-    line2LineDis(line1:JSON, line2:JSON):Number
-
-    /**
-     * 多边形到多边形的距离
-     * 多边形即点的列表
-     * 
-     * @param p1 第一个多边形,如: [{x: .0, y: .0}, {x: 1, y: 1}, {x: 2, y:2}]
-     * @param p2 第二个多边形,如: [{x: .0, y: -1}, {x: 1, y: 1}, {x: 2, y:2}]
-     * @returns 距离
-     */
-    polygon2PolygonDis(p1:[JSON], p2:[JSON]):Number
-
-    /**
-     * 点到多边形的距离
-     * 
-     * @param p 点如 {x: 0, y: 0}
-     * @param poly 多边形如 [{x: .0, y: -1}, {x: 1, y: 1}, {x: 2, y:2}]
-     * @returns 距离
-     */
-    point2PolygonDis(p:JSON, poly:[JSON]):Number
-
-    /**
-     * 线段到多边形的距离
-     * 
-     * @param line 线段如 {xs: -1, ys: 0, xe: 2, ye: 0}
-     * @param poly 多边形如 [{x: .0, y: -1}, {x: 1, y: 1}, {x: 2, y:2}]
-     * @returns 距离
-     */
-    line2PolygonDis(line:JSON, poly:[JSON]):Number
-
-    /**
-     * 将sym转为多边形
-     * sym是代表一个形状;
-     * 主要有三种:如下:
-     * 1. r10.4表示直径为0.0104的圆形
-     * 2. s12.4表示开宽为0.0124的正方形
-     * 3. rect10.2x12.4表示长为0.0102,宽为0.0124的长方形
-     * 
-     * 
-     * { "type":"line", "symbol":"r10.2", "xs": 0, "ys": 0,"xe": 1,"ye":1 }
-     * { "type":"pad", "symbol":"rect10.2x20.2", "x":0, "y":1, "angle":90, "mirror":true}
-     * { "type":"surface", "symbol":[{"x":0,"y":0},{"x":0,"y":1},{"x":1,"y":1},{"x":1,"y":0},{"x":0,"y":0}]}
-     * 
-     * @param sym 形状
-     * @return 多边形(即点的列表)
-     */
-    sym2Polygon(sym:JSON):[JSON]
-
-    /**
-     * 点到形状的距离
-     * 
-     * @param p 点
-     * @param sym 形状
-     * @returns 距离
-     */
-    point2SymDis(p:JSON, sym:JSON):Number
-
-    /**
-     * 线段到形状距离
-     * 
-     * @param line 线段
-     * @param sym 形状
-     * @returns 距离
-     */
-    line2SymDis(line:JSON, sym:JSON):Number
-
-    /**
-     * 形状到形状距离
-     * @param sym1 第一个形状
-     * @param sym2 第二个形状
-     * @returns 距离
-     */
-    sym2SymDis(sym1:JSON, sym2:JSON):Number
-
-    /**
-     * 形状到多个形状的最短距离
-     * 
-     * @param sym 形状
-     * @param featlist 形状列表(即[sym]) 见 sym2Polygon
-     * @returns 距离
-     */
-    sym2FeatlistDis(sym:JSON, featlist:[JSON]):Number
-
-    /**
-     * 判断形状到多个形状的最短距离是否小于给定值
-     * 
-     * @param sym 形状
-     * @param featlist 形状列表(即[sym]) 见 sym2Polygon
-     * @param dist 给的的距离 如 1.0
-     * @returns true距离表示小于dist否则false
-     */
-    checkSymTouchFeatlist(sym:JSON, featlist:[JSON], dist:Number):Boolean
-
-    /**
-     * 线段到多个形状的最短距离
-     * 
-     * @param line 线段
-     * @param feat 形状列表
-     * @returns 距离
-     */
-    line2FeatlistDis(line:JSON, feat:[JSON]):Number
-
-    /**
-     * 获取固定y值的点列表
-     * 
-     * @param from 起始位置
-     * @param to 终止位置
-     * @param step 跳步
-     * @param startFrom 起点 可取 min, max, center 表示起始为from, to, (from+to)/2
-     * @param y 固定的 y值
-     * @returns 点列表
-     * 
-     * @example
-     * require("topsin.genmath");
-     * 
-     * var g = new GenMath();
-     * var r = g.gpListLineX(0, 10, 4, "min", 1);
-     * console.log(r);
-     * 
-     * => [{"x":0,"y":1},{"x":4,"y":1},{"x":8,"y":1}]
-     */
-    gpListLineX(from:Number, to:Number, step:Number, startFrom:String, y:Number):[JSON]
-
-    /**
-     * 获取固定x值的点列表
-     * 参考 gpListLineX
-     */
-    gpListLineY(from:Number, to:Number, step:Number, startFrom:String, x:Number):[JSON]
-
-    /**
-     * 获取固定范围的点列表
-     * 
-     * @param box 范围
-     * @param step 跳步
-     * @param startAnchor 起始位置,可以是点如 {x: 1, y:2},可以是方向 west, south 表示 min; north, east表示max,默认为center
-     * @param direct 方向,可选 "x" 和 "y", 或者为空
-     * @param type 类型,可选 "ring" 和 "snake"
-     * @returns 点列表
-     */
-    gpListArea(area:JSON, step:Number, startAnchor:Object, direct:String, type:String):[JSON]
-
-    /**
-     * 返回pi值
-     */
-    pi():Number
-
-    /**
-     * 弧度转角度
-     */
-    rad2Deg(rad:Number):Number
-
-    /**
-     * 角度转弧度
-     */
-    deg2Rad(deg:Number):Number
-
-    /**
-     * 线段角度
-     * 
-     * @return 角度
-     */
-    lineAngle(line:JSON):Number
-
-    /**
-     * 绕基点旋转点
-     * 
-     * @param base 几点
-     * @param point 要旋转的点
-     * @returns 旋转后的点
-     */
-    rotatePoint(base:JSON, point:JSON):JSON
-
-    /**
-     * 返回给定角(∠ABC)的角度
-     * 
-     * @param B 顶点
-     * @param A 点
-     * @param C 点
-     * @returns 角度
-     */
-    calcAngleThreePoints(B:JSON, A:JSON, C:JSON):Number
-
-    /**
-     * 获取线段上偏移起点给定长度的点
-     * 
-     * @param line 线段
-     * @param len 长度
-     * @return 点
-     */
-    calPointOnLine(line:JSON, len:Number):Number
-
-    /**
-     * 延长线段
-     * 
-     * @param line 线段
-     * @param len 长度
-     * @return 延长后的线段
-     */
-    extendLine(line:JSON, len:Number):JSON
-
-    /**
-     * 获取线段中点
-     */
-    getLineCenter(line:JSON):JSON
-
-    /**
-     * 判断点是否在线段上
-     * @returns true在否则false
-     */
-    isPointOnLine(point:JSON, line:JSON):Boolean
-
-    /**
-     * 判断点和圆的位置关系
-     * 
-     * @param point 点
-     * @param circle 圆,由圆心坐标和半径表示如: {x: .0, y: .0, r: 10}
-     * @returns 位置关系,in, out, on 分别表示在圆外,在圆内,在圆上
-     */
-    isPointOnCircle(point:JSON, circle:JSON):String
-
-    /**
-     * 点到圆的两个切点
-     * 
-     * @returns 两个切点如 [p1, p2]
-     */
-    point2CircleTanget(point:JSON, circle:JSON):[JSON, JSON]
-
-    /**
-     * 弧分割为线段
-     * 
-     * 弧表示为 起点(xs, ys)+终点(xe, ye)+弧心(xc,yc)+方向(direction),如
-     *  {xs: .0, ys: .0, xe: 1, ye: 1, xc: .0, yc: .0, direction: "cw"}
-     * 其中方向可取值为 "cw"或"ccw"
-     * 
-     * @param arc å¼§
-     * @param den 分母(denominator)即分割的份数
-     * @returns 线段的列表
-     * @example
-     * 
-     * require("topsin.genmath");
-     * 
-     * console.log(g.arc2Lines({xs: 0, ys:1, xe: 1, ye: 0, xc: 0, yc: 0, direction: "cw"}, 2));
-     * 
-     * => [{"xe":0.7071067811865476,"xs":1,"ye":0.7071067811865475,"ys":0},{"xe":0,"xs":0.7071067811865476,"ye":1,"ys":0.7071067811865475}]
-     */
-    arc2Lines(arc:JSON, den:Number):[JSON]
-
-    /**
-     * 将profile转为多边形
-     * 
-     * @return 点的列表
-     */
-    profile2Polygon(profile:String, den:Number):[JSON]
-
-    /**
-     * å¼§é•¿
-     */
-    arcLength(arc:JSON):Number
-
-    /**
-     * 获取自动排版结构
-     * 
-     * @param sub : [{datum=>{x=>?,y=>?},symbol=>?,points=>[{x=>?,y=>?},{x=>?,y=>?},...]},...]
-     * @param panel : [{datum=>{x=>?,y=>?},symbol=>?,points=>[{x=>?,y=>?},{x=>?,y=>?},...]},...],
-     * @param type : ['rotate','empty_set']
-     * @returns 
-     *   {
-     *      rotate: 0|1,
-     *      empty_set: 0|1,
-     *      all_match: 0|1,
-     *      ox: ?,
-     *      oy: ?,
-     *      points: [{x:?,y:?,angle:?},...],
-     *   }
-     */
-    SubPanelSr(sub:[JSON], panel:[JSON]):JSON
-
-    /**
-     * 计算线段的k和b (y = kx + b)
-     * 
-     * @return {k:?, b:?} 垂直时k为Inf
-     */
-    getLineKb(line:JSON):JSON
-
-    /**
-     * 根据一对k,b值计算交点
-     * 
-     * @param kb1 : {k: 1, b: 2}
-     * @param kb2 : {k: 0, b: 3}
-     * @returns 交点{x:?, y:?}, 不存在则为undefined
-     */
-    getKblineIntersect(kb1:JSON, kb2:JSON):Object
-
-    /**
-     * 获取线段交点
-     * 
-     * @param line1 线段1
-     * @param line2 线段2
-     * @param extend 可选true或false表示是否判断延长线
-     * @returns 交点{x:?, y:?},不存在则为undefined
-     */
-    getLineIntersect(line1:JSON, line2:JSON, extend:Boolean):Object
-
-    /**
-     * 获取点列表中点的最小间隔
-     * 
-     * @param l 点列表
-     * @returns 距离
-     */
-    getPlistMinDis(l:[JSON]):Number
-
-    /**
-     * 获取一个点列表里的中心距离小于dis的点列表
-     * @param dis : 最小距离
-     * @param l : [{x=>?,y=>?,r=>?},{x=>?,y=>?},...], #r代表圆形直径
-     * @return : { points: [{x:?,y:?},...], lines: [{xs:?,ys:?,xe:?,ye:?},..] }
-     */
-    getPlistLtDistance(dis:Number, l:[JSON]):[JSON, JSON]
-
-    /**
-     * 获kb线经过某一点的垂线
-     * 
-     * @param kb : {k:?, b:?}
-     * @param point: {x: ?, y:? }
-     * @returns 垂线的kb {k:?, b:?}
-     */
-    getKbLinePrependicular(kb:JSON, point:JSON):JSON
-
-    /**
-     * 获kb线距离一定值的平行线,距离正负依X值
-     * 
-     * @param kb : {k:?, b:?}
-     * @param dis 距离
-     * @returns 平行线的kb : {k:?, b:?}
-     */
-    getKblineParallel(kb:JSON, dis:Number):JSON
-
-    /**
-     * 获取线段距离一定值的平行线段
-     * 
-     * @param line 线段
-     * @param dis 距离
-     * @returns 平行的线段
-     */
-    getLineParallel(line:JSON, dis:Number):JSON
-
-    /**
-     * 获取偏移一定距离的折线
-     * 
-     * @param polyline 折线
-     * @param dis 距离
-     * @returns 新的折线
-     */
-    polylineOffset(polylin:JSON, dis:Number):JSON
-
-    /**
-     * box是否相交
-     * box见 resizeBox
-     */
-    isRangeIntersect(box1:JSON, box2:JSON, tolerance:Number):Boolean
-
-    /**
-     * 解析叠构
-     */
-    analyzeStackup(par:JSON):JSON
-}
\ No newline at end of file
diff --git a/jtg js/node_modules/@types/topsin.socket/index.d.ts b/jtg js/node_modules/@types/topsin.socket/index.d.ts
deleted file mode 100644
index 2624d375deab1f02a331e5fbf681a58d127d9ef9..0000000000000000000000000000000000000000
--- a/jtg js/node_modules/@types/topsin.socket/index.d.ts	
+++ /dev/null
@@ -1,343 +0,0 @@
-declare namespace TopSinSocket {
-    export class TcpSocketImpl {
-        /**
-         * 中止连接
-         */
-        abort():void
-
-        /**
-         * 绑定地址和端口,返回是否成功
-         */
-        bind(ip:String, port:Number):boolean
-
-        /**
-         * 连接到主机
-         */
-        connectToHost(ip:String, port:Number):void
-
-        /**
-         * 断开与主机的连接,如果还有数据在写,那么会在结束后断开
-         */
-        disconnectFromHost();
-
-        /**
-         * 返回最近的一次错误
-         */
-        error():String
-
-        /**
-         * 冲刷缓存
-         */
-        flush():boolean
-
-        /**
-         * socket是否可用
-         */
-        isValid():boolean
-
-        /**
-         * 本地ip
-         */
-        localAddress():String
-
-        /**
-         * 本地port
-         */
-        localPort():Number
-
-        /**
-         * 对端ip
-         */
-        peerAddress():String
-
-        /**
-         * 对端port
-         */
-        peerPort():Number
-
-        /**
-         * 读缓存大小
-         */
-        readBufferSize():Number
-        
-        /**
-         * 设置读缓存大小
-         */
-        setReadBufferSize(size:Number):void
-
-        /**
-         * 等待直到连接成功或超时
-         * 
-         * @param msec 超时时间(毫秒)
-         * @return true 表示连接成功,false表示超时
-         */
-        waitForConnected(msec:Number):boolean
-
-        /**
-         * 等待直到断开连接
-         * 
-         * @param msec 超时时间(毫秒)
-         * @return true 表示断开成功,false表示超时
-         */
-        waitForDisconnected(msec:Number):boolean
-
-        /**
-         * 等待直到发送完至少1字节或超时
-         * 
-         * @param msec 超时时间(毫秒)
-         * @return true 表示已发送至少1字节, false表示超时
-         */
-        waitForReadyRead(msec:Number):boolean
-
-        /**
-         * 是否已读完
-         */
-        atEnd():boolean
-
-        /**
-         * 可读字节数
-         */
-        bytesAvailable():Number
-
-        /**
-         * 待写字节数
-         */
-        bytesToWrite():Number
-
-        /**
-         * 是否可读一行数据
-         * 注意:二进制数据不一定存在换行
-         */
-        canReadLine():boolean
-
-        /**
-         * 关闭连接
-         */
-        close():void
-
-        /**
-         * 错误消息
-         */
-        errorString():String
-
-        /**
-         * 连接是否打开
-         */
-        isOpen():boolean
-
-        /**
-         * 是否可读
-         */
-        isReadable():boolean
-
-        /**
-         * 是否可写
-         */
-        isWritable():boolean
-
-        /**
-         * 读取数据
-         * 如果数据不够会发生阻塞
-         * 
-         * @param size 数据大小
-         * @return 返回size大小的数据
-         */
-        read(size:Number):String
-
-        /**
-         * 读取全部数据直到不可读
-         * 
-         * @return 读到的数据
-         */
-        readAll():String
-
-        /**
-         * 读取一行数据
-         * 注意:二进制数据不一定存在换行
-         */
-        readLine():String
-
-        /**
-         * 发送数据
-         * 
-         * @param data 字符串(准确的说是 node 中的Buffer)
-         * @return 发送完成的字节数
-         */
-        write(data:String):Number
-
-        /**
-         *  注册事件
-         * 
-         * connected
-         * 连接成功,对应的callback: function(conn: TcpSocket) {}
-         * 
-         * disconnected
-         * 连接断开,对应的callback: function(conn: TcpSocket) {}
-         * 
-         * error
-         * 发生错误, 对应的callback: function(conn: TcpSocket, error:String) {}
-         * 
-         * byteswritten
-         * 发送完数据, 对应的callback: function(conn: TcpSocket, nbytes: Number) {}
-         * 
-         * readready
-         * 连接可读, 对应的callback: function(conn: TcpSocket) {}
-         */
-        on(event:TcpSocketEvent, callback:Function)
-    }
-    
-
-    export class TcpServerImpl {
-        constructor(parent:mainLoop):void
-
-        /**
-         * 关闭连接
-         */
-        close():void
-    
-        /**
-         * 最后一个错误原因
-         */
-        errorString():String
-    
-        /**
-         * 是否有排队连接
-         */
-        hasPendingConnections():boolean
-    
-        /**
-         * 监听地址、端口
-         */
-        listten(addr:String, port:Number):boolean
-    
-        /*** accepterror
-     * accept出错,对应的callback: function(err: string) {}
-         * 是否在监听
-         */
-        isListening():boolean
-    
-        /**
-         * 最大排队连接数
-         */
-        maxPendingConnections():Number
-    
-        /**
-         * 下一个排队连接
-         */
-        nextPendingConnection():TcpSocket
-    
-        /**
-         * 暂停接受新的连接
-         */
-        pauseAccepting():void
-    
-        /**
-         * 恢复接受新的连接
-         */
-        resumeAcception():void
-    
-        /**
-         * 服务端监听地址
-         */
-        serverAddress():String
-    
-        /**
-         * 服务端监听端口
-         */
-        serverPort():Number
-    
-        /**
-         * 服务端错误
-         */
-        serverError():String
-    
-        /**
-         * 设置最大排队连接
-         */
-        setMaxPendingConnections(n:Number):void
-    
-        /**
-         * 等待下一个连接
-         * 
-         * @param msec 等待的毫秒数
-         * @return 是否成功
-         */
-        waitForNewConnection(msec:Number):boolean
-    
-        /**
-         * 注册事件
-         * 
-         * accepterror
-         * accept出错,对应的callback: function(server: TcpServer, err: string) {}
-         * 
-         * newconnection
-         * 新的客户端连接成功,对应的callback: function(conn: TcpSocket) {}
-         */
-        on(event:TcpServerEvent, callback:Function):void
-    }
-
-    /**
-    * 创建一个新的TcpServer对象
-    * 
-    * @param parent 全局的事件循环
-    * @example
-    * 
-    * var socket = require('topsin.socket');
-    * var server = socket.TcpServer(mainLoop);
-    * 
-    * server.on('newconnection', function(conn) {
-    *      console.log("client: " + conn.peerPort() + ", connected");
-    *      conn.on('readready', function(conn) {
-    *          var data = conn.readAll();
-    *          console.log(data);
-    *          conn.write(data);
-    *      });
-    *      conn.on("disconnected", function(c) {
-    *          console.log("client: " + c.peerPort() + ", closed");
-    *      });
-    * );
-    * 
-    * server.on('accepterror', function(server) {
-    *      server.close();
-    *      console.log("exit");
-    *      mainLoop.quit();
-    * });
-    * 
-    * server.listen("127.0.0.1", 8888);
-    * mainLoop.exec();
-    */
-    export function TcpServer(parent:mainLoop):TcpServerImpl;
-
-    /**
-     * 创建一个新的TcpSocket对象
-     * 
-     * @param parent 全局的事件循环
-     * 
-     * @example
-     *  
-     * var socket = require('topsin.socket');
-     * 
-     * var client = socket.TcpSocket(mainLoop);
-     * client.on('connected', function(conn) {
-     *       console.log("connected");
-     * });
-     *  
-     * conn.on('readready', function(conn) {
-     *       var data = conn.readAll();
-     *       console.log(data);
-     *       conn.write(data);
-     *  });
-     *  
-     *  conn.on('disconnected', function(conn) {
-     *       console.log(conn.errorString());
-     *       mainLoop.quit();     
-     *  });
-     *  
-     *  client.connectToHost("127.0.0.1", 8888);
-     *  mainLoop.exec();
-     */
-    export function TcpSocket(parent:mainLoop):TcpSocketImpl;
-}
-
-export class mainLoop {};
-export = TopSinSocket;
\ No newline at end of file
diff --git a/test/ATS_AIM_customer_data_analysis copy.js b/test/ATS_AIM_customer_data_analysis copy.js
new file mode 100644
index 0000000000000000000000000000000000000000..fb43b422d2d0d4fdc8071edbe9d0f147d3d36b60
--- /dev/null
+++ b/test/ATS_AIM_customer_data_analysis copy.js	
@@ -0,0 +1,556 @@
+/*
+    NAME: 
+    DESCRIPTION: 客户数据分析
+    PARAMETER:
+	[
+		{
+			name : 'step_filter',
+			title : 'Step过滤',
+			type : 'LineEdit',
+			property : {tool_tip : '过滤step信息'}
+        },
+        {
+            name : 'erf',
+			title : 'erf名称',
+			type : 'LineEdit',
+			property : {tool_tip : ''}
+        },
+        {
+            name : 'auto_save',
+			title : '自动保存',
+            type : 'RadioBox',
+            property : {
+				item_list:[
+					{name:'yes',text:'YES'},
+					{name:'no',text:'NO'},
+				],
+				tool_tip:'是否自动保存料号开关'
+			}
+        }
+    ]
+
+    VERSION_HISTORY:
+	V1.00 2020 3-30 Scott
+	
+    HELP:
+	<html><body bgcolor="#DDECFE">
+		<font size="3" color="#003DB2"><p>功能简介</p></font>
+		  <p> 客户数据分析</p>
+		  <br>
+		<font size="3" color="#003DB2"><p>参数配置</p></font>
+		 <p> 客户参数 </p>
+		<font size="3" color="#003DB2"><p>注意事项</p></font>
+		  <p> ● 无 </p>
+		  <br>
+	</body></html>	
+*/
+
+// 引入模块 包
+var $ = require('topcam.scriptfunc').argv();
+var fs = require('fs');
+var _ = require('lodash');
+var IKM = $.ikm;
+var GEN = $.gen;
+var GUI = $.gui;
+var Job = $.job;
+var JobId = $.job_id;
+
+var mode = "develop"   // 运行模式  develop 开发模式 方便调试
+
+try {
+	var par = {
+		job:"i3",
+		job_info : {          // todo tmp
+			vc_src_01005_pad_result: ".smd",
+			depth_drill: "depth_drill",
+			depth_routing: "depth_routing",
+			cavity: "cavity"
+		}
+	}
+    var job = par.job.toLowerCase(),pcs_step="cad",array_step="stp"       // todo
+    // 料号验证
+	err = beforeStart({job:job});if(err){ throw err };
+    // matrix分析
+	var matrixInfo = getMatrixInfo({job:job})
+    var matrix_analysis = UPLOAD_LAYER_MATRIX({job:job,matrixInfo:matrixInfo})  // 分析matrix
+    var matrix = matrixInfo.matrix
+
+    // jobinfo分析
+    // var jobInfo = saveJobInfo({job:job,pcs_step:pcs_step,array_step:array_step,matrixInfo:matrixInfo,matrix_analysis:matrix_analysis},par)
+    // IKM.msg(jobInfo)
+
+    // 分析钻孔属性  // todo 镭射切割长度
+    // analysis_drill({job:job,pcs_step:pcs_step,array_step:array_step,matrixInfo:matrixInfo,matrix_analysis:matrix_analysis},par)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    // layer分析
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    GUI.msg("Done")
+    return 'Done';
+}
+catch (error) {
+    GUI.msg(error);
+    return 'Error';
+}
+
+
+function beforeStart(props){  // 脚本开始前的料号判断
+    var job = props.job,j = {job:job}
+    if(!GEN.isJobExists(j)){return "job: "+job+" is not exist"}
+    if(!GEN.isJobOpen(j)){GEN.openJob(j)}
+    if(GEN.checkInout({job:job,mode:"test"}) != 0){
+        if (mode != "develop"){
+            return "the job checked"
+        }
+    }
+    GEN.checkInout({job:job,mode:"out"})
+}
+function getMatrixInfo(props){  // 获取matrix各种信息
+    var job = props.job
+    var matrix = GEN.getMatrix({job:job})
+    var res = {
+        matrix: matrix,   // matrix
+        matrixVal: [],   // matrix 的 value数组
+        mSignal: {},   // board的signal层 {}
+        mSignals: [],   // board的signal层  []
+        mDrill: {},  // board的drill层
+        mDrills: [],  // board的drill层
+        mSolderMask: {},    // 防焊层
+        mSolderMasks: [],   // 防焊层
+        mOuters: [],    // 外层和对于的防旱
+        mBoardLayer: []   // board层
+    }
+    for (var key in matrix) {
+        var value = matrix[key]
+        res.matrixVal.push(value)
+        if(value.context == "board"){
+            res.mBoardLayer.push(key)
+            switch (value.layer_type) {
+                case "signal":
+                    res.mSignal[key] = value
+                    res.mSignals.push(value)            
+                    break;
+                case "drill":
+                    res.mDrill[key] = value
+                    res.mDrills.push(value)        
+                    break;
+                case "solder_mask":
+                    res.mSolderMask[key] = value
+                    res.mSolderMasks.push(value)        
+                    break;
+            }
+        }
+    }
+    res.matrixVal = res.matrixVal.sort(function(a,b){return Number(a.row) - Number(b.row)})
+    res.mSignals = res.mSignals.sort(function(a,b){return Number(a.row) - Number(b.row)})
+    res.mDrills = res.mDrills.sort(function(a,b){return Number(a.row) - Number(b.row)})
+    // 找出外层  以及外层对应的防焊层 [{signalL:"top", solderL:"smt"}]
+    res.mOuters = res.mSignals.reduce(function(a,b){
+        if(b.tl_type == "outer"){
+			var solderLayers = res.mSolderMasks.filter(function(v){
+				return v.side == b.side
+			})
+           	a.push({
+                signalL: b.name,
+                solderL: solderLayers.length >0 ? solderLayers[0]["name"] : null
+           	})
+        }
+        return a
+    },[])
+    return res
+}
+function UPLOAD_LAYER_MATRIX(props){
+    var matrixInfo = props.matrixInfo
+    var job = props.job
+    props.jobcategory = props.jobcategory || "work"
+	var matrix = ANALYSIS_STACKUP({job:job, matrixInfo:matrixInfo, jobcategory:props.jobcategory});
+	var func = 'function(ARGV)\
+	{\
+		var jobId = ARGV["job_id"];\
+		var tableName = "pdm_job_" + ARGV["jobcategory"] + "_layer";\
+		//GUI.msgbox({text: TDataParse.variant2JsonStr(tableName)});\
+		var db = new TSqlQueryV2(T_SQLCNT_POOL.getSqlDatabase());\
+		db.begin();\
+		try{\
+			var oLayers = db.selectMapMap({table:tableName, field:["odb_name","release_status"], where:{job_id:jobId}, uniquefield:"odb_name"});\
+			if (db.lastError().isValid()) throw db.lastError();\
+			//GUI.msgbox({text: TDataParse.variant2JsonStr(oLayers)});\
+			\
+			db.deleteRow({table:tableName, where:{job_id:jobId}});\
+			if (db.lastError().isValid()) throw db.lastError();\
+			\
+			var fieldLst = ["name", "odb_context", "odb_type", "odb_polarity", "odb_side", "drl_start", "drl_end",\
+					 "row_num", "type", "drl_start_num", "drl_end_num", "drl_from_num", "drl_to_num", "drl_connect_to", \
+					 "odb_name", "side", "stackup_num", "customer_field", "input_file_name", "odb_row_num"];\
+			\
+			for (var i=0;i<ARGV["layers"].length;i++)\
+			{\
+				layerName = ARGV["layers"][i];\
+				var layerInfo = ARGV["matrix"][layerName];\
+				var tmpData = {"job_id":jobId, "name": layerInfo["name"]};\
+				if (ARGV["releasestatus"] != undefined && ARGV["releasestatus"] != null && ARGV["releasestatus"].length>0\
+					&& ARGV["releasestatus"][layerInfo["odb_name"]] != undefined && ARGV["releasestatus"][layerInfo["odb_name"]] != null )\
+				{\
+					tmpData["release_status"] = ARGV["releasestatus"];\
+				}\
+				else\
+				{\
+					tmpData["release_status"] = oLayers.hasOwnProperty(layerInfo["odb_name"]) ? oLayers[layerInfo["odb_name"]]["release_status"] : null;\
+				}\
+				for (n = 0; n < fieldLst.length; n++)\
+				{\
+					tmpData[fieldLst[n]] = layerInfo[fieldLst[n]];\
+				}\
+				//GUI.msgbox({text: TDataParse.variant2JsonStr(tmpData)});\
+				db.insertRow({table:tableName, data:tmpData});\
+				if (db.lastError().isValid()) throw db.lastError();\
+			}\
+			db.commit();\
+			return new TDataResponse();\
+		}\
+		catch (err)\
+		{\
+			print(err.text());\
+			db.rollback();\
+			return new TDataResponse(err, "");\
+		}\
+    }';
+    IKM.msg(matrix)
+    var ret = IKM.command( func,
+        {   job_id :JobId, 
+            matrix:matrix,
+            layers: Object.keys(matrix).sort(function(a,b){return matrix[a]["row"] - matrix[b]["row"]}), 
+            jobcategory:props.jobcategory}, 1);
+    IKM.msg(ret)
+	if (ret.errText) {
+		return {
+			jobcategory:props.jobcategory,
+			errText :ret.errText,
+			errCode :ret.errCode,
+		};
+    }
+    return matrix
+}
+function ANALYSIS_STACKUP(props){
+    var job = props.job
+    if(!props.hasOwnProperty("jobcategory")){ props.jobcategory = 'work' }
+    var matrix = GEN.getMatrix({job:job})
+	var layer_count = IKM.get_jobinfo({jobname:JobId,jobcategory:props.jobcategory,jobinfo:'layer_count'});
+    if(!layer_count){
+        layer_count = GEN.getLayerCount({job:job})
+    }
+	IKM.save_job_info({jobid:JobId,jobcategory:props.jobcategory,jobinfohash:{TL_layer_count:layer_count}});
+	_.values(matrix).sort(function(a,b){return a.row-b.row}).forEach(function(layer){
+        layer.odb_name = layer.name;
+		layer.name = layer.tl_name;
+		layer.odb_context = layer.context;
+		layer.odb_type = layer.layer_type;
+		layer.odb_polarity = layer.polarity;
+		layer.odb_side = layer.side;
+		layer.row_num = layer.tl_num;
+		layer.type = layer.tl_type;
+		layer.side = layer.enum_tl_side;
+		layer.input_file_name = layer.file_name;
+		layer.odb_row_num = layer.row;
+		if (layer.odb_name == 'drill'){
+			layer.name = 'drill';
+			layer.drl_start_num = 1;
+			layer.drl_end_num = layer_count;
+			layer.drl_from_num = 1;
+			layer.drl_to_num = layer_count;
+			layer.type = 'main_drill';
+		}
+		else if (/^d(\d+)\-(\d+)$/.test(layer.odb_name)){
+            var tmp = /^d(\d+)\-(\d+)$/.exec(layer.odb_name)
+			var drl_star = tmp[1];
+			var drl_end = tmp[2];
+			layer.name = 'drill' + drl_star + '-' + drl_end;
+			layer.drl_start_num = drl_star;
+			layer.drl_end_num = drl_end;
+			layer.drl_from_num = drl_star;
+			layer.drl_to_num = drl_end;
+			if( drl_star == 1 || drl_end == layer_count ){
+				layer.type = 'blind_drill';             // 埋孔
+			}
+			else{
+				layer.type = 'bury_drill';              // 盲孔
+			}
+		}
+		else if (/^d(\d+)\-(\d+)$/.test(layer.odb_name)){
+            var tmp = /^d(\d+)\-(\d+)$/.exec(layer.odb_name)
+			var drl_star = tmp[1];
+			var drl_end = tmp[2];
+			layer.name = 'd'+drl_star+'-'+drl_end;
+			layer.drl_start_num = drl_star;
+			layer.drl_end_num = drl_end;
+			layer.drl_from_num = drl_star;
+			layer.drl_to_num = drl_end;
+			layer.type = 'laser_drill';   // é•­å°„å­”
+		}
+		else if (/\-a$/.test(layer.odb_name)){
+            layer.side = 'top';
+            if(!layer.name){
+                layer.name = '__'+layer.odb_name+'__'
+            }
+            if(!layer.type){
+                layer.type = 'other'
+            }
+		}
+		else if (/\-b$/.test(layer.odb_name)){
+            layer.side = 'bottom';
+            if(!layer.name){
+                layer.name = '__'+layer.odb_name+'__'
+            }
+            if(!layer.type){
+                layer.type = 'other'
+            }
+		}
+		else{
+            if(!layer.name){
+                layer.name = '__'+layer.odb_name+'__'
+            }
+			if(!layer.type){
+                layer.type = 'other'
+            }
+		}
+    })
+    return matrix;
+}
+function saveJobInfo(props,par){
+    var job = props.job
+    var pcs = props.pcs_step
+    var arr = props.array_step
+    var matrix_analysis = props.matrix_analysis
+    var matrixInfo = props.matrixInfo
+    var matrix = matrixInfo.matrix
+    var info = {
+        layer_count: "",     // Board属性的signal或者power_ground层
+        vc_card_size_w: "",    //  card短边尺寸
+        vc_card_size_l: "",     // card长边尺寸
+        vc_array_size_w: "",    //  array短边尺寸
+        vc_array_size_l: "",      //  array长边尺寸
+        vc_pcs_count_on_panel: "",   // todo array中pcs的数量
+        stack_vias_number: "",   // via孔连续叠加的层数
+        stack_vias_more: "",   // yes|no : 14层板以上时,Stack Vias >=12时,存yes
+        depth_drilling: "",          // yes|no :存在depth_drill 层时,存yes
+        depth_routing: "",       // yes|no :存在depth_routing 层时,存yes
+        laser_via_on_buried_hole: "",       // todo yes|no:via孔在埋孔上时,存yes
+        milling_bit_size: "",       // todo 检查array中pcs的最小间距值
+        milling_length: "",     // todo 检查array中铣切长度
+        vc_src_01005_pad_result: "",     //  yes|no:board层中检查存在01005属性物件时,存yes
+        ATS_technology_25dc: "",           // yes|no:存在cavity层别时存yes
+        ATS_technology_25dr: "",           // yes|no:存在cavity层别时存yes
+        vc_src_EDGE_PLATING: "",    // yes|no:检查线路外形是否存在物件,存在则存yes
+        edge_plating_length: "",        //  todo
+        glod_finger: "",     // todo
+        glod_finger_area: "",       //  todo
+        solder_mask_side: "",       // top|bot|both:检查防焊层所在面次
+        silk_screen_side: "",       // top|bot|both:检查文字层所在面次
+    }
+    info.layer_count = matrixInfo.mSignals.length   // 10
+
+    var pcs_profileLimits = GEN.getProfileLimits({job:job,step:pcs})
+    var array_profileLimits = GEN.getProfileLimits({job:job,step:arr})
+
+    info.vc_card_size_w = pcs_profileLimits.xsize.toFixed(3)
+    info.vc_card_size_l = pcs_profileLimits.ysize.toFixed(3)
+    info.vc_array_size_w = array_profileLimits.xsize.toFixed(3)
+    info.vc_array_size_l = array_profileLimits.ysize.toFixed(3)
+    // IKM.msg(GEN.getRepeat({job:"1",step:"stp1"})) // ?
+
+    // 找出 镭射孔
+    var laser_layers = []
+    for (var key in matrix_analysis) {
+        var val = matrix_analysis[key]
+        if(val.type == "laser_drill"){
+            laser_layers.push(val)
+        }
+    }
+    GEN.openStep({job:job,name:pcs})
+    laser_layers = laser_layers.sort(function(a,b){return Number(a.row)-Number(b.row)})
+    var laser_info = {}
+    for(var i = 0; i < laser_layers.length-1; i++){
+        var start_layer = laser_layers[i].name
+        var cover_layer = laser_layers[i+1].name
+        GEN.workLayer({name:start_layer,display_number:2,clear_before:'yes'})
+        GEN.selClearFeature()
+        GEN.selRefFeat({layers:cover_layer,use:'filter',mode:'cover'})
+        var count = GEN.getSelectCount()
+        if(count>0){
+            laser_info[start_layer] = {}
+            laser_info[start_layer].drill_connect_layer = cover_layer
+            laser_info[start_layer].drill_connect_point = count
+        }
+    }
+    // via孔连续叠加的层数
+    var via_vias_info = []
+    function analysis_via_number(layers){
+        if(layers.length < 2){return}
+        var startlayer = layers[0].name + "_cover" 
+        GEN.selClearFeature()
+        GEN.workLayer({name:layers[0].name,display_number:2,clear_before:'yes'})
+        GEN.selAllFeat()
+        selCopyLayer({job:job,layer:startlayer})
+        var end_index = start_cover_next(startlayer,layers,0)
+        via_vias_info.push(end_index+1)
+        analysis_via_number(layers.slice(end_index))
+    }
+    function start_cover_next(start, layers, end_index){
+        if(layers.length < 2){
+            GEN.deleteLayer({job:job,layer:start})
+            return end_index
+        }
+        layers = layers.slice(1)
+        GEN.workLayer({name:start,display_number:2,clear_before:'yes'})
+        GEN.selClearFeature()
+        GEN.selRefFeat({layers:layers[0].name,use:'filter',mode:'cover'})
+        var count = GEN.getSelectCount()
+        if (count < 1) {
+            GEN.deleteLayer({job:job,layer:start})
+            return ++end_index
+        }
+        var nextstartlayer = layers[0].name + "_cover" 
+        selCopyLayer({job:job,layer:nextstartlayer})
+        GEN.deleteLayer({job:job,layer:start})
+        return start_cover_next(nextstartlayer,layers,++end_index)
+    }
+    analysis_via_number(laser_layers.slice())
+    if (via_vias_info.length == 1){
+        info.stack_vias_number = via_vias_info[0]
+    }else{
+        info.stack_vias_number = via_vias_info.reduce(function(a,b){return a-b>0?a :b})
+    }
+    info.stack_vias_more = "no"
+    if(GEN.getLayerCount({job:job}) > 14 && info.stack_vias_number >= 12){
+        info.stack_vias_more = "yes"
+    }
+
+    // via孔在埋孔上?
+
+    info.depth_drilling = matrix.hasOwnProperty(par.jobInfo.depth_drilling) ? "yes" : "no"
+    info.depth_routing = matrix.hasOwnProperty(par.jobInfo.depth_routing) ? "yes" : "no"
+    var is_cavity = matrix.hasOwnProperty(par.jobInfo.cavity) ? "yes" : "no"
+    info.ATS_technology_25dc = is_cavity  // no
+    info.ATS_technology_25dr = is_cavity  // no
+
+    var solder_paste_layers = _.values(matrix).filter(function(v){return v.layer_type == "solder_paste"})
+    var solder_solder_mask = _.values(matrix).filter(function(v){return v.layer_type == "solder_mask"})
+    var solder_paste_info= solder_paste_layers.map(function(v){return v.side}).reduce(function(a,b){
+        if(a.indexOf(b)<0){ a.push(b) }
+        return a
+    },[])
+    var solder_solder_info= solder_solder_mask.map(function(v){return v.side}).reduce(function(a,b){
+        if(a.indexOf(b)<0){ a.push(b) }
+        return a
+    },[])
+    
+    if(solder_paste_info.length == 0){
+        info.solder_mask_side = "no"
+    } else if (solder_paste_info.length == 1) {
+        info.solder_mask_side = solder_paste_info[0]
+    } else {
+        info.solder_mask_side = "both"
+    }
+    if(solder_solder_info.length == 0){
+        info.silk_screen_side = "no"
+    } else if (solder_solder_info.length == 1) {
+        info.silk_screen_side = solder_solder_info[0]
+    } else {
+        info.silk_screen_side = "both"
+    }
+    // 线路外形
+    info.vc_src_EDGE_PLATING = "no"
+    GEN.affectedLayer({affected:'no',mode:'all'})
+    try {
+        matrixInfo.mSignals.forEach(function(v){
+            GEN.workLayer({name:v.name,display_number:2,clear_before:'yes'})
+            GEN.selClearFeature()
+            GEN.selRefFeat({layers:"rout",mode:"touch",use:"filter"})
+            if( GEN.getSelectCount()>0){
+                throw "yes"
+            }
+        })
+    } catch (msg) {
+        info.vc_src_EDGE_PLATING = msg
+        GEN.affectedLayer({affected:'no',mode:'all'})
+        GEN.selClearFeature()
+    }
+
+    info = Object.keys(info).reduce(function(a,b){// 过滤结果
+        if(info[b] != ""){
+            a[b] = info[b]
+        }
+        return a
+    },{})
+
+    // 有无属性vc_src_01005_pad_result
+    GEN.openStep({job:job,name:pcs})
+    GEN.affectedLayer({affected:'yes',layer:matrixInfo.mBoardLayer,clear_before:'yes'});
+    GEN.selClearFeature()
+    GEN.selectByFilter({attribute:par.job_info.vc_src_01005_pad_result})
+    info.is_01005_pad = GEN.getSelectCount() > 0? "yes" : "no"
+    GEN.affectedLayer({affected:'no',mode:'all'});
+    GEN.closeStep()
+
+    IKM.save_job_info({
+        jobid: JobId,
+        jobinfohash:info
+    })
+    return {info:info,laser_info:laser_info}
+}
+function selCopyLayer(props){  // 拷贝选择的到辅助层
+    var layer = props.layer
+    var job = props.job
+    if(GEN.isLayerExists({job:job,layer:layer})){
+        GEN.deleteLayer({job:job,layer:layer})
+    }
+    GEN.selCopyOther({dest:'layer_name',target_layer:layer})
+}
+function analysis_drill(props){
+    var job = props.job
+    var pcs = props.pcs_step
+    var arr = props.array_step
+    var matrix_analysis = props.matrix_analysis
+    var matrixInfo = props.matrixInfo
+    var matrix = matrixInfo.matrix
+
+    // 设置层的孔属性
+}
+function set_drill_attr(props){  // 镭射孔via,无铜孔npth,其余孔pth
+    var layer = props.layer
+    var attr = props.attr
+    GEN.workLayer({name:layer,display_number:2,clear_before:'yes'})
+    GEN.selClearFeature()
+    GEN.selAllFeat()
+    GEN.selAddAttr({attribute:attr})
+}
diff --git a/test/ATS_AIM_customer_data_analysis.js b/test/ATS_AIM_customer_data_analysis.js
index fb43b422d2d0d4fdc8071edbe9d0f147d3d36b60..d92934a0f11187ecd1cd6369542f4d68c42774bb 100644
--- a/test/ATS_AIM_customer_data_analysis.js
+++ b/test/ATS_AIM_customer_data_analysis.js
@@ -58,53 +58,47 @@ var JobId = $.job_id;
 var mode = "develop"   // 运行模式  develop 开发模式 方便调试
 
 try {
-	var par = {
-		job:"i3",
-		job_info : {          // todo tmp
-			vc_src_01005_pad_result: ".smd",
-			depth_drill: "depth_drill",
-			depth_routing: "depth_routing",
-			cavity: "cavity"
-		}
-	}
-    var job = par.job.toLowerCase(),pcs_step="cad",array_step="stp"       // todo
-    // 料号验证
-	err = beforeStart({job:job});if(err){ throw err };
-    // matrix分析
-	var matrixInfo = getMatrixInfo({job:job})
-    var matrix_analysis = UPLOAD_LAYER_MATRIX({job:job,matrixInfo:matrixInfo})  // 分析matrix
-    var matrix = matrixInfo.matrix
-
-    // jobinfo分析
-    // var jobInfo = saveJobInfo({job:job,pcs_step:pcs_step,array_step:array_step,matrixInfo:matrixInfo,matrix_analysis:matrix_analysis},par)
-    // IKM.msg(jobInfo)
-
-    // 分析钻孔属性  // todo 镭射切割长度
-    // analysis_drill({job:job,pcs_step:pcs_step,array_step:array_step,matrixInfo:matrixInfo,matrix_analysis:matrix_analysis},par)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-    // layer分析
-
-
-
+    // IKM.crud("insertRow",{
+    //     table:'pdm_job_org_drill',
+    //     data:{job_id:"1",step_name:"cad",step_type:"pcs", std_layer_name:"d_1-2",odb_layer_name:"d1-2",
+    //         row_num:"1", drill_size:"r2",finish_size:"r2.1",drill_type:"laser_drill",drill_shape:"s",
+    //         slot_length:"12", count:"231",drill_size_lower_tol:"23",drill_size_upper_tol:"asd"
+    //     },
+    //     return_field:'uid',
+    // })
+    var job = "1"
 
+    var matrix = UPLOAD_LAYER_MATRIX({job:job})  // 分析matrix 获得分析后的matrix信息
 
+    // 获得镭射层
 
+    var laser_drills = _.values(matrix).filter(function(v){return v.type == "laser_drill"})
 
+    laser_drills.forEach(function(layer){
+        GEN.workLayer({name:layer.name, display_number:1,clear_before:"yes"})
+        GEN.selClearFeature()
+        GEN.selAllFeat()
+        var count = GEN.getSelectCount()
+        if(GEN.getSelectCount()>0){
+            // GEN.selAddAttr({attribute:"via"})
+            var data = {
+                job_id: JobId,
+                step_name: "cad",
+                odb_layer_name: layer.odb_name,
+                row_num: layer.row_num,
+                drill_type:layer.type,
+                count:count
+            }
+           
+        }
+        GEN.selClearFeature()
+        GEN.clearLayers()
+    })
+    var laser_drills_info = laser_drills
+    // 获取钻孔信息
 
 
+   
 
 
 
@@ -123,77 +117,10 @@ catch (error) {
     return 'Error';
 }
 
-
-function beforeStart(props){  // 脚本开始前的料号判断
-    var job = props.job,j = {job:job}
-    if(!GEN.isJobExists(j)){return "job: "+job+" is not exist"}
-    if(!GEN.isJobOpen(j)){GEN.openJob(j)}
-    if(GEN.checkInout({job:job,mode:"test"}) != 0){
-        if (mode != "develop"){
-            return "the job checked"
-        }
-    }
-    GEN.checkInout({job:job,mode:"out"})
-}
-function getMatrixInfo(props){  // 获取matrix各种信息
-    var job = props.job
-    var matrix = GEN.getMatrix({job:job})
-    var res = {
-        matrix: matrix,   // matrix
-        matrixVal: [],   // matrix 的 value数组
-        mSignal: {},   // board的signal层 {}
-        mSignals: [],   // board的signal层  []
-        mDrill: {},  // board的drill层
-        mDrills: [],  // board的drill层
-        mSolderMask: {},    // 防焊层
-        mSolderMasks: [],   // 防焊层
-        mOuters: [],    // 外层和对于的防旱
-        mBoardLayer: []   // board层
-    }
-    for (var key in matrix) {
-        var value = matrix[key]
-        res.matrixVal.push(value)
-        if(value.context == "board"){
-            res.mBoardLayer.push(key)
-            switch (value.layer_type) {
-                case "signal":
-                    res.mSignal[key] = value
-                    res.mSignals.push(value)            
-                    break;
-                case "drill":
-                    res.mDrill[key] = value
-                    res.mDrills.push(value)        
-                    break;
-                case "solder_mask":
-                    res.mSolderMask[key] = value
-                    res.mSolderMasks.push(value)        
-                    break;
-            }
-        }
-    }
-    res.matrixVal = res.matrixVal.sort(function(a,b){return Number(a.row) - Number(b.row)})
-    res.mSignals = res.mSignals.sort(function(a,b){return Number(a.row) - Number(b.row)})
-    res.mDrills = res.mDrills.sort(function(a,b){return Number(a.row) - Number(b.row)})
-    // 找出外层  以及外层对应的防焊层 [{signalL:"top", solderL:"smt"}]
-    res.mOuters = res.mSignals.reduce(function(a,b){
-        if(b.tl_type == "outer"){
-			var solderLayers = res.mSolderMasks.filter(function(v){
-				return v.side == b.side
-			})
-           	a.push({
-                signalL: b.name,
-                solderL: solderLayers.length >0 ? solderLayers[0]["name"] : null
-           	})
-        }
-        return a
-    },[])
-    return res
-}
 function UPLOAD_LAYER_MATRIX(props){
-    var matrixInfo = props.matrixInfo
     var job = props.job
     props.jobcategory = props.jobcategory || "work"
-	var matrix = ANALYSIS_STACKUP({job:job, matrixInfo:matrixInfo, jobcategory:props.jobcategory});
+	var matrix = ANALYSIS_STACKUP({job:job, jobcategory:props.jobcategory});
 	var func = 'function(ARGV)\
 	{\
 		var jobId = ARGV["job_id"];\
@@ -245,20 +172,18 @@ function UPLOAD_LAYER_MATRIX(props){
 			return new TDataResponse(err, "");\
 		}\
     }';
-    IKM.msg(matrix)
-    var ret = IKM.command( func,
-        {   job_id :JobId, 
-            matrix:matrix,
-            layers: Object.keys(matrix).sort(function(a,b){return matrix[a]["row"] - matrix[b]["row"]}), 
-            jobcategory:props.jobcategory}, 1);
-    IKM.msg(ret)
-	if (ret.errText) {
-		return {
-			jobcategory:props.jobcategory,
-			errText :ret.errText,
-			errCode :ret.errCode,
-		};
-    }
+    // var ret = IKM.command( func,     // ?? =========================> tmp
+    //     {   job_id :JobId, 
+    //         matrix:matrix,
+    //         layers: Object.keys(matrix).sort(function(a,b){return matrix[a]["row"] - matrix[b]["row"]}), 
+    //         jobcategory:props.jobcategory}, 1);
+	// if (ret.errText) {                    
+	// 	return {
+	// 		jobcategory:props.jobcategory,
+	// 		errText :ret.errText,
+	// 		errCode :ret.errCode,
+	// 	};
+    // }
     return matrix
 }
 function ANALYSIS_STACKUP(props){
@@ -290,7 +215,7 @@ function ANALYSIS_STACKUP(props){
 			layer.drl_to_num = layer_count;
 			layer.type = 'main_drill';
 		}
-		else if (/^d(\d+)\-(\d+)$/.test(layer.odb_name)){
+		else if (/^d_(\d+)\-(\d+)$/.test(layer.odb_name)){
             var tmp = /^d(\d+)\-(\d+)$/.exec(layer.odb_name)
 			var drl_star = tmp[1];
 			var drl_end = tmp[2];
@@ -346,211 +271,271 @@ function ANALYSIS_STACKUP(props){
     })
     return matrix;
 }
-function saveJobInfo(props,par){
-    var job = props.job
-    var pcs = props.pcs_step
-    var arr = props.array_step
-    var matrix_analysis = props.matrix_analysis
-    var matrixInfo = props.matrixInfo
-    var matrix = matrixInfo.matrix
-    var info = {
-        layer_count: "",     // Board属性的signal或者power_ground层
-        vc_card_size_w: "",    //  card短边尺寸
-        vc_card_size_l: "",     // card长边尺寸
-        vc_array_size_w: "",    //  array短边尺寸
-        vc_array_size_l: "",      //  array长边尺寸
-        vc_pcs_count_on_panel: "",   // todo array中pcs的数量
-        stack_vias_number: "",   // via孔连续叠加的层数
-        stack_vias_more: "",   // yes|no : 14层板以上时,Stack Vias >=12时,存yes
-        depth_drilling: "",          // yes|no :存在depth_drill 层时,存yes
-        depth_routing: "",       // yes|no :存在depth_routing 层时,存yes
-        laser_via_on_buried_hole: "",       // todo yes|no:via孔在埋孔上时,存yes
-        milling_bit_size: "",       // todo 检查array中pcs的最小间距值
-        milling_length: "",     // todo 检查array中铣切长度
-        vc_src_01005_pad_result: "",     //  yes|no:board层中检查存在01005属性物件时,存yes
-        ATS_technology_25dc: "",           // yes|no:存在cavity层别时存yes
-        ATS_technology_25dr: "",           // yes|no:存在cavity层别时存yes
-        vc_src_EDGE_PLATING: "",    // yes|no:检查线路外形是否存在物件,存在则存yes
-        edge_plating_length: "",        //  todo
-        glod_finger: "",     // todo
-        glod_finger_area: "",       //  todo
-        solder_mask_side: "",       // top|bot|both:检查防焊层所在面次
-        silk_screen_side: "",       // top|bot|both:检查文字层所在面次
-    }
-    info.layer_count = matrixInfo.mSignals.length   // 10
-
-    var pcs_profileLimits = GEN.getProfileLimits({job:job,step:pcs})
-    var array_profileLimits = GEN.getProfileLimits({job:job,step:arr})
-
-    info.vc_card_size_w = pcs_profileLimits.xsize.toFixed(3)
-    info.vc_card_size_l = pcs_profileLimits.ysize.toFixed(3)
-    info.vc_array_size_w = array_profileLimits.xsize.toFixed(3)
-    info.vc_array_size_l = array_profileLimits.ysize.toFixed(3)
-    // IKM.msg(GEN.getRepeat({job:"1",step:"stp1"})) // ?
 
-    // 找出 镭射孔
-    var laser_layers = []
-    for (var key in matrix_analysis) {
-        var val = matrix_analysis[key]
-        if(val.type == "laser_drill"){
-            laser_layers.push(val)
-        }
-    }
-    GEN.openStep({job:job,name:pcs})
-    laser_layers = laser_layers.sort(function(a,b){return Number(a.row)-Number(b.row)})
-    var laser_info = {}
-    for(var i = 0; i < laser_layers.length-1; i++){
-        var start_layer = laser_layers[i].name
-        var cover_layer = laser_layers[i+1].name
-        GEN.workLayer({name:start_layer,display_number:2,clear_before:'yes'})
-        GEN.selClearFeature()
-        GEN.selRefFeat({layers:cover_layer,use:'filter',mode:'cover'})
-        var count = GEN.getSelectCount()
-        if(count>0){
-            laser_info[start_layer] = {}
-            laser_info[start_layer].drill_connect_layer = cover_layer
-            laser_info[start_layer].drill_connect_point = count
-        }
-    }
-    // via孔连续叠加的层数
-    var via_vias_info = []
-    function analysis_via_number(layers){
-        if(layers.length < 2){return}
-        var startlayer = layers[0].name + "_cover" 
-        GEN.selClearFeature()
-        GEN.workLayer({name:layers[0].name,display_number:2,clear_before:'yes'})
-        GEN.selAllFeat()
-        selCopyLayer({job:job,layer:startlayer})
-        var end_index = start_cover_next(startlayer,layers,0)
-        via_vias_info.push(end_index+1)
-        analysis_via_number(layers.slice(end_index))
-    }
-    function start_cover_next(start, layers, end_index){
-        if(layers.length < 2){
-            GEN.deleteLayer({job:job,layer:start})
-            return end_index
-        }
-        layers = layers.slice(1)
-        GEN.workLayer({name:start,display_number:2,clear_before:'yes'})
-        GEN.selClearFeature()
-        GEN.selRefFeat({layers:layers[0].name,use:'filter',mode:'cover'})
-        var count = GEN.getSelectCount()
-        if (count < 1) {
-            GEN.deleteLayer({job:job,layer:start})
-            return ++end_index
-        }
-        var nextstartlayer = layers[0].name + "_cover" 
-        selCopyLayer({job:job,layer:nextstartlayer})
-        GEN.deleteLayer({job:job,layer:start})
-        return start_cover_next(nextstartlayer,layers,++end_index)
-    }
-    analysis_via_number(laser_layers.slice())
-    if (via_vias_info.length == 1){
-        info.stack_vias_number = via_vias_info[0]
-    }else{
-        info.stack_vias_number = via_vias_info.reduce(function(a,b){return a-b>0?a :b})
-    }
-    info.stack_vias_more = "no"
-    if(GEN.getLayerCount({job:job}) > 14 && info.stack_vias_number >= 12){
-        info.stack_vias_more = "yes"
+function tmp(){
+return {
+    "sst": {
+        "row": "1","type": "solder_paste","name": "sp_fr","context": "board","layer_type": "solder_paste","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": -1000,"tl_name": "sp_fr","tl_type": "solder_paste","odb_name": "sst","odb_context": "board","odb_type": "solder_paste","odb_polarity": "positive","odb_side": "top",
+        "row_num": -1000,"odb_row_num": "1"
+    },
+    "spt": {
+        "row": "2","type": "solder_paste","name": "sp_fr(2)","context": "board","layer_type": "solder_paste","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": -999,"tl_name": "sp_fr(2)","tl_type": "solder_paste","odb_name": "spt","odb_context": "board","odb_type": "solder_paste","odb_polarity": "positive","odb_side": "top",
+        "row_num": -999,"odb_row_num": "2"
+    },
+    "smt": {
+        "row": "3","type": "solder_mask","name": "sm_fr","context": "board","layer_type": "solder_mask","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": -998,"tl_name": "sm_fr","tl_type": "solder_mask","odb_name": "smt","odb_context": "board","odb_type": "solder_mask","odb_polarity": "positive","odb_side": "top",
+        "row_num": -998,"odb_row_num": "3"
+    },
+    "top": {
+        "row": "4","type": "outer","name": "top","context": "board","layer_type": "signal","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 1,"tl_name": "top","tl_type": "outer","odb_name": "top","odb_context": "board","odb_type": "signal","odb_polarity": "positive","odb_side": "top",
+        "row_num": 1,"odb_row_num": "4"
+    },
+    "isl2": {
+        "row": "5","type": "inner","name": "l2","context": "board","layer_type": "signal","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 2,"tl_name": "l2","tl_type": "inner","odb_name": "isl2","odb_context": "board","odb_type": "signal","odb_polarity": "positive","odb_side": "inner",
+        "row_num": 2,"odb_row_num": "5"
+    },
+    "isl3": {
+        "row": "6","type": "inner","name": "l3","context": "board","layer_type": "signal","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 3,"tl_name": "l3","tl_type": "inner","odb_name": "isl3","odb_context": "board","odb_type": "signal","odb_polarity": "positive","odb_side": "inner",
+        "row_num": 3,"odb_row_num": "6"
+    },
+    "isl4": {
+        "row": "7","type": "inner","name": "l4","context": "board","layer_type": "signal","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 4,"tl_name": "l4","tl_type": "inner","odb_name": "isl4","odb_context": "board","odb_type": "signal","odb_polarity": "positive","odb_side": "inner",
+        "row_num": 4,"odb_row_num": "7"
+    },
+    "isl5": {
+        "row": "8","type": "inner","name": "l5","context": "board","layer_type": "signal","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 5,"tl_name": "l5","tl_type": "inner","odb_name": "isl5","odb_context": "board","odb_type": "signal","odb_polarity": "positive","odb_side": "inner",
+        "row_num": 5,"odb_row_num": "8"
+    },
+    "isl6": {
+        "row": "9","type": "inner","name": "l6","context": "board","layer_type": "signal","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 6,"tl_name": "l6","tl_type": "inner","odb_name": "isl6","odb_context": "board","odb_type": "signal","odb_polarity": "positive","odb_side": "inner",
+        "row_num": 6,"odb_row_num": "9"
+    },
+    "isl7": {
+        "row": "10","type": "inner","name": "l7","context": "board","layer_type": "signal","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 7,"tl_name": "l7","tl_type": "inner","odb_name": "isl7","odb_context": "board","odb_type": "signal","odb_polarity": "positive","odb_side": "inner",
+        "row_num": 7,"odb_row_num": "10"
+    },
+    "isl8": {
+        "row": "11","type": "inner","name": "l8","context": "board","layer_type": "signal","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 8,"tl_name": "l8","tl_type": "inner","odb_name": "isl8","odb_context": "board","odb_type": "signal","odb_polarity": "positive","odb_side": "inner",
+        "row_num": 8,"odb_row_num": "11"
+    },
+    "isl9": {
+        "row": "12","type": "inner","name": "l9","context": "board","layer_type": "signal","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 9,"tl_name": "l9","tl_type": "inner","odb_name": "isl9","odb_context": "board","odb_type": "signal","odb_polarity": "positive","odb_side": "inner",
+        "row_num": 9,"odb_row_num": "12"
+    },
+    "bottom": {
+        "row": "13","type": "outer","name": "bottom","context": "board","layer_type": "signal","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 10,"tl_name": "bottom","tl_type": "outer","odb_name": "bottom","odb_context": "board","odb_type": "signal","odb_polarity": "positive","odb_side": "bottom",
+        "row_num": 10,"odb_row_num": "13"
+    },
+    "smb": {
+        "row": "14","type": "solder_mask","name": "sm_ba","context": "board","layer_type": "solder_mask","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 1013,"tl_name": "sm_ba","tl_type": "solder_mask","odb_name": "smb","odb_context": "board","odb_type": "solder_mask","odb_polarity": "positive","odb_side": "bottom",
+        "row_num": 1013,"odb_row_num": "14"
+    },
+    "spb": {
+        "row": "15","type": "solder_paste","name": "sp_ba","context": "board","layer_type": "solder_paste","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 1014,"tl_name": "sp_ba","tl_type": "solder_paste","odb_name": "spb","odb_context": "board","odb_type": "solder_paste","odb_polarity": "positive","odb_side": "bottom",
+        "row_num": 1014,"odb_row_num": "15"
+    },
+    "ssb": {
+        "row": "16","type": "solder_paste","name": "sp_ba(2)","context": "board","layer_type": "solder_paste","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 1015,"tl_name": "sp_ba(2)","tl_type": "solder_paste","odb_name": "ssb","odb_context": "board","odb_type": "solder_paste","odb_polarity": "positive","odb_side": "bottom",
+        "row_num": 1015,"odb_row_num": "16"
+    },
+    "d1-2": {
+        "row": "17","type": "laser_drill","name": "d1-2","context": "board","layer_type": "drill","polarity": "positive","drl_start": "top",
+        "drl_end": "isl2","gdrl_start": "top","gdrl_end": "isl2","drl_start_num": "1","drl_end_num": "2","tl_name": "drill1-2","tl_type": "drill",
+        "tl_num": 10016,"odb_name": "d1-2","odb_context": "board","odb_type": "drill","odb_polarity": "positive","odb_side": "none",
+        "row_num": 10016,"odb_row_num": "17","drl_from_num": "1","drl_to_num": "2"
+    },
+    "d2-3": {
+        "row": "18","type": "laser_drill","name": "d2-3","context": "board","layer_type": "drill","polarity": "positive","drl_start": "isl2","drl_end": "isl3","gdrl_start": "isl2","gdrl_end": "isl3","drl_start_num": "2","drl_end_num": "3","tl_name": "drill2-3","tl_type": "drill",
+        "tl_num": 10017,"odb_name": "d2-3","odb_context": "board","odb_type": "drill","odb_polarity": "positive","odb_side": "none",
+        "row_num": 10017,"odb_row_num": "18","drl_from_num": "2","drl_to_num": "3"
+    },
+    "d3-4": {
+        "row": "19","type": "laser_drill","name": "d3-4","context": "board","layer_type": "drill","polarity": "positive","drl_start": "isl3","drl_end": "isl4","gdrl_start": "isl3","gdrl_end": "isl4","drl_start_num": "3","drl_end_num": "4","tl_name": "drill3-4","tl_type": "drill",
+        "tl_num": 10018,"odb_name": "d3-4","odb_context": "board","odb_type": "drill","odb_polarity": "positive","odb_side": "none",
+        "row_num": 10018,"odb_row_num": "19","drl_from_num": "3","drl_to_num": "4"
+    },
+    "d4-5": {
+        "row": "20","type": "laser_drill","name": "d4-5","context": "board","layer_type": "drill","polarity": "positive","drl_start": "isl4","drl_end": "isl5","gdrl_start": "isl4","gdrl_end": "isl5","drl_start_num": "4","drl_end_num": "5","tl_name": "drill4-5","tl_type": "drill",
+        "tl_num": 10019,"odb_name": "d4-5","odb_context": "board","odb_type": "drill","odb_polarity": "positive","odb_side": "none",
+        "row_num": 10019,"odb_row_num": "20","drl_from_num": "4","drl_to_num": "5"
+    },
+    "d5-6": {
+        "row": "21","type": "laser_drill","name": "d5-6","context": "board","layer_type": "drill","polarity": "positive","drl_start": "isl5","drl_end": "isl6","gdrl_start": "isl5","gdrl_end": "isl6","drl_start_num": "5","drl_end_num": "6","tl_name": "drill5-6","tl_type": "drill",
+        "tl_num": 10020,"odb_name": "d5-6","odb_context": "board","odb_type": "drill","odb_polarity": "positive","odb_side": "none",
+        "row_num": 10020,"odb_row_num": "21","drl_from_num": "5","drl_to_num": "6"
+    },
+    "d6-7": {
+        "row": "22","type": "laser_drill","name": "d6-7","context": "board","layer_type": "drill","polarity": "positive","drl_start": "isl6","drl_end": "isl7","gdrl_start": "isl6","gdrl_end": "isl7","drl_start_num": "6","drl_end_num": "7","tl_name": "drill6-7","tl_type": "drill",
+        "tl_num": 10021,"odb_name": "d6-7","odb_context": "board","odb_type": "drill","odb_polarity": "positive","odb_side": "none",
+        "row_num": 10021,"odb_row_num": "22","drl_from_num": "6","drl_to_num": "7"
+    },
+    "d7-8": {
+        "row": "23","type": "laser_drill","name": "d7-8","context": "board","layer_type": "drill","polarity": "positive","drl_start": "isl7","drl_end": "isl8","gdrl_start": "isl7","gdrl_end": "isl8","drl_start_num": "7","drl_end_num": "8","tl_name": "drill7-8","tl_type": "drill",
+        "tl_num": 10022,"odb_name": "d7-8","odb_context": "board","odb_type": "drill","odb_polarity": "positive","odb_side": "none",
+        "row_num": 10022,"odb_row_num": "23","drl_from_num": "7","drl_to_num": "8"
+    },
+    "d8-9": {
+        "row": "24","type": "laser_drill","name": "d8-9","context": "board","layer_type": "drill","polarity": "positive","drl_start": "isl8","drl_end": "isl9","gdrl_start": "isl8","gdrl_end": "isl9","drl_start_num": "8","drl_end_num": "9","tl_name": "drill8-9","tl_type": "drill",
+        "tl_num": 10023,"odb_name": "d8-9","odb_context": "board","odb_type": "drill","odb_polarity": "positive","odb_side": "none",
+        "row_num": 10023,"odb_row_num": "24","drl_from_num": "8","drl_to_num": "9"
+    },
+    "d9-10": {
+        "row": "25","type": "laser_drill","name": "d9-10","context": "board","layer_type": "drill","polarity": "positive","drl_start": "isl9","drl_end": "bottom","gdrl_start": "isl9","gdrl_end": "bottom","drl_start_num": "9","drl_end_num": "10","tl_name": "drill9-10","tl_type": "drill",
+        "tl_num": 10024,"odb_name": "d9-10","odb_context": "board","odb_type": "drill","odb_polarity": "positive","odb_side": "none",
+        "row_num": 10024,"odb_row_num": "25","drl_from_num": "9","drl_to_num": "10"
+    },
+    "drill": {
+        "row": "26","type": "main_drill","name": "drill","context": "board","layer_type": "drill","polarity": "positive","drl_start": "top","drl_end": "bottom","gdrl_start": "top","gdrl_end": "bottom","drl_start_num": 1,"drl_end_num": 10,"tl_name": "drill","tl_type": "drill",
+        "tl_num": 10025,"odb_name": "drill","odb_context": "board","odb_type": "drill","odb_polarity": "positive","odb_side": "none",
+        "row_num": 10025,"odb_row_num": "26","drl_from_num": 1,"drl_to_num": 10
+    },
+    "rout": {
+        "row": "27","type": "other","name": "__rout__","context": "board","layer_type": "rout","polarity": "positive","drl_start": "top","drl_end": "bottom","gdrl_start": "top","gdrl_end": "bottom","odb_name": "rout","odb_context": "board","odb_type": "rout","odb_polarity": "positive","odb_side": "none","odb_row_num": "27"
+    },
+    "nclegend-1-2": {
+        "row": "28","type": "other","name": "__nclegend-1-2__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 110027,"odb_name": "nclegend-1-2","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
+        "row_num": 110027,"odb_row_num": "28"
+    },
+    "nclegend-2-3": {
+        "row": "29","type": "other","name": "__nclegend-2-3__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 110028,"odb_name": "nclegend-2-3","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
+        "row_num": 110028,"odb_row_num": "29"
+    },
+    "nclegend-3-4": {
+        "row": "30","type": "other","name": "__nclegend-3-4__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 110029,"odb_name": "nclegend-3-4","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
+        "row_num": 110029,"odb_row_num": "30"
+    },
+    "nclegend-4-5": {
+        "row": "31","type": "other","name": "__nclegend-4-5__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 110030,"odb_name": "nclegend-4-5","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
+        "row_num": 110030,"odb_row_num": "31"
+    },
+    "nclegend-5-6": {
+        "row": "32","type": "other","name": "__nclegend-5-6__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 110031,"odb_name": "nclegend-5-6","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
+        "row_num": 110031,"odb_row_num": "32"
+    },
+    "nclegend-6-7": {
+        "row": "33","type": "other","name": "__nclegend-6-7__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 110032,"odb_name": "nclegend-6-7","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
+        "row_num": 110032,"odb_row_num": "33"
+    },
+    "nclegend-7-8": {
+        "row": "34","type": "other","name": "__nclegend-7-8__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 110033,"odb_name": "nclegend-7-8","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
+        "row_num": 110033,"odb_row_num": "34"
+    },
+    "nclegend-8-9": {
+        "row": "35","type": "other","name": "__nclegend-8-9__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 110034,"odb_name": "nclegend-8-9","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
+        "row_num": 110034,"odb_row_num": "35"
+    },
+    "nclegend-9-10": {
+        "row": "36","type": "other","name": "__nclegend-9-10__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 110035,"odb_name": "nclegend-9-10","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
+        "row_num": 110035,"odb_row_num": "36"
+    },
+    "nclegend-1-10": {
+        "row": "37","type": "other","name": "__nclegend-1-10__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 110036,"odb_name": "nclegend-1-10","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
+        "row_num": 110036,"odb_row_num": "37"
+    },
+    "outline": {
+        "row": "38","type": "other","name": "__outline__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 110037,"odb_name": "outline","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
+        "row_num": 110037,"odb_row_num": "38"
+    },
+    "top_assem": {
+        "row": "39","type": "other","name": "__top_assem__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 110038,"odb_name": "top_assem","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
+        "row_num": 110038,"odb_row_num": "39"
+    },
+    "bot_assem": {
+        "row": "40","type": "other","name": "__bot_assem__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 110039,"odb_name": "bot_assem","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
+        "row_num": 110039,"odb_row_num": "40"
+    },
+    "top_testpoint": {
+        "row": "41","type": "other","name": "__top_testpoint__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 110040,"odb_name": "top_testpoint","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
+        "row_num": 110040,"odb_row_num": "41"
+    },
+    "bot_testpoint": {
+        "row": "42","type": "other","name": "__bot_testpoint__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 110041,"odb_name": "bot_testpoint","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
+        "row_num": 110041,"odb_row_num": "42"
+    },
+    "top_osp": {
+        "row": "43","type": "other","name": "__top_osp__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 110042,"odb_name": "top_osp","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
+        "row_num": 110042,"odb_row_num": "43"
+    },
+    "bot_osp": {
+        "row": "44","type": "other","name": "__bot_osp__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 110043,"odb_name": "bot_osp","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
+        "row_num": 110043,"odb_row_num": "44"
+    },
+    "top_enig": {
+        "row": "45","type": "other","name": "__top_enig__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 110044,"odb_name": "top_enig","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
+        "row_num": 110044,"odb_row_num": "45"
+    },
+    "bot_enig": {
+        "row": "46","type": "other","name": "__bot_enig__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 110045,"odb_name": "bot_enig","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
+        "row_num": 110045,"odb_row_num": "46"
+    },
+    "fab_page2": {
+        "row": "47","type": "other","name": "__fab_page2__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 110046,"odb_name": "fab_page2","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
+        "row_num": 110046,"odb_row_num": "47"
+    },
+    "tmp_top_shorts": {
+        "row": "48","type": "other","name": "__tmp_top_shorts__","context": "misc","layer_type": "signal","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 110047,"odb_name": "tmp_top_shorts","odb_context": "misc","odb_type": "signal","odb_polarity": "positive","odb_side": "none",
+        "row_num": 110047,"odb_row_num": "48"
+    },
+    "tmp_bot_shorts": {
+        "row": "49","type": "other","name": "__tmp_bot_shorts__","context": "misc","layer_type": "signal","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 110048,"odb_name": "tmp_bot_shorts","odb_context": "misc","odb_type": "signal","odb_polarity": "positive","odb_side": "none",
+        "row_num": 110048,"odb_row_num": "49"
+    },
+    "bot_assy_mate": {
+        "row": "50","type": "other","name": "__bot_assy_mate__","context": "misc","layer_type": "signal","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 110049,"odb_name": "bot_assy_mate","odb_context": "misc","odb_type": "signal","odb_polarity": "positive","odb_side": "none",
+        "row_num": 110049,"odb_row_num": "50"
+    },
+    "outline+1": {
+        "row": "51","type": "other","name": "__outline+1__","context": "misc","layer_type": "signal","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 110050,"odb_name": "outline+1","odb_context": "misc","odb_type": "signal","odb_polarity": "positive","odb_side": "none",
+        "row_num": 110050,"odb_row_num": "51"
+    },
+    "top_assy_mate": {
+        "row": "52","type": "other","name": "__top_assy_mate__","context": "misc","layer_type": "signal","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
+        "tl_num": 110051,"odb_name": "top_assy_mate","odb_context": "misc","odb_type": "signal","odb_polarity": "positive","odb_side": "none",
+        "row_num": 110051,"odb_row_num": "52"
     }
+}
+}
 
-    // via孔在埋孔上?
-
-    info.depth_drilling = matrix.hasOwnProperty(par.jobInfo.depth_drilling) ? "yes" : "no"
-    info.depth_routing = matrix.hasOwnProperty(par.jobInfo.depth_routing) ? "yes" : "no"
-    var is_cavity = matrix.hasOwnProperty(par.jobInfo.cavity) ? "yes" : "no"
-    info.ATS_technology_25dc = is_cavity  // no
-    info.ATS_technology_25dr = is_cavity  // no
-
-    var solder_paste_layers = _.values(matrix).filter(function(v){return v.layer_type == "solder_paste"})
-    var solder_solder_mask = _.values(matrix).filter(function(v){return v.layer_type == "solder_mask"})
-    var solder_paste_info= solder_paste_layers.map(function(v){return v.side}).reduce(function(a,b){
-        if(a.indexOf(b)<0){ a.push(b) }
-        return a
-    },[])
-    var solder_solder_info= solder_solder_mask.map(function(v){return v.side}).reduce(function(a,b){
-        if(a.indexOf(b)<0){ a.push(b) }
-        return a
-    },[])
-    
-    if(solder_paste_info.length == 0){
-        info.solder_mask_side = "no"
-    } else if (solder_paste_info.length == 1) {
-        info.solder_mask_side = solder_paste_info[0]
-    } else {
-        info.solder_mask_side = "both"
-    }
-    if(solder_solder_info.length == 0){
-        info.silk_screen_side = "no"
-    } else if (solder_solder_info.length == 1) {
-        info.silk_screen_side = solder_solder_info[0]
-    } else {
-        info.silk_screen_side = "both"
-    }
-    // 线路外形
-    info.vc_src_EDGE_PLATING = "no"
-    GEN.affectedLayer({affected:'no',mode:'all'})
-    try {
-        matrixInfo.mSignals.forEach(function(v){
-            GEN.workLayer({name:v.name,display_number:2,clear_before:'yes'})
-            GEN.selClearFeature()
-            GEN.selRefFeat({layers:"rout",mode:"touch",use:"filter"})
-            if( GEN.getSelectCount()>0){
-                throw "yes"
-            }
-        })
-    } catch (msg) {
-        info.vc_src_EDGE_PLATING = msg
-        GEN.affectedLayer({affected:'no',mode:'all'})
-        GEN.selClearFeature()
-    }
 
-    info = Object.keys(info).reduce(function(a,b){// 过滤结果
-        if(info[b] != ""){
-            a[b] = info[b]
-        }
-        return a
-    },{})
 
-    // 有无属性vc_src_01005_pad_result
-    GEN.openStep({job:job,name:pcs})
-    GEN.affectedLayer({affected:'yes',layer:matrixInfo.mBoardLayer,clear_before:'yes'});
-    GEN.selClearFeature()
-    GEN.selectByFilter({attribute:par.job_info.vc_src_01005_pad_result})
-    info.is_01005_pad = GEN.getSelectCount() > 0? "yes" : "no"
-    GEN.affectedLayer({affected:'no',mode:'all'});
-    GEN.closeStep()
 
-    IKM.save_job_info({
-        jobid: JobId,
-        jobinfohash:info
-    })
-    return {info:info,laser_info:laser_info}
-}
-function selCopyLayer(props){  // 拷贝选择的到辅助层
-    var layer = props.layer
-    var job = props.job
-    if(GEN.isLayerExists({job:job,layer:layer})){
-        GEN.deleteLayer({job:job,layer:layer})
-    }
-    GEN.selCopyOther({dest:'layer_name',target_layer:layer})
-}
-function analysis_drill(props){
-    var job = props.job
-    var pcs = props.pcs_step
-    var arr = props.array_step
-    var matrix_analysis = props.matrix_analysis
-    var matrixInfo = props.matrixInfo
-    var matrix = matrixInfo.matrix
-
-    // 设置层的孔属性
-}
-function set_drill_attr(props){  // 镭射孔via,无铜孔npth,其余孔pth
-    var layer = props.layer
-    var attr = props.attr
-    GEN.workLayer({name:layer,display_number:2,clear_before:'yes'})
-    GEN.selClearFeature()
-    GEN.selAllFeat()
-    GEN.selAddAttr({attribute:attr})
-}
diff --git a/test/ATS_AIM_input_data copy 2.js b/test/ATS_AIM_input_data copy 2.js
new file mode 100644
index 0000000000000000000000000000000000000000..c765de9370c6f60b227f911f7755075e42c2d563
--- /dev/null
+++ b/test/ATS_AIM_input_data copy 2.js	
@@ -0,0 +1,303 @@
+
+
+/*
+NAME: 
+DESCRIPTION: ;
+PARAMETER:
+    [
+		{
+			name : 'path',
+			title : '资料路径',
+			type : 'LineEdit',
+			property : {tool_tip : '存放所有料号的文件夹路径,不需要进入到料号文件夹内'},
+		},
+		{
+			name : 'customer',
+			title : '客户配置',
+			type : 'LineEdit',
+			property : {tool_tip : '客户配置'},
+		},
+		{
+			name : 'config_path',
+			title : '配置地址',
+			type : 'LineEdit',
+			property : {tool_tip : '配置的路径'},
+		}
+	]
+	
+ VERSION_HISTORY:
+	V1.00 2020-04-15 Scott Sun
+	    1.新版本
+		
+ HELP:
+ 	<html><body bgcolor="#DDECFE">
+		<font size="3" color="#003DB2"><p>功能简介</p></font>
+		<p> 客户数据导入 </p>
+		<br>
+		<font size="3" color="#003DB2"><p>参数配置</p></font>
+		<p> 料号 和 客户配置 </p>
+		<br>
+		<font size="3" color="#003DB2"><p>注意事项</p></font>
+		<p> æ—  </p>
+		<br>
+	</body></html>	
+*/
+//////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////
+// 引入模块 包
+console.log("=============================================>input_start");
+console.log("=============================================>input_start");
+console.log("=============================================>input_start");
+console.log("=============================================>input_start");
+var $ = require('topcam.scriptfunc').argv();
+var fs = require('fs');
+var _ = require('lodash');
+var database = require("topsin.database");
+database.addConnection($.conf.database_conf, "DFM");
+var QDfm = database.query("DFM");
+if ($.conf.product_type == "aimdfm") {
+	QDfm.updateRow({
+		table: "pdm_aimdfm_task",
+		data: {
+			current_process_title: $.process_title
+		},
+		where: { id: $.task_id }
+	});
+}
+var GEN = $.gen;
+var Job = $.job_name;
+var db = $.db;
+var Status = 'ok';
+var resultData = [];
+var PAR = {};
+if ($.hasOwnProperty('script_parameter')){
+	PAR = JSON.parse($.script_parameter);
+}
+if (!$.hasOwnProperty('config_path')){
+	PAR.config_path = "cam/input_data"
+}
+try {
+	var par = PAR;
+	
+	console.log(par);
+	
+	if(!par.hasOwnProperty("customer")){throw "未填写配置"};
+	par.customer = par.customer[0].toUpperCase()+par.customer.slice(1).toLowerCase()
+	var cfg = db.query("",function(q){
+		return q.selectValue({
+			table:'pub_conf',
+			field:'text_data',
+			where:{path : par.config_path}
+		})
+	});
+
+	if (!cfg || cfg == ""){throw "cfg can not find"}  
+	
+	var config = eval(cfg);
+	if(!config.hasOwnProperty("customer")){throw "config error"}
+	var job = Job;
+	if(_.isEmpty(job)) throw "没有传入料号名!";
+	job = job.toLowerCase()
+	// 如果genesis已经存在这个料号
+	err = delSameJob({job:job,delSame:config.delSameJob}); if(err){throw err};
+	var custCfg = config.customer[par.customer]
+	if(!custCfg){throw "config error"}
+	var step = custCfg.step.toLowerCase()
+	// 获取路径下文件信息
+	var path = par.path || custCfg.path
+	var pathInfo = fs.listDir(path, 1)
+	// 判断存不存在料号文件
+	var jobFile = pathInfo.filter(function(v){return v.baseName.toLowerCase() == job})
+	if(jobFile.length == 0){throw "job file is not exist"}
+	var jobFiles = []  // 记录要分析的文件
+	if (!jobFile[0].isDir) {
+		jobFiles.push(jobFile[0])
+	} else {
+		jobFiles = fs.listDir(jobFile[0].path)
+	}
+	// 分析料号文件 得到料号导入信息 导入类型
+	var jobInfo = analyJobFiles({jobFiles:jobFiles.filter(function(v){return v.isFile}),custCfg:custCfg,config:config,job:job })
+	if(jobInfo.data.length == 0){throw "file error"}
+	var importOk = false;  // 是否成功导入
+	if(/odb/ig.test(jobInfo.type)){  // odb导入
+		if(jobInfo.data.length == 1){  // 只分析到一个tgz文件 直接导入
+			var err = importJob({name:job,db:custCfg.db,path:jobInfo.data[0].file.path},config.delSameJob)
+			if(err){throw err}
+		} else {  // 多个tgz文件 说明需要合并
+			var mergeFiles = jobInfo.data.filter(function(item){
+				var err = importJob({name:item.file.baseName,db:custCfg.db,path:item.file.path},config.delSameJob)
+				if(err){throw err}
+				return /yes/ig.test(item.format.isMerge)
+			})
+			var arr_job = mergeFiles[0]
+			var arr_step;
+			var steplist = GEN.getStepList({job:arr_job.file.baseName})
+			if(steplist.indexOf(arr_job.format.arrStep) < 0){
+				arr_step = steplist[0]
+			}else{arr_step = arr_job.format.arrStep}
+			GEN.openJob({job:job});
+			GEN.openJob({job:arr_job.file.baseName});
+			GEN.copyStep({  // 合并
+				source_job:arr_job.file.baseName,
+				source_name:arr_step,
+				dest_job:job,
+				dest_name:arr_step,
+			});
+			GEN.closeJob({ job: arr_job.file.baseName });
+			GEN.deleteJob({ job: arr_job.file.baseName });  // 合并后 删除array的料号
+		}
+		importOk = true
+	}
+
+	if(/gerber/ig.test(jobInfo.type)){  // gerber导入
+		GEN.createJob({name:job,db:custCfg.db})
+		GEN.createStep({job:job,name:step})
+		var gerberInfo = jobInfo.data.map(function(item){
+			var gerberCfg = JSON.parse(JSON.stringify(item.format));
+			var file = item.file
+			gerberCfg.layer = file.name.toLowerCase()
+			gerberCfg.path = file.path
+			gerberCfg.format = item.type
+			gerberCfg.job = job
+			gerberCfg.step = step
+			return gerberCfg
+		})
+		GEN.COM("input_manual_reset")
+		gerberInfo.forEach(function(v){
+			GEN.COM("input_manual_set",v)
+		})
+		GEN.COM("input_manual")
+		importOk = true
+	}
+
+	if(!importOk){throw "import error"}
+
+	// 导入结束
+	var matrix = GEN.getMatrix({job:job}); 
+	comp = Object.keys(matrix).filter(function(v){  // 如果有comp层 删除
+		return /^comp_\+_/ig.test(v)
+	})
+	if (comp.length > 0){
+		var tmp = GEN.getStepList({job:job})
+		GEN.openStep({job:job,name:tmp[0]})
+		GEN.COM("delete_comp")
+		GEN.closeStep()
+	}
+
+	GEN.checkInout({job:job,mode:"out"})  // 结束保存料号 关闭料号
+	GEN.saveJob({ job: job });
+	GEN.checkInout({job:job,mode:"in"})
+	GEN.closeJob({job:job})
+
+	QDfm.updateRow({
+		table: "pdm_aimdfm_task",
+		data: {
+			progress: 33.33
+		},
+		where: { id: $.task_id }
+	});
+	if (GEN.hasError()) {
+		Status = 'error';
+		resultData.push({ type: "error", title: "GEN错误!", detail: [{ desc: _.join(GEN.STATUS, "\n") }] });
+		return {
+			status: Status,
+			result_data: resultData
+		};
+	} else {
+		resultData.push({ type: "info", title: "操作完成, 请注意检查!" });
+		return {
+			status: Status,
+			result_data: resultData
+		};
+	}
+
+}
+catch (e) {
+	Status = 'error';
+	console.log("====================================>error");
+	console.log(_.toString(e));
+    resultData.push({type: "error", title: "脚本执行出错!", detail: [{desc: _.toString(e)}]});
+    return {status: Status, result_data: resultData};
+}
+
+function delSameJob(props){
+    var job = props.job
+    var delSame = props.delSame
+    if(GEN.isJobExists({job:job})){   
+        if(/^yes$/ig.test(delSame)){
+            if(GEN.isJobOpen({job:job})){ GEN.closeJob({job:job}) }
+            GEN.deleteJob({job:job})
+        } else {
+            return "job "+ job+ " exist"
+        }
+    }
+}
+function analyJobFiles(props){
+	var files = props.jobFiles;
+	var config = props.config;
+	var job = props.job;
+	var custCfg = props.custCfg;
+	var rules = custCfg.rules;
+	var paramsFile = files.filter(function(file){return /param/ig.test(file.baseName)})
+	var tmp_hash = {}
+	paramsFile.forEach(function(file){
+		tmp_hash[file.baseName] = (function(){
+			var tmparr = fs.readFile(file.path).split("\n")
+			var tmp = {}
+			tmparr.map(function(v){
+				var arr = v.split(/\b\s+\b/)
+				tmp[arr[0].replace(/-/ig,"_")] = arr[1]
+			})
+			return tmp
+		})() 
+	})
+	
+	var fileInfo = files.reduce(function(a,file){
+		try {
+			rules.forEach(function(item){
+				if(item.valid({file:file, job:job})){
+					var format = config.formats[item.format]
+					var format1;
+					if(item.format_params){
+						format1 = item.format_params({params:tmp_hash})
+					}
+					if(format1){
+						throw {file:file,type:item.type,format:format1}
+					}else{
+						throw {file:file,type:item.type,format:format}
+					}
+				}
+			})
+		} catch (info) { 
+			a.push(info)
+		}
+		return a
+	},[])
+	var odbfiles = fileInfo.filter(function(item){return /odb/ig.test(item.type)})
+	if(odbfiles.length == 0){
+		return {
+			type: "Gerber",
+			data: fileInfo
+		}
+	} else {
+		return {
+			type: "ODB",
+			data: odbfiles
+		}
+	}
+}
+function importJob(props,delSameJob){
+    var name = props.name
+    if (GEN.isJobExists({ job: name })) {
+        if (/^yes$/ig.test(delSameJob)) {
+            if(GEN.isJobOpen({ job: name })){ GEN.closeJob({ job: name }); }
+            GEN.deleteJob({ job: name });
+        }
+        else {
+            return "job "+name+" exist";
+        }
+    }
+    GEN.importJob(props);
+}
+
+
diff --git a/test/ATS_AIM_input_data.js b/test/ATS_AIM_input_data.js
index 8eb778c7d6a1034f9ca26aebab34190f28454e6c..99d8fe2172833527818c956bc0bce56a20612042 100644
--- a/test/ATS_AIM_input_data.js
+++ b/test/ATS_AIM_input_data.js
@@ -1,31 +1,111 @@
+
+
+/*
+NAME: 
+DESCRIPTION: ;
+PARAMETER:
+    [
+		{
+			name : 'path',
+			title : '资料路径',
+			type : 'LineEdit',
+			property : {tool_tip : '存放所有料号的文件夹路径,不需要进入到料号文件夹内'},
+		},
+		{
+			name : 'customer',
+			title : '客户配置',
+			type : 'LineEdit',
+			property : {tool_tip : '客户配置'},
+		},
+		{
+			name : 'config_path',
+			title : '配置地址',
+			type : 'LineEdit',
+			property : {tool_tip : '配置的路径'},
+		}
+	]
+	
+ VERSION_HISTORY:
+	V1.00 2020-04-16 Scott Sun
+	    1.新版本
+		
+ HELP:
+ 	<html><body bgcolor="#DDECFE">
+		<font size="3" color="#003DB2"><p>功能简介</p></font>
+		<p> 客户数据导入 </p>
+		<br>
+		<font size="3" color="#003DB2"><p>参数配置</p></font>
+		<p> 料号 和 客户配置 </p>
+		<br>
+		<font size="3" color="#003DB2"><p>注意事项</p></font>
+		<p> æ—  </p>
+		<br>
+	</body></html>	
+*/
+//////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////
 // 引入模块 包
+console.log("=============================================>input_start");
+console.log("=============================================>input_start");
+console.log("=============================================>input_start");
+console.log("=============================================>input_start");
 var $ = require('topcam.scriptfunc').argv();
 var fs = require('fs');
 var _ = require('lodash');
-var IKM = $.ikm;
+var database = require("topsin.database");
+database.addConnection($.conf.database_conf, "DFM");
+var QDfm = database.query("DFM");
+if ($.conf.product_type == "aimdfm") {
+	QDfm.updateRow({
+		table: "pdm_aimdfm_task",
+		data: {
+			current_process_title: $.process_title
+		},
+		where: { id: $.task_id }
+	});
+}
 var GEN = $.gen;
-var GUI = $.gui;
-var Job = $.job;
-var JobId = $.job_id;
-    
+var Job = $.job_name;
+var db = $.db;
+var Status = 'ok';
+var resultData = [];
+var PAR = {};
+if ($.hasOwnProperty('script_parameter')){
+	PAR = JSON.parse($.script_parameter);
+}
+if (!$.hasOwnProperty('config_path')){
+	PAR.config_path = "cam/input_data"
+}
 try {
-	var config = require("../config1.js")   // 读取配置文件
-	var cfg = IKM.select_value({table:'pub_conf',field:'text_data',where:{path : 'cam/input_data'}})    
-	var par = {    // todo 通过某种方式拿到料号和客户名
-		job:"11",
-		customer: "New_data"
-	}
-	IKM.msg($.par)
-	throw "end"
-	// var config = eval(cfg)
-	var job = par.job.toLowerCase();
+	var par = PAR;
+	
+	console.log(par);
+	
+	if(!par.hasOwnProperty("customer")){throw "未填写配置"};
+	par.customer = par.customer[0].toUpperCase()+par.customer.slice(1).toLowerCase()
+	var cfg = db.query("",function(q){
+		return q.selectValue({
+			table:'pub_conf',
+			field:'text_data',
+			where:{path : par.config_path}
+		})
+	});
+
+	if (!cfg || cfg == ""){throw "cfg can not find"}  
+	
+	var config = eval(cfg);
+	if(!config.hasOwnProperty("customer")){throw "config error"}
+	var job = Job;
+	if(_.isEmpty(job)) throw "没有传入料号名!";
+	job = job.toLowerCase()
 	// 如果genesis已经存在这个料号
 	err = delSameJob({job:job,delSame:config.delSameJob}); if(err){throw err};
 	var custCfg = config.customer[par.customer]
 	if(!custCfg){throw "config error"}
 	var step = custCfg.step.toLowerCase()
 	// 获取路径下文件信息
-	var pathInfo = fs.listDir(custCfg.path, 1)
+	var path = par.path || custCfg.path
+	var pathInfo = fs.listDir(path, 1)
 	// 判断存不存在料号文件
 	var jobFile = pathInfo.filter(function(v){return v.baseName.toLowerCase() == job})
 	if(jobFile.length == 0){throw "job file is not exist"}
@@ -51,7 +131,7 @@ try {
 			})
 			var arr_job = mergeFiles[0]
 			var arr_step;
-			var steplist = GEN.getStepList({job:arr_job})
+			var steplist = GEN.getStepList({job:arr_job.file.baseName})
 			if(steplist.indexOf(arr_job.format.arrStep) < 0){
 				arr_step = steplist[0]
 			}else{arr_step = arr_job.format.arrStep}
@@ -91,6 +171,7 @@ try {
 	}
 
 	if(!importOk){throw "import error"}
+
 	// 导入结束
 	var matrix = GEN.getMatrix({job:job}); 
 	comp = Object.keys(matrix).filter(function(v){  // 如果有comp层 删除
@@ -108,12 +189,37 @@ try {
 	GEN.checkInout({job:job,mode:"in"})
 	GEN.closeJob({job:job})
 
-    return 'Done';
+	QDfm.updateRow({
+		table: "pdm_aimdfm_task",
+		data: {
+			progress: 33.33
+		},
+		where: { id: $.task_id }
+	});
+	if (GEN.hasError()) {
+		Status = 'error';
+		resultData.push({ type: "error", title: "GEN错误!", detail: [{ desc: _.join(GEN.STATUS, "\n") }] });
+		return {
+			status: Status,
+			result_data: resultData
+		};
+	} else {
+		resultData.push({ type: "info", title: "操作完成, 请注意检查!" });
+		return {
+			status: Status,
+			result_data: resultData
+		};
+	}
+
 }
-catch (error) {
-	GUI.msg(error)
-    return 'Error';
+catch (e) {
+	Status = 'error';
+	console.log("====================================>error");
+	console.log(_.toString(e));
+    resultData.push({type: "error", title: "脚本执行出错!", detail: [{desc: _.toString(e)}]});
+    return {status: Status, result_data: resultData};
 }
+
 function delSameJob(props){
     var job = props.job
     var delSame = props.delSame
diff --git a/test/ATS_AIM_layer_rename_and_sort.js b/test/ATS_AIM_layer_rename_and_sort.js
index 0314b314f02d18375be5655fd5800bc3297e948f..749ecd5c5759d36099febfabbf357da219707052 100644
--- a/test/ATS_AIM_layer_rename_and_sort.js
+++ b/test/ATS_AIM_layer_rename_and_sort.js
@@ -1,219 +1,245 @@
 /*
-    NAME: 
-    DESCRIPTION: matrix改名和排序
-    PARAMETER:
-	[
+NAME: 
+DESCRIPTION: ;
+PARAMETER:
+    [
 		{
 			name : 'customer',
-			title : 'CUSTOMER 名',
+			title : '客户配置',
 			type : 'LineEdit',
-			property : {tool_tip : '客户名称'}
+			property : {tool_tip : '客户配置'},
         },
         {
-            name : 'job_name',
-			title : '料号名',
+			name : 'config_path',
+			title : '配置地址',
 			type : 'LineEdit',
-			property : {tool_tip : '料号名'}
-        }
-    ]
-
-    VERSION_HISTORY:
-	V1.00 2020 3-30 Scott
+			property : {tool_tip : '配置的路径'},
+		}
+	]
 	
-    HELP:
-	<html><body bgcolor="#DDECFE">
+ VERSION_HISTORY:
+	V1.00 2020-04-17 Scott Sun
+	    1.新版本
+		
+ HELP:
+ 	<html><body bgcolor="#DDECFE">
 		<font size="3" color="#003DB2"><p>功能简介</p></font>
-		  <p> matrix改名和排序</p>
-		  <br>
+		<p> 数据标准化 </p>
+		<br>
 		<font size="3" color="#003DB2"><p>参数配置</p></font>
-		 <p> matrix改名和排序规则 </p>
+		<p> 客户配置 </p>
+		<br>
 		<font size="3" color="#003DB2"><p>注意事项</p></font>
-		  <p> ● 无 </p>
-		  <br>
+		<p> æ—  </p>
+		<br>
 	</body></html>	
 */
-
+//////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////
 // 引入模块 包
+console.log("==============================================>data_format")
 var $ = require('topcam.scriptfunc').argv();
 var fs = require('fs');
 var _ = require('lodash');
-var IKM = $.ikm;
+var database = require("topsin.database");
+database.addConnection($.conf.database_conf, "DFM");
+var QDfm = database.query("DFM");
+if ($.conf.product_type == "aimdfm") {
+	QDfm.updateRow({
+		table: "pdm_aimdfm_task",
+		data: {
+			current_process_title: $.process_title
+		},
+		where: { id: $.task_id }
+	});
+}
 var GEN = $.gen;
-var GUI = $.gui;
-var Job = $.job;
-
+var Job = $.job_name;
+var db = $.db
+var Status = 'ok';
+var resultData = [];
+var PAR = {};
+if ($.hasOwnProperty('script_parameter')){
+	PAR = JSON.parse($.script_parameter);
+}
+if (!$.hasOwnProperty('config_path')){
+	PAR.config_path = "cam/input_data"
+}
 try {
     var mode = "use" // develop
-    var par = $.par;
-
-    par = {job_name:"11", customer:"tmp"}  // !! tmp
+    var par = PAR;
+	if(!par.hasOwnProperty("customer")){throw "未填写配置"}
+    par.customer = par.customer[0].toUpperCase()+par.customer.slice(1).toLowerCase()
+	var cfg = db.query("",function(q){
+		return q.selectValue({
+			table:'pub_conf',
+			field:'text_data',
+			where:{path : par.config_path}
+		})
+	});
 
-    var cfg = JSON.parse(IKM.select_value({table:'pub_conf',field:'json_data',where:{path : 'cam/input_data'}}));  // 读取配置文件
-    var useCfg = cfg[par.customer.toLowerCase()].formatData; 
-    if(!useCfg){throw "config error"}
-    var job = par.job_name
+	var config = eval(cfg)
+	var job = Job;
+    if(_.isEmpty(job)) throw "没有传入料号名!";
+    job = job.toLowerCase()
+    
+	var custCfg = config.customer[par.customer]	// 获取客户配置
+	if(!custCfg){throw "config error"}
+	var step = custCfg.step.toLowerCase()	// 获取pcs_step
+	// 料号验证
     if(!GEN.isJobExists({job:job})){ throw "job "+ job+ " is not exist" }
     if(!GEN.isJobOpen({job:job})){GEN.openJob({job:job})}
     if(GEN.checkInout({job:job,mode:"test"}) != 0 && mode != "develop"){ throw "the job check" }
-    GEN.checkInout({job:job,mode:"out"});
-    if(useCfg.hasOwnProperty("mergeDrill")){   // todo
-        mergeDrill({job:job})
-    }
-    if(mode=="develop"){ IKM.msg("rename")}
-    if(useCfg.rename){
-        reName({job:job,rule:useCfg.rename})
-    }
-    if(mode=="develop"){ IKM.msg("sort")}
-    if(useCfg.sort){
-        var err = sortLayer({job:job, rule:useCfg.sort});  // 排序
-        if (err) {throw err}
-    }
-    if(mode=="develop"){ IKM.msg("setDrill")}
-    if(useCfg.setDrill && /^yes$/.test(useCfg.setDrill.info)){
-        setDrill({job:job}); // 设置钻孔
-    }
-    // finally
-    if (/^yes$/ig.test(useCfg.autoSave)) { GEN.saveJob({ job: job }); }
-    GEN.checkInout({job:job,mode:"in"});
-    GEN.closeJob({job:job})
+	GEN.checkInout({job:job,mode:"out"});
 
-    return 'Done';
-}
-catch (error) {
-    GUI.msg(error);
-    return 'Error';
-}
+	// if(config.hasOwnProperty("merge_drill")){ // todo
+	// 	mergeDrill({job:job})
+	// }
+	// start    martix_tl_name
+	var matrix = GEN.getMatrix({job:job})
+	var tl_name_matrix = tlNameMatrix({matrix:matrix,tl_name:custCfg.tl_name})   // 给matrix信息添加tl_name
 
-function reName(props) { // 改名 par{job:要改名的料号, rule: {要改名的规则}
-    var job = props.job
-    if(Array.isArray(props.rule)){
-        props.rule = {rule:  props.rule }
-    }
-    var matrix = GEN.getMatrix({job:job});  // 获取matrix
-    var matrixNames = Object.keys(matrix)  // 获取数组 matrix的name
-    var signalCount = matrixNames.reduce(function(a,b){
-        if(matrix[b].context == "board" && matrix[b].layer_type=="signal"){
-            a++
-        }
-        return a
-    },0)
-    var reNameList = [];  // 记录匹配程度最高的改名结果
-    Object.keys(props.rule).forEach(function(key){
-        var rule = props.rule[key];
-        var renames =  getRenameCount(matrixNames,rule, signalCount);  // 根据规则 和 matrixNames 的到更改名称数据
-        if(renames.length > reNameList.length){  // 找到匹配规则最多的
-            reNameList = renames; 
-        }
-    })
-    // 更改层名
-    reNameList.forEach(function(v){
-        if(v.orig_name !== v.new_name){
-            GEN.renameLayer({job:job,layer:v.orig_name,new_name:v.new_name})
-        }
-    });
+	var format_cfg = config.data_format   // 拿到数据标准化配置
+
+	// 排序和设属性
+	var ret = sortLayer({job:job, rule:format_cfg, matrix:tl_name_matrix})
+	if(ret.err){throw err}
+	var after_sort_matrix = ret.sortNames
+	// 设置钻孔
+	err = setDrill({job:job, matrix:after_sort_matrix})
+	if(err){throw err}
+	
+	// 改名
+	err = reName({job:job, matrix:after_sort_matrix, cfg:format_cfg})
+	if(err){throw err}
+    // end
+    GEN.checkInout({job:job,mode:"out"})  // 结束保存料号 关闭料号
+	GEN.saveJob({ job: job });
+	GEN.checkInout({job:job,mode:"in"})
+	GEN.closeJob({job:job})
+
+    QDfm.updateRow({
+		table: "pdm_aimdfm_task",
+		data: {
+			progress: 33.33
+		},
+		where: { id: $.task_id }
+	});
+	if (GEN.hasError()) {
+		Status = 'error';
+		resultData.push({ type: "error", title: "GEN错误!", detail: [{ desc: _.join(GEN.STATUS, "\n") }] });
+		return {
+			status: Status,
+			result_data: resultData
+		};
+	} else {
+		resultData.push({ type: "info", title: "操作完成, 请注意检查!" });
+		return {
+			status: Status,
+			result_data: resultData
+		};
+	}
+}
+catch (e) {
+	Status = 'error';
+    resultData.push({type: "error", title: "脚本执行出错!", detail: [{desc: _.toString(e)}]});
+    return {status: Status, result_data: resultData};
 }
 
-function getRenameCount(names,rule,signalCount){  // 返回改名匹配结果
-    var res = names.reduce(function(res, name){
-        rule.map(function(rule){
-            if(rule.orig_name === name){
-                res.push({orig_name:name, new_name:rule.new_name});
-            } else if(eval("/^"+rule.orig_name+"$/ig.test(name)")) {
-                if(/\(.*\)/ig.test(rule.orig_name)){
-                    var exec = eval("/"+rule.orig_name+"/ig.exec(name)").slice(1)
-                    var new_name = rule.new_name;
-                    var index = 0;
-                    exec.forEach(function(v,i){
-                        if(/(after)/.test(new_name)){
-                            new_name = new_name.replace("(after)", Number(v)+1);
-                        }
-                        if(/(last)/.test(new_name)){
-                            new_name = new_name.replace("(last)",signalCount);
-                        }
-                        new_name = new_name.replace("("+(i+1)+")", v);
-                        if(rule.tp && /\d+/.test(v)){
-                            if(v==1){ new_name = "top" }
-                            index = v > index ? v : index
-                        }
-                    })
-                    if(rule.tp){
-                        res.push({orig_name:name, new_name:new_name, index:index});
-                    }else{
-                        res.push({orig_name:name, new_name:new_name});
-                    }
-                } else {
-                    res.push({orig_name:name, new_name:rule.new_name});
-                }
-            }
-        })
-        return res
-    }, [])
-    var tpIndex = {i: -1, value: 0};
-    res.forEach(function(v,i){
-        if(v.index && v.index > tpIndex.value){
-            tpIndex.i = i    
-            tpIndex.value = v.index    
-        }
-    })
-    if(tpIndex.i >= 0){
-        res[tpIndex.i].new_name = "bottom"
-    }
-    return res
+function tlNameMatrix(props){  // 设置标准名
+	var matrix = props.matrix
+	var tlname_rules = []
+	props.tl_name.forEach(function(item){
+		if(typeof item.orig_name == "string"){
+			tlname_rules.push(item)
+		} else {
+			item.orig_name.forEach(function(name2){
+				tlname_rules.push({
+					orig_name: name2,
+					tl_name: item.tl_name
+				})
+			})
+		}
+	})
+	var res = Object.keys(matrix).map(function(key){  // 将matrix信息添加tl_name 如果没有tl_name 就返回原信息
+		var val = matrix[key]
+		if(val.hasOwnProperty("tl_name")){delete val.tl_name}
+		var tlRule = tlname_rules.filter(function(rule){
+			if(rule.orig_name === key){return true}
+			var reg = new RegExp(rule.orig_name,"ig")
+			return reg.test(key)
+		})
+		if(tlRule.length == 0){return val}
+		for(var i=0;i<tlRule.length;i++){
+			if(tlRule[i].orig_name === key){return _.assign(val,{tl_name:tlRule[0].tl_name})}
+		}
+		var reg = new RegExp(tlRule[0].orig_name,"ig")
+		var tmp = reg.exec(key)
+		if(tmp && tmp.length){
+			var replaceArr = tmp.slice(1)
+			var tl_name = tlRule[0].tl_name
+			var params = {}
+			for(var i = 0; i<replaceArr.length;i++){
+				params["$"+(i+1)] = replaceArr[i]
+			}
+			replaceArr.forEach(function(v,i){
+				tl_name = tl_name.replace("($"+(i+1)+")",v)
+			})
+			tl_name = replaceTlName(tl_name)
+			function replaceTlName(name){
+				var tmp = /(\([^)]*\))/ig.exec(name)
+				if(!tmp){ return name }
+				var param_arr = tmp[1].match(/\$\d+/ig)
+				var newname = tmp[1]
+				param_arr.forEach(function(v){
+					newname = newname.replace(new RegExp("\\"+v,"ig"), params[v])
+				})
+				newname = name.replace(tmp[1],eval(newname))
+				return replaceTlName(newname)
+			}
+			return _.assign(val,{tl_name:tl_name})
+		}else {
+			return _.assign(val,{tl_name:tlRule[0].tl_name})
+		}
+	})
+	return res
 }
 
 function sortLayer(props){  // 排序方法  {job:要排序的料号, rule: {要改名的规则}
     var job = props.job
-    var matrix = GEN.getMatrix({job:job});
-    var matriNames = Object.keys(matrix)
-    // 找出所有排序规则中契合度最高的
-    var ruleKey = {}
-    Object.keys(props.rule).forEach(function(key){
-        var rule = props.rule[key]
-        ruleKey[key] = 0
-        var regs = rule.map(function(item){
-            return new RegExp(item.name,'ig')
-        })
-        matriNames.forEach(function(name){
-            var isSort = regs.reduce(function(a,b){
-                if(b.test(name)){a = true}    
-            return a}, false)
-            if(isSort){ruleKey[key]++}
-        })
-    })
-    var maxRule = {key:"", value: 0}
-    Object.keys(ruleKey).forEach(function(key){
-        var value = ruleKey[key]
-        if (value>=maxRule.value){
-            maxRule.key = key
-            maxRule.value = value
-        }
-    })
-    if(props.rule[maxRule.key]){props.rule = props.rule[maxRule.key]}else{return "sort rule error"}
-    var matriName = Object.keys(matrix).sort(function(a,b){return matrix[a].row - matrix[b].row})
-    var matrixFirst = matriName[0];  // 记录matrix中第一位
-    var sortNames = [];
-    var miscName = matriName.filter(function(name){  // 找出需要排序的名称列表
-        var flag = true;
+	var matrix =  GEN.getMatrix({job:job})
+	var tl_matrix = props.matrix
+	var matrixName = Object.keys(matrix).sort(function(a,b){return matrix[a].row - matrix[b].row})
+    var matrixFirst = matrixName[0];  // 记录matrix中第一位
+	var sortNames = [];
+    var miscName = tl_matrix.filter(function(value){  // 找出需要排序的名称列表
+		var flag = true;
+		if (!value.tl_name || value.tl_name == ""){return true}
+		var tl_name = value.tl_name
         props.rule.forEach(function(item,i){
-            var evalReg = "/^"+item.name+"$/ig.test(name)";
-            if(name == item.name || eval(evalReg)){
+            var evalReg = "/"+item.tl_name+"/ig.test(tl_name)";
+            if(tl_name == item.tl_name || eval(evalReg)){
                 flag = false;
-                if(name === item.name){
+                if(tl_name === item.tl_name){
                     var _item = JSON.parse(JSON.stringify(item));
-                    _item.value = i;
+					_item.value = i;
+					_item.name = value.name
+					_item.rule = item.tl_name
                     sortNames.push(_item);
                 } else {
                     var _item = JSON.parse(JSON.stringify(item));
                     _item.value = i;
-                    var str = "/^"+ item.name +"$/ig.exec(name)"
-                    _item.value2 = eval(str)[1] - 0;
-                    _item.name = name;
+					var str = "/"+ item.tl_name +"/ig.exec(tl_name)"
+					_item.value2 = eval(str).pop() - 0;
+					_item.name = value.name
+					_item.rule = item.tl_name
+                    _item.tl_name = tl_name;
                     sortNames.push(_item);
                 }
             }
         });
         return flag;
-    })
+	}).map(function(v){return v.name})
     miscName.forEach(function(n){ 
         if(matrix[n].context == 'board'){
             GEN.matrixLayerAttr({job:job,layer:n,context:'misc'}) 
@@ -221,78 +247,126 @@ function sortLayer(props){  // 排序方法  {job:要排序的料号, rule: {要
     })
     sortNames = sortNames.sort(function(a,b){
         return a.value - b.value || a.value2 - b.value2
-    })
-    // 排序
+	})
+	// 排序
     if(sortNames.length){
         if(sortNames[0].name !== matrixFirst) {  // 如果第一位和matrix中第一位不同,先把第一位插入到最前面
             GEN.matrixMoveRow({ job:job,layer:sortNames[0].name,before:matrixFirst })
         }
         sortNames.forEach(function(v,i,arr){
-            var layer = matrix[v.name];
             if(i !== 0){
                 GEN.matrixMoveRow({ job:job,layer:v.name,after:arr[i-1].name })             
             }
-            if(v.context !== layer.context || v.type !== layer.layer_type || v.polarity !== layer.polarity){
-                GEN.matrixLayerAttr({job:job,layer:v.name,context:v.context,type:v.type,polarity:v.polarity});
-            }
+            GEN.matrixLayerAttr(_.assign({job:job,layer:v.name},v.attr));
         })
-    }
+	}
+	return {
+		sortNames:sortNames
+	}
 }
 
 function setDrill(props){   // 设置钻孔
     var job = props.job
-    var martrix = GEN.getMatrix({job:job});
+	var matrix = props.matrix
+	
     // 获取所有的钻孔层
-    var drillLayer = Object.keys(martrix).filter(function(v){
-        return martrix[v].layer_type == "drill" && martrix[v].context == "board"
+    var drillLayer =matrix.filter(function(v){
+        return (v.attr.type == "drill" || v.attr.type == "rout") && v.attr.context == "board"
     })
     // 获取所有single层
-    var signalLayer = Object.keys(martrix).sort(function(a,b){return Number(martrix[a].row) - Number(martrix[b].row)}).filter(function(v){
-        return martrix[v].layer_type == "signal" && martrix[v].context == "board"
-    })
-    var layerCount = GEN.getLayerCount({job:job})
+    var signalLayer =matrix.filter(function(v){
+        return v.attr.type == "signal" && v.attr.context == "board"
+	})
+	var layerCount = GEN.getLayerCount({job:job})
     // findSignal 根据传入的数字找到对应的signal层 如 1 => top ; 2 => layer_2 
     function findSignal(num){
-        var res = signalLayer.filter(function(v){
-            var vnum = 0;
-            if(/\d/.test(v)){
-                var tmp = /(\d+)/ig.exec(v);
-                vnum = tmp? Number(tmp[1]) : 0;
-            }
-            return num === vnum
-        })
-        return res[0];
-    }
+        return signalLayer[Number(num-1)].name
+	}
     function doDrill(drills){  // 分析钻孔层
         return drills.map(function(v){
-            if(v == "drill"){
-                return {start:signalLayer[0], end:signalLayer[signalLayer.length - 1], layer:v}
+            if(v.name == "drill" || v.name=="rout"){
+                return {start:findSignal(1), end:findSignal(layerCount), layer:v.name}
             } else {
-                var tmp = /(\d+).(\d+)/ig.exec(v);
+                var tmp = /(\d+)-(\d+)/ig.exec(v.tl_name);
                 if(tmp){
-                    var start = Number(tmp[1]) === 1? 'top':findSignal(Number(tmp[1])); 
-                    var end = Number(tmp[2]) === layerCount? 'bottom': findSignal(Number(tmp[2]));
-                    return {start:start, end:end, layer:v}
+                    var start = findSignal(tmp[1]); 
+                    var end = findSignal(tmp[2]); 
+                    return {start:start, end:end, layer:v.name}
                 } else {
                     return 0;
                 }
             }
         })
     }
-    var drillSetList = doDrill(drillLayer);   // 分析得到钻孔设置结果
-    drillSetList = drillSetList.filter(function(v){return v!==0})
+	var drillSetList = doDrill(drillLayer);   // 分析得到钻孔设置结果
+	drillSetList = drillSetList.filter(function(v){return v!==0})
     drillSetList.forEach(function(v){
         GEN.matrixLayerDrill({job:job,layer:v.layer,start:v.start ,end:v.end})
     })
 }
 
+function reName(props) { // 改名 par{job:要改名的料号, rule: {要改名的规则}
+    var job = props.job
+	var matrix = props.matrix
+	var cfg = props.cfg
+	matrix = matrix.filter(function(v){return v.name != v.new_name})
+	var rename_list = matrix.map(function(item){
+		var new_name;
+		var tl_name = item.tl_name
+		var rule = item.rule
+		if(rule === tl_name){
+			new_name = item.new_name
+		} else {
+			var reg = new RegExp(rule,"ig")
+			var tmp = reg.exec(tl_name)
+			if(!tmp){return undefined}
+			var replaceArr = tmp.slice(1)
+			new_name = item.new_name
+			var params = {}
+			for(var i = 0; i<replaceArr.length;i++){
+				params["$"+(i+1)] = replaceArr[i]
+			}
+			replaceArr.forEach(function(v,i){
+				tl_name = tl_name.replace("($"+(i+1)+")",v)
+			})
+			new_name = replaceTlName(new_name)
+			function replaceTlName(name){
+				var tmp = /(\([^)]*\))/ig.exec(name)
+				if(!tmp){ return name }
+				var param_arr = tmp[1].match(/\$\d+/ig)
+				var newname = tmp[1]
+				param_arr.forEach(function(v){
+					newname = newname.replace(new RegExp("\\"+v,"ig"), params[v])
+				})
+				newname = name.replace(tmp[1],eval(newname))
+				return replaceTlName(newname)
+			}
+		}
+		return {
+			orig_name: item.name,
+			new_name: new_name
+		}
+	})
+	rename_list = rename_list.filter(function(v){
+		var flag = true
+		if(!v){flag = false}
+		if(!v.orig_name || !v.new_name ){flag = false}
+		return flag
+	})
+	rename_list.forEach(function(v){
+        if(v.orig_name !== v.new_name){
+            GEN.renameLayer({job:job,layer:v.orig_name,new_name:v.new_name})
+        }
+    });
+}
+
 function mergeDrill(props){ // 合并钻孔
     var newdrills = []
     var job = props.job;
     var step = GEN.getStepList({job:job})[0];
     var maxDrill = {name:"",value:0};
     function getDrl(str){
-        var num = /(\d+)-(\d+)/ig.exec(str);  // 匹配出 num-num
+        var num = /(\d+)-(\d+)\.drl/ig.exec(str);  // 匹配出 num-num
         var tmp = [];
         for(var i = Number(num[1]);i<num[2];i++){
             if(i == 1){
@@ -306,7 +380,7 @@ function mergeDrill(props){ // 合并钻孔
     GEN.openStep({job : job,name:step});
     for(var key in matrix){
         var val = matrix[key];
-        if(val.layer_type == "drill"){
+        if(val.layer_type == "drill" && /(\d+)-(\d+)\.drl/ig.test(val.name)){
             var mergeTo = getDrl(val.name) // 要合并到的地方
             mergeTo.forEach(function(layerName){
                 if(GEN.isLayerExists({job : job ,layer:layerName.toLowerCase()}) && newdrills.indexOf(layerName.toLowerCase()) < 0){
@@ -321,11 +395,11 @@ function mergeDrill(props){ // 合并钻孔
             })
         }
     }
-    // 合并到maxDrill独立合并
     GEN.createLayer({job:job,layer:"b1-"+maxDrill.value,conext:'board',type:'drill'});
     GEN.workLayer({name:"b1-"+maxDrill.value,display_number:1,clear_before:'yes'});
     GEN.copyLayer({source_job:job ,mode:'append',source_step:step,source_layer:maxDrill.name,dest_layer:"b1-"+maxDrill.value});
-    GEN.affectedLayer({affected:"no",mode:"all"});
+	GEN.affectedLayer({affected:"no",mode:"all"});
+	GEN.clearLayers();
     GEN.closeStep();
-    return this;
 }
+
diff --git "a/test/ATS_AIM_layer_rename_\345\211\257\346\234\254.js" b/test/ATS_AIM_layer_rename_and_sort_2.js
similarity index 66%
rename from "test/ATS_AIM_layer_rename_\345\211\257\346\234\254.js"
rename to test/ATS_AIM_layer_rename_and_sort_2.js
index bf88f1f7db0d22d8ad0907c20c3f07e6882afde9..4443362f40613d5b5a3a6a6b3d29835d49bc1522 100644
--- "a/test/ATS_AIM_layer_rename_\345\211\257\346\234\254.js"
+++ b/test/ATS_AIM_layer_rename_and_sort_2.js
@@ -4,46 +4,16 @@
     PARAMETER:
 	[
 		{
-			name : 'step_filter',
-			title : 'Step过滤',
+			name : 'customer',
+			title : 'CUSTOMER 名',
 			type : 'LineEdit',
-			property : {tool_tip : '过滤step信息'}
+			property : {tool_tip : '客户名称'}
         },
         {
-            name : 'rename_rule',
-			title : '改名规则',
-			type : 'TextEdit',
-            property : {tool_tip : '支持正则匹配'},
-            setter:function(obj,value,self){
-                obj.setPlainText(value);
-            },
-            getter:function(obj,self){
-                return obj.plainText
-            }
-        },
-        {
-            name : 'sort_rule',
-			title : '排序规则',
-			type : 'TextEdit',
-            property : {tool_tip : '支持正则匹配'},
-            setter:function(obj,value,self){
-                obj.setPlainText(value);
-            },
-            getter:function(obj,self){
-                return obj.plainText
-            }
-        },
-        {
-            name : 'auto_save',
-			title : '自动保存',
-            type : 'RadioBox',
-            property : {
-				item_list:[
-					{name:'yes',text:'YES'},
-					{name:'no',text:'NO'},
-				],
-				tool_tip:'是否自动保存料号开关'
-			}
+            name : 'job_name',
+			title : '料号名',
+			type : 'LineEdit',
+			property : {tool_tip : '料号名'}
         }
     ]
 
@@ -73,54 +43,37 @@ var GUI = $.gui;
 var Job = $.job;
 
 try {
-    var config = {
-        rename: {
-            rule1: [
-                { orig_name : 'd_top_.+(\\d+)', new_name : 'd1-(1)' },
-                { orig_name : 'd_.+(\\d+)_bottom', new_name : 'd(1)-(last)' },
-                { orig_name : 'd_.+(\\d+)_.+(\\d+)', new_name : 'd(1)-(2)'}
-            ]
-        },
-        sort: [
-            {name:'comp_+_top',context:'board',type:'components',polarity:'positive'},
-            {name:'sst',context:'board',type:'solder_paste',polarity:'positive'},
-            {name:'spt',context:'board',type:'solder_paste',polarity:'positive'},
-            {name:'smt',context:'board',type:'solder_mask',polarity:'positive'},
-            {name:'top',context:'board',type:'signal',polarity:'positive'},
-            {name:'isl(\\d+)',context:'board',type:'signal',polarity:'positive'},
-            {name:'bottom',context:'board',type:'signal',polarity:'positive'},
-            {name:'smb',context:'board',type:'solder_mask',polarity:'positive'},
-            {name:'spb',context:'board',type:'solder_paste',polarity:'positive'},
-            {name:'ssb',context:'board',type:'solder_paste',polarity:'positive'},
-            {name:'comp_+_bot',context:'board',type:'components',polarity:'positive'},
-            {name:'d(\\d+)-\\d+',context:'board',type:'drill',polarity:'positive'},
-            {name:'drill',context:'board',type:'drill',polarity:'positive'},
-            {name:'rout',context:'board',type:'rout',polarity:'positive'}
-        ],
-        setDrill: 'yes',
-        auto_save:'yes'
-    }   
+    var mode = "use" // develop
+    var par = $.par;
 
-    var job = "1"
+    par = {job_name:"1", customer:"Customer_1"}  // !! tmp
+
+    var cfg = JSON.parse(IKM.select_value({table:'pub_conf',field:'json_data',where:{path : 'cam/input_data'}}));  // 读取配置文件
+    var useCfg = cfg[par.customer.toLowerCase()].formatData; 
+    if(!useCfg){throw "config error"}
+    var job = par.job_name
     if(!GEN.isJobExists({job:job})){ throw "job "+ job+ " is not exist" }
     if(!GEN.isJobOpen({job:job})){GEN.openJob({job:job})}
-    if(GEN.checkInout({job:job,mode:"test"}) != 0){ throw "the job check" }
+    if(GEN.checkInout({job:job,mode:"test"}) != 0 && mode != "develop"){ throw "the job check" }
     GEN.checkInout({job:job,mode:"out"});
-
-    if(config.rename){
-        reName({job:job,rule:config.rename})
+    // if(useCfg.hasOwnProperty("mergeDrill")){   // todo
+    //     mergeDrill({job:job})
+    // }
+    if(mode=="develop"){ IKM.msg("rename")}
+    if(useCfg.rename){
+        reName({job:job,rule:useCfg.rename})
     }
-    if(config.sort.length){
-        sortLayer({job:job, rule:config.sort});  // 排序
+    if(mode=="develop"){ IKM.msg("sort")}
+    if(useCfg.sort){
+        var err = sortLayer({job:job, rule:useCfg.sort});  // 排序
+        if (err) {throw err}
     }
-    if(/^yes$/.test(config.setDrill)){
+    if(mode=="develop"){ IKM.msg("setDrill")}
+    if(useCfg.setDrill && /^yes$/.test(useCfg.setDrill.info)){
         setDrill({job:job}); // 设置钻孔
     }
-
-
-
     // finally
-    if (/^yes$/ig.test(config.auto_save)) { GEN.saveJob({ job: job }); }
+    if (/^yes$/ig.test(useCfg.autoSave)) { GEN.saveJob({ job: job }); }
     GEN.checkInout({job:job,mode:"in"});
     GEN.closeJob({job:job})
 
@@ -131,7 +84,6 @@ catch (error) {
     return 'Error';
 }
 
-
 function reName(props) { // 改名 par{job:要改名的料号, rule: {要改名的规则}
     var job = props.job
     if(Array.isArray(props.rule)){
@@ -210,8 +162,33 @@ function getRenameCount(names,rule,signalCount){  // 返回改名匹配结果
 }
 
 function sortLayer(props){  // 排序方法  {job:要排序的料号, rule: {要改名的规则}
-    var job = props.job 
+    var job = props.job
     var matrix = GEN.getMatrix({job:job});
+    var matriNames = Object.keys(matrix)
+    // 找出所有排序规则中契合度最高的
+    var ruleKey = {}
+    Object.keys(props.rule).forEach(function(key){
+        var rule = props.rule[key]
+        ruleKey[key] = 0
+        var regs = rule.map(function(item){
+            return new RegExp(item.name,'ig')
+        })
+        matriNames.forEach(function(name){
+            var isSort = regs.reduce(function(a,b){
+                if(b.test(name)){a = true}    
+            return a}, false)
+            if(isSort){ruleKey[key]++}
+        })
+    })
+    var maxRule = {key:"", value: 0}
+    Object.keys(ruleKey).forEach(function(key){
+        var value = ruleKey[key]
+        if (value>=maxRule.value){
+            maxRule.key = key
+            maxRule.value = value
+        }
+    })
+    if(props.rule[maxRule.key]){props.rule = props.rule[maxRule.key]}else{return "sort rule error"}
     var matriName = Object.keys(matrix).sort(function(a,b){return matrix[a].row - matrix[b].row})
     var matrixFirst = matriName[0];  // 记录matrix中第一位
     var sortNames = [];
@@ -262,7 +239,8 @@ function sortLayer(props){  // 排序方法  {job:要排序的料号, rule: {要
     }
 }
 
-function setDrill(){   // 设置钻孔
+function setDrill(props){   // 设置钻孔
+    var job = props.job
     var martrix = GEN.getMatrix({job:job});
     // 获取所有的钻孔层
     var drillLayer = Object.keys(martrix).filter(function(v){
@@ -306,4 +284,48 @@ function setDrill(){   // 设置钻孔
     drillSetList.forEach(function(v){
         GEN.matrixLayerDrill({job:job,layer:v.layer,start:v.start ,end:v.end})
     })
-}
\ No newline at end of file
+}
+
+function mergeDrill(props){ // 合并钻孔
+    var newdrills = []
+    var job = props.job;
+    var step = GEN.getStepList({job:job})[0];
+    var maxDrill = {name:"",value:0};
+    function getDrl(str){
+        var num = /(\d+)-(\d+)/ig.exec(str);  // 匹配出 num-num
+        var tmp = [];
+        for(var i = Number(num[1]);i<num[2];i++){
+            if(i == 1){
+                maxDrill = Number(num[2]) >  maxDrill.value? {name:str,value:Number(num[2])} : maxDrill;
+            }
+            tmp.push("L"+i+"-"+(i+1));
+        }
+        return tmp;
+    } 
+    var matrix = GEN.getMatrix({job:job});
+    GEN.openStep({job : job,name:step});
+    for(var key in matrix){
+        var val = matrix[key];
+        if(val.layer_type == "drill"){
+            var mergeTo = getDrl(val.name) // 要合并到的地方
+            mergeTo.forEach(function(layerName){
+                if(GEN.isLayerExists({job : job ,layer:layerName.toLowerCase()}) && newdrills.indexOf(layerName.toLowerCase()) < 0){
+                    GEN.deleteLayer({job:job, layer:layerName.toLowerCase()})
+                }
+                if(!GEN.isLayerExists({job : job ,layer:layerName.toLowerCase()})){
+                    GEN.createLayer({job:job,layer:layerName.toLowerCase(),conext:'board',type:val.layer_type});
+                    newdrills.push(layerName.toLowerCase())
+                }
+                GEN.workLayer({name:layerName.toLowerCase(),display_number:1,clear_before:'yes'});
+                GEN.copyLayer({source_job:job ,mode:'append',source_step:step,source_layer:val.name,dest_layer:layerName.toLowerCase()});
+            })
+        }
+    }
+    // 合并到maxDrill独立合并
+    GEN.createLayer({job:job,layer:"b1-"+maxDrill.value,conext:'board',type:'drill'});
+    GEN.workLayer({name:"b1-"+maxDrill.value,display_number:1,clear_before:'yes'});
+    GEN.copyLayer({source_job:job ,mode:'append',source_step:step,source_layer:maxDrill.name,dest_layer:"b1-"+maxDrill.value});
+    GEN.affectedLayer({affected:"no",mode:"all"});
+    GEN.closeStep();
+    return this;
+}
diff --git a/test/ATS_testFIlm.js b/test/ATS_testFIlm.js
new file mode 100644
index 0000000000000000000000000000000000000000..c765de9370c6f60b227f911f7755075e42c2d563
--- /dev/null
+++ b/test/ATS_testFIlm.js
@@ -0,0 +1,303 @@
+
+
+/*
+NAME: 
+DESCRIPTION: ;
+PARAMETER:
+    [
+		{
+			name : 'path',
+			title : '资料路径',
+			type : 'LineEdit',
+			property : {tool_tip : '存放所有料号的文件夹路径,不需要进入到料号文件夹内'},
+		},
+		{
+			name : 'customer',
+			title : '客户配置',
+			type : 'LineEdit',
+			property : {tool_tip : '客户配置'},
+		},
+		{
+			name : 'config_path',
+			title : '配置地址',
+			type : 'LineEdit',
+			property : {tool_tip : '配置的路径'},
+		}
+	]
+	
+ VERSION_HISTORY:
+	V1.00 2020-04-15 Scott Sun
+	    1.新版本
+		
+ HELP:
+ 	<html><body bgcolor="#DDECFE">
+		<font size="3" color="#003DB2"><p>功能简介</p></font>
+		<p> 客户数据导入 </p>
+		<br>
+		<font size="3" color="#003DB2"><p>参数配置</p></font>
+		<p> 料号 和 客户配置 </p>
+		<br>
+		<font size="3" color="#003DB2"><p>注意事项</p></font>
+		<p> æ—  </p>
+		<br>
+	</body></html>	
+*/
+//////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////
+// 引入模块 包
+console.log("=============================================>input_start");
+console.log("=============================================>input_start");
+console.log("=============================================>input_start");
+console.log("=============================================>input_start");
+var $ = require('topcam.scriptfunc').argv();
+var fs = require('fs');
+var _ = require('lodash');
+var database = require("topsin.database");
+database.addConnection($.conf.database_conf, "DFM");
+var QDfm = database.query("DFM");
+if ($.conf.product_type == "aimdfm") {
+	QDfm.updateRow({
+		table: "pdm_aimdfm_task",
+		data: {
+			current_process_title: $.process_title
+		},
+		where: { id: $.task_id }
+	});
+}
+var GEN = $.gen;
+var Job = $.job_name;
+var db = $.db;
+var Status = 'ok';
+var resultData = [];
+var PAR = {};
+if ($.hasOwnProperty('script_parameter')){
+	PAR = JSON.parse($.script_parameter);
+}
+if (!$.hasOwnProperty('config_path')){
+	PAR.config_path = "cam/input_data"
+}
+try {
+	var par = PAR;
+	
+	console.log(par);
+	
+	if(!par.hasOwnProperty("customer")){throw "未填写配置"};
+	par.customer = par.customer[0].toUpperCase()+par.customer.slice(1).toLowerCase()
+	var cfg = db.query("",function(q){
+		return q.selectValue({
+			table:'pub_conf',
+			field:'text_data',
+			where:{path : par.config_path}
+		})
+	});
+
+	if (!cfg || cfg == ""){throw "cfg can not find"}  
+	
+	var config = eval(cfg);
+	if(!config.hasOwnProperty("customer")){throw "config error"}
+	var job = Job;
+	if(_.isEmpty(job)) throw "没有传入料号名!";
+	job = job.toLowerCase()
+	// 如果genesis已经存在这个料号
+	err = delSameJob({job:job,delSame:config.delSameJob}); if(err){throw err};
+	var custCfg = config.customer[par.customer]
+	if(!custCfg){throw "config error"}
+	var step = custCfg.step.toLowerCase()
+	// 获取路径下文件信息
+	var path = par.path || custCfg.path
+	var pathInfo = fs.listDir(path, 1)
+	// 判断存不存在料号文件
+	var jobFile = pathInfo.filter(function(v){return v.baseName.toLowerCase() == job})
+	if(jobFile.length == 0){throw "job file is not exist"}
+	var jobFiles = []  // 记录要分析的文件
+	if (!jobFile[0].isDir) {
+		jobFiles.push(jobFile[0])
+	} else {
+		jobFiles = fs.listDir(jobFile[0].path)
+	}
+	// 分析料号文件 得到料号导入信息 导入类型
+	var jobInfo = analyJobFiles({jobFiles:jobFiles.filter(function(v){return v.isFile}),custCfg:custCfg,config:config,job:job })
+	if(jobInfo.data.length == 0){throw "file error"}
+	var importOk = false;  // 是否成功导入
+	if(/odb/ig.test(jobInfo.type)){  // odb导入
+		if(jobInfo.data.length == 1){  // 只分析到一个tgz文件 直接导入
+			var err = importJob({name:job,db:custCfg.db,path:jobInfo.data[0].file.path},config.delSameJob)
+			if(err){throw err}
+		} else {  // 多个tgz文件 说明需要合并
+			var mergeFiles = jobInfo.data.filter(function(item){
+				var err = importJob({name:item.file.baseName,db:custCfg.db,path:item.file.path},config.delSameJob)
+				if(err){throw err}
+				return /yes/ig.test(item.format.isMerge)
+			})
+			var arr_job = mergeFiles[0]
+			var arr_step;
+			var steplist = GEN.getStepList({job:arr_job.file.baseName})
+			if(steplist.indexOf(arr_job.format.arrStep) < 0){
+				arr_step = steplist[0]
+			}else{arr_step = arr_job.format.arrStep}
+			GEN.openJob({job:job});
+			GEN.openJob({job:arr_job.file.baseName});
+			GEN.copyStep({  // 合并
+				source_job:arr_job.file.baseName,
+				source_name:arr_step,
+				dest_job:job,
+				dest_name:arr_step,
+			});
+			GEN.closeJob({ job: arr_job.file.baseName });
+			GEN.deleteJob({ job: arr_job.file.baseName });  // 合并后 删除array的料号
+		}
+		importOk = true
+	}
+
+	if(/gerber/ig.test(jobInfo.type)){  // gerber导入
+		GEN.createJob({name:job,db:custCfg.db})
+		GEN.createStep({job:job,name:step})
+		var gerberInfo = jobInfo.data.map(function(item){
+			var gerberCfg = JSON.parse(JSON.stringify(item.format));
+			var file = item.file
+			gerberCfg.layer = file.name.toLowerCase()
+			gerberCfg.path = file.path
+			gerberCfg.format = item.type
+			gerberCfg.job = job
+			gerberCfg.step = step
+			return gerberCfg
+		})
+		GEN.COM("input_manual_reset")
+		gerberInfo.forEach(function(v){
+			GEN.COM("input_manual_set",v)
+		})
+		GEN.COM("input_manual")
+		importOk = true
+	}
+
+	if(!importOk){throw "import error"}
+
+	// 导入结束
+	var matrix = GEN.getMatrix({job:job}); 
+	comp = Object.keys(matrix).filter(function(v){  // 如果有comp层 删除
+		return /^comp_\+_/ig.test(v)
+	})
+	if (comp.length > 0){
+		var tmp = GEN.getStepList({job:job})
+		GEN.openStep({job:job,name:tmp[0]})
+		GEN.COM("delete_comp")
+		GEN.closeStep()
+	}
+
+	GEN.checkInout({job:job,mode:"out"})  // 结束保存料号 关闭料号
+	GEN.saveJob({ job: job });
+	GEN.checkInout({job:job,mode:"in"})
+	GEN.closeJob({job:job})
+
+	QDfm.updateRow({
+		table: "pdm_aimdfm_task",
+		data: {
+			progress: 33.33
+		},
+		where: { id: $.task_id }
+	});
+	if (GEN.hasError()) {
+		Status = 'error';
+		resultData.push({ type: "error", title: "GEN错误!", detail: [{ desc: _.join(GEN.STATUS, "\n") }] });
+		return {
+			status: Status,
+			result_data: resultData
+		};
+	} else {
+		resultData.push({ type: "info", title: "操作完成, 请注意检查!" });
+		return {
+			status: Status,
+			result_data: resultData
+		};
+	}
+
+}
+catch (e) {
+	Status = 'error';
+	console.log("====================================>error");
+	console.log(_.toString(e));
+    resultData.push({type: "error", title: "脚本执行出错!", detail: [{desc: _.toString(e)}]});
+    return {status: Status, result_data: resultData};
+}
+
+function delSameJob(props){
+    var job = props.job
+    var delSame = props.delSame
+    if(GEN.isJobExists({job:job})){   
+        if(/^yes$/ig.test(delSame)){
+            if(GEN.isJobOpen({job:job})){ GEN.closeJob({job:job}) }
+            GEN.deleteJob({job:job})
+        } else {
+            return "job "+ job+ " exist"
+        }
+    }
+}
+function analyJobFiles(props){
+	var files = props.jobFiles;
+	var config = props.config;
+	var job = props.job;
+	var custCfg = props.custCfg;
+	var rules = custCfg.rules;
+	var paramsFile = files.filter(function(file){return /param/ig.test(file.baseName)})
+	var tmp_hash = {}
+	paramsFile.forEach(function(file){
+		tmp_hash[file.baseName] = (function(){
+			var tmparr = fs.readFile(file.path).split("\n")
+			var tmp = {}
+			tmparr.map(function(v){
+				var arr = v.split(/\b\s+\b/)
+				tmp[arr[0].replace(/-/ig,"_")] = arr[1]
+			})
+			return tmp
+		})() 
+	})
+	
+	var fileInfo = files.reduce(function(a,file){
+		try {
+			rules.forEach(function(item){
+				if(item.valid({file:file, job:job})){
+					var format = config.formats[item.format]
+					var format1;
+					if(item.format_params){
+						format1 = item.format_params({params:tmp_hash})
+					}
+					if(format1){
+						throw {file:file,type:item.type,format:format1}
+					}else{
+						throw {file:file,type:item.type,format:format}
+					}
+				}
+			})
+		} catch (info) { 
+			a.push(info)
+		}
+		return a
+	},[])
+	var odbfiles = fileInfo.filter(function(item){return /odb/ig.test(item.type)})
+	if(odbfiles.length == 0){
+		return {
+			type: "Gerber",
+			data: fileInfo
+		}
+	} else {
+		return {
+			type: "ODB",
+			data: odbfiles
+		}
+	}
+}
+function importJob(props,delSameJob){
+    var name = props.name
+    if (GEN.isJobExists({ job: name })) {
+        if (/^yes$/ig.test(delSameJob)) {
+            if(GEN.isJobOpen({ job: name })){ GEN.closeJob({ job: name }); }
+            GEN.deleteJob({ job: name });
+        }
+        else {
+            return "job "+name+" exist";
+        }
+    }
+    GEN.importJob(props);
+}
+
+
diff --git a/test/input_tmp.js b/test/input_tmp.js
new file mode 100644
index 0000000000000000000000000000000000000000..c80135df82465c094b4ec2923eb008128b46044d
--- /dev/null
+++ b/test/input_tmp.js
@@ -0,0 +1,303 @@
+
+
+/*
+NAME: 
+DESCRIPTION: ;
+PARAMETER:
+    [
+		{
+			name : 'path',
+			title : '资料路径',
+			type : 'LineEdit',
+			property : {tool_tip : '存放所有料号的文件夹路径,不需要进入到料号文件夹内'},
+		},
+		{
+			name : 'customer',
+			title : '客户配置',
+			type : 'LineEdit',
+			property : {tool_tip : '客户配置'},
+		},
+		{
+			name : 'config_path',
+			title : '配置地址',
+			type : 'LineEdit',
+			property : {tool_tip : '配置的路径'},
+		}
+	]
+	
+ VERSION_HISTORY:
+	V1.01 2020-04-15 Scott Sun
+	    1.新版本
+		
+ HELP:
+ 	<html><body bgcolor="#DDECFE">
+		<font size="3" color="#003DB2"><p>功能简介</p></font>
+		<p> 客户数据导入 </p>
+		<br>
+		<font size="3" color="#003DB2"><p>参数配置</p></font>
+		<p> 料号 和 客户配置 </p>
+		<br>
+		<font size="3" color="#003DB2"><p>注意事项</p></font>
+		<p> æ—  </p>
+		<br>
+	</body></html>	
+*/
+//////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////
+// 引入模块 包
+console.log("=============================================>input_start");
+console.log("=============================================>input_start");
+console.log("=============================================>input_start");
+console.log("=============================================>input_start");
+var $ = require('topcam.scriptfunc').argv();
+var fs = require('fs');
+var _ = require('lodash');
+var database = require("topsin.database");
+database.addConnection($.conf.database_conf, "DFM");
+var QDfm = database.query("DFM");
+if ($.conf.product_type == "aimdfm") {
+	QDfm.updateRow({
+		table: "pdm_aimdfm_task",
+		data: {
+			current_process_title: $.process_title
+		},
+		where: { id: $.task_id }
+	});
+}
+var GEN = $.gen;
+var Job = $.job_name;
+var db = $.db;
+var Status = 'ok';
+var resultData = [];
+var PAR = {};
+if ($.hasOwnProperty('script_parameter')){
+	PAR = JSON.parse($.script_parameter);
+}
+if (!$.hasOwnProperty('config_path')){
+	PAR.config_path = "cam/input_data"
+}
+try {
+	var par = PAR;
+	
+	console.log(par);
+	
+	if(!par.hasOwnProperty("customer")){throw "未填写配置"};
+	par.customer = par.customer[0].toUpperCase()+par.customer.slice(1).toLowerCase()
+	var cfg = db.query("",function(q){
+		return q.selectValue({
+			table:'pub_conf',
+			field:'text_data',
+			where:{path : par.config_path}
+		})
+	});
+
+	if (!cfg || cfg == ""){throw "cfg can not find"}  
+	
+	var config = eval(cfg);
+	if(!config.hasOwnProperty("customer")){throw "config error"}
+	var job = Job;
+	if(_.isEmpty(job)) throw "没有传入料号名!";
+	job = job.toLowerCase()
+	// 如果genesis已经存在这个料号
+	err = delSameJob({job:job,delSame:config.delSameJob}); if(err){throw err};
+	var custCfg = config.customer[par.customer]
+	if(!custCfg){throw "config error"}
+	var step = custCfg.step.toLowerCase()
+	// 获取路径下文件信息
+	var path = par.path || custCfg.path
+	var pathInfo = fs.listDir(path, 1)
+	// 判断存不存在料号文件
+	var jobFile = pathInfo.filter(function(v){return v.baseName.toLowerCase() == job})
+	if(jobFile.length == 0){throw "job file is not exist"}
+	var jobFiles = []  // 记录要分析的文件
+	if (!jobFile[0].isDir) {
+		jobFiles.push(jobFile[0])
+	} else {
+		jobFiles = fs.listDir(jobFile[0].path)
+	}
+	// 分析料号文件 得到料号导入信息 导入类型
+	var jobInfo = analyJobFiles({jobFiles:jobFiles.filter(function(v){return v.isFile}),custCfg:custCfg,config:config,job:job })
+	if(jobInfo.data.length == 0){throw "file error"}
+	var importOk = false;  // 是否成功导入
+	if(/odb/ig.test(jobInfo.type)){  // odb导入
+		if(jobInfo.data.length == 1){  // 只分析到一个tgz文件 直接导入
+			var err = importJob({name:job,db:custCfg.db,path:jobInfo.data[0].file.path},config.delSameJob)
+			if(err){throw err}
+		} else {  // 多个tgz文件 说明需要合并
+			var mergeFiles = jobInfo.data.filter(function(item){
+				var err = importJob({name:item.file.baseName,db:custCfg.db,path:item.file.path},config.delSameJob)
+				if(err){throw err}
+				return /yes/ig.test(item.format.isMerge)
+			})
+			var arr_job = mergeFiles[0]
+			var arr_step;
+			var steplist = GEN.getStepList({job:arr_job.file.baseName})
+			if(steplist.indexOf(arr_job.format.arrStep) < 0){
+				arr_step = steplist[0]
+			}else{arr_step = arr_job.format.arrStep}
+			GEN.openJob({job:job});
+			GEN.openJob({job:arr_job.file.baseName});
+			GEN.copyStep({  // 合并
+				source_job:arr_job.file.baseName,
+				source_name:arr_step,
+				dest_job:job,
+				dest_name:arr_step,
+			});
+			GEN.closeJob({ job: arr_job.file.baseName });
+			GEN.deleteJob({ job: arr_job.file.baseName });  // 合并后 删除array的料号
+		}
+		importOk = true
+	}
+
+	if(/gerber/ig.test(jobInfo.type)){  // gerber导入
+		GEN.createJob({name:job,db:custCfg.db})
+		GEN.createStep({job:job,name:step})
+		var gerberInfo = jobInfo.data.map(function(item){
+			var gerberCfg = JSON.parse(JSON.stringify(item.format));
+			var file = item.file
+			gerberCfg.layer = file.name.toLowerCase()
+			gerberCfg.path = file.path
+			gerberCfg.format = item.type
+			gerberCfg.job = job
+			gerberCfg.step = step
+			return gerberCfg
+		})
+		GEN.COM("input_manual_reset")
+		gerberInfo.forEach(function(v){
+			GEN.COM("input_manual_set",v)
+		})
+		GEN.COM("input_manual")
+		importOk = true
+	}
+
+	if(!importOk){throw "import error"}
+
+	// 导入结束
+	var matrix = GEN.getMatrix({job:job}); 
+	comp = Object.keys(matrix).filter(function(v){  // 如果有comp层 删除
+		return /^comp_\+_/ig.test(v)
+	})
+	if (comp.length > 0){
+		var tmp = GEN.getStepList({job:job})
+		GEN.openStep({job:job,name:tmp[0]})
+		GEN.COM("delete_comp")
+		GEN.closeStep()
+	}
+
+	GEN.checkInout({job:job,mode:"out"})  // 结束保存料号 关闭料号
+	GEN.saveJob({ job: job });
+	GEN.checkInout({job:job,mode:"in"})
+	GEN.closeJob({job:job})
+
+	QDfm.updateRow({
+		table: "pdm_aimdfm_task",
+		data: {
+			progress: 33.33
+		},
+		where: { id: $.task_id }
+	});
+	if (GEN.hasError()) {
+		Status = 'error';
+		resultData.push({ type: "error", title: "GEN错误!", detail: [{ desc: _.join(GEN.STATUS, "\n") }] });
+		return {
+			status: Status,
+			result_data: resultData
+		};
+	} else {
+		resultData.push({ type: "info", title: "操作完成, 请注意检查!" });
+		return {
+			status: Status,
+			result_data: resultData
+		};
+	}
+
+}
+catch (e) {
+	Status = 'error';
+	console.log("====================================>error");
+	console.log(_.toString(e));
+    resultData.push({type: "error", title: "脚本执行出错!", detail: [{desc: _.toString(e)}]});
+    return {status: Status, result_data: resultData};
+}
+
+function delSameJob(props){
+    var job = props.job
+    var delSame = props.delSame
+    if(GEN.isJobExists({job:job})){   
+        if(/^yes$/ig.test(delSame)){
+            if(GEN.isJobOpen({job:job})){ GEN.closeJob({job:job}) }
+            GEN.deleteJob({job:job})
+        } else {
+            return "job "+ job+ " exist"
+        }
+    }
+}
+function analyJobFiles(props){
+	var files = props.jobFiles;
+	var config = props.config;
+	var job = props.job;
+	var custCfg = props.custCfg;
+	var rules = custCfg.rules;
+	var paramsFile = files.filter(function(file){return /param/ig.test(file.baseName)})
+	var tmp_hash = {}
+	paramsFile.forEach(function(file){
+		tmp_hash[file.baseName] = (function(){
+			var tmparr = fs.readFile(file.path).split("\n")
+			var tmp = {}
+			tmparr.map(function(v){
+				var arr = v.split(/\b\s+\b/)
+				tmp[arr[0].replace(/-/ig,"_")] = arr[1]
+			})
+			return tmp
+		})() 
+	})
+	
+	var fileInfo = files.reduce(function(a,file){
+		try {
+			rules.forEach(function(item){
+				if(item.valid({file:file, job:job})){
+					var format = config.formats[item.format]
+					var format1;
+					if(item.format_params){
+						format1 = item.format_params({params:tmp_hash})
+					}
+					if(format1){
+						throw {file:file,type:item.type,format:format1}
+					}else{
+						throw {file:file,type:item.type,format:format}
+					}
+				}
+			})
+		} catch (info) { 
+			a.push(info)
+		}
+		return a
+	},[])
+	var odbfiles = fileInfo.filter(function(item){return /odb/ig.test(item.type)})
+	if(odbfiles.length == 0){
+		return {
+			type: "Gerber",
+			data: fileInfo
+		}
+	} else {
+		return {
+			type: "ODB",
+			data: odbfiles
+		}
+	}
+}
+function importJob(props,delSameJob){
+    var name = props.name
+    if (GEN.isJobExists({ job: name })) {
+        if (/^yes$/ig.test(delSameJob)) {
+            if(GEN.isJobOpen({ job: name })){ GEN.closeJob({ job: name }); }
+            GEN.deleteJob({ job: name });
+        }
+        else {
+            return "job "+name+" exist";
+        }
+    }
+    GEN.importJob(props);
+}
+
+
diff --git a/test/mytest.js b/test/mytest.js
index 6760d8f46400a3f1beb6291826b680709df74cb8..bb381b31ac2368789f9ed50c78cedd177f9d5b84 100644
--- a/test/mytest.js
+++ b/test/mytest.js
@@ -202,3 +202,313 @@ function importJob(props,delSameJob){
 }
 
 
+
+
+
+
+
+
+
+
+
+/*
+NAME: 
+DESCRIPTION: ;
+PARAMETER:
+    [
+		{
+			name : 'path',
+			title : '资料路径',
+			type : 'LineEdit',
+			property : {tool_tip : '存放所有料号的文件夹路径,不需要进入到料号文件夹内'},
+		},
+		{
+			name : 'customer',
+			title : '客户配置',
+			type : 'LineEdit',
+			property : {tool_tip : '客户配置'},
+		},
+		{
+			name : 'config_path',
+			title : '配置地址',
+			type : 'LineEdit',
+			property : {tool_tip : '配置的路径'},
+		}
+	]
+	
+ VERSION_HISTORY:
+	V1.00 2020-04-15 Scott Sun
+	    1.新版本
+		
+ HELP:
+ 	<html><body bgcolor="#DDECFE">
+		<font size="3" color="#003DB2"><p>功能简介</p></font>
+		<p> 客户数据导入 </p>
+		<br>
+		<font size="3" color="#003DB2"><p>参数配置</p></font>
+		<p> 料号 和 客户配置 </p>
+		<br>
+		<font size="3" color="#003DB2"><p>注意事项</p></font>
+		<p> æ—  </p>
+		<br>
+	</body></html>	
+*/
+//////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////
+// 引入模块 包
+// console.log("=============================================>input_start");
+// console.log("=============================================>input_start");
+// console.log("=============================================>input_start");
+// console.log("=============================================>input_start");
+// var $ = require('topcam.scriptfunc').argv();
+// var fs = require('fs');
+// var _ = require('lodash');
+// var database = require("topsin.database");
+// database.addConnection($.conf.database_conf, "DFM");
+// var QDfm = database.query("DFM");
+// if ($.conf.product_type == "aimdfm") {
+// 	QDfm.updateRow({
+// 		table: "pdm_aimdfm_task",
+// 		data: {
+// 			current_process_title: $.process_title
+// 		},
+// 		where: { id: $.task_id }
+// 	});
+// }
+// var GEN = $.gen;
+// var Job = $.job_name;
+// var db = $.db
+// var Status = 'ok';
+// var resultData = [];
+// var PAR = {};
+// if ($.hasOwnProperty('script_parameter')){
+// 	PAR = JSON.parse($.script_parameter);
+// }
+// if (!$.hasOwnProperty('config_path')){
+// 	PAR.config_path = "cam/input_data"
+// }
+// try {
+// 	var par = PAR;
+	
+// 	console.log(par);
+	
+// 	if(!par.hasOwnProperty("customer")){throw "未填写配置"}
+// 	var cfg = db.query("",function(q){
+// 		return q.selectValue({
+// 			table:'pub_conf',
+// 			field:'text_data',
+// 			where:{path : par.config_path}
+// 		})
+// 	})
+
+// 	if (!cfg || cfg == ""){throw "cfg can not find"}  
+	
+// 	var config = eval(cfg)
+// 	if(!config.hasOwnProperty("customer")){throw "config error"}
+// 	var job = Job;
+// 	if(_.isEmpty(job)) throw "没有传入料号名!";
+// 	job = job.toLowerCase()
+// 	console.log(typeof config)
+// 	console.log("=================Job:"+job)
+// 	throw "tmp"
+// 	// 如果genesis已经存在这个料号
+// 	err = delSameJob({job:job,delSame:config.delSameJob}); if(err){throw err};
+// 	var custCfg = config.customer[par.customer]
+// 	if(!custCfg){throw "config error"}
+// 	var step = custCfg.step.toLowerCase()
+// 	// 获取路径下文件信息
+// 	var path = par.path || custCfg.path
+// 	var pathInfo = fs.listDir(path, 1)
+// 	// 判断存不存在料号文件
+// 	var jobFile = pathInfo.filter(function(v){return v.baseName.toLowerCase() == job})
+// 	if(jobFile.length == 0){throw "job file is not exist"}
+// 	var jobFiles = []  // 记录要分析的文件
+// 	if (!jobFile[0].isDir) {
+// 		jobFiles.push(jobFile[0])
+// 	} else {
+// 		jobFiles = fs.listDir(jobFile[0].path)
+// 	}
+// 	// 分析料号文件 得到料号导入信息 导入类型
+// 	var jobInfo = analyJobFiles({jobFiles:jobFiles.filter(function(v){return v.isFile}),custCfg:custCfg,config:config,job:job })
+// 	if(jobInfo.data.length == 0){throw "file error"}
+// 	var importOk = false;  // 是否成功导入
+// 	if(/odb/ig.test(jobInfo.type)){  // odb导入
+// 		if(jobInfo.data.length == 1){  // 只分析到一个tgz文件 直接导入
+// 			var err = importJob({name:job,db:custCfg.db,path:jobInfo.data[0].file.path},config.delSameJob)
+// 			if(err){throw err}
+// 		} else {  // 多个tgz文件 说明需要合并
+// 			var mergeFiles = jobInfo.data.filter(function(item){
+// 				var err = importJob({name:item.file.baseName,db:custCfg.db,path:item.file.path},config.delSameJob)
+// 				if(err){throw err}
+// 				return /yes/ig.test(item.format.isMerge)
+// 			})
+// 			var arr_job = mergeFiles[0]
+// 			var arr_step;
+// 			var steplist = GEN.getStepList({job:arr_job.file.baseName})
+// 			if(steplist.indexOf(arr_job.format.arrStep) < 0){
+// 				arr_step = steplist[0]
+// 			}else{arr_step = arr_job.format.arrStep}
+// 			GEN.openJob({job:job});
+// 			GEN.openJob({job:arr_job.file.baseName});
+// 			GEN.copyStep({  // 合并
+// 				source_job:arr_job.file.baseName,
+// 				source_name:arr_step,
+// 				dest_job:job,
+// 				dest_name:arr_step,
+// 			});
+// 			GEN.closeJob({ job: arr_job.file.baseName });
+// 			GEN.deleteJob({ job: arr_job.file.baseName });  // 合并后 删除array的料号
+// 		}
+// 		importOk = true
+// 	}
+
+// 	if(/gerber/ig.test(jobInfo.type)){  // gerber导入
+// 		GEN.createJob({name:job,db:custCfg.db})
+// 		GEN.createStep({job:job,name:step})
+// 		var gerberInfo = jobInfo.data.map(function(item){
+// 			var gerberCfg = JSON.parse(JSON.stringify(item.format));
+// 			var file = item.file
+// 			gerberCfg.layer = file.name.toLowerCase()
+// 			gerberCfg.path = file.path
+// 			gerberCfg.format = item.type
+// 			gerberCfg.job = job
+// 			gerberCfg.step = step
+// 			return gerberCfg
+// 		})
+// 		GEN.COM("input_manual_reset")
+// 		gerberInfo.forEach(function(v){
+// 			GEN.COM("input_manual_set",v)
+// 		})
+// 		GEN.COM("input_manual")
+// 		importOk = true
+// 	}
+
+// 	if(!importOk){throw "import error"}
+
+// 	// 导入结束
+// 	var matrix = GEN.getMatrix({job:job}); 
+// 	comp = Object.keys(matrix).filter(function(v){  // 如果有comp层 删除
+// 		return /^comp_\+_/ig.test(v)
+// 	})
+// 	if (comp.length > 0){
+// 		var tmp = GEN.getStepList({job:job})
+// 		GEN.openStep({job:job,name:tmp[0]})
+// 		GEN.COM("delete_comp")
+// 		GEN.closeStep()
+// 	}
+
+// 	GEN.checkInout({job:job,mode:"out"})  // 结束保存料号 关闭料号
+// 	GEN.saveJob({ job: job });
+// 	GEN.checkInout({job:job,mode:"in"})
+// 	GEN.closeJob({job:job})
+
+// 	QDfm.updateRow({
+// 		table: "pdm_aimdfm_task",
+// 		data: {
+// 			progress: 33.33
+// 		},
+// 		where: { id: $.task_id }
+// 	});
+// 	if (GEN.hasError()) {
+// 		Status = 'error';
+// 		resultData.push({ type: "error", title: "GEN错误!", detail: [{ desc: _.join(GEN.STATUS, "\n") }] });
+// 		return {
+// 			status: Status,
+// 			result_data: resultData
+// 		};
+// 	} else {
+// 		resultData.push({ type: "info", title: "操作完成, 请注意检查!" });
+// 		return {
+// 			status: Status,
+// 			result_data: resultData
+// 		};
+// 	}
+
+// }
+// catch (e) {
+// 	Status = 'error';
+//     resultData.push({type: "error", title: "脚本执行出错!", detail: [{desc: _.toString(e)}]});
+//     return {status: Status, result_data: resultData};
+// }
+
+// function delSameJob(props){
+//     var job = props.job
+//     var delSame = props.delSame
+//     if(GEN.isJobExists({job:job})){   
+//         if(/^yes$/ig.test(delSame)){
+//             if(GEN.isJobOpen({job:job})){ GEN.closeJob({job:job}) }
+//             GEN.deleteJob({job:job})
+//         } else {
+//             return "job "+ job+ " exist"
+//         }
+//     }
+// }
+// function analyJobFiles(props){
+// 	var files = props.jobFiles;
+// 	var config = props.config;
+// 	var job = props.job;
+// 	var custCfg = props.custCfg;
+// 	var rules = custCfg.rules;
+// 	var paramsFile = files.filter(function(file){return /param/ig.test(file.baseName)})
+// 	var tmp_hash = {}
+// 	paramsFile.forEach(function(file){
+// 		tmp_hash[file.baseName] = (function(){
+// 			var tmparr = fs.readFile(file.path).split("\n")
+// 			var tmp = {}
+// 			tmparr.map(function(v){
+// 				var arr = v.split(/\b\s+\b/)
+// 				tmp[arr[0].replace(/-/ig,"_")] = arr[1]
+// 			})
+// 			return tmp
+// 		})() 
+// 	})
+	
+// 	var fileInfo = files.reduce(function(a,file){
+// 		try {
+// 			rules.forEach(function(item){
+// 				if(item.valid({file:file, job:job})){
+// 					var format = config.formats[item.format]
+// 					var format1;
+// 					if(item.format_params){
+// 						format1 = item.format_params({params:tmp_hash})
+// 					}
+// 					if(format1){
+// 						throw {file:file,type:item.type,format:format1}
+// 					}else{
+// 						throw {file:file,type:item.type,format:format}
+// 					}
+// 				}
+// 			})
+// 		} catch (info) { 
+// 			a.push(info)
+// 		}
+// 		return a
+// 	},[])
+// 	var odbfiles = fileInfo.filter(function(item){return /odb/ig.test(item.type)})
+// 	if(odbfiles.length == 0){
+// 		return {
+// 			type: "Gerber",
+// 			data: fileInfo
+// 		}
+// 	} else {
+// 		return {
+// 			type: "ODB",
+// 			data: odbfiles
+// 		}
+// 	}
+// }
+// function importJob(props,delSameJob){
+//     var name = props.name
+//     if (GEN.isJobExists({ job: name })) {
+//         if (/^yes$/ig.test(delSameJob)) {
+//             if(GEN.isJobOpen({ job: name })){ GEN.closeJob({ job: name }); }
+//             GEN.deleteJob({ job: name });
+//         }
+//         else {
+//             return "job "+name+" exist";
+//         }
+//     }
+//     GEN.importJob(props);
+// }
+
+
diff --git a/jtg js/JTG_NET_set_drill_attribute_aim.js b/test/test.js
similarity index 76%
rename from jtg js/JTG_NET_set_drill_attribute_aim.js
rename to test/test.js
index 61ef8931d59971cf8837a43e000089434f2ea7e0..0613920c45d88b89870d9ee272d8e41f49aed5e0 100644
--- a/jtg js/JTG_NET_set_drill_attribute_aim.js	
+++ b/test/test.js
@@ -4,24 +4,30 @@ DESCRIPTION: ;
 PARAMETER:
     [
 		{
-			name : 'customer',
-			title : '客户配置',
-			type : 'LineEdit',
-			property : {tool_tip : '客户配置'},
-		}
+            name : 'auto_save',
+			title : '自动保存',
+            type : 'RadioBox',
+            property : {
+				item_list:[
+					{name:'yes',text:'YES'},
+					{name:'no',text:'NO'},
+				],
+				tool_tip:'是否自动保存料号开关'
+			}
+        }
 	]
 	
  VERSION_HISTORY:
-	V1.00 2020-04-15 Scott Sun
+	V1.00 2020-04-17 Scott Sun
 	    1.新版本
 		
  HELP:
  	<html><body bgcolor="#DDECFE">
 		<font size="3" color="#003DB2"><p>功能简介</p></font>
-		<p> 数据标准化 </p>
+		<p> 测试 </p>
 		<br>
 		<font size="3" color="#003DB2"><p>参数配置</p></font>
-		<p> 客户配置 </p>
+		<p> 测试 </p>
 		<br>
 		<font size="3" color="#003DB2"><p>注意事项</p></font>
 		<p> æ—  </p>
@@ -30,6 +36,10 @@ PARAMETER:
 */
 //////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////
+console.log("==================================test");
+console.log("==================================test");
+console.log("==================================test");
+
 // 引入模块 包
 var $ = require('topcam.scriptfunc').argv();
 var fs = require('fs');
@@ -47,6 +57,7 @@ if ($.conf.product_type == "aimdfm") {
 	});
 }
 var GEN = $.gen;
+var fs = require("fs");
 var Job = $.job_name;
 var db = $.db
 var Status = 'ok';
@@ -58,6 +69,14 @@ if ($.hasOwnProperty('script_parameter')){
 
 try {
     var par = PAR;
+    console.log(par)
+
+
+
+
+
+
+
 
 
     QDfm.updateRow({
@@ -85,4 +104,4 @@ try {
     Status = 'error';
     resultData.push({type: "error", title: "脚本执行出错!", detail: [{desc: _.toString(e)}]});
     return {status: Status, result_data: resultData};
-}
\ No newline at end of file
+}
diff --git a/test/test2.js b/test/test2.js
new file mode 100644
index 0000000000000000000000000000000000000000..a1f9cfc449c5900cad2275bc16b4efca4ce26130
--- /dev/null
+++ b/test/test2.js
@@ -0,0 +1,405 @@
+/*
+NAME: 
+DESCRIPTION: ;
+PARAMETER:
+    [
+		{
+			name : 'customer',
+			title : '客户配置',
+			type : 'LineEdit',
+			property : {tool_tip : '客户配置'},
+        },
+        {
+			name : 'config_path',
+			title : '配置地址',
+			type : 'LineEdit',
+			property : {tool_tip : '配置的路径'},
+		}
+	]
+	
+ VERSION_HISTORY:
+	V1.00 2020-04-16 Scott Sun
+	    1.新版本
+		
+ HELP:
+ 	<html><body bgcolor="#DDECFE">
+		<font size="3" color="#003DB2"><p>功能简介</p></font>
+		<p> 数据标准化 </p>
+		<br>
+		<font size="3" color="#003DB2"><p>参数配置</p></font>
+		<p> 客户配置 </p>
+		<br>
+		<font size="3" color="#003DB2"><p>注意事项</p></font>
+		<p> æ—  </p>
+		<br>
+	</body></html>	
+*/
+//////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////
+// 引入模块 包
+console.log("==============================================>test2_format")
+var $ = require('topcam.scriptfunc').argv();
+var fs = require('fs');
+var _ = require('lodash');
+var database = require("topsin.database");
+database.addConnection($.conf.database_conf, "DFM");
+var QDfm = database.query("DFM");
+if ($.conf.product_type == "aimdfm") {
+	QDfm.updateRow({
+		table: "pdm_aimdfm_task",
+		data: {
+			current_process_title: $.process_title
+		},
+		where: { id: $.task_id }
+	});
+}
+var GEN = $.gen;
+var Job = $.job_name;
+var db = $.db
+var Status = 'ok';
+var resultData = [];
+var PAR = {};
+if ($.hasOwnProperty('script_parameter')){
+	PAR = JSON.parse($.script_parameter);
+}
+if (!$.hasOwnProperty('config_path')){
+	PAR.config_path = "cam/input_data"
+}
+try {
+    var mode = "use" // develop
+    var par = PAR;
+	if(!par.hasOwnProperty("customer")){throw "未填写配置"}
+    par.customer = par.customer[0].toUpperCase()+par.customer.slice(1).toLowerCase()
+	var cfg = db.query("",function(q){
+		return q.selectValue({
+			table:'pub_conf',
+			field:'text_data',
+			where:{path : par.config_path}
+		})
+	});
+
+	var config = eval(cfg)
+	var job = Job;
+    if(_.isEmpty(job)) throw "没有传入料号名!";
+    job = job.toLowerCase()
+    
+	var custCfg = config.customer[par.customer]	// 获取客户配置
+	if(!custCfg){throw "config error"}
+	var step = custCfg.step.toLowerCase()	// 获取pcs_step
+	// 料号验证
+    if(!GEN.isJobExists({job:job})){ throw "job "+ job+ " is not exist" }
+    if(!GEN.isJobOpen({job:job})){GEN.openJob({job:job})}
+    if(GEN.checkInout({job:job,mode:"test"}) != 0 && mode != "develop"){ throw "the job check" }
+	GEN.checkInout({job:job,mode:"out"});
+
+	// if(config.hasOwnProperty("merge_drill")){ // todo
+	// 	mergeDrill({job:job})
+	// }
+	// start    martix_tl_name
+	var matrix = GEN.getMatrix({job:job})
+	var tl_name_matrix = tlNameMatrix({matrix:matrix,tl_name:custCfg.tl_name})   // 给matrix信息添加tl_name
+
+	var format_cfg = config.data_format   // 拿到数据标准化配置
+
+	// 排序和设属性
+	var ret = sortLayer({job:job, rule:format_cfg, matrix:tl_name_matrix})
+	if(ret.err){throw err}
+	var after_sort_matrix = ret.sortNames
+	// 设置钻孔
+	err = setDrill({job:job, matrix:after_sort_matrix})
+	if(err){throw err}
+	
+	// 改名
+	err = reName({job:job, matrix:after_sort_matrix, cfg:format_cfg})
+	if(err){throw err}
+    // end
+    GEN.checkInout({job:job,mode:"out"})  // 结束保存料号 关闭料号
+	GEN.saveJob({ job: job });
+	GEN.checkInout({job:job,mode:"in"})
+	GEN.closeJob({job:job})
+
+    QDfm.updateRow({
+		table: "pdm_aimdfm_task",
+		data: {
+			progress: 33.33
+		},
+		where: { id: $.task_id }
+	});
+	if (GEN.hasError()) {
+		Status = 'error';
+		resultData.push({ type: "error", title: "GEN错误!", detail: [{ desc: _.join(GEN.STATUS, "\n") }] });
+		return {
+			status: Status,
+			result_data: resultData
+		};
+	} else {
+		resultData.push({ type: "info", title: "操作完成, 请注意检查!" });
+		return {
+			status: Status,
+			result_data: resultData
+		};
+	}
+}
+catch (e) {
+	Status = 'error';
+    resultData.push({type: "error", title: "脚本执行出错!", detail: [{desc: _.toString(e)}]});
+    return {status: Status, result_data: resultData};
+}
+
+function tlNameMatrix(props){  // 设置标准名
+	var matrix = props.matrix
+	var tlname_rules = []
+	props.tl_name.forEach(function(item){
+		if(typeof item.orig_name == "string"){
+			tlname_rules.push(item)
+		} else {
+			item.orig_name.forEach(function(name2){
+				tlname_rules.push({
+					orig_name: name2,
+					tl_name: item.tl_name
+				})
+			})
+		}
+	})
+	var res = Object.keys(matrix).map(function(key){  // 将matrix信息添加tl_name 如果没有tl_name 就返回原信息
+		var val = matrix[key]
+		if(val.hasOwnProperty("tl_name")){delete val.tl_name}
+		var tlRule = tlname_rules.filter(function(rule){
+			if(rule.orig_name === key){return true}
+			var reg = new RegExp(rule.orig_name,"ig")
+			return reg.test(key)
+		})
+		if(tlRule.length == 0){return val}
+		for(var i=0;i<tlRule.length;i++){
+			if(tlRule[i].orig_name === key){return _.assign(val,{tl_name:tlRule[0].tl_name})}
+		}
+		var reg = new RegExp(tlRule[0].orig_name,"ig")
+		var tmp = reg.exec(key)
+		if(tmp && tmp.length){
+			var replaceArr = tmp.slice(1)
+			var tl_name = tlRule[0].tl_name
+			var params = {}
+			for(var i = 0; i<replaceArr.length;i++){
+				params["$"+(i+1)] = replaceArr[i]
+			}
+			replaceArr.forEach(function(v,i){
+				tl_name = tl_name.replace("($"+(i+1)+")",v)
+			})
+			tl_name = replaceTlName(tl_name)
+			function replaceTlName(name){
+				var tmp = /(\([^)]*\))/ig.exec(name)
+				if(!tmp){ return name }
+				var param_arr = tmp[1].match(/\$\d+/ig)
+				var newname = tmp[1]
+				param_arr.forEach(function(v){
+					newname = newname.replace(new RegExp("\\"+v,"ig"), params[v])
+				})
+				newname = name.replace(tmp[1],eval(newname))
+				return replaceTlName(newname)
+			}
+			return _.assign(val,{tl_name:tl_name})
+		}else {
+			return _.assign(val,{tl_name:tlRule[0].tl_name})
+		}
+	})
+	return res
+}
+
+function sortLayer(props){  // 排序方法  {job:要排序的料号, rule: {要改名的规则}
+    var job = props.job
+	var matrix =  GEN.getMatrix({job:job})
+	var tl_matrix = props.matrix
+	var matrixName = Object.keys(matrix).sort(function(a,b){return matrix[a].row - matrix[b].row})
+    var matrixFirst = matrixName[0];  // 记录matrix中第一位
+	var sortNames = [];
+    var miscName = tl_matrix.filter(function(value){  // 找出需要排序的名称列表
+		var flag = true;
+		if (!value.tl_name || value.tl_name == ""){return true}
+		var tl_name = value.tl_name
+        props.rule.forEach(function(item,i){
+            var evalReg = "/"+item.tl_name+"/ig.test(tl_name)";
+            if(tl_name == item.tl_name || eval(evalReg)){
+                flag = false;
+                if(tl_name === item.tl_name){
+                    var _item = JSON.parse(JSON.stringify(item));
+					_item.value = i;
+					_item.name = value.name
+					_item.rule = item.tl_name
+                    sortNames.push(_item);
+                } else {
+                    var _item = JSON.parse(JSON.stringify(item));
+                    _item.value = i;
+					var str = "/"+ item.tl_name +"/ig.exec(tl_name)"
+					_item.value2 = eval(str).pop() - 0;
+					_item.name = value.name
+					_item.rule = item.tl_name
+                    _item.tl_name = tl_name;
+                    sortNames.push(_item);
+                }
+            }
+        });
+        return flag;
+	}).map(function(v){return v.name})
+    miscName.forEach(function(n){ 
+        if(matrix[n].context == 'board'){
+            GEN.matrixLayerAttr({job:job,layer:n,context:'misc'}) 
+        }
+    })
+    sortNames = sortNames.sort(function(a,b){
+        return a.value - b.value || a.value2 - b.value2
+	})
+	// 排序
+    if(sortNames.length){
+        if(sortNames[0].name !== matrixFirst) {  // 如果第一位和matrix中第一位不同,先把第一位插入到最前面
+            GEN.matrixMoveRow({ job:job,layer:sortNames[0].name,before:matrixFirst })
+        }
+        sortNames.forEach(function(v,i,arr){
+            if(i !== 0){
+                GEN.matrixMoveRow({ job:job,layer:v.name,after:arr[i-1].name })             
+            }
+            GEN.matrixLayerAttr(_.assign({job:job,layer:v.name},v.attr));
+        })
+	}
+	return {
+		sortNames:sortNames
+	}
+}
+
+function setDrill(props){   // 设置钻孔
+    var job = props.job
+	var matrix = props.matrix
+	
+    // 获取所有的钻孔层
+    var drillLayer =matrix.filter(function(v){
+        return (v.attr.type == "drill" || v.attr.type == "rout") && v.attr.context == "board"
+    })
+    // 获取所有single层
+    var signalLayer =matrix.filter(function(v){
+        return v.attr.type == "signal" && v.attr.context == "board"
+	})
+	var layerCount = GEN.getLayerCount({job:job})
+    // findSignal 根据传入的数字找到对应的signal层 如 1 => top ; 2 => layer_2 
+    function findSignal(num){
+        return signalLayer[Number(num-1)].name
+	}
+    function doDrill(drills){  // 分析钻孔层
+        return drills.map(function(v){
+            if(v.name == "drill" || v.name=="rout"){
+                return {start:findSignal(1), end:findSignal(layerCount), layer:v.name}
+            } else {
+                var tmp = /(\d+)-(\d+)/ig.exec(v.tl_name);
+                if(tmp){
+                    var start = findSignal(tmp[1]); 
+                    var end = findSignal(tmp[2]); 
+                    return {start:start, end:end, layer:v.name}
+                } else {
+                    return 0;
+                }
+            }
+        })
+    }
+	var drillSetList = doDrill(drillLayer);   // 分析得到钻孔设置结果
+	drillSetList = drillSetList.filter(function(v){return v!==0})
+    drillSetList.forEach(function(v){
+        GEN.matrixLayerDrill({job:job,layer:v.layer,start:v.start ,end:v.end})
+    })
+}
+
+function reName(props) { // 改名 par{job:要改名的料号, rule: {要改名的规则}
+    var job = props.job
+	var matrix = props.matrix
+	var cfg = props.cfg
+	matrix = matrix.filter(function(v){return v.name != v.new_name})
+	var rename_list = matrix.map(function(item){
+		var new_name;
+		var tl_name = item.tl_name
+		var rule = item.rule
+		if(rule === tl_name){
+			new_name = item.new_name
+		} else {
+			var reg = new RegExp(rule,"ig")
+			var tmp = reg.exec(tl_name)
+			if(!tmp){return undefined}
+			var replaceArr = tmp.slice(1)
+			new_name = item.new_name
+			var params = {}
+			for(var i = 0; i<replaceArr.length;i++){
+				params["$"+(i+1)] = replaceArr[i]
+			}
+			replaceArr.forEach(function(v,i){
+				tl_name = tl_name.replace("($"+(i+1)+")",v)
+			})
+			new_name = replaceTlName(new_name)
+			function replaceTlName(name){
+				var tmp = /(\([^)]*\))/ig.exec(name)
+				if(!tmp){ return name }
+				var param_arr = tmp[1].match(/\$\d+/ig)
+				var newname = tmp[1]
+				param_arr.forEach(function(v){
+					newname = newname.replace(new RegExp("\\"+v,"ig"), params[v])
+				})
+				newname = name.replace(tmp[1],eval(newname))
+				return replaceTlName(newname)
+			}
+		}
+		return {
+			orig_name: item.name,
+			new_name: new_name
+		}
+	})
+	rename_list = rename_list.filter(function(v){
+		var flag = true
+		if(!v){flag = false}
+		if(!v.orig_name || !v.new_name ){flag = false}
+		return flag
+	})
+	rename_list.forEach(function(v){
+        if(v.orig_name !== v.new_name){
+            GEN.renameLayer({job:job,layer:v.orig_name,new_name:v.new_name})
+        }
+    });
+}
+
+function mergeDrill(props){ // 合并钻孔
+    var newdrills = []
+    var job = props.job;
+    var step = GEN.getStepList({job:job})[0];
+    var maxDrill = {name:"",value:0};
+    function getDrl(str){
+        var num = /(\d+)-(\d+)\.drl/ig.exec(str);  // 匹配出 num-num
+        var tmp = [];
+        for(var i = Number(num[1]);i<num[2];i++){
+            if(i == 1){
+                maxDrill = Number(num[2]) >  maxDrill.value? {name:str,value:Number(num[2])} : maxDrill;
+            }
+            tmp.push("L"+i+"-"+(i+1));
+        }
+        return tmp;
+    } 
+    var matrix = GEN.getMatrix({job:job});
+    GEN.openStep({job : job,name:step});
+    for(var key in matrix){
+        var val = matrix[key];
+        if(val.layer_type == "drill" && /(\d+)-(\d+)\.drl/ig.test(val.name)){
+            var mergeTo = getDrl(val.name) // 要合并到的地方
+            mergeTo.forEach(function(layerName){
+                if(GEN.isLayerExists({job : job ,layer:layerName.toLowerCase()}) && newdrills.indexOf(layerName.toLowerCase()) < 0){
+                    GEN.deleteLayer({job:job, layer:layerName.toLowerCase()})
+                }
+                if(!GEN.isLayerExists({job : job ,layer:layerName.toLowerCase()})){
+                    GEN.createLayer({job:job,layer:layerName.toLowerCase(),conext:'board',type:val.layer_type});
+                    newdrills.push(layerName.toLowerCase())
+                }
+                GEN.workLayer({name:layerName.toLowerCase(),display_number:1,clear_before:'yes'});
+                GEN.copyLayer({source_job:job ,mode:'append',source_step:step,source_layer:val.name,dest_layer:layerName.toLowerCase()});
+            })
+        }
+    }
+    GEN.createLayer({job:job,layer:"b1-"+maxDrill.value,conext:'board',type:'drill'});
+    GEN.workLayer({name:"b1-"+maxDrill.value,display_number:1,clear_before:'yes'});
+    GEN.copyLayer({source_job:job ,mode:'append',source_step:step,source_layer:maxDrill.name,dest_layer:"b1-"+maxDrill.value});
+	GEN.affectedLayer({affected:"no",mode:"all"});
+	GEN.clearLayers();
+    GEN.closeStep();
+}
+