iv-npm 1.1.1 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/packages/shared/dist/utils/index.d.ts +6 -2
- package/packages/shared/dist/utils/index.mjs +2 -0
- package/packages/ui/dist/index.cjs.js +36 -27
- package/packages/ui/dist/index.esm.js +36 -27
- package/packages/ui/dist/index.umd.js +36 -27
- package/packages/ui/dist/index.umd.js.map +1 -1
package/package.json
CHANGED
|
@@ -21,7 +21,11 @@ declare function findTree<T extends {
|
|
|
21
21
|
/**
|
|
22
22
|
* 检查对象是否为普通对象(使用“{}”或“new Object”创建)
|
|
23
23
|
* */
|
|
24
|
-
declare function isPlainObject(obj: object): boolean;
|
|
24
|
+
declare function isPlainObject(obj: object): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* 是否是一个对象
|
|
27
|
+
* */
|
|
28
|
+
declare const isObject: (val: unknown) => val is Record<any, any>;
|
|
25
29
|
|
|
26
30
|
declare const assign: {
|
|
27
31
|
<T extends {}, U>(target: T, source: U): T & U;
|
|
@@ -30,4 +34,4 @@ declare const assign: {
|
|
|
30
34
|
(target: object, ...sources: any[]): any;
|
|
31
35
|
};
|
|
32
36
|
|
|
33
|
-
export { arrToTree, assign, findTree, isPlainObject, tranListToTreeData };
|
|
37
|
+
export { arrToTree, assign, findTree, isObject, isPlainObject, tranListToTreeData };
|
|
@@ -58,6 +58,7 @@ function isPlainObject(obj) {
|
|
|
58
58
|
Ctor = {}.hasOwnProperty.call(proto, "constructor") && proto.constructor;
|
|
59
59
|
return typeof Ctor === "function" && {}.hasOwnProperty.toString.call(Ctor) === {}.hasOwnProperty.toString.call(Object);
|
|
60
60
|
}
|
|
61
|
+
var isObject = (val) => val !== null && typeof val === "object";
|
|
61
62
|
|
|
62
63
|
// utils/obj/cache.ts
|
|
63
64
|
var assign = Object.assign;
|
|
@@ -65,6 +66,7 @@ export {
|
|
|
65
66
|
arrToTree,
|
|
66
67
|
assign,
|
|
67
68
|
findTree,
|
|
69
|
+
isObject,
|
|
68
70
|
isPlainObject,
|
|
69
71
|
tranListToTreeData
|
|
70
72
|
};
|
|
@@ -453,6 +453,16 @@ function _regeneratorRuntime() {
|
|
|
453
453
|
}, exports;
|
|
454
454
|
}
|
|
455
455
|
|
|
456
|
+
function _typeof(obj) {
|
|
457
|
+
"@babel/helpers - typeof";
|
|
458
|
+
|
|
459
|
+
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {
|
|
460
|
+
return typeof obj;
|
|
461
|
+
} : function (obj) {
|
|
462
|
+
return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
|
|
463
|
+
}, _typeof(obj);
|
|
464
|
+
}
|
|
465
|
+
|
|
456
466
|
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
|
457
467
|
try {
|
|
458
468
|
var info = gen[key](arg);
|
|
@@ -504,11 +514,31 @@ function _defineProperty(obj, key, value) {
|
|
|
504
514
|
return obj;
|
|
505
515
|
}
|
|
506
516
|
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
517
|
+
function _loadChildren(obj, list) {
|
|
518
|
+
var arr = list.filter(function (x) {
|
|
519
|
+
return x.parentId == obj.id;
|
|
520
|
+
});
|
|
521
|
+
if (!arr.length) return;
|
|
522
|
+
obj.children = arr;
|
|
523
|
+
obj.children.forEach(function (x) {
|
|
524
|
+
_loadChildren(x, list);
|
|
525
|
+
});
|
|
526
|
+
return obj;
|
|
527
|
+
}
|
|
528
|
+
function tranListToTreeData(list) {
|
|
529
|
+
var results = list.filter(function (x) {
|
|
530
|
+
return x.parentId == null;
|
|
531
|
+
});
|
|
532
|
+
results.forEach(function (x) {
|
|
533
|
+
return _loadChildren(x, list);
|
|
534
|
+
});
|
|
535
|
+
return results;
|
|
536
|
+
}
|
|
537
|
+
var isObject = function isObject(val) {
|
|
538
|
+
return val !== null && _typeof(val) === "object";
|
|
539
|
+
};
|
|
540
|
+
var assign = Object.assign;
|
|
541
|
+
|
|
512
542
|
var BASE_URL = "https://basis.nacho.cn";
|
|
513
543
|
var DEFIND_OPTION = {
|
|
514
544
|
headers: {
|
|
@@ -549,6 +579,7 @@ var formatHTTP = function formatHTTP(fetch) {
|
|
|
549
579
|
});
|
|
550
580
|
};
|
|
551
581
|
var formatUrl = function formatUrl(base, api, params) {
|
|
582
|
+
if (!isObject(params)) return base + api;
|
|
552
583
|
if (Object.keys(params).length === 0) return base + api;
|
|
553
584
|
var urlTemparr = [];
|
|
554
585
|
|
|
@@ -559,28 +590,6 @@ var formatUrl = function formatUrl(base, api, params) {
|
|
|
559
590
|
return base + api + "?" + urlTemparr.join("&");
|
|
560
591
|
};
|
|
561
592
|
|
|
562
|
-
function _loadChildren(obj, list) {
|
|
563
|
-
var arr = list.filter(function (x) {
|
|
564
|
-
return x.parentId == obj.id;
|
|
565
|
-
});
|
|
566
|
-
if (!arr.length) return;
|
|
567
|
-
obj.children = arr;
|
|
568
|
-
obj.children.forEach(function (x) {
|
|
569
|
-
_loadChildren(x, list);
|
|
570
|
-
});
|
|
571
|
-
return obj;
|
|
572
|
-
}
|
|
573
|
-
function tranListToTreeData(list) {
|
|
574
|
-
var results = list.filter(function (x) {
|
|
575
|
-
return x.parentId == null;
|
|
576
|
-
});
|
|
577
|
-
results.forEach(function (x) {
|
|
578
|
-
return _loadChildren(x, list);
|
|
579
|
-
});
|
|
580
|
-
return results;
|
|
581
|
-
}
|
|
582
|
-
var assign = Object.assign;
|
|
583
|
-
|
|
584
593
|
var _hoisted_1$1 = /*#__PURE__*/vue.createElementVNode("div", {
|
|
585
594
|
"class": "text-[#0000006D] text-[14px]"
|
|
586
595
|
}, "所属组织", -1
|
|
@@ -449,6 +449,16 @@ function _regeneratorRuntime() {
|
|
|
449
449
|
}, exports;
|
|
450
450
|
}
|
|
451
451
|
|
|
452
|
+
function _typeof(obj) {
|
|
453
|
+
"@babel/helpers - typeof";
|
|
454
|
+
|
|
455
|
+
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {
|
|
456
|
+
return typeof obj;
|
|
457
|
+
} : function (obj) {
|
|
458
|
+
return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
|
|
459
|
+
}, _typeof(obj);
|
|
460
|
+
}
|
|
461
|
+
|
|
452
462
|
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
|
453
463
|
try {
|
|
454
464
|
var info = gen[key](arg);
|
|
@@ -500,11 +510,31 @@ function _defineProperty(obj, key, value) {
|
|
|
500
510
|
return obj;
|
|
501
511
|
}
|
|
502
512
|
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
513
|
+
function _loadChildren(obj, list) {
|
|
514
|
+
var arr = list.filter(function (x) {
|
|
515
|
+
return x.parentId == obj.id;
|
|
516
|
+
});
|
|
517
|
+
if (!arr.length) return;
|
|
518
|
+
obj.children = arr;
|
|
519
|
+
obj.children.forEach(function (x) {
|
|
520
|
+
_loadChildren(x, list);
|
|
521
|
+
});
|
|
522
|
+
return obj;
|
|
523
|
+
}
|
|
524
|
+
function tranListToTreeData(list) {
|
|
525
|
+
var results = list.filter(function (x) {
|
|
526
|
+
return x.parentId == null;
|
|
527
|
+
});
|
|
528
|
+
results.forEach(function (x) {
|
|
529
|
+
return _loadChildren(x, list);
|
|
530
|
+
});
|
|
531
|
+
return results;
|
|
532
|
+
}
|
|
533
|
+
var isObject = function isObject(val) {
|
|
534
|
+
return val !== null && _typeof(val) === "object";
|
|
535
|
+
};
|
|
536
|
+
var assign = Object.assign;
|
|
537
|
+
|
|
508
538
|
var BASE_URL = "https://basis.nacho.cn";
|
|
509
539
|
var DEFIND_OPTION = {
|
|
510
540
|
headers: {
|
|
@@ -545,6 +575,7 @@ var formatHTTP = function formatHTTP(fetch) {
|
|
|
545
575
|
});
|
|
546
576
|
};
|
|
547
577
|
var formatUrl = function formatUrl(base, api, params) {
|
|
578
|
+
if (!isObject(params)) return base + api;
|
|
548
579
|
if (Object.keys(params).length === 0) return base + api;
|
|
549
580
|
var urlTemparr = [];
|
|
550
581
|
|
|
@@ -555,28 +586,6 @@ var formatUrl = function formatUrl(base, api, params) {
|
|
|
555
586
|
return base + api + "?" + urlTemparr.join("&");
|
|
556
587
|
};
|
|
557
588
|
|
|
558
|
-
function _loadChildren(obj, list) {
|
|
559
|
-
var arr = list.filter(function (x) {
|
|
560
|
-
return x.parentId == obj.id;
|
|
561
|
-
});
|
|
562
|
-
if (!arr.length) return;
|
|
563
|
-
obj.children = arr;
|
|
564
|
-
obj.children.forEach(function (x) {
|
|
565
|
-
_loadChildren(x, list);
|
|
566
|
-
});
|
|
567
|
-
return obj;
|
|
568
|
-
}
|
|
569
|
-
function tranListToTreeData(list) {
|
|
570
|
-
var results = list.filter(function (x) {
|
|
571
|
-
return x.parentId == null;
|
|
572
|
-
});
|
|
573
|
-
results.forEach(function (x) {
|
|
574
|
-
return _loadChildren(x, list);
|
|
575
|
-
});
|
|
576
|
-
return results;
|
|
577
|
-
}
|
|
578
|
-
var assign = Object.assign;
|
|
579
|
-
|
|
580
589
|
var _hoisted_1$1 = /*#__PURE__*/createElementVNode("div", {
|
|
581
590
|
"class": "text-[#0000006D] text-[14px]"
|
|
582
591
|
}, "所属组织", -1
|
|
@@ -453,6 +453,16 @@
|
|
|
453
453
|
}, exports;
|
|
454
454
|
}
|
|
455
455
|
|
|
456
|
+
function _typeof(obj) {
|
|
457
|
+
"@babel/helpers - typeof";
|
|
458
|
+
|
|
459
|
+
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {
|
|
460
|
+
return typeof obj;
|
|
461
|
+
} : function (obj) {
|
|
462
|
+
return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
|
|
463
|
+
}, _typeof(obj);
|
|
464
|
+
}
|
|
465
|
+
|
|
456
466
|
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
|
457
467
|
try {
|
|
458
468
|
var info = gen[key](arg);
|
|
@@ -504,11 +514,31 @@
|
|
|
504
514
|
return obj;
|
|
505
515
|
}
|
|
506
516
|
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
517
|
+
function _loadChildren(obj, list) {
|
|
518
|
+
var arr = list.filter(function (x) {
|
|
519
|
+
return x.parentId == obj.id;
|
|
520
|
+
});
|
|
521
|
+
if (!arr.length) return;
|
|
522
|
+
obj.children = arr;
|
|
523
|
+
obj.children.forEach(function (x) {
|
|
524
|
+
_loadChildren(x, list);
|
|
525
|
+
});
|
|
526
|
+
return obj;
|
|
527
|
+
}
|
|
528
|
+
function tranListToTreeData(list) {
|
|
529
|
+
var results = list.filter(function (x) {
|
|
530
|
+
return x.parentId == null;
|
|
531
|
+
});
|
|
532
|
+
results.forEach(function (x) {
|
|
533
|
+
return _loadChildren(x, list);
|
|
534
|
+
});
|
|
535
|
+
return results;
|
|
536
|
+
}
|
|
537
|
+
var isObject = function isObject(val) {
|
|
538
|
+
return val !== null && _typeof(val) === "object";
|
|
539
|
+
};
|
|
540
|
+
var assign = Object.assign;
|
|
541
|
+
|
|
512
542
|
var BASE_URL = "https://basis.nacho.cn";
|
|
513
543
|
var DEFIND_OPTION = {
|
|
514
544
|
headers: {
|
|
@@ -549,6 +579,7 @@
|
|
|
549
579
|
});
|
|
550
580
|
};
|
|
551
581
|
var formatUrl = function formatUrl(base, api, params) {
|
|
582
|
+
if (!isObject(params)) return base + api;
|
|
552
583
|
if (Object.keys(params).length === 0) return base + api;
|
|
553
584
|
var urlTemparr = [];
|
|
554
585
|
|
|
@@ -559,28 +590,6 @@
|
|
|
559
590
|
return base + api + "?" + urlTemparr.join("&");
|
|
560
591
|
};
|
|
561
592
|
|
|
562
|
-
function _loadChildren(obj, list) {
|
|
563
|
-
var arr = list.filter(function (x) {
|
|
564
|
-
return x.parentId == obj.id;
|
|
565
|
-
});
|
|
566
|
-
if (!arr.length) return;
|
|
567
|
-
obj.children = arr;
|
|
568
|
-
obj.children.forEach(function (x) {
|
|
569
|
-
_loadChildren(x, list);
|
|
570
|
-
});
|
|
571
|
-
return obj;
|
|
572
|
-
}
|
|
573
|
-
function tranListToTreeData(list) {
|
|
574
|
-
var results = list.filter(function (x) {
|
|
575
|
-
return x.parentId == null;
|
|
576
|
-
});
|
|
577
|
-
results.forEach(function (x) {
|
|
578
|
-
return _loadChildren(x, list);
|
|
579
|
-
});
|
|
580
|
-
return results;
|
|
581
|
-
}
|
|
582
|
-
var assign = Object.assign;
|
|
583
|
-
|
|
584
593
|
var _hoisted_1$1 = /*#__PURE__*/vue.createElementVNode("div", {
|
|
585
594
|
"class": "text-[#0000006D] text-[14px]"
|
|
586
595
|
}, "所属组织", -1
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.umd.js","sources":["../../shared/dist/utils/index.mjs"],"sourcesContent":["// utils/arr/tree.ts\nfunction arrToTree(list, parentMark, childrenMark) {\n let result = [], temp;\n for (let i = 0; i < list.length; i++) {\n if (!list[i][parentMark]) {\n temp = list.filter(\n (item) => item[parentMark] === list[i][childrenMark]\n );\n if (temp.length > 0) {\n list[i].children = temp;\n }\n result.push(list[i]);\n }\n }\n return result;\n}\nfunction _loadChildren(obj, list) {\n const arr = list.filter((x) => x.parentId == obj.id);\n if (!arr.length)\n return;\n obj.children = arr;\n obj.children.forEach((x) => {\n _loadChildren(x, list);\n });\n return obj;\n}\nfunction tranListToTreeData(list) {\n const results = list.filter((x) => x.parentId == null);\n results.forEach((x) => _loadChildren(x, list));\n return results;\n}\nfunction findTree(id, list, idName) {\n let result;\n if (!list.length)\n return;\n const fn = (id2, list2, idName2) => {\n list2.find((_e) => {\n if (_e[idName2] === id2) {\n result = _e;\n } else if (_e.children && _e.children.length !== 0)\n return fn(id2, _e.children, idName2);\n });\n };\n fn(id, list, idName);\n return result;\n}\n\n// utils/obj/judge.ts\nfunction isPlainObject(obj) {\n let proto, Ctor;\n if (!obj || toString.call(obj) !== \"[object Object]\") {\n return false;\n }\n proto = Object.getPrototypeOf(obj);\n if (!proto) {\n return true;\n }\n Ctor = {}.hasOwnProperty.call(proto, \"constructor\") && proto.constructor;\n return typeof Ctor === \"function\" && {}.hasOwnProperty.toString.call(Ctor) === {}.hasOwnProperty.toString.call(Object);\n}\n\n// utils/obj/cache.ts\nvar assign = Object.assign;\nexport {\n arrToTree,\n assign,\n findTree,\n isPlainObject,\n tranListToTreeData\n};\n"],"names":["_loadChildren","obj","list","arr","filter","x","parentId","id","length","children","forEach","tranListToTreeData","results","assign","Object"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.umd.js","sources":["../../shared/dist/utils/index.mjs"],"sourcesContent":["// utils/arr/tree.ts\nfunction arrToTree(list, parentMark, childrenMark) {\n let result = [], temp;\n for (let i = 0; i < list.length; i++) {\n if (!list[i][parentMark]) {\n temp = list.filter(\n (item) => item[parentMark] === list[i][childrenMark]\n );\n if (temp.length > 0) {\n list[i].children = temp;\n }\n result.push(list[i]);\n }\n }\n return result;\n}\nfunction _loadChildren(obj, list) {\n const arr = list.filter((x) => x.parentId == obj.id);\n if (!arr.length)\n return;\n obj.children = arr;\n obj.children.forEach((x) => {\n _loadChildren(x, list);\n });\n return obj;\n}\nfunction tranListToTreeData(list) {\n const results = list.filter((x) => x.parentId == null);\n results.forEach((x) => _loadChildren(x, list));\n return results;\n}\nfunction findTree(id, list, idName) {\n let result;\n if (!list.length)\n return;\n const fn = (id2, list2, idName2) => {\n list2.find((_e) => {\n if (_e[idName2] === id2) {\n result = _e;\n } else if (_e.children && _e.children.length !== 0)\n return fn(id2, _e.children, idName2);\n });\n };\n fn(id, list, idName);\n return result;\n}\n\n// utils/obj/judge.ts\nfunction isPlainObject(obj) {\n let proto, Ctor;\n if (!obj || toString.call(obj) !== \"[object Object]\") {\n return false;\n }\n proto = Object.getPrototypeOf(obj);\n if (!proto) {\n return true;\n }\n Ctor = {}.hasOwnProperty.call(proto, \"constructor\") && proto.constructor;\n return typeof Ctor === \"function\" && {}.hasOwnProperty.toString.call(Ctor) === {}.hasOwnProperty.toString.call(Object);\n}\nvar isObject = (val) => val !== null && typeof val === \"object\";\n\n// utils/obj/cache.ts\nvar assign = Object.assign;\nexport {\n arrToTree,\n assign,\n findTree,\n isObject,\n isPlainObject,\n tranListToTreeData\n};\n"],"names":["_loadChildren","obj","list","arr","filter","x","parentId","id","length","children","forEach","tranListToTreeData","results","isObject","val","assign","Object"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgBA,SAASA,aAAT,CAAuBC,GAAvB,EAA4BC,IAA5B,EAAkC;EAChC,EAAA,IAAMC,GAAG,GAAGD,IAAI,CAACE,MAAL,CAAY,UAACC,CAAD,EAAA;EAAA,IAAA,OAAOA,CAAC,CAACC,QAAF,IAAcL,GAAG,CAACM,EAAzB,CAAA;EAAA,GAAZ,CAAZ,CAAA;EACA,EAAA,IAAI,CAACJ,GAAG,CAACK,MAAT,EACE,OAAA;IACFP,GAAG,CAACQ,QAAJ,GAAeN,GAAf,CAAA;EACAF,EAAAA,GAAG,CAACQ,QAAJ,CAAaC,OAAb,CAAqB,UAACL,CAAD,EAAO;EAC1BL,IAAAA,aAAa,CAACK,CAAD,EAAIH,IAAJ,CAAb,CAAA;KADF,CAAA,CAAA;EAGA,EAAA,OAAOD,GAAP,CAAA;EACD,CAAA;EACD,SAASU,kBAAT,CAA4BT,IAA5B,EAAkC;EAChC,EAAA,IAAMU,OAAO,GAAGV,IAAI,CAACE,MAAL,CAAY,UAACC,CAAD,EAAA;EAAA,IAAA,OAAOA,CAAC,CAACC,QAAF,IAAc,IAArB,CAAA;EAAA,GAAZ,CAAhB,CAAA;EACAM,EAAAA,OAAO,CAACF,OAAR,CAAgB,UAACL,CAAD,EAAA;EAAA,IAAA,OAAOL,aAAa,CAACK,CAAD,EAAIH,IAAJ,CAApB,CAAA;KAAhB,CAAA,CAAA;EACA,EAAA,OAAOU,OAAP,CAAA;EACD,CAAA;EA8BD,IAAIC,QAAQ,GAAG,SAAXA,QAAW,CAACC,GAAD,EAAA;EAAA,EAAA,OAASA,GAAG,KAAK,IAAR,IAAgB,OAAOA,CAAAA,GAAP,MAAe,QAAxC,CAAA;EAAA,CAAf;EAGA,IAAIC,MAAM,GAAGC,MAAM,CAACD,MAApB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|