From 4e17fea5f44cd72ea3f6df1e3758739043a91d69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EC=84=9D=20=EC=B5=9C?= Date: Fri, 4 Mar 2022 16:06:39 +0900 Subject: [PATCH] =?UTF-8?q?=EB=8C=80=EC=8B=9C=EB=B3=B4=EB=93=9C=20?= =?UTF-8?q?=EC=9D=BC=EB=B3=84=20=EC=A7=80=EB=8F=84=EC=82=AC=EC=9A=A9=20?= =?UTF-8?q?=EC=B6=94=EC=9D=B4=20=EA=B7=B8=EB=9E=98=ED=94=84=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/mca/cmmn/web/AdminController.java | 69 ++++-- .../com/mca/map/mapper/UseHistoryMapper.java | 3 + .../mca/map/service/UseHistoryService.java | 5 + .../com/mca/map/vo/UseHistoryChartVO.java | 22 ++ .../sqlmap/mappers/map/useHistory.xml | 9 + .../sqlmap/sql-mapper-config.xml | 1 + .../webapp/WEB-INF/jsp/admin/dashBoard.jsp | 202 ++++++++++-------- src/main/webapp/WEB-INF/jsp/admin/history.jsp | 24 +-- src/main/webapp/WEB-INF/jsp/map/request.jsp | 2 +- .../webapp/WEB-INF/jsp/map/requestView.jsp | 6 + .../webapp/WEB-INF/jsp/map/requestWrite.jsp | 3 + src/main/webapp/js/admin/dashBoard.js | 36 ++++ src/main/webapp/js/googleChart/loader.js | 157 ++++++++++++++ 13 files changed, 412 insertions(+), 127 deletions(-) create mode 100644 src/main/java/com/mca/map/vo/UseHistoryChartVO.java create mode 100644 src/main/webapp/js/admin/dashBoard.js create mode 100644 src/main/webapp/js/googleChart/loader.js diff --git a/src/main/java/com/mca/cmmn/web/AdminController.java b/src/main/java/com/mca/cmmn/web/AdminController.java index 8644880..9f07fe6 100644 --- a/src/main/java/com/mca/cmmn/web/AdminController.java +++ b/src/main/java/com/mca/cmmn/web/AdminController.java @@ -8,13 +8,16 @@ import java.util.List; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; import com.mca.cmmn.service.LogService; import com.mca.cmmn.vo.BaseSearchVO; +import com.mca.map.vo.*; +import org.json.JSONArray; +import org.json.JSONObject; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.*; import com.mca.cmmn.service.AreaCodeService; import com.mca.cmmn.service.LayersService; @@ -22,11 +25,6 @@ import com.mca.cmmn.vo.LayersVO; import com.mca.map.service.FieldDataService; import com.mca.map.service.UseHistoryService; import com.mca.map.service.UseRequestService; -import com.mca.map.vo.FieldDataSearchVO; -import com.mca.map.vo.FieldDataVO; -import com.mca.map.vo.UseHistorySearchVO; -import com.mca.map.vo.UseRequestSearchVO; -import com.mca.map.vo.UseRequestVO; import com.mca.sec.UserUtil; import com.mca.sec.vo.LoginUserVO; import com.mca.user.service.UserService; @@ -86,14 +84,14 @@ public class AdminController { int standByCount = userService.selectUserStandByCount(); model.addAttribute("standByCount", standByCount); - // 확인요청 데이터 - FieldDataSearchVO fieldDataSearchVO = new FieldDataSearchVO(); - fieldDataSearchVO.setStatus0(1); - fieldDataSearchVO.setStatus1(1); - fieldDataSearchVO.setStatus2(1); - fieldDataSearchVO.setStatus3(1); - int standFieldData = fieldDataService.selectFieldDataCnt(fieldDataSearchVO); - model.addAttribute("standFieldData", standFieldData); + // 확인요청 데이터 + FieldDataSearchVO fieldDataSearchVO = new FieldDataSearchVO(); + fieldDataSearchVO.setStatus0(1); + fieldDataSearchVO.setStatus1(1); + fieldDataSearchVO.setStatus2(1); + fieldDataSearchVO.setStatus3(1); + int standFieldData = fieldDataService.selectFieldDataCnt(fieldDataSearchVO); + model.addAttribute("standFieldData", standFieldData); // 일, 월 방문자 수 BaseSearchVO searchVO = new BaseSearchVO(); @@ -104,6 +102,12 @@ public class AdminController { searchVO.setSearchStartDate(searchStartDate.minusMonths(1).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); model.addAttribute("monthLoginCount", logService.selectLoginCnt(searchVO)); + //일별 지도사용 추이 데이터 + UseHistorySearchVO useHistorySearchVO = new UseHistorySearchVO(); + useHistorySearchVO.setSearchEndDate(searchVO.getSearchEndDate()); + useHistorySearchVO.setSearchStartDate(searchStartDate.minusDays(14).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); + List dataList = useHistoryService.selectDayMapUseData(useHistorySearchVO); + model.addAttribute("dayMapUseDataList", dataList); return "admin/dashBoard"; } catch (Exception e) { @@ -113,6 +117,39 @@ public class AdminController { } } + /** + * 일별 지도사용 추이 데이터 반환 ajax + * + * @param + * @return + * @throws + */ + @RequestMapping(value = "/dayMapUseData", method = {RequestMethod.GET}) + @ResponseBody + public JSONArray dayMapUseData(@ModelAttribute("UseRequestSearchVO") UseHistorySearchVO useHistorySearchVO, Model model) throws Exception { + try { + List dataList = useHistoryService.selectDayMapUseData(useHistorySearchVO); + + JSONArray returnAry = new JSONArray(); + for(UseHistoryChartVO chartVO: dataList){ + JSONArray temp = new JSONArray(); + temp.put(chartVO.getDateStr()); + temp.put(chartVO.getUseCnt()); + returnAry.put(temp); +// JSONObject temp = new JSONObject(); +// temp.put("date", chartVO.getDateStr()); +// temp.put("useCnt", chartVO.getUseCnt()); +// returnAry.put(temp); + } + System.out.println("결과 배열 수 : "+returnAry.length()); + return returnAry; + } catch (Exception e) { + // TODO: handle exception + e.printStackTrace(); + return null; + } + } + /** * 지도 사용요청 목록을 반환한다. * diff --git a/src/main/java/com/mca/map/mapper/UseHistoryMapper.java b/src/main/java/com/mca/map/mapper/UseHistoryMapper.java index 1dacee7..ad154a4 100644 --- a/src/main/java/com/mca/map/mapper/UseHistoryMapper.java +++ b/src/main/java/com/mca/map/mapper/UseHistoryMapper.java @@ -2,6 +2,7 @@ package com.mca.map.mapper; import java.util.List; +import com.mca.map.vo.UseHistoryChartVO; import com.mca.map.vo.UseHistorySearchVO; import egovframework.rte.psl.dataaccess.mapper.Mapper; @@ -12,4 +13,6 @@ public interface UseHistoryMapper { List selectUseHistoryList(UseHistorySearchVO useHistorySearchVO); int selectUseHistoryCnt(UseHistorySearchVO useHistorySearchVO); + + List selectDayMapUseData(UseHistorySearchVO useHistorySearchVO); } diff --git a/src/main/java/com/mca/map/service/UseHistoryService.java b/src/main/java/com/mca/map/service/UseHistoryService.java index fe1a7b8..55dd471 100644 --- a/src/main/java/com/mca/map/service/UseHistoryService.java +++ b/src/main/java/com/mca/map/service/UseHistoryService.java @@ -4,6 +4,7 @@ import java.util.List; import javax.annotation.Resource; +import com.mca.map.vo.UseHistoryChartVO; import org.springframework.stereotype.Service; import com.mca.map.mapper.UseHistoryMapper; import com.mca.map.vo.UseHistorySearchVO; @@ -24,4 +25,8 @@ public class UseHistoryService { // TODO Auto-generated method stub return useHistoryMapper.selectUseHistoryList(useHistorySearchVO); } + + public List selectDayMapUseData(UseHistorySearchVO useHistorySearchVO) { + return useHistoryMapper.selectDayMapUseData(useHistorySearchVO); + } } diff --git a/src/main/java/com/mca/map/vo/UseHistoryChartVO.java b/src/main/java/com/mca/map/vo/UseHistoryChartVO.java new file mode 100644 index 0000000..9879cfd --- /dev/null +++ b/src/main/java/com/mca/map/vo/UseHistoryChartVO.java @@ -0,0 +1,22 @@ +package com.mca.map.vo; + +public class UseHistoryChartVO { + private String dateStr; + private Integer useCnt; + + public String getDateStr() { + return dateStr; + } + + public void setDateStr(String dateStr) { + this.dateStr = dateStr; + } + + public Integer getUseCnt() { + return useCnt; + } + + public void setUseCnt(Integer useCnt) { + this.useCnt = useCnt; + } +} diff --git a/src/main/resources/egovframework/sqlmap/mappers/map/useHistory.xml b/src/main/resources/egovframework/sqlmap/mappers/map/useHistory.xml index 7f2ed96..11757e3 100644 --- a/src/main/resources/egovframework/sqlmap/mappers/map/useHistory.xml +++ b/src/main/resources/egovframework/sqlmap/mappers/map/useHistory.xml @@ -49,4 +49,13 @@ + + \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/sql-mapper-config.xml b/src/main/resources/egovframework/sqlmap/sql-mapper-config.xml index 2aa7633..73eb392 100644 --- a/src/main/resources/egovframework/sqlmap/sql-mapper-config.xml +++ b/src/main/resources/egovframework/sqlmap/sql-mapper-config.xml @@ -14,6 +14,7 @@ + diff --git a/src/main/webapp/WEB-INF/jsp/admin/dashBoard.jsp b/src/main/webapp/WEB-INF/jsp/admin/dashBoard.jsp index 3e764c0..5ca3a27 100644 --- a/src/main/webapp/WEB-INF/jsp/admin/dashBoard.jsp +++ b/src/main/webapp/WEB-INF/jsp/admin/dashBoard.jsp @@ -4,104 +4,122 @@ <%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui" %> <%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> -<%----%> - + + + + + +
-
-
-
- -
-
-
-
- -
- -
-
-
-
-
- -
-
- 확인 요청 데이터 -

+
+
+
+ +
+
+
+
+ +
+ +
+
+
+
+
+ +
+ -
-
+
-
-
-
- -
-

-

- 그래프 -
-
-
+
+
+
+
+ +
+
+

-

+

0

+
+
+
+
+
+ +
+
+

-

+

0

+
+
+
+
+
+
+ +
+
+

오늘 방문자 수

+

+
+
+
+
+
+
+ +
+
+

최근 한달 방문자 수

+

+
+
+
-
-
-
-
-
- -
-
-

-

-

0

-
-
-
-
-
-
- -
-
-

오늘 방문자 수

-

-
-
-
-
-
-
- -
-
-

최근 한달 방문자 수

-

-
-
-
+
+
+
+

일별 지도사용 추이

+
-
-
-
-
-

-

- 그래프 -
-
-
+
+
+
+
+

-

+ 그래프 +
+
+
+
+
+

-

+ 그래프 +
+
+
+
diff --git a/src/main/webapp/WEB-INF/jsp/admin/history.jsp b/src/main/webapp/WEB-INF/jsp/admin/history.jsp index 0104825..b7aa866 100644 --- a/src/main/webapp/WEB-INF/jsp/admin/history.jsp +++ b/src/main/webapp/WEB-INF/jsp/admin/history.jsp @@ -1,5 +1,4 @@ -<%@ page language="java" contentType="text/html; charset=utf-8" - pageEncoding="utf-8" %> +<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> <%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui" %> @@ -16,28 +15,17 @@
-
-
- +
diff --git a/src/main/webapp/WEB-INF/jsp/map/request.jsp b/src/main/webapp/WEB-INF/jsp/map/request.jsp index b78add8..d73f53f 100644 --- a/src/main/webapp/WEB-INF/jsp/map/request.jsp +++ b/src/main/webapp/WEB-INF/jsp/map/request.jsp @@ -65,7 +65,7 @@
- +
diff --git a/src/main/webapp/WEB-INF/jsp/map/requestView.jsp b/src/main/webapp/WEB-INF/jsp/map/requestView.jsp index be16443..335c554 100644 --- a/src/main/webapp/WEB-INF/jsp/map/requestView.jsp +++ b/src/main/webapp/WEB-INF/jsp/map/requestView.jsp @@ -115,6 +115,9 @@
+

+ +

@@ -220,6 +223,9 @@

+

+ +

diff --git a/src/main/webapp/WEB-INF/jsp/map/requestWrite.jsp b/src/main/webapp/WEB-INF/jsp/map/requestWrite.jsp index dd81faf..ff4b45b 100644 --- a/src/main/webapp/WEB-INF/jsp/map/requestWrite.jsp +++ b/src/main/webapp/WEB-INF/jsp/map/requestWrite.jsp @@ -86,6 +86,9 @@
+

+ +

diff --git a/src/main/webapp/js/admin/dashBoard.js b/src/main/webapp/js/admin/dashBoard.js new file mode 100644 index 0000000..acfbf05 --- /dev/null +++ b/src/main/webapp/js/admin/dashBoard.js @@ -0,0 +1,36 @@ +$(function (){ + google.charts.load('current', {packages: ['corechart', 'line']}); + google.charts.setOnLoadCallback(drawMapUseFromDayChart); +}) + +function drawMapUseFromDayChart() { + var dataHeader = [['날짜', '사용량']]; + var chartData = google.visualization.arrayToDataTable(dataHeader.concat(dayMapUseDataList)); + var options = { + legend: { position: 'bottom' } + }; + var chart = new google.visualization.LineChart(document.getElementById('mapUseFromDayChart')); + chart.draw(chartData, options); + /*$.ajax({ + url: "/admin/dayMapUseData", + type: "GET", + data:{ + searchStartDate:"2022-02-18", + searchEndDate:"2022-03-04" + }, + dataType:"json", + success : function(data, textStatus, jqXHR) { + console.log(data); + var dataHeader = [['날짜', '사용량']]; + var chartData = google.visualization.arrayToDataTable(dataHeader.concat(data)); + var options = { + legend: { position: 'bottom' } + }; + var chart = new google.visualization.LineChart(document.getElementById('mapUseFromDayChart')); + chart.draw(chartData, options); + }, + error: function (request, status, error) { + + } + });*/ +} \ No newline at end of file diff --git a/src/main/webapp/js/googleChart/loader.js b/src/main/webapp/js/googleChart/loader.js new file mode 100644 index 0000000..bb94de4 --- /dev/null +++ b/src/main/webapp/js/googleChart/loader.js @@ -0,0 +1,157 @@ +(function(){/* + + Copyright The Closure Library Authors. + SPDX-License-Identifier: Apache-2.0 +*/ + 'use strict';var l;function aa(a){var b=0;return function(){return b>>0)+"_",e=0;return b}); + q("Symbol.iterator",function(a){if(a)return a;a=Symbol("Symbol.iterator");for(var b="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),c=0;c=e}});function na(a,b,c){a instanceof String&&(a=String(a));for(var d=a.length,e=0;e=g}});q("String.prototype.repeat",function(a){return a?a:function(b){var c=v(this,null,"repeat");if(0>b||1342177279>>=1)c+=c;return d}}); + function oa(a,b){a instanceof String&&(a+="");var c=0,d=!1,e={next:function(){if(!d&&cc&&(c=Math.max(c+e,0));cc?Math.max(g+c,0):Math.min(c,g);d=0>d?Math.max(g+d,0):Math.min(d,g);e=0>e?Math.max(g+e,0):Math.min(e,g);if(cd;)--e in this?this[--c]=this[e]:delete this[--c];return this}}); + q("Array.prototype.entries",function(a){return a?a:function(){return oa(this,function(b,c){return[b,c]})}});q("Array.prototype.fill",function(a){return a?a:function(b,c,d){var e=this.length||0;0>c&&(c=Math.max(0,e+c));if(null==d||d>e)d=e;d=Number(d);0>d&&(d=Math.max(0,e+d));for(c=Number(c||0);cb?-c:c}});q("Math.log1p",function(a){return a?a:function(b){b=Number(b);if(.25>b&&-.25b?-c:c}});q("Math.clz32",function(a){return a?a:function(b){b=Number(b)>>>0;if(0===b)return 32;var c=0;0===(b&4294901760)&&(b<<=16,c+=16);0===(b&4278190080)&&(b<<=8,c+=8);0===(b&4026531840)&&(b<<=4,c+=4);0===(b&3221225472)&&(b<<=2,c+=2);0===(b&2147483648)&&c++;return c}}); + q("Math.cosh",function(a){if(a)return a;var b=Math.exp;return function(c){c=Number(c);return(b(c)+b(-c))/2}});q("Math.expm1",function(a){return a?a:function(b){b=Number(b);if(.25>b&&-.25arguments.length)return arguments.length?Math.abs(arguments[0]):0;var c,d,e;for(c=e=0;ce){if(!e)return e;for(c=d=0;c>>16&65535)*e+d*(c>>>16&65535)<<16>>>0)|0}});q("Math.log10",function(a){return a?a:function(b){return Math.log(b)/Math.LN10}});q("Math.log2",function(a){return a?a:function(b){return Math.log(b)/Math.LN2}});q("Math.sign",function(a){return a?a:function(b){b=Number(b);return 0===b||isNaN(b)?b:0b?-c:c}});q("Math.trunc",function(a){return a?a:function(b){b=Number(b);if(isNaN(b)||Infinity===b||-Infinity===b||0===b)return b;var c=Math.floor(Math.abs(b));return 0>b?-c:c}});q("Number.EPSILON",function(){return Math.pow(2,-52)}); + q("Number.MAX_SAFE_INTEGER",function(){return 9007199254740991});q("Number.MIN_SAFE_INTEGER",function(){return-9007199254740991});q("Number.isFinite",function(a){return a?a:function(b){return"number"!==typeof b?!1:!isNaN(b)&&Infinity!==b&&-Infinity!==b}});q("Number.isInteger",function(a){return a?a:function(b){return Number.isFinite(b)?b===Math.floor(b):!1}});q("Number.isNaN",function(a){return a?a:function(b){return"number"===typeof b&&isNaN(b)}}); + q("Number.isSafeInteger",function(a){return a?a:function(b){return Number.isInteger(b)&&Math.abs(b)<=Number.MAX_SAFE_INTEGER}});q("Number.parseFloat",function(a){return a||parseFloat});q("Number.parseInt",function(a){return a||parseInt});q("Object.entries",function(a){return a?a:function(b){var c=[],d;for(d in b)u(b,d)&&c.push([d,b[d]]);return c}}); + q("Object.fromEntries",function(a){return a?a:function(b){var c={};if(!(Symbol.iterator in b))throw new TypeError(""+b+" is not iterable");b=b[Symbol.iterator].call(b);for(var d=b.next();!d.done;d=b.next()){d=d.value;if(Object(d)!==d)throw new TypeError("iterable for fromEntries should yield objects");c[d[0]]=d[1]}return c}});q("Object.getOwnPropertySymbols",function(a){return a?a:function(){return[]}}); + q("Reflect.ownKeys",function(a){return a?a:function(b){var c=[],d=Object.getOwnPropertyNames(b);b=Object.getOwnPropertySymbols(b);for(var e=0;e=arguments.length)return b[c];var e=qa(b,c);if(e)return e.get?e.get.call(d):e.value}});q("Reflect.has",function(a){return a?a:function(b,c){return c in b}}); + q("Reflect.isExtensible",function(a){return a?a:"function"==typeof Object.isExtensible?Object.isExtensible:function(){return!0}});q("Reflect.preventExtensions",function(a){return a?a:"function"!=typeof Object.preventExtensions?function(){return!1}:function(b){Object.preventExtensions(b);return!Object.isExtensible(b)}}); + q("Reflect.set",function(a){return a?a:function(b,c,d,e){var g=qa(b,c);return g?g.set?(g.set.call(3e||56319b||57343e||1114111=e?c+=String.fromCharCode(e):(e-=65536,c+=String.fromCharCode(e>>>10&1023|55296),c+=String.fromCharCode(e&1023|56320))}return c}}); + q("String.prototype.matchAll",function(a){return a?a:function(b){if(b instanceof RegExp&&!b.global)throw new TypeError("RegExp passed into String.prototype.matchAll() must have global tag.");var c=new RegExp(b,b instanceof RegExp?void 0:"g"),d=this,e=!1,g={next:function(){if(e)return{value:void 0,done:!0};var f=c.exec(d);if(!f)return e=!0,{value:void 0,done:!0};""===f[0]&&(c.lastIndex+=1);return{value:f,done:!1}}};g[Symbol.iterator]=function(){return g};return g}}); + function ra(a,b){a=void 0!==a?String(a):" ";return 0a.length?"&":"")+encodeURIComponent(d)+"="+encodeURIComponent(String(f)))}}return b};var Ma=Array.prototype.some?function(a,b){return Array.prototype.some.call(a,b,void 0)}:function(a,b){for(var c=a.length,d="string"===typeof a?a.split(""):a,e=0;e=d.g.length)throw Wa;var g=d.g[b++];return a?g:d.h[g]};e.next=e.g.bind(e);return e};function Q(a,b){return Object.prototype.hasOwnProperty.call(a,b)};var ab=/^(?:([^:/?#.]+):)?(?:\/\/(?:([^\\/?#]*)@)?([^\\/?#]*?)(?::([0-9]+))?(?=[\\/?#]|$))?([^?#]+)?(?:\?([^#]*))?(?:#([\s\S]*))?$/;function bb(a,b){if(a){a=a.split("&");for(var c=0;cb)throw Error("Bad port number "+b);a.v=b}else a.v=null}function fb(a,b,c){b instanceof R?(a.i=b,nb(a.i,a.l)):(c||(b=ib(b,ob)),a.i=new R(b,a.l))} + function hb(a,b){return a?b?decodeURI(a.replace(/%25/g,"%2525")):decodeURIComponent(a):""}function ib(a,b,c){return"string"===typeof a?(a=encodeURI(a).replace(b,pb),c&&(a=a.replace(/%25([0-9a-fA-F]{2})/g,"%$1")),a):null}function pb(a){a=a.charCodeAt(0);return"%"+(a>>4&15).toString(16)+(a&15).toString(16)}var jb=/[#\/\?@]/g,lb=/[#\?:]/g,kb=/[#\?]/g,ob=/[#\?@]/g,mb=/#/g;function R(a,b){this.h=this.g=null;this.i=a||null;this.j=!!b} + function S(a){a.g||(a.g=new Za,a.h=0,a.i&&bb(a.i,function(b,c){a.add(decodeURIComponent(b.replace(/\+/g," ")),c)}))}l=R.prototype;l.add=function(a,b){S(this);this.i=null;a=T(this,a);var c=this.g.get(a);c||this.g.set(a,c=[]);c.push(b);this.h+=1;return this};function qb(a,b){S(a);b=T(a,b);a.g.has(b)&&(a.i=null,a.h-=a.g.get(b).length,a=a.g,Q(a.h,b)&&(delete a.h[b],--a.size,a.i++,a.g.length>2*a.size&&$a(a)))}function rb(a,b){S(a);b=T(a,b);return a.g.has(b)} + l.forEach=function(a,b){S(this);this.g.forEach(function(c,d){c.forEach(function(e){a.call(b,e,d,this)},this)},this)};l.G=function(){S(this);for(var a=this.g.H(),b=this.g.G(),c=[],d=0;da.h&&(a.h++,b.next=a.g,a.g=b)};var yb; + function zb(){var a=A.MessageChannel;"undefined"===typeof a&&"undefined"!==typeof window&&window.postMessage&&window.addEventListener&&-1==L.indexOf("Presto")&&(a=function(){var e=ub(document,"IFRAME");e.style.display="none";document.documentElement.appendChild(e);var g=e.contentWindow;e=g.document;e.open();e.close();var f="callImmediate"+Math.random(),h="file:"==g.location.protocol?"*":g.location.protocol+"//"+g.location.host;e=D(function(k){if(("*"==h||k.origin==h)&&k.data==f)this.port1.onmessage()},this); + g.addEventListener("message",e,!1);this.port1={};this.port2={postMessage:function(){g.postMessage(f,h)}}});if("undefined"!==typeof a&&-1==L.indexOf("Trident")&&-1==L.indexOf("MSIE")){var b=new a,c={},d=c;b.port1.onmessage=function(){if(void 0!==c.next){c=c.next;var e=c.P;c.P=null;e()}};return function(e){d.next={P:e};d=d.next;b.port2.postMessage(0)}}return function(e){A.setTimeout(e,0)}};function Ab(a){A.setTimeout(function(){throw a;},0)};function Bb(){this.h=this.g=null}Bb.prototype.add=function(a,b){var c=Cb.get();c.set(a,b);this.h?this.h.next=c:this.g=c;this.h=c};function Db(){var a=Eb,b=null;a.g&&(b=a.g,a.g=a.g.next,a.g||(a.h=null),b.next=null);return b}var Cb=new wb(function(){return new Fb},function(a){return a.reset()});function Fb(){this.next=this.g=this.h=null}Fb.prototype.set=function(a,b){this.h=a;this.g=b;this.next=null};Fb.prototype.reset=function(){this.next=this.g=this.h=null};function Gb(a,b){Hb||Ib();Jb||(Hb(),Jb=!0);Eb.add(a,b)}var Hb;function Ib(){if(A.Promise&&A.Promise.resolve){var a=A.Promise.resolve(void 0);Hb=function(){a.then(Kb)}}else Hb=function(){var b=Kb;"function"!==typeof A.setImmediate||A.Window&&A.Window.prototype&&-1==L.indexOf("Edge")&&A.Window.prototype.setImmediate==A.setImmediate?(yb||(yb=zb()),yb(b)):A.setImmediate(b)}}var Jb=!1,Eb=new Bb;function Kb(){for(var a;a=Db();){try{a.h.call(a.g)}catch(b){Ab(b)}xb(Cb,a)}Jb=!1};function Lb(a){if(!a)return!1;try{return!!a.$goog_Thenable}catch(b){return!1}};function U(a){this.g=0;this.s=void 0;this.j=this.h=this.i=null;this.l=this.o=!1;if(a!=C)try{var b=this;a.call(void 0,function(c){V(b,2,c)},function(c){V(b,3,c)})}catch(c){V(this,3,c)}}function Mb(){this.next=this.i=this.h=this.j=this.g=null;this.l=!1}Mb.prototype.reset=function(){this.i=this.h=this.j=this.g=null;this.l=!1};var Nb=new wb(function(){return new Mb},function(a){a.reset()});function Ob(a,b,c){var d=Nb.get();d.j=a;d.h=b;d.i=c;return d} + U.prototype.then=function(a,b,c){return Pb(this,"function"===typeof a?a:null,"function"===typeof b?b:null,c)};U.prototype.$goog_Thenable=!0;U.prototype.cancel=function(a){if(0==this.g){var b=new Qb(a);Gb(function(){Rb(this,b)},this)}};function Rb(a,b){if(0==a.g)if(a.i){var c=a.i;if(c.h){for(var d=0,e=null,g=null,f=c.h;f&&(f.l||(d++,f.g==a&&(e=f),!(e&&1=b.v&&b.cancel())}this.J?this.J.call(this.I,this):this.C=!0;this.i||(a=new ac(this),bc(this),cc(this,!1,a))}};W.prototype.D=function(a,b){this.s=!1;cc(this,a,b)};function cc(a,b,c){a.i=!0;a.h=c;a.j=!b;dc(a)} + function bc(a){if(a.i){if(!a.C)throw new ec(a);a.C=!1}}function fc(a,b,c,d){a.l.push([b,c,d]);a.i&&dc(a)}W.prototype.then=function(a,b,c){var d,e,g=new U(function(f,h){e=f;d=h});fc(this,e,function(f){f instanceof ac?g.cancel():d(f)});return g.then(a,b,c)};W.prototype.$goog_Thenable=!0;function gc(a){return Ma(a.l,function(b){return"function"===typeof b[1]})} + function dc(a){if(a.o&&a.i&&gc(a)){var b=a.o,c=hc[b];c&&(A.clearTimeout(c.g),delete hc[b]);a.o=0}a.g&&(a.g.v--,delete a.g);b=a.h;for(var d=c=!1;a.l.length&&!a.s;){var e=a.l.shift(),g=e[0],f=e[1];e=e[2];if(g=a.j?f:g)try{var h=g.call(e||a.I,b);void 0!==h&&(a.j=a.j&&(h==b||h instanceof Error),a.h=b=h);if(Lb(b)||"function"===typeof A.Promise&&b instanceof A.Promise)d=!0,a.s=!0}catch(k){b=k,a.j=!0,gc(a)||(c=!0)}}a.h=b;d&&(h=D(a.D,a,!0),d=D(a.D,a,!1),b instanceof W?(fc(b,h,d),b.L=!0):b.then(h,d));c&&(b= + new ic(b),hc[b.g]=b,a.o=b.g)}function ec(){F.call(this)}va(ec,F);ec.prototype.message="Deferred has already fired";ec.prototype.name="AlreadyCalledError";function ac(){F.call(this)}va(ac,F);ac.prototype.message="Deferred was canceled";ac.prototype.name="CanceledError";function ic(a){this.g=A.setTimeout(D(this.i,this),0);this.h=a}ic.prototype.i=function(){delete hc[this.g];throw this.h;};var hc={};function jc(a){var b;return(b=(a||document).getElementsByTagName("HEAD"))&&0!==b.length?b[0]:a.documentElement}function $b(){if(this&&this.U){var a=this.U;a&&"SCRIPT"==a.tagName&&kc(a,!0,this.W)}}function kc(a,b,c){null!=c&&A.clearTimeout(c);a.onload=C;a.onerror=C;a.onreadystatechange=C;b&&window.setTimeout(function(){a&&a.parentNode&&a.parentNode.removeChild(a)},0)}function lc(a,b){var c="Jsloader error (code #"+a+")";b&&(c+=": "+b);F.call(this,c);this.code=a}va(lc,F);/* + + Copyright 2021 Google LLC + This code is released under the MIT license. + SPDX-License-Identifier: MIT +*/ + function mc(a){return Ka(a.format,a.ba,a.ya||{})} + function nc(a){var b={timeout:3E4,attributes:{async:!1,defer:!1}},c=b.document||document,d=Ca(a).toString(),e=ub((new vb(c)).g,"SCRIPT"),g={U:e,W:void 0},f=new W(g),h=null,k=null!=b.timeout?b.timeout:5E3;0