3763 lines
324 KiB
HTML
3763 lines
324 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
|
|
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
|
<meta http-equiv="x-ua-compatible" content="ie=edge" />
|
|
<link rel="icon" href="gameIcon.png" />
|
|
<style type="text/css">
|
|
a,
|
|
abbr,
|
|
acronym,
|
|
address,
|
|
applet,
|
|
article,
|
|
aside,
|
|
audio,
|
|
b,
|
|
big,
|
|
blockquote,
|
|
body,
|
|
canvas,
|
|
caption,
|
|
center,
|
|
cite,
|
|
code,
|
|
dd,
|
|
del,
|
|
details,
|
|
dfn,
|
|
div,
|
|
dl,
|
|
dt,
|
|
em,
|
|
embed,
|
|
fieldset,
|
|
figcaption,
|
|
figure,
|
|
footer,
|
|
form,
|
|
h1,
|
|
h2,
|
|
h3,
|
|
h4,
|
|
h5,
|
|
h6,
|
|
header,
|
|
hgroup,
|
|
html,
|
|
i,
|
|
iframe,
|
|
img,
|
|
ins,
|
|
kbd,
|
|
label,
|
|
legend,
|
|
li,
|
|
mark,
|
|
menu,
|
|
nav,
|
|
object,
|
|
ol,
|
|
output,
|
|
p,
|
|
pre,
|
|
q,
|
|
ruby,
|
|
s,
|
|
samp,
|
|
section,
|
|
small,
|
|
span,
|
|
strike,
|
|
strong,
|
|
sub,
|
|
summary,
|
|
sup,
|
|
table,
|
|
tbody,
|
|
td,
|
|
tfoot,
|
|
th,
|
|
thead,
|
|
time,
|
|
tr,
|
|
tt,
|
|
u,
|
|
ul,
|
|
var,
|
|
video {
|
|
border: 0;
|
|
font: inherit;
|
|
font-size: 100%;
|
|
margin: 0;
|
|
padding: 0;
|
|
vertical-align: baseline;
|
|
color: inherit;
|
|
text-decoration: none;
|
|
}
|
|
article,
|
|
aside,
|
|
details,
|
|
figcaption,
|
|
figure,
|
|
footer,
|
|
header,
|
|
hgroup,
|
|
menu,
|
|
nav,
|
|
section {
|
|
display: block;
|
|
}
|
|
body {
|
|
line-height: 1;
|
|
}
|
|
ol,
|
|
ul {
|
|
list-style: none;
|
|
}
|
|
blockquote,
|
|
q {
|
|
quotes: none;
|
|
}
|
|
blockquote:after,
|
|
blockquote:before,
|
|
q:after,
|
|
q:before {
|
|
content: "";
|
|
content: none;
|
|
}
|
|
table {
|
|
border-collapse: collapse;
|
|
border-spacing: 0;
|
|
}
|
|
.background-gradient {
|
|
width: 100%;
|
|
height: 100%;
|
|
position: fixed;
|
|
background: -webkit-gradient(linear, left top, left bottom, from(#e66465), to(#9198e5));
|
|
background: linear-gradient(#e66465, #9198e5);
|
|
z-index: -1;
|
|
}
|
|
.background-image {
|
|
opacity: 0.5;
|
|
width: 100%;
|
|
height: 100%;
|
|
-o-object-fit: cover;
|
|
object-fit: cover;
|
|
}
|
|
.main {
|
|
position: fixed;
|
|
overflow: hidden;
|
|
}
|
|
* {
|
|
padding: 0;
|
|
margin: 0;
|
|
-webkit-user-select: none;
|
|
-moz-user-select: none;
|
|
-ms-user-select: none;
|
|
user-select: none;
|
|
-webkit-tap-highlight-color: transparent;
|
|
}
|
|
*,
|
|
img {
|
|
user-drag: none;
|
|
}
|
|
img {
|
|
-webkit-user-drag: none;
|
|
-khtml-user-drag: none;
|
|
-moz-user-drag: none;
|
|
-o-user-drag: none;
|
|
-webkit-touch-callout: none;
|
|
}
|
|
body,
|
|
html {
|
|
width: 100vw;
|
|
height: 100vh;
|
|
overflow: hidden;
|
|
}
|
|
.loading-screen {
|
|
width: 100%;
|
|
height: 100%;
|
|
position: fixed;
|
|
top: 0;
|
|
left: 0;
|
|
background-color: #000;
|
|
color: #fff;
|
|
z-index: 100;
|
|
display: -webkit-box;
|
|
display: -ms-flexbox;
|
|
display: flex;
|
|
-webkit-box-pack: center;
|
|
-ms-flex-pack: center;
|
|
justify-content: center;
|
|
-webkit-box-align: center;
|
|
-ms-flex-align: center;
|
|
align-items: center;
|
|
font-family: sans-serif;
|
|
font-size: 20px;
|
|
text-transform: uppercase;
|
|
}
|
|
.loading-text {
|
|
-webkit-animation: pulse 1s infinite;
|
|
animation: pulse 1s infinite;
|
|
}
|
|
.loading-screen.hidden {
|
|
opacity: 0;
|
|
-webkit-transition: 0.5s;
|
|
transition: 0.5s;
|
|
-webkit-transition-delay: 0.5s;
|
|
transition-delay: 0.5s;
|
|
visibility: hidden;
|
|
}
|
|
.loading-text.hidden {
|
|
-webkit-animation: fade-up-loading 0.4s forwards;
|
|
animation: fade-up-loading 0.4s forwards;
|
|
}
|
|
.score-container {
|
|
position: fixed;
|
|
top: 5%;
|
|
left: 50%;
|
|
width: 100%;
|
|
height: 100%;
|
|
pointer-events: none;
|
|
-webkit-user-select: none;
|
|
-moz-user-select: none;
|
|
-ms-user-select: none;
|
|
user-select: none;
|
|
z-index: 99;
|
|
font-size: 65px;
|
|
font-weight: bolder;
|
|
font-family: sans-serif;
|
|
-webkit-transform: translateX(-50%);
|
|
transform: translateX(-50%);
|
|
text-align: center;
|
|
color: #000;
|
|
}
|
|
.score-container.variant-end-screen .best-score,
|
|
.score-container.variant-end-screen .normal-score {
|
|
display: none;
|
|
}
|
|
.score-container.variant-end-screen .new-best-score {
|
|
display: -webkit-box;
|
|
display: -ms-flexbox;
|
|
display: flex;
|
|
}
|
|
.best-score {
|
|
margin-top: 10px;
|
|
font-weight: lighter;
|
|
font-size: 22px;
|
|
}
|
|
.best-score,
|
|
.normal-score {
|
|
display: block;
|
|
}
|
|
.new-best-score {
|
|
position: absolute;
|
|
top: 30%;
|
|
left: 50%;
|
|
-webkit-transform: translate(-50%, -50%);
|
|
transform: translate(-50%, -50%);
|
|
width: 220px;
|
|
font-size: 40px;
|
|
color: #fff;
|
|
display: none;
|
|
-webkit-box-orient: vertical;
|
|
-webkit-box-direction: normal;
|
|
-ms-flex-flow: column;
|
|
flex-flow: column;
|
|
-webkit-box-pack: center;
|
|
-ms-flex-pack: center;
|
|
justify-content: center;
|
|
-webkit-box-align: center;
|
|
-ms-flex-align: center;
|
|
align-items: center;
|
|
}
|
|
.new-best-score .new-score-number {
|
|
font-size: 130px;
|
|
color: #fff;
|
|
-webkit-text-stroke: 4px #000;
|
|
}
|
|
.score-add {
|
|
position: absolute;
|
|
top: 35%;
|
|
left: 50%;
|
|
z-index: 99;
|
|
font-size: 65px;
|
|
font-weight: bolder;
|
|
font-family: sans-serif;
|
|
-webkit-transform: translate(-50%, -50%);
|
|
transform: translate(-50%, -50%);
|
|
opacity: 0;
|
|
pointer-events: none;
|
|
color: gold;
|
|
}
|
|
.score-add.active {
|
|
-webkit-animation: fade-up 0.2s;
|
|
animation: fade-up 0.2s;
|
|
}
|
|
.start-screen {
|
|
position: fixed;
|
|
top: 50%;
|
|
left: 50%;
|
|
-webkit-transform: translate(-50%, -50%);
|
|
transform: translate(-50%, -50%);
|
|
display: -webkit-box;
|
|
display: -ms-flexbox;
|
|
display: flex;
|
|
-webkit-box-pack: center;
|
|
-ms-flex-pack: center;
|
|
justify-content: center;
|
|
-webkit-box-align: center;
|
|
-ms-flex-align: center;
|
|
align-items: center;
|
|
-webkit-box-orient: vertical;
|
|
-webkit-box-direction: normal;
|
|
-ms-flex-direction: column;
|
|
flex-direction: column;
|
|
width: 100%;
|
|
height: 100%;
|
|
z-index: 99;
|
|
pointer-events: none;
|
|
}
|
|
.start-screen.hidden {
|
|
display: none;
|
|
}
|
|
.start-screen .text {
|
|
position: absolute;
|
|
bottom: 15%;
|
|
color: #fff;
|
|
font-family: sans-serif;
|
|
font-weight: bolder;
|
|
font-size: 20px;
|
|
text-transform: uppercase;
|
|
-webkit-animation: pulse 2s infinite;
|
|
animation: pulse 2s infinite;
|
|
}
|
|
.start-screen .swipe-img {
|
|
position: absolute;
|
|
bottom: 20%;
|
|
width: 90px;
|
|
-webkit-animation: swipe 2s infinite;
|
|
animation: swipe 2s infinite;
|
|
}
|
|
.start-screen .info-container {
|
|
width: 100%;
|
|
height: 60px;
|
|
position: absolute;
|
|
display: -webkit-box;
|
|
display: -ms-flexbox;
|
|
display: flex;
|
|
-webkit-box-pack: center;
|
|
-ms-flex-pack: center;
|
|
justify-content: center;
|
|
-webkit-box-align: center;
|
|
-ms-flex-align: center;
|
|
align-items: center;
|
|
top: 19%;
|
|
color: #000;
|
|
font-family: sans-serif;
|
|
text-transform: uppercase;
|
|
font-weight: bolder;
|
|
font-size: 30px;
|
|
}
|
|
.info-container .color {
|
|
color: red;
|
|
}
|
|
.arrow-container {
|
|
width: 500px;
|
|
height: 60px;
|
|
background-color: rgba(0, 0, 0, 0.1);
|
|
position: absolute;
|
|
display: -webkit-box;
|
|
display: -ms-flexbox;
|
|
display: flex;
|
|
-webkit-box-pack: center;
|
|
-ms-flex-pack: center;
|
|
justify-content: center;
|
|
-webkit-box-align: center;
|
|
-ms-flex-align: center;
|
|
align-items: center;
|
|
bottom: 25%;
|
|
}
|
|
.arrow-container .arrow-left,
|
|
.arrow-container .arrow-left-two,
|
|
.arrow-container .arrow-right,
|
|
.arrow-container .arrow-right-two {
|
|
position: absolute;
|
|
width: 0;
|
|
height: 0;
|
|
border-top: 20px solid transparent;
|
|
border-bottom: 20px solid transparent;
|
|
}
|
|
.arrow-right {
|
|
border-right: 20px solid hsla(0, 0%, 100%, 0.5);
|
|
left: 20%;
|
|
}
|
|
.arrow-left,
|
|
.arrow-right {
|
|
-webkit-animation: opacityPulse 2s infinite;
|
|
animation: opacityPulse 2s infinite;
|
|
-webkit-animation-delay: 1s;
|
|
animation-delay: 1s;
|
|
}
|
|
.arrow-left {
|
|
border-left: 20px solid hsla(0, 0%, 100%, 0.5);
|
|
right: 20%;
|
|
}
|
|
.arrow-right-two {
|
|
border-right: 20px solid hsla(0, 0%, 100%, 0.3);
|
|
left: 30%;
|
|
}
|
|
.arrow-left-two,
|
|
.arrow-right-two {
|
|
-webkit-animation: opacityPulse 2s infinite;
|
|
animation: opacityPulse 2s infinite;
|
|
}
|
|
.arrow-left-two {
|
|
border-left: 20px solid hsla(0, 0%, 100%, 0.3);
|
|
right: 30%;
|
|
}
|
|
.retry-screen {
|
|
width: 100%;
|
|
height: 100%;
|
|
position: fixed;
|
|
top: 0;
|
|
left: 0;
|
|
opacity: 1;
|
|
-webkit-transition: opacity 1s;
|
|
transition: opacity 1s;
|
|
pointer-events: all;
|
|
background-color: rgba(0, 0, 0, 0.8);
|
|
}
|
|
.end-screen.hidden,
|
|
.retry-screen.hidden {
|
|
visibility: hidden;
|
|
opacity: 0;
|
|
-webkit-transition: opacity 1s;
|
|
transition: opacity 1s;
|
|
pointer-events: none;
|
|
}
|
|
.retry-screen .retry-text {
|
|
bottom: 28%;
|
|
font-weight: bolder;
|
|
width: 200px;
|
|
}
|
|
.retry-screen .end-text,
|
|
.retry-screen .retry-text {
|
|
position: absolute;
|
|
left: 50%;
|
|
color: #fff;
|
|
font-family: sans-serif;
|
|
font-size: 20px;
|
|
text-transform: uppercase;
|
|
-webkit-transform: translateX(-50%);
|
|
transform: translateX(-50%);
|
|
}
|
|
.retry-screen .end-text {
|
|
bottom: 10%;
|
|
cursor: pointer;
|
|
}
|
|
.end-screen {
|
|
width: 100%;
|
|
height: 100%;
|
|
position: fixed;
|
|
top: 0;
|
|
left: 0;
|
|
opacity: 1;
|
|
-webkit-transition: opacity 1s;
|
|
transition: opacity 1s;
|
|
pointer-events: all;
|
|
color: #fff;
|
|
font-family: sans-serif;
|
|
background-color: rgba(0, 0, 0, 0.8);
|
|
-webkit-box-pack: center;
|
|
-ms-flex-pack: center;
|
|
justify-content: center;
|
|
-webkit-box-align: center;
|
|
-ms-flex-align: center;
|
|
align-items: center;
|
|
-webkit-box-orient: vertical;
|
|
-webkit-box-direction: normal;
|
|
-ms-flex-direction: column;
|
|
flex-direction: column;
|
|
}
|
|
.end-screen .play-text {
|
|
position: absolute;
|
|
bottom: 10%;
|
|
font-size: 40px;
|
|
text-align: center;
|
|
width: 100%;
|
|
-webkit-animation: pulse 2s infinite;
|
|
animation: pulse 2s infinite;
|
|
}
|
|
.video-replay {
|
|
position: absolute;
|
|
margin: auto;
|
|
top: 50%;
|
|
left: 50%;
|
|
-webkit-transform: translate(-50%, -50%) scale(4);
|
|
transform: translate(-50%, -50%) scale(4);
|
|
height: 40px;
|
|
width: 40px;
|
|
text-align: center;
|
|
cursor: pointer;
|
|
}
|
|
.countdown-image {
|
|
color: #fff;
|
|
display: inline-block;
|
|
}
|
|
.circle-svg {
|
|
position: absolute;
|
|
top: 0;
|
|
right: 0;
|
|
width: 40px;
|
|
height: 40px;
|
|
-webkit-transform: rotateY(-180deg) rotate(-90deg);
|
|
transform: rotateY(-180deg) rotate(-90deg);
|
|
}
|
|
.circle-svg circle {
|
|
stroke-dasharray: 113px;
|
|
stroke-dashoffset: 0px;
|
|
stroke-linecap: round;
|
|
stroke-width: 1px;
|
|
stroke: #fff;
|
|
fill: none;
|
|
}
|
|
.js-circle-svg.active {
|
|
-webkit-animation: countdown 9s linear infinite forwards;
|
|
animation: countdown 9s linear infinite forwards;
|
|
}
|
|
.countdown-image-svg {
|
|
width: 20px;
|
|
height: 20px;
|
|
margin-top: 50%;
|
|
-webkit-transform: scale(0.8);
|
|
transform: scale(0.8);
|
|
}
|
|
@-webkit-keyframes countdown {
|
|
0% {
|
|
stroke-dashoffset: 0px;
|
|
}
|
|
to {
|
|
stroke-dashoffset: 113px;
|
|
}
|
|
}
|
|
@keyframes countdown {
|
|
0% {
|
|
stroke-dashoffset: 0px;
|
|
}
|
|
to {
|
|
stroke-dashoffset: 113px;
|
|
}
|
|
}
|
|
.params {
|
|
position: absolute;
|
|
top: 5%;
|
|
left: 5%;
|
|
width: 100px;
|
|
height: 120px;
|
|
}
|
|
.gear-icon {
|
|
position: absolute;
|
|
z-index: 99;
|
|
width: 20px;
|
|
height: 20px;
|
|
cursor: pointer;
|
|
}
|
|
.gear-icon .speaker-status.hidden {
|
|
display: none;
|
|
}
|
|
.privacy-icon {
|
|
bottom: 5%;
|
|
left: 0;
|
|
display: -webkit-box;
|
|
display: -ms-flexbox;
|
|
display: flex;
|
|
display: none;
|
|
}
|
|
.privacy-icon,
|
|
.speaker-icon {
|
|
position: absolute;
|
|
z-index: 99;
|
|
width: 35px;
|
|
height: 35px;
|
|
-webkit-box-pack: center;
|
|
-ms-flex-pack: center;
|
|
justify-content: center;
|
|
-webkit-box-align: center;
|
|
-ms-flex-align: center;
|
|
align-items: center;
|
|
border-radius: 50px;
|
|
border: 2px solid #fff;
|
|
cursor: pointer;
|
|
}
|
|
.speaker-icon {
|
|
bottom: 30%;
|
|
right: 0;
|
|
display: -webkit-box;
|
|
display: -ms-flexbox;
|
|
display: flex;
|
|
}
|
|
.privacy-icon.hidden,
|
|
.speaker-icon.hidden,
|
|
.speaker-icon .speaker-status.hidden {
|
|
display: none;
|
|
}
|
|
.pause-icon {
|
|
position: absolute;
|
|
top: 5%;
|
|
right: 5%;
|
|
z-index: 99;
|
|
width: 35px;
|
|
height: 35px;
|
|
display: -webkit-box;
|
|
display: -ms-flexbox;
|
|
display: flex;
|
|
-webkit-box-pack: center;
|
|
-ms-flex-pack: center;
|
|
justify-content: center;
|
|
-webkit-box-align: center;
|
|
-ms-flex-align: center;
|
|
align-items: center;
|
|
border-radius: 50px;
|
|
cursor: pointer;
|
|
}
|
|
.pause-icon.hidden {
|
|
display: none;
|
|
}
|
|
.gg-pause-o,
|
|
.gg-play-button-o {
|
|
-webkit-box-sizing: border-box;
|
|
box-sizing: border-box;
|
|
position: relative;
|
|
display: block;
|
|
-webkit-transform: scale(2);
|
|
transform: scale(2);
|
|
width: 22px;
|
|
height: 22px;
|
|
border: 2px solid;
|
|
border-radius: 22px;
|
|
color: #fff;
|
|
display: none;
|
|
}
|
|
.gg-pause-o.active,
|
|
.gg-play-button-o.active {
|
|
display: block;
|
|
}
|
|
.gg-pause-o:before {
|
|
content: "";
|
|
display: block;
|
|
-webkit-box-sizing: border-box;
|
|
box-sizing: border-box;
|
|
position: absolute;
|
|
width: 6px;
|
|
height: 6px;
|
|
left: 6px;
|
|
top: 6px;
|
|
border-left: 2px solid;
|
|
border-right: 2px solid;
|
|
}
|
|
.gg-play-button-o:before {
|
|
content: "";
|
|
display: block;
|
|
-webkit-box-sizing: border-box;
|
|
box-sizing: border-box;
|
|
position: absolute;
|
|
width: 0;
|
|
height: 10px;
|
|
border-top: 5px solid transparent;
|
|
border-bottom: 5px solid transparent;
|
|
border-left: 6px solid;
|
|
top: 4px;
|
|
left: 7px;
|
|
}
|
|
.wording {
|
|
font-family: sans-serif;
|
|
position: absolute;
|
|
left: 50%;
|
|
-webkit-transform: translateX(-50%);
|
|
transform: translateX(-50%);
|
|
font-size: 45px;
|
|
font-weight: bolder;
|
|
color: gold;
|
|
z-index: 99;
|
|
top: 20%;
|
|
text-transform: uppercase;
|
|
}
|
|
.wording,
|
|
.wording span {
|
|
-webkit-user-select: none;
|
|
-moz-user-select: none;
|
|
-ms-user-select: none;
|
|
user-select: none;
|
|
}
|
|
.wording span {
|
|
-webkit-transform: scale(0);
|
|
transform: scale(0);
|
|
display: none;
|
|
}
|
|
.wording span.active {
|
|
display: block;
|
|
-webkit-animation: apparition 0.7s ease;
|
|
animation: apparition 0.7s ease;
|
|
}
|
|
@-webkit-keyframes pulse {
|
|
0% {
|
|
-webkit-transform: scale(1);
|
|
transform: scale(1);
|
|
}
|
|
50% {
|
|
-webkit-transform: scale(1.1);
|
|
transform: scale(1.1);
|
|
}
|
|
to {
|
|
-webkit-transform: scale(1);
|
|
transform: scale(1);
|
|
}
|
|
}
|
|
@keyframes pulse {
|
|
0% {
|
|
-webkit-transform: scale(1);
|
|
transform: scale(1);
|
|
}
|
|
50% {
|
|
-webkit-transform: scale(1.1);
|
|
transform: scale(1.1);
|
|
}
|
|
to {
|
|
-webkit-transform: scale(1);
|
|
transform: scale(1);
|
|
}
|
|
}
|
|
@-webkit-keyframes opacityPulse {
|
|
0% {
|
|
opacity: 1;
|
|
}
|
|
50% {
|
|
opacity: 0.3;
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
}
|
|
}
|
|
@keyframes opacityPulse {
|
|
0% {
|
|
opacity: 1;
|
|
}
|
|
50% {
|
|
opacity: 0.3;
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
}
|
|
}
|
|
@-webkit-keyframes swipe {
|
|
0% {
|
|
-webkit-transform: translateX(-50%);
|
|
transform: translateX(-50%);
|
|
}
|
|
50% {
|
|
-webkit-transform: translateX(80%);
|
|
transform: translateX(80%);
|
|
}
|
|
to {
|
|
-webkit-transform: translateX(-50%);
|
|
transform: translateX(-50%);
|
|
}
|
|
}
|
|
@keyframes swipe {
|
|
0% {
|
|
-webkit-transform: translateX(-50%);
|
|
transform: translateX(-50%);
|
|
}
|
|
50% {
|
|
-webkit-transform: translateX(80%);
|
|
transform: translateX(80%);
|
|
}
|
|
to {
|
|
-webkit-transform: translateX(-50%);
|
|
transform: translateX(-50%);
|
|
}
|
|
}
|
|
@-webkit-keyframes fade-up {
|
|
0% {
|
|
-webkit-transform: translate(-50%);
|
|
transform: translate(-50%);
|
|
opacity: 1;
|
|
}
|
|
to {
|
|
-webkit-transform: translate(-50%, -100%);
|
|
transform: translate(-50%, -100%);
|
|
opacity: 0;
|
|
}
|
|
}
|
|
@keyframes fade-up {
|
|
0% {
|
|
-webkit-transform: translate(-50%);
|
|
transform: translate(-50%);
|
|
opacity: 1;
|
|
}
|
|
to {
|
|
-webkit-transform: translate(-50%, -100%);
|
|
transform: translate(-50%, -100%);
|
|
opacity: 0;
|
|
}
|
|
}
|
|
@-webkit-keyframes fade-up-loading {
|
|
0% {
|
|
-webkit-transform: translateY(0);
|
|
transform: translateY(0);
|
|
opacity: 1;
|
|
}
|
|
to {
|
|
-webkit-transform: translateY(-100%);
|
|
transform: translateY(-100%);
|
|
opacity: 0;
|
|
}
|
|
}
|
|
@keyframes fade-up-loading {
|
|
0% {
|
|
-webkit-transform: translateY(0);
|
|
transform: translateY(0);
|
|
opacity: 1;
|
|
}
|
|
to {
|
|
-webkit-transform: translateY(-100%);
|
|
transform: translateY(-100%);
|
|
opacity: 0;
|
|
}
|
|
}
|
|
@-webkit-keyframes apparition {
|
|
0% {
|
|
-webkit-transform: scale(0);
|
|
transform: scale(0);
|
|
}
|
|
40% {
|
|
-webkit-transform: scale(0.9);
|
|
transform: scale(0.9);
|
|
}
|
|
60% {
|
|
-webkit-transform: scale(1.1) rotate(5deg);
|
|
transform: scale(1.1) rotate(5deg);
|
|
}
|
|
to {
|
|
-webkit-transform: scale(0);
|
|
transform: scale(0);
|
|
}
|
|
}
|
|
@keyframes apparition {
|
|
0% {
|
|
-webkit-transform: scale(0);
|
|
transform: scale(0);
|
|
}
|
|
40% {
|
|
-webkit-transform: scale(0.9);
|
|
transform: scale(0.9);
|
|
}
|
|
60% {
|
|
-webkit-transform: scale(1.1) rotate(5deg);
|
|
transform: scale(1.1) rotate(5deg);
|
|
}
|
|
to {
|
|
-webkit-transform: scale(0);
|
|
transform: scale(0);
|
|
}
|
|
}
|
|
</style>
|
|
<script id="VOODOO-H5SDK">
|
|
!(function (e, n) {
|
|
if ("object" == typeof exports && "object" == typeof module) module.exports = n();
|
|
else if ("function" == typeof define && define.amd) define([], n);
|
|
else {
|
|
var t = n();
|
|
for (var i in t) ("object" == typeof exports ? exports : e)[i] = t[i];
|
|
}
|
|
})(self, function () {
|
|
return (
|
|
(e = {
|
|
287: (e, n, t) => {
|
|
function i(e) {
|
|
return (
|
|
(i =
|
|
"function" == typeof Symbol && "symbol" == typeof Symbol.iterator
|
|
? function (e) {
|
|
return typeof e;
|
|
}
|
|
: function (e) {
|
|
return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e;
|
|
}),
|
|
i(e)
|
|
);
|
|
}
|
|
function r(e, n) {
|
|
for (var t = 0; t < n.length; t++) {
|
|
var i = n[t];
|
|
(i.enumerable = i.enumerable || !1), (i.configurable = !0), "value" in i && (i.writable = !0), Object.defineProperty(e, i.key, i);
|
|
}
|
|
}
|
|
function o(e, n) {
|
|
return (
|
|
(o =
|
|
Object.setPrototypeOf ||
|
|
function (e, n) {
|
|
return (e.__proto__ = n), e;
|
|
}),
|
|
o(e, n)
|
|
);
|
|
}
|
|
function a(e, n) {
|
|
if (n && ("object" === i(n) || "function" == typeof n)) return n;
|
|
if (void 0 !== n) throw new TypeError("Derived constructors may only return object or undefined");
|
|
return s(e);
|
|
}
|
|
function s(e) {
|
|
if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
|
return e;
|
|
}
|
|
function d(e) {
|
|
return (
|
|
(d = Object.setPrototypeOf
|
|
? Object.getPrototypeOf
|
|
: function (e) {
|
|
return e.__proto__ || Object.getPrototypeOf(e);
|
|
}),
|
|
d(e)
|
|
);
|
|
}
|
|
var u = (function (e) {
|
|
!(function (e, n) {
|
|
if ("function" != typeof n && null !== n) throw new TypeError("Super expression must either be null or a function");
|
|
(e.prototype = Object.create(n && n.prototype, { constructor: { value: e, writable: !0, configurable: !0 } })), Object.defineProperty(e, "prototype", { writable: !1 }), n && o(e, n);
|
|
})(c, e);
|
|
var n,
|
|
t,
|
|
i,
|
|
u,
|
|
l =
|
|
((i = c),
|
|
(u = (function () {
|
|
if ("undefined" == typeof Reflect || !Reflect.construct) return !1;
|
|
if (Reflect.construct.sham) return !1;
|
|
if ("function" == typeof Proxy) return !0;
|
|
try {
|
|
return Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})), !0;
|
|
} catch (e) {
|
|
return !1;
|
|
}
|
|
})()),
|
|
function () {
|
|
var e,
|
|
n = d(i);
|
|
if (u) {
|
|
var t = d(this).constructor;
|
|
e = Reflect.construct(n, arguments, t);
|
|
} else e = n.apply(this, arguments);
|
|
return a(this, e);
|
|
});
|
|
function c() {
|
|
var e;
|
|
return (
|
|
(function (e, n) {
|
|
if (!(e instanceof n)) throw new TypeError("Cannot call a class as a function");
|
|
})(this, c),
|
|
((e = l.call(this))._initialized = !1),
|
|
(e.init = e.init.bind(s(e))),
|
|
(e.isInitialized = e.isInitialized.bind(s(e))),
|
|
(e.notifyLoadingProgress = e.notifyLoadingProgress.bind(s(e))),
|
|
(e.notifyLoadingComplete = e.notifyLoadingComplete.bind(s(e))),
|
|
(e.requestInterstitialAd = e.requestInterstitialAd.bind(s(e))),
|
|
(e.requestRewardedAd = e.requestRewardedAd.bind(s(e))),
|
|
e
|
|
);
|
|
}
|
|
return (
|
|
(n = c),
|
|
(t = [
|
|
{
|
|
key: "getName",
|
|
value: function () {
|
|
return "base";
|
|
},
|
|
},
|
|
{
|
|
key: "init",
|
|
value: function () {
|
|
var e = this;
|
|
return new Promise(function (n, t) {
|
|
window.addEventListener("load", function t() {
|
|
window.removeEventListener("load", t), (e._initialized = !0), n();
|
|
});
|
|
});
|
|
},
|
|
},
|
|
{
|
|
key: "isInitialized",
|
|
value: function () {
|
|
return this._initialized;
|
|
},
|
|
},
|
|
{ key: "notifyLoadingProgress", value: function (e) {} },
|
|
{
|
|
key: "notifyLoadingComplete",
|
|
value: function () {
|
|
return this.isInitialized() ? Promise.resolve(!0) : Promise.reject("not initialized");
|
|
},
|
|
},
|
|
{
|
|
key: "requestInterstitialAd",
|
|
value: function () {
|
|
return this.isInitialized() ? Promise.resolve(!0) : Promise.reject("not initialized");
|
|
},
|
|
},
|
|
{
|
|
key: "requestRewardedAd",
|
|
value: function () {
|
|
return this.isInitialized() ? Promise.resolve(!0) : Promise.reject("not initialized");
|
|
},
|
|
},
|
|
]) && r(n.prototype, t),
|
|
Object.defineProperty(n, "prototype", { writable: !1 }),
|
|
c
|
|
);
|
|
})(t(978));
|
|
e.exports = u;
|
|
},
|
|
71: (e, n, t) => {
|
|
function i(e) {
|
|
return (
|
|
(i =
|
|
"function" == typeof Symbol && "symbol" == typeof Symbol.iterator
|
|
? function (e) {
|
|
return typeof e;
|
|
}
|
|
: function (e) {
|
|
return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e;
|
|
}),
|
|
i(e)
|
|
);
|
|
}
|
|
function r(e, n) {
|
|
return (
|
|
(r =
|
|
Object.setPrototypeOf ||
|
|
function (e, n) {
|
|
return (e.__proto__ = n), e;
|
|
}),
|
|
r(e, n)
|
|
);
|
|
}
|
|
function o(e, n) {
|
|
if (n && ("object" === i(n) || "function" == typeof n)) return n;
|
|
if (void 0 !== n) throw new TypeError("Derived constructors may only return object or undefined");
|
|
return a(e);
|
|
}
|
|
function a(e) {
|
|
if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
|
return e;
|
|
}
|
|
function s(e) {
|
|
return (
|
|
(s = Object.setPrototypeOf
|
|
? Object.getPrototypeOf
|
|
: function (e) {
|
|
return e.__proto__ || Object.getPrototypeOf(e);
|
|
}),
|
|
s(e)
|
|
);
|
|
}
|
|
function d(e, n, t) {
|
|
return n in e ? Object.defineProperty(e, n, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : (e[n] = t), e;
|
|
}
|
|
var u = t(978),
|
|
l = t(602),
|
|
c = l.H5Analytics,
|
|
v = l.ADTYPE,
|
|
f = (function (e) {
|
|
!(function (e, n) {
|
|
if ("function" != typeof n && null !== n) throw new TypeError("Super expression must either be null or a function");
|
|
(e.prototype = Object.create(n && n.prototype, { constructor: { value: e, writable: !0, configurable: !0 } })), Object.defineProperty(e, "prototype", { writable: !1 }), n && r(e, n);
|
|
})(l, e);
|
|
var n,
|
|
t,
|
|
i,
|
|
u =
|
|
((t = l),
|
|
(i = (function () {
|
|
if ("undefined" == typeof Reflect || !Reflect.construct) return !1;
|
|
if (Reflect.construct.sham) return !1;
|
|
if ("function" == typeof Proxy) return !0;
|
|
try {
|
|
return Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})), !0;
|
|
} catch (e) {
|
|
return !1;
|
|
}
|
|
})()),
|
|
function () {
|
|
var e,
|
|
n = s(t);
|
|
if (i) {
|
|
var r = s(this).constructor;
|
|
e = Reflect.construct(n, arguments, r);
|
|
} else e = n.apply(this, arguments);
|
|
return o(this, e);
|
|
});
|
|
function l() {
|
|
var e;
|
|
return (
|
|
(function (e, n) {
|
|
if (!(e instanceof n)) throw new TypeError("Cannot call a class as a function");
|
|
})(this, l),
|
|
d(a((e = u.call(this))), "enableAnalytics", function (n, t, i) {
|
|
return (e._tracking = new c(n, t, !0 === i)), e.getAnalytics();
|
|
}),
|
|
d(a(e), "setBuildVersion", function (n) {
|
|
e.isAnalyticsEnabled() && e._tracking.onGameSetBuildVersion(n);
|
|
}),
|
|
d(a(e), "getAnalytics", function () {
|
|
return e._tracking;
|
|
}),
|
|
d(a(e), "disableAnalytics", function () {
|
|
e._tracking = null;
|
|
}),
|
|
d(a(e), "isAnalyticsEnabled", function () {
|
|
return null !== e._tracking;
|
|
}),
|
|
d(a(e), "setPlatform", function (n) {
|
|
e._platform = n;
|
|
}),
|
|
d(a(e), "getPlatform", function () {
|
|
return e._platform;
|
|
}),
|
|
d(a(e), "init", function () {
|
|
null !== e._platform &&
|
|
e._platform.init().then(function () {
|
|
(e._state = "ready"), e.dispatch("ready", {}), (e._startLoadingTime = new Date().getTime()), e.dispatch("startLoading", {});
|
|
});
|
|
}),
|
|
d(a(e), "saveProgression", function (e, n) {
|
|
localStorage.setItem(e, JSON.stringify(n));
|
|
}),
|
|
d(a(e), "getSavedProgression", function (e) {
|
|
return JSON.parse(localStorage.getItem(e));
|
|
}),
|
|
d(a(e), "pause", function () {
|
|
e.dispatch("pause", {});
|
|
}),
|
|
d(a(e), "resume", function () {
|
|
e.dispatch("resume", {});
|
|
}),
|
|
d(a(e), "getState", function () {
|
|
return e._state;
|
|
}),
|
|
d(a(e), "notifyLoadingProgress", function (n) {
|
|
null !== e._platform && e._platform.notifyLoadingProgress(n);
|
|
}),
|
|
d(a(e), "notifyLoadingComplete", function () {
|
|
null !== e._platform ? (e._platform.notifyLoadingComplete(), e.isAnalyticsEnabled() && e._tracking.onGamePreloadEnd(new Date().getTime() - e._startLoadingTime)) : Promise.resolve(!1);
|
|
}),
|
|
d(a(e), "performHapticFeedBack", function (e) {}),
|
|
d(a(e), "notifyLevelStart", function (n) {
|
|
e.isAnalyticsEnabled() && e._tracking.onLevelStarted(n);
|
|
}),
|
|
d(a(e), "notifyUpdateScore", function (e) {}),
|
|
d(a(e), "notifyLevelEnd", function (n, t, i) {
|
|
e.isAnalyticsEnabled() && e._tracking.onLevelEnded(t, i, n);
|
|
}),
|
|
d(a(e), "requestInterstitialAd", function () {
|
|
return null !== e._platform
|
|
? e._platform.requestInterstitialAd().then(function (n) {
|
|
return e.isAnalyticsEnabled() && e._tracking.onAdImpression(v.INTERSTITIAL, e.getPlatform().getName()), n;
|
|
})
|
|
: (e.isAnalyticsEnabled() && e._tracking.onAdFailedLoad(v.INTERSTITIAL), Promise.resolve(!1));
|
|
}),
|
|
d(a(e), "requestRewardedAd", function () {
|
|
return null !== e._platform
|
|
? e._platform.requestRewardedAd().then(function (n) {
|
|
return e.isAnalyticsEnabled() && e._tracking.OnAdImpression(v.REWARDED, e.getPlatform().getName()), n;
|
|
})
|
|
: (e.isAnalyticsEnabled() && e._tracking.OnAdFailedLoad(v.REWARDED), Promise.resolve(!1));
|
|
}),
|
|
(e._state = "loading"),
|
|
(e._platform = null),
|
|
(e._tracking = null),
|
|
(e._startLoadingTime = new Date().getTime()),
|
|
e
|
|
);
|
|
}
|
|
return (n = l), Object.defineProperty(n, "prototype", { writable: !1 }), n;
|
|
})(u);
|
|
e.exports = f;
|
|
},
|
|
978: (e, n, t) => {
|
|
function i(e, n) {
|
|
for (var t = 0; t < n.length; t++) {
|
|
var i = n[t];
|
|
(i.enumerable = i.enumerable || !1), (i.configurable = !0), "value" in i && (i.writable = !0), Object.defineProperty(e, i.key, i);
|
|
}
|
|
}
|
|
function r(e, n, t) {
|
|
return n && i(e.prototype, n), t && i(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e;
|
|
}
|
|
function o(e, n, t) {
|
|
return n in e ? Object.defineProperty(e, n, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : (e[n] = t), e;
|
|
}
|
|
var a = t(559),
|
|
s = r(function e() {
|
|
var n = this;
|
|
!(function (e, n) {
|
|
if (!(e instanceof n)) throw new TypeError("Cannot call a class as a function");
|
|
})(this, e),
|
|
o(this, "dispatch", function (e, t) {
|
|
var i = n._observers.get(e) || [],
|
|
r = new a(e, n, t);
|
|
i.forEach(function (e) {
|
|
e(r);
|
|
});
|
|
}),
|
|
o(this, "hasEventListeners", function (e) {
|
|
return void 0 !== n._observers.get(e);
|
|
}),
|
|
o(this, "removeEventListener", function (e, t) {
|
|
if (n.isEventListener(e, t)) {
|
|
var i = n._observers.get(e);
|
|
i.splice(i.indexOf(t), 1);
|
|
}
|
|
}),
|
|
o(this, "isEventListener", function (e, t) {
|
|
return (n._observers.get(e) || []).indexOf(t) > -1;
|
|
}),
|
|
o(this, "addEventListener", function (e, t) {
|
|
if (n.isEventListener(e, t)) return !1;
|
|
var i = n._observers.get(e) || [];
|
|
return i.push(t), n._observers.set(e, i), !0;
|
|
}),
|
|
o(this, "removeAllEventListeners", function () {
|
|
n._observers = new Map();
|
|
}),
|
|
(this._observers = new Map());
|
|
});
|
|
e.exports = s;
|
|
},
|
|
559: (e) => {
|
|
function n(e, n) {
|
|
for (var t = 0; t < n.length; t++) {
|
|
var i = n[t];
|
|
(i.enumerable = i.enumerable || !1), (i.configurable = !0), "value" in i && (i.writable = !0), Object.defineProperty(e, i.key, i);
|
|
}
|
|
}
|
|
function t(e, t, i) {
|
|
return t && n(e.prototype, t), i && n(e, i), Object.defineProperty(e, "prototype", { writable: !1 }), e;
|
|
}
|
|
function i(e, n, t) {
|
|
return n in e ? Object.defineProperty(e, n, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : (e[n] = t), e;
|
|
}
|
|
var r = t(function e(n, t, r) {
|
|
var o = this;
|
|
!(function (e, n) {
|
|
if (!(e instanceof n)) throw new TypeError("Cannot call a class as a function");
|
|
})(this, e),
|
|
i(this, "getEventType", function () {
|
|
return o._type;
|
|
}),
|
|
i(this, "getEmitter", function () {
|
|
return o._emitter;
|
|
}),
|
|
i(this, "getPayload", function () {
|
|
return o._payload;
|
|
}),
|
|
(this._type = n),
|
|
(this._emitter = t),
|
|
(this._payload = r);
|
|
});
|
|
e.exports = r;
|
|
},
|
|
579: (e, n, t) => {
|
|
var i = t(287),
|
|
r = t(71),
|
|
o = new i(),
|
|
a = new r();
|
|
a.setPlatform(o), (e.exports = { H5SDK: a });
|
|
},
|
|
602: (e, n) => {
|
|
(() => {
|
|
var e = {
|
|
912: (e, n, t) => {
|
|
function i(e, n) {
|
|
if (!(e instanceof n)) throw new TypeError("Cannot call a class as a function");
|
|
}
|
|
var r = t(806),
|
|
o = t(49),
|
|
a = t(461),
|
|
s = (function () {
|
|
function e(n, t) {
|
|
var o = arguments.length > 2 && void 0 !== arguments[2] && arguments[2];
|
|
i(this, e), r.GameAnalytics.gaCommand("setEnabledInfoLog", o), r.GameAnalytics.gaCommand("initialize", n, t);
|
|
}
|
|
var n, t;
|
|
return (
|
|
(n = e),
|
|
(t = [
|
|
{
|
|
key: "onGameShopOpen",
|
|
value: function () {
|
|
r.GameAnalytics.gaCommand(o.DESIGNEVENT, "shopOpen", 1);
|
|
},
|
|
},
|
|
{
|
|
key: "onGameShopPurchase",
|
|
value: function () {
|
|
r.GameAnalytics.gaCommand(o.DESIGNEVENT, "shopPurchase", 1);
|
|
},
|
|
},
|
|
{
|
|
key: "onGamePreloadEnd",
|
|
value: function (e) {
|
|
r.GameAnalytics.gaCommand(o.DESIGNEVENT, "preloadingTime", e);
|
|
},
|
|
},
|
|
{
|
|
key: "onGameSetBuildVersion",
|
|
value: function (e) {
|
|
r.GameAnalytics.gaCommand("configureBuild", e);
|
|
},
|
|
},
|
|
{
|
|
key: "onGameError",
|
|
value: function (e) {
|
|
r.GameAnalytics.gaCommand(o.ERROREVENT, r.EGAErrorSeverity.Debug, e);
|
|
},
|
|
},
|
|
{
|
|
key: "onLevelStarted",
|
|
value: function (e) {
|
|
r.GameAnalytics.gaCommand(o.PROGRESSIONEVENT, "Start", e || " ", null, null, {});
|
|
},
|
|
},
|
|
{
|
|
key: "onLevelEnded",
|
|
value: function (e, n, t) {
|
|
r.GameAnalytics.gaCommand(o.PROGRESSIONEVENT, !0 === n ? "Complete" : "Fail", t || " ", null, null, { score: e });
|
|
},
|
|
},
|
|
{
|
|
key: "onAdFailedLoad",
|
|
value: function (e, n) {
|
|
var t = a.typeToAd(e);
|
|
r.GameAnalytics.gaCommand(o.ADEVENT, r.EGAAdAction.FailedShow, t.id, n, t.name + "Impression");
|
|
},
|
|
},
|
|
{
|
|
key: "onAdImpression",
|
|
value: function (e, n) {
|
|
var t = a.typeToAd(e);
|
|
r.GameAnalytics.gaCommand(o.ADEVENT, r.EGAAdAction.Show, t.id, n, t.name + "Impression");
|
|
},
|
|
},
|
|
]) &&
|
|
(function (e, n) {
|
|
for (var t = 0; t < n.length; t++) {
|
|
var i = n[t];
|
|
(i.enumerable = i.enumerable || !1), (i.configurable = !0), "value" in i && (i.writable = !0), Object.defineProperty(e, i.key, i);
|
|
}
|
|
})(n.prototype, t),
|
|
Object.defineProperty(n, "prototype", { writable: !1 }),
|
|
e
|
|
);
|
|
})();
|
|
e.exports = s;
|
|
},
|
|
461: (e) => {
|
|
function n(e, n, t) {
|
|
return n in e ? Object.defineProperty(e, n, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : (e[n] = t), e;
|
|
}
|
|
var t = (function () {
|
|
function e() {
|
|
!(function (e, n) {
|
|
if (!(e instanceof n)) throw new TypeError("Cannot call a class as a function");
|
|
})(this, e);
|
|
}
|
|
var n, t;
|
|
return (
|
|
(n = e),
|
|
(t = [
|
|
{
|
|
key: "typeToAd",
|
|
value: function (n) {
|
|
var t = [e.VIDEO, e.REWARDED, e.PLAYABLE, e.INTERSTITIAL, e.OFFERWALL, e.BANNER],
|
|
i = t.indexOf(n);
|
|
return -1 === i ? e.BANNER : t[i];
|
|
},
|
|
},
|
|
]),
|
|
t &&
|
|
(function (e, n) {
|
|
for (var t = 0; t < n.length; t++) {
|
|
var i = n[t];
|
|
(i.enumerable = i.enumerable || !1), (i.configurable = !0), "value" in i && (i.writable = !0), Object.defineProperty(e, i.key, i);
|
|
}
|
|
})(n, t),
|
|
Object.defineProperty(n, "prototype", { writable: !1 }),
|
|
e
|
|
);
|
|
})();
|
|
n(t, "VIDEO", { name: "Video", id: 1 }), n(t, "REWARDED", { name: "RewardedVideo", id: 2 }), n(t, "PLAYABLE", { name: "Playable", id: 3 }), n(t, "INTERSTITIAL", { name: "Interstitial", id: 4 }), n(t, "OFFERWALL", { name: "OfferWall", id: 5 }), n(t, "BANNER", { name: "Banner", id: 6 }), (e.exports = t);
|
|
},
|
|
49: (e) => {
|
|
function n(e, n, t) {
|
|
return n in e ? Object.defineProperty(e, n, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : (e[n] = t), e;
|
|
}
|
|
var t = (function (e, n, t) {
|
|
return Object.defineProperty(e, "prototype", { writable: !1 }), e;
|
|
})(function e() {
|
|
!(function (e, n) {
|
|
if (!(e instanceof n)) throw new TypeError("Cannot call a class as a function");
|
|
})(this, e);
|
|
});
|
|
n(t, "PROGRESSIONEVENT", "addProgressionEvent"), n(t, "DESIGNEVENT", "addDesignEvent"), n(t, "ERROREVENT", "addErrorEvent"), n(t, "ADEVENT", "addAdEvent"), (e.exports = t);
|
|
},
|
|
579: (e, n, t) => {
|
|
var i = t(912),
|
|
r = t(461);
|
|
e.exports = { H5Analytics: i, ADTYPE: r, REWARDED: r.REWARDED, VIDEO: r.VIDEO, PLAYABLE: r.PLAYABLE, INTERSTITIAL: r.INTERSTITIAL, OFFERWALL: r.OFFERWALL, BANNER: r.BANNER };
|
|
},
|
|
806: (e, n, t) => {
|
|
"use strict";
|
|
var i,
|
|
r,
|
|
o,
|
|
a,
|
|
s =
|
|
s ||
|
|
(function (e, n) {
|
|
var t = {},
|
|
i = (t.lib = {}),
|
|
r = function () {},
|
|
o = (i.Base = {
|
|
extend: function (e) {
|
|
r.prototype = this;
|
|
var n = new r();
|
|
return (
|
|
e && n.mixIn(e),
|
|
n.hasOwnProperty("init") ||
|
|
(n.init = function () {
|
|
n.$super.init.apply(this, arguments);
|
|
}),
|
|
(n.init.prototype = n),
|
|
(n.$super = this),
|
|
n
|
|
);
|
|
},
|
|
create: function () {
|
|
var e = this.extend();
|
|
return e.init.apply(e, arguments), e;
|
|
},
|
|
init: function () {},
|
|
mixIn: function (e) {
|
|
for (var n in e) e.hasOwnProperty(n) && (this[n] = e[n]);
|
|
e.hasOwnProperty("toString") && (this.toString = e.toString);
|
|
},
|
|
clone: function () {
|
|
return this.init.prototype.extend(this);
|
|
},
|
|
}),
|
|
a = (i.WordArray = o.extend({
|
|
init: function (e, n) {
|
|
(e = this.words = e || []), (this.sigBytes = null != n ? n : 4 * e.length);
|
|
},
|
|
toString: function (e) {
|
|
return (e || d).stringify(this);
|
|
},
|
|
concat: function (e) {
|
|
var n = this.words,
|
|
t = e.words,
|
|
i = this.sigBytes;
|
|
if (((e = e.sigBytes), this.clamp(), i % 4)) for (var r = 0; r < e; r++) n[(i + r) >>> 2] |= ((t[r >>> 2] >>> (24 - (r % 4) * 8)) & 255) << (24 - ((i + r) % 4) * 8);
|
|
else if (65535 < t.length) for (r = 0; r < e; r += 4) n[(i + r) >>> 2] = t[r >>> 2];
|
|
else n.push.apply(n, t);
|
|
return (this.sigBytes += e), this;
|
|
},
|
|
clamp: function () {
|
|
var n = this.words,
|
|
t = this.sigBytes;
|
|
(n[t >>> 2] &= 4294967295 << (32 - (t % 4) * 8)), (n.length = e.ceil(t / 4));
|
|
},
|
|
clone: function () {
|
|
var e = o.clone.call(this);
|
|
return (e.words = this.words.slice(0)), e;
|
|
},
|
|
random: function (n) {
|
|
for (var t = [], i = 0; i < n; i += 4) t.push((4294967296 * e.random()) | 0);
|
|
return new a.init(t, n);
|
|
},
|
|
})),
|
|
s = (t.enc = {}),
|
|
d = (s.Hex = {
|
|
stringify: function (e) {
|
|
var n = e.words;
|
|
e = e.sigBytes;
|
|
for (var t = [], i = 0; i < e; i++) {
|
|
var r = (n[i >>> 2] >>> (24 - (i % 4) * 8)) & 255;
|
|
t.push((r >>> 4).toString(16)), t.push((15 & r).toString(16));
|
|
}
|
|
return t.join("");
|
|
},
|
|
parse: function (e) {
|
|
for (var n = e.length, t = [], i = 0; i < n; i += 2) t[i >>> 3] |= parseInt(e.substr(i, 2), 16) << (24 - (i % 8) * 4);
|
|
return new a.init(t, n / 2);
|
|
},
|
|
}),
|
|
u = (s.Latin1 = {
|
|
stringify: function (e) {
|
|
var n = e.words;
|
|
e = e.sigBytes;
|
|
for (var t = [], i = 0; i < e; i++) t.push(String.fromCharCode((n[i >>> 2] >>> (24 - (i % 4) * 8)) & 255));
|
|
return t.join("");
|
|
},
|
|
parse: function (e) {
|
|
for (var n = e.length, t = [], i = 0; i < n; i++) t[i >>> 2] |= (255 & e.charCodeAt(i)) << (24 - (i % 4) * 8);
|
|
return new a.init(t, n);
|
|
},
|
|
}),
|
|
l = (s.Utf8 = {
|
|
stringify: function (e) {
|
|
try {
|
|
return decodeURIComponent(escape(u.stringify(e)));
|
|
} catch (e) {
|
|
throw Error("Malformed UTF-8 data");
|
|
}
|
|
},
|
|
parse: function (e) {
|
|
return u.parse(unescape(encodeURIComponent(e)));
|
|
},
|
|
}),
|
|
c = (i.BufferedBlockAlgorithm = o.extend({
|
|
reset: function () {
|
|
(this._data = new a.init()), (this._nDataBytes = 0);
|
|
},
|
|
_append: function (e) {
|
|
"string" == typeof e && (e = l.parse(e)), this._data.concat(e), (this._nDataBytes += e.sigBytes);
|
|
},
|
|
_process: function (n) {
|
|
var t = this._data,
|
|
i = t.words,
|
|
r = t.sigBytes,
|
|
o = this.blockSize,
|
|
s = r / (4 * o);
|
|
if (((n = (s = n ? e.ceil(s) : e.max((0 | s) - this._minBufferSize, 0)) * o), (r = e.min(4 * n, r)), n)) {
|
|
for (var d = 0; d < n; d += o) this._doProcessBlock(i, d);
|
|
(d = i.splice(0, n)), (t.sigBytes -= r);
|
|
}
|
|
return new a.init(d, r);
|
|
},
|
|
clone: function () {
|
|
var e = o.clone.call(this);
|
|
return (e._data = this._data.clone()), e;
|
|
},
|
|
_minBufferSize: 0,
|
|
}));
|
|
i.Hasher = c.extend({
|
|
cfg: o.extend(),
|
|
init: function (e) {
|
|
(this.cfg = this.cfg.extend(e)), this.reset();
|
|
},
|
|
reset: function () {
|
|
c.reset.call(this), this._doReset();
|
|
},
|
|
update: function (e) {
|
|
return this._append(e), this._process(), this;
|
|
},
|
|
finalize: function (e) {
|
|
return e && this._append(e), this._doFinalize();
|
|
},
|
|
blockSize: 16,
|
|
_createHelper: function (e) {
|
|
return function (n, t) {
|
|
return new e.init(t).finalize(n);
|
|
};
|
|
},
|
|
_createHmacHelper: function (e) {
|
|
return function (n, t) {
|
|
return new v.HMAC.init(e, t).finalize(n);
|
|
};
|
|
},
|
|
});
|
|
var v = (t.algo = {});
|
|
return t;
|
|
})(Math);
|
|
!(function (e) {
|
|
for (
|
|
var n = s,
|
|
t = (r = n.lib).WordArray,
|
|
i = r.Hasher,
|
|
r = n.algo,
|
|
o = [],
|
|
a = [],
|
|
d = function (e) {
|
|
return (4294967296 * (e - (0 | e))) | 0;
|
|
},
|
|
u = 2,
|
|
l = 0;
|
|
64 > l;
|
|
|
|
) {
|
|
var c;
|
|
e: {
|
|
c = u;
|
|
for (var v = e.sqrt(c), f = 2; f <= v; f++)
|
|
if (!(c % f)) {
|
|
c = !1;
|
|
break e;
|
|
}
|
|
c = !0;
|
|
}
|
|
c && (8 > l && (o[l] = d(e.pow(u, 0.5))), (a[l] = d(e.pow(u, 1 / 3))), l++), u++;
|
|
}
|
|
var g = [];
|
|
(r = r.SHA256 =
|
|
i.extend({
|
|
_doReset: function () {
|
|
this._hash = new t.init(o.slice(0));
|
|
},
|
|
_doProcessBlock: function (e, n) {
|
|
for (var t = this._hash.words, i = t[0], r = t[1], o = t[2], s = t[3], d = t[4], u = t[5], l = t[6], c = t[7], v = 0; 64 > v; v++) {
|
|
if (16 > v) g[v] = 0 | e[n + v];
|
|
else {
|
|
var f = g[v - 15],
|
|
m = g[v - 2];
|
|
g[v] = (((f << 25) | (f >>> 7)) ^ ((f << 14) | (f >>> 18)) ^ (f >>> 3)) + g[v - 7] + (((m << 15) | (m >>> 17)) ^ ((m << 13) | (m >>> 19)) ^ (m >>> 10)) + g[v - 16];
|
|
}
|
|
(f = c + (((d << 26) | (d >>> 6)) ^ ((d << 21) | (d >>> 11)) ^ ((d << 7) | (d >>> 25))) + ((d & u) ^ (~d & l)) + a[v] + g[v]), (m = (((i << 30) | (i >>> 2)) ^ ((i << 19) | (i >>> 13)) ^ ((i << 10) | (i >>> 22))) + ((i & r) ^ (i & o) ^ (r & o))), (c = l), (l = u), (u = d), (d = (s + f) | 0), (s = o), (o = r), (r = i), (i = (f + m) | 0);
|
|
}
|
|
(t[0] = (t[0] + i) | 0), (t[1] = (t[1] + r) | 0), (t[2] = (t[2] + o) | 0), (t[3] = (t[3] + s) | 0), (t[4] = (t[4] + d) | 0), (t[5] = (t[5] + u) | 0), (t[6] = (t[6] + l) | 0), (t[7] = (t[7] + c) | 0);
|
|
},
|
|
_doFinalize: function () {
|
|
var n = this._data,
|
|
t = n.words,
|
|
i = 8 * this._nDataBytes,
|
|
r = 8 * n.sigBytes;
|
|
return (t[r >>> 5] |= 128 << (24 - (r % 32))), (t[14 + (((r + 64) >>> 9) << 4)] = e.floor(i / 4294967296)), (t[15 + (((r + 64) >>> 9) << 4)] = i), (n.sigBytes = 4 * t.length), this._process(), this._hash;
|
|
},
|
|
clone: function () {
|
|
var e = i.clone.call(this);
|
|
return (e._hash = this._hash.clone()), e;
|
|
},
|
|
})),
|
|
(n.SHA256 = i._createHelper(r)),
|
|
(n.HmacSHA256 = i._createHmacHelper(r));
|
|
})(Math),
|
|
(r = (i = s).enc.Utf8),
|
|
(i.algo.HMAC = i.lib.Base.extend({
|
|
init: function (e, n) {
|
|
(e = this._hasher = new e.init()), "string" == typeof n && (n = r.parse(n));
|
|
var t = e.blockSize,
|
|
i = 4 * t;
|
|
n.sigBytes > i && (n = e.finalize(n)), n.clamp();
|
|
for (var o = (this._oKey = n.clone()), a = (this._iKey = n.clone()), s = o.words, d = a.words, u = 0; u < t; u++) (s[u] ^= 1549556828), (d[u] ^= 909522486);
|
|
(o.sigBytes = a.sigBytes = i), this.reset();
|
|
},
|
|
reset: function () {
|
|
var e = this._hasher;
|
|
e.reset(), e.update(this._iKey);
|
|
},
|
|
update: function (e) {
|
|
return this._hasher.update(e), this;
|
|
},
|
|
finalize: function (e) {
|
|
var n = this._hasher;
|
|
return (e = n.finalize(e)), n.reset(), n.finalize(this._oKey.clone().concat(e));
|
|
},
|
|
})),
|
|
(function () {
|
|
var e = s,
|
|
n = e.lib.WordArray;
|
|
e.enc.Base64 = {
|
|
stringify: function (e) {
|
|
var n = e.words,
|
|
t = e.sigBytes,
|
|
i = this._map;
|
|
e.clamp(), (e = []);
|
|
for (var r = 0; r < t; r += 3) for (var o = (((n[r >>> 2] >>> (24 - (r % 4) * 8)) & 255) << 16) | (((n[(r + 1) >>> 2] >>> (24 - ((r + 1) % 4) * 8)) & 255) << 8) | ((n[(r + 2) >>> 2] >>> (24 - ((r + 2) % 4) * 8)) & 255), a = 0; 4 > a && r + 0.75 * a < t; a++) e.push(i.charAt((o >>> (6 * (3 - a))) & 63));
|
|
if ((n = i.charAt(64))) for (; e.length % 4; ) e.push(n);
|
|
return e.join("");
|
|
},
|
|
parse: function (e) {
|
|
var t = e.length,
|
|
i = this._map;
|
|
(r = i.charAt(64)) && -1 != (r = e.indexOf(r)) && (t = r);
|
|
for (var r = [], o = 0, a = 0; a < t; a++)
|
|
if (a % 4) {
|
|
var s = i.indexOf(e.charAt(a - 1)) << ((a % 4) * 2),
|
|
d = i.indexOf(e.charAt(a)) >>> (6 - (a % 4) * 2);
|
|
(r[o >>> 2] |= (s | d) << (24 - (o % 4) * 8)), o++;
|
|
}
|
|
return n.create(r, o);
|
|
},
|
|
_map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
|
|
};
|
|
})(),
|
|
(function (e) {
|
|
var n, t, i, r, o, a, s, d, u, l, c, v, f;
|
|
((f = e.EGAErrorSeverity || (e.EGAErrorSeverity = {}))[(f.Undefined = 0)] = "Undefined"), (f[(f.Debug = 1)] = "Debug"), (f[(f.Info = 2)] = "Info"), (f[(f.Warning = 3)] = "Warning"), (f[(f.Error = 4)] = "Error"), (f[(f.Critical = 5)] = "Critical"), ((v = e.EGAProgressionStatus || (e.EGAProgressionStatus = {}))[(v.Undefined = 0)] = "Undefined"), (v[(v.Start = 1)] = "Start"), (v[(v.Complete = 2)] = "Complete"), (v[(v.Fail = 3)] = "Fail"), ((c = e.EGAResourceFlowType || (e.EGAResourceFlowType = {}))[(c.Undefined = 0)] = "Undefined"), (c[(c.Source = 1)] = "Source"), (c[(c.Sink = 2)] = "Sink"), ((l = e.EGAAdAction || (e.EGAAdAction = {}))[(l.Undefined = 0)] = "Undefined"), (l[(l.Clicked = 1)] = "Clicked"), (l[(l.Show = 2)] = "Show"), (l[(l.FailedShow = 3)] = "FailedShow"), (l[(l.RewardReceived = 4)] = "RewardReceived"), ((u = e.EGAAdError || (e.EGAAdError = {}))[(u.Undefined = 0)] = "Undefined"), (u[(u.Unknown = 1)] = "Unknown"), (u[(u.Offline = 2)] = "Offline"), (u[(u.NoFill = 3)] = "NoFill"), (u[(u.InternalError = 4)] = "InternalError"), (u[(u.InvalidRequest = 5)] = "InvalidRequest"), (u[(u.UnableToPrecache = 6)] = "UnableToPrecache"), ((d = e.EGAAdType || (e.EGAAdType = {}))[(d.Undefined = 0)] = "Undefined"), (d[(d.Video = 1)] = "Video"), (d[(d.RewardedVideo = 2)] = "RewardedVideo"), (d[(d.Playable = 3)] = "Playable"), (d[(d.Interstitial = 4)] = "Interstitial"), (d[(d.OfferWall = 5)] = "OfferWall"), (d[(d.Banner = 6)] = "Banner"), ((s = (a = e.http || (e.http = {})).EGAHTTPApiResponse || (a.EGAHTTPApiResponse = {}))[(s.NoResponse = 0)] = "NoResponse"), (s[(s.BadResponse = 1)] = "BadResponse"), (s[(s.RequestTimeout = 2)] = "RequestTimeout"), (s[(s.JsonEncodeFailed = 3)] = "JsonEncodeFailed"), (s[(s.JsonDecodeFailed = 4)] = "JsonDecodeFailed"), (s[(s.InternalServerError = 5)] = "InternalServerError"), (s[(s.BadRequest = 6)] = "BadRequest"), (s[(s.Unauthorized = 7)] = "Unauthorized"), (s[(s.UnknownResponseCode = 8)] = "UnknownResponseCode"), (s[(s.Ok = 9)] = "Ok"), (s[(s.Created = 10)] = "Created"), ((o = (n = e.events || (e.events = {})).EGASdkErrorCategory || (n.EGASdkErrorCategory = {}))[(o.Undefined = 0)] = "Undefined"), (o[(o.EventValidation = 1)] = "EventValidation"), (o[(o.Database = 2)] = "Database"), (o[(o.Init = 3)] = "Init"), (o[(o.Http = 4)] = "Http"), (o[(o.Json = 5)] = "Json"), ((r = n.EGASdkErrorArea || (n.EGASdkErrorArea = {}))[(r.Undefined = 0)] = "Undefined"), (r[(r.BusinessEvent = 1)] = "BusinessEvent"), (r[(r.ResourceEvent = 2)] = "ResourceEvent"), (r[(r.ProgressionEvent = 3)] = "ProgressionEvent"), (r[(r.DesignEvent = 4)] = "DesignEvent"), (r[(r.ErrorEvent = 5)] = "ErrorEvent"), (r[(r.InitHttp = 9)] = "InitHttp"), (r[(r.EventsHttp = 10)] = "EventsHttp"), (r[(r.ProcessEvents = 11)] = "ProcessEvents"), (r[(r.AddEventsToStore = 12)] = "AddEventsToStore"), (r[(r.AdEvent = 20)] = "AdEvent"), ((i = n.EGASdkErrorAction || (n.EGASdkErrorAction = {}))[(i.Undefined = 0)] = "Undefined"), (i[(i.InvalidCurrency = 1)] = "InvalidCurrency"), (i[(i.InvalidShortString = 2)] = "InvalidShortString"), (i[(i.InvalidEventPartLength = 3)] = "InvalidEventPartLength"), (i[(i.InvalidEventPartCharacters = 4)] = "InvalidEventPartCharacters"), (i[(i.InvalidStore = 5)] = "InvalidStore"), (i[(i.InvalidFlowType = 6)] = "InvalidFlowType"), (i[(i.StringEmptyOrNull = 7)] = "StringEmptyOrNull"), (i[(i.NotFoundInAvailableCurrencies = 8)] = "NotFoundInAvailableCurrencies"), (i[(i.InvalidAmount = 9)] = "InvalidAmount"), (i[(i.NotFoundInAvailableItemTypes = 10)] = "NotFoundInAvailableItemTypes"), (i[(i.WrongProgressionOrder = 11)] = "WrongProgressionOrder"), (i[(i.InvalidEventIdLength = 12)] = "InvalidEventIdLength"), (i[(i.InvalidEventIdCharacters = 13)] = "InvalidEventIdCharacters"), (i[(i.InvalidProgressionStatus = 15)] = "InvalidProgressionStatus"), (i[(i.InvalidSeverity = 16)] = "InvalidSeverity"), (i[(i.InvalidLongString = 17)] = "InvalidLongString"), (i[(i.DatabaseTooLarge = 18)] = "DatabaseTooLarge"), (i[(i.DatabaseOpenOrCreate = 19)] = "DatabaseOpenOrCreate"), (i[(i.JsonError = 25)] = "JsonError"), (i[(i.FailHttpJsonDecode = 29)] = "FailHttpJsonDecode"), (i[(i.FailHttpJsonEncode = 30)] = "FailHttpJsonEncode"), (i[(i.InvalidAdAction = 31)] = "InvalidAdAction"), (i[(i.InvalidAdType = 32)] = "InvalidAdType"), (i[(i.InvalidString = 33)] = "InvalidString"), ((t = n.EGASdkErrorParameter || (n.EGASdkErrorParameter = {}))[(t.Undefined = 0)] = "Undefined"), (t[(t.Currency = 1)] = "Currency"), (t[(t.CartType = 2)] = "CartType"), (t[(t.ItemType = 3)] = "ItemType"), (t[(t.ItemId = 4)] = "ItemId"), (t[(t.Store = 5)] = "Store"), (t[(t.FlowType = 6)] = "FlowType"), (t[(t.Amount = 7)] = "Amount"), (t[(t.Progression01 = 8)] = "Progression01"), (t[(t.Progression02 = 9)] = "Progression02"), (t[(t.Progression03 = 10)] = "Progression03"), (t[(t.EventId = 11)] = "EventId"), (t[(t.ProgressionStatus = 12)] = "ProgressionStatus"), (t[(t.Severity = 13)] = "Severity"), (t[(t.Message = 14)] = "Message"), (t[(t.AdAction = 15)] = "AdAction"), (t[(t.AdType = 16)] = "AdType"), (t[(t.AdSdkName = 17)] = "AdSdkName"), (t[(t.AdPlacement = 18)] = "AdPlacement");
|
|
})(a || (a = {})),
|
|
(function (e) {
|
|
var n, t, i, r, o, a;
|
|
((a = e.EGAErrorSeverity || (e.EGAErrorSeverity = {}))[(a.Undefined = 0)] = "Undefined"), (a[(a.Debug = 1)] = "Debug"), (a[(a.Info = 2)] = "Info"), (a[(a.Warning = 3)] = "Warning"), (a[(a.Error = 4)] = "Error"), (a[(a.Critical = 5)] = "Critical"), ((o = e.EGAProgressionStatus || (e.EGAProgressionStatus = {}))[(o.Undefined = 0)] = "Undefined"), (o[(o.Start = 1)] = "Start"), (o[(o.Complete = 2)] = "Complete"), (o[(o.Fail = 3)] = "Fail"), ((r = e.EGAResourceFlowType || (e.EGAResourceFlowType = {}))[(r.Undefined = 0)] = "Undefined"), (r[(r.Source = 1)] = "Source"), (r[(r.Sink = 2)] = "Sink"), ((i = e.EGAAdAction || (e.EGAAdAction = {}))[(i.Undefined = 0)] = "Undefined"), (i[(i.Clicked = 1)] = "Clicked"), (i[(i.Show = 2)] = "Show"), (i[(i.FailedShow = 3)] = "FailedShow"), (i[(i.RewardReceived = 4)] = "RewardReceived"), ((t = e.EGAAdError || (e.EGAAdError = {}))[(t.Undefined = 0)] = "Undefined"), (t[(t.Unknown = 1)] = "Unknown"), (t[(t.Offline = 2)] = "Offline"), (t[(t.NoFill = 3)] = "NoFill"), (t[(t.InternalError = 4)] = "InternalError"), (t[(t.InvalidRequest = 5)] = "InvalidRequest"), (t[(t.UnableToPrecache = 6)] = "UnableToPrecache"), ((n = e.EGAAdType || (e.EGAAdType = {}))[(n.Undefined = 0)] = "Undefined"), (n[(n.Video = 1)] = "Video"), (n[(n.RewardedVideo = 2)] = "RewardedVideo"), (n[(n.Playable = 3)] = "Playable"), (n[(n.Interstitial = 4)] = "Interstitial"), (n[(n.OfferWall = 5)] = "OfferWall"), (n[(n.Banner = 6)] = "Banner");
|
|
})(o || (o = {})),
|
|
(function (e) {
|
|
!(function (e) {
|
|
var n;
|
|
!(function (e) {
|
|
(e[(e.Error = 0)] = "Error"), (e[(e.Warning = 1)] = "Warning"), (e[(e.Info = 2)] = "Info"), (e[(e.Debug = 3)] = "Debug");
|
|
})(n || (n = {}));
|
|
var t = (function () {
|
|
function e() {
|
|
e.debugEnabled = !1;
|
|
}
|
|
return (
|
|
(e.setInfoLog = function (n) {
|
|
e.instance.infoLogEnabled = n;
|
|
}),
|
|
(e.setVerboseLog = function (n) {
|
|
e.instance.infoLogVerboseEnabled = n;
|
|
}),
|
|
(e.i = function (t) {
|
|
if (e.instance.infoLogEnabled) {
|
|
var i = "Info/" + e.Tag + ": " + t;
|
|
e.instance.sendNotificationMessage(i, n.Info);
|
|
}
|
|
}),
|
|
(e.w = function (t) {
|
|
var i = "Warning/" + e.Tag + ": " + t;
|
|
e.instance.sendNotificationMessage(i, n.Warning);
|
|
}),
|
|
(e.e = function (t) {
|
|
var i = "Error/" + e.Tag + ": " + t;
|
|
e.instance.sendNotificationMessage(i, n.Error);
|
|
}),
|
|
(e.ii = function (t) {
|
|
if (e.instance.infoLogVerboseEnabled) {
|
|
var i = "Verbose/" + e.Tag + ": " + t;
|
|
e.instance.sendNotificationMessage(i, n.Info);
|
|
}
|
|
}),
|
|
(e.d = function (t) {
|
|
if (e.debugEnabled) {
|
|
var i = "Debug/" + e.Tag + ": " + t;
|
|
e.instance.sendNotificationMessage(i, n.Debug);
|
|
}
|
|
}),
|
|
(e.prototype.sendNotificationMessage = function (e, t) {
|
|
switch (t) {
|
|
case n.Error:
|
|
console.error(e);
|
|
break;
|
|
case n.Warning:
|
|
console.warn(e);
|
|
break;
|
|
case n.Debug:
|
|
"function" == typeof console.debug ? console.debug(e) : console.log(e);
|
|
break;
|
|
case n.Info:
|
|
console.log(e);
|
|
}
|
|
}),
|
|
(e.instance = new e()),
|
|
(e.Tag = "GameAnalytics"),
|
|
e
|
|
);
|
|
})();
|
|
e.GALogger = t;
|
|
})(e.logging || (e.logging = {}));
|
|
})(a || (a = {})),
|
|
(function (e) {
|
|
var n, t, i;
|
|
(n = e.utilities || (e.utilities = {})),
|
|
(t = e.logging.GALogger),
|
|
(i = (function () {
|
|
function e() {}
|
|
return (
|
|
(e.getHmac = function (e, n) {
|
|
var t = s.HmacSHA256(n, e);
|
|
return s.enc.Base64.stringify(t);
|
|
}),
|
|
(e.stringMatch = function (e, n) {
|
|
return !(!e || !n) && n.test(e);
|
|
}),
|
|
(e.joinStringArray = function (e, n) {
|
|
for (var t = "", i = 0, r = e.length; i < r; i++) i > 0 && (t += n), (t += e[i]);
|
|
return t;
|
|
}),
|
|
(e.stringArrayContainsString = function (e, n) {
|
|
if (0 === e.length) return !1;
|
|
for (var t in e) if (e[t] === n) return !0;
|
|
return !1;
|
|
}),
|
|
(e.encode64 = function (n) {
|
|
n = encodeURI(n);
|
|
var t,
|
|
i,
|
|
r,
|
|
o,
|
|
a,
|
|
s = "",
|
|
d = 0,
|
|
u = 0,
|
|
l = 0;
|
|
do {
|
|
(r = (t = n.charCodeAt(l++)) >> 2), (o = ((3 & t) << 4) | ((i = n.charCodeAt(l++)) >> 4)), (a = ((15 & i) << 2) | ((d = n.charCodeAt(l++)) >> 6)), (u = 63 & d), isNaN(i) ? (a = u = 64) : isNaN(d) && (u = 64), (s = s + e.keyStr.charAt(r) + e.keyStr.charAt(o) + e.keyStr.charAt(a) + e.keyStr.charAt(u)), (t = i = d = 0), (r = o = a = u = 0);
|
|
} while (l < n.length);
|
|
return s;
|
|
}),
|
|
(e.decode64 = function (n) {
|
|
var i,
|
|
r,
|
|
o,
|
|
a,
|
|
s = "",
|
|
d = 0,
|
|
u = 0,
|
|
l = 0;
|
|
/[^A-Za-z0-9\+\/\=]/g.exec(n) && t.w("There were invalid base64 characters in the input text. Valid base64 characters are A-Z, a-z, 0-9, '+', '/',and '='. Expect errors in decoding."), (n = n.replace(/[^A-Za-z0-9\+\/\=]/g, ""));
|
|
do {
|
|
(i = (e.keyStr.indexOf(n.charAt(l++)) << 2) | ((o = e.keyStr.indexOf(n.charAt(l++))) >> 4)), (r = ((15 & o) << 4) | ((a = e.keyStr.indexOf(n.charAt(l++))) >> 2)), (d = ((3 & a) << 6) | (u = e.keyStr.indexOf(n.charAt(l++)))), (s += String.fromCharCode(i)), 64 != a && (s += String.fromCharCode(r)), 64 != u && (s += String.fromCharCode(d)), (i = r = d = 0), (o = a = u = 0);
|
|
} while (l < n.length);
|
|
return decodeURI(s);
|
|
}),
|
|
(e.timeIntervalSince1970 = function () {
|
|
var e = new Date();
|
|
return Math.round(e.getTime() / 1e3);
|
|
}),
|
|
(e.createGuid = function () {
|
|
return "10000000-1000-4000-8000-100000000000".replace(/[018]/g, function (e) {
|
|
return (+e ^ (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (+e / 4)))).toString(16);
|
|
});
|
|
}),
|
|
(e.keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="),
|
|
e
|
|
);
|
|
})()),
|
|
(n.GAUtilities = i);
|
|
})(a || (a = {})),
|
|
(function (e) {
|
|
!(function (n) {
|
|
var t = e.logging.GALogger,
|
|
i = e.utilities.GAUtilities,
|
|
r = e.events.EGASdkErrorCategory,
|
|
o = e.events.EGASdkErrorArea,
|
|
a = e.events.EGASdkErrorAction,
|
|
s = e.events.EGASdkErrorParameter,
|
|
d = function (e, n, t, i, r) {
|
|
(this.category = e), (this.area = n), (this.action = t), (this.parameter = i), (this.reason = r);
|
|
};
|
|
n.ValidationResult = d;
|
|
var u = (function () {
|
|
function n() {}
|
|
return (
|
|
(n.validateBusinessEvent = function (e, i, u, l, c) {
|
|
return n.validateCurrency(e) ? (i < 0 ? (t.w("Validation fail - business event - amount. Cannot be less than 0. Failed amount: " + i), new d(r.EventValidation, o.BusinessEvent, a.InvalidAmount, s.Amount, i + "")) : n.validateShortString(u, !0) ? (n.validateEventPartLength(l, !1) ? (n.validateEventPartCharacters(l) ? (n.validateEventPartLength(c, !1) ? (n.validateEventPartCharacters(c) ? null : (t.w("Validation fail - business event - itemId: Cannot contain other characters than A-z, 0-9, -_., ()!?. String: " + c), new d(r.EventValidation, o.BusinessEvent, a.InvalidEventPartCharacters, s.ItemId, c))) : (t.w("Validation fail - business event - itemId. Cannot be (null), empty or above 64 characters. String: " + c), new d(r.EventValidation, o.BusinessEvent, a.InvalidEventPartLength, s.ItemId, c))) : (t.w("Validation fail - business event - itemType: Cannot contain other characters than A-z, 0-9, -_., ()!?. String: " + l), new d(r.EventValidation, o.BusinessEvent, a.InvalidEventPartCharacters, s.ItemType, l))) : (t.w("Validation fail - business event - itemType: Cannot be (null), empty or above 64 characters. String: " + l), new d(r.EventValidation, o.BusinessEvent, a.InvalidEventPartLength, s.ItemType, l))) : (t.w("Validation fail - business event - cartType. Cannot be above 32 length. String: " + u), new d(r.EventValidation, o.BusinessEvent, a.InvalidShortString, s.CartType, u))) : (t.w("Validation fail - business event - currency: Cannot be (null) and need to be A-Z, 3 characters and in the standard at openexchangerates.org. Failed currency: " + e), new d(r.EventValidation, o.BusinessEvent, a.InvalidCurrency, s.Currency, e));
|
|
}),
|
|
(n.validateResourceEvent = function (u, l, c, v, f, g, m) {
|
|
return u == e.EGAResourceFlowType.Undefined ? (t.w("Validation fail - resource event - flowType: Invalid flow type."), new d(r.EventValidation, o.ResourceEvent, a.InvalidFlowType, s.FlowType, "")) : l ? (i.stringArrayContainsString(g, l) ? (c > 0 ? (v ? (n.validateEventPartLength(v, !1) ? (n.validateEventPartCharacters(v) ? (i.stringArrayContainsString(m, v) ? (n.validateEventPartLength(f, !1) ? (n.validateEventPartCharacters(f) ? null : (t.w("Validation fail - resource event - itemId: Cannot contain other characters than A-z, 0-9, -_., ()!?. String: " + f), new d(r.EventValidation, o.ResourceEvent, a.InvalidEventPartCharacters, s.ItemId, f))) : (t.w("Validation fail - resource event - itemId: Cannot be (null), empty or above 64 characters. String: " + f), new d(r.EventValidation, o.ResourceEvent, a.InvalidEventPartLength, s.ItemId, f))) : (t.w("Validation fail - resource event - itemType: Not found in list of pre-defined available resource itemTypes. String: " + v), new d(r.EventValidation, o.ResourceEvent, a.NotFoundInAvailableItemTypes, s.ItemType, v))) : (t.w("Validation fail - resource event - itemType: Cannot contain other characters than A-z, 0-9, -_., ()!?. String: " + v), new d(r.EventValidation, o.ResourceEvent, a.InvalidEventPartCharacters, s.ItemType, v))) : (t.w("Validation fail - resource event - itemType: Cannot be (null), empty or above 64 characters. String: " + v), new d(r.EventValidation, o.ResourceEvent, a.InvalidEventPartLength, s.ItemType, v))) : (t.w("Validation fail - resource event - itemType: Cannot be (null)"), new d(r.EventValidation, o.ResourceEvent, a.StringEmptyOrNull, s.ItemType, ""))) : (t.w("Validation fail - resource event - amount: Float amount cannot be 0 or negative. Value: " + c), new d(r.EventValidation, o.ResourceEvent, a.InvalidAmount, s.Amount, c + ""))) : (t.w("Validation fail - resource event - currency: Not found in list of pre-defined available resource currencies. String: " + l), new d(r.EventValidation, o.ResourceEvent, a.NotFoundInAvailableCurrencies, s.Currency, l))) : (t.w("Validation fail - resource event - currency: Cannot be (null)"), new d(r.EventValidation, o.ResourceEvent, a.StringEmptyOrNull, s.Currency, ""));
|
|
}),
|
|
(n.validateProgressionEvent = function (i, u, l, c) {
|
|
if (i == e.EGAProgressionStatus.Undefined) return t.w("Validation fail - progression event: Invalid progression status."), new d(r.EventValidation, o.ProgressionEvent, a.InvalidProgressionStatus, s.ProgressionStatus, "");
|
|
if (c && !l && u) return t.w("Validation fail - progression event: 03 found but 01+02 are invalid. Progression must be set as either 01, 01+02 or 01+02+03."), new d(r.EventValidation, o.ProgressionEvent, a.WrongProgressionOrder, s.Undefined, u + ":" + l + ":" + c);
|
|
if (l && !u) return t.w("Validation fail - progression event: 02 found but not 01. Progression must be set as either 01, 01+02 or 01+02+03"), new d(r.EventValidation, o.ProgressionEvent, a.WrongProgressionOrder, s.Undefined, u + ":" + l + ":" + c);
|
|
if (!u) return t.w("Validation fail - progression event: progression01 not valid. Progressions must be set as either 01, 01+02 or 01+02+03"), new d(r.EventValidation, o.ProgressionEvent, a.WrongProgressionOrder, s.Undefined, (u || "") + ":" + (l || "") + ":" + (c || ""));
|
|
if (!n.validateEventPartLength(u, !1)) return t.w("Validation fail - progression event - progression01: Cannot be (null), empty or above 64 characters. String: " + u), new d(r.EventValidation, o.ProgressionEvent, a.InvalidEventPartLength, s.Progression01, u);
|
|
if (!n.validateEventPartCharacters(u)) return t.w("Validation fail - progression event - progression01: Cannot contain other characters than A-z, 0-9, -_., ()!?. String: " + u), new d(r.EventValidation, o.ProgressionEvent, a.InvalidEventPartCharacters, s.Progression01, u);
|
|
if (l) {
|
|
if (!n.validateEventPartLength(l, !0)) return t.w("Validation fail - progression event - progression02: Cannot be empty or above 64 characters. String: " + l), new d(r.EventValidation, o.ProgressionEvent, a.InvalidEventPartLength, s.Progression02, l);
|
|
if (!n.validateEventPartCharacters(l)) return t.w("Validation fail - progression event - progression02: Cannot contain other characters than A-z, 0-9, -_., ()!?. String: " + l), new d(r.EventValidation, o.ProgressionEvent, a.InvalidEventPartCharacters, s.Progression02, l);
|
|
}
|
|
if (c) {
|
|
if (!n.validateEventPartLength(c, !0)) return t.w("Validation fail - progression event - progression03: Cannot be empty or above 64 characters. String: " + c), new d(r.EventValidation, o.ProgressionEvent, a.InvalidEventPartLength, s.Progression03, c);
|
|
if (!n.validateEventPartCharacters(c)) return t.w("Validation fail - progression event - progression03: Cannot contain other characters than A-z, 0-9, -_., ()!?. String: " + c), new d(r.EventValidation, o.ProgressionEvent, a.InvalidEventPartCharacters, s.Progression03, c);
|
|
}
|
|
return null;
|
|
}),
|
|
(n.validateDesignEvent = function (e) {
|
|
return n.validateEventIdLength(e) ? (n.validateEventIdCharacters(e) ? null : (t.w("Validation fail - design event - eventId: Non valid characters. Only allowed A-z, 0-9, -_., ()!?. String: " + e), new d(r.EventValidation, o.DesignEvent, a.InvalidEventIdCharacters, s.EventId, e))) : (t.w("Validation fail - design event - eventId: Cannot be (null) or empty. Only 5 event parts allowed seperated by :. Each part need to be 64 characters or less. String: " + e), new d(r.EventValidation, o.DesignEvent, a.InvalidEventIdLength, s.EventId, e));
|
|
}),
|
|
(n.validateErrorEvent = function (i, u) {
|
|
return i == e.EGAErrorSeverity.Undefined ? (t.w("Validation fail - error event - severity: Severity was unsupported value."), new d(r.EventValidation, o.ErrorEvent, a.InvalidSeverity, s.Severity, "")) : n.validateLongString(u, !0) ? null : (t.w("Validation fail - error event - message: Message cannot be above 8192 characters."), new d(r.EventValidation, o.ErrorEvent, a.InvalidLongString, s.Message, u));
|
|
}),
|
|
(n.validateAdEvent = function (i, u, l, c) {
|
|
return i == e.EGAAdAction.Undefined ? (t.w("Validation fail - error event - severity: Severity was unsupported value."), new d(r.EventValidation, o.AdEvent, a.InvalidAdAction, s.AdAction, "")) : u == e.EGAAdType.Undefined ? (t.w("Validation fail - ad event - adType: Ad type was unsupported value."), new d(r.EventValidation, o.AdEvent, a.InvalidAdType, s.AdType, "")) : n.validateShortString(l, !1) ? (n.validateString(c, !1) ? null : (t.w("Validation fail - ad event - message: Ad placement cannot be above 64 characters."), new d(r.EventValidation, o.AdEvent, a.InvalidString, s.AdPlacement, c))) : (t.w("Validation fail - ad event - message: Ad SDK name cannot be above 32 characters."), new d(r.EventValidation, o.AdEvent, a.InvalidShortString, s.AdSdkName, l));
|
|
}),
|
|
(n.validateSdkErrorEvent = function (e, i, s, d, u) {
|
|
return !(!n.validateKeys(e, i) || (s === r.Undefined ? (t.w("Validation fail - sdk error event - type: Category was unsupported value."), 1) : d === o.Undefined ? (t.w("Validation fail - sdk error event - type: Area was unsupported value."), 1) : u === a.Undefined && (t.w("Validation fail - sdk error event - type: Action was unsupported value."), 1)));
|
|
}),
|
|
(n.validateKeys = function (e, n) {
|
|
return !(!i.stringMatch(e, /^[A-z0-9]{32}$/) || !i.stringMatch(n, /^[A-z0-9]{40}$/));
|
|
}),
|
|
(n.validateCurrency = function (e) {
|
|
return !!e && !!i.stringMatch(e, /^[A-Z]{3}$/);
|
|
}),
|
|
(n.validateEventPartLength = function (e, n) {
|
|
return !(!n || e) || (!!e && !(e.length > 64));
|
|
}),
|
|
(n.validateEventPartCharacters = function (e) {
|
|
return !!i.stringMatch(e, /^[A-Za-z0-9\s\-_\.\(\)\!\?]{1,64}$/);
|
|
}),
|
|
(n.validateEventIdLength = function (e) {
|
|
return !!e && !!i.stringMatch(e, /^[^:]{1,64}(?::[^:]{1,64}){0,4}$/);
|
|
}),
|
|
(n.validateEventIdCharacters = function (e) {
|
|
return !!e && !!i.stringMatch(e, /^[A-Za-z0-9\s\-_\.\(\)\!\?]{1,64}(:[A-Za-z0-9\s\-_\.\(\)\!\?]{1,64}){0,4}$/);
|
|
}),
|
|
(n.validateAndCleanInitRequestResponse = function (e, n) {
|
|
if (null == e) return t.w("validateInitRequestResponse failed - no response dictionary."), null;
|
|
var i = {};
|
|
try {
|
|
var r = e.server_ts;
|
|
if (!(r > 0)) return t.w("validateInitRequestResponse failed - invalid value in 'server_ts' field."), null;
|
|
i.server_ts = r;
|
|
} catch (n) {
|
|
return t.w("validateInitRequestResponse failed - invalid type in 'server_ts' field. type=" + typeof e.server_ts + ", value=" + e.server_ts + ", " + n), null;
|
|
}
|
|
if (n) {
|
|
try {
|
|
var o = e.configs;
|
|
i.configs = o;
|
|
} catch (n) {
|
|
return t.w("validateInitRequestResponse failed - invalid type in 'configs' field. type=" + typeof e.configs + ", value=" + e.configs + ", " + n), null;
|
|
}
|
|
try {
|
|
var a = e.configs_hash;
|
|
i.configs_hash = a;
|
|
} catch (n) {
|
|
return t.w("validateInitRequestResponse failed - invalid type in 'configs_hash' field. type=" + typeof e.configs_hash + ", value=" + e.configs_hash + ", " + n), null;
|
|
}
|
|
try {
|
|
var s = e.ab_id;
|
|
i.ab_id = s;
|
|
} catch (n) {
|
|
return t.w("validateInitRequestResponse failed - invalid type in 'ab_id' field. type=" + typeof e.ab_id + ", value=" + e.ab_id + ", " + n), null;
|
|
}
|
|
try {
|
|
var d = e.ab_variant_id;
|
|
i.ab_variant_id = d;
|
|
} catch (n) {
|
|
return t.w("validateInitRequestResponse failed - invalid type in 'ab_variant_id' field. type=" + typeof e.ab_variant_id + ", value=" + e.ab_variant_id + ", " + n), null;
|
|
}
|
|
}
|
|
return i;
|
|
}),
|
|
(n.validateBuild = function (e) {
|
|
return !!n.validateShortString(e, !1);
|
|
}),
|
|
(n.validateSdkWrapperVersion = function (e) {
|
|
return !!i.stringMatch(e, /^(unity|unreal|gamemaker|cocos2d|construct|defold|godot|flutter) [0-9]{0,5}(\.[0-9]{0,5}){0,2}$/);
|
|
}),
|
|
(n.validateEngineVersion = function (e) {
|
|
return !(!e || !i.stringMatch(e, /^(unity|unreal|gamemaker|cocos2d|construct|defold|godot) [0-9]{0,5}(\.[0-9]{0,5}){0,2}$/));
|
|
}),
|
|
(n.validateUserId = function (e) {
|
|
return !!n.validateString(e, !1) || (t.w("Validation fail - user id: id cannot be (null), empty or above 64 characters."), !1);
|
|
}),
|
|
(n.validateShortString = function (e, n) {
|
|
return !(!n || e) || !(!e || e.length > 32);
|
|
}),
|
|
(n.validateString = function (e, n) {
|
|
return !(!n || e) || !(!e || e.length > 64);
|
|
}),
|
|
(n.validateLongString = function (e, n) {
|
|
return !(!n || e) || !(!e || e.length > 8192);
|
|
}),
|
|
(n.validateConnectionType = function (e) {
|
|
return i.stringMatch(e, /^(wwan|wifi|lan|offline)$/);
|
|
}),
|
|
(n.validateCustomDimensions = function (e) {
|
|
return n.validateArrayOfStrings(20, 32, !1, "custom dimensions", e);
|
|
}),
|
|
(n.validateResourceCurrencies = function (e) {
|
|
if (!n.validateArrayOfStrings(20, 64, !1, "resource currencies", e)) return !1;
|
|
for (var r = 0; r < e.length; ++r) if (!i.stringMatch(e[r], /^[A-Za-z]+$/)) return t.w("resource currencies validation failed: a resource currency can only be A-Z, a-z. String was: " + e[r]), !1;
|
|
return !0;
|
|
}),
|
|
(n.validateResourceItemTypes = function (e) {
|
|
if (!n.validateArrayOfStrings(20, 32, !1, "resource item types", e)) return !1;
|
|
for (var i = 0; i < e.length; ++i) if (!n.validateEventPartCharacters(e[i])) return t.w("resource item types validation failed: a resource item type cannot contain other characters than A-z, 0-9, -_., ()!?. String was: " + e[i]), !1;
|
|
return !0;
|
|
}),
|
|
(n.validateDimension01 = function (e, n) {
|
|
return !e || !!i.stringArrayContainsString(n, e);
|
|
}),
|
|
(n.validateDimension02 = function (e, n) {
|
|
return !e || !!i.stringArrayContainsString(n, e);
|
|
}),
|
|
(n.validateDimension03 = function (e, n) {
|
|
return !e || !!i.stringArrayContainsString(n, e);
|
|
}),
|
|
(n.validateArrayOfStrings = function (e, n, i, r, o) {
|
|
var a = r;
|
|
if ((a || (a = "Array"), !o)) return t.w(a + " validation failed: array cannot be null. "), !1;
|
|
if (0 == i && 0 == o.length) return t.w(a + " validation failed: array cannot be empty. "), !1;
|
|
if (e > 0 && o.length > e) return t.w(a + " validation failed: array cannot exceed " + e + " values. It has " + o.length + " values."), !1;
|
|
for (var s = 0; s < o.length; ++s) {
|
|
var d = o[s] ? o[s].length : 0;
|
|
if (0 === d) return t.w(a + " validation failed: contained an empty string. Array=" + JSON.stringify(o)), !1;
|
|
if (n > 0 && d > n) return t.w(a + " validation failed: a string exceeded max allowed length (which is: " + n + "). String was: " + o[s]), !1;
|
|
}
|
|
return !0;
|
|
}),
|
|
(n.validateClientTs = function (e) {
|
|
return !(e < 0 || e > 99999999999);
|
|
}),
|
|
n
|
|
);
|
|
})();
|
|
n.GAValidator = u;
|
|
})(e.validators || (e.validators = {}));
|
|
})(a || (a = {})),
|
|
(function (e) {
|
|
!(function (e) {
|
|
var n = function (e, n, t) {
|
|
(this.name = e), (this.value = n), (this.version = t);
|
|
};
|
|
e.NameValueVersion = n;
|
|
var t = function (e, n) {
|
|
(this.name = e), (this.version = n);
|
|
};
|
|
e.NameVersion = t;
|
|
var i = (function () {
|
|
function e() {}
|
|
return (
|
|
(e.touch = function () {}),
|
|
(e.getRelevantSdkVersion = function () {
|
|
return e.sdkGameEngineVersion ? e.sdkGameEngineVersion : e.sdkWrapperVersion;
|
|
}),
|
|
(e.getConnectionType = function () {
|
|
return e.connectionType;
|
|
}),
|
|
(e.updateConnectionType = function () {
|
|
navigator.onLine ? ("ios" === e.buildPlatform || "android" === e.buildPlatform ? (e.connectionType = "wwan") : (e.connectionType = "lan")) : (e.connectionType = "offline");
|
|
}),
|
|
(e.getOSVersionString = function () {
|
|
return e.buildPlatform + " " + e.osVersionPair.version;
|
|
}),
|
|
(e.runtimePlatformToString = function () {
|
|
return e.osVersionPair.name;
|
|
}),
|
|
(e.getBrowserVersionString = function () {
|
|
var n,
|
|
t = navigator.userAgent,
|
|
i = t.match(/(opera|chrome|safari|firefox|ubrowser|msie|trident|fbav(?=\/))\/?\s*(\d+)/i) || [];
|
|
if (0 == i.length && "ios" === e.buildPlatform) return "webkit_" + e.osVersion;
|
|
if (/trident/i.test(i[1])) return "IE " + ((n = /\brv[ :]+(\d+)/g.exec(t) || [])[1] || "");
|
|
if ("Chrome" === i[1] && null != (n = t.match(/\b(OPR|Edge|UBrowser)\/(\d+)/))) return n.slice(1).join(" ").replace("OPR", "Opera").replace("UBrowser", "UC").toLowerCase();
|
|
if (i[1] && "fbav" === i[1].toLowerCase() && ((i[1] = "facebook"), i[2])) return "facebook " + i[2];
|
|
var r = i[2] ? [i[1], i[2]] : [navigator.appName, navigator.appVersion, "-?"];
|
|
return null != (n = t.match(/version\/(\d+)/i)) && r.splice(1, 1, n[1]), r.join(" ").toLowerCase();
|
|
}),
|
|
(e.getDeviceModel = function () {
|
|
return "unknown";
|
|
}),
|
|
(e.getDeviceManufacturer = function () {
|
|
return "unknown";
|
|
}),
|
|
(e.matchItem = function (e, n) {
|
|
var i,
|
|
r,
|
|
o,
|
|
a,
|
|
s = new t("unknown", "0.0.0"),
|
|
d = 0,
|
|
u = 0;
|
|
for (d = 0; d < n.length; d += 1)
|
|
if (new RegExp(n[d].value, "i").test(e)) {
|
|
if (((i = new RegExp(n[d].version + "[- /:;]([\\d._]+)", "i")), (a = ""), (r = e.match(i)) && r[1] && (o = r[1]), o)) {
|
|
var l = o.split(/[._]+/);
|
|
for (u = 0; u < Math.min(l.length, 3); u += 1) a += l[u] + (u < Math.min(l.length, 3) - 1 ? "." : "");
|
|
} else a = "0.0.0";
|
|
return (s.name = n[d].name), (s.version = a), s;
|
|
}
|
|
return s;
|
|
}),
|
|
(e.sdkWrapperVersion = "javascript 4.4.5"),
|
|
(e.osVersionPair = e.matchItem([navigator.platform, navigator.userAgent, navigator.appVersion, navigator.vendor].join(" "), [new n("windows_phone", "Windows Phone", "OS"), new n("windows", "Win", "NT"), new n("ios", "iPhone", "OS"), new n("ios", "iPad", "OS"), new n("ios", "iPod", "OS"), new n("android", "Android", "Android"), new n("blackBerry", "BlackBerry", "/"), new n("mac_osx", "Mac", "OS X"), new n("tizen", "Tizen", "Tizen"), new n("linux", "Linux", "rv"), new n("kai_os", "KAIOS", "KAIOS")])),
|
|
(e.buildPlatform = e.runtimePlatformToString()),
|
|
(e.deviceModel = e.getDeviceModel()),
|
|
(e.deviceManufacturer = e.getDeviceManufacturer()),
|
|
(e.osVersion = e.getOSVersionString()),
|
|
(e.browserVersion = e.getBrowserVersionString()),
|
|
e
|
|
);
|
|
})();
|
|
e.GADevice = i;
|
|
})(e.device || (e.device = {}));
|
|
})(a || (a = {})),
|
|
(function (e) {
|
|
var n, t;
|
|
(n = e.threading || (e.threading = {})),
|
|
(t = (function () {
|
|
function e(n) {
|
|
(this.deadline = n), (this.ignore = !1), (this.async = !1), (this.running = !1), (this.id = ++e.idCounter);
|
|
}
|
|
return (e.idCounter = 0), e;
|
|
})()),
|
|
(n.TimedBlock = t);
|
|
})(a || (a = {})),
|
|
(function (e) {
|
|
var n, t;
|
|
(n = e.threading || (e.threading = {})),
|
|
(t = (function () {
|
|
function e(e) {
|
|
(this.comparer = e), (this._subQueues = {}), (this._sortedKeys = []);
|
|
}
|
|
return (
|
|
(e.prototype.enqueue = function (e, n) {
|
|
-1 === this._sortedKeys.indexOf(e) && this.addQueueOfPriority(e), this._subQueues[e].push(n);
|
|
}),
|
|
(e.prototype.addQueueOfPriority = function (e) {
|
|
var n = this;
|
|
this._sortedKeys.push(e),
|
|
this._sortedKeys.sort(function (e, t) {
|
|
return n.comparer.compare(e, t);
|
|
}),
|
|
(this._subQueues[e] = []);
|
|
}),
|
|
(e.prototype.peek = function () {
|
|
if (this.hasItems()) return this._subQueues[this._sortedKeys[0]][0];
|
|
throw new Error("The queue is empty");
|
|
}),
|
|
(e.prototype.hasItems = function () {
|
|
return this._sortedKeys.length > 0;
|
|
}),
|
|
(e.prototype.dequeue = function () {
|
|
if (this.hasItems()) return this.dequeueFromHighPriorityQueue();
|
|
throw new Error("The queue is empty");
|
|
}),
|
|
(e.prototype.dequeueFromHighPriorityQueue = function () {
|
|
var e = this._sortedKeys[0],
|
|
n = this._subQueues[e].shift();
|
|
return 0 === this._subQueues[e].length && (this._sortedKeys.shift(), delete this._subQueues[e]), n;
|
|
}),
|
|
e
|
|
);
|
|
})()),
|
|
(n.PriorityQueue = t);
|
|
})(a || (a = {})),
|
|
(function (e) {
|
|
!(function (n) {
|
|
var t,
|
|
i,
|
|
r = e.logging.GALogger;
|
|
!(function (e) {
|
|
(e[(e.Equal = 0)] = "Equal"), (e[(e.LessOrEqual = 1)] = "LessOrEqual"), (e[(e.NotEqual = 2)] = "NotEqual");
|
|
})((t = n.EGAStoreArgsOperator || (n.EGAStoreArgsOperator = {}))),
|
|
(function (e) {
|
|
(e[(e.Events = 0)] = "Events"), (e[(e.Sessions = 1)] = "Sessions"), (e[(e.Progression = 2)] = "Progression");
|
|
})((i = n.EGAStore || (n.EGAStore = {})));
|
|
var o = (function () {
|
|
function e() {
|
|
(this.eventsStore = []), (this.sessionsStore = []), (this.progressionStore = []), (this.storeItems = {});
|
|
try {
|
|
"object" == typeof localStorage ? (localStorage.setItem("testingLocalStorage", "yes"), localStorage.removeItem("testingLocalStorage"), (e.storageAvailable = !0)) : (e.storageAvailable = !1);
|
|
} catch (e) {}
|
|
}
|
|
return (
|
|
(e.isStorageAvailable = function () {
|
|
return e.storageAvailable;
|
|
}),
|
|
(e.isStoreTooLargeForEvents = function () {
|
|
return e.instance.eventsStore.length + e.instance.sessionsStore.length > e.MaxNumberOfEntries;
|
|
}),
|
|
(e.select = function (n, i, r, o) {
|
|
void 0 === i && (i = []), void 0 === r && (r = !1), void 0 === o && (o = 0);
|
|
var a = e.getStore(n);
|
|
if (!a) return null;
|
|
for (var s = [], d = 0; d < a.length; ++d) {
|
|
for (var u = a[d], l = !0, c = 0; c < i.length; ++c) {
|
|
var v = i[c];
|
|
if (u[v[0]])
|
|
switch (v[1]) {
|
|
case t.Equal:
|
|
l = u[v[0]] == v[2];
|
|
break;
|
|
case t.LessOrEqual:
|
|
l = u[v[0]] <= v[2];
|
|
break;
|
|
case t.NotEqual:
|
|
l = u[v[0]] != v[2];
|
|
break;
|
|
default:
|
|
l = !1;
|
|
}
|
|
else l = !1;
|
|
if (!l) break;
|
|
}
|
|
l && s.push(u);
|
|
}
|
|
return (
|
|
r &&
|
|
s.sort(function (e, n) {
|
|
return e.client_ts - n.client_ts;
|
|
}),
|
|
o > 0 && s.length > o && (s = s.slice(0, o + 1)),
|
|
s
|
|
);
|
|
}),
|
|
(e.update = function (n, i, r) {
|
|
void 0 === r && (r = []);
|
|
var o = e.getStore(n);
|
|
if (!o) return !1;
|
|
for (var a = 0; a < o.length; ++a) {
|
|
for (var s = o[a], d = !0, u = 0; u < r.length; ++u) {
|
|
var l = r[u];
|
|
if (s[l[0]])
|
|
switch (l[1]) {
|
|
case t.Equal:
|
|
d = s[l[0]] == l[2];
|
|
break;
|
|
case t.LessOrEqual:
|
|
d = s[l[0]] <= l[2];
|
|
break;
|
|
case t.NotEqual:
|
|
d = s[l[0]] != l[2];
|
|
break;
|
|
default:
|
|
d = !1;
|
|
}
|
|
else d = !1;
|
|
if (!d) break;
|
|
}
|
|
if (d)
|
|
for (u = 0; u < i.length; ++u) {
|
|
var c = i[u];
|
|
s[c[0]] = c[1];
|
|
}
|
|
}
|
|
return !0;
|
|
}),
|
|
(e.delete = function (n, i) {
|
|
var r = e.getStore(n);
|
|
if (r)
|
|
for (var o = 0; o < r.length; ++o) {
|
|
for (var a = r[o], s = !0, d = 0; d < i.length; ++d) {
|
|
var u = i[d];
|
|
if (a[u[0]])
|
|
switch (u[1]) {
|
|
case t.Equal:
|
|
s = a[u[0]] == u[2];
|
|
break;
|
|
case t.LessOrEqual:
|
|
s = a[u[0]] <= u[2];
|
|
break;
|
|
case t.NotEqual:
|
|
s = a[u[0]] != u[2];
|
|
break;
|
|
default:
|
|
s = !1;
|
|
}
|
|
else s = !1;
|
|
if (!s) break;
|
|
}
|
|
s && (r.splice(o, 1), --o);
|
|
}
|
|
}),
|
|
(e.insert = function (n, t, i, r) {
|
|
void 0 === i && (i = !1), void 0 === r && (r = null);
|
|
var o = e.getStore(n);
|
|
if (o)
|
|
if (i) {
|
|
if (!r) return;
|
|
for (var a = !1, s = 0; s < o.length; ++s) {
|
|
var d = o[s];
|
|
if (d[r] == t[r]) {
|
|
for (var u in t) d[u] = t[u];
|
|
a = !0;
|
|
break;
|
|
}
|
|
}
|
|
a || o.push(t);
|
|
} else o.push(t);
|
|
}),
|
|
(e.save = function (n) {
|
|
e.isStorageAvailable() ? (localStorage.setItem(e.StringFormat(e.KeyFormat, n, e.EventsStoreKey), JSON.stringify(e.instance.eventsStore)), localStorage.setItem(e.StringFormat(e.KeyFormat, n, e.SessionsStoreKey), JSON.stringify(e.instance.sessionsStore)), localStorage.setItem(e.StringFormat(e.KeyFormat, n, e.ProgressionStoreKey), JSON.stringify(e.instance.progressionStore)), localStorage.setItem(e.StringFormat(e.KeyFormat, n, e.ItemsStoreKey), JSON.stringify(e.instance.storeItems))) : r.w("Storage is not available, cannot save.");
|
|
}),
|
|
(e.load = function (n) {
|
|
if (e.isStorageAvailable()) {
|
|
try {
|
|
(e.instance.eventsStore = JSON.parse(localStorage.getItem(e.StringFormat(e.KeyFormat, n, e.EventsStoreKey)))), e.instance.eventsStore || (e.instance.eventsStore = []);
|
|
} catch (n) {
|
|
r.w("Load failed for 'events' store. Using empty store."), (e.instance.eventsStore = []);
|
|
}
|
|
try {
|
|
(e.instance.sessionsStore = JSON.parse(localStorage.getItem(e.StringFormat(e.KeyFormat, n, e.SessionsStoreKey)))), e.instance.sessionsStore || (e.instance.sessionsStore = []);
|
|
} catch (n) {
|
|
r.w("Load failed for 'sessions' store. Using empty store."), (e.instance.sessionsStore = []);
|
|
}
|
|
try {
|
|
(e.instance.progressionStore = JSON.parse(localStorage.getItem(e.StringFormat(e.KeyFormat, n, e.ProgressionStoreKey)))), e.instance.progressionStore || (e.instance.progressionStore = []);
|
|
} catch (n) {
|
|
r.w("Load failed for 'progression' store. Using empty store."), (e.instance.progressionStore = []);
|
|
}
|
|
try {
|
|
(e.instance.storeItems = JSON.parse(localStorage.getItem(e.StringFormat(e.KeyFormat, n, e.ItemsStoreKey)))), e.instance.storeItems || (e.instance.storeItems = {});
|
|
} catch (n) {
|
|
r.w("Load failed for 'items' store. Using empty store."), (e.instance.progressionStore = []);
|
|
}
|
|
} else r.w("Storage is not available, cannot load.");
|
|
}),
|
|
(e.setItem = function (n, t, i) {
|
|
var r = e.StringFormat(e.KeyFormat, n, t);
|
|
i ? (e.instance.storeItems[r] = i) : r in e.instance.storeItems && delete e.instance.storeItems[r];
|
|
}),
|
|
(e.getItem = function (n, t) {
|
|
var i = e.StringFormat(e.KeyFormat, n, t);
|
|
return i in e.instance.storeItems ? e.instance.storeItems[i] : null;
|
|
}),
|
|
(e.getStore = function (n) {
|
|
switch (n) {
|
|
case i.Events:
|
|
return e.instance.eventsStore;
|
|
case i.Sessions:
|
|
return e.instance.sessionsStore;
|
|
case i.Progression:
|
|
return e.instance.progressionStore;
|
|
default:
|
|
return r.w("GAStore.getStore(): Cannot find store: " + n), null;
|
|
}
|
|
}),
|
|
(e.instance = new e()),
|
|
(e.MaxNumberOfEntries = 2e3),
|
|
(e.StringFormat = function (e) {
|
|
for (var n = [], t = 1; t < arguments.length; t++) n[t - 1] = arguments[t];
|
|
return e.replace(/{(\d+)}/g, function (e, t) {
|
|
return n[t] || "";
|
|
});
|
|
}),
|
|
(e.KeyFormat = "GA::{0}::{1}"),
|
|
(e.EventsStoreKey = "ga_event"),
|
|
(e.SessionsStoreKey = "ga_session"),
|
|
(e.ProgressionStoreKey = "ga_progression"),
|
|
(e.ItemsStoreKey = "ga_items"),
|
|
e
|
|
);
|
|
})();
|
|
n.GAStore = o;
|
|
})(e.store || (e.store = {}));
|
|
})(a || (a = {})),
|
|
(function (e) {
|
|
var n, t, i, r, o, a, s, d, u;
|
|
(n = e.state || (e.state = {})),
|
|
(t = e.validators.GAValidator),
|
|
(i = e.utilities.GAUtilities),
|
|
(r = e.logging.GALogger),
|
|
(o = e.store.GAStore),
|
|
(a = e.device.GADevice),
|
|
(s = e.store.EGAStore),
|
|
(d = e.store.EGAStoreArgsOperator),
|
|
(u = (function () {
|
|
function e() {
|
|
(this.availableCustomDimensions01 = []), (this.availableCustomDimensions02 = []), (this.availableCustomDimensions03 = []), (this.currentGlobalCustomEventFields = {}), (this.availableResourceCurrencies = []), (this.availableResourceItemTypes = []), (this.configurations = {}), (this.remoteConfigsListeners = []), (this.beforeUnloadListeners = []), (this.sdkConfigDefault = {}), (this.sdkConfig = {}), (this.progressionTries = {}), (this._isEventSubmissionEnabled = !0), (this.isUnloading = !1);
|
|
}
|
|
return (
|
|
(e.setUserId = function (n) {
|
|
(e.instance.userId = n), e.cacheIdentifier();
|
|
}),
|
|
(e.getIdentifier = function () {
|
|
return e.instance.identifier;
|
|
}),
|
|
(e.isInitialized = function () {
|
|
return e.instance.initialized;
|
|
}),
|
|
(e.setInitialized = function (n) {
|
|
e.instance.initialized = n;
|
|
}),
|
|
(e.getSessionStart = function () {
|
|
return e.instance.sessionStart;
|
|
}),
|
|
(e.getSessionNum = function () {
|
|
return e.instance.sessionNum;
|
|
}),
|
|
(e.getTransactionNum = function () {
|
|
return e.instance.transactionNum;
|
|
}),
|
|
(e.getSessionId = function () {
|
|
return e.instance.sessionId;
|
|
}),
|
|
(e.getCurrentCustomDimension01 = function () {
|
|
return e.instance.currentCustomDimension01;
|
|
}),
|
|
(e.getCurrentCustomDimension02 = function () {
|
|
return e.instance.currentCustomDimension02;
|
|
}),
|
|
(e.getCurrentCustomDimension03 = function () {
|
|
return e.instance.currentCustomDimension03;
|
|
}),
|
|
(e.getGameKey = function () {
|
|
return e.instance.gameKey;
|
|
}),
|
|
(e.getGameSecret = function () {
|
|
return e.instance.gameSecret;
|
|
}),
|
|
(e.getAvailableCustomDimensions01 = function () {
|
|
return e.instance.availableCustomDimensions01;
|
|
}),
|
|
(e.setAvailableCustomDimensions01 = function (n) {
|
|
t.validateCustomDimensions(n) && ((e.instance.availableCustomDimensions01 = n), e.validateAndFixCurrentDimensions(), r.i("Set available custom01 dimension values: (" + i.joinStringArray(n, ", ") + ")"));
|
|
}),
|
|
(e.getAvailableCustomDimensions02 = function () {
|
|
return e.instance.availableCustomDimensions02;
|
|
}),
|
|
(e.setAvailableCustomDimensions02 = function (n) {
|
|
t.validateCustomDimensions(n) && ((e.instance.availableCustomDimensions02 = n), e.validateAndFixCurrentDimensions(), r.i("Set available custom02 dimension values: (" + i.joinStringArray(n, ", ") + ")"));
|
|
}),
|
|
(e.getAvailableCustomDimensions03 = function () {
|
|
return e.instance.availableCustomDimensions03;
|
|
}),
|
|
(e.setAvailableCustomDimensions03 = function (n) {
|
|
t.validateCustomDimensions(n) && ((e.instance.availableCustomDimensions03 = n), e.validateAndFixCurrentDimensions(), r.i("Set available custom03 dimension values: (" + i.joinStringArray(n, ", ") + ")"));
|
|
}),
|
|
(e.getAvailableResourceCurrencies = function () {
|
|
return e.instance.availableResourceCurrencies;
|
|
}),
|
|
(e.setAvailableResourceCurrencies = function (n) {
|
|
t.validateResourceCurrencies(n) && ((e.instance.availableResourceCurrencies = n), r.i("Set available resource currencies: (" + i.joinStringArray(n, ", ") + ")"));
|
|
}),
|
|
(e.getAvailableResourceItemTypes = function () {
|
|
return e.instance.availableResourceItemTypes;
|
|
}),
|
|
(e.setAvailableResourceItemTypes = function (n) {
|
|
t.validateResourceItemTypes(n) && ((e.instance.availableResourceItemTypes = n), r.i("Set available resource item types: (" + i.joinStringArray(n, ", ") + ")"));
|
|
}),
|
|
(e.getBuild = function () {
|
|
return e.instance.build;
|
|
}),
|
|
(e.setBuild = function (n) {
|
|
(e.instance.build = n), r.i("Set build version: " + n);
|
|
}),
|
|
(e.getUseManualSessionHandling = function () {
|
|
return e.instance.useManualSessionHandling;
|
|
}),
|
|
(e.isEventSubmissionEnabled = function () {
|
|
return e.instance._isEventSubmissionEnabled;
|
|
}),
|
|
(e.getABTestingId = function () {
|
|
return e.instance.abId;
|
|
}),
|
|
(e.getABTestingVariantId = function () {
|
|
return e.instance.abVariantId;
|
|
}),
|
|
(e.prototype.setDefaultId = function (n) {
|
|
(this.defaultUserId = n || ""), e.cacheIdentifier();
|
|
}),
|
|
(e.getDefaultId = function () {
|
|
return e.instance.defaultUserId;
|
|
}),
|
|
(e.getSdkConfig = function () {
|
|
var n,
|
|
t = 0;
|
|
for (var i in e.instance.sdkConfig) 0 === t && (n = i), ++t;
|
|
if (n && t > 0) return e.instance.sdkConfig;
|
|
for (var i in ((t = 0), e.instance.sdkConfigCached)) 0 === t && (n = i), ++t;
|
|
return n && t > 0 ? e.instance.sdkConfigCached : e.instance.sdkConfigDefault;
|
|
}),
|
|
(e.isEnabled = function () {
|
|
return !!e.instance.initAuthorized;
|
|
}),
|
|
(e.setCustomDimension01 = function (n) {
|
|
(e.instance.currentCustomDimension01 = n), o.setItem(e.getGameKey(), e.Dimension01Key, n), r.i("Set custom01 dimension value: " + n);
|
|
}),
|
|
(e.setCustomDimension02 = function (n) {
|
|
(e.instance.currentCustomDimension02 = n), o.setItem(e.getGameKey(), e.Dimension02Key, n), r.i("Set custom02 dimension value: " + n);
|
|
}),
|
|
(e.setCustomDimension03 = function (n) {
|
|
(e.instance.currentCustomDimension03 = n), o.setItem(e.getGameKey(), e.Dimension03Key, n), r.i("Set custom03 dimension value: " + n);
|
|
}),
|
|
(e.incrementSessionNum = function () {
|
|
var n = e.getSessionNum() + 1;
|
|
e.instance.sessionNum = n;
|
|
}),
|
|
(e.incrementTransactionNum = function () {
|
|
var n = e.getTransactionNum() + 1;
|
|
e.instance.transactionNum = n;
|
|
}),
|
|
(e.incrementProgressionTries = function (n) {
|
|
var t = e.getProgressionTries(n) + 1;
|
|
e.instance.progressionTries[n] = t;
|
|
var i = {};
|
|
(i.progression = n), (i.tries = t), o.insert(s.Progression, i, !0, "progression");
|
|
}),
|
|
(e.getProgressionTries = function (n) {
|
|
return n in e.instance.progressionTries ? e.instance.progressionTries[n] : 0;
|
|
}),
|
|
(e.clearProgressionTries = function (n) {
|
|
n in e.instance.progressionTries && delete e.instance.progressionTries[n];
|
|
var t = [];
|
|
t.push(["progression", d.Equal, n]), o.delete(s.Progression, t);
|
|
}),
|
|
(e.setKeys = function (n, t) {
|
|
(e.instance.gameKey = n), (e.instance.gameSecret = t);
|
|
}),
|
|
(e.setManualSessionHandling = function (n) {
|
|
(e.instance.useManualSessionHandling = n), r.i("Use manual session handling: " + n);
|
|
}),
|
|
(e.setEnabledEventSubmission = function (n) {
|
|
e.instance._isEventSubmissionEnabled = n;
|
|
}),
|
|
(e.getEventAnnotations = function () {
|
|
var n = { v: 2 };
|
|
(n.event_uuid = i.createGuid()), (n.user_id = e.instance.identifier), (n.client_ts = e.getClientTsAdjusted()), (n.sdk_version = a.getRelevantSdkVersion()), (n.os_version = a.osVersion), (n.manufacturer = a.deviceManufacturer), (n.device = a.deviceModel), (n.browser_version = a.browserVersion), (n.platform = a.buildPlatform), (n.session_id = e.instance.sessionId), (n[e.SessionNumKey] = e.instance.sessionNum);
|
|
var r = a.getConnectionType();
|
|
if ((t.validateConnectionType(r) && (n.connection_type = r), a.gameEngineVersion && (n.engine_version = a.gameEngineVersion), e.instance.configurations)) {
|
|
var o = 0;
|
|
for (var s in e.instance.configurations) {
|
|
o++;
|
|
break;
|
|
}
|
|
o > 0 && (n.configurations = e.instance.configurations);
|
|
}
|
|
return e.instance.abId && (n.ab_id = e.instance.abId), e.instance.abVariantId && (n.ab_variant_id = e.instance.abVariantId), e.instance.build && (n.build = e.instance.build), n;
|
|
}),
|
|
(e.getSdkErrorEventAnnotations = function () {
|
|
var n = { v: 2 };
|
|
(n.event_uuid = i.createGuid()), (n.category = e.CategorySdkError), (n.sdk_version = a.getRelevantSdkVersion()), (n.os_version = a.osVersion), (n.manufacturer = a.deviceManufacturer), (n.device = a.deviceModel), (n.platform = a.buildPlatform);
|
|
var r = a.getConnectionType();
|
|
return t.validateConnectionType(r) && (n.connection_type = r), a.gameEngineVersion && (n.engine_version = a.gameEngineVersion), n;
|
|
}),
|
|
(e.getInitAnnotations = function () {
|
|
var n = {};
|
|
return e.getIdentifier() || e.cacheIdentifier(), o.setItem(e.getGameKey(), e.LastUsedIdentifierKey, e.getIdentifier()), (n.user_id = e.getIdentifier()), (n.sdk_version = a.getRelevantSdkVersion()), (n.os_version = a.osVersion), (n.platform = a.buildPlatform), e.getBuild() ? (n.build = e.getBuild()) : (n.build = null), (n.session_num = e.getSessionNum()), (n.random_salt = e.getSessionNum()), n;
|
|
}),
|
|
(e.getClientTsAdjusted = function () {
|
|
var n = i.timeIntervalSince1970(),
|
|
r = n + e.instance.clientServerTimeOffset;
|
|
return t.validateClientTs(r) ? r : n;
|
|
}),
|
|
(e.sessionIsStarted = function () {
|
|
return 0 != e.instance.sessionStart;
|
|
}),
|
|
(e.cacheIdentifier = function () {
|
|
e.instance.userId ? (e.instance.identifier = e.instance.userId) : e.instance.defaultUserId && (e.instance.identifier = e.instance.defaultUserId);
|
|
}),
|
|
(e.ensurePersistedStates = function () {
|
|
o.isStorageAvailable() && o.load(e.getGameKey());
|
|
var n = e.instance;
|
|
n.setDefaultId(null != o.getItem(e.getGameKey(), e.DefaultUserIdKey) ? o.getItem(e.getGameKey(), e.DefaultUserIdKey) : i.createGuid()), (n.sessionNum = null != o.getItem(e.getGameKey(), e.SessionNumKey) ? Number(o.getItem(e.getGameKey(), e.SessionNumKey)) : 0), (n.transactionNum = null != o.getItem(e.getGameKey(), e.TransactionNumKey) ? Number(o.getItem(e.getGameKey(), e.TransactionNumKey)) : 0), n.currentCustomDimension01 ? o.setItem(e.getGameKey(), e.Dimension01Key, n.currentCustomDimension01) : ((n.currentCustomDimension01 = null != o.getItem(e.getGameKey(), e.Dimension01Key) ? o.getItem(e.getGameKey(), e.Dimension01Key) : ""), n.currentCustomDimension01), n.currentCustomDimension02 ? o.setItem(e.getGameKey(), e.Dimension02Key, n.currentCustomDimension02) : ((n.currentCustomDimension02 = null != o.getItem(e.getGameKey(), e.Dimension02Key) ? o.getItem(e.getGameKey(), e.Dimension02Key) : ""), n.currentCustomDimension02), n.currentCustomDimension03 ? o.setItem(e.getGameKey(), e.Dimension03Key, n.currentCustomDimension03) : ((n.currentCustomDimension03 = null != o.getItem(e.getGameKey(), e.Dimension03Key) ? o.getItem(e.getGameKey(), e.Dimension03Key) : ""), n.currentCustomDimension03);
|
|
var t = null != o.getItem(e.getGameKey(), e.SdkConfigCachedKey) ? o.getItem(e.getGameKey(), e.SdkConfigCachedKey) : "";
|
|
if (t) {
|
|
var a = JSON.parse(i.decode64(t));
|
|
if (a) {
|
|
var d = o.getItem(e.getGameKey(), e.LastUsedIdentifierKey);
|
|
null != d && d != e.getIdentifier() && (r.w("New identifier spotted compared to last one used, clearing cached configs hash!!"), a.configs_hash && delete a.configs_hash), (n.sdkConfigCached = a);
|
|
}
|
|
}
|
|
var u = e.getSdkConfig();
|
|
(n.configsHash = u.configs_hash ? u.configs_hash : ""), (n.abId = u.ab_id ? u.ab_id : ""), (n.abVariantId = u.ab_variant_id ? u.ab_variant_id : "");
|
|
var l = o.select(s.Progression);
|
|
if (l)
|
|
for (var c = 0; c < l.length; ++c) {
|
|
var v = l[c];
|
|
v && (n.progressionTries[v.progression] = v.tries);
|
|
}
|
|
}),
|
|
(e.calculateServerTimeOffset = function (e) {
|
|
return e - i.timeIntervalSince1970();
|
|
}),
|
|
(e.formatString = function (e, n) {
|
|
for (var t = e, i = 0; i < n.length; i++) {
|
|
var r = new RegExp("\\{" + i + "\\}", "gi");
|
|
t = t.replace(r, arguments[i]);
|
|
}
|
|
return t;
|
|
}),
|
|
(e.validateAndCleanCustomFields = function (n, t) {
|
|
void 0 === t && (t = null);
|
|
var o = {};
|
|
if (n) {
|
|
var a = 0;
|
|
for (var s in n) {
|
|
var d = n[s];
|
|
if (s && d)
|
|
if (a < e.MAX_CUSTOM_FIELDS_COUNT) {
|
|
var u = new RegExp("^[a-zA-Z0-9_]{1," + e.MAX_CUSTOM_FIELDS_KEY_LENGTH + "}$");
|
|
if (i.stringMatch(s, u)) {
|
|
var l = typeof d;
|
|
if ("string" === l || d instanceof String) {
|
|
var c = d;
|
|
c.length <= e.MAX_CUSTOM_FIELDS_VALUE_STRING_LENGTH && c.length > 0 ? ((o[s] = c), ++a) : ((f = "validateAndCleanCustomFields: entry with key={0}, value={1} has been omitted because its value is an empty string or exceeds the max number of characters (" + e.MAX_CUSTOM_FIELDS_VALUE_STRING_LENGTH + ")"), (g = e.formatString(f, [s, d])), r.w(g), t && t(f, g));
|
|
} else if ("number" === l || d instanceof Number) {
|
|
var v = d;
|
|
(o[s] = v), ++a;
|
|
} else (f = "validateAndCleanCustomFields: entry with key={0}, value={1} has been omitted because its value is not a string or number"), (g = e.formatString(f, [s, d])), r.w(g), t && t(f, g);
|
|
} else (f = "validateAndCleanCustomFields: entry with key={0}, value={1} has been omitted because its key contains illegal character, is empty or exceeds the max number of characters (" + e.MAX_CUSTOM_FIELDS_KEY_LENGTH + ")"), (g = e.formatString(f, [s, d])), r.w(g), t && t(f, g);
|
|
} else (f = "validateAndCleanCustomFields: entry with key={0}, value={1} has been omitted because it exceeds the max number of custom fields (" + e.MAX_CUSTOM_FIELDS_COUNT + ")"), (g = e.formatString(f, [s, d])), r.w(g), t && t(f, g);
|
|
else {
|
|
var f = "validateAndCleanCustomFields: entry with key={0}, value={1} has been omitted because its key or value is null",
|
|
g = e.formatString(f, [s, d]);
|
|
r.w(g), t && t(f, g);
|
|
}
|
|
}
|
|
}
|
|
return o;
|
|
}),
|
|
(e.validateAndFixCurrentDimensions = function () {
|
|
t.validateDimension01(e.getCurrentCustomDimension01(), e.getAvailableCustomDimensions01()) || e.setCustomDimension01(""), t.validateDimension02(e.getCurrentCustomDimension02(), e.getAvailableCustomDimensions02()) || e.setCustomDimension02(""), t.validateDimension03(e.getCurrentCustomDimension03(), e.getAvailableCustomDimensions03()) || e.setCustomDimension03("");
|
|
}),
|
|
(e.getConfigurationStringValue = function (n, t) {
|
|
return e.instance.configurations[n] ? e.instance.configurations[n].toString() : t;
|
|
}),
|
|
(e.isRemoteConfigsReady = function () {
|
|
return e.instance.remoteConfigsIsReady;
|
|
}),
|
|
(e.addRemoteConfigsListener = function (n) {
|
|
e.instance.remoteConfigsListeners.indexOf(n) < 0 && e.instance.remoteConfigsListeners.push(n);
|
|
}),
|
|
(e.removeRemoteConfigsListener = function (n) {
|
|
var t = e.instance.remoteConfigsListeners.indexOf(n);
|
|
t > -1 && e.instance.remoteConfigsListeners.splice(t, 1);
|
|
}),
|
|
(e.getRemoteConfigsContentAsString = function () {
|
|
return JSON.stringify(e.instance.configurations);
|
|
}),
|
|
(e.populateConfigurations = function (n) {
|
|
var t = n.configs;
|
|
if (t) {
|
|
e.instance.configurations = {};
|
|
for (var i = 0; i < t.length; ++i) {
|
|
var r = t[i];
|
|
if (r) {
|
|
var o = r.key,
|
|
a = r.value,
|
|
s = r.start_ts ? r.start_ts : Number.MIN_VALUE,
|
|
d = r.end_ts ? r.end_ts : Number.MAX_VALUE,
|
|
u = e.getClientTsAdjusted();
|
|
o && a && u > s && u < d && (e.instance.configurations[o] = a);
|
|
}
|
|
}
|
|
}
|
|
e.instance.remoteConfigsIsReady = !0;
|
|
var l = e.instance.remoteConfigsListeners;
|
|
for (i = 0; i < l.length; ++i) l[i] && l[i].onRemoteConfigsUpdated();
|
|
}),
|
|
(e.addOnBeforeUnloadListener = function (n) {
|
|
e.instance.beforeUnloadListeners.indexOf(n) < 0 && e.instance.beforeUnloadListeners.push(n);
|
|
}),
|
|
(e.removeOnBeforeUnloadListener = function (n) {
|
|
var t = e.instance.beforeUnloadListeners.indexOf(n);
|
|
t > -1 && e.instance.beforeUnloadListeners.splice(t, 1);
|
|
}),
|
|
(e.notifyBeforeUnloadListeners = function () {
|
|
for (var n = e.instance.beforeUnloadListeners, t = 0; t < n.length; ++t) n[t] && n[t].onBeforeUnload();
|
|
}),
|
|
(e.CategorySdkError = "sdk_error"),
|
|
(e.MAX_CUSTOM_FIELDS_COUNT = 50),
|
|
(e.MAX_CUSTOM_FIELDS_KEY_LENGTH = 64),
|
|
(e.MAX_CUSTOM_FIELDS_VALUE_STRING_LENGTH = 256),
|
|
(e.instance = new e()),
|
|
(e.DefaultUserIdKey = "default_user_id"),
|
|
(e.SessionNumKey = "session_num"),
|
|
(e.TransactionNumKey = "transaction_num"),
|
|
(e.Dimension01Key = "dimension01"),
|
|
(e.Dimension02Key = "dimension02"),
|
|
(e.Dimension03Key = "dimension03"),
|
|
(e.SdkConfigCachedKey = "sdk_config_cached"),
|
|
(e.LastUsedIdentifierKey = "last_used_identifier"),
|
|
e
|
|
);
|
|
})()),
|
|
(n.GAState = u);
|
|
})(a || (a = {})),
|
|
(function (e) {
|
|
var n, t, i, r;
|
|
(n = e.tasks || (e.tasks = {})),
|
|
(t = e.utilities.GAUtilities),
|
|
(i = e.logging.GALogger),
|
|
(r = (function () {
|
|
function e() {}
|
|
return (
|
|
(e.execute = function (n, r, o, a) {
|
|
var s = new Date();
|
|
if ((e.timestampMap[r] || (e.timestampMap[r] = s), e.countMap[r] || (e.countMap[r] = 0), (s.getTime() - e.timestampMap[r].getTime()) / 1e3 >= 3600 && ((e.timestampMap[r] = s), (e.countMap[r] = 0)), !(e.countMap[r] >= e.MaxCount))) {
|
|
var d = t.getHmac(a, o),
|
|
u = new XMLHttpRequest();
|
|
(u.onreadystatechange = function () {
|
|
if (4 === u.readyState) {
|
|
if (!u.responseText) return;
|
|
if (200 != u.status) return void i.w("sdk error failed. response code not 200. status code: " + u.status + ", description: " + u.statusText + ", body: " + u.responseText);
|
|
e.countMap[r] = e.countMap[r] + 1;
|
|
}
|
|
}),
|
|
u.open("POST", n, !0),
|
|
u.setRequestHeader("Content-Type", "application/json"),
|
|
u.setRequestHeader("Authorization", d);
|
|
try {
|
|
u.send(o);
|
|
} catch (e) {
|
|
console.error(e);
|
|
}
|
|
}
|
|
}),
|
|
(e.MaxCount = 10),
|
|
(e.countMap = {}),
|
|
(e.timestampMap = {}),
|
|
e
|
|
);
|
|
})()),
|
|
(n.SdkErrorTask = r);
|
|
})(a || (a = {})),
|
|
(function (e) {
|
|
var n, t, i, r, o, a, s, d, u, l, c;
|
|
(n = e.http || (e.http = {})),
|
|
(t = e.state.GAState),
|
|
(i = e.logging.GALogger),
|
|
(r = e.utilities.GAUtilities),
|
|
(o = e.validators.GAValidator),
|
|
(a = e.tasks.SdkErrorTask),
|
|
(s = e.events.EGASdkErrorCategory),
|
|
(d = e.events.EGASdkErrorArea),
|
|
(u = e.events.EGASdkErrorAction),
|
|
(l = e.events.EGASdkErrorParameter),
|
|
(c = (function () {
|
|
function e() {
|
|
(this.protocol = "https"), (this.hostName = "api.gameanalytics.com"), (this.version = "v2"), (this.remoteConfigsVersion = "v1"), (this.baseUrl = this.protocol + "://" + this.hostName + "/" + this.version), (this.remoteConfigsBaseUrl = this.protocol + "://" + this.hostName + "/remote_configs/" + this.remoteConfigsVersion), (this.initializeUrlPath = "init"), (this.eventsUrlPath = "events"), (this.useGzip = !1);
|
|
}
|
|
return (
|
|
(e.prototype.requestInit = function (i, r) {
|
|
var o = t.getGameKey(),
|
|
a = this.remoteConfigsBaseUrl + "/" + this.initializeUrlPath + "?game_key=" + o + "&interval_seconds=0&configs_hash=" + i,
|
|
s = t.getInitAnnotations(),
|
|
d = JSON.stringify(s);
|
|
if (d) {
|
|
var u = this.createPayloadData(d, this.useGzip),
|
|
l = [];
|
|
l.push(d), e.sendRequest(a, u, l, this.useGzip, e.initRequestCallback, r);
|
|
} else r(n.EGAHTTPApiResponse.JsonEncodeFailed, null);
|
|
}),
|
|
(e.prototype.sendEventsInArray = function (i, r, o) {
|
|
if (0 != i.length) {
|
|
var a = t.getGameKey(),
|
|
s = this.baseUrl + "/" + a + "/" + this.eventsUrlPath,
|
|
d = JSON.stringify(i);
|
|
if (d) {
|
|
var u = this.createPayloadData(d, this.useGzip),
|
|
l = [];
|
|
l.push(d), l.push(r), l.push(i.length.toString()), e.sendRequest(s, u, l, this.useGzip, e.sendEventInArrayRequestCallback, o);
|
|
} else o(n.EGAHTTPApiResponse.JsonEncodeFailed, null, r, i.length);
|
|
}
|
|
}),
|
|
(e.prototype.sendSdkErrorEvent = function (n, r, s, d, u, l, c) {
|
|
if (t.isEventSubmissionEnabled() && o.validateSdkErrorEvent(l, c, n, r, s)) {
|
|
var v,
|
|
f = this.baseUrl + "/" + l + "/" + this.eventsUrlPath,
|
|
g = "",
|
|
m = t.getSdkErrorEventAnnotations(),
|
|
E = e.sdkErrorCategoryString(n);
|
|
(m.error_category = E), (g += E);
|
|
var p = e.sdkErrorAreaString(r);
|
|
(m.error_area = p), (g += ":" + p);
|
|
var y = e.sdkErrorActionString(s);
|
|
m.error_action = y;
|
|
var A = e.sdkErrorParameterString(d);
|
|
if ((A.length > 0 && (m.error_parameter = A), u.length > 0)) {
|
|
var h = u;
|
|
u.length > e.MAX_ERROR_MESSAGE_LENGTH && (h = u.substring(0, e.MAX_ERROR_MESSAGE_LENGTH)), (m.reason = h);
|
|
}
|
|
var S = [];
|
|
S.push(m), (v = JSON.stringify(S)) ? a.execute(f, g, v, c) : i.w("sendSdkErrorEvent: JSON encoding failed.");
|
|
}
|
|
}),
|
|
(e.sendEventInArrayRequestCallback = function (i, r, o, a) {
|
|
void 0 === a && (a = null), a[0], a[1];
|
|
var c,
|
|
v,
|
|
f = a[2],
|
|
g = parseInt(a[3]);
|
|
(c = i.responseText), (v = i.status);
|
|
var m = e.instance.processRequestResponse(v, i.statusText, c, "Events");
|
|
if (m == n.EGAHTTPApiResponse.Ok || m == n.EGAHTTPApiResponse.Created || m == n.EGAHTTPApiResponse.BadRequest) {
|
|
var E = c ? JSON.parse(c) : {};
|
|
if (null == E) return o(n.EGAHTTPApiResponse.JsonDecodeFailed, null, f, g), void e.instance.sendSdkErrorEvent(s.Http, d.EventsHttp, u.FailHttpJsonDecode, l.Undefined, c, t.getGameKey(), t.getGameSecret());
|
|
n.EGAHTTPApiResponse.BadRequest, o(m, E, f, g);
|
|
} else o(m, null, f, g);
|
|
}),
|
|
(e.sendRequest = function (e, n, i, o, a, s) {
|
|
var d = new XMLHttpRequest(),
|
|
u = t.getGameSecret(),
|
|
l = r.getHmac(u, n),
|
|
c = [];
|
|
for (var v in (c.push(l), i)) c.push(i[v]);
|
|
if (
|
|
((d.onreadystatechange = function () {
|
|
4 === d.readyState && a(d, e, s, c);
|
|
}),
|
|
d.open("POST", e, !0),
|
|
d.setRequestHeader("Content-Type", "application/json"),
|
|
d.setRequestHeader("Authorization", l),
|
|
o)
|
|
)
|
|
throw new Error("gzip not supported");
|
|
try {
|
|
d.send(n);
|
|
} catch (e) {
|
|
console.error(e.stack);
|
|
}
|
|
}),
|
|
(e.initRequestCallback = function (i, r, a, c) {
|
|
var v, f;
|
|
void 0 === c && (c = null), c[0], c[1], (v = i.responseText), (f = i.status);
|
|
var g = v ? JSON.parse(v) : {},
|
|
m = e.instance.processRequestResponse(f, i.statusText, v, "Init");
|
|
if (m == n.EGAHTTPApiResponse.Ok || m == n.EGAHTTPApiResponse.Created || m == n.EGAHTTPApiResponse.BadRequest) {
|
|
if (null == g) return a(n.EGAHTTPApiResponse.JsonDecodeFailed, null, "", 0), void e.instance.sendSdkErrorEvent(s.Http, d.InitHttp, u.FailHttpJsonDecode, l.Undefined, v, t.getGameKey(), t.getGameSecret());
|
|
if (m !== n.EGAHTTPApiResponse.BadRequest) {
|
|
var E = o.validateAndCleanInitRequestResponse(g, m === n.EGAHTTPApiResponse.Created);
|
|
E ? a(m, E, "", 0) : a(n.EGAHTTPApiResponse.BadResponse, null, "", 0);
|
|
} else a(m, null, "", 0);
|
|
} else a(m, null, "", 0);
|
|
}),
|
|
(e.prototype.createPayloadData = function (e, n) {
|
|
if (n) throw new Error("gzip not supported");
|
|
return e;
|
|
}),
|
|
(e.prototype.processRequestResponse = function (e, t, i, r) {
|
|
return i ? (200 === e ? n.EGAHTTPApiResponse.Ok : 201 === e ? n.EGAHTTPApiResponse.Created : 0 === e || 401 === e ? n.EGAHTTPApiResponse.Unauthorized : 400 === e ? n.EGAHTTPApiResponse.BadRequest : 500 === e ? n.EGAHTTPApiResponse.InternalServerError : n.EGAHTTPApiResponse.UnknownResponseCode) : n.EGAHTTPApiResponse.NoResponse;
|
|
}),
|
|
(e.sdkErrorCategoryString = function (e) {
|
|
switch (e) {
|
|
case s.EventValidation:
|
|
return "event_validation";
|
|
case s.Database:
|
|
return "db";
|
|
case s.Init:
|
|
return "init";
|
|
case s.Http:
|
|
return "http";
|
|
case s.Json:
|
|
return "json";
|
|
}
|
|
return "";
|
|
}),
|
|
(e.sdkErrorAreaString = function (e) {
|
|
switch (e) {
|
|
case d.BusinessEvent:
|
|
return "business";
|
|
case d.ResourceEvent:
|
|
return "resource";
|
|
case d.ProgressionEvent:
|
|
return "progression";
|
|
case d.DesignEvent:
|
|
return "design";
|
|
case d.ErrorEvent:
|
|
return "error";
|
|
case d.InitHttp:
|
|
return "init_http";
|
|
case d.EventsHttp:
|
|
return "events_http";
|
|
case d.ProcessEvents:
|
|
return "process_events";
|
|
case d.AddEventsToStore:
|
|
return "add_events_to_store";
|
|
}
|
|
return "";
|
|
}),
|
|
(e.sdkErrorActionString = function (e) {
|
|
switch (e) {
|
|
case u.InvalidCurrency:
|
|
return "invalid_currency";
|
|
case u.InvalidShortString:
|
|
return "invalid_short_string";
|
|
case u.InvalidEventPartLength:
|
|
return "invalid_event_part_length";
|
|
case u.InvalidEventPartCharacters:
|
|
return "invalid_event_part_characters";
|
|
case u.InvalidStore:
|
|
return "invalid_store";
|
|
case u.InvalidFlowType:
|
|
return "invalid_flow_type";
|
|
case u.StringEmptyOrNull:
|
|
return "string_empty_or_null";
|
|
case u.NotFoundInAvailableCurrencies:
|
|
return "not_found_in_available_currencies";
|
|
case u.InvalidAmount:
|
|
return "invalid_amount";
|
|
case u.NotFoundInAvailableItemTypes:
|
|
return "not_found_in_available_item_types";
|
|
case u.WrongProgressionOrder:
|
|
return "wrong_progression_order";
|
|
case u.InvalidEventIdLength:
|
|
return "invalid_event_id_length";
|
|
case u.InvalidEventIdCharacters:
|
|
return "invalid_event_id_characters";
|
|
case u.InvalidProgressionStatus:
|
|
return "invalid_progression_status";
|
|
case u.InvalidSeverity:
|
|
return "invalid_severity";
|
|
case u.InvalidLongString:
|
|
return "invalid_long_string";
|
|
case u.DatabaseTooLarge:
|
|
return "db_too_large";
|
|
case u.DatabaseOpenOrCreate:
|
|
return "db_open_or_create";
|
|
case u.JsonError:
|
|
return "json_error";
|
|
case u.FailHttpJsonDecode:
|
|
return "fail_http_json_decode";
|
|
case u.FailHttpJsonEncode:
|
|
return "fail_http_json_encode";
|
|
}
|
|
return "";
|
|
}),
|
|
(e.sdkErrorParameterString = function (e) {
|
|
switch (e) {
|
|
case l.Currency:
|
|
return "currency";
|
|
case l.CartType:
|
|
return "cart_type";
|
|
case l.ItemType:
|
|
return "item_type";
|
|
case l.ItemId:
|
|
return "item_id";
|
|
case l.Store:
|
|
return "store";
|
|
case l.FlowType:
|
|
return "flow_type";
|
|
case l.Amount:
|
|
return "amount";
|
|
case l.Progression01:
|
|
return "progression01";
|
|
case l.Progression02:
|
|
return "progression02";
|
|
case l.Progression03:
|
|
return "progression03";
|
|
case l.EventId:
|
|
return "event_id";
|
|
case l.ProgressionStatus:
|
|
return "progression_status";
|
|
case l.Severity:
|
|
return "severity";
|
|
case l.Message:
|
|
return "message";
|
|
}
|
|
return "";
|
|
}),
|
|
(e.instance = new e()),
|
|
(e.MAX_ERROR_MESSAGE_LENGTH = 256),
|
|
e
|
|
);
|
|
})()),
|
|
(n.GAHTTPApi = c);
|
|
})(a || (a = {})),
|
|
(function (e) {
|
|
var n, t, i, r, o, a, s, d, u, l, c;
|
|
(n = e.events || (e.events = {})),
|
|
(t = e.store.GAStore),
|
|
(i = e.store.EGAStore),
|
|
(r = e.store.EGAStoreArgsOperator),
|
|
(o = e.state.GAState),
|
|
(a = e.logging.GALogger),
|
|
(s = e.utilities.GAUtilities),
|
|
(d = e.http.EGAHTTPApiResponse),
|
|
(u = e.http.GAHTTPApi),
|
|
(l = e.validators.GAValidator),
|
|
(c = (function () {
|
|
function c() {}
|
|
return (
|
|
(c.customEventFieldsErrorCallback = function (n, t) {
|
|
if (o.isEventSubmissionEnabled()) {
|
|
var i = new Date();
|
|
c.timestampMap[n] || (c.timestampMap[n] = i),
|
|
c.countMap[n] || (c.countMap[n] = 0),
|
|
(i.getTime() - c.timestampMap[n].getTime()) / 1e3 >= 3600 && ((c.timestampMap[n] = i), (c.countMap[n] = 0)),
|
|
c.countMap[n] >= c.MAX_ERROR_COUNT ||
|
|
e.threading.GAThreading.performTaskOnGAThread(function () {
|
|
c.addErrorEvent(e.EGAErrorSeverity.Warning, t, null, !0), (c.countMap[n] = c.countMap[n] + 1);
|
|
});
|
|
}
|
|
}),
|
|
(c.addSessionStartEvent = function () {
|
|
if (o.isEventSubmissionEnabled()) {
|
|
var e = {};
|
|
(e.category = c.CategorySessionStart), o.incrementSessionNum(), t.setItem(o.getGameKey(), o.SessionNumKey, o.getSessionNum().toString()), c.addDimensionsToEvent(e);
|
|
var n = o.instance.currentGlobalCustomEventFields;
|
|
c.addCustomFieldsToEvent(e, o.validateAndCleanCustomFields(n, c.customEventFieldsErrorCallback)), c.addEventToStore(e), a.i("Add SESSION START event"), c.processEvents(c.CategorySessionStart, !1);
|
|
}
|
|
}),
|
|
(c.addSessionEndEvent = function () {
|
|
if (o.isEventSubmissionEnabled()) {
|
|
var e = o.getSessionStart(),
|
|
n = o.getClientTsAdjusted() - e;
|
|
n < 0 && (a.w("Session length was calculated to be less then 0. Should not be possible. Resetting to 0."), (n = 0));
|
|
var t = {};
|
|
(t.category = c.CategorySessionEnd), (t.length = n), c.addDimensionsToEvent(t);
|
|
var i = o.instance.currentGlobalCustomEventFields;
|
|
c.addCustomFieldsToEvent(t, o.validateAndCleanCustomFields(i, c.customEventFieldsErrorCallback)), c.addEventToStore(t), a.i("Add SESSION END event."), c.processEvents("", !1);
|
|
}
|
|
}),
|
|
(c.addBusinessEvent = function (e, n, i, r, s, d, v) {
|
|
if ((void 0 === s && (s = null), o.isEventSubmissionEnabled())) {
|
|
var f = l.validateBusinessEvent(e, n, s, i, r);
|
|
if (null == f) {
|
|
var g = {};
|
|
o.incrementTransactionNum(), t.setItem(o.getGameKey(), o.TransactionNumKey, o.getTransactionNum().toString()), (g.event_id = i + ":" + r), (g.category = c.CategoryBusiness), (g.currency = e), (g.amount = n), (g[o.TransactionNumKey] = o.getTransactionNum()), s && (g.cart_type = s), c.addDimensionsToEvent(g);
|
|
var m = {};
|
|
if (d && Object.keys(d).length > 0) for (var E in d) m[E] = d[E];
|
|
else for (var E in o.instance.currentGlobalCustomEventFields) m[E] = o.instance.currentGlobalCustomEventFields[E];
|
|
if (v && d && Object.keys(d).length > 0) for (var E in o.instance.currentGlobalCustomEventFields) m[E] || (m[E] = o.instance.currentGlobalCustomEventFields[E]);
|
|
c.addCustomFieldsToEvent(g, o.validateAndCleanCustomFields(m, c.customEventFieldsErrorCallback)), a.i("Add BUSINESS event: {currency:" + e + ", amount:" + n + ", itemType:" + i + ", itemId:" + r + ", cartType:" + s + "}"), c.addEventToStore(g);
|
|
} else u.instance.sendSdkErrorEvent(f.category, f.area, f.action, f.parameter, f.reason, o.getGameKey(), o.getGameSecret());
|
|
}
|
|
}),
|
|
(c.addResourceEvent = function (n, t, i, r, s, d, v) {
|
|
if (o.isEventSubmissionEnabled()) {
|
|
var f = l.validateResourceEvent(n, t, i, r, s, o.getAvailableResourceCurrencies(), o.getAvailableResourceItemTypes());
|
|
if (null == f) {
|
|
n === e.EGAResourceFlowType.Sink && (i *= -1);
|
|
var g = {},
|
|
m = c.resourceFlowTypeToString(n);
|
|
(g.event_id = m + ":" + t + ":" + r + ":" + s), (g.category = c.CategoryResource), (g.amount = i), c.addDimensionsToEvent(g);
|
|
var E = {};
|
|
if (d && Object.keys(d).length > 0) for (var p in d) E[p] = d[p];
|
|
else for (var p in o.instance.currentGlobalCustomEventFields) E[p] = o.instance.currentGlobalCustomEventFields[p];
|
|
if (v && d && Object.keys(d).length > 0) for (var p in o.instance.currentGlobalCustomEventFields) E[p] || (E[p] = o.instance.currentGlobalCustomEventFields[p]);
|
|
c.addCustomFieldsToEvent(g, o.validateAndCleanCustomFields(E, c.customEventFieldsErrorCallback)), a.i("Add RESOURCE event: {currency:" + t + ", amount:" + i + ", itemType:" + r + ", itemId:" + s + "}"), c.addEventToStore(g);
|
|
} else u.instance.sendSdkErrorEvent(f.category, f.area, f.action, f.parameter, f.reason, o.getGameKey(), o.getGameSecret());
|
|
}
|
|
}),
|
|
(c.addProgressionEvent = function (n, t, i, r, s, d, v, f) {
|
|
if (o.isEventSubmissionEnabled()) {
|
|
var g = c.progressionStatusToString(n),
|
|
m = l.validateProgressionEvent(n, t, i, r);
|
|
if (null == m) {
|
|
var E,
|
|
p = {};
|
|
(E = i ? (r ? t + ":" + i + ":" + r : t + ":" + i) : t), (p.category = c.CategoryProgression), (p.event_id = g + ":" + E);
|
|
var y = 0;
|
|
d && n != e.EGAProgressionStatus.Start && (p.score = Math.round(s)), n === e.EGAProgressionStatus.Fail && o.incrementProgressionTries(E), n === e.EGAProgressionStatus.Complete && (o.incrementProgressionTries(E), (y = o.getProgressionTries(E)), (p.attempt_num = y), o.clearProgressionTries(E)), c.addDimensionsToEvent(p);
|
|
var A = {};
|
|
if (v && Object.keys(v).length > 0) for (var h in v) A[h] = v[h];
|
|
else for (var h in o.instance.currentGlobalCustomEventFields) A[h] = o.instance.currentGlobalCustomEventFields[h];
|
|
if (f && v && Object.keys(v).length > 0) for (var h in o.instance.currentGlobalCustomEventFields) A[h] || (A[h] = o.instance.currentGlobalCustomEventFields[h]);
|
|
c.addCustomFieldsToEvent(p, o.validateAndCleanCustomFields(A, c.customEventFieldsErrorCallback)), a.i("Add PROGRESSION event: {status:" + g + ", progression01:" + t + ", progression02:" + i + ", progression03:" + r + ", score:" + s + ", attempt:" + y + "}"), c.addEventToStore(p);
|
|
} else u.instance.sendSdkErrorEvent(m.category, m.area, m.action, m.parameter, m.reason, o.getGameKey(), o.getGameSecret());
|
|
}
|
|
}),
|
|
(c.addDesignEvent = function (e, n, t, i, r) {
|
|
if (o.isEventSubmissionEnabled()) {
|
|
var s = l.validateDesignEvent(e);
|
|
if (null == s) {
|
|
var d = {};
|
|
(d.category = c.CategoryDesign), (d.event_id = e), t && (d.value = n), c.addDimensionsToEvent(d);
|
|
var v = {};
|
|
if (i && Object.keys(i).length > 0) for (var f in i) v[f] = i[f];
|
|
else for (var f in o.instance.currentGlobalCustomEventFields) v[f] = o.instance.currentGlobalCustomEventFields[f];
|
|
if (r && i && Object.keys(i).length > 0) for (var f in o.instance.currentGlobalCustomEventFields) v[f] || (v[f] = o.instance.currentGlobalCustomEventFields[f]);
|
|
c.addCustomFieldsToEvent(d, o.validateAndCleanCustomFields(v, c.customEventFieldsErrorCallback)), a.i("Add DESIGN event: {eventId:" + e + ", value:" + n + "}"), c.addEventToStore(d);
|
|
} else u.instance.sendSdkErrorEvent(s.category, s.area, s.action, s.parameter, s.reason, o.getGameKey(), o.getGameSecret());
|
|
}
|
|
}),
|
|
(c.addErrorEvent = function (e, n, t, i, r) {
|
|
if ((void 0 === r && (r = !1), o.isEventSubmissionEnabled())) {
|
|
var s = c.errorSeverityToString(e),
|
|
d = l.validateErrorEvent(e, n);
|
|
if (null == d) {
|
|
var v = {};
|
|
if (((v.category = c.CategoryError), (v.severity = s), (v.message = n), c.addDimensionsToEvent(v), !r)) {
|
|
var f = {};
|
|
if (t && Object.keys(t).length > 0) for (var g in t) f[g] = t[g];
|
|
else for (var g in o.instance.currentGlobalCustomEventFields) f[g] = o.instance.currentGlobalCustomEventFields[g];
|
|
if (i && t && Object.keys(t).length > 0) for (var g in o.instance.currentGlobalCustomEventFields) f[g] || (f[g] = o.instance.currentGlobalCustomEventFields[g]);
|
|
c.addCustomFieldsToEvent(v, o.validateAndCleanCustomFields(f, c.customEventFieldsErrorCallback));
|
|
}
|
|
a.i("Add ERROR event: {severity:" + s + ", message:" + n + "}"), c.addEventToStore(v);
|
|
} else u.instance.sendSdkErrorEvent(d.category, d.area, d.action, d.parameter, d.reason, o.getGameKey(), o.getGameSecret());
|
|
}
|
|
}),
|
|
(c.addAdEvent = function (n, t, i, r, s, d, v, f, g) {
|
|
if (o.isEventSubmissionEnabled()) {
|
|
var m = c.adActionToString(n),
|
|
E = c.adTypeToString(t),
|
|
p = c.adErrorToString(s),
|
|
y = l.validateAdEvent(n, t, i, r);
|
|
if (null == y) {
|
|
var A = {};
|
|
(A.category = c.CategoryAds), (A.ad_sdk_name = i), (A.ad_placement = r), (A.ad_type = E), (A.ad_action = m), n == e.EGAAdAction.FailedShow && p.length > 0 && (A.ad_fail_show_reason = p), !v || (t != e.EGAAdType.RewardedVideo && t != e.EGAAdType.Video) || (A.ad_duration = d), c.addDimensionsToEvent(A);
|
|
var h = {};
|
|
if (f && Object.keys(f).length > 0) for (var S in f) h[S] = f[S];
|
|
else for (var S in o.instance.currentGlobalCustomEventFields) h[S] = o.instance.currentGlobalCustomEventFields[S];
|
|
if (g && f && Object.keys(f).length > 0) for (var S in o.instance.currentGlobalCustomEventFields) h[S] || (h[S] = o.instance.currentGlobalCustomEventFields[S]);
|
|
c.addCustomFieldsToEvent(A, o.validateAndCleanCustomFields(h, c.customEventFieldsErrorCallback)), a.i("Add AD event: {ad_sdk_name:" + i + ", ad_placement:" + r + ", ad_type:" + E + ", ad_action:" + m + (n == e.EGAAdAction.FailedShow && p.length > 0 ? ", ad_fail_show_reason:" + p : "") + (!v || (t != e.EGAAdType.RewardedVideo && t != e.EGAAdType.Video) ? "" : ", ad_duration:" + d) + "}"), c.addEventToStore(A);
|
|
} else u.instance.sendSdkErrorEvent(y.category, y.area, y.action, y.parameter, y.reason, o.getGameKey(), o.getGameSecret());
|
|
}
|
|
}),
|
|
(c.processEvents = function (e, d) {
|
|
if (o.isEventSubmissionEnabled())
|
|
try {
|
|
var v = s.createGuid();
|
|
d && (c.cleanupEvents(), c.fixMissingSessionEndEvents());
|
|
var f = [];
|
|
f.push(["status", r.Equal, "new"]);
|
|
var g = [];
|
|
g.push(["status", r.Equal, "new"]), e && (f.push(["category", r.Equal, e]), g.push(["category", r.Equal, e]));
|
|
var m = [];
|
|
m.push(["status", v]);
|
|
var E = t.select(i.Events, f);
|
|
if (!E || 0 == E.length) return a.i("Event queue: No events to send"), void c.updateSessionStore();
|
|
if (E.length > c.MaxEventCount) {
|
|
if (!(E = t.select(i.Events, f, !0, c.MaxEventCount))) return;
|
|
var p = E[E.length - 1].client_ts;
|
|
if ((f.push(["client_ts", r.LessOrEqual, p]), !(E = t.select(i.Events, f)))) return;
|
|
g.push(["client_ts", r.LessOrEqual, p]);
|
|
}
|
|
if ((a.i("Event queue: Sending " + E.length + " events."), !t.update(i.Events, m, g))) return;
|
|
for (var y = [], A = 0; A < E.length; ++A) {
|
|
var h = E[A],
|
|
S = JSON.parse(s.decode64(h.event));
|
|
if (0 != S.length) {
|
|
var b = S.client_ts;
|
|
b && !l.validateClientTs(b) && delete S.client_ts, y.push(S);
|
|
}
|
|
}
|
|
u.instance.sendEventsInArray(y, v, c.processEventsCallback);
|
|
} catch (e) {
|
|
a.e("Error during ProcessEvents(): " + e.stack), u.instance.sendSdkErrorEvent(n.EGASdkErrorCategory.Json, n.EGASdkErrorArea.ProcessEvents, n.EGASdkErrorAction.JsonError, n.EGASdkErrorParameter.Undefined, e.stack, o.getGameKey(), o.getGameSecret());
|
|
}
|
|
}),
|
|
(c.processEventsCallback = function (e, n, o, s) {
|
|
var u = [];
|
|
if ((u.push(["status", r.Equal, o]), e === d.Ok)) t.delete(i.Events, u), a.i("Event queue: " + s + " events sent.");
|
|
else if (e === d.NoResponse) {
|
|
var l = [];
|
|
l.push(["status", "new"]), a.w("Event queue: Failed to send events to collector - Retrying next time"), t.update(i.Events, l, u);
|
|
} else {
|
|
if (n) {
|
|
var c,
|
|
v = 0;
|
|
for (var f in n) 0 == v && (c = n[f]), ++v;
|
|
e === d.BadRequest && c.constructor === Array ? a.w("Event queue: " + s + " events sent. " + v + " events failed GA server validation.") : a.w("Event queue: Failed to send events.");
|
|
} else a.w("Event queue: Failed to send events.");
|
|
t.delete(i.Events, u);
|
|
}
|
|
}),
|
|
(c.cleanupEvents = function () {
|
|
t.update(i.Events, [["status", "new"]]);
|
|
}),
|
|
(c.fixMissingSessionEndEvents = function () {
|
|
if (o.isEventSubmissionEnabled()) {
|
|
var e = [];
|
|
e.push(["session_id", r.NotEqual, o.getSessionId()]);
|
|
var n = t.select(i.Sessions, e);
|
|
if (n && 0 != n.length) {
|
|
a.i(n.length + " session(s) located with missing session_end event.");
|
|
for (var d = 0; d < n.length; ++d) {
|
|
var u = JSON.parse(s.decode64(n[d].event)),
|
|
l = u.client_ts - n[d].timestamp;
|
|
(l = Math.max(0, l)), (u.category = c.CategorySessionEnd), (u.length = l), c.addEventToStore(u);
|
|
}
|
|
}
|
|
}
|
|
}),
|
|
(c.addEventToStore = function (e) {
|
|
if (o.isEventSubmissionEnabled())
|
|
if (o.isInitialized())
|
|
try {
|
|
if (t.isStoreTooLargeForEvents() && !s.stringMatch(e.category, /^(user|session_end|business)$/)) return a.w("Database too large. Event has been blocked."), void u.instance.sendSdkErrorEvent(n.EGASdkErrorCategory.Database, n.EGASdkErrorArea.AddEventsToStore, n.EGASdkErrorAction.DatabaseTooLarge, n.EGASdkErrorParameter.Undefined, "", o.getGameKey(), o.getGameSecret());
|
|
var d = o.getEventAnnotations();
|
|
for (var l in e) d[l] = e[l];
|
|
var v = JSON.stringify(d);
|
|
a.ii("Event added to queue: " + v);
|
|
var f = { status: "new" };
|
|
(f.category = d.category), (f.session_id = d.session_id), (f.client_ts = d.client_ts), (f.event = s.encode64(JSON.stringify(d))), t.insert(i.Events, f), e.category == c.CategorySessionEnd ? t.delete(i.Sessions, [["session_id", r.Equal, d.session_id]]) : c.updateSessionStore(), t.isStorageAvailable() && t.save(o.getGameKey());
|
|
} catch (l) {
|
|
a.e("addEventToStore: error"), a.e(l.stack), u.instance.sendSdkErrorEvent(n.EGASdkErrorCategory.Database, n.EGASdkErrorArea.AddEventsToStore, n.EGASdkErrorAction.DatabaseTooLarge, n.EGASdkErrorParameter.Undefined, l.stack, o.getGameKey(), o.getGameSecret());
|
|
}
|
|
else a.w("Could not add event: SDK is not initialized");
|
|
}),
|
|
(c.updateSessionStore = function () {
|
|
if (o.sessionIsStarted()) {
|
|
var e = {};
|
|
(e.session_id = o.instance.sessionId), (e.timestamp = o.getSessionStart());
|
|
var n = o.getEventAnnotations();
|
|
c.addDimensionsToEvent(n);
|
|
var r = o.instance.currentGlobalCustomEventFields;
|
|
c.addCustomFieldsToEvent(n, o.validateAndCleanCustomFields(r, c.customEventFieldsErrorCallback)), (e.event = s.encode64(JSON.stringify(n))), t.insert(i.Sessions, e, !0, "session_id"), t.isStorageAvailable() && t.save(o.getGameKey());
|
|
}
|
|
}),
|
|
(c.addDimensionsToEvent = function (e) {
|
|
e && (o.getCurrentCustomDimension01() && (e.custom_01 = o.getCurrentCustomDimension01()), o.getCurrentCustomDimension02() && (e.custom_02 = o.getCurrentCustomDimension02()), o.getCurrentCustomDimension03() && (e.custom_03 = o.getCurrentCustomDimension03()));
|
|
}),
|
|
(c.addCustomFieldsToEvent = function (e, n) {
|
|
e && n && Object.keys(n).length > 0 && (e.custom_fields = n);
|
|
}),
|
|
(c.resourceFlowTypeToString = function (n) {
|
|
return n == e.EGAResourceFlowType.Source || n == e.EGAResourceFlowType[e.EGAResourceFlowType.Source] ? "Source" : n == e.EGAResourceFlowType.Sink || n == e.EGAResourceFlowType[e.EGAResourceFlowType.Sink] ? "Sink" : "";
|
|
}),
|
|
(c.progressionStatusToString = function (n) {
|
|
return n == e.EGAProgressionStatus.Start || n == e.EGAProgressionStatus[e.EGAProgressionStatus.Start] ? "Start" : n == e.EGAProgressionStatus.Complete || n == e.EGAProgressionStatus[e.EGAProgressionStatus.Complete] ? "Complete" : n == e.EGAProgressionStatus.Fail || n == e.EGAProgressionStatus[e.EGAProgressionStatus.Fail] ? "Fail" : "";
|
|
}),
|
|
(c.errorSeverityToString = function (n) {
|
|
return n == e.EGAErrorSeverity.Debug || n == e.EGAErrorSeverity[e.EGAErrorSeverity.Debug] ? "debug" : n == e.EGAErrorSeverity.Info || n == e.EGAErrorSeverity[e.EGAErrorSeverity.Info] ? "info" : n == e.EGAErrorSeverity.Warning || n == e.EGAErrorSeverity[e.EGAErrorSeverity.Warning] ? "warning" : n == e.EGAErrorSeverity.Error || n == e.EGAErrorSeverity[e.EGAErrorSeverity.Error] ? "error" : n == e.EGAErrorSeverity.Critical || n == e.EGAErrorSeverity[e.EGAErrorSeverity.Critical] ? "critical" : "";
|
|
}),
|
|
(c.adActionToString = function (n) {
|
|
return n == e.EGAAdAction.Clicked || n == e.EGAAdAction[e.EGAAdAction.Clicked] ? "clicked" : n == e.EGAAdAction.Show || n == e.EGAAdAction[e.EGAAdAction.Show] ? "show" : n == e.EGAAdAction.FailedShow || n == e.EGAAdAction[e.EGAAdAction.FailedShow] ? "failed_show" : n == e.EGAAdAction.RewardReceived || n == e.EGAAdAction[e.EGAAdAction.RewardReceived] ? "reward_received" : "";
|
|
}),
|
|
(c.adErrorToString = function (n) {
|
|
return n == e.EGAAdError.Unknown || n == e.EGAAdError[e.EGAAdError.Unknown] ? "unknown" : n == e.EGAAdError.Offline || n == e.EGAAdError[e.EGAAdError.Offline] ? "offline" : n == e.EGAAdError.NoFill || n == e.EGAAdError[e.EGAAdError.NoFill] ? "no_fill" : n == e.EGAAdError.InternalError || n == e.EGAAdError[e.EGAAdError.InternalError] ? "internal_error" : n == e.EGAAdError.InvalidRequest || n == e.EGAAdError[e.EGAAdError.InvalidRequest] ? "invalid_request" : n == e.EGAAdError.UnableToPrecache || n == e.EGAAdError[e.EGAAdError.UnableToPrecache] ? "unable_to_precache" : "";
|
|
}),
|
|
(c.adTypeToString = function (n) {
|
|
return n == e.EGAAdType.Video || n == e.EGAAdType[e.EGAAdType.Video] ? "video" : n == e.EGAAdType.RewardedVideo || n == e.EGAAdError[e.EGAAdType.RewardedVideo] ? "rewarded_video" : n == e.EGAAdType.Playable || n == e.EGAAdError[e.EGAAdType.Playable] ? "playable" : n == e.EGAAdType.Interstitial || n == e.EGAAdError[e.EGAAdType.Interstitial] ? "interstitial" : n == e.EGAAdType.OfferWall || n == e.EGAAdError[e.EGAAdType.OfferWall] ? "offer_wall" : n == e.EGAAdType.Banner || n == e.EGAAdError[e.EGAAdType.Banner] ? "banner" : "";
|
|
}),
|
|
(c.CategorySessionStart = "user"),
|
|
(c.CategorySessionEnd = "session_end"),
|
|
(c.CategoryDesign = "design"),
|
|
(c.CategoryBusiness = "business"),
|
|
(c.CategoryProgression = "progression"),
|
|
(c.CategoryResource = "resource"),
|
|
(c.CategoryError = "error"),
|
|
(c.CategoryAds = "ads"),
|
|
(c.MaxEventCount = 500),
|
|
(c.MAX_ERROR_COUNT = 10),
|
|
(c.countMap = {}),
|
|
(c.timestampMap = {}),
|
|
c
|
|
);
|
|
})()),
|
|
(n.GAEvents = c);
|
|
})(a || (a = {})),
|
|
(function (e) {
|
|
var n, t, i, r, o;
|
|
(n = e.threading || (e.threading = {})),
|
|
(t = e.logging.GALogger),
|
|
(i = e.state.GAState),
|
|
(r = e.events.GAEvents),
|
|
(o = (function () {
|
|
function e() {
|
|
(this.blocks = new n.PriorityQueue({
|
|
compare: function (e, n) {
|
|
return e - n;
|
|
},
|
|
})),
|
|
(this.id2TimedBlockMap = {}),
|
|
e.startThread();
|
|
}
|
|
return (
|
|
(e.createTimedBlock = function (e) {
|
|
void 0 === e && (e = 0);
|
|
var t = new Date();
|
|
return t.setSeconds(t.getSeconds() + e), new n.TimedBlock(t);
|
|
}),
|
|
(e.performTaskOnGAThread = function (t, i) {
|
|
void 0 === i && (i = 0);
|
|
var r = new Date();
|
|
r.setSeconds(r.getSeconds() + i);
|
|
var o = new n.TimedBlock(r);
|
|
(o.block = t), (e.instance.id2TimedBlockMap[o.id] = o), e.instance.addTimedBlock(o);
|
|
}),
|
|
(e.performTimedBlockOnGAThread = function (n) {
|
|
(e.instance.id2TimedBlockMap[n.id] = n), e.instance.addTimedBlock(n);
|
|
}),
|
|
(e.scheduleTimer = function (t, i) {
|
|
var r = new Date();
|
|
r.setSeconds(r.getSeconds() + t);
|
|
var o = new n.TimedBlock(r);
|
|
return (o.block = i), (e.instance.id2TimedBlockMap[o.id] = o), e.instance.addTimedBlock(o), o.id;
|
|
}),
|
|
(e.getTimedBlockById = function (n) {
|
|
return n in e.instance.id2TimedBlockMap ? e.instance.id2TimedBlockMap[n] : null;
|
|
}),
|
|
(e.ensureEventQueueIsRunning = function () {
|
|
(e.instance.keepRunning = !0), e.instance.isRunning || ((e.instance.isRunning = !0), e.scheduleTimer(e.ProcessEventsIntervalInSeconds, e.processEventQueue));
|
|
}),
|
|
(e.endSessionAndStopQueue = function () {
|
|
i.isInitialized() && (t.i("Ending session."), e.stopEventQueue(), i.isEnabled() && i.sessionIsStarted() && (r.addSessionEndEvent(), (i.instance.sessionStart = 0)));
|
|
}),
|
|
(e.stopEventQueue = function () {
|
|
e.instance.keepRunning = !1;
|
|
}),
|
|
(e.ignoreTimer = function (n) {
|
|
n in e.instance.id2TimedBlockMap && (e.instance.id2TimedBlockMap[n].ignore = !0);
|
|
}),
|
|
(e.setEventProcessInterval = function (n) {
|
|
n > 0 && (e.ProcessEventsIntervalInSeconds = n);
|
|
}),
|
|
(e.prototype.addTimedBlock = function (e) {
|
|
this.blocks.enqueue(e.deadline.getTime(), e);
|
|
}),
|
|
(e.run = function () {
|
|
clearTimeout(e.runTimeoutId);
|
|
try {
|
|
for (var n; (n = e.getNextBlock()); )
|
|
if (!n.ignore)
|
|
if (n.async) {
|
|
if (!n.running) {
|
|
(n.running = !0), n.block();
|
|
break;
|
|
}
|
|
} else n.block();
|
|
return void (e.runTimeoutId = setTimeout(e.run, e.ThreadWaitTimeInMs));
|
|
} catch (e) {
|
|
t.e("Error on GA thread"), t.e(e.stack);
|
|
}
|
|
}),
|
|
(e.startThread = function () {
|
|
e.runTimeoutId = setTimeout(e.run, 0);
|
|
}),
|
|
(e.getNextBlock = function () {
|
|
var n = new Date();
|
|
return e.instance.blocks.hasItems() && e.instance.blocks.peek().deadline.getTime() <= n.getTime() ? (e.instance.blocks.peek().async && e.instance.blocks.peek().running ? e.instance.blocks.peek() : e.instance.blocks.dequeue()) : null;
|
|
}),
|
|
(e.processEventQueue = function () {
|
|
r.processEvents("", !0), e.instance.keepRunning ? e.scheduleTimer(e.ProcessEventsIntervalInSeconds, e.processEventQueue) : (e.instance.isRunning = !1);
|
|
}),
|
|
(e.instance = new e()),
|
|
(e.ThreadWaitTimeInMs = 1e3),
|
|
(e.ProcessEventsIntervalInSeconds = 8),
|
|
e
|
|
);
|
|
})()),
|
|
(n.GAThreading = o);
|
|
})(a || (a = {})),
|
|
(function (e) {
|
|
var n = e.threading.GAThreading,
|
|
i = e.logging.GALogger,
|
|
r = e.store.GAStore,
|
|
o = e.state.GAState,
|
|
a = e.http.GAHTTPApi,
|
|
s = e.device.GADevice,
|
|
d = e.validators.GAValidator,
|
|
u = e.http.EGAHTTPApiResponse,
|
|
l = e.utilities.GAUtilities,
|
|
c = e.events.GAEvents,
|
|
v = (function () {
|
|
function v() {}
|
|
return (
|
|
(v.getGlobalObject = function () {
|
|
return "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : "undefined" != typeof window ? window : void 0 !== t.g ? t.g : void 0;
|
|
}),
|
|
(v.init = function () {
|
|
if ((s.touch(), (v.methodMap.configureAvailableCustomDimensions01 = v.configureAvailableCustomDimensions01), (v.methodMap.configureAvailableCustomDimensions02 = v.configureAvailableCustomDimensions02), (v.methodMap.configureAvailableCustomDimensions03 = v.configureAvailableCustomDimensions03), (v.methodMap.configureAvailableResourceCurrencies = v.configureAvailableResourceCurrencies), (v.methodMap.configureAvailableResourceItemTypes = v.configureAvailableResourceItemTypes), (v.methodMap.configureBuild = v.configureBuild), (v.methodMap.configureSdkGameEngineVersion = v.configureSdkGameEngineVersion), (v.methodMap.configureGameEngineVersion = v.configureGameEngineVersion), (v.methodMap.configureUserId = v.configureUserId), (v.methodMap.initialize = v.initialize), (v.methodMap.addBusinessEvent = v.addBusinessEvent), (v.methodMap.addResourceEvent = v.addResourceEvent), (v.methodMap.addProgressionEvent = v.addProgressionEvent), (v.methodMap.addDesignEvent = v.addDesignEvent), (v.methodMap.addErrorEvent = v.addErrorEvent), (v.methodMap.addAdEvent = v.addAdEvent), (v.methodMap.setEnabledInfoLog = v.setEnabledInfoLog), (v.methodMap.setEnabledVerboseLog = v.setEnabledVerboseLog), (v.methodMap.setEnabledManualSessionHandling = v.setEnabledManualSessionHandling), (v.methodMap.setEnabledEventSubmission = v.setEnabledEventSubmission), (v.methodMap.setCustomDimension01 = v.setCustomDimension01), (v.methodMap.setCustomDimension02 = v.setCustomDimension02), (v.methodMap.setCustomDimension03 = v.setCustomDimension03), (v.methodMap.setGlobalCustomEventFields = v.setGlobalCustomEventFields), (v.methodMap.setEventProcessInterval = v.setEventProcessInterval), (v.methodMap.startSession = v.startSession), (v.methodMap.endSession = v.endSession), (v.methodMap.onStop = v.onStop), (v.methodMap.onResume = v.onResume), (v.methodMap.addRemoteConfigsListener = v.addRemoteConfigsListener), (v.methodMap.removeRemoteConfigsListener = v.removeRemoteConfigsListener), (v.methodMap.getRemoteConfigsValueAsString = v.getRemoteConfigsValueAsString), (v.methodMap.isRemoteConfigsReady = v.isRemoteConfigsReady), (v.methodMap.getRemoteConfigsContentAsString = v.getRemoteConfigsContentAsString), (v.methodMap.addOnBeforeUnloadListener = v.addOnBeforeUnloadListener), (v.methodMap.removeOnBeforeUnloadListener = v.removeOnBeforeUnloadListener), void 0 !== v.getGlobalObject() && void 0 !== v.getGlobalObject().GameAnalytics && void 0 !== v.getGlobalObject().GameAnalytics.q)) {
|
|
var e = v.getGlobalObject().GameAnalytics.q;
|
|
for (var t in e) v.gaCommand.apply(null, e[t]);
|
|
}
|
|
window.addEventListener("beforeunload", function (e) {
|
|
console.log("addEventListener unload"), (o.instance.isUnloading = !0), o.notifyBeforeUnloadListeners(), n.endSessionAndStopQueue(), (o.instance.isUnloading = !1);
|
|
});
|
|
}),
|
|
(v.gaCommand = function () {
|
|
for (var n = [], t = 0; t < arguments.length; t++) n[t] = arguments[t];
|
|
n.length > 0 && n[0] in e.GameAnalytics.methodMap && (n.length > 1 ? e.GameAnalytics.methodMap[n[0]].apply(null, Array.prototype.slice.call(n, 1)) : e.GameAnalytics.methodMap[n[0]]());
|
|
}),
|
|
(v.configureAvailableCustomDimensions01 = function (e) {
|
|
void 0 === e && (e = []),
|
|
n.performTaskOnGAThread(function () {
|
|
v.isSdkReady(!0, !1) ? i.w("Available custom dimensions must be set before SDK is initialized") : o.setAvailableCustomDimensions01(e);
|
|
});
|
|
}),
|
|
(v.configureAvailableCustomDimensions02 = function (e) {
|
|
void 0 === e && (e = []),
|
|
n.performTaskOnGAThread(function () {
|
|
v.isSdkReady(!0, !1) ? i.w("Available custom dimensions must be set before SDK is initialized") : o.setAvailableCustomDimensions02(e);
|
|
});
|
|
}),
|
|
(v.configureAvailableCustomDimensions03 = function (e) {
|
|
void 0 === e && (e = []),
|
|
n.performTaskOnGAThread(function () {
|
|
v.isSdkReady(!0, !1) ? i.w("Available custom dimensions must be set before SDK is initialized") : o.setAvailableCustomDimensions03(e);
|
|
});
|
|
}),
|
|
(v.configureAvailableResourceCurrencies = function (e) {
|
|
void 0 === e && (e = []),
|
|
n.performTaskOnGAThread(function () {
|
|
v.isSdkReady(!0, !1) ? i.w("Available resource currencies must be set before SDK is initialized") : o.setAvailableResourceCurrencies(e);
|
|
});
|
|
}),
|
|
(v.configureAvailableResourceItemTypes = function (e) {
|
|
void 0 === e && (e = []),
|
|
n.performTaskOnGAThread(function () {
|
|
v.isSdkReady(!0, !1) ? i.w("Available resource item types must be set before SDK is initialized") : o.setAvailableResourceItemTypes(e);
|
|
});
|
|
}),
|
|
(v.configureBuild = function (e) {
|
|
void 0 === e && (e = ""),
|
|
n.performTaskOnGAThread(function () {
|
|
v.isSdkReady(!0, !1) ? i.w("Build version must be set before SDK is initialized.") : d.validateBuild(e) ? o.setBuild(e) : i.i("Validation fail - configure build: Cannot be null, empty or above 32 length. String: " + e);
|
|
});
|
|
}),
|
|
(v.configureSdkGameEngineVersion = function (e) {
|
|
void 0 === e && (e = ""),
|
|
n.performTaskOnGAThread(function () {
|
|
v.isSdkReady(!0, !1) || (d.validateSdkWrapperVersion(e) ? (s.sdkGameEngineVersion = e) : i.i("Validation fail - configure sdk version: Sdk version not supported. String: " + e));
|
|
});
|
|
}),
|
|
(v.configureGameEngineVersion = function (e) {
|
|
void 0 === e && (e = ""),
|
|
n.performTaskOnGAThread(function () {
|
|
v.isSdkReady(!0, !1) || (d.validateEngineVersion(e) ? (s.gameEngineVersion = e) : i.i("Validation fail - configure game engine version: Game engine version not supported. String: " + e));
|
|
});
|
|
}),
|
|
(v.configureUserId = function (e) {
|
|
void 0 === e && (e = ""),
|
|
n.performTaskOnGAThread(function () {
|
|
v.isSdkReady(!0, !1) ? i.w("A custom user id must be set before SDK is initialized.") : d.validateUserId(e) ? o.setUserId(e) : i.i("Validation fail - configure user_id: Cannot be null, empty or above 64 length. Will use default user_id method. Used string: " + e);
|
|
});
|
|
}),
|
|
(v.initialize = function (e, t) {
|
|
void 0 === e && (e = ""), void 0 === t && (t = ""), s.updateConnectionType();
|
|
var r = n.createTimedBlock();
|
|
(r.async = !0),
|
|
(v.initTimedBlockId = r.id),
|
|
(r.block = function () {
|
|
v.isSdkReady(!0, !1) ? i.w("SDK already initialized. Can only be called once.") : d.validateKeys(e, t) ? (o.setKeys(e, t), v.internalInitialize()) : i.w("SDK failed initialize. Game key or secret key is invalid. Can only contain characters A-z 0-9, gameKey is 32 length, gameSecret is 40 length. Failed keys - gameKey: " + e + ", secretKey: " + t);
|
|
}),
|
|
n.performTimedBlockOnGAThread(r);
|
|
}),
|
|
(v.addBusinessEvent = function (e, t, i, r, a, d, u) {
|
|
if ((void 0 === e && (e = ""), void 0 === t && (t = 0), void 0 === i && (i = ""), void 0 === r && (r = ""), void 0 === a && (a = ""), void 0 === d && (d = {}), void 0 === u && (u = !1), s.updateConnectionType(), o.instance.isUnloading)) {
|
|
if (!v.isSdkReady(!0, !0, "Could not add business event")) return;
|
|
c.addBusinessEvent(e, t, i, r, a, d, u);
|
|
} else
|
|
n.performTaskOnGAThread(function () {
|
|
v.isSdkReady(!0, !0, "Could not add business event") && c.addBusinessEvent(e, t, i, r, a, d, u);
|
|
});
|
|
}),
|
|
(v.addResourceEvent = function (t, i, r, a, d, u, l) {
|
|
if ((void 0 === t && (t = e.EGAResourceFlowType.Undefined), void 0 === i && (i = ""), void 0 === r && (r = 0), void 0 === a && (a = ""), void 0 === d && (d = ""), void 0 === u && (u = {}), void 0 === l && (l = !1), s.updateConnectionType(), o.instance.isUnloading)) {
|
|
if (!v.isSdkReady(!0, !0, "Could not add resource event")) return;
|
|
c.addResourceEvent(t, i, r, a, d, u, l);
|
|
} else
|
|
n.performTaskOnGAThread(function () {
|
|
v.isSdkReady(!0, !0, "Could not add resource event") && c.addResourceEvent(t, i, r, a, d, u, l);
|
|
});
|
|
}),
|
|
(v.addProgressionEvent = function (t, i, r, a, d, u, l) {
|
|
if ((void 0 === t && (t = e.EGAProgressionStatus.Undefined), void 0 === i && (i = ""), void 0 === r && (r = ""), void 0 === a && (a = ""), void 0 === u && (u = {}), void 0 === l && (l = !1), s.updateConnectionType(), o.instance.isUnloading)) {
|
|
if (!v.isSdkReady(!0, !0, "Could not add progression event")) return;
|
|
var f = "number" == typeof d;
|
|
c.addProgressionEvent(t, i, r, a, f ? d : 0, f, u, l);
|
|
} else
|
|
n.performTaskOnGAThread(function () {
|
|
if (v.isSdkReady(!0, !0, "Could not add progression event")) {
|
|
var e = "number" == typeof d;
|
|
c.addProgressionEvent(t, i, r, a, e ? d : 0, e, u, l);
|
|
}
|
|
});
|
|
}),
|
|
(v.addDesignEvent = function (e, t, i, r) {
|
|
if ((void 0 === i && (i = {}), void 0 === r && (r = !1), s.updateConnectionType(), o.instance.isUnloading)) {
|
|
if (!v.isSdkReady(!0, !0, "Could not add design event")) return;
|
|
var a = "number" == typeof t;
|
|
c.addDesignEvent(e, a ? t : 0, a, i, r);
|
|
} else
|
|
n.performTaskOnGAThread(function () {
|
|
if (v.isSdkReady(!0, !0, "Could not add design event")) {
|
|
var n = "number" == typeof t;
|
|
c.addDesignEvent(e, n ? t : 0, n, i, r);
|
|
}
|
|
});
|
|
}),
|
|
(v.addErrorEvent = function (t, i, r, a) {
|
|
if ((void 0 === t && (t = e.EGAErrorSeverity.Undefined), void 0 === i && (i = ""), void 0 === r && (r = {}), void 0 === a && (a = !1), s.updateConnectionType(), o.instance.isUnloading)) {
|
|
if (!v.isSdkReady(!0, !0, "Could not add error event")) return;
|
|
c.addErrorEvent(t, i, r, a);
|
|
} else
|
|
n.performTaskOnGAThread(function () {
|
|
v.isSdkReady(!0, !0, "Could not add error event") && c.addErrorEvent(t, i, r, a);
|
|
});
|
|
}),
|
|
(v.addAdEventWithNoAdReason = function (t, i, r, a, d, u, l) {
|
|
if ((void 0 === t && (t = e.EGAAdAction.Undefined), void 0 === i && (i = e.EGAAdType.Undefined), void 0 === r && (r = ""), void 0 === a && (a = ""), void 0 === d && (d = e.EGAAdError.Undefined), void 0 === u && (u = {}), void 0 === l && (l = !1), s.updateConnectionType(), o.instance.isUnloading)) {
|
|
if (!v.isSdkReady(!0, !0, "Could not add ad event")) return;
|
|
c.addAdEvent(t, i, r, a, d, 0, !1, u, l);
|
|
} else
|
|
n.performTaskOnGAThread(function () {
|
|
v.isSdkReady(!0, !0, "Could not add ad event") && c.addAdEvent(t, i, r, a, d, 0, !1, u, l);
|
|
});
|
|
}),
|
|
(v.addAdEventWithDuration = function (t, i, r, a, d, u, l) {
|
|
if ((void 0 === t && (t = e.EGAAdAction.Undefined), void 0 === i && (i = e.EGAAdType.Undefined), void 0 === r && (r = ""), void 0 === a && (a = ""), void 0 === d && (d = 0), void 0 === u && (u = {}), void 0 === l && (l = !1), s.updateConnectionType(), o.instance.isUnloading)) {
|
|
if (!v.isSdkReady(!0, !0, "Could not add ad event")) return;
|
|
c.addAdEvent(t, i, r, a, e.EGAAdError.Undefined, d, !0, u, l);
|
|
} else
|
|
n.performTaskOnGAThread(function () {
|
|
v.isSdkReady(!0, !0, "Could not add ad event") && c.addAdEvent(t, i, r, a, e.EGAAdError.Undefined, d, !0, u, l);
|
|
});
|
|
}),
|
|
(v.addAdEvent = function (t, i, r, a, d, u) {
|
|
if ((void 0 === t && (t = e.EGAAdAction.Undefined), void 0 === i && (i = e.EGAAdType.Undefined), void 0 === r && (r = ""), void 0 === a && (a = ""), void 0 === d && (d = {}), void 0 === u && (u = !1), s.updateConnectionType(), o.instance.isUnloading)) {
|
|
if (!v.isSdkReady(!0, !0, "Could not add ad event")) return;
|
|
c.addAdEvent(t, i, r, a, e.EGAAdError.Undefined, 0, !1, d, u);
|
|
} else
|
|
n.performTaskOnGAThread(function () {
|
|
v.isSdkReady(!0, !0, "Could not add ad event") && c.addAdEvent(t, i, r, a, e.EGAAdError.Undefined, 0, !1, d, u);
|
|
});
|
|
}),
|
|
(v.setEnabledInfoLog = function (e) {
|
|
void 0 === e && (e = !1),
|
|
n.performTaskOnGAThread(function () {
|
|
e ? (i.setInfoLog(e), i.i("Info logging enabled")) : (i.i("Info logging disabled"), i.setInfoLog(e));
|
|
});
|
|
}),
|
|
(v.setEnabledVerboseLog = function (e) {
|
|
void 0 === e && (e = !1),
|
|
n.performTaskOnGAThread(function () {
|
|
e ? (i.setVerboseLog(e), i.i("Verbose logging enabled")) : (i.i("Verbose logging disabled"), i.setVerboseLog(e));
|
|
});
|
|
}),
|
|
(v.setEnabledManualSessionHandling = function (e) {
|
|
void 0 === e && (e = !1),
|
|
n.performTaskOnGAThread(function () {
|
|
o.setManualSessionHandling(e);
|
|
});
|
|
}),
|
|
(v.setEnabledEventSubmission = function (e) {
|
|
void 0 === e && (e = !1),
|
|
n.performTaskOnGAThread(function () {
|
|
e ? (o.setEnabledEventSubmission(e), i.i("Event submission enabled")) : (i.i("Event submission disabled"), o.setEnabledEventSubmission(e));
|
|
});
|
|
}),
|
|
(v.setCustomDimension01 = function (e) {
|
|
void 0 === e && (e = ""),
|
|
n.performTaskOnGAThread(function () {
|
|
d.validateDimension01(e, o.getAvailableCustomDimensions01()) ? o.setCustomDimension01(e) : i.w("Could not set custom01 dimension value to '" + e + "'. Value not found in available custom01 dimension values");
|
|
});
|
|
}),
|
|
(v.setCustomDimension02 = function (e) {
|
|
void 0 === e && (e = ""),
|
|
n.performTaskOnGAThread(function () {
|
|
d.validateDimension02(e, o.getAvailableCustomDimensions02()) ? o.setCustomDimension02(e) : i.w("Could not set custom02 dimension value to '" + e + "'. Value not found in available custom02 dimension values");
|
|
});
|
|
}),
|
|
(v.setCustomDimension03 = function (e) {
|
|
void 0 === e && (e = ""),
|
|
n.performTaskOnGAThread(function () {
|
|
d.validateDimension03(e, o.getAvailableCustomDimensions03()) ? o.setCustomDimension03(e) : i.w("Could not set custom03 dimension value to '" + e + "'. Value not found in available custom03 dimension values");
|
|
});
|
|
}),
|
|
(v.setGlobalCustomEventFields = function (e) {
|
|
void 0 === e && (e = {}),
|
|
n.performTaskOnGAThread(function () {
|
|
i.i("Set global custom event fields: " + JSON.stringify(e)), (o.instance.currentGlobalCustomEventFields = e);
|
|
});
|
|
}),
|
|
(v.setEventProcessInterval = function (e) {
|
|
n.performTaskOnGAThread(function () {
|
|
n.setEventProcessInterval(e);
|
|
});
|
|
}),
|
|
(v.startSession = function () {
|
|
if (o.isInitialized()) {
|
|
var e = n.createTimedBlock();
|
|
(e.async = !0),
|
|
(v.initTimedBlockId = e.id),
|
|
(e.block = function () {
|
|
o.isEnabled() && o.sessionIsStarted() && n.endSessionAndStopQueue(), v.resumeSessionAndStartQueue();
|
|
}),
|
|
n.performTimedBlockOnGAThread(e);
|
|
}
|
|
}),
|
|
(v.endSession = function () {
|
|
v.onStop();
|
|
}),
|
|
(v.onStop = function () {
|
|
n.performTaskOnGAThread(function () {
|
|
try {
|
|
n.endSessionAndStopQueue();
|
|
} catch (e) {}
|
|
});
|
|
}),
|
|
(v.onResume = function () {
|
|
var e = n.createTimedBlock();
|
|
(e.async = !0),
|
|
(v.initTimedBlockId = e.id),
|
|
(e.block = function () {
|
|
v.resumeSessionAndStartQueue();
|
|
}),
|
|
n.performTimedBlockOnGAThread(e);
|
|
}),
|
|
(v.getRemoteConfigsValueAsString = function (e, n) {
|
|
return void 0 === n && (n = null), o.getConfigurationStringValue(e, n);
|
|
}),
|
|
(v.isRemoteConfigsReady = function () {
|
|
return o.isRemoteConfigsReady();
|
|
}),
|
|
(v.addRemoteConfigsListener = function (e) {
|
|
o.addRemoteConfigsListener(e);
|
|
}),
|
|
(v.removeRemoteConfigsListener = function (e) {
|
|
o.removeRemoteConfigsListener(e);
|
|
}),
|
|
(v.getRemoteConfigsContentAsString = function () {
|
|
return o.getRemoteConfigsContentAsString();
|
|
}),
|
|
(v.getABTestingId = function () {
|
|
return o.getABTestingId();
|
|
}),
|
|
(v.getABTestingVariantId = function () {
|
|
return o.getABTestingVariantId();
|
|
}),
|
|
(v.addOnBeforeUnloadListener = function (e) {
|
|
o.addOnBeforeUnloadListener(e);
|
|
}),
|
|
(v.removeOnBeforeUnloadListener = function (e) {
|
|
o.removeOnBeforeUnloadListener(e);
|
|
}),
|
|
(v.internalInitialize = function () {
|
|
o.ensurePersistedStates(), r.setItem(o.getGameKey(), o.DefaultUserIdKey, o.getDefaultId()), o.setInitialized(!0), v.newSession(), o.isEnabled() && n.ensureEventQueueIsRunning();
|
|
}),
|
|
(v.newSession = function () {
|
|
i.i("Starting a new session."), o.validateAndFixCurrentDimensions(), a.instance.requestInit(o.instance.configsHash, v.startNewSessionCallback);
|
|
}),
|
|
(v.startNewSessionCallback = function (e, t) {
|
|
if ((e !== u.Ok && e !== u.Created) || !t) e == u.Unauthorized ? (i.w("Initialize SDK failed - Unauthorized"), (o.instance.initAuthorized = !1)) : (e === u.NoResponse || e === u.RequestTimeout ? i.i("Init call (session start) failed - no response. Could be offline or timeout.") : e === u.BadResponse || e === u.JsonEncodeFailed || e === u.JsonDecodeFailed ? i.i("Init call (session start) failed - bad response. Could be bad response from proxy or GA servers.") : (e !== u.BadRequest && e !== u.UnknownResponseCode) || i.i("Init call (session start) failed - bad request or unknown response."), null == o.instance.sdkConfig ? (null != o.instance.sdkConfigCached ? (i.i("Init call (session start) failed - using cached init values."), (o.instance.sdkConfig = o.instance.sdkConfigCached)) : (i.i("Init call (session start) failed - using default init values."), (o.instance.sdkConfig = o.instance.sdkConfigDefault))) : i.i("Init call (session start) failed - using cached init values."), (o.instance.initAuthorized = !0));
|
|
else {
|
|
var a = 0;
|
|
if (t.server_ts) {
|
|
var s = t.server_ts;
|
|
a = o.calculateServerTimeOffset(s);
|
|
}
|
|
if (((t.time_offset = a), e != u.Created)) {
|
|
var d = o.getSdkConfig();
|
|
d.configs && (t.configs = d.configs), d.configs_hash && (t.configs_hash = d.configs_hash), d.ab_id && (t.ab_id = d.ab_id), d.ab_variant_id && (t.ab_variant_id = d.ab_variant_id);
|
|
}
|
|
(o.instance.configsHash = t.configs_hash ? t.configs_hash : ""), (o.instance.abId = t.ab_id ? t.ab_id : ""), (o.instance.abVariantId = t.ab_variant_id ? t.ab_variant_id : ""), r.setItem(o.getGameKey(), o.SdkConfigCachedKey, l.encode64(JSON.stringify(t))), (o.instance.sdkConfigCached = t), (o.instance.sdkConfig = t), (o.instance.initAuthorized = !0);
|
|
}
|
|
if (((o.instance.clientServerTimeOffset = o.getSdkConfig().time_offset ? o.getSdkConfig().time_offset : 0), o.populateConfigurations(o.getSdkConfig()), !o.isEnabled())) return i.w("Could not start session: SDK is disabled."), void n.stopEventQueue();
|
|
n.ensureEventQueueIsRunning();
|
|
var f = l.createGuid();
|
|
(o.instance.sessionId = f), (o.instance.sessionStart = o.getClientTsAdjusted()), c.addSessionStartEvent();
|
|
var g = n.getTimedBlockById(v.initTimedBlockId);
|
|
null != g && (g.running = !1), (v.initTimedBlockId = -1);
|
|
}),
|
|
(v.resumeSessionAndStartQueue = function () {
|
|
o.isInitialized() && (i.i("Resuming session."), o.sessionIsStarted() || v.newSession());
|
|
}),
|
|
(v.isSdkReady = function (e, n, t) {
|
|
return void 0 === n && (n = !0), void 0 === t && (t = ""), t && (t += ": "), e && !o.isInitialized() ? (n && i.w(t + "SDK is not initialized"), !1) : e && !o.isEnabled() ? (n && i.w(t + "SDK is disabled"), !1) : !(e && !o.sessionIsStarted() && (n && i.w(t + "Session has not started yet"), 1));
|
|
}),
|
|
(v.initTimedBlockId = -1),
|
|
(v.methodMap = {}),
|
|
v
|
|
);
|
|
})();
|
|
e.GameAnalytics = v;
|
|
})(a || (a = {})),
|
|
a.GameAnalytics.init(),
|
|
a.GameAnalytics.gaCommand,
|
|
(e.exports = a);
|
|
},
|
|
},
|
|
t = {};
|
|
function i(n) {
|
|
var r = t[n];
|
|
if (void 0 !== r) return r.exports;
|
|
var o = (t[n] = { exports: {} });
|
|
return e[n](o, o.exports, i), o.exports;
|
|
}
|
|
i.g = (function () {
|
|
if ("object" == typeof globalThis) return globalThis;
|
|
try {
|
|
return this || new Function("return this")();
|
|
} catch (e) {
|
|
if ("object" == typeof window) return window;
|
|
}
|
|
})();
|
|
var r = i(579),
|
|
o = n;
|
|
for (var a in r) o[a] = r[a];
|
|
r.__esModule && Object.defineProperty(o, "__esModule", { value: !0 });
|
|
})();
|
|
},
|
|
}),
|
|
(n = {}),
|
|
(function t(i) {
|
|
var r = n[i];
|
|
if (void 0 !== r) return r.exports;
|
|
var o = (n[i] = { exports: {} });
|
|
return e[i](o, o.exports, t), o.exports;
|
|
})(579)
|
|
);
|
|
var e, n;
|
|
});
|
|
</script>
|
|
<script src="crazygames-sdk-v1.js"></script>
|
|
<link rel="canonical" href="https://www.crazygames.com/game/helix-jump" />
|
|
</head>
|
|
<body>
|
|
<div class="main">
|
|
<div class="background-gradient"><img class="background-image" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA+gAAANwCAYAAAC8lkDKAAAACXBIWXMAAAsTAAALEwEAmpwYAADPd0lEQVR4nOz9e3Bc93Xg+6793o0G+JQsUS9SfEmW5LHl42u56sh3qo5cORO57sQ+cUWTmWuNOESQwIMRzXFFsnIkZxL5RKZqUoo8Spgw1FCRb85YLp+Rb+5ocs8UMzVnmLlhHI9kW6L4wIOkXtSDTwCN7t6vvn8Aa2OjiUcDaKB3A99PFYsk0OjeAHrv/Vu/3/qtZdRqNQEAAAAAAK1ltvoAAAAAAAAAAToAAAAAALlAgA4AAAAAQA4QoAMAAAAAkAME6AAAAAAA5AABOgAAAAAAOUCADgAAAABADhCgAwAAAACQAwToAAAAAADkAAE6AAAAAAA5QIAOAAAAAEAOEKADAAAAAJADBOgAAAAAAOQAAToAAAAAADlAgA4AAAAAQA4QoAMAAAAAkAME6AAAAAAA5AABOgAAAAAAOUCADgAAAABADhCgAwAAAACQAwToAAAAAADkAAE6AAAAAAA5QIAOAAAAAEAOEKADAAAAAJADBOgAAAAAAOQAAToAAAAAADlAgA4AAAAAQA4QoAMAAAAAkAME6AAAAAAA5AABOgAAAAAAOUCADgAAAABADhCgAwAAAACQAwToAAAAAADkAAE6AAAAAAA5QIAOAAAAAEAOEKADAAAAAJADBOgAAAAAAOQAAToAAAAAADlAgA4AAAAAQA4QoAMAAAAAkAME6AAAAAAA5AABOgAAAAAAOUCADgAAAABADhCgAwAAAACQAwToAAAAAADkAAE6AAAAAAA5QIAOAAAAAEAOEKADAAAAAJADBOgAAAAAAOQAAToAAAAAADlAgA4AAAAAQA4QoAMAAAAAkAME6AAAAAAA5AABOgAAAAAAOUCADgAAAABADhCgAwAAAACQAwToAAAAAADkAAE6AAAAAAA5QIAOAAAAAEAOEKADAAAAAJADBOgAAAAAAOQAAToAAAAAADlAgA4AAAAAQA4QoAMAAAAAkAME6AAAAAAA5AABOgAAAAAAOUCADgAAAABADhCgAwAAAACQAwToAAAAAADkAAE6AAAAAAA5QIAOAAAAAEAOEKADAAAAAJADBOgAAAAAAOQAAToAAAAAADlAgA4AAAAAQA4QoAMAAAAAkAME6AAAAAAA5AABOgAAAAAAOUCADgAAAABADhCgAwAAAACQAwToAAAAAADkAAE6AAAAAAA5QIAOAAAAAEAOEKADAAAAAJADBOgAAAAAAOQAAToAAAAAADlAgA4AAAAAQA4QoAMAAAAAkAME6AAAAAAA5AABOgAAAAAAOUCADgAAAABADhCgAwAAAACQAwToAAAAAADkAAE6AAAAAAA5QIAOAAAAAEAOEKADAAAAAJADBOgAAAAAAOQAAToAAAAAADlAgA4AAAAAQA4QoAMAAAAAkAME6AAAAAAA5AABOgAAAAAAOUCADgAAAABADhCgAwAAAACQAwToAAAAAADkAAE6AAAAAAA5QIAOAAAAAEAOEKADAAAAAJADBOgAAAAAAOQAAToAAAAAADlAgA4AAAAAQA4QoAMAAAAAkAME6AAAAAAA5AABOgAAAAAAOUCADgAAAABADhCgAwAAAACQAwToAAAAAADkAAE6AAAAAAA5QIAOAAAAAEAOEKADAAAAAJADBOgAAAAAAOQAAToAAAAAADlAgA4AAAAAQA4QoAMAAAAAkAME6AAAAAAA5AABOgAAAAAAOUCADgAAAABADhCgAwAAAACQAwToAAAAAADkAAE6AAAAAAA5QIAOAAAAAEAOEKADAAAAAJADBOgAAAAAAOQAAToAAAAAADlAgA4AAAAAQA4QoAMAAAAAkAME6AAAAAAA5AABOgAAAAAAOUCADgAAAABADhCgAwAAAACQAwToAAAAAADkAAE6AAAAAAA5QIAOAAAAAEAOEKADAAAAAJADBOgAAAAAAOQAAToAAAAAADlAgA4AAAAAQA4QoAMAAAAAkAME6AAAAAAA5AABOgAAAAAAOUCADgAAAABADhCgAwAAAACQAwToAAAAAADkAAE6AAAAAAA5QIAOAAAAAEAOEKADAAAAAJADBOgAAAAAAOQAAToAAAAAADlAgA4AAAAAQA4QoAMAAAAAkAME6AAAAAAA5AABOgAAAAAAOUCADgAAAABADhCgAwAAAACQAwToAAAAAADkAAE6AAAAAAA5QIAOAAAAAEAOEKADAAAAAJADBOgAAAAAAOQAAToAAAAAADlAgA4AAAAAQA4QoAMAAAAAkAME6AAAAAAA5AABOgAAAAAAOUCADgAAAABADhCgAwAAAACQAwToAAAAAADkAAE6AAAAAAA5QIAOAAAAAEAOEKADAAAAAJADBOgAAAAAAOQAAToAAAAAADlAgA4AAAAAQA4QoAMAAAAAkAME6AAAAAAA5AABOgAAAAAAOUCADgAAAABADhCgAwAAAACQAwToAAAAAADkAAE6AAAAAAA5QIAOAAAAAEAOEKADAAAAAJADBOgAAAAAAOQAAToAAAAAADlAgA4AAAAAQA4QoAMAAAAAkAME6AAAAAAA5AABOgAAAAAAOUCADgAAAABADhCgAwAAAACQAwToAAAAAADkAAE6AAAAAAA5QIAOAAAAAEAOEKADAAAAAJADBOgAAAAAAOQAAToAAAAAADlAgA4AAAAAQA4QoAMAAAAAkAME6AAAAAAA5AABOgAAAAAAOUCADgAAAABADhCgAwAAAACQAwToAAAAAADkAAE6AAAAAAA5QIAOAAAAAEAOEKADAAAAAJADBOgAAAAAAOQAAToAAAAAADlAgA4AAAAAQA4QoAMAAAAAkAME6AAAAAAA5AABOgAAAAAAOUCADgAAAABADhCgAwAAAACQAwToAAAAAADkAAE6AAAAAAA5QIAOAAAAAEAOEKADAAAAAJADBOgAAAAAAOQAAToAAAAAADlAgA4AAAAAQA4QoAMAAAAAkAME6AAAAAAA5AABOgAAAAAAOUCADgAAAABADhCgAwAAAACQAwToAAAAAADkAAE6AAAAAAA5QIAOAAAAAEAOEKADAAAAAJADBOgAAAAAAOQAAToAAAAAADlAgA4AAAAAQA4QoAMAAAAAkAME6AAAAAAA5AABOgAAAAAAOUCADgAAAABADhCgAwAAAACQAwToAAAAAADkAAE6AAAAAAA5QIAOAAAAAEAOEKADAAAAAJADBOgAAAAAAOQAAToAAAAAADlAgA4AAAAAQA4QoAMAAAAAkAME6AAAAAAA5AABOgAAAAAAOUCADgAAAABADhCgAwAAAACQAwToAAAAAADkAAE6AAAAAAA5QIAOAAAAAEAOEKADAAAAAJADBOgAAAAAAOQAAToAAAAAADlAgA4AAAAAQA4QoAMAAAAAkAME6AAAAAAA5AABOgAAAAAAOUCADgAAAABADhCgAwAAAACQAwToAAAAAADkAAE6AAAAAAA5QIAOAAAAAEAOEKADAAAAAJADBOgAAAAAAOQAAToAAAAAADlAgA4AAAAAQA4QoAMAAAAAkAME6AAAAAAA5AABOgAAAAAAOUCADgAAAABADhCgAwAAAACQAwToAAAAAADkAAE6AAAAAAA5QIAOAAAAAEAOEKADAAAAAJADBOgAAAAAAOQAAToAAAAAADlAgA4AAAAAQA4QoAMAAAAAkAME6AAAAAAA5AABOgAAAAAAOUCADgAAAABADhCgAwAAAACQAwToAAAAAADkAAE6AAAAAAA5QIAOAAAAAEAOEKADAAAAAJADBOgAAAAAAOQAAToAAAAAADlAgA4AAAAAQA4QoAMAAAAAkAME6AAAAAAA5AABOgAAAAAAOUCADgAAAABADhCgAwAAAACQAwToAAAAAADkAAE6AAAAAAA5QIAOAAAAAEAOEKADAAAAAJADBOgAAAAAAOQAAToAAAAAADlAgA4AAAAAQA4QoAMAAAAAkAME6AAAAAAA5AABOgAAAAAAOUCADgAAAABADhCgAwAAAACQAwToAAAAAADkAAE6AAAAAAA5QIAOAAAAAEAOEKADAAAAAJADdqsPAACAufT29t4rIuI4TilJEjcIgs4wDLsOHTr0oxYfGgAAQNMQoAMAci+OY29wcPCwYRhSq9XEMAzZsWPH51t9XAAAAM1k1Gq1Vh8DAABX2bt3712lUuk6y7KqIiKnTp06IiJiWZbUajW59dZbvyAi4vv+xUqlsuHAgQN/1crjBQAAWCxW0AEAuVSpVNYNDQ0d1v8bhiEiIkmSiIjIW2+9dXhsbExc12U1HQAArAisoAMAcqW7u/v+jo6Oc2EYFvv7+4/M9LgoiqSjo0MqlYps3rz5y8Vi8VwQBJ2spAMAgHZFFXcAQK44jjP8+uuvvzpbcC4ikp1gfvfdd1/u7+8/WqlUrlnyAwSwLJ588smOVh8DACw3UtwBALlSqVSusW1b5srwKhQKUq1W06Jx1WpVdL86gPb3xBNPjPX19d0jIvLcc8/9bauPZzl1d3ff7/v+BRGROI6d7OcsywrrPzadOI49ERGyioD2QoAOAGhLURRJkiTiOI7EcSy2bYvv++dbfVwAmqdSqWzs6Og41+rjWKxvfvObt3znO995q9HH12o1OXny5FGR8bobpmlKrVaTWq2W/ns2hmGIbdty4403frGnp+e+QqFwcXh4eHOxWDy32iY7gHZDgA4AyJVisXguiiKxLGvWx8VxLJZliWEYEsexFAoFKZVKNy7TYQJYIj09PffFceytWbPmrSiK3LGxsU0i8lqrj2sxvvOd77z1m7/5m1vL5fK1QRB0ioi4rjs6U7CcJImbDcL13xqkzxWgJ0kiURTJ22+//Uq5XE4zjnbu3PmFpn1TAJYEAToAIFeCIOj0PE+iKJr1ca7rSq1WkyiKJIoiCcNwmY4QwFKK49gbHBx8xbZtMU1Tdu7c+blWH1MzXLp06fahoaFXPM+TMAxl69atswbL2rlCRNJVc9M0p3x8JpZlSRzH6dclSSK+74vruqOL/04ALCWKxAEAciUMw665gnMRkWq1KkmSiOd5abBeLBbfXYZDBLAEenp67uvr67vHdd1h3/dFZDxTJgiCzt7e3ntbfHiLViwWz5mmKZVKRTN/vJkem10p1wA7+/dcf8IwFMuyJAxD8Twv/Vgje9eB5dDX13fPSjivlwIBOgAgN3p6eu5bs2bN2UZagNq2LYZhpINdxQ0faE+u644eP378aH9//5EwDMUwDDEMQ4aGhg67rltq9fEtxlNPPWVrQUvHcSSKIikUChdmerxhGGkBTP23yPhKun5+tj+2bUscx1O+Xr92165dX1r67xiYXRAEnZZlkfo2DQJ0AEBuuK47+vOf//zVRgL06R4zV2s2AO0pjmO31cewGI899liUJImrW3I8z5Ph4eEty30cXCORB729vfe6rjuq9RgwFQE6ACBXNCWzEdkVJgArS3YSbiWkuU+sGIrW2HAcZ2Smx5qmGSznsQHLybKs8Pjx40dFxlPdW308eUORuCbr6em5LwiCLtd1R8rl8jVz9eTVQWUURZ5t21URkUOHDv1o6Y8UAPInjmOnUChIHMcNPT6b+glg5ahPyx4cHDx81113fbrFh7UoxWLxg1qtJiMjI+L7vnR2ds7YPm62SUedmATaVRzHThzHcvbs2cNbt279fKuPJ28I0Beht7f33v379/919mOFQuHiiRMnDtu2LbZtS5Iksz6HXmC1XdD27ds/39fXd08cx079cwPASmdZVmgYRlrgaDb1ey4baT0EoD0YhnHVGKrd09wrlco6y7Jk7dq1Ui6XpVQqzdg+zjTNKhOQWIkm4hzPtu22fn9/4xvfuM2yrLBara4tlUqbfN+/EMexEwTBmjiOXdd1Rw4cOPBXC3luAvRF2L9//1/39PTc19XV9U4Yhh2lUmlToVC4UCwWJYqihmc4DcPIzhAfEZEV01IEAOYjjmNnIvVzzgnOLIJzYOXSczsIgs6+vr57ZuodnneWZYVRFEm5XJbOzk4xTXPWLEul37+OKbnWoZ3FcewMDg4etm1bgiAQy7LC7u7u+w8ePPgfW31s8xFFUcdf//Vfv9rZ2ZkWZazVamnXhC1btiw4M6AtA/S+vr57KpXKRsdxhkVEXNctPfvss9POQC61rq6ud/7u7/7uhO/7Ytu2jI6OimmaUigUZGxsTGx79h+xpm8lSZJeeCdab8zYBuPJJ5/seOKJJ8aa+50AQOsFQbCm0eB8pqCcqrBA+8umt+uCx8DAwOE77rijLRcwent7743j2NMx4kSW0FUB+pe//OVHX3755X2tOEZguRiGIVEUiWmacvLkyaObN2/+YquPaT56enruKxQKFzs7x2vcxXGcjluq1arUajUpl8vXLPT52zJAD4Kg86233npFZyo+8YlPtGxPUrVaXee6roRhKEEQSFdXl5TLZalUKlIoFGSuXr5606m/Cc2G4BzASmVZVjVJEonjOL0uzkSD8+zfpmlSXAlYAbIBusj4gN6yLGnHqs89PT33iYgMDQ0d1kH8xHXuqmqYL7/88r6HH3747mU+RGBZ6aLm2rVrpVQqNZxNkheWZVV/+tOfvtrR0SGVSkXHHmKaZjp+sSxrwWORtqzibllWVb950zQlCIJiq44ljmNHbxq2bUu1WtVfypzBuYhQfRgAZDwzqqen5z7Lsqr1A/OZmKY5ZVJTvyYMw2Jvb++9VIYF2pee39kMw3YVhmHX6dOnD4tIWltjtmtckiTu0NDQYf1/fZ2Ndv95YHWzLCsMgkA8z0vrzcxVVDtPdMLNcZz0+PWcrM+Inus5ZtKWAbrI5MVqIhhu+3TG+v1Fc2HgCWClGRwcPDwwMLDoHr39/f1H6PULAED+xHHsWJY1ZRIuDMM1rT6uRvT09Nznuu7oXGOMuRYZ5pqQaNsAXWcR51NEKI8WWqFTC6UswSHNW19f3z3t3psUAADkB4XQgNVhYsG1LVbQXdcdPXny5NG5HjdR7HZ4ps+Xy+Vrdu/eff9Mn2/LPehKg/TZCqq1i3ZJWXrqqafsxx57LNqzZ8/dly5d2un7/vlCoXAxCIJOLZgQx7HbrhVWAQBAfmTHRhq0a3posVj84JlnnnmjNUcGYCEsywo1FVz/tEOK+2/+5m9uFREJw3DOIuCmac6ZFdDZ2Xmup6fnvulasbXlCrr2yc0WV1sJ5tM+o6ur651yubzxwQcffGCpjytLg/M4jt1z5859f3Bw8PCbb7756pkzZw6fPXv28BtvvPFqHMdOXlb3AQBA+9Ox0dDQ0OGJ7TCHh4eHb2nxYQGYJ63fpSYWW68qmJg35XL52uPHjx9tdEE1CIKumT5XKBTOv/nmm6/GcexNFzO1bXSrq+e1Wm1F7EHPBueNfE/VanXdmTNnXtm4ceOxXbt2fWk5jlEFQVB88803j04cp1SrVQmC8UKFtVpNBgcHjyymciEAAMBMtDhvoVC40NPTc9/evXvvavUxAWhMHMdetqhaO2xX7uvruycIgs44jsVx5k7crtVq4rruyEyfD4JgTRRF8s4777wyXWeKtg3Qde92O/xSZ5MtDjefFfRSqbTJMAx54403Xl/ulkKawSAyXsHQ87wpqR4z9SYGAABYLO2h3N/ff/TMmTOHK5XKulYfE4DGaDvVbKvpvKe4x3HsvP3224dN02xoS7LjOLPuQbcsq+p5npRKJRER2bNnz5TWim0doGuripVEg1vTNIPZCq+tW7duQCcpXNcd7u3tvXe5CrXpnn/DMGRsbCw95mxbuTAMW9b6DgAArGza4qhd0mOBrNXe614X8rRldp5pzYtqtSq2bUsYzp24HUWRxHHszZbdMzY2JsViUd5+++3Dly5d2qntYR9++OG78/0TmUEcx0525qWdZau4J0mS9lA/fvz4q7N9XRiGRf3+T506daS/v//IcqX66+toirtqdFYJAACgXhzHTiMZeNnsw3bIpDRNM9BjJsMQIuPj+Ll6Ya9k2mZN47m86uvru8eyrOqpU6eOiMzdPi1raGjo8EwLlkmSeI7jaIs5effdd7/f399/5MSJE0ePHTv2attUcdfc/2wKRDbFXT8fhmHXoUOHftSq4wQAAMD8+b5/2XEcieN4zsdGUSSu60oYhuL7/sVlODygqVzXHX3ooYe+9MILL/yo1cey1HQywrKsahzHXnZiTbNg9DFJkngHDx78jy061ClM0wyOHz9+1LIsieNYqtWqaGC9pK+7pM++SE8++WSH/jsIgs7+/v7Dp0+fPnLq1KkjulLreZ68/vrrR3/+858fHRwcPLxu3bqBlh0wAAArTPZeDCylMAyLYRg2lI2nj4miSCqVyoalPrZGPfXUU22z+IXWsSwrPHXq1FHLsoK9e/fetdJT3pMk8QYHBw/39/cfGRoaOiwyWX/LNE0ZHBw8PPH5w1EUua0+XpHxfeFjY2ObdJVf620tx4p/ri8iTzzxxNju3bvvLxQKFyzLqhqGIXEcpxdl0zQlCAJxXVds25ZqtSrDw8O39PT0XNfV1fXO7//+759s8bcAAMBVent7713stqQgCDp9378YhmFx//79f92sY6v3xBNPjO3du/euMAyLjuOUSqXSdSLjKyGWZYWmaQaO44yNjY1du5THgZVPqxk3OgBOkqShisrN8Ju/+Ztby+XytSKTx+m67qjW5RER6ejo+IixJxoRx7ETx7GcO3fulRMnTshnP/vZT7T6mJaSaZrV+oLY2Ym47L/z0gnKNM3w5MmTr3R0dEgQBGLbtti2LdrDfSnlOkAXESkUChdOnTp1VPdmR1Ekmv6UvYBrqsFbb731ShzHctttt31eRLhIAgCWRV9f3z1xHDthGK4RGR+QHDhw4K+me+zFixfvvHDhwh9nP5bdV5v9/0x0Nv/mm2/+Yl9f3z3Dw8Nb1qxZc+a5557728V+L/WSJHF+9rOfHS0UCun91jRNqdVqEoahWJYlW7Zs+WKzXxeri2VZVdu2JYqihvZ66kDZ9/2LPT099x04cOCvvvnNb97yne98561mH1u5XL72xIkTRy3LEsMw0ve9HoeIyB133PHpZr8uVq4kSSQIAuns7JTLly9vF5E3Wn1MSylbhyHb8an+3peHelZ79uy5u1QqbfI8Ly1IqdclvfctpdwH6I7jlHSVPFtQTUTSwgITexfSNIk4jldEb3QAQPswTTM4duzYUdd1JYoiufnmm78802PXrl07cPHi9NtmGx2cBEGgqYGv6CR2sVj8/MKOfnZxHLs6UKlWq+l9V0TSICXvbXKQX/UZJY0MfrXAVBAEMjAw8OqmTZu+uGfPnrufffbZ15biGMvl8kZ934dhKJ7npUG6FqsbGxvbJCJL8vpYWSzLCm3bliAIxPM8WW1bdLWwdPZcrw/cWykIguLg4OArjuNIuVxOA/MgCMSyLAJ0rX6ns6S2bUscx2kgruXu62c0silHAAAstSRJXC1eahiGdHZ2npvpsXEcezNVdW70xq8r6Fq8xrIsCYJgzUKPfzamaQZJkkipVJJarSYdHR1pkG5ZVkNtZ4CZxHHsHT9+/IhpmumCTCN0XJgkiQwMDLzyiU984nNLdYyu6w5blpVWn9Yxp6btGoYxa99jICuOY0ff71euXFkV7YmzKe7Zf+fNww8/fLdOoMRxnMadjuOkcehSH3uui8SJjL+BXddNK7brQERnXvRvx3HEMAypVCo6ePio1ccOAFg9HMcpeZ4nURRJrVZL96nOJHsfW8gfwzAkiiKJokhERCqVinR2dp5bitY9lUplg23b4rpuuoqgFW01m40VdCyGrkjXarWG0tt11dp13XQVcin3rmpGZ30GiYik2y5937+8VK+PlcVxnFK1On7J7OhY+XU4kyTxsqvjcRzntsVaGIbFEydOHNV7a2dnp4RhKEEQLEsFd5E2CNBFZMoMpa6a6+yFzt7r/3V2o1qtrmv1ca9UpVJpk67cZHuQZv/NFgMAq00YhsVyuZyuLs/GsqxqdpvWQv7o/VBn8m3bljfffPPVIAi6mv29ua47GkWRWJYlSZKkq/eu66ZtZ3Tv/VKiQvbKlCSJJzIZpOv7azbZ92PmnFiy6s9Jkri+76fjnDiOp0wqeJ4nWkCxXhAEXbr1ZT59lLFyJUni6rhZA8GVrFwuX2PbdnquTlcgTj/Xysne7AS3bl+pVCried5VtSeWEjc6zNuGDRuOnzt3Li3YV3+S5XE2DACWWhzHTrFYlEqlMudjr1y5sn0ZDqnpNDtA/60ZbhNpgEveGuexxx5b+SPZVUizJDUzpJFWa9lBvaaeVyqVjUt1jMPDw1uygYVpmuk4SPcSh2E47eSY53kjum+9VqtJFEUNTUJg5SqXyxu1KngYhit+a+6aNWuGLl26JGNjY9LZ2SlBcHWyS6tS3rXAq8j4ZPSpU6eOtuRAMpjGw7xVq9V1pVJJCoWCiEy/j2SlX2gAoJ7v+5eTJJFyuSyFQkFc1x2d6bEdHR0fLOexNYNOwGa3munqpWmaUiwWZ9xz3wx79uxZ0X2CVzPXdYer1aoEQTCvQXp9x4OlXCBYs2bNmezKWXb1Xs+HNWvWnJ3ua03TrOpKe61WW7bWcMivQqFwQetpabD68MMP371r164vtfbIlk6lUhHf9yWKotztPx8YGDhy6tSpI8ePHz+ah5oqTN9h3iZ63qY3Jk3RqU9ZAYDVpFKprKtUKtLV1aX71Wbcg56XPq8z2b179/1xHLta6C4Igk7tOa2Buabq6nazIAg6tdVVs48nu8KBlSeOY89xnGnTXxv8ejEMQwqFwoWlOL6enp77LMuqlstlEZEpbX9N08zuS3e7u7vvr1arXa7rjkykxZ8XmUzfzW4LxOplmmaQ7a19+vTpI1EUyZ133rmiWvX19PTc57ruaKlUulEnc7USuppuYq23t/fe0dHRG7/3ve+9tNTHGMexU1/wsdUI0DFvSZK4lmVJtVpN92co/Td70AGsNr7vX167dq1cuXJFC+B4rT6mhSoUCheOHz9+NNuftlAoaCpmWqBOqxDXajUZGho6vGXLli92d3ff7zjO8P79+/96scfR19d3T6lU2uQ4zkixWGy7rAM0JkkST/do62r0XDTF3Lbt9N/Zia/e3t57F/Me1PexZVmh67qjx48fP6qVnMfGxkQnFLQWkmEY8sYbbxx1XVc8z5NqtTpln3yhUEiDdG0fjNUrDMOiBqw6cTPROnNFjZ+DIOg6ffr0Ydu2xfO8dD93tshilmEYMjQ0dNi2bbnlllu+sMyHmwboy1EIbjYE6Jg3nWnS1ibZFDP2oANYrUql0nXDw8NiGIasW7du1pZLpmnmvuK59lav1WoShqGMjY2JXvu1YE65XJZyuZwGKGfPnn3F93256aabFtWP/Rvf+MZtY2Nj18Zx7L333nsvJ0kit9566xdE5I0mfXvIgd27d9+/cePGE7ovW6uhNzKW0JU47S4wkSJf1CJPi83k8H3/wokTJ46KSLpvXM8Jz/PS8c9EUCWFQiH9f7lcTvem69fqedTR0SFdXV2iFbyxeunkpqZ8FwoFqVQq61p9XM3U2dl5zrIsuXLlihQKBSkWizI2NjZnobUgCKRSqVyzTIcpIpJOuGnXsFYiQEdD+vr67jFNMwjDsBgEwRqd3c4G6CKTldzjOHb0JmlZVrUZKylYek8++WTHE088MZb92FNPPWVTmAmY3Z49e+4ulUo3dnR0SBRFMjY2JnEcT7uC3tvbe+9yH998xXHs6D48DZRM0xRtI1cqldKVS8uytHuKRFEk5XJ5wf3Y9+zZc3cQBMUgCNYMDAy84nleGoiFYdjV09PzhQMHDhxu3neKVkqSxP3pT386qJ0AdEKofmwxw9emAbD++9SpU0dM05SPf/zji04TjuPY0RX6iRZukiRJGlxoizfHcdJz3vO8tBBcNp3ddd10EitJkvT8aRfTjQ2wOHEce9lWgfpeKZVKN7b40JoqCILOKIqks3N8x5d2aWig04k4jjOyHMfoOE5JMxlE8rH9pH2uDmiZ3t7ee+M49oaGhg5rQQuRyeB8ujdyf3//EZHxN/n27ds/v2fPnrufffbZ15b3yDFfTzzxxFhfX989juOUKpXKujAM13R1db318MMPO9/97nf5/QHTePDBBx9Ys2bNmffff//PtCLvRLAx7RJZGIZr3n777VeW+zjnw3Xdku/7aUq77/sSBIEEQZAOKDUVWVd/kiRJCwAtdC9wHMfu4ODgEX3NSqWSBkjvvvvuyzt37vx/dHd3/68HDx7835r9PWP5FYvFc5rurWMKy7Ku2qM6nSiKRN+jQRCkK9jNSk2tVCrXaDG3arUqYRhKV1eX6D5013WlXC6LYRjieZ4EQaDdDNJgXPsmi0haAE8ntdrJE088MbZ37967wjAsai2IZmxlDIKgs1gsfjDRonJjsVg8t1rGGtq6Ut+7IiLlclmuvfban7b2yJpL+5/rtijNjpktCNbPJUmyLPtAJt7XIiK5aYNIgI45WZYVDgwMHMnOaOtNVESmVGOsn/Wu1WrS399/ZMeOHYtKd8TyCYKg8/jx40ez+3B27tzJ7w+YgWVZ1ZMnT6apsFpEbaYVdN/3L8y0/y4v4jh29dpu2/aU/s26yqkrDtne6Po1iynopnvc9Tl1YtgwDDlx4sT/Z8uWLfua9o2ipYIg6NSxhA7cG00vtSxLNMtDV7H1ecIwLC722CzLCrKt3xzHkWq1mr7v4zhOV8H1/MieF9lq7fpxkcn398QWkWlTePNYELFSqawbGBg40qxtjPr7zl4zP/7xj3+uKU/eBuI4dgzDSNPca7Wa1i5Y1+pja7b5BOciy79lVieb8hKcixCgA5Dx1h7ZAY1ePHWFLI5jL5uWy5YFAC3U+vxDYJHiOJb169efmu5zvu9fXubDAVYt7VKiE4N5qKVFgA5AKpXKhtOnTx/WGU5Nz9M//f39h3XP0JYtW77Y6uMFAKCdua4rIyMjm7u7uzcVi8VzE0XkinEcezNl3wBYGtn20dn96K1CgA6sYrp3NkkST9vH6B46kcler5ZlTUnbe/jhh+/+4IMPPvvSSy/9SYu/BQAA2k6tVpPTp0+/bJpmuo3Dtu0p6foAlp7v+xdFJN1e00iRyqVGgA6sYhs3bjz2xhtvvJ4tzqOr5tligDpgsCxLBgcHX/F9X3bu3LnoKrkAAKxG5XJZOjo6xDRNCcMw3f8ahmHLV++wtNqhk8dqo0UcXdfNRZeF/OyGB7DsRkZGbtEexnEcpwMDbXejFWdFxi9eIiK2bUupVJLLly/vbOWxA1iRrmv1AQDLoVAoSBiGMjIyIkmSpL3VK5VKqw8Ny2BgYOBIq48B48IwLOo2Tu3C0GqsoAOrmOM4w4VCIa2UHEXRlJVzncXXVfSJvpRa0XZZ+lMCWFW2tvoAgOWQaccoURSJTpb7vi/ZlrZYWfbs2XM3NQbyJY5jT7d4BkEgtm03rV3jQhGgA6uY3iSGh4elUCikK+l6YdK9OLVaTWzbliAIJIoisW275ftzAKxIy9L3Fmg127alWq2mE99xHKftpRrpA4/2s3v37vsty6oODQ0dZgyVD3v37r1LRNKxrdZaarW2CNBn+0HpG7y+d2alUtm4lMeU3T+yFL/IuZ5T+ycCi2FZVrVWq4nv+1NSe7S9WrYXpe5T1305pmlWW3z4QC5EUeRlazdkt4YspWxP2fn0j25EEASdC/3axdwTgyDo6ujokJGRkbSHtPai1u+R7B3MJg+D60YkSZLeT3W1XM/l1RCcZ69djfTGXgk0OBeZ+X0ax7GzrAe1xLQqut4bLctqeALKsqxgqY4rG8fp70Q14xoShqEUCgUplUqbpvu84zjD2V7v2fe/YRjtEaDPRr+xbCruREXMpgcPvb299wZBsKZQKFwQETl16tSRVl1QSqXSjS15YQDAFJZlVTUo1+yT2dLj4jh29F6VV8Vi8YNWvK5lWdVSqZTrnw0AoDGFQuGCFhkWkYa3biRJIq7rDjfzWHp7e++N49hzXXdURKS/v3/J6gAUi0UZHR1d8IRyrgP0vr6+exp9bHYWbmL2sdrT03Of7/sXK5XKhgMHDvzVYo/Hdd1Sf3//keXcG9TT03OfyPigJfumsiyr6jiOhGG4LMeBlaeR82u6WcTsjN/DDz989/Dw8OYXXnjhR00/wBWqt7f33v379/91q48DM9P2g88999zfNvL4JEmm7CfU+1D9x7OWenL38ccf/9idd975Md/31335y1+e9/utVCq1pFib67qjrutOaTOl2QnAfDz00ENfiuPYW7t2bcPnMoDmefjhh+/O/l9Xzj3Pm7OV4EQsFzZzzOQ4TmlgYOCIYRhLvsc8iqJ0olknBkTGW7o1cj/LbYCuqQfzmd3IBun6C9i5c+fnmhGci0wZdKUpSEuZStXf33/EcRypVCqiParL5bKIiPi+L9VqNU0BBBZiMbOHg4ODh2u1mmzfvv0LzTymlYziMO3B9/3zpmkGjQ4M9L6gsveimdi2vWQTvUNDQy+XSiX55V/+ZXn77be/8Bd/8Rf3xXFctSzLi+O4KiIyV9Cuk8HL7cqVK5srlYoUi8W07U3WxDYCziHMqr+//4imj3d2dn5+z549d19//fWvP/bYYzQYB5ZBT0/PfZZlVY8dO3akq6srbdWrBYnnUqvVZGho6OhNN93UtDFmkiRurVaT7Ir+UqlWq+J5nrz99tuHswWYdWwwVxu3ZQ/Qn3rqKbuRC2Qcx96ZM2cOz/U4VX8T14HRYvbR1UuSxM0+d3YlcamMjo6K7/vppIC25ZhI/WibvVbInzhOFjy7k639gMb09vbea1lW2KrAB41LksR7/fXXX7399ts/38jjp9tHObHXbsatVstx7iRJIlu2bEn3O+qxnThx4tM//OEP76lWq5f/yT/5Jyen+9rl3ge5d+/er4Vh2NnZ2XnOcRxNDUw/X//z6u3tfXziOD3XdUeee+65p5fzeJF/pVJJfN+XU6dOHfnUpz51O8F5e9uzZ8/d5XJ5QxiGXb7vn59roi4Igq7169cPlEql6yzLqpK5trySJPEGBgYOO46Ttg8sFAqSJMmU1eWZeJ4npVKp6ZPFy1UjplgsSqVSkbGxMfE8T3zflyiK0u4Nc40BZgzQ+/r6HnEcZ7RSqWxYzAFalhXEcWyKSElEPtq/f//3G/m6QqFwcb6vpYOP7EpGM/fRWZYV6C9Vq20utc7OTjEMQ0ZHRyUIgimVttmjh4Xq6fn1+5qxCjXxXmzoeXp6fuM+17VHRZo3+HccpzSxouaKiOQ9jfHNN988SsZBvu3evft+13WHHccR3/cvN/I1lmVVp9v6NNPAwrKscLkmt7KBuWmaYhiG3HHHHa8ahiHvvvvuPxKRaQP05VYqlTa9+eabjxeLRYnjOF1Bz9LvZWhoSINzMU1T7rzzzr0tOWjkWmdnZ9o6dGRk5CbJyXsdC9ff339Yx8BzrYDWajV59913xTAM2bJlC/fdZeb7/gUNSqvVajqJXa1WpaOjY84tulp0tdmF4parIOHY2Jh0dHSI7/tSLpelVCqJbdvpxPO8AvSHH37465ZlBZVKZUMQBF1vvvnmvsUGgVr5WURk586djzT6dXEcu2EYznkC6j4CrRKoH9NvvJmrAPrm0kHOcgywtFhOR0eHiEj6Jtf0evblYSGSJPHee+/cK4t9HtM0JQzDrpk+/9WvPvhAZ2fnu5ZlhUkSe8eOnTycPU8XKwiCdCbyjjvu+Nyin3CJfOMb37jt4sWLdzqOs6DJRyyfYrF47vjx46/GcSxhGBYX8hx5uS7btp22jdH7ZBzHUypGz6QJE3jr9+7d+8vPPPPM/9HIg4vF4rlsN4n6yY7p7re+70scx0vetQXtSbMNfd9v9aGgCeI4dk3TbHj8q6nUlmXNms2EpTE6OrppbGxMRMbvRcViUZIkSVfQ51Iul2XNmjVNjbXiOHamq5q+FAzDkEqlkv7bcZw0Zm2kSKzd29v7uOM4o0mSuJVKZePAwMAj+iTNOHjdZzcxY9DwDT+OY0fTIuaSreSeTS80DGPBA6zphGFY1DYB+mepg3RNb9c39MSFJk0PIcUYC+E4znClUhHLWtw5Xq1WZd26dadm+rzneSMDA4NHNDjwPE9qtZqEYdiU968OvCZmWnNZkGH37t33FwqFC+fPn//jif62TbsmofkqlcqGKIq0L3FD76k4jr3p7kMzbbHKDhKWUvZ+JTK5gl7vgQce+PUbbrjhv03c45w4jr3FDmj7+/v/YvPmzU/19fVtm3jt4Lvf/e4fPPXUU5sfe+yxs9McqysyXlino6NDyuVyukcvO6DKbq/Rx7iuS9s1XMUwjLS3MVuLJu3YsePzlUrlmlYfx0LYti1hGKaBzlx0td113dIyHB4yCoXCeY0n9XptWZZ0dnZKtVqdM0DVGly6vbgZLMsK6zuuLJVssdNszbJGU+zt/v7+J6d8INOkvRkBuq6gL6QYTqPBefYbzQ56tALgvF94DhogL9ceQv07m16vF6flXKnJrnxmexqiHdWkGTskbNuWsbGxTSLy2kyvkyQ6mSTpjVUvjot9/+j5kdf3YW9v772u6w6fOHHiqF6rluKatFLoda1Z7w/TNOedGue67uhEZkjDq8iO44xk75n13UTuuuuu//rwww+nv3cdJCz2HhJFkfi+L2EYTrkXZgPx7PVaJ3b15xtFUVVExLbt8uuvv/66DmY1sFlsEZ2zZ88+VqvVxHEcueWWW77d29v7+P79+7893WO1eM/ExPqU+3r2fZD9mdm2LROTXjNm8SDftEVh/ditGZIkEc/zJEmS3E7gLofpfraHDh360XyfZzwTrnnXZ8uy0muX7/tSqVRm/T0FQdCpr5skScMZthPXv6YFeYul37dlWVPG+Jlr9YoogqkT1/qe0wnX+uv7TGzb1mLYTZtciePY0XvMUheJy8ZIC5kMyG0V9zzq6Oj4SAuz6YTDUv+C82a+N876CRRgtdAKpkvZZ3Olyd7Ms4OXhVroANKyLHEcZ9FpkadOnTpSq9XkrrvumjI4bNYKejawyQ4ENGOl/o/I5DU8SRK55pprPikiPxoeHr5Vvz6KIjEMIw38F0vvl/39/Y/feeedj870OE1f1SC9WV1SXn755cfn8/gvf/nL004gAO0me/40K+Mzu8VzsQG6BmqWZaXtt2ar++H7/kWdbGzW9akVtLr3dAsMZMVOqlQqule9aVmHjuOUwjAU13WXfAV9sfIcoOduSWxsbOxaTambGLy17QViPupnNOeTYaEXU1YNsdq4rjt64sSJo60+jnYyXTX0xVjIdoKJFG8dBF6e7bF//ud/ftvrr79eXsixNeN7zA66NbjNDjosy0rTwrPBr37N5cuXT4iIdHV1nY6iKE0H1n8vln5/WszN87wZ6y9YlhXoyr1hGGk230L88Ic/fGTiOV0Rke3btz85+1eMGxgYeEK/9itf+QpV4bEiZK8zi7nmWJYVZM/PZgQ4mtGjla1nC8Z0RbyRCuB5pQVFRa7uCJWZnGa/vEze05qZ/TI2NrZJ0+7zLs8B+rWtPoB6ruuWsr/YRvZQrCSN9Pad6etWc3oZVp8HH3zwgfXr18+4Nx/Ty+7NasYWmoVMDGr6+UQ7lGkHiz/84Q/vsSzLEZGPTp48efbSpUvT9jSd6fj1NRYrW8chuydTg/L6vqvZf0+k/VZFROI4Lkyk9IsWamvGSo4WNLVtW4IgkJGRkc0zPXZ0dHRTkiRp0cfFDsJvu+22fY0cn8jk70kD+YGBgSdefvnlxy3L8v7hP/yHTyz4IIAcyV5zHnrooS+98MILP5rP15umGerEWTOuz9kiz9nq1jMpl8sbRMZrzyx062weZPcmZ7cizXbdffDBf/rAiy/+2UvLdpA5YJqmVKvNnasoFovnqtWq2Lad+/gtzwH6tlYfQL1yubxB996sttTt+j1M9SsxM9EqmsBq0dPTc5/v++fffPPNV1t9LIvxH/7Df7j/zJkz/7mvr68iIrJ37967Pvzww09HUVQoFAofFAqF8/rYxfaXfeihh75UKBTO63VVA8jFDgBnKtI2G9M0A027rPfSSy/d7bpuUUTCnTt3HtEKtbOZ7hqp++AWGwTXD+r0uqz3Ji0qqqtUZ8+e/bJlWZ4+VlPcXde9rI/X7IFmpADqylgm/X7GfaCu645mA/NmpbgvhAbqJ0+efPQHP/jB1x3H6VyNqe+7du16xvf9C1pIuFwub3z++edn3KaA9jHf4FxEpFQqXafXFg1yFkPPcc3cmasjQ7bQXzNef7n09fXdMzw8vOXaa6/9aRzHXrValexk5DS1S0LdIqcFOx3HWXWFMGu1mrhuc0sHlMvlDdquur6NZ97k+d2duyIJruuOalq7nlx538PQDPWrUPOp8B8Egbiuu2KKXgCz2bVr15ccxxl59913D4dh2DYDCBGR//Sf/tMDw8PDZ956660f/8t/+S9rr7322n/54IMPPvnggw9uqVar695///0/9rzx0/jChQvpNeDWW2/9gg4mRESCIFhTLpevCYJg/fXXX3/0xhtv/O+PPfZY9Oyzz9pr16694aGHHnqr/rUtywr6+/uPaEGfRquczsX3/Xm3tMt265iu/+rOnTuPNHrdzwTOV0WazQw+s4G6Tizo9qtqtSpBEEilUpGTJ0/+hz179lw1Y1ooFM5rarsOGJtxb9NVLg24fd+/MNNji8XiuWxAv1xdSma7l23btm2f4zjS39//xA9+8IOv/8qv/MofLPkBtdDu3bv3FQqFC6ZpBkmSuMVi8dzJkyf3xXEstVpNduzY8e2+vr5HgiDoCoKg84UXXmhG/3m6WiyR+i1Di91WY1lWVa8rzdrDq9f7zMLXjEumuv1IJx7bRRAEne+99973z507l/4OZuoDXqvV5NSpU0eTJEm3G1mWJTfccOOXW3DoLaX3s2YWiRMZz84rl8tND/6brX1GjzkQBEGnvmGWo0R/nmT3OdZ/bDaO40gURbQ4wapgWVZw+vTpw+2yR+7ll1++t1KpXP7VX/3VN37hF37hpccff/xjZ8+e/ZWHHnqoKiLy7rvvvqxphJ7npTUldDDluq6cPn36cDajKHutuHz5srz//vtff+CBBypr164duP7669Nq/z/4wQ/u9n1/w89+9rO/0Qq72QylZhSJmylF/S/+4i/uM03TK5VK5yzLcjs7OzedOHHiL372s5/9Q63IbprmtHvYNb1zPumVxjSj4mbsQZ8uJVIH4pVKRb797W+n1dujKJItW7Z8rru7e00QBF1RFHkiIrZtV03TrAZBkE48e57XlMyniWt/mtJZqVQ27t69e5+2RbMsKwiCoCsMw06tuK8p9lo0ainN9vOv1WpSKBQkCAK59dZbnzx9+vQTL7/88uNBEIw+8MADf7CkB7aMenp6ntTJNcuygjfeeGOfBk316bcDAwOP66Tjtm3bnujr63tEZLzA30zV+Rvw95rwbWAOzZjs8n3/sm7/mSsdvRG6n11X0m3blq6urncefvjhu0dGRjZ3dXWd1Wu467olXejR61S7ZGfqvvNscbJsqzi9F9SvpFer1XSyciEdSdqd/pya2WbN9/2LQRBIsVjMfQ0xAvRZ9Pb23qupmw8//PDdlmVVNa3Gtm0Z7yPdPrN489XX13dPEASdmnqYvVk3Sgex5XJ5Y19f3z1xHDv6M/3mN795y3e+852rVtOAdhVFkRtFUdMCnKXwwx/+8B799/r167d++ctffvEf/+N//KC2O3r//fe/LyJpmnldW650QCUiabCeXXHVvzXIvXz58h84jiMffvihiMgXHnjgge1xHPs//OEPnz158mTtBz/4gZw+fVo6OjrSwpu6StIMDz300JfuuOOO//cdd9zxi2NjY+ccxynGcTy6Y8eOwzoJ4LquhGEof/EXf5G+7kQbn6vu4LoarK1a5jIxwLJE5Ko2a4tVv4da/50kSbpqrr8P0zTl1KlTR7KP1Z+3aZppUTZ93zZjAkFT5iuVitRqNXnnnXceCYJAOjo6ZHR0NB18Zgfb9cfT4Otcteo2ny0E2YFx9u9SqSSe52n6bSAiUigUZkzBbRc9v97zpGXZVRmfCKv29/c/qQGCpt2On9c62TaZ0ZIk41kWJ068+aR+bOvWbU//xm/0PGmaVjUMw64//dOD80mDJ7tuidSfv5kiZGF3d/f9Bw8e/I/6ud7e3ntLpdKNxWLxXX2Mjv/0MaVSaZNpmumE22KvD47jSBAE4jiOaNr3a6+9diKOY+no6JDTp0+n12Z9jO/7EgRBbu+v07EsK9RMolqtpsXwZr3H6YSFXpPboahZs+l9YCFb1abT09NzX6lUurGrq0tGRkZYQV+MbO/vhZouRbFR+/fv/+ve3t579f/9/f1Hsn388hCc6021mav5vb299/q+f7lSqWw8c+bMKyIyZXVsvgMfwzDkzJkzr5imKdu3b/98b2/vvZZlhc8999zfNu2gMS/az3Sx7+GJolIzpq0uB02j7ejo+KiVxyEi4rruiKZH6/VLA/ZarabXjWWfCX/55ZfT65hlWbJt27YjIiLvv//+P5r4WPX999//fn2P28lB+WSQJzJ1Nab+Gp39vz6ProYODQ0dFhlvn/Lnf/7nf/DZz352SjCeva4245o2ODh4ZGxsTDzPk1/6pV+Scrk85T2fTf/MpmPPlF6dJElYv+Ix3Zaf7DXSsiwZHR2d8jtv5h707PeiAbHep+ZKBdXvd+J7S7+mWVX09fefbeFmmqZUKpUp2z+yg+35/lwWcg2bfH6dXDLSCaXx73988uXsW2eeiOMkEBFxXa/rl9q8YFx3d/c+x3FGLNOq9p86NaWyfX02xtRsuewjDTGMqT/306fPPKLvmR07djzR09PzZBzHbqP71ad7vzXjPaj3uPFJuPmnyWq69XQTYcu1BWMx6ut46DGfOHHi6I4dOz6fHd+KiLz33nvfb/S5m3F90Gu/pnFnj1O3iGV/h47jzGvyNvv9t+K+q8rl8sbsRLd+b/WZZ9mJwvoCoKuRjplc1x2tn1CaD405RETOnTv3Z4ZhsIK+GM06mS5fvrRTRF6b84GzGBgYOJLXC3F2QNlMb7zxxuvZwVuzaE/o22+//XNNfWLMSxAEnc2YYGrm7OZC6c18bGzsWhE52cpjCYKgy/M8qVar6Qx4FEVpxVtdnVou2cB8+/btaT/2vF7PVhrXdWVkZEROnjz5D3t7e8+Pjo7eaFlWtbOz81wziuCtdjNNesVxHOh2DJGrV8gns8FMETHFMCYzD44de/NRy7Jcy7I807K8/+XLv7yiisP19/c31HJuoQYGBp5MkkS2bNnS8jZ1uh2xUqnI2NjYJlnkWHAl0bHYSqaTrs2YDF2o7u7u+zNFMq9qrYaZaabaqVOnjt5www2L2oM/ODh4VIvC6TaNvMttgB4EQVe2FcFCrVu3slsdZWfdZqt+OR+WZYUaXKymffarSZIkXrP2wCZJ0vIUxWbsh2uGJEm8iaKI6cf0Rpzp97rkRZE0jd2yrCmBOZaXpm+ePXv2Zf2YbdvpwLGdigjmkW41q+e6bmd2AFzfhUSNX//G73GnTp16VETEcdyuL32pvVfKMU7HLxMtvIZbfDhoAZ0Ur1QqG1rx+rVaLc0gzbbBJDhvTH0W1kIEQbBGC6Bq0B8EQe7vv7k+umbMcJRKpe2ywFnTXbv+2Zd83zs/9yNbR0/6Zt+AMisTzXpK5IhpmtVmBeizVV1dalqsy3GcXKS4O44zMjY2pgXGxHXddBVH93WGYbhmqV5fV8wty5IdO3bkNvNntajVamlxPd1br5lJy51NsRLpwK2+gFKlUrlYLpdFuw7U05/7iRMnHhURSZIkWK2t1FayujoRHb1f+9rf3/9Hf/R/NeO5OXfzLxsQt6pQsWVZ1WzLyPpsHsxOtz8sps2cZVnVbMZatttJnuU2QHddd6QZAURXV9eCqwCYphkMDAzkevVJV2Kama4RBEGnpuZi5WpGhkSrL3Ku66YVnz/88MNP9fX9i3XPPfdvWlbbQGfGXdcVz/OkXC6ns7SZgmtNn9D4wQ9+cLfI+GrBzp07j0wWeSKFupU0lU7bVGWL682nCBqmp5PI9SnujuN0Dg0NPZokybRb5fTn7rhu5/9CUL5i+b4vlUpFDMOQN9889n9ed/2mPxKReQXoXEPb18QWPBER8TzvciuOQQtYZrubkJnauGaMMQuFwsVsrZWJ2km5j3FyG6CLNOfCODw8/IlWvv5Syw70giBY9Mqc9nHWYjlcSFamMAy7mvE8EysUTXmuhdA0Jd/35Z133vl+oVD8wnK+/pNPPtnxxBNPjOn/TdOsuq6bBubZm4JOODZzJv+ll16627Is1/f9zh07dhzOTta1w/VrNdDtDbZtp1XTs3UJsHC6bzwMwyl1ML7yla+0fP8zWq9cLkscx+J5njiONWNGBVamJEnE87yW1qiJ49ibT0tOTMrW8VnoVsrdu3ffXygULmhrQI1r2uF3ktsAPQiCrma02lmzZs2C23gFQdCywKNRcRynrQKmazUzX8Vi8dyJEyeO6opP3vdoYGEsywqa0atb3yet4rpu2p5l/OK7vOn2TzzxxNjevXvvOn/+/J1r1649ox83DENbM1217yyOY6enp+e+SqVyTbFYfNf3/cvPPPPMG/N53Zdffvley7K8YrHobd68+ZU4jqVarU5pATZdj2wsL01t1FY52mvcsqz0/YGF06r15XK57Vufofm0i8H4dbgmURTPN6NyrcjUtORmdTjA0tN+1xO1Kq5pxTFoYJm9J9dXacf0NAZczFZK13WHjx8/fnRi7CWO46RtPZtdBLvZcht9xXHsOo6z6BXcy5cv7+jr63vkueeem/eMejucPFpIbyLVb9HBibaDCMNQfN9nALnC9PZ+7d44jjzf9y80Y5AxsSI80t3dfb/jesP7/+gP/7oJh9mwbLCTJImUy+VlvwnHcex8+OGH33/nnXfSCUXbttN+zlojQmR8P9WJEyeOaJ/0OI7lU5/6VMNZPi+//PK9cRyHIhJu3779iF4ftUhekiRXtURD6+jvQ/dKT+ylE5HJft9YON020soWSsgvnbiNokhs25TOzuL783yKO5bkwLAsfN+XMAy19/iC9zAvhmmaVb32aybdfNsVt5uent+4L05izzKNRcUkmiE1sW1wtLv71+6P48Q9dOj5HzX6HKVS6UbLsqRQKEipVJIgCMTzvLaIbZY8QNdV2Gq12tBNdM+ePV8vl8sbXddtysn0zjvvfP2mm276g76+vkcqlcrGgwcPNtSXU0TEdVtzQs+HnujNSt0Kw7BLU8KiKGpKETGRqVUrJyootrQ112oVBNU1p0+ffmXihrXoCbAwDOXMmTOHa7Wa3HrrrcuaXi4ymT6c7vG17WUfqFcqlQ06UVB/49V9x9me2CKTBTAnUp7nrOr+wx/+8B7LshwRkdtvv/1oNvDTmeH6ntz1x6Kf0wHCcmxfyfZ5DcNQCoVC+rragky/F9M00xuyHmcz+iCLjE9gaF93HbRXKpUp50CSJBJFkXR0dKS9auv3LUZRNKa97TXQnilTQY+9PghnAqV59D1iWVa1t7f38fl+fblS3fjCoX+7dymObTXQ87X+3J34d8Or1dOd582YQNZzbKatEA3w6s9tVs/bRzZ7beIace8cXzKFZdlhuVze+PzzC+u/naVjFD1XVmpwPi6Rt86eeWWx36P2vTdNU44dO3bUMAy57bbbPj+f5/B9/3ySJFKpVKaMv9rhPF7yAF3Ti3zfb/hrjh8//nizAk7TNOWtt976+l133bWQm/D1TTmIJdTsgfaaNWvOvP/++6RyrWDaBqwZKT6e56Xpu3Ect2SDXzZYbTcTe6Fm7BGXWTGXrVu3HtGbe3bFvP751GSv56mpdfqx5SjwpxMXesy69yuOYzl27JicOHFCLl++nK50aLZBNpheDM/zZGRkRMbGxtJiUbVaTarVqhSLRRkbG0snOIvFotRqtfRjtm3LlStXtklm32KhULhWV76na++F1mi0t3f2GrF9+/YnkrjxIBLtZ6K91sQ1pSYrOibCrKbr+z7XmMEwLLn55pu+uGQHtUIlSeJp9fXFCMMwvRfrQkQzam21iyUP0KvV8QyHRn9RcRy7xWIxHQAtNoDQQV+5XJ7X6vmEWxf14ssg275JZLwgwvPPP7/g2b4gCDr1pGhWCvRMdu3a9aVDhw79aNEvMk8PPbTrS+MBgzsShtVZ6wyYphUkSeJGUeR1dna+WyqVbnzxxT97abmOtdm06n92ZXMxNDie2GvdssGuBpzN2OYxH93d3fcvpir7bBOXL7300t2u68rtt99+NLv6PXGTmjIbXz8jP92KVn1P6OWY0NDrvq6yhWEotm1LoVCQt99+WwqFwpRg3HVdSZJEgiCY16TuTMbGxsT3fVm7dm16LI7jSLlczlYAl5GRETl9+rSsW7cunXCaeOyU1pW+72/U59DgH+3rxRdf+OetPgYsrcnrXyJtOIeLJTT3Ci8zOguhaf1NeJ4p2/ZWdtbB1ZY8QNc+wNVqVeJ47gIdly5d2lGr1aRcLjfl9Sf2yC70y3M/u65FFEzTlP7+/iNbt279Qk9Pz31a4M6wZj9JHMsZSZLEm9jjMey67qg+nwZzS2FwcPDwli1blm1m8qGHdn1pfNuEIbZtB/39A6/orPrsJqtw33HHxz/XzsG5yPiFUwP0ZqS464qnZVni+/75Jh3mvLQ6VXhwcPDwQo+hUqlclXnwl3/5l18SESkUCiM33XTT4eyEmf5xXXdKkZns3/pvPXc1EyYbqC9XFdP6lHWRyd9XkiSyZs0a8TxPSqXSlIqt+vnFsm1bxsbGZGxsLP2esxO/urp/7Ngx+d73vpcen04auK5bqn9Ox3FkbGys/sNoA6ttgLfa1Wq1dL/peCZn4UKrjwnto9ULD+2sGW18tU2ejiEm6o0s6yJMKy15gK77/USkoT3o69ev779wYfwaWigU0h6GizERQKzIX2p20B1FkQwNDR3O7ruayI6dUa02vvIYBEG630NXu7J9e5uhlSnzL7wwvlL/G7/xtVqxWJS7775bgiCYM0Cv1Yx0wH7zzTf+eDmOdallf8+LlZ3ZDMNw2VOPstVQJ6pk577zQpbteGJZ9pRr0y/+4i/+6JlnnjE2bNx4q+cX/pHI+Pd58823fD+OY4mTRJJaTcxaTZI4nLIirud+faXY+n3oy0X3dfu+n6a7J0kiY2NjYlmWVCqVtIiPpp5PTPY0dZ+Yrs5r2p3neTI6OiqGYUhXV1d6LNddd51Uq1UJw1DiOJbR0dFNe/fuDS9durT9hRde+JHrul3a2q+zs1MuXbrUlOMDsDSyE5SWZQVfffDBP/zeiy+SOYE5OY4lvu+1ZOGhnTVru6NO1pummc0WXjW9Epc8QM+2/zFNs6FoWzfzl8vlRQeIE4FD2w3cG5WtDhyG48G4FowaD7Qbew6tMq0nQnbPRzOOcbpCK8sZKOzbt8+o1WpGqVSSKIrSVcS5fz5mGqAHQeCJSFtvPA2CoKt+RXMxDMOQKIr0T0tmmrP1EtqtmvNEMLjmwQcfemDr1i3/33/1r/7VlX379hmPPvpoTUSGJv7Is88+a5//6KPb165du82ybbdWq8nmzVteFpl6ftWvpGdTxLI/p2wwv5SyrxHHcdpabCJjR1zXTY9LMzq0ymqzttjo9VHvBVp0RgvHRVEk1WpVXNeVK1eupBkKlmXJ22+//UoURXL99df/U30+zTC6cuXKoo8PrbV79+59zz///Hy3vqFN6OKDZnm9ceyNfTt37Ph2q48L7SEIAimVSje2+jjaTbPGl9mVc82AW01ZUEseoHd0dGiTealUKnP2Kg2CoGsitTANOBdDA812G7g3Sgffrute1d9vfHVzrkF4LX28rlhl97S3On24WU6d6v/Fs2ffekW/V+2HGEWzvy10BX38/Vv+JRFp6xT37LYFXUlfDA2qJlYUzzXjGOdDfzdahMwy2ytTplAoyNm33n4lSRLZsWNbUURkIjgXEZGnn37aeOSRR2p79uyJZLxY2UkRke9+97vO+fMfbbtm48bbTdN0RUSSJAniOK6KiJim6e3YseMVLYyW3Qu+nHvQ9bU1Y0OvK4VCQcbGxqSjoyO9xujkoKajNoO+pq6Q697xK1euSFdXlwRBkM7M61Yo/bnoRPFEmuywiEgQBCNhGIrrumn6HdpTf3//k1u3bv12b2/v46VSaVMURa7reqO2bQfakqkSlDc6jjt65fLlzS99/6UHW33MmB89l8evAUu3ZQ8rk+u6UiwW3+3r67snCILOJEm8iW2CnmEYYtpWVWo1EcOQMAi6Dv3b5a+plEeO4ww3I5DObodLO/Ws0Gzo6Sx5gD7fVXDXdUcsy5KxsTHxPG/RabgakFmWVd21a9czhw4dWlEtVRzHkSAI0kHtxEpvukd1LrqCpJWTdUIju/q2EliWXdULhqa66p7X2STJ5F6adevWndq165996dChf/ujZTjkJdHV1XXWdV2pVCpN+d1qCtJ0wd6uXbu/ZFnGkkYwOrGkWQ7lSvmanl//jfssy6qGDVT7nG9PzWbTFd2JiZOrqrk/8sgjU+5yTz/9tDHx8VAyK+z1nnnmGePMmTOF9evXb/Y8b53v+xsNw5AtW7a8ou/95QjQdbVaZLLVmQbM586dk48++kiq1ao4jpOmt2frlix2gtA0Teno6JCBgQHZt2+fbN26VR566CFZt25dGpx3dXWlKe9r165NB/H685nYF++JiKxdu3aH7/vpliC0J70XDAwMPJ5t5SNipvcG0zQlrgVSKBTk2ms+9ketPWIshI5t9G/P86RSqWxo9XGhPYRhKCdPnjxi23a6YKhdcERE4trkCu/NN9305VYe64MPPvRAsdjxbpwkXrlcvqZQKJxf6rYFYRh1+QX/fBzFXhAGXZ3FjnOlUmmT4zgjzRhjZDvQaGYvAXoTZYPzRnuVNquAlcjkCs7AwMCTt95667d7en79yQMH/uSJRr62UqlsyHs6hRaJy/ZbdhxnXmkgmnZaH5A34+c/03Es9881SSLPNEXiOJFaLRbDqIlhyJzXr/GvCSf6ML7x6pZbt7Zly40HH3zwgWKx+K6IpD2cm9EGI3sBjuPYyfYZ9X33fH9//5H6XtzTfe1C6ftfZPz7Ovfeu9+fz9ffeeedn+7u7r6/Wq12fe9731twdsR0N6OGvj8jEdezpVoJxbKsOVOG6gP2mezdu7cm49sx0hZhf/AHf2BeGR7+xLp167fXajW56aabX/Y8b52ISBAE63QQkt0rvljZn8F0E3/pQGci/V1kctW7Gdk7OgFpGIYMDQ3Jhg0bxDCMtH3LyMiIlMtluXz5cpq6rp+rW9H3REQGBgZevuWWW/5g3bp16bGi/WRbEOp7cPx3qdueDBGpiW04EgWxOLYz2qpjXam6u7v3aabCUsl2uojj8Wt0Lcn3mA75kV3B1XFGNgvDscbHznEYie9NXyTXsqyq3s/mu+iVzWQ1TWPWwNT33fMDA/1HNMMrW3umFZoxvsu2z9UtaiIiPT0998Vx7M2nY5Vpmun2OV2Nz3tr3iUP0LMa7VXaTNkZmMHBwcd37rytoeBcRGTNmjVnP/jgg6U8PCwT3/cvZC+Q2VXX1cD3/fP9/f1H9IJv23aaLdEs0/UZzbtXX331Vd/35a677vpEX1/fPeVyeeNi2hTOV7YeQBhGvogsWXnwarVa+8e/+qtviMgbIiKHDr2wuaurc5OIiOd5lzUTR1e6VwJNQbdtW1zXlUKhkK6ojYyMyL/+1/9aSqWS+L6fTmxm0/Kr1ar4vi+e5w339vbeu3bt2rf+/M//XH7lV35F/qf/6X+SUumqIu8AGrTUY8KJ7EmJomiiirvfkq1YWJk0C3Mh/bkbGXvpQkojQf1E+n26UJcNbleS/v7+I7VaTRrtApUkiZedkK0voJtnyxqgt0K20JllWeI4jc+Er9TCcqtNd3f3/b7vX8he5NrlBG0mvXDXFxRbzQqFgiRJIj/96U9fFxHZsWPHF3p6eu4TETlw4MBfzfX1i+mBnuW4lvi+t6SrSdm97SIiu3Y99JaIvKX/15ZjmoberFXsVioUClIul9NtQEmSSLVaTauw6z5yTYUfHR0V13XTlXfdZvX222+/rCvvlUolLToFIL+q1cnLs44FLcsKenp6ngzDsHNsrLzxpZe+T20BLEgURen9YjYLDZSzNWPmSu0ul8vXZLeUrfTxbaM/U510z/6dbmHKeU2KFR+ga6qmziiNjY1tmutrvvrVr/5hZ2fnuUKBnpnt5MEHH3pAZHy1OE5iL4kT13GskVqtJidOnDiqAUd9+upK093dfb9pmlXtbx/Hseu67shyFgdrF/Utys6cOXNYRGTbtm2f7+7uvv/gwYMNr6Yv5GaoK7VhGMrly5dv3rdv3+n6QHqp/d7v/Z7j+/55vU5qdkkzigi2mqa36+83mzWi/dF9309Xy0VEPM+TMAzTlRGtEeA4zpTMk+zgH0D+6ASsZVnpSvobb7yxT8/jm266+elWHyPaV7ao8lLsjdZ78cRYddb2Yq7rDmtQng3UV5JGx669X/vn95bL5Wtcxx7JForMpsu3gxUfoNcX/JnrF9PX1/fINddcc+zkyZN/ODw8LL7vL/kxojmKxcK7/f39R7Som8hkkSq9cGXbu63U/aO1Wk0GBgYOZ79XXRXN7tluViuMdqbvj2xbwVqtJidPnjyyffv2L8z2tX19/+IekUVOeCQ1sQxTEsOUv/u7vxu8/fbbP//ww3tK69evHyoU/BHTNGuN7jtfKNM048HBwcNJkqRp3tmK6+2sUqmI53nZHqqSJIkUCoV0JVwH8KZpSqFQkGq1KuVyWXzfF8MwpFAoTGnvoimHhUKBVmtAjmmbNcMwxPO8dNJNZPw8LpfLFIzDgmndlOnGAD09Pfe5rjslY3e++541ZV1kPFW7p+fX7ysU/IvPPvvsa/WPtSwrWA3ZkY38/IIgWPPuu++9HIXVNDMwW49Cx8N5t+ID9OyqaSN9kiuVysbXX399n+850lHwhHoi7cOyrFBXvHS2zLbtdN959uKlJ+hKXE12XXfY87wp1YgzaVJTfh4r8fufDw3QwjBMJ3K0cFT9jPWuXbu+5DjOiGVZ1TAM19RqNTl79uwrItNPdjQyAZIk44X6CoWCTGR6HBlf9R3/PXWtWSOXL/+vN/7e7/1v7zX7e1dRFLm691xX9FfKHjZtnabfz7lz5+Rv//Zv5ZZbbpFrrrlGbNuW4eHhdKBVLpcljmMpFAppazbtjKEBvOeNvy3aPbsAWOkqlUp6n9OOI9qxJooi8X3/YosPEW1MJ/gnYotqd3f3/RP3GteyrODkyZOHFzPOyhaVGxoaeqVWM2Tbtq1f7O7+tU3jY4uarFmz5q0wDItxHLv6WgspSJd39T/D2bYXxlHo1pLJOlPZTMlsqnverfgAXQdeuu8gCILO3bu79z3//MFHp3u84zgjjm1m9uq29wB1pfvqV7/6gOd5I6ZpVl3XHdUAVGSyaqPI1UH5Stuf09v7tXvDMFjjOM6wyHh7kCisihjWlL3F2QIiBOiTN1iteprde10oFC7oLHgcx47jOCOnT58+rNXvm5FCpmmX4+9LK20FpIUML1++LP+/vzn67ne+8x3rm9/85pLcbR3Hqer3Uq1W044QGqy3M51scRxHfN+XkZER+fGPfywDAwOyadOmtGK7ts7Rdkza5k1bvulAJwiCtJLsaj93gMUwTXNJW3CKyJRaEdrSMptFFsexu9THgJVL7wuGYcjg4OARzVLUye7FjjF1TCKiHbFMOXv2rVcmJ5ySKYsu2Uxh3Zq1GhUKhfPZMb6OafTf2UA9z1Z8gJ4timVZlrzzzrtfv/322x7t7f3a4+VyeaPrOqPlcnnD2rVrz8Zx7GqayEpYPVoN1q5de+bNN988Wt8Warp0bt1zvhILxMVx5J09e/aViUkocR1LOjo6JIyStFd4/WxqdivAaqUXal1dUUmSyJtvvnk0O7ERhmFa4TwbvNZfJ+Zz4c9WDU+Syb7yet3SiQPTNJf0zaoZBJp1IiJpMbV2pjfmbGp7Z2enjI2Nyeuvv55eI/T710FVpVJJ9+Dr70Rbf+rjNFAHkF9677MsK73n6f8J0LEY9Vvjsgsg2Xuqmm9QmN2mKCLp6ziOkz53tl1utp3batDb23tvpVK5xvf980EQrNE6AMVi8YNyuSye56XjfJ3EyLbMy7v2Hn01qH7P8YkTx/fVP+bcucnOG4Y5seq+HAe3wmUDYb3YZE6YBRfVePLJJzvOnz9/WxAEnfWzYdlZzWwQng2oFhKYjl/z8vWuePLJJzuq1WpnGIZdmZXf8RtElEyZSc1elNplD85yme6mWX9j1Ame+uKC06W2T/fx6Wkq2vj/srPu4/+OlzyHp1arGdlU8CAIxLKstF9ou5u8NiQS1xJJpCZiWOJ6xSmTdfWz7fq3FozTc6n+Jq+DIQ329f8raQJw9UrENB0Jw7Cz1UeSR/WVkbPXvuVYIZ9LdnCe7egzOS7hHMXCZe/VIlMLkU0XBM530e/qc0pExJAk0Yn8qa+z0gLz6X5e+jMfGho6PNvX6lY0fY6rz/38W1m/TawaruuWgzAsDg4OznqSNlMeT+onnnhirFgsXnzvvfde1nRe7fmK9qfvuaUsFFer1UydxHFdVxzHEZHJHuKrWXZrTJIkYtu2OI6T3vxFpm6T0GyV1ZxeuJLo+Tef9qxoTJIkLV+9tm2bixyAXCJAR1t69NFHa67jlFp9HPX+8T/5fzbcU/WBf/Srv/7VB//pA4t5vYceeuhLp0+f/vujo+Pjx2xQsNJmU1cjnR1/+umnlyzaMwwjyQahIrKq0uRmo+mEuqUhjmMZGxubMgkWRVG6N72+KwDaXTrh0vJgEs3HOQogrxiBYUkt5Q0wXoYZ+PlUe3xo1z/70nUf+9irPb/+G/fN9dju7l+7/7rrPvbjDevXn9L+7Qvxwgsv/Gjbtm3/ec2aNWlQlS2Kg/a2XIVMsmlgU4vSrG7Z7g9awC97ntm2Lb7vi+/7aeqcFmUkA6H96e+Uldbmy0MKPBMvAPKKAB1trCbbtm2btVf1cnjwwQcf6O3tvXf9urUDr7326utJHHl9fX33zPT48VYcibzx+uuv/uxnP31VZOF7wb/1rW9tuHTp0s3XXXfdl8MwnJJe2+4FvjBZFGapU9xFJgsp1u/ZWs2ybfh0v7r2Vo7jWMrl8pR2hpkWfelWAQD5xDYUAHnFCB5t67l/89zf9vT0zLla3QxaBCdJrp5xr9VqMjQ0dEQfc/r06Vc+/vGPf2737t33J0niOo4zIiKSJIknIuI4zvDAwMARwzDE8zzZuHHjsb6+vntKpdIm3/fPx3HsBUHQ9cILL/xoruP63d/93YsicrGnp2dHoVBIg4OZKoyjvdRXgZ3J008/bYyOjq6/ePHijkqlsrGjo+NcR0fHhc7Ozg9t2w5ma9FmWVYsMlnkLFtskVX0yeqvGpCLjP9sOjs7ZXh4WETG+6e7rpu2a0uSRFzXvao7ANpLZstHy1d7VxpWrwFgZgToWHbZtHHtMz08PLzFdd0RkfHq7nEce88///x/bOmBNsjzvBHdf1osFiWKInn99deP+r6f9lnWtFjtb60r3GEYyquvvvq6Ppe21dq8efMX53scY2NjYllW2oIjW5ka7UmriT/99NPGdKvoTz31lD0yMvKx8+fPf/zYsWOHHccRrcieJIkEQSCmacrQ0NAXXNcd7ejo+KhQKFzwfb9kWVb8yCOP1OI4tkQmK/vr+5XgXNJe6Nn2TIVCQUZGRuTixYsSBIH4vp92TtB9+0EQEJyvANp5xPf9Cz09PU9atlWtVCobLcsKHMcZmasIeBBWNtqWM+q67kitNh6Ulkpjm1588c/++fJ8B/mVh8ljy7KYeAGQSwToaAnDMGRwcPCwDoB0oKsB5S233PLF3t7ee4MwWvP8wT/NdaBerVa7XNeVMAwlCAIxDEMcx0n7U2p7Fy0g5ThO+jFdIdVgPooirQg9PJ9jSJLE830/LVilPbRJU25vURTJ9u3br9rGMR6Yj37sww8/+NTp06dfMU1TisVi2oNV9667riuGYcjQ0NBhDTD1c9u3b//iww8/fM5xnLE4jsX3/XSlONs+aTWzbbu+NaSEYSivvfaajI2NiWma8sEHH4ie/zr5lp2QQ/syTVOCIJBjx449kySJOJ5Ofo331jZl9kksw4wkSWpiyHiRQdf1ZfPmLd9eimPt/Vrv4/v/aP+SPPdS0MyyFh8D1fkB5BIBOpZVdsCf7e/oOM6UYPLMmTOviIhs3br1C729vffGcewdOHDgr/Tz3/rWtzZUKpV1lmVVl3ImPru3dKLn5FUz7q7rjmQDH125zvZbzFbEzvZp189VKpX0dQzDkDAM1zRyfN/5znfMarXaYZpmNbsyr4EW2ttEkD2qq+e/8zu/01kulzdcvHhxx/Hjxw97njflPZf9OpV9D2bfh3qOiciU848+3pP0Z5v2tzUsESMR2/HkyvCohEFlykSYPp7JjZVBW+uJjGezJJFeU405g3MRkSQen6C1bFts25VKpSJL0Xu7p6fnScuyqnM9LgiCJevnnr2fT1y3Wh6Az0TPTdLsAeQVATpybXBw8LBpmrJ9+/bP9/T03GdZVrWjo+MjEZFjx46dWO1ppKZp1gYHB0fee++9dHVUAyzLsljBa3O2bUulUtn4rW99a0MURf758+c/PjQ0dLhWq6Vp1QDyyXEcCcNQwjAUy7LEsiwJw7CpQfLu3bv3FQqFC1euXNk812OLxeI5x3HSDgNLnWbe09PzpIjIgQMHnqj/XKlU2rSkLw4AbYwAHW1hYGDgSHaVWuVhH1srvfnmm79ULBY/H0XRkY6OjnSPexiGFPlaAWq1mpw6deqVt956K/29anVwUqiBfNMtTzppatu2FIvFc729vY9XKpWNvu9fEBEJw7Dr4MGDjy7kNdatW9d/7NixP7322mv/aKbH7Nq16xnTNAPXdUf03uA4zpJeP/r7+58Mw1A+9alP7e3r63ukVCptOnTo0F79/Jo1a86+9957S/b6ANDOCNCRa9mUUQ1IsoWsVrsXXnjhR/v27TMGBgakVCqJyPiqjeu6YlkWharaXHaSRWsV6L5YtjAA+afnr7bAPHHixD79mE643XbbbXtne46Z7Nq16xnf9y+USiW55ZZbLmY/p0Gx7/sXHMcZPXv27OP1EwZLrVgsys9//vNnoiiST37yk4/u3bv3a5VKZUMYhl3LcgAA0KYI0JFrWllaRNLK0rpqzj5PkW984xu3JUniVKtV8X0//dlob2a0P9u2p+wx1wkr3v9Avmk9kOwks4hMyXAKw1AqlcrG+T73ww8//PVisXhuaGhon2bVZAVB0PXuu+9+3bZtGRsbE8/z0iKlmmm11IF6uVxOJxYHBgb2JUkiYRiKFjQFAEyPAB1tQQOUbGBCcDLe4m3i73TFXKtwa2CH9qWD+GxwThEyoD1ogUGR8WBdC4dm/15IoLp79+59xWLx3LFjx/aJiBYFnVLwTIvGacs/DdC1gOhybA/TtqEamOvPItvVBABwNa6OyLVsUK7p7SKsnqvf+73fe6+rq+vDMAylVCpJFEXiOA7B+QqRnYjS7BFdiSPFHcg/LQ4Xx7FUq1WpVqtpUK6BsmVZ1e7uX9vXyPPt2bPn60mSuG+++cYzuuXFcZxpO4zEcSxJkojneSKSBvLLVp9EWw+KTE5Q6LXL9/0lf30AaFcE6Mg13W+us/3ZojarvUCcevfdd/8HwzCkWCyKbdtT+qmjvWlQrqtQ2Ur9TMAA+abnq/6xLEs8zxPbtqesYp88efLJRlt+BUHQeebM0Ncty5JKpZJO2FUqlQ31j9XP2bYtQRCkxeGWq8OHvrZhGBJF473jtS3heMs5AMB0GMEj1zQQye7hI719quuuu+513cuog0AqfK8c2SwSHdDHcUyF/gboyqWIiGFYUksMkZpeQyZ7l9d3hqjf458+hyQitVhMoyamMbWjhGmaEoZheo3i/EP9+0NkclV7/BodpdfsWm3u98tEv/MgSURqNSNdkZ54vqtW0JVeL1pRODS7B1/vU7qa3mpxUqMPOoBcav0VEmgva1t9APWSJDFFyCgA6mW3AWQD7/pzZaYJP139y24t0AA8iqIpxRhN05zSdYIJFMxlPtfsPXv2fN113ZE333xzXzaDJjuBjflxXXe01ccAANOhSBwwP3dM87Fblv0oJnR3d9/vOM5wEARSKBSmpEEvVxojkFf1LaU0mNFgerrHZ4N1LWRVvyquAbhmq0RRlL4WgRLmo5H3S3d39z7f9y8cO3Zsn2EYaY2R7NfW70GP49hr/tGuLEmD2woAYLmxgg7Mz3Q39M3LfhQTDh48+B9vvfXW/1YoFNK95/SIB8Zpa0aR8eA8juO0mnR2f/BMtCOCVtKfTJc30r28up9Yg/nsNgSgUUmSzBgsrl27tv/111/fZ5qmuK6bvnfVdEG+VnHHzMrlq/ftq55f/40nl/NYACCLFXRg8ZYiGm5oGW7v3r13iYz3m9WKvrVaLQ1CCNSxmgVBkK6A27adrjxmA/eZ6ONErt6XXqlU5MqVK2nhLX2MiFz1f2Axenp6nhQZn2zyPC+dKNLtF/o5zN+aNZ1nZ/pcsaNw7uc///kfLufxAIAiQAfy6TYReWWuBxWLxQ+TJLEdx5FarSbV6viiia60hGG41McJ5JYWo4rjWKIokgsXLsjIyIgkSSLValU8d/p2hJo+bNt2us88jmNxHEfiOJZLly7J8PCw1Go1CYJAbNtOt5Rk0+LZYoJGzVTkLUkSd2Bg4JFCoZBWba9fRWcyaGGCIOia6XPDw8Mty4wDAAJ0IJ+ubeRB3/72tz986qmnOrdt2/bLAwMD/4cGCmEYSrlcFtvmFMfqFUVRmp7uOI6IYaWtG13XFZHZ2zbqvnN9Dv1/uVxOM1SyK+vZgIlOE5jL+HtkskvDdOI4dnXlPAgCcRwnDdBFJH0fmqYZ7N2792vXXXfdy0NDQ19bxm+jbbmuO6IZCpZlVeM49uI4di3LClzXHWn18QFYvRi9A/nUcM7iY489Nrpr165PZ/fCioj4vr/sLXWAPNEJqsngenwlXVfW5wqiNZjXDBWRyQJx2RVy7fGsqfPa95lK7lisOI5dfX91dnZKkiRSqVSm1FZIkkQGBgYeLxaLMjo6+oenT59mi1MDTp48+aSer9kCkrRyBdBqXL2BFjIMQ+I4FsMw0mBgIkV2xp6203Ecp6bpj5ZlieM4pLdj1atvQWUaNXEdS0yjJlLXB71+BVxpf3N9jA7gtYCcFpHTgb6+LsE5GqHX/rniwfprugbfWqhQ7x0ikvYax+yy3Rn03K/fOsD2AQCtQIAO5EB9r+X5VuAtFAoXOjo60mAi258ZAJA/WqtgtpVu0zSD7MSPyOQEktY90KKgusXJtm3qHwBAG2OKFWhje/fu/VoYhp2lUmmTptQ6jjNlNQUAkD9RlIhppkU9R6d7TCM1DjRLRPepZz8GAGg/BOhAi9Wvjky0SZuxumzWpk2bXvz5z38+cv78+Sl9nbVHM6soAJBPWmRQRCRJ4mn7oFuWFWgavNJgXLdFWZYlcRxLpVKRy5cvp23YAADtiSs40EIzpaHXajXZs2fP18+fv3hnFEeebdlVEZEojjzLsqqWZQVxHLtSS+Sdd95Je+RmU9yjKBqvXA0AyB3tDqB27969T8SQIAg6LcsKCgX/gmmaQbaWQv3Kebb2QRiGMjo6vhBPJwEAaF8E6ECOaDrj6dOnH/F9P63am8Tj1dijKEpXTPTxGzZskJGREQmCIB2oOY7TUJVqAEBr6DYkwzDk7Nmzj+jH9T6g13tVf03XAF+7dWhnAdu2ufYDQBsjQAdyIDsIm0x5nGyrk/2YyORATAdy5XJZq7+nz0MlXwDIr/pV7uz1XYPzTGePKa39srS7gD6fbdtXBfcAgPbB6B1osewgTVMZtZ/5mTNn0jZs2TZPIjKln7MO4LT1k23bBOcAkGPZ6362pZdpikRRLKbpTHlc9l6RnaSd6PwhURRJGIa0+AOANscIHpjD5ODIEsd2Ruo/XygULoRhmK5waJCdXflu5DWyj3UcJw3GZ2rB47qTNYWyA7L6gkIAgPzJXvOzK+lxXBPLmgzO9fquk7X68ezX6+dc153XvQcAkD/0QQdmoYOcTAubrt7e3sezj4nj2K1vhaOrGgAAAADQKOO+++6jkggwi2z6YRRFsm3btqdN0wzCMOx0HGdURGRwcPBxDch1JYM2ZwAAAADmgxR3YBaaLj65N9CUM2fOPKKFe7Ir7CJy1V5yAAAAAGgUATowh2zwnS3Qo/sCs0F5/eMBAAAAoFFskgVmkSTJVRV0s39mCt615Q0AAAAANIoAHWiQFn7LBt/sMQcAAADQLATowCxs276qrc1Mq+b1HyfFHQAAAMB8sAcdmEV931n9u74HLcE4AAAAgMViBR0AAAAAgBwgQAcAAAAAIAcI0AEAAAAAyAECdAAAAAAAcoAAHQAAAACAHCBABwAAAAAgBwjQAQAAAADIAQJ0AAAAAABygAAdAAAAAIAcIEAHAAAAACAHCNABAAAAAMgBAnQAAAAAAHKAAB0AAAAAgBwgQAcAAAAAIAcI0AEAAAAAyAECdAAAAAAAcoAAHQAAAACAHLANw2j1MQAAAAAAsOrZY2Nj32r1QQAAAAAAsNrZhULhx60+CAAAAAAAVjv2oAMAAAAAkAME6AAAAAAA5AABOgAAAAAAOUCADgAAAABADhCgAwAAAACQAwToAAAAAADkAAE6AAAAAAA5QIAOAAAAAEAOEKADAAAAAJADBOgAAAAAAOQAAToAAAAAADlAgA4AAAAAQA4QoAMAAAAAkAME6AAAAAAA5AABOgAAAAAAOUCADgAAAABADhCgAwAAAACQAwTowCwsy5JarSYiIoZhpH+bpim1Wu2qzwEAAADAQhGgA7OIomhKEF4flGtgniTJVR8naAcAAAAwHwToQINqtZokSTIlGDdNTiEAAAAAzWG3+gCAPDNNU5IkEZHxAL1+dXy6FHd9PCvoAAAAAOaD5T9gDtOlrtdqNYnj+KrUdn28BvMAAAAA0ChW0IFZ1AfaSZLItm3bTpummYRhaDuOE4mIDA4ObsuurGcDeQAAAABoBAE6MAsNsg3DkCRJZOvWracdx4n3798/qI/p7e3dll01133pBOcAAAAA5oMUd2AWGmRr8O267pTgXETEsqwkG6BrUK970QEAAACgEQTowBwmg+5Ywii06j9fLpcdx3HSoHwhFd7r0+HDMExX7cMwlCiKJI5jiaIorSQfBEE6CRDHcbr3PUkSqssDQM7pNbt+K5VlGRLHoYiM3xviOJ74uDXl8dl7hn4uCAIxTZMMLgBoY6S4Ay1Wq9XSgFonAyzLEsuy5Oabb5YkSab0WxeZrC5vGIaUy2W5fPmyxHE85XmiKBLb5hQHgDzKbqESmczYShJDDMOakpWln8/+WwPxbOcQx3EoUAoAbY7RO5AD2dWO7Ar86OjolAA9iqI0gBcZH5AFQTBlZV1ExHEc0VV9AED+1F+fsxOsjuNIFEXTBuL1NNDXx8ZxTJAOAG2MAB3IER1k3Xrrrac7Ozur589f7IziyLQtOxERMa3ItCwrsSwriePYlFoi77///k2maYrneWKaZpoSH0WROI7T6m8JADANTUsXEdm8efPp8X8bEgSBZVlWrVDwwziOjdOnT2/TAD37NXEcp9lWOklr27YEQcAELQC0MQJ0oIVmasVmGIY8++yzZ+f6+qefftoyTfOm8+fPSxAE6fM5jiOWZVGoDgBySle6dbX7+eefP1X/mO7u7p36GM2m0ntG9mMi45lTnZ2dcvHiRYJzAGhjVJICWiw72NI/juPEjXztuXPnbly3bt2pTZs2nTVNU2zbTldYtLAQACB/phYVtaadTY3j2KwvIqf/12u9psL7vi/r1q2bssoOAGg/rKADbeyZZ555S0Rkz549m23bTqu+6wCNfYgAkE+2babF4IIgmHY8lt1bXl8sTv+fXUl3XTf9GACgPbGCDuRAtt1OkiQSx/G8RlflctkZGxuTJEnEcRyxbZsBGgDkmBb2nG0rUpIkRjbLSkSm7EE3TVMcxxHTNKe046TVJgC0L67gQAvVarV0tVsr9U7sHZ/XuRmGoeH7fpraHoYhBeKw6ukqY9q+qmZIEMaS1AwRY7wTQravdH0AJCLppJc+RlcqLctKvyaOY4njeMp2FbaYoBGTq+OzP67+mq5BvQbkeu8QkbQCPGan53I2O6E+U4GtAgBagRR3oM099dRTluM4w1EUpRV9wzCUSqVCH3SsanpOiIwHzZZppYF1fcGt6WjLqjAM09VK3fObJEk6mDdNU0zT1OwXsSxLbNtmcI9FsyyrphlRo6Oj4jiO+L4vYRiKiKTvv61btw4Wi8Xguuuu+8AwjJtFRIaGhra19OBz7rbbbhvQbDXLsmpxHBtxHGunlNqpU6e2t/oYAaxOjN6BfAoaedDjjz/uJkliDA4Ofkpb7Wh6Y6FQSAdxwGpk2/aUINswa+K6riRJIkEQiOdO3gKnq9mgwY/+W//veV6a+VKpVKZdgddgHpjJ+Pvl6qyNLMuykmq1KoVCQVzXvSo7Q9+fSZKYWpNERAZ6e3sJzucQBIE1XeV8EZHdu3fvXO7jAQBFgA7kU6mhB5VKrsh4+qPv++J5ntRqNQnDUKrVKvsQsarpZJV2OFi3fqNs2rRJXNeVMAzlxPFj066ia6Cd/XqRybTi9evXy7p16yQIAnn33XelVBo/XfV15tpXDNRLkmTaJHfTNJOdO3cO9vf3bysUClKr1aRcLlNnpAlc151xH8qaNWsqy3ksAJDF6B1oY88888zopk2bRguFgkRRJNVqNU3FJb0dq53rummKu2aXaHr7XHvE9XEiMqWAY5Ik4vu+rF27Vrq6utLgfbJd1tT/A4tx4MCBga6urkqSJFKtVqfULUlrKzAZtCDDw6P+TJ8rjZXdbdu2DS7n8QCAIkAH5me6kVB52Y9iQnd397WnT59eXy6X0+rtGkgAq102ENfCblrxWvePz7YKqfvV4zhOv15E0iwVLdCltR+yfa31sUAjTNOccUbnypUrHZ/4xCdO6daMbCEzkekng+bbCWQ1KhT8GfeAHfiTPx5YzmMBgCwCdGB+pks9b1kq3MGDBz+6/vrrh3VfbbZfLkE6Vrv6ySoNyLOBdP3jszTIzlZ71sdp5fZssbiZnheYSSPvl4MHD56yLCu58847T4lImgmS/do4jqeM5yzL4o04B9OyuEkCyCUCdGB+cte7hpRaYHrZVWxNCZ6uddJMq+javqo+xd0wDLFte8o+YA3ONXCizRrmMp9r9rPPPns2CALrjjvuOKXvQZGrWwmicUEQsA8MQC4RoCPXdCCiA5Ds/zHugw8+6IzjWBzHSdNxdVUP7U/f+9nA0rIsAsAGaMszEZFaLRbDrIkYeg2Z2gddZX/Wep1Jn0NMEcOSpGZIUpsaFGm/9PrVdqxe9e8PkfH3krbkM007s4Vi7vfLgQMHBuI4Nk1TxDAmJ4wmnm/Gm6JeL+I4XvbaJJpdopNW2qM9Dxlelmm0/iAAYBqMIJBr2qqovgCTCCvG6sYbbxyu1WpSKpUkiqJ0L3oeBkBYnDiO00Axu286u4IGIJ+ydQ40EK9Wq2ndAr2H3XbbbQNWg+nWrutGW7ZsPRvHsfi+n05c+/7V+6n1c1EUieu6YppmWjthOSaQ9LVrtVra8jAIArEsS3x/xvpsALDqEaAj17Krh9l2R9P1LF6Nfuu3fssbGRlxHceRYrEotm1LGIbpHkW0t2y2iAbrOuimCBmQf7pybVmWeJ4nnuelq9gapMdxbBw8+KfT9uOu9+yzz541TTO54467TlQqFUmSRIPuq8ZzulpfrVZFZHzCQD+2HBk4OlksIumquV67KhW6mAHATAjQ0RaygYquOhCAilSrVbtcLjvZ9mpapZoMg/anE1LZ/ab6u+X9D+Sbnq+6eh5FUfq3TqQu5Dr9/PPPnxIRufPOO08VCgXtIjBlBV6ruLuumwbJmg6fXb1fSkEQpJPFjuOI4zgiImnXAwDA9AjQkWsaiGT3sOkeawJQkd///d8vXX/99aOe50m1WpVKpUIf9BVGB7jZIH26QmcA8iWKoikBsa5aO44jnudJrVYTx3GmTU+fy3e/+92zpVLJ27x580AYXv3lruvGN95449nNmzcP7Ny5c1BkPEAPgmDZ9qIXCgWp1WpSqVRk+/btp+68887jt99++8CNN954evPmzaeX/AAAoE0xgkeuaWq7yGSVZNLcJz300EMfKxQKYRiGUiwW0z1/2iuXVYr2pns2HcdJB7paDNCyLImi3DUVAJChQblej3fs2HEqjmOzUqk4GpiPjY15C3nuQ4cOnfjGN75xU7FYlHK57GQ/99xzz6UB8K5du26/6aabTruuG/f392/PFk9cSqVSST71qU+diOPYLJVK3qFDh07o5/r6+m5d8gMAgDZFgI62sH379h/HcWxalpV0dHQEIiLHjh27d7UHKHfccceHb7zxxv9s27ZUKpV0AsO2bbEsi0Jxbc4wDNm5c+erN9xww+Uoiszz5893Dg0Nfaa+vzeA/HFdV8IwTPddR1Ek9YHqYl2+fLlj+/btp65cuTJj1TV9vd7e3m062TdeOX7pJrh37NgxEMexUS6XnQMHDgzUf354eJgqcQAwAwJ05Nq2bdt+YllWEsexeeDAgQv68W9961vO3/t7f++/joyM+P39/Z9t5TG2UpIkxrZt2w77vr9uaGjoM5oKrcV40N6iKBLf94Pf/d3fDUVEfud3fifasGHD/3Xx4sXi8ePHP+N5C1p4A7AMwjBM09hN09QMmKbOKj///POnenp6tnd2dgZzPbZUKrlhGC5b5tl0gbkqFotzHi8ArFbsQceymqnYWxiGaXVZ0zRly5Ytr+7YsePHcVIz9+/ffykbnIuI/O7v/m749NNPl+M4NpdyL64Gu/oaWngnKwgCSwsBZb/HbCusbMCc7Qurn/N9f8re4kYHcd/85jdrv/3bvx0nSWLati21Wi0tRER6e/ur1WoSBIH99NNPi4jIb//2b8ff+c53KrfeeuvFz3/+//5ftmzZ8mq2DVv9uSUiU96D2eJUW7ZsefWOO+74m09+8pN/reefvm+zX7eaZX+24x+IRWqxRGFV1q7plI997GNp26js49l+szKYppkWcovjWEzbEtO2RMyaJDJ3FXTTisUwY0mSSKrVsoxPqDX/fXHgwIGBRp7Wdd0lK92evZ9PXLdyewPSe3Sjre0AYLmxgo6WqNVqsm3btp+IjPd1HR4eLujgwTTNJI5jc//+/Zdae5SN8Twv1sI7xWIx3QPu+77oaoVOPmhLHMMwxLbtNJgeHR0VkfGUSA3K5nMMpmkmlUpFLMsS13VZQV8hbNuW06dPf2b79u3/Z/bjjz32WE1Eqk899dT5j33sY//l/PnznceOHfuM4zjiuq6ITBaEMk1Tdu7c+RPXdaOOjo6gUCiEvu/HlmXVHnnkEXnqqacMy7JEC01lizKudlrkS38eSZKIbdty9913yz/4B/9AhoeH5fXXX5ePPvoo7fWs5x7nX/vT3/cdd9xxolKpOJZt1SqVimNZVuI4TixznCJBWHFsy4lc141rNZHxvdhj7lIc6/4/2j+4FM+7VMIwbHkAH4YhY2AAucTFCcsuO/DPrIxfac3RLF61WrW032upVBLbtuUTn/jE0XK57CZJYjiOE4uIJEliiog4jhMNDAx8No5jcRxHPvnJT/63MAytUqnk+b4fxnFsLmT1oaOjY0orn+yKKtqT7hN95JFHpv28BupPP/109frrr//PFy9e7KhUKm5HR0e1o6Mj6OzsDGzbrn3zm9+cMZSwLKsmMn5e6iq6vvZqz8LQLQS6imqappTLZenq6pINGzZIpVKRSqUi5XI5nRjLdlFY7TUy2p1mNFUqlWn3UWPh8jABOF1GHADkAQE62lbfv+hbu1yvNR60GGKa1lWjCsMwZOvWrT/2fT987bXX/sdbb731VRGR559//qPpnqu7u/vaW2655dXTp09/ulqtyoULFzpffPHF9xdyXN/61recIAisIAiscrksIpJuE6BIXPvTvsVzmQjgQ1nARJcOUjU4vyqte5XTLS6WZYnv+1Iul8U0TRkdHZVKpSIi4+2kLMtKJ1RM05Tl3OuLpWGaprb15GRoMtLLAWBm3HTQxgwZHBz8TKuP4sUXX3x///79ly5dvtJx992f/m+mZSfPPffcjIHSwYMHPzIMU+76xCf+5pOf/NTfLOY0/N3f/d1w/fr1lQ8++OBuXcXXnrus3rU/DZp1D/pSyO5bz9ZbWO2r5yKTKe7a2k5XyF3XFcuypFAoiG3bU2pVWJYl2S0DAPIpD6v4ADAdAnQsqaVcQbJMc8nvrvMp9vTCoX/74QcffrjmwJ/88YW5Hnvw4J9+9MEHH669eOlSx4svvrCg1XOR8T7og4ODG4eHh9N9r9p313GcOb4aebdce8GzQbmunOv7aDXLbhOJokiq1eqU8yyKojTNXYtCxnEstVotrQWA9qW/0yiKGCs1WR6yEnR7DwDkTcsvkMBC7Nu3T4IcFJmp97//+f/rvUYf+9L3/93b33vxzxYcnIuIvPDCCx/eeuutFzs7O0Vk6ooA6e3tT4PkmfagN4Pus9WtESJCkbMJ2mFC9+NbliUdHR1pporIeCE/13XFcZx0W0kURaS3rwiJ/q45GVYgzlEAeUWAjrYUBIHlOk6sleCXQx5v5k8++aRVKpWcG2644TVNr80GD2hv+p5b6hR33RYRBEGams0K8GQGg05eaJu6arWaPkaD8iAI0qrf+vNEe9PzLw8Vx1ca0zRbPukRRVH+buoAIKukSFw2fTNJRG6//bZTcRyb5XLZcV0nKpfLztq1aytxHJuWZSXH33xjZ9pqiDmMRcn2Aq/vk7qYFLcnnngiFpHhvr6+tTqA1hU/HTDrx5UW/NFAdr4rhOMPz9f9fOLnEPf09MSmaUqtVhuvKO2Mt1sLoyQNLJIkmdKvmSJyk6YLpnR7gwawYRiK4zjp37q6Xf/+zn7d3EFakgZ1STK+Yq797OM4FtNyljzQMwyjFgSBeJ4nhmGkgXm1WhXbbv9bxOTEmimWYYophiS1SILqWLp3PPv7mkhpTn/HmrauK+QarOvvP3vd0f/ncTIPCzF+X9FOHJhKzx/dCpI9l/KQwp5tj5htdTp5L+Q8xcLp+0s7d2QLhU7XSWc+Wyb1+fX+Mn7PGc92cxxn4lwbrzWUvfespOKu0/289Ge+devWn1iWlVQqFcf3/TAIAlsznYrFYvUnP/nJ/+h5Xjp+0haomg3XDhPo7T/6mkN24JUkidx0081ny+Wy8/zzB09N9/je3t5tWoW3HX6Bq92VK1cKW7dufdU0zcR13ejEiROfE5msZK59oPX3L7J8+3qXk2XZyebNm191HCcSEenv7//s2NiYiGGlhcY0RVdvKFoAazXTSRz9uWQndm677bajQRDYrutGcRybcRybp0+f/kz2hqyPz95E5nsD1uczjMnsBx1EBkGg/zdE5uq6vHDZImhhGIplWeJ5XtvvQ88G19oibXR0VDZs2CDbtm2Td955R+I4lkKhIHEcpxMkvu9LtVpNg/IgCNK0db3JU+MByD+dZAzDMO2soNdY9qBjMXQMVT/54zhOOpmfNd+JW91+prKZkePj2fHJfX1t/bxOEqz0ieL9+/dfmu7jvb296wuFQjo2y27Z03hgvpMlrbDiA3Q9gXQmy3Xd6MCBP5mxn2kYhlYYJeJ7utK4bIeKBfje976X7uHu6+tbq4NsncnPBjw6c6aDdpF8pq0vxP79f5ReqHp7e9drwKXBpgafej6slO97sbLpyXqd0NXRcrnsZlvl7dq162O33nrrTyzLSsIwtGu1mpw9e/bTi3l9DQitiZXyIAikUqmIYYzf8NetWyefuOvO/zJbH/PFCsPQ1Ju7BuXa97vd3yeaKTLRy1puuOEG+exnPyu33HKLXHPNNXL48OH05y4y/n7Q7gee50mlUhHHcdLzplAopIOulTbJByyn5Vhhj6IovbZnt39plgy1BbAY2bot27Zt+7GOC5IkMSzLqp09e/bTi7lPZNudjmd/JrJt29ZXRfT+U5M1a9aUwzC0SqWS9/bbb9+dzfpbrRmS5XLZyS626Jhfz/12yXJb8QG6vrl1xiSO41lvCr7vh5/+9KePnzx58uPDw8Pi+/6yHCcWb2KLQprKMvGxKWl3IpOrlu2S5jJfQRDY1Wo1m2qYfu86MaHf+0r8/ucj20ZrmjZjU+5uhw4d+jD7/76+f7F269atPxkaGvrMTCnyczFNW2o1SXtr33777T92HDdev379WKHgx6Zp1payQJyIiG3bNQ1M6/ugt/v7I5u6b5qmbNq0Se655x5xXVcuXbokURSJ7/vpuVAoFKRarcrY2Jj4vi+2badt1DSQ1/3n1HkA8s33fSmXyyIymeKaLeBYqVRIg8GCZVPL4zg2Dx48mE7o9/T0bLztttuOxnFsnjp16rMLCQizq+Jbtmx51TStpFDww2effXa4/rHd3d3X6mu0SwA6H/ULBrNN8Fm2UzNMW+KwOmXsn12waofxzYoP0LP7kRtJ+XjuuedOf/WrX/345s2bByzLSk6cOLFzmQ4Vi1Qqlb0bbrjpZ77vh3ESm0mcGI5jxXEcmzqTmQ1Ks/tIVxLDMGT79u0/SZLEnJiUMlzXjc+cOTOlZ3zeL07LIdszXldZRCZnw2f72uee+zdXenp6Ni5qpdkcn9mNa4nc83+7579u3Lix/Oijjy7suRYoSRLZtm3bT4aGhj6jNRrq91m3K9/3p2QD6PdVLpelWq2mn9OsgWq1Kl1dXaLpcVrTwTCMdBJHUwp14A8gnzRDSVOAtRaLTrwVCoVw7mcBphdFUVozpt6BAwcuiIxnNOrHsnvKGxkzZNOyTdNMDhz4kxlb+MZxbGQn2FeqRhaWXNeNbrzxhtdcx46TJDHfeuutT+vPJtu1Ju/jmxUfoGd/AaZpSkdHR3WWh4uIyPe+973jIiK7d+8mOG8jM/UT7+7uvvb2228/evLkyc/p3pyV3EYqO4urenp6NtYXM8NkNoUGaVu3bv2JiFw1Gz6f55oPTbuaSGevLHdwLiLyW7/1W7UHH3zQye5jq9VqEoZh29cosG1bwjCcssVDz4OOjg7p6OiQjz76SHzfF8/zZHR0NN17XqlUxHXdKXvWoihKn8PzvBZ/dwBmUy6X0207cRyL67qyc+fOU0EQWGEY2iMjI5zEWLDsxO9c2bkLYdt2+t6daztGEAS2rpxniwGvJI1OPuz/oz9Mt3zu3r37WpGpC3LtMoGx4gN0PXl0D/Jcq2JZruvme3oFDTl48OBHfX19a+tP0JWYBjQbXR1VK7FY3nyVy2XxfV8+9alP/bcwDK36fedzadY+yjCIpVKp2iKyZCs6+/btk+wEwKFDL/hdXZ3eV77ylSsikg4EtKDaSnhvlMtlqdVq4rpuuhfV8zwZGxuT0dFRiaJIXNcV13VldHRUOjo60oDetm2pVqvi+77ccMMNr/m+H65du7b83//7f//7URTlfvYdWO08zxPXdUW3fE1U2TYPHDgwYx0ioFFagHCue+VCV7WzhWjnmgAoFAqhblXTr1vJ49tGxyfZrIJsJnU7LNAta4C+Y8eOhi6K/f3925v1mtlfyNatWwfjOG74HTs8PMwG9BWiUqm42QqbjV5YV4pKpeLs2LHjxyLjFd51NbCZ+2j1+bP6+/s/27QXWAKf/vSn/6ZUKnnnz5/vzBYcXC7ZApaOYy/pHcPzPON//3f/rrhu3fqOWq0mn/4fPnP35UsX3hSRK9Vq1XFdV8IwXFE3dh2ca7GocrmcpiWuX79eHn30UbEsS37+85/LCy+8kKa2a/DteZ6mvtuHDh368IUXXvB/4Rd+QdatWyeVSqXF3x3Q3nRM2MwxX5YuzGjNmSiKZHR01F2K18Lqo8UGkyQR13Wj+X7tXONPLUjaSCabaZpJthjySplkr7djx44fa1edRh5vmmYyU4Ce93HOkgfo+maZ+Lcx18xlX1/frYZhpMV9FjvLoYOtHTt2DFQqFefQoUMnGv1a3/fDvKcFawsg27bTgWcQBOK6bsPHHEWReJ4nYRim+2nqe4sv1Ez9oJf7xDBNe+JbMcUwJgukzXUYSSJi2+M9J++8866/GRkZactJmxdffPF9EZGHH354jW3baXXqxb6v9esnVieS55577op+bteu3R/bsmXLq6dPn/70dK0tmrFXSt//Wujt2o9d97OJmeQkDII5r2/Dw6P+oUPPfzjX4+aSTZWf1/dXMyWoRpp+NecP4+mnnxYRkbkKxz3zzDPiOI65fv36gud5tu/77o4dO2TLli2f1n3XUoulWq2GIiKu64b6cc00acY5mv0Z6LVAr1PaZaFarYplWenf+qdarS46xT67Z3zr1q2ybt26tI9sEATS2dkpGzZskLfeeistKKmTJlrNfaI2QSIisn379us2bNiQVn1v9y0Aq5Vet/S9oG0TRUyZch7UgvHK/VFIRcAmO3hwvNVtb2/vtqV6DR2IjwfohsQ1EcPM96Ac+aHjX90qJTI+6asTuGE8vt3JcmypVKcvOBjHsan3Cb2/NDquzha5TpLarDebSiVwtm/f8eM4ScxyuewUCoVwqdtQhWFk+QU/jKPYDMLA6ix2VEulkuc4Tjw4OPiZxY4hspMMOl4QmdzfPx9ae6JZY5vlsOQBeqFQSGeYGhEEgRXHcZpquFgacMZxbMwnOG8X2b6eOhgVGX9jN7KHVGeW9SaWLaikF5OVII4jU0/KIAjSVN4omv09VqsZ6f7Vy5cvd7z44p8t+yprM42MjPjZlmKLTdPVyrjTnd+HDj3/YXd397WLeoE56HtUA+SCXwgP/Mkfz/vi3SqaTj5TT96nn356SjCu//7ud79rrF23zr9m48ZO0xwfcSZJUovjOBER2bFjh7ljx45Pj7dsm9qqRQPl5bhJZVPudAJQj+Pmm2+Wa665Ro4fP57uFRURqVaraVC9WEmSyNjYmNx9993ya7/2a2nLtCtXrkhXV5cEQSAjIyNSrVals7Nzys1bBwYTEwqJiMiVK1fGOjo6pgzS0H70d7xt27ZBy7JqpVLJjaLIdF0vtm07cRwnFhGpBGXHcdzoyuXLhZYeMBZEFyx0oF+tBuL7PoXh0BDHcWTr1q0/tiwrmdjjbZqmmcRxbBqGIaZtJVKriRiGhEHQ0km8mWowtUJvb+/6Zk3wi0jaJq1arS7JXv+8WvIAfWxsLF1Bb+TC6LpurH2Jsy0GFkrTeFfqL1UrT2tRJ5H6KodzTYwY6axSthplZmJj6Q5+Ge3cueOjHTu2/6djx47/gud5adA9dwwwmYJ8yy03LXqltdV0QkZEmvK71QmiidTBZS+4owG6vv/jpL3O83K5LDu2b3s1CEJLV9Cze8U1IH/22WeNjRuv6Vi7dm2HZdvGtu07ZPPmLXfH0fhKbn2XCq0+7jhOmuYpIlc9ZqnpNUSPQycjyuWydHR0TGmJmJ3ombhmL/r1sxNRvu9LpVKROI6lq6sr3e6i57cO5A3DENd1xff9dFW9Wq3aIiKu61qO46TvebSvHTt2DARBYB04cOBUq48FSyPbsaVWW/x4EqtLEARSKpU8zUBEY8IwtJtR46i+6N1EnZy2GuMtxpIH6JZlied5Ui6XGy6o5Pu+VKtVKRQKaSrhQml7nJVa8E2D8ex+Cn0zjw9y554s1pVzHUTrn2wwt9hjnOm4l8tEwFP7jd/4WrrPNAgCMYy5insY2UF7/qtKzMF13biZ7SU0RdQ0TbFtuyX7QLIB53xqTOSB53niOE508OCfpoXpHn30UXnmmWdkw8aNheuv37RWROS22z8uN998yyc1YMze/OoL/2XVt5jMrqQvR5GU7Gtkr0saEI+fg+PHFoahWJYlrju+RbQZWyCyFfr1XmBZljiOI6Ojo2IYRlrBPQgCue6666RarUoYhhKGoWzduvXVNWvWlC9dutShz6c/u7Vr18qlS5fmOgTk2PPPP09wvoJp5fbxMU4sd935iVNXrlxpy21qWH6u60qxWJyz8xOmyu75Xgyd0M9mSrZLenozLHmAnt1v0cjMx6VLlzr0l1oul5sSIE5U3F2Rv9VsoGvbdtomKphItzGs2b9tx3Ji7Zftum400fv9c3oyNHMFvZUn1kMP7frY+CSN8ZORkWGzv3/g0+P7YOe6gEzuHarVkrUicmX2x+efVqnWCZnF0IBvIvhZ9iXF7E3Atu22m4iLwqrEcTTluviXf/mXH7v99tslDMP42ms2fjLdux1OVCI2DTEn/tTM8W1v2WC9fh+8yPKvnCutDaCrzRPFdKSjoyNd1db94Nq6LIqitMVZs47VNM10a4v2PHddN50o0GO5cuVKOhCwLEs6OzurzzzzzKiIjIqIBEEQu64r5XJZLl++3JRjA7B0svvQ4zg2v/fii8dbfUxoD2EYS6VSnXZvOWY2V0u4RukWFT1/RcaLvjXjudvBkgfougLu+35Dv7T169ePXbhwQQqFQlOq5OpK6QLl/o2g6e1Jkshtt9324yAI7Pm0iarX09OzMbtKt1RB9bZt234ShstXeOeFFw6l6ekPPbTrY1u33vqa47hxGFZnPQbTtGpJkhhRFJlxHJsPPvhPr2/nfehJkpjZ98xiaTGtMAylUpm+SMpSa2a2x0Js27btJ6dPn/7MQr52uuviL/7iL34oIvLSSy+tOXv27I937Njx2WyxxTiOJQiCtJDVdIUYdetLNrNGg3d93HL8vPQYdR+6yGRlZdM0ZXh4OC0Gp33K9X3ZjEwPLUjX0dGRprv7vi/lcllEJouY3nnnnfLVr35V/v2///dpRpHI5ERnVhiG6fONjIws6viwvFbT6gvGf99a08KyLKlUygRbaNhENfR8VojOuew9fzHPISJTMv9IcW8ircTe6I3RsqykVCqJ53lNKRKkqzeFQiHs7u7eqZVDG1Re9AEssezMkojIYoJzERHXdSOt7t2MaoezpakeOnSoJXu6s8H6aqOBrK4kLvYc0wBxIgWpZTcyfb8u98X74MGDH/X09Gxc6NfPNgn5wAMPDL/88svrT5w4cVREZMeOHZ/TwNtxxseZ9ZMs2f9Pt5IusrxBir7H9H2mFbPL5bLcfPPNYlmW9Pf3p8etHSmatXre0dEh58+flytXrqTXM73pO44jY2NjkiSJrFu3Tm699Va5fPmy6B7zicq9U+6RlUolEBkP0ldKfY7V7MEHH/r4iy++wIrqCpbNKsppMx60yFz3Qib0FkazcpvwPOnWvGZseWs3y9JmTds6NerjH//4oGVZtcHBwe2LXeVLkkRuueWWswscuC9uA/wy0Ddvs964w8PDBV1VWm0nw2qhq6/NSHGvVqviuq6uULQk4yRbxb3dZFt4TefLX/7yJRGRH/7wh2uHhoZ+LCKyY8eOz+o2hew5Wp/xUr8PLLvSPlPl/WbLtomZmCgVEUlXrbdt2yZvvPGGvPvuu1IsFtNjq6+rsVDValUcx5GOjo60SJzI+MRxqVRKJ3Cr1aqUSiUxDEM6OjokSRIJw1DWrl07ln2+crkcaEq+7/tSKpUWdXxoDu2nPV+mxerYSqY1JrTeDEOa1WvHjh0/nu/XWJadlMtldymOZyUzTTPJFp1eKJ3Q18y6iVpQq6Y665IH6LqPeeIHPWeQ/Oyzz54VEdm9e/fOZrz+TTfddLZYLFafe+650/P92iDIf+9THXAvtpiechwn1h7EWsV4sceXbdmms9mr6STLE9f1ou3bt//Edd3o+PHjn1tsAOQ4jmzZsuUnSZKYlu0se4Cu7y2tBh5H0bIPwXzfD3WPs6aN63mZ7fstMpmypXutJ66Nc55kX/nKV66IiGRX1G+77bbPZft2i0j9Xq0pN8j6wozL0UIxO0GQ3YsuMj5R1NXVlR6/ThpohkczJgj1e9QJjezzaxaCPmai0GHaDWMiPXbKPdK2bUt/5tNVxs/KtqvMPkZfrxkpgKud/nzjODYOHDiwoCAdC5edBKzP2JnPXtHpVseasWKm5/t45pi5kDoptfr6HatxJa9d6X1F6w8spH92s2TbGTeriFp+mXLL5i2vWqaRDA0NLWj7n4ikhWPjOJY777zzaKVSdSuVYF7bVCqVimOaprium07Ca1HYvJ/HSx6gL5RlWYn+chZj3bp1Y88888xbC/navP/yRMYHuYVCQVulLXq0VygUAh2A6t4trBz79//RJRGR7u7ua5tVJTsIAuv/3969xcZx5Xme/2eciMjITIqyrHZBvsq8SyrZZRtqwwss0G+9/dDwjhaNqocCaqtgg7tcEBbc9WID5Sc1IAOGIUgQhjMcaa31oLtRPcZ40I/dTzuYhgWCkFGoti1Rkq/l7Sqr1ZJIJiMyIk/kPjBPKEjzkiSTzJPk9wMIFuUkGUxmRsTvXP7/y5cvd2TbgOmvLbJ4ASyVSjve41Yplf7gBz/4zf79+8M4jt0vv/zyRJIkUiwWsyXeZrbadV0ZHByc0lo7URR5G60Qa2bUP/zwwwNffPHFtOM4zuHDh18wz4EJu7v74t898r8LM0BgrmtmdgCbZ+ob7KV9iWidGUgzg5Xz89WNtgKd35YDw46IokgqlYporWUnax7lmeXeWusldWN28/V5cvI/3BFZrGm1la+Tf77iOHbz3W5aValUalprmZ+fX3Ld7YaBNmvTl+/7uh1FjGZnZzfdUqMbKkLnR+XacZNSrVaL/f390998882JnWrFhJ2ntS7ke1BvVqe3QsRxnLXOqtVqonVrrRzb5fTp0ypf5dtckMySbnOByS/ZVkqlExMTW+rPZYL6r3/9697r169f8X3fHRoaOmFqC4isPrOLnZMP4KZQVZIkUq/XpV6v8/vZIrPSohMDc7CfOR8u1jQScd0Nb8Oqi3Suhge2xvf9rPhoEAQdOUeYlSQrbTXD2vIrEltt071cHMfu0aNHr3zyyScvmbyUJIm0Ywn+drM2oIu0Z4lTb2/vpsvs2v7LE1l8AZulku1YNv7ee+99Nzo6etBUWuZitDu1sqy6Fc297B0byDLFxKIokieffPI3vr+zrd7eeuutJT97mqaOWdVSKBQkDMNsVtvMosZx3Lbz7k9+8pNZEZG/+7u/6/3tb3/7ked5anh4+MV2VenH1pltXrVabckNh7lZwOaZe4Tl56APPvigT0QkXeUJzrZd+L77v508eWvbDxQdYboBLXa+SKRWo6X1XmJWgoqIlMvljtSUUkql+Yk0tC5f1HWz7dUuXbp0+9SpU70mkOe7/uS33NnI2oAex7FqRzicm5vb9DsiTdPC4ODg1M2bN1/c8oFsEzND186l6L7v101Rhk61rsL2a8ce2E4v0TW1F3zflx/84Adz7777bkerdpnAEMexxHGcDSCYYo4isumR4LX8+Mc/nhVZXPo+MzOTFZPjhqCzTDFG3/ezyu8mnPO72TrP80wAW3KzkCSJHhkZOVosrryi2Tz3165dm/nggw/60jRNPc9zTxLWdxVTFLLRaMixYz+cbkhhw2+6blgKi5WZ+i8r1RPZKWZla75AK6+p1pmi1VsRhqGXb99qtkba/juwet9WO0JnpVJZWP9RK3vvvf/b+nZc+YJFy1sCbUVzVqJdXw6WSdPUacfJaStLj9pBKZWF4IWFhY5XW02SRJXLZfE8TyqVSrbfyQxkOM6mChW17OTJk3dPnjx5V2udXrt27crNmzc3XLkW7WP6MJtZPJGst25WOwGbl9vbv+QcFASBVyqVsvde/o8pzqi1luGmI0eOHNFapx988EHff/tvfz/YqZ8H7WUGyJrSiX//7/+tXV/b9pt7PAhjItLWlWsbobV28hMZFBrcGNd1zfVy0ylda+3ki+aaVW22s3YG3fd9Hcfxlmf47t27WxaR2fYclX3yBYiCIGjLEh6ttWOWllBleHdyHCdtV0Df7NKjdrIl7DiOk8ZxnBUhKRaLSyq2pmm6I1sC8lXfTUgfHBy0diXQbuX7vszNzcnQ0NDHQRAk8/PzRaVU2tPTU/vss89e6vTxdbt8h4S8OI7r+ZvgfBXupa0JG2LmKY4ePTqcpqlcu3Z95r/+1w8HlFKFRiGVf/fyv6M6fJfKd0xo5wQGuoeZKe3UHvRCoSB9fX1Xv/rqqxeW16NhFdX68q1aN8v3/XrW6adZNNLzPOuff2tPWO2qyvrQQwc2PYNuDA4OTomI3Lhxw7obXLO3pd17GY8fP/5Pc3NzpS+//PKFdn7dzfSiRPv5vl9vx9Kher3e8ZZ5ZhVJp/aY5fm+r2u1mlQqFanVatkeJ7PfaacLg+Wrvudn0wcGBqw7l+1GcRxLuVyWkZGR22+88UZ2NzA2NnZgeRs8bFyhUFixg4lSyslfE5c/z+bjRiOVQqEhjUYh2y72wx8eG240CpIkiXz+xY2b/+WD/9InIuL7RfW/vvxy14d10zP+xo0b27JSYHBw8KbWumBDZf38zXi5XGYDes5K92I23uNuhdlrLNK5FQ8XL168/corrzwi8qDtmzk2rM1sCTt69OiVKIq2tEJyYGDgShzH7s2bN0+YlTW2TOysxtqALtKePr3L96ZtxNjY2AFTbfm1117rHRoamvrss89edF032/vW6T3aZva8nTPd5mceHx9X/f39077v1z/99NOXzD7afE/zVo/v6aefvloqlWKttWO+/htvvBG8/fbbUdsOHC0zS362SiklWz1xbpW5CDeXuHd0D3ocx8rsLzbPbzNAZMstt3JO2iwT1EVEPvjgg/0zMzNXREQOHDhQEVl8PRw6dOg3hUJB/uVf/uVH+ZH+5X3K8/vp87MB5gZo+V6vNE3F932JokiGhoam79+/X9ZaOz/96U+/un79+v9i+pyKSHbR1FpnFXi3YmBgYCoMQ29gYOC7GzduPLKwsFDzPE9prdOhoaGXTBcCc54yH69WINNZlAt4je/1lzf/bmitpaenpyAi2T8qpdJ23KAtrwzcHDDLCtLlB2/zLfhyxyFJkiwpZGhmpc3vdSvM9ivzHJn+s+VyWebn57PXkud52WBW/r3TynO0maWKD34u1TzOBzPsD9ohiRx+6unBxQrgjnz66aczH3zwQZ/v++rlLg3qFy9enBERGf0/RgeHhodvSvP5vXHjxmC+uvSD9/7i5+VfB0v//+ID+vsHvlDKSR1HNZIkUf/pPy1+n1at9DprR6Ayr+nFuiAbXyJrtk6s1Ou9He+P7Wbef/ljVkrJyMjIlSiK/IsXL2Ztq8bGxg489thjvzGtP5VSaRzHbn4AvlqtFn/3u989b77WVn9+pZTEcSzFYlFqtVr29bTWUi6XJQzDrH6H53lSq9UkCAKJ47ile29z/Wme0zv2yzLti83zb34mc+0z5+X8udpMoKx0fdkrzFbbxRZrFzfcYs0wmWN0dPTgo48++tt79+49Mzc3J77f8V2Ra7I6oHdavhXS+fPnZ0dHRw8Wi8VsJqzT4Xy7Xbhw4b6IyPj4+P7lF+hWmRNQqVSKzdczCOfYbVzXbbium91s2LhFxCx/FxH58MMPnb/927/t+Zu/+Zv/T0TkV7/6ld9oNH6j1GI7om+//fZ5027Rdd1ssMGEGN/3s5tX87Oac4W5yXjooYeuKaXSJ598cuHQoUOzk5OTd0QWK88HQTA9MjJyz3Xdg7/73e+eNysM2nluvXz5sqklkl3g//7v//7gN998c7VardaUUoWenp7irVu3bh8+fPgRz/P0zZs3TzSP/3u/QLNMrlXNMLPkpKm1dtqxD3Gl4GB+F77vZz2AzTXr6aefnkqSxI3jWNXrdUdExHXd1HGc9Ouvv36+uQWjbUXsTDgw180nnnjii+brRotkIUAlSeI2j6HPVNtt9Sa8+X2+90Ru5PiXP9Y8r5VKReI4Ntd7R0QkDEO7p11aMPkfJ7MBhtHR0UEzq661LszMzAw8GMgxwe7BQJzZUjA8PHDTnCeaA++bLbDX8S1Su9VKr2uRxd/X8sDTSuvP119/vefrr782bcu2vI/XDA6aMKqUkuPHj/+PJEnU3NxcsG/fvsjsPfZ9X4dh6Jlzs+u61lfhNrTWjhkMdV03+7nXYgZczXtuL4Z00yKvXas0Jycn77z22mu933zzjVQqFWbQdxPf9+tmdsXcyOyVNjn5m7/8v6130kiSRHzf71iBDmAnaa0LfX19099+++2JarVqZUDPy8+s/8M//MOh5557Lnz44Yd//5d/+Zdy+vRp1dPTc2V2drZUq9W83//+98eKxWI28GBG/Pv6+qZFFsOWyGIxnjAMvTiOvUOHDt17/PHHZ998883GuXPnCvv37y+KSCLyoPL8yy+/LK+88kpDRLKBAPP3rVptv//LL798Z/m//dmf/ZmIyHdjY2MHzLnNBMk8M4CwkUJvK50n21UDYvnXN2E9CAL51a9+JfV6XeI4liiK5Le//e29U6dOfe9gRkdHD/q+n93w5lvCbYXruhKGYbY6IQiC5MKFC1+s9NjXX3/9KRHJVqbtxPV1rUES0ybR8zy5devWzSRJ6j/+8Y+/2tYD6oDJyQdh/ZVXXhk+fvz4jOM4qZk9vn79+rD5PQwODt5q1gdSYRh6ly9fvtaGQ9h0K1y0rh17nqMo8sx7uR2B0VRYN/vEkySRubm5oDmI+73aUWNjYwdEpGuqcBtaa8dc25avFsuvPjPnI/PHDGw2r7Xd8cO2kVld5ThO20YnoijyfN+XarXKDPoWWJd84zh2zUhffi/Jbrd8FmkjVSib4Ty7eQd2s/fee++70dHRg48//vj0F198caKbRr3/9E//9Pf5j59//vmHv/zyyzvj4+P3RURef/31u999911vvV5XpVKpViqVsnTayuxLMxiuuGpGa10YGhqaMnsgly+h3awoijbcisLzPG1W/qw0MzszMzOltU6PHj26bpE3c1O82hLedr0+8jd2ZimlqV5dLBalVCrJgQMHJI7jR/7xH//RMZ/z8MMPV06cOHErDEPPhPP8ioitXuPMzbx5Ptf6fVSrVd/8zneygNJa17Jbt27NmBZsuzGcL3fp0qUlS9N/8YtfHBkcHLzpeV49TVMnDEPvwoUL7V7eb3855S6V3wKT/+9maa0dc16p1Wpt6bSU70vd/HjVk77pKW4mytrZXng7+b5ff+yxx37zyCOPzM3NzQU3btw4sbCwsGKnpEKhIMPDw1fiOHaVUmlz9j2N471X5ND8nrdSwX0lSinp6enJ2vTayuZf+JaLu7VbqVRK8vstzd6RvWClEb5WbqDacZMNdJPJyck7P/vZzw4dO3bso08++eR/6vTxbNaf//mfL1kCefbs2XkRmd+O73X58uXvzFYaEwrbMTuymaVxaZoWVlvG/pOf/GRWJNvHP7WwsBCLyP+81tdb6edo5x70/AxMvluAyIP92WZv+aOPPvq8+VhrLbdv3/5YRCSOY8883ixxb8cAtJk1yu21XPWLxnHs5nvEd/L6evPmzZsiIs395ivO+O8F7733XjtmyGGhn//85z/Ibf9pSaVSqS0P1FthtsCYmWXf99fsRpRfiVksFruiVZZItl30vojI2NiYb2bGRZZeH3LZwjFbwYyf/ex/P7SDh2yFxdoR7Q3RpVIpCcMwa99mM5sDunVDG829ctkvtlgsWr+HoZ2Wj8Zu5POYQcde8v777/9+fHx8f6ePo9vkZ87bERI3U0na7A9vLrNe8Q7Q7OP/67/+68rIyMj/e/v27X1fffXV9zperFbgp1170PNbAvLt/PJF7/IrvpY/xuyrVkppz/OyZaYmqG91EMEMZJsb8X379q1ad6Snp6eWX7pqCtVt1vXr12fMzzc4OLhixfLlz//Nmzdvaq1TEZG/+Iu/2LPBHLtT/pyz0XAusji7nd8X3c4VNvkicasxq7aiKLJ+efJa4jg2BWOXnJNFVr+/fv/9/+f3K/6PXSxNUykWi239mtVqtWgKf9o+wGNzQLdOuVyOS6WSiCy+wUwVxt1uebjOL6Vc74Rqqlba0HIF2ElxHLv5ZdtY32YHAVez0h7y9ZhllI7jrLtE/qc//WlVROSVV17Zt9Hv046fcaWq0vlZATMLnZ9Vz3vooYcqIiJzc3Oler0ujuNkN8qmmNFWj0/kQZvBWq226vOZHxjZ6hL3fLj+8MMPB8yM+EY/F9gNlheR3CytdcHsGzfni60y5y0zQLjaoKjIgwKYppNSN06Qmf3oIkuLfJqPzWM6doAWMa+Ndk7wlcvlmqmNZTsC+gYsLCz4piXEXgjmK9nojdNO7iUEbDI5OXlnbGzsACG9dfnQulqrs43Y7Lmnue9tyzdKw8PDUyt9DaVU2o5z4/IbbxPQzT7u5X/yj3ccR/71X/91TkSkt7c3DMNQRB4UbmpXG1GzbL2vr+/WWs+nUirNDyK0a3vUyZMnN1tdHOhq+XNMu+7D8nUitirfVjMIAomiaM1B0SiKPBPabGhzvFlm9a05/uXtMrEoCAKpVqtrDtpsVJIkyrzubH/9OENDQzePHTt27ciRIzNPP/30F2b5Sqt9rtf9Bs2vs5knopWLc74ojvk4//+2YyTKLIvYiTeSeQ7yBXuW91neKeb753sfo1sVpB01Duv1upTL5dpa38dxXElTkTSVJftb2/H6NWHE1r1EExMTd+M4do8cOXLF3CwxOr46c15rx/JvEdlU5ds4jt1cu7GW3iVJkqjlLc/yewlfe+21FdusbZVpNbS8LohZzi4iS2bPTfjOfeyIiNTrdfXMM8/809DQ0JWhoaGpvr6+6SNHjkxt9fgOHz78+dGjR2cGBwdngiBIJiYmbp05c6a00mMdx8kGLZZXcF8+y2ReG/V6fdVq++gOK233aNe9hVkR0twys2e32S2vUyEi8otf/OIHG/06WmunnefnfNFlE5jW+j35vl8339/8d60/5j6juZLTmpmi/Mqm/ICpOebd8lo1A9FmQMecr1vt0FGv181KrrYlaVP/ZaUCfe2W72O/fNC8FW6+d+Vrr712+Pnnn/8siiIvjmP1xRdf9G31TWhuHppLUVp+0Sml0lZHOFaqUGku5u0ceTHVffM3ONstiiJxHEeCIBDf96VWq2U92AnJ2KwkSdwgCCRJ1sjWLSgWi3Lv3r2yrNASRUSkVqupwcGBKaVUGkWRf+vWzRfaWaU5iqJsr6ytF7VLly7d/uUvf1n5oz/6o0/v3bt3jDBhtyAIEhN8W31NmRsRkaXXodWK1LVrBr2F41pyk2AGs5fvvfv1r3/9zfLPHR0dPbiV7z00NHQ1CALn7Nmzf8j/+5tvvhmucqwNkcVBhIWFhSV9lle6touIlEol0VpLHMd2T4WgIxqNRlYziFavD9y4cePFJ5988uNOH8dm1Ot18TyvpSX2JhQqpThHdEAYhp7ZhuC6rpRKJUnTVObn5yUIgpbaNJfL5ba2WTMDgu1YobeeOI6XDCbn731bmaRacsI6f/581kZkfHy870c/+tFnm2lTk9dsEyCy2Eqj5Q0jSqlGK6Msy/sGLi/K086b9uXfo12rDNZSqVSkUCjI/Py8NBoNMXvgd+LFhd3LcZz0sccevfrVV19+r7DVRjRnGlcNnP/5P7+fFTYZHf0/D/7whz+8ItK+PVae5+nmTKXVb4Z33323OjY25t++fVvCMNz+oVtsWrVaLQ4ODk7dunXrxc0O8K5WHG6nrdQ6zVRVX2+AoA3XzvrZs2fXbb9nVKtVP4oiqVQqS1qzGSsdb24Au/s2o2LbmSAXRavWJkQXUUo1zADjRmogbddqWqytp6enVi6XpV6vS71el2q1KqVSKbsOrVdDoFQqyezsbFuzTn4wfbvlM1sYhmKKjLfaqnvVEcULFy5sS6GUM2fOFN58881171w2cxO7vD93oVCQarValDa1BtJaF/JP6E7MgJiRJs/zsuWJSZLseK9Y7C6Tk//xztjY/3Vgq1+nuUStpRv5ycn/cGf9R+1ux44du9LpY8DaLl26dPvVV199JEmSlvuo5wv/5K02a6e1dnbq/J2/GTHHeO3atY8cxynUarUNt6HbLpVKJX7uuedmRESuX78+3Nx7uOQxZvXawMDALTPj3rwuc/ON7zH3T0qpNTsIoHsMDQ1NJ0migiBI1gvdcRyrAwcOLFSr1aKtK+x2syiK/CiKpFAoZG3xzN/N1pO1mO3R7Z6AabXI9VaVy2WJokhM7bJSqST1ej0L6uvZ8SU/rYRzkcVRjoGBgZaLK+X32+Vn1DfTB3c1ZpnFSjP126WnpyebJSgUCmIK+QRBILVabUf2UWB3Umr1nsTrYWBo4yYmJu6eOnWqlxl0+zmOkz7zzDMftbr3LX/dyV+L1rqB3KkaJl9++eW0iIjWOlVKOVrr1PM8dfLkyTVnt3f6hvbs2bNfi4j8/Oc/P5IkifT09Egcx0v2nufPO/ntecBKKpWKiIgMDg5O1et11eoEEex07ty5FbfStaAtk3TYGMdx0pGRkalPPvnkxSAIJAgCieO45bpBtVpNKpVK27en5Pb6t/PLfk+1WpVisSim731+JU8rId3aPTkTExN3x8fH92+kAnL+Qj44ODjVLGjRGB0dPTg5Obnl2TtzA5Yv5rCdN1lDQ0NZBeDmVgHHDDhUq9XiH/7wh+e7sc0E7LGVCuMDAwPTQRAks7OzQbuPa7c6d+7c7NjY2JZXLmB7RVHk+b5fn5iYaGmJdv66sFLbnJWY+izbob+//+Mnnnji3rVr1/wgCLz1wvhKOrVnd//+/aEZgF5eeV4km1UhZGFNQ0NDU2EYelprRymVbiHcAdiEZoHU3mefffbKp59++lJ+25Lv+9kWrNUUCgXp7++/0s7tCY7jNExbv+2uJVYsFiWOYxkeHp42GU5ksc5NoVCQOI7VWvff1gZ0EZELFy7cb/VmdnmFV1M9t53HE8exOnz48NVSqRRrrZ2ZmZltb5202s/ws5/97BDhHFvRyvtrpd6p+b+fP39+VlYpEIeVtRr60Dnvv/+gdkIrHGfpapTcYO6qdwDtqoS8mr/6q7+KRSTe7OdXKpWtVZDcpDiO3ThePOx8GyJb9vWje1y+fPm7Th8DsJedP39+dnx8fL/52Pd9aTQaUqvV1p3BNlmunfdMSZKovr6+ad/361prZztb4Lqum82ar/QzrHf/bXVAb8XyGxyzbGI79qTln+CxsbEDw8PDUyKLFTHb/b3W06mbJwDAUqYyrGlvZmbUV6OUSm1tDWg067fsOK11oVKpyNzcnPV9agEAawvD0HddN2svt7wA6Gq2o/vC8hw3NDS0bTmuWq1KuVzedJs4u+8QmtaaZciPqjuOI1praTQaEgTBpmcOWjExMXHX/KK3YxZkva9pevkBW2GKVZlCHubEmW/jl39/NRqNbFkShZmARa7rpuZaZNqa7UQrTjMYsPw92g5bqd+ylWui7/t6YWFhyf68fMXbZs9kkjtW1S0dbhzHyXpD51eLNGcOO3x02y9/7torRY+11k5/f/+0yOqv091W0C7fmtrcQ7Y6+LqdHXpMjguCIOnv75/O9yhvxznEdJFYbUI1SRI3v5Ju+UpVbrCBPcxcCHp7e5eMaprZvXw7k3q9Lr7vS09Pz460GASwJ+2qm1NgNfV6XYrFoiilJEmSJe1zfd/v8NFhO1y6dOl2qVRKTEhH5509e3ZeZHFJer1e35EK760goAN7WJIkbhiGUq/XpVarSZqmWTg3S5HM380NRK1WkyiKmMUCsB3CTh8AsBPMDFsYhlIoFKRUKkmj0ZAoivbEDPpede7cudndNkve7ZRSaZIk0mg0xPd9K95/BHRgD9u3b19YKpWyZe2e50mhUMjCeH6prhnRby7ZkYceemihk8cOYFeivgr2hDAMxfM82bdvnziOk/WGDgIao+wFg4ODU50+BizyPE+bziqt7pHfbgR0YA+7c+dOz8jIyJW+vr6rZu/s8haCpraD2RM6MDBwdXh4+KM//OEP+9f62gAAYGWlUkmiKJIoipYMhnue11KfaHQvurnYx/d9abY/s6JAaddXcQeweaad1Ojo6ME0TSU/gmiKtriuK0mSLOlJTHs1AAA2r1AoSF9f38dKqUalUqk1Gg1JkkRprR2ttfPVV1+90OljBPaCKIo8kQcFSW2os0RAByBBECRmuZXW2vn8889PmBF9x3FkaGhomj1TAAC0RxzHsm/fvqg54L3E66+/3tOJYwL2qiRJxPM8EZEd6cKyHgI6AMnfIIyOjh40M+Wm3ZpSKmVJFgAA7aGUkrt375ZlhdVoZkYPwPbzfb9uw6x5HgEd69JaO319fdOff/75iXy/PrNP2ff9bAm02a+c7yU4ODg45ft+5ysuoCW+79efffbZf4qiyEuSxN23b1+otWZDHLAKrbUzMjJy5bPPPnvJ9Hz1PG/VfrZRFPm2FKJZjVKqYba3aK0lCAKJ4zjraeu6blZcsl6vi+d5EsexBEFg+txuegrCPDdKKYnjWFzXzfYEDg8PX42iaF/bflB0lO/7da11tqTUcRxxHKelfaDmdZkkiSRJIqVSSdI0Ne+/Lb+5tNYFsxe8ufxc9u3bJ2EYZl1OarWaFAoFKRaL2TGb126hUJBarZYVXzX3Rqadk4hIqVRKVvreNq5YC4IgGRkZuWLuB9pxjHEcu5VKpZYkiQrD0Hccx56EtM2UUmmj0ZA4jqVUKmWvl2KxWO/0sbWb2S5ptlHm+3+vpJ39yFthXtP5TkadRkDHuiYmJu6Oj4/vP3bs2EdJkqg4jt1vvvnmBXNjttKI09DQ0FQ+1J07d479yl3g9OnT6sKFC/fz/3bmzJnCm2++uWcumsBGvf/++78/depU76FDh3579+7dZ0z7pNUGtjzPqx8+fHj6888/P7HTx9qqOI5VFEVZuIjjWEQWC+nU6/UsOJsbL6VUVolaKSVhGG6qkbNSqjEwMDAVx7F78+bNF4rFojiOI2EYSn9//8dxHKcXL178vK0/LDqmWq0Wfd/PgqzIYvBu5SbZdV2J41gcx5FisSha67beYAdBkCRJIq7rZv3Ka7Vads9jgpVpUyoi2fvAFFw1P5OIZJMZaZouKbzaDU6fPq1Mv2i0RxzHruu6S16vpVJJbt++vU9Eqp07svZyHCc1odwMupn3x2pMgN+pARvP87QplGyL7jk7oKPyoW1sbOxAfn9G/gWdWxrNkugu9NZbb31v1oFwDqzv3Llzs6Ojo963334rIiI9PT2rzjBNTEzcHR0dPbijB7hBSqm0uQogWzGVpqksLCyI67pSqVSkUChIGIaitc5mB5VSEgSB+L6/qVkgM5j7y1/+snLs2LGpZrGsE77vi+d5enJy8k57f1J0kuM4jeeee+6/37lzp+frr79+wbT3NIM/63yuxHEsZhCnVqvJkSNHprTWTjuWiCulUhOia7Wa1Ot1cRxHyuVyNjCgtZYkScRxHCmVSpIkicRxLFpr8Twv+znM7HqSJFIul6VSqWShvhusdG+ArTEz6GYA1Jw/K5VK97wwWuD7ft11XZmdnZVSqSRBEMjCwkJLK2SSJNmRcupJkqg0TbNzTnNr505861UR0LFhSqnU9MrOjziZETIA2IsqlUqtt7dX7t+/L/fu3ZNDhw6teo1N09SOdXRrMDN9Iovn93K5nC15r9Vq2UxnqVSSRqMhWms5fPjw1XZ873fffbcqItXx8fH9jz322Mee5+ndduMKkUuXLt0WEXn11Vd7TBg2IX09+ZvoOI6l0WiI7/v63Llzd0UWJxO2MlEQRZE/NDQ0ZQbaPvvss5fM8ZkZfzNLbkJ4kiTi+74Ui8Us1CulxHVd8TxPPM8TrbWEYSi+v6lFJthFzACTmUkPw1CCIFhx20O3mp+fL2qtZf/+/dJoNKRarWYrXtbi+/6OPxdmq66pv9RJBHRsmOM4Da31im8wMxrInmUAe00URd79+/clCAKzn9a6faStCsPQf/LJJz/u6empiSwux7xx48YJMyto9tmLLFa/FREZGBiYFhFp5yy3Wb01Pj6+n8JZu5fjOKkJ2a0uNTW1EMwKj2ZdhGzT6lZX8V28ePG2+fvo6OjB4eHhqWvXrr1Yq9WkXC5n+2nN7H2j0ZDjx49fiaLIr9Vqyvd9naZpIQiCRGvtXL9+/YTv+99b+o69yfM8bWp6mNev7/tdMXi7Eb7v65GRkSuzs7Olb7755kf5eg0raTQaMjAwMK2USufn54s7fLjrLr/fKQR0bFiapoUkSaRYLIpZElIoFFoq/AAAu1UQBEkQBDI3NycHDhxYc5l3PkjYyMxsGuPj4/tNj1hTBCvfL7Z5c1lfXsOiXS5cuHD/1KlTvdvxtdF5SqnULBU3A0AbuZcws9SbrX2wnsnJyTvj4+P7S6VStq3DFDFUSmWBWynVyAd7Y3R09KC5T8oXnsPelaZpwQzY1Ot1GRkZmfI8T8/OzgayQmX/bmUGbMfGxpx8kdH863+lFbg7uU3WrAw2mYYl7uhKxWKxXqlUJAzDbGnXcjZWIAWA7RRFkWeWfIdhKHEcr3qNXVhY2PGZga0yVba11uL7flYozswAVavVbf2ZKDa6e8Vx7BaLxQ1vlctvscv/dzvMzs6W8qsGzRYPs3c4SRJZLVylaeqYgosikr13sHeFYejnZ85Fspa3u/Y8Zwawe3p6sn33thgcHJwSWcwvMzMzL3V6ifuuWkaBnfFv//ZvFTNjIrJykTgA2GuUUmm1WpUgCNZ97P79+xd24JDaznXd7BxvWq2ZfbZKqW2fEjxz5gwXmF3IzCybFRqtLAHPh3NTqDAIgni7jrG3tzfMDyCYcJUkidRqNTGFDFf63FqtpjzPywrDEc5RKpVi0xGjOWO7qye2zACXGdxdSaeWl1+4cOH+xMTE3YmJibtxHLsDAwNTO34Qy3RFQDcnRLM3ydwMmI/NUiPTp7Jer+/KPoK2qFQqNdPD08yoLP87e9AB7DWe5+lSqSQLCwvrDlRqrR0z+7bZP8tbXdbrdTl27NhHvu+3veKyaQlkZg3NNcAUOUqSRDzP2/brLl0ldidTr8EUXzOvr7XkX4+598S2vT4cx2lEUZTd55i2a2ZmvFarrVqB2/d9nV9xAjiO0zD3zXthwKZUKiWmbsPylTL5wbZO17HK11AxBSuDIMjqTJhCj9vN+hCllErNMgiztM7sfTP7BEwwN09ioVCQhYUFymMCAHZMkiSqVqtls8zrtRrLX8c288esZDI3d0EQyPz8fHE7WpEFQZDkZ3t83xelVNbiqtM3Veh++bDbSog14SaOYzG91LeztkOSJMpUaDcDZIZSSgqFglDIEK1KkkQVi4u7ghYWunJB1YaYfuhm8FoplV07bON5nj5y5MgVc22dn58Xz/PE9/2sreJ2s/5iapYLmV+imT03BUTq9XrWniC/vHq3LxUBANjFcZyGGUxuNBqyVgVaU5TGPD4/C7j849X+1Ot1SdM0q6LeXD64LbPYaZoWHMeRSqUinudlLaXy3x/YLKVUevz48SsjIyNT+X7E6zEFthzHkcHBwavbOYMex7Fr+p7XarXsPtSs8GxOFu3+qVC0hVIqTdNU4jiW/fv3r7o9YjfJv1fW+tNp58+fn9VaO7ntW9kksfm37Wb9icSMWJonJj/Skg/ljuNkNwsiLLEGAOysNE0LR44cmTI36Wu1Wbt//355+Y3Ieh8vZwoLPfnkk1eDIIhnZ2dL2zU4rZRq1Gq1bOYgPxCRJInZbsZ1F5tiKjaPjY0dEGmt2JsJyMViUQYHBz+Kosg7d+7c7BtvvBG8/fbbUbuPsVQqxWbm3Ow9N3vlzbGUy+UVl7gDy5kAaLZ03Lt3rywi850+rp1iuoDk7USxx1b5vq8HBgaufvnlly+YrWv5LdXbzfqAHoahPzw8fKXZQ/LFfPuN5WFdROSpp566qpRKy+XythUKAQBguY20GHv44YfnH3nkkStb+X5xHLtBECRJkqjm996WFmcii4MNP/rRj654nqdNtXalVKqUSh3HaXiep9lahq0yoaXVJaSmsFwURZ7Z2rEd4VxkMaAfOXLkiohkHRp836/nB6b2wiwo2sdxHPF9X+7fvy8PPfTQrl/nnl8Blm+lmM9ztsyinzt3bvb111/vqdVqWSg3S9432gZyM6wO6KdPn1amF+vo6OhBUxQuSZLsl+v7voRhmO1d6u3tDc+ePbtnRqAAAN1nJ3u8btXp06fVsuvqatfY6k4cD3Yvs0Wj1XZrjuNkldG32zvvvBOKSLje486cOVOgmCHW0xzglEcfffTqyMhIuNtXIKVp6qy1SizfHWE7a0lsRJqmzsjIyNVbt269YLZTm2KP2z2IYHVAf+utt7KRSN/360NDQ9Nm+d7MzMyLpmrmM888k41o7rUlIgAAbKf8tRjYTp7n6VarJJsbZNd1JQgCawohEM7RCq21Mzw8fGV+fr64FyYWHcdJBwYGppVSqdbauXXr1gnzHm40GjI4ODhtHpumqRWDFefOnZt97bXXevN10ERaH0DcCqsDel5+6WB+j5JZBrWRpYUAAACwSxRFXqtVks0+cPN5231sQLvFcexevnz5u04fx07IdxcZGxs7kG/RLLK4osDGlWVpmhaGh4enZmZmXmw0GlIsFiWO422v5N41AT2vuedtR0YwtptpE2L+a3raPvPMMx8lSbJqmUDP87T5+YeHh6dEdq4wnvk++ar6Ig9aBgEAAGyU6W6wHvMYs/XRdmmaFsw92264d8XWeZ6nbQykO8UU/jaduWx14cKF+6OjoweHh4enrl+//uJGjrW/v396tboUjuOkSZJIqVQSx3HkkUce+U2lUqmZui5dGdBFJOsdu9uYi06apoW13rj37t0rmxN9HMeu2au/E8w2g0ajIeVyWeI4Nv+ejWZTKAUAAGyXJEnE930T0nffDSF2tfPnz892+hg6KZd3rM9zk5OTd8bGxg4Ui8Ws5tl623Bc1xWlVLrW9oVyuSzz8/Ny7Nix6VKplJw7dy57TVixxn8z8u3Vull+FNiMqLYyelypVGqNRkOOHz/+T2ma7mgxBa11VujB9AM1+zJE5HsV9gEAANrFVFQeGhq68vTTT0/btAcdwNq01k5+JXSzMJzVgU4plT755JPTra4WTpJETMvVlWitnVqtJpVKRUQW97vn/7/VT8Za8qX6bf+ltiIfzlv5mYrFYv3pp5++eufOnZ733ntvR/ev+L6vjx07dqV5nFIsFrN+vIVCQQYGBqZsqcAIAAB2l0ajIVprCcPQn5ycvLMXimwBu4VSKjW5x3GcrphsvXDhwn3f9+v51cJraa5wXnX/je/7ddd15YknnrhqulfkdeUS9/wM7m7ax7ORGfS5ubmgVCrFly5d2tHieGfOnCmcO3du9tSpU72PPvrob4IgSEqlUhKGoSciUiqVEq11gaJ9AACgXcxsW39/f1btuVKp7EyPNQBtYwJ6vg96N2xTKZVK8dGjR6/88z//80utPN73/VXXwYdh6B07duyjMAy9lTJTVwZ0w/xiu+GXup5uWRJu2oc0l2LMioiMj4/vt7X6IgAA6F7Lb+RFllaEBtBdzBJ3o7kixvpp9HfeeSccHx/3Pc9bd4I4TVPxPO97M+N58/PzxdVqiHVtQM8vce9mpnr7Rvm+X7dlltqW4wAAALsD1c6BvaG5D936gC6y2BpvZGTkyrVr19acRW+2gVw1Z5dKpWStic2ueDJWYoqqdUNhgVbki8W1glAMYLcZGBiYHhwcnNrq1xkaGpoaGhra8tcBAADtpZRKtdaSpmlW8Hu92WZbTE5O3onj2F3vHmO9yvTrZdeuDLZaa8f0zUvTdM01/tvN7KPQWku9XpdisWgGDcR111+gkK/eDgB71YULF+5PTk7e0Vo7hUKhpbYr5uJuzqHmc0x/WQYyge6Vv3nv9vskz/N0X1/ftIhk7ZnWOsc5jtPI77U394pm5Wi3Px/Y27TWju/7S1qWddNkq9likyRJdvz5onet1Elbb5tO1zwZeb7v15966qmrw8PDUyMjIx2dJSkWi/U4jsXzPCmXyzI3NydpmkoQBBKGYXZSXe2PyIOe7q0Wvjt9+vSqVQEBoJuZvWlKrX+ay+9Lzd+47nTrSQDttzyImsmQlSoe225ycvKOUirt7++fNlWrm+e576X0kydP9u31HtnY/cykZhRF4nle1yxxN7TWznPPPfdRHMdiWsalaZq1nW5O1m76XqQr96DbNCsyNzcX/PEf//H/SJJEVavVYqlUim/duvVSvV7PWo+tZ/lNpsjahe/eeuutjq0YAIDt5Pt+PUkScV133cHK1WaTumkkHsDKTCtXpVT2Ph8cHJxe/zPtNDExcXd8fHx/mqZSq9Wkp6dnxXPVhx9++EUnjg/YSY1GQ1zXlTiO5ejRo1eiKGotNFlicnLyzqlTp3rn5+elp6cnm1RoNBpSLBal0WhIqVRavx/bKroyoNtibGzswPIlCqdOneqtVqviuq64rrvuMs3cjI8opWRgYGCquTeDG0wAe45SKm0WV2lpFt1g6Sewe5n3tk0FcjdDa+24riulUknCMGx51tD8/JzfsBsopdKBgYHpzz///ERzibhz8eLFFauZ28x1Xf0nf/In/71Wq3nVarUYBEGstXbiOHa11oWtZDkC+hasVH0vDEOvv7//Y9/3dRiG3not4MyMeb1ed1zXTaMo8t57773vtumQAcBqWmun0WiYJW9rPnalLUPd3tkDwKJ8ezVDKdXVCTUIgkRrLQsLCxIEwZp93NM0dUynH4I5dpMLFy7cHxsbO2CWuXerd999t9r8a9jur01AbzN6cwLA5iml0jAMZd++fS0ViuPGFdidTEA37/GBgYHpOI67ugZPtVotFgoF2bdvnyRJIvPz86umk7XObQxEotsppVKllBw+fHh6vcnMvYhl1AAAq3ieJ7XaqhNLS7D0E9i98kHU9/36Wn2Du4Hv+3WttdRqNdMnedUBB4pdYjfTWjtHjx69ImJXbTFbENABANaI49h99tlnP2plhmilx9D/HNidun15+5kzZwqO4zRMjaJarSa9vb1tXxq7Hs6RsMHExMTdOI7dbuzKsBMI6AAAa0xOTt6ZnZ0NWgno9XpdGo2GBEGwZAa922fZgL0qjmP36NGjV4aGhqY8z8tWx/T393f98vY333yzYVb8mE4VYRiuWrk6v8Q/vx/fbP1Zr41vvV4XpdSSzzefS60j2KC5ooQsugL2oAMArOJ5nnZdN+snuhrTyqRWq0kcxxIEgVSr1e6tOAPscaaOzyuvvPJIFEXiuq4opbq+ertRrVaLaZpKEASmU8Wqe2/zrXdFJCsWZ3our6dZHVt835f5+XkJgsA8n+z3hRV2w3t6uxDQAQBW8X2/XqvV1m2zFsexKKWylpae5+3QEQLYTs02TFd7e3vDu3fvlrutR/JqDhw4MH/s2LErcRy7IovnurUeb1YGmXa8Iosz6K1UdjcrjNI0lUKhII7jSBRFYr43AHvxJgUAWKVarRZd1133BlQpJVprcRxHlFISx/GabYsAdId8R5xXX321VC6Xu/59/cYbbwTvvPNOKC22ZHIcp2FmyvPL3ZfPrK/x+eK6rjz++ONXHcdJS6VSMjs7G7DnF7AfAR0A0JVMiE+SRHzfl1qtJlEUMY0O7CJBEMS7oaL522+/HW3k8YVCQUZGRq6ILFa8zv8/pVTayt5d85jcgMfsRo4BQGcQ0AEAVgmCIDEFjtYShqFUKhWJokgajYYUi8Xv3cgC6F6nT59We3Wf6sWLF293+hgAdAYBHQBglSRJ3GeeeeajJEnUjRs3Xlztcfllno8//vjHlUqlxv5KYPd46623dKePAQB2WmG9PX4AAHTC2NjYgbUCuuu6srCwIL7vy9DQ0BTt1QAAQLdjpgEAYKUgCJL+/v5p0xZoZmbmRRHJevs+9dRT0+Zx7D0HAAC7ATPoAADrjY6OHrx169aJfCVjZs0BAMBuwww6AMB6Sql0eHh4yvM8naZpIY5jl1lzAACw2zCDDgAAAACABWhHAwAAAACABQjoAAAAAABYgIAOAAAAAIAFCOgAAAAAAFiAgA4AAAAAgAUI6AAAAAAAWICADgAAAACABQjoAAAAAABYgIAOAAAAAIAFCOgAAAAAAFiAgA4AAAAAgAUI6AAAAAAAWICADgAAAACABQjoAAAAAABYgIAOAAAAAIAFCOgAAAAAAFiAgA4AAAAAgAUI6AAAAAAAWICADgAAAACABQjoAAAAAABYgIAOAAAAAIAFCOgAAAAAAFiAgA4AAAAAgAUI6AAAAAAAWICADgAAAACABQjoAAAAAABYgIAOAAAAAIAFCOgAAAAAAFiAgA4AAAAAgAUI6AAAAAAAWICADgAAAACABQjoAAAAAABYgIAOAAAAAIAFCOgAAAAAAFiAgA4AAAAAgAUI6AAAAAAAWICADgAAAACABQjoAAAAAABYgIAOAAAAAIAFCOgAAAAAAFiAgA4AAAAAgAUI6AAAAAAAWICADgAAAACABQjoAAAAAABYgIAOAAAAAIAFCOgAAAAAAFiAgA4AAAAAgAUI6AAAAAAAWICADgAAAACABQjoAAAAAABYgIAOAAAAAIAFCOgAAAAAAFiAgA4AAAAAgAUI6AAAAAAAWICADgAAAACABQjoAAAAAABYgIAOAAAAAIAFCOgAAAAAAFiAgA4AAAAAgAUI6AAAAAAAWICADgAAAACABQjoAAAAAABYgIAOAAAAAIAFCOgAAAAAAFiAgA4AAAAAgAUI6AAAAAAAWICADgAAAACABQjoAAAAAABYgIAOAAAAAIAFCOgAAAAAAFiAgA4AAAAAgAUI6AAAAAAAWICADgAAAACABQjoAAAAAABYgIAOAAAAAIAFCOgAAAAAAFiAgA4AAAAAgAUI6AAAAAAAWICADgAAAACABQjoAAAAAABYgIAOAAAAAIAFCOgAAAAAAFiAgA4AAAAAgAUI6AAAAAAAWICADgAAAACABQjoAAAAAABYgIAOAAAAAIAFCOgAAAAAAFiAgA4AAAAAgAUI6AAAAAAAWICADgAAAACABQjoAAAAAABYgIAOAAAAAIAFCOgAAAAAAFiAgA4AAAAAgAUI6AAAAAAAWICADgAAAACABQjoAAAAAABYgIAOAAAAAIAFCOgAAAAAAFiAgA4AAAAAgAUI6AAAAAAAWICADgAAAACABQjoAAAAAABYgIAOAAAAAIAFCOgAAAAAAFiAgA4AAAAAgAUI6AAAAAAAWICADgAAAACABQjoAAAAAABYgIAOAAAAAIAFCOgAAAAAAFiAgA4AAAAAgAUI6AAAAAAAWICADgAAAACABQjoAAAAAABYgIAOAAAAAIAFCOgAAAAAAFiAgA4AAAAAgAUI6AAAAAAAWICADgAAAACABQjoAAAAAABYgIAOAAAAAIAFCOgAAAAAAFiAgA4AAAAAgAUI6AAAAAAAWICADgAAAACABQjoAAAAAABYgIAOAAAAAIAFCOgAAAAAAFiAgA4AAAAAgAUI6AAAAAAAWICADgAAAACABQjoAAAAAABYgIAOAAAAAIAFCOgAAAAAAFiAgA4AAAAAgAUI6AAAAAAAWICADgAAAACABQjoAAAAAABYgIAOAAAAAIAFCOgAAAAAAFiAgA4AAAAAgAUI6AAAAAAAWICADgAAAACABQjoAAAAAABYgIAOAAAAAIAFCOgAAAAAAFiAgA4AAAAAgAUI6AAAAAAAWICADgAAAACABQjoAAAAAABYgIAOAAAAAIAFCOgAAAAAAFiAgA4AAAAAgAUI6AAAAAAAWICADgAAAACABQjoAAAAAABYgIAOAAAAAIAFCOgAAAAAAFiAgA4AAAAAgAUI6AAAAAAAWICADgAAAACABQjoAAAAAABYgIAOAAAAAIAFCOgAAAAAAFiAgA4AAAAAgAUI6AAAAAAAWICADgAAAACABQjoAAAAAABYgIAOAAAAAIAFCOgAAAAAAFiAgA4AAAAAgAUI6AAAAAAAWICADgAAAACABQjoAAAAAABYgIAOAAAAAIAFCOgAAAAAAFiAgA4AAAAAgAUI6AAAAAAAWICADgAAAACABQjoAAAAAABYgIAOAAAAAIAFCOgAAAAAAFiAgA4AAAAAgAUI6AAAAAAAWICADgAAAACABQjoAAAAAABYgIAOAAAAAIAFCOgAAAAAAFiAgA4AAAAAgAUI6AAAAAAAWICADgAAAACABQjoAAAAAABYgIAOAAAAAIAFCOgAAAAAAFiAgA4AAAAAgAUI6AAAAAAAWICADgAAAACABQjoAAAAAABYgIAOAAAAAIAFCOgAAAAAAFiAgA4AAAAAgAUI6AAAAAAAWICADgAAAACABQjoAAAAAABYgIAOAAAAAIAFCOgAAAAAAFiAgA4AAAAAgAUI6AAAAAAAWICADgAAAACABQjoAAAAAABYgIAOAAAAAIAFCOgAAAAAAFiAgA4AAAAAgAUI6AAAAAAAWICADgAAAACABQjoAAAAAABYgIAOAAAAAIAFCOgAAAAAAFiAgA4AAAAAgAUI6AAAAAAAWICADgAAAACABQjoAAAAAABYgIAOAAAAAIAFCOgAAAAAAFiAgA4AAAAAgAUI6AAAAAAAWICADgAAAACABQjoAAAAAABYgIAOAAAAAIAFCOgAAAAAAFiAgA4AAAAAgAUI6AAAAAAAWICADgAAAACABQjoAAAAAABYgIAOAAAAAIAFCOgAAAAAAFiAgA4AAAAAgAUI6AAAAAAAWICADgAAAACABQjoAAAAAABYgIAOAAAAAIAFCOgAAAAAAFiAgA4AAAAAgAUI6AAAAAAAWICADgAAAACABQjoAAAAAABYgIAOAAAAAIAFCOgAAAAAAFiAgA4AAAAAgAUI6AAAAAAAWICADgAAAACABQjoAAAAAABY4P8H9xU0lqiNivsAAAAASUVORK5CYII=" alt /></div>
|
|
<canvas class="canvas"></canvas>
|
|
<div class="loading-screen"><span class="loading-text">Loading...</span></div>
|
|
<div class="game-ui">
|
|
<div class="params">
|
|
<div class="gear-icon js-params">
|
|
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="45.973px" height="45.973px" viewBox="0 0 45.973 45.973" style="enable-background: new 0 0 45.973 45.973; fill: #ffffff" xml:space="preserve">
|
|
<g>
|
|
<g>
|
|
<path
|
|
d="M43.454,18.443h-2.437c-0.453-1.766-1.16-3.42-2.082-4.933l1.752-1.756c0.473-0.473,0.733-1.104,0.733-1.774
|
|
c0-0.669-0.262-1.301-0.733-1.773l-2.92-2.917c-0.947-0.948-2.602-0.947-3.545-0.001l-1.826,1.815
|
|
C30.9,6.232,29.296,5.56,27.529,5.128V2.52c0-1.383-1.105-2.52-2.488-2.52h-4.128c-1.383,0-2.471,1.137-2.471,2.52v2.607
|
|
c-1.766,0.431-3.38,1.104-4.878,1.977l-1.825-1.815c-0.946-0.948-2.602-0.947-3.551-0.001L5.27,8.205
|
|
C4.802,8.672,4.535,9.318,4.535,9.978c0,0.669,0.259,1.299,0.733,1.772l1.752,1.76c-0.921,1.513-1.629,3.167-2.081,4.933H2.501
|
|
C1.117,18.443,0,19.555,0,20.935v4.125c0,1.384,1.117,2.471,2.501,2.471h2.438c0.452,1.766,1.159,3.43,2.079,4.943l-1.752,1.763
|
|
c-0.474,0.473-0.734,1.106-0.734,1.776s0.261,1.303,0.734,1.776l2.92,2.919c0.474,0.473,1.103,0.733,1.772,0.733
|
|
s1.299-0.261,1.773-0.733l1.833-1.816c1.498,0.873,3.112,1.545,4.878,1.978v2.604c0,1.383,1.088,2.498,2.471,2.498h4.128
|
|
c1.383,0,2.488-1.115,2.488-2.498v-2.605c1.767-0.432,3.371-1.104,4.869-1.977l1.817,1.812c0.474,0.475,1.104,0.735,1.775,0.735
|
|
c0.67,0,1.301-0.261,1.774-0.733l2.92-2.917c0.473-0.472,0.732-1.103,0.734-1.772c0-0.67-0.262-1.299-0.734-1.773l-1.75-1.77
|
|
c0.92-1.514,1.627-3.179,2.08-4.943h2.438c1.383,0,2.52-1.087,2.52-2.471v-4.125C45.973,19.555,44.837,18.443,43.454,18.443z
|
|
M22.976,30.85c-4.378,0-7.928-3.517-7.928-7.852c0-4.338,3.55-7.85,7.928-7.85c4.379,0,7.931,3.512,7.931,7.85
|
|
C30.906,27.334,27.355,30.85,22.976,30.85z"></path>
|
|
</g>
|
|
</g>
|
|
</svg>
|
|
</div>
|
|
<div class="privacy-icon js-privacy hidden">
|
|
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="25px" height="25px" style="shape-rendering: geometricPrecision; text-rendering: geometricPrecision; image-rendering: optimizeQuality; fill-rule: evenodd; clip-rule: evenodd" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
<g><path fill="#ffffff" d="M 7.5,-0.5 C 10.8333,-0.5 14.1667,-0.5 17.5,-0.5C 20.1667,1.5 22.5,3.83333 24.5,6.5C 24.5,10.1667 24.5,13.8333 24.5,17.5C 22.5,20.1667 20.1667,22.5 17.5,24.5C 13.8333,24.5 10.1667,24.5 6.5,24.5C 3.83333,22.5 1.5,20.1667 -0.5,17.5C -0.5,14.1667 -0.5,10.8333 -0.5,7.5C 1.16667,3.83333 3.83333,1.16667 7.5,-0.5 Z M 11.5,5.5 C 13.1417,7.08083 15.1417,7.7475 17.5,7.5C 18.1995,12.4248 16.5328,16.0915 12.5,18.5C 7.68083,16.5386 5.68083,12.8719 6.5,7.5C 8.69798,7.87988 10.3646,7.21321 11.5,5.5 Z"></path></g>
|
|
<g><path fill="#ffffff" d="M 10.5,8.5 C 12.6348,8.14696 13.9681,8.98029 14.5,11C 12.8333,18.3333 11.1667,18.3333 9.5,11C 9.74325,10.0979 10.0766,9.26456 10.5,8.5 Z"></path></g>
|
|
</svg>
|
|
</div>
|
|
<div class="speaker-icon js-sound hidden">
|
|
<svg xmlns="http://www.w3.org/2000/svg" version="1.0" width="25" height="25" viewBox="0 0 75 75">
|
|
<path d="M39.389,13.769 L22.235,28.606 L6,28.606 L6,47.699 L21.989,47.699 L39.389,62.75 L39.389,13.769z" style="stroke: white; stroke-width: 5; stroke-linejoin: round; fill: white"></path>
|
|
<path d="M48,27.6a19.5,19.5 0 0 1 0,21.4M55.1,20.5a30,30 0 0 1 0,35.6M61.6,14a38.8,38.8 0 0 1 0,48.6" class="speaker-status" style="fill: none; stroke: white; stroke-width: 5; stroke-linecap: round"></path>
|
|
</svg>
|
|
</div>
|
|
</div>
|
|
<div class="pause-icon js-pause"><i class="gg-pause-o active js-pause-icon"></i> <i class="gg-play-button-o js-play-icon"></i></div>
|
|
<div class="score-container">
|
|
<span class="js-score-add score-add">+6</span> <span class="normal-score js-score">0</span>
|
|
<div class="best-score">BEST : <span class="js-best-score">0</span></div>
|
|
<div class="new-best-score"><span class="new-score-text js-new-best-text">NEW BEST SCORE !</span> <span class="new-score-number js-new-best-score">0</span></div>
|
|
</div>
|
|
<div class="wording"><span class="js-wording wording-perfect">Perfect!!</span> <span class="js-wording wording-bad">Try again</span></div>
|
|
<div class="start-screen">
|
|
<span class="text">Swipe to move</span>
|
|
<div class="info-container">Avoid <span class="color">red</span> color</div>
|
|
<div class="arrow-container">
|
|
<div class="arrow-right"></div>
|
|
<div class="arrow-left"></div>
|
|
<div class="arrow-right-two"></div>
|
|
<div class="arrow-left-two"></div>
|
|
</div>
|
|
<img class="swipe-img" src="data:image/png;base64,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" />
|
|
</div>
|
|
<div class="end-screen hidden"><span class="play-text">tap to play</span></div>
|
|
<div class="retry-screen hidden">
|
|
<span class="retry-text">Second chance ?</span> <span class="end-text js-no-video">No thanks</span>
|
|
<div class="video-replay">
|
|
<div class="countdown-image">
|
|
<svg class="countdown-image-svg" version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="512px" height="512px" viewBox="0 0 512 512" xml:space="preserve">
|
|
<path
|
|
style="stroke: #ffffff; stroke-width: 5; stroke-linejoin: round; fill: #ffffff"
|
|
d="M352,255.5l-192,96v-192L352,255.5z M512,31.5v448H0v-448H512z M320,95.5h64v-32h-64V95.5z M224,95.5h64v-32h-64V95.5z
|
|
M128,95.5h64v-32h-64V95.5z M32,95.5h64v-32H32V95.5z M96,415.5H32v32h64V415.5z M192,415.5h-64v32h64V415.5z M288,415.5h-64v32h64
|
|
V415.5z M384,415.5h-64v32h64V415.5z M480,415.5h-64v32h64V415.5z M480,127.5H32v256h448V127.5z M480,63.5h-64v32h64V63.5z"></path>
|
|
</svg>
|
|
</div>
|
|
<svg class="circle-svg"><circle class="js-circle-svg" r="18" cx="20" cy="20"></circle></svg>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<script src="gameplay.js"></script>
|
|
</body>
|
|
</html>
|