meta data for this page
  •  

<html> <head>

  <title>Valintakoe</title>
  <meta charset="UTF-8">
  <meta name="format-detection" content="telephone=no">
  <meta name="app-path" content="./">
  <meta name="page-integrity" content="false">
  <meta name="answer-key" content="-">
  <meta name="tz-offset" content="-10800000">
  <meta name="google" content="notranslate">
  <meta name="base-timestamp" content="1664892858486">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">

<style> #footer{clear:both;z-index:0;height:25px;background:#fff;width:100%;border-top:1px solid #2f6394}body,html{margin:0;padding:0;font-family:Helvetica,Arial,sans-serif;font-size:100%;background:#fcfcfc;color:#444}#header{border-bottom:none}#header:after{content:””;display:block;position:absolute;left:0;right:0;padding-top:1em;border-bottom:3px solid #de1b1b}.topbar-wrap,div.header.topbar{background:#f6f6f6 none repeat scroll 0 0;border-bottom:3px solid #de1b1b;color:#2b2b2b;padding:1em;width:100%;position:relative;z-index:50}.topbar-wrap .header-content,div.header.topbar .header-content{max-width:908px;margin:0 auto;padding:.5em 0;display:flex;justify-content:space-between;align-items:center}.topbar-wrap .exam-data,div.header.topbar .exam-data{max-width:908px;margin:0 auto}.topbar-wrap .name,div.header.topbar .name{line-height:1;font-size:2em;display:inline-block;margin:0;padding:0;font-weight:400}div.header.topbar .name:empty:before{content:”\a0”}div.topbar-wrap{padding:0;border-bottom:0;background:0 0}div.topbar{padding:.5em;background:#2b2b2b none repeat scroll 0 0;border-bottom:3px solid #e9e581;color:#fff}div.topbar>div{max-width:908px;margin:0 auto}body.lobby div.topbar{padding:1em .5em}.wrapper{margin:0 auto 0;margin:0 auto;max-width:700px;width:98%;padding:2em;padding-top:0}.wrapper .help-text{font-size:large;padding:0 0 2em}.wrapper .help-text.success{background-color:#dff0d8;border:1px solid #d6e9c6;color:#3c763d;padding:1em;margin-bottom:1em;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.wrapper .help-text.error{background-color:#f2dede;border:1px solid #ebccd1;color:#a94442;padding:1em;margin-bottom:1em;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.wrapper .help-text.notice{background-color:#ffc;border:1px solid #cc0;padding:1em;margin-bottom:1em;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.wrapper .help-text .title{font-weight:700;margin-bottom:3px}.wrapper .help-text .link{display:block;text-decoration:none;margin-top:3px;float:right;font-weight:700}.wrapper .help-text *:first-child,.wrapper .help-text .title{margin-top:0}body.full .wrapper{max-width:908px}#main-content-wrapper{margin-top:2em}#container{overflow:visible;margin:0 5%;max-width:908px;margin:0 auto 0}div.header.topbar{background:#f6f6f6 none repeat scroll 0 0;color:#2b2b2b}div.header.topbar .header-content{max-width:900px;margin:0 auto}div.header.topbar .header-content .name span{display:block}div.header.topbar .name{display:inline-block;font-size:2em;margin:0;padding:0}div.header.topbar .links{display:inline-block;line-height:2em}div.header.topbar .links button>span{white-space:nowrap;display:block}div.header.topbar .links .link{display:inline-block;line-height:1.3;padding:0 8px 0 0}div.header.topbar .links .link a{color:#2b2b2b;text-decoration:none;font-size:1.1em}div.header.topbar .links .link:not(:first-child){border-left:1px solid #de1b1b;padding-left:10px}div.header.topbar form{display:inline-block}div.topbar-wrap{border-top:3px solid #de1b1b;position:absolute}div.topbar-wrap .exam-data{margin:0 auto 0;max-width:900px;width:100%}div.topbar-wrap .exam-data>div{display:inline-block}div.topbar-wrap .exam-data>div.exam-info{line-height:24px;vertical-align:middle;float:right}div.topbar-wrap .exam-data .timer{display:inline-block}div.topbar-wrap .exam-data .timer .title{display:inline-block;text-align:right}div.topbar-wrap .exam-data .timer{margin-left:1em}div.topbar-wrap .exam-data span{font-size:18px}div.topbar-wrap .exam-data span.username{font-size:24px}div.topbar-wrap .exam-data:after{clear:both;content:”.”;display:block;height:0;visibility:hidden}body.fixed div.topbar-wrap{position:fixed;top:0;border-top:3px solid #de1b1b;z-index:50}body.fixed.lobby section.wrapper{margin-top:60px!important}body.fixed.lobby div.topbar{padding:0 1em 1em}body.fixed.lobby div.topbar>div .exam-data{margin:1em auto}html:after{clear:both;content:”.”;display:block;height:0;visibility:hidden}@media (max-width:923px){#container{padding:0 .5em}}button.linklike{background:0 0;border:none;padding:0;color:#2b2b2b;cursor:pointer;width:auto}.login section.wrapper{margin:60px auto 0;padding:2em;max-width:500px}.login .language-choice{display:flex;justify-content:space-between;font-size:1.1em;margin-bottom:2em}.login .language-choice button{background-color:transparent;color:inherit;padding:inherit;width:inherit;max-width:inherit;border:inherit;font-size:1.1em}.login .display-language-fi .language-choice button:lang(fi){text-decoration:underline}.login .display-language-sv .language-choice button:lang(sv){text-decoration:underline}.login .display-language-en .language-choice button:lang(en){text-decoration:underline}.login .display-language-fi [lang]:not(.language-option):not(:lang(fi)){display:none}.login .display-language-sv [lang]:not(.language-option):not(:lang(sv)){display:none}.login .display-language-en [lang]:not(.language-option):not(:lang(en)){display:none}.login section.wrapper h3{border-bottom:1px solid #3b3738;color:#3b3738;margin-top:0;padding-bottom:.5em;text-align:center}.login.credentials section.wrapper{max-width:500px}.login *{box-sizing:border-box}.login label{width:38%;display:inline-block;font-size:1.1em;padding:.5em;text-align:right}.login .input.credentials label[for=username],.login form.ajax-submit.processing .processing-notification{padding:.5em 0}.login input{display:inline-block;border:1px solid #060606;padding:.3em;font-size:1em;width:60%}.login input:focus{border:1px solid #de1b1b}.login .btn,.login button{background:#3b3738;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;color:#fff;display:inline-block;border:0;padding:.4em 1em;width:60%;max-width:60%;cursor:pointer}.login .input{text-align:right}.login .input.credentials{margin:0;text-align:right;width:auto}.login .input.credentials label{padding-left:0;text-align:center;width:100%;float:left}.login .input.credentials input{font-size:1.5em;line-height:1;text-align:center;vertical-align:middle;width:100%}.login .input.toggle{margin:.4em 0}.login .input.toggle label{padding:0 .5em 0 0;text-align:left;float:right;width:auto}.login .input.toggle input{text-align:center;vertical-align:middle;padding:.5em;width:auto}.login .input.access-token input{text-transform:uppercase}.login .input.credentials .btn,.login .input.credentials button{width:100%;max-width:100%;margin-top:.5em;display:inline-block}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;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}@media speech,aural{.sr-hide{display:none!important}}a img,fieldset{border:none}a{color:#0a79a4}a:hover{color:#176280}:focus{outline:1px dotted #1471ce;-webkit-box-shadow:0 0 6px 1px #63a4e4;-moz-box-shadow:0 0 6px 1px #63a4e4;box-shadow:0 0 6px 1px #63a4e4}.form-button a:focus{outline:1px dotted #155ca2;-webkit-box-shadow:0 0 8px 2px #1b5c9e;-moz-box-shadow:0 0 8px 2px #1b5c9e;box-shadow:0 0 8px 2px #1b5c9e}img{border:0;margin:0}.form-button{border-top:1px solid rgba(0,0,0,.2);margin-bottom:1em}.form-button a{text-decoration:none}.form-button h2{margin-bottom:.4em}.btn,.form-button a,button,input[type=button]{background:#3b3738;font-size:1.2em;color:#f6f6f6;-webkit-border-radius:2px;border:0;-moz-border-radius:2px;border-radius:2px;display:inline-block;padding:.5em 1em;width:47%;max-width:320px;cursor:pointer;vertical-align:top;text-align:center}.form-button .examination-info-wrap{display:flex;flex-direction:row;align-items:center;justify-content:space-between;width:100%}.form-button .examination-info-wrap>*{width:50%}.form-button .examination-info{display:flex;flex-direction:column;gap:.5em}.examination-list button{display:block}.examination-list .help-text.notice{margin-top:10px}div.form-button,.help-text{clear:both}div.help-text div{margin-top:10px}*{box-sizing:border-box}table{border-collapse:collapse}th,td{padding:.3em;border:2px solid #575757}.form{font-size:1.3em;line-height:calc(100% + .4em)}.form div.html-content,.form fieldset{margin-top:2em;margin-bottom:2em}.form legend{margin-bottom:.5em;display:inline}.form input{margin:0}.form .input-wrap{box-sizing:border-box;line-height:1px}.form .input-wrap.inline{display:inline-block}.form fieldset h1:first-child,.form div h1:first-child,.form fieldset h2:first-child,.form div h2:first-child,.form fieldset h3:first-child,.form div h3:first-child,.form fieldset h4:first-child,.form div h4:first-child,.form fieldset h5:first-child,.form div h5:first-child,.form fieldset p:first-child,.form div p:first-child,.form fieldset ul:first-child,.form div ul:first-child,.form fieldset ol:first-child,.form div ol:first-child{padding-top:0;margin-top:0}.form fieldset h1:last-child,.form div h1:last-child,.form fieldset h2:last-child,.form div h2:last-child,.form fieldset h3:last-child,.form div h3:last-child,.form fieldset h4:last-child,.form div h4:last-child,.form fieldset h5:last-child,.form div h5:last-child,.form fieldset p:last-child,.form div p:last-child,.form fieldset ul:last-child,.form div ul:last-child,.form fieldset ol:last-child,.form div ol:last-child{padding-bottom:0;margin-bottom:0}.form table+table{margin-top:1.5em}@keyframes saved-border{from{padding:.3em;border:.3em solid #444}to{padding:.3em;border:.3em solid #fcfcfc}}.form .radio,.form .checkboxes{display:-ms-grid;display:grid;-ms-grid-columns:2em auto;grid-template-columns:2em auto}.form .radio .input-wrap,.form .checkboxes .input-wrap{-ms-grid-column:1;grid-column:1;-ms-grid-column-align:center;justify-self:center;-ms-grid-row-align:center;align-self:center;display:flex;justify-content:center;align-items:center;position:relative}.form .inline.input-wrap{position:relative}.form .radio .input-wrap input,.form .checkboxes .input-wrap input{position:absolute;-ms-transform:translate(-50%,-50%)}.form .radio .input-wrap:before,.form .checkboxes .input-wrap:before{content:””;position:absolute;width:100%;height:100%;-ms-transform:translate(-50%,-50%)}@keyframes saving-border{0%{border-color:#444}50%{border-color:#aaa}100%{border-color:#444}}.form .radio .input-wrap.saving:before,.form .checkboxes .input-wrap.saving:before,.form .inline .inline-status.saving{padding:.3em;border:.3em solid #444;animation-name:saving-border;animation-duration:8s;animation-iteration-count:infinite;animation-delay:5s}.form .inline.saving:before,.form .inline .inline-status.saving{content:””;padding:.3em;border:.3em solid #444;border-radius:7px;border-color:#444;animation-name:saving-border;animation-duration:8s;animation-iteration-count:infinite;animation-delay:5s;position:absolute;top:-.3rem;right:-.3rem;bottom:-.3rem;left:-.3rem;pointer-events:none;z-index:1}.form .radio .input-wrap.saved-animation:before,.form .checkboxes .input-wrap.saved-animation:before{animation-name:saved-border;animation-duration:.5s}.form .radio .input-wrap,.form .radio .input-wrap:before{border-radius:50%}.form .checkboxes .input-wrap,.form .checkboxes .input-wrap:before{border-radius:30%}@keyframes saved-text{0%{opacity:0;z-index:1;visibility:visible}10%{opacity:1;z-index:1;visibility:visible}90%{opacity:1;z-index:1;visibility:visible}100%{opacity:0;z-index:1;visibility:visible}}.form .radio .input-wrap.saved-animation:after,.form .checkboxes .input-wrap.saved-animation:after,.form .connect-options .connection.saved-animation:after,.form .text .text-saved-notification.saved-animation:after,.form .inline.saved-animation:after,.form .inline-status.saved-animation:after,.form .inline-saved-notification.saved-animation:after{content:attr(data-saved-message);position:absolute;bottom:calc(100% + .8em);display:block;background-color:#444;color:#fcfcfc;padding:.4em;vertical-align:middle;line-height:1em;z-index:-1;opacity:0;font-size:1.1rem;animation-name:saved-text;animation-duration:3s;visibility:hidden;-ms-transform:translate(-50%,0%)}.form .text .text-saved-notification{position:relative}.form .inline .inline-saved-notification{position:absolute;top:0;left:0;right:0}.form .text .text-saved-notification.saved-animation:after{bottom:.8em;left:50%;transform:translateX(-50%)}.form .inline.saved-animation:after,.form .inline-status.saved-animation:after,.form .inline .inline-saved-notification:after{bottom:calc(100% + .4em);left:50%;transform:translateX(-50%)}.form input,.form label{cursor:pointer}.form input[type=text]{cursor:auto}.form .radio label,.form .checkboxes label{-ms-grid-column:2;grid-column:2;padding:.5em;display:block}.form .radio.delete-answer label{font-style:italic}.form .connect-options{display:-ms-grid;display:grid;-ms-grid-columns:1fr 4em 1fr;grid-template-columns:1fr 4em 1fr}.form .connect-options label,.form .connect-options input{display:block}.form .connect-options .connect-options-from{-ms-grid-column:1;grid-column:1;text-align:right}.form .connect-options .connect-options-to{-ms-grid-column:3;grid-column:3}.form .connect-options .connect-option{margin:.5em;padding:.5em}.form .connect-options .connection{padding:0;position:relative;display:flex;justify-content:center}.form .connect-options .connection{top:calc(1.5em - 4px);height:calc(100% + 8px)}.form .connect-options .connect-options-to,.form .connect-options .connection-input{display:none}.form .connect-options .connect-options-to.active,.form .connect-options .connection-input.active{display:block}.form .connect-options .connect-options-from,.form .connect-options .connect-options-to{border:3px solid transparent}.form .connect-options input:checked+.connect-option,.form .connect-options input:focus+.connect-option{border-color:#575757}.form .connect-options input:checked+.connect-option{border-style:dashed}.form .connect-options input:focus+.connect-option{border-style:solid}.form .connect-options .connect-option{cursor:pointer}.form .connect-options .connect-option.connect-options-to-default{cursor:default}.form .connect-options.active .connection svg .connection-line{opacity:.25}.form .connect-options.active input:checked+.connect-options-to.active+.connection svg .connection-line{opacity:1}.form .connect-options.active input:checked+.connect-options-to.active+.connection{z-index:1}.form .connect-options .connection svg{position:absolute;width:100%;height:100%}.form .connect-options .connection.saving svg .connection-line{stroke-dasharray:5}.form .connect-options input{opacity:0;z-index:-1}.form .connect-options .help-from{text-align:right}.form .connect-options .help-from,.form .connect-options .help-to{margin:.5em;padding:.5em;background-color:#444;color:#fcfcfc}.form .connect-options.active .help-from{visibility:hidden}.form .connect-options:not(.active) .help-to{visibility:hidden}.form .essay .essay-wrap{display:-ms-grid;display:grid;-ms-grid-columns:100%;grid-template-columns:100%;width:100%}.form .essay .essay-wrap textarea.text-input,.form .essay .essay-wrap.auto-grow:after{-ms-grid-row:1;-ms-grid-column:1;grid-row:1;grid-column:1;font-family:Helvetica,Arial,sans-serif;font-size:1em;min-height:10em;max-height:calc(100vh - 10em)}.form .essay .essay-wrap.auto-grow:after{display:block;content:attr(data-value) ” ”;white-space:pre-wrap;visibility:hidden;overflow:hidden}.form .essay .essay-wrap textarea.text-input{resize:none}.form .text .text-controls button{font-size:1.2rem;width:auto}.form .text .text-controls{display:flex;flex-direction:row;align-items:center;margin-top:.5em;justify-content:flex-end}.form .text .status{margin-right:1em;font-size:1.2rem}.form .text .status .has-been-modified,.form .text .status .saving-changes,.form .text .status .too-long-answer{display:none}.form .text .status .too-long-answer{color:red}.form .text.changed .status .has-been-modified,.form .text.saving .status .saving-changes,.form .text.too-long-answer .status .too-long-answer{display:inline}.form .text.changed.saving .status .has-been-modified{display:none}.form .text.too-long-answer button{background-color:#575757}.form .single-line input.text-input{font-size:.8em}.form .inline-item{white-space:nowrap;display:inline-block}.form .inline-item label{font-size:1rem;font-style:italic;margin-right:1px}.inline.select select,.inline.single-line input{max-width:100%}.inline.select select{font-size:.8em;color:#444;text-overflow:ellipsis}.inline.select select[data-current-value=””],.inline.select select option[value=””]{font-style:italic}.inline.select select option{font-style:normal}.inline.single-line input{font-size:.8em}.inline .inline-status{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}div.message-container{position:fixed;top:0;left:0;right:0;bottom:0;z-index:10;background-color:#fcfcfc;background:linear-gradient(90deg,#fcfcfc 10%,#ddd 30%,#ddd 70%,#fcfcfc 90%);visibility:hidden}div.message-container:before{content:””;position:absolute;top:0;bottom:20px;width:908px;margin-left:50%;transform:translateX(-50%);box-shadow:0 0 5px #222;background-color:#fcfcfc}#default-message-container div.message-container{visibility:visible;z-index:-1}#active-message-container div.message-container:last-of-type{visibility:visible}div.message-container div.message{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);display:inline-block;padding-top:25px;font-size:20px;text-align:center;width:calc(100% - 2em);max-width:calc(908px - 2em)}#page-load-failure div.message{text-align:left}div.message-container div.message div{margin-bottom:10px}div.message-container div.message div.title{font-weight:700}div.message-container div.message:after{content:””;display:block;position:absolute;background:center no-repeat url(../img/loader.gif);width:100%;height:60px;visibility:hidden}div.message-container div.message.loading:after{visibility:visible}button.confirm{background-color:#006400}button.cancel{background-color:#666}div.examination-status{font-size:large}div.examination-status span.returned{color:green}div.notification-container{display:block;position:absolute;left:0;right:0;text-align:center;width:100%}div.notification-container div.notification{display:inline-block;border:2px solid #2b2b2b;color:#2b2b2b;padding:.3rem;background-color:#fcfcfc}fieldset.disabled{opacity:.5}fieldset.question-item.invalid{border:2px solid red}fieldset.question-item.invalid div.validation-error-message{display:block;color:red;padding:0 0 .5em}form.ajax-submit:before{content:””;background-image:url(../img/loader.gif);display:block;position:absolute;width:0;height:0;z-index:-1000}form.ajax-submit{position:relative}form.ajax-submit div.processing-notification{display:none}form.ajax-submit.processing div.processing-notification div.processing-text{z-index:2;font-size:1.5rem;background-color:#fff;display:inline-block;position:absolute;background-color:#fcfcfc;margin:1em 0;text-align:center;left:50%;transform:translateX(-50%);bottom:calc(50% + 2em);width:100%}form.ajax-submit.processing div.processing-notification{display:block;position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;z-index:2;background:center no-repeat url(../img/loader.gif);background-color:rgba(252,252,252,.8)}form.ajax-submit.processing div.opaque{background-color:rgba(252,252,252,1) !important}form.ajax-submit div.processing-error-message{display:none}form.ajax-submit.processing-error fieldset.submit div.processing-error-message{color:red;display:block;margin-bottom:1em;font-size:1.3rem}div.validation-error-message{display:none}form.validation-error fieldset.submit div.validation-error-message{color:red;display:block;margin-bottom:1em;font-size:1.3em}form.require-all-fields legend{position:relative}form.require-all-fields fieldset:not(.disabled) legend{padding-right:.8em}form.require-all-fields fieldset:not(.disabled) legend:empty{padding-left:0;padding-right:0}form.require-all-fields fieldset:not(.disabled) legend:not(:empty):after{content:”*”;color:red;position:absolute;top:0;right:.2em}div#calcwrapper,div#calcwrapper *{box-sizing:content-box}div#calcwrapper{position:fixed;top:50%;transform:translateY(-50%);right:0;z-index:100}#calcwrapper.closed div.calctab.close,#calcwrapper.opened div.calctab.open{display:none}#calcwrapper.closed{transform:translate(100%,-50%)}div.calctab{cursor:pointer;padding:5px;border:1px solid #2b2b2b;border-right:none;border-radius:8px 0 0 8px;background-color:#2b2b2b;text-transform:uppercase;width:10px;word-break:break-all;padding:5px 13px 5px 12px;text-align:center;font-size:16px;color:#fff;position:absolute;transform:translateX(-100%)}div.calctab.open{position:absolute;top:50%;transform:translate(-100%,-50%)}div.calctab.close{background-color:#eee;color:red}div#calc{border:1px solid #2b2b2b;width:286px;padding:3px;border-radius:0 8px 8px;background-color:#eee}div#calc div#display{clear:both}input#expression,input#result{border:1px solid #2b2b2b;margin:2px;width:271px;text-align:right;padding:4px;font-size:18px}input#result{background:#d3d3d3;border-top-left-radius:5px;border-top-right-radius:5px}span.resultbg{position:relative}span.resultbg input{padding-left:18px}span.resultbg:before{position:absolute;top:0;content:”=”;left:5px}div#calc div.keyrow{clear:both;display:table-row}div#calc button.key,div#calc div.nokey{border:1px solid #2b2b2b;margin:2px;padding:3px;float:left;width:45px;height:20px;line-height:19px;text-align:center;vertical-align:middle;cursor:pointer;display:table-cell;border-radius:5px}div.nokey{border:1px solid transparent !important}div#calc button.key,input#expression,input#result{font-family:”DejaVu Sans”,Helvetica,Arial,sans-serif}div#calc button{color:#000;font-size:100%}div#calc button.key:hover{background:#ddd}div#calc button.key:active{background:#ccc}div.larger{font-size:22px}div#calc .lettersymbol{font-style:italic}div#calc button.trigonometry,div#calc button.power,div#calc button.logarithm{background:#ffffe0}div#calc button.arithmetics,div#calc button.parenthesis{background:#e0ffff}div#calc button.storage{background:#d3d3d3}div#calc button.available{background:#90ee90}div#calc button.delete{background:#ffa07a}div#calc button.number,div#calc button.equals{background:#fff}div#calc button.key sup,div#calc button.key sub{font-size:12px;vertical-align:baseline;position:relative}div#calc button.key sup{top:-.4em}div#calc button.key sub{top:.4em}input::-ms-clear{display:none}div.tex-loading{display:inline-block;background-color:#ededed;margin:.14em;font-size:.9em;padding:0 .3em}.mq-math-mode{font-size:1em} </style>

  <script type="text/javascript">
  window.mathParser=(function(){"use strict";function peg$subclass(child,parent){function ctor(){this.constructor=child;}

ctor.prototype=parent.prototype;child.prototype=new ctor();} function peg$SyntaxError(message,expected,found,location){this.message=message;this.expected=expected;this.found=found;this.location=location;this.name="SyntaxError";if(typeof Error.captureStackTrace==="function"){Error.captureStackTrace(this,peg$SyntaxError);}} peg$subclass(peg$SyntaxError,Error);peg$SyntaxError.buildMessage=function(expected,found){var DESCRIBE_EXPECTATION_FNS={literal:function(expectation){return”\””+literalEscape(expectation.text)+”\””;},”class”:function(expectation){var escapedParts=””,i;for(i=0;i<expectation.parts.length;i++){escapedParts+=expectation.parts[i]instanceof Array?classEscape(expectation.parts[i][0])+”-”+classEscape(expectation.parts[i][1]):classEscape(expectation.parts[i]);} return”[”+(expectation.inverted?”^”:””)+escapedParts+”]”;},any:function(expectation){return”any character”;},end:function(expectation){return”end of input”;},other:function(expectation){return expectation.description;}};function hex(ch){return ch.charCodeAt(0).toString(16).toUpperCase();} function literalEscape(s){return s.replace(/\\/g,'\\\\').replace(/”/g,'\\”').replace(/\0/g,'\\0').replace(/\t/g,'\\t').replace(/\n/g,'\\n').replace(/\r/g,'\\r').replace(/[\x00-\x0F]/g,function(ch){return'\\x0'+hex(ch);}).replace(/[\x10-\x1F\x7F-\x9F]/g,function(ch){return'\\x'+hex(ch);});} function classEscape(s){return s.replace(/\\/g,'\\\\').replace(/\]/g,'\\]').replace(/\^/g,'\\^').replace(/-/g,'\\-').replace(/\0/g,'\\0').replace(/\t/g,'\\t').replace(/\n/g,'\\n').replace(/\r/g,'\\r').replace(/[\x00-\x0F]/g,function(ch){return'\\x0'+hex(ch);}).replace(/[\x10-\x1F\x7F-\x9F]/g,function(ch){return'\\x'+hex(ch);});} function describeExpectation(expectation){return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);} function describeExpected(expected){var descriptions=new Array(expected.length),i,j;for(i=0;i<expected.length;i++){descriptions[i]=describeExpectation(expected[i]);} descriptions.sort();if(descriptions.length>0){for(i=1,j=1;i<descriptions.length;i++){if(descriptions[i-1]!==descriptions[i]){descriptions[j]=descriptions[i];j++;}} descriptions.length=j;} switch(descriptions.length){case 1:return descriptions[0];case 2:return descriptions[0]+” or ”+descriptions[1];default:return descriptions.slice(0,-1).join(”, ”) +”, or ” +descriptions[descriptions.length-1];}} function describeFound(found){return found?”\””+literalEscape(found)+”\””:”end of input”;} return”Expected ”+describeExpected(expected)+” but ”+describeFound(found)+” found.”;};function toCustomPrecision(number){var PRECISION_DECIMALS_SMALL=8;var PRECISION_DECIMALS_BIG=14;var PRECISION_THRESHOLD=0.01;var precision;if(Math.abs(number)<PRECISION_THRESHOLD){precision=PRECISION_DECIMALS_SMALL;}else{precision=PRECISION_DECIMALS_BIG;} return parseFloat(number.toPrecision(precision));} function peg$parse(input,options){options=options!==void 0?options:{};var peg$FAILED={},peg$startRuleFunctions={start:peg$parsestart},peg$startRuleFunction=peg$parsestart,peg$c0=/^[+\-]/,peg$c1=peg$classExpectation(["+","-"],false,false),peg$c2=function(left,right){var ret=left;var i;if(isNaN(ret)||!isFinite(ret)) return ret for(i=0;i<right.length;++i){var num=right[i][1];if(isNaN(num)||!isFinite(num)) return num if(right[i][0]==”+”){ret=ret+num;}else if(right[i][0]==”-”){ret=ret-num;} if(i<right.length-1){ret=toCustomPrecision(ret);}} return parseFloat(ret);},peg$c3=/^[\xD7\xF7*\/]/,peg$c4=peg$classExpectation(["\xD7","\xF7","*","/"],false,false),peg$c5=function(left,right){var ret=left;var i;if(isNaN(ret)||!isFinite(ret)) return ret for(i=0;i<right.length;++i){var num=right[i][1];if(isNaN(num)||!isFinite(num)) return num if(right[i][0]==”×”||right[i][0]==”*”){ret=ret*num;}else if(right[i][0]==”÷”||right[i][0]==”/”){ret=ret / num;}else{ret=ret*right[i][0];} if(i<right.length-1){ret=toCustomPrecision(ret);}} return parseFloat(ret);},peg$c6=/^[\-]/,peg$c7=peg$classExpectation(["-"],false,false),peg$c8=function(sign,expression){var ret=expression;if(sign){ret=-ret;} return ret;},peg$c9="log(",peg$c10=peg$literalExpectation("log(",false),peg$c11=”)”,peg$c12=peg$literalExpectation(”)”,false),peg$c13=function(operand){return Math.log(operand)/ Math.LN10;},peg$c14=”ln(”,peg$c15=peg$literalExpectation(”ln(”,false),peg$c16=function(operand){return Math.log(operand);},peg$c17=”\u221A”,peg$c18=peg$literalExpectation(”\u221A”,false),peg$c19=function(radicand){return Math.sqrt(radicand);},peg$c20=”^”,peg$c21=peg$literalExpectation(”^”,false),peg$c22=function(operand,exponent){return Math.pow(operand,exponent);},peg$c23=”sin(”,peg$c24=peg$literalExpectation(”sin(”,false),peg$c25=function(operand){return Math.sin(operand*(Math.PI / 180));},peg$c26=”cos(”,peg$c27=peg$literalExpectation(”cos(”,false),peg$c28=function(operand){return operand==90?0:Math.cos(operand*(Math.PI / 180));},peg$c29=”tan(”,peg$c30=peg$literalExpectation(”tan(”,false),peg$c31=function(operand){return operand==90?Number.NaN:Math.tan(operand*(Math.PI / 180));},peg$c32=”asin(”,peg$c33=peg$literalExpectation(”asin(”,false),peg$c34=function(operand){return Math.asin(operand)/(Math.PI / 180);},peg$c35=”acos(”,peg$c36=peg$literalExpectation(”acos(”,false),peg$c37=function(operand){return Math.acos(operand)/(Math.PI / 180);},peg$c38=”atan(”,peg$c39=peg$literalExpectation(”atan(”,false),peg$c40=function(operand){return Math.atan(operand)/(Math.PI / 180);},peg$c41=”!”,peg$c42=peg$literalExpectation(”!”,false),peg$c43=function(operand){var ret=Number.NaN;if(parseInt(operand)===operand&&operand>=0){ret=1;for(var i=2;i⇐operand;i++){ret*=i}} return ret;},peg$c44="(",peg$c45=peg$literalExpectation("(",false),peg$c46=function(additive){return additive;},peg$c47="\u03C0",peg$c48=peg$literalExpectation("\u03C0",false),peg$c49=function(operand){return operand*Math.PI;},peg$c50=function(){return Math.PI;},peg$c51=”e”,peg$c52=peg$literalExpectation(”e”,false),peg$c53=function(operand){return operand*Math.E;},peg$c54=function(){return Math.E;},peg$c55=/^[0-9]/,peg$c56=peg$classExpectation([["0","9"]],false,false),peg$c57=/^[.]/,peg$c58=peg$classExpectation([”.”],false,false),peg$c59=function(wholepart,fractionalpart){var ret;if(fractionalpart){ret=parseFloat(wholepart.join(””)+”.”+fractionalpart[1].join(””));}else{ret=parseInt(wholepart.join(””));} return ret;},peg$c60=function(fractionalpart){return parseFloat("0."+fractionalpart[1].join(""));},peg$currPos=0,peg$savedPos=0,peg$posDetailsCache=[{line:1,column:1}],peg$maxFailPos=0,peg$maxFailExpected=[],peg$silentFails=0,peg$result;if(”startRule”in options){if(!(options.startRule in peg$startRuleFunctions)){throw new Error(”Can't start parsing from rule \””+options.startRule+”\”.”);} peg$startRuleFunction=peg$startRuleFunctions[options.startRule];} function text(){return input.substring(peg$savedPos,peg$currPos);} function location(){return peg$computeLocation(peg$savedPos,peg$currPos);} function expected(description,location){location=location!==void 0?location:peg$computeLocation(peg$savedPos,peg$currPos) throw peg$buildStructuredError([peg$otherExpectation(description)],input.substring(peg$savedPos,peg$currPos),location);} function error(message,location){location=location!==void 0?location:peg$computeLocation(peg$savedPos,peg$currPos) throw peg$buildSimpleError(message,location);} function peg$literalExpectation(text,ignoreCase){return{type:”literal”,text:text,ignoreCase:ignoreCase};} function peg$classExpectation(parts,inverted,ignoreCase){return{type:”class”,parts:parts,inverted:inverted,ignoreCase:ignoreCase};} function peg$anyExpectation(){return{type:”any”};} function peg$endExpectation(){return{type:”end”};} function peg$otherExpectation(description){return{type:”other”,description:description};} function peg$computePosDetails(pos){var details=peg$posDetailsCache[pos],p;if(details){return details;}else{p=pos-1;while(!peg$posDetailsCache[p]){p–;} details=peg$posDetailsCache[p];details={line:details.line,column:details.column};while(p<pos){if(input.charCodeAt(p)===10){details.line++;details.column=1;}else{details.column++;} p++;} peg$posDetailsCache[pos]=details;return details;}} function peg$computeLocation(startPos,endPos){var startPosDetails=peg$computePosDetails(startPos),endPosDetails=peg$computePosDetails(endPos);return{start:{offset:startPos,line:startPosDetails.line,column:startPosDetails.column},end:{offset:endPos,line:endPosDetails.line,column:endPosDetails.column}};} function peg$fail(expected){if(peg$currPos<peg$maxFailPos){return;} if(peg$currPos>peg$maxFailPos){peg$maxFailPos=peg$currPos;peg$maxFailExpected=[];} peg$maxFailExpected.push(expected);} function peg$buildSimpleError(message,location){return new peg$SyntaxError(message,null,null,location);} function peg$buildStructuredError(expected,found,location){return new peg$SyntaxError(peg$SyntaxError.buildMessage(expected,found),expected,found,location);} function peg$parsestart(){var s0;s0=peg$parseadditive();return s0;} function peg$parseadditive(){var s0,s1,s2,s3,s4,s5;s0=peg$currPos;s1=peg$parsemultiplicative();if(s1!==peg$FAILED){s2=[];s3=peg$currPos;if(peg$c0.test(input.charAt(peg$currPos))){s4=input.charAt(peg$currPos);peg$currPos++;}else{s4=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c1);}} if(s4!==peg$FAILED){s5=peg$parsemultiplicative();if(s5!==peg$FAILED){s4=[s4,s5];s3=s4;}else{peg$currPos=s3;s3=peg$FAILED;}}else{peg$currPos=s3;s3=peg$FAILED;} while(s3!==peg$FAILED){s2.push(s3);s3=peg$currPos;if(peg$c0.test(input.charAt(peg$currPos))){s4=input.charAt(peg$currPos);peg$currPos++;}else{s4=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c1);}} if(s4!==peg$FAILED){s5=peg$parsemultiplicative();if(s5!==peg$FAILED){s4=[s4,s5];s3=s4;}else{peg$currPos=s3;s3=peg$FAILED;}}else{peg$currPos=s3;s3=peg$FAILED;}} if(s2!==peg$FAILED){peg$savedPos=s0;s1=peg$c2(s1,s2);s0=s1;}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;} return s0;} function peg$parsemultiplicative(){var s0,s1,s2,s3,s4,s5;s0=peg$currPos;s1=peg$parsesignedexpression();if(s1!==peg$FAILED){s2=[];s3=peg$currPos;if(peg$c3.test(input.charAt(peg$currPos))){s4=input.charAt(peg$currPos);peg$currPos++;}else{s4=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c4);}} if(s4!==peg$FAILED){s5=peg$parsesignedexpression();if(s5!==peg$FAILED){s4=[s4,s5];s3=s4;}else{peg$currPos=s3;s3=peg$FAILED;}}else{peg$currPos=s3;s3=peg$FAILED;} if(s3===peg$FAILED){s3=peg$parsetrigonometric();if(s3===peg$FAILED){s3=peg$parsenumberlog();if(s3===peg$FAILED){s3=peg$parsesquareroot();}}} while(s3!==peg$FAILED){s2.push(s3);s3=peg$currPos;if(peg$c3.test(input.charAt(peg$currPos))){s4=input.charAt(peg$currPos);peg$currPos++;}else{s4=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c4);}} if(s4!==peg$FAILED){s5=peg$parsesignedexpression();if(s5!==peg$FAILED){s4=[s4,s5];s3=s4;}else{peg$currPos=s3;s3=peg$FAILED;}}else{peg$currPos=s3;s3=peg$FAILED;} if(s3===peg$FAILED){s3=peg$parsetrigonometric();if(s3===peg$FAILED){s3=peg$parsenumberlog();if(s3===peg$FAILED){s3=peg$parsesquareroot();}}}} if(s2!==peg$FAILED){peg$savedPos=s0;s1=peg$c5(s1,s2);s0=s1;}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;} return s0;} function peg$parsesignedexpression(){var s0,s1,s2;s0=peg$currPos;if(peg$c6.test(input.charAt(peg$currPos))){s1=input.charAt(peg$currPos);peg$currPos++;}else{s1=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c7);}} if(s1===peg$FAILED){s1=null;} if(s1!==peg$FAILED){s2=peg$parseexpression();if(s2!==peg$FAILED){peg$savedPos=s0;s1=peg$c8(s1,s2);s0=s1;}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;} return s0;} function peg$parseexpression(){var s0;s0=peg$parsenumberlog();if(s0===peg$FAILED){s0=peg$parsepowerandroot();if(s0===peg$FAILED){s0=peg$parsetrigonometric();if(s0===peg$FAILED){s0=peg$parsefactorial();if(s0===peg$FAILED){s0=peg$parsenumberpi();if(s0===peg$FAILED){s0=peg$parsenumbere();if(s0===peg$FAILED){s0=peg$parseprimary();}}}}}} return s0;} function peg$parsenumberlog(){var s0;s0=peg$parselog10();if(s0===peg$FAILED){s0=peg$parseln();} return s0;} function peg$parselog10(){var s0,s1,s2,s3;s0=peg$currPos;if(input.substr(peg$currPos,4)===peg$c9){s1=peg$c9;peg$currPos+=4;}else{s1=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c10);}} if(s1!==peg$FAILED){s2=peg$parseadditive();if(s2!==peg$FAILED){if(input.charCodeAt(peg$currPos)===41){s3=peg$c11;peg$currPos++;}else{s3=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c12);}} if(s3!==peg$FAILED){peg$savedPos=s0;s1=peg$c13(s2);s0=s1;}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;} return s0;} function peg$parseln(){var s0,s1,s2,s3;s0=peg$currPos;if(input.substr(peg$currPos,3)===peg$c14){s1=peg$c14;peg$currPos+=3;}else{s1=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c15);}} if(s1!==peg$FAILED){s2=peg$parseadditive();if(s2!==peg$FAILED){if(input.charCodeAt(peg$currPos)===41){s3=peg$c11;peg$currPos++;}else{s3=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c12);}} if(s3!==peg$FAILED){peg$savedPos=s0;s1=peg$c16(s2);s0=s1;}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;} return s0;} function peg$parsepowerandroot(){var s0;s0=peg$parsesquareroot();if(s0===peg$FAILED){s0=peg$parsenthpower();} return s0;} function peg$parsepowerable(){var s0;s0=peg$parsenumberlog();if(s0===peg$FAILED){s0=peg$parsesquareroot();if(s0===peg$FAILED){s0=peg$parsetrigonometric();if(s0===peg$FAILED){s0=peg$parsefactorial();if(s0===peg$FAILED){s0=peg$parsenumberpi();if(s0===peg$FAILED){s0=peg$parsenumbere();if(s0===peg$FAILED){s0=peg$parseprimary();}}}}}} return s0;} function peg$parsesquareroot(){var s0,s1,s2;s0=peg$currPos;if(input.charCodeAt(peg$currPos)===8730){s1=peg$c17;peg$currPos++;}else{s1=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c18);}} if(s1!==peg$FAILED){s2=peg$parsesignedexpression();if(s2!==peg$FAILED){peg$savedPos=s0;s1=peg$c19(s2);s0=s1;}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;} return s0;} function peg$parsenthpower(){var s0,s1,s2,s3;s0=peg$currPos;s1=peg$parsepowerable();if(s1!==peg$FAILED){if(input.charCodeAt(peg$currPos)===94){s2=peg$c20;peg$currPos++;}else{s2=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c21);}} if(s2!==peg$FAILED){s3=peg$parsesignedexpression();if(s3!==peg$FAILED){peg$savedPos=s0;s1=peg$c22(s1,s3);s0=s1;}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;} return s0;} function peg$parsetrigonometric(){var s0;s0=peg$parsesin();if(s0===peg$FAILED){s0=peg$parsecos();if(s0===peg$FAILED){s0=peg$parsetan();if(s0===peg$FAILED){s0=peg$parsearcsin();if(s0===peg$FAILED){s0=peg$parsearccos();if(s0===peg$FAILED){s0=peg$parsearctan();}}}}} return s0;} function peg$parsesin(){var s0,s1,s2,s3;s0=peg$currPos;if(input.substr(peg$currPos,4)===peg$c23){s1=peg$c23;peg$currPos+=4;}else{s1=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c24);}} if(s1!==peg$FAILED){s2=peg$parseadditive();if(s2!==peg$FAILED){if(input.charCodeAt(peg$currPos)===41){s3=peg$c11;peg$currPos++;}else{s3=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c12);}} if(s3!==peg$FAILED){peg$savedPos=s0;s1=peg$c25(s2);s0=s1;}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;} return s0;} function peg$parsecos(){var s0,s1,s2,s3;s0=peg$currPos;if(input.substr(peg$currPos,4)===peg$c26){s1=peg$c26;peg$currPos+=4;}else{s1=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c27);}} if(s1!==peg$FAILED){s2=peg$parseadditive();if(s2!==peg$FAILED){if(input.charCodeAt(peg$currPos)===41){s3=peg$c11;peg$currPos++;}else{s3=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c12);}} if(s3!==peg$FAILED){peg$savedPos=s0;s1=peg$c28(s2);s0=s1;}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;} return s0;} function peg$parsetan(){var s0,s1,s2,s3;s0=peg$currPos;if(input.substr(peg$currPos,4)===peg$c29){s1=peg$c29;peg$currPos+=4;}else{s1=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c30);}} if(s1!==peg$FAILED){s2=peg$parseadditive();if(s2!==peg$FAILED){if(input.charCodeAt(peg$currPos)===41){s3=peg$c11;peg$currPos++;}else{s3=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c12);}} if(s3!==peg$FAILED){peg$savedPos=s0;s1=peg$c31(s2);s0=s1;}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;} return s0;} function peg$parsearcsin(){var s0,s1,s2,s3;s0=peg$currPos;if(input.substr(peg$currPos,5)===peg$c32){s1=peg$c32;peg$currPos+=5;}else{s1=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c33);}} if(s1!==peg$FAILED){s2=peg$parseadditive();if(s2!==peg$FAILED){if(input.charCodeAt(peg$currPos)===41){s3=peg$c11;peg$currPos++;}else{s3=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c12);}} if(s3!==peg$FAILED){peg$savedPos=s0;s1=peg$c34(s2);s0=s1;}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;} return s0;} function peg$parsearccos(){var s0,s1,s2,s3;s0=peg$currPos;if(input.substr(peg$currPos,5)===peg$c35){s1=peg$c35;peg$currPos+=5;}else{s1=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c36);}} if(s1!==peg$FAILED){s2=peg$parseadditive();if(s2!==peg$FAILED){if(input.charCodeAt(peg$currPos)===41){s3=peg$c11;peg$currPos++;}else{s3=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c12);}} if(s3!==peg$FAILED){peg$savedPos=s0;s1=peg$c37(s2);s0=s1;}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;} return s0;} function peg$parsearctan(){var s0,s1,s2,s3;s0=peg$currPos;if(input.substr(peg$currPos,5)===peg$c38){s1=peg$c38;peg$currPos+=5;}else{s1=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c39);}} if(s1!==peg$FAILED){s2=peg$parseadditive();if(s2!==peg$FAILED){if(input.charCodeAt(peg$currPos)===41){s3=peg$c11;peg$currPos++;}else{s3=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c12);}} if(s3!==peg$FAILED){peg$savedPos=s0;s1=peg$c40(s2);s0=s1;}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;} return s0;} function peg$parsefactorial(){var s0,s1,s2;s0=peg$currPos;s1=peg$parseprimary();if(s1!==peg$FAILED){if(input.charCodeAt(peg$currPos)===33){s2=peg$c41;peg$currPos++;}else{s2=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c42);}} if(s2!==peg$FAILED){peg$savedPos=s0;s1=peg$c43(s1);s0=s1;}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;} return s0;} function peg$parseprimary(){var s0,s1,s2,s3;s0=peg$parsepi();if(s0===peg$FAILED){s0=peg$parsee();if(s0===peg$FAILED){s0=peg$parsenumber();if(s0===peg$FAILED){s0=peg$currPos;if(input.charCodeAt(peg$currPos)===40){s1=peg$c44;peg$currPos++;}else{s1=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c45);}} if(s1!==peg$FAILED){s2=peg$parseadditive();if(s2!==peg$FAILED){if(input.charCodeAt(peg$currPos)===41){s3=peg$c11;peg$currPos++;}else{s3=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c12);}} if(s3!==peg$FAILED){peg$savedPos=s0;s1=peg$c46(s2);s0=s1;}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;}}}} return s0;} function peg$parsenumberpi(){var s0,s1,s2;s0=peg$currPos;s1=peg$parseprimary();if(s1!==peg$FAILED){if(input.charCodeAt(peg$currPos)===960){s2=peg$c47;peg$currPos++;}else{s2=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c48);}} if(s2!==peg$FAILED){peg$savedPos=s0;s1=peg$c49(s1);s0=s1;}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;} return s0;} function peg$parsepi(){var s0,s1;s0=peg$currPos;if(input.charCodeAt(peg$currPos)===960){s1=peg$c47;peg$currPos++;}else{s1=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c48);}} if(s1!==peg$FAILED){peg$savedPos=s0;s1=peg$c50();} s0=s1;return s0;} function peg$parsenumbere(){var s0,s1,s2;s0=peg$currPos;s1=peg$parseprimary();if(s1!==peg$FAILED){if(input.charCodeAt(peg$currPos)===101){s2=peg$c51;peg$currPos++;}else{s2=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c52);}} if(s2!==peg$FAILED){peg$savedPos=s0;s1=peg$c53(s1);s0=s1;}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;} return s0;} function peg$parsee(){var s0,s1;s0=peg$currPos;if(input.charCodeAt(peg$currPos)===101){s1=peg$c51;peg$currPos++;}else{s1=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c52);}} if(s1!==peg$FAILED){peg$savedPos=s0;s1=peg$c54();} s0=s1;return s0;} function peg$parsenumber(){var s0,s1,s2,s3,s4,s5;s0=peg$currPos;s1=[];if(peg$c55.test(input.charAt(peg$currPos))){s2=input.charAt(peg$currPos);peg$currPos++;}else{s2=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c56);}} if(s2!==peg$FAILED){while(s2!==peg$FAILED){s1.push(s2);if(peg$c55.test(input.charAt(peg$currPos))){s2=input.charAt(peg$currPos);peg$currPos++;}else{s2=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c56);}}}}else{s1=peg$FAILED;} if(s1!==peg$FAILED){s2=peg$currPos;if(peg$c57.test(input.charAt(peg$currPos))){s3=input.charAt(peg$currPos);peg$currPos++;}else{s3=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c58);}} if(s3!==peg$FAILED){s4=[];if(peg$c55.test(input.charAt(peg$currPos))){s5=input.charAt(peg$currPos);peg$currPos++;}else{s5=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c56);}} if(s5!==peg$FAILED){while(s5!==peg$FAILED){s4.push(s5);if(peg$c55.test(input.charAt(peg$currPos))){s5=input.charAt(peg$currPos);peg$currPos++;}else{s5=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c56);}}}}else{s4=peg$FAILED;} if(s4!==peg$FAILED){s3=[s3,s4];s2=s3;}else{peg$currPos=s2;s2=peg$FAILED;}}else{peg$currPos=s2;s2=peg$FAILED;} if(s2===peg$FAILED){s2=null;} if(s2!==peg$FAILED){peg$savedPos=s0;s1=peg$c59(s1,s2);s0=s1;}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;} if(s0===peg$FAILED){s0=peg$currPos;s1=peg$currPos;if(peg$c57.test(input.charAt(peg$currPos))){s2=input.charAt(peg$currPos);peg$currPos++;}else{s2=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c58);}} if(s2!==peg$FAILED){s3=[];if(peg$c55.test(input.charAt(peg$currPos))){s4=input.charAt(peg$currPos);peg$currPos++;}else{s4=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c56);}} if(s4!==peg$FAILED){while(s4!==peg$FAILED){s3.push(s4);if(peg$c55.test(input.charAt(peg$currPos))){s4=input.charAt(peg$currPos);peg$currPos++;}else{s4=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c56);}}}}else{s3=peg$FAILED;} if(s3!==peg$FAILED){s2=[s2,s3];s1=s2;}else{peg$currPos=s1;s1=peg$FAILED;}}else{peg$currPos=s1;s1=peg$FAILED;} if(s1!==peg$FAILED){peg$savedPos=s0;s1=peg$c60(s1);} s0=s1;} return s0;} peg$result=peg$startRuleFunction();if(peg$result!==peg$FAILED&&peg$currPos===input.length){return peg$result;}else{if(peg$result!==peg$FAILED&&peg$currPos<input.length){peg$fail(peg$endExpectation());} throw peg$buildStructuredError(peg$maxFailExpected,peg$maxFailPos<input.length?input.charAt(peg$maxFailPos):null,peg$maxFailPos<input.length?peg$computeLocation(peg$maxFailPos,peg$maxFailPos+1):peg$computeLocation(peg$maxFailPos,peg$maxFailPos));}} return{SyntaxError:peg$SyntaxError,parse:peg$parse};})();

  </script>
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  <script type="text/javascript">
  if(!Element.prototype.matches){Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector;}

if(!Element.prototype.closest){Element.prototype.closest=function(s){'use strict';var el=this;do{if(el.matches(s)){return el;} el=el.parentElement||el.parentNode;}while(el!==null&&el.nodeType===1);return null;};} if(window.NodeList&&!NodeList.prototype.forEach){NodeList.prototype.forEach=function(callback,thisArg){'use strict';thisArg=thisArg||window;for(var i=0;i<this.length;i++){callback.call(thisArg,this[i],i,this);}};} Number.isInteger=Number.isInteger||function(value){'use strict';return typeof value==='number'&&isFinite(value)&&Math.floor(value)===value;};if(!String.prototype.repeat){String.prototype.repeat=function(count){'use strict';if(this===null){throw new TypeError('can\'t convert '+this+' to object');} var str=+this;count=+count;if(count!==count){count=0;} if(count<0){throw new RangeError('repeat count must be non-negative');} if(count===Infinity){throw new RangeError('repeat count must be less than infinity');} count=Math.floor(count);if(str.length===0||count===0){return;} if(str.length*count>=Math.pow(2,28)){throw new RangeError('repeat count must not overflow maximum string size');} var maxCount=str.length*count;count=Math.floor(Math.log(count)/ Math.log(2));while(count){str+=str;count–;} str+=str.substring(0,maxCount-str.length);return str;};} if(typeof window.CustomEvent!=='function'){window.CustomEvent=function(eventName,params){'use strict';var bubbles=params.bubbles||false;var cancelable=params.cancelable||false;var detail=params.detail||null;var event=document.createEvent('CustomEvent');event.initCustomEvent(eventName,bubbles,cancelable,detail);return event;};window.CustomEvent.prototype=window.Event.prototype;} if(!Array.prototype.includes){Array.prototype.includes=function(valueToFind){'use strict';return this.indexOf(valueToFind)!==-1;};} (function(){'use strict';var answerSaver;var pinger;function MetaMap(){var metaMap={};document.querySelectorAll('meta').forEach(function(meta){if(meta.name in metaMap){if(Array.isArray(metaMap[meta.name])){metaMap[meta.name].push(meta.content);}else{metaMap[meta.name]=[metaMap[meta.name],meta.content,];}}else{metaMap[meta.name]=meta.content;}});this.getString=function(name){return metaMap[name];};this.getBool=function(name){var value=metaMap[name];if(typeof value==='undefined'){return value;} return value==='true';};this.getInt=function(name){var value=metaMap[name];if(typeof value==='undefined'){return value;} return parseInt(value,10);};this.getArray=function(name){var value=metaMap[name];if(Array.isArray(value)){return value;}else if(typeof value!=='undefined'){return[value];}else{return[];}};} var metaMap=new MetaMap();var appPath=metaMap.getString('app-path');var pageId=metaMap.getString('page-id');var isExaminationPage=metaMap.getBool('examination')===true;var isExaminationForm=metaMap.getBool('examination-form')===true;var timerCheckpoint=metaMap.getInt('timer-checkpoint');var timerCountdown=metaMap.getInt('timer-countdown');var timerTitle=metaMap.getString('timer-title');var basetimeStamp=metaMap.getInt('base-timestamp');var tzOffset=metaMap.getInt('tz-offset');function currentTimestampMs(){return basetimeStamp+window.performance.now();} function getClientTzOffset(){var clientTzOffset=new Date().getTimezoneOffset()*60*1000;return clientTzOffset-tzOffset;} function timestampToTzCorrectedDate(timestamp){var date=new Date();var tzDiff=getClientTzOffset();date.setTime(timestamp+tzDiff);return date;} function debounce(fn,delay){var debounceId=0;return function(){var context=this;var args=arguments;clearTimeout(debounceId);debounceId=setTimeout(function(){fn.apply(context,args);},delay);};} function keyedDebounce(fn,delay){var map=new Map();return function(key){if(map.has(key)){return map.get(key);}else{var debouncedFn=debounce(fn,delay);map.set(key,debouncedFn);return debouncedFn;}};} function DialogHandler(){this.previouslyActiveElement=null;this.mainContentWrapper=document.getElementById('main-content-wrapper');this.hiddenMessageContainer=document.getElementById('hidden-message-container');this.activeMessageContainer=document.getElementById('active-message-container');this.openDialog=function(dialogName){var dialog=document.getElementById(dialogName);if(dialog.parentNode===this.activeMessageContainer){return;} dialog.querySelectorAll('form.ajax-submit.processing-error').forEach(function(form){form.classList.remove('processing-error');});dialog.querySelectorAll('form.ajax-submit fieldset.question-item.invalid').forEach(function(form){form.classList.remove('invalid');});if(!dialog.getAttribute('aria-label')){var dialogLabel=dialog.querySelector('.dialog-label');if(dialogLabel){dialog.setAttribute('aria-label',dialogLabel.textContent);}} var priority=dialog.dataset.messagePriority;var topmostMessage=this.activeMessageContainer.querySelector('div.message-container:last-of-type');if(!topmostMessage){this.previouslyActiveElement=document.activeElement;} if(priority==='logout'){this.activeMessageContainer.appendChild(dialog);}else if(priority==='urgent'){var loginDialog=this.activeMessageContainer.querySelector('div.message-container[data-message-priority=”logout”]');this.activeMessageContainer.insertBefore(dialog,loginDialog);}else if(priority==='background'){var topmostBackgroundMessage=this.activeMessageContainer.querySelector('div.message-container[data-message-priority=”background”]:last-of-type');if(topmostBackgroundMessage){if(topmostMessage.dataset.messagePriority==='background'){this.activeMessageContainer.insertBefore(dialog,topmostMessage);}else{this.activeMessageContainer.insertBefore(dialog,topmostBackgroundMessage.nextSibling);}}else{this.activeMessageContainer.insertBefore(dialog,this.activeMessageContainer.firstChild);}}else{var bottommostUrgentMessage=this.activeMessageContainer.querySelector('div.message-container[data-message-priority=”urgent”]');this.activeMessageContainer.insertBefore(dialog,bottommostUrgentMessage);} this.mainContentWrapper.style.visibility='hidden';this.mainContentWrapper.setAttribute('aria-hidden','true');var newTopmostMessage=this.activeMessageContainer.querySelector('div.message-container:last-of-type');if(dialog===newTopmostMessage){var firstFocusable=dialog.querySelector('input, select, button, [tabindex]');if(firstFocusable){firstFocusable.focus();}else{dialog.focus();}}};this.closeDialog=function(dialogName){this.hiddenMessageContainer.appendChild(document.getElementById(dialogName));if(!this.activeMessageContainer.querySelector('div.message-container')){this.mainContentWrapper.style.visibility='visible';this.mainContentWrapper.setAttribute('aria-hidden','false');if(this.previouslyActiveElement){this.previouslyActiveElement.focus();this.previouslyActiveElement=null;}}};this.isOpen=function(dialogName){var dialog=document.getElementById(dialogName);return dialog.parentNode===this.activeMessageContainer;};} var dialogHandler=new DialogHandler();window.openDialog=function(id){dialogHandler.openDialog(id);};window.closeDialog=function(id){dialogHandler.closeDialog(id);};var REQUEST_KEY_HEADER='Request-Key';var PING_JITTER=1000;var PING_TIMEOUT=20*1000;var PING_DEFAULT_WAIT=10*1000;var PING_NETWORK_ERROR_WAIT=20*1000;var PING_TIMEOUT_WAIT=20*1000;var PING_ABORT_WAIT=10*1000;var PING_FAST_ENOUGH=250;var NETWORK_ERROR_MESSAGE_DELAY=30*1000*2;var NETWORK_ERROR_INTERRUPTION_MESSAGE_DELAY=60*1000*1000;var CHECK_FOCUS_INTERVAL=600;var ANSWER_DELAY=300;var ANSWER_TIMEOUT=PING_TIMEOUT;var ANSWER_RETRY_WAIT=PING_DEFAULT_WAIT;var TEXT_AUTOSAVE_FREQUENCY=30*1000;var TEXT_MODIFICATION_CHECK_DELAY=250;var INLINE_TEXT_AUTOSAVE_DELAY=2*1000;var INLINE_SELECT_AUTOSAVE_DELAY=800;var REQUEST_TIMEOUT=PING_TIMEOUT;var NOTIFICATION_DURATION=10*1000;var FORMULA_SVG_SCALE_FACTOR=1.25;function doRequest(method,path,data,successCallback,errorCallback,csrfToken){var request=new XMLHttpRequest();request.open(method,appPath+path,true);request.timeout=REQUEST_TIMEOUT;request.onload=function(){if(this.status>=200&&this.status<400){successCallback.call(this);}else{errorCallback.call(this,'load');}};request.onerror=function(){errorCallback.call(this,'error');};request.onabort=function(){errorCallback.call(this,'abort');};request.ontimeout=function(){errorCallback.call(this,'timeout');};if(csrfToken){request.setRequestHeader(REQUEST_KEY_HEADER,csrfToken);} request.send(data);} function onEvent(eventNames,handlerSelector,targetFilter,handler){if(!Array.isArray(eventNames)){eventNames=[eventNames];} document.querySelectorAll(handlerSelector).forEach(function(handlerElement){eventNames.forEach(function(eventName){handlerElement.addEventListener(eventName,function(e){if(targetFilter===null){return handler.call(handlerElement,e);}else{var element=e.target;while(element){if(element.matches(targetFilter)){return handler.call(element,e);} if(element===handlerElement){return;} element=element.parentElement;}}},true);});});} function documentReady(fn){if(document.attachEvent?document.readyState==='complete':document.readyState!=='loading'){fn();}else{document.addEventListener('DOMContentLoaded',fn);}} function documentLoaded(fn){if(document.readyState==='complete'){fn();}else{window.addEventListener('load',fn);}} function objectKeys(obj){var keys=[];for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key)){keys.push(key);}} return keys;} function camelToUpper(camelStr){return camelStr.replace(/[\w]([A-Z])/g,function(match){return match[0]+'_'+match[1];}).toUpperCase();} function PingState(){this.working=true;this.errors={};this.lastSuccessfulPing=0;this.connectionErrorTimer=null;this.requestTimestamp=null;this.lastResponseTime=null;this.setConnectionErrorTimeout=function(fn,timeout){this.clearConnectionErrorTimeout();var pingState=this;this.connectionErrorTimer=setTimeout(function(){pingState.clearConnectionErrorTimeout();fn(pingState);},timeout);};this.clearConnectionErrorTimeout=function(){if(this.connectionErrorTimer){clearTimeout(this.connectionErrorTimer);} this.connectionErrorTimer=null;};this.resetErrors=function(){this.errors={};};this.clockIn=function(){this.requestTimestamp=performance.now();};this.clockOut=function(){this.lastResponseTime=null;if(this.requestTimestamp!==null){this.lastResponseTime=Math.round(performance.now()-this.requestTimestamp);}};this.asPingStatusJson=function(){var pingStatus={errorStatus:[],lastResponseTime:this.lastResponseTime};for(var property in this.errors){if(Object.prototype.hasOwnProperty.call(this.errors,property)&&this.errors[property]===true){pingStatus.errorStatus.push(camelToUpper(property));}} return JSON.stringify(pingStatus);};} function checkFocus(pingState){var hasFocus=document.hasFocus();if(!hasFocus){pingState.errors.lostFocus=true;}} function svgViewBox(width,height){return'0 0 '+width+' '+height;} function svgPathDefinition(width,height,classList){function d(template,values){var parts=template.split('?');var interleaved=[];for(var i=0;i<values.length;i++){interleaved.push(parts[i],values[i]);} interleaved.push(parts[parts.length-1]);return interleaved.join();} var margin=4;var bezierCurve=width*0.25;if(classList.contains('horizontal')){return d('M?,? L?,?',[margin,margin,width-margin,margin,]);}else if(classList.contains('down')){return d('M?,? C?,? ?,? ?,?',[margin,margin,bezierCurve,margin,width-bezierCurve,height-margin,width-margin,height-margin,]);}else{return d('M?,? C?,? ?,? ?,?',[margin,height-margin,bezierCurve,height-margin,width-bezierCurve,margin,width-margin,margin,]);}} function createConnectionSvg(referenceElement){var ns='http://www.w3.org/2000/svg';var svg=document.createElementNS(ns,'svg');var width=referenceElement.offsetWidth;var height=referenceElement.offsetHeight;svg.setAttributeNS(null,'viewBox',svgViewBox(width,height));svg.setAttributeNS(null,'preserveAspectRatio','none');svg.setAttributeNS(null,'focusable','false');var path=document.createElementNS(ns,'path');var pathSpec={stroke:'black','stroke-width':3,'stroke-linecap':'round',class:'connection-line',fill:'transparent',d:svgPathDefinition(width,height,referenceElement.classList),};for(var attribute in pathSpec){if(Object.prototype.hasOwnProperty.call(pathSpec,attribute)){path.setAttributeNS(null,attribute,pathSpec[attribute]);}} svg.appendChild(path);return svg;} function setConnectionSvg(container,svg){while(container.firstChild){container.removeChild(container.firstChild);} if(svg){container.appendChild(svg);}} function getRichTextInputValue(textInput){if(!textInput.matches('.formula-editor')){return textInput.innerHTML;}else{var clone=textInput.cloneNode(true);clone.querySelectorAll('[data-js=”mathEditor”]').forEach(function(mathEditor){mathEditor.parentNode.removeChild(mathEditor);});var images=clone.getElementsByTagName('img');while(images.length>0){var image=images[0];var tex=image.alt;if(tex.length>0){var texSource=document.createElement('tex-source');texSource.innerText=tex;image.parentNode.replaceChild(texSource,image);}else{image.parentNode.removeChild(image);}} var topLevelChild=textInput.firstChild;while(topLevelChild){var nextChild=topLevelChild.nextSibling;if(topLevelChild.tagName==='DIV'&&topLevelChild.childNodes.length===0){topLevelChild.parentNode.removeChild(topLevelChild);} topLevelChild=nextChild;} return clone.innerHTML;}} function isRichTextInput(textInput){return textInput.classList.contains('formula-editor');} function getTextInputValue(textInput){return isRichTextInput(textInput)?getRichTextInputValue(textInput):textInput.value;} function getTextInputName(textInput){return textInput.name?textInput.name:textInput.dataset.name;} function getTextInputMaxLength(textInput){return textInput.maxLength?textInput.maxLength:parseInt(textInput.dataset.maxLength);} function encodeMultibyteUnicodeCharactersWithEntities(str){return str.replace(/[^\x00-\xFF]/g,function©{return'&#'+c.charCodeAt(0).toString(10)+';';});} function scaleSvgLength(value,factor){return value.replace(/^(.+?)([a-z%]*)$/,function(_,value,unit){var scaled=parseFloat(value)*factor;var result=+scaled+unit;return result;});} function makeOutputJaxContainer(){var container=document.createElement('div');container.style.visibility='hidden';container.style.position='absolute';container.style.width='0';container.style.height='0';container.innerText='\\({}\\)';return container;} function jaxContainerToSvgUri(container){var svgElem=container.querySelector('svg');if(svgElem){svgElem=svgElem.cloneNode(true);svgElem.setAttribute('width',scaleSvgLength(svgElem.getAttribute('width'),FORMULA_SVG_SCALE_FACTOR));svgElem.setAttribute('height',scaleSvgLength(svgElem.getAttribute('height'),FORMULA_SVG_SCALE_FACTOR));svgElem.setAttribute('xmlns','http://www.w3.org/2000/svg');svgElem.querySelectorAll('use').forEach(function(useElem){if(!useElem.hasAttribute('xmlns:xlink')){useElem.setAttribute('xmlns:xlink','http://www.w3.org/1999/xlink');}});var svgHtml=svgElem.outerHTML;svgHtml=svgHtml.replace(' xlink=',' xmlns:xlink=');svgHtml=svgHtml.replace(/ ns\d+:href/gi,' xlink:href');return'data:image/svg+xml;base64,'+window.btoa(encodeMultibyteUnicodeCharactersWithEntities(svgHtml));}else{return'data:image/svg+xml;base64,'+window.btoa('<'+'?xml version=”1.0” encoding=”UTF-8” standalone=”no”?>\n'+'<svg width=”17px” height=”15px” viewBox=”0 0 17 15” version=”1.1” xmlns=”http://www.w3.org/2000/svg” xmlns:xlink=”http://www.w3.org/1999/xlink”>\n'+'<title>Group 2</title>\n'+'<defs></defs>\n'+'<g stroke=”none” stroke-width=”1” fill=”none” fill-rule=”evenodd”>\n'+' <g transform=”translate(-241.000000, -219.000000)”>\n'+' <g transform=”translate(209.000000, 207.000000)”>\n'+' <rect x=”-1.58632797e-14” y=”0” width=”80” height=”40”></rect>\n'+' <g transform=”translate(32.000000, 12.000000)”>\n'+' <polygon id=”Combined-Shape” fill=”#9B0000” fill-rule=”nonzero” points=”0 15 8.04006 0 16.08012 15”></polygon>\n'+' <polygon id=”Combined-Shape-path” fill=”#FFFFFF” points=”7 11 9 11 9 13 7 13”></polygon>\n'+' <polygon id=”Combined-Shape-path” fill=”#FFFFFF” points=”7 5 9 5 9 10 7 10”></polygon>\n'+' </g>\n'+' </g>\n'+' </g>\n'+'</g>\n'+'</svg>');}} function makeRenderFormulaFunction(){var mathjaxContainer=makeOutputJaxContainer();document.body.appendChild(mathjaxContainer);var outputJaxPromise=new Promise(function(resolve){MathJax.Hub.Queue(['Typeset',MathJax.Hub,mathjaxContainer]);MathJax.Hub.Queue(function(){var outputJax=MathJax.Hub.getAllJax(mathjaxContainer)[0];resolve(outputJax);});});return function(latex,callback){outputJaxPromise.then(function(outputJax){MathJax.Hub.Queue(['Text',outputJax,'\\displaystyle{'+latex+'}']);MathJax.Hub.Queue(function(){callback(jaxContainerToSvgUri(mathjaxContainer));});});};} function loadAnswerCount(callback){var status={total:0,answered:0,saved:0,unsaved:0};var radioItems={};document.querySelectorAll('fieldset > div.radio > div.input-wrap > input').forEach(function(radio){radioItems[radio.name]=true;if(radio.checked){status.answered++;}});status.total+=Object.keys(radioItems).length;var savedRadioCount=document.querySelectorAll('fieldset > div.radio > div.input-wrap.saved').length;status.saved+=savedRadioCount;var unsavedRadioCount=document.querySelectorAll('fieldset > div.radio > div.input-wrap.saving').length;status.unsaved+=unsavedRadioCount;var checkboxItems={};document.querySelectorAll('fieldset > div.checkboxes > div.input-wrap > input').forEach(function(checkbox){checkboxItems[checkbox.name]=true;});var checkboxesCount=Object.keys(checkboxItems).length;status.total+=checkboxesCount;var checkedboxItems={};document.querySelectorAll('fieldset > div.checkboxes > div.input-wrap.saved > input:checked').forEach(function(checkedbox){checkedboxItems[checkedbox.name]=true;});var savedCheckboxesCount=Object.keys(checkedboxItems).length;status.saved+=savedCheckboxesCount;var connectOptionsCount=document.querySelectorAll('fieldset > div.connect-options').length;status.total+=connectOptionsCount;var connectedConnectOptionsItems={};document.querySelectorAll('fieldset div.connect-options input.connection-input:checked').forEach(function(connectionInput){var connectionElement=document.getElementById(connectionInput.dataset.connectionElementId);if(connectionElement.classList.contains('saved')){connectedConnectOptionsItems[connectionInput.dataset.itemId]=true;}});status.saved+=Object.keys(connectedConnectOptionsItems).length;document.querySelectorAll('fieldset > div.text .text-input').forEach(function(textInput){status.total++;if(textInput.dataset.lastSavedValue&&textInput.dataset.lastSavedValue.length>0){status.saved++;} if(textInput.dataset.lastSavedValue!==getTextInputValue(textInput).trim()){status.unsaved++;} if(getTextInputValue(textInput).trim()){status.answered++;}});document.querySelectorAll('.inline-item .text-input').forEach(function(textInput){var inputWrap=textInput.closest('.input-wrap');status.total++;var hasContent=getTextInputValue(textInput).trim().length>0;if(inputWrap.classList.contains('saved')&&hasContent){status.saved++;} if(inputWrap.classList.contains('saving')){status.unsaved++;} if(hasContent){status.answered++;}});document.querySelectorAll('.inline-item select').forEach(function(select){var inlineStatus=select.parentNode.querySelector('.inline-status');status.total++;if(inlineStatus.classList.contains('saved')){status.saved++;} if(inlineStatus.classList.contains('saving')){status.unsaved++;} if(select.value||select.selectedIndex>0){status.answered++;}});callback(status);} function updateAnswerCount(callback){loadAnswerCount(function(status){var displayAllNotAnswered=status.answered<status.total;document.querySelectorAll('.all-not-answered').forEach(function(element){element.style.display=displayAllNotAnswered?:'none';});var displayUnsavedChanges=status.unsaved>0;document.querySelectorAll('.unsaved-answers').forEach(function(element){element.style.display=displayUnsavedChanges?:'none';});var answerStatusContent=document.getElementById('return-confirmation-answer-status');if(answerStatusContent!==null){var templateText=answerStatusContent.dataset.templateText;answerStatusContent.textContent=templateText.replace('{questions}',status.total).replace('{answers}',status.saved);} callback();});} var onloadResizeFunction;documentReady(function(){var enableAutosaving=!!metaMap.getString('answer-key');var connectionCheckOnlyWhenPinging=metaMap.getBool('ping-connection-check-only');pinger={enablePings:!!metaMap.getString('ping-key'),pauseActivatedByPing:false,pingKey:metaMap.getString('ping-key'),currentTimeout:null,eventEndTimeElement:document.querySelector('.event-end-time'),setPingTimeout:function(pingState,timeout){var pinger=this;var jitter=PING_JITTER*2*Math.random()-PING_JITTER;pinger.currentTimeout=setTimeout(function(){pinger.ping(pingState);},timeout+jitter);},ping:function(pingState){if(!this.enablePings){return;} if(!pingState){pingState=new PingState();setInterval(function(){checkFocus(pingState);},CHECK_FOCUS_INTERVAL);} var pinger=this;var networkErrorMessage=document.getElementById('network-error-message');var networkErrorOverMessage=document.getElementById('network-error-over-message');var networkInterruptionDialog='network-error';var request=new XMLHttpRequest();request.open('POST',appPath+'/ping',true);request.timeout=PING_TIMEOUT;request.onload=function(){pingState.clockOut();pingState.clearConnectionErrorTimeout();networkErrorMessage.style.display='none';dialogHandler.closeDialog(networkInterruptionDialog);if(pingState.working===false){networkErrorOverMessage.style.display=;}else{networkErrorOverMessage.style.display='none';} pingState.working=true;if(!pinger.enablePings){return;} if(this.status>=200&&this.status<400){pinger.setPingTimeout(pingState,PING_DEFAULT_WAIT);pingState.lastSuccessfulPing=currentTimestampMs();pingState.resetErrors();var response=JSON.parse(this.response);if(!connectionCheckOnlyWhenPinging){var setRemainingTime=false;var pauseResponse=response.view.includes('pause');var currentPageIdIsValid=response.view.includes(pageId);if(pauseResponse){if(!pinger.pauseActivatedByPing){setRemainingTime=true;pinger.pauseActivatedByPing=true;dialogHandler.openDialog('paused-examination');document.getElementById('pause-over-message').style.display='none';answerSaver.cancelRetries();}}else{if(pinger.pauseActivatedByPing){setRemainingTime=true;pinger.pauseActivatedByPing=false;dialogHandler.closeDialog('paused-examination');document.getElementById('pause-over-message').style.display=;setTimeout(function(){document.getElementById('pause-over-message').style.display='none';},NOTIFICATION_DURATION);answerSaver.flushAnswers();} if(isExaminationPage&&response.totalTimeLeft⇐0||isExaminationForm&&response.sectionTimeLeft⇐0){setRemainingTime=true;if(response.totalTimeLeft⇐0){pinger.stopPinging();} if(!dialogHandler.isOpen('forced-end-examination')){updateAnswerCount(function(){dialogHandler.openDialog('forced-end-examination');});}} if(pingState.lastResponseTime<PING_FAST_ENOUGH){setRemainingTime=true;} if(!currentPageIdIsValid){pinger.stopPinging();dialogHandler.openDialog('forced-refresh');window.location.reload();}} if(setRemainingTime){timerCheckpoint=currentTimestampMs();if(isExaminationForm){timerCountdown=response.sectionTimeLeft;}else{timerCountdown=response.totalTimeLeft;} if(pinger.eventEndTimeElement){var remainingTime=timestampToTzCorrectedDate(currentTimestampMs()+response.totalTimeLeft*1000+1000);var hours=remainingTime.getHours();var minutes=remainingTime.getMinutes();if(minutes<10){minutes='0'+minutes;} var time=hours+'.'+minutes;pinger.eventEndTimeElement.textContent=time;}}}}else if(this.status===401){dialogHandler.openDialog('session-invalid');}else if(this.status===409){dialogHandler.openDialog('invalid-page-load-id');}else{pingState.errors.errorStatus=true;pinger.setPingTimeout(pingState,PING_DEFAULT_WAIT);}};request.onerror=function(){if(pingState.working&&pingState.connectionErrorTimer===null){pingState.setConnectionErrorTimeout(function(){networkErrorMessage.style.display=;networkErrorOverMessage.style.display='none';pingState.working=false;pingState.setConnectionErrorTimeout(function(){dialogHandler.openDialog(networkInterruptionDialog);timerCountdown=null;},NETWORK_ERROR_INTERRUPTION_MESSAGE_DELAY-NETWORK_ERROR_MESSAGE_DELAY);},NETWORK_ERROR_MESSAGE_DELAY);} pingState.errors.connectionError=true;pinger.setPingTimeout(pingState,PING_NETWORK_ERROR_WAIT);};request.onabort=function(){pingState.errors.requestAborted=true;pinger.setPingTimeout(pingState,PING_ABORT_WAIT);};request.ontimeout=function(){pingState.errors.connectionTimeout=true;pinger.setPingTimeout(pingState,PING_TIMEOUT_WAIT);};request.setRequestHeader(REQUEST_KEY_HEADER,pinger.pingKey);pingState.clockIn();request.send(pingState.asPingStatusJson());},stopPinging:function(){if(this.currentTimeout!==null){clearTimeout(this.currentTimeout);} this.currentTimeout=null;this.enablePings=false;},};if(pinger.enablePings){setTimeout(function(){pinger.ping();},2*1000);} window.addEventListener('beforeunload',function(event){pinger.stopPinging();delete event.returnValue;});function setFieldsetDisabled(fieldset,disabled){fieldset.querySelectorAll('input, select, button, textarea').forEach(function(element){element.disabled=disabled;});if(disabled){fieldset.classList.add('disabled');fieldset.classList.remove('invalid');}else{fieldset.classList.remove('disabled');}} var consentQuestionIds=metaMap.getArray('consent-question-id');var agreeAnswerIds=metaMap.getArray('consent-agree-answer-id');function defineConsentSelectionHandler(consentQuestionId){onEvent('change','#'+consentQuestionId,'input',function(){var agreed=false;for(var i=0;i<agreeAnswerIds.length;i++){agreed=agreed||document.querySelector('.form input[value=”'+agreeAnswerIds[i]+'”]').checked;} document.querySelectorAll('.form fieldset.question-item').forEach(function(fieldset){if(consentQuestionIds.indexOf(fieldset.id)!==-1){setFieldsetDisabled(fieldset,false);}else{setFieldsetDisabled(fieldset,!agreed);}});});} if(consentQuestionIds.length&&agreeAnswerIds.length){document.querySelectorAll('.form fieldset.question-item').forEach(function(fieldset){if(consentQuestionIds.indexOf(fieldset.id)!==-1){setFieldsetDisabled(fieldset,false);}else{setFieldsetDisabled(fieldset,true);}});for(var i=0;i<consentQuestionIds.length;i++){var consentQuestionId=consentQuestionIds[i];defineConsentSelectionHandler(consentQuestionId);}} function checkRequiredFields(form){var isValid=true;if(form.matches('.require-all-fields')){form.querySelectorAll('fieldset.question-item:not(.disabled)').forEach(function(fieldset){var checkedElement=fieldset.querySelector('input:checked, option:checked');if(!checkedElement||!checkedElement.value){isValid=false;fieldset.classList.add('invalid');}});if(!isValid){form.classList.add('validation-error');return isValid;} form.classList.remove('validation-error');}else if(form.matches('.require-credentials')){form.querySelectorAll('div.help-text').forEach(function(helpItem){helpItem.style.display='none';});form.querySelectorAll('div.input.credentials input[type=text], div.input.credentials input[type=password]').forEach(function(input){var val=input.value.trim();if(val===){isValid=false;document.getElementById('error-check-username').style.display=;}});if(!isValid){return isValid;}} return isValid;} function createValidationErrorElement(fieldset,htmlContent){if(!htmlContent){return;} var div=document.createElement('div');div.classList.add('validation-error-message');div.innerHTML=htmlContent;fieldset.insertBefore(div,fieldset.firstChild);} document.querySelectorAll('form.require-all-fields').forEach(function(form){var formMessage=form.dataset.invalidMessage;form.querySelectorAll('fieldset.question-item').forEach(function(fieldset){createValidationErrorElement(fieldset,fieldset.dataset.invalidMessage||formMessage);});});onEvent('submit','body','form.ajax-submit',function(event){event.preventDefault();var form=this;if(form.classList.contains('processing')){return;} form.classList.remove('processing-error');if(!checkRequiredFields(form)){return;} form.classList.add('processing');doRequest('POST',form.getAttribute('action'),new FormData(form),function(){var response=JSON.parse(this.responseText);if(response.location){pinger.stopPinging();window.location.replace(response.location);}else{form.classList.remove('processing');}},function(){form.classList.remove('processing');form.classList.add('processing-error');var event=new CustomEvent('ajax-submit-error',{detail:this});form.dispatchEvent(event);},form.dataset.formKey);});onEvent('change','body','form.require-all-fields input',function(){var form=this.closest('form');form.classList.remove('validation-error');});function AnswerSet(){this.answers={};this.putAnswer=function(answer){var key=answer.itemId;if(answer.subItem2Id){key+='-'+answer.subItemId;} this.answers[key]=answer;};this.forEach=function(fn){var answers=this.answers;objectKeys(answers).forEach(function(key){fn(answers[key],key);});};this.clone=function(){var answers=this.answers;var clone=new AnswerSet();objectKeys(answers).forEach(function(key){clone.putAnswer(answers[key]);});return clone;};this.diff=function(other){var answers=this.answers;var diff=new AnswerSet();objectKeys(answers).forEach(function(key){var current=answers[key];var otherValue=other.get(key);if(current!==otherValue){diff.putAnswer(current);}});return diff;};this.get=function(key){return this.answers[key];};this.isEmpty=function(){return objectKeys(this.answers).length===0;};} function AnswerSaver(){var answerKey=metaMap.getString('answer-key');function requestData(answers){var data=[];answers.forEach(function(answer){data.push({itemId:answer.itemId,subItemId:answer.subItemId,subItem2Id:answer.subItem2Id,setValue:answer.setValue,textValue:answer.textValue,timestamp:answer.timestamp,});});return JSON.stringify(data);} function answerXhr(data,successCallback,errorCallback){var request=new XMLHttpRequest();request.open('POST',appPath+'/answer',true);request.timeout=ANSWER_TIMEOUT;request.onload=function(){if(this.status>=200&&this.status<400){successCallback.call(this);}else{errorCallback.call(this,'load');}};request.onerror=function(){errorCallback.call(this,'error');};request.onabort=function(){errorCallback.call(this,'abort');};request.ontimeout=function(){errorCallback.call(this,'timeout');};request.setRequestHeader(REQUEST_KEY_HEADER,answerKey);request.send(data);} this.savedTimestamps={};this.awaitingAnswers=new AnswerSet();this.retryTimerId=0;this.save=function(answer){this.awaitingAnswers.putAnswer(answer);this.doAnswerRequest();};this.flushAnswers=function(){if(this.awaitingAnswers.isEmpty()){return;} this.doAnswerRequest();};this.cancelRetries=function(){if(this.retryTimerId){clearTimeout(this.retryTimerId);} this.retryTimerId=0;};this.scheduleRetry=function(){var answerSaver=this;answerSaver.cancelRetries();answerSaver.retryTimerId=setTimeout(function(){answerSaver.retryTimerId=0;answerSaver.doAnswerRequest();},ANSWER_RETRY_WAIT);};this.doAnswerRequest=function(){this.cancelRetries();if(this.awaitingAnswers.isEmpty()){return;} var requestAnswers=this.awaitingAnswers.clone();var data=requestData(requestAnswers);var answerSaver=this;answerXhr(data,function(){var xhr=this;var diff=answerSaver.awaitingAnswers.diff(requestAnswers);answerSaver.awaitingAnswers=diff;requestAnswers.forEach(function(answer,key){var savedTimestamp=answerSaver.savedTimestamps[key];if(typeof savedTimestamp==='undefined'){savedTimestamp=0;} if(answer.timestamp>savedTimestamp){answer.savedCallBack.call(xhr);answerSaver.savedTimestamps[key]=answer.timestamp;}});if(!answerSaver.awaitingAnswers.isEmpty()){answerSaver.scheduleRetry();}},function(errorType){var retry=false;if(errorType==='load'&&this.status>=400&&this.status<500){if(this.status===401){dialogHandler.openDialog('session-invalid');}else if(this.status===409){dialogHandler.openDialog('invalid-page-load-id');}else if(this.status===429){retry=true;} if(retry){answerSaver.scheduleRetry();}}else{answerSaver.scheduleRetry();} requestAnswers.forEach(function(answer,key){if(answer.errorCallback){var savedTimestamp=answerSaver.savedTimestamps[key];if(typeof savedTimestamp==='undefined'){savedTimestamp=0;} if(answer.timestamp>savedTimestamp){answer.errorCallback.call(this,retry);}}});});};} answerSaver=new AnswerSaver();function baseSaveAnswer(itemId,options,savedCallBack,errorCallback){answerSaver.save({itemId:itemId,subItemId:options.subItemId,subItem2Id:options.subItem2Id,setValue:options.setValue,textValue:options.textValue,timestamp:Math.round(currentTimestampMs()),savedCallBack:savedCallBack,errorCallback:errorCallback,});} function makeSaveFunction(delay){var debounced=keyedDebounce(baseSaveAnswer,delay);return function(){debounced(arguments[0]).apply(null,arguments);};} var saveAnswer=makeSaveFunction(ANSWER_DELAY);var mouseActivatedConnectFromInput=null;onEvent('mouseup','html',null,function(){mouseActivatedConnectFromInput=null;});onEvent('mousedown','.form','.connect-options .connect-options-from-input',function(){mouseActivatedConnectFromInput=this;});function getConnectToContainer(containedElement){return containedElement.closest('.connect-options');} function switchConnectToOptions(container,connectFromInput){var targetClass;if(connectFromInput&&connectFromInput.checked){targetClass=connectFromInput.dataset.targetClass;}else{targetClass='connect-options-to-default';} container.querySelectorAll('.connect-options-to, .connection-input').forEach(function(target){var matches=target.matches('.'+targetClass);if(matches){target.classList.add('active');}else{target.classList.remove('active');}});} function updateContainerActivity(container){var anyFromChecked=container.querySelector('input.connect-options-from-input:checked');if(anyFromChecked){container.classList.add('active');}else{container.classList.remove('active');}} function clearOtherConnectFromInputs(container,connectFromInput){var referenceId=null;if(connectFromInput){referenceId=connectFromInput.id;} container.querySelectorAll('.connect-options-from-input').forEach(function(otherInput){var isSame=referenceId===otherInput.id;if(!isSame){otherInput.checked=false;}});updateContainerActivity(container);} onEvent('change','.form','.connect-options .connect-options-from-input',function(){var container=getConnectToContainer(this);clearOtherConnectFromInputs(container,this);switchConnectToOptions(container,this);});onEvent('focus','.form','.connect-options .connect-options-from-input',function(){if(mouseActivatedConnectFromInput===this){return;} var container=getConnectToContainer(this);clearOtherConnectFromInputs(container,this);switchConnectToOptions(container,this);});function focusOrChangeAnywhere(e){var targetContainer=getConnectToContainer(e.target);document.querySelectorAll('.form .connect-options').forEach(function(anotherContainer){if(anotherContainer!==targetContainer){clearOtherConnectFromInputs(anotherContainer,null);switchConnectToOptions(anotherContainer,null);anotherContainer.classList.remove('active');}});} onEvent('focus','html',null,focusOrChangeAnywhere);onEvent('change','html',null,focusOrChangeAnywhere);onEvent('change','.form','.connect-options .connection-input',function(){var connectionInput=this;var fromId=connectionInput.dataset.fromId;var toId=connectionInput.dataset.toId;var container=connectionInput.closest('.connect-options');var connectionElement=document.getElementById(connectionInput.dataset.connectionElementId);var isChecked=connectionInput.checked;if(isChecked){container.querySelectorAll('.connection-input').forEach(function(otherInput){var sameFrom=fromId===otherInput.dataset.fromId;var sameTo=toId===otherInput.dataset.toId;if(sameFrom&&!sameTo||!sameFrom&&sameTo){otherInput.checked=false;var otherConnectionElement=document.getElementById(otherInput.dataset.connectionElementId);setConnectionSvg(otherConnectionElement,null);}});var svg=createConnectionSvg(connectionElement);setConnectionSvg(connectionElement,svg);} if(enableAutosaving){connectionElement.classList.add('saving');connectionElement.classList.remove('saved');connectionElement.classList.remove('saved-animation');saveAnswer(container.dataset.itemId,{subItemId:connectionInput.dataset.fromId,subItem2Id:connectionInput.dataset.toId,setValue:connectionInput.checked},function(){connectionElement.classList.remove('saving');connectionElement.classList.add('saved');connectionElement.classList.add('saved-animation');if(!isChecked){setConnectionSvg(connectionElement,null);}});}});onEvent('change','.form','.connect-options input',function(){var container=getConnectToContainer(this);updateContainerActivity(container);});function resize(){document.querySelectorAll('.form .connect-options .connection svg').forEach(function(svg){var container=svg.parentNode;if(!container.offsetParent){return;} var viewBox=svg.getAttribute('viewBox');var width=container.offsetWidth;var height=container.offsetHeight;var referenceBox=svgViewBox(width,height);if(referenceBox!==viewBox){var path=svg.querySelector('path');svg.setAttributeNS(null,'viewBox',referenceBox);path.setAttributeNS(null,'d',svgPathDefinition(width,height,container.classList));}});} onloadResizeFunction=resize;var resizeTimeoutId=null;window.onresize=function(){if(resizeTimeoutId){clearTimeout(resizeTimeoutId);} var id=setTimeout(function(){if(id===resizeTimeoutId){resizeTimeoutId=null;} requestAnimationFrame(resize);},100);resizeTimeoutId=id;};document.querySelectorAll('.form .connect-options input.connection-input:checked').forEach(function(input){var connectionElement=document.getElementById(input.dataset.connectionElementId);var svg=createConnectionSvg(connectionElement);setConnectionSvg(connectionElement,svg);});onEvent('change','.form','.radio input',function(){var fieldset=this.closest('fieldset.question-item');fieldset.classList.remove('invalid');var radio=this;var wrapper=radio.parentNode;var container=radio.closest('fieldset');var allItemButtons=container.querySelectorAll('input');allItemButtons.forEach(function(itemButton){var wrapper=itemButton.parentNode;wrapper.classList.remove('saving');wrapper.classList.remove('saved');wrapper.classList.remove('saved-animation');});if(enableAutosaving){wrapper.classList.add('saving');var deleteItem=fieldset.querySelector('.radio.delete-answer');var deleteInput=deleteItem.querySelector('input');var setValue=radio.dataset.setValue!=='false';deleteInput.value=radio.value;saveAnswer(radio.name,{subItemId:radio.value,subItem2Id:null,setValue:setValue},function(){wrapper.classList.remove('saving');if(radio.checked){wrapper.classList.add('saved');wrapper.classList.add('saved-animation');deleteItem.style.visibility='visible';}});}});onEvent('change','.form','.checkboxes input',function(){this.closest('fieldset.question-item').classList.remove('invalid');var wrapper=this.parentNode;wrapper.classList.remove('saved');wrapper.classList.remove('saved-animation');if(enableAutosaving){wrapper.classList.add('saving');saveAnswer(this.name,{subItemId:this.value,subItem2Id:null,setValue:this.checked},function(){wrapper.classList.remove('saving');wrapper.classList.add('saved');wrapper.classList.add('saved-animation');});}});function stringToDate(dateString){var tzDiff=getClientTzOffset();var date=new Date(dateString);date.setTime(date.getTime()+tzDiff);return date;} var textInputs=document.querySelectorAll('.form .text .text-input');var textIntevalId=0;function setupTextAutosaveInterval(saveTextCallback){if(textIntevalId){clearInterval(textIntevalId);} textIntevalId=setInterval(function(){textInputs.forEach(function(textInput){saveTextCallback(textInput);});},TEXT_AUTOSAVE_FREQUENCY);} function saveText(textInput){var trimmedValue=getTextInputValue(textInput).trim();if(textInput.dataset.lastSavedValue!==trimmedValue){if(trimmedValue.length>getTextInputMaxLength(textInput)){return;} if(textInput.dataset.valueBeingSaved===trimmedValue){return;} textInput.dataset.valueBeingSaved=trimmedValue;var container=textInput.closest('div.text');var savedNotificationElement=container.querySelector('.text-saved-notification');var lastSavedElement=container.querySelector('.status .last-saved');container.classList.add('saving');savedNotificationElement.classList.remove('saved-animation');var itemId=getTextInputName(textInput);var setValue=trimmedValue.length>0;saveAnswer(itemId,{textValue:getTextInputValue(textInput),setValue:setValue},function(){delete textInput.dataset.valueBeingSaved;textInput.dataset.lastSavedValue=trimmedValue;container.classList.remove('changed');container.classList.remove('saving');savedNotificationElement.classList.add('saved-animation');var serverDate=stringToDate(this.getResponseHeader('Date'));var hours=serverDate.getHours();var minutes=serverDate.getMinutes();if(minutes<10){minutes='0'+minutes;} var time=hours+'.'+minutes;lastSavedElement.textContent=lastSavedElement.dataset.template.replace('{time}',time);setupTextAutosaveInterval(saveText);},function(){container.classList.remove('saving');delete textInput.dataset.valueBeingSaved;});}} function updateLengthInfo(container,textInput,counter,value){var maxLength=getTextInputMaxLength(textInput);var errorMessageId=getTextInputName(textInput)+'-too-long-answer';var errorMessageElement=document.getElementById(errorMessageId);if(value.length>maxLength){container.classList.add('too-long-answer');if(errorMessageElement&&textInput.getAttribute('aria-invalid')!=='true'){textInput.setAttribute('aria-invalid','true');textInput.setAttribute('aria-errormessage',errorMessageId);errorMessageElement.setAttribute('role','alert');}}else{container.classList.remove('too-long-answer');if(errorMessageElement&&textInput.getAttribute('aria-invalid')!=='false'){textInput.setAttribute('aria-invalid','false');textInput.removeAttribute('aria-errormessage');errorMessageElement.removeAttribute('role');}} if(counter){counter.textContent=counter.dataset.template.replace('{used}',textInput.value.length).replace('{total}',maxLength);}} onEvent('click','.form','.text button.save-text',function(){var container=this.closest('div.text');var textInput=container.querySelector('.text-input');saveText(textInput);});onEvent(['input','math-input'],'.form','.text .text-input',function(){var textInput=this;if(textInput.tagName==='TEXTAREA'){textInput.parentNode.setAttribute('data-value',textInput.value);} if(textInput.dataset.checkTimeoutId){return;} textInput.dataset.checkTimeoutId=setTimeout(function(){delete textInput.dataset.checkTimeoutId;var container=textInput.closest('div.text');var value=getTextInputValue(textInput).trim();if(textInput.dataset.lastSavedValue!==value){container.classList.add('changed');}else{container.classList.remove('changed');} updateLengthInfo(container,textInput,container.querySelector('.character-count'),value);},TEXT_MODIFICATION_CHECK_DELAY);});textInputs.forEach(function(textInput){var value=getTextInputValue(textInput).trim();textInput.dataset.lastSavedValue=value;var container=textInput.closest('div.text');updateLengthInfo(container,textInput,container.querySelector('.character-count'),value);});if(enableAutosaving&&textInputs.length>0){setupTextAutosaveInterval(saveText);} onEvent('focus','.form','.inline.select select',function(){var select=this;if(select.value&&!select.dataset.currentValue){select.dataset.currentValue=select.value;}});var saveInlineSelectAnswer=makeSaveFunction(INLINE_SELECT_AUTOSAVE_DELAY);onEvent('change','.form','.inline.select select',function(){var select=this;var oldValue=select.dataset.currentValue;var inlinStatus=select.parentNode.querySelector('.inline-status');inlinStatus.classList.remove('saving');inlinStatus.classList.remove('saved');inlinStatus.classList.remove('saved-animation');if(enableAutosaving){inlinStatus.classList.add('saving');var subItemId=select.value;var setValue=true;if(!subItemId){setValue=false;subItemId=oldValue;if(!subItemId){for(var i=0;i<select.options.length;i++){var candidateValue=select.options[i].value;if(candidateValue){subItemId=candidateValue;break;}}}} saveInlineSelectAnswer(select.name,{subItemId:subItemId,subItem2Id:null,setValue:setValue},function(){inlinStatus.classList.remove('saving');inlinStatus.classList.add('saved');inlinStatus.classList.add('saved-animation');});} if(select.options[0].value===&&select.selectedIndex>0){select.remove(0);} select.dataset.currentValue=select.options[select.selectedIndex].value;});var saveInlineTextInputAnswer=makeSaveFunction(INLINE_TEXT_AUTOSAVE_DELAY);onEvent('input','.form','.inline.single-line .text-input',function(){var textInput=this;var wrapper=textInput.parentNode;wrapper.classList.remove('saved');wrapper.classList.remove('saved-animation');var savedNotificationElement=wrapper.querySelector('.inline-saved-notification');if(savedNotificationElement){savedNotificationElement.parentNode.removeChild(savedNotificationElement);} if(enableAutosaving){wrapper.classList.add('saving');var trimmedValue=getTextInputValue(textInput).trim();var setValue=trimmedValue.length>0;saveInlineTextInputAnswer(getTextInputName(textInput),{textValue:getTextInputValue(textInput),setValue:setValue},function(){wrapper.classList.remove('saving');wrapper.classList.add('saved');var savedNotificationElement=document.createElement('DIV');savedNotificationElement.classList.add('saved-animation');savedNotificationElement.classList.add('inline-saved-notification');savedNotificationElement.dataset.savedMessage=wrapper.dataset.savedMessage;wrapper.appendChild(savedNotificationElement);});}});onEvent('click','#active-message-container','div.message-container .close-dialog',function(){var messageContainer=this.closest('div.message-container');dialogHandler.closeDialog(messageContainer.id);});onEvent('click','#logout-button',null,function(){dialogHandler.openDialog('confirm-logout');});onEvent('ajax-submit-error','#login-form',null,function(event){var xhr=event.detail;var status=xhr.status;var errorElement=;if(status===401){errorElement='error-check-username';}else if(status>=400&&status<500){errorElement='error-contact-supervisor';}else if(status>=500&&status<600){errorElement='error-server-failure';}else if(!status){errorElement='error-network-failure';} document.getElementById(errorElement).style.display=;});onEvent('click','#end-examination-btn',null,function(){if(!dialogHandler.isOpen('end-examination')){updateAnswerCount(function(){dialogHandler.openDialog('end-examination');});}});onEvent('click','.start-examination-button',null,function(event){event.preventDefault();var form=document.getElementById('start-examination-form');form.action=this.dataset.action;form.dataset.formKey=this.dataset.formKey;var question=document.getElementById('confirm-start-examination-question');if(question===null){document.getElementById('confirm-start-examination-btn').click();dialogHandler.openDialog('start-examination');}else{question.textContent=question.dataset.text.replace('{examinationName}',this.dataset.examinationName);dialogHandler.openDialog('start-examination');}});onEvent('submit','#language-choice',null,function(event){event.preventDefault();if(!checkRequiredFields(this)){return;} var languageInput=this.querySelector('input[name=”language”]:checked');if(languageInput){var language=languageInput.value;dialogHandler.openDialog('confirm-language-'+language);}});function getVerticalScroll(){if(window.pageYOffset!==undefined){return window.pageYOffset;}else{var d=document,r=d.documentElement,b=d.body;return r.scrollTop||b.scrollTop||0;}} var oldVerticalScroll=getVerticalScroll();var topBarTop=0;var topBarWrap=document.querySelector('div.topbar-wrap');if(topBarWrap){topBarTop=topBarWrap.getBoundingClientRect().top;} var topBarPlaceholder=document.querySelector('div.topbar-placeholder');function resizeTopBarPlaceholder(){if(topBarPlaceholder){topBarPlaceholder.style.height=+topBarWrap.offsetHeight+'px';}} resizeTopBarPlaceholder();if(topBarPlaceholder){var scrollThreshold=Math.abs(oldVerticalScroll+topBarTop);if(oldVerticalScroll>scrollThreshold){document.body.classList.add('fixed');} window.addEventListener('scroll',function(){var verticalScroll=getVerticalScroll();if(oldVerticalScroll>scrollThreshold===verticalScroll>scrollThreshold){return;} if(verticalScroll>scrollThreshold){document.body.classList.add('fixed');}else{document.body.classList.remove('fixed');} oldVerticalScroll=verticalScroll;},true);window.addEventListener('resize',function(){resizeTopBarPlaceholder();},true);} var eTimer;function getRemainingTime(countDown){if(typeof timerCheckpoint==='undefined'){return null;}else{var diff=currentTimestampMs()-timerCheckpoint;return countDown-Math.floor(diff / 1000);}} var remainingTimeElement=document.getElementById('remaining-time');var remainingTimeTitleElement=document.getElementById('remaining-time-title');function updateTextContent(element,text,callback){if(!element){return;} if(element.dataset.textContentCache!==text){element.textContent=text;element.dataset.textContentCache=text;if(callback){callback();}}} function UpdateRemainingTime(){if(typeof timerCheckpoint!=='undefined'&&typeof timerCountdown!=='undefined'&&typeof timerTitle!=='undefined'&&timerCountdown!==null){var timeLeft=getRemainingTime(timerCountdown);if(timerTitle!==null){updateTextContent(remainingTimeTitleElement,timerTitle,resizeTopBarPlaceholder);} if(timeLeft>60){var text=remainingTimeElement.dataset.templateText.replace('{remainingTime}',Math.ceil(timeLeft / 60));updateTextContent(remainingTimeElement,text,resizeTopBarPlaceholder);}else if(timeLeft>0){updateTextContent(remainingTimeElement,remainingTimeElement.dataset.lessThanMinuteText,resizeTopBarPlaceholder);}else{if(eTimer!==undefined){clearInterval(eTimer);} updateTextContent(remainingTimeTitleElement,,resizeTopBarPlaceholder);updateTextContent(remainingTimeElement,,resizeTopBarPlaceholder);if(!dialogHandler.isOpen('forced-end-examination')){updateAnswerCount(function(){dialogHandler.openDialog('forced-end-examination');});}}}else{updateTextContent(remainingTimeTitleElement,,resizeTopBarPlaceholder);updateTextContent(remainingTimeElement,,resizeTopBarPlaceholder);}} (function(){var PRECISION_DECIMALS_SMALL=7;var PRECISION_DECIMALS_BIG=12;var PRECISION_THRESHOLD=0.01;var AVAILABLE_CLASS_NAME='available';var mem;var ans;function displayNotation(number,addParentheses){var rounded;var precision;if(Math.abs(number)<PRECISION_THRESHOLD){precision=PRECISION_DECIMALS_SMALL;}else{precision=PRECISION_DECIMALS_BIG;} rounded=parseFloat(number.toPrecision(precision));var match=rounded.toString().match(/([^e]*)e([+-])(\d+)$/);var notation=rounded;if(match===null){notation=parseFloat(notation);}else{var coef=parseFloat(match[1]);var exp=parseInt(match[2]+match[3]);notation=coef+'×10^'+exp;if(addParentheses){notation='('+notation+')';}} return notation;} function evaluate(){var expr=document.getElementById('expression').value;expr=expr.replace(/\s/g,);expr=expr.replace(/–/g,'-');expr=expr.replace(/ANS/g,'('+ans+')');var result=window.mathParser.parse(expr);return result;} function memoryInActivation(){var memInAvailable=false;if(document.getElementById('expression').value){try{var a=evaluate();if(!isNaN(a)){memInAvailable=true;}}catch(e){memInAvailable=false;}} if(memInAvailable){document.getElementById('m_in').classList.add(AVAILABLE_CLASS_NAME);}else{document.getElementById('m_in').classList.remove(AVAILABLE_CLASS_NAME);}} function handleExpressionChange(fillParentheses,posFromEnd){var expression=document.getElementById('expression').value;if(fillParentheses){var missing=0;for(var i=0;i<expression.length;i++){if(expression[i]==='('){missing++;}else if(expression[i]===')'){missing–;} if(missing<0){break;}} if(missing>0){expression+=')'.repeat(missing);}} expression=expression.replace(/([0-9)eÏ€S])([AsctlaeÏ€(√])/g,'$1×$2');expression=expression.replace(/\*/g,'×');expression=expression.replace(/-/g,'–');expression=expression.replace(/\g,'÷');expression=expression.replace(/,/g,'.');expression=expression.replace(/[^0-9sincotalgeÏ€().+–×÷√^ANS]/g,);document.getElementById('expression').value=expression;document.getElementById('expression').selectionStart=expression.length-posFromEnd;document.getElementById('expression').selectionEnd=document.getElementById('expression').selectionStart;document.getElementById('expression').focus();memoryInActivation();} function calculate(){handleExpressionChange(true,0);var result=Number.NaN;try{result=evaluate();ans=displayNotation(result,true);}catch(e){} if(isNaN(result)){document.getElementById('ans').classList.remove(AVAILABLE_CLASS_NAME);document.getElementById('result').value=document.getElementById('result').dataset.syntaxErrorMessage;}else{document.getElementById('ans').classList.add(AVAILABLE_CLASS_NAME);document.getElementById('result').value=displayNotation(result,false);}} function toExpression(str){str=str.toString();var pos=document.getElementById('expression').selectionStart;var original=document.getElementById('expression').value;document.getElementById('expression').value=[original.slice(0,pos),str,original.slice(pos)].join();var posFromEnd=document.getElementById('expression').value.length-pos-str.length;handleExpressionChange(false,posFromEnd);} onEvent('click','#calc button.key',null,function(){if(this.classList.contains('input')){var content=this.dataset.expression||this.textContent;if(this.dataset.suffix){content+=this.dataset.suffix;} toExpression(content);}else if(this.id==='m_in'){if(this.classList.contains(AVAILABLE_CLASS_NAME)){try{mem=displayNotation(evaluate(),true);document.getElementById('m_out').classList.add(AVAILABLE_CLASS_NAME);}catch(e){mem=null;document.getElementById('m_out').classList.remove(AVAILABLE_CLASS_NAME);memoryInActivation();}}}else if(this.id==='m_out'){if(this.classList.contains(AVAILABLE_CLASS_NAME)&&mem){toExpression(mem);}}else if(this.id==='ans'){if(this.classList.contains(AVAILABLE_CLASS_NAME)){toExpression('ANS');}}else if(this.id==='delete'){var val=document.getElementById('expression').value;document.getElementById('expression').value=val.substr(0,val.length-1);handleExpressionChange(false,0);}else if(this.id==='clearall'){if(document.getElementById('expression').value===){document.getElementById('result').value=;}else{document.getElementById('expression').value=;} memoryInActivation();}else if(this.id==='equals'){calculate();}});onEvent('keyup','#calc','input#expression',function(){var posFromEnd=document.getElementById('expression').value.length-document.getElementById('expression').selectionStart;if(event.which===13||event.keyCode===13){calculate();}else{handleExpressionChange(false,posFromEnd);}});onEvent('click','#calcwrapper','div.calctab',function(){var calcwrapper=document.getElementById('calcwrapper');if(calcwrapper.classList.contains('opened')){calcwrapper.classList.add('closed');calcwrapper.classList.remove('opened');}else{calcwrapper.classList.add('opened');calcwrapper.classList.remove('closed');}});})();(function(){var countdown=document.getElementById('countdown');if(countdown){var countdownInterval;var countdownTarget=metaMap.getInt('countdown-target');var templateText=countdown.dataset.template;var countdownFn=function(){var timeLeft=Math.round1)/ 1000);if(timeLeft<1){clearInterval(countdownInterval);countdown.textContent=countdown.dataset.justAMoment;}else{var seconds=timeLeft%60;timeLeft=Math.floor(timeLeft / 60);var minutes=timeLeft;countdown.textContent=templateText.replace('{minutes}',minutes).replace('{seconds}',seconds);}};countdownInterval=setInterval(countdownFn,1000);countdownFn();}})();onEvent('change','body.login #viewUsername','input',function(e){document.getElementById('username').type=e.target.checked?'text':'password';});onEvent('click','body.login','.language-choice button',function(e){e.preventDefault();var loginContent=document.getElementById('content');loginContent.classList.remove('display-language-fi');loginContent.classList.remove('display-language-sv');loginContent.classList.remove('display-language-en');loginContent.classList.add('display-language-'+this.lang);});if(window.MathJax){var renderFormula=makeRenderFormulaFunction();var renderingFormulaLabel=metaMap.getString('rendering-formula-label');var formulaEditorLanguage=metaMap.getString('formula-editor-language');document.querySelectorAll('.formula-editor').forEach(function(element){var existingFormulas=[];element.querySelectorAll('tex-source').forEach(function(texSource){var initFormula=new Promise(function(resolve){var latex=texSource.innerText;var placeholder=document.createElement('div');placeholder.classList.add('tex-loading');placeholder.textContent=renderingFormulaLabel;texSource.parentNode.replaceChild(placeholder,texSource);renderFormula(latex,function(svg){var img=document.createElement('img');img.src=svg;img.alt=latex;placeholder.parentNode.replaceChild(img,placeholder);resolve();});});existingFormulas.push(initFormula);});onEvent('DOMNodeInserted',`[data-name=”${element.dataset.name}”]`,null,function(e){var newElement=e.target;if(newElement.tagName==='SPAN'&&!newElement.closest('div.math-editor')){newElement.replaceWith(…newElement.childNodes);element.normalize();}});Promise.all(existingFormulas).then(function(){makeRichText(element,{baseUrl:'/',updateMathImg:function($img,latex){renderFormula(latex,function(svg){$img.prop({src:svg,alt:latex,});$img.closest('[data-js=”answer”]').trigger('input');});},locale:formulaEditorLanguage,},function(){var event=new CustomEvent('math-input',{detail:element});element.dispatchEvent(event);});element.setAttribute('aria-readonly','false');});});} eTimer=setInterval(UpdateRemainingTime,1000);UpdateRemainingTime();});documentLoaded(function(){var pageIntegrityEnabled=metaMap.getBool('page-integrity')!==false;function hideLoadingNotification(){var loadingElement=document.getElementById('loading-page-content');if(loadingElement&&loadingElement.parentNode){loadingElement.parentNode.removeChild(loadingElement);}} function reportError(failureType,extraInfo){doRequest('POST','/report-error',JSON.stringify({pageLoadError:failureType,userAgent:window.navigator.userAgent,extraInfo:extraInfo,}),function(){},function(){},null);} function loadingFailed(failureType,extraInfo){hideLoadingNotification();dialogHandler.openDialog('page-load-failure');extraInfo.preventedPageLoad=true;reportError(failureType,extraInfo);if(pinger){pinger.stopPinging();}} var pageEndGuard=document.getElementById('page-end-guard');var endGuardOk=pageEndGuard&&pageEndGuard.parentNode===document.body;if(!endGuardOk&&pageIntegrityEnabled){loadingFailed('html-end-guard',{pageEndGuard:pageEndGuard?pageEndGuard.outerHTML:'<no pageEndGuard found>',parent:pageEndGuard&&pageEndGuard.parentNode?pageEndGuard.parentNode.tagName:'<parent node not found>',});return;} if(typeof document.styleSheets!=='undefined'&&pageIntegrityEnabled){var origin=window.location.origin;var failedStyleSheets=[];var allGuardsOk=true;for(var i=0;i<document.styleSheets.length;i++){var styleSheet=document.styleSheets[i];var href='<unknown href>';try{href=styleSheet.href;if(!href){href='<no href>';} if(href.substring(0,origin.length)!==origin){continue;} var foundGuard=false;var lastSelector='<no rules>';for(var j=0;j<styleSheet.cssRules.length;j++){var selector=styleSheet.cssRules[j].selectorText;if(selector==='div.stylesheet-end-guard'){foundGuard=true;break;} lastSelector=selector;} if(!foundGuard){allGuardsOk=false;failedStyleSheets.push(href+': no end guard found, last selector is ”'+lastSelector+'”');}}catch(e){failedStyleSheets.push(href+': '+(e.message?e.message:'<exception with no message>'));}} if(!allGuardsOk){loadingFailed('css-end-guard',{failedStyleSheets:failedStyleSheets,});}} var calculator=document.getElementById('calc-wrapper');if(calculator){if(typeof window.mathParser==='undefined'&&pageIntegrityEnabled){var scripts=[];document.querySelectorAll('script').forEach(function(script){scripts.push(script.src);});loadingFailed('calculator',{scripts:scripts,});return;}} var mainContentWrapper=document.getElementById('main-content-wrapper');if(mainContentWrapper){mainContentWrapper.style.display=;} hideLoadingNotification();onloadResizeFunction();});})(); </script> </head> <!– Calculator begins –>

  <div class="calctab open" title="Näytä laskin">laskin</div>
  <div class="calctab close" title="Piilota laskin">&times;</div>
  <div id="calc">
      <div id="display">
          <span class="resultbg">
              <input type="text" name="result" id="result" readonly="readonly" value="" data-syntax-error-message="Tarkista syöte" />
          </span>
          <input type="text" name="expression" id="expression" />
      </div>
      <div id="keypad">
          <div class="keyrow">
              <button class="key storage" id="m_in">M<sub>in</sub></button>
              <button class="key storage" id="m_out">M<sub>out</sub></button>
              <button class="key storage" id="ans">ANS</button>
              <button class="key input logarithm" data-suffix="(">log</button>
              <button class="key input logarithm" data-suffix="(">ln</button>
          </div>
          <div class="keyrow">
              <button class="key input trigonometry" data-suffix="(">sin</button>
              <button class="key input trigonometry" data-suffix="(">cos</button>
              <button class="key input trigonometry" data-suffix="(">tan</button>
              <button class="key input power" data-expression="&Hat;2"><span class="lettersymbol">x</span><sup>2</sup></button>
              <button class="key input power">&radic;</button>
          </div>
          <div class="keyrow">
              <button class="key input trigonometry" data-expression="asin(">sin<sup>-1</sup></button>
              <button class="key input trigonometry" data-expression="acos(">cos<sup>-1</sup></button>
              <button class="key input trigonometry" data-expression="atan(">tan<sup>-1</sup></button>
              <button class="key input power" data-expression="&times;10&Hat;">&times;10<sup class="lettersymbol">x</sup></button>
              <button class="key input power lettersymbol" data-expression="&Hat;">x<sup>y</sup></button>
          </div>
          <div class="keyrow">
              <button class="key input number">1</button>
              <button class="key input number">2</button>
              <button class="key input number">3</button>
              <button class="key input parenthesis">(</button>
              <button class="key input parenthesis">)</button>
          </div>
          <div class="keyrow">
              <button class="key input number">4</button>
              <button class="key input number">5</button>
              <button class="key input number">6</button>
              <button class="key input arithmetics">+</button>
              <button class="key input arithmetics">&#8211;</button>
          </div>
          <div class="keyrow">
              <button class="key input number">7</button>
              <button class="key input number">8</button>
              <button class="key input number">9</button>
              <button class="key input arithmetics">&times;</button>
              <button class="key input arithmetics">&divide;</button>
          </div>
          <div class="keyrow">
              <button class="key input number">.</button>
              <button class="key input number">0</button>
              <button class="key input number" data-expression="&#8211;">(-)</button>
              <button class="key input number lettersymbol">&pi;</button>
              <button class="key input number lettersymbol">e</button>
          </div>
          <div class="keyrow">
              <button class="key delete" id="delete">&#x232b;</button>
              <button class="key delete" id="clearall">AC</button>
              <div class="nokey"></div>
              <div class="nokey"></div>
              <button class="key equals" id="equals">=</button>
          </div>
      </div>
  </div>

<!– Calculator ends –></html>

Summary by Month
MonthDaily AverageMonthly Totals
HitsFilesPagesVisitorsHitsFilesPagesVisitorsBytes
2019-1044083728672588167456134410191.4 MB
2019-1165315679805331828801590082254491014.4 GB
2019-122972208412499292128520963870428623 GB
2020-0112289764941163806422448153283582808.7 MB
2020-021652104566916247920282241940846861.9 GB
2020-03230911791154382715683536035776118381.9 GB
2020-044241242717865121272327280053584153585.3 GB
2020-054692267019947131454568276861808221105.1 GB
2020-065210213830058111562886414490160243184.8 GB
2020-074501655383082113952020320118736254544.2 GB
2020-08841227275604145026078484528173728449427 GB
2020-09104674894537118683140001468321611365603010.7 GB
2020-10110464123681219793424321278082111846134212 GB
2020-11113716012508517533411361803681525445259012.3 GB
2020-12135447790530819874198722414881645606158219.5 GB
2021-011719911287565629595331843499041753449172621.2 GB
2021-0218689124905796374152329634971216228810475022.7 GB
2021-0323710171136176431573502453051219145613377427.8 GB
2021-0424924170817595425174771251243222784012753426.6 GB
2021-053432420689132194806106404864134440979214899030.4 GB
2021-061968183671097130375904322510083291369111814.7 GB
2021-0713807364298012225428016112912303840689908.8 GB
2021-0876174159225947540192361392493584184371212459032 GB
2021-09322902121410567497096870463643231702414908629.4 GB
2021-1029628196699632432791846460972829859213414226.7 GB
2021-113360921783113364991100825665350434008014972630.2 GB
2021-1224320140329993388975392043499230979212057420.9 GB
2022-01314272072010229449597424064232031708813935827.4 GB
2022-02343192178511991461096094460998433574412907020.4 GB
2022-03312412034510402430896846463068832246413353422.2 GB
2022-0430034193269743388590102457977629230411655816.4 GB
2022-053369723311100134163104459272264031040012905418.5 GB
2022-0614495781760681866434864234496182048559826.6 GB
2022-0711040454156171339342242140784174112415024.8 GB
2022-0825127171977433334877894653312023041610377416 GB
2022-0932621228989121400197864068694427361612003021.3 GB
2022-102424516759704231367516015195202183049721417.9 GB
2022-1127841190438242358383522457128424724710749616.9 GB
2022-122057311724777224476377753634502409307585511.2 GB
2023-0125309185326521334078459057448520214010354513.7 GB
2023-0232593229779014376891261564335025239010551016.4 GB
2023-033315822031102884304102790568296531893013341016.7 GB
2023-0430345216238417405891035064867525249512172515.1 GB
2023-053445923310103544327106822572262532097013414520.8 GB
2023-062284814360781330076854254307852343909019524.3 GB
2023-0715686950458833022486255294630182370936757.6 GB
2023-083329021204113234208103198565733035101513044017.5 GB
2023-09591404300315460109321774211129007846378732795532.7 GB
2023-1067772564091093297352100945174866433889930178144.7 GB
2023-11352702916157565563105809087482117268416690422.3 GB
2023-1213433106732608266341642533087080847825517.7 GB
2024-01520939851178124016148312352136524384303.3 GB
2024-023675248611156321065877210032330183342 GB
2024-03349624709706391083897657130085197991.6 GB
2024-04381226821075718686124827019350129161 GB
Monthly Statistics for 2024-04
Total hits67620
Total files48270
Total pages19350
Total visitors5341
Total bytes100.5 MB
avgmax
Hits per hour2858.83333333334617
Hits per day3811.77777777785368
Files per day2681.66666666673604
Pages per day10751696
Bytes per day57.5 MB80 MB
Hits by Status Code
Status 200 - OK67620
Status 404 - Not Found953
Status 412 - Precondition Failed37
Status - 2
Daily Access Statistics for 2024-04
DayHitsMediaPagesVisitorsTraffic
0127093.95%18743.88%7894.08%7295.64%41.9 MB4.05%
0242646.21%31016.42%10975.67%8356.46%63.1 MB6.10%
0346246.74%34397.12%11385.88%9177.10%71.5 MB6.91%
0439695.78%29606.13%9955.14%8976.94%66 MB6.38%
0533234.84%24285.03%8834.56%7475.78%54.9 MB5.31%
0625563.73%18193.77%6763.49%6284.86%36.1 MB3.49%
0735995.25%26095.41%9544.93%7045.45%51.1 MB4.93%
0846076.71%34247.09%11165.77%8486.57%68.5 MB6.62%
0943676.36%33376.91%9725.02%7625.90%67.4 MB6.51%
1044796.53%31996.63%12286.35%7735.98%72.7 MB7.03%
1153687.82%35977.45%16968.76%7956.16%80 MB7.73%
1232734.77%23624.89%8764.53%6545.06%54.5 MB5.26%
1326513.86%14713.05%11145.76%5113.96%38 MB3.67%
1436875.37%21484.45%14317.40%6014.65%52.4 MB5.06%
1547666.95%33456.93%13306.87%7225.59%69.2 MB6.69%
1651447.50%36047.47%14657.57%7936.14%79.4 MB7.67%
1740995.97%27605.72%12696.56%7365.70%50.1 MB4.84%
1811271.64%7931.64%3211.66%2642.04%18.1 MB1.75%
Hourly Access Statistics for 2024-04
HourHitsMediaPagesVisitorsTraffic
017202.51%8271.71%8094.18%3842.97%22.8 MB2.20%
19121.33%4570.95%4332.24%3212.49%15.6 MB1.51%
27971.16%3910.81%3681.90%3122.42%9.9 MB0.96%
37401.08%4000.83%3111.61%2952.28%10.4 MB1.01%
48311.21%3580.74%4252.20%3422.65%12.2 MB1.17%
58331.21%3850.80%3922.03%3192.47%13.3 MB1.28%
612571.83%6411.33%5823.01%3212.49%15.1 MB1.46%
716242.37%10022.08%5732.96%4013.10%25.2 MB2.44%
834715.06%23044.77%10935.65%6164.77%61.3 MB5.92%
941196.00%31576.54%9424.87%7345.68%66.3 MB6.41%
1043596.35%33206.88%9775.05%7345.68%73.4 MB7.09%
1140795.95%28275.86%11996.20%6304.88%62.6 MB6.05%
1246176.73%33386.92%12106.25%7315.66%79.6 MB7.69%
1345976.70%34267.10%11345.86%6915.35%67.4 MB6.51%
1441326.02%29776.17%11115.74%6615.12%62.8 MB6.07%
1536565.33%28175.84%8104.19%6545.06%55 MB5.32%
1639685.78%28225.85%11075.72%6855.30%55.9 MB5.40%
1741466.04%30566.33%10555.45%6204.80%56.7 MB5.48%
1837395.45%28265.85%8954.63%6745.22%57.2 MB5.52%
1935605.19%26235.43%9164.73%6635.13%48.8 MB4.71%
2033954.95%25585.30%8104.19%6535.06%47.1 MB4.55%
2131574.60%23844.94%7593.92%5594.33%46.2 MB4.47%
2225653.74%17323.59%7934.10%5083.93%38.4 MB3.71%
2323383.41%16423.40%6463.34%4083.16%31.5 MB3.05%
Top User Agents in 2024-04
#NameHits
119350100.00%
1)
countdownTarget-currentTimestampMs(