commit 5118436ee65a704bd8dffb9b0864432c01a36139 Author: Jeff Thomas Date: Wed Aug 11 08:27:46 2021 +0200 adding the code form moose into the repo diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2aaf010 --- /dev/null +++ b/.gitignore @@ -0,0 +1,19 @@ +*.sw? +.#* +*# +*~ +.classpath +.project +.settings +bin +build +target +dependency-reduced-pom.xml +*.sublime-* +/scratch +.gradle +README.html +*.iml +.idea +out +/configuration/tmp/tomcat-orbeon.zip diff --git a/README.md b/README.md new file mode 100644 index 0000000..40c7f4d --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +Source code from Moose for the integration module between Orbeon and Bluedb diff --git a/configuration/META-INF/context.xml b/configuration/META-INF/context.xml new file mode 100644 index 0000000..87b1b23 --- /dev/null +++ b/configuration/META-INF/context.xml @@ -0,0 +1,42 @@ + + + + diff --git a/configuration/WEB-INF/resources/apps/fr/icons/icoca.png b/configuration/WEB-INF/resources/apps/fr/icons/icoca.png new file mode 100644 index 0000000..3d47c22 Binary files /dev/null and b/configuration/WEB-INF/resources/apps/fr/icons/icoca.png differ diff --git a/configuration/WEB-INF/resources/apps/fr/js/attachments.js b/configuration/WEB-INF/resources/apps/fr/js/attachments.js new file mode 100644 index 0000000..1dd32e2 --- /dev/null +++ b/configuration/WEB-INF/resources/apps/fr/js/attachments.js @@ -0,0 +1,65 @@ +if (ORBEON.jQuery(".fr-mode-edit").length != 0 || ORBEON.jQuery(".fr-mode-view").length != 0) +{ + var xhttp = new XMLHttpRequest(); + var url = document.URL; + var documentId = url.substring(url.lastIndexOf("/")); + xhttp.withCredentials = true; + xhttp.open("GET", "http://192.168.0.167:18080/integration/rest/form/issubmitted/" + documentId, true); + xhttp.setRequestHeader("Content-type", "application/json"); + xhttp.onload = function (e) + { + var disableSubmit = (xhttp.responseText == 'true') + if (disableSubmit) + { + //Below is for submision button + ORBEON.jQuery("#fr-view").find('.fr-submit-button').find('.btn').each(function (i) + { + ORBEON.jQuery(this).attr("disabled", "true"); + }); + } + } + xhttp.send(); + + var xhttp2 = new XMLHttpRequest(); + var url = document.URL; + var documentId = url.substring(url.lastIndexOf("/")); + xhttp2.withCredentials = true; + xhttp2.open("GET", "http://192.168.0.167:18080/integration/rest/form/hasremovedattachments/" + documentId, true); + xhttp2.setRequestHeader("Content-type", "application/json"); + xhttp2.onload = function (e) + { + var hideDownloads = (xhttp2.responseText == 'true') + if (hideDownloads) + { + //Below is for download attachment icon + ORBEON.jQuery("#fr-view").find('.xforms-output-output').each(function (i) + { + if (ORBEON.jQuery(this).text().trim() == "Download") + { + ORBEON.jQuery(this).attr("style", "visibility: hidden"); + } + + }); + //Below is for remove attachment icon + ORBEON.jQuery("#fr-view").find('.xforms-upload-remove').each(function (i) + { + ORBEON.jQuery(this).attr("style", "visibility: hidden"); + }); + // Below is for upload file control + /* + ORBEON.jQuery("#fr-view").find('.xforms-upload-select').each(function(i) { + ORBEON.jQuery(this).attr("style", "visibility: hidden"); + }); + */ + } + } + xhttp2.send(); + +} + +function hideSubmit() { + ORBEON.jQuery("#fr-view").find('.fr-submit-button').find('.btn').each(function (i) + { + ORBEON.jQuery(this).attr("disabled", "true"); + }); +} \ No newline at end of file diff --git a/configuration/WEB-INF/resources/apps/fr/style/style.css b/configuration/WEB-INF/resources/apps/fr/style/style.css new file mode 100644 index 0000000..da03ec6 --- /dev/null +++ b/configuration/WEB-INF/resources/apps/fr/style/style.css @@ -0,0 +1,313 @@ +.fb-main-inner .navbar { + display: block !important; +} + +#fr-view.fr-mode-new .xforms-control input[type=text], +#fr-view.fr-mode-edit .xforms-control input[type=text], +#fr-view.fr-mode-new .xforms-control select, +#fr-view.fr-mode-edit .xforms-control select, +#fr-view.fr-mode-new .xforms-control input[type=file], +#fr-view.fr-mode-edit .xforms-control input[type=file], +#fr-view.fr-mode-new .fr-autocomplete-container, +#fr-view.fr-mode-edit .fr-autocomplete-container, +#fr-view.fr-mode-new .xforms-control .xbl-fr-number-visible-input, +#fr-view.fr-mode-edit .xforms-control .xbl-fr-number-visible-input { + display: inline-block !important; + width: 40% !important; + vertical-align: top !important; + margin-top: 0 !important; +} + +.xforms-group input[type=text] { + vertical-align: top !important; +} + +.xforms-control select { + margin-left: -4px; +} + +#fr-view.fr-mode-new .xforms-label, +#fr-view.fr-mode-edit .xforms-label { + display: inline-block !important; + width: 30% !important; +} + +#fr-view.fr-mode-new .xforms-label-50pr label, +#fr-view.fr-mode-edit .xforms-label-50pr label { + display: inline-block !important; + width: 50% !important; +} + +#fr-view.fr-mode-new .xforms-label-100pr label, +#fr-view.fr-mode-edit .xforms-label-50pr label, +#fr-view.fr-mode-new .xforms-label-100pr .xforms-label, +#fr-view.fr-mode-edit .xforms-label-100pr .xforms-label { + display: inline-block !important; + width: 100% !important; + margin-bottom: 12px !important; + line-height: 20px !important; +} + +#fr-view.fr-mode-new .xforms-label-100pr .xforms-control input[type=file], +#fr-view.fr-mode-edit .xforms-label-100pr .xforms-control input[type=file] { + display: inline-block !important; + width: 100% !important; +} + +#fr-view.fr-mode-new .centered, +#fr-view.fr-mode-edit .centered { + text-align: center; + margin-left: auto; + margin-right: auto; + background-position: 50% 0 !important; +} + +#fr-view.fr-mode-new .big-logo, +#fr-view.fr-mode-edit .big-logo { + background-image: url(data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/4QCYRXhpZgAATU0AKgAAAAgABQEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAAExAAIAAAAMAAAAWodpAAQAAAABAAAAZgAAAAAAAABIAAAAAQAAAEgAAAABR0lNUCAyLjguMTAAAAOQAAAHAAAABDAyMTCgAAAHAAAABDAxMDCgAQADAAAAAf//AAAAAAAA/+ECxGh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSfvu78nIGlkPSdXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQnPz4KPHg6eG1wbWV0YSB4bWxuczp4PSdhZG9iZTpuczptZXRhLyc+CjxyZGY6UkRGIHhtbG5zOnJkZj0naHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyc+CgogPHJkZjpEZXNjcmlwdGlvbiB4bWxuczpleGlmPSdodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyc+CiAgPGV4aWY6WFJlc29sdXRpb24+NzI8L2V4aWY6WFJlc29sdXRpb24+CiAgPGV4aWY6WVJlc29sdXRpb24+NzI8L2V4aWY6WVJlc29sdXRpb24+CiAgPGV4aWY6UmVzb2x1dGlvblVuaXQ+Q2FsPC9leGlmOlJlc29sdXRpb25Vbml0PgogIDxleGlmOlNvZnR3YXJlPkFkb2JlIEltYWdlUmVhZHk8L2V4aWY6U29mdHdhcmU+CiAgPGV4aWY6RXhpZlZlcnNpb24+RXhpZiB3IHdlcnNqaSAyLjE8L2V4aWY6RXhpZlZlcnNpb24+CiAgPGV4aWY6Rmxhc2hQaXhWZXJzaW9uPkZsYXNoUGl4IHcgd2Vyc2ppIDEuMDwvZXhpZjpGbGFzaFBpeFZlcnNpb24+CiAgPGV4aWY6Q29sb3JTcGFjZT5CxYLEhWQgd2V3bsSZdHJ6bnkgKG5pZXpuYW5hIHdhcnRvxZvEhyA2NTUzNSk8L2V4aWY6Q29sb3JTcGFjZT4KIDwvcmRmOkRlc2NyaXB0aW9uPgoKPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KPD94cGFja2V0IGVuZD0ncic/Pgr/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wgARCABDAMgDAREAAhEBAxEB/8QAHQAAAgIDAQEBAAAAAAAAAAAAAAUEBgIDCAEHCf/EABsBAQACAwEBAAAAAAAAAAAAAAAEBQEDBgIH/9oADAMBAAIQAxAAAAH4v0nIurCskbdAeYzX6y4gx5IdkQrH6tX2oAAAAAAAAAH589VxLefWh6VeovVEKeAdrad7aBagzNBgTRCPTUZkQvIAAHAvY8DLkRQgx5dPo+hAA7W072UC1liYYmwRm0cgJTafUQAAPz06jjXljUgphWNXqLsADtbTvvUC1kDUgk4CKeFaLcZAQiaYGB+dF7zO33rsFnUbveup01/AjygDtbTvssC1WCs3iA+iFBLyPSkCwzIY5JQ9OCr7mV8aUEnbpmb45jMbVu0+NnaEeXfq+0wAjGQ1FpYCrE0lEUjm09J5xXc8/wCRZngp9eGWPTTz7S+vGrOOnfOX0C1YGs9PSMbxIOD0s5IAAA4XueexjTZWM+sS8ZzxmPnGnOOiGHkC1RGRuMyeVUfGsfjIegAAcF9t88xZAAAA6k5zqvqVZcAAAAAAAAAAf//EACkQAAICAgEDBAEEAwAAAAAAAAMEAgUBBgAHEBMRFCA2FhIVNEAhIzP/2gAIAQEAAQUCaaLBgGJ4h2zn0wxY59ffH574/OmufXW/6EBfrf7vN+WXfpn9ZLfZrrSz2M61fG8JnH5QIky7RGA3L72sm783uJXefJHZRslhsGGBBuJPW3xF/wBuzpPEv8Omf1lumZLb3dQewOaoMRukpjovlqGZa6/TOOYNUvkUXE7TmoaU9W1+0uhPR0jaVl8fP4X+1lj/AEfDpn9ZduApGr7MNlHjLg1JdmmRpLLMYZBnaU8QxnEsdoODm3yc8DgE0GAv/wApZ+QeCZGXhIYJA6ZA579M/rNR6Yu7lwWbC5KTW5WlWOtcRYdLWXs5yNtCuFE9gUkHVcHU/a60Irw9b5raxTyRl8sM1uw7HZHUsbCnAqLWARX19/8AldoMlHzFkXHJO4nzJRZ5nMOdM/rT1QrYzhSIwRVpU1OA1yvWJHXkIMuJBsAQoUYL8zrFbkjtKo+UFcstM1IkeONdrsBDQog4pRppTRRDXL6ukCx3Khqk5kNb09shXayRxGt1AxdqHfUB2tWrFmrbcK0KNl0z+s7I076/kAZqfkUM4/IRyh+RAwE13ifJbEOEx3xjnJsoR4NscIGXPBoHx1uxBU7fRXSi5pQpKSuCzX3Wvn28Km1rra1Xv1+yL09FcbAvfa50z+sxoc2FnilMjHFe34kk7FBmdc8Wwbg/bcaqXmkjVrk2vaPr0tZWkSxRLESo/jIUJZ8A+eAfPAPngHzwD54B88A+dOP8a/8A0P/EAC0RAAEDAAgGAgEFAAAAAAAAAAEAAgMEBRESEyEzQBAgMUFScRQiUSMyYYGh/9oACAEDAQE/AYII3RBzgpiwu+gy4gW5BQ0MAWyL40X4XxovwquyiI/k7F0l2jNaO/JRoMMXndeSrtN3s7GTTZxorL8mfLV2m72djhYlGFnUcaCf1OWrtN3s7Gi6IU1FbJm3Ip8EkfUJjyx14KKkMk98lXabvZ2NF0RxdDG/qEaHEUKMW/teUGSeX+Kx3cqr9N3s7GgC1jQU1ozceyLmuGYQjtFqEX3ulX2E2EZKNott7KVthtCq7Td7OxoBDWNJTXDMHuvqwHuhdc0AlGSx4IQuA3rUHhrU54e1Vfpu9nY4j25ArGk8ljSeSxpPJY0nksaTyWNJ5LGk8lVecH97H//EACoRAAECAgoCAgMBAAAAAAAAAAEAAgMEERITISIxMkBRcRAgFDMFQmGB/9oACAECAQE/AYsaI2IWtKhhwGM3+SaM1FmjkxfIicr5EXlTxpiA/wAGxaytHJ49JiNXNUZek7rHQ2MPW7zMPqM9Z3WOhsbSpHNPmbGD1ndY6GxmPtKhTBh3HJMisfkU5oeKpUSA+H6TusdDYzH2Hy2K9uRQmoiMcO1NCLmH9Vh4U7rHQ2M4aHOTibgFVc03FF9FyMTDWCquzpTyQEw0igqd1jobGcFLnAJzTcQsTjwr2uJCqYaCsZFFCLaSmtLXKd1jobGo03kKyZwrJnCsmcKyZwrJnCsmcKyZwvyH3f5sf//EADwQAAIBAwEEBgkCBAYDAAAAAAECAwAEERITISJRBRQxMkFhECAjQnFzgZGxUqEzQILBFSREU2JyktHx/9oACAEBAAY/Aiqtu5Yr2jam9OT2ViLs513/ANq7/wC1ZP8Aun8D+RkY+76mhe4P39QfMP4FdICbaTRB4I4o0GTlga6SxaPBewWzTorEEYweL6VDEtlJLdtHtHiBHAPM+dQxQW081xKrHZYAK6WwwblirqYWc721o7JPLu4dPaQPGrkpZzTw2wzNKuBjdndz3V0omiSOzistus8eMjcx1CmitrWa8MKjasuBjIzjf2mo47O3ku3khE4xwjTnG/PZUPV7SaWZy4MW4aCpw2T8asVTXChE6zQt4Oun/wB+tP8AEelsdp3eqPmH8CpZ1UbNri3kG/wUHP5q82enTN0fJbAk+8aS8msZZNcCxNFFclGQrnkQCN9JO8KQqYnyquWwS+e09px4103aaRtrrrOzGe3XnTV/DNbG6aYFYJXn9lGunHc8jnwq7j6uM3PRnVu+OGQKwx+9XWytOtx3DCUYcLpbSFIOfDhrVKVYbDDMv6y7O304qbaQSXNo0sz7GGfZ72fIJ57qjeS3jghR53xG2Rx6Mfg+s+e63pHx9UfMP4FCDTLPcEatlAupsc6cxag0Z0vG40sh8x6IBIcGaTZJ8cE/29MtxM2iKJS7tyApZdLxg+EgwRRl0Tm0H+rER2Xxzy86BByD4+mS2B9rGocjyP8A89DOxwqjJNJLG2qNwGVuYp60txLXC30oqew12al5j1B8w/gV00r/AMYyIw+XoGP31ULSAmCeaWKG5uY9xCkMQM892P6qlWynk0SWzviaQy7IgqNfFn9R+1dCGO4uHJu+JZpmk2ns337z+Ks+lNFyLqUxyNK917EhmGU0Zxjfgbs5ro+0ErwRXM2mR420tgKTpB8M4rpWySadrY2Dz6Gnc6GG7tznB5dm6ukILbauRbuBqdnc7t+8781tg0fUNlqz7mzx+MVKGNxbWsEUQgto5Wh0KUzk6T2+H0qG3uLueSCOOZDokKbbTLpVjp8qHRclzP1VLiYZ2pDuFCELr7ffP2qSKG5lK7W1HFISVBL8Oe0j406Q3Bi/yyAnO6PVMq68eQJqSNb26USwSaoXuZGMmBnVnVkfTnXR4UucwI3G5f3Rzp/Tuc17p+lcUKGv4OPg1d0/+VD5p/ApHmQ7VNyyxu0bj+pSDT2gt12DnLKd+o8ye3PnUumMuZRpdp5GlZhyyxO7yqORYWLRHMe0ld9n/wBcnd8BW2EJyH2gTaNsw36tGdOfPFGG4jEidvwPMcquIdkZEuF0ymWRnZxyLE59Grq/Dq17HaNss89nnT+1CWVHEmNOuKVoyRyOkjIqNooVjMceyTTuwvKnDQ96TbalcqwfGMgjePpUsfV8iXGss7Fmx2HVnOfPtqT2O0MibN2mdpC68iWJzRaONixXRmWRpML+kaicDyFLBbqUiXsXUTj71a29zGJoXzqRvHgNdK397GZbOw37BTjWxOFHwq6Sfo2Ho26Vc28loDhj+lh/eheT3dvYWztoje4Y8Z8sVF0Td+z993Q5ymM5FNazdCxQdGnKrcRZ268mz41PLcDbdHWUbzyZ3awOwfWkmtE0WN3Es8I5AjeKHzD+BUVr0Y+m70tOd2cqvu/1HAqxmhjedrxdUUSdp3ZP2pEW2na6ZmTq+MMNOM+XiPvUYS3na5dmXq2nDjHbny86YtHKtwJBF1bT7TUd4H235pY3WexmWaJShUHIZt30NZNvP1Xa7DrOOHVq0/HGd2au0mWa1SK9ihRgo3508J+/71JLsJmso2KvdAcAxuJ54HOruOK1uLjqhxMY13DhDfXcajmibVHIodW5g+tbXVy+iCPOpsZ9010naXurqF+CDIgyUOcq2KvNFzH0veTps4vY8MX/AC3+NWNlc3o6PnsmbBdCyurHPh41ZXtorS2lnCttxbmkQDBNHpA33XbVcslg0PEeStndVzsIreS+vLjMkEkWY0j8Bj41AsyxW9/ay4SOGPSpjND5h/Aq9vLxriIkiKEQXLx+zH/UjtJNNaNY9e6NjmLxcftkDb9xzncdXnvodasZLu02rNEjy5uYRgY48/HxzSXrQy3CDXGIHkDTJGcEb/HeD4+Ir/GOr4lWRdNqWGoxhSPhq4qQ9W2EKXELqjkazh8saKS2U1xfrMsrTST+zIEgbgGcDcOzAq6AtzokvoLpX1DGkaM/XhqfoZLQuWDxR3OobPQ2eI+OQD2V0mhHDI42Zz2jZKv9q6Pt5Rplit40cciFGfWyVBPwruL9q7i/au4v2ruL9q7i/au4v2ruL9qPzm/A/kf/xAAnEAEBAAICAQMEAgMBAAAAAAABEQAhMUFREGFxIIGx8ZHwQKHB0f/aAAgBAQABPyGX7QIOD9jt1x6gyQcrjOEO/ef2DP7BjHsVX/BRFUBPmfQiL5E7fSbk/NYON+UMIHnFjCrGjZgSoEZWDSewyWqEoKQsp/yXBfFmCnMUBtnWNQDSA2yvHbWUbYTT1B5daE5N5SlFNoAUaUYeTNE6Bgls5KJPOOzOesuZhNO7mucO6kxnipPP1T73/D1VGmh9RtNtod5v4sjscG59X2y0VjRod5fwwTFb+cBVYC8LgIrdL2T1yYsWgYwgalo5L58CcvaqBeRRsw8uFc+zmGnnDqBYaTgPBU9sXFo22s9J4RdeMNIEhAoHuSffff1SNyAvjXqy3Rv9RvqNWp5ug+XEsrX8pE/T6PECgWv8Beo2XQ6VXBKVX+fjrADypCP5PsTuzDLCoOE9U8aNa2T8vS/KEdBzgCC04Qo5+B+MAPZ/JgOm+WnBX0TFW30kbemKbywT7TnR76Bz+q1dnDcw6lISNCpACJY/fgdjiojsUfsN/GR4i+dAKhFoju1cQGiQJ2lyNwZg0s7S8bWttqumaMyFaouqLK+MGICRmEYIL6CIA+C8Xi5Z3mNhG43OW9ayMXqlUw2HkqCvOaJH9mhto5iefEy7q2RWbaqFfHjCwgICUHSd6CQ4L6avVRi1D24Os/A/HpxnCc8LTOe+7jl9895/2RxfB/17eiOeeIMXkID2uKt3arlsaoNm6N4L8vuA1OTymEaY/AEgaYvAe2HD2W9NjUpsVceAUhUQ2IbR0m8d+su9lEyPnXo2TqgN3a5N3gEBv5X74A0zTu1YvYOOsZsN01FULANjO0fsJVVou9+BvWMIa7pnaA+c/vvTdIoGaertC8FMPbgx1tdRCH+wwR5o5OS8lTP/AHJG/AwjzJJPkAXXnH3l0Aco+/A5TpwGXZW3GvfvNWzB0z8VTWR9F/H+oW/z6G9unokHSvFaeLmtb+kuRUDbdzbXMlQTVdJuu4yaDHYPOYCnKNMuDJewoDhGtkg+MHSrWSNqjsFNmTFApEv034JMfqkHB7jyuvQMkfN+q7VINBCPjJ6UDR2CvwDeDcOLoUf4fqrum4ikaPdMQYyNN7w31gnFTQLzfGeJxnJ/bQYPA9YE2lNI9g7p8Zugh26PgBefbFlFQE74By0dTG4djvbhwR9DekAkxeXeqb9su1/2gbOaWt0H3xwl+Q/A2u/MBN+LjubWat37KZsZkw5yUjbYqgvBLvHn1SJEmKBODnnDi3EQZfckaHb5owEdJB5sVgq792iBvYI2nvm2yzBTqfu83i3WxAvyfVVOduP0TP0TP0TP0TP0TP0zP0zADNB/gz//2gAMAwEAAgADAAAAENNsNtJJJJJJJJ5kEkwAIBBJJJNtEknIIAJBJJJNokk4JJJJJBBF+ukmJJJIIAJIFtCSIIBAJIAAA3SlXJJAJBJJI4D+oxAABBJJJJJJJBJJJJJJJJ//xAAmEQEAAQMCBgIDAQAAAAAAAAABABEhMUBhEEFRcZHBsfAgodHh/9oACAEDAQE/EL2C9W8VFId78UYFVmQL06T71n3rCBYPVoUzCrxX8Do1360qi1eVH54iZgX0yq2858zHABDzNMr6e8rPqGMcrqXhLKQPNOhlNIr6e/HAbFLVOz/ZiZAdfcf2A4PH+6LRFLX9ytLaF5QeVI1agbxkRLBP2iGriAGFvolYTL+4dwYbU1MVGCQcALQZ4dKRwhVXG0IjZPjRaCV4G83HmbjzNx5m48zceZuPM3XmNVc1etD/AP/EACURAQABAwMEAgMBAAAAAAAAAAEAESExQGGREEFRsYGhIHHw4f/aAAgBAgEBPxC0AtSHWp1AKq0Q4TzP50n8aREsuhATxRz+CVGz70rqPlPXVFTLbTOoOrNOqJTs6Z3o+oVl+0FgxwMQxU8mld6frrY3gs0fiZBTwz5YvYuf8lFvQzKNpRZTAC4d6wlQVYA4USi76gkMsfuBbROXOLRhkEsKlBEIqjBryN4uBPmsUxbBLKuOicvoF/U2fE2fE2fE2fE2fE2fE2fEAAPDQ//EACUQAQEAAgEDBAMAAwAAAAAAAAERACExQVFhECDB8HGBkUCh0f/aAAgBAQABPxB5wISKh475d/RIDxIb9QgEqIB3cWqM2VfwHpn2/wDHPt/44+1cd1Z/waNGh7hP56y5IK0RwfB7ZnFSTMeOrM2wZsK5OwRmyBAPr8S3FZbD0ksVCjVjZM0JFacYk0rUboI5DW/8uKQ5k1wqJk4yQWMSWouGwFdZXjaLixGgdQaUcPore1RBGZAWS5tQUCwDiLjLCQjl0BgqKMgRHqGt5ISaJlJQ7CUQvg9qgO7/AJ9VS02Ol5f5fdMKtHQSrO4wOuPsEui0jnRq4lh3VZ0AVtbBrbnOZe0lfe0IMAloeKw1B5Dd2wfv0L9eqI0UYIYni0VjUh4K1G6Z++JB49AVoImjAEanmMWwMnoOMEkracg/XtB1piBJ7SWWgqMPI9wxmjnCiPqKdi/ofdMH0ottTnFIghUZY5o5k2UG0KIiUNi+gfoB4QHsV3x59SBE2oxMbYCw3lLJmEFN/hd9ExyiMoFjPY8yp8jDQIdqNiJyPqgawmBSx6t0ehYOEYap/AOcSZJXCvREf3n1PDDqR1tr8PU8YGpfV/0OLSanc8nkxwC+BuvJ09sxVASc453EHargmxZDMXe+OEKEsdXMuGtoFqpLSxJM43qQ21LapAAaLrBW1iMCBqvA0AolsgCguSULShCSvAGAqsK5JjEFYo1BvIpGoODOlTmgVe3h4mMNrRKEqEBJIFuPsHD7hymKYEmrEKxYany2jxigBYu229hSABDhwAEhOtl/afwTrocNi0Q4VDnNCSQx4rWdMAZeCgaAaz6nh6CqmnDgIcf6g0yUHyyX+Jm5/Oh/UuUkb+jY5Qt+Q5hmQ0jgAHwi2ll8uh7Y2dzryUasDCoUE4l10yl9/uB1hmpgqCic1Dh6CKoKSOkrfkCi2twID9iNSEgVAdiYpSCIyg8IBrTJiUzsotBFFuobu+d5v5tLG161b7HW8iTKaHRdCh4uucVshFlD8bGhTq1wADuL9DADSYaIs9hrW+nmBsFCGsXZ4NV52Z12A1owHRR/IB0CAAYAAGDzPqlTRHSP1juL6B0r3BN7OQR0VHdG85EEKkW6iOgxUZFpiioA74M3WudcuIQg0tRiZD0VkhupREsQ5QI0XRVIxi1M/wAEwLTbVDQa7OjpB09JjxruTUTBBAtgmMcjBiI02yIFCOucB4FFyIUUhRoXcDt2ph6QfiMJbm/g6KUAoABtF2woDwPRBShRy8Mx4UolCNqVIbt2bxiYn1zu5oEGJswcLWpnBoUcpWJxREolAFG4u3R1xeJg2JpvCD+/clZkSDrQrpa75WnJkQvIELy0ecaV4zW3Ugu4pHlwEhKdRoFGJREmzIRseR1HkJGbNlcvjb5rC5MbaYU77l7nulVTgFANcRG1L6kCqDUpbZ6TJFLw1oZlBWgcdmK6D8mdPBU0EWYqpcBZzIJoAiqJh8VTtgXnYAkVWIUxjWrFIRkbQVJh/sJnmJDlItUoTFillYCG2HdvBlNOIzzVXkiJFyCMqic9DQ6ddlDWU5Rr7DLvteuFuAwmGjTEKe5JzcErn374z798Z9++M+/fGffvjPt3xn274wTgABwH+Cf/2Q==) !important; + background-repeat: no-repeat !important ; + height: 80px !important; +} + +#fr-view.fr-mode-new .small-logo, +#fr-view.fr-mode-edit .small-logo { + background-image: url(data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/4QCYRXhpZgAATU0AKgAAAAgABQEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAAExAAIAAAAMAAAAWodpAAQAAAABAAAAZgAAAAAAAABIAAAAAQAAAEgAAAABR0lNUCAyLjguMTAAAAOQAAAHAAAABDAyMTCgAAAHAAAABDAxMDCgAQADAAAAAf//AAAAAAAA/+EEt2h0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSfvu78nIGlkPSdXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQnPz4KPHg6eG1wbWV0YSB4bWxuczp4PSdhZG9iZTpuczptZXRhLyc+CjxyZGY6UkRGIHhtbG5zOnJkZj0naHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyc+CgogPHJkZjpEZXNjcmlwdGlvbiB4bWxuczpleGlmPSdodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyc+CiAgPGV4aWY6WFJlc29sdXRpb24+NzI8L2V4aWY6WFJlc29sdXRpb24+CiAgPGV4aWY6WVJlc29sdXRpb24+NzI8L2V4aWY6WVJlc29sdXRpb24+CiAgPGV4aWY6UmVzb2x1dGlvblVuaXQ+Q2FsPC9leGlmOlJlc29sdXRpb25Vbml0PgogIDxleGlmOlNvZnR3YXJlPkFkb2JlIEltYWdlUmVhZHk8L2V4aWY6U29mdHdhcmU+CiAgPGV4aWY6Rmxhc2hQaXhWZXJzaW9uPkZsYXNoUGl4IHcgd2Vyc2ppIDEuMDwvZXhpZjpGbGFzaFBpeFZlcnNpb24+CiAgPGV4aWY6WFJlc29sdXRpb24+NzI8L2V4aWY6WFJlc29sdXRpb24+CiAgPGV4aWY6WVJlc29sdXRpb24+NzI8L2V4aWY6WVJlc29sdXRpb24+CiAgPGV4aWY6UmVzb2x1dGlvblVuaXQ+Q2FsPC9leGlmOlJlc29sdXRpb25Vbml0PgogIDxleGlmOlNvZnR3YXJlPkdJTVAgMi44LjEwPC9leGlmOlNvZnR3YXJlPgogIDxleGlmOkZsYXNoUGl4VmVyc2lvbj5GbGFzaFBpeCB3IHdlcnNqaSAxLjA8L2V4aWY6Rmxhc2hQaXhWZXJzaW9uPgogIDxleGlmOlhSZXNvbHV0aW9uPjcyPC9leGlmOlhSZXNvbHV0aW9uPgogIDxleGlmOllSZXNvbHV0aW9uPjcyPC9leGlmOllSZXNvbHV0aW9uPgogIDxleGlmOlJlc29sdXRpb25Vbml0PkNhbDwvZXhpZjpSZXNvbHV0aW9uVW5pdD4KICA8ZXhpZjpTb2Z0d2FyZT5BZG9iZSBJbWFnZVJlYWR5PC9leGlmOlNvZnR3YXJlPgogIDxleGlmOkV4aWZWZXJzaW9uPkV4aWYgdyB3ZXJzamkgMi4xPC9leGlmOkV4aWZWZXJzaW9uPgogIDxleGlmOkZsYXNoUGl4VmVyc2lvbj5GbGFzaFBpeCB3IHdlcnNqaSAxLjA8L2V4aWY6Rmxhc2hQaXhWZXJzaW9uPgogIDxleGlmOkNvbG9yU3BhY2U+QsWCxIVkIHdld27EmXRyem55IChuaWV6bmFuYSB3YXJ0b8WbxIcgNjU1MzUpPC9leGlmOkNvbG9yU3BhY2U+CiA8L3JkZjpEZXNjcmlwdGlvbj4KCjwvcmRmOlJERj4KPC94OnhtcG1ldGE+Cjw/eHBhY2tldCBlbmQ9J3InPz4K/9sAQwADAgIDAgIDAwMDBAMDBAUIBQUEBAUKBwcGCAwKDAwLCgsLDQ4SEA0OEQ4LCxAWEBETFBUVFQwPFxgWFBgSFBUU/9sAQwEDBAQFBAUJBQUJFA0LDRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU/8IAEQgAMgCWAwERAAIRAQMRAf/EAB0AAAEEAwEBAAAAAAAAAAAAAAADBAUGAQIIBwn/xAAbAQEBAAMBAQEAAAAAAAAAAAAABAEFBgIDB//aAAwDAQACEAMQAAAB8c6fjp3ZakYZz1VvVbrTGe4dftL9JfkyZEhQyJigABwN2XAOvvNp590nQdMl49h3DLbGyXtx2PiqFtGZqesgAHz+67hpKuBhLZUNL0AB3XLbYZL5oTFhsNzUkhUQFTQ+cu75uQqkla4YWHZR01SHz+vb8tsvJfVzBaimF9IkYmpHEoW04Y3PPSM9lb9fN6y6z53OwZq7PJe+MmwiIjoWFAADhDb6J9PWYxI49RXry5w6T8fROS9AVHJCj8clmLGAAcH9x+c4ZAADrXlOzvkWyAAAAAAAP//EACYQAAICAgEEAgEFAAAAAAAAAAMEAgUAAQYQERIUIDYTISQmMDT/2gAIAQEAAQUC7lK50ZZivGTppb9s2cEl/FIziSOpa31IWAo9+/SRIw38AR7Syc9DgUmyz6cN+kqmYHRKnKtIDrh1m2ypWRXykDJ4mhe6wnUBbmW4+ADfuMf/AMvXgf1MVumWUgjnr8gommKBMY2BYBWVggVeXclAI4Zv9NLng0GUtQiMsTDa32aDZ71mmQmiWulkgEj04gKR+Djf1NI0T+lYC7kp4m0GzW9iotl9hyya94kVvZthD8CLEYW49oEDh4/DQ6PVYR7SfGJsAlXsRaqqg9oezqi1obqlco84F9TVtQNu6aDse2RR1sw4kg2OUQWQWpxZFKEJxLH4IugWTN6F9FF5X0TXKD7yi1Mk3Z3qN5T8LnMfDN8faTFqvNiyJgYogZYZK13Sp6hiepVk3bWoUmoX4eEd54RzwjnhHPCOfjjnBvrH9n//xAAqEQABAwIEBQMFAAAAAAAAAAABAAIDBBESITAzEBNRgbExQWEFICI0Uv/aAAgBAwEBPwG0UcAcRmjwhgdMfhCniAtZciL+VQ7A7+dWZ1w0fHBjDI4NCY0Mbhbxotkd/OrNGeU2ThSbw+yi2R386sG0FLRA5sXImjN7JlW30kyKEjHeh4UWyO/nVpm3hCEV1Y+iazFknQtGdk6EM9lRbI7+dWkNoV+LrG6aRnYrECSEMItdFwc1UWyO/nVxOHusbuqxu6rG7qsbuqxu6r6f+u3V/8QAKREAAQMBCAEDBQAAAAAAAAAAAQACAwQQERIhMDNRsZETMYEgIzJBYf/aAAgBAgEBPwG+R8paDlbLMIwjPIT7r1pOVV5zH461Yhm4/wBsc4MGIpzi84jbVbvjrVif9xzLKnbP0VW7461ZtwqOqIyevWikF16fTEfhmjG8e4sqt3x1qzuulIRfcrx7ouwoSEpspd+1VbvjrVqBfKs23i5EHK9YSAES43oNLSqrdPx1q4RwsLeFhbwsLeFhbwsLeFWb51f/xAA8EAACAQMCAwUFBAcJAAAAAAABAgMEERIAIRMxQQUUIjJRECBhcYEzgpGyFSMkobHR8TBCQ1Jyc8HC4f/aAAgBAQAGPwJ0DkIPb6t0Gr52+WvtDqiYnoxJ+8dBlIZTuCOutjf2lnYIoFySentUMwBY2F+p92U9S3sLHkNFm5n20/8AtP8AxOnqFqZFNMkHDjHl+zjvf15nXAWV+G9XVl/12BuJPCL9NiTrtKY1j/s9PeLHlfxeLlv0+GpaTvMzRskLglgDkTLfxdB4Bqadqn9bBBXJH48gbWK/Pb+Gnm72wrFnEa0t9iLiwx+I3vqjrZKudmmVhJyP90kEDl01SwGXNUnRgDNxCLxzX3+g92WM873Hsb3KH5H8x0qKfDIcUfA4OfgeWiGRWvzuNCHbNlLY26D+uvEoa/qNSSy4JFGpZmI2AA/lrvco4a28zpZt+Q9fpp4kuJEFzFIhUgHrY/XQxRVt6D2JLGco3GSn4aLE2A3J0siNkjDIEdRp/nq0gy+I1bMb9Dq8RDrrdG/D2QRIcXeJ1B9NzqlpkpGNQMFMEkZAit1vy21D3EVI7S4b95Piv5DfntfK1v5ay7LSoCCG0jYv5eLHlz3ywy+Oq7hHw/4PhYKDj0v0/wDdSR0sdS0pope8q4bdsNr+rZf867OlSMyQ0s+bxqLnHBlv8bZX0DDTyGmjxE1QqEPiWF0XqRtc21AsSz/ozM+E5BScDf7vl+F9SJWrUGBVdacDI78R/TrbC2pKYpUCqZIeGgVr+RAf331w5I6pu0WMgl81uTc+mPK301QKFK4wqCGBBBtvz12jOjKFpVEjg9d7bap3mraWieq+winY5P8AHYbD56lpuC7TxkqyIL2tqREZYUhUvLNKcVjX46hqEq0q6Wa4SaBja45gg7g6p+8SBuMmQwa9vVT8dUPyP5jqqpUvxKe2V+Rv6fgR9NM/GTBebZbDSEyoA/l8XPQQuokPJb7nUWTCNpBcI5GWiIjmAWDMOQK6zEqFP82W2gyMGU8iD7vb8Ur4yTwqsY9TmDrs6ebtCOj4EKQzxOGysvVLDe412jS0lYezHkqFkjklJGUYv4Sw+h12zTNUcOGuiiUVZTYyJiciPRiDrs5ZqwVDJIZaiSO/DxHlQbbk6rFaI0lUtR3mPKQycQts45bdNUrRpxJBGxVPU3OqZ1kaskCPFKmyZB928X+q2l/ZZuEhTx4osqkBunJxv+/U5qOz+OJYsI1VV8PibYi+17g64FRR98qTJG3eCbDYLvlz2trh92firHCF4YXfGxNyeW9+Wp1ipsN5j0AcM6Nb6gEaScUnBpMorxOAMiufit9VH9NdogphG9TnEOlsF/7Ze7yGvKNeUa8o15Rryj8NUf3vzH+1/8QAJRABAQACAgEDBQADAAAAAAAAAREAITFBUWGBkRAgcaHxMLHR/9oACAEBAAE/Iax7udGdfSqdmKGldcPpMO9QwI+IlQPCZwJtNZfoquUkA5fwYACNHvLkICNTQsPYfj7R7N/TieLi9fYASnRShKATl2e0yJqsgmtZyg9zxlOgNFaDWnEfqKcmIvWdcTXMcHfHOLsZkdDGh5uNgd85rF/TQtKt/QtsMWJfIBtDAiN+Lcia/hgqATwbnv8AaVae6efoFj6X5+zevGYv/dpeJGuNb31goR0A19cUeDnZIf8AT5wBDtEtcArsDSF9mCyEARsSE2VDsrMDgVUMBAaYL6OCgThEmKi8GRPnDyuMNUOjowvRfDIUTGaKJqmEn7SxNqiOnA3wFd5w+wic6z18I2RHG70oFNSNJojuE5yG32IT2N3/ADcAJQsjUJ4Cp+2QItIebW27T0uGOXaPiq8GT9M3j+kagnNRHMGVDN72GbghqehQK2cs1Kee7y9gzvB1yUMODl5TrjvNS7IUoCaIL981pYsLyHbqn4d5AJsgBCbG7i3DBaE/uc2nQKDYbFnQxcGiGS0o8ZEVlttKuedQLiWu8KUg/IN557lNfgClPX6HEZL68GtrsFHhwMVSEKernNiAj4+cOLNU+wY+A4Y/CXNWftVAR+f1kegyA/LO+tzDkyZMmC1acdSD4HG0PpbDYHgajjH6XaIAqJfUy4rHjQi2UWu8vmhzJQoUG3jeS6s+MIZ4Cnpmzs0TiD5yixezNYLxV3C5crok4TiSE8HYs0JZ485LoN4mr4gZfiAzSL4G2pv3cMm5q+4LY0Edc3UYi6SaavrnjHK8JYrRZrc5fwMo60s21Q6oX5r9qhVnymfyM/kZ/Iz+b9Faf5Sf/9oADAMBAAIAAwAAABCzbRAQAASSHGpQCQSCSSZpKCASQQCcvfCQQSQAThVMASQQQQKP1wCSSCSRySAySSSSSf/EACMRAQABAgYCAwEAAAAAAAAAAAEAESEwMWGRobEQQSBR0YH/2gAIAQMBAT8QQPUbv2xVa+LQsM2GrurnNBAAH32YqenBzXxnBMHFY887sxVCyoDv4Zc1+HO7MUiaWpE1aaOUQy6nsvHFDq/Zl2/2F8pzuzFZg5EYFWi5RJsiJ9NYQUEdD8lDab6E53ZiiY+w7jdKKFGUQpX4jXayZwuFf3nSPjJrX9nO7MWkAW8127NduzVbs1W7Nduzt9uL/8QAJREAAQIEBgIDAAAAAAAAAAAAAQARITFhsRAwUXGRoUGBIMHR/9oACAECAQE/EAXEAeoQQDBhhG0SZBHhd6kq9ESDpYzQjySXTYGMgI5mnGftYzQu9YdYAS1T4T9rGaRBRr+JlA9UCDTGYMEWcmdqYvCMJqbtYzRagfoJ0WDgTUKKCAD2T8HI9oCWKFUbntYzSFI8E2QhDnME4IHh2gUNEeN0AIBgh0zEl0rGa65IKk4VJwqThUnCpOFa2Gb/AP/EACcQAQEAAgEEAQQBBQAAAAAAAAERACExQVFhcRAggZHxwTChsdHh/9oACAEBAAE/EN6KW9atHlwAAKzVeX38B+yR2+XsZN3WpA8GP/QwhoBhgbFXDMnaFVBpERHD1AEl0EYnsRHI75TAqz+K110BteDDqCEHCPGRk0OQrmBy0Q6J6fSOTRL4An+X43irQcvY++VUJfAdA8fDxgp/hwTB7CHdUGTTLybxzvcBElImESUWh49svPlgokBISJgVr4oSeHWslBOLbu6SUgmIC7QAULgT6vvWRO6gKYdAlH5ibKSGxpsoGjBsQVcNFGzT6R1AzfAj+fjoSFx2j5eMIICjR7YP6zj6IPKtkIiVrCNUJhcITaec750iV3EgnH0wbvAggaDTYKp7w9b0BJxuBL4JgbISGBXoxBAAqGbyuoyihkAIoXSZoNQftKGuXBRQKvjC6mwgJVHfDj0mowAqvgDGOWvSSHURH75Y8xER7430GtA/Zw/2x5JcFx9/xjvRQCE98OXdLy0n5y6BXnWXdEjNsHSKOPLhrR1+ioHWocXpOpEIZN2xQ5W2B6VkCJIbXoQEZITu0SpaWe2wBou4vUnCpLqo5qnU5kRbiEXtoqFogRYixu2QzRLwFAMCMkeAgAQ7IGKUuwwOUnNHXDPol5N9ighUotykRTZVlowrk8qqU9dSSyDH1KBCBoTBjfCHogRYu01groqdt4ENWCGY3XZjQWXQnJrH8ZIQkM0oDEsmlHtRjGEAoRAANFjCQAuhtCkK+wRnsYlNhAYBvPSUqHpfRC5GKQfDmuoh0vjn3HHjJLgMF3RqaenTGGMLV7CqeF8YufmUOvbtSIIibxUzeMUQqIYIXDcrQj2aRjntm5Fvw52zFaj1JkIIRm4a5xrIGyV6IpEpd0blWwT5JMTCAh6mO/Rdmgy9EJJU5yXNL1pUBUQALzNqzURaY+JnjsxzZFCN7qBYKvXKAO2XwRdOqRAvO1XvmZrOTDCklhoxwKKDTh57E4AgKUyG4FSYqR3YPDWbFjeYzabCk41ZeEKAeopjZGEcFPAtYVABAuHZSjln5KfTAgNVQ3X6HL1qFXP1vP1vP1/Lf6ufomAAEAgP6v8A/9k=) !important; + background-repeat: no-repeat !important ; + height: 70px !important; +} + +#fr-view.fr-mode-new .main-section-bg, +#fr-view.fr-mode-edit .main-section-bg { + margin: 0 !important; + display: block !important; + background-color: #C7E5F4 !important; + color: #657C8B !important; + width: 100% !important; +} + +#fr-view.fr-mode-new .sub-section-bg, +#fr-view.fr-mode-edit .sub-section-bg { + background-color: #D8E7EF !important; + color: #597688 !important; +} + +#fr-view.fr-mode-new .sub-section-bg .xforms-output-output, +#fr-view.fr-mode-edit .sub-section-bg .xforms-output-output { + padding: 5px 10px !important; + font-size: 13px !important; +} + +#fr-view.fr-mode-new .main-section-bg .xforms-output-output, +#fr-view.fr-mode-edit .main-section-bg .xforms-output-output { + padding: 10px 10px !important; + font-size: 20px !important; +} + +#fr-view.fr-mode-new .hide-label > label, +#fr-view.fr-mode-edit .hide-label > label, +#fr-view.fr-mode-new .hide-label .xforms-label, +#fr-view.fr-mode-edit .hide-label .xforms-label { + display: none !important; +} + +#fr-view.fr-mode-new .hide-label.xforms-control input[type=text], +#fr-view.fr-mode-edit .hide-label.xforms-control input[type=text], +#fr-view.fr-mode-new .hide-label select, +#fr-view.fr-mode-edit .hide-label select { + width: 80% !important; +} + +#fr-view.fr-mode-new a, +#fr-view.fr-mode-edit a { + color: #006498 !important; +} + +#fr-view.fr-mode-new .xforms-hint-appearance-full .xforms-hint, +#fr-view.fr-mode-edit .xforms-hint-appearance-full .xforms-hint { + display: block; + width: 100%; + clear: both; + margin-top: 0; + vertical-align: top; + line-height: 14px !important; +} + +#fr-view.fr-mode-new label, +#fr-view.fr-mode-edit label, +#fr-view.fr-mode-new button, +#fr-view.fr-mode-edit button, +#fr-view.fr-mode-new .btn, +#fr-view.fr-mode-edit .btn, +#fr-view.fr-mode-new .xforms-output-output, +#fr-view.fr-mode-edit .xforms-output-output, +#fr-view.fr-mode-new .xforms-label, +#fr-view.fr-mode-edit .xforms-label { + font-size: 15px !important; +} + +#fr-view.fr-mode-new .xbl-fr-section h2.fr-section-title, +#fr-view.fr-mode-edit .xbl-fr-section h2.fr-section-title { + background-image: none !important; + background-color: #006498 !important; + padding: 10px !important; +} + +#fr-view.fr-mode-new .xbl-fr-section .fr-section-title .fr-section-label a, +#fr-view.fr-mode-edit .xbl-fr-section .fr-section-title .fr-section-label a { + margin: 20px 10px !important; + font-size: 20px !important; + color: white !important; +} + +#fr-view.fr-mode-new .fr-repeat .fr-grid-body .fr-grid-td .xforms-control input, +#fr-view.fr-mode-edit .fr-repeat .fr-grid-body .fr-grid-td .xforms-control input, +#fr-view.fr-mode-new .fr-repeat .fr-grid-body .fr-grid-td .xforms-control select, +#fr-view.fr-mode-edit .fr-repeat .fr-grid-body .fr-grid-td .xforms-control select, +#fr-view.fr-mode-new .fr-repeat .fr-grid-body .fr-grid-td .xforms-control textarea, +#fr-view.fr-mode-edit .fr-repeat .fr-grid-body .fr-grid-td .xforms-control textarea { + margin: 0 !important; + padding: 0 !important; +} + +#fr-view.fr-mode-new .fr-repeat.fr-repeat-single-row .xbl-fr-number-xforms-input, +#fr-view.fr-mode-edit .fr-repeat.fr-repeat-single-row .xbl-fr-number-xforms-input, +#fr-view.fr-mode-new .fr-repeat.fr-repeat-single-row .xbl-fr-number-xforms-output.xforms-hidden.xforms-control.xforms-output, +#fr-view.fr-mode-edit .fr-repeat.fr-repeat-single-row .xbl-fr-number-xforms-output.xforms-hidden.xforms-control.xforms-output, +#fr-view.fr-mode-new .fr-repeat.fr-repeat-single-row .xbl-fr-number-decimal-separator, +#fr-view.fr-mode-edit .fr-repeat.fr-repeat-single-row .xbl-fr-number-decimal-separator { + display: none !important; +} + +#fr-view.fr-mode-new input[type="file"]:focus, +#fr-view.fr-mode-edit input[type="file"]:focus { + border: none !important; + outline: none !important; +} + +#fr-view.fr-mode-new .xforms-alert.xforms-active, +#fr-view.fr-mode-edit .xforms-alert.xforms-active { + color: #b94a48; + padding-left: 5px !important; + margin-top: 5px !important; + line-height: 18px; + display: inline-block !important; + vertical-align: top !important; + background-image: none !important; +} + +#fr-view.fr-mode-new .fr-grid-master-row .fr-grid-th label, +#fr-view.fr-mode-edit .fr-grid-master-row .fr-grid-th label { + display: inline-block !important; + width: auto !important; + vertical-align: top !important; + font-size: 13px !important; + line-height: 18px !important; + color: #6E6E6E !important; +} + +#fr-view.fr-mode-new .fr-grid-master-row .fr-grid-th .xforms-hint, +#fr-view.fr-mode-edit .fr-grid-master-row .fr-grid-th .xforms-hint { + display: inline-block !important; + width: 80% !important; + vertical-align: top !important; + font-size: 13px !important; + line-height: 18px !important; + margin-left: 0 !important; +} + +#fr-view.fr-mode-new .xforms-required .xforms-label:before, +#fr-view.fr-mode-edit .xforms-required .xforms-label:before { + color: #b94a48 !important; +} + +#fr-view.fr-mode-new .hide-label-n-required .xforms-label, +#fr-view.fr-mode-edit .hide-label-n-required .xforms-label { + width: 10px !important; + height: 20px !important; + padding-top: 7px !important; + vertical-align: middle !important; +} + +#fr-view.fr-mode-new .table thead th, +#fr-view.fr-mode-edit .table thead th { + vertical-align: top !important; +} + +#fr-view .user-info { + color: #bbbbbb !important; +} + +#fr-view .user-info a { + color: #999 !important; + margin-left: 10px !important; + text-decoration: none !important; +} + +#fr-view .user-info a:hover { + color: #fff !important; +} + +@media print { + .fr-page-break-before.xforms-group > .xforms-switch { + /*padding-top: 300px;*/ + /*border: 1px solid red;*/ + /*padding-top: 300px;*/ + /*margin-top: 300px;*/ + /*text-align: center;*/ + } + + label { + /*border: 1px solid yellow;*/ + } + + input { + /*border: 1px solid red;*/ + } + + .big-logo .xforms-output-output { + content: " "; + background-image: url(data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/4QCYRXhpZgAATU0AKgAAAAgABQEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAAExAAIAAAAMAAAAWodpAAQAAAABAAAAZgAAAAAAAABIAAAAAQAAAEgAAAABR0lNUCAyLjguMTAAAAOQAAAHAAAABDAyMTCgAAAHAAAABDAxMDCgAQADAAAAAf//AAAAAAAA/+ECxGh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSfvu78nIGlkPSdXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQnPz4KPHg6eG1wbWV0YSB4bWxuczp4PSdhZG9iZTpuczptZXRhLyc+CjxyZGY6UkRGIHhtbG5zOnJkZj0naHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyc+CgogPHJkZjpEZXNjcmlwdGlvbiB4bWxuczpleGlmPSdodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyc+CiAgPGV4aWY6WFJlc29sdXRpb24+NzI8L2V4aWY6WFJlc29sdXRpb24+CiAgPGV4aWY6WVJlc29sdXRpb24+NzI8L2V4aWY6WVJlc29sdXRpb24+CiAgPGV4aWY6UmVzb2x1dGlvblVuaXQ+Q2FsPC9leGlmOlJlc29sdXRpb25Vbml0PgogIDxleGlmOlNvZnR3YXJlPkFkb2JlIEltYWdlUmVhZHk8L2V4aWY6U29mdHdhcmU+CiAgPGV4aWY6RXhpZlZlcnNpb24+RXhpZiB3IHdlcnNqaSAyLjE8L2V4aWY6RXhpZlZlcnNpb24+CiAgPGV4aWY6Rmxhc2hQaXhWZXJzaW9uPkZsYXNoUGl4IHcgd2Vyc2ppIDEuMDwvZXhpZjpGbGFzaFBpeFZlcnNpb24+CiAgPGV4aWY6Q29sb3JTcGFjZT5CxYLEhWQgd2V3bsSZdHJ6bnkgKG5pZXpuYW5hIHdhcnRvxZvEhyA2NTUzNSk8L2V4aWY6Q29sb3JTcGFjZT4KIDwvcmRmOkRlc2NyaXB0aW9uPgoKPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KPD94cGFja2V0IGVuZD0ncic/Pgr/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wgARCABDAMgDAREAAhEBAxEB/8QAHQAAAgIDAQEBAAAAAAAAAAAAAAUEBgIDCAEHCf/EABsBAQACAwEBAAAAAAAAAAAAAAAEBQEDBgIH/9oADAMBAAIQAxAAAAH4v0nIurCskbdAeYzX6y4gx5IdkQrH6tX2oAAAAAAAAAH589VxLefWh6VeovVEKeAdrad7aBagzNBgTRCPTUZkQvIAAHAvY8DLkRQgx5dPo+hAA7W072UC1liYYmwRm0cgJTafUQAAPz06jjXljUgphWNXqLsADtbTvvUC1kDUgk4CKeFaLcZAQiaYGB+dF7zO33rsFnUbveup01/AjygDtbTvssC1WCs3iA+iFBLyPSkCwzIY5JQ9OCr7mV8aUEnbpmb45jMbVu0+NnaEeXfq+0wAjGQ1FpYCrE0lEUjm09J5xXc8/wCRZngp9eGWPTTz7S+vGrOOnfOX0C1YGs9PSMbxIOD0s5IAAA4XueexjTZWM+sS8ZzxmPnGnOOiGHkC1RGRuMyeVUfGsfjIegAAcF9t88xZAAAA6k5zqvqVZcAAAAAAAAAAf//EACkQAAICAgEDBAEEAwAAAAAAAAMEAgUBBgAHEBMRFCA2FhIVNEAhIzP/2gAIAQEAAQUCaaLBgGJ4h2zn0wxY59ffH574/OmufXW/6EBfrf7vN+WXfpn9ZLfZrrSz2M61fG8JnH5QIky7RGA3L72sm783uJXefJHZRslhsGGBBuJPW3xF/wBuzpPEv8Omf1lumZLb3dQewOaoMRukpjovlqGZa6/TOOYNUvkUXE7TmoaU9W1+0uhPR0jaVl8fP4X+1lj/AEfDpn9ZduApGr7MNlHjLg1JdmmRpLLMYZBnaU8QxnEsdoODm3yc8DgE0GAv/wApZ+QeCZGXhIYJA6ZA579M/rNR6Yu7lwWbC5KTW5WlWOtcRYdLWXs5yNtCuFE9gUkHVcHU/a60Irw9b5raxTyRl8sM1uw7HZHUsbCnAqLWARX19/8AldoMlHzFkXHJO4nzJRZ5nMOdM/rT1QrYzhSIwRVpU1OA1yvWJHXkIMuJBsAQoUYL8zrFbkjtKo+UFcstM1IkeONdrsBDQog4pRppTRRDXL6ukCx3Khqk5kNb09shXayRxGt1AxdqHfUB2tWrFmrbcK0KNl0z+s7I076/kAZqfkUM4/IRyh+RAwE13ifJbEOEx3xjnJsoR4NscIGXPBoHx1uxBU7fRXSi5pQpKSuCzX3Wvn28Km1rra1Xv1+yL09FcbAvfa50z+sxoc2FnilMjHFe34kk7FBmdc8Wwbg/bcaqXmkjVrk2vaPr0tZWkSxRLESo/jIUJZ8A+eAfPAPngHzwD54B88A+dOP8a/8A0P/EAC0RAAEDAAgGAgEFAAAAAAAAAAEAAgMEBRESEyEzQBAgMUFScRQiUSMyYYGh/9oACAEDAQE/AYII3RBzgpiwu+gy4gW5BQ0MAWyL40X4XxovwquyiI/k7F0l2jNaO/JRoMMXndeSrtN3s7GTTZxorL8mfLV2m72djhYlGFnUcaCf1OWrtN3s7Gi6IU1FbJm3Ip8EkfUJjyx14KKkMk98lXabvZ2NF0RxdDG/qEaHEUKMW/teUGSeX+Kx3cqr9N3s7GgC1jQU1ozceyLmuGYQjtFqEX3ulX2E2EZKNott7KVthtCq7Td7OxoBDWNJTXDMHuvqwHuhdc0AlGSx4IQuA3rUHhrU54e1Vfpu9nY4j25ArGk8ljSeSxpPJY0nksaTyWNJ5LGk8lVecH97H//EACoRAAECAgoCAgMBAAAAAAAAAAEAAgMEERITISIxMkBRcRAgFDMFQmGB/9oACAECAQE/AYsaI2IWtKhhwGM3+SaM1FmjkxfIicr5EXlTxpiA/wAGxaytHJ49JiNXNUZek7rHQ2MPW7zMPqM9Z3WOhsbSpHNPmbGD1ndY6GxmPtKhTBh3HJMisfkU5oeKpUSA+H6TusdDYzH2Hy2K9uRQmoiMcO1NCLmH9Vh4U7rHQ2M4aHOTibgFVc03FF9FyMTDWCquzpTyQEw0igqd1jobGcFLnAJzTcQsTjwr2uJCqYaCsZFFCLaSmtLXKd1jobGo03kKyZwrJnCsmcKyZwrJnCsmcKyZwvyH3f5sf//EADwQAAIBAwEEBgkCBAYDAAAAAAECAwAEERITISJRBRQxMkFhECAjQnFzgZGxUqEzQILBFSREU2JyktHx/9oACAEBAAY/Aiqtu5Yr2jam9OT2ViLs513/ANq7/wC1ZP8Aun8D+RkY+76mhe4P39QfMP4FdICbaTRB4I4o0GTlga6SxaPBewWzTorEEYweL6VDEtlJLdtHtHiBHAPM+dQxQW081xKrHZYAK6WwwblirqYWc721o7JPLu4dPaQPGrkpZzTw2wzNKuBjdndz3V0omiSOzistus8eMjcx1CmitrWa8MKjasuBjIzjf2mo47O3ku3khE4xwjTnG/PZUPV7SaWZy4MW4aCpw2T8asVTXChE6zQt4Oun/wB+tP8AEelsdp3eqPmH8CpZ1UbNri3kG/wUHP5q82enTN0fJbAk+8aS8msZZNcCxNFFclGQrnkQCN9JO8KQqYnyquWwS+e09px4103aaRtrrrOzGe3XnTV/DNbG6aYFYJXn9lGunHc8jnwq7j6uM3PRnVu+OGQKwx+9XWytOtx3DCUYcLpbSFIOfDhrVKVYbDDMv6y7O304qbaQSXNo0sz7GGfZ72fIJ57qjeS3jghR53xG2Rx6Mfg+s+e63pHx9UfMP4FCDTLPcEatlAupsc6cxag0Z0vG40sh8x6IBIcGaTZJ8cE/29MtxM2iKJS7tyApZdLxg+EgwRRl0Tm0H+rER2Xxzy86BByD4+mS2B9rGocjyP8A89DOxwqjJNJLG2qNwGVuYp60txLXC30oqew12al5j1B8w/gV00r/AMYyIw+XoGP31ULSAmCeaWKG5uY9xCkMQM892P6qlWynk0SWzviaQy7IgqNfFn9R+1dCGO4uHJu+JZpmk2ns337z+Ks+lNFyLqUxyNK917EhmGU0Zxjfgbs5ro+0ErwRXM2mR420tgKTpB8M4rpWySadrY2Dz6Gnc6GG7tznB5dm6ukILbauRbuBqdnc7t+8781tg0fUNlqz7mzx+MVKGNxbWsEUQgto5Wh0KUzk6T2+H0qG3uLueSCOOZDokKbbTLpVjp8qHRclzP1VLiYZ2pDuFCELr7ffP2qSKG5lK7W1HFISVBL8Oe0j406Q3Bi/yyAnO6PVMq68eQJqSNb26USwSaoXuZGMmBnVnVkfTnXR4UucwI3G5f3Rzp/Tuc17p+lcUKGv4OPg1d0/+VD5p/ApHmQ7VNyyxu0bj+pSDT2gt12DnLKd+o8ye3PnUumMuZRpdp5GlZhyyxO7yqORYWLRHMe0ld9n/wBcnd8BW2EJyH2gTaNsw36tGdOfPFGG4jEidvwPMcquIdkZEuF0ymWRnZxyLE59Grq/Dq17HaNss89nnT+1CWVHEmNOuKVoyRyOkjIqNooVjMceyTTuwvKnDQ96TbalcqwfGMgjePpUsfV8iXGss7Fmx2HVnOfPtqT2O0MibN2mdpC68iWJzRaONixXRmWRpML+kaicDyFLBbqUiXsXUTj71a29zGJoXzqRvHgNdK397GZbOw37BTjWxOFHwq6Sfo2Ho26Vc28loDhj+lh/eheT3dvYWztoje4Y8Z8sVF0Td+z993Q5ymM5FNazdCxQdGnKrcRZ268mz41PLcDbdHWUbzyZ3awOwfWkmtE0WN3Es8I5AjeKHzD+BUVr0Y+m70tOd2cqvu/1HAqxmhjedrxdUUSdp3ZP2pEW2na6ZmTq+MMNOM+XiPvUYS3na5dmXq2nDjHbny86YtHKtwJBF1bT7TUd4H235pY3WexmWaJShUHIZt30NZNvP1Xa7DrOOHVq0/HGd2au0mWa1SK9ihRgo3508J+/71JLsJmso2KvdAcAxuJ54HOruOK1uLjqhxMY13DhDfXcajmibVHIodW5g+tbXVy+iCPOpsZ9010naXurqF+CDIgyUOcq2KvNFzH0veTps4vY8MX/AC3+NWNlc3o6PnsmbBdCyurHPh41ZXtorS2lnCttxbmkQDBNHpA33XbVcslg0PEeStndVzsIreS+vLjMkEkWY0j8Bj41AsyxW9/ay4SOGPSpjND5h/Aq9vLxriIkiKEQXLx+zH/UjtJNNaNY9e6NjmLxcftkDb9xzncdXnvodasZLu02rNEjy5uYRgY48/HxzSXrQy3CDXGIHkDTJGcEb/HeD4+Ir/GOr4lWRdNqWGoxhSPhq4qQ9W2EKXELqjkazh8saKS2U1xfrMsrTST+zIEgbgGcDcOzAq6AtzokvoLpX1DGkaM/XhqfoZLQuWDxR3OobPQ2eI+OQD2V0mhHDI42Zz2jZKv9q6Pt5Rplit40cciFGfWyVBPwruL9q7i/au4v2ruL9q7i/au4v2ruL9qPzm/A/kf/xAAnEAEBAAICAQMEAgMBAAAAAAABEQAhMUFREGFxIIGx8ZHwQKHB0f/aAAgBAQABPyGX7QIOD9jt1x6gyQcrjOEO/ef2DP7BjHsVX/BRFUBPmfQiL5E7fSbk/NYON+UMIHnFjCrGjZgSoEZWDSewyWqEoKQsp/yXBfFmCnMUBtnWNQDSA2yvHbWUbYTT1B5daE5N5SlFNoAUaUYeTNE6Bgls5KJPOOzOesuZhNO7mucO6kxnipPP1T73/D1VGmh9RtNtod5v4sjscG59X2y0VjRod5fwwTFb+cBVYC8LgIrdL2T1yYsWgYwgalo5L58CcvaqBeRRsw8uFc+zmGnnDqBYaTgPBU9sXFo22s9J4RdeMNIEhAoHuSffff1SNyAvjXqy3Rv9RvqNWp5ug+XEsrX8pE/T6PECgWv8Beo2XQ6VXBKVX+fjrADypCP5PsTuzDLCoOE9U8aNa2T8vS/KEdBzgCC04Qo5+B+MAPZ/JgOm+WnBX0TFW30kbemKbywT7TnR76Bz+q1dnDcw6lISNCpACJY/fgdjiojsUfsN/GR4i+dAKhFoju1cQGiQJ2lyNwZg0s7S8bWttqumaMyFaouqLK+MGICRmEYIL6CIA+C8Xi5Z3mNhG43OW9ayMXqlUw2HkqCvOaJH9mhto5iefEy7q2RWbaqFfHjCwgICUHSd6CQ4L6avVRi1D24Os/A/HpxnCc8LTOe+7jl9895/2RxfB/17eiOeeIMXkID2uKt3arlsaoNm6N4L8vuA1OTymEaY/AEgaYvAe2HD2W9NjUpsVceAUhUQ2IbR0m8d+su9lEyPnXo2TqgN3a5N3gEBv5X74A0zTu1YvYOOsZsN01FULANjO0fsJVVou9+BvWMIa7pnaA+c/vvTdIoGaertC8FMPbgx1tdRCH+wwR5o5OS8lTP/AHJG/AwjzJJPkAXXnH3l0Aco+/A5TpwGXZW3GvfvNWzB0z8VTWR9F/H+oW/z6G9unokHSvFaeLmtb+kuRUDbdzbXMlQTVdJuu4yaDHYPOYCnKNMuDJewoDhGtkg+MHSrWSNqjsFNmTFApEv034JMfqkHB7jyuvQMkfN+q7VINBCPjJ6UDR2CvwDeDcOLoUf4fqrum4ikaPdMQYyNN7w31gnFTQLzfGeJxnJ/bQYPA9YE2lNI9g7p8Zugh26PgBefbFlFQE74By0dTG4djvbhwR9DekAkxeXeqb9su1/2gbOaWt0H3xwl+Q/A2u/MBN+LjubWat37KZsZkw5yUjbYqgvBLvHn1SJEmKBODnnDi3EQZfckaHb5owEdJB5sVgq792iBvYI2nvm2yzBTqfu83i3WxAvyfVVOduP0TP0TP0TP0TP0TP0zP0zADNB/gz//2gAMAwEAAgADAAAAENNsNtJJJJJJJJ5kEkwAIBBJJJNtEknIIAJBJJJNokk4JJJJJBBF+ukmJJJIIAJIFtCSIIBAJIAAA3SlXJJAJBJJI4D+oxAABBJJJJJJJBJJJJJJJJ//xAAmEQEAAQMCBgIDAQAAAAAAAAABABEhMUBhEEFRcZHBsfAgodHh/9oACAEDAQE/EL2C9W8VFId78UYFVmQL06T71n3rCBYPVoUzCrxX8Do1360qi1eVH54iZgX0yq2858zHABDzNMr6e8rPqGMcrqXhLKQPNOhlNIr6e/HAbFLVOz/ZiZAdfcf2A4PH+6LRFLX9ytLaF5QeVI1agbxkRLBP2iGriAGFvolYTL+4dwYbU1MVGCQcALQZ4dKRwhVXG0IjZPjRaCV4G83HmbjzNx5m48zceZuPM3XmNVc1etD/AP/EACURAQABAwMEAgMBAAAAAAAAAAEAESExQGGREEFRsYGhIHHw4f/aAAgBAgEBPxC0AtSHWp1AKq0Q4TzP50n8aREsuhATxRz+CVGz70rqPlPXVFTLbTOoOrNOqJTs6Z3o+oVl+0FgxwMQxU8mld6frrY3gs0fiZBTwz5YvYuf8lFvQzKNpRZTAC4d6wlQVYA4USi76gkMsfuBbROXOLRhkEsKlBEIqjBryN4uBPmsUxbBLKuOicvoF/U2fE2fE2fE2fE2fE2fE2fEAAPDQ//EACUQAQEAAgEDBAMAAwAAAAAAAAERACExQVFhECDB8HGBkUCh0f/aAAgBAQABPxB5wISKh475d/RIDxIb9QgEqIB3cWqM2VfwHpn2/wDHPt/44+1cd1Z/waNGh7hP56y5IK0RwfB7ZnFSTMeOrM2wZsK5OwRmyBAPr8S3FZbD0ksVCjVjZM0JFacYk0rUboI5DW/8uKQ5k1wqJk4yQWMSWouGwFdZXjaLixGgdQaUcPore1RBGZAWS5tQUCwDiLjLCQjl0BgqKMgRHqGt5ISaJlJQ7CUQvg9qgO7/AJ9VS02Ol5f5fdMKtHQSrO4wOuPsEui0jnRq4lh3VZ0AVtbBrbnOZe0lfe0IMAloeKw1B5Dd2wfv0L9eqI0UYIYni0VjUh4K1G6Z++JB49AVoImjAEanmMWwMnoOMEkracg/XtB1piBJ7SWWgqMPI9wxmjnCiPqKdi/ofdMH0ottTnFIghUZY5o5k2UG0KIiUNi+gfoB4QHsV3x59SBE2oxMbYCw3lLJmEFN/hd9ExyiMoFjPY8yp8jDQIdqNiJyPqgawmBSx6t0ehYOEYap/AOcSZJXCvREf3n1PDDqR1tr8PU8YGpfV/0OLSanc8nkxwC+BuvJ09sxVASc453EHargmxZDMXe+OEKEsdXMuGtoFqpLSxJM43qQ21LapAAaLrBW1iMCBqvA0AolsgCguSULShCSvAGAqsK5JjEFYo1BvIpGoODOlTmgVe3h4mMNrRKEqEBJIFuPsHD7hymKYEmrEKxYany2jxigBYu229hSABDhwAEhOtl/afwTrocNi0Q4VDnNCSQx4rWdMAZeCgaAaz6nh6CqmnDgIcf6g0yUHyyX+Jm5/Oh/UuUkb+jY5Qt+Q5hmQ0jgAHwi2ll8uh7Y2dzryUasDCoUE4l10yl9/uB1hmpgqCic1Dh6CKoKSOkrfkCi2twID9iNSEgVAdiYpSCIyg8IBrTJiUzsotBFFuobu+d5v5tLG161b7HW8iTKaHRdCh4uucVshFlD8bGhTq1wADuL9DADSYaIs9hrW+nmBsFCGsXZ4NV52Z12A1owHRR/IB0CAAYAAGDzPqlTRHSP1juL6B0r3BN7OQR0VHdG85EEKkW6iOgxUZFpiioA74M3WudcuIQg0tRiZD0VkhupREsQ5QI0XRVIxi1M/wAEwLTbVDQa7OjpB09JjxruTUTBBAtgmMcjBiI02yIFCOucB4FFyIUUhRoXcDt2ph6QfiMJbm/g6KUAoABtF2woDwPRBShRy8Mx4UolCNqVIbt2bxiYn1zu5oEGJswcLWpnBoUcpWJxREolAFG4u3R1xeJg2JpvCD+/clZkSDrQrpa75WnJkQvIELy0ecaV4zW3Ugu4pHlwEhKdRoFGJREmzIRseR1HkJGbNlcvjb5rC5MbaYU77l7nulVTgFANcRG1L6kCqDUpbZ6TJFLw1oZlBWgcdmK6D8mdPBU0EWYqpcBZzIJoAiqJh8VTtgXnYAkVWIUxjWrFIRkbQVJh/sJnmJDlItUoTFillYCG2HdvBlNOIzzVXkiJFyCMqic9DQ6ddlDWU5Rr7DLvteuFuAwmGjTEKe5JzcErn374z798Z9++M+/fGffvjPt3xn274wTgABwH+Cf/2Q==) !important; + background-repeat: no-repeat !important; + background-position: 50% 0 !important; + height: 100px !important; + width: 100% !important; + display: block !important; + } + + .small-logo { + content: " "; + background-image: url(data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/4QCYRXhpZgAATU0AKgAAAAgABQEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAAExAAIAAAAMAAAAWodpAAQAAAABAAAAZgAAAAAAAABIAAAAAQAAAEgAAAABR0lNUCAyLjguMTAAAAOQAAAHAAAABDAyMTCgAAAHAAAABDAxMDCgAQADAAAAAf//AAAAAAAA/+EEt2h0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSfvu78nIGlkPSdXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQnPz4KPHg6eG1wbWV0YSB4bWxuczp4PSdhZG9iZTpuczptZXRhLyc+CjxyZGY6UkRGIHhtbG5zOnJkZj0naHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyc+CgogPHJkZjpEZXNjcmlwdGlvbiB4bWxuczpleGlmPSdodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyc+CiAgPGV4aWY6WFJlc29sdXRpb24+NzI8L2V4aWY6WFJlc29sdXRpb24+CiAgPGV4aWY6WVJlc29sdXRpb24+NzI8L2V4aWY6WVJlc29sdXRpb24+CiAgPGV4aWY6UmVzb2x1dGlvblVuaXQ+Q2FsPC9leGlmOlJlc29sdXRpb25Vbml0PgogIDxleGlmOlNvZnR3YXJlPkFkb2JlIEltYWdlUmVhZHk8L2V4aWY6U29mdHdhcmU+CiAgPGV4aWY6Rmxhc2hQaXhWZXJzaW9uPkZsYXNoUGl4IHcgd2Vyc2ppIDEuMDwvZXhpZjpGbGFzaFBpeFZlcnNpb24+CiAgPGV4aWY6WFJlc29sdXRpb24+NzI8L2V4aWY6WFJlc29sdXRpb24+CiAgPGV4aWY6WVJlc29sdXRpb24+NzI8L2V4aWY6WVJlc29sdXRpb24+CiAgPGV4aWY6UmVzb2x1dGlvblVuaXQ+Q2FsPC9leGlmOlJlc29sdXRpb25Vbml0PgogIDxleGlmOlNvZnR3YXJlPkdJTVAgMi44LjEwPC9leGlmOlNvZnR3YXJlPgogIDxleGlmOkZsYXNoUGl4VmVyc2lvbj5GbGFzaFBpeCB3IHdlcnNqaSAxLjA8L2V4aWY6Rmxhc2hQaXhWZXJzaW9uPgogIDxleGlmOlhSZXNvbHV0aW9uPjcyPC9leGlmOlhSZXNvbHV0aW9uPgogIDxleGlmOllSZXNvbHV0aW9uPjcyPC9leGlmOllSZXNvbHV0aW9uPgogIDxleGlmOlJlc29sdXRpb25Vbml0PkNhbDwvZXhpZjpSZXNvbHV0aW9uVW5pdD4KICA8ZXhpZjpTb2Z0d2FyZT5BZG9iZSBJbWFnZVJlYWR5PC9leGlmOlNvZnR3YXJlPgogIDxleGlmOkV4aWZWZXJzaW9uPkV4aWYgdyB3ZXJzamkgMi4xPC9leGlmOkV4aWZWZXJzaW9uPgogIDxleGlmOkZsYXNoUGl4VmVyc2lvbj5GbGFzaFBpeCB3IHdlcnNqaSAxLjA8L2V4aWY6Rmxhc2hQaXhWZXJzaW9uPgogIDxleGlmOkNvbG9yU3BhY2U+QsWCxIVkIHdld27EmXRyem55IChuaWV6bmFuYSB3YXJ0b8WbxIcgNjU1MzUpPC9leGlmOkNvbG9yU3BhY2U+CiA8L3JkZjpEZXNjcmlwdGlvbj4KCjwvcmRmOlJERj4KPC94OnhtcG1ldGE+Cjw/eHBhY2tldCBlbmQ9J3InPz4K/9sAQwADAgIDAgIDAwMDBAMDBAUIBQUEBAUKBwcGCAwKDAwLCgsLDQ4SEA0OEQ4LCxAWEBETFBUVFQwPFxgWFBgSFBUU/9sAQwEDBAQFBAUJBQUJFA0LDRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU/8IAEQgAMgCWAwERAAIRAQMRAf/EAB0AAAEEAwEBAAAAAAAAAAAAAAADBAUGAQIIBwn/xAAbAQEBAAMBAQEAAAAAAAAAAAAABAEFBgIDB//aAAwDAQACEAMQAAAB8c6fjp3ZakYZz1VvVbrTGe4dftL9JfkyZEhQyJigABwN2XAOvvNp590nQdMl49h3DLbGyXtx2PiqFtGZqesgAHz+67hpKuBhLZUNL0AB3XLbYZL5oTFhsNzUkhUQFTQ+cu75uQqkla4YWHZR01SHz+vb8tsvJfVzBaimF9IkYmpHEoW04Y3PPSM9lb9fN6y6z53OwZq7PJe+MmwiIjoWFAADhDb6J9PWYxI49RXry5w6T8fROS9AVHJCj8clmLGAAcH9x+c4ZAADrXlOzvkWyAAAAAAAP//EACYQAAICAgEEAgEFAAAAAAAAAAMEAgUAAQYQERIUIDYTISQmMDT/2gAIAQEAAQUC7lK50ZZivGTppb9s2cEl/FIziSOpa31IWAo9+/SRIw38AR7Syc9DgUmyz6cN+kqmYHRKnKtIDrh1m2ypWRXykDJ4mhe6wnUBbmW4+ADfuMf/AMvXgf1MVumWUgjnr8gommKBMY2BYBWVggVeXclAI4Zv9NLng0GUtQiMsTDa32aDZ71mmQmiWulkgEj04gKR+Djf1NI0T+lYC7kp4m0GzW9iotl9hyya94kVvZthD8CLEYW49oEDh4/DQ6PVYR7SfGJsAlXsRaqqg9oezqi1obqlco84F9TVtQNu6aDse2RR1sw4kg2OUQWQWpxZFKEJxLH4IugWTN6F9FF5X0TXKD7yi1Mk3Z3qN5T8LnMfDN8faTFqvNiyJgYogZYZK13Sp6hiepVk3bWoUmoX4eEd54RzwjnhHPCOfjjnBvrH9n//xAAqEQABAwIEBQMFAAAAAAAAAAABAAIDBBESITAzEBNRgbExQWEFICI0Uv/aAAgBAwEBPwG0UcAcRmjwhgdMfhCniAtZciL+VQ7A7+dWZ1w0fHBjDI4NCY0Mbhbxotkd/OrNGeU2ThSbw+yi2R386sG0FLRA5sXImjN7JlW30kyKEjHeh4UWyO/nVpm3hCEV1Y+iazFknQtGdk6EM9lRbI7+dWkNoV+LrG6aRnYrECSEMItdFwc1UWyO/nVxOHusbuqxu6rG7qsbuqxu6r6f+u3V/8QAKREAAQMBCAEDBQAAAAAAAAAAAQACAwQQERIhMDNRsZETMYEgIzJBYf/aAAgBAgEBPwG+R8paDlbLMIwjPIT7r1pOVV5zH461Yhm4/wBsc4MGIpzi84jbVbvjrVif9xzLKnbP0VW7461ZtwqOqIyevWikF16fTEfhmjG8e4sqt3x1qzuulIRfcrx7ouwoSEpspd+1VbvjrVqBfKs23i5EHK9YSAES43oNLSqrdPx1q4RwsLeFhbwsLeFhbwsLeFWb51f/xAA8EAACAQMCAwUFBAcJAAAAAAABAgMEERIAIRMxQQUUIjJRECBhcYEzgpGyFSMkobHR8TBCQ1Jyc8HC4f/aAAgBAQAGPwJ0DkIPb6t0Gr52+WvtDqiYnoxJ+8dBlIZTuCOutjf2lnYIoFySentUMwBY2F+p92U9S3sLHkNFm5n20/8AtP8AxOnqFqZFNMkHDjHl+zjvf15nXAWV+G9XVl/12BuJPCL9NiTrtKY1j/s9PeLHlfxeLlv0+GpaTvMzRskLglgDkTLfxdB4Bqadqn9bBBXJH48gbWK/Pb+Gnm72wrFnEa0t9iLiwx+I3vqjrZKudmmVhJyP90kEDl01SwGXNUnRgDNxCLxzX3+g92WM873Hsb3KH5H8x0qKfDIcUfA4OfgeWiGRWvzuNCHbNlLY26D+uvEoa/qNSSy4JFGpZmI2AA/lrvco4a28zpZt+Q9fpp4kuJEFzFIhUgHrY/XQxRVt6D2JLGco3GSn4aLE2A3J0siNkjDIEdRp/nq0gy+I1bMb9Dq8RDrrdG/D2QRIcXeJ1B9NzqlpkpGNQMFMEkZAit1vy21D3EVI7S4b95Piv5DfntfK1v5ay7LSoCCG0jYv5eLHlz3ywy+Oq7hHw/4PhYKDj0v0/wDdSR0sdS0pope8q4bdsNr+rZf867OlSMyQ0s+bxqLnHBlv8bZX0DDTyGmjxE1QqEPiWF0XqRtc21AsSz/ozM+E5BScDf7vl+F9SJWrUGBVdacDI78R/TrbC2pKYpUCqZIeGgVr+RAf331w5I6pu0WMgl81uTc+mPK301QKFK4wqCGBBBtvz12jOjKFpVEjg9d7bap3mraWieq+winY5P8AHYbD56lpuC7TxkqyIL2tqREZYUhUvLNKcVjX46hqEq0q6Wa4SaBja45gg7g6p+8SBuMmQwa9vVT8dUPyP5jqqpUvxKe2V+Rv6fgR9NM/GTBebZbDSEyoA/l8XPQQuokPJb7nUWTCNpBcI5GWiIjmAWDMOQK6zEqFP82W2gyMGU8iD7vb8Ur4yTwqsY9TmDrs6ebtCOj4EKQzxOGysvVLDe412jS0lYezHkqFkjklJGUYv4Sw+h12zTNUcOGuiiUVZTYyJiciPRiDrs5ZqwVDJIZaiSO/DxHlQbbk6rFaI0lUtR3mPKQycQts45bdNUrRpxJBGxVPU3OqZ1kaskCPFKmyZB928X+q2l/ZZuEhTx4osqkBunJxv+/U5qOz+OJYsI1VV8PibYi+17g64FRR98qTJG3eCbDYLvlz2trh92firHCF4YXfGxNyeW9+Wp1ipsN5j0AcM6Nb6gEaScUnBpMorxOAMiufit9VH9NdogphG9TnEOlsF/7Ze7yGvKNeUa8o15Rryj8NUf3vzH+1/8QAJRABAQACAgEDBQADAAAAAAAAAREAITFBUWGBkRAgcaHxMLHR/9oACAEBAAE/Iax7udGdfSqdmKGldcPpMO9QwI+IlQPCZwJtNZfoquUkA5fwYACNHvLkICNTQsPYfj7R7N/TieLi9fYASnRShKATl2e0yJqsgmtZyg9zxlOgNFaDWnEfqKcmIvWdcTXMcHfHOLsZkdDGh5uNgd85rF/TQtKt/QtsMWJfIBtDAiN+Lcia/hgqATwbnv8AaVae6efoFj6X5+zevGYv/dpeJGuNb31goR0A19cUeDnZIf8AT5wBDtEtcArsDSF9mCyEARsSE2VDsrMDgVUMBAaYL6OCgThEmKi8GRPnDyuMNUOjowvRfDIUTGaKJqmEn7SxNqiOnA3wFd5w+wic6z18I2RHG70oFNSNJojuE5yG32IT2N3/ADcAJQsjUJ4Cp+2QItIebW27T0uGOXaPiq8GT9M3j+kagnNRHMGVDN72GbghqehQK2cs1Kee7y9gzvB1yUMODl5TrjvNS7IUoCaIL981pYsLyHbqn4d5AJsgBCbG7i3DBaE/uc2nQKDYbFnQxcGiGS0o8ZEVlttKuedQLiWu8KUg/IN557lNfgClPX6HEZL68GtrsFHhwMVSEKernNiAj4+cOLNU+wY+A4Y/CXNWftVAR+f1kegyA/LO+tzDkyZMmC1acdSD4HG0PpbDYHgajjH6XaIAqJfUy4rHjQi2UWu8vmhzJQoUG3jeS6s+MIZ4Cnpmzs0TiD5yixezNYLxV3C5crok4TiSE8HYs0JZ485LoN4mr4gZfiAzSL4G2pv3cMm5q+4LY0Edc3UYi6SaavrnjHK8JYrRZrc5fwMo60s21Q6oX5r9qhVnymfyM/kZ/Iz+b9Faf5Sf/9oADAMBAAIAAwAAABCzbRAQAASSHGpQCQSCSSZpKCASQQCcvfCQQSQAThVMASQQQQKP1wCSSCSRySAySSSSSf/EACMRAQABAgYCAwEAAAAAAAAAAAEAESEwMWGRobEQQSBR0YH/2gAIAQMBAT8QQPUbv2xVa+LQsM2GrurnNBAAH32YqenBzXxnBMHFY887sxVCyoDv4Zc1+HO7MUiaWpE1aaOUQy6nsvHFDq/Zl2/2F8pzuzFZg5EYFWi5RJsiJ9NYQUEdD8lDab6E53ZiiY+w7jdKKFGUQpX4jXayZwuFf3nSPjJrX9nO7MWkAW8127NduzVbs1W7Nduzt9uL/8QAJREAAQIEBgIDAAAAAAAAAAAAAQARITFhsRAwUXGRoUGBIMHR/9oACAECAQE/EAXEAeoQQDBhhG0SZBHhd6kq9ESDpYzQjySXTYGMgI5mnGftYzQu9YdYAS1T4T9rGaRBRr+JlA9UCDTGYMEWcmdqYvCMJqbtYzRagfoJ0WDgTUKKCAD2T8HI9oCWKFUbntYzSFI8E2QhDnME4IHh2gUNEeN0AIBgh0zEl0rGa65IKk4VJwqThUnCpOFa2Gb/AP/EACcQAQEAAgEEAQQBBQAAAAAAAAERACExQVFhcRAggZHxwTChsdHh/9oACAEBAAE/EN6KW9atHlwAAKzVeX38B+yR2+XsZN3WpA8GP/QwhoBhgbFXDMnaFVBpERHD1AEl0EYnsRHI75TAqz+K110BteDDqCEHCPGRk0OQrmBy0Q6J6fSOTRL4An+X43irQcvY++VUJfAdA8fDxgp/hwTB7CHdUGTTLybxzvcBElImESUWh49svPlgokBISJgVr4oSeHWslBOLbu6SUgmIC7QAULgT6vvWRO6gKYdAlH5ibKSGxpsoGjBsQVcNFGzT6R1AzfAj+fjoSFx2j5eMIICjR7YP6zj6IPKtkIiVrCNUJhcITaec750iV3EgnH0wbvAggaDTYKp7w9b0BJxuBL4JgbISGBXoxBAAqGbyuoyihkAIoXSZoNQftKGuXBRQKvjC6mwgJVHfDj0mowAqvgDGOWvSSHURH75Y8xER7430GtA/Zw/2x5JcFx9/xjvRQCE98OXdLy0n5y6BXnWXdEjNsHSKOPLhrR1+ioHWocXpOpEIZN2xQ5W2B6VkCJIbXoQEZITu0SpaWe2wBou4vUnCpLqo5qnU5kRbiEXtoqFogRYixu2QzRLwFAMCMkeAgAQ7IGKUuwwOUnNHXDPol5N9ighUotykRTZVlowrk8qqU9dSSyDH1KBCBoTBjfCHogRYu01groqdt4ENWCGY3XZjQWXQnJrH8ZIQkM0oDEsmlHtRjGEAoRAANFjCQAuhtCkK+wRnsYlNhAYBvPSUqHpfRC5GKQfDmuoh0vjn3HHjJLgMF3RqaenTGGMLV7CqeF8YufmUOvbtSIIibxUzeMUQqIYIXDcrQj2aRjntm5Fvw52zFaj1JkIIRm4a5xrIGyV6IpEpd0blWwT5JMTCAh6mO/Rdmgy9EJJU5yXNL1pUBUQALzNqzURaY+JnjsxzZFCN7qBYKvXKAO2XwRdOqRAvO1XvmZrOTDCklhoxwKKDTh57E4AgKUyG4FSYqR3YPDWbFjeYzabCk41ZeEKAeopjZGEcFPAtYVABAuHZSjln5KfTAgNVQ3X6HL1qFXP1vP1vP1/Lf6ufomAAEAgP6v8A/9k=) !important; + background-repeat: no-repeat !important ; + background-position: 0 0 !important; + height: 70px !important; + width: 100% !important; + display: block !important; + } + + .hide-in-pdf { + display: none !important; + } + + .hide-unselected-in-pdf .xforms-deselected { + display: none !important; + } + + .hide-label-n-required > .xforms-label { + border: 1px solid green !important; + display: none !important; + } +} + +@page { + @top-left { + content: element(logo); + border-bottom: 1px solid gray; + padding-top: 10px; + padding-bottom: 10px; + vertical-align: bottom; + } + @top-center { + content: " "; + color: white !important; + } +} \ No newline at end of file diff --git a/configuration/WEB-INF/resources/config/license.xml b/configuration/WEB-INF/resources/config/license.xml new file mode 100644 index 0000000..166a3d1 --- /dev/null +++ b/configuration/WEB-INF/resources/config/license.xml @@ -0,0 +1,18 @@ + + + + Orbeon, Inc. + Kamil Łukowski + Hycom + kamil.lukowski@it.hycom.pl + 2017-06-05 + + 2017-09-03 + + + + + + + MCwCFElcM8HWGXwfyB3JuOb24WybtQXLAhRwL7Kuuebb6HzAU7RLphXbNFR+gw== + \ No newline at end of file diff --git a/configuration/WEB-INF/resources/config/properties-local.xml b/configuration/WEB-INF/resources/config/properties-local.xml new file mode 100644 index 0000000..b57550d --- /dev/null +++ b/configuration/WEB-INF/resources/config/properties-local.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + /apps/fr/icons/icoca.png + + + + + refresh summary clear pdf save-draft submit review + + + + + require-uploads + then validate-all + then save + then send( + uri = "http://192.168.0.141:8090/integration/rest/form/submit/{xxf:instance('fr-parameters-instance')/document}", + method = "PUT", + content = "metadata" + ) + then email + then success-message("submit-dialog-message") + then send(uri="http://localhost:8080/rest/mapper/submit/{xxf:instance('fr-parameters-instance')/app}/{xxf:instance('fr-parameters-instance')/form}/{xxf:get-remote-user()}", method = "POST", content-type = "application/xml", content = "xml") + then navigate(uri = "javascript:hideSubmit()") + + + + + validate-all + then xf:show( + dialog = "fb-publish-dialog", + app = "{xxf:instance('fb-form-instance')/xh:head/xf:model[@id = 'fr-form-model']/xf:instance[@id = 'fr-form-metadata']/*/application-name}", + form = "{xxf:instance('fb-form-instance')/xh:head/xf:model[@id = 'fr-form-model']/xf:instance[@id = 'fr-form-metadata']/*/form-name}") + then send(uri="http://localhost:8080/rest/mapper/publish/{xxf:instance('fb-form-instance')/xh:head/xf:model[@id = 'fr-form-model']/xf:instance[@id = 'fr-form-metadata']/*/application-name}/{xxf:instance('fb-form-instance')/xh:head/xf:model[@id = 'fr-form-model']/xf:instance[@id = 'fr-form-metadata']/*/form-name}", method = "PUT", prune="false", content = "metadata") + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Dear Sir/Madam + + There is a new form in Orbeon system. + This message contains an attachment with field form. + You can download and save it or find it in Orbeon system. + + Best regards + Orbeon + + \ No newline at end of file diff --git a/configuration/WEB-INF/web.xml b/configuration/WEB-INF/web.xml new file mode 100644 index 0000000..dc00686 --- /dev/null +++ b/configuration/WEB-INF/web.xml @@ -0,0 +1,376 @@ + + + + Orbeon Forms + + Orbeon Forms is an open source, standard-based web forms solution, which + includes Form Builder, a WYSIWYG browser-based authoring tool, and Form + Runner, a runtime environment which facilitates the deployment and + integration of a large number of complex forms. Orbeon Forms implements + different technologies, such as XForms and Ajax, with no need for + client-side software or plug-ins. + + + + oxf.resources.factory + org.orbeon.oxf.resources.PriorityResourceManagerFactory + + + + oxf.resources.priority.2 + org.orbeon.oxf.resources.WebAppResourceManagerFactory + + + oxf.resources.priority.2.oxf.resources.webapp.rootdir + /WEB-INF/resources + + + + oxf.resources.priority.6 + org.orbeon.oxf.resources.ClassLoaderResourceManagerFactory + + + + oxf.run-mode + prod + + + + oxf.properties + oxf:/config/properties-${oxf.run-mode}.xml + + + + oxf.initialize-logging + true + + + + + + + + + + + + orbeon-exist-filter + org.orbeon.oxf.servlet.TokenSecurityFilter + + + orbeon-exist-filter + /exist/* + REQUEST + FORWARD + + + + orbeon-limiter-filter + org.orbeon.oxf.servlet.LimiterFilter + + + include + (/fr/.*)|(/xforms-server) + + + + exclude + (?!/([^/]+)/service/).+\.(gif|css|pdf|json|js|coffee|map|png|jpg|xsd|htc|ico|swf|html|htm|txt) + + + + + min-threads + 1 + + + num-threads + x1 + + + max-threads + x1 + + + + orbeon-limiter-filter + /* + REQUEST + + + + orbeon-form-runner-auth-servlet-filter + org.orbeon.oxf.servlet.FormRunnerAuthFilter + + + orbeon-form-runner-auth-servlet-filter + /* + REQUEST + FORWARD + + + + orbeon-xforms-filter + org.orbeon.oxf.servlet.OrbeonXFormsFilter + + + + + + orbeon-xforms-filter + /xforms-jsp/* + + REQUEST + FORWARD + + + + org.orbeon.oxf.webapp.OrbeonServletContextListener + + + + org.orbeon.oxf.webapp.OrbeonSessionListener + + + + net.sf.ehcache.constructs.web.ShutdownListener + + + + orbeon-main-servlet + org.orbeon.oxf.servlet.OrbeonServlet + + + oxf.main-processor.name + {http://www.orbeon.com/oxf/processors}pipeline + + + oxf.main-processor.input.config + oxf:/config/prologue-servlet.xpl + + + + oxf.error-processor.name + {http://www.orbeon.com/oxf/processors}page-flow + + + oxf.error-processor.input.controller + oxf:/config/error-page-flow.xml + + + + oxf.http.accept-methods + get,post,head,put,delete + + + + + + + + + orbeon-renderer-servlet + org.orbeon.oxf.servlet.OrbeonServlet + + + oxf.main-processor.name + {http://www.orbeon.com/oxf/processors}page-flow + + + oxf.main-processor.input.controller + oxf:/ops/xforms/xforms-renderer-page-flow.xml + + + + oxf.error-processor.name + {http://www.orbeon.com/oxf/processors}pipeline + + + oxf.error-processor.input.config + oxf:/config/error.xpl + + + + + + + exist-rest-servlet + org.exist.http.servlets.EXistServlet + + basedir + WEB-INF/ + + + configuration + exist-conf.xml + + + start + true + + + + + + + orbeon-main-servlet + / + + + orbeon-renderer-servlet + /xforms-renderer + + + exist-rest-servlet + /exist/rest/* + + + + + + + + + + DataSource + jdbc/postgresql + javax.sql.DataSource + Container + + + + + + Form Builder + /fr/* + + + form-user + + + + + Form Builder + /fr/orbeon/builder/* + + + form-admin + + + + + Form Runner services and public pages and resources + /fr/service/* + /fr/style/* + /fr/not-found + /fr/unauthorized + /fr/error + /fr/login + /fr/login-error + + + + + + FORM + Secure content + + /fr/login + /fr/login-error + + + + form-admin + + + form-user + + + + 60 + + \ No newline at end of file diff --git a/configuration/info b/configuration/info new file mode 100644 index 0000000..4c46bd3 --- /dev/null +++ b/configuration/info @@ -0,0 +1,2 @@ +Installation and configuration: +http://confluence.moose.local/display/HYC/Configuration+of+testing+environment \ No newline at end of file diff --git a/configuration/sql/dropdownlist-create.sql b/configuration/sql/dropdownlist-create.sql new file mode 100644 index 0000000..aa5efcc --- /dev/null +++ b/configuration/sql/dropdownlist-create.sql @@ -0,0 +1,42 @@ +CREATE TABLE dropdown_currency +( + id bigint NOT NULL, + entity character varying(120) NOT NULL, + currency character varying(120) NOT NULL, + alphabetic_code character varying(3) NOT NULL, + numeric_code character varying(3) NOT NULL, + CONSTRAINT dropdown_currency_pkey PRIMARY KEY (id) +); + +CREATE TABLE dropdown_country +( + id bigint NOT NULL, + iso_alpha2 character varying(2) NOT NULL, + iso_alpha3 character varying(3) NOT NULL, + iso_numeric SMALLINT NOT NULL, + name character varying(120) NOT NULL, + CONSTRAINT dropdown_country_pkey PRIMARY KEY (id) +); + +CREATE TABLE dropdown_member_type +( + id bigint NOT NULL, + name character varying(120) NOT NULL, + CONSTRAINT dropdown_member_type_pkey PRIMARY KEY (id) +); + +CREATE TABLE dropdown_certificate_standard +( + id bigint NOT NULL, + name character varying(60) NOT NULL, + CONSTRAINT dropdown_certificate_standard_pkey PRIMARY KEY (id) +); + +CREATE TABLE dropdown_service_type +( + id bigint NOT NULL, + name character varying(120) NOT NULL, + description character varying(120) NOT NULL, + CONSTRAINT dropdown_service_type_pkey PRIMARY KEY (id) +); + diff --git a/configuration/sql/dropdownlist-values.sql b/configuration/sql/dropdownlist-values.sql new file mode 100644 index 0000000..c14edc8 --- /dev/null +++ b/configuration/sql/dropdownlist-values.sql @@ -0,0 +1,556 @@ + +--Currencies +INSERT INTO dropdown_currency VALUES(1,'AFGHANISTAN','Afghani','AFN','971'); +INSERT INTO dropdown_currency VALUES(2,'ÅLAND ISLANDS','Euro','EUR','978'); +INSERT INTO dropdown_currency VALUES(3,'ALBANIA','Lek','ALL','008'); +INSERT INTO dropdown_currency VALUES(4,'ALGERIA','Algerian Dinar','DZD','012'); +INSERT INTO dropdown_currency VALUES(5,'AMERICAN SAMOA','US Dollar','USD','840'); +INSERT INTO dropdown_currency VALUES(6,'ANDORRA','Euro','EUR','978'); +INSERT INTO dropdown_currency VALUES(7,'ANGOLA','Kwanza','AOA','973'); +INSERT INTO dropdown_currency VALUES(8,'ANGUILLA','East Caribbean Dollar','XCD','951'); +INSERT INTO dropdown_currency VALUES(9,'ANTARCTICA','No universal currency','N/C',''); +INSERT INTO dropdown_currency VALUES(10,'ANTIGUA AND BARBUDA','East Caribbean Dollar','XCD','951'); +INSERT INTO dropdown_currency VALUES(11,'ARGENTINA','Argentine Peso','ARS','032'); +INSERT INTO dropdown_currency VALUES(12,'ARMENIA','Armenian Dram','AMD','051'); +INSERT INTO dropdown_currency VALUES(13,'ARUBA','Aruban Florin','AWG','533'); +INSERT INTO dropdown_currency VALUES(14,'AUSTRALIA','Australian Dollar','AUD','036'); +INSERT INTO dropdown_currency VALUES(15,'AUSTRIA','Euro','EUR','978'); +INSERT INTO dropdown_currency VALUES(16,'AZERBAIJAN','Azerbaijan Manat','AZN','944'); +INSERT INTO dropdown_currency VALUES(17,'BAHAMAS (THE)','Bahamian Dollar','BSD','044'); +INSERT INTO dropdown_currency VALUES(18,'BAHRAIN','Bahraini Dinar','BHD','048'); +INSERT INTO dropdown_currency VALUES(19,'BANGLADESH','Taka','BDT','050'); +INSERT INTO dropdown_currency VALUES(20,'BARBADOS','Barbados Dollar','BBD','052'); +INSERT INTO dropdown_currency VALUES(21,'BELARUS','Belarusian Ruble','BYN','933'); +INSERT INTO dropdown_currency VALUES(22,'BELGIUM','Euro','EUR','978'); +INSERT INTO dropdown_currency VALUES(23,'BELIZE','Belize Dollar','BZD','084'); +INSERT INTO dropdown_currency VALUES(24,'BENIN','CFA Franc BCEAO','XOF','952'); +INSERT INTO dropdown_currency VALUES(25,'BERMUDA','Bermudian Dollar','BMD','060'); +INSERT INTO dropdown_currency VALUES(26,'BHUTAN','Indian Rupee','INR','356'); +INSERT INTO dropdown_currency VALUES(27,'BHUTAN','Ngultrum','BTN','064'); +INSERT INTO dropdown_currency VALUES(28,'BOLIVIA (PLURINATIONAL STATE OF)','Boliviano','BOB','068'); +INSERT INTO dropdown_currency VALUES(29,'BOLIVIA (PLURINATIONAL STATE OF)','Mvdol','BOV','984'); +INSERT INTO dropdown_currency VALUES(30,'BONAIRE, SINT EUSTATIUS AND SABA','US Dollar','USD','840'); +INSERT INTO dropdown_currency VALUES(31,'BOSNIA AND HERZEGOVINA','Convertible Mark','BAM','977'); +INSERT INTO dropdown_currency VALUES(32,'BOTSWANA','Pula','BWP','072'); +INSERT INTO dropdown_currency VALUES(33,'BOUVET ISLAND','Norwegian Krone','NOK','578'); +INSERT INTO dropdown_currency VALUES(34,'BRAZIL','Brazilian Real','BRL','986'); +INSERT INTO dropdown_currency VALUES(35,'BRITISH INDIAN OCEAN TERRITORY (THE)','US Dollar','USD','840'); +INSERT INTO dropdown_currency VALUES(36,'BRUNEI DARUSSALAM','Brunei Dollar','BND','096'); +INSERT INTO dropdown_currency VALUES(37,'BULGARIA','Bulgarian Lev','BGN','975'); +INSERT INTO dropdown_currency VALUES(38,'BURKINA FASO','CFA Franc BCEAO','XOF','952'); +INSERT INTO dropdown_currency VALUES(39,'BURUNDI','Burundi Franc','BIF','108'); +INSERT INTO dropdown_currency VALUES(40,'CABO VERDE','Cabo Verde Escudo','CVE','132'); +INSERT INTO dropdown_currency VALUES(41,'CAMBODIA','Riel','KHR','116'); +INSERT INTO dropdown_currency VALUES(42,'CAMEROON','CFA Franc BEAC','XAF','950'); +INSERT INTO dropdown_currency VALUES(43,'CANADA','Canadian Dollar','CAD','124'); +INSERT INTO dropdown_currency VALUES(44,'CAYMAN ISLANDS (THE)','Cayman Islands Dollar','KYD','136'); +INSERT INTO dropdown_currency VALUES(45,'CENTRAL AFRICAN REPUBLIC (THE)','CFA Franc BEAC','XAF','950'); +INSERT INTO dropdown_currency VALUES(46,'CHAD','CFA Franc BEAC','XAF','950'); +INSERT INTO dropdown_currency VALUES(47,'CHILE','Chilean Peso','CLP','152'); +INSERT INTO dropdown_currency VALUES(48,'CHILE','Unidad de Fomento','CLF','990'); +INSERT INTO dropdown_currency VALUES(49,'CHINA','Yuan Renminbi','CNY','156'); +INSERT INTO dropdown_currency VALUES(50,'CHRISTMAS ISLAND','Australian Dollar','AUD','036'); +INSERT INTO dropdown_currency VALUES(51,'COCOS (KEELING) ISLANDS (THE)','Australian Dollar','AUD','036'); +INSERT INTO dropdown_currency VALUES(52,'COLOMBIA','Colombian Peso','COP','170'); +INSERT INTO dropdown_currency VALUES(53,'COLOMBIA','Unidad de Valor Real','COU','970'); +INSERT INTO dropdown_currency VALUES(54,'COMOROS (THE)','Comorian Franc ','KMF','174'); +INSERT INTO dropdown_currency VALUES(55,'CONGO (THE DEMOCRATIC REPUBLIC OF THE)','Congolese Franc','CDF','976'); +INSERT INTO dropdown_currency VALUES(56,'CONGO (THE)','CFA Franc BEAC','XAF','950'); +INSERT INTO dropdown_currency VALUES(57,'COOK ISLANDS (THE)','New Zealand Dollar','NZD','554'); +INSERT INTO dropdown_currency VALUES(58,'COSTA RICA','Costa Rican Colon','CRC','188'); +INSERT INTO dropdown_currency VALUES(59,'CÔTE D''IVOIRE','CFA Franc BCEAO','XOF','952'); +INSERT INTO dropdown_currency VALUES(60,'CROATIA','Kuna','HRK','191'); +INSERT INTO dropdown_currency VALUES(61,'CUBA','Cuban Peso','CUP','192'); +INSERT INTO dropdown_currency VALUES(62,'CUBA','Peso Convertible','CUC','931'); +INSERT INTO dropdown_currency VALUES(63,'CURAÇAO','Netherlands Antillean Guilder','ANG','532'); +INSERT INTO dropdown_currency VALUES(64,'CYPRUS','Euro','EUR','978'); +INSERT INTO dropdown_currency VALUES(65,'CZECHIA','Czech Koruna','CZK','203'); +INSERT INTO dropdown_currency VALUES(66,'DENMARK','Danish Krone','DKK','208'); +INSERT INTO dropdown_currency VALUES(67,'DJIBOUTI','Djibouti Franc','DJF','262'); +INSERT INTO dropdown_currency VALUES(68,'DOMINICA','East Caribbean Dollar','XCD','951'); +INSERT INTO dropdown_currency VALUES(69,'DOMINICAN REPUBLIC (THE)','Dominican Peso','DOP','214'); +INSERT INTO dropdown_currency VALUES(70,'ECUADOR','US Dollar','USD','840'); +INSERT INTO dropdown_currency VALUES(71,'EGYPT','Egyptian Pound','EGP','818'); +INSERT INTO dropdown_currency VALUES(72,'EL SALVADOR','El Salvador Colon','SVC','222'); +INSERT INTO dropdown_currency VALUES(73,'EL SALVADOR','US Dollar','USD','840'); +INSERT INTO dropdown_currency VALUES(74,'EQUATORIAL GUINEA','CFA Franc BEAC','XAF','950'); +INSERT INTO dropdown_currency VALUES(75,'ERITREA','Nakfa','ERN','232'); +INSERT INTO dropdown_currency VALUES(76,'ESTONIA','Euro','EUR','978'); +INSERT INTO dropdown_currency VALUES(77,'ETHIOPIA','Ethiopian Birr','ETB','230'); +INSERT INTO dropdown_currency VALUES(78,'EUROPEAN UNION','Euro','EUR','978'); +INSERT INTO dropdown_currency VALUES(79,'FALKLAND ISLANDS (THE) [MALVINAS]','Falkland Islands Pound','FKP','238'); +INSERT INTO dropdown_currency VALUES(80,'FAROE ISLANDS (THE)','Danish Krone','DKK','208'); +INSERT INTO dropdown_currency VALUES(81,'FIJI','Fiji Dollar','FJD','242'); +INSERT INTO dropdown_currency VALUES(82,'FINLAND','Euro','EUR','978'); +INSERT INTO dropdown_currency VALUES(83,'FRANCE','Euro','EUR','978'); +INSERT INTO dropdown_currency VALUES(84,'FRENCH GUIANA','Euro','EUR','978'); +INSERT INTO dropdown_currency VALUES(85,'FRENCH POLYNESIA','CFP Franc','XPF','953'); +INSERT INTO dropdown_currency VALUES(86,'FRENCH SOUTHERN TERRITORIES (THE)','Euro','EUR','978'); +INSERT INTO dropdown_currency VALUES(87,'GABON','CFA Franc BEAC','XAF','950'); +INSERT INTO dropdown_currency VALUES(88,'GAMBIA (THE)','Dalasi','GMD','270'); +INSERT INTO dropdown_currency VALUES(89,'GEORGIA','Lari','GEL','981'); +INSERT INTO dropdown_currency VALUES(90,'GERMANY','Euro','EUR','978'); +INSERT INTO dropdown_currency VALUES(91,'GHANA','Ghana Cedi','GHS','936'); +INSERT INTO dropdown_currency VALUES(92,'GIBRALTAR','Gibraltar Pound','GIP','292'); +INSERT INTO dropdown_currency VALUES(93,'GREECE','Euro','EUR','978'); +INSERT INTO dropdown_currency VALUES(94,'GREENLAND','Danish Krone','DKK','208'); +INSERT INTO dropdown_currency VALUES(95,'GRENADA','East Caribbean Dollar','XCD','951'); +INSERT INTO dropdown_currency VALUES(96,'GUADELOUPE','Euro','EUR','978'); +INSERT INTO dropdown_currency VALUES(97,'GUAM','US Dollar','USD','840'); +INSERT INTO dropdown_currency VALUES(98,'GUATEMALA','Quetzal','GTQ','320'); +INSERT INTO dropdown_currency VALUES(99,'GUERNSEY','Pound Sterling','GBP','826'); +INSERT INTO dropdown_currency VALUES(100,'GUINEA','Guinean Franc','GNF','324'); +INSERT INTO dropdown_currency VALUES(101,'GUINEA-BISSAU','CFA Franc BCEAO','XOF','952'); +INSERT INTO dropdown_currency VALUES(102,'GUYANA','Guyana Dollar','GYD','328'); +INSERT INTO dropdown_currency VALUES(103,'HAITI','Gourde','HTG','332'); +INSERT INTO dropdown_currency VALUES(104,'HAITI','US Dollar','USD','840'); +INSERT INTO dropdown_currency VALUES(105,'HEARD ISLAND AND McDONALD ISLANDS','Australian Dollar','AUD','036'); +INSERT INTO dropdown_currency VALUES(106,'HOLY SEE (THE)','Euro','EUR','978'); +INSERT INTO dropdown_currency VALUES(107,'HONDURAS','Lempira','HNL','340'); +INSERT INTO dropdown_currency VALUES(108,'HONG KONG','Hong Kong Dollar','HKD','344'); +INSERT INTO dropdown_currency VALUES(109,'HUNGARY','Forint','HUF','348'); +INSERT INTO dropdown_currency VALUES(110,'ICELAND','Iceland Krona','ISK','352'); +INSERT INTO dropdown_currency VALUES(111,'INDIA','Indian Rupee','INR','356'); +INSERT INTO dropdown_currency VALUES(112,'INDONESIA','Rupiah','IDR','360'); +INSERT INTO dropdown_currency VALUES(113,'INTERNATIONAL MONETARY FUND (IMF) ','SDR (Special Drawing Right)','XDR','960'); +INSERT INTO dropdown_currency VALUES(114,'IRAN (ISLAMIC REPUBLIC OF)','Iranian Rial','IRR','364'); +INSERT INTO dropdown_currency VALUES(115,'IRAQ','Iraqi Dinar','IQD','368'); +INSERT INTO dropdown_currency VALUES(116,'IRELAND','Euro','EUR','978'); +INSERT INTO dropdown_currency VALUES(117,'ISLE OF MAN','Pound Sterling','GBP','826'); +INSERT INTO dropdown_currency VALUES(118,'ISRAEL','New Israeli Sheqel','ILS','376'); +INSERT INTO dropdown_currency VALUES(119,'ITALY','Euro','EUR','978'); +INSERT INTO dropdown_currency VALUES(120,'JAMAICA','Jamaican Dollar','JMD','388'); +INSERT INTO dropdown_currency VALUES(121,'JAPAN','Yen','JPY','392'); +INSERT INTO dropdown_currency VALUES(122,'JERSEY','Pound Sterling','GBP','826'); +INSERT INTO dropdown_currency VALUES(123,'JORDAN','Jordanian Dinar','JOD','400'); +INSERT INTO dropdown_currency VALUES(124,'KAZAKHSTAN','Tenge','KZT','398'); +INSERT INTO dropdown_currency VALUES(125,'KENYA','Kenyan Shilling','KES','404'); +INSERT INTO dropdown_currency VALUES(126,'KIRIBATI','Australian Dollar','AUD','036'); +INSERT INTO dropdown_currency VALUES(127,'KOREA (THE DEMOCRATIC PEOPLE’S REPUBLIC OF)','North Korean Won','KPW','408'); +INSERT INTO dropdown_currency VALUES(128,'KOREA (THE REPUBLIC OF)','Won','KRW','410'); +INSERT INTO dropdown_currency VALUES(129,'KUWAIT','Kuwaiti Dinar','KWD','414'); +INSERT INTO dropdown_currency VALUES(130,'KYRGYZSTAN','Som','KGS','417'); +INSERT INTO dropdown_currency VALUES(131,'LAO PEOPLE’S DEMOCRATIC REPUBLIC (THE)','Lao Kip','LAK','418'); +INSERT INTO dropdown_currency VALUES(132,'LATVIA','Euro','EUR','978'); +INSERT INTO dropdown_currency VALUES(133,'LEBANON','Lebanese Pound','LBP','422'); +INSERT INTO dropdown_currency VALUES(134,'LESOTHO','Loti','LSL','426'); +INSERT INTO dropdown_currency VALUES(135,'LESOTHO','Rand','ZAR','710'); +INSERT INTO dropdown_currency VALUES(136,'LIBERIA','Liberian Dollar','LRD','430'); +INSERT INTO dropdown_currency VALUES(137,'LIBYA','Libyan Dinar','LYD','434'); +INSERT INTO dropdown_currency VALUES(138,'LIECHTENSTEIN','Swiss Franc','CHF','756'); +INSERT INTO dropdown_currency VALUES(139,'LITHUANIA','Euro','EUR','978'); +INSERT INTO dropdown_currency VALUES(140,'LUXEMBOURG','Euro','EUR','978'); +INSERT INTO dropdown_currency VALUES(141,'MACAO','Pataca','MOP','446'); +INSERT INTO dropdown_currency VALUES(142,'MACEDONIA (THE FORMER YUGOSLAV REPUBLIC OF)','Denar','MKD','807'); +INSERT INTO dropdown_currency VALUES(143,'MADAGASCAR','Malagasy Ariary','MGA','969'); +INSERT INTO dropdown_currency VALUES(144,'MALAWI','Malawi Kwacha','MWK','454'); +INSERT INTO dropdown_currency VALUES(145,'MALAYSIA','Malaysian Ringgit','MYR','458'); +INSERT INTO dropdown_currency VALUES(146,'MALDIVES','Rufiyaa','MVR','462'); +INSERT INTO dropdown_currency VALUES(147,'MALI','CFA Franc BCEAO','XOF','952'); +INSERT INTO dropdown_currency VALUES(148,'MALTA','Euro','EUR','978'); +INSERT INTO dropdown_currency VALUES(149,'MARSHALL ISLANDS (THE)','US Dollar','USD','840'); +INSERT INTO dropdown_currency VALUES(150,'MARTINIQUE','Euro','EUR','978'); +INSERT INTO dropdown_currency VALUES(151,'MAURITANIA','Ouguiya','MRO','478'); +INSERT INTO dropdown_currency VALUES(152,'MAURITIUS','Mauritius Rupee','MUR','480'); +INSERT INTO dropdown_currency VALUES(153,'MAYOTTE','Euro','EUR','978'); +INSERT INTO dropdown_currency VALUES(154,'MEMBER COUNTRIES OF THE AFRICAN DEVELOPMENT BANK GROUP','ADB Unit of Account','XUA','965'); +INSERT INTO dropdown_currency VALUES(155,'MEXICO','Mexican Peso','MXN','484'); +INSERT INTO dropdown_currency VALUES(156,'MEXICO','Mexican Unidad de Inversion (UDI)','MXV','979'); +INSERT INTO dropdown_currency VALUES(157,'MICRONESIA (FEDERATED STATES OF)','US Dollar','USD','840'); +INSERT INTO dropdown_currency VALUES(158,'MOLDOVA (THE REPUBLIC OF)','Moldovan Leu','MDL','498'); +INSERT INTO dropdown_currency VALUES(159,'MONACO','Euro','EUR','978'); +INSERT INTO dropdown_currency VALUES(160,'MONGOLIA','Tugrik','MNT','496'); +INSERT INTO dropdown_currency VALUES(161,'MONTENEGRO','Euro','EUR','978'); +INSERT INTO dropdown_currency VALUES(162,'MONTSERRAT','East Caribbean Dollar','XCD','951'); +INSERT INTO dropdown_currency VALUES(163,'MOROCCO','Moroccan Dirham','MAD','504'); +INSERT INTO dropdown_currency VALUES(164,'MOZAMBIQUE','Mozambique Metical','MZN','943'); +INSERT INTO dropdown_currency VALUES(165,'MYANMAR','Kyat','MMK','104'); +INSERT INTO dropdown_currency VALUES(166,'NAMIBIA','Namibia Dollar','NAD','516'); +INSERT INTO dropdown_currency VALUES(167,'NAMIBIA','Rand','ZAR','710'); +INSERT INTO dropdown_currency VALUES(168,'NAURU','Australian Dollar','AUD','036'); +INSERT INTO dropdown_currency VALUES(169,'NEPAL','Nepalese Rupee','NPR','524'); +INSERT INTO dropdown_currency VALUES(170,'NETHERLANDS (THE)','Euro','EUR','978'); +INSERT INTO dropdown_currency VALUES(171,'NEW CALEDONIA','CFP Franc','XPF','953'); +INSERT INTO dropdown_currency VALUES(172,'NEW ZEALAND','New Zealand Dollar','NZD','554'); +INSERT INTO dropdown_currency VALUES(173,'NICARAGUA','Cordoba Oro','NIO','558'); +INSERT INTO dropdown_currency VALUES(174,'NIGER (THE)','CFA Franc BCEAO','XOF','952'); +INSERT INTO dropdown_currency VALUES(175,'NIGERIA','Naira','NGN','566'); +INSERT INTO dropdown_currency VALUES(176,'NIUE','New Zealand Dollar','NZD','554'); +INSERT INTO dropdown_currency VALUES(177,'NORFOLK ISLAND','Australian Dollar','AUD','036'); +INSERT INTO dropdown_currency VALUES(178,'NORTHERN MARIANA ISLANDS (THE)','US Dollar','USD','840'); +INSERT INTO dropdown_currency VALUES(179,'NORWAY','Norwegian Krone','NOK','578'); +INSERT INTO dropdown_currency VALUES(180,'OMAN','Rial Omani','OMR','512'); +INSERT INTO dropdown_currency VALUES(181,'PAKISTAN','Pakistan Rupee','PKR','586'); +INSERT INTO dropdown_currency VALUES(182,'PALAU','US Dollar','USD','840'); +INSERT INTO dropdown_currency VALUES(183,'PALESTINE, STATE OF','No universal currency','N/C','N/C'); +INSERT INTO dropdown_currency VALUES(184,'PANAMA','Balboa','PAB','590'); +INSERT INTO dropdown_currency VALUES(185,'PANAMA','US Dollar','USD','840'); +INSERT INTO dropdown_currency VALUES(186,'PAPUA NEW GUINEA','Kina','PGK','598'); +INSERT INTO dropdown_currency VALUES(187,'PARAGUAY','Guarani','PYG','600'); +INSERT INTO dropdown_currency VALUES(188,'PERU','Sol','PEN','604'); +INSERT INTO dropdown_currency VALUES(189,'PHILIPPINES (THE)','Philippine Peso','PHP','608'); +INSERT INTO dropdown_currency VALUES(190,'PITCAIRN','New Zealand Dollar','NZD','554'); +INSERT INTO dropdown_currency VALUES(191,'POLAND','Zloty','PLN','985'); +INSERT INTO dropdown_currency VALUES(192,'PORTUGAL','Euro','EUR','978'); +INSERT INTO dropdown_currency VALUES(193,'PUERTO RICO','US Dollar','USD','840'); +INSERT INTO dropdown_currency VALUES(194,'QATAR','Qatari Rial','QAR','634'); +INSERT INTO dropdown_currency VALUES(195,'RÉUNION','Euro','EUR','978'); +INSERT INTO dropdown_currency VALUES(196,'ROMANIA','Romanian Leu','RON','946'); +INSERT INTO dropdown_currency VALUES(197,'RUSSIAN FEDERATION (THE)','Russian Ruble','RUB','643'); +INSERT INTO dropdown_currency VALUES(198,'RWANDA','Rwanda Franc','RWF','646'); +INSERT INTO dropdown_currency VALUES(199,'SAINT BARTHÉLEMY','Euro','EUR','978'); +INSERT INTO dropdown_currency VALUES(200,'SAINT HELENA, ASCENSION AND TRISTAN DA CUNHA','Saint Helena Pound','SHP','654'); +INSERT INTO dropdown_currency VALUES(201,'SAINT KITTS AND NEVIS','East Caribbean Dollar','XCD','951'); +INSERT INTO dropdown_currency VALUES(202,'SAINT LUCIA','East Caribbean Dollar','XCD','951'); +INSERT INTO dropdown_currency VALUES(203,'SAINT MARTIN (FRENCH PART)','Euro','EUR','978'); +INSERT INTO dropdown_currency VALUES(204,'SAINT PIERRE AND MIQUELON','Euro','EUR','978'); +INSERT INTO dropdown_currency VALUES(205,'SAINT VINCENT AND THE GRENADINES','East Caribbean Dollar','XCD','951'); +INSERT INTO dropdown_currency VALUES(206,'SAMOA','Tala','WST','882'); +INSERT INTO dropdown_currency VALUES(207,'SAN MARINO','Euro','EUR','978'); +INSERT INTO dropdown_currency VALUES(208,'SAO TOME AND PRINCIPE','Dobra','STD','678'); +INSERT INTO dropdown_currency VALUES(209,'SAUDI ARABIA','Saudi Riyal','SAR','682'); +INSERT INTO dropdown_currency VALUES(210,'SENEGAL','CFA Franc BCEAO','XOF','952'); +INSERT INTO dropdown_currency VALUES(211,'SERBIA','Serbian Dinar','RSD','941'); +INSERT INTO dropdown_currency VALUES(212,'SEYCHELLES','Seychelles Rupee','SCR','690'); +INSERT INTO dropdown_currency VALUES(213,'SIERRA LEONE','Leone','SLL','694'); +INSERT INTO dropdown_currency VALUES(214,'SINGAPORE','Singapore Dollar','SGD','702'); +INSERT INTO dropdown_currency VALUES(215,'SINT MAARTEN (DUTCH PART)','Netherlands Antillean Guilder','ANG','532'); +INSERT INTO dropdown_currency VALUES(216,'SISTEMA UNITARIO DE COMPENSACION REGIONAL DE PAGOS "SUCRE"','Sucre','XSU','994'); +INSERT INTO dropdown_currency VALUES(217,'SLOVAKIA','Euro','EUR','978'); +INSERT INTO dropdown_currency VALUES(218,'SLOVENIA','Euro','EUR','978'); +INSERT INTO dropdown_currency VALUES(219,'SOLOMON ISLANDS','Solomon Islands Dollar','SBD','090'); +INSERT INTO dropdown_currency VALUES(220,'SOMALIA','Somali Shilling','SOS','706'); +INSERT INTO dropdown_currency VALUES(221,'SOUTH AFRICA','Rand','ZAR','710'); +INSERT INTO dropdown_currency VALUES(222,'SOUTH GEORGIA AND THE SOUTH SANDWICH ISLANDS','No universal currency','N/C',''); +INSERT INTO dropdown_currency VALUES(223,'SOUTH SUDAN','South Sudanese Pound','SSP','728'); +INSERT INTO dropdown_currency VALUES(224,'SPAIN','Euro','EUR','978'); +INSERT INTO dropdown_currency VALUES(225,'SRI LANKA','Sri Lanka Rupee','LKR','144'); +INSERT INTO dropdown_currency VALUES(226,'SUDAN (THE)','Sudanese Pound','SDG','938'); +INSERT INTO dropdown_currency VALUES(227,'SURINAME','Surinam Dollar','SRD','968'); +INSERT INTO dropdown_currency VALUES(228,'SVALBARD AND JAN MAYEN','Norwegian Krone','NOK','578'); +INSERT INTO dropdown_currency VALUES(229,'SWAZILAND','Lilangeni','SZL','748'); +INSERT INTO dropdown_currency VALUES(230,'SWEDEN','Swedish Krona','SEK','752'); +INSERT INTO dropdown_currency VALUES(231,'SWITZERLAND','Swiss Franc','CHF','756'); +INSERT INTO dropdown_currency VALUES(232,'SWITZERLAND','WIR Euro','CHE','947'); +INSERT INTO dropdown_currency VALUES(233,'SWITZERLAND','WIR Franc','CHW','948'); +INSERT INTO dropdown_currency VALUES(234,'SYRIAN ARAB REPUBLIC','Syrian Pound','SYP','760'); +INSERT INTO dropdown_currency VALUES(235,'TAIWAN (PROVINCE OF CHINA)','New Taiwan Dollar','TWD','901'); +INSERT INTO dropdown_currency VALUES(236,'TAJIKISTAN','Somoni','TJS','972'); +INSERT INTO dropdown_currency VALUES(237,'TANZANIA, UNITED REPUBLIC OF','Tanzanian Shilling','TZS','834'); +INSERT INTO dropdown_currency VALUES(238,'THAILAND','Baht','THB','764'); +INSERT INTO dropdown_currency VALUES(239,'TIMOR-LESTE','US Dollar','USD','840'); +INSERT INTO dropdown_currency VALUES(240,'TOGO','CFA Franc BCEAO','XOF','952'); +INSERT INTO dropdown_currency VALUES(241,'TOKELAU','New Zealand Dollar','NZD','554'); +INSERT INTO dropdown_currency VALUES(242,'TONGA','Pa’anga','TOP','776'); +INSERT INTO dropdown_currency VALUES(243,'TRINIDAD AND TOBAGO','Trinidad and Tobago Dollar','TTD','780'); +INSERT INTO dropdown_currency VALUES(244,'TUNISIA','Tunisian Dinar','TND','788'); +INSERT INTO dropdown_currency VALUES(245,'TURKEY','Turkish Lira','TRY','949'); +INSERT INTO dropdown_currency VALUES(246,'TURKMENISTAN','Turkmenistan New Manat','TMT','934'); +INSERT INTO dropdown_currency VALUES(247,'TURKS AND CAICOS ISLANDS (THE)','US Dollar','USD','840'); +INSERT INTO dropdown_currency VALUES(248,'TUVALU','Australian Dollar','AUD','036'); +INSERT INTO dropdown_currency VALUES(249,'UGANDA','Uganda Shilling','UGX','800'); +INSERT INTO dropdown_currency VALUES(250,'UKRAINE','Hryvnia','UAH','980'); +INSERT INTO dropdown_currency VALUES(251,'UNITED ARAB EMIRATES (THE)','UAE Dirham','AED','784'); +INSERT INTO dropdown_currency VALUES(252,'UNITED KINGDOM OF GREAT BRITAIN AND NORTHERN IRELAND (THE)','Pound Sterling','GBP','826'); +INSERT INTO dropdown_currency VALUES(253,'UNITED STATES MINOR OUTLYING ISLANDS (THE)','US Dollar','USD','840'); +INSERT INTO dropdown_currency VALUES(254,'UNITED STATES OF AMERICA (THE)','US Dollar','USD','840'); +INSERT INTO dropdown_currency VALUES(255,'UNITED STATES OF AMERICA (THE)','US Dollar (Next day)','USN','997'); +INSERT INTO dropdown_currency VALUES(256,'URUGUAY','Peso Uruguayo','UYU','858'); +INSERT INTO dropdown_currency VALUES(257,'URUGUAY','Uruguay Peso en Unidades Indexadas (URUIURUI)','UYI','940'); +INSERT INTO dropdown_currency VALUES(258,'UZBEKISTAN','Uzbekistan Sum','UZS','860'); +INSERT INTO dropdown_currency VALUES(259,'VANUATU','Vatu','VUV','548'); +INSERT INTO dropdown_currency VALUES(260,'VENEZUELA (BOLIVARIAN REPUBLIC OF)','Bolívar','VEF','937'); +INSERT INTO dropdown_currency VALUES(261,'VIET NAM','Dong','VND','704'); +INSERT INTO dropdown_currency VALUES(262,'VIRGIN ISLANDS (BRITISH)','US Dollar','USD','840'); +INSERT INTO dropdown_currency VALUES(263,'VIRGIN ISLANDS (U.S.)','US Dollar','USD','840'); +INSERT INTO dropdown_currency VALUES(264,'WALLIS AND FUTUNA','CFP Franc','XPF','953'); +INSERT INTO dropdown_currency VALUES(265,'WESTERN SAHARA','Moroccan Dirham','MAD','504'); +INSERT INTO dropdown_currency VALUES(266,'YEMEN','Yemeni Rial','YER','886'); +INSERT INTO dropdown_currency VALUES(267,'ZAMBIA','Zambian Kwacha','ZMW','967'); +INSERT INTO dropdown_currency VALUES(268,'ZIMBABWE','Zimbabwe Dollar','ZWL','932'); + + +--Countries +INSERT INTO dropdown_country VALUES(1,'AF','AFG',4,'Afghanistan'); +INSERT INTO dropdown_country VALUES(2,'AX','ALA',248,'Åland Islands'); +INSERT INTO dropdown_country VALUES(3,'AL','ALB',8,'Albania'); +INSERT INTO dropdown_country VALUES(4,'DZ','DZA',12,'Algeria'); +INSERT INTO dropdown_country VALUES(5,'AS','ASM',16,'American Samoa'); +INSERT INTO dropdown_country VALUES(6,'AD','AND',20,'Andorra'); +INSERT INTO dropdown_country VALUES(7,'AO','AGO',24,'Angola'); +INSERT INTO dropdown_country VALUES(8,'AI','AIA',660,'Anguilla'); +INSERT INTO dropdown_country VALUES(9,'AQ','ATA',10,'Antarctica'); +INSERT INTO dropdown_country VALUES(10,'AG','ATG',28,'Antigua and Barbuda'); +INSERT INTO dropdown_country VALUES(11,'AR','ARG',32,'Argentina'); +INSERT INTO dropdown_country VALUES(12,'AM','ARM',51,'Armenia'); +INSERT INTO dropdown_country VALUES(13,'AW','ABW',533,'Aruba'); +INSERT INTO dropdown_country VALUES(14,'AU','AUS',36,'Australia'); +INSERT INTO dropdown_country VALUES(15,'AT','AUT',40,'Austria'); +INSERT INTO dropdown_country VALUES(16,'AZ','AZE',31,'Azerbaijan'); +INSERT INTO dropdown_country VALUES(17,'BS','BHS',44,'Bahamas'); +INSERT INTO dropdown_country VALUES(18,'BH','BHR',48,'Bahrain'); +INSERT INTO dropdown_country VALUES(19,'BD','BGD',50,'Bangladesh'); +INSERT INTO dropdown_country VALUES(20,'BB','BRB',52,'Barbados'); +INSERT INTO dropdown_country VALUES(21,'BY','BLR',112,'Belarus'); +INSERT INTO dropdown_country VALUES(22,'BE','BEL',56,'Belgium'); +INSERT INTO dropdown_country VALUES(23,'BZ','BLZ',84,'Belize'); +INSERT INTO dropdown_country VALUES(24,'BJ','BEN',204,'Benin'); +INSERT INTO dropdown_country VALUES(25,'BM','BMU',60,'Bermuda'); +INSERT INTO dropdown_country VALUES(26,'BT','BTN',64,'Bhutan'); +INSERT INTO dropdown_country VALUES(27,'BO','BOL',68,'Bolivia (Plurinational State of)'); +INSERT INTO dropdown_country VALUES(28,'BQ','BES',535,'Bonaire, Sint Eustatius and Saba'); +INSERT INTO dropdown_country VALUES(29,'BA','BIH',70,'Bosnia and Herzegovina'); +INSERT INTO dropdown_country VALUES(30,'BW','BWA',72,'Botswana'); +INSERT INTO dropdown_country VALUES(31,'BV','BVT',74,'Bouvet Island'); +INSERT INTO dropdown_country VALUES(32,'BR','BRA',76,'Brazil'); +INSERT INTO dropdown_country VALUES(33,'IO','IOT',86,'British Indian Ocean Territory'); +INSERT INTO dropdown_country VALUES(34,'BN','BRN',96,'Brunei Darussalam'); +INSERT INTO dropdown_country VALUES(35,'BG','BGR',100,'Bulgaria'); +INSERT INTO dropdown_country VALUES(36,'BF','BFA',854,'Burkina Faso'); +INSERT INTO dropdown_country VALUES(37,'BI','BDI',108,'Burundi'); +INSERT INTO dropdown_country VALUES(38,'KH','KHM',116,'Cambodia'); +INSERT INTO dropdown_country VALUES(39,'CM','CMR',120,'Cameroon'); +INSERT INTO dropdown_country VALUES(40,'CA','CAN',124,'Canada'); +INSERT INTO dropdown_country VALUES(41,'CV','CPV',132,'Cabo Verde'); +INSERT INTO dropdown_country VALUES(42,'KY','CYM',136,'Cayman Islands'); +INSERT INTO dropdown_country VALUES(43,'CF','CAF',140,'Central African Republic'); +INSERT INTO dropdown_country VALUES(44,'TD','TCD',148,'Chad'); +INSERT INTO dropdown_country VALUES(45,'CL','CHL',152,'Chile'); +INSERT INTO dropdown_country VALUES(46,'CN','CHN',156,'China'); +INSERT INTO dropdown_country VALUES(47,'CX','CXR',162,'Christmas Island'); +INSERT INTO dropdown_country VALUES(48,'CC','CCK',166,'Cocos (Keeling) Islands'); +INSERT INTO dropdown_country VALUES(49,'CO','COL',170,'Colombia'); +INSERT INTO dropdown_country VALUES(50,'KM','COM',174,'Comoros'); +INSERT INTO dropdown_country VALUES(51,'CG','COG',178,'Congo'); +INSERT INTO dropdown_country VALUES(52,'CD','COD',180,'Congo (Democratic Republic of the)'); +INSERT INTO dropdown_country VALUES(53,'CK','COK',184,'Cook Islands'); +INSERT INTO dropdown_country VALUES(54,'CR','CRI',188,'Costa Rica'); +INSERT INTO dropdown_country VALUES(55,'CI','CIV',384,'Côte d''Ivoire'); +INSERT INTO dropdown_country VALUES(56,'HR','HRV',191,'Croatia'); +INSERT INTO dropdown_country VALUES(57,'CU','CUB',192,'Cuba'); +INSERT INTO dropdown_country VALUES(58,'CW','CUW',531,'Curaçao'); +INSERT INTO dropdown_country VALUES(59,'CY','CYP',196,'Cyprus'); +INSERT INTO dropdown_country VALUES(60,'CZ','CZE',203,'Czech Republic'); +INSERT INTO dropdown_country VALUES(61,'DK','DNK',208,'Denmark'); +INSERT INTO dropdown_country VALUES(62,'DJ','DJI',262,'Djibouti'); +INSERT INTO dropdown_country VALUES(63,'DM','DMA',212,'Dominica'); +INSERT INTO dropdown_country VALUES(64,'DO','DOM',214,'Dominican Republic'); +INSERT INTO dropdown_country VALUES(65,'EC','ECU',218,'Ecuador'); +INSERT INTO dropdown_country VALUES(66,'EG','EGY',818,'Egypt'); +INSERT INTO dropdown_country VALUES(67,'SV','SLV',222,'El Salvador'); +INSERT INTO dropdown_country VALUES(68,'GQ','GNQ',226,'Equatorial Guinea'); +INSERT INTO dropdown_country VALUES(69,'ER','ERI',232,'Eritrea'); +INSERT INTO dropdown_country VALUES(70,'EE','EST',233,'Estonia'); +INSERT INTO dropdown_country VALUES(71,'ET','ETH',231,'Ethiopia'); +INSERT INTO dropdown_country VALUES(72,'FK','FLK',238,'Falkland Islands (Malvinas)'); +INSERT INTO dropdown_country VALUES(73,'FO','FRO',234,'Faroe Islands'); +INSERT INTO dropdown_country VALUES(74,'FJ','FJI',242,'Fiji'); +INSERT INTO dropdown_country VALUES(75,'FI','FIN',246,'Finland'); +INSERT INTO dropdown_country VALUES(76,'FR','FRA',250,'France'); +INSERT INTO dropdown_country VALUES(77,'GF','GUF',254,'French Guiana'); +INSERT INTO dropdown_country VALUES(78,'PF','PYF',258,'French Polynesia'); +INSERT INTO dropdown_country VALUES(79,'TF','ATF',260,'French Southern Territories'); +INSERT INTO dropdown_country VALUES(80,'GA','GAB',266,'Gabon'); +INSERT INTO dropdown_country VALUES(81,'GM','GMB',270,'Gambia'); +INSERT INTO dropdown_country VALUES(82,'GE','GEO',268,'Georgia'); +INSERT INTO dropdown_country VALUES(83,'DE','DEU',276,'Germany'); +INSERT INTO dropdown_country VALUES(84,'GH','GHA',288,'Ghana'); +INSERT INTO dropdown_country VALUES(85,'GI','GIB',292,'Gibraltar'); +INSERT INTO dropdown_country VALUES(86,'GR','GRC',300,'Greece'); +INSERT INTO dropdown_country VALUES(87,'GL','GRL',304,'Greenland'); +INSERT INTO dropdown_country VALUES(88,'GD','GRD',308,'Grenada'); +INSERT INTO dropdown_country VALUES(89,'GP','GLP',312,'Guadeloupe'); +INSERT INTO dropdown_country VALUES(90,'GU','GUM',316,'Guam'); +INSERT INTO dropdown_country VALUES(91,'GT','GTM',320,'Guatemala'); +INSERT INTO dropdown_country VALUES(92,'GG','GGY',831,'Guernsey'); +INSERT INTO dropdown_country VALUES(93,'GN','GIN',324,'Guinea'); +INSERT INTO dropdown_country VALUES(94,'GW','GNB',624,'Guinea-Bissau'); +INSERT INTO dropdown_country VALUES(95,'GY','GUY',328,'Guyana'); +INSERT INTO dropdown_country VALUES(96,'HT','HTI',332,'Haiti'); +INSERT INTO dropdown_country VALUES(97,'HM','HMD',334,'Heard Island and McDonald Islands'); +INSERT INTO dropdown_country VALUES(98,'VA','VAT',336,'Holy See'); +INSERT INTO dropdown_country VALUES(99,'HN','HND',340,'Honduras'); +INSERT INTO dropdown_country VALUES(100,'HK','HKG',344,'Hong Kong'); +INSERT INTO dropdown_country VALUES(101,'HU','HUN',348,'Hungary'); +INSERT INTO dropdown_country VALUES(102,'IS','ISL',352,'Iceland'); +INSERT INTO dropdown_country VALUES(103,'IN','IND',356,'India'); +INSERT INTO dropdown_country VALUES(104,'ID','IDN',360,'Indonesia'); +INSERT INTO dropdown_country VALUES(105,'IR','IRN',364,'Iran (Islamic Republic of)'); +INSERT INTO dropdown_country VALUES(106,'IQ','IRQ',368,'Iraq'); +INSERT INTO dropdown_country VALUES(107,'IE','IRL',372,'Ireland'); +INSERT INTO dropdown_country VALUES(108,'IM','IMN',833,'Isle of Man'); +INSERT INTO dropdown_country VALUES(109,'IL','ISR',376,'Israel'); +INSERT INTO dropdown_country VALUES(110,'IT','ITA',380,'Italy'); +INSERT INTO dropdown_country VALUES(111,'JM','JAM',388,'Jamaica'); +INSERT INTO dropdown_country VALUES(112,'JP','JPN',392,'Japan'); +INSERT INTO dropdown_country VALUES(113,'JE','JEY',832,'Jersey'); +INSERT INTO dropdown_country VALUES(114,'JO','JOR',400,'Jordan'); +INSERT INTO dropdown_country VALUES(115,'KZ','KAZ',398,'Kazakhstan'); +INSERT INTO dropdown_country VALUES(116,'KE','KEN',404,'Kenya'); +INSERT INTO dropdown_country VALUES(117,'KI','KIR',296,'Kiribati'); +INSERT INTO dropdown_country VALUES(118,'KP','PRK',408,'Korea (Democratic People''s Republic of)'); +INSERT INTO dropdown_country VALUES(119,'KR','KOR',410,'Korea (Republic of)'); +INSERT INTO dropdown_country VALUES(120,'KO','KOS',780,'Kosovo'); +INSERT INTO dropdown_country VALUES(121,'KW','KWT',414,'Kuwait'); +INSERT INTO dropdown_country VALUES(122,'KG','KGZ',417,'Kyrgyzstan'); +INSERT INTO dropdown_country VALUES(123,'LA','LAO',418,'Lao People''s Democratic Republic'); +INSERT INTO dropdown_country VALUES(124,'LV','LVA',428,'Latvia'); +INSERT INTO dropdown_country VALUES(125,'LB','LBN',422,'Lebanon'); +INSERT INTO dropdown_country VALUES(126,'LS','LSO',426,'Lesotho'); +INSERT INTO dropdown_country VALUES(127,'LR','LBR',430,'Liberia'); +INSERT INTO dropdown_country VALUES(128,'LY','LBY',434,'Libya'); +INSERT INTO dropdown_country VALUES(129,'LI','LIE',438,'Liechtenstein'); +INSERT INTO dropdown_country VALUES(130,'LT','LTU',440,'Lithuania'); +INSERT INTO dropdown_country VALUES(131,'LU','LUX',442,'Luxembourg'); +INSERT INTO dropdown_country VALUES(132,'MO','MAC',446,'Macao'); +INSERT INTO dropdown_country VALUES(133,'MK','MKD',807,'Macedonia (the former Yugoslav Republic of)'); +INSERT INTO dropdown_country VALUES(134,'MG','MDG',450,'Madagascar'); +INSERT INTO dropdown_country VALUES(135,'MW','MWI',454,'Malawi'); +INSERT INTO dropdown_country VALUES(136,'MY','MYS',458,'Malaysia'); +INSERT INTO dropdown_country VALUES(137,'MV','MDV',462,'Maldives'); +INSERT INTO dropdown_country VALUES(138,'ML','MLI',466,'Mali'); +INSERT INTO dropdown_country VALUES(139,'MT','MLT',470,'Malta'); +INSERT INTO dropdown_country VALUES(140,'MH','MHL',584,'Marshall Islands'); +INSERT INTO dropdown_country VALUES(141,'MQ','MTQ',474,'Martinique'); +INSERT INTO dropdown_country VALUES(142,'MR','MRT',478,'Mauritania'); +INSERT INTO dropdown_country VALUES(143,'MU','MUS',480,'Mauritius'); +INSERT INTO dropdown_country VALUES(144,'YT','MYT',175,'Mayotte'); +INSERT INTO dropdown_country VALUES(145,'MX','MEX',484,'Mexico'); +INSERT INTO dropdown_country VALUES(146,'FM','FSM',583,'Micronesia (Federated States of)'); +INSERT INTO dropdown_country VALUES(147,'MD','MDA',498,'Moldova (Republic of)'); +INSERT INTO dropdown_country VALUES(148,'MC','MCO',492,'Monaco'); +INSERT INTO dropdown_country VALUES(149,'MN','MNG',496,'Mongolia'); +INSERT INTO dropdown_country VALUES(150,'ME','MNE',499,'Montenegro'); +INSERT INTO dropdown_country VALUES(151,'MS','MSR',500,'Montserrat'); +INSERT INTO dropdown_country VALUES(152,'MA','MAR',504,'Morocco'); +INSERT INTO dropdown_country VALUES(153,'MZ','MOZ',508,'Mozambique'); +INSERT INTO dropdown_country VALUES(154,'MM','MMR',104,'Myanmar'); +INSERT INTO dropdown_country VALUES(155,'NA','NAM',516,'Namibia'); +INSERT INTO dropdown_country VALUES(156,'NR','NRU',520,'Nauru'); +INSERT INTO dropdown_country VALUES(157,'NP','NPL',524,'Nepal'); +INSERT INTO dropdown_country VALUES(158,'NL','NLD',528,'Netherlands'); +INSERT INTO dropdown_country VALUES(159,'NC','NCL',540,'New Caledonia'); +INSERT INTO dropdown_country VALUES(160,'NZ','NZL',554,'New Zealand'); +INSERT INTO dropdown_country VALUES(161,'NI','NIC',558,'Nicaragua'); +INSERT INTO dropdown_country VALUES(162,'NE','NER',562,'Niger'); +INSERT INTO dropdown_country VALUES(163,'NG','NGA',566,'Nigeria'); +INSERT INTO dropdown_country VALUES(164,'NU','NIU',570,'Niue'); +INSERT INTO dropdown_country VALUES(165,'NF','NFK',574,'Norfolk Island'); +INSERT INTO dropdown_country VALUES(166,'MP','MNP',580,'Northern Mariana Islands'); +INSERT INTO dropdown_country VALUES(167,'NO','NOR',578,'Norway'); +INSERT INTO dropdown_country VALUES(168,'OM','OMN',512,'Oman'); +INSERT INTO dropdown_country VALUES(169,'PK','PAK',586,'Pakistan'); +INSERT INTO dropdown_country VALUES(170,'PW','PLW',585,'Palau'); +INSERT INTO dropdown_country VALUES(171,'PS','PSE',275,'Palestine, State of'); +INSERT INTO dropdown_country VALUES(172,'PA','PAN',591,'Panama'); +INSERT INTO dropdown_country VALUES(173,'PG','PNG',598,'Papua New Guinea'); +INSERT INTO dropdown_country VALUES(174,'PY','PRY',600,'Paraguay'); +INSERT INTO dropdown_country VALUES(175,'PE','PER',604,'Peru'); +INSERT INTO dropdown_country VALUES(176,'PH','PHL',608,'Philippines'); +INSERT INTO dropdown_country VALUES(177,'PN','PCN',612,'Pitcairn'); +INSERT INTO dropdown_country VALUES(178,'PL','POL',616,'Poland'); +INSERT INTO dropdown_country VALUES(179,'PT','PRT',620,'Portugal'); +INSERT INTO dropdown_country VALUES(180,'PR','PRI',630,'Puerto Rico'); +INSERT INTO dropdown_country VALUES(181,'QA','QAT',634,'Qatar'); +INSERT INTO dropdown_country VALUES(182,'RE','REU',638,'Réunion'); +INSERT INTO dropdown_country VALUES(183,'RO','ROU',642,'Romania'); +INSERT INTO dropdown_country VALUES(184,'RU','RUS',643,'Russian Federation'); +INSERT INTO dropdown_country VALUES(185,'RW','RWA',646,'Rwanda'); +INSERT INTO dropdown_country VALUES(186,'BL','BLM',652,'Saint Barthélemy'); +INSERT INTO dropdown_country VALUES(187,'SH','SHN',654,'Saint Helena, Ascension and Tristan da Cunha'); +INSERT INTO dropdown_country VALUES(188,'KN','KNA',659,'Saint Kitts and Nevis'); +INSERT INTO dropdown_country VALUES(189,'LC','LCA',662,'Saint Lucia'); +INSERT INTO dropdown_country VALUES(190,'MF','MAF',663,'Saint Martin (French part)'); +INSERT INTO dropdown_country VALUES(191,'PM','SPM',666,'Saint Pierre and Miquelon'); +INSERT INTO dropdown_country VALUES(192,'VC','VCT',670,'Saint Vincent and the Grenadines'); +INSERT INTO dropdown_country VALUES(193,'WS','WSM',882,'Samoa'); +INSERT INTO dropdown_country VALUES(194,'SM','SMR',674,'San Marino'); +INSERT INTO dropdown_country VALUES(195,'ST','STP',678,'Sao Tome and Principe'); +INSERT INTO dropdown_country VALUES(196,'SA','SAU',682,'Saudi Arabia'); +INSERT INTO dropdown_country VALUES(197,'SN','SEN',686,'Senegal'); +INSERT INTO dropdown_country VALUES(198,'RS','SRB',688,'Serbia'); +INSERT INTO dropdown_country VALUES(199,'SC','SYC',690,'Seychelles'); +INSERT INTO dropdown_country VALUES(200,'SL','SLE',694,'Sierra Leone'); +INSERT INTO dropdown_country VALUES(201,'SG','SGP',702,'Singapore'); +INSERT INTO dropdown_country VALUES(202,'SX','SXM',534,'Sint Maarten (Dutch part)'); +INSERT INTO dropdown_country VALUES(203,'SK','SVK',703,'Slovakia'); +INSERT INTO dropdown_country VALUES(204,'SI','SVN',705,'Slovenia'); +INSERT INTO dropdown_country VALUES(205,'SB','SLB',90,'Solomon Islands'); +INSERT INTO dropdown_country VALUES(206,'SO','SOM',706,'Somalia'); +INSERT INTO dropdown_country VALUES(207,'ZA','ZAF',710,'South Africa'); +INSERT INTO dropdown_country VALUES(208,'GS','SGS',239,'South Georgia and the South Sandwich Islands'); +INSERT INTO dropdown_country VALUES(209,'SS','SSD',728,'South Sudan'); +INSERT INTO dropdown_country VALUES(210,'ES','ESP',724,'Spain'); +INSERT INTO dropdown_country VALUES(211,'LK','LKA',144,'Sri Lanka'); +INSERT INTO dropdown_country VALUES(212,'SD','SDN',729,'Sudan'); +INSERT INTO dropdown_country VALUES(213,'SR','SUR',740,'Suriname'); +INSERT INTO dropdown_country VALUES(214,'SJ','SJM',744,'Svalbard and Jan Mayen'); +INSERT INTO dropdown_country VALUES(215,'SZ','SWZ',748,'Swaziland'); +INSERT INTO dropdown_country VALUES(216,'SE','SWE',752,'Sweden'); +INSERT INTO dropdown_country VALUES(217,'CH','CHE',756,'Switzerland'); +INSERT INTO dropdown_country VALUES(218,'SY','SYR',760,'Syrian Arab Republic'); +INSERT INTO dropdown_country VALUES(219,'TW','TWN',158,'Taiwan, Province of China'); +INSERT INTO dropdown_country VALUES(220,'TJ','TJK',762,'Tajikistan'); +INSERT INTO dropdown_country VALUES(221,'TZ','TZA',834,'Tanzania, United Republic of'); +INSERT INTO dropdown_country VALUES(222,'TH','THA',764,'Thailand'); +INSERT INTO dropdown_country VALUES(223,'TL','TLS',626,'Timor-Leste'); +INSERT INTO dropdown_country VALUES(224,'TG','TGO',768,'Togo'); +INSERT INTO dropdown_country VALUES(225,'TK','TKL',772,'Tokelau'); +INSERT INTO dropdown_country VALUES(226,'TO','TON',776,'Tonga'); +INSERT INTO dropdown_country VALUES(227,'TT','TTO',780,'Trinidad and Tobago'); +INSERT INTO dropdown_country VALUES(228,'TN','TUN',788,'Tunisia'); +INSERT INTO dropdown_country VALUES(229,'TR','TUR',792,'Turkey'); +INSERT INTO dropdown_country VALUES(230,'TM','TKM',795,'Turkmenistan'); +INSERT INTO dropdown_country VALUES(231,'TC','TCA',796,'Turks and Caicos Islands'); +INSERT INTO dropdown_country VALUES(232,'TV','TUV',798,'Tuvalu'); +INSERT INTO dropdown_country VALUES(233,'UG','UGA',800,'Uganda'); +INSERT INTO dropdown_country VALUES(234,'UA','UKR',804,'Ukraine'); +INSERT INTO dropdown_country VALUES(235,'AE','ARE',784,'United Arab Emirates'); +INSERT INTO dropdown_country VALUES(236,'GB','GBR',826,'United Kingdom of Great Britain and Northern Ireland'); +INSERT INTO dropdown_country VALUES(237,'US','USA',840,'United States of America'); +INSERT INTO dropdown_country VALUES(238,'UM','UMI',581,'United States Minor Outlying Islands'); +INSERT INTO dropdown_country VALUES(239,'UY','URY',858,'Uruguay'); +INSERT INTO dropdown_country VALUES(240,'UZ','UZB',860,'Uzbekistan'); +INSERT INTO dropdown_country VALUES(241,'VU','VUT',548,'Vanuatu'); +INSERT INTO dropdown_country VALUES(242,'VE','VEN',862,'Venezuela (Bolivarian Republic of)'); +INSERT INTO dropdown_country VALUES(243,'VN','VNM',704,'Viet Nam'); +INSERT INTO dropdown_country VALUES(244,'VG','VGB',92,'Virgin Islands (British)'); +INSERT INTO dropdown_country VALUES(245,'VI','VIR',850,'Virgin Islands (U.S.)'); +INSERT INTO dropdown_country VALUES(246,'WF','WLF',876,'Wallis and Futuna'); +INSERT INTO dropdown_country VALUES(247,'EH','ESH',732,'Western Sahara'); +INSERT INTO dropdown_country VALUES(248,'YE','YEM',887,'Yemen'); +INSERT INTO dropdown_country VALUES(249,'ZM','ZMB',894,'Zambia'); +INSERT INTO dropdown_country VALUES(250,'ZW','ZWE',716,'Zimbabwe'); +INSERT INTO dropdown_country VALUES(251,'AN','ANT',530,'Netherlands Antilles'); + + +--Member type +INSERT INTO dropdown_member_type VALUES(1,'Corporation'); +INSERT INTO dropdown_member_type VALUES(2,'Limited Liability Company'); +INSERT INTO dropdown_member_type VALUES(3,'Sole proprietorship'); +INSERT INTO dropdown_member_type VALUES(4,'General partnership'); +INSERT INTO dropdown_member_type VALUES(5,'Limited partnership'); +INSERT INTO dropdown_member_type VALUES(6,'Other'); + + +--Certificate standard +INSERT INTO dropdown_certificate_standard VALUES(3,'ISO 18788'); +INSERT INTO dropdown_certificate_standard VALUES(2,'ISO 28007'); +INSERT INTO dropdown_certificate_standard VALUES(1,'PSC.1'); +INSERT INTO dropdown_certificate_standard VALUES(0,'Other'); + + +--Service type +INSERT INTO dropdown_service_type VALUES(1,'Close Protection','Land'); +INSERT INTO dropdown_service_type VALUES(2,'Static Security','Land'); +INSERT INTO dropdown_service_type VALUES(3,'Mobile Escorts','Land'); +INSERT INTO dropdown_service_type VALUES(4,'Security Management Consultancy','Land/Remote'); +INSERT INTO dropdown_service_type VALUES(5,'Training Services','Land'); +INSERT INTO dropdown_service_type VALUES(6,'Intelligence','Land/Remote'); +INSERT INTO dropdown_service_type VALUES(7,'Drone Operators','Land'); +INSERT INTO dropdown_service_type VALUES(8,'Vessel Protection','Maritime'); +INSERT INTO dropdown_service_type VALUES(9,'Stationary Offshore Protection','Maritime'); +INSERT INTO dropdown_service_type VALUES(10,'Floating armories','Maritime'); + + + diff --git a/configuration/sql/mapperdatabase-create.sql b/configuration/sql/mapperdatabase-create.sql new file mode 100644 index 0000000..36e3f03 --- /dev/null +++ b/configuration/sql/mapperdatabase-create.sql @@ -0,0 +1,7 @@ +CREATE DATABASE orbeon_mapper +WITH OWNER = postgres +ENCODING = 'UTF8' +TABLESPACE = pg_default +LC_COLLATE = 'pl_PL.UTF-8' +LC_CTYPE = 'pl_PL.UTF-8' +CONNECTION LIMIT = -1; \ No newline at end of file diff --git a/documents-explorer/pom.xml b/documents-explorer/pom.xml new file mode 100644 index 0000000..14315e9 --- /dev/null +++ b/documents-explorer/pom.xml @@ -0,0 +1,67 @@ + + 4.0.0 + + eu.moose + documents-explorer + war + 1.0-SNAPSHOT + + documents-explorer + + + + com.sun.faces + jsf-api + 2.2.19 + + + + com.sun.faces + jsf-impl + 2.2.19 + + + + javax.servlet + jstl + 1.2 + + + + javax.servlet + javax.servlet-api + 4.0.1 + + + + log4j + log4j + 1.2.17 + + + + junit + junit + 3.8.1 + test + + + + + documents-explorer + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + + 1.8 + 1.8 + + + + + diff --git a/documents-explorer/src/main/java/eu/mooseinc/documents/explorer/ApplicationBean.java b/documents-explorer/src/main/java/eu/mooseinc/documents/explorer/ApplicationBean.java new file mode 100644 index 0000000..2aa771b --- /dev/null +++ b/documents-explorer/src/main/java/eu/mooseinc/documents/explorer/ApplicationBean.java @@ -0,0 +1,102 @@ +/********************************************************************************************************************************* + * Autorskie Prawa Majątkowe - Moose Spółka z ograniczoną odpowiedzialnością + * Copyright 2019 Moose Spółka z ograniczoną odpowiedzialnością + ********************************************************************************************************************************/ + +package eu.mooseinc.documents.explorer; + +import org.apache.log4j.Logger; + +import javax.annotation.PostConstruct; +import javax.faces.bean.ApplicationScoped; +import javax.faces.bean.ManagedBean; +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; +import java.nio.file.Paths; +import java.text.MessageFormat; +import java.util.Properties; + +/** + * Bean used for application initialization. + */ +@ApplicationScoped +@ManagedBean(eager = true, name = "applicationBean") +public class ApplicationBean { + + private static final Logger logger = Logger.getLogger( ApplicationBean.class ); + + /** + * Path to user configuration. + */ + private static final String CUSTOM_PROPERTIES_PATH = "/opt/documents-explorer/application.properties"; + + /** + * The path to the directory used to store documents. + */ + private String documentsDirectory; + + /** + * Reads the configuration from the configuration file. + */ + @PostConstruct + public void readProperties() { + Properties properties = new Properties( ); + properties.putAll( loadDefaultProperties() ); + properties.putAll( loadCustomProperties() ); + + final String directoryPath = properties.getProperty("documents.directory"); + final File directory = Paths.get(directoryPath).toFile(); + if (!directory.exists()) { + if (!directory.mkdirs()) { + logger.error( "Create directory error" ); + documentsDirectory = ""; + } + } + else + documentsDirectory = directoryPath; + + logger.info(MessageFormat.format("Using the {0} directory for file storing.", documentsDirectory)); + } + + /** + * Load custom properties. + * + * @return properties. + */ + private Properties loadCustomProperties() { + try (InputStream in = new FileInputStream( CUSTOM_PROPERTIES_PATH )) { + final Properties properties = new Properties( ); + properties.load( in ); + return properties; + } + catch (Exception e) { + logger.error( "The application encountered an error while loading the custom properties.", e ); + return new Properties( ); + } + } + + /** + * Load default properties. + * + * @return properties. + */ + private Properties loadDefaultProperties() { + try (InputStream in = getClass().getClassLoader().getResourceAsStream("application.properties")) { + final Properties properties = new Properties( ); + properties.load( in ); + return properties; + } + catch (Exception e) { + logger.error( "The application encountered an error while loading the default properties.", e ); + return new Properties( ); + } + } + + /** + * @return Path to the directory with files. + */ + public String getDocumentsDirectory() { + return documentsDirectory; + } +} diff --git a/documents-explorer/src/main/java/eu/mooseinc/documents/explorer/bean/FilesBean.java b/documents-explorer/src/main/java/eu/mooseinc/documents/explorer/bean/FilesBean.java new file mode 100644 index 0000000..87a31f8 --- /dev/null +++ b/documents-explorer/src/main/java/eu/mooseinc/documents/explorer/bean/FilesBean.java @@ -0,0 +1,127 @@ +/********************************************************************************************************************************* + * Autorskie Prawa Majątkowe - Moose Spółka z ograniczoną odpowiedzialnością + * Copyright 2019 Moose Spółka z ograniczoną odpowiedzialnością + ********************************************************************************************************************************/ + +package eu.mooseinc.documents.explorer.bean; + +import eu.mooseinc.documents.explorer.ApplicationBean; +import org.apache.log4j.Logger; + +import javax.annotation.PostConstruct; +import javax.faces.bean.ManagedBean; +import javax.faces.bean.ManagedProperty; +import javax.faces.bean.RequestScoped; +import javax.faces.context.ExternalContext; +import javax.faces.context.FacesContext; +import javax.servlet.http.HttpServletRequest; +import java.io.File; +import java.io.IOException; +import java.io.OutputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.text.MessageFormat; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * Bean for operations related to files. + */ +@RequestScoped +@ManagedBean(name = "FilesBean") +public class FilesBean { + private static final Logger logger = Logger.getLogger( FilesBean.class ); + + private final List documents = new ArrayList<>(); + + @ManagedProperty(value="#{applicationBean}") + private ApplicationBean application; + + @PostConstruct + public void init() { + try (Stream stream = Files.walk(Paths.get(application.getDocumentsDirectory()))) { + this.documents.addAll( stream + .filter(Files::isRegularFile) + .map(file -> file.getFileName().toString()) + .collect(Collectors.toList()) + ); + } + catch (final IOException e) { + logger.error( "Read documents error", e ); + } + } + + /** + * Finds uploaded files on the disk. + * + * @return List of files available for download. + */ + public List getDocuments() { + return documents; + } + + /** + * Returns requested file. + * + * @param documentName The name of the requested file. + */ + public void downloadDocument(final String documentName) { + final FacesContext facesContext = FacesContext.getCurrentInstance(); + final ExternalContext externalContext = facesContext.getExternalContext(); + + final Path pathFile = Paths.get(application.getDocumentsDirectory() + File.separator + documentName); + final File file = pathFile.toFile(); + + if (!file.exists()) { + externalContext.responseReset(); + externalContext.setResponseStatus(404); + return; + } + + externalContext.responseReset(); + + try { + externalContext.setResponseContentType(Files.probeContentType(pathFile)); // mimetype + externalContext.setResponseContentLength((int) file.length()); // length + + final String attachmentName = MessageFormat.format("attachment; filename=\"{0}\"", documentName); + externalContext.setResponseHeader("Content-Disposition", attachmentName); + + final OutputStream outputStream = externalContext.getResponseOutputStream(); + Files.copy(pathFile, outputStream); + + facesContext.responseComplete(); + } catch (final IOException e) { + logger.error( "Error ", e ); + } + } + + /** + * Deletes the file from the disk. + * + * @param documentName The name of the file to be deleted. + * + * @throws IOException Exception thrown during redirection. + */ + public void deleteDocument(final String documentName, final HttpServletRequest request) throws IOException { + if (!request.isUserInRole("admin")) { + final ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext(); + externalContext.responseReset(); + externalContext.setResponseStatus(403); + return; + } + + final File fileToDelete = Paths.get(application.getDocumentsDirectory() + File.separator + documentName).toFile(); + if (fileToDelete.exists() && fileToDelete.isFile()) + Files.delete( fileToDelete.toPath() ); + + FacesContext.getCurrentInstance().getExternalContext().redirect("index.jsp"); + } + + public void setApplication( ApplicationBean application ) { + this.application = application; + } +} diff --git a/documents-explorer/src/main/java/eu/mooseinc/documents/explorer/bean/UploadDocumentBean.java b/documents-explorer/src/main/java/eu/mooseinc/documents/explorer/bean/UploadDocumentBean.java new file mode 100644 index 0000000..673b6a3 --- /dev/null +++ b/documents-explorer/src/main/java/eu/mooseinc/documents/explorer/bean/UploadDocumentBean.java @@ -0,0 +1,70 @@ +/********************************************************************************************************************************* + * Autorskie Prawa Majątkowe - Moose Spółka z ograniczoną odpowiedzialnością + * Copyright 2019 Moose Spółka z ograniczoną odpowiedzialnością + ********************************************************************************************************************************/ + +package eu.mooseinc.documents.explorer.bean; + +import eu.mooseinc.documents.explorer.ApplicationBean; +import org.apache.log4j.Logger; + +import javax.faces.bean.ManagedBean; +import javax.faces.bean.ManagedProperty; +import javax.faces.context.ExternalContext; +import javax.faces.context.FacesContext; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.Part; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; + +/** + * Bean for file upload. + */ +@ManagedBean(name = "UploadFileBean") +public class UploadDocumentBean { + + private static final Logger logger = Logger.getLogger( UploadDocumentBean.class ); + + /** + * The part of the form containing the file. + */ + private Part document; + + @ManagedProperty(value="#{applicationBean}") + private ApplicationBean application; + + /** + * Saves the sent file. + */ + public void save(final HttpServletRequest request) throws IOException { + if (!request.isUserInRole("admin")) { + final ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext(); + externalContext.responseReset(); + externalContext.setResponseStatus(403); + return; + } + + try (final InputStream input = document.getInputStream()) { + Files.copy(input, new File(application.getDocumentsDirectory(), document.getSubmittedFileName()).toPath()); + } + catch (final IOException e) { + logger.error( "Error", e ); + } + + FacesContext.getCurrentInstance().getExternalContext().redirect("index.jsp"); + } + + public Part getDocument() { + return document; + } + + public void setDocument(final Part document) { + this.document = document; + } + + public void setApplication( ApplicationBean application ) { + this.application = application; + } +} diff --git a/documents-explorer/src/main/java/eu/mooseinc/documents/explorer/bean/UserBean.java b/documents-explorer/src/main/java/eu/mooseinc/documents/explorer/bean/UserBean.java new file mode 100644 index 0000000..bffc01c --- /dev/null +++ b/documents-explorer/src/main/java/eu/mooseinc/documents/explorer/bean/UserBean.java @@ -0,0 +1,41 @@ +/********************************************************************************************************************************* + * Autorskie Prawa Majątkowe - Moose Spółka z ograniczoną odpowiedzialnością + * Copyright 2019 Moose Spółka z ograniczoną odpowiedzialnością + ********************************************************************************************************************************/ + +package eu.mooseinc.documents.explorer.bean; + +import java.io.IOException; +import java.security.Principal; +import javax.faces.bean.ManagedBean; +import javax.faces.bean.SessionScoped; +import javax.faces.context.FacesContext; + +/** + * Bean for operations related to users. + */ +@SessionScoped +@ManagedBean(name = "UserBean") +public class UserBean { + + /** + * Gets the username from the faces context. + * + * @return Name of the currently authenticated user. + */ + public String getUserName() { + final Principal principal = FacesContext.getCurrentInstance().getExternalContext().getUserPrincipal(); + + return principal != null ? principal.getName() : ""; + } + + /** + * Logs out the user. + * + * @throws IOException Exception thrown during redirection. + */ + public void logout() throws IOException { + FacesContext.getCurrentInstance().getExternalContext().invalidateSession(); + FacesContext.getCurrentInstance().getExternalContext().redirect("index.jsp"); + } +} diff --git a/documents-explorer/src/main/resources/application.properties b/documents-explorer/src/main/resources/application.properties new file mode 100644 index 0000000..393895b --- /dev/null +++ b/documents-explorer/src/main/resources/application.properties @@ -0,0 +1,6 @@ +################################################################################################################################## +# Autorskie Prawa Majątkowe - Moose Spółka z ograniczoną odpowiedzialnością +# Copyright 2019 Moose Spółka z ograniczoną odpowiedzialnością +################################################################################################################################## + +documents.directory=/tmp/documents-explorer \ No newline at end of file diff --git a/documents-explorer/src/main/resources/log4j.properties b/documents-explorer/src/main/resources/log4j.properties new file mode 100644 index 0000000..52beef9 --- /dev/null +++ b/documents-explorer/src/main/resources/log4j.properties @@ -0,0 +1,13 @@ +################################################################################################################################## +# Autorskie Prawa Majątkowe - Moose Spółka z ograniczoną odpowiedzialnością +# Copyright 2019 Moose Spółka z ograniczoną odpowiedzialnością +################################################################################################################################## + +# Root logger option +log4j.rootLogger=DEBUG, stdout + +# Redirect log messages to console +log4j.appender.stdout=org.apache.log4j.ConsoleAppender +log4j.appender.stdout.Target=System.out +log4j.appender.stdout.layout=org.apache.log4j.PatternLayout +log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} - %m%n diff --git a/documents-explorer/src/main/webapp/WEB-INF/web.xml b/documents-explorer/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..ea3ff7b --- /dev/null +++ b/documents-explorer/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,70 @@ + + + + IDoCa + + + index.xhtml + + + + Faces Servlet + javax.faces.webapp.FacesServlet + 1 + + + + Faces Servlet + *.xhtml + + + + Faces Servlet + *.jsp + + + + user + + + + admin + + + + + App requires authentication + /* + GET + POST + + + + admin + user + + + + NONE + + + + + + Allowed resources + /javax.faces.resource/* + + + + + FORM + file + + /login.xhtml + /login.xhtml?failed=true + + + diff --git a/documents-explorer/src/main/webapp/index.xhtml b/documents-explorer/src/main/webapp/index.xhtml new file mode 100644 index 0000000..87aab8c --- /dev/null +++ b/documents-explorer/src/main/webapp/index.xhtml @@ -0,0 +1,110 @@ + + + + + + + + List of documents + + + + + + + + +
+ +
+
+ + + + + + +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + +
No.NameOptions
No files
+ + + + + + + + + + + +
+
+
+
+ + + + +
+ \ No newline at end of file diff --git a/documents-explorer/src/main/webapp/login.xhtml b/documents-explorer/src/main/webapp/login.xhtml new file mode 100644 index 0000000..c15086a --- /dev/null +++ b/documents-explorer/src/main/webapp/login.xhtml @@ -0,0 +1,70 @@ + + + + + + + + Login form + + + + + + +
+
+
+
+ +
+ + +
+
+
+ + + + +
+ \ No newline at end of file diff --git a/documents-explorer/src/main/webapp/resources/css/bootstrap.min.css b/documents-explorer/src/main/webapp/resources/css/bootstrap.min.css new file mode 100644 index 0000000..92e3fe8 --- /dev/null +++ b/documents-explorer/src/main/webapp/resources/css/bootstrap.min.css @@ -0,0 +1,7 @@ +/*! + * Bootstrap v4.3.1 (https://getbootstrap.com/) + * Copyright 2011-2019 The Bootstrap Authors + * Copyright 2011-2019 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:center right calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc((1em + .75rem) * 3 / 4 + 1.75rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip{display:block}.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip,.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{border-color:#28a745}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E");background-repeat:no-repeat;background-position:center right calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc((1em + .75rem) * 3 / 4 + 1.75rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip{display:block}.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip,.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{border-color:#dc3545}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;text-decoration:none}.btn-link:hover{color:#0056b3;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:1 1 auto;flex:1 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#007bff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#80bdff}.custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:#adb5bd solid 1px}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#007bff;background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;-webkit-transform:translateX(.75rem);transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:disabled~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:calc(1rem + .4rem);padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-ms-flexbox;display:flex;-ms-flex:1 0 0%;flex:1 0 0%;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion>.card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion>.card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.accordion>.card .card-header{margin-bottom:-1px}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0062cc}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-horizontal{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}@media (min-width:576px){.list-group-horizontal-sm{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-sm .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-sm .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:768px){.list-group-horizontal-md{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-md .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-md .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:992px){.list-group-horizontal-lg{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-lg .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-lg .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:1200px){.list-group-horizontal-xl{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xl .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-xl .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush .list-group-item:last-child{margin-bottom:-1px}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{margin-bottom:0;border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}a.close.disabled{pointer-events:none}.toast{max-width:350px;overflow:hidden;font-size:.875rem;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-50px);transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal-dialog-scrollable{display:-ms-flexbox;display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{-ms-flex-negative:0;flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);content:""}.modal-dialog-centered.modal-dialog-scrollable{-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #dee2e6;border-bottom-right-radius:.3rem;border-bottom-left-radius:.3rem}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top]>.arrow::before,.bs-popover-top>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow::after,.bs-popover-top>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow::before,.bs-popover-right>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow::after,.bs-popover-right>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom]>.arrow::before,.bs-popover-bottom>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow::after,.bs-popover-bottom>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow::before,.bs-popover-left>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow::after,.bs-popover-left>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:0s .6s opacity}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;overflow-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}} +/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/documents-explorer/src/main/webapp/resources/css/style.css b/documents-explorer/src/main/webapp/resources/css/style.css new file mode 100644 index 0000000..cfdf471 --- /dev/null +++ b/documents-explorer/src/main/webapp/resources/css/style.css @@ -0,0 +1,24 @@ +/********************************************************************************************************************************* + * Autorskie Prawa Majątkowe - Moose Spółka z ograniczoną odpowiedzialnością + * Copyright 2019 Moose Spółka z ograniczoną odpowiedzialnością + ********************************************************************************************************************************/ + +.login-box { + border: 1px solid gray; +} + +.logo { + height: 1.75rem; +} + +.table-icon { + height: 1.5rem; +} + +.top-icon { + height: 2.5rem; +} + +.upload-button { + -webkit-appearance: initial; +} diff --git a/documents-explorer/src/main/webapp/resources/img/file-download.svg b/documents-explorer/src/main/webapp/resources/img/file-download.svg new file mode 100644 index 0000000..b0dfa46 --- /dev/null +++ b/documents-explorer/src/main/webapp/resources/img/file-download.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/documents-explorer/src/main/webapp/resources/img/file-upload.svg b/documents-explorer/src/main/webapp/resources/img/file-upload.svg new file mode 100644 index 0000000..49b0a88 --- /dev/null +++ b/documents-explorer/src/main/webapp/resources/img/file-upload.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/documents-explorer/src/main/webapp/resources/img/icoca.png b/documents-explorer/src/main/webapp/resources/img/icoca.png new file mode 100644 index 0000000..74345a8 Binary files /dev/null and b/documents-explorer/src/main/webapp/resources/img/icoca.png differ diff --git a/documents-explorer/src/main/webapp/resources/img/icon.png b/documents-explorer/src/main/webapp/resources/img/icon.png new file mode 100644 index 0000000..0690084 Binary files /dev/null and b/documents-explorer/src/main/webapp/resources/img/icon.png differ diff --git a/documents-explorer/src/main/webapp/resources/img/trash-alt.svg b/documents-explorer/src/main/webapp/resources/img/trash-alt.svg new file mode 100644 index 0000000..6305280 --- /dev/null +++ b/documents-explorer/src/main/webapp/resources/img/trash-alt.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/documents-explorer/src/main/webapp/resources/js/bootstrap.min.js b/documents-explorer/src/main/webapp/resources/js/bootstrap.min.js new file mode 100644 index 0000000..c4c0d1f --- /dev/null +++ b/documents-explorer/src/main/webapp/resources/js/bootstrap.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap v4.3.1 (https://getbootstrap.com/) + * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("jquery"),require("popper.js")):"function"==typeof define&&define.amd?define(["exports","jquery","popper.js"],e):e((t=t||self).bootstrap={},t.jQuery,t.Popper)}(this,function(t,g,u){"use strict";function i(t,e){for(var n=0;nthis._items.length-1||t<0))if(this._isSliding)g(this._element).one(Q.SLID,function(){return e.to(t)});else{if(n===t)return this.pause(),void this.cycle();var i=ndocument.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},t._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},t._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=t.left+t.right
',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",sanitize:!0,sanitizeFn:null,whiteList:Ee},je="show",He="out",Re={HIDE:"hide"+De,HIDDEN:"hidden"+De,SHOW:"show"+De,SHOWN:"shown"+De,INSERTED:"inserted"+De,CLICK:"click"+De,FOCUSIN:"focusin"+De,FOCUSOUT:"focusout"+De,MOUSEENTER:"mouseenter"+De,MOUSELEAVE:"mouseleave"+De},xe="fade",Fe="show",Ue=".tooltip-inner",We=".arrow",qe="hover",Me="focus",Ke="click",Qe="manual",Be=function(){function i(t,e){if("undefined"==typeof u)throw new TypeError("Bootstrap's tooltips require Popper.js (https://popper.js.org/)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var t=i.prototype;return t.enable=function(){this._isEnabled=!0},t.disable=function(){this._isEnabled=!1},t.toggleEnabled=function(){this._isEnabled=!this._isEnabled},t.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,n=g(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),g(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(g(this.getTipElement()).hasClass(Fe))return void this._leave(null,this);this._enter(null,this)}},t.dispose=function(){clearTimeout(this._timeout),g.removeData(this.element,this.constructor.DATA_KEY),g(this.element).off(this.constructor.EVENT_KEY),g(this.element).closest(".modal").off("hide.bs.modal"),this.tip&&g(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,(this._activeTrigger=null)!==this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},t.show=function(){var e=this;if("none"===g(this.element).css("display"))throw new Error("Please use show on visible elements");var t=g.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){g(this.element).trigger(t);var n=_.findShadowRoot(this.element),i=g.contains(null!==n?n:this.element.ownerDocument.documentElement,this.element);if(t.isDefaultPrevented()||!i)return;var o=this.getTipElement(),r=_.getUID(this.constructor.NAME);o.setAttribute("id",r),this.element.setAttribute("aria-describedby",r),this.setContent(),this.config.animation&&g(o).addClass(xe);var s="function"==typeof this.config.placement?this.config.placement.call(this,o,this.element):this.config.placement,a=this._getAttachment(s);this.addAttachmentClass(a);var l=this._getContainer();g(o).data(this.constructor.DATA_KEY,this),g.contains(this.element.ownerDocument.documentElement,this.tip)||g(o).appendTo(l),g(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new u(this.element,o,{placement:a,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:We},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}}),g(o).addClass(Fe),"ontouchstart"in document.documentElement&&g(document.body).children().on("mouseover",null,g.noop);var c=function(){e.config.animation&&e._fixTransition();var t=e._hoverState;e._hoverState=null,g(e.element).trigger(e.constructor.Event.SHOWN),t===He&&e._leave(null,e)};if(g(this.tip).hasClass(xe)){var h=_.getTransitionDurationFromElement(this.tip);g(this.tip).one(_.TRANSITION_END,c).emulateTransitionEnd(h)}else c()}},t.hide=function(t){var e=this,n=this.getTipElement(),i=g.Event(this.constructor.Event.HIDE),o=function(){e._hoverState!==je&&n.parentNode&&n.parentNode.removeChild(n),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),g(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};if(g(this.element).trigger(i),!i.isDefaultPrevented()){if(g(n).removeClass(Fe),"ontouchstart"in document.documentElement&&g(document.body).children().off("mouseover",null,g.noop),this._activeTrigger[Ke]=!1,this._activeTrigger[Me]=!1,this._activeTrigger[qe]=!1,g(this.tip).hasClass(xe)){var r=_.getTransitionDurationFromElement(n);g(n).one(_.TRANSITION_END,o).emulateTransitionEnd(r)}else o();this._hoverState=""}},t.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},t.isWithContent=function(){return Boolean(this.getTitle())},t.addAttachmentClass=function(t){g(this.getTipElement()).addClass(Ae+"-"+t)},t.getTipElement=function(){return this.tip=this.tip||g(this.config.template)[0],this.tip},t.setContent=function(){var t=this.getTipElement();this.setElementContent(g(t.querySelectorAll(Ue)),this.getTitle()),g(t).removeClass(xe+" "+Fe)},t.setElementContent=function(t,e){"object"!=typeof e||!e.nodeType&&!e.jquery?this.config.html?(this.config.sanitize&&(e=Se(e,this.config.whiteList,this.config.sanitizeFn)),t.html(e)):t.text(e):this.config.html?g(e).parent().is(t)||t.empty().append(e):t.text(g(e).text())},t.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},t._getOffset=function(){var e=this,t={};return"function"==typeof this.config.offset?t.fn=function(t){return t.offsets=l({},t.offsets,e.config.offset(t.offsets,e.element)||{}),t}:t.offset=this.config.offset,t},t._getContainer=function(){return!1===this.config.container?document.body:_.isElement(this.config.container)?g(this.config.container):g(document).find(this.config.container)},t._getAttachment=function(t){return Pe[t.toUpperCase()]},t._setListeners=function(){var i=this;this.config.trigger.split(" ").forEach(function(t){if("click"===t)g(i.element).on(i.constructor.Event.CLICK,i.config.selector,function(t){return i.toggle(t)});else if(t!==Qe){var e=t===qe?i.constructor.Event.MOUSEENTER:i.constructor.Event.FOCUSIN,n=t===qe?i.constructor.Event.MOUSELEAVE:i.constructor.Event.FOCUSOUT;g(i.element).on(e,i.config.selector,function(t){return i._enter(t)}).on(n,i.config.selector,function(t){return i._leave(t)})}}),g(this.element).closest(".modal").on("hide.bs.modal",function(){i.element&&i.hide()}),this.config.selector?this.config=l({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},t._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},t._enter=function(t,e){var n=this.constructor.DATA_KEY;(e=e||g(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),g(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?Me:qe]=!0),g(e.getTipElement()).hasClass(Fe)||e._hoverState===je?e._hoverState=je:(clearTimeout(e._timeout),e._hoverState=je,e.config.delay&&e.config.delay.show?e._timeout=setTimeout(function(){e._hoverState===je&&e.show()},e.config.delay.show):e.show())},t._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||g(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),g(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?Me:qe]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=He,e.config.delay&&e.config.delay.hide?e._timeout=setTimeout(function(){e._hoverState===He&&e.hide()},e.config.delay.hide):e.hide())},t._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},t._getConfig=function(t){var e=g(this.element).data();return Object.keys(e).forEach(function(t){-1!==Oe.indexOf(t)&&delete e[t]}),"number"==typeof(t=l({},this.constructor.Default,e,"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),_.typeCheckConfig(be,t,this.constructor.DefaultType),t.sanitize&&(t.template=Se(t.template,t.whiteList,t.sanitizeFn)),t},t._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},t._cleanTipClass=function(){var t=g(this.getTipElement()),e=t.attr("class").match(Ne);null!==e&&e.length&&t.removeClass(e.join(""))},t._handlePopperPlacementChange=function(t){var e=t.instance;this.tip=e.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},t._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null===t.getAttribute("x-placement")&&(g(t).removeClass(xe),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},i._jQueryInterface=function(n){return this.each(function(){var t=g(this).data(Ie),e="object"==typeof n&&n;if((t||!/dispose|hide/.test(n))&&(t||(t=new i(this,e),g(this).data(Ie,t)),"string"==typeof n)){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.3.1"}},{key:"Default",get:function(){return Le}},{key:"NAME",get:function(){return be}},{key:"DATA_KEY",get:function(){return Ie}},{key:"Event",get:function(){return Re}},{key:"EVENT_KEY",get:function(){return De}},{key:"DefaultType",get:function(){return ke}}]),i}();g.fn[be]=Be._jQueryInterface,g.fn[be].Constructor=Be,g.fn[be].noConflict=function(){return g.fn[be]=we,Be._jQueryInterface};var Ve="popover",Ye="bs.popover",ze="."+Ye,Xe=g.fn[Ve],$e="bs-popover",Ge=new RegExp("(^|\\s)"+$e+"\\S+","g"),Je=l({},Be.Default,{placement:"right",trigger:"click",content:"",template:''}),Ze=l({},Be.DefaultType,{content:"(string|element|function)"}),tn="fade",en="show",nn=".popover-header",on=".popover-body",rn={HIDE:"hide"+ze,HIDDEN:"hidden"+ze,SHOW:"show"+ze,SHOWN:"shown"+ze,INSERTED:"inserted"+ze,CLICK:"click"+ze,FOCUSIN:"focusin"+ze,FOCUSOUT:"focusout"+ze,MOUSEENTER:"mouseenter"+ze,MOUSELEAVE:"mouseleave"+ze},sn=function(t){var e,n;function i(){return t.apply(this,arguments)||this}n=t,(e=i).prototype=Object.create(n.prototype),(e.prototype.constructor=e).__proto__=n;var o=i.prototype;return o.isWithContent=function(){return this.getTitle()||this._getContent()},o.addAttachmentClass=function(t){g(this.getTipElement()).addClass($e+"-"+t)},o.getTipElement=function(){return this.tip=this.tip||g(this.config.template)[0],this.tip},o.setContent=function(){var t=g(this.getTipElement());this.setElementContent(t.find(nn),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(on),e),t.removeClass(tn+" "+en)},o._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},o._cleanTipClass=function(){var t=g(this.getTipElement()),e=t.attr("class").match(Ge);null!==e&&0=this._offsets[o]&&("undefined"==typeof this._offsets[o+1]||t+~]|"+R+")"+R+"*"),U=new RegExp(R+"|>"),V=new RegExp(W),X=new RegExp("^"+B+"$"),Q={ID:new RegExp("^#("+B+")"),CLASS:new RegExp("^\\.("+B+")"),TAG:new RegExp("^("+B+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+W),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+R+"*(even|odd|(([+-]|)(\\d*)n|)"+R+"*(?:([+-]|)"+R+"*(\\d+)|))"+R+"*\\)|)","i"),bool:new RegExp("^(?:"+I+")$","i"),needsContext:new RegExp("^"+R+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+R+"*((?:-\\d)?\\d*)"+R+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,G=/^(?:input|select|textarea|button)$/i,K=/^h\d$/i,J=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+R+"?|("+R+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){C()},ae=xe(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{O.apply(t=P.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){O={apply:t.length?function(e,t){q.apply(e,P.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,d=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==d&&9!==d&&11!==d)return n;if(!r&&((e?e.ownerDocument||e:m)!==T&&C(e),e=e||T,E)){if(11!==d&&(u=Z.exec(t)))if(i=u[1]){if(9===d){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return O.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&p.getElementsByClassName&&e.getElementsByClassName)return O.apply(n,e.getElementsByClassName(i)),n}if(p.qsa&&!S[t+" "]&&(!v||!v.test(t))&&(1!==d||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===d&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=N),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+be(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return O.apply(n,f.querySelectorAll(c)),n}catch(e){S(t,!0)}finally{s===N&&e.removeAttribute("id")}}}return g(t.replace(F,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>x.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[N]=!0,e}function ce(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)x.attrHandle[n[r]]=t}function de(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function pe(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in p=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},C=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==T&&9===r.nodeType&&r.documentElement&&(a=(T=r).documentElement,E=!i(T),m!==T&&(n=T.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),p.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),p.getElementsByTagName=ce(function(e){return e.appendChild(T.createComment("")),!e.getElementsByTagName("*").length}),p.getElementsByClassName=J.test(T.getElementsByClassName),p.getById=ce(function(e){return a.appendChild(e).id=N,!T.getElementsByName||!T.getElementsByName(N).length}),p.getById?(x.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},x.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(x.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},x.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),x.find.TAG=p.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):p.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},x.find.CLASS=p.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(p.qsa=J.test(T.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+R+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+R+"*(?:value|"+I+")"),e.querySelectorAll("[id~="+N+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+N+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=T.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+R+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(p.matchesSelector=J.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){p.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",W)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=J.test(a.compareDocumentPosition),y=t||J.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!p.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument===m&&y(m,e)?-1:t===T||t.ownerDocument===m&&y(m,t)?1:u?H(u,e)-H(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===T?-1:t===T?1:i?-1:o?1:u?H(u,e)-H(u,t):0;if(i===o)return de(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?de(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),T},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==T&&C(e),p.matchesSelector&&E&&!S[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||p.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){S(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&V.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=d[e+" "];return t||(t=new RegExp("(^|"+R+")"+e+"("+R+"|$)"))&&d(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function L(e,n,r){return x(n)?E.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?E.grep(e,function(e){return e===n!==r}):"string"!=typeof n?E.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(E.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof E?t[0]:t,E.merge(this,E.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:v,!0)),D.test(r[1])&&E.isPlainObject(t))for(r in t)x(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=v.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):x(e)?void 0!==n.ready?n.ready(e):e(E):E.makeArray(e,this)}).prototype=E.fn,j=E(v);var O=/^(?:parents|prev(?:Until|All))/,P={children:!0,contents:!0,next:!0,prev:!0};function H(e,t){while((e=e[t])&&1!==e.nodeType);return e}E.fn.extend({has:function(e){var t=E(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,pe=/^$|^module$|\/(?:java|ecma)script/i,he={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ge(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&S(e,t)?E.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;nx",b.noCloneChecked=!!ye.cloneNode(!0).lastChild.defaultValue;var we=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Te=/^([^.]*)(?:\.(.+)|)/;function Ee(){return!0}function Ne(){return!1}function Ae(e,t){return e===function(){try{return v.activeElement}catch(e){}}()==("focus"===t)}function ke(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)ke(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Ne;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return E().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=E.guid++)),e.each(function(){E.event.add(this,t,i,r,n)})}function Se(e,i,o){o?(G.set(e,i,!1),E.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=G.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(E.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),G.set(this,i,r),t=o(this,i),this[i](),r!==(n=G.get(this,i))||t?G.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(G.set(this,i,{value:E.event.trigger(E.extend(r[0],E.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===G.get(e,i)&&E.event.add(e,i,Ee)}E.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,d,p,h,g,v=G.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&E.find.matchesSelector(ie,i),n.guid||(n.guid=E.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof E&&E.event.triggered!==e.type?E.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(I)||[""]).length;while(l--)p=g=(s=Te.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),p&&(f=E.event.special[p]||{},p=(i?f.delegateType:f.bindType)||p,f=E.event.special[p]||{},c=E.extend({type:p,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&E.expr.match.needsContext.test(i),namespace:h.join(".")},o),(d=u[p])||((d=u[p]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(p,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?d.splice(d.delegateCount++,0,c):d.push(c),E.event.global[p]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,d,p,h,g,v=G.hasData(e)&&G.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(I)||[""]).length;while(l--)if(p=g=(s=Te.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),p){f=E.event.special[p]||{},d=u[p=(r?f.delegateType:f.bindType)||p]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=d.length;while(o--)c=d[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(d.splice(o,1),c.selector&&d.delegateCount--,f.remove&&f.remove.call(e,c));a&&!d.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||E.removeEvent(e,p,v.handle),delete u[p])}else for(p in u)E.event.remove(e,p+t[l],n,r,!0);E.isEmptyObject(u)&&G.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=E.event.fix(e),u=new Array(arguments.length),l=(G.get(this,"events")||{})[s.type]||[],c=E.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,Le=/\s*$/g;function Oe(e,t){return S(e,"table")&&S(11!==t.nodeType?t:t.firstChild,"tr")&&E(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Ie(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(G.hasData(e)&&(o=G.access(e),a=G.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(b.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||E.isXMLDoc(e)))for(a=ge(c),r=0,i=(o=ge(e)).length;r
",2===pt.childNodes.length),E.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(b.createHTMLDocument?((r=(t=v.implementation.createHTMLDocument("")).createElement("base")).href=v.location.href,t.head.appendChild(r)):t=v),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&E(o).remove(),E.merge([],i.childNodes)));var r,i,o},E.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=E.css(e,"position"),c=E(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=E.css(e,"top"),u=E.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),x(t)&&(t=t.call(e,n,E.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},E.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){E.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===E.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===E.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=E(e).offset()).top+=E.css(e,"borderTopWidth",!0),i.left+=E.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-E.css(r,"marginTop",!0),left:t.left-i.left-E.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===E.css(e,"position"))e=e.offsetParent;return e||ie})}}),E.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;E.fn[t]=function(e){return z(this,function(e,t,n){var r;if(w(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),E.each(["top","left"],function(e,n){E.cssHooks[n]=ze(b.pixelPosition,function(e,t){if(t)return t=Fe(e,n),Me.test(t)?E(e).position()[n]+"px":t})}),E.each({Height:"height",Width:"width"},function(a,s){E.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){E.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return z(this,function(e,t,n){var r;return w(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?E.css(e,t,i):E.style(e,t,n,i)},s,n?e:void 0,n)}})}),E.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){E.fn[n]=function(e,t){return 0=o.clientWidth&&n>=o.clientHeight}),l=0a[e]&&!t.escapeWithReference&&(n=Q(f[o],a[e]-('right'===e?f.width:f.height))),le({},o,n)}};return l.forEach(function(e){var t=-1===['left','top'].indexOf(e)?'secondary':'primary';f=fe({},f,m[t](e))}),e.offsets.popper=f,e},priority:['left','right','top','bottom'],padding:5,boundariesElement:'scrollParent'},keepTogether:{order:400,enabled:!0,fn:function(e){var t=e.offsets,o=t.popper,n=t.reference,i=e.placement.split('-')[0],r=Z,p=-1!==['top','bottom'].indexOf(i),s=p?'right':'bottom',d=p?'left':'top',a=p?'width':'height';return o[s]r(n[s])&&(e.offsets.popper[d]=r(n[s])),e}},arrow:{order:500,enabled:!0,fn:function(e,o){var n;if(!K(e.instance.modifiers,'arrow','keepTogether'))return e;var i=o.element;if('string'==typeof i){if(i=e.instance.popper.querySelector(i),!i)return e;}else if(!e.instance.popper.contains(i))return console.warn('WARNING: `arrow.element` must be child of its popper element!'),e;var r=e.placement.split('-')[0],p=e.offsets,s=p.popper,d=p.reference,a=-1!==['left','right'].indexOf(r),l=a?'height':'width',f=a?'Top':'Left',m=f.toLowerCase(),h=a?'left':'top',c=a?'bottom':'right',u=S(i)[l];d[c]-us[c]&&(e.offsets.popper[m]+=d[m]+u-s[c]),e.offsets.popper=g(e.offsets.popper);var b=d[m]+d[l]/2-u/2,w=t(e.instance.popper),y=parseFloat(w['margin'+f],10),E=parseFloat(w['border'+f+'Width'],10),v=b-e.offsets.popper[m]-y-E;return v=ee(Q(s[l]-u,v),0),e.arrowElement=i,e.offsets.arrow=(n={},le(n,m,$(v)),le(n,h,''),n),e},element:'[x-arrow]'},flip:{order:600,enabled:!0,fn:function(e,t){if(W(e.instance.modifiers,'inner'))return e;if(e.flipped&&e.placement===e.originalPlacement)return e;var o=v(e.instance.popper,e.instance.reference,t.padding,t.boundariesElement,e.positionFixed),n=e.placement.split('-')[0],i=T(n),r=e.placement.split('-')[1]||'',p=[];switch(t.behavior){case ge.FLIP:p=[n,i];break;case ge.CLOCKWISE:p=G(n);break;case ge.COUNTERCLOCKWISE:p=G(n,!0);break;default:p=t.behavior;}return p.forEach(function(s,d){if(n!==s||p.length===d+1)return e;n=e.placement.split('-')[0],i=T(n);var a=e.offsets.popper,l=e.offsets.reference,f=Z,m='left'===n&&f(a.right)>f(l.left)||'right'===n&&f(a.left)f(l.top)||'bottom'===n&&f(a.top)f(o.right),g=f(a.top)f(o.bottom),b='left'===n&&h||'right'===n&&c||'top'===n&&g||'bottom'===n&&u,w=-1!==['top','bottom'].indexOf(n),y=!!t.flipVariations&&(w&&'start'===r&&h||w&&'end'===r&&c||!w&&'start'===r&&g||!w&&'end'===r&&u),E=!!t.flipVariationsByContent&&(w&&'start'===r&&c||w&&'end'===r&&h||!w&&'start'===r&&u||!w&&'end'===r&&g),v=y||E;(m||b||v)&&(e.flipped=!0,(m||b)&&(n=p[d+1]),v&&(r=z(r)),e.placement=n+(r?'-'+r:''),e.offsets.popper=fe({},e.offsets.popper,C(e.instance.popper,e.offsets.reference,e.placement)),e=P(e.instance.modifiers,e,'flip'))}),e},behavior:'flip',padding:5,boundariesElement:'viewport',flipVariations:!1,flipVariationsByContent:!1},inner:{order:700,enabled:!1,fn:function(e){var t=e.placement,o=t.split('-')[0],n=e.offsets,i=n.popper,r=n.reference,p=-1!==['left','right'].indexOf(o),s=-1===['top','left'].indexOf(o);return i[p?'left':'top']=r[o]-(s?i[p?'width':'height']:0),e.placement=T(t),e.offsets.popper=g(i),e}},hide:{order:800,enabled:!0,fn:function(e){if(!K(e.instance.modifiers,'hide','preventOverflow'))return e;var t=e.offsets.reference,o=D(e.instance.modifiers,function(e){return'preventOverflow'===e.name}).boundaries;if(t.bottomo.right||t.top>o.bottom||t.rightwindow.devicePixelRatio||!me),c='bottom'===o?'top':'bottom',g='right'===n?'left':'right',b=B('transform');if(d='bottom'==c?'HTML'===l.nodeName?-l.clientHeight+h.bottom:-f.height+h.bottom:h.top,s='right'==g?'HTML'===l.nodeName?-l.clientWidth+h.right:-f.width+h.right:h.left,a&&b)m[b]='translate3d('+s+'px, '+d+'px, 0)',m[c]=0,m[g]=0,m.willChange='transform';else{var w='bottom'==c?-1:1,y='right'==g?-1:1;m[c]=d*w,m[g]=s*y,m.willChange=c+', '+g}var E={"x-placement":e.placement};return e.attributes=fe({},E,e.attributes),e.styles=fe({},m,e.styles),e.arrowStyles=fe({},e.offsets.arrow,e.arrowStyles),e},gpuAcceleration:!0,x:'bottom',y:'right'},applyStyle:{order:900,enabled:!0,fn:function(e){return V(e.instance.popper,e.styles),j(e.instance.popper,e.attributes),e.arrowElement&&Object.keys(e.arrowStyles).length&&V(e.arrowElement,e.arrowStyles),e},onLoad:function(e,t,o,n,i){var r=L(i,t,e,o.positionFixed),p=O(o.placement,r,t,e,o.modifiers.flip.boundariesElement,o.modifiers.flip.padding);return t.setAttribute('x-placement',p),V(t,{position:o.positionFixed?'fixed':'absolute'}),o},gpuAcceleration:void 0}}},ue}); +//# sourceMappingURL=popper.min.js.map diff --git a/exported-forms/industry-application-for-membership.xhtml b/exported-forms/industry-application-for-membership.xhtml new file mode 100644 index 0000000..29023ac --- /dev/null +++ b/exported-forms/industry-application-for-membership.xhtml @@ -0,0 +1,4967 @@ + + + INDUSTRY APPLICATION FOR MEMBERSHIP + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + industry-application-for-membership + industry-application-for-membership-form + INDUSTRY APPLICATION FOR MEMBERSHIP + + + [{ "path": "section-4/grid-55", "iteration-name": "grid-55-iteration" },{ "path": "section-4/grid-179", "iteration-name": "grid-179-iteration" },{ "path": "section-4/grid-72", "iteration-name": "grid-72-iteration" },{ "path": "section-4/grid-76", "iteration-name": "grid-76-iteration" },{ "path": "section-4/grid-180", "iteration-name": "grid-180-iteration" },{ "path": "section-4/grid-89", "iteration-name": "grid-89-iteration" },{ "path": "section-4/grid-79", "iteration-name": "grid-79-iteration" },{ "path": "section-4/grid-81", "iteration-name": "grid-81-iteration" },{ "path": "section-4/grid-137", "iteration-name": "grid-137-iteration" },{ "path": "section-4/grid-142", "iteration-name": "grid-142-iteration" },{ "path": "section-4/grid-235", "iteration-name": "grid-235-iteration" },{ "path": "section-4/grid-157", "iteration-name": "grid-157-iteration" },{ "path": "section-4/grid-232", "iteration-name": "grid-232-iteration" },{ "path": "section-4/grid-189", "iteration-name": "grid-189-iteration" },{ "path": "section-4/grid-230", "iteration-name": "grid-230-iteration" },{ "path": "section-4/grid-175", "iteration-name": "grid-175-iteration" },{ "path": "section-80/grid-194", "iteration-name": "grid-194-iteration" },{ "path": "section-80/grid-221", "iteration-name": "grid-221-iteration" },{ "path": "section-80/grid-229", "iteration-name": "grid-229-iteration" }] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + e.g. http://somewebsite.com + Invalid website URL + + + + + + + <div><strong>3. Grievance Mechanism Procedures</strong></div> + + + <div> +<p>Article 66 and 67 of the Code states:</p> +<p style="padding-left: 30px;"><em>Signatory Companies will establish grievance procedures to address claims alleging failure by the Company to respect the principles contained in this Code brought by Personnel or by third parties.<br /></em><br /><em>Signatory Companies will:</em></p> +<p style="padding-left: 60px;"><em>a) establish procedures for their Personnel and for <a title="Third parties include all external stakeholders the company grievance mechanism is intended to serve. This may for example be clients, suppliers, outsource partners, communities in a company’s area of operation, non-governmental organizations." onclick="return false;" style="cursor:help" href="#">third parties</a> to report allegations of improper and/or illegal conduct to designated Personnel, including such acts or omissions that would violate the principles contained in this Code. Procedures must be fair, accessible and offer effective remedies, including recommendations for the prevention of recurrence. They shall also facilitate reporting by persons with reason to believe that improper or illegal conduct, or a violation of this Code, has occurred or is about to occur, of such conduct, to designated individuals within a Company and, where appropriate, to competent authorities;</em><br /><em>b) <a onclick="return false;" style="cursor:help;" title="A company grievance mechanism should be published on a publically accessible website. Reference to the grievance mechanism should be made on the main page of the website and easy to find by internal and external stakeholders." href="#">publish details</a> of their grievance mechanism on a publically accessible website;</em><br /><em>c) investigate allegations promptly, impartially and with due consideration to confidentiality;</em><br /><em>d) keep records about any such allegations, findings or disciplinary measures. Except where prohibited or protected by applicable law, such records should be made available to a Competent Authority on request;</em><br /><em>e) cooperate with official investigations, and not participate in or tolerate from their Personnel, the impeding of witnesses, testimony or investigations;</em><br /><em>f) take appropriate disciplinary action, which could include termination of employment in case of a finding of such violations or unlawful behaviour; and</em><br /><em>g) ensure that their Personnel who report wrongdoings in good faith are provided protection against any retaliation for making such reports, such as shielding them from unwarranted or otherwise inappropriate disciplinary measures, and that matters raised are examined and acted upon without undue delay.</em></p> +</div> + + + + + + + Provide a summary or upload a supporting document + + + <div><strong>Please upload any supporting document(s) here:</strong></div> + + + + + + + <div><strong>2. Personnel Screening and Vetting Programme</strong></div> + + + <div>Article 48 of the Code states:</div> +<div> </div> +<div style="padding-left: 30px;"><em><span style="line-height: 1.5em;">Signatory Companies will establish and maintain internal policies and procedures to determine the suitability of applicants, or Personnel, to carry weapons as part of their duties. At a minimum, this will include checks that they have not: </span></em> +<p style="padding-left: 30px;"><em>a) been convicted of a crime that would indicate that the individual lacks the character and fitness to perform security services pursuant to the principles of this Code;</em><br /><em>b) been dishonourably discharged;</em><br /><em>c) had other employment or engagement contracts terminated for documented violations of one or more of the principles contained in this Code; or</em><br /><em>d) had a history of other conduct that, according to an objectively reasonable standard, brings into question their fitness to carry a weapon. </em></p> +<p><em>For the purposes of this paragraph, disqualifying crimes may include, but are not limited to, battery, murder, arson, fraud, rape, sexual abuse, organized crime, bribery, corruption, perjury, torture, kidnapping, drug trafficking or trafficking in persons. This provision shall not override any law restricting whether a crime may be considered in evaluating an applicant. Nothing in this section would prohibit a Company from utilizing more stringent criteria.</em></p> +</div> + + + + + Provide a summary or upload a supporting document + + + <div><strong>Please upload any supporting document(s) here:</strong></div> + + + + + + + + + example + + + + + other + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <div>Under the ICoCA Certification Procedure, the Board assesses and recognizes standards that are consistent with the Code and defines, for each standard, additional information relative to the human rights and humanitarian law impact of PSC operations that it needs to assess whether a company's systems and policies meet the requirements of the Code. Members must then become certified to a standard recognized by the Board, and supply the additional information defined by the Board, in order to become certified to the Code.</div> +<p>Please note that under the Articles of Association, member PSCs must become certified under the Certification Procedure within before 30 September 2018.</p> + + + <div><strong>1. Which national or international standard does the Applicant have or plan to become certified to?</strong></div> + + + + + + + <div><strong>7. Did any civil or criminal proceeding lead to a judgement against, finding of liability against, or conviction of the Applicant in the last 5 years? </strong></div> + + + + + + + + + + + + + + <div><strong>Please upload any supporting documents here:</strong></div> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Only numeric values are accepted + + + + + + + <div><strong>5. Parent Company/Ownership Information</strong></div> + + + <div>Please provide details on the structure and ownership of the company:</div> + + + + + + + <div><strong>8. Has the Applicant or any subsidiary been the subject of any non-judicial grievance proceedings related to alleged human rights abuses in the last 5 years?</strong></div> + + + + + + + + + + + + + + + + + + <div><strong>Please upload any supporting documents here:</strong></div> + + + + + + + <div>Section IV - Legal Disclosures</div> + + + <div><strong>6. Has the Applicant or any subsidiary been the subject of any civil or criminal proceedings involving allegations of human rights abuses in the last 5 years?</strong></div> + + + + + + + + + + + + + + + + + + + <div><strong>Please upload any supporting documents here:</strong></div> + + + + + + + + + + + + <div><strong>Please upload relevant documentation:</strong></div> + + + + + + + + + + + + + + + + 1 + + + + 2 + + + + 3 + + + + + + + + <div><strong>3. Clients</strong></div> + + + <div><strong>Type</strong></div> + + + <div><strong>Land</strong></div> + + + <div><strong>Maritime</strong></div> + + + <div><strong>Comments</strong></div> + + + <div><span style="line-height: 1.5em;">Government</span></div> + + + + + + + + + + + + + <div>Non-State Corporate Clients</div> + + + + + + + + + + + + + <div>Private person(s)</div> + + + + + + + + + + + + + <div>International and Regional Organizations (including UN, etc.)</div> + + + + + + + + + + + + + <div>NGOs</div> + + + + + + + + + + + + + <div>Other</div> + + + + + + + + + + + + + <div>Section III - Financial Disclosures</div> + + + <div><strong style="line-height: 1.5em;">4. Total Revenue </strong><span style="line-height: 1.5em;">(including for all subsidiaries)</span></div> + + + <div>The revenue determines the <a href="https://www.icoca.ch/en/get-involved" target="_blank">membership subscription</a> level of the Applicant.</div> + + + + + + + <div><strong>Financial Year</strong></div> + + + <div><strong>Currency</strong></div> + + + <div><strong>Total Revenue</strong></div> + + + + + + + + + + + + + + + + + + + + + + + + <div><strong>5. Financial Capacity</strong></div> + + + <p>Article 69 of the Code states:</p> +<p><em>Signatory Companies will ensure that they have sufficient financial capacity in place at all times to meet reasonably anticipated commercial liabilities for damages to any person in respect of personal injury, death or damage to property. Sufficient financial capacity may be met by customer commitments, adequate insurance coverage (such as by employer’s liability and public liability coverage appropriately sized for the scale and scope of operations of the Signatory Company) or self-insurance/retention. Where it is not possible to obtain suitable insurance cover, the Signatory Company will make alternative arrangements to ensure that it is able to meet such liabilities.</em></p> +<p></p> + + + + + + + <div>Please describe the types and amounts of insurance sufficient to cover commercial liabilities: </div> + + + + + + + 1 + + + + 2 + + + + 3 + + + + + + + + + + + + + + + + + only digits are accepted + + + <div><strong>2. Contractors &amp; Subcontractors</strong></div> + + + <div>Please list any contractors and/or subcontractors involved in the operations listed above. </div> + + + + + + + + example + + + + + + + + + + + + + + + + + + + + + + + + + <div>Section II - Operations</div> + + + <div><strong>1. Operation Locations &amp; Personnel</strong></div> + + + + + + + + + + + + + + + + + + <div><strong>6. Scope of Applicant and Subsidiaries</strong></div> + + + <div>Please list any subsidiary entities that are owned or controlled by the Applicant. If they are not being included within the scope of this application, please explain why:</div> + + + + + + + + + + + <div><strong>7. Please provide any other relevant documentation (e.g. public company annual reports)</strong></div> + + + + + + + <div><strong>Please provide documentation showing the Applicant’s ownership and corporate structure including information on the company’s senior management (e.g. organizational chart) here:</strong></div> + + + + + + + + + + + + + + + + + + + + <div><strong>3. Main Point of Contact</strong> (the person who has authority to vote on behalf of the Applicant)</div> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <div><strong>4. Other Contacts</strong> (staff/management who should be copied on Association communications)</div> + + + + + + + + + + + + + + + + example + + + + + + + + + + + <p><strong>The undersigned affirms, on behalf of the entity applying for ICoCA membership (the “Applicant”),</strong></p> +<p style="padding-left: 30px;">(1) that Applicant is committing to implement and adhere to all of the obligations and requirements of the International Code of Conduct for Private Security Service Providers,</p> +<p style="padding-left: 30px;">(2) that Applicant acknowledges and accepts the Articles of Association and the procedures and rules adopted by the ICoCA in accordance with those Articles of Association;</p> +<p style="padding-left: 30px;">(3) that Applicant hereby commits to obtain and provide evidence of certification in accordance with Article 11 of the Articles of Association;</p> +<p style="padding-left: 30px;">(4) that Applicant hereby commits to submit to reporting, monitoring and performance assessments in accordance with Article 12 of the Articles of Association;</p> +<p style="padding-left: 30px;">(5) that Applicant hereby commits to participate in a complaints process developed by the ICoCA in accordance with Article 13 of the Articles of Association;</p> +<p style="padding-left: 30px;">(6) that Applicant understands and agrees to pay joining fees and dues assessed at the time of application to the Association in a timely manner;</p> +<p style="padding-left: 30px;">(7) that Applicant agrees that continued membership in the Association is contingent upon the Applicant meeting and maintaining the obligations and requirements contained in the ICoC, the Articles of Association, and the rules and procedures adopted by the Association;</p> +<p style="padding-left: 30px;">(8) that the Applicant has reviewed the completed Application for Membership, Registration Statement, Implementation plan and any supporting documents submitted along with them and that all information submitted to the Secretariat as part of the membership application process is accurate and truthful to the best of Applicant’s knowledge, and that no material information has been omitted; and</p> +<p style="padding-left: 30px;">(9) that I am duly authorized to sign this Application for Membership and to make the above statements on behalf of the Applicant.</p> + + + <div>Signed: _____________________<br /><br /><br /></div> +<div>Printed name: ________________<br /><br /><br />Title: _______________________<br /><br /><br />Applicant Name: ______________</div> + + + <div> </div> +<div> </div> +<div><span>Please print this page using PDF button, sign it and attach document using field below</span></div> + + + + + + + + + + + + + + + + + + + <div> +<div>(Please follow the steps set out below carefully in order to complete your application.)<br /><br />Application Form<br />The Industry Application for Membership is comprised of the following Parts and Sections.</div> +<div> </div> +<div>Part 1 – Registration Statement<br /> Section I – Corporate Information and Legal Status<br /> Section II – Operations<br /> Section III – Financial Disclosures<br /> Section IV – Legal Disclosures<br /> Part 2 - Implementation Plan<br /> Part 3 – Application Statement<br /><br />Please complete <strong>all questions</strong> to avoid delays in the processing of your Membership Application.<br /><br />Submission<br />The completed application must be submitted to the Secretariat via this form.<br /><br /><strong>Please do not email completed application forms to the Secretariat.</strong><br /><br />Joining Fee<br />The non-refundable joining fee of USD 1,000 must be paid to ICoCA before the application can be reviewed. Please see the <a href="https://www.icoca.ch/sites/default/files/uploads/ICoCA%20Joining%20Fee%20Information%202015.pdf" target="_blank">joining fee document for the bank details</a>.<br /><br />Review<br />The Secretariat will review the completed Application and provide a summary and recommendation to the ICoCA Board of Directors who will make the final decision regarding Membership. As provided for in the Membership Requirements and Information Security and Confidentiality and NDA policies, no confidential information will be disclosed to the Board of Directors.<br /><br /><strong>Should you have any questions regarding the application or process, please send an email to <a href="mailto:secretariat@icoca.ch">secretariat@icoca.ch</a>.</strong></div> +</div> + + + + + + + + company-self-assessment + + + + + certification + + + + + membership-application + + + + + monitoring + + + + + other + + + + + + + + + + industry + + + + + civil-society-organisations + + + + + governments + + + + + observers + + + + + + + + <div>Section I - Corporate Information and Legal Status</div> + + + <div><strong>1. Company Details</strong></div> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + example + + + + + + + + + + + + + e.g. http://somewebsite.com + + + + + + + + example + + + + + + + + + + + + + + + + + + + + example + + + + + + + <div><strong>2. Other Office Locations</strong></div> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <sql:config xmlns:sql="http://orbeon.org/oxf/xml/sql"> + <sql:datasource>postgresql</sql:datasource> + <sql:query>SELECT iso_alpha3 as iso, name FROM dropdown_country</sql:query> + + </sql:config> + + + + <sql:config xmlns:sql="http://orbeon.org/oxf/xml/sql"> + <sql:datasource>postgresql</sql:datasource> + <sql:query>SELECT name FROM dropdown_member_type</sql:query> + + </sql:config> + + + + <sql:config xmlns:sql="http://orbeon.org/oxf/xml/sql"> + <sql:datasource>postgresql</sql:datasource> + <sql:query>select distinct alphabetic_code as name, currency as currency from dropdown_currency order by alphabetic_code</sql:query> + + </sql:config> + + + + <sql:config xmlns:sql="http://orbeon.org/oxf/xml/sql"> + <sql:datasource>postgresql</sql:datasource> + <sql:query>SELECT name FROM dropdown_certificate_standard</sql:query> + + </sql:config> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/exported-forms/readme.md b/exported-forms/readme.md new file mode 100644 index 0000000..27d540b --- /dev/null +++ b/exported-forms/readme.md @@ -0,0 +1 @@ +Folder contains forms (form sources) exported from Form Builder \ No newline at end of file diff --git a/integration-module/.gitignore b/integration-module/.gitignore new file mode 100644 index 0000000..38f1079 --- /dev/null +++ b/integration-module/.gitignore @@ -0,0 +1,19 @@ +*.sw? +.#* +*# +*~ +.classpath +.project +.settings +bin +build +target +dependency-reduced-pom.xml +*.sublime-* +/scratch +.gradle +README.html +*.iml +.idea +out + diff --git a/integration-module/.mvn/wrapper/maven-wrapper.jar b/integration-module/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000..5fd4d50 Binary files /dev/null and b/integration-module/.mvn/wrapper/maven-wrapper.jar differ diff --git a/integration-module/.mvn/wrapper/maven-wrapper.properties b/integration-module/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000..c954cec --- /dev/null +++ b/integration-module/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1 @@ +distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.3.9/apache-maven-3.3.9-bin.zip diff --git a/integration-module/META-INF/MANIFEST.MF b/integration-module/META-INF/MANIFEST.MF new file mode 100644 index 0000000..de46c19 --- /dev/null +++ b/integration-module/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Main-Class: hycom.Application + diff --git a/integration-module/WEB-INF/ibm-web-ext.xml b/integration-module/WEB-INF/ibm-web-ext.xml new file mode 100644 index 0000000..aa42ffa --- /dev/null +++ b/integration-module/WEB-INF/ibm-web-ext.xml @@ -0,0 +1,14 @@ + + + + + + + + + + diff --git a/integration-module/build.gradle b/integration-module/build.gradle new file mode 100644 index 0000000..c0c77b7 --- /dev/null +++ b/integration-module/build.gradle @@ -0,0 +1,32 @@ +buildscript { + repositories { + mavenCentral() + } + dependencies { + classpath("org.springframework.boot:spring-boot-gradle-plugin:1.5.3.RELEASE") + } +} + +apply plugin: 'java' +apply plugin: 'eclipse' +apply plugin: 'idea' +apply plugin: 'org.springframework.boot' + +jar { + baseName = 'integration-module' + version = '0.1.0' +} + +repositories { + mavenCentral() +} + +sourceCompatibility = 1.8 +targetCompatibility = 1.8 + +dependencies { + compile("org.springframework.boot:spring-boot-starter-web") + testCompile('org.springframework.boot:spring-boot-starter-test') + testCompile('com.jayway.jsonpath:json-path') +} + diff --git a/integration-module/gradle/wrapper/gradle-wrapper.jar b/integration-module/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..05ef575 Binary files /dev/null and b/integration-module/gradle/wrapper/gradle-wrapper.jar differ diff --git a/integration-module/gradle/wrapper/gradle-wrapper.properties b/integration-module/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..a4b2554 --- /dev/null +++ b/integration-module/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Mon Aug 29 13:08:10 CDT 2016 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-2.13-bin.zip diff --git a/integration-module/gradlew b/integration-module/gradlew new file mode 100644 index 0000000..9d82f78 --- /dev/null +++ b/integration-module/gradlew @@ -0,0 +1,160 @@ +#!/usr/bin/env bash + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn ( ) { + echo "$*" +} + +die ( ) { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; +esac + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules +function splitJvmOpts() { + JVM_OPTS=("$@") +} +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" + +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/integration-module/gradlew.bat b/integration-module/gradlew.bat new file mode 100644 index 0000000..8a0b282 --- /dev/null +++ b/integration-module/gradlew.bat @@ -0,0 +1,90 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windowz variants + +if not "%OS%" == "Windows_NT" goto win9xME_args +if "%@eval[2+2]" == "4" goto 4NT_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* +goto execute + +:4NT_args +@rem Get arguments from the 4NT Shell from JP Software +set CMD_LINE_ARGS=%$ + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/integration-module/manifest.yml b/integration-module/manifest.yml new file mode 100644 index 0000000..d9bc363 --- /dev/null +++ b/integration-module/manifest.yml @@ -0,0 +1,9 @@ +--- +applications: +- name: integration-module + memory: 256M + instances: 1 + host: rest-service + domain: guides.spring.io + path: build/libs/integration-module-0.1.0.jar + diff --git a/integration-module/mvnw b/integration-module/mvnw new file mode 100644 index 0000000..a1ba1bf --- /dev/null +++ b/integration-module/mvnw @@ -0,0 +1,233 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven2 Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # + # Look for the Apple JDKs first to preserve the existing behaviour, and then look + # for the new JDKs provided by Oracle. + # + if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK ] ; then + # + # Apple JDKs + # + export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home + fi + + if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Java/JavaVirtualMachines/CurrentJDK ] ; then + # + # Apple JDKs + # + export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home + fi + + if [ -z "$JAVA_HOME" ] && [ -L "/Library/Java/JavaVirtualMachines/CurrentJDK" ] ; then + # + # Oracle JDKs + # + export JAVA_HOME=/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home + fi + + if [ -z "$JAVA_HOME" ] && [ -x "/usr/libexec/java_home" ]; then + # + # Apple JDKs + # + export JAVA_HOME=`/usr/libexec/java_home` + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Migwn, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" + # TODO classpath? +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`which java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` +fi + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + local basedir=$(pwd) + local wdir=$(pwd) + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + wdir=$(cd "$wdir/.."; pwd) + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-$(find_maven_basedir)} +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} "$@" diff --git a/integration-module/mvnw.cmd b/integration-module/mvnw.cmd new file mode 100644 index 0000000..2b934e8 --- /dev/null +++ b/integration-module/mvnw.cmd @@ -0,0 +1,145 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven2 Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +set MAVEN_CMD_LINE_ARGS=%* + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" + +set WRAPPER_JAR="".\.mvn\wrapper\maven-wrapper.jar"" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CMD_LINE_ARGS% +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% \ No newline at end of file diff --git a/integration-module/pom.xml b/integration-module/pom.xml new file mode 100644 index 0000000..ef70961 --- /dev/null +++ b/integration-module/pom.xml @@ -0,0 +1,84 @@ + + + 4.0.0 + + org.springframework + integration-module + + 1.2.0 + + war + + + org.springframework.boot + spring-boot-starter-parent + 1.5.3.RELEASE + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-test + test + + + com.jayway.jsonpath + json-path + test + + + org.postgresql + postgresql + 9.4-1206-jdbc42 + + + commons-dbcp + commons-dbcp + 1.4 + runtime + + + org.springframework + spring-jdbc + 4.3.6.RELEASE + + + org.apache.commons + commons-lang3 + 3.0 + + + + + 1.8 + hycom.Application + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + + spring-releases + https://repo.spring.io/libs-release + + + + + spring-releases + https://repo.spring.io/libs-release + + + diff --git a/integration-module/src/main/java/hycom/Application.java b/integration-module/src/main/java/hycom/Application.java new file mode 100644 index 0000000..7170bc7 --- /dev/null +++ b/integration-module/src/main/java/hycom/Application.java @@ -0,0 +1,25 @@ +package hycom; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.web.HttpMessageConverters; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; +import org.springframework.http.converter.ByteArrayHttpMessageConverter; + +@SpringBootApplication +@Configuration +@PropertySource("file:///opt/orbeon/integration.properties") +public class Application { + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } + + @Bean + public HttpMessageConverters customConverters() { + ByteArrayHttpMessageConverter arrayHttpMessageConverter = new ByteArrayHttpMessageConverter(); + return new HttpMessageConverters(arrayHttpMessageConverter); + } +} diff --git a/integration-module/src/main/java/hycom/FormsController.java b/integration-module/src/main/java/hycom/FormsController.java new file mode 100644 index 0000000..628b730 --- /dev/null +++ b/integration-module/src/main/java/hycom/FormsController.java @@ -0,0 +1,155 @@ +package hycom; + +import hycom.model.Form; +import hycom.model.FormsResoult; +import hycom.model.UsersResoult; +import hycom.service.DatabaseService; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.io.ByteArrayResource; +import org.springframework.core.io.Resource; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class FormsController { + + @Autowired + DatabaseService databaseService; + + public final String USER = "username=c2VydmljZVVzZXI="; + public final String PASSWORD = "password=UTJyVDg5JHE="; + + @RequestMapping(value = "/rest/form/{id}", method = RequestMethod.GET, headers = {USER, PASSWORD}) + public @ResponseBody + Form getForm(@PathVariable("id") int formId) { + return databaseService.getForm(formId); + } + + @RequestMapping(value = "/rest/forms", method = RequestMethod.GET, headers = {USER, PASSWORD}) + public @ResponseBody + List
getForms() { + return databaseService.getForms(); + } + + + @RequestMapping(value = "/rest/forms/{offset}/{limit}/{fromDate}/{toDate}/{formName}/{category}/{pillar}/{name}", method = RequestMethod.GET, headers = {USER, PASSWORD}) + public @ResponseBody + FormsResoult getForms(@PathVariable("offset") int offset, @PathVariable("limit") int limit, + @PathVariable("fromDate") String fromDate, @PathVariable("toDate") String toDate, + @PathVariable("formName") String formName, @PathVariable("category") String category, + @PathVariable("pillar") String pillar, @PathVariable("name") String name) { + + FormsResoult formsResoult = new FormsResoult(); + formsResoult.setForms( + databaseService.getFormsUsingPagination(offset, limit, fromDate, toDate, formName, category, pillar, name)); + formsResoult.setCount(databaseService.getFormsCount(fromDate, toDate, formName, category, pillar, name)); + return formsResoult; + } + + @RequestMapping(value = "/rest/users", method = RequestMethod.GET, headers = {USER, PASSWORD}) + @ResponseBody + private UsersResoult getUsers() { + UsersResoult usersResoult = new UsersResoult(); + usersResoult.setUsers(databaseService.getUsersContainsAttachments()); + usersResoult.setCount(Long.valueOf(usersResoult.getUsers().size())); + return usersResoult; + } + + + @RequestMapping(value = "/rest/attachments/{userName:.+}", method = RequestMethod.GET, headers = {USER, PASSWORD}) + public @ResponseBody + ResponseEntity getAttachments(@PathVariable("userName") String userName) { + + try { + File file = new File(databaseService.getAttachments(userName)); + Path path = Paths.get(file.getAbsolutePath()); + ByteArrayResource resource = new ByteArrayResource(Files.readAllBytes(path)); + + HttpHeaders headers = new HttpHeaders(); + headers.add("Cache-Control", "no-cache, no-store, must-revalidate"); + headers.add("Pragma", "no-cache"); + headers.add("Expires", "0"); + headers.add("Content-Disposition", "attachment, filename=\"" + userName + "\".zip"); + + return ResponseEntity.ok().headers(headers).contentLength(file.length()) + .contentType(MediaType.parseMediaType("application/octet-stream")).body(resource); + } + catch (IOException e) { + return (ResponseEntity) ResponseEntity.notFound(); + } + + } + + @RequestMapping(value = "/rest/attachments/delete/{userName:.+}", method = RequestMethod.GET, headers = {USER, PASSWORD}) + public @ResponseBody + ResponseEntity removeAttachments(@PathVariable("userName") String userName) { + + Boolean success = databaseService.removeAttachments(userName); + if (success) { + return ResponseEntity.ok().body(Boolean.TRUE); + } + else { + return ResponseEntity.noContent().build(); + } + } + + + @RequestMapping(value = "/rest/form/submit", method = RequestMethod.POST, headers = {USER, PASSWORD}) + public @ResponseBody + Form submitForm(@RequestBody Form form) { + return form; + } + + @RequestMapping(value = "/rest/form/submit/{id}", method = RequestMethod.PUT) + public @ResponseBody + String submitFormId(@PathVariable("id") String id) { + databaseService.submitForm(id); + return id; + } + + @RequestMapping(value = "/rest/attachment/remove/{id}", method = RequestMethod.GET, headers = {USER, PASSWORD}) + public @ResponseBody + String removeAttachment(@PathVariable("id") int attachmentId) { + return null; + } + + @CrossOrigin(origins = "http://localhost:8080") + @RequestMapping(value = "/rest/form/issubmitted/{id}", method = RequestMethod.GET) + public @ResponseBody + ResponseEntity isFormSubmitted(@PathVariable("id") String id) { + Boolean success = databaseService.isFormSubmitted(id); + if (success) { + return ResponseEntity.ok().body(Boolean.TRUE); + } + else { + return ResponseEntity.ok().body(Boolean.FALSE); + } + } + + @CrossOrigin(origins = "http://localhost:8080") + @RequestMapping(value = "/rest/form/hasremovedattachments/{id}", method = RequestMethod.GET) + public @ResponseBody + ResponseEntity hasRemovedAttachments(@PathVariable("id") String id) { + Boolean hasRemovedAttachments = databaseService.hasRemovedAttachments(id); + if (hasRemovedAttachments) { + return ResponseEntity.ok().body(Boolean.TRUE); + } + else { + return ResponseEntity.ok().body(Boolean.FALSE); + } + } +} diff --git a/integration-module/src/main/java/hycom/MapperController.java b/integration-module/src/main/java/hycom/MapperController.java new file mode 100644 index 0000000..80996f1 --- /dev/null +++ b/integration-module/src/main/java/hycom/MapperController.java @@ -0,0 +1,67 @@ +package hycom; + +import hycom.dao.MapperPublishDao; +import hycom.dao.MapperSubmitDao; +import java.io.IOException; +import javax.xml.parsers.ParserConfigurationException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; +import org.xml.sax.SAXException; + +/** + * Kontroler zapewniający API do obsługi przesyłanych formularzy + */ + +@RestController +public class MapperController { + + private final MapperPublishDao mapperPublishDao; + + private final MapperSubmitDao mapperSubmitDao; + + public MapperController(MapperPublishDao mapperPublishDao, MapperSubmitDao mapperSubmitDao) { + this.mapperPublishDao = mapperPublishDao; + this.mapperSubmitDao = mapperSubmitDao; + } + + /** + * Przyjmuje pusty formularz. + * @param appName nazwa Aplikacji formularza + * @param formName nazwa Formy formularza + * @param formXML pusty formularz + * @return Kod odpowiedzi. + * @throws ParserConfigurationException Wyjątek wyrzucany, w przypadku próby parsowania nie odpowiedniego pliku. + * @throws IOException Wyjątek wyrzucany, w przypadku odczytywania z zamkniętego strumienia danych. + * @throws SAXException Wyjątek wyrzucany, w przypadku nieudanego budowania pliku dokumentu. + */ + @RequestMapping(value = "/rest/mapper/publish/{application-name}/{form-name}", method = RequestMethod.PUT) + public @ResponseBody ResponseEntity get(@PathVariable("application-name") String appName, @PathVariable("form-name") String formName, + @RequestBody String formXML ) throws IOException, SAXException, ParserConfigurationException { + mapperPublishDao.parseStringToXML(formXML, appName, formName); + return ResponseEntity.noContent().build(); + } + + /** + * Przyjmuje uzupełniony formularz. + * @param appName nazwa Aplikacji formularza + * @param formName nazwa Formy formularza + * @param formXML pusty formularz + * @param username nazwa Użytkownika wysyłającego formularz + * @return Kod odpowiedzi. + * @throws ParserConfigurationException Wyjątek wyrzucany, w przypadku próby parsowania nie odpowiedniego pliku. + * @throws IOException Wyjątek wyrzucany, w przypadku odczytywania z zamkniętego strumienia danych. + * @throws SAXException Wyjątek wyrzucany, w przypadku nieudanego budowania pliku dokumentu. + */ + @RequestMapping(value = "/rest/mapper/submit/{app}/{form}/{username}", method = RequestMethod.POST) + public ResponseEntity getMapper(@PathVariable("app") String appName, @PathVariable("form") String formName, + @PathVariable("username") String username, @RequestBody String formXML) throws IOException, SAXException, ParserConfigurationException { + mapperSubmitDao.parseXML(formXML, appName, formName, username); + return ResponseEntity.noContent().build(); + } +} \ No newline at end of file diff --git a/integration-module/src/main/java/hycom/WebInitializer.java b/integration-module/src/main/java/hycom/WebInitializer.java new file mode 100644 index 0000000..5710580 --- /dev/null +++ b/integration-module/src/main/java/hycom/WebInitializer.java @@ -0,0 +1,14 @@ +package hycom; + +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.boot.web.support.SpringBootServletInitializer; + +/** + * Initializer class for SpringBoot + */ +public class WebInitializer extends SpringBootServletInitializer { + @Override + protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { + return application.sources(Application.class); + } +} diff --git a/integration-module/src/main/java/hycom/dao/BaseDao.java b/integration-module/src/main/java/hycom/dao/BaseDao.java new file mode 100644 index 0000000..9d23e5d --- /dev/null +++ b/integration-module/src/main/java/hycom/dao/BaseDao.java @@ -0,0 +1,27 @@ +package hycom.dao; + +import javax.annotation.PostConstruct; +import javax.annotation.Resource; +import javax.sql.DataSource; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Component; + +/** + * Abstract clas for all DAO objects + */ + +@Component +public abstract class BaseDao { + + @Resource + protected DataSource dataSource; + + protected JdbcTemplate jdbcTemplate; + + @PostConstruct + private void init() { + jdbcTemplate = new JdbcTemplate(dataSource); + System.out.println(jdbcTemplate); + } + +} diff --git a/integration-module/src/main/java/hycom/dao/BaseMapperDao.java b/integration-module/src/main/java/hycom/dao/BaseMapperDao.java new file mode 100644 index 0000000..d71fb62 --- /dev/null +++ b/integration-module/src/main/java/hycom/dao/BaseMapperDao.java @@ -0,0 +1,27 @@ +package hycom.dao; + +import org.springframework.context.ApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.datasource.DriverManagerDataSource; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; + +/** + * Klasa obsługująca połączenie z bazą danych Mapper'a. + */ + +@Component +public class BaseMapperDao { + + protected ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath*:context.xml"); + protected DriverManagerDataSource driverManagerDataSource = (DriverManagerDataSource) applicationContext.getBean("mapperDataSource"); + protected JdbcTemplate jdbcTemplate; + + @PostConstruct + public void init() { + jdbcTemplate = new JdbcTemplate(driverManagerDataSource); + } + +} diff --git a/integration-module/src/main/java/hycom/dao/FormDao.java b/integration-module/src/main/java/hycom/dao/FormDao.java new file mode 100644 index 0000000..a8f716c --- /dev/null +++ b/integration-module/src/main/java/hycom/dao/FormDao.java @@ -0,0 +1,446 @@ +package hycom.dao; + +import hycom.exceptions.DbException; +import hycom.model.Attachment; +import hycom.model.Document; +import hycom.model.Form; +import hycom.model.User; +import hycom.utils.AppUtils; +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.nio.charset.StandardCharsets; +import java.util.LinkedList; +import java.util.List; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import org.apache.tomcat.util.http.fileupload.FileUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.RequestMapping; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.SAXException; + +/** + * DAO for populated forms + */ +@Component +@RequestMapping("/logger") +public class FormDao extends BaseDao { + + private static final Logger logger = LoggerFactory.getLogger(FormDao.class); + + @Value("${orbeon.address}") + private String hostAddress; + + @Value("${form.name.input}") + private String formName; + + @Value("${form.category.select}") + private String formCategory; + + @Value("${form.pillar.select}") + private String formPillar; + + @Value("${form.directory.temp}") + private String tmpDir; + + byte[] buffer = new byte[1024]; + + public List getForms(Integer offset, Integer limit, String fromDate, String toDate, String formNameSearch, + String category, String pillar, String name) throws DbException { + + StringBuilder sqlBuilder = new StringBuilder(); + + sqlBuilder + .append("SELECT ofd.document_id, s.send_date, ofd.form_version, ofd.id, ofd.app, ofd.form, ofda.count, name.val AS name, category.val AS category, pillar.val AS pillar \n" + + "FROM orbeon_form_data ofd\n" + "INNER JOIN submitted_forms s ON ofd.id = s.form_id \n" + + "LEFT JOIN (\n" + "SELECT document_id, COUNT(*) AS count FROM orbeon_form_data_attach \n" + + "GROUP BY document_id) ofda ON ofd.document_id = ofda.document_id\n" + + "LEFT JOIN (SELECT data_id, val FROM orbeon_i_control_text WHERE control LIKE '%" + formName + + "%') name ON ofd.id=name.data_id\n" + + "LEFT JOIN (SELECT data_id, val FROM orbeon_i_control_text WHERE control LIKE '%" + formCategory + + "%') category ON ofd.id=category.data_id\n" + + "LEFT JOIN (SELECT data_id, val FROM orbeon_i_control_text WHERE control LIKE '%" + formPillar + + "%') pillar ON ofd.id=pillar.data_id WHERE (1=1)"); + + if (!StringUtils.isEmpty(fromDate) && !fromDate.equals("*")) { + sqlBuilder.append(" AND s.send_date >= '").append(fromDate).append("'"); + } + if (!StringUtils.isEmpty(toDate) && !toDate.equals("*")) { + sqlBuilder.append(" AND s.send_date <= '").append(toDate).append("'"); + } + if (!StringUtils.isEmpty(formNameSearch) && !formNameSearch.equals("*")) { + sqlBuilder.append(" AND ofd.form LIKE '%").append(formNameSearch).append("%'"); + } + if (!StringUtils.isEmpty(category) && !category.equals("*")) { + sqlBuilder.append(" AND category.val LIKE '%").append(category).append("%'"); + } + if (!StringUtils.isEmpty(name) && !name.equals("*")) { + sqlBuilder.append(" AND name.val LIKE '%").append(name).append("%'"); + } + if (!StringUtils.isEmpty(pillar) && !pillar.equals("*")) { + sqlBuilder.append(" AND pillar.val LIKE '%").append(pillar).append("%'"); + } + + sqlBuilder.append(" ORDER BY send_date DESC"); + + if (offset != null) { + sqlBuilder.append(" OFFSET ").append(offset); + } + if (limit != null) { + sqlBuilder.append(" LIMIT ").append(limit); + } + + List forms = jdbcTemplate.query(sqlBuilder.toString(), (rs, i) -> { + String appName = rs.getString("app"); + String formName = rs.getString("form"); + String formId = rs.getString("document_id"); + Form form = new Form(); + form.setFormName(formName); + form.setLink(AppUtils.generateLink(hostAddress, appName, formName, formId)); + form.setAttachment(rs.getInt("count") > 0); + form.setSendDate(rs.getTimestamp("send_date")); + form.setName(rs.getString("name")); + form.setCategory(rs.getString("category")); + form.setPillar(rs.getString("pillar")); + return form; + }); + + return forms; + } + + public Long getFormsCount(String fromDate, String toDate, String formNameSearch, String category, String pillar, String name) + throws DbException { + + StringBuilder sqlBuilder = new StringBuilder(); + + sqlBuilder.append("SELECT count(ofd.id) \n" + "FROM orbeon_form_data ofd\n" + + "INNER JOIN submitted_forms s ON ofd.id = s.form_id \n" + "LEFT JOIN (\n" + + "SELECT document_id, COUNT(*) AS count FROM orbeon_form_data_attach \n" + + "GROUP BY document_id) ofda ON ofd.document_id = ofda.document_id\n" + + "LEFT JOIN (SELECT data_id, val FROM orbeon_i_control_text WHERE control LIKE '%" + formName + + "%') name ON ofd.id=name.data_id\n" + + "LEFT JOIN (SELECT data_id, val FROM orbeon_i_control_text WHERE control LIKE '%" + formCategory + + "%') category ON ofd.id=category.data_id\n" + + "LEFT JOIN (SELECT data_id, val FROM orbeon_i_control_text WHERE control LIKE '%" + formPillar + + "%') pillar ON ofd.id=pillar.data_id WHERE (1=1)"); + + if (!StringUtils.isEmpty(fromDate) && !fromDate.equals("*")) { + sqlBuilder.append(" AND s.send_date >= '").append(fromDate).append("'"); + } + if (!StringUtils.isEmpty(toDate) && !toDate.equals("*")) { + sqlBuilder.append(" AND s.send_date <= '").append(toDate).append("'"); + } + if (!StringUtils.isEmpty(formNameSearch) && !formNameSearch.equals("*")) { + sqlBuilder.append(" AND ofd.form LIKE '%").append(formNameSearch).append("%'"); + } + if (!StringUtils.isEmpty(category) && !category.equals("*")) { + sqlBuilder.append(" AND category.val LIKE '%").append(category).append("%'"); + } + if (!StringUtils.isEmpty(name) && !name.equals("*")) { + sqlBuilder.append(" AND name.val LIKE '%").append(name).append("%'"); + } + if (!StringUtils.isEmpty(pillar) && !pillar.equals("*")) { + sqlBuilder.append(" AND pillar.val LIKE '%").append(pillar).append("%'"); + } + + + Long count = jdbcTemplate.queryForObject(sqlBuilder.toString(), (rs, i) -> { + + return rs.getLong("count"); + + }); + + return count; + } + + public List getUsersContainsAttachments() throws DbException { + + String sql = "SELECT DISTINCT att.username from orbeon_form_data_attach att \n" + + "INNER JOIN orbeon_form_data ofd ON ofd.document_id = att.document_id \n" + + "INNER JOIN submitted_forms sf ON sf.form_id = ofd.id\n" + "WHERE att.username IS NOT NULL"; + + List users = jdbcTemplate.query(sql, (rs, i) -> { + User user = new User(); + user.setUserName(rs.getString("username")); + user.setMember(true); + return user; + }); + + return users; + } + + public String getAttachments(String userName) throws DbException { + + String sql = "SELECT ofd.document_id, ofd.form_version, ofd.xml, ofd.app, ofd.form from orbeon_form_data ofd\n" + + "INNER JOIN submitted_forms sf ON sf.form_id = ofd.id\n" + + "WHERE EXISTS (SELECT 1 FROM orbeon_form_data_attach att WHERE att.document_id = ofd.document_id)\n" + + "AND ofd.username = '" + userName + "';"; + + List documents = jdbcTemplate.query(sql, (rs, i) -> { + String documentId = rs.getString("document_id"); + String xmlFile = rs.getString("xml"); + String appName = rs.getString("app"); + String formName = rs.getString("form"); + String formVersion = rs.getString("form_version"); + + DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); + DocumentBuilder dBuilder = null; + try { + dBuilder = dbFactory.newDocumentBuilder(); + InputStream stream = new ByteArrayInputStream(xmlFile.getBytes(StandardCharsets.UTF_8)); + + org.w3c.dom.Document doc = dBuilder.parse(stream); + doc.getDocumentElement().normalize(); + Element element = doc.getDocumentElement(); + NodeList nodeList = element.getChildNodes(); + + + Document document = new Document(); + document.setDocumentId(documentId); + document.setAppName(appName); + document.setFormName(formName); + document.setVersion(Long.parseLong(formVersion)); + + List attachments = new LinkedList<>(); + + attachments = populateList(nodeList, attachments); + document.setAttachments(attachments); + + return document; + + } + catch (ParserConfigurationException | IOException | SAXException e) { + e.printStackTrace(); + } + + return null; + }); + + if (!CollectionUtils.isEmpty(documents)) { + File directory = new File(tmpDir + "/" + userName); + if (!directory.exists()) { + directory.mkdir(); + } + } + + for (Document document : documents) { + for (Attachment attachment : document.getAttachments()) { + + String sql2 = + "SELECT file_content FROM orbeon_form_data_attach WHERE file_name = '" + attachment.getFileEncodedName() + + "' "; + + jdbcTemplate.query(sql2, (rs, i) -> { + try { + InputStream inputStream = rs.getBinaryStream("file_content"); + OutputStream outputStream = + new FileOutputStream(tmpDir + "/" + userName + "/" + attachment.getFileName()); + + int bytesRead = -1; + byte[] buffer = new byte[1024]; + while ((bytesRead = inputStream.read(buffer)) != -1) { + outputStream.write(buffer, 0, bytesRead); + } + + inputStream.close(); + outputStream.close(); + + } + catch (IOException e) { + e.getMessage(); + } + + return null; + }); + + } + + try { + FileOutputStream fos = new FileOutputStream(tmpDir + "/" + userName + ".zip"); + ZipOutputStream zos = new ZipOutputStream(fos); + File folder = new File(tmpDir + "/" + userName); + for (File file : folder.listFiles()) { + ZipEntry ze = new ZipEntry(file.getName()); + zos.putNextEntry(ze); + FileInputStream in = new FileInputStream(file.getPath()); + + int len; + while ((len = in.read(buffer)) > 0) { + zos.write(buffer, 0, len); + } + + in.close(); + zos.closeEntry(); + + + } + zos.close(); + + } + catch (IOException e) { + logger.error("Cannot remove attachments for :" ); + } + + return tmpDir + "/" + userName + ".zip"; + + } + + + return null; + } + + public void removeAttachments(String userName) throws DbException { + File folder = new File(tmpDir + "/" + userName); + File zipFile = new File(tmpDir + "/" + userName + ".zip"); + try { + FileUtils.deleteDirectory(folder); + } + catch (IOException e) { + logger.error("Cannot remove temp directory for user {} : {}", userName, e.getMessage()); + } + zipFile.delete(); + + String deleteAttachmentsSql = + "DELETE FROM orbeon_form_data_attach AS ofda USING orbeon_form_data AS ofd WHERE ofda.document_id = ofd.document_id AND EXISTS (SELECT 1 FROM submitted_forms sf WHERE sf.form_id = ofd.id) AND ofd.username = '" + + userName + "'; "; + + String updateAttachmentsSql = "UPDATE submitted_forms sf SET attachments_moved = TRUE where form_id IN (\n" + + "SELECT sf.form_id FROM submitted_forms sf \n" + "inner JOIN orbeon_form_data ofd ON sf.form_id = ofd.id \n" + + "WHERE ofd.username = '" + userName + "');"; + + try { + int i = jdbcTemplate.update(deleteAttachmentsSql); + int j = jdbcTemplate.update(updateAttachmentsSql); + logger.info("There are {} deleted attachments for user: {}", i, userName); + } + catch (Exception e) { + logger.error("Cannot remove attachments for user {} : {}", userName, e.getMessage()); + } + + + } + + + /** + * Populete list of attachments for xml file node elements + * + * @param nodeList node list from xml file + * + * @param attachments list to populate + * + * @return populated list of attachments + */ + private List populateList(NodeList nodeList, List attachments) { + for (int i = 0; i < nodeList.getLength(); i++) { + Node node = nodeList.item(i); + if (node.getNodeType() == Node.ELEMENT_NODE) { + if (node.hasAttributes() && ((Element) node).hasAttribute("filename")) { + String fileName = ((Element) node).getAttribute("filename"); + String mediaType = ((Element) node).getAttribute("mediatype"); + String fileEncodedName = getFileEncodedName(node.getTextContent()); + System.out.println(((Element) node).getAttribute("size")); + + Attachment attachment = new Attachment(); + attachment.setFileName(fileName); + attachment.setMediaType(mediaType); + attachment.setFileEncodedName(fileEncodedName); + attachments.add(attachment); + } + else { + if (node.getChildNodes().getLength() > 0) { + populateList(node.getChildNodes(), attachments); + } + else { + continue; + } + } + } + else { + continue; + } + + + } + return attachments; + } + + /** + * Returns filename from xml node + * + * @param nodeContent node with file element + * + * @return filename + */ + private String getFileEncodedName(String nodeContent) { + int lastIndex = nodeContent.lastIndexOf("/"); + return nodeContent.substring(lastIndex + 1); + } + + public List getForms() throws DbException { + + return getForms(null, null, null, null, null, null, null, null); + } + + public Form getForm(int formId) throws DbException { + String sql = "SELECT app, form FROM orbeon_form_data WHERE id = " + formId; + return jdbcTemplate.query(sql, rs -> { + if (rs.next()) { + Form form = new Form(); + form.setFormName(rs.getString("app")); + form.setName(rs.getString("form")); + return form; + } + return null; + }); + } + + public void submitForm(String id) throws DbException { + String sql = "INSERT INTO submitted_forms (form_id, send_date) VALUES ((SELECT id FROM orbeon_form_data ofd\n" + + "INNER JOIN (\n" + "SELECT app, form, document_id, MAX(last_modified_time) AS max_last_modified\n" + + "FROM orbeon_form_data o GROUP BY app, form, document_id) forms ON ofd.app = forms.app AND ofd.form = forms.form\n" + + "WHERE ofd.document_id = '" + id + "'\n" + + "AND ofd.last_modified_time = forms.max_last_modified), CURRENT_TIMESTAMP)"; + jdbcTemplate.update(sql); + } + + public void deleteSubmittedForm(String documentId) { + String sql = "DELETE FROM submitted_forms WHERE id IN (SELECT submitted_forms.id FROM submitted_forms INNER JOIN orbeon_form_data ON submitted_forms.form_id = orbeon_form_data.id WHERE document_id ='" + documentId + "')"; + jdbcTemplate.update(sql); + } + + public Boolean hasRemovedAttachments(String documentId) throws DbException { + String sql = "SELECT sf.id FROM submitted_forms sf INNER JOIN orbeon_form_data ofd ON sf.form_id = ofd.id AND sf.attachments_moved = TRUE AND ofd.document_id = '" + documentId + "';"; + return jdbcTemplate.query(sql, rs -> { + if (rs.next()) { + return true; + } + return false; + }); + } + + public boolean isFormSubmitted(String documentId) throws DbException { + String sql = "SELECT sf.id from submitted_forms sf INNER JOIN orbeon_form_data ofd ON sf.form_id = ofd.id WHERE ofd.document_id = '" + documentId + "';"; + return jdbcTemplate.query(sql, rs -> { + if (rs.next()) { + return true; + } + return false; + }); + } + +} diff --git a/integration-module/src/main/java/hycom/dao/MapperPublishDao.java b/integration-module/src/main/java/hycom/dao/MapperPublishDao.java new file mode 100644 index 0000000..8a6d295 --- /dev/null +++ b/integration-module/src/main/java/hycom/dao/MapperPublishDao.java @@ -0,0 +1,116 @@ +package hycom.dao; + +import hycom.service.TableNameParser; +import hycom.service.XMLSerialize; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import javax.xml.parsers.ParserConfigurationException; +import org.springframework.stereotype.Component; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.SAXException; + +/** + * Klasa mapująca formularz na XML oraz obsługująca zapytania do bazy danych + */ + +@Component +public class MapperPublishDao extends BaseMapperDao { + + private StringBuilder sqlTableCreate = new StringBuilder(); + + /** + * Parsuje formularz z String na XML. + * @param stringXML pusty formularz przychodzący w formie String + * @param appName nazwa Aplikacji formularza + * @param formName nazwa Formy forumlarza + * @throws ParserConfigurationException Wyjątek wyrzucany, w przypadku próby parsowania nie odpowiedniego pliku. + * @throws IOException Wyjątek wyrzucany, w przypadku odczytywania z zamkniętego strumienia danych. + * @throws SAXException Wyjątek wyrzucany, w przypadku nieudanego budowania pliku dokumentu. + */ + + public void parseStringToXML(String stringXML, String appName, String formName) + throws ParserConfigurationException, IOException, SAXException { + Document document = XMLSerialize.parseStringToXML(stringXML); + sqlTableCreate.setLength(0); + String tableName = TableNameParser.convertTableName(appName, formName); + if (!checkTable(tableName)) { + createTable(tableName); + createColumn(document); + } else { + updateTable(tableName, getXMLColumn(document)); + } + } + + private void createTable(String tableName) { + sqlTableCreate.setLength(0); + sqlTableCreate + .append("CREATE TABLE " + tableName); + } + + private List getXMLColumn(Document document) { + String section = null; + String control = null; + document.getDocumentElement().normalize(); + NodeList nodeList = document.getElementsByTagName("control"); + List elementXML = new ArrayList(); + for (int i = 0; i < nodeList.getLength(); i++) { + Node node = nodeList.item(i); + Element element = (Element) node; + if (element.getAttribute("name").contains("section")) + section = element.getAttribute("name").replace("-","_"); + control = element.getAttribute("name").replace("-","_"); + if (!element.getAttribute("name").contains("section")) + elementXML.add(section + "_" + control); + } + return elementXML; + } + + private void createColumn(Document document) { + List columnXML = getXMLColumn(document); + sqlTableCreate.append("\n( \n"); + sqlTableCreate.append("ID BIGSERIAL PRIMARY KEY, \n"); + sqlTableCreate.append("SEND_DATA TIMESTAMP NOT NULL, \n"); + sqlTableCreate.append("LOGIN TEXT NOT NULL, \n"); + Iterator iterator = columnXML.iterator(); + while (iterator.hasNext()) { + sqlTableCreate.append(" " + iterator.next() + " TEXT, \n"); + } + sqlTableCreate.deleteCharAt(sqlTableCreate.length() - 3); + sqlTableCreate.append(")\n"); + jdbcTemplate.update(sqlTableCreate.toString()); + } + + private boolean checkTable(String tableName) { + + StringBuilder sqlCheckTable = new StringBuilder(); + sqlCheckTable + .append("SELECT COUNT(*) FROM information_schema.tables " + + "WHERE table_schema='public' AND table_name = '" + tableName + "'"); + int exist = jdbcTemplate.queryForObject(sqlCheckTable.toString(), Integer.class); + if (exist > 0) + return true; + else + return false; + } + + private void updateTable(String tableName, List xmlColumn) { + List columnList = jdbcTemplate.queryForList( + ("SELECT column_name FROM information_schema.columns where table_name = '" + tableName + "'"),String.class); + xmlColumn.removeAll(columnList); + if (!xmlColumn.isEmpty()) { + StringBuilder sqlAddColumns = new StringBuilder(); + sqlAddColumns.append("ALTER TABLE " + tableName + "\n"); + Iterator iterator = xmlColumn.iterator(); + while (iterator.hasNext()) { + sqlAddColumns.append("ADD COLUMN " + iterator.next() + " TEXT, \n"); + } + sqlAddColumns.deleteCharAt(sqlAddColumns.length() - 3).append(";"); + jdbcTemplate.update(sqlAddColumns.toString()); + } + } +} \ No newline at end of file diff --git a/integration-module/src/main/java/hycom/dao/MapperSubmitDao.java b/integration-module/src/main/java/hycom/dao/MapperSubmitDao.java new file mode 100644 index 0000000..67f5243 --- /dev/null +++ b/integration-module/src/main/java/hycom/dao/MapperSubmitDao.java @@ -0,0 +1,218 @@ +package hycom.dao; + +import hycom.service.TableNameParser; +import hycom.service.XMLSerialize; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.StringReader; +import java.util.ArrayList; +import java.util.Date; +import java.util.Iterator; +import java.util.List; +import javax.xml.parsers.ParserConfigurationException; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Component; +import org.w3c.dom.Document; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.SAXException; + +/** + * Klasa mapująca dane na XML oraz obsługująca zapytania do bazy danych + */ + +@Component +public class MapperSubmitDao extends BaseMapperDao { + + /** + * Parsuje uzupełniony formularz na XML. + * @param formXML uzupełniony formularz przychodzący w formie String + * @param appName nazwa Aplikacji formularza + * @param formName nazwa Formy formularza + * @param userLogin login użytkownika wysyłającego formularz + * @throws ParserConfigurationException Wyjątek wyrzucany, w przypadku próby parsowania nie odpowiedniego pliku. + * @throws IOException Wyjątek wyrzucany, w przypadku odczytywania z zamkniętego strumienia danych. + * @throws SAXException Wyjątek wyrzucany, w przypadku nieudanego budowania pliku dokumentu. + */ + + public void parseXML(String formXML, String appName, String formName, String userLogin) + throws ParserConfigurationException, IOException, SAXException { + StringBuilder stringBuilder = new StringBuilder(); + new BufferedReader(new StringReader(formXML)).lines().forEach( + (line) -> { + if (StringUtils.isNotBlank(line)) + stringBuilder.append(line); + }); + Document document = XMLSerialize.parseStringToXML(stringBuilder.toString()); + String tableName = TableNameParser.convertTableName(appName, formName); + if (checkTable(tableName)) + getValueFromXML(document, tableName, userLogin); + } + + private void getValueFromXML(Document document, String tablePrefix, String login) { + String section = null; + String control = null; + String grid = null; + String controlGrid = null; + document.getDocumentElement().normalize(); + NodeList nodeList = document.getDocumentElement().getChildNodes(); + List controlData = new ArrayList<>(); + List controlColumns = new ArrayList<>(); + List gridData = new ArrayList<>(); + List gridColumns = new ArrayList<>(); + List gridTable = new ArrayList<>(); + for (int i = 0; i < nodeList.getLength(); i++) { + Node node = nodeList.item(i); + NodeList sectionNodeList = node.getChildNodes(); + if (node.getNodeName().contains("section")) { + section = node.getNodeName().replace("-","_"); + for (int j = 0; j < sectionNodeList.getLength(); j++) { + Node sectionNode = sectionNodeList.item(j); + if (sectionNode.getNodeName().contains("control")) { + control = sectionNode.getNodeName().replace("-","_"); + controlColumns.add(section + "_" + control); + controlData.add(sectionNode.getTextContent()); + updateColumns(tablePrefix, section + "_" + control); + } else if (sectionNode.getNodeName().contains("grid")) { + grid = sectionNode.getNodeName().replace("-","_"); + if (sectionNode.getChildNodes().getLength() > 0) + for (int k = 0; k < sectionNode.getChildNodes().getLength(); k++) { + controlGrid = sectionNode.getChildNodes().item(k).getNodeName() + .replace("-", "_"); + if (!controlGrid.contains("#text")) + gridColumns.add(controlGrid); + if (!controlGrid.contains("#text")) + gridData.add(sectionNode.getChildNodes().item(k).getTextContent()); + if (!controlGrid.contains("#text")) + gridTable.add(tablePrefix + "_" + section + "_" + grid); + if (!checkTable(tablePrefix + "_" + section + "_" + grid)) + createGridTableAndColumns(tablePrefix + "_" + section + "_" + + grid, controlGrid, tablePrefix); + else + updateGridColumns(tablePrefix + "_" + section + "_" + grid, controlGrid); + } + } + } + } + } + if (!controlData.isEmpty()) { + insertControlDataToDatabase(tablePrefix, controlColumns, controlData, login); + if (!gridData.isEmpty()) + insertGridData(gridTable, gridData, gridColumns, tablePrefix); + } + } + + private void insertGridData(List tablePrefix, List textContent, + List controlGrid, String originalTable) { + StringBuilder sqlInsertGrid = new StringBuilder(); + List addedData = new ArrayList<>(); + String checkTable = tablePrefix.get(0); + Boolean flag = false; + if (tablePrefix.size() == textContent.size() + && tablePrefix.size() == controlGrid.size()) { + for (int i = 0; i < tablePrefix.size(); i++) { + sqlInsertGrid.setLength(0); + if (!checkTable.equals(tablePrefix.get(i))) { + checkTable = tablePrefix.get(i); + flag = !flag; + } + if (flag.equals(false) || addedData.contains(controlGrid.get(i))) { + sqlInsertGrid.append("INSERT INTO " + checkTable + " (" + " id_" + originalTable + ", " + controlGrid.get(i) + + " ) \n" + "VALUES (" + " (SELECT id from " + originalTable + " order by id desc limit 1 ), '" + + textContent.get(i) + "' );"); + flag = true; + addedData.add(controlGrid.get(i)); + } else { + sqlInsertGrid + .append("UPDATE " + checkTable + " \n" + "SET " + controlGrid.get(i) + " = '" + textContent.get(i) + + "' \n WHERE id = " + "(SELECT id from " + checkTable + " ORDER BY id desc limit 1);"); + } + jdbcTemplate.update(sqlInsertGrid.toString()); + } + } + } + + private void updateColumns(String tableName, String columnName) { + if (checkColumn(tableName, columnName)) + jdbcTemplate.update("ALTER TABLE " + tableName + "\n" + "ADD COLUMN " + columnName + " TEXT;"); + + } + + private void updateGridColumns(String tableName, String columnName) { + String column = null; + if (columnName.contains("control")) + column = columnName; + if (column !=null) + if (checkColumn(tableName, columnName)) + jdbcTemplate.update("ALTER TABLE " + tableName + "\n" + "ADD COLUMN " + column + " TEXT;"); + } + + private void createGridTableAndColumns(String tableName, String columnName, String originalTable) { + String column = null; + if (columnName.contains("control")) + column = columnName; + if (column !=null) + jdbcTemplate.update("CREATE TABLE " + tableName + "\n ( id BIGSERIAL, " + "id_" + originalTable + + " INTEGER REFERENCES " + originalTable + "(id), \n" + column + " TEXT, \n" + "PRIMARY KEY (id, id_" + + originalTable + ") );"); + } + + private void insertControlDataToDatabase(String tablePrefix, List controlColumns, + List controlData, String login) { + Date date = new Date(); + StringBuilder sqlInsert = new StringBuilder(); + sqlInsert.setLength(0); + sqlInsert + .append("INSERT INTO " + tablePrefix + " ("); + sqlInsert + .append("SEND_DATA, LOGIN,"); + + Iterator iteratorColumns = controlColumns.iterator(); + while (iteratorColumns.hasNext() && controlColumns.size() == controlData.size()) { + sqlInsert + .append(" " + iteratorColumns.next() + ","); + } + + sqlInsert + .deleteCharAt(sqlInsert.length() - 1); + sqlInsert + .append(" ) \n VALUES ( '" + date + "' , '" + login + "',"); + + for (int i = 0; i < controlData.size(); i++) { + if (controlData.get(i).contains("'")) + sqlInsert + .append(" '" + controlData.get(i).replace("'", "") + "',"); + else + sqlInsert + .append(" '" + controlData.get(i) + "',"); + } + sqlInsert + .deleteCharAt(sqlInsert.length() - 1); + sqlInsert + .append(" );"); + jdbcTemplate.update(sqlInsert.toString()); + + } + + private boolean checkTable(String tableName) { + String sqlCheckTable = + ("SELECT COUNT(*) FROM information_schema.tables " + "WHERE table_schema='public' AND table_name = '" + + tableName + "'"); + int exist = jdbcTemplate.queryForObject(sqlCheckTable, Integer.class); + if (exist > 0) + return true; + else + return false; + } + + private boolean checkColumn(String tableName, String columnName) { + String sqlCheckColumns = + ("SELECT COUNT(*) FROM information_schema.columns " + "WHERE table_name='" + tableName + + "' AND column_name = '" + columnName + "'"); + int exist = jdbcTemplate.queryForObject(sqlCheckColumns, Integer.class); + if (exist > 0) + return false; + else + return true; + } +} diff --git a/integration-module/src/main/java/hycom/exceptions/DbException.java b/integration-module/src/main/java/hycom/exceptions/DbException.java new file mode 100644 index 0000000..c6c18ee --- /dev/null +++ b/integration-module/src/main/java/hycom/exceptions/DbException.java @@ -0,0 +1,10 @@ +package hycom.exceptions; + +/** + * + */ +public class DbException extends Exception { + public DbException(String s, Throwable throwable) { + super(s, throwable); + } +} diff --git a/integration-module/src/main/java/hycom/model/Attachment.java b/integration-module/src/main/java/hycom/model/Attachment.java new file mode 100644 index 0000000..5194db2 --- /dev/null +++ b/integration-module/src/main/java/hycom/model/Attachment.java @@ -0,0 +1,68 @@ +package hycom.model; + +import java.io.Serializable; + +public class Attachment implements Serializable{ + + private static final long serialVersionUID = -7788619177798333713L; + + private int id; + private String userName; + private Object encodedFile; + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } + + public String getMediaType() { + return mediaType; + } + + public void setMediaType(String mediaType) { + this.mediaType = mediaType; + } + + public String getFileEncodedName() { + return fileEncodedName; + } + + public void setFileEncodedName(String fileEncodedName) { + this.fileEncodedName = fileEncodedName; + } + + private String fileName; + private String mediaType; + private String fileEncodedName; + + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public Object getEncodedFile() { + return encodedFile; + } + + public void setEncodedFile(Object encodedFile) { + this.encodedFile = encodedFile; + } + + + +} diff --git a/integration-module/src/main/java/hycom/model/Document.java b/integration-module/src/main/java/hycom/model/Document.java new file mode 100644 index 0000000..5132e8f --- /dev/null +++ b/integration-module/src/main/java/hycom/model/Document.java @@ -0,0 +1,59 @@ +package hycom.model; + +import java.io.Serializable; +import java.util.List; + +public class Document implements Serializable{ + + private static final long serialVersionUID = -7788619177798333715L; + + private String documentId; + private String appName; + private String formName; + + public List getAttachments() { + return attachments; + } + + public void setAttachments(List attachments) { + this.attachments = attachments; + } + + private List attachments; + + public long getVersion() { + return version; + } + + public void setVersion(long version) { + this.version = version; + } + + private long version; + + public String getDocumentId() { + return documentId; + } + + public void setDocumentId(String documentId) { + this.documentId = documentId; + } + + public String getAppName() { + return appName; + } + + public void setAppName(String appName) { + this.appName = appName; + } + + public String getFormName() { + return formName; + } + + public void setFormName(String formName) { + this.formName = formName; + } + + +} diff --git a/integration-module/src/main/java/hycom/model/Form.java b/integration-module/src/main/java/hycom/model/Form.java new file mode 100644 index 0000000..1c9ceaf --- /dev/null +++ b/integration-module/src/main/java/hycom/model/Form.java @@ -0,0 +1,80 @@ +package hycom.model; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.DateSerializer; +import java.io.Serializable; +import java.util.Date; + +/** + * Form model + */ +public class Form implements Serializable{ + + private static final long serialVersionUID = -7788619177798333712L; + + private String formName; + private String link; + private Date sendDate; + private boolean attachment; + private String category; + private String name; + private String pillar; + + public String getFormName() { + return formName; + } + + public void setFormName(String formName) { + this.formName = formName; + } + + public String getLink() { + return link; + } + + public void setLink(String link) { + this.link = link; + } + + public boolean getAttachment() { + return attachment; + } + + public void setAttachment(boolean attachment) { + this.attachment = attachment; + } + + @JsonSerialize(using=DateSerializer.class) + public Date getSendDate() { + return sendDate; + } + public void setSendDate(Date sendDate) { + this.sendDate = sendDate; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPillar() { + return pillar; + } + + public void setPillar(String pillar) { + this.pillar = pillar; + } + + +} diff --git a/integration-module/src/main/java/hycom/model/FormsResoult.java b/integration-module/src/main/java/hycom/model/FormsResoult.java new file mode 100644 index 0000000..20d21ce --- /dev/null +++ b/integration-module/src/main/java/hycom/model/FormsResoult.java @@ -0,0 +1,32 @@ +package hycom.model; + +import java.io.Serializable; +import java.util.List; + +/** + * Forms response + */ +public class FormsResoult implements Serializable{ + + private static final long serialVersionUID = -7788619177798333715L; + + public List getForms() { + return forms; + } + + public void setForms(List forms) { + this.forms = forms; + } + + public Long getCount() { + return count; + } + + public void setCount(Long count) { + this.count = count; + } + + private List forms; + private Long count; + +} diff --git a/integration-module/src/main/java/hycom/model/User.java b/integration-module/src/main/java/hycom/model/User.java new file mode 100644 index 0000000..b376f02 --- /dev/null +++ b/integration-module/src/main/java/hycom/model/User.java @@ -0,0 +1,33 @@ +package hycom.model; + +import java.io.Serializable; + +/** + * User from Orbeon + */ +public class User implements Serializable{ + + private static final long serialVersionUID = -7788619177798333714L; + + private String userName; + private boolean isMember; + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public boolean isMember() { + return isMember; + } + + public void setMember(boolean isMember) { + this.isMember = isMember; + } + + + +} diff --git a/integration-module/src/main/java/hycom/model/UsersResoult.java b/integration-module/src/main/java/hycom/model/UsersResoult.java new file mode 100644 index 0000000..7399107 --- /dev/null +++ b/integration-module/src/main/java/hycom/model/UsersResoult.java @@ -0,0 +1,32 @@ +package hycom.model; + +import java.io.Serializable; +import java.util.List; + +/** + * Forms response + */ +public class UsersResoult implements Serializable{ + + private static final long serialVersionUID = -7788619177798333716L; + + public List getUsers() { + return users; + } + + public void setUsers(List users) { + this.users = users; + } + + public Long getCount() { + return count; + } + + public void setCount(Long count) { + this.count = count; + } + + private List users; + private Long count; + +} diff --git a/integration-module/src/main/java/hycom/service/DatabaseService.java b/integration-module/src/main/java/hycom/service/DatabaseService.java new file mode 100644 index 0000000..fe8ccf9 --- /dev/null +++ b/integration-module/src/main/java/hycom/service/DatabaseService.java @@ -0,0 +1,133 @@ +package hycom.service; + +import hycom.dao.FormDao; +import hycom.exceptions.DbException; +import hycom.model.Form; +import hycom.model.User; +import java.util.List; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.RequestMapping; + +/** + * Database service + */ +@Service +@Transactional +@RequestMapping("/logger") +public class DatabaseService { + + private static final Logger logger = LoggerFactory.getLogger(DatabaseService.class); + + @Autowired + private FormDao formDao; + + public List getForms() { + try { + return formDao.getForms(); + } + catch (DbException e) { + logger.error("Error in method getForms(): " + e.getMessage()); + } + return null; + } + + public List getFormsUsingPagination(int offset, int limit, String fromDate, String toDate, String formNameSearch, + String category, String pillar, String name) { + try { + return formDao.getForms(offset, limit, fromDate, toDate, formNameSearch, category, pillar, name); + } + catch (DbException e) { + logger.error("Error in method getFormsUsingPagination(...): " + e.getMessage()); + } + return null; + } + + public Long getFormsCount(String fromDate, String toDate, String formNameSearch, + String category, String pillar, String name) { + try { + return formDao.getFormsCount(fromDate, toDate, formNameSearch, category, pillar, name); + } + catch (DbException e) { + logger.error("Error in getFormsCount(...): " + e.getMessage()); + } + return null; + } + + public List getUsersContainsAttachments() { + try { + return formDao.getUsersContainsAttachments(); + } + catch (DbException e) { + logger.error("Error in getUsersContainsAttachments(): " + e.getMessage()); + } + return null; + } + public String getAttachments(String userName) { + try { + return formDao.getAttachments(userName); + } + catch (DbException e) { + logger.error("Error in getAttachments(...): " + e.getMessage()); + } + return null; + } + + public Boolean removeAttachments(String userName) { + try { + formDao.removeAttachments(userName); + return true; + } + catch (DbException e) { + logger.error("Error in removeAttachments(...): " + e.getMessage()); + } + return false; + } + + public Form getForm(int formId) { + try { + return formDao.getForm(formId); + } + catch (DbException e) { + logger.error("Error in getForm(...): " + e.getMessage()); + } + return null; + } + + public void submitForm(String id) { + try { + boolean submitted = formDao.isFormSubmitted(id); + if (submitted) + formDao.deleteSubmittedForm(id); + formDao.submitForm(id); + } + catch (DbException e) { + logger.error("Error in submitForm(...): " + e.getMessage()); + } + } + + public Boolean hasRemovedAttachments(String id) { + try { + return formDao.hasRemovedAttachments(id); + } + catch (DbException e) { + logger.error("Error in hasRemovedAttachments(...): " + e.getMessage()); + return null; + } + } + + public Boolean isFormSubmitted(String id) { + try { + return formDao.isFormSubmitted(id); + } + catch (DbException e) { + logger.error("isFormSubmitted(...): " + e.getMessage()); + return null; + } + } + + +} diff --git a/integration-module/src/main/java/hycom/service/TableNameParser.java b/integration-module/src/main/java/hycom/service/TableNameParser.java new file mode 100644 index 0000000..938dc52 --- /dev/null +++ b/integration-module/src/main/java/hycom/service/TableNameParser.java @@ -0,0 +1,74 @@ +package hycom.service; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Comparator; +import java.util.List; +import java.util.stream.Collectors; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +/** + * Serwis do parsowania nazwy tabeli. + */ + +@Service +public class TableNameParser { + + private static int maxColumnName = 30; + + private static String tablePrefix = "ORBEON_F_"; + + /** + * Konwerter nazwy tabeli. + * @param appName nazwa Aplikacji formularza + * @param formName nazwa Formy formularza + * @return skrócona nazwa tabeli + */ + public static String convertTableName(String appName, String formName) { + String appXML = xmlToSQLId(appName); + String formXML = xmlToSQLId(formName); + String viewName = tablePrefix + joinParts(Arrays.asList(appXML,formXML), maxColumnName - tablePrefix.length()); + + return viewName.toLowerCase(); + } + + private static String joinParts(List parts, int max) { + return String.join("_", fitParts(parts, max)); + } + + private static String xmlToSQLId(String id){ + String result = id.replaceAll("-", "_") + .toUpperCase() // to uppercase + .replaceAll("[^A-Z0-9_]", ""); + result = StringUtils.stripStart(result, "_"); + result = StringUtils.stripEnd(result, "_"); + return result; + } + + private static List fitParts(List parts, int max){ + int usable = max - parts.size() + 1; + return shaveParts(parts, usable); + } + + private static List shaveParts(List parts, int usable){ + List partsLength = parts.stream().map(String::length).collect(Collectors.toList()); + int totalLength = parts.stream().mapToInt(String::length).sum(); + + if(totalLength <= usable) { + return parts; + } else { + Integer maxPartLength = partsLength.stream().max(Comparator.naturalOrder()).orElseThrow(RuntimeException::new); + int maxPartIndex = partsLength.indexOf(maxPartLength); + String newPart = StringUtils.stripEnd(removeLastChar(parts.get(maxPartIndex)), "_"); + List newParts = new ArrayList<>(parts); + newParts.set(maxPartIndex, newPart); + + return shaveParts(newParts, usable); + } + } + + private static String removeLastChar(String str) { + return str.substring(0, str.length() - 1); + } +} diff --git a/integration-module/src/main/java/hycom/service/XMLSerialize.java b/integration-module/src/main/java/hycom/service/XMLSerialize.java new file mode 100644 index 0000000..eee01a1 --- /dev/null +++ b/integration-module/src/main/java/hycom/service/XMLSerialize.java @@ -0,0 +1,47 @@ +package hycom.service; + +import com.sun.org.apache.xml.internal.serialize.OutputFormat; + +import com.sun.org.apache.xml.internal.serialize.XMLSerializer; +import java.io.IOException; +import java.io.StringReader; +import java.io.StringWriter; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import org.springframework.stereotype.Service; +import org.w3c.dom.Document; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; + +/** + * Serwis do parsowania formularza (String -> XML) + */ + +@Service +public class XMLSerialize { + + /** + * Konwerter XML + * @param stringXML Formularz aplikacji + * @return dokument XML + * @throws ParserConfigurationException Wyjątek wyrzucany, w przypadku próby parsowania nie odpowiedniego pliku. + * @throws IOException Wyjątek wyrzucany, w przypadku odczytywania z zamkniętego strumienia danych. + * @throws SAXException Wyjątek wyrzucany, w przypadku nieudanego budowania pliku dokumentu. + */ + + public static Document parseStringToXML(String stringXML) throws ParserConfigurationException, IOException, SAXException { + Document document; + DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); + DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); + InputSource inputSource = new InputSource(new StringReader(stringXML)); + document = documentBuilder.parse(inputSource); + StringWriter out = new StringWriter(); + OutputFormat format = new OutputFormat(document); + format.setIndenting(true); + XMLSerializer serializer = new XMLSerializer(out, format); + serializer.serialize(document); + + return document; + } +} diff --git a/integration-module/src/main/java/hycom/utils/AppUtils.java b/integration-module/src/main/java/hycom/utils/AppUtils.java new file mode 100644 index 0000000..4d11517 --- /dev/null +++ b/integration-module/src/main/java/hycom/utils/AppUtils.java @@ -0,0 +1,33 @@ +package hycom.utils; + +import java.net.URL; +import javax.xml.parsers.DocumentBuilderFactory; +import org.w3c.dom.Document; + +/** + * Narzędzia wykorzystywane w aplikacji + */ +public class AppUtils { + + public static String generateLink(String hostAddress, String appName, String formName, String formId) { + StringBuilder linkBuilder = new StringBuilder(); + linkBuilder.append(hostAddress); + if (!hostAddress.endsWith("/")) { + linkBuilder.append("/"); + } + linkBuilder.append("fr/"); + linkBuilder.append(appName.concat("/")); + linkBuilder.append(formName.concat("/")); + linkBuilder.append("view/"); + linkBuilder.append(formId); + + return linkBuilder.toString(); + } + + public static Document loadDocumentUrl(String url) throws Exception { + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + factory.setNamespaceAware(true); + return factory.newDocumentBuilder().parse(new URL(url).openStream()); + } + +} diff --git a/integration-module/src/main/resources/application.properties b/integration-module/src/main/resources/application.properties new file mode 100644 index 0000000..9644317 --- /dev/null +++ b/integration-module/src/main/resources/application.properties @@ -0,0 +1,14 @@ +#spring.datasource.url= jdbc:postgresql://localhost:5432/orbeon +#spring.datasource.username=postgres +#spring.datasource.password=postgres + +logging.level.org.springframework.web=WARN +logging.level.org.hibernate=ERROR +logging.file=/opt/icoca/integration.log + +spring.jpa.hibernate.ddl-auto=validate +#orbeon.address=http://localhost:8080/orbeonpe/ +form.name.input=form-name-input +form.category.select=form-category-select +form.pillar.select=form-pillar-select +form.directory.temp = /opt/orbeon/temp diff --git a/integration-module/src/main/resources/context.xml b/integration-module/src/main/resources/context.xml new file mode 100644 index 0000000..0142181 --- /dev/null +++ b/integration-module/src/main/resources/context.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/integration-module/src/main/resources/sql/create.sql b/integration-module/src/main/resources/sql/create.sql new file mode 100644 index 0000000..a18cb18 --- /dev/null +++ b/integration-module/src/main/resources/sql/create.sql @@ -0,0 +1,7 @@ +CREATE TABLE submitted_forms +( + id serial NOT NULL, + form_id NUMERIC NOT NULL, + send_date timestamp without time zone NOT NULL, + attachments_moved boolean NOT NULL DEFAULT FALSE +); \ No newline at end of file diff --git a/integration-module/src/test/java/hycom/FormsControllerTests.java b/integration-module/src/test/java/hycom/FormsControllerTests.java new file mode 100644 index 0000000..de44c05 --- /dev/null +++ b/integration-module/src/test/java/hycom/FormsControllerTests.java @@ -0,0 +1,55 @@ +/* + * Copyright 2016 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package hycom; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; + +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +// import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; + + +@RunWith(SpringRunner.class) +@SpringBootTest +@AutoConfigureMockMvc +public class FormsControllerTests { + + @Autowired + private MockMvc mockMvc; + + @Test + public void noTest() { + System.out.println("test"); + } + + @Test + public void getFormsTest() { + try { + this.mockMvc.perform(get("/rest/forms")).andDo(print()).andExpect(status().isOk()); + // .andExpect(jsonPath("$.formName").value("orbeon")); + } + catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/integration-module/web/WEB-INF/web.xml b/integration-module/web/WEB-INF/web.xml new file mode 100644 index 0000000..a0b58fd --- /dev/null +++ b/integration-module/web/WEB-INF/web.xml @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/registration/pom.xml b/registration/pom.xml new file mode 100644 index 0000000..b7c773f --- /dev/null +++ b/registration/pom.xml @@ -0,0 +1,58 @@ + + + 4.0.0 + + eu.mooseinc + registration-parent + pom + 1.3.0 + + registration-form + registration-doc + + + + UTF-8 + 4.3.5.RELEASE + 3.0.3.RELEASE + 2.8.6 + 1.7.22 + 1.4.7 + 3.0 + 1.3.2 + 2.5 + 21.0 + 5.2.6.Final + 5.3.4.Final + 9.4.1212.jre7 + 9.0.0.M15 + 3.7 + 1.14 + 3.0.0 + 2.2.6 + 4.5.3 + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.6.0 + + 1.8 + 1.8 + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.0.0-M4 + + -Xmx512m -XX:MaxPermSize=256m + + + + + \ No newline at end of file diff --git a/registration/registration-doc/pom.xml b/registration/registration-doc/pom.xml new file mode 100644 index 0000000..cf0bfd8 --- /dev/null +++ b/registration/registration-doc/pom.xml @@ -0,0 +1,19 @@ + + + + + + registration-parent + eu.mooseinc + 1.3.0 + + 4.0.0 + pom + + registration-doc + \ No newline at end of file diff --git a/registration/registration-doc/src/sql/create.sql b/registration/registration-doc/src/sql/create.sql new file mode 100644 index 0000000..99aa8ce --- /dev/null +++ b/registration/registration-doc/src/sql/create.sql @@ -0,0 +1,9 @@ +CREATE TABLE registration_membership +( + id bigint NOT NULL, + version bigint NOT NULL, + membership_type character varying(60) NOT NULL, + CONSTRAINT registration_membership_pkey PRIMARY KEY (id) +); + +CREATE SEQUENCE registrationform_sequence START 100 INCREMENT 1; \ No newline at end of file diff --git a/registration/registration-doc/src/sql/prod-data.sql b/registration/registration-doc/src/sql/prod-data.sql new file mode 100644 index 0000000..4b3b3bc --- /dev/null +++ b/registration/registration-doc/src/sql/prod-data.sql @@ -0,0 +1,5 @@ +INSERT INTO registration_membership(id, version, membership_type) VALUES (1, 0, 'Membership in the Private Security Pillar'); +INSERT INTO registration_membership(id, version, membership_type) VALUES (2, 0, 'Membership in the Civil Society Pillar'); +INSERT INTO registration_membership(id, version, membership_type) VALUES (3, 0, 'Membership in the Government Pillar'); +INSERT INTO registration_membership(id, version, membership_type) VALUES (4, 0, 'Observer status'); +INSERT INTO registration_membership(id, version, membership_type) VALUES (5, 0, 'Affiliate status'); diff --git a/registration/registration-form/pom.xml b/registration/registration-form/pom.xml new file mode 100644 index 0000000..b5e38b8 --- /dev/null +++ b/registration/registration-form/pom.xml @@ -0,0 +1,189 @@ + + + + registration-parent + eu.mooseinc + 1.3.0 + + 4.0.0 + war + + registration-form + + + + + org.springframework + spring-context-support + ${spring.version} + + + commons-logging + commons-logging + + + + + org.springframework + spring-webmvc + ${spring.version} + + + org.springframework + spring-orm + ${spring.version} + + + + + org.thymeleaf + thymeleaf + ${thymeleaf.version} + compile + + + org.thymeleaf + thymeleaf-spring4 + ${thymeleaf.version} + compile + + + javax + javaee-web-api + 7.0 + provided + + + + + org.slf4j + slf4j-log4j12 + ${slf4j.version} + + + org.slf4j + slf4j-api + ${slf4j.version} + + + org.slf4j + jcl-over-slf4j + ${slf4j.version} + + + + + org.postgresql + postgresql + ${postrgesql.version} + + + + + org.hibernate + hibernate-core + ${hibernate.version} + + + org.hibernate + hibernate-validator + ${hibernate.validator.version} + + + org.apache.tomcat + tomcat-jdbc + ${apache.tomcat.version} + runtime + + + + + javax.mail + mail + ${java.mail.version} + + + + + commons-fileupload + commons-fileupload + ${commons-fileupload.version} + + + commons-io + commons-io + ${commons-io.version} + + + + + com.fasterxml.jackson.core + jackson-core + ${jackson.version} + + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + + + + + com.google.guava + guava + ${guava.version} + + + org.apache.commons + commons-lang3 + ${apache.commons.version} + + + org.apache.tika + tika-core + ${apache.tika.version} + + + org.apache.poi + poi + ${apache.poi.version} + + + + + javax.el + javax.el-api + ${java.el.version} + + + org.glassfish.web + javax.el + ${glassfish.web.version} + + + + org.apache.httpcomponents + fluent-hc + ${apache.httpcomponents.version} + + + + + + + org.apache.tomcat.maven + tomcat7-maven-plugin + 2.2 + + ${project.build.outputDirectory}/embedded/tomcat-context.xml + + + + org.apache.maven.plugins + maven-war-plugin + 3.0.0 + + + + \ No newline at end of file diff --git a/registration/registration-form/src/main/java/eu/mooseinc/dell/form/dao/MembershipTypeDao.java b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/dao/MembershipTypeDao.java new file mode 100644 index 0000000..4fe14d0 --- /dev/null +++ b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/dao/MembershipTypeDao.java @@ -0,0 +1,23 @@ +/********************************************************************************************************************************* + * Autorskie Prawa Majątkowe - Moose Spółka z ograniczoną odpowiedzialnością + * + * Copyright 2017 Moose Spółka z ograniczoną odpowiedzialnością + ********************************************************************************************************************************/ + +package eu.mooseinc.dell.form.dao; + +import eu.mooseinc.dell.form.dao.base.Dao; +import eu.mooseinc.dell.form.entity.MembershipType; +import java.util.List; + +/** + * DAO interface for entity {@link MembershipType} + */ +public interface MembershipTypeDao extends Dao { + /** + * Returns list of membership types. + * + * @return list of membership types. + */ + List getMembershipTypes(); +} diff --git a/registration/registration-form/src/main/java/eu/mooseinc/dell/form/dao/base/Dao.java b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/dao/base/Dao.java new file mode 100644 index 0000000..37fa176 --- /dev/null +++ b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/dao/base/Dao.java @@ -0,0 +1,67 @@ +/********************************************************************************************************************************* + * Autorskie Prawa Majątkowe - Moose Spółka z ograniczoną odpowiedzialnością + * + * Copyright 2017 Moose Spółka z ograniczoną odpowiedzialnością + ********************************************************************************************************************************/ + +package eu.mooseinc.dell.form.dao.base; + +import eu.mooseinc.dell.form.exception.ObjectNotFoundException; +import java.util.List; + +/** + * Base dao + */ +public interface Dao { + /** + * Store object in database and get its identifier. + * + * @param t object to store. + * + * @return stored object. + */ + T persist(T t); + + /** + * Delete object from database with provided id. + * + * @param id object id. + * + * @throws ObjectNotFoundException object not found in database. + */ + void delete(long id) throws ObjectNotFoundException; + + /** + * Delete object from database. + * + * @param t object to delete. + */ + void remove(T t); + + /** + * Returns object with provided id. If there is no such object, it terurns {@code null}. + * + * @param id object id. + * + * @return object with provided id. + */ + T find(long id); + + /** + * Returns object from database. + * + * @param id object id. + * + * @return object with provided id. + * + * @throws ObjectNotFoundException object not found in database. + */ + T get(long id) throws ObjectNotFoundException; + + /** + * List of all objects in database + * + * @return list of objects. + */ + List getAll(); +} diff --git a/registration/registration-form/src/main/java/eu/mooseinc/dell/form/dao/impl/MembershipTypeDaoImpl.java b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/dao/impl/MembershipTypeDaoImpl.java new file mode 100644 index 0000000..a317618 --- /dev/null +++ b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/dao/impl/MembershipTypeDaoImpl.java @@ -0,0 +1,35 @@ +/********************************************************************************************************************************* + * Autorskie Prawa Majątkowe - Moose Spółka z ograniczoną odpowiedzialnością + * + * Copyright 2017 Moose Spółka z ograniczoną odpowiedzialnością + ********************************************************************************************************************************/ + +package eu.mooseinc.dell.form.dao.impl; + +import eu.mooseinc.dell.form.dao.MembershipTypeDao; +import eu.mooseinc.dell.form.dao.impl.base.AbstractDao; +import eu.mooseinc.dell.form.entity.MembershipType; +import eu.mooseinc.dell.form.entity.query.MembershipTypeQueries.GetMembershipTypesQuery; +import eu.mooseinc.dell.form.type.Entity; +import java.util.List; +import org.hibernate.query.Query; +import org.springframework.stereotype.Repository; + +/** + * DAO implementation for entity {@link MembershipType} + */ +@Repository +public class MembershipTypeDaoImpl extends AbstractDao implements MembershipTypeDao { + /** + * Constructor. + */ + public MembershipTypeDaoImpl() { + super(Entity.MEMBERSHIP_TYPE); + } + + @Override + public List getMembershipTypes() { + final Query query = createNamedQuery(GetMembershipTypesQuery.NAME); + return query.getResultList(); + } +} diff --git a/registration/registration-form/src/main/java/eu/mooseinc/dell/form/dao/impl/base/AbstractDao.java b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/dao/impl/base/AbstractDao.java new file mode 100644 index 0000000..7734b23 --- /dev/null +++ b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/dao/impl/base/AbstractDao.java @@ -0,0 +1,114 @@ +/********************************************************************************************************************************* + * Autorskie Prawa Majątkowe - Moose Spółka z ograniczoną odpowiedzialnością + * + * Copyright 2017 Moose Spółka z ograniczoną odpowiedzialnością + ********************************************************************************************************************************/ + +package eu.mooseinc.dell.form.dao.impl.base; + +import eu.mooseinc.dell.form.dao.base.Dao; +import eu.mooseinc.dell.form.entity.base.BaseEntity; +import eu.mooseinc.dell.form.exception.ObjectNotFoundException; +import eu.mooseinc.dell.form.type.Entity; +import java.lang.reflect.ParameterizedType; +import java.text.MessageFormat; +import java.util.List; +import javax.persistence.criteria.CriteriaBuilder; +import javax.persistence.criteria.CriteriaQuery; +import javax.persistence.criteria.Root; +import org.hibernate.Session; +import org.hibernate.SessionFactory; +import org.hibernate.query.Query; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * Bazowa implementacja dla {@link Dao}. + * + * @param typ encji. + */ +public abstract class AbstractDao implements Dao { + + @Autowired + protected SessionFactory sessionFactory; + + /** + * Klasa obiektu obsługiwanego przez DAO. + */ + private final Class clazz; + + /** + * Typ encji. + */ + private final Entity entity; + + /** + * Konstruktor. + * + * @param entity typ encji. + */ + public AbstractDao(final Entity entity) { + this.clazz = (Class) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]; + this.entity = entity; + } + + @Override + public T persist(final T t) { + sessionFactory.getCurrentSession().persist(t); + return t; + } + + @Override + public void delete(final long id) throws ObjectNotFoundException { + sessionFactory.getCurrentSession().delete(get(id)); + } + + @Override + public void remove(final T t) { + sessionFactory.getCurrentSession().delete(t); + } + + @Override + public T find(final long id) { + return sessionFactory.getCurrentSession().get(clazz, id); + } + + @Override + public T get(final long id) throws ObjectNotFoundException { + final T t = find(id); + if (t == null) + throw new ObjectNotFoundException( + MessageFormat.format("Nie odnaleziono obiektu {0} o identyfikatorze {1}", entity.getName(), id)); + return t; + } + + @Override + public List getAll() { + final Session session = sessionFactory.getCurrentSession(); + final CriteriaBuilder builder = session.getCriteriaBuilder(); + final CriteriaQuery criteriaQuery = builder.createQuery(clazz); + final Root from = criteriaQuery.from(clazz); + criteriaQuery.select(from); + final Query query = session.createQuery(criteriaQuery); + return query.getResultList(); + } + + /** + * Tworzy zapytanie nazwane. + * + * @param queryName nazwa zapytania HQL. + * + * @return obiekt zapytania. + */ + protected Query createNamedQuery(final String queryName) { + return sessionFactory.getCurrentSession().createNamedQuery(queryName, clazz); + } + + /** + * Zwraca rodzaj encji. + * + * @return rodzaj encji. + */ + protected Entity getEntity() { + return entity; + } +} diff --git a/registration/registration-form/src/main/java/eu/mooseinc/dell/form/entity/MembershipType.java b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/entity/MembershipType.java new file mode 100644 index 0000000..9a8cade --- /dev/null +++ b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/entity/MembershipType.java @@ -0,0 +1,66 @@ +/********************************************************************************************************************************* + * Autorskie Prawa Majątkowe - Moose Spółka z ograniczoną odpowiedzialnością + * + * Copyright 2017 Moose Spółka z ograniczoną odpowiedzialnością + ********************************************************************************************************************************/ + +package eu.mooseinc.dell.form.entity; + +import eu.mooseinc.dell.form.entity.base.BaseEntity; +import eu.mooseinc.dell.form.entity.query.MembershipTypeQueries.GetMembershipTypesQuery; +import eu.mooseinc.dell.form.util.ColumnLengthConstants; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.NamedQueries; +import javax.persistence.NamedQuery; +import javax.persistence.Table; + +/** + * Type of membership entity + */ +@Entity +@Table(name = MembershipType.TABLE_NAME) +@NamedQueries(// + @NamedQuery(// + name = GetMembershipTypesQuery.NAME,// + query = GetMembershipTypesQuery.QUERY// + )// +) +public class MembershipType extends BaseEntity { + /** + * Table name. + */ + public static final String TABLE_NAME = "registration_membership"; + + + /** + * Type of membership. + */ + @Column(name = "membership_type", length = ColumnLengthConstants.SHORT_TEXT_LENGTH, nullable = false) + private String registrationMembership; + + /** + * Constructor. + */ + public MembershipType() { + } + + /** + * Get type of membership. + * + * @return nazwa firmy. + */ + public String getRegistrationMembership() { + return registrationMembership; + } + + /** + * Set type of membership. + * + * @param registrationMembership nazwa firmy. + */ + public void setRegistrationMembership(String registrationMembership) { + this.registrationMembership = registrationMembership; + } + +} diff --git a/registration/registration-form/src/main/java/eu/mooseinc/dell/form/entity/Registration.java b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/entity/Registration.java new file mode 100644 index 0000000..ca69e30 --- /dev/null +++ b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/entity/Registration.java @@ -0,0 +1,203 @@ +/********************************************************************************************************************************* + * Autorskie Prawa Majątkowe - Moose Spółka z ograniczoną odpowiedzialnością + * + * Copyright 2017 Moose Spółka z ograniczoną odpowiedzialnością + ********************************************************************************************************************************/ + +package eu.mooseinc.dell.form.entity; + +import eu.mooseinc.dell.form.entity.base.BaseEntity; +import eu.mooseinc.dell.form.util.ColumnLengthConstants; +import java.util.Date; +import javax.persistence.Column; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; + +/** + * Entity model for registration + */ +public class Registration extends BaseEntity { + + /** + * Entity name. + */ + @NotNull(message = "{notification.entityName.required}") + @Size(min = 1, max = ColumnLengthConstants.SHORT_TEXT_LENGTH, message = "{notification.entityName.size}") + private String entityName; + + /** + * Name. + */ + @NotNull(message = "{notification.name.required}") + @Size(min = 1, max = ColumnLengthConstants.SHORT_TEXT_LENGTH, message = "${notification.name.size}") + private String name; + + /** + * Surname + */ + @NotNull(message = "{notification.surname.required}") + @Size(min = 1, max = ColumnLengthConstants.SHORT_TEXT_LENGTH, message = "${notification.name.size}") + private String surname; + + /** + * E-mail address. + */ + @NotNull(message = "{notification.email.required}") + @Size(min = 1, max = ColumnLengthConstants.EMAIL_LENGTH, message = "{notification.email.size}") + private String email; + + /** + * Type of membership. + */ + @NotNull(message = "{notification.marketSegment.required}") + private MembershipType membershipType; + + /** + * Message body. + */ + @Size(max = ColumnLengthConstants.STANDARD_TEXT_LENGTH, message = "{notification.message.size}") + private String message; + + /** + * Registration date. + */ + @Column(name = "registration_date", nullable = false) + @Temporal(TemporalType.TIMESTAMP) + private Date registrationDate; + + /** + * Constructor. + */ + public Registration() { + } + + /** + * Returns entity name. + * + * @return entity name. + */ + public String getEntityName() { + return entityName; + } + + /** + * Set entity name. + * + * @param entityName entity name. + */ + public void setEntityName(String entityName) { + this.entityName = entityName; + } + + /** + * Returns name. + * + * @return name. + */ + public String getName() { + return name; + } + + /** + * Set name. + * + * @param name name. + */ + public void setName(String name) { + this.name = name; + } + + /** + * Returns surname. + * + * @return surname. + */ + public String getSurname() { + return surname; + } + + /** + * Set surname. + * + * @param surname surname. + */ + public void setSurname(String surname) { + this.surname = surname; + } + + /** + * Returns e-mail. + * + * @return e-mail. + */ + public String getEmail() { + return email; + } + + /** + * Set e-mail. + * + * @param email e-mail. + */ + public void setEmail(String email) { + this.email = email; + } + + /** + * Returns membership type + * + * @return membership type. + */ + public MembershipType getMembershipType() { + return membershipType; + } + + /** + * Set membership type. + * + * @param membershipType Membership Type + */ + public void setMembershipType(MembershipType membershipType) { + this.membershipType = membershipType; + } + + + /** + * Returns message body. + * + * @return message body. + */ + public String getMessage() { + return message; + } + + /** + * Set message body. + * + * @param message message body. + */ + public void setMessage(String message) { + this.message = message; + } + + /** + * Set registration date. + * + * @param registrationDate registration date. + */ + public void setRegistrationDate(Date registrationDate) { + this.registrationDate = registrationDate; + } + + /** + * Returns registration date. + * + * @return registration date. + */ + public Date getRegistrationDate() { + return registrationDate; + } + +} diff --git a/registration/registration-form/src/main/java/eu/mooseinc/dell/form/entity/base/BaseEntity.java b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/entity/base/BaseEntity.java new file mode 100644 index 0000000..cbc3590 --- /dev/null +++ b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/entity/base/BaseEntity.java @@ -0,0 +1,68 @@ +/********************************************************************************************************************************* + * Autorskie Prawa Majątkowe - Moose Spółka z ograniczoną odpowiedzialnością + * + * Copyright 2017 Moose Spółka z ograniczoną odpowiedzialnością + ********************************************************************************************************************************/ + +package eu.mooseinc.dell.form.entity.base; + +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.MappedSuperclass; +import javax.persistence.Version; +import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Parameter; +import org.hibernate.id.enhanced.SequenceStyleGenerator; + +/** + * Base class for entity. + */ +@MappedSuperclass +public class BaseEntity { + /** + * Sequence name. + */ + private static final String SEQUENCE_GENERATOR = "registrationform_sequence"; + /** + * Min value for id. + */ + private static final String MIN_SEQUENCE_VALUE = "100"; + /** + * id in database. + */ + @Id + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = SEQUENCE_GENERATOR) + @GenericGenerator(// + name = SEQUENCE_GENERATOR,// + strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator",// + parameters = {// + @Parameter(name = SequenceStyleGenerator.SEQUENCE_PARAM, value = SEQUENCE_GENERATOR),// + @Parameter(name = SequenceStyleGenerator.INITIAL_PARAM, value = MIN_SEQUENCE_VALUE)// + }) + private Long id; + + /** + * Object version for optimistic locking. + */ + @Version + private long version; + + /** + * Returns id of database object. + * + * @return id of database object. + */ + public Long getId() { + return id; + } + + /** + * Returns version of object. + * + * @return object version. + */ + public long getVersion() { + return version; + } +} diff --git a/registration/registration-form/src/main/java/eu/mooseinc/dell/form/entity/query/MembershipTypeQueries.java b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/entity/query/MembershipTypeQueries.java new file mode 100644 index 0000000..2d57746 --- /dev/null +++ b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/entity/query/MembershipTypeQueries.java @@ -0,0 +1,27 @@ +/********************************************************************************************************************************* + * Autorskie Prawa Majątkowe - Moose Spółka z ograniczoną odpowiedzialnością + * + * Copyright 2017 Moose Spółka z ograniczoną odpowiedzialnością + ********************************************************************************************************************************/ + +package eu.mooseinc.dell.form.entity.query; + +/** + * Named query for entity {@link eu.mooseinc.dell.form.entity.MembershipType} + */ +public class MembershipTypeQueries { + /** + * Returns all membership types. + */ + public static final class GetMembershipTypesQuery { + /** + * Nazwa zapytania. + */ + public static final String NAME = "MembershipTypeQuery"; + + /** + * Zapytanie nazwane. + */ + public static final String QUERY = "SELECT n FROM MembershipType n"; + } +} diff --git a/registration/registration-form/src/main/java/eu/mooseinc/dell/form/exception/DataAccessObjectException.java b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/exception/DataAccessObjectException.java new file mode 100644 index 0000000..2fed9e6 --- /dev/null +++ b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/exception/DataAccessObjectException.java @@ -0,0 +1,40 @@ +/********************************************************************************************************************************* + * Autorskie Prawa Majątkowe - Moose Spółka z ograniczoną odpowiedzialnością + * + * Copyright 2017 Moose Spółka z ograniczoną odpowiedzialnością + ********************************************************************************************************************************/ + +package eu.mooseinc.dell.form.exception; + +/** + * Base exception class for DAO layer. + */ +public class DataAccessObjectException extends Exception { + /** + * Constructor. + * + * @param message exception message. + */ + public DataAccessObjectException(final String message) { + super(message); + } + + /** + * Constructor. + * + * @param cause exception cause. + */ + public DataAccessObjectException(final Throwable cause) { + super(cause); + } + + /** + * Constructor. + * + * @param message exception message. + * @param cause exception cause. + */ + public DataAccessObjectException(final String message, final Throwable cause) { + super(message, cause); + } +} diff --git a/registration/registration-form/src/main/java/eu/mooseinc/dell/form/exception/ObjectNotFoundException.java b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/exception/ObjectNotFoundException.java new file mode 100644 index 0000000..8d302f6 --- /dev/null +++ b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/exception/ObjectNotFoundException.java @@ -0,0 +1,40 @@ +/********************************************************************************************************************************* + * Autorskie Prawa Majątkowe - Moose Spółka z ograniczoną odpowiedzialnością + * + * Copyright 2017 Moose Spółka z ograniczoną odpowiedzialnością + ********************************************************************************************************************************/ + +package eu.mooseinc.dell.form.exception; + +/** + * Exception that throws if object not exist in database + */ +public class ObjectNotFoundException extends DataAccessObjectException { + /** + * Constructor. + * + * @param message exception message. + */ + public ObjectNotFoundException(String message) { + super(message); + } + + /** + * Constructor. + * + * @param cause exception cause. + */ + public ObjectNotFoundException(Throwable cause) { + super(cause); + } + + /** + * Constructor. + * + * @param message exception message. + * @param cause exception cause. + */ + public ObjectNotFoundException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/registration/registration-form/src/main/java/eu/mooseinc/dell/form/exception/ServiceException.java b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/exception/ServiceException.java new file mode 100644 index 0000000..80b4447 --- /dev/null +++ b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/exception/ServiceException.java @@ -0,0 +1,40 @@ +/********************************************************************************************************************************* + * Autorskie Prawa Majątkowe - Moose Spółka z ograniczoną odpowiedzialnością + * + * Copyright 2017 Moose Spółka z ograniczoną odpowiedzialnością + ********************************************************************************************************************************/ + +package eu.mooseinc.dell.form.exception; + +/** + * Bazowa klasa wyjątku warstwy serwisowej. + */ +public class ServiceException extends Exception { + /** + * Constructor. + * + * @param message exception message. + */ + public ServiceException(String message) { + super(message); + } + + /** + * Constructor. + * + * @param message exception message. + * @param cause exception cause. + */ + public ServiceException(String message, Throwable cause) { + super(message, cause); + } + + /** + * Constructor. + * + * @param cause exception cause. + */ + public ServiceException(Throwable cause) { + super(cause); + } +} diff --git a/registration/registration-form/src/main/java/eu/mooseinc/dell/form/model/Attachment.java b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/model/Attachment.java new file mode 100644 index 0000000..836f738 --- /dev/null +++ b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/model/Attachment.java @@ -0,0 +1,104 @@ +/********************************************************************************************************************************* + * Autorskie Prawa Majątkowe - Moose Spółka z ograniczoną odpowiedzialnością + * + * Copyright 2017 Moose Spółka z ograniczoną odpowiedzialnością + ********************************************************************************************************************************/ + +package eu.mooseinc.dell.form.model; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import java.io.Serializable; +import java.util.Date; + +/** + * Registration form attachment + */ +public class Attachment implements Serializable { + /** + * File id. + */ + @JsonProperty(value = "id") + private final String id; + + /** + * File name. + */ + @JsonProperty(value = "name") + private final String fileName; + + /** + * File path. + */ + @JsonIgnore + private final String filePath; + + /** + * Constructor. + * + * @param id file id. + * @param fileName file name. + * @param filePath file path. + */ + public Attachment(final String id, final String fileName, final String filePath) { + this.id = id; + this.fileName = fileName; + this.filePath = filePath; + } + + /** + * Constructor. + * + * @param fileName file name. + * @param filePath file path.. + */ + public Attachment(final String fileName, final String filePath) { + this.id = String.valueOf(new Date().getTime()); + this.fileName = fileName; + this.filePath = filePath; + } + + /** + * Returns file id. + * + * @return file id. + */ + public String getId() { + return id; + } + + /** + * Returns file name. + * + * @return file name. + */ + public String getFileName() { + return fileName; + } + + /** + * Returns file path. + * + * @return file path. + */ + public String getFilePath() { + return filePath; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + + Attachment attachment = (Attachment) o; + + return id.equals(attachment.id); + } + + @Override + public int hashCode() { + return id.hashCode(); + } +} diff --git a/registration/registration-form/src/main/java/eu/mooseinc/dell/form/model/ErrorMessage.java b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/model/ErrorMessage.java new file mode 100644 index 0000000..3dddd7f --- /dev/null +++ b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/model/ErrorMessage.java @@ -0,0 +1,29 @@ +/********************************************************************************************************************************* + * Autorskie Prawa Majątkowe - Moose Spółka z ograniczoną odpowiedzialnością + * + * Copyright 2017 Moose Spółka z ograniczoną odpowiedzialnością + ********************************************************************************************************************************/ + +package eu.mooseinc.dell.form.model; + +import com.fasterxml.jackson.annotation.JsonProperty; + +/** + * Error message + */ +public class ErrorMessage { + @JsonProperty(value = "message") + private String message; + + public ErrorMessage(final String message) { + this.message = message; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/registration/registration-form/src/main/java/eu/mooseinc/dell/form/service/CaptchaService.java b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/service/CaptchaService.java new file mode 100644 index 0000000..5f08ee3 --- /dev/null +++ b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/service/CaptchaService.java @@ -0,0 +1,21 @@ +/********************************************************************************************************************************* + * Autorskie Prawa Majątkowe - Moose Spółka z ograniczoną odpowiedzialnością + * + * Copyright 2017 Moose Spółka z ograniczoną odpowiedzialnością + ********************************************************************************************************************************/ + +package eu.mooseinc.dell.form.service; + +/** + * Interfejs serwisu do obsługi captcha. + */ +public interface CaptchaService { + /** + * Sprawdza, czy captcha wprowadzona przez użytkownika jest prawidłowa. + * + * @param captcha captcha wprowadzona przez użytkownika + * + * @return {@code true} jeśli captcha jest prawidłowa, {@code false} w przeciwnym wypadku. + */ + boolean isCaptchaValid(String captcha); +} diff --git a/registration/registration-form/src/main/java/eu/mooseinc/dell/form/service/MailService.java b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/service/MailService.java new file mode 100644 index 0000000..8d86083 --- /dev/null +++ b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/service/MailService.java @@ -0,0 +1,41 @@ +/********************************************************************************************************************************* + * Autorskie Prawa Majątkowe - Moose Spółka z ograniczoną odpowiedzialnością + * + * Copyright 2017 Moose Spółka z ograniczoną odpowiedzialnością + ********************************************************************************************************************************/ + +package eu.mooseinc.dell.form.service; + +import eu.mooseinc.dell.form.exception.ServiceException; +import eu.mooseinc.dell.form.model.Attachment; +import java.util.List; + +/** + * Email Service + */ +public interface MailService { + /** + * Send message + * + * @param to message recipients + * @param subject message subject + * @param text body message + * @param attachments list of attachments, cannot be {@code null}. + * + * @throws ServiceException jeśli wystąpi błąd podczas wysyłania wiadomości. + */ + void send(String[] to, String subject, String text, List attachments) throws ServiceException; + + /** + * Sending e-mail message. + * + * @param to message recipients + * @param cc message copy recipients + * @param subject message subject + * @param text body message + * @param attachments list of attachments, cannot be {@code null}. + * + * @throws ServiceException jeśli wystąpi błąd podczas wysyłania wiadomości. + */ + void send(String[] to, String cc, String subject, String text, List attachments) throws ServiceException; +} diff --git a/registration/registration-form/src/main/java/eu/mooseinc/dell/form/service/MembershipTypeService.java b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/service/MembershipTypeService.java new file mode 100644 index 0000000..c6a2c6b --- /dev/null +++ b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/service/MembershipTypeService.java @@ -0,0 +1,33 @@ +/********************************************************************************************************************************* + * Autorskie Prawa Majątkowe - Moose Spółka z ograniczoną odpowiedzialnością + * + * Copyright 2017 Moose Spółka z ograniczoną odpowiedzialnością + ********************************************************************************************************************************/ + +package eu.mooseinc.dell.form.service; + +import eu.mooseinc.dell.form.entity.MembershipType; +import eu.mooseinc.dell.form.exception.ServiceException; +import java.util.List; + +/** + * Membership type service + */ +public interface MembershipTypeService { + + + /** + * @return list of membership types. + * + * @throws ServiceException + */ + List getMembershipTypes(); + + /** + * @param membershipTypeId membershipType id + * + * @return membership type with provided id. + */ + MembershipType findMembershipType(Long membershipTypeId); + +} diff --git a/registration/registration-form/src/main/java/eu/mooseinc/dell/form/service/RegistrationService.java b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/service/RegistrationService.java new file mode 100644 index 0000000..592a70e --- /dev/null +++ b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/service/RegistrationService.java @@ -0,0 +1,30 @@ +/********************************************************************************************************************************* + * Autorskie Prawa Majątkowe - Moose Spółka z ograniczoną odpowiedzialnością + * + * Copyright 2017 Moose Spółka z ograniczoną odpowiedzialnością + ********************************************************************************************************************************/ + +package eu.mooseinc.dell.form.service; + +import eu.mooseinc.dell.form.entity.Registration; +import eu.mooseinc.dell.form.exception.ObjectNotFoundException; +import eu.mooseinc.dell.form.exception.ServiceException; + +/** + * Registration service interface. + */ +public interface RegistrationService { + /** + * Send registration request as e-mail. + * + * @param registration registration data. + * + * @return registration data. + * + * @throws ObjectNotFoundException jeśli nie odnaleziono segmentu rynku. + * @throws ServiceException jeśli wystąpi błąd podczas wysyłania wiadomości. + */ + Registration sendRegistration(Registration registration) throws ObjectNotFoundException, + ServiceException; + +} diff --git a/registration/registration-form/src/main/java/eu/mooseinc/dell/form/service/impl/CaptchaServiceImpl.java b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/service/impl/CaptchaServiceImpl.java new file mode 100644 index 0000000..726b3bf --- /dev/null +++ b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/service/impl/CaptchaServiceImpl.java @@ -0,0 +1,75 @@ +/********************************************************************************************************************************* + * Autorskie Prawa Majątkowe - Moose Spółka z ograniczoną odpowiedzialnością + * + * Copyright 2017 Moose Spółka z ograniczoną odpowiedzialnością + ********************************************************************************************************************************/ + +package eu.mooseinc.dell.form.service.impl; + +import com.fasterxml.jackson.databind.ObjectMapper; +import eu.mooseinc.dell.form.service.CaptchaService; +import java.io.IOException; +import java.util.Map; +import org.apache.commons.lang3.StringUtils; +import org.apache.http.client.fluent.Request; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +/** + * Implementacja serwisu do obsługi captcha. + */ +@Service +public class CaptchaServiceImpl implements CaptchaService { + /** + * Logger zdarzeń. + */ + private static final Logger logger = LoggerFactory.getLogger(CaptchaServiceImpl.class); + + @Value("${captcha.secret}") + private String secret; + + @Value("${captcha.url}") + private String url; + + @Value("${captcha.timeout}") + private Integer timeout; + + @Override + public boolean isCaptchaValid(final String captcha) { + if (StringUtils.isEmpty(captcha)) + return false; + final String urlWithParams = createUrlWithParams(captcha); + try { + final String respons = + Request.Get(urlWithParams).connectTimeout(timeout).socketTimeout(timeout).execute().returnContent() + .asString(); + ObjectMapper mapper = new ObjectMapper(); + final Map map = mapper.readValue(respons, Map.class); + return (boolean) map.get("success"); + } + catch (final IOException e) { + logger.warn("Wystąpił błąd podczas potwierdzenia captcha", e); + return true; + } + } + + /** + * Tworzy adres z parametrami. + * + * @param captcha captcha użytkownika. + * + * @return adres z parametrami. + */ + private String createUrlWithParams(final String captcha) { + final StringBuilder urlWithParams = new StringBuilder(); + urlWithParams.append(url); + urlWithParams.append("?secret="); + urlWithParams.append(secret); + urlWithParams.append("&response="); + urlWithParams.append(captcha); + return urlWithParams.toString(); + } +} + diff --git a/registration/registration-form/src/main/java/eu/mooseinc/dell/form/service/impl/MailServiceImpl.java b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/service/impl/MailServiceImpl.java new file mode 100644 index 0000000..04a761c --- /dev/null +++ b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/service/impl/MailServiceImpl.java @@ -0,0 +1,109 @@ +/********************************************************************************************************************************* + * Autorskie Prawa Majątkowe - Moose Spółka z ograniczoną odpowiedzialnością + * + * Copyright 2017 Moose Spółka z ograniczoną odpowiedzialnością + ********************************************************************************************************************************/ + +package eu.mooseinc.dell.form.service.impl; + +import com.google.common.base.Preconditions; +import eu.mooseinc.dell.form.exception.ServiceException; +import eu.mooseinc.dell.form.model.Attachment; +import eu.mooseinc.dell.form.service.MailService; +import java.io.File; +import java.util.List; +import javax.mail.MessagingException; +import javax.mail.internet.MimeMessage; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.mail.javamail.JavaMailSender; +import org.springframework.mail.javamail.MimeMessageHelper; +import org.springframework.stereotype.Service; + +/** + * Email Service implementation + */ +@Service +public class MailServiceImpl implements MailService { + /** + * legger + */ + private static final Logger logger = LoggerFactory.getLogger(MailServiceImpl.class); + /** + * codding standard for e-mail. + */ + private static final String ENCODING = "UTF-8"; + + /** + * Email sender address + */ + @Value("${mail.from}") + private String from; + + @Autowired + @Qualifier("mailSender") + private JavaMailSender mailSender; + + @Override + public void send(String[] to, String subject, String text, List attachments) throws ServiceException { + Preconditions.checkArgument(to != null && to.length > 0); + Preconditions.checkArgument(StringUtils.isNotEmpty(subject)); + Preconditions.checkArgument(StringUtils.isNotEmpty(text)); + Preconditions.checkArgument(attachments != null); + + sendMail(to, null, subject, text, attachments); + } + + @Override + public void send(String[] to, String cc, String subject, String text, List attachments) throws ServiceException { + Preconditions.checkArgument(to != null && to.length > 0); + Preconditions.checkArgument(StringUtils.isNotEmpty(subject)); + Preconditions.checkArgument(StringUtils.isNotEmpty(text)); + + sendMail(to, cc, subject, text, attachments); + } + + /** + * Sending email message + * + * @param to message recipient + * @param cc meessage copy recipient + * @param subject message subject + * @param text message body + * @param attachments list of attachments + * + * @throws ServiceException when ther is a problem with sending email + */ + private void sendMail(String[] to, String cc, String subject, String text, List attachments) + throws ServiceException { + final MimeMessage message = mailSender.createMimeMessage(); + + try { + final MimeMessageHelper helper = new MimeMessageHelper(message, true, ENCODING); + helper.setTo(to); + helper.setFrom(from); + helper.setSubject(subject); + helper.setText(text, true); + if (StringUtils.isNotEmpty(cc)) + helper.setCc(cc); + + if (attachments != null) { + for (final Attachment attachment : attachments) { + final File file = new File(attachment.getFilePath()); + helper.addAttachment(attachment.getFileName(), file); + } + } + + } + catch (final MessagingException e) { + logger.error("Wystąpił błąd podczas tworzenia wiadomości", e); + throw new ServiceException("Wystąpił błąd podczas tworzenia wiadomości", e); + } + + mailSender.send(message); + } +} diff --git a/registration/registration-form/src/main/java/eu/mooseinc/dell/form/service/impl/MembershipTypeServiceImpl.java b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/service/impl/MembershipTypeServiceImpl.java new file mode 100644 index 0000000..84e405b --- /dev/null +++ b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/service/impl/MembershipTypeServiceImpl.java @@ -0,0 +1,51 @@ +/********************************************************************************************************************************* + * Autorskie Prawa Majątkowe - Moose Spółka z ograniczoną odpowiedzialnością + * + * Copyright 2017 Moose Spółka z ograniczoną odpowiedzialnością + ********************************************************************************************************************************/ + +package eu.mooseinc.dell.form.service.impl; + +import com.google.common.base.Preconditions; +import eu.mooseinc.dell.form.dao.MembershipTypeDao; +import eu.mooseinc.dell.form.entity.MembershipType; +import eu.mooseinc.dell.form.exception.ObjectNotFoundException; +import eu.mooseinc.dell.form.service.MembershipTypeService; +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +/** + * Membership type service implementation. + */ +@Service +public class MembershipTypeServiceImpl implements MembershipTypeService { + + @Autowired + MembershipTypeDao membershipTypeDao; + + @Override + @Transactional(readOnly = true) + public List getMembershipTypes() { + try { + return membershipTypeDao.getMembershipTypes(); + } + catch (Exception e) { + return null; + } + + } + + @Override + @Transactional(readOnly = true) + public MembershipType findMembershipType(final Long id) { + Preconditions.checkArgument(id != null); + try { + return membershipTypeDao.get(id); + } + catch (ObjectNotFoundException e) { + return null; + } + } +} diff --git a/registration/registration-form/src/main/java/eu/mooseinc/dell/form/service/impl/RegistrationServiceImpl.java b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/service/impl/RegistrationServiceImpl.java new file mode 100644 index 0000000..d27c0e3 --- /dev/null +++ b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/service/impl/RegistrationServiceImpl.java @@ -0,0 +1,91 @@ +/********************************************************************************************************************************* + * Autorskie Prawa Majątkowe - Moose Spółka z ograniczoną odpowiedzialnością + * + * Copyright 2017 Moose Spółka z ograniczoną odpowiedzialnością + ********************************************************************************************************************************/ + +package eu.mooseinc.dell.form.service.impl; + +import com.google.common.base.Preconditions; +import eu.mooseinc.dell.form.entity.Registration; +import eu.mooseinc.dell.form.exception.ObjectNotFoundException; +import eu.mooseinc.dell.form.exception.ServiceException; +import eu.mooseinc.dell.form.service.MailService; +import eu.mooseinc.dell.form.service.RegistrationService; +import java.util.Arrays; +import java.util.Date; +import java.util.HashSet; +import java.util.Set; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.thymeleaf.TemplateEngine; +import org.thymeleaf.context.Context; + +/** + * Implementation of registration service. + */ +@Service +public class RegistrationServiceImpl implements RegistrationService { + /** + * E-mail message template. + */ + private static final String MAIL_FORM_TEMPLATE = "mailForm.html"; + + @Autowired + private MailService mailService; + + @Value("${mail.recipients}") + private String recipients; + + @Value("${mail.title:'Thank you for your registration with the International Code of Conduct Association.'}") + private String emailTitle; + + @Autowired + @Qualifier("emailTemplateEngine") + private TemplateEngine templateEngine; + + @Override + @Transactional(rollbackFor = {ObjectNotFoundException.class, ServiceException.class}) + public Registration sendRegistration(final Registration registration) + throws ObjectNotFoundException, ServiceException { + Preconditions.checkArgument(registration != null); + + final Set recipientEmails = new HashSet<>(); + recipientEmails.addAll(Arrays.asList(recipients.split(","))); + String[] emails = recipientEmails.toArray(new String[recipientEmails.size()]); + final String cc = registration.getEmail(); + registration.setRegistrationDate(new Date()); + final String content = getMailContent(registration); + final String subject = emailTitle; + mailService.send(emails, cc, subject, content, null); + + + return null; + } + + + /** + * Compiled message body. + * + * @param registration registration data. + * + * @return treść wiadomości. + */ + private String getMailContent(final Registration registration) { + final Context ctx = new Context(); + + ctx.setVariable("fullName", registration.getName() + " " + registration.getSurname()); + ctx.setVariable("entityName", registration.getEntityName()); + ctx.setVariable("name", registration.getName()); + ctx.setVariable("surname", registration.getSurname()); + ctx.setVariable("email", registration.getEmail()); + ctx.setVariable("membershipType", registration.getMembershipType().getRegistrationMembership()); + ctx.setVariable("message", registration.getMessage()); + ctx.setVariable("registrationDate", registration.getRegistrationDate()); + + return templateEngine.process(MAIL_FORM_TEMPLATE, ctx); + } +} diff --git a/registration/registration-form/src/main/java/eu/mooseinc/dell/form/service/impl/TemporaryDirectoryService.java b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/service/impl/TemporaryDirectoryService.java new file mode 100644 index 0000000..b7b2cf1 --- /dev/null +++ b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/service/impl/TemporaryDirectoryService.java @@ -0,0 +1,43 @@ +/********************************************************************************************************************************* + * Autorskie Prawa Majątkowe - Moose Spółka z ograniczoną odpowiedzialnością + * + * Copyright 2017 Moose Spółka z ograniczoną odpowiedzialnością + ********************************************************************************************************************************/ + +package eu.mooseinc.dell.form.service.impl; + +import java.io.File; +import java.io.IOException; +import org.apache.commons.io.FileUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +/** + * Service for temporary files. + */ +@Service +public class TemporaryDirectoryService implements InitializingBean { + private static final Logger logger = LoggerFactory.getLogger(TemporaryDirectoryService.class); + + @Value("${temporary.directory}") + private String tempDir; + + @Override + public void afterPropertiesSet() throws Exception { + cleanTemporaryDirectory(); + } + + /** + * Clear temporary folder. + * + * @throws IOException jeśli wystąpi błąd podczas wczytywania katalogu. + */ + private void cleanTemporaryDirectory() throws IOException { + final File directory = new File(tempDir); + FileUtils.cleanDirectory(directory); + logger.debug("Temporary folder cleared"); + } +} diff --git a/registration/registration-form/src/main/java/eu/mooseinc/dell/form/type/Entity.java b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/type/Entity.java new file mode 100644 index 0000000..c57f576 --- /dev/null +++ b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/type/Entity.java @@ -0,0 +1,37 @@ +/********************************************************************************************************************************* + * Autorskie Prawa Majątkowe - Moose Spółka z ograniczoną odpowiedzialnością + * + * Copyright 2017 Moose Spółka z ograniczoną odpowiedzialnością + ********************************************************************************************************************************/ + +package eu.mooseinc.dell.form.type; + +/** + * Type of entities in system. + */ +public enum Entity { + MEMBERSHIP_TYPE("Membership type"); + + /** + * Constructor. + * + * @param name entity name. + */ + Entity(final String name) { + this.name = name; + } + + /** + * Entity name. + */ + private final String name; + + /** + * ZReturns entity name. + * + * @return entity name. + */ + public String getName() { + return name; + } +} diff --git a/registration/registration-form/src/main/java/eu/mooseinc/dell/form/util/ColumnLengthConstants.java b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/util/ColumnLengthConstants.java new file mode 100644 index 0000000..f100300 --- /dev/null +++ b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/util/ColumnLengthConstants.java @@ -0,0 +1,29 @@ +/********************************************************************************************************************************* + * Autorskie Prawa Majątkowe - Moose Spółka z ograniczoną odpowiedzialnością + * + * Copyright 2017 Moose Spółka z ograniczoną odpowiedzialnością + ********************************************************************************************************************************/ + +package eu.mooseinc.dell.form.util; + +/** + * Max length of fields. + */ +public interface ColumnLengthConstants { + /** + * Defalult lenght of text in database. + */ + int STANDARD_TEXT_LENGTH = 1000; + + /** + * Defalult lenght of short text in database. + */ + int SHORT_TEXT_LENGTH = 120; + + /** + * Email length. + */ + int EMAIL_LENGTH = 60; + + +} diff --git a/registration/registration-form/src/main/java/eu/mooseinc/dell/form/util/FileFormUtils.java b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/util/FileFormUtils.java new file mode 100644 index 0000000..e316c45 --- /dev/null +++ b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/util/FileFormUtils.java @@ -0,0 +1,58 @@ +/********************************************************************************************************************************* + * Autorskie Prawa Majątkowe - Moose Spółka z ograniczoną odpowiedzialnością + * + * Copyright 2017 Moose Spółka z ograniczoną odpowiedzialnością + ********************************************************************************************************************************/ + +package eu.mooseinc.dell.form.util; + +import com.google.common.base.Preconditions; +import java.io.File; +import java.io.IOException; +import java.nio.file.FileSystems; +import org.apache.commons.io.FileUtils; +import org.apache.commons.lang3.StringUtils; + +/** + * Klasa pomocnicza dla plików. + */ +public class FileFormUtils { + /** + * Konstruktor prywatny. + */ + private FileFormUtils() { + } + + /** + * Pobiera ścieżkę katalogu tymczasowego sesji. + * + * @param temporaryDirectory katalog tymczasowy. + * @param sessionId identyfikator sesji. + * + * @return ścieżka katalogu tymczasowego. + */ + public static String getSessionDirectoryName(final String temporaryDirectory, final String sessionId) { + Preconditions.checkArgument(StringUtils.isNotEmpty(temporaryDirectory)); + Preconditions.checkArgument(StringUtils.isNotEmpty(sessionId)); + + final StringBuilder directoryName = new StringBuilder(temporaryDirectory); + directoryName.append(FileSystems.getDefault().getSeparator()); + directoryName.append(sessionId); + + return directoryName.toString(); + } + + + /** + * Czyści katalog tymczasowy sesji. + * + * @param directoryName katalog tymczasowy. + * + * @throws IOException jeśli wystąpi błąd podczas czyszczenia katalogu. + */ + public static void cleanSessionDirectory(final String directoryName) throws IOException { + final File directory = new File(directoryName); + FileUtils.cleanDirectory(directory); + } + +} diff --git a/registration/registration-form/src/main/java/eu/mooseinc/dell/form/web/controller/ConfirmationController.java b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/web/controller/ConfirmationController.java new file mode 100644 index 0000000..bb476a4 --- /dev/null +++ b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/web/controller/ConfirmationController.java @@ -0,0 +1,30 @@ +/********************************************************************************************************************************* + * Autorskie Prawa Majątkowe - Moose Spółka z ograniczoną odpowiedzialnością + * + * Copyright 2017 Moose Spółka z ograniczoną odpowiedzialnością + ********************************************************************************************************************************/ + +package eu.mooseinc.dell.form.web.controller; + +import java.io.Serializable; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + +/** + * Confirmation controller. + */ +@Controller +@Scope("session") +public class ConfirmationController implements Serializable { + /** + * Returns confirmation view. + * + * @return confirmation view. + */ + @RequestMapping(value = "confirmation", method = RequestMethod.GET) + public String showConfirmation() { + return "confirmation"; + } +} diff --git a/registration/registration-form/src/main/java/eu/mooseinc/dell/form/web/controller/RegistrationFormController.java b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/web/controller/RegistrationFormController.java new file mode 100644 index 0000000..202e207 --- /dev/null +++ b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/web/controller/RegistrationFormController.java @@ -0,0 +1,173 @@ +/********************************************************************************************************************************* + * Autorskie Prawa Majątkowe - Moose Spółka z ograniczoną odpowiedzialnością + * + * Copyright 2017 Moose Spółka z ograniczoną odpowiedzialnością + ********************************************************************************************************************************/ + +package eu.mooseinc.dell.form.web.controller; + +import eu.mooseinc.dell.form.entity.MembershipType; +import eu.mooseinc.dell.form.entity.Registration; +import eu.mooseinc.dell.form.service.CaptchaService; +import eu.mooseinc.dell.form.service.MembershipTypeService; +import eu.mooseinc.dell.form.service.RegistrationService; +import eu.mooseinc.dell.form.util.FileFormUtils; +import java.io.File; +import java.io.IOException; +import java.io.Serializable; +import java.util.List; +import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; +import javax.servlet.http.HttpSession; +import javax.validation.Valid; +import org.apache.commons.io.FileUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.servlet.mvc.support.RedirectAttributes; + +/** + * Registration form controller. + */ +@Controller +@Scope("session") +public class RegistrationFormController implements Serializable { + private static final Logger logger = LoggerFactory.getLogger(RegistrationFormController.class); + + @Autowired + private RegistrationService registrationService; + + @Autowired + private MembershipTypeService membershipTypeService; + + @Autowired + private CaptchaService captchaService; + + @Autowired + private HttpSession session; + + @Value("${temporary.directory}") + private String tempDir; + + @Value("${captcha.site_key}") + private String captchaSiteKey; + + /** + * Session directory. + */ + private String sessionDirectoryName; + + /** + * Constructor. + */ + public RegistrationFormController() { + super(); + } + + /** + * Initiation method for controller. + */ + @PostConstruct + public void init() { + this.sessionDirectoryName = FileFormUtils.getSessionDirectoryName(tempDir, session.getId()); + createSessionDirectory(); + } + + /** + * Method called before controller destroyed. + */ + @PreDestroy + public void close() { + deleteSessionDirectory(); + } + + /** + * Returns list of membership types. + * + * @return list of membership types. + */ + @ModelAttribute("allMembershipTypes") + public List getAllMembershipTypes() { + return membershipTypeService.getMembershipTypes(); + } + + @ModelAttribute("siteKey") + public String getSiteKey() { + return captchaSiteKey; + } + + + /** + * Shows registration form. + * + * @param registration wregistration model. + * + * @return registration form view. + */ + @RequestMapping(value = {"/", "registrationForm"}, method = RequestMethod.GET) + public String showContactForm(final Registration registration, final Model model) throws Exception { + model.addAttribute("captcha", true); + FileFormUtils.cleanSessionDirectory(sessionDirectoryName); + return "registrationForm"; + } + + /** + * On sending registration data. + * + * @param registration registration data. + * @param bindingResult response resoult. + * + * @return confirmation view. + */ + @RequestMapping(value = "/", method = RequestMethod.POST, params = {"send"}) + public String sendMessage(final @Valid Registration registration, + final @RequestParam(name = "g-recaptcha-response") String captcha, + final BindingResult bindingResult, + final RedirectAttributes attributes, final Model model) throws Exception { + if (bindingResult.hasErrors()) + return "registrationForm"; + final boolean valid = captchaService.isCaptchaValid(captcha); + if (!valid) { + model.addAttribute("captcha", false); + return "notificationForm"; + } + registrationService.sendRegistration(registration); + FileFormUtils.cleanSessionDirectory(sessionDirectoryName); + return "redirect:/confirmation"; + } + + /** + * Creates session directory. + */ + private void createSessionDirectory() { + try { + final File sessionDirectory = new File(sessionDirectoryName); + FileUtils.forceMkdir(sessionDirectory); + } + catch (final IOException e) { + logger.error("Error with creating session directory", e); + } + } + + /** + * Usuwa katalog sesji. + */ + private void deleteSessionDirectory() { + try { + final File sessionDirectory = new File(sessionDirectoryName); + FileUtils.deleteDirectory(sessionDirectory); + } + catch (final IOException e) { + logger.error("Error with removing session directory", e); + } + } +} diff --git a/registration/registration-form/src/main/java/eu/mooseinc/dell/form/web/conversion/DateFormatter.java b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/web/conversion/DateFormatter.java new file mode 100644 index 0000000..4d69bdf --- /dev/null +++ b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/web/conversion/DateFormatter.java @@ -0,0 +1,39 @@ +/********************************************************************************************************************************* + * Autorskie Prawa Majątkowe - Moose Spółka z ograniczoną odpowiedzialnością + * + * Copyright 2017 Moose Spółka z ograniczoną odpowiedzialnością + ********************************************************************************************************************************/ + +package eu.mooseinc.dell.form.web.conversion; + +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; +import org.springframework.format.Formatter; +import org.springframework.stereotype.Component; + +/** + * Date formatter + */ +@Component +public class DateFormatter implements Formatter { + /** + * Date format. + */ + private static final String DATE_FORMAT = "dd-MM-yyyy"; + + @Override + public Date parse(String text, Locale locale) throws ParseException { + final DateFormat format = new SimpleDateFormat(DATE_FORMAT); + return format.parse(text); + } + + @Override + public String print(Date object, Locale locale) { + final DateFormat format = new SimpleDateFormat(DATE_FORMAT); + format.setLenient(false); + return format.format(object); + } +} diff --git a/registration/registration-form/src/main/java/eu/mooseinc/dell/form/web/conversion/MembershipTypeFormatter.java b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/web/conversion/MembershipTypeFormatter.java new file mode 100644 index 0000000..5d9ffb8 --- /dev/null +++ b/registration/registration-form/src/main/java/eu/mooseinc/dell/form/web/conversion/MembershipTypeFormatter.java @@ -0,0 +1,37 @@ +/********************************************************************************************************************************* + * Autorskie Prawa Majątkowe - Moose Spółka z ograniczoną odpowiedzialnością + * + * Copyright 2017 Moose Spółka z ograniczoną odpowiedzialnością + ********************************************************************************************************************************/ + +package eu.mooseinc.dell.form.web.conversion; + +import eu.mooseinc.dell.form.entity.MembershipType; +import eu.mooseinc.dell.form.service.MembershipTypeService; +import java.text.ParseException; +import java.util.Locale; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.format.Formatter; +import org.springframework.stereotype.Component; + +/** + * Formatter for Membership Type + */ +@Component +public class MembershipTypeFormatter implements Formatter { + + @Autowired + private MembershipTypeService membershipTypeService; + + @Override + public MembershipType parse(String text, Locale locale) throws ParseException { + final Long marketSegmentId = Long.valueOf(text); + return membershipTypeService.findMembershipType(marketSegmentId); + } + + @Override + public String print(MembershipType membershipType, Locale locale) { + return membershipType != null ? membershipType.getId().toString() : StringUtils.EMPTY; + } +} diff --git a/registration/registration-form/src/main/resources/ValidationMessages.properties b/registration/registration-form/src/main/resources/ValidationMessages.properties new file mode 100644 index 0000000..5a43ca4 --- /dev/null +++ b/registration/registration-form/src/main/resources/ValidationMessages.properties @@ -0,0 +1,24 @@ +################################################################################################################################## +# Autorskie Prawa Maj\u0105tkowe - Moose Sp\u00F3\u0142ka z ograniczon\u0105 odpowiedzialno\u015Bci\u0105 +# +# Copyright 2017 Moose Sp\u00F3\u0142ka z ograniczon\u0105 odpowiedzialno\u015Bci\u0105 +################################################################################################################################## + +registration.entityName.required=Nazwa firmy zg\u0142aszaj\u0105cej jest wymagane +registration.entityName.size=D\u0142ugo\u015B\u0107 pola Nazwa firmy zg\u0142aszaj\u0105cej musi znajdowa\u0107 si\u0119 w przedziale pomi\u0119dzy {min} a {max} +registration.name.required=Imi\u0119 i nazwisko jest wymagane +registration.name.size=D\u0142ugo\u015B\u0107 pola Imi\u0119 i nazwisko musi znajdowa\u0107 si\u0119 w przedziale pomi\u0119dzy {min} a {max} +registration.surname.required=Imi\u0119 i nazwisko jest wymagane +registration.surname.size=D\u0142ugo\u015B\u0107 pola Imi\u0119 i nazwisko musi znajdowa\u0107 si\u0119 w przedziale pomi\u0119dzy {min} a {max} +registration.email.required=Adres e-mail jest wymagany +registration.email.size=D\u0142ugo\u015B\u0107 pola Adres e-mail musi znajdowa\u0107 si\u0119 w przedziale pomi\u0119dzy {min} a {max} +registration.phone.required=Telefon kontaktowy jest wymagany +registration.phone.size=D\u0142ugo\u015B\u0107 pola Telefon kontaktowy musi znajdowa\u0107 si\u0119 w przedziale pomi\u0119dzy {min} a {max} +registration.clientName.required=Nazwa klienta ko\u0144cowego jest wymagana +registration.clientName.size=D\u0142ugo\u015B\u0107 pola Nazwa klienta ko\u0144cowego musi znajdowa\u0107 si\u0119 w przedziale pomi\u0119dzy {min} a {max} +registration.marketSegment.required=Segment rynku jest wymagany +registration.proceedingDate.required=Data sk\u0142adania post\u0119powania jest wymagana +registration.questionDate.required=Data ostatecznego zadawania pyta\u0144 jest wymagana +registration.proceedingLink.required=Pole Link do post\u0119powania jest wymagane +registration.proceedingLink.size=D\u0142ugo\u015B\u0107 pola Link do post\u0119powania musi znajdowa\u0107 si\u0119 w przedziale pomi\u0119dzy {min} a {max} +registration.message.size=D\u0142ugo\u015B\u0107 pola Uwagi musi znajdowa\u0107 si\u0119 w przedziale pomi\u0119dzy {min} a {max} \ No newline at end of file diff --git a/registration/registration-form/src/main/resources/default.properties b/registration/registration-form/src/main/resources/default.properties new file mode 100644 index 0000000..76d9dfd --- /dev/null +++ b/registration/registration-form/src/main/resources/default.properties @@ -0,0 +1,18 @@ +################################################################################################################################## +# Autorskie Prawa Majątkowe - Moose Spółka z ograniczoną odpowiedzialnością +# +# Copyright 2017 Moose Spółka z ograniczoną odpowiedzialnością +################################################################################################################################## + +database.connection.max_active = 30 +database.connection.max_idle = 15 +database.connection.min_idle = 5 +database.connection.initial_size = 5 +database.connection.max_wait = 60000 +database.hibernate.show_sql = false +database.hibernate.default_schema=public + +captcha.site_key=6Lc6CTwUAAAAAD_lAkSjZWv3SJR-VHWiRHmCRYYK +captcha.secret=6Lc6CTwUAAAAADfghUpCi0i_-Ra_9nNoXktlsEtY +captcha.url=https://www.google.com/recaptcha/api/siteverify +captcha.timeout=60 \ No newline at end of file diff --git a/registration/registration-form/src/main/resources/embedded/tomcat-context.xml b/registration/registration-form/src/main/resources/embedded/tomcat-context.xml new file mode 100644 index 0000000..341bd81 --- /dev/null +++ b/registration/registration-form/src/main/resources/embedded/tomcat-context.xml @@ -0,0 +1,10 @@ + + + + WEB-INF/web.xml + + \ No newline at end of file diff --git a/registration/registration-form/src/main/resources/log4j.properties b/registration/registration-form/src/main/resources/log4j.properties new file mode 100644 index 0000000..b4e1dae --- /dev/null +++ b/registration/registration-form/src/main/resources/log4j.properties @@ -0,0 +1,14 @@ +################################################################################################################################## +# Autorskie Prawa Majątkowe - Moose Spółka z ograniczoną odpowiedzialnością +# +# Copyright 2017 Moose Spółka z ograniczoną odpowiedzialnością +################################################################################################################################## + +# Root logger option +log4j.rootLogger=WARN, stdout + +# Direct log messages to stdout +log4j.appender.stdout=org.apache.log4j.ConsoleAppender +log4j.appender.stdout.Target=System.out +log4j.appender.stdout.layout=org.apache.log4j.PatternLayout +log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n \ No newline at end of file diff --git a/registration/registration-form/src/main/resources/logback.xml b/registration/registration-form/src/main/resources/logback.xml new file mode 100644 index 0000000..aecc68b --- /dev/null +++ b/registration/registration-form/src/main/resources/logback.xml @@ -0,0 +1,21 @@ + + + + + true + + + + + %-5level %d{yyyy-MM-dd HH:mm:ss.SSS} %logger{50} %msg%n + + + + + + + \ No newline at end of file diff --git a/registration/registration-form/src/main/resources/spring/beans.xml b/registration/registration-form/src/main/resources/spring/beans.xml new file mode 100644 index 0000000..f55b28c --- /dev/null +++ b/registration/registration-form/src/main/resources/spring/beans.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/registration/registration-form/src/main/resources/spring/configuration.xml b/registration/registration-form/src/main/resources/spring/configuration.xml new file mode 100644 index 0000000..986a90a --- /dev/null +++ b/registration/registration-form/src/main/resources/spring/configuration.xml @@ -0,0 +1,22 @@ + + + + + + + classpath:default.properties + + + + + + + + \ No newline at end of file diff --git a/registration/registration-form/src/main/resources/spring/context.xml b/registration/registration-form/src/main/resources/spring/context.xml new file mode 100644 index 0000000..83e7d3a --- /dev/null +++ b/registration/registration-form/src/main/resources/spring/context.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/registration/registration-form/src/main/resources/spring/job.xml b/registration/registration-form/src/main/resources/spring/job.xml new file mode 100644 index 0000000..7c09bf2 --- /dev/null +++ b/registration/registration-form/src/main/resources/spring/job.xml @@ -0,0 +1,17 @@ + + + + + + + \ No newline at end of file diff --git a/registration/registration-form/src/main/resources/spring/mail.xml b/registration/registration-form/src/main/resources/spring/mail.xml new file mode 100644 index 0000000..7a0380b --- /dev/null +++ b/registration/registration-form/src/main/resources/spring/mail.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + 30000 + 30000 + 30000 + true + ${mail.use_tls} + ${mail.from} + + + + \ No newline at end of file diff --git a/registration/registration-form/src/main/resources/spring/orm.xml b/registration/registration-form/src/main/resources/spring/orm.xml new file mode 100644 index 0000000..ced672c --- /dev/null +++ b/registration/registration-form/src/main/resources/spring/orm.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + ${database.hibernate.dialect} + ${database.hibernate.show_sql} + validate + 0 + true + ${database.hibernate.default_schema} + + + + + + + + + + eu.mooseinc.dell.form.entity + + + + + + + + + + \ No newline at end of file diff --git a/registration/registration-form/src/main/resources/spring/thymeleaf.xml b/registration/registration-form/src/main/resources/spring/thymeleaf.xml new file mode 100644 index 0000000..d65d32a --- /dev/null +++ b/registration/registration-form/src/main/resources/spring/thymeleaf.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/registration/registration-form/src/main/resources/template/mailForm.html b/registration/registration-form/src/main/resources/template/mailForm.html new file mode 100644 index 0000000..c63ad42 --- /dev/null +++ b/registration/registration-form/src/main/resources/template/mailForm.html @@ -0,0 +1,54 @@ + + + + + + Template for HTML email + + + + +
+
+ Thank you for your registration with the International Code of Conduct Association. +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Entity name:entityName
First name:name
Last name:surname
E-mail:email
Entity is seeking:membershipType
Registration date:registrationDate
Message:message
+
+
+ + \ No newline at end of file diff --git a/registration/registration-form/src/main/webapp/META-INF/context.xml b/registration/registration-form/src/main/webapp/META-INF/context.xml new file mode 100644 index 0000000..ed8b955 --- /dev/null +++ b/registration/registration-form/src/main/webapp/META-INF/context.xml @@ -0,0 +1,5 @@ + + + WEB-INF/web.xml + + diff --git a/registration/registration-form/src/main/webapp/WEB-INF/spring-servlet.xml b/registration/registration-form/src/main/webapp/WEB-INF/spring-servlet.xml new file mode 100644 index 0000000..3c5901d --- /dev/null +++ b/registration/registration-form/src/main/webapp/WEB-INF/spring-servlet.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/registration/registration-form/src/main/webapp/WEB-INF/view/confirmation.html b/registration/registration-form/src/main/webapp/WEB-INF/view/confirmation.html new file mode 100644 index 0000000..4700d02 --- /dev/null +++ b/registration/registration-form/src/main/webapp/WEB-INF/view/confirmation.html @@ -0,0 +1,39 @@ + + + + + + + Registration form + + + + + + + +
+ +
+

Thank you for your registration.

+

+ Your message was sent to the International Code of Conduct Association. +

+ Return to ICoCA Website +
+
+ + + + + + \ No newline at end of file diff --git a/registration/registration-form/src/main/webapp/WEB-INF/view/error.html b/registration/registration-form/src/main/webapp/WEB-INF/view/error.html new file mode 100644 index 0000000..a4a203f --- /dev/null +++ b/registration/registration-form/src/main/webapp/WEB-INF/view/error.html @@ -0,0 +1,33 @@ + + + + + + + Formularz kontaktowy + + + + + + +
+
+

Oops!

+

An error occurred in the application. Please contact with administrator.

+ Spróbuj ponownie +
+
+ + + + + + \ No newline at end of file diff --git a/registration/registration-form/src/main/webapp/WEB-INF/view/registrationForm.html b/registration/registration-form/src/main/webapp/WEB-INF/view/registrationForm.html new file mode 100644 index 0000000..5512b8e --- /dev/null +++ b/registration/registration-form/src/main/webapp/WEB-INF/view/registrationForm.html @@ -0,0 +1,183 @@ + + + + + + + + Registration form + + + + + + + + +
+ + + + + +
+ +
+
+ + +
+ +
+
+
+
+ + + +
+ +
+
+ + +
+ +
+
+
+
+ + +
+ +
+
+ + +
+ +
+
+
+
+ + +
+ +
+
+ + +
+ +
+
+
+
+ + + +
+ +
+
+ + +
+ +
+
+
+
+ + + +
+ +
+
+ + + +
+
+
+
+ + +
+ +
+
+
+ +
+
+
I'm not a robot
+
+
+ + +
+
+ +
+
+ +
+ + + + + + + + + + + + + + \ No newline at end of file diff --git a/registration/registration-form/src/main/webapp/WEB-INF/web.xml b/registration/registration-form/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..fb25fee --- /dev/null +++ b/registration/registration-form/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,15 @@ + + + + + spring + org.springframework.web.servlet.DispatcherServlet + 1 + + + + spring + / + + \ No newline at end of file diff --git a/registration/registration-form/src/main/webapp/resources/css/bootstrap-datepicker3.min.css b/registration/registration-form/src/main/webapp/resources/css/bootstrap-datepicker3.min.css new file mode 100644 index 0000000..897f246 --- /dev/null +++ b/registration/registration-form/src/main/webapp/resources/css/bootstrap-datepicker3.min.css @@ -0,0 +1,9 @@ +/*! + * Datepicker for Bootstrap v1.6.4 (https://github.com/eternicode/bootstrap-datepicker) + * + * Copyright 2012 Stefan Petre + * Improvements by Andrew Rowls + * Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) + */ +.datepicker{border-radius:4px;direction:ltr}.datepicker-inline{width:220px}.datepicker.datepicker-rtl{direction:rtl}.datepicker.datepicker-rtl table tr td span{float:right}.datepicker-dropdown{top:0;left:0;padding:4px}.datepicker-dropdown:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid rgba(0,0,0,.15);border-top:0;border-bottom-color:rgba(0,0,0,.2);position:absolute}.datepicker-dropdown:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;border-top:0;position:absolute}.datepicker-dropdown.datepicker-orient-left:before{left:6px}.datepicker-dropdown.datepicker-orient-left:after{left:7px}.datepicker-dropdown.datepicker-orient-right:before{right:6px}.datepicker-dropdown.datepicker-orient-right:after{right:7px}.datepicker-dropdown.datepicker-orient-bottom:before{top:-7px}.datepicker-dropdown.datepicker-orient-bottom:after{top:-6px}.datepicker-dropdown.datepicker-orient-top:before{bottom:-7px;border-bottom:0;border-top:7px solid rgba(0,0,0,.15)}.datepicker-dropdown.datepicker-orient-top:after{bottom:-6px;border-bottom:0;border-top:6px solid #fff}.datepicker table{margin:0;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.datepicker table tr td,.datepicker table tr th{text-align:center;width:30px;height:30px;border-radius:4px;border:none}.table-striped .datepicker table tr td,.table-striped .datepicker table tr th{background-color:transparent}.datepicker table tr td.new,.datepicker table tr td.old{color:#777}.datepicker table tr td.day:hover,.datepicker table tr td.focused{background:#eee;cursor:pointer}.datepicker table tr td.disabled,.datepicker table tr td.disabled:hover{background:0 0;color:#777;cursor:default}.datepicker table tr td.highlighted{color:#000;background-color:#d9edf7;border-color:#85c5e5;border-radius:0}.datepicker table tr td.highlighted.focus,.datepicker table tr td.highlighted:focus{color:#000;background-color:#afd9ee;border-color:#298fc2}.datepicker table tr td.highlighted:hover{color:#000;background-color:#afd9ee;border-color:#52addb}.datepicker table tr td.highlighted.active,.datepicker table tr td.highlighted:active{color:#000;background-color:#afd9ee;border-color:#52addb}.datepicker table tr td.highlighted.active.focus,.datepicker table tr td.highlighted.active:focus,.datepicker table tr td.highlighted.active:hover,.datepicker table tr td.highlighted:active.focus,.datepicker table tr td.highlighted:active:focus,.datepicker table tr td.highlighted:active:hover{color:#000;background-color:#91cbe8;border-color:#298fc2}.datepicker table tr td.highlighted.disabled.focus,.datepicker table tr td.highlighted.disabled:focus,.datepicker table tr td.highlighted.disabled:hover,.datepicker table tr td.highlighted[disabled].focus,.datepicker table tr td.highlighted[disabled]:focus,.datepicker table tr td.highlighted[disabled]:hover,fieldset[disabled] .datepicker table tr td.highlighted.focus,fieldset[disabled] .datepicker table tr td.highlighted:focus,fieldset[disabled] .datepicker table tr td.highlighted:hover{background-color:#d9edf7;border-color:#85c5e5}.datepicker table tr td.highlighted.focused{background:#afd9ee}.datepicker table tr td.highlighted.disabled,.datepicker table tr td.highlighted.disabled:active{background:#d9edf7;color:#777}.datepicker table tr td.today{color:#000;background-color:#ffdb99;border-color:#ffb733}.datepicker table tr td.today.focus,.datepicker table tr td.today:focus{color:#000;background-color:#ffc966;border-color:#b37400}.datepicker table tr td.today:hover{color:#000;background-color:#ffc966;border-color:#f59e00}.datepicker table tr td.today.active,.datepicker table tr td.today:active{color:#000;background-color:#ffc966;border-color:#f59e00}.datepicker table tr td.today.active.focus,.datepicker table tr td.today.active:focus,.datepicker table tr td.today.active:hover,.datepicker table tr td.today:active.focus,.datepicker table tr td.today:active:focus,.datepicker table tr td.today:active:hover{color:#000;background-color:#ffbc42;border-color:#b37400}.datepicker table tr td.today.disabled.focus,.datepicker table tr td.today.disabled:focus,.datepicker table tr td.today.disabled:hover,.datepicker table tr td.today[disabled].focus,.datepicker table tr td.today[disabled]:focus,.datepicker table tr td.today[disabled]:hover,fieldset[disabled] .datepicker table tr td.today.focus,fieldset[disabled] .datepicker table tr td.today:focus,fieldset[disabled] .datepicker table tr td.today:hover{background-color:#ffdb99;border-color:#ffb733}.datepicker table tr td.today.focused{background:#ffc966}.datepicker table tr td.today.disabled,.datepicker table tr td.today.disabled:active{background:#ffdb99;color:#777}.datepicker table tr td.range{color:#000;background-color:#eee;border-color:#bbb;border-radius:0}.datepicker table tr td.range.focus,.datepicker table tr td.range:focus{color:#000;background-color:#d5d5d5;border-color:#7c7c7c}.datepicker table tr td.range:hover{color:#000;background-color:#d5d5d5;border-color:#9d9d9d}.datepicker table tr td.range.active,.datepicker table tr td.range:active{color:#000;background-color:#d5d5d5;border-color:#9d9d9d}.datepicker table tr td.range.active.focus,.datepicker table tr td.range.active:focus,.datepicker table tr td.range.active:hover,.datepicker table tr td.range:active.focus,.datepicker table tr td.range:active:focus,.datepicker table tr td.range:active:hover{color:#000;background-color:#c3c3c3;border-color:#7c7c7c}.datepicker table tr td.range.disabled.focus,.datepicker table tr td.range.disabled:focus,.datepicker table tr td.range.disabled:hover,.datepicker table tr td.range[disabled].focus,.datepicker table tr td.range[disabled]:focus,.datepicker table tr td.range[disabled]:hover,fieldset[disabled] .datepicker table tr td.range.focus,fieldset[disabled] .datepicker table tr td.range:focus,fieldset[disabled] .datepicker table tr td.range:hover{background-color:#eee;border-color:#bbb}.datepicker table tr td.range.focused{background:#d5d5d5}.datepicker table tr td.range.disabled,.datepicker table tr td.range.disabled:active{background:#eee;color:#777}.datepicker table tr td.range.highlighted{color:#000;background-color:#e4eef3;border-color:#9dc1d3}.datepicker table tr td.range.highlighted.focus,.datepicker table tr td.range.highlighted:focus{color:#000;background-color:#c1d7e3;border-color:#4b88a6}.datepicker table tr td.range.highlighted:hover{color:#000;background-color:#c1d7e3;border-color:#73a6c0}.datepicker table tr td.range.highlighted.active,.datepicker table tr td.range.highlighted:active{color:#000;background-color:#c1d7e3;border-color:#73a6c0}.datepicker table tr td.range.highlighted.active.focus,.datepicker table tr td.range.highlighted.active:focus,.datepicker table tr td.range.highlighted.active:hover,.datepicker table tr td.range.highlighted:active.focus,.datepicker table tr td.range.highlighted:active:focus,.datepicker table tr td.range.highlighted:active:hover{color:#000;background-color:#a8c8d8;border-color:#4b88a6}.datepicker table tr td.range.highlighted.disabled.focus,.datepicker table tr td.range.highlighted.disabled:focus,.datepicker table tr td.range.highlighted.disabled:hover,.datepicker table tr td.range.highlighted[disabled].focus,.datepicker table tr td.range.highlighted[disabled]:focus,.datepicker table tr td.range.highlighted[disabled]:hover,fieldset[disabled] .datepicker table tr td.range.highlighted.focus,fieldset[disabled] .datepicker table tr td.range.highlighted:focus,fieldset[disabled] .datepicker table tr td.range.highlighted:hover{background-color:#e4eef3;border-color:#9dc1d3}.datepicker table tr td.range.highlighted.focused{background:#c1d7e3}.datepicker table tr td.range.highlighted.disabled,.datepicker table tr td.range.highlighted.disabled:active{background:#e4eef3;color:#777}.datepicker table tr td.range.today{color:#000;background-color:#f7ca77;border-color:#f1a417}.datepicker table tr td.range.today.focus,.datepicker table tr td.range.today:focus{color:#000;background-color:#f4b747;border-color:#815608}.datepicker table tr td.range.today:hover{color:#000;background-color:#f4b747;border-color:#bf800c}.datepicker table tr td.range.today.active,.datepicker table tr td.range.today:active{color:#000;background-color:#f4b747;border-color:#bf800c}.datepicker table tr td.range.today.active.focus,.datepicker table tr td.range.today.active:focus,.datepicker table tr td.range.today.active:hover,.datepicker table tr td.range.today:active.focus,.datepicker table tr td.range.today:active:focus,.datepicker table tr td.range.today:active:hover{color:#000;background-color:#f2aa25;border-color:#815608}.datepicker table tr td.range.today.disabled.focus,.datepicker table tr td.range.today.disabled:focus,.datepicker table tr td.range.today.disabled:hover,.datepicker table tr td.range.today[disabled].focus,.datepicker table tr td.range.today[disabled]:focus,.datepicker table tr td.range.today[disabled]:hover,fieldset[disabled] .datepicker table tr td.range.today.focus,fieldset[disabled] .datepicker table tr td.range.today:focus,fieldset[disabled] .datepicker table tr td.range.today:hover{background-color:#f7ca77;border-color:#f1a417}.datepicker table tr td.range.today.disabled,.datepicker table tr td.range.today.disabled:active{background:#f7ca77;color:#777}.datepicker table tr td.selected,.datepicker table tr td.selected.highlighted{color:#fff;background-color:#777;border-color:#555;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.datepicker table tr td.selected.focus,.datepicker table tr td.selected.highlighted.focus,.datepicker table tr td.selected.highlighted:focus,.datepicker table tr td.selected:focus{color:#fff;background-color:#5e5e5e;border-color:#161616}.datepicker table tr td.selected.highlighted:hover,.datepicker table tr td.selected:hover{color:#fff;background-color:#5e5e5e;border-color:#373737}.datepicker table tr td.selected.active,.datepicker table tr td.selected.highlighted.active,.datepicker table tr td.selected.highlighted:active,.datepicker table tr td.selected:active{color:#fff;background-color:#5e5e5e;border-color:#373737}.datepicker table tr td.selected.active.focus,.datepicker table tr td.selected.active:focus,.datepicker table tr td.selected.active:hover,.datepicker table tr td.selected.highlighted.active.focus,.datepicker table tr td.selected.highlighted.active:focus,.datepicker table tr td.selected.highlighted.active:hover,.datepicker table tr td.selected.highlighted:active.focus,.datepicker table tr td.selected.highlighted:active:focus,.datepicker table tr td.selected.highlighted:active:hover,.datepicker table tr td.selected:active.focus,.datepicker table tr td.selected:active:focus,.datepicker table tr td.selected:active:hover{color:#fff;background-color:#4c4c4c;border-color:#161616}.datepicker table tr td.selected.disabled.focus,.datepicker table tr td.selected.disabled:focus,.datepicker table tr td.selected.disabled:hover,.datepicker table tr td.selected.highlighted.disabled.focus,.datepicker table tr td.selected.highlighted.disabled:focus,.datepicker table tr td.selected.highlighted.disabled:hover,.datepicker table tr td.selected.highlighted[disabled].focus,.datepicker table tr td.selected.highlighted[disabled]:focus,.datepicker table tr td.selected.highlighted[disabled]:hover,.datepicker table tr td.selected[disabled].focus,.datepicker table tr td.selected[disabled]:focus,.datepicker table tr td.selected[disabled]:hover,fieldset[disabled] .datepicker table tr td.selected.focus,fieldset[disabled] .datepicker table tr td.selected.highlighted.focus,fieldset[disabled] .datepicker table tr td.selected.highlighted:focus,fieldset[disabled] .datepicker table tr td.selected.highlighted:hover,fieldset[disabled] .datepicker table tr td.selected:focus,fieldset[disabled] .datepicker table tr td.selected:hover{background-color:#777;border-color:#555}.datepicker table tr td.active,.datepicker table tr td.active.highlighted{color:#fff;background-color:#337ab7;border-color:#2e6da4;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.datepicker table tr td.active.focus,.datepicker table tr td.active.highlighted.focus,.datepicker table tr td.active.highlighted:focus,.datepicker table tr td.active:focus{color:#fff;background-color:#286090;border-color:#122b40}.datepicker table tr td.active.highlighted:hover,.datepicker table tr td.active:hover{color:#fff;background-color:#286090;border-color:#204d74}.datepicker table tr td.active.active,.datepicker table tr td.active.highlighted.active,.datepicker table tr td.active.highlighted:active,.datepicker table tr td.active:active{color:#fff;background-color:#286090;border-color:#204d74}.datepicker table tr td.active.active.focus,.datepicker table tr td.active.active:focus,.datepicker table tr td.active.active:hover,.datepicker table tr td.active.highlighted.active.focus,.datepicker table tr td.active.highlighted.active:focus,.datepicker table tr td.active.highlighted.active:hover,.datepicker table tr td.active.highlighted:active.focus,.datepicker table tr td.active.highlighted:active:focus,.datepicker table tr td.active.highlighted:active:hover,.datepicker table tr td.active:active.focus,.datepicker table tr td.active:active:focus,.datepicker table tr td.active:active:hover{color:#fff;background-color:#204d74;border-color:#122b40}.datepicker table tr td.active.disabled.focus,.datepicker table tr td.active.disabled:focus,.datepicker table tr td.active.disabled:hover,.datepicker table tr td.active.highlighted.disabled.focus,.datepicker table tr td.active.highlighted.disabled:focus,.datepicker table tr td.active.highlighted.disabled:hover,.datepicker table tr td.active.highlighted[disabled].focus,.datepicker table tr td.active.highlighted[disabled]:focus,.datepicker table tr td.active.highlighted[disabled]:hover,.datepicker table tr td.active[disabled].focus,.datepicker table tr td.active[disabled]:focus,.datepicker table tr td.active[disabled]:hover,fieldset[disabled] .datepicker table tr td.active.focus,fieldset[disabled] .datepicker table tr td.active.highlighted.focus,fieldset[disabled] .datepicker table tr td.active.highlighted:focus,fieldset[disabled] .datepicker table tr td.active.highlighted:hover,fieldset[disabled] .datepicker table tr td.active:focus,fieldset[disabled] .datepicker table tr td.active:hover{background-color:#337ab7;border-color:#2e6da4}.datepicker table tr td span{display:block;width:23%;height:54px;line-height:54px;float:left;margin:1%;cursor:pointer;border-radius:4px}.datepicker table tr td span.focused,.datepicker table tr td span:hover{background:#eee}.datepicker table tr td span.disabled,.datepicker table tr td span.disabled:hover{background:0 0;color:#777;cursor:default}.datepicker table tr td span.active,.datepicker table tr td span.active.disabled,.datepicker table tr td span.active.disabled:hover,.datepicker table tr td span.active:hover{color:#fff;background-color:#337ab7;border-color:#2e6da4;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.datepicker table tr td span.active.disabled.focus,.datepicker table tr td span.active.disabled:focus,.datepicker table tr td span.active.disabled:hover.focus,.datepicker table tr td span.active.disabled:hover:focus,.datepicker table tr td span.active.focus,.datepicker table tr td span.active:focus,.datepicker table tr td span.active:hover.focus,.datepicker table tr td span.active:hover:focus{color:#fff;background-color:#286090;border-color:#122b40}.datepicker table tr td span.active.disabled:hover,.datepicker table tr td span.active.disabled:hover:hover,.datepicker table tr td span.active:hover,.datepicker table tr td span.active:hover:hover{color:#fff;background-color:#286090;border-color:#204d74}.datepicker table tr td span.active.active,.datepicker table tr td span.active.disabled.active,.datepicker table tr td span.active.disabled:active,.datepicker table tr td span.active.disabled:hover.active,.datepicker table tr td span.active.disabled:hover:active,.datepicker table tr td span.active:active,.datepicker table tr td span.active:hover.active,.datepicker table tr td span.active:hover:active{color:#fff;background-color:#286090;border-color:#204d74}.datepicker table tr td span.active.active.focus,.datepicker table tr td span.active.active:focus,.datepicker table tr td span.active.active:hover,.datepicker table tr td span.active.disabled.active.focus,.datepicker table tr td span.active.disabled.active:focus,.datepicker table tr td span.active.disabled.active:hover,.datepicker table tr td span.active.disabled:active.focus,.datepicker table tr td span.active.disabled:active:focus,.datepicker table tr td span.active.disabled:active:hover,.datepicker table tr td span.active.disabled:hover.active.focus,.datepicker table tr td span.active.disabled:hover.active:focus,.datepicker table tr td span.active.disabled:hover.active:hover,.datepicker table tr td span.active.disabled:hover:active.focus,.datepicker table tr td span.active.disabled:hover:active:focus,.datepicker table tr td span.active.disabled:hover:active:hover,.datepicker table tr td span.active:active.focus,.datepicker table tr td span.active:active:focus,.datepicker table tr td span.active:active:hover,.datepicker table tr td span.active:hover.active.focus,.datepicker table tr td span.active:hover.active:focus,.datepicker table tr td span.active:hover.active:hover,.datepicker table tr td span.active:hover:active.focus,.datepicker table tr td span.active:hover:active:focus,.datepicker table tr td span.active:hover:active:hover{color:#fff;background-color:#204d74;border-color:#122b40}.datepicker table tr td span.active.disabled.disabled.focus,.datepicker table tr td span.active.disabled.disabled:focus,.datepicker table tr td span.active.disabled.disabled:hover,.datepicker table tr td span.active.disabled.focus,.datepicker table tr td span.active.disabled:focus,.datepicker table tr td span.active.disabled:hover,.datepicker table tr td span.active.disabled:hover.disabled.focus,.datepicker table tr td span.active.disabled:hover.disabled:focus,.datepicker table tr td span.active.disabled:hover.disabled:hover,.datepicker table tr td span.active.disabled:hover[disabled].focus,.datepicker table tr td span.active.disabled:hover[disabled]:focus,.datepicker table tr td span.active.disabled:hover[disabled]:hover,.datepicker table tr td span.active.disabled[disabled].focus,.datepicker table tr td span.active.disabled[disabled]:focus,.datepicker table tr td span.active.disabled[disabled]:hover,.datepicker table tr td span.active:hover.disabled.focus,.datepicker table tr td span.active:hover.disabled:focus,.datepicker table tr td span.active:hover.disabled:hover,.datepicker table tr td span.active:hover[disabled].focus,.datepicker table tr td span.active:hover[disabled]:focus,.datepicker table tr td span.active:hover[disabled]:hover,.datepicker table tr td span.active[disabled].focus,.datepicker table tr td span.active[disabled]:focus,.datepicker table tr td span.active[disabled]:hover,fieldset[disabled] .datepicker table tr td span.active.disabled.focus,fieldset[disabled] .datepicker table tr td span.active.disabled:focus,fieldset[disabled] .datepicker table tr td span.active.disabled:hover,fieldset[disabled] .datepicker table tr td span.active.disabled:hover.focus,fieldset[disabled] .datepicker table tr td span.active.disabled:hover:focus,fieldset[disabled] .datepicker table tr td span.active.disabled:hover:hover,fieldset[disabled] .datepicker table tr td span.active.focus,fieldset[disabled] .datepicker table tr td span.active:focus,fieldset[disabled] .datepicker table tr td span.active:hover,fieldset[disabled] .datepicker table tr td span.active:hover.focus,fieldset[disabled] .datepicker table tr td span.active:hover:focus,fieldset[disabled] .datepicker table tr td span.active:hover:hover{background-color:#337ab7;border-color:#2e6da4}.datepicker table tr td span.new,.datepicker table tr td span.old{color:#777}.datepicker .datepicker-switch{width:145px}.datepicker .datepicker-switch,.datepicker .next,.datepicker .prev,.datepicker tfoot tr th{cursor:pointer}.datepicker .datepicker-switch:hover,.datepicker .next:hover,.datepicker .prev:hover,.datepicker tfoot tr th:hover{background:#eee}.datepicker .cw{font-size:10px;width:12px;padding:0 2px 0 5px;vertical-align:middle}.input-group.date .input-group-addon{cursor:pointer}.input-daterange{width:100%}.input-daterange input{text-align:center}.input-daterange input:first-child{border-radius:3px 0 0 3px}.input-daterange input:last-child{border-radius:0 3px 3px 0}.input-daterange .input-group-addon{width:auto;min-width:16px;padding:4px 5px;line-height:1.42857143;text-shadow:0 1px 0 #fff;border-width:1px 0;margin-left:-5px;margin-right:-5px} +/*# sourceMappingURL=bootstrap-datepicker3.min.css.map */ \ No newline at end of file diff --git a/registration/registration-form/src/main/webapp/resources/css/bootstrap.min.css b/registration/registration-form/src/main/webapp/resources/css/bootstrap.min.css new file mode 100644 index 0000000..ed3905e --- /dev/null +++ b/registration/registration-form/src/main/webapp/resources/css/bootstrap.min.css @@ -0,0 +1,6 @@ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.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}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} +/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/registration/registration-form/src/main/webapp/resources/css/style.css b/registration/registration-form/src/main/webapp/resources/css/style.css new file mode 100644 index 0000000..233555b --- /dev/null +++ b/registration/registration-form/src/main/webapp/resources/css/style.css @@ -0,0 +1,73 @@ +.form-title { + color: #337ab7; + font-weight: bold; +} + +.header { + text-align: center; +} + +.glyphicon { + top: 0 !important; +} + +.count-static { + text-align: right; +} + +.input-group-margin { + margin-bottom: 15px; +} + +.resize-off { + resize: none; +} + +.file-row { + margin-bottom: 5px; + padding: 5px !important; +} + +.delete-file { + text-align: right; +} + +.form-group.required .control-label:after { + content:" *"; + color:red; +} + +.file-upload { + margin-bottom: 25px; +} + +.panel-heading { + border-top-left-radius: inherit; + border-top-right-radius: inherit; +} + +.validation-errors { + color: #a94442; +} + +.hidden { + visibility: hidden; + width: 0; +} + +.captcha { + margin-top: 25px; +} + +.textarea { + resize: none; + height: 150px; +} + +.g-recaptcha-left { + padding-left: 0; +} + +.aligntop { + vertical-align: top; +} \ No newline at end of file diff --git a/registration/registration-form/src/main/webapp/resources/fonts/glyphicons-halflings-regular.eot b/registration/registration-form/src/main/webapp/resources/fonts/glyphicons-halflings-regular.eot new file mode 100644 index 0000000..b93a495 Binary files /dev/null and b/registration/registration-form/src/main/webapp/resources/fonts/glyphicons-halflings-regular.eot differ diff --git a/registration/registration-form/src/main/webapp/resources/fonts/glyphicons-halflings-regular.svg b/registration/registration-form/src/main/webapp/resources/fonts/glyphicons-halflings-regular.svg new file mode 100644 index 0000000..94fb549 --- /dev/null +++ b/registration/registration-form/src/main/webapp/resources/fonts/glyphicons-halflings-regular.svg @@ -0,0 +1,288 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/registration/registration-form/src/main/webapp/resources/fonts/glyphicons-halflings-regular.ttf b/registration/registration-form/src/main/webapp/resources/fonts/glyphicons-halflings-regular.ttf new file mode 100644 index 0000000..1413fc6 Binary files /dev/null and b/registration/registration-form/src/main/webapp/resources/fonts/glyphicons-halflings-regular.ttf differ diff --git a/registration/registration-form/src/main/webapp/resources/fonts/glyphicons-halflings-regular.woff b/registration/registration-form/src/main/webapp/resources/fonts/glyphicons-halflings-regular.woff new file mode 100644 index 0000000..9e61285 Binary files /dev/null and b/registration/registration-form/src/main/webapp/resources/fonts/glyphicons-halflings-regular.woff differ diff --git a/registration/registration-form/src/main/webapp/resources/fonts/glyphicons-halflings-regular.woff2 b/registration/registration-form/src/main/webapp/resources/fonts/glyphicons-halflings-regular.woff2 new file mode 100644 index 0000000..64539b5 Binary files /dev/null and b/registration/registration-form/src/main/webapp/resources/fonts/glyphicons-halflings-regular.woff2 differ diff --git a/registration/registration-form/src/main/webapp/resources/img/favicon.ico b/registration/registration-form/src/main/webapp/resources/img/favicon.ico new file mode 100644 index 0000000..c374e16 Binary files /dev/null and b/registration/registration-form/src/main/webapp/resources/img/favicon.ico differ diff --git a/registration/registration-form/src/main/webapp/resources/img/favicon.png b/registration/registration-form/src/main/webapp/resources/img/favicon.png new file mode 100644 index 0000000..9df04cd Binary files /dev/null and b/registration/registration-form/src/main/webapp/resources/img/favicon.png differ diff --git a/registration/registration-form/src/main/webapp/resources/img/icoca.png b/registration/registration-form/src/main/webapp/resources/img/icoca.png new file mode 100644 index 0000000..74345a8 Binary files /dev/null and b/registration/registration-form/src/main/webapp/resources/img/icoca.png differ diff --git a/registration/registration-form/src/main/webapp/resources/js/bootstrap-datepicker.min.js b/registration/registration-form/src/main/webapp/resources/js/bootstrap-datepicker.min.js new file mode 100644 index 0000000..48cb452 --- /dev/null +++ b/registration/registration-form/src/main/webapp/resources/js/bootstrap-datepicker.min.js @@ -0,0 +1,9 @@ +/*! + * Datepicker for Bootstrap v1.6.4 (https://github.com/eternicode/bootstrap-datepicker) + * + * Copyright 2012 Stefan Petre + * Improvements by Andrew Rowls + * Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) + */ +!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a("object"==typeof exports?require("jquery"):jQuery)}(function(a,b){function c(){return new Date(Date.UTC.apply(Date,arguments))}function d(){var a=new Date;return c(a.getFullYear(),a.getMonth(),a.getDate())}function e(a,b){return a.getUTCFullYear()===b.getUTCFullYear()&&a.getUTCMonth()===b.getUTCMonth()&&a.getUTCDate()===b.getUTCDate()}function f(a){return function(){return this[a].apply(this,arguments)}}function g(a){return a&&!isNaN(a.getTime())}function h(b,c){function d(a,b){return b.toLowerCase()}var e,f=a(b).data(),g={},h=new RegExp("^"+c.toLowerCase()+"([A-Z])");c=new RegExp("^"+c.toLowerCase());for(var i in f)c.test(i)&&(e=i.replace(h,d),g[e]=f[i]);return g}function i(b){var c={};if(q[b]||(b=b.split("-")[0],q[b])){var d=q[b];return a.each(p,function(a,b){b in d&&(c[b]=d[b])}),c}}var j=function(){var b={get:function(a){return this.slice(a)[0]},contains:function(a){for(var b=a&&a.valueOf(),c=0,d=this.length;d>c;c++)if(this[c].valueOf()===b)return c;return-1},remove:function(a){this.splice(a,1)},replace:function(b){b&&(a.isArray(b)||(b=[b]),this.clear(),this.push.apply(this,b))},clear:function(){this.length=0},copy:function(){var a=new j;return a.replace(this),a}};return function(){var c=[];return c.push.apply(c,arguments),a.extend(c,b),c}}(),k=function(b,c){a(b).data("datepicker",this),this._process_options(c),this.dates=new j,this.viewDate=this.o.defaultViewDate,this.focusDate=null,this.element=a(b),this.isInput=this.element.is("input"),this.inputField=this.isInput?this.element:this.element.find("input"),this.component=this.element.hasClass("date")?this.element.find(".add-on, .input-group-addon, .btn"):!1,this.hasInput=this.component&&this.inputField.length,this.component&&0===this.component.length&&(this.component=!1),this.isInline=!this.component&&this.element.is("div"),this.picker=a(r.template),this._check_template(this.o.templates.leftArrow)&&this.picker.find(".prev").html(this.o.templates.leftArrow),this._check_template(this.o.templates.rightArrow)&&this.picker.find(".next").html(this.o.templates.rightArrow),this._buildEvents(),this._attachEvents(),this.isInline?this.picker.addClass("datepicker-inline").appendTo(this.element):this.picker.addClass("datepicker-dropdown dropdown-menu"),this.o.rtl&&this.picker.addClass("datepicker-rtl"),this.viewMode=this.o.startView,this.o.calendarWeeks&&this.picker.find("thead .datepicker-title, tfoot .today, tfoot .clear").attr("colspan",function(a,b){return parseInt(b)+1}),this._allow_update=!1,this.setStartDate(this._o.startDate),this.setEndDate(this._o.endDate),this.setDaysOfWeekDisabled(this.o.daysOfWeekDisabled),this.setDaysOfWeekHighlighted(this.o.daysOfWeekHighlighted),this.setDatesDisabled(this.o.datesDisabled),this.fillDow(),this.fillMonths(),this._allow_update=!0,this.update(),this.showMode(),this.isInline&&this.show()};k.prototype={constructor:k,_resolveViewName:function(a,c){return 0===a||"days"===a||"month"===a?0:1===a||"months"===a||"year"===a?1:2===a||"years"===a||"decade"===a?2:3===a||"decades"===a||"century"===a?3:4===a||"centuries"===a||"millennium"===a?4:c===b?!1:c},_check_template:function(c){try{if(c===b||""===c)return!1;if((c.match(/[<>]/g)||[]).length<=0)return!0;var d=a(c);return d.length>0}catch(e){return!1}},_process_options:function(b){this._o=a.extend({},this._o,b);var e=this.o=a.extend({},this._o),f=e.language;q[f]||(f=f.split("-")[0],q[f]||(f=o.language)),e.language=f,e.startView=this._resolveViewName(e.startView,0),e.minViewMode=this._resolveViewName(e.minViewMode,0),e.maxViewMode=this._resolveViewName(e.maxViewMode,4),e.startView=Math.min(e.startView,e.maxViewMode),e.startView=Math.max(e.startView,e.minViewMode),e.multidate!==!0&&(e.multidate=Number(e.multidate)||!1,e.multidate!==!1&&(e.multidate=Math.max(0,e.multidate))),e.multidateSeparator=String(e.multidateSeparator),e.weekStart%=7,e.weekEnd=(e.weekStart+6)%7;var g=r.parseFormat(e.format);e.startDate!==-(1/0)&&(e.startDate?e.startDate instanceof Date?e.startDate=this._local_to_utc(this._zero_time(e.startDate)):e.startDate=r.parseDate(e.startDate,g,e.language,e.assumeNearbyYear):e.startDate=-(1/0)),e.endDate!==1/0&&(e.endDate?e.endDate instanceof Date?e.endDate=this._local_to_utc(this._zero_time(e.endDate)):e.endDate=r.parseDate(e.endDate,g,e.language,e.assumeNearbyYear):e.endDate=1/0),e.daysOfWeekDisabled=e.daysOfWeekDisabled||[],a.isArray(e.daysOfWeekDisabled)||(e.daysOfWeekDisabled=e.daysOfWeekDisabled.split(/[,\s]*/)),e.daysOfWeekDisabled=a.map(e.daysOfWeekDisabled,function(a){return parseInt(a,10)}),e.daysOfWeekHighlighted=e.daysOfWeekHighlighted||[],a.isArray(e.daysOfWeekHighlighted)||(e.daysOfWeekHighlighted=e.daysOfWeekHighlighted.split(/[,\s]*/)),e.daysOfWeekHighlighted=a.map(e.daysOfWeekHighlighted,function(a){return parseInt(a,10)}),e.datesDisabled=e.datesDisabled||[],a.isArray(e.datesDisabled)||(e.datesDisabled=[e.datesDisabled]),e.datesDisabled=a.map(e.datesDisabled,function(a){return r.parseDate(a,g,e.language,e.assumeNearbyYear)});var h=String(e.orientation).toLowerCase().split(/\s+/g),i=e.orientation.toLowerCase();if(h=a.grep(h,function(a){return/^auto|left|right|top|bottom$/.test(a)}),e.orientation={x:"auto",y:"auto"},i&&"auto"!==i)if(1===h.length)switch(h[0]){case"top":case"bottom":e.orientation.y=h[0];break;case"left":case"right":e.orientation.x=h[0]}else i=a.grep(h,function(a){return/^left|right$/.test(a)}),e.orientation.x=i[0]||"auto",i=a.grep(h,function(a){return/^top|bottom$/.test(a)}),e.orientation.y=i[0]||"auto";else;if(e.defaultViewDate){var j=e.defaultViewDate.year||(new Date).getFullYear(),k=e.defaultViewDate.month||0,l=e.defaultViewDate.day||1;e.defaultViewDate=c(j,k,l)}else e.defaultViewDate=d()},_events:[],_secondaryEvents:[],_applyEvents:function(a){for(var c,d,e,f=0;ff?(this.picker.addClass("datepicker-orient-right"),n+=m-b):this.picker.addClass("datepicker-orient-left");var p,q=this.o.orientation.y;if("auto"===q&&(p=-g+o-c,q=0>p?"bottom":"top"),this.picker.addClass("datepicker-orient-"+q),"top"===q?o-=c+parseInt(this.picker.css("padding-top")):o+=l,this.o.rtl){var r=f-(n+m);this.picker.css({top:o,right:r,zIndex:j})}else this.picker.css({top:o,left:n,zIndex:j});return this},_allow_update:!0,update:function(){if(!this._allow_update)return this;var b=this.dates.copy(),c=[],d=!1;return arguments.length?(a.each(arguments,a.proxy(function(a,b){b instanceof Date&&(b=this._local_to_utc(b)),c.push(b)},this)),d=!0):(c=this.isInput?this.element.val():this.element.data("date")||this.inputField.val(),c=c&&this.o.multidate?c.split(this.o.multidateSeparator):[c],delete this.element.data().date),c=a.map(c,a.proxy(function(a){return r.parseDate(a,this.o.format,this.o.language,this.o.assumeNearbyYear)},this)),c=a.grep(c,a.proxy(function(a){return!this.dateWithinRange(a)||!a},this),!0),this.dates.replace(c),this.dates.length?this.viewDate=new Date(this.dates.get(-1)):this.viewDatethis.o.endDate?this.viewDate=new Date(this.o.endDate):this.viewDate=this.o.defaultViewDate,d?this.setValue():c.length&&String(b)!==String(this.dates)&&this._trigger("changeDate"),!this.dates.length&&b.length&&this._trigger("clearDate"),this.fill(),this.element.change(),this},fillDow:function(){var b=this.o.weekStart,c="";for(this.o.calendarWeeks&&(this.picker.find(".datepicker-days .datepicker-switch").attr("colspan",function(a,b){return parseInt(b)+1}),c+=' ');b";c+="",this.picker.find(".datepicker-days thead").append(c)},fillMonths:function(){for(var a=this._utc_to_local(this.viewDate),b="",c=0;12>c;){var d=a&&a.getMonth()===c?" focused":"";b+=''+q[this.o.language].monthsShort[c++]+""}this.picker.find(".datepicker-months td").html(b)},setRange:function(b){b&&b.length?this.range=a.map(b,function(a){return a.valueOf()}):delete this.range,this.fill()},getClassNames:function(b){var c=[],d=this.viewDate.getUTCFullYear(),e=this.viewDate.getUTCMonth(),f=new Date;return b.getUTCFullYear()d||b.getUTCFullYear()===d&&b.getUTCMonth()>e)&&c.push("new"),this.focusDate&&b.valueOf()===this.focusDate.valueOf()&&c.push("focused"),this.o.todayHighlight&&b.getUTCFullYear()===f.getFullYear()&&b.getUTCMonth()===f.getMonth()&&b.getUTCDate()===f.getDate()&&c.push("today"),-1!==this.dates.contains(b)&&c.push("active"),this.dateWithinRange(b)||c.push("disabled"),this.dateIsDisabled(b)&&c.push("disabled","disabled-date"),-1!==a.inArray(b.getUTCDay(),this.o.daysOfWeekHighlighted)&&c.push("highlighted"),this.range&&(b>this.range[0]&&br;r+=1)s=[d],t=null,-1===r?s.push("old"):10===r&&s.push("new"),-1!==a.inArray(q,n)&&s.push("active"),(o>q||q>p)&&s.push("disabled"),q===this.viewDate.getFullYear()&&s.push("focused"),j!==a.noop&&(u=j(new Date(q,0,1)),u===b?u={}:"boolean"==typeof u?u={enabled:u}:"string"==typeof u&&(u={classes:u}),u.enabled===!1&&s.push("disabled"),u.classes&&(s=s.concat(u.classes.split(/\s+/))),u.tooltip&&(t=u.tooltip)),k+='"+q+"",q+=f;l.find("td").html(k)},fill:function(){var d,e,f=new Date(this.viewDate),g=f.getUTCFullYear(),h=f.getUTCMonth(),i=this.o.startDate!==-(1/0)?this.o.startDate.getUTCFullYear():-(1/0),j=this.o.startDate!==-(1/0)?this.o.startDate.getUTCMonth():-(1/0),k=this.o.endDate!==1/0?this.o.endDate.getUTCFullYear():1/0,l=this.o.endDate!==1/0?this.o.endDate.getUTCMonth():1/0,m=q[this.o.language].today||q.en.today||"",n=q[this.o.language].clear||q.en.clear||"",o=q[this.o.language].titleFormat||q.en.titleFormat;if(!isNaN(g)&&!isNaN(h)){this.picker.find(".datepicker-days .datepicker-switch").text(r.formatDate(f,o,this.o.language)),this.picker.find("tfoot .today").text(m).toggle(this.o.todayBtn!==!1),this.picker.find("tfoot .clear").text(n).toggle(this.o.clearBtn!==!1),this.picker.find("thead .datepicker-title").text(this.o.title).toggle(""!==this.o.title),this.updateNavArrows(),this.fillMonths();var p=c(g,h-1,28),s=r.getDaysInMonth(p.getUTCFullYear(),p.getUTCMonth());p.setUTCDate(s),p.setUTCDate(s-(p.getUTCDay()-this.o.weekStart+7)%7);var t=new Date(p);p.getUTCFullYear()<100&&t.setUTCFullYear(p.getUTCFullYear()),t.setUTCDate(t.getUTCDate()+42),t=t.valueOf();for(var u,v=[];p.valueOf()"),this.o.calendarWeeks)){var w=new Date(+p+(this.o.weekStart-p.getUTCDay()-7)%7*864e5),x=new Date(Number(w)+(11-w.getUTCDay())%7*864e5),y=new Date(Number(y=c(x.getUTCFullYear(),0,1))+(11-y.getUTCDay())%7*864e5),z=(x-y)/864e5/7+1;v.push(''+z+"")}u=this.getClassNames(p),u.push("day"),this.o.beforeShowDay!==a.noop&&(e=this.o.beforeShowDay(this._utc_to_local(p)),e===b?e={}:"boolean"==typeof e?e={enabled:e}:"string"==typeof e&&(e={classes:e}),e.enabled===!1&&u.push("disabled"),e.classes&&(u=u.concat(e.classes.split(/\s+/))),e.tooltip&&(d=e.tooltip)),u=a.isFunction(a.uniqueSort)?a.uniqueSort(u):a.unique(u),v.push('"+p.getUTCDate()+""),d=null,p.getUTCDay()===this.o.weekEnd&&v.push(""),p.setUTCDate(p.getUTCDate()+1)}this.picker.find(".datepicker-days tbody").empty().append(v.join(""));var A=q[this.o.language].monthsTitle||q.en.monthsTitle||"Months",B=this.picker.find(".datepicker-months").find(".datepicker-switch").text(this.o.maxViewMode<2?A:g).end().find("span").removeClass("active");if(a.each(this.dates,function(a,b){b.getUTCFullYear()===g&&B.eq(b.getUTCMonth()).addClass("active")}),(i>g||g>k)&&B.addClass("disabled"),g===i&&B.slice(0,j).addClass("disabled"),g===k&&B.slice(l+1).addClass("disabled"),this.o.beforeShowMonth!==a.noop){var C=this;a.each(B,function(c,d){var e=new Date(g,c,1),f=C.o.beforeShowMonth(e);f===b?f={}:"boolean"==typeof f?f={enabled:f}:"string"==typeof f&&(f={classes:f}),f.enabled!==!1||a(d).hasClass("disabled")||a(d).addClass("disabled"),f.classes&&a(d).addClass(f.classes),f.tooltip&&a(d).prop("title",f.tooltip)})}this._fill_yearsView(".datepicker-years","year",10,1,g,i,k,this.o.beforeShowYear),this._fill_yearsView(".datepicker-decades","decade",100,10,g,i,k,this.o.beforeShowDecade),this._fill_yearsView(".datepicker-centuries","century",1e3,100,g,i,k,this.o.beforeShowCentury)}},updateNavArrows:function(){if(this._allow_update){var a=new Date(this.viewDate),b=a.getUTCFullYear(),c=a.getUTCMonth();switch(this.viewMode){case 0:this.o.startDate!==-(1/0)&&b<=this.o.startDate.getUTCFullYear()&&c<=this.o.startDate.getUTCMonth()?this.picker.find(".prev").css({visibility:"hidden"}):this.picker.find(".prev").css({visibility:"visible"}),this.o.endDate!==1/0&&b>=this.o.endDate.getUTCFullYear()&&c>=this.o.endDate.getUTCMonth()?this.picker.find(".next").css({visibility:"hidden"}):this.picker.find(".next").css({visibility:"visible"});break;case 1:case 2:case 3:case 4:this.o.startDate!==-(1/0)&&b<=this.o.startDate.getUTCFullYear()||this.o.maxViewMode<2?this.picker.find(".prev").css({visibility:"hidden"}):this.picker.find(".prev").css({visibility:"visible"}),this.o.endDate!==1/0&&b>=this.o.endDate.getUTCFullYear()||this.o.maxViewMode<2?this.picker.find(".next").css({visibility:"hidden"}):this.picker.find(".next").css({visibility:"visible"})}}},click:function(b){b.preventDefault(),b.stopPropagation();var e,f,g,h,i,j,k;e=a(b.target),e.hasClass("datepicker-switch")&&this.showMode(1);var l=e.closest(".prev, .next");l.length>0&&(f=r.modes[this.viewMode].navStep*(l.hasClass("prev")?-1:1),0===this.viewMode?(this.viewDate=this.moveMonth(this.viewDate,f),this._trigger("changeMonth",this.viewDate)):(this.viewDate=this.moveYear(this.viewDate,f),1===this.viewMode&&this._trigger("changeYear",this.viewDate)),this.fill()),e.hasClass("today")&&!e.hasClass("day")&&(this.showMode(-2),this._setDate(d(),"linked"===this.o.todayBtn?null:"view")),e.hasClass("clear")&&this.clearDates(),e.hasClass("disabled")||(e.hasClass("day")&&(g=parseInt(e.text(),10)||1,h=this.viewDate.getUTCFullYear(),i=this.viewDate.getUTCMonth(),e.hasClass("old")&&(0===i?(i=11,h-=1,j=!0,k=!0):(i-=1,j=!0)),e.hasClass("new")&&(11===i?(i=0,h+=1,j=!0,k=!0):(i+=1,j=!0)),this._setDate(c(h,i,g)),k&&this._trigger("changeYear",this.viewDate),j&&this._trigger("changeMonth",this.viewDate)),e.hasClass("month")&&(this.viewDate.setUTCDate(1),g=1,i=e.parent().find("span").index(e),h=this.viewDate.getUTCFullYear(),this.viewDate.setUTCMonth(i),this._trigger("changeMonth",this.viewDate),1===this.o.minViewMode?(this._setDate(c(h,i,g)),this.showMode()):this.showMode(-1),this.fill()),(e.hasClass("year")||e.hasClass("decade")||e.hasClass("century"))&&(this.viewDate.setUTCDate(1),g=1,i=0,h=parseInt(e.text(),10)||0,this.viewDate.setUTCFullYear(h),e.hasClass("year")&&(this._trigger("changeYear",this.viewDate),2===this.o.minViewMode&&this._setDate(c(h,i,g))),e.hasClass("decade")&&(this._trigger("changeDecade",this.viewDate),3===this.o.minViewMode&&this._setDate(c(h,i,g))),e.hasClass("century")&&(this._trigger("changeCentury",this.viewDate),4===this.o.minViewMode&&this._setDate(c(h,i,g))),this.showMode(-1),this.fill())),this.picker.is(":visible")&&this._focused_from&&a(this._focused_from).focus(),delete this._focused_from},_toggle_multidate:function(a){var b=this.dates.contains(a);if(a||this.dates.clear(),-1!==b?(this.o.multidate===!0||this.o.multidate>1||this.o.toggleActive)&&this.dates.remove(b):this.o.multidate===!1?(this.dates.clear(),this.dates.push(a)):this.dates.push(a),"number"==typeof this.o.multidate)for(;this.dates.length>this.o.multidate;)this.dates.remove(0)},_setDate:function(a,b){b&&"date"!==b||this._toggle_multidate(a&&new Date(a)),b&&"view"!==b||(this.viewDate=a&&new Date(a)),this.fill(),this.setValue(),b&&"view"===b||this._trigger("changeDate"),this.inputField&&this.inputField.change(),!this.o.autoclose||b&&"date"!==b||this.hide()},moveDay:function(a,b){var c=new Date(a);return c.setUTCDate(a.getUTCDate()+b),c},moveWeek:function(a,b){return this.moveDay(a,7*b)},moveMonth:function(a,b){if(!g(a))return this.o.defaultViewDate;if(!b)return a;var c,d,e=new Date(a.valueOf()),f=e.getUTCDate(),h=e.getUTCMonth(),i=Math.abs(b);if(b=b>0?1:-1,1===i)d=-1===b?function(){return e.getUTCMonth()===h}:function(){return e.getUTCMonth()!==c},c=h+b,e.setUTCMonth(c),(0>c||c>11)&&(c=(c+12)%12);else{for(var j=0;i>j;j++)e=this.moveMonth(e,b);c=e.getUTCMonth(),e.setUTCDate(f),d=function(){return c!==e.getUTCMonth()}}for(;d();)e.setUTCDate(--f),e.setUTCMonth(c);return e},moveYear:function(a,b){return this.moveMonth(a,12*b)},moveAvailableDate:function(a,b,c){do{if(a=this[c](a,b),!this.dateWithinRange(a))return!1;c="moveDay"}while(this.dateIsDisabled(a));return a},weekOfDateIsDisabled:function(b){return-1!==a.inArray(b.getUTCDay(),this.o.daysOfWeekDisabled)},dateIsDisabled:function(b){return this.weekOfDateIsDisabled(b)||a.grep(this.o.datesDisabled,function(a){return e(b,a)}).length>0},dateWithinRange:function(a){return a>=this.o.startDate&&a<=this.o.endDate},keydown:function(a){if(!this.picker.is(":visible"))return void((40===a.keyCode||27===a.keyCode)&&(this.show(),a.stopPropagation()));var b,c,d=!1,e=this.focusDate||this.viewDate;switch(a.keyCode){case 27:this.focusDate?(this.focusDate=null,this.viewDate=this.dates.get(-1)||this.viewDate,this.fill()):this.hide(),a.preventDefault(),a.stopPropagation();break;case 37:case 38:case 39:case 40:if(!this.o.keyboardNavigation||7===this.o.daysOfWeekDisabled.length)break;b=37===a.keyCode||38===a.keyCode?-1:1,0===this.viewMode?a.ctrlKey?(c=this.moveAvailableDate(e,b,"moveYear"),c&&this._trigger("changeYear",this.viewDate)):a.shiftKey?(c=this.moveAvailableDate(e,b,"moveMonth"),c&&this._trigger("changeMonth",this.viewDate)):37===a.keyCode||39===a.keyCode?c=this.moveAvailableDate(e,b,"moveDay"):this.weekOfDateIsDisabled(e)||(c=this.moveAvailableDate(e,b,"moveWeek")):1===this.viewMode?((38===a.keyCode||40===a.keyCode)&&(b=4*b),c=this.moveAvailableDate(e,b,"moveMonth")):2===this.viewMode&&((38===a.keyCode||40===a.keyCode)&&(b=4*b),c=this.moveAvailableDate(e,b,"moveYear")),c&&(this.focusDate=this.viewDate=c,this.setValue(),this.fill(),a.preventDefault());break;case 13:if(!this.o.forceParse)break;e=this.focusDate||this.dates.get(-1)||this.viewDate,this.o.keyboardNavigation&&(this._toggle_multidate(e),d=!0),this.focusDate=null,this.viewDate=this.dates.get(-1)||this.viewDate,this.setValue(),this.fill(),this.picker.is(":visible")&&(a.preventDefault(),a.stopPropagation(),this.o.autoclose&&this.hide());break;case 9:this.focusDate=null,this.viewDate=this.dates.get(-1)||this.viewDate,this.fill(),this.hide()}d&&(this.dates.length?this._trigger("changeDate"):this._trigger("clearDate"),this.inputField&&this.inputField.change())},showMode:function(a){a&&(this.viewMode=Math.max(this.o.minViewMode,Math.min(this.o.maxViewMode,this.viewMode+a))),this.picker.children("div").hide().filter(".datepicker-"+r.modes[this.viewMode].clsName).show(),this.updateNavArrows()}};var l=function(b,c){a(b).data("datepicker",this),this.element=a(b),this.inputs=a.map(c.inputs,function(a){return a.jquery?a[0]:a}),delete c.inputs,n.call(a(this.inputs),c).on("changeDate",a.proxy(this.dateUpdated,this)),this.pickers=a.map(this.inputs,function(b){return a(b).data("datepicker")}),this.updateDates()};l.prototype={updateDates:function(){this.dates=a.map(this.pickers,function(a){return a.getUTCDate()}),this.updateRanges()},updateRanges:function(){var b=a.map(this.dates,function(a){return a.valueOf()});a.each(this.pickers,function(a,c){c.setRange(b)})},dateUpdated:function(b){if(!this.updating){this.updating=!0;var c=a(b.target).data("datepicker");if("undefined"!=typeof c){var d=c.getUTCDate(),e=a.inArray(b.target,this.inputs),f=e-1,g=e+1,h=this.inputs.length;if(-1!==e){if(a.each(this.pickers,function(a,b){b.getUTCDate()||b.setUTCDate(d)}),d=0&&dthis.dates[g])for(;h>g&&d>this.dates[g];)this.pickers[g++].setUTCDate(d);this.updateDates(),delete this.updating}}}},remove:function(){a.map(this.pickers,function(a){a.remove()}),delete this.element.data().datepicker}};var m=a.fn.datepicker,n=function(c){var d=Array.apply(null,arguments);d.shift();var e;if(this.each(function(){var b=a(this),f=b.data("datepicker"),g="object"==typeof c&&c;if(!f){var j=h(this,"date"),m=a.extend({},o,j,g),n=i(m.language),p=a.extend({},o,n,j,g);b.hasClass("input-daterange")||p.inputs?(a.extend(p,{inputs:p.inputs||b.find("input").toArray()}),f=new l(this,p)):f=new k(this,p),b.data("datepicker",f)}"string"==typeof c&&"function"==typeof f[c]&&(e=f[c].apply(f,d))}),e===b||e instanceof k||e instanceof l)return this;if(this.length>1)throw new Error("Using only allowed for the collection of a single element ("+c+" function)");return e};a.fn.datepicker=n;var o=a.fn.datepicker.defaults={assumeNearbyYear:!1,autoclose:!1,beforeShowDay:a.noop,beforeShowMonth:a.noop,beforeShowYear:a.noop,beforeShowDecade:a.noop,beforeShowCentury:a.noop,calendarWeeks:!1,clearBtn:!1,toggleActive:!1,daysOfWeekDisabled:[],daysOfWeekHighlighted:[],datesDisabled:[],endDate:1/0,forceParse:!0,format:"mm/dd/yyyy",keyboardNavigation:!0,language:"en",minViewMode:0,maxViewMode:4,multidate:!1,multidateSeparator:",",orientation:"auto",rtl:!1,startDate:-(1/0),startView:0,todayBtn:!1,todayHighlight:!1,weekStart:0,disableTouchKeyboard:!1,enableOnReadonly:!0,showOnFocus:!0,zIndexOffset:10,container:"body",immediateUpdates:!1,title:"",templates:{leftArrow:"«",rightArrow:"»"}},p=a.fn.datepicker.locale_opts=["format","rtl","weekStart"];a.fn.datepicker.Constructor=k;var q=a.fn.datepicker.dates={en:{days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],daysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],daysMin:["Su","Mo","Tu","We","Th","Fr","Sa"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],today:"Today",clear:"Clear",titleFormat:"MM yyyy"}},r={modes:[{clsName:"days",navFnc:"Month",navStep:1},{clsName:"months",navFnc:"FullYear",navStep:1},{clsName:"years",navFnc:"FullYear",navStep:10},{clsName:"decades",navFnc:"FullDecade",navStep:100},{clsName:"centuries",navFnc:"FullCentury",navStep:1e3}],isLeapYear:function(a){return a%4===0&&a%100!==0||a%400===0},getDaysInMonth:function(a,b){return[31,r.isLeapYear(a)?29:28,31,30,31,30,31,31,30,31,30,31][b]},validParts:/dd?|DD?|mm?|MM?|yy(?:yy)?/g,nonpunctuation:/[^ -\/:-@\u5e74\u6708\u65e5\[-`{-~\t\n\r]+/g,parseFormat:function(a){if("function"==typeof a.toValue&&"function"==typeof a.toDisplay)return a;var b=a.replace(this.validParts,"\x00").split("\x00"),c=a.match(this.validParts);if(!b||!b.length||!c||0===c.length)throw new Error("Invalid date format.");return{separators:b,parts:c}},parseDate:function(e,f,g,h){function i(a,b){return b===!0&&(b=10),100>a&&(a+=2e3,a>(new Date).getFullYear()+b&&(a-=100)),a}function j(){var a=this.slice(0,s[n].length),b=s[n].slice(0,a.length);return a.toLowerCase()===b.toLowerCase()}if(!e)return b;if(e instanceof Date)return e;if("string"==typeof f&&(f=r.parseFormat(f)),f.toValue)return f.toValue(e,f,g);var l,m,n,o,p=/([\-+]\d+)([dmwy])/,s=e.match(/([\-+]\d+)([dmwy])/g),t={d:"moveDay",m:"moveMonth",w:"moveWeek",y:"moveYear"},u={yesterday:"-1d",today:"+0d",tomorrow:"+1d"};if(/^[\-+]\d+[dmwy]([\s,]+[\-+]\d+[dmwy])*$/.test(e)){for(e=new Date,n=0;nb;)b+=12;for(b%=12,a.setUTCMonth(b);a.getUTCMonth()!==b;)a.setUTCDate(a.getUTCDate()-1);return a},d:function(a,b){return a.setUTCDate(b)}};z.M=z.MM=z.mm=z.m,z.dd=z.d,e=d();var A=f.parts.slice();if(s.length!==A.length&&(A=a(A).filter(function(b,c){return-1!==a.inArray(c,y)}).toArray()),s.length===A.length){var B;for(n=0,B=A.length;B>n;n++){if(v=parseInt(s[n],10),l=A[n],isNaN(v))switch(l){case"MM":w=a(q[g].months).filter(j),v=a.inArray(w[0],q[g].months)+1;break;case"M":w=a(q[g].monthsShort).filter(j),v=a.inArray(w[0],q[g].monthsShort)+1}x[l]=v}var C,D;for(n=0;n=g;g++)f.length&&b.push(f.shift()),b.push(e[c.parts[g]]);return b.join("")},headTemplate:'«»',contTemplate:'',footTemplate:''};r.template='
'+r.headTemplate+""+r.footTemplate+'
'+r.headTemplate+r.contTemplate+r.footTemplate+'
'+r.headTemplate+r.contTemplate+r.footTemplate+'
'+r.headTemplate+r.contTemplate+r.footTemplate+'
'+r.headTemplate+r.contTemplate+r.footTemplate+"
",a.fn.datepicker.DPGlobal=r,a.fn.datepicker.noConflict=function(){return a.fn.datepicker=m,this},a.fn.datepicker.version="1.6.4",a(document).on("focus.datepicker.data-api click.datepicker.data-api",'[data-provide="datepicker"]',function(b){var c=a(this);c.data("datepicker")||(b.preventDefault(),n.call(c,"show"))}),a(function(){n.call(a('[data-provide="datepicker-inline"]'))})}); \ No newline at end of file diff --git a/registration/registration-form/src/main/webapp/resources/js/bootstrap.min.js b/registration/registration-form/src/main/webapp/resources/js/bootstrap.min.js new file mode 100644 index 0000000..9bcd2fc --- /dev/null +++ b/registration/registration-form/src/main/webapp/resources/js/bootstrap.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under the MIT license + */ +if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1||b[0]>3)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){if(a(b.target).is(this))return b.handleObj.handler.apply(this,arguments)}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.7",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a("#"===f?[]:f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.7",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c).prop(c,!0)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c).prop(c,!1))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target).closest(".btn");b.call(d,"toggle"),a(c.target).is('input[type="radio"], input[type="checkbox"]')||(c.preventDefault(),d.is("input,button")?d.trigger("focus"):d.find("input:visible,button:visible").first().trigger("focus"))}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.7",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(a>this.$items.length-1||a<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){if(!this.sliding)return this.slide("next")},c.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.7",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger(a.Event("hidden.bs.dropdown",f)))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.7",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger(a.Event("shown.bs.dropdown",h))}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&jdocument.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth
',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);if(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),!c.isInStateTrue())return clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-mo.width?"left":"left"==h&&k.left-lg.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;jg.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null,a.$element=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.7",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.7",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b=e[a]&&(void 0===e[a+1]||b .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.7",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return e=a-d&&"bottom"},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); \ No newline at end of file diff --git a/registration/registration-form/src/main/webapp/resources/js/ie10-viewport-bug-workaround.js b/registration/registration-form/src/main/webapp/resources/js/ie10-viewport-bug-workaround.js new file mode 100644 index 0000000..479a6eb --- /dev/null +++ b/registration/registration-form/src/main/webapp/resources/js/ie10-viewport-bug-workaround.js @@ -0,0 +1,23 @@ +/*! + * IE10 viewport hack for Surface/desktop Windows 8 bug + * Copyright 2014-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +// See the Getting Started docs for more information: +// http://getbootstrap.com/getting-started/#support-ie10-width + +(function () { + 'use strict'; + + if (navigator.userAgent.match(/IEMobile\/10\.0/)) { + var msViewportStyle = document.createElement('style') + msViewportStyle.appendChild( + document.createTextNode( + '@-ms-viewport{width:auto!important}' + ) + ) + document.querySelector('head').appendChild(msViewportStyle) + } + +})(); diff --git a/registration/registration-form/src/main/webapp/resources/js/jquery.iframe-transport.js b/registration/registration-form/src/main/webapp/resources/js/jquery.iframe-transport.js new file mode 100644 index 0000000..b7922e6 --- /dev/null +++ b/registration/registration-form/src/main/webapp/resources/js/jquery.iframe-transport.js @@ -0,0 +1,217 @@ +/* + * jQuery Iframe Transport Plugin + * https://github.com/blueimp/jQuery-File-Upload + * + * Copyright 2011, Sebastian Tschan + * https://blueimp.net + * + * Licensed under the MIT license: + * http://www.opensource.org/licenses/MIT + */ + +/* global define, require, window, document */ + +;(function (factory) { + 'use strict'; + if (typeof define === 'function' && define.amd) { + // Register as an anonymous AMD module: + define(['jquery'], factory); + } else if (typeof exports === 'object') { + // Node/CommonJS: + factory(require('jquery')); + } else { + // Browser globals: + factory(window.jQuery); + } +}(function ($) { + 'use strict'; + + // Helper variable to create unique names for the transport iframes: + var counter = 0; + + // The iframe transport accepts four additional options: + // options.fileInput: a jQuery collection of file input fields + // options.paramName: the parameter name for the file form data, + // overrides the name property of the file input field(s), + // can be a string or an array of strings. + // options.formData: an array of objects with name and value properties, + // equivalent to the return data of .serializeArray(), e.g.: + // [{name: 'a', value: 1}, {name: 'b', value: 2}] + // options.initialIframeSrc: the URL of the initial iframe src, + // by default set to "javascript:false;" + $.ajaxTransport('iframe', function (options) { + if (options.async) { + // javascript:false as initial iframe src + // prevents warning popups on HTTPS in IE6: + /*jshint scripturl: true */ + var initialIframeSrc = options.initialIframeSrc || 'javascript:false;', + /*jshint scripturl: false */ + form, + iframe, + addParamChar; + return { + send: function (_, completeCallback) { + form = $('
'); + form.attr('accept-charset', options.formAcceptCharset); + addParamChar = /\?/.test(options.url) ? '&' : '?'; + // XDomainRequest only supports GET and POST: + if (options.type === 'DELETE') { + options.url = options.url + addParamChar + '_method=DELETE'; + options.type = 'POST'; + } else if (options.type === 'PUT') { + options.url = options.url + addParamChar + '_method=PUT'; + options.type = 'POST'; + } else if (options.type === 'PATCH') { + options.url = options.url + addParamChar + '_method=PATCH'; + options.type = 'POST'; + } + // IE versions below IE8 cannot set the name property of + // elements that have already been added to the DOM, + // so we set the name along with the iframe HTML markup: + counter += 1; + iframe = $( + '' + ).bind('load', function () { + var fileInputClones, + paramNames = $.isArray(options.paramName) ? + options.paramName : [options.paramName]; + iframe + .unbind('load') + .bind('load', function () { + var response; + // Wrap in a try/catch block to catch exceptions thrown + // when trying to access cross-domain iframe contents: + try { + response = iframe.contents(); + // Google Chrome and Firefox do not throw an + // exception when calling iframe.contents() on + // cross-domain requests, so we unify the response: + if (!response.length || !response[0].firstChild) { + throw new Error(); + } + } catch (e) { + response = undefined; + } + // The complete callback returns the + // iframe content document as response object: + completeCallback( + 200, + 'success', + {'iframe': response} + ); + // Fix for IE endless progress bar activity bug + // (happens on form submits to iframe targets): + $('') + .appendTo(form); + window.setTimeout(function () { + // Removing the form in a setTimeout call + // allows Chrome's developer tools to display + // the response result + form.remove(); + }, 0); + }); + form + .prop('target', iframe.prop('name')) + .prop('action', options.url) + .prop('method', options.type); + if (options.formData) { + $.each(options.formData, function (index, field) { + $('') + .prop('name', field.name) + .val(field.value) + .appendTo(form); + }); + } + if (options.fileInput && options.fileInput.length && + options.type === 'POST') { + fileInputClones = options.fileInput.clone(); + // Insert a clone for each file input field: + options.fileInput.after(function (index) { + return fileInputClones[index]; + }); + if (options.paramName) { + options.fileInput.each(function (index) { + $(this).prop( + 'name', + paramNames[index] || options.paramName + ); + }); + } + // Appending the file input fields to the hidden form + // removes them from their original location: + form + .append(options.fileInput) + .prop('enctype', 'multipart/form-data') + // enctype must be set as encoding for IE: + .prop('encoding', 'multipart/form-data'); + // Remove the HTML5 form attribute from the input(s): + options.fileInput.removeAttr('form'); + } + form.submit(); + // Insert the file input fields at their original location + // by replacing the clones with the originals: + if (fileInputClones && fileInputClones.length) { + options.fileInput.each(function (index, input) { + var clone = $(fileInputClones[index]); + // Restore the original name and form properties: + $(input) + .prop('name', clone.prop('name')) + .attr('form', clone.attr('form')); + clone.replaceWith(input); + }); + } + }); + form.append(iframe).appendTo(document.body); + }, + abort: function () { + if (iframe) { + // javascript:false as iframe src aborts the request + // and prevents warning popups on HTTPS in IE6. + // concat is used to avoid the "Script URL" JSLint error: + iframe + .unbind('load') + .prop('src', initialIframeSrc); + } + if (form) { + form.remove(); + } + } + }; + } + }); + + // The iframe transport returns the iframe content document as response. + // The following adds converters from iframe to text, json, html, xml + // and script. + // Please note that the Content-Type for JSON responses has to be text/plain + // or text/html, if the browser doesn't include application/json in the + // Accept header, else IE will show a download dialog. + // The Content-Type for XML responses on the other hand has to be always + // application/xml or text/xml, so IE properly parses the XML response. + // See also + // https://github.com/blueimp/jQuery-File-Upload/wiki/Setup#content-type-negotiation + $.ajaxSetup({ + converters: { + 'iframe text': function (iframe) { + return iframe && $(iframe[0].body).text(); + }, + 'iframe json': function (iframe) { + return iframe && $.parseJSON($(iframe[0].body).text()); + }, + 'iframe html': function (iframe) { + return iframe && $(iframe[0].body).html(); + }, + 'iframe xml': function (iframe) { + var xmlDoc = iframe && iframe[0]; + return xmlDoc && $.isXMLDoc(xmlDoc) ? xmlDoc : + $.parseXML((xmlDoc.XMLDocument && xmlDoc.XMLDocument.xml) || + $(xmlDoc.body).html()); + }, + 'iframe script': function (iframe) { + return iframe && $.globalEval($(iframe[0].body).text()); + } + } + }); + +})); diff --git a/registration/registration-form/src/main/webapp/resources/js/jquery.min.js b/registration/registration-form/src/main/webapp/resources/js/jquery.min.js new file mode 100644 index 0000000..e836475 --- /dev/null +++ b/registration/registration-form/src/main/webapp/resources/js/jquery.min.js @@ -0,0 +1,5 @@ +/*! jQuery v1.12.4 | (c) jQuery Foundation | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m="1.12.4",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return e.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(!l.ownFirst)for(b in a)return k.call(a,b);for(b in a);return void 0===b||k.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(h)return h.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=e.call(arguments,2),d=function(){return a.apply(b||this,c.concat(e.call(arguments)))},d.guid=a.guid=a.guid||n.guid++,d):void 0},now:function(){return+new Date},support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fa.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fa.selectors={cacheLength:50,createPseudo:ha,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fa.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function ra(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}if(f=d.getElementById(e[2]),f&&f.parentNode){if(f.id!==e[2])return A.find(a);this.length=1,this[0]=f}return this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||(e=n.uniqueSort(e)),D.test(a)&&(e=e.reverse())),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=!0,c||j.disable(),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.addEventListener?(d.removeEventListener("DOMContentLoaded",K),a.removeEventListener("load",K)):(d.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(d.addEventListener||"load"===a.event.type||"complete"===d.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll)a.setTimeout(n.ready);else if(d.addEventListener)d.addEventListener("DOMContentLoaded",K),a.addEventListener("load",K);else{d.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&d.documentElement}catch(e){}c&&c.doScroll&&!function f(){if(!n.isReady){try{c.doScroll("left")}catch(b){return a.setTimeout(f,50)}J(),n.ready()}}()}return I.promise(b)},n.ready.promise();var L;for(L in n(l))break;l.ownFirst="0"===L,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c,e;c=d.getElementsByTagName("body")[0],c&&c.style&&(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",l.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(e))}),function(){var a=d.createElement("div");l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}a=null}();var M=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b},N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0; +}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(M(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),"object"!=typeof b&&"function"!=typeof b||(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f}}function S(a,b,c){if(M(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=void 0)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},Z=/^(?:checkbox|radio)$/i,$=/<([\w:-]+)/,_=/^$|\/(?:java|ecma)script/i,aa=/^\s+/,ba="abbr|article|aside|audio|bdi|canvas|data|datalist|details|dialog|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|picture|progress|section|summary|template|time|video";function ca(a){var b=ba.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}!function(){var a=d.createElement("div"),b=d.createDocumentFragment(),c=d.createElement("input");a.innerHTML="
a",l.leadingWhitespace=3===a.firstChild.nodeType,l.tbody=!a.getElementsByTagName("tbody").length,l.htmlSerialize=!!a.getElementsByTagName("link").length,l.html5Clone="<:nav>"!==d.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,b.appendChild(c),l.appendChecked=c.checked,a.innerHTML="",l.noCloneChecked=!!a.cloneNode(!0).lastChild.defaultValue,b.appendChild(a),c=d.createElement("input"),c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),a.appendChild(c),l.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!!a.addEventListener,a[n.expando]=1,l.attributes=!a.getAttribute(n.expando)}();var da={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:l.htmlSerialize?[0,"",""]:[1,"X
","
"]};da.optgroup=da.option,da.tbody=da.tfoot=da.colgroup=da.caption=da.thead,da.th=da.td;function ea(a,b){var c,d,e=0,f="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,ea(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function fa(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}var ga=/<|&#?\w+;/,ha=/r;r++)if(g=a[r],g||0===g)if("object"===n.type(g))n.merge(q,g.nodeType?[g]:g);else if(ga.test(g)){i=i||p.appendChild(b.createElement("div")),j=($.exec(g)||["",""])[1].toLowerCase(),m=da[j]||da._default,i.innerHTML=m[1]+n.htmlPrefilter(g)+m[2],f=m[0];while(f--)i=i.lastChild;if(!l.leadingWhitespace&&aa.test(g)&&q.push(b.createTextNode(aa.exec(g)[0])),!l.tbody){g="table"!==j||ha.test(g)?""!==m[1]||ha.test(g)?0:i:i.firstChild,f=g&&g.childNodes.length;while(f--)n.nodeName(k=g.childNodes[f],"tbody")&&!k.childNodes.length&&g.removeChild(k)}n.merge(q,i.childNodes),i.textContent="";while(i.firstChild)i.removeChild(i.firstChild);i=p.lastChild}else q.push(b.createTextNode(g));i&&p.removeChild(i),l.appendChecked||n.grep(ea(q,"input"),ia),r=0;while(g=q[r++])if(d&&n.inArray(g,d)>-1)e&&e.push(g);else if(h=n.contains(g.ownerDocument,g),i=ea(p.appendChild(g),"script"),h&&fa(i),c){f=0;while(g=i[f++])_.test(g.type||"")&&c.push(g)}return i=null,p}!function(){var b,c,e=d.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b]=c in a)||(e.setAttribute(c,"t"),l[b]=e.attributes[c].expando===!1);e=null}();var ka=/^(?:input|select|textarea)$/i,la=/^key/,ma=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,na=/^(?:focusinfocus|focusoutblur)$/,oa=/^([^.]*)(?:\.(.+)|)/;function pa(){return!0}function qa(){return!1}function ra(){try{return d.activeElement}catch(a){}}function sa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)sa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=qa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return"undefined"==typeof n||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(G)||[""],h=b.length;while(h--)f=oa.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=oa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,e,f){var g,h,i,j,l,m,o,p=[e||d],q=k.call(b,"type")?b.type:b,r=k.call(b,"namespace")?b.namespace.split("."):[];if(i=m=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!na.test(q+n.event.triggered)&&(q.indexOf(".")>-1&&(r=q.split("."),q=r.shift(),r.sort()),h=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=r.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:n.makeArray(c,[b]),l=n.event.special[q]||{},f||!l.trigger||l.trigger.apply(e,c)!==!1)){if(!f&&!l.noBubble&&!n.isWindow(e)){for(j=l.delegateType||q,na.test(j+q)||(i=i.parentNode);i;i=i.parentNode)p.push(i),m=i;m===(e.ownerDocument||d)&&p.push(m.defaultView||m.parentWindow||a)}o=0;while((i=p[o++])&&!b.isPropagationStopped())b.type=o>1?j:l.bindType||q,g=(n._data(i,"events")||{})[b.type]&&n._data(i,"handle"),g&&g.apply(i,c),g=h&&i[h],g&&g.apply&&M(i)&&(b.result=g.apply(i,c),b.result===!1&&b.preventDefault());if(b.type=q,!f&&!b.isDefaultPrevented()&&(!l._default||l._default.apply(p.pop(),c)===!1)&&M(e)&&h&&e[q]&&!n.isWindow(e)){m=e[h],m&&(e[h]=null),n.event.triggered=q;try{e[q]()}catch(s){}n.event.triggered=void 0,m&&(e[h]=m)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())a.rnamespace&&!a.rnamespace.test(g.namespace)||(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]","i"),va=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,wa=/\s*$/g,Aa=ca(d),Ba=Aa.appendChild(d.createElement("div"));function Ca(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function Da(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function Ea(a){var b=ya.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Fa(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Ga(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(Da(b).text=a.text,Ea(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&Z.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}}function Ha(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&xa.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),Ha(f,b,c,d)});if(o&&(k=ja(b,a[0].ownerDocument,!1,a,d),e=k.firstChild,1===k.childNodes.length&&(k=e),e||d)){for(i=n.map(ea(k,"script"),Da),h=i.length;o>m;m++)g=k,m!==p&&(g=n.clone(g,!0,!0),h&&n.merge(i,ea(g,"script"))),c.call(a[m],g,m);if(h)for(j=i[i.length-1].ownerDocument,n.map(i,Ea),m=0;h>m;m++)g=i[m],_.test(g.type||"")&&!n._data(g,"globalEval")&&n.contains(j,g)&&(g.src?n._evalUrl&&n._evalUrl(g.src):n.globalEval((g.text||g.textContent||g.innerHTML||"").replace(za,"")));k=e=null}return a}function Ia(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(ea(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&fa(ea(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(va,"<$1>")},clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!ua.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(Ba.innerHTML=a.outerHTML,Ba.removeChild(f=Ba.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=ea(f),h=ea(a),g=0;null!=(e=h[g]);++g)d[g]&&Ga(e,d[g]);if(b)if(c)for(h=h||ea(a),d=d||ea(f),g=0;null!=(e=h[g]);g++)Fa(e,d[g]);else Fa(a,f);return d=ea(f,"script"),d.length>0&&fa(d,!i&&ea(a,"script")),d=h=e=null,f},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.attributes,m=n.event.special;null!=(d=a[h]);h++)if((b||M(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k||"undefined"==typeof d.removeAttribute?d[i]=void 0:d.removeAttribute(i),c.push(f))}}}),n.fn.extend({domManip:Ha,detach:function(a){return Ia(this,a,!0)},remove:function(a){return Ia(this,a)},text:function(a){return Y(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||d).createTextNode(a))},null,a,arguments.length)},append:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.appendChild(a)}})},prepend:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(ea(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return Y(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(ta,""):void 0;if("string"==typeof a&&!wa.test(a)&&(l.htmlSerialize||!ua.test(a))&&(l.leadingWhitespace||!aa.test(a))&&!da[($.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ea(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ha(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(ea(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],f=n(a),h=f.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(f[d])[b](c),g.apply(e,c.get());return this.pushStack(e)}});var Ja,Ka={HTML:"block",BODY:"block"};function La(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function Ma(a){var b=d,c=Ka[a];return c||(c=La(a,b),"none"!==c&&c||(Ja=(Ja||n("