Files
HTCloud/HT.Cloud.Web/Areas/PenMeiReportManage/Views/PenMeiNetWorkStateNew/Index.cshtml

1032 lines
22 KiB
Plaintext
Raw Normal View History

2024-02-20 15:53:27 +08:00
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Index.cshtml";
}
@inject Microsoft.AspNetCore.Hosting.IWebHostEnvironment env
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<style>
.layui-card {
border: 1px solid #f2f2f2;
border-radius: 5px;
}
.icon {
margin-right: 10px;
color: #1aa094;
}
.icon-cray {
color: #ffb800 !important;
}
.icon-blue {
color: #1e9fff !important;
}
.icon-tip {
color: #ff5722 !important;
}
.layuimini-qiuck-module {
text-align: center;
margin-top: 10px
}
.layuimini-qiuck-module a i {
display: inline-block;
width: 100%;
height: 60px;
line-height: 60px;
text-align: center;
border-radius: 2px;
font-size: 30px;
background-color: #F8F8F8;
color: #333;
transition: all .3s;
-webkit-transition: all .3s;
}
.layuimini-qiuck-module a cite {
position: relative;
top: 2px;
display: block;
color: #666;
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
font-size: 14px;
}
.welcome-module {
width: 100%;
height: 210px;
}
.panel {
background-color: #fff;
border: 1px solid transparent;
border-radius: 3px;
-webkit-box-shadow: 0 1px 1px rgba(0,0,0,.05);
box-shadow: 0 1px 1px rgba(0,0,0,.05)
}
.panel-body {
padding: 10px
}
.panel-title {
margin-top: 0;
margin-bottom: 0;
font-size: 12px;
color: inherit
}
.label {
display: inline;
padding: .2em .6em .3em;
font-size: 75%;
font-weight: 700;
line-height: 1;
color: #fff;
text-align: center;
white-space: nowrap;
vertical-align: baseline;
border-radius: .25em;
margin-top: .3em;
}
.label {
display: inline;
padding: .2em .6em .3em;
font-size: 75%;
font-weight: 700;
line-height: 1;
color: #fff;
text-align: center;
white-space: nowrap;
vertical-align: baseline;
border-radius: .25em;
margin-top: .3em;
}
.layui-red {
color: red
}
.main_btn > p {
height: 40px;
}
.layui-bg-number {
background-color: #F8F8F8;
}
.layuimini-notice:hover {
background: #f6f6f6;
}
.layuimini-notice {
padding: 7px 16px;
clear: both;
font-size: 12px !important;
cursor: pointer;
position: relative;
transition: background 0.2s ease-in-out;
}
.layuimini-notice-title, .layuimini-notice-label {
padding-right: 70px !important;
text-overflow: ellipsis !important;
overflow: hidden !important;
white-space: nowrap !important;
}
.layuimini-notice-title {
line-height: 28px;
font-size: 14px;
}
.layuimini-notice-extra {
position: absolute;
top: 50%;
margin-top: -8px;
right: 16px;
display: inline-block;
height: 16px;
color: #999;
}
</style>
<script>
layui.use(['layer', 'echarts', 'common'], function () {
var $ = layui.jquery,
layer = layui.layer,
common = layui.common,
element = layui.element,
echarts = layui.echarts;
wcLoading.close();
const fShow = true;
const tShow = false;
//基准配置项
const width_iobox = 300;
const width_iobox_16bit = 200;
const width_iobox_8bit = 200;
const height_iobox = 810;
const width_iobox_cpu = 200;
const width_iobox_cm = 200;
//拖拽
const draggable_dev = true;
// //开发色彩
// const fill_backgroud = '#8d98a3';
// const fill_iobox = '#8d98a3';
// const stroke_iobox = '#494d52';;
// const stroke_iobox_line = '#42444a';
// const stroke_iobox_spiltline = '#474b58';
// const fill_top_name = '#f1f4f6';
// const fill_top_name_value = '#f1f4f6';
// const fill_rect = '#a4a9ab';
// const fill_rect_text_name = '#e5e9ec';
// const fill_rect_text_description = '#f3f6f8';
// const fill_rect_io_on = '#aaff00';
// const fill_rect_io_off = '#a3a6a9';
//新版色彩
const fill_backgroud = '#28333e';
//const fill_backgroud = '#2a0056';
// const fill_iobox = '#2492e9';//00
// const fill_iobox = '#345266';//001
const fill_iobox = '#345b87';//002
// const fill_iobox = '#50657a';//003
// const fill_iobox = '#334b64';//004
//const fill_iobox = '#3d5062';//005
const stroke_iobox = '#494d52';;
const stroke_iobox_line = '#42444a';
const stroke_iobox_spiltline = '#474b58';
const fill_top_name = '#ffffff';
const fill_top_name_value = '#ffffff';
const fill_rect = '#cecece';
const fill_rect_text_name = '#ffffff';
//const fill_rect_text_name = '#02f2e0';
const fill_rect_text_description = '#ffffff';
//const fill_rect_text_description = '#02f2e0';
const fill_rect_io_on = '#00ff55';//'#00ff7f'
//const fill_rect_io_on = '#00ff7f'
const fill_rect_io_off = '#cecece';
const leafer = new LeaferUI.Leafer({
view: 'idmain', // 支持 window 、div、canvas 标签对象, 可使用id字符串(不用加 # 号)
width: 3000, // 不能设置为 0 否则会变成自动布局
height: 900,
fill: fill_backgroud,
move: {
drag: true,
},
wheel: {
zoomMode: true,
zoomSpeed: 0.01,
},
zoom: {
min: 0.4,
max: 1.5,
}
})
const group = new LeaferUI.Group({ x: 0, y: 0 })
leafer.add(group)
// const image_cpu = new LeaferUI.Image({
// x: 100,
// y: 50,
// url: '/imagesnet/S71500.png',
// draggable: draggable_dev,
// height: 80
// })
var b11 = true;
var b12 = true;
var b13 = true;
var b14 = false;
var b21 = true;
var b31 = true;
var b32 = false;
var b33 = true;
var b34 = true;
var b35 = false;
if (tShow) {
const t11 = new LeaferUI.Line({
id: 'line11',
points: [350 + 75, 210, 875, 310],
strokeWidth: 2,
stroke: '#cecece',
shadow: {
x: 0,
y: 0,
blur: 1,
color: '#cecece',
visible: true,
}
})
const true14 = new LeaferUI.Image({
x: (875 - 350 - 75) / 2 + 350 + 75 - 15,
y: (310 - 210) / 2 + 210 - 15,
url: '/imagesnet/true.png',
draggable: draggable_dev,
width: 30,
height: 30,
})
group.add(true14)
}
if (fShow) {
const f14 = new LeaferUI.Line({
id: 'f14',
points: [1250 + 75, 210, 875, 310],
strokeWidth: 2,
stroke: '#cecece',
shadow: {
x: 0,
y: 0,
blur: 1,
color: '#cecece',
visible: true,
}
})
const false14 = new LeaferUI.Image({
x: (1250 + 75 - 875) / 2 + 875 - 15,
y: (310 - 210) / 2 + 210 - 15,
url: '/imagesnet/false.png',
draggable: draggable_dev,
width: 30,
height: 30,
})
group.add(false14)
const f32 = new LeaferUI.Line({
id: 'line32',
points: [500 + 75, 650, 875, 520],
strokeWidth: 2,
stroke: '#cecece',
shadow: {
x: 0,
y: 0,
blur: 1,
color: '#cecece',
visible: true,
}
})
const false32 = new LeaferUI.Image({
x: (875 - 500 - 75) / 2 + 500 + 75 - 15,
y: (650 - 520) / 2 + 520 - 15,
url: '/imagesnet/false.png',
draggable: draggable_dev,
width: 30,
height: 30,
})
group.add(false32)
const f35 = new LeaferUI.Line({
id: 'line35',
points: [1400 + 75, 650, 875, 520],
strokeWidth: 2,
stroke: '#cecece',
shadow: {
x: 0,
y: 0,
blur: 1,
color: '#cecece',
visible: true,
}
})
const false35 = new LeaferUI.Image({
x: (1400 + 75 - 875) / 2 + 875 - 15,
y: (650 - 520) / 2 + 520 - 15,
url: '/imagesnet/false.png',
draggable: draggable_dev,
width: 30,
height: 30,
})
group.add(false35)
}
const image_disk = new LeaferUI.Image({
x: 350,
y: 35,
url: '/imagesnet/面板.png',
draggable: draggable_dev,
width: 134,
height: 160,
})
var image_disk_name = new LeaferUI.Text({
x: 350,
y: 35 + 140 + 10,
width: 134,
fill: fill_top_name,
text: '数据大屏',
textAlign: 'center',
verticalAlign: 'middle',
textWrap: 'none',
padding: 0,
fontSize: 12
})
group.add(image_disk_name)
var image_disk_address = new LeaferUI.Text({
x: 350,
y: 35 + 140 + 25,
width: 134,
fill: fill_top_name,
text: '192.168.100.130',
textAlign: 'center',
verticalAlign: 'middle',
textWrap: 'none',
padding: 0,
fontSize: 12
})
group.add(image_disk_address)
const line11 = new LeaferUI.Line({
id: 'line11',
points: [350+75, 210, 875, 310],
strokeWidth: 2,
stroke: '#cecece',
shadow: {
x: 0,
y: 0,
blur: 1,
color: '#cecece',
visible: true,
}
})
group.add(line11);
const image_appserver = new LeaferUI.Image({
x: 650,
y: 35,
url: '/imagesnet/应用服务器.png',
draggable: draggable_dev,
width: 134,
height: 160,
})
var image_appserver_name = new LeaferUI.Text({
x: 650,
y: 35 + 140 + 10,
width: 134,
fill: fill_top_name,
text: '管理系统',
textAlign: 'center',
verticalAlign: 'middle',
textWrap: 'none',
padding: 0,
fontSize: 12
})
group.add(image_appserver_name)
var image_appserver_address = new LeaferUI.Text({
x: 650,
y: 35 + 140 + 25,
width: 134,
fill: fill_top_name,
text: '192.168.100.247',
textAlign: 'center',
verticalAlign: 'middle',
textWrap: 'none',
padding: 0,
fontSize: 12
})
group.add(image_appserver_address)
const line12 = new LeaferUI.Line({
id: 'line12',
points: [650 + 75, 210, 875, 310],
strokeWidth: 2,
stroke: '#cecece',
shadow: {
x: 0,
y: 0,
blur: 1,
color: '#cecece',
visible: true,
}
})
group.add(line12);
const image_appserver3d = new LeaferUI.Image({
x: 950,
y: 35,
url: '/imagesnet/应用服务器.png',
draggable: draggable_dev,
width: 134,
height: 160,
})
var image_3d_name = new LeaferUI.Text({
x: 950,
y: 35 + 140 + 10,
width: 134,
fill: fill_top_name,
text: '3D可视化系统',
textAlign: 'center',
verticalAlign: 'middle',
textWrap: 'none',
padding: 0,
fontSize: 12
})
group.add(image_3d_name)
var image_3d_address = new LeaferUI.Text({
x: 950,
y: 35 + 140 + 25,
width: 134,
fill: fill_top_name,
text: '192.168.100.220',
textAlign: 'center',
verticalAlign: 'middle',
textWrap: 'none',
padding: 0,
fontSize: 12
})
group.add(image_3d_address)
const line13 = new LeaferUI.Line({
id: 'line13',
points: [950 + 75, 210, 875, 310],
strokeWidth: 2,
stroke: '#cecece',
shadow: {
x: 0,
y: 0,
blur: 1,
color: '#cecece',
visible: true,
}
})
group.add(line13);
const image_appserver2d = new LeaferUI.Image({
x: 1250,
y: 35,
url: '/imagesnet/应用服务器.png',
draggable: draggable_dev,
width: 134,
height: 160,
})
var image_2d_name = new LeaferUI.Text({
x: 1250,
y: 35 + 140 + 10,
width: 134,
fill: fill_top_name,
text: '2D可视化系统',
textAlign: 'center',
verticalAlign: 'middle',
textWrap: 'none',
padding: 0,
fontSize: 12
})
group.add(image_2d_name)
var image_2d_address = new LeaferUI.Text({
x: 1250,
y: 35 + 140 + 25,
width: 134,
fill: fill_top_name,
text: '192.168.100.230',
textAlign: 'center',
verticalAlign: 'middle',
textWrap: 'none',
padding: 0,
fontSize: 12
})
group.add(image_2d_address)
const line14 = new LeaferUI.Line({
id: 'line14',
points: [1250 + 75, 210, 875, 310],
strokeWidth: 2,
stroke: '#cecece',
shadow: {
x: 0,
y: 0,
blur: 1,
color: '#cecece',
visible: true,
}
})
group.add(line14);
const image_exchange = new LeaferUI.Image({
x: 800,
y: 250+75,
url: '/imagesnet/交换机.png',
draggable: draggable_dev,
width: 134,
height: 160,
})
var image_exchange_name = new LeaferUI.Text({
x: 800,
y: 250 + 75 + 160 + 10,
width: 134,
fill: fill_top_name,
text: '交换机',
textAlign: 'center',
verticalAlign: 'middle',
textWrap: 'none',
padding: 0,
fontSize: 12
})
group.add(image_exchange_name)
var image_exchange_address = new LeaferUI.Text({
x: 800,
y: 250 + 75 + 160 + 25,
width: 134,
fill: fill_top_name,
text: '192.168.100.1',
textAlign: 'center',
verticalAlign: 'middle',
textWrap: 'none',
padding: 0,
fontSize: 12
})
group.add(image_exchange_address)
const image_server = new LeaferUI.Image({
x: 1300,
y: 75 + 250,
url: '/imagesnet/服务器.png',
draggable: draggable_dev,
width: 134,
height: 160,
})
var image_server_name = new LeaferUI.Text({
x: 1300,
y: 75 + 250 + 140 + 10,
width: 134,
fill: fill_top_name,
text: 'L2服务器',
textAlign: 'center',
verticalAlign: 'middle',
textWrap: 'none',
padding: 0,
fontSize: 12
})
group.add(image_server_name)
var image_server_address = new LeaferUI.Text({
x: 1300,
y: 75 + 250 + 140 + 25,
width: 134,
fill: fill_top_name,
text: '192.168.100.15',
textAlign: 'center',
verticalAlign: 'middle',
textWrap: 'none',
padding: 0,
fontSize: 12
})
group.add(image_server_address)
const line21 = new LeaferUI.Line({
id: 'line21',
points: [1300, 400, 945, 400],
strokeWidth: 2,
stroke: '#cecece',
shadow: {
x: 0,
y: 0,
blur: 1,
color: '#cecece',
visible: true,
}
})
group.add(line21);
const image_PLC = new LeaferUI.Image({
x: 200,
y: 150 + 500,
url: '/imagesnet/PLC.png',
draggable: draggable_dev,
width:134,
height: 160,
})
var image_PLC_name = new LeaferUI.Text({
x: 200,
y: 150 + 500 + 140 + 10,
width: 134,
fill: fill_top_name,
text: 'S7 400',
textAlign: 'center',
verticalAlign: 'middle',
textWrap: 'none',
padding: 0,
fontSize: 12
})
group.add(image_PLC_name)
var image_PLC_address = new LeaferUI.Text({
x: 200,
y: 150 + 500 + 140 + 25,
width: 134,
fill: fill_top_name,
text: '192.168.100.10',
textAlign: 'center',
verticalAlign: 'middle',
textWrap: 'none',
padding: 0,
fontSize: 12
})
group.add(image_PLC_address)
const line31 = new LeaferUI.Line({
id: 'line31',
points: [200 + 75, 650, 875, 520],
strokeWidth: 2,
stroke: '#cecece',
shadow: {
x: 0,
y: 0,
blur: 1,
color: '#cecece',
visible: true,
}
})
group.add(line31);
const image_PLC2 = new LeaferUI.Image({
x: 500,
y: 150 + 500,
url: '/imagesnet/PLC.png',
draggable: draggable_dev,
width: 134,
height: 160,
})
var image_PLC2_name = new LeaferUI.Text({
x: 500,
y: 150 + 500+140+10,
width: 134,
fill: fill_top_name,
text: 'S7 300',
textAlign: 'center',
verticalAlign: 'middle',
textWrap: 'none',
padding: 0,
fontSize: 12
})
group.add(image_PLC2_name)
var image_PLC2_address = new LeaferUI.Text({
x: 500,
y: 150 + 500 + 140 + 25,
width: 134,
fill: fill_top_name,
text: '192.168.100.20',
textAlign: 'center',
verticalAlign: 'middle',
textWrap: 'none',
padding: 0,
fontSize: 12
})
group.add(image_PLC2_address)
const line32 = new LeaferUI.Line({
id: 'line32',
points: [500 + 75, 650, 875, 520],
strokeWidth: 2,
stroke: '#cecece',
shadow: {
x: 0,
y: 0,
blur: 1,
color: '#cecece',
visible: true,
}
})
group.add(line32);
const image_et = new LeaferUI.Image({
x: 800,
y: 150 + 500,
url: '/imagesnet/PLC.png',
draggable: draggable_dev,
width: 134,
height: 160,
})
var image_et_name = new LeaferUI.Text({
x: 800,
y: 150 + 500 + 140 + 10,
width: 134,
fill: fill_top_name,
text: '子站#1 ET200',
textAlign: 'center',
verticalAlign: 'middle',
textWrap: 'none',
padding: 0,
fontSize: 12
})
group.add(image_et_name)
var image_et_address = new LeaferUI.Text({
x: 800,
y: 150 + 500 + 140 + 25,
width: 134,
fill: fill_top_name,
text: '192.168.100.130',
textAlign: 'center',
verticalAlign: 'middle',
textWrap: 'none',
padding: 0,
fontSize: 12
})
group.add(image_et_address)
const line33 = new LeaferUI.Line({
id: 'line33',
points: [800 + 75, 650, 875, 520],
strokeWidth: 2,
stroke: '#cecece',
shadow: {
x: 0,
y: 0,
blur: 1,
color: '#cecece',
visible: true,
}
})
group.add(line33);
const image_et2 = new LeaferUI.Image({
x: 1100,
y: 150 + 500,
url: '/imagesnet/PLC.png',
draggable: draggable_dev,
width: 134,
height: 160,
})
var image_et2_name = new LeaferUI.Text({
x: 1100,
y: 150 + 500 + 140 + 10,
width: 134,
fill: fill_top_name,
text: '子站#2 S7 200',
textAlign: 'center',
verticalAlign: 'middle',
textWrap: 'none',
padding: 0,
fontSize: 12
})
group.add(image_et2_name)
var image_et2_address = new LeaferUI.Text({
x: 1100,
y: 150 + 500 + 140 + 25,
width: 134,
fill: fill_top_name,
text: '192.168.100.140',
textAlign: 'center',
verticalAlign: 'middle',
textWrap: 'none',
padding: 0,
fontSize: 12
})
group.add(image_et2_address)
const line34 = new LeaferUI.Line({
id: 'line34',
points: [1100 + 75, 650, 875, 520],
strokeWidth: 2,
stroke: '#cecece',
shadow: {
x: 0,
y: 0,
blur: 1,
color: '#cecece',
visible: true,
}
})
group.add(line34);
const image_computer = new LeaferUI.Image({
x: 1400,
y: 150 + 500,
url: '/imagesnet/计算机.png',
draggable: draggable_dev,
width: 134,
height: 160,
})
var image_computer_name = new LeaferUI.Text({
x: 1400,
y: 150 + 500 + 140 + 10,
width: 134,
fill: fill_top_name,
text: 'WINCC上位机',
textAlign: 'center',
verticalAlign: 'middle',
textWrap: 'none',
padding: 0,
fontSize: 12
})
group.add(image_computer_name)
var image_computer_address = new LeaferUI.Text({
x: 1400,
y: 150 + 500 + 140 + 25,
width: 134,
fill: fill_top_name,
text: '192.168.100.50',
textAlign: 'center',
verticalAlign: 'middle',
textWrap: 'none',
padding: 0,
fontSize: 12
})
group.add(image_computer_address)
const line35 = new LeaferUI.Line({
id: 'line35',
points: [1400 + 75, 650, 875, 520],
strokeWidth: 2,
stroke: '#cecece',
shadow: {
x: 0,
y: 0,
blur: 1,
color: '#cecece',
visible: true,
}
})
group.add(line35);
//group.add(image_cpu)
group.add(image_PLC)
group.add(image_et)
group.add(image_PLC2)
group.add(image_et2)
group.add(image_disk)
//group.add(image_valve)
group.add(image_server)
group.add(image_exchange)
group.add(image_computer)
group.add(image_appserver)
group.add(image_appserver2d)
group.add(image_appserver3d)
image_PLC.on(LeaferUI.PointerEvent.DOUBLE_TAP, function () {
layer.open({
type: 2, // iframe层类型
title: 'S7 400 IO状态',
area: ['95%', '95%'], // 设置弹出层大小
content: '/PenMeiReportManage/PenMeiJMReportNew/Index' // 指定要加载的URL地址
});
});
// var element = layui.element;
// debugger;
// element.tabAdd('layuiminiTab', {
// title: '设备IO监控'
// , content: 'http://localhost:8058/PenMeiReportManage/PenMeiJMReportNew/Index' //支持传入html
// , id: '/PenMeiReportManage/PenMeiJMReportNew/Index'
// });
// element.tabChange('layuiminiTab', '/PenMeiChartsManage/PenMeiHistoryTechCharts/Index')
// debugger;
var t = null;
function time() {
clearTimeout(t); //清除定时器
UpdataChart()
t = setTimeout(time, 1 * 1000); //设定定时器,循环运行
}
async function UpdataChart() {
myajax = await $.ajax({
url: "/PenMeiReportManage/PenMeiJMReport/GetRealIOState",
type: "Get",
dataType: "json",
success: function (redata) {
}
});
$.when(myajax).done(function (redata) {
//debugger;
// leafer.findOne('#' + 'RUN1').fill = fill_rect_io_on;
// leafer.findOne('#' + 'RUN').fill = fill_rect_io_on;
// leafer.findOne('#' + 'ETH0').fill = fill_rect_io_on;
// leafer.findOne('#' + 'ETH1').fill = fill_rect_io_on;
// leafer.findOne('#' + 'ETH2').fill = fill_rect_io_on;
// for (var ioName in redata) {
// leafer.findOne('#' + ioName.replace('_', '.')).fill = (redata[ioName] == '1') ? fill_rect_io_on : fill_rect_io_off;
// }
// for (var ioslot = 0; ioslot < 8; ioslot++) {
// leafer.findOne('#' + 'Slot:' + ioslot + '_OnlineSatate').fill = fill_rect_io_on;
// }
});
}
t = setTimeout(time, 1 * 1000); //开始运行
var lineT = true;
var t2 = null;
function time2() {
clearTimeout(t2); //清除定时器
UpShadow()
if (lineT) {
t2 = setTimeout(time2, 1 * 100); //设定定时器,循环运行
} else {
t2 = setTimeout(time2, 1 * 500); //设定定时器,循环运行
}
//t2 = setTimeout(time2, 1 * 200); //设定定时器,循环运行
}
function lineTT(linename,linestate) {
leafer.findOne('#' + linename).shadow.blur = linestate?10:10;
leafer.findOne('#' + linename).stroke = linestate ? 'rgb(50,205,121)' : '#FF0000'
leafer.findOne('#' + linename).shadow.color = linestate ? 'rgb(50,205,121)' : '#FF0000AA'
}
function lineTF(linename) {
leafer.findOne('#' + linename).shadow.blur = 1;
leafer.findOne('#' + linename).stroke = '#cecece'
leafer.findOne('#' + linename).shadow.color = '#cecece'
}
async function UpShadow() {
if (lineT) {
lineTT("line11", b11)
lineTT("line12", b12)
lineTT("line13", b13)
lineTT("line14", b14)
lineTT("line21", b21)
lineTT("line31", b31)
lineTT("line32", b32)
lineTT("line33", b33)
lineTT("line34", b34)
lineTT("line35", b35)
} else {
lineTF("line11")
lineTF("line12")
lineTF("line13")
lineTF("line14")
lineTF("line21")
lineTF("line31")
lineTF("line32")
lineTF("line33")
lineTF("line34")
lineTF("line35")
}
lineT = !lineT;
}
t2 = setTimeout(time2, 1 * 300); //开始运行
})
</script>
<script type="text/javascript" src="~/lib//leafer-ui@1.0.0-rc.8/web.js"></script>
<div style="width:100%;height:100%;">
<div class="layuimini-container" style="width:100%;height:100%; ">
<div id="idmain">
</div>
</div>
</div>