

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">







<html xmlns="http://www.w3.org/1999/xhtml">
	<head id="PageHeader"><link id="preloada" rel="preload" as="font" type="font/ttf" crossorigin="anonymous" /><link id="preloadb" rel="preload" as="font" type="font/ttf" crossorigin="anonymous" /><link id="preloadc" rel="preload" as="font" type="font/ttf" crossorigin="anonymous" /><link id="preloadd" rel="preload" as="font" type="font/ttf" crossorigin="anonymous" /><link id="PrimaryCss" rel="stylesheet" as="style" type="text/css" href="sys/css/primary.css?v=491111" /><link id="domainCustomCSS" rel="stylesheet" as="style" type="text/css" href="sys/css/everythingisconnectedrl.css?v=49" /><link id="VariableCss" rel="stylesheet" as="style" type="text/css" href="sys/css/variablea.css" /><style id="ArticleCss">.adtxt{
	animation: widerad 8s linear;
	animation-iteration-count: 1;
}

@keyframes widerad{
0% {max-width:0px;max-height:0px;opacity:1;}
10% {max-width:250px;max-height:300px;opacity:1;}
100% {max-width:250px;max-height:300px;opacity:1;}
}

.adfadea{
	animation: FadeItA 8s linear;
	animation-iteration-count: 1;
}

@keyframes FadeItA{
0% {max-width:0px;max-height:0px;opacity:0;}
10% {max-width:450px;max-height:300px;opacity:1;}
70% {max-width:450px;max-height:300px;opacity:1;}
100% {max-width:0px;max-height:0px;opacity:0;}
}

.amz{background-color:rgba(255, 153, 0,1)}

.animatehuecss {
	color:rgba(200,200,000,1);
	animation:animatehue 5s linear infinite;
}
	
@keyframes animatehue {
  0%{filter: hue-rotate(0deg);}
  100%{filter: hue-rotate(360deg);}
}

.circleInf{
  position: relative;
  filter: url(#wavyB) blur(1px);
}
.circleInf:before{
  content: "";
  position: absolute;
  animation: animate 5s linear infinite;
}

.circle{
  position: relative;

  filter: url(#wavy) blur(1px);
}

.circle:before{
  content: "";
  position: absolute;
  top: calc(1.5vw + 8px);
  left: 10vw;
  right: 10vw;
  border: 1px solid #FFF;
  box-shadow: 0 0 50px #0F0,  inset 0 0 50px #0F0;
  animation: animate 5s linear infinite;
}
.circle:after{
  content: "";
  position: absolute;
  top: calc(1.5vw + 8px);
  left: 10vw;
  right: 10vw;
  border: 1px solid #FFF;
  box-shadow: 0 0 50px #FFF, inset 0 0 50px #FFF;
}
.circle:nth-child(2):before{
  animation-delay: -2.5s;
}
@keyframes animate {
  0%{box-shadow: 0 0 5px #0F0,inset 0 0 5px #0F0;filter: hue-rotate(0deg);}
  20%{box-shadow: 0 0 4px #0F0,inset 0 0 6px #0F0;}
  40%{box-shadow: 0 0 4px #0F0,inset 0 0 8px #0F0;}
  60%{box-shadow: 0 0 8px #0F0,inset 0 0 8px #0F0;}
  80%{box-shadow: 0 0 10px #0F0,inset 0 0 10px #0F0;}
  100%{box-shadow: 0 0 5px #0F0,inset 0 0 5px #0F0;filter: hue-rotate(360deg);}
}

svgxxx{
  width: 0;
  height: 0;
}

a:link { 
  text-decoration: none; 
} 
a:visited { 
  text-decoration: none; 
} 
a:hover { 
  text-decoration: none; 
} 
a:active { 
  text-decoration: none; 
}

.navbtn{
background-color:rgba(186,163,101,1);
background-image: url('../RLindemann/Art/Experiments/FlatOrGlobe/Parchment.jpg');
background-repeat: no-repeat;
background-position: center;
background-size: cover;
color:rgba(100,70,20,1);
width:200px;
padding:4px;
margin:4px;
border-width:1px;
border-style:solid;
font-weight:600;
height:40px;
font-family: 'AntonioV';
-webkit-border-radius:7px;-moz-border-radius:7px;-ms-border-radius:7px;-o-border-radius:7px;border-radius:7px;
vertical-align:middle;
}

.navlft{
background-image: url('../sys/art/domain/lastframe.png');
background-repeat: no-repeat;
background-position: center;
background-size: cover;
position:absolute;
top:1px;
left:4px;
height:34px;
width:34px;
border-width:1px;
border-style:solid;
border-color: rgba(100,70,20,1);
overflow:hidden;
opacity: 0.5;
-webkit-border-radius:50%;-moz-border-radius:50%;-ms-border-radius:50%;-o-border-radius:50%;border-radius:50%;
}

.navrght{
background-image: url('../sys/art/domain/nextframe.png');
background-repeat: no-repeat;
background-position: center;
background-size: cover;
position:absolute;
top:1px;
right:4px;
height:34px;
width:34px;
border-width:1px;
border-style:solid;
border-color: rgba(100,70,20,1);
overflow:hidden;
-webkit-border-radius:50%;-moz-border-radius:50%;-ms-border-radius:50%;-o-border-radius:50%;border-radius:50%;
opacity: 0.5;
}



.spinE {
	animation: SpinEarth 2000s linear infinite;
}
@keyframes SpinEarth {from {rotate: 0deg} to {rotate: 360deg}}



.sa{clear:both;position:absolute;display:inline-block;text-align:left;width:1px;height:1px;background-color:#ffffff;border-radius: 50%;}
.sb{clear:both;position:absolute;display:inline-block;text-align:left;width:1px;height:1px;background-color:#ff0000;border-radius: 50%;}
.sc{clear:both;position:absolute;display:inline-block;text-align:left;width:1px;height:1px;background-color:white;border-radius: 50%;box-shadow:0px 0px 2px 1px #0000ff;}
.sd{clear:both;position:absolute;display:inline-block;text-align:left;width:1px;height:1px;background-color:white;border-radius: 50%;box-shadow:0 0 2px 1px #ffff00,0 0 3px 2px #ff00ff,0 0 4px 3px #00ffff;}

.cometA {
	transition: box-shadow 10s ease-out;
	animation: mymoveA 10s linear infinite;
}

.cometB {
	transition: box-shadow 15s ease-out;
	animation: mymoveB 15s linear infinite;
}

@keyframes mymoveA {position: absolute; from {top:0px;left:-100px} to {top:200px;left:1000%}}

@keyframes mymoveB {position: absolute; from {top:0px;left:-100px} to {top:200px;left:1000%}}

.starspin {
	transition: box-shadow 4s ease-out;
	animation: spin 10s linear infinite,movebinary;
}

.starspinslow {
	transition: box-shadow 4s ease-out;
	animation: spin 33s linear infinite,movebinary;
}

.elipa {animation: elipkeya 5s linear infinite;}
.elipb {animation: elipkeyb 5s linear infinite;}
@keyframes spin {100% {transform: rotate(360deg);}}
@keyframes movebinary {from {top:70vw;left:10vh} to {top:80vh;left:90vw}}
@keyframes elipkeya {0% {left: 0px;} 25% {left: 10px;} 50% {left: 10px;} 75% {left: 10px;} 100% {left: 0px;}}
@keyframes elipkeyb {0% {right: 0px;} 25% {right: 10px;} 50% {right: 10px;} 75% {right: 10px;} 100% {right: 0px;}}

.elipcloudA {animation:elipkeyclouda 100s linear infinite;}
.elipcloudB {animation:elipkeyclouda 300s linear infinite;}
@keyframes elipkeyclouda {0% {left: -100vw;} 100% {left: 0vw;}}

.elipwatera {animation:elipkeywateraHOLD 4s linear infinite, wigglewater 4s linear infinite, elipkeywaterb 480s linear infinite;}
.elipwaterb {animation:elipkeywaterb 240s linear infinite;}
@keyframes elipkeywatera {0% {height: 110%;} 20% {height: 112%;} 50% {height: 113%;} 90% {height: 111%;} 100% {height: 110%;}}
@keyframes elipkeywaterb {0% {left: -100%;} 100% {left: 1%;}}
@keyframes wigglewaterXXXXXXX {0% {transform: skewX(0deg);} 50% {transform: skewX(1deg);} 100% { transform: skewX(0deg);}}

@keyframes wigglewater{
	0% {transform: translatex(0px) translatey(0px);}
	50% {transform: translatex(5px) translatey(5px);}
	50% {transform: translatex(2px) translatey(4px);}	
	100% {transform: translatex(0px) translatey(0px);}
}


.elipDTb {animation:MoonMove 70s linear infinite;}
.elipDTc {animation:opacDT 70s linear infinite;}

@keyframes MoonMove {
	0% {transform: translatex(0px) translatey(300px);}
	100% {transform: translatex(300px) translatey(-100px);}
}

@keyframes opacDT {0% {opacity: 0.3;} 70% {opacity: 1.0;}}

.elipc {animation:opac 7s linear infinite;}
.elipeth {animation:opaceth 7s linear infinite;}
.elipgxy {animation:opacgxy 14s linear infinite;}

@keyframes opaceth {0% {opacity: 0;} 2% {opacity: 0;} 2.25% {opacity: 1;} 100% {opacity: 0;}}
@keyframes opacgxy {0% {opacity: 0;} 4% {opacity: 0;}  4.5% {opacity: 1;} 100% {opacity: 0;}}
@keyframes opac {
0% {opacity: 0;} 
1% {opacity: 0;} 
1.5% {opacity: 1;} 
2% {opacity: 0;} 
4% {opacity: 0;} 
4.5% {opacity: 1;} 
5% {opacity: 0;} 
6% {opacity: 0;} 
6.5% {opacity: 1;} 
7% {opacity: 0;} 
8% {opacity: 0;} 
8.5% {opacity: 1;} 
9% {opacity: 0;} 
100% {opacity: 0;}
}</style><meta id="XUACompatible" http-equiv="X-UA-Compatible" content="IE=8" /><meta id="Contenttype" http-equiv="Content-type" content="text/html;charset=UTF-8" /><title>
	bookyblog
</title><meta id="metaKeywords" name="keywords" content="bookyblog" /><meta id="metaDescription" name="description" content="bookyblog" /><meta id="author" name="author" /><meta id="PageRobots" name="robots" content="noarchive" /><meta id="PageExpires" http-equiv="expires" content="2025-11-13T06:15:55+00:00" /><meta id="PageRefresh" http-equiv="refresh" /><link id="Cannonical" rel="cannonical" href="http://www.bookyblog.com?pge=27084-bookyblog" /><link id="FIFavIconA" rel="icon" type="image/png" size="192x192" href="/favicons/SiteFavIconDirectory/favicon192.png?v=49" /><link id="FIFavIconB" rel="icon" type="image/x-icon" size="16x16" href="/favicons/SiteFavIconDirectory/favicon16.png?v=49" /><link id="FIShortCutIcon" rel="shortcut icon" type="image/png" href="/favicons/SiteFavIconDirectory/faviconSC.png?v=49" /><link id="FIAppleTouchIcon" rel="apple-touch-icon" type="image/png" sizes="180x180" href="/favicons/SiteFavIconDirectory/faviconApple.png?v=49" /><link id="FIMaskIcon" rel="mask-icon" href="/favicons/SiteFavIconDirectory/SafariMask.svg?v=49" color="#0000FF" /><meta id="FIMSTileColor" name="msapplication-TileColor" content="#0000FF" /><meta id="FIMetaThemeColor" name="theme-color" content="#0000FF" /><meta id="FIAppleMetaThemeColor" name="apple-mobile-web-app-status-bar-style" content="FF0000" /><meta name="viewport" content="width=device-width, initial-scale=1" /><meta http-equiv="Page-Enter" content="RevealTrans(Duration=0,Transition=0)" /><script type="text/javascript" src="../sys/js/asys.js?v=49"></script><script type="text/javascript" src="../sys/js/ebksys.js?v=49"></script></head>
	<body id="TheBody" class="tsb sysbdy">
		<div id="DataPnl"></div>
		<div id="CssPnl"></div>
		<form method="post" action="./default.aspx" id="ctl02">
<div class="aspNetHidden">
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKLTMzMTkzNjk1OA9kFgQCAg9kFiYCBA8WAh4EaHJlZgUefi9zeXMvY3NzL3ByaW1hcnkuY3NzP3Y9NDkxMTExZAIFDxYCHwAFKn4vc3lzL2Nzcy9ldmVyeXRoaW5naXNjb25uZWN0ZWRybC5jc3M/dj00OWQCBw8WAh4JaW5uZXJodG1sBYc5LmFkdHh0ew0KCWFuaW1hdGlvbjogd2lkZXJhZCA4cyBsaW5lYXI7DQoJYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMTsNCn0NCg0KQGtleWZyYW1lcyB3aWRlcmFkew0KMCUge21heC13aWR0aDowcHg7bWF4LWhlaWdodDowcHg7b3BhY2l0eToxO30NCjEwJSB7bWF4LXdpZHRoOjI1MHB4O21heC1oZWlnaHQ6MzAwcHg7b3BhY2l0eToxO30NCjEwMCUge21heC13aWR0aDoyNTBweDttYXgtaGVpZ2h0OjMwMHB4O29wYWNpdHk6MTt9DQp9DQoNCi5hZGZhZGVhew0KCWFuaW1hdGlvbjogRmFkZUl0QSA4cyBsaW5lYXI7DQoJYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMTsNCn0NCg0KQGtleWZyYW1lcyBGYWRlSXRBew0KMCUge21heC13aWR0aDowcHg7bWF4LWhlaWdodDowcHg7b3BhY2l0eTowO30NCjEwJSB7bWF4LXdpZHRoOjQ1MHB4O21heC1oZWlnaHQ6MzAwcHg7b3BhY2l0eToxO30NCjcwJSB7bWF4LXdpZHRoOjQ1MHB4O21heC1oZWlnaHQ6MzAwcHg7b3BhY2l0eToxO30NCjEwMCUge21heC13aWR0aDowcHg7bWF4LWhlaWdodDowcHg7b3BhY2l0eTowO30NCn0NCg0KLmFtentiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LCAxNTMsIDAsMSl9DQoNCi5hbmltYXRlaHVlY3NzIHsNCgljb2xvcjpyZ2JhKDIwMCwyMDAsMDAwLDEpOw0KCWFuaW1hdGlvbjphbmltYXRlaHVlIDVzIGxpbmVhciBpbmZpbml0ZTsNCn0NCgkNCkBrZXlmcmFtZXMgYW5pbWF0ZWh1ZSB7DQogIDAle2ZpbHRlcjogaHVlLXJvdGF0ZSgwZGVnKTt9DQogIDEwMCV7ZmlsdGVyOiBodWUtcm90YXRlKDM2MGRlZyk7fQ0KfQ0KDQouY2lyY2xlSW5mew0KICBwb3NpdGlvbjogcmVsYXRpdmU7DQogIGZpbHRlcjogdXJsKCN3YXZ5QikgYmx1cigxcHgpOw0KfQ0KLmNpcmNsZUluZjpiZWZvcmV7DQogIGNvbnRlbnQ6ICIiOw0KICBwb3NpdGlvbjogYWJzb2x1dGU7DQogIGFuaW1hdGlvbjogYW5pbWF0ZSA1cyBsaW5lYXIgaW5maW5pdGU7DQp9DQoNCi5jaXJjbGV7DQogIHBvc2l0aW9uOiByZWxhdGl2ZTsNCg0KICBmaWx0ZXI6IHVybCgjd2F2eSkgYmx1cigxcHgpOw0KfQ0KDQouY2lyY2xlOmJlZm9yZXsNCiAgY29udGVudDogIiI7DQogIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgdG9wOiBjYWxjKDEuNXZ3ICsgOHB4KTsNCiAgbGVmdDogMTB2dzsNCiAgcmlnaHQ6IDEwdnc7DQogIGJvcmRlcjogMXB4IHNvbGlkICNGRkY7DQogIGJveC1zaGFkb3c6IDAgMCA1MHB4ICMwRjAsICBpbnNldCAwIDAgNTBweCAjMEYwOw0KICBhbmltYXRpb246IGFuaW1hdGUgNXMgbGluZWFyIGluZmluaXRlOw0KfQ0KLmNpcmNsZTphZnRlcnsNCiAgY29udGVudDogIiI7DQogIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgdG9wOiBjYWxjKDEuNXZ3ICsgOHB4KTsNCiAgbGVmdDogMTB2dzsNCiAgcmlnaHQ6IDEwdnc7DQogIGJvcmRlcjogMXB4IHNvbGlkICNGRkY7DQogIGJveC1zaGFkb3c6IDAgMCA1MHB4ICNGRkYsIGluc2V0IDAgMCA1MHB4ICNGRkY7DQp9DQouY2lyY2xlOm50aC1jaGlsZCgyKTpiZWZvcmV7DQogIGFuaW1hdGlvbi1kZWxheTogLTIuNXM7DQp9DQpAa2V5ZnJhbWVzIGFuaW1hdGUgew0KICAwJXtib3gtc2hhZG93OiAwIDAgNXB4ICMwRjAsaW5zZXQgMCAwIDVweCAjMEYwO2ZpbHRlcjogaHVlLXJvdGF0ZSgwZGVnKTt9DQogIDIwJXtib3gtc2hhZG93OiAwIDAgNHB4ICMwRjAsaW5zZXQgMCAwIDZweCAjMEYwO30NCiAgNDAle2JveC1zaGFkb3c6IDAgMCA0cHggIzBGMCxpbnNldCAwIDAgOHB4ICMwRjA7fQ0KICA2MCV7Ym94LXNoYWRvdzogMCAwIDhweCAjMEYwLGluc2V0IDAgMCA4cHggIzBGMDt9DQogIDgwJXtib3gtc2hhZG93OiAwIDAgMTBweCAjMEYwLGluc2V0IDAgMCAxMHB4ICMwRjA7fQ0KICAxMDAle2JveC1zaGFkb3c6IDAgMCA1cHggIzBGMCxpbnNldCAwIDAgNXB4ICMwRjA7ZmlsdGVyOiBodWUtcm90YXRlKDM2MGRlZyk7fQ0KfQ0KDQpzdmd4eHh7DQogIHdpZHRoOiAwOw0KICBoZWlnaHQ6IDA7DQp9DQoNCmE6bGluayB7IA0KICB0ZXh0LWRlY29yYXRpb246IG5vbmU7IA0KfSANCmE6dmlzaXRlZCB7IA0KICB0ZXh0LWRlY29yYXRpb246IG5vbmU7IA0KfSANCmE6aG92ZXIgeyANCiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOyANCn0gDQphOmFjdGl2ZSB7IA0KICB0ZXh0LWRlY29yYXRpb246IG5vbmU7IA0KfQ0KDQoubmF2YnRuew0KYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE4NiwxNjMsMTAxLDEpOw0KYmFja2dyb3VuZC1pbWFnZTogdXJsKCcuLi9STGluZGVtYW5uL0FydC9FeHBlcmltZW50cy9GbGF0T3JHbG9iZS9QYXJjaG1lbnQuanBnJyk7DQpiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0Ow0KYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyOw0KYmFja2dyb3VuZC1zaXplOiBjb3ZlcjsNCmNvbG9yOnJnYmEoMTAwLDcwLDIwLDEpOw0Kd2lkdGg6MjAwcHg7DQpwYWRkaW5nOjRweDsNCm1hcmdpbjo0cHg7DQpib3JkZXItd2lkdGg6MXB4Ow0KYm9yZGVyLXN0eWxlOnNvbGlkOw0KZm9udC13ZWlnaHQ6NjAwOw0KaGVpZ2h0OjQwcHg7DQpmb250LWZhbWlseTogJ0FudG9uaW9WJzsNCi13ZWJraXQtYm9yZGVyLXJhZGl1czo3cHg7LW1vei1ib3JkZXItcmFkaXVzOjdweDstbXMtYm9yZGVyLXJhZGl1czo3cHg7LW8tYm9yZGVyLXJhZGl1czo3cHg7Ym9yZGVyLXJhZGl1czo3cHg7DQp2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7DQp9DQoNCi5uYXZsZnR7DQpiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJy4uL3N5cy9hcnQvZG9tYWluL2xhc3RmcmFtZS5wbmcnKTsNCmJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7DQpiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7DQpiYWNrZ3JvdW5kLXNpemU6IGNvdmVyOw0KcG9zaXRpb246YWJzb2x1dGU7DQp0b3A6MXB4Ow0KbGVmdDo0cHg7DQpoZWlnaHQ6MzRweDsNCndpZHRoOjM0cHg7DQpib3JkZXItd2lkdGg6MXB4Ow0KYm9yZGVyLXN0eWxlOnNvbGlkOw0KYm9yZGVyLWNvbG9yOiByZ2JhKDEwMCw3MCwyMCwxKTsNCm92ZXJmbG93OmhpZGRlbjsNCm9wYWNpdHk6IDAuNTsNCi13ZWJraXQtYm9yZGVyLXJhZGl1czo1MCU7LW1vei1ib3JkZXItcmFkaXVzOjUwJTstbXMtYm9yZGVyLXJhZGl1czo1MCU7LW8tYm9yZGVyLXJhZGl1czo1MCU7Ym9yZGVyLXJhZGl1czo1MCU7DQp9DQoNCi5uYXZyZ2h0ew0KYmFja2dyb3VuZC1pbWFnZTogdXJsKCcuLi9zeXMvYXJ0L2RvbWFpbi9uZXh0ZnJhbWUucG5nJyk7DQpiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0Ow0KYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyOw0KYmFja2dyb3VuZC1zaXplOiBjb3ZlcjsNCnBvc2l0aW9uOmFic29sdXRlOw0KdG9wOjFweDsNCnJpZ2h0OjRweDsNCmhlaWdodDozNHB4Ow0Kd2lkdGg6MzRweDsNCmJvcmRlci13aWR0aDoxcHg7DQpib3JkZXItc3R5bGU6c29saWQ7DQpib3JkZXItY29sb3I6IHJnYmEoMTAwLDcwLDIwLDEpOw0Kb3ZlcmZsb3c6aGlkZGVuOw0KLXdlYmtpdC1ib3JkZXItcmFkaXVzOjUwJTstbW96LWJvcmRlci1yYWRpdXM6NTAlOy1tcy1ib3JkZXItcmFkaXVzOjUwJTstby1ib3JkZXItcmFkaXVzOjUwJTtib3JkZXItcmFkaXVzOjUwJTsNCm9wYWNpdHk6IDAuNTsNCn0NCg0KDQoNCi5zcGluRSB7DQoJYW5pbWF0aW9uOiBTcGluRWFydGggMjAwMHMgbGluZWFyIGluZmluaXRlOw0KfQ0KQGtleWZyYW1lcyBTcGluRWFydGgge2Zyb20ge3JvdGF0ZTogMGRlZ30gdG8ge3JvdGF0ZTogMzYwZGVnfX0NCg0KDQoNCi5zYXtjbGVhcjpib3RoO3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3RleHQtYWxpZ246bGVmdDt3aWR0aDoxcHg7aGVpZ2h0OjFweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY7Ym9yZGVyLXJhZGl1czogNTAlO30NCi5zYntjbGVhcjpib3RoO3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3RleHQtYWxpZ246bGVmdDt3aWR0aDoxcHg7aGVpZ2h0OjFweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZjAwMDA7Ym9yZGVyLXJhZGl1czogNTAlO30NCi5zY3tjbGVhcjpib3RoO3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3RleHQtYWxpZ246bGVmdDt3aWR0aDoxcHg7aGVpZ2h0OjFweDtiYWNrZ3JvdW5kLWNvbG9yOndoaXRlO2JvcmRlci1yYWRpdXM6IDUwJTtib3gtc2hhZG93OjBweCAwcHggMnB4IDFweCAjMDAwMGZmO30NCi5zZHtjbGVhcjpib3RoO3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3RleHQtYWxpZ246bGVmdDt3aWR0aDoxcHg7aGVpZ2h0OjFweDtiYWNrZ3JvdW5kLWNvbG9yOndoaXRlO2JvcmRlci1yYWRpdXM6IDUwJTtib3gtc2hhZG93OjAgMCAycHggMXB4ICNmZmZmMDAsMCAwIDNweCAycHggI2ZmMDBmZiwwIDAgNHB4IDNweCAjMDBmZmZmO30NCg0KLmNvbWV0QSB7DQoJdHJhbnNpdGlvbjogYm94LXNoYWRvdyAxMHMgZWFzZS1vdXQ7DQoJYW5pbWF0aW9uOiBteW1vdmVBIDEwcyBsaW5lYXIgaW5maW5pdGU7DQp9DQoNCi5jb21ldEIgew0KCXRyYW5zaXRpb246IGJveC1zaGFkb3cgMTVzIGVhc2Utb3V0Ow0KCWFuaW1hdGlvbjogbXltb3ZlQiAxNXMgbGluZWFyIGluZmluaXRlOw0KfQ0KDQpAa2V5ZnJhbWVzIG15bW92ZUEge3Bvc2l0aW9uOiBhYnNvbHV0ZTsgZnJvbSB7dG9wOjBweDtsZWZ0Oi0xMDBweH0gdG8ge3RvcDoyMDBweDtsZWZ0OjEwMDAlfX0NCg0KQGtleWZyYW1lcyBteW1vdmVCIHtwb3NpdGlvbjogYWJzb2x1dGU7IGZyb20ge3RvcDowcHg7bGVmdDotMTAwcHh9IHRvIHt0b3A6MjAwcHg7bGVmdDoxMDAwJX19DQoNCi5zdGFyc3BpbiB7DQoJdHJhbnNpdGlvbjogYm94LXNoYWRvdyA0cyBlYXNlLW91dDsNCglhbmltYXRpb246IHNwaW4gMTBzIGxpbmVhciBpbmZpbml0ZSxtb3ZlYmluYXJ5Ow0KfQ0KDQouc3RhcnNwaW5zbG93IHsNCgl0cmFuc2l0aW9uOiBib3gtc2hhZG93IDRzIGVhc2Utb3V0Ow0KCWFuaW1hdGlvbjogc3BpbiAzM3MgbGluZWFyIGluZmluaXRlLG1vdmViaW5hcnk7DQp9DQoNCi5lbGlwYSB7YW5pbWF0aW9uOiBlbGlwa2V5YSA1cyBsaW5lYXIgaW5maW5pdGU7fQ0KLmVsaXBiIHthbmltYXRpb246IGVsaXBrZXliIDVzIGxpbmVhciBpbmZpbml0ZTt9DQpAa2V5ZnJhbWVzIHNwaW4gezEwMCUge3RyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7fX0NCkBrZXlmcmFtZXMgbW92ZWJpbmFyeSB7ZnJvbSB7dG9wOjcwdnc7bGVmdDoxMHZofSB0byB7dG9wOjgwdmg7bGVmdDo5MHZ3fX0NCkBrZXlmcmFtZXMgZWxpcGtleWEgezAlIHtsZWZ0OiAwcHg7fSAyNSUge2xlZnQ6IDEwcHg7fSA1MCUge2xlZnQ6IDEwcHg7fSA3NSUge2xlZnQ6IDEwcHg7fSAxMDAlIHtsZWZ0OiAwcHg7fX0NCkBrZXlmcmFtZXMgZWxpcGtleWIgezAlIHtyaWdodDogMHB4O30gMjUlIHtyaWdodDogMTBweDt9IDUwJSB7cmlnaHQ6IDEwcHg7fSA3NSUge3JpZ2h0OiAxMHB4O30gMTAwJSB7cmlnaHQ6IDBweDt9fQ0KDQouZWxpcGNsb3VkQSB7YW5pbWF0aW9uOmVsaXBrZXljbG91ZGEgMTAwcyBsaW5lYXIgaW5maW5pdGU7fQ0KLmVsaXBjbG91ZEIge2FuaW1hdGlvbjplbGlwa2V5Y2xvdWRhIDMwMHMgbGluZWFyIGluZmluaXRlO30NCkBrZXlmcmFtZXMgZWxpcGtleWNsb3VkYSB7MCUge2xlZnQ6IC0xMDB2dzt9IDEwMCUge2xlZnQ6IDB2dzt9fQ0KDQouZWxpcHdhdGVyYSB7YW5pbWF0aW9uOmVsaXBrZXl3YXRlcmFIT0xEIDRzIGxpbmVhciBpbmZpbml0ZSwgd2lnZ2xld2F0ZXIgNHMgbGluZWFyIGluZmluaXRlLCBlbGlwa2V5d2F0ZXJiIDQ4MHMgbGluZWFyIGluZmluaXRlO30NCi5lbGlwd2F0ZXJiIHthbmltYXRpb246ZWxpcGtleXdhdGVyYiAyNDBzIGxpbmVhciBpbmZpbml0ZTt9DQpAa2V5ZnJhbWVzIGVsaXBrZXl3YXRlcmEgezAlIHtoZWlnaHQ6IDExMCU7fSAyMCUge2hlaWdodDogMTEyJTt9IDUwJSB7aGVpZ2h0OiAxMTMlO30gOTAlIHtoZWlnaHQ6IDExMSU7fSAxMDAlIHtoZWlnaHQ6IDExMCU7fX0NCkBrZXlmcmFtZXMgZWxpcGtleXdhdGVyYiB7MCUge2xlZnQ6IC0xMDAlO30gMTAwJSB7bGVmdDogMSU7fX0NCkBrZXlmcmFtZXMgd2lnZ2xld2F0ZXJYWFhYWFhYIHswJSB7dHJhbnNmb3JtOiBza2V3WCgwZGVnKTt9IDUwJSB7dHJhbnNmb3JtOiBza2V3WCgxZGVnKTt9IDEwMCUgeyB0cmFuc2Zvcm06IHNrZXdYKDBkZWcpO319DQoNCkBrZXlmcmFtZXMgd2lnZ2xld2F0ZXJ7DQoJMCUge3RyYW5zZm9ybTogdHJhbnNsYXRleCgwcHgpIHRyYW5zbGF0ZXkoMHB4KTt9DQoJNTAlIHt0cmFuc2Zvcm06IHRyYW5zbGF0ZXgoNXB4KSB0cmFuc2xhdGV5KDVweCk7fQ0KCTUwJSB7dHJhbnNmb3JtOiB0cmFuc2xhdGV4KDJweCkgdHJhbnNsYXRleSg0cHgpO30JDQoJMTAwJSB7dHJhbnNmb3JtOiB0cmFuc2xhdGV4KDBweCkgdHJhbnNsYXRleSgwcHgpO30NCn0NCg0KDQouZWxpcERUYiB7YW5pbWF0aW9uOk1vb25Nb3ZlIDcwcyBsaW5lYXIgaW5maW5pdGU7fQ0KLmVsaXBEVGMge2FuaW1hdGlvbjpvcGFjRFQgNzBzIGxpbmVhciBpbmZpbml0ZTt9DQoNCkBrZXlmcmFtZXMgTW9vbk1vdmUgew0KCTAlIHt0cmFuc2Zvcm06IHRyYW5zbGF0ZXgoMHB4KSB0cmFuc2xhdGV5KDMwMHB4KTt9DQoJMTAwJSB7dHJhbnNmb3JtOiB0cmFuc2xhdGV4KDMwMHB4KSB0cmFuc2xhdGV5KC0xMDBweCk7fQ0KfQ0KDQpAa2V5ZnJhbWVzIG9wYWNEVCB7MCUge29wYWNpdHk6IDAuMzt9IDcwJSB7b3BhY2l0eTogMS4wO319DQoNCi5lbGlwYyB7YW5pbWF0aW9uOm9wYWMgN3MgbGluZWFyIGluZmluaXRlO30NCi5lbGlwZXRoIHthbmltYXRpb246b3BhY2V0aCA3cyBsaW5lYXIgaW5maW5pdGU7fQ0KLmVsaXBneHkge2FuaW1hdGlvbjpvcGFjZ3h5IDE0cyBsaW5lYXIgaW5maW5pdGU7fQ0KDQpAa2V5ZnJhbWVzIG9wYWNldGggezAlIHtvcGFjaXR5OiAwO30gMiUge29wYWNpdHk6IDA7fSAyLjI1JSB7b3BhY2l0eTogMTt9IDEwMCUge29wYWNpdHk6IDA7fX0NCkBrZXlmcmFtZXMgb3BhY2d4eSB7MCUge29wYWNpdHk6IDA7fSA0JSB7b3BhY2l0eTogMDt9ICA0LjUlIHtvcGFjaXR5OiAxO30gMTAwJSB7b3BhY2l0eTogMDt9fQ0KQGtleWZyYW1lcyBvcGFjIHsNCjAlIHtvcGFjaXR5OiAwO30gDQoxJSB7b3BhY2l0eTogMDt9IA0KMS41JSB7b3BhY2l0eTogMTt9IA0KMiUge29wYWNpdHk6IDA7fSANCjQlIHtvcGFjaXR5OiAwO30gDQo0LjUlIHtvcGFjaXR5OiAxO30gDQo1JSB7b3BhY2l0eTogMDt9IA0KNiUge29wYWNpdHk6IDA7fSANCjYuNSUge29wYWNpdHk6IDE7fSANCjclIHtvcGFjaXR5OiAwO30gDQo4JSB7b3BhY2l0eTogMDt9IA0KOC41JSB7b3BhY2l0eTogMTt9IA0KOSUge29wYWNpdHk6IDA7fSANCjEwMCUge29wYWNpdHk6IDA7fQ0KfWQCCA8WAh4HY29udGVudAUESUU9OGQCCQ8WAh8CBRd0ZXh0L2h0bWw7Y2hhcnNldD1VVEYtOGQCCw8WAh8CBQlib29reWJsb2dkAgwPFgIfAgUJYm9va3libG9nZAIODxYCHwIFCW5vYXJjaGl2ZWQCDw8WAh8CBRkyMDI1LTExLTEzVDA2OjE1OjU1KzAwOjAwZAIQDxYCHwJkZAIRDxYCHwAFLGh0dHA6Ly93d3cuYm9va3libG9nLmNvbT9wZ2U9MjcwODQtYm9va3libG9nZAISDxYGHgR0eXBlBQlpbWFnZS9wbmceBHNpemUFBzE5MngxOTIfAAUyL2Zhdmljb25zL1NpdGVGYXZJY29uRGlyZWN0b3J5L2Zhdmljb24xOTIucG5nP3Y9NDlkAhMPFgYfAwUMaW1hZ2UveC1pY29uHwQFBTE2eDE2HwAFMS9mYXZpY29ucy9TaXRlRmF2SWNvbkRpcmVjdG9yeS9mYXZpY29uMTYucG5nP3Y9NDlkAhQPFgQfAwUJaW1hZ2UvcG5nHwAFMS9mYXZpY29ucy9TaXRlRmF2SWNvbkRpcmVjdG9yeS9mYXZpY29uU0MucG5nP3Y9NDlkAhUPFgYfAwUJaW1hZ2UvcG5nHgVzaXplcwUHMTgweDE4MB8ABTQvZmF2aWNvbnMvU2l0ZUZhdkljb25EaXJlY3RvcnkvZmF2aWNvbkFwcGxlLnBuZz92PTQ5ZAIWDxYEHwAFMi9mYXZpY29ucy9TaXRlRmF2SWNvbkRpcmVjdG9yeS9TYWZhcmlNYXNrLnN2Zz92PTQ5HgVjb2xvcgUHIzAwMDBGRmQCFw8WAh8CBQcjMDAwMEZGZAIYDxYCHwIFByMwMDAwRkZkAhkPFgIfAgUGRkYwMDAwZAIED2QWCAIBDxYCHwFkZAIDDxYCHwFkZAIFD2QWBgIBDxYCHwFlZAIDDxYCHwEFKDxkaXYgSUQ9IkhtTW51IiBjbGFzcz0icHIgZGMgejEwIj48L2Rpdj5kAgkPFgIfAQWiFTxkaXYgY2xhc3M9InoyIiBzdHlsZT0icG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOjEwcHQ7Ij4NCg0KPGRpdiBjbGFzcz0iZ2FwMjAiPjwvZGl2Pg0KDQo8ZGl2IGNsYXNzPSJwciBkZGJjIG13NzAwIiBzdHlsZT0icGFkZGluZzowcHggMTVweCAwcHggMTVweCI+DQoxMFVzZSBvZiB0aGlzIGludGVybmV0IHNpdGUgaXMgc3ViamVjdCB0byBleHByZXNzIHRlcm1zIG9mIHVzZS4gQnkgdXNpbmcgdGhpcyBzaXRlLCB5b3Ugc2lnbmlmeSB0aGF0IHlvdSBhZ3JlZSB0byBiZSBib3VuZCBieSB0aGVzZSBDb25kaXRpb25zIG9mIFVzZSBhbmQgYWxsIG90aGVyIFBvbGljaWVzIG9yIE5vdGljZXMuIEFzIGFuIEFtYXpvbiBBc3NvY2lhdGUgSSBlYXJuIGZyb20gcXVhbGlmeWluZyBwdXJjaGFzZXMuDQo8L2Rpdj4NCg0KPGRpdiBjbGFzcz0iZ2FwNSI+PC9kaXY+DQoNCjxhIGNsYXNzPSJ0c2IiIHN0eWxlPSJjb2xvcjpyZ2JhKDE2MiwxOTcsMjE5LDEpOyIgaHJlZj0nLi4vP3BnZT0zMDAxMC1Db25kaXRpb25zLW9mLVVzZScgcmVsPSJub2ZvbGxvdyI+Q29uZGl0aW9ucyBvZiBVc2U8L2E+wqAtIDxhIGNsYXNzPSJ0c2IiIHN0eWxlPSJjb2xvcjpyZ2JhKDE2MiwxOTcsMjE5LDEpOyIgaHJlZj0nLi4vP3BnZT0zMDAxMS1Qcml2YWN5LU5vdGljZSAnIHJlbD0ibm9mb2xsb3ciPlByaXZhY3kgTm90aWNlPC9hPsKgLSA8YSBjbGFzcz0idHNiIiBzdHlsZT0iY29sb3I6cmdiYSgxNjIsMTk3LDIxOSwxKTsiIGhyZWY9Jy4uLz9wZ2U9MzAwMTItTWVkaWEtUHJlc3MtS2l0JyByZWw9Im5vZm9sbG93Ij5NZWRpYS9QcmVzcyBraXQ8L2E+DQoNCjxkaXYgY2xhc3M9ImdhcDUiPjwvZGl2Pg0KDQpDb3B5cmlnaHQgwqkgMjAxNi0yMDI1IGJvb2t5YmxvZy5jb20uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQoNCjxkaXYgY2xhc3M9ImdhcDUiPjwvZGl2Pg0KDQo8L2Rpdj4NCg0KPGRpdiBjbGFzcz0iZ2FwMjAiPjwvZGl2Pg0KDQo8L2Rpdj4NCg0KPGRpdiBJRD0iSW5zZXJ0UGxheWVyUG5sIiBjbGFzcz0icHIgZGRiYyB0MCBsMCBoMTAwcCB3MTAwcCI+DQpyZ2JhKDAwMCwwMDAsMDAwLDEpOw0KcmdiYSgyNTUsMjU1LDI1NSwxKTsNCnJnYmEoMjU1LDI1NSwyNTUsMSk7DQpyZ2JhKDA3NywwMDAsMDAwLDEpOw0KcmdiYSgyNTUsMTAwLDEwMCwxKTsNCjBweDsNClllczsNCnBmOw0KMTsNCmgwOw0KaHR0cHM6Ly9hbmNob3IuZm0vcy9mYTk1OWNjOC9wb2RjYXN0L3JzczsNCmh0dHBzOi8vd3d3LkV2ZXJ5dGhpbmdJc0Nvbm5lY3RlZFJMLmNvbTsNCmh0dHBzOi8vd3d3LlJMaW5kZW1hbm4uY29tL2Zhdmljb25zL2VpY2Zhdmljb25zL0VJQ0Zhdkljb24xODAucG5nOw0KaHR0cHM6Ly93d3cuUkxpbmRlbWFubi5jb20vP3BnZT0zMDAxNS0NCjwvZGl2Pg0KPHNjcmlwdCBzcmM9Ii4uL3N5cy9qcy9FcFBvZENhc3RQbGF5ZXJWMTEwLmpzIj48L3NjcmlwdD48ZGl2IElEPSJDb29raWVNZXNzYWdlIiBjbGFzcz0idHNiIHBmIGRjIGIwIGwwIHcxMDBwIHZhbSBzeXNiZ2dyYXkiIHN0eWxlPSJ6LWluZGV4OjEwMDAiPjxkaXYgY2xhc3M9InRzYiBwciBkZGJqIHN5c2NscndoaXRlIHBkNCBtdzUwMCB2YW0gbTQiIHN0eWxlPSJtYXJnaW46NHB4IDQwcHggNHB4IDQwcHgiPnd3dy5ib29reWJsb2cuY29tIHJlcXVpcmVzIGNvb2tpZXMgYW5kIHdpbGwgbm90IGZ1bmN0aW9uIHByb3Blcmx5IHdpdGhvdXQgdGhlIHVzZSBvZiBjb29raWVzLiBDb29raWVzIGFyZSBzdG9yZWQgb24geW91ciBjb21wdXRlciBhbmQgYXJlIHVzZWQgdG8ga2VlcCB5b3VyIGNhcnQgY29udGVudHMgaW4geW91ciBjYXJ0IGFuZCBvdGhlciBzaW1pbGFyIHB1cnBvc2VzLiBJZiB5b3UgZG8gbm90IHdhbnQgY29va2llcyBmcm9tIHRoaXMgc2l0ZSB1c2VkIHRoZW4gbGVhdmUgdGhpcyBzaXRlIGFuZCBkZWxldGUgYW55IHJlbWFpbmluZyBjb29raWVzIGZvciB3d3cuYm9va3libG9nLmNvbSBmcm9tIHlvdXIgYnJvd3Nlci48L2Rpdj48ZGl2IGNsYXNzPSJ0c2IgcHIgZGRiYyI+PGRpdiBjbGFzcz0idHNiIHByIGRkYmMgY3Agc3lzYnRuIGZzMTYgZnc2MDAgdmFtIHBkNCIgc3R5bGU9ImNvbG9yOnJnYmEoMCwwLDAsMSk7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIwMCwyMDAsMCwxKSIgc3R5bGU9IndpZHRoOjB2dyIgb25DbGljaz0iZG9jdW1lbnQuY29va2llID0gJ2Jvb2t5YmxvZ0lBZ3JlZWRUb0Nvb2tpZXM9WWVzOyBleHBpcmVzPVRodSwgMTEgTm92IDIwMjcgMDA6MDA6MDAgVVRDJztkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnQ29va2llTWVzc2FnZScpLmlubmVySFRNTCA9ICcnOyI+PGRpdiBjbGFzcz0idHNiIHByIGRkYmMgdmFtIj5JIFVuZGVyc3RhbmQ8L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJ0c2IgcHIgZGRiYyBjcCBzeXNidG4gZnMxNiBmdzYwMCB2YW0gcGQ0IiBzdHlsZT0iY29sb3I6cmdiYSgwLDAsMCwxKTtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjAwLDIwMCwwLDEpIiBzdHlsZT0id2lkdGg6MHZ3IiBvbkNsaWNrPSJkb2N1bWVudC5jb29raWUgPSAnYm9va3libG9nSUFncmVlZFRvQ29va2llcz1ObzsgZXhwaXJlcz1UdWUsIDExIE5vdiAyMDI1IDAwOjAwOjAwIFVUQyc7bG9jYXRpb24uaHJlZj0nLi4vY2xlYXIvTm9Db29raWVzLmFzcHgnOyI+PGRpdiBjbGFzcz0idHNiIHByIGRkYmMgdmFtIj5JIERvIE5vdCBBZ3JlZTwvZGl2PjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9ImdhcDEwIj48L2Rpdj48L2Rpdj5kAgcPFgIfAQWOwAI8L2Rpdj4NCg0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KQmtzSm4oKTsNClN0YXJ0U2VxdWVuY2UoKTsNCg0KDQoNCg0KDQpmdW5jdGlvbiBBVHhKbigpDQp7DQoJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0N1clBubCcpLmlubmVySFRNTDsNCgl2YXIgSXRlbXNWYXIgPSAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0FkTFBubCcpLmlubmVySFRNTCkuc3BsaXQoIjsiKTsJDQoJQ3VyVmFyID0gcGFyc2VJbnQoSXRlbXNWYXJbcGFyc2VJbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0N1clBubCcpLmlubmVySFRNTCldKSAtIDE7DQoJdmFyIEFUeFZhciA9ICIiOw0KCUFUeFZhciA9IEFUeFZhciArICJUaW1lIFRyYXZlbCwgVGhlIFNwZWVkIG9mIExpZ2h0LCBHcmF2aXR5LCBhbmQgVGhlIEJpZyBCYW5nLiA8YnIgLz48YnIgLz5XaGF0IGlzIG15dGggYW5kIHdoYXQgaXMgdHJ1ZT88YnIgLz48YnIgLz5GaW5kIG91dCBpbiB0aGlzIGFuc3dlciBwYWNrZWQgYm9vay4iDQoJQVR4VmFyID0gQVR4VmFyICsgIjtZb3VyIFBlcmNlaXZlZCBJZGVudGl0eSAtIFRoZSBMaWZlIFJlcGFpciBNYW51YWw8YnIgLz48YnIgLz5Ib3cgdG8gT3ZlcmNvbWUgRGlmZmljdWx0IFBlb3BsZSwgQ29uZnVzaW9uLCBVbmhhcHBpbmVzcywgRGVwcmVzc2lvbiwgQXJyb2dhbmNlLCBKZWFsb3VzeSwgRmVhciwgRG91YnQsIGFuZCBMaWVzLiINCglBVHhWYXIgPSBBVHhWYXIgKyAiO01ha2UgWW91cnMgYSBNYXJyaWFnZSBNYWRlIGluIEhlYXZlbiBGaWxsZWQgd2l0aCBQYXNzaW9uIGFuZCBKb3k8YnIgLz48YnIgLz5NQVJSSUFHRSBNQU5VQUwiDQoJQVR4VmFyID0gQVR4VmFyICsgIjtIT1cgVE8gQlVJTEQgQSBGT1VOREFUSU9OIE9GIFJPQ0s8YnIgLz48YnIgLz5USEUgRkFNSUxZIFJFUEFJUiBNQU5VQUwiDQoJQVR4VmFyID0gQVR4VmFyICsgIjtUbyBtYWtlIG91ciBwcmF5ZXJzIHdvcmsgZWZmZWN0aXZlbHksIHdlIG5lZWQgdG8ga25vdyBXSFkgT3VyIFByYXllcnMgRG9udCBXb3JrPGJyIC8+PGJyIC8+TGVhcm4gdGhlIGJhc2ljcyBpbiBUaGUgUHJheWVyIEhvdy1UbyBNYW51YWwiDQoJQVR4VmFyID0gQVR4VmFyICsgIjtUaGUgV2VpZ2h0IExvc3MgUmVwYWlyIE1hbnVhbDxiciAvPjxiciAvPkZlZWwgQmV0dGVyPGJyIC8+RmVlbCBZb3VuZ2VyPEJyIC8+TGl2ZSBMb25nZXI8YnIgLz5MaXZlIEJldHRlcjxiciAvPjxiciAvPkxlYXJuIEhvdyB0byBMb3NlIFdlaWdodCBXaGlsZSBTbGVlcGluZyINCglBVHhWYXIgPSBBVHhWYXIgKyAiO1RoZSBGaXJzdCBGb3VyIERheXM8YnIgLz48YnIgLz5JcyBpdCBwb3NzaWJsZSB0aGF0IEJpYmxpY2FsIENyZWF0aW9uIGlzIHNjaWVudGlmaWNhbGx5IHBvc3NpYmxlPzxiciAvPjxiciAvPlRoZXJlIGFyZSBhbnN3ZXJzIg0KCUFUeFZhciA9IEFUeFZhciArICI7RmluZGluZyBHcmF0aXR1ZGUgaW4gSGFyZCBUaW1lczxiciAvPjxiciAvPldoZW4gbGlmZSBpcyBiZWF0aW5nIHlvdSBkb3duLCB5b3UgbmVlZCB0byBmaW5kIHRoZSBlbHVzaXZlIEtleSBjYWxsZWQgR3JhdGl0dWRlLjxiciAvPjxiciAvPllvdXIgR3VpZGUgdG8gR3JhdGl0dWRlIg0KCUFUeFZhciA9IEFUeFZhciArICI7RGF5IFRocmVlIC0gR3Jhdml0eSwgTGFuZCwgU2VhcywgYW5kIEV2b2x1dGlvbiBvZiBQbGFudHM8YnIgLz48YnIgLz5Tb2xpZCBiYXNpYyBzY2llbmNlIGV4cGxhaW5pbmcgaG93IHBsYW50cyBmb3JtZWQgYW5kIGhvdyBsb25nIGl0IHRvb2suIg0KCUFUeFZhciA9IEFUeFZhciArICI7RGF5IEZpdmUgYW5kIERheSBTaXggLSBUaGUgQ3JlYXR1cmVzIC0gUmV2b2x1dGlvbiBvciBFdm9sdXRpb248YnIgLz48YnIgLz5JbnZlc3RpZ2F0ZSB0aGUgcmVhbGl0aWVzIGFuZCBleHRlbnRzIG9mIHRoZSBhcnJpdmFsIG9mIHRoZSBhbmltYWxzPGJyIC8+PGJyIC8+IEV2b2x1dGlvbiBvciBDcmVhdGlvbiwgb3Igd2FzIGl0IGJvdGg/Ig0KCUFUeFZhciA9IEFUeFZhciArICI7RXZvbHV0aW9uIHZlcnN1cyBNYW4gLSBJbiBPdXIgSW1hZ2U8YnIgLz48YnIgLz5XYXMgaXQgYWxsIG1vbmtleSBidXNpbmVzcz8gT3Igd2FzIG1hbiBjcmVhdGVkLCBhbmQgaWYgc28sIGJ5IHdoYXQgbWV0aG9kIGRpZCBpdCBvY2N1cj8iDQoJQVR4VmFyID0gQVR4VmFyICsgIjtCb2F0cywgRmxvb2RzLCBhbmQgTm9haCAtIFRoZSBEZWx1Z2U8YnIgLz48YnIgLz5Db3VsZCBhbnkgYm9hdCByZWFsbHkgaG9sZCBhbGwgc3BlY2llcz8gQW5kIHdoZXJlIGRpZCBhbGwgdGhhdCB3YXRlciBnbz88YnIgLz48YnIgLz5BbnN3ZXJzIGZvciB0b3VnaCBxdWVzdGlvbnMgZm91bmQgaGVyZSEiDQoJQVR4VmFyID0gQVR4VmFyICsgIjtUaGUgQmlibGUgSG93LVRvIE1hbnVhbCBBTkQgVGhlIFRoaW5ncyBXZSBEb24mIzgyMTd0IFNlZTxiciAvPjxiciAvPldoYXQmIzgyMTdzIHRoZSBwb2ludCBvZiB0aGUgQmlibGU/PGJyIC8+SXQmIzgyMTdzIG5vdCB3aGF0IHBlb3BsZSB0aGluay4gIg0KCUFUeFZhciA9IEFUeFZhciArICI7VXBvbiBUaGlzIFJvY2sgSSBXaWxsIEJ1aWxkIE15IENodXJjaDxiciAvPjxiciAvPklzIHRvZGF5JiM4MjE3cyAmIzgyMjBjaHVyY2gmIzgyMjEgdGhlIFJFQUwgQ2h1cmNoPzxiciAvPjxiciAvPkFuZCB3aGljaCBvbmUgaXMgdGhlIGJlc3Q/Ig0KCXZhciBCa1R4VmFyID0gQVR4VmFyLnNwbGl0KCI7Iik7DQoJdmFyIEJrc1ZhciA9ICgiQmVuZGluZy1UaGUtUnVsZXI7SG90LVdhdGVyO1JlZC1Ib3QtTWFycmlhZ2U7U3Ryb25nLUZhbWlseTtVbmRlcnN0YW5kaW5nLVByYXllcjtEUkVBTS1USElOO1RoZS1TY2llbmNlLU9mLUdvZC1Wb2x1bWUtMTtUaGFuay1Zb3UtR09EO1RoZS1TY2llbmNlLU9mLUdvZC1Wb2x1bWUtMjtUaGUtU2NpZW5jZS1PZi1Hb2QtVm9sdW1lLTM7VGhlLVNjaWVuY2UtT2YtR29kLVZvbHVtZS00O1RoZS1TY2llbmNlLU9mLUdvZC1Wb2x1bWUtNTtVbmRlcnN0YW5kaW5nLVRoZS1CaWJsZTtVbmRlcnN0YW5kaW5nLVRoZS1DaHVyY2giKS5zcGxpdCgiOyIpOw0KCXZhciBCa1ZhciA9IEJrc1ZhcltDdXJWYXJdDQoJdmFyIEFUeDJWYXIgPSBCa1R4VmFyW0N1clZhcl0NCglCa1ZhciA9IEJrVmFyLnJlcGxhY2UoIi0iLCIgIikNCglCa1ZhciA9IEJrVmFyLnJlcGxhY2UoIi0iLCIgIikNCglCa1ZhciA9IEJrVmFyLnJlcGxhY2UoIi0iLCIgIikNCglCa1ZhciA9IEJrVmFyLnJlcGxhY2UoIi0iLCIgIikNCglCa1ZhciA9IEJrVmFyLnJlcGxhY2UoIi0iLCIgIikNCglCa1ZhciA9IEJrVmFyLnJlcGxhY2UoIi0iLCIgIikNCglCa1ZhciA9IEJrVmFyLnJlcGxhY2UoIi0iLCIgIikNCgl2YXIgYXR4dFZhciA9ICI8ZGl2IElEPSdBZFR4UG5sJyBjbGFzcz0ncHIgZGRiYyBhZHR4dCBmdzYwMCBmczExJyBzdHlsZT0ncGFkZGluZzowcHggN3B4IDBweCAwcHg7Jz48YnIgLz4iOw0KCWF0eHRWYXIgPSBhdHh0VmFyICsgQmtWYXI7DQoJYXR4dFZhciA9IGF0eHRWYXIgKyAiPGRpdiBjbGFzcz0nZ2FwNSc+PC9kaXY+Ig0KCWF0eHRWYXIgPSBhdHh0VmFyICsgIjxkaXYgY2xhc3M9J3ByIGRjIGZ3MzAwIGZzOSc+IiArIEFUeDJWYXIgKyAiPC9kaXY+IjsNCglhdHh0VmFyID0gYXR4dFZhciArICI8L2Rpdj4iOw0KCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJCa0R0bFBubCIpLmlubmVySFRNTCA9IGF0eHRWYXI7DQp9DQoNCg0KDQpmdW5jdGlvbiBhc2QoVGV4dFZhcikNCnsNCglpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1JwdFBubCcpICE9IG51bGwpDQoJew0KCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnUnB0UG5sJykuaW5uZXJIVE1MID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1JwdFBubCcpLmlubmVySFRNTCArIFRleHRWYXIgKyAiPGJyIC8+IjsNCgl9DQp9DQoNCg0KDQpmdW5jdGlvbiBTZXRCeFdpZHRoSm4oVGhlT2JqZWN0VmFyKQ0Kew0KCWlmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFRoZU9iamVjdFZhcikubm9kZU5hbWUgPT09ICJTRUxFQ1QiKQ0KCXsNCgkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoVGhlT2JqZWN0VmFyKS5zdHlsZS53aWR0aCA9IChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChUaGVPYmplY3RWYXIpLm9wdGlvbnNbZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoVGhlT2JqZWN0VmFyKS5zZWxlY3RlZEluZGV4XS50ZXh0Lmxlbmd0aCAqIDYpICsgNDAgKyAicHgiOw0KCX0NCgllbHNlDQoJew0KCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZChUaGVPYmplY3RWYXIpLnN0eWxlLndpZHRoID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoVGhlT2JqZWN0VmFyKS52YWx1ZS5sZW5ndGggKiA5ICsgInB4IjsNCgl9DQp9DQoNCg0KDQpmdW5jdGlvbiBTaG93Sm4oTWVWYXIsUGFuZWxWYXIsUGFya0xvY2F0aW9uVmFyLEhlaWdodFZhcikNCnsNCgl2YXIgT2ZmU2V0SGVpZ2h0VmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoUGFuZWxWYXIpLm9mZnNldEhlaWdodDsNCglpZihkb2N1bWVudC5nZXRFbGVtZW50QnlJZChQYW5lbFZhcikuc3R5bGUubWF4SGVpZ2h0IDwgSGVpZ2h0VmFyIHx8IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFBhbmVsVmFyKS5zdHlsZS5tYXhIZWlnaHQgPiBIZWlnaHRWYXIpDQoJew0KCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZChQYW5lbFZhcikuc3R5bGUubWF4SGVpZ2h0ID0gT2ZmU2V0SGVpZ2h0VmFyICsgInB4IjsNCgkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoTWVWYXIpLmlubmVySFRNTCA9ICI8ZGl2IGNsYXNzPSdnYXAyMCc+PC9kaXY+LiAuIC4gU2hvdyBNb3JlPGRpdiBjbGFzcz0ncHIgZGRiYyB3MjAnPjwvZGl2PiI7DQoJfQ0KCWVsc2UNCgl7DQoJCUhlaWdodFZhciA9ICIzMDAwcHgiOw0KCQlPZmZTZXRIZWlnaHRWYXIgPSAzMDAwOw0KCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZChNZVZhcikuaW5uZXJIVE1MID0gIjxkaXYgY2xhc3M9J2dhcDIwJz48L2Rpdj4uIC4gLiBTaG93IExlc3M8ZGl2IGNsYXNzPSdwciBkZGJjIHcyMCBoMCc+PC9kaXY+IjsNCgl9DQoJT2ZmU2V0SGVpZ2h0VmFyID0gKE9mZlNldEhlaWdodFZhciAvIDEwMDApDQoJaWYoT2ZmU2V0SGVpZ2h0VmFyIDwgMSl7T2ZmU2V0SGVpZ2h0VmFyPTE7fQ0KCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFBhbmVsVmFyKS5zdHlsZS50cmFuc2l0aW9uID0gIm1heC1oZWlnaHQgIiArIE9mZlNldEhlaWdodFZhciArICJzIjsNCglkb2N1bWVudC5nZXRFbGVtZW50QnlJZChQYW5lbFZhcikuc3R5bGUubWF4SGVpZ2h0ID0gSGVpZ2h0VmFyOw0KCXdpbmRvdy5sb2NhdGlvbi5ocmVmID0gUGFya0xvY2F0aW9uVmFyOw0KCUJrc0puKCk7DQp9DQoNCg0KDQpmdW5jdGlvbiBBbmdsZUpuKCkNCnsNCglpZihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnU2luQngnKSAhPSBudWxsICYmIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdDb1NpbkJ4JykgIT0gbnVsbCAmJiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnVGFuZ2VudEJ4JykgIT0gbnVsbCAmJiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnT3Bwb3NpdGVCeCcpICE9IG51bGwgJiYgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0h5cG90ZW51c2VCeCcpICE9IG51bGwgJiYgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0FkamFjZW50QngnKSAhPSBudWxsICYmIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdBbmdsZUFCeCcpICE9IG51bGwgJiYgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0FuZ2xlQkJ4JykgIT0gbnVsbCAmJiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnQW5nbGVDQngnKSAhPSBudWxsKQ0KCXsNCgkJdmFyIHNpbk9mQW5nbGVYID0gcGFyc2VGbG9hdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnT3Bwb3NpdGVCeCcpLnZhbHVlKSAvIHBhcnNlRmxvYXQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0h5cG90ZW51c2VCeCcpLnZhbHVlKQ0KCQl2YXIgVGhlQW5zd2Vyc1ZhciA9ICIiDQoNCgkJLy9kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnQWRqYWNlbnRCeCcpLnZhbHVlID0gMjQNCgkJLy9kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnT3Bwb3NpdGVCeCcpLnZhbHVlID0gMzYNCgkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0h5cG90ZW51c2VCeCcpLnZhbHVlID0gTWF0aC5oeXBvdChwYXJzZUZsb2F0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdBZGphY2VudEJ4JykudmFsdWUpLCBwYXJzZUZsb2F0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdPcHBvc2l0ZUJ4JykudmFsdWUpKQ0KDQoJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdBbmdsZUFCeCcpLnZhbHVlID0gOTANCgkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0FuZ2xlQkJ4JykudmFsdWUgPSAoTWF0aC5hc2luKHNpbk9mQW5nbGVYKSAqIDE4MC9NYXRoLlBJKQ0KCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnQW5nbGVDQngnKS52YWx1ZSA9ICg5MCAtIChNYXRoLmFzaW4oc2luT2ZBbmdsZVgpICogMTgwL01hdGguUEkpKQ0KDQoJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdTaW5CeCcpLnZhbHVlID0gCXBhcnNlRmxvYXQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ09wcG9zaXRlQngnKS52YWx1ZSkgLyBwYXJzZUZsb2F0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdIeXBvdGVudXNlQngnKS52YWx1ZSkNCgkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0NvU2luQngnKS52YWx1ZSA9IAlwYXJzZUZsb2F0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdBZGphY2VudEJ4JykudmFsdWUpIC8gcGFyc2VGbG9hdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnSHlwb3RlbnVzZUJ4JykudmFsdWUpDQoJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdUYW5nZW50QngnKS52YWx1ZSA9IAlwYXJzZUZsb2F0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdPcHBvc2l0ZUJ4JykudmFsdWUpIC8gcGFyc2VGbG9hdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnQWRqYWNlbnRCeCcpLnZhbHVlKQ0KDQoJCVRoZUFuc3dlcnNWYXIgPSBUaGVBbnN3ZXJzVmFyICsgc2luT2ZBbmdsZVggKyAiPGJyIC8+Ig0KCQlUaGVBbnN3ZXJzVmFyID0gVGhlQW5zd2Vyc1ZhciArIChNYXRoLmFzaW4oc2luT2ZBbmdsZVgpICogMTgwL01hdGguUEkpICsgIiBMYXJnZSBBbmdsZTxiciAvPiINCgkJVGhlQW5zd2Vyc1ZhciA9IFRoZUFuc3dlcnNWYXIgKyAoOTAgLSAoTWF0aC5hc2luKHNpbk9mQW5nbGVYKSAqIDE4MC9NYXRoLlBJKSkgKyAiIFNtYWxsIEFuZ2xlPGJyIC8+Ig0KCQlUaGVBbnN3ZXJzVmFyID0gVGhlQW5zd2Vyc1ZhciArIE1hdGguaHlwb3QoMjQsIDM2KSArICI8YnIgLz4iDQoJCS8vYWxlcnQoTWF0aC5zaW4oc2luT2ZBbmdsZVgpKQ0KCQkvL2FsZXJ0KHBhcnNlRmxvYXQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1NpbkJ4JykudmFsdWUpIC8gcGFyc2VGbG9hdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnQ29TaW5CeCcpLnZhbHVlKSkNCgkNCgkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1Nob3dBbnN3ZXJzJykuaW5uZXJIVE1MID0gVGhlQW5zd2Vyc1Zhcg0KCQkNCgkJLy9odHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMzU5ODU0Ny9kcmF3LWEtbGluZS1mcm9tLXgteS13aXRoLWEtZ2l2ZW4tYW5nbGUtYW5kLWxlbmd0aA0KCQl2YXIgYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJteUNhbnZhcyIpOw0KCQl2YXIgY3R4ID0gYy5nZXRDb250ZXh0KCIyZCIpOw0KCQl4MSA9IDMwOw0KCQl5MSA9IDMwOw0KCQlyID0gIDgwOw0KCQl0aGV0YSA9IDAuNTsNCgkJY3R4Lm1vdmVUbyh4MSwgeTEpOw0KCQljdHgubGluZVRvKHgxICsgciAqIE1hdGguY29zKHRoZXRhKSwgeTEgKyByICogTWF0aC5zaW4odGhldGEpKTsNCgkJY3R4LnN0cm9rZSgpOw0KCX0NCn0NCg0KDQoNCg0KDQpmdW5jdGlvbiBTdGFydFNlcXVlbmNlKCkNCnsNCglTdGFyc0puKCdCVFJTQ04nKTsNCglDb21ldEpuKCdTcnNDbXRzQScsJ2NtdEEnLCdCVFJTQ04nKTsJDQoJUG9zT3JidEpuKCdTcnNPcmJ0QScpOw0KCVN0YXJzSm4oJ1NyRmxkVFNPRycpOwkJDQoJQ29tZXRKbignU3JzQ210c0RUJywnY210RFQnLCdEVFNDTicpOwkJCQ0KCVN0YXJzSm4oJ1NyRmxkSEQnKTsJDQp9DQoNCg0KDQpmdW5jdGlvbiBQb3NPcmJ0Sm4oU3JzT3JidFZhcikNCnsNCglpZihkb2N1bWVudC5nZXRFbGVtZW50QnlJZChTcnNPcmJ0VmFyKSAhPSBudWxsKQ0KCXsNCgkJdmFyIGhndHZhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFNyc09yYnRWYXIpLm9mZnNldEhlaWdodCAtIDIwDQoJCXZhciB3dGh2YXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChTcnNPcmJ0VmFyKS5vZmZzZXRXaWR0aCAtIDIwDQoJCXZhciBybmR2YXINCgkJcm5kdmFyID0gTWF0aC5mbG9vcigoTWF0aC5yYW5kb20oKSAqIGhndHZhcikgKyAxKTsNCgkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoU3JzT3JidFZhcikuc3R5bGUudG9wID0gKDEwICsgcGFyc2VJbnQocm5kdmFyKSkgKyAncHgnOw0KCQlybmR2YXIgPSBNYXRoLmZsb29yKChNYXRoLnJhbmRvbSgpICogd3RodmFyKSArIDEpOw0KCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZChTcnNPcmJ0VmFyKS5zdHlsZS5sZWZ0ID0gKCAxMCArIHBhcnNlSW50KHJuZHZhcikpICsgJ3B4JzsNCgl9DQp9DQoNCg0KDQpmdW5jdGlvbiBDb21ldEpuKFNyc0NtdHNWYXIsY210VmFyLFNyRmxkVmFyKQ0Kew0KCWlmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFNyc0NtdHNWYXIpICE9IG51bGwgJiYgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY210VmFyKSAhPSBudWxsICYmIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFNyRmxkVmFyKSAhPSBudWxsKQ0KCXsNCgkJdmFyIHJuZHZhciA9IDINCgkJdmFyIFNyc0NvbWV0VmFyDQoJCXZhciBoZ3R2YXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChTckZsZFZhcikub2Zmc2V0SGVpZ2h0IC0gNTA7DQoJCXZhciB0b3B2YXIgPSAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoU3JGbGRWYXIpLm9mZnNldFRvcCk7DQoNCgkJU3JzQ29tZXRWYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChTcnNDbXRzVmFyKS5pbm5lckhUTUw7DQoJCVNyc0NvbWV0VmFyID0gU3JzQ29tZXRWYXIucmVwbGFjZSgic2QiLCJzYSIpOw0KCQlTcnNDb21ldFZhciA9IFNyc0NvbWV0VmFyLnJlcGxhY2UoInNjIiwic2QiKTsNCgkJU3JzQ29tZXRWYXIgPSBTcnNDb21ldFZhci5yZXBsYWNlKCJzYiIsInNjIik7DQoJCVNyc0NvbWV0VmFyID0gU3JzQ29tZXRWYXIucmVwbGFjZSgic2EiLCJzYiIpOw0KCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZChTcnNDbXRzVmFyKS5pbm5lckhUTUwgPSBTcnNDb21ldFZhcjsNCg0KCQlTcnNDb21ldFZhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNtdFZhcikuaW5uZXJIVE1MOw0KCQlTcnNDb21ldFZhciA9IFNyc0NvbWV0VmFyLnJlcGxhY2UoInNjIiwic2QiKTsNCgkJU3JzQ29tZXRWYXIgPSBTcnNDb21ldFZhci5yZXBsYWNlKCJzYiIsInNjIik7DQoJCVNyc0NvbWV0VmFyID0gU3JzQ29tZXRWYXIucmVwbGFjZSgic2QiLCJzYiIpOw0KCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjbXRWYXIpLmlubmVySFRNTCA9IFNyc0NvbWV0VmFyOw0KDQoJCXJuZHZhciA9IE1hdGguZmxvb3IoKE1hdGgucmFuZG9tKCkgKiBoZ3R2YXIpICsgMSk7DQoJCXJuZHZhciA9IHJuZHZhciAqIDEgDQoJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFNyc0NtdHNWYXIpLnN0eWxlLnRvcCA9IChybmR2YXIpICsgJ3B4JzsNCgkJdmFyIEN5Y2xlU2Vjb25kc1ZhciA9IE1hdGgucmFuZG9tKCkgKiAoMjAwMDAgLSA1MDAwKSArIDUwMDA7DQoJCXNldFRpbWVvdXQoIkNvbWV0Sm4oJyIgKyBTcnNDbXRzVmFyICsgIicsJyIgKyBjbXRWYXIgKyAiJywnIiArIFNyRmxkVmFyICsgIicpIiwgQ3ljbGVTZWNvbmRzVmFyKTsNCgkJfQ0KfQ0KDQoNCg0KZnVuY3Rpb24gU3RhcnNKbihTckZsZFZhcikNCnsNCglpZihkb2N1bWVudC5nZXRFbGVtZW50QnlJZChTckZsZFZhcikgIT0gbnVsbCAmJiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnU3RyMScpICE9IG51bGwgJiYgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1N0cjInKSAhPSBudWxsICYmIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdTdHIzJykgIT0gbnVsbCAmJiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnU3RyNCcpICE9IG51bGwgJiYgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1N0cjUnKSAhPSBudWxsKQ0KCXsNCgkJdmFyIGZyZXFhID0gMA0KCQl2YXIgczF3ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1N0cjEnKS5pbm5lckhUTUw7DQoJCXZhciBzMnIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnU3RyMicpLmlubmVySFRNTDsNCgkJdmFyIHMzYiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdTdHIzJykuaW5uZXJIVE1MOw0KCQl2YXIgczRmID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1N0cjQnKS5pbm5lckhUTUw7DQoJCXZhciBzNWYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnU3RyNScpLmlubmVySFRNTDsNCgkJdmFyIGZsZFcgPSBwYXJzZUludChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChTckZsZFZhcikub2Zmc2V0V2lkdGgpOw0KCQl2YXIgZmxkSCA9IHBhcnNlSW50KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFNyRmxkVmFyKS5vZmZzZXRIZWlnaHQpOw0KCQlmb3IgKHZhciBpPTA7aTxzNWY7aSsrKQ0KCQl7DQoJCQlmcmVxYSA9IHBhcnNlSW50KGZyZXFhKSArIDENCgkJCXRoZWNscyA9ICdzYScNCgkJCVRwdmFyID0gTWF0aC5mbG9vcigoTWF0aC5yYW5kb20oKSAqIGZsZFcpICsgMSk7DQoJCQlMdHZhciA9IE1hdGguZmxvb3IoKE1hdGgucmFuZG9tKCkgKiBmbGRIKSArIDEpOw0KCQkJaWYocGFyc2VJbnQoZnJlcWEpIDwgcGFyc2VJbnQoczF3KSkNCgkJCXsNCgkJCQl0aGVjbHMgPSAncGEgZGRiYyBzYicNCgkJCX0NCgkJCWVsc2UgaWYocGFyc2VJbnQoZnJlcWEpIDwgcGFyc2VJbnQoczF3KSArIHBhcnNlSW50KHMycikpDQoJCQl7DQoJCQkJdGhlY2xzID0gJ3BhIGRkYmMgc2MnDQoJCQl9DQoJCQllbHNlIGlmKHBhcnNlSW50KGZyZXFhKSA8IHBhcnNlSW50KHMxdykgKyBwYXJzZUludChzMnIpICsgcGFyc2VJbnQoczNiKSkNCgkJCXsNCgkJCQl0aGVjbHMgPSAncGEgZGRiYyBzZCcNCgkJCX0NCgkJCWVsc2UgaWYocGFyc2VJbnQoZnJlcWEpID49IHBhcnNlSW50KHMxdykgKyBwYXJzZUludChzMnIpICsgcGFyc2VJbnQoczNiKSArIHBhcnNlSW50KHM0ZikpDQoJCQl7DQoJCQkJdGhlY2xzID0gJ3BhIGRkYmMgc2EnDQoJCQkJZnJlcWEgPSAwOw0KCQkJfQ0KCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoU3JGbGRWYXIpLmlubmVySFRNTCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFNyRmxkVmFyKS5pbm5lckhUTUwgKyAiPGRpdiBjbGFzcz0nIiArIHRoZWNscyArICInIHN0eWxlPSd0b3A6IiArIEx0dmFyICsgInB4O2xlZnQ6IiArIFRwdmFyICsgInB4Jz4iICsgIjwvZGl2PiI7DQoJCX0NCgl9DQp9DQoNCg0KDQpmdW5jdGlvbiBSdW5HTVRKbigpew0KCXZhciB2VmFyDQoJZm9yIChpPTE7IGk8MTI7IGkrKykNCgl7DQoJCWlmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnbXQnICsgaSkgIT0gbnVsbCAmJiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXQnICsgaSkgIT0gbnVsbCkNCgkJew0KCQkJaWYoaSA9PSAxKXt2VmFyID0gVGhlR01USm4oIk0iLDUpfQ0KCQkJZWxzZSBpZihpID09IDIpe3ZWYXIgPSBUaGVHTVRKbigiTSIsMil9DQoJCQllbHNlIGlmKGkgPT0gMyl7dlZhciA9IFRoZUdNVEpuKCJNIiwwKX0NCgkJCWVsc2UgaWYoaSA9PSA0KXt2VmFyID0gVGhlR01USm4oIlAiLDQpfQ0KCQkJZWxzZSBpZihpID09IDUpe3ZWYXIgPSBUaGVHTVRKbigiUCIsNil9DQoJCQllbHNlIGlmKGkgPT0gNil7dlZhciA9IFRoZUdNVEpuKCJQIiw3KX0NCgkJCWVsc2UgaWYoaSA9PSA3KXt2VmFyID0gVGhlR01USm4oIlAiLDgpfQ0KCQkJZWxzZSBpZihpID09IDgpe3ZWYXIgPSBUaGVHTVRKbigiUCIsMTMpfQ0KCQkJZWxzZSBpZihpID09IDkpe3ZWYXIgPSBUaGVHTVRKbigiUCIsMTQpfQ0KCQkJZWxzZSBpZihpID09IDEwKXt2VmFyID0gVGhlR01USm4oIlAiLDE1KX0NCgkJCWVsc2UgaWYoaSA9PSAxMSl7dlZhciA9IFRoZUdNVEpuKCJQIiwxNyl9DQoJCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ210JyArIGkpLmlubmVySFRNTCA9IHZWYXJbMF07DQoJCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXQnICsgaSkuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJ3JnYmEoJyArIHZWYXJbMV0gKyAnLDEpJw0KCQl9DQoJfQ0KCXNldFRpbWVvdXQoIlJ1bkdNVEpuKCkiLCA5MDAwMDApOw0KfQ0KDQoNCg0KZnVuY3Rpb24gVGhlR01USm4oT3BlcmF0b3JWYXIsR01UT2ZmU2V0VmFyKQ0Kew0KCXZhciBjdXJyZW50ZGF0ZXZhciA9IG5ldyBEYXRlKCk7IA0KCWlmKE9wZXJhdG9yVmFyID09ICJNIikNCgl7DQoJCWN1cnJlbnRkYXRldmFyLnNldEhvdXJzKGN1cnJlbnRkYXRldmFyLmdldEhvdXJzKCkgLSBwYXJzZUludChHTVRPZmZTZXRWYXIpKTsNCgl9CQ0KCWVsc2UNCgl7DQoJCWN1cnJlbnRkYXRldmFyLnNldEhvdXJzKGN1cnJlbnRkYXRldmFyLmdldEhvdXJzKCkgKyBwYXJzZUludChHTVRPZmZTZXRWYXIpKTsNCgl9CQ0KCWN1cnJlbnRkYXRldmFyLnRvTG9jYWxlU3RyaW5nKCk7DQoJdmFyIHRoZU1vbnRoVmFyDQoJdmFyIENsb2NrU3VmZml4VmFyID0gIkFNIg0KCXZhciBDbG9ja1Zhcg0KCXZhciBNaW51dGVzVmFyDQoJdmFyIGRhdGV0aW1lVmFyDQoJdmFyIGNvbG9yVmFyDQoJaWYocGFyc2VJbnQoY3VycmVudGRhdGV2YXIuZ2V0TW9udGgoKSkgPT0gcGFyc2VJbnQoMCkpe3RoZU1vbnRoVmFyID0gJ0phbid9DQoJZWxzZSBpZihwYXJzZUludChjdXJyZW50ZGF0ZXZhci5nZXRNb250aCgpKSA9PSBwYXJzZUludCgxKSl7dGhlTW9udGhWYXIgPSAnRmViJ30NCgllbHNlIGlmKHBhcnNlSW50KGN1cnJlbnRkYXRldmFyLmdldE1vbnRoKCkpID09IHBhcnNlSW50KDIpKXt0aGVNb250aFZhciA9ICdNYXInfQ0KCWVsc2UgaWYocGFyc2VJbnQoY3VycmVudGRhdGV2YXIuZ2V0TW9udGgoKSkgPT0gcGFyc2VJbnQoMykpe3RoZU1vbnRoVmFyID0gJ0Fwcid9DQoJZWxzZSBpZihwYXJzZUludChjdXJyZW50ZGF0ZXZhci5nZXRNb250aCgpKSA9PSBwYXJzZUludCg0KSl7dGhlTW9udGhWYXIgPSAnTWF5J30NCgllbHNlIGlmKHBhcnNlSW50KGN1cnJlbnRkYXRldmFyLmdldE1vbnRoKCkpID09IHBhcnNlSW50KDUpKXt0aGVNb250aFZhciA9ICdKdW4nfQ0KCWVsc2UgaWYocGFyc2VJbnQoY3VycmVudGRhdGV2YXIuZ2V0TW9udGgoKSkgPT0gcGFyc2VJbnQoNikpe3RoZU1vbnRoVmFyID0gJ0p1bCd9DQoJZWxzZSBpZihwYXJzZUludChjdXJyZW50ZGF0ZXZhci5nZXRNb250aCgpKSA9PSBwYXJzZUludCg3KSl7dGhlTW9udGhWYXIgPSAnQXVnJ30NCgllbHNlIGlmKHBhcnNlSW50KGN1cnJlbnRkYXRldmFyLmdldE1vbnRoKCkpID09IHBhcnNlSW50KDgpKXt0aGVNb250aFZhciA9ICdTZXAnfQ0KCWVsc2UgaWYocGFyc2VJbnQoY3VycmVudGRhdGV2YXIuZ2V0TW9udGgoKSkgPT0gcGFyc2VJbnQoOSkpe3RoZU1vbnRoVmFyID0gJ09jdCd9DQoJZWxzZSBpZihwYXJzZUludChjdXJyZW50ZGF0ZXZhci5nZXRNb250aCgpKSA9PSBwYXJzZUludCgxMCkpe3RoZU1vbnRoVmFyID0gJ05vdid9DQoJZWxzZSBpZihwYXJzZUludChjdXJyZW50ZGF0ZXZhci5nZXRNb250aCgpKSA9PSBwYXJzZUludCgxMSkpe3RoZU1vbnRoVmFyID0gJ0RlYyd9DQoJQ2xvY2tWYXIgPSBjdXJyZW50ZGF0ZXZhci5nZXRIb3VycygpDQoJaWYocGFyc2VJbnQoY3VycmVudGRhdGV2YXIuZ2V0SG91cnMoKSkgPj0gMTIpe0Nsb2NrVmFyID0gcGFyc2VJbnQoY3VycmVudGRhdGV2YXIuZ2V0SG91cnMoKSAtIDEyKTtDbG9ja1N1ZmZpeFZhciA9ICJQTSI7fQ0KCWlmKHBhcnNlSW50KENsb2NrVmFyKSA9PSAwKXtDbG9ja1ZhciA9IDEyO30NCglNaW51dGVzVmFyID0gKCJBIiArIDAgKyBjdXJyZW50ZGF0ZXZhci5nZXRNaW51dGVzKCkpLnN1YnN0cigtMikNCglkYXRldGltZVZhciA9ICI8Yj5Mb2NhbCBUaW1lOiAiICsgQ2xvY2tWYXIgKyAiOiIgKyBNaW51dGVzVmFyICsgQ2xvY2tTdWZmaXhWYXIgKyAiICgiICsgdGhlTW9udGhWYXIgKyAiICIgKyBjdXJyZW50ZGF0ZXZhci5nZXREYXRlKCkgKyAiLCAiICsgY3VycmVudGRhdGV2YXIuZ2V0RnVsbFllYXIoKSArICIpPC9iPiINCgljb2xvclZhciA9ICIyMzAsMjQwLDI1NSI7DQoJaWYoQ2xvY2tWYXIgKyBDbG9ja1N1ZmZpeFZhciA9PSAiN1BNIil7Y29sb3JWYXIgPSAiMjAwLDIwMCwyMDAifQ0KCWVsc2UgaWYoQ2xvY2tWYXIgKyBDbG9ja1N1ZmZpeFZhciA9PSAiOFBNIil7Y29sb3JWYXIgPSAiMTUwLDE1MCwxNTAifQ0KCWVsc2UgaWYoQ2xvY2tWYXIgKyBDbG9ja1N1ZmZpeFZhciA9PSAiOVBNIil7Y29sb3JWYXIgPSAiMTAwLDEwMCwxMDAifQ0KCWVsc2UgaWYoQ2xvY2tWYXIgKyBDbG9ja1N1ZmZpeFZhciA9PSAiMTBQTSIpe2NvbG9yVmFyID0gIjUwLDUwLDUwIn0NCgllbHNlIGlmKENsb2NrVmFyICsgQ2xvY2tTdWZmaXhWYXIgPT0gIjExUE0iKXtjb2xvclZhciA9ICIwLDAsMCJ9DQoJZWxzZSBpZihDbG9ja1ZhciArIENsb2NrU3VmZml4VmFyID09ICIxMkFNIil7Y29sb3JWYXIgPSAiMCwwLDAifQ0KCWVsc2UgaWYoQ2xvY2tWYXIgKyBDbG9ja1N1ZmZpeFZhciA9PSAiMUFNIil7Y29sb3JWYXIgPSAiMCwwLDAifQ0KCWVsc2UgaWYoQ2xvY2tWYXIgKyBDbG9ja1N1ZmZpeFZhciA9PSAiMkFNIil7Y29sb3JWYXIgPSAiMCwwLDAifQ0KCWVsc2UgaWYoQ2xvY2tWYXIgKyBDbG9ja1N1ZmZpeFZhciA9PSAiM0FNIil7Y29sb3JWYXIgPSAiMCwwLDAifQ0KCWVsc2UgaWYoQ2xvY2tWYXIgKyBDbG9ja1N1ZmZpeFZhciA9PSAiNEFNIil7Y29sb3JWYXIgPSAiNTAsNTAsNTAifQ0KCWVsc2UgaWYoQ2xvY2tWYXIgKyBDbG9ja1N1ZmZpeFZhciA9PSAiNUFNIil7Y29sb3JWYXIgPSAiMTAwLDEwMCwxMDAifQ0KCWVsc2UgaWYoQ2xvY2tWYXIgKyBDbG9ja1N1ZmZpeFZhciA9PSAiNkFNIil7Y29sb3JWYXIgPSAiMTUwLDE1MCwxNTAifQ0KCWVsc2UgaWYoQ2xvY2tWYXIgKyBDbG9ja1N1ZmZpeFZhciA9PSAiN0FNIil7Y29sb3JWYXIgPSAiMjAwLDIwMCwyMDAifQ0KCXJldHVybiBbZGF0ZXRpbWVWYXIsY29sb3JWYXJdDQoJQmtzSm4oKTsNCn0NCg0KDQpmdW5jdGlvbiBDb252ZXJ0TWVhc3VyZUpuKFVuaXRzVmFyLFZhbHVlVmFyLEluT3V0VmFyKQ0Kew0KCWlmKEluT3V0VmFyID09ICJJbiIpDQoJew0KCQlpZihVbml0c1ZhciA9PSAxKXtWYWx1ZVZhciA9IFZhbHVlVmFyIC8gMTJ9IC8vSW5jaGVzDQoJCWVsc2UgaWYoVW5pdHNWYXIgPT0gMil7VmFsdWVWYXIgPSBWYWx1ZVZhcn0gLy9GZWV0DQoJCWVsc2UgaWYoVW5pdHNWYXIgPT0gMyl7VmFsdWVWYXIgPSBWYWx1ZVZhciAqIDUyODB9IC8vTWlsZXMJDQoJCWVsc2UgaWYoVW5pdHNWYXIgPT0gNCl7VmFsdWVWYXIgPSBWYWx1ZVZhciAqIDAuMDMyODA4Mzk5fSAvL0NlbnRpbWV0ZXJzDQoJCWVsc2UgaWYoVW5pdHNWYXIgPT0gNSl7VmFsdWVWYXIgPSBWYWx1ZVZhciAqIDMuMjgwODM5OX0gLy9NZXRlcnMNCgkJZWxzZSBpZihVbml0c1ZhciA9PSA2KXtWYWx1ZVZhciA9IFZhbHVlVmFyICogMzI4MC44Mzk4NX07IC8vS2lsb21ldGVycw0KCQlWYWx1ZVZhciA9IFZhbHVlVmFyIC81MjgwDQoJfQ0KCWVsc2UgaWYoSW5PdXRWYXIgPT0gIk91dCIpDQoJew0KCQlpZihVbml0c1ZhciA9PSAxKXtWYWx1ZVZhciA9IFZhbHVlVmFyICogNjMzNjB9IC8vSW5jaGVzDQoJCWVsc2UgaWYoVW5pdHNWYXIgPT0gMil7VmFsdWVWYXIgPSBWYWx1ZVZhciAqIDUyODB9IC8vRmVldA0KCQllbHNlIGlmKFVuaXRzVmFyID09IDMpe1ZhbHVlVmFyID0gVmFsdWVWYXJ9IC8vTWlsZXMJDQoJCWVsc2UgaWYoVW5pdHNWYXIgPT0gNCl7VmFsdWVWYXIgPSBWYWx1ZVZhciAqIDE2MDkzNH0gLy9DZW50aW1ldGVycw0KCQllbHNlIGlmKFVuaXRzVmFyID09IDUpe1ZhbHVlVmFyID0gVmFsdWVWYXIgKiAxNjA5LjM0fSAvL01ldGVycw0KCQllbHNlIGlmKFVuaXRzVmFyID09IDYpe1ZhbHVlVmFyID0gVmFsdWVWYXIgKiAxLjYwOTM0fTsgLy9LaWxvbWV0ZXJzDQoJfQ0KCXJldHVybiBWYWx1ZVZhcg0KfQ0KDQoNCmZ1bmN0aW9uIEdldFRleHRVbml0Sm4oVW5pdHNWYXIpDQp7DQoJaWYoVW5pdHNWYXIgPT0gMSl7VmFsdWVWYXIgPSAiSW5jaGVzIn0gLy9JbmNoZXMNCgllbHNlIGlmKFVuaXRzVmFyID09IDIpe1ZhbHVlVmFyID0gIkZlZXQifSAvL0ZlZXQNCgllbHNlIGlmKFVuaXRzVmFyID09IDMpe1ZhbHVlVmFyID0gIk1pbGVzIn0gLy9NaWxlcwkNCgllbHNlIGlmKFVuaXRzVmFyID09IDQpe1ZhbHVlVmFyID0gIkNlbnRpbWV0ZXJzIn0gLy9DZW50aW1ldGVycw0KCWVsc2UgaWYoVW5pdHNWYXIgPT0gNSl7VmFsdWVWYXIgPSAiTWV0ZXJzIn0gLy9NZXRlcnMNCgllbHNlIGlmKFVuaXRzVmFyID09IDYpe1ZhbHVlVmFyID0gIktpbG9tZXRlcnMifTsgLy9LaWxvbWV0ZXJzDQoJcmV0dXJuIFZhbHVlVmFyDQp9DQoNCg0KDQoNCg0KDQpTdGFydFNlcXVlbmNlKCk7DQoNCg0KDQoNCg0KZnVuY3Rpb24gQmtzSm4oKQ0KewkNCglpZihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnUnB0UG5sJykgIT0gbnVsbCAmJiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnQ3VyUG5sJykgIT0gbnVsbCAmJiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnQWRMUG5sJykgIT0gbnVsbCAmJiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnQ2xyUG5sJykgIT0gbnVsbCkNCgl7DQoJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdScHRQbmwnKS5zdHlsZS50b3AgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnSG1NbnUnKS5vZmZzZXRUb3AgKyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnSG1NbnUnKS5vZmZzZXRIZWlnaHQgKyAicHgiOw0KDQoJCXZhciBCa0xrVmFyID0gIiI7DQoJCUJrTGtWYXIgPSBCa0xrVmFyICsgImh0dHBzOi8vd3d3LmFtYXpvbi5jb20vQmVuZGluZy1SdWxlci1UcmF2ZWwtU3BlZWQtR3Jhdml0eS9kcC8wOTg5MzMxODgxPyZfZW5jb2Rpbmc9VVRGOCZ0YWc9c2F5aXRib29rcy0yMCZsaW5rQ29kZT11cjImbGlua0lkPTgyNTE0NjQ4ZWZhMjdlMzhkNDg3NGE5Mzg4NTM0YWFhJmNhbXA9MTc4OSZjcmVhdGl2ZT05MzI1Ig0KCQlCa0xrVmFyID0gQmtMa1ZhciArICI7aHR0cHM6Ly93d3cuYW1hem9uLmNvbS9Ib3QtV2F0ZXItUGVyY2VpdmVkLUlkZW50aXR5LVJlcGFpci9kcC8xOTU2ODE0MTQwPyZfZW5jb2Rpbmc9VVRGOCZ0YWc9c2F5aXRib29rcy0yMCZsaW5rQ29kZT11cjImbGlua0lkPTIxNzM5MmUzNTA3OTk3MmNhNTgwMGE2YzMyYzUyMTUzJmNhbXA9MTc4OSZjcmVhdGl2ZT05MzI1Ig0KCQlCa0xrVmFyID0gQmtMa1ZhciArICI7aHR0cHM6Ly93d3cuYW1hem9uLmNvbS9SZWQtSG90LU1hcnJpYWdlLUhlYXZlbi1QYXNzaW9uL2RwLzE5NTY4MTQxNjc/Jl9lbmNvZGluZz1VVEY4JnRhZz1zYXlpdGJvb2tzLTIwJmxpbmtDb2RlPXVyMiZsaW5rSWQ9ZTExZWI4MWU3NDBhMzc5ZWU5MjNjZWJkN2Y3ZDg5ZTAmY2FtcD0xNzg5JmNyZWF0aXZlPTkzMjUiDQoJCUJrTGtWYXIgPSBCa0xrVmFyICsgIjtodHRwczovL3d3dy5hbWF6b24uY29tL1N0cm9uZy1GYW1pbHktRm91bmRhdGlvbi1SZXBhaXItTWFudWFsL2RwLzE5NTY4MTQxODM/Jl9lbmNvZGluZz1VVEY4JnRhZz1zYXlpdGJvb2tzLTIwJmxpbmtDb2RlPXVyMiZsaW5rSWQ9ODM3ODA2ZTA1NzYzM2JjYzVmNDliNjVlYzNiM2UyYTgmY2FtcD0xNzg5JmNyZWF0aXZlPTkzMjUiDQoJCUJrTGtWYXIgPSBCa0xrVmFyICsgIjtodHRwczovL3d3dy5hbWF6b24uY29tL1VuZGVyc3RhbmRpbmctUHJheWVyLVByYXllcnMtSG93LU1hbnVhbC9kcC8xOTU2ODE0MjA1PyZfZW5jb2Rpbmc9VVRGOCZ0YWc9c2F5aXRib29rcy0yMCZsaW5rQ29kZT11cjImbGlua0lkPWJiNGJjM2UyNmZhMTRiNmQ4ZDJhM2VhNTMyMTYwNWVhJmNhbXA9MTc4OSZjcmVhdGl2ZT05MzI1Ig0KCQlCa0xrVmFyID0gQmtMa1ZhciArICI7aHR0cHM6Ly93d3cuYW1hem9uLmNvbS9EcmVhbS1UaGluLVdlaWdodGxvc3MtUmVwYWlyLVNsZWVwaW5nL2RwLzE5NTY4MTQyMjE/Jl9lbmNvZGluZz1VVEY4JnRhZz1zYXlpdGJvb2tzLTIwJmxpbmtDb2RlPXVyMiZsaW5rSWQ9MDhlZmE0NzVhNjg4Y2E1NTI0MTFhN2FjNDE0NjQ4NDUmY2FtcD0xNzg5JmNyZWF0aXZlPTkzMjUiDQoJCUJrTGtWYXIgPSBCa0xrVmFyICsgIjtodHRwczovL3d3dy5hbWF6b24uY29tL1NjaWVuY2UtR29kLUZpcnN0LUZvdXItRGF5cy9kcC8xOTU2ODE0MjQ4PyZfZW5jb2Rpbmc9VVRGOCZ0YWc9c2F5aXRib29rcy0yMCZsaW5rQ29kZT11cjImbGlua0lkPTZiYzM0YWNlNDMxOTJlMjNjNGRhN2Q5YzNlNzgxNTM3JmNhbXA9MTc4OSZjcmVhdGl2ZT05MzI1Ig0KCQlCa0xrVmFyID0gQmtMa1ZhciArICI7aHR0cHM6Ly93d3cuYW1hem9uLmNvbS9UaGFuay1Zb3UtR29kLUZpbmRpbmctR3JhdGl0dWRlL2RwLzA5ODkzMzE4NzM/Jl9lbmNvZGluZz1VVEY4JnRhZz1zYXlpdGJvb2tzLTIwJmxpbmtDb2RlPXVyMiZsaW5rSWQ9MmExM2I4MzMwNTYyMTU5YjNkNDRkOWRhM2Q1ZmJjZGMmY2FtcD0xNzg5JmNyZWF0aXZlPTkzMjUiDQoJCUJrTGtWYXIgPSBCa0xrVmFyICsgIjtodHRwczovL3d3dy5hbWF6b24uY29tL1NjaWVuY2UtR29kLUdyYXZpdHktRXZvbHV0aW9uLVBsYW50cy9kcC8xOTU2ODE0MjY0PyZfZW5jb2Rpbmc9VVRGOCZ0YWc9c2F5aXRib29rcy0yMCZsaW5rQ29kZT11cjImbGlua0lkPTNlYjU3NTlkZDAyZGFmZWU3ZWJiMzQzZmE4ODA3NGE2JmNhbXA9MTc4OSZjcmVhdGl2ZT05MzI1Ig0KCQlCa0xrVmFyID0gQmtMa1ZhciArICI7aHR0cHM6Ly93d3cuYW1hem9uLmNvbS9TY2llbmNlLUdvZC1DcmVhdHVyZXMtUmV2b2x1dGlvbi1Fdm9sdXRpb24vZHAvMTk1NjgxNDI4MD8mX2VuY29kaW5nPVVURjgmdGFnPXNheWl0Ym9va3MtMjAmbGlua0NvZGU9dXIyJmxpbmtJZD03MDczMjdkOWIwMzg5ZjQwMDc3ZTQwYzViMWFkYzY5MiZjYW1wPTE3ODkmY3JlYXRpdmU9OTMyNSINCgkJQmtMa1ZhciA9IEJrTGtWYXIgKyAiO2h0dHBzOi8vd3d3LmFtYXpvbi5jb20vU2NpZW5jZS1Hb2QtRXZvbHV0aW9uLXZlcnN1cy1JbWFnZS9kcC9CMENITDdETEJSPyZfZW5jb2Rpbmc9VVRGOCZ0YWc9c2F5aXRib29rcy0yMCZsaW5rQ29kZT11cjImbGlua0lkPTgyZjJlZjBhMWE4NzczY2I1M2UwNjBjNjFhYmE3ZGY5JmNhbXA9MTc4OSZjcmVhdGl2ZT05MzI1Ig0KCQlCa0xrVmFyID0gQmtMa1ZhciArICI7aHR0cHM6Ly93d3cuYW1hem9uLmNvbS9TY2llbmNlLUdvZC1Cb2F0cy1GbG9vZHMtRGVsdWdlL2RwL0IwQ0pERjlaNjY/Jl9lbmNvZGluZz1VVEY4JnRhZz1zYXlpdGJvb2tzLTIwJmxpbmtDb2RlPXVyMiZsaW5rSWQ9YmRhNmYxNWQ3MGRjYmY0ZDA0YjRiZDA3ZDI5MGJmNTQmY2FtcD0xNzg5JmNyZWF0aXZlPTkzMjUiDQoJCUJrTGtWYXIgPSBCa0xrVmFyICsgIjtodHRwczovL3d3dy5hbWF6b24uY29tL1VuZGVyc3RhbmRpbmctQmlibGUtSG93LU1hbnVhbC1UaGluZ3MvZHAvMTk1NjgxNDM0NT8mX2VuY29kaW5nPVVURjgmdGFnPXNheWl0Ym9va3MtMjAmbGlua0NvZGU9dXIyJmxpbmtJZD01NDE1OTBlYmZiNzU2NzJhZDlhMDM0ZTUzY2QxYmZmZSZjYW1wPTE3ODkmY3JlYXRpdmU9OTMyNSINCgkJQmtMa1ZhciA9IEJrTGtWYXIgKyAiO2h0dHBzOi8vd3d3LmFtYXpvbi5jb20vVW5kZXJzdGFuZGluZy1DaHVyY2gtVXBvbi1UaGlzLUJ1aWxkL2RwLzE5NTY4MTQzNjE/Jl9lbmNvZGluZz1VVEY4JnRhZz1zYXlpdGJvb2tzLTIwJmxpbmtDb2RlPXVyMiZsaW5rSWQ9NDljYzlmMTU3NzUwOWU5YzdhNDljMWVmMWU5ODJhMDQmY2FtcD0xNzg5JmNyZWF0aXZlPTkzMjUiDQoJCXZhciBCa0xrQXJWYXIgPSBCa0xrVmFyLnNwbGl0KCI7Iik7DQoJCXZhciBCa0MxVmFyID0gKCIwLDAsMDswLDAsMDswLDAsMDswLDAsMDswLDAsMDswLDAsMDswLDAsMDswLDAsMDswLDAsMDswLDAsMDswLDAsMDswLDAsMDswLDAsMDswLDAsMCIpLnNwbGl0KCI7Iik7DQoJCXZhciBCZEMxVmFyID0gKCIyMDAsMjAwLDIwMDsyMDAsMjAwLDIwMDsyMDAsMjAwLDIwMDsyMDAsMjAwLDIwMDsyMDAsMjAwLDIwMDsyMDAsMjAwLDIwMDsyMDAsMjAwLDIwMDsyMDAsMjAwLDIwMDsyMDAsMjAwLDIwMDsyMDAsMjAwLDIwMDsyMDAsMjAwLDIwMDsyMDAsMjAwLDIwMDsyMDAsMjAwLDIwMDsyMDAsMjAwLDIwMCIpLnNwbGl0KCI7Iik7DQoJCXZhciBCa0MyVmFyID0gKCIxOCwyLDQxOzE4LDIsNDE7MTgsMiw0MTsxOCwyLDQxOzE4LDIsNDE7MTgsMiw0MTsxOCwyLDQxOzE4LDIsNDE7MTgsMiw0MTsxOCwyLDQxOzE4LDIsNDE7MTgsMiw0MTsxOCwyLDQxOzE4LDIsNDE7MTgsMiw0MSIpLnNwbGl0KCI7Iik7DQoJCXZhciBCZEMyVmFyID0gKCIyNTUsMTUzLDA7MjU1LDE1MywwOzI1NSwxNTMsMDsyNTUsMTUzLDA7MjU1LDE1MywwOzI1NSwxNTMsMDsyNTUsMTUzLDA7MjU1LDE1MywwOzI1NSwxNTMsMDsyNTUsMTUzLDA7MjU1LDE1MywwOzI1NSwxNTMsMDsyNTUsMTUzLDA7MjU1LDE1MywwIikuc3BsaXQoIjsiKTsNCgkJdmFyIEJrQzNWYXIgPSAoIjk0LDEsNDM7OTQsMSw0Mzs5NCwxLDQzOzk0LDEsNDM7OTQsMSw0Mzs5NCwxLDQzOzk0LDEsNDM7OTQsMSw0Mzs5NCwxLDQzOzk0LDEsNDM7OTQsMSw0Mzs5NCwxLDQzOzk0LDEsNDM7OTQsMSw0MyIpLnNwbGl0KCI7Iik7DQoJCXZhciBCZEMzVmFyID0gKCIxODksMTQwLDE1OzE4OSwxNDAsMTU7MTg5LDE0MCwxNTsxODksMTQwLDE1OzE4OSwxNDAsMTU7MTg5LDE0MCwxNTsxODksMTQwLDE1OzE4OSwxNDAsMTU7MTg5LDE0MCwxNTsxODksMTQwLDE1OzE4OSwxNDAsMTU7MTg5LDE0MCwxNTsxODksMTQwLDE1OzE4OSwxNDAsMTUiKS5zcGxpdCgiOyIpOw0KCQl2YXIgUnB0VmFyID0gIiI7DQoJCXZhciBJdGVtc1ZhciA9IChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnQWRMUG5sJykuaW5uZXJIVE1MKS5zcGxpdCgiOyIpOwkNCgkJdmFyIENsclZhciA9IHBhcnNlSW50KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdDbHJQbmwnKS5pbm5lckhUTUwpOw0KCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnQ3VyUG5sJykuaW5uZXJIVE1MID0gcGFyc2VJbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0N1clBubCcpLmlubmVySFRNTCkgKyAxOw0KCQl2YXIgQ3VyVmFyID0gcGFyc2VJbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0N1clBubCcpLmlubmVySFRNTCk7DQoJCWlmKEN1clZhciA+IEl0ZW1zVmFyLmxlbmd0aCAtIDEpe0N1clZhcj0wO0NsclZhciA9IHBhcnNlSW50KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdDbHJQbmwnKS5pbm5lckhUTUwpICsgMX07DQoJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdDdXJQbmwnKS5pbm5lckhUTUwgPSBDdXJWYXI7DQoJCWlmKENsclZhciA+IDMpe0NsclZhcj0xfTsNCgkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0NsclBubCcpLmlubmVySFRNTCA9IENsclZhcjsNCgkJdmFyIEJrQ1ZhbFZhciA9ICIiOw0KCQl2YXIgQmRDVmFsVmFyID0gIiI7DQoJCWlmKENsclZhciA9PSAxKXtCa0NWYWxWYXI9QmtDMVZhcltDdXJWYXJdO0JkQ1ZhbFZhcj1CZEMxVmFyW0N1clZhcl19DQoJCWlmKENsclZhciA9PSAyKXtCa0NWYWxWYXI9QmtDMlZhcltDdXJWYXJdO0JkQ1ZhbFZhcj1CZEMyVmFyW0N1clZhcl19DQoJCWlmKENsclZhciA9PSAzKXtCa0NWYWxWYXI9QmtDM1ZhcltDdXJWYXJdO0JkQ1ZhbFZhcj1CZEMzVmFyW0N1clZhcl19DQoJCXZhciBCa3NWYXIgPSAoIkJlbmRpbmctVGhlLVJ1bGVyO0hvdC1XYXRlcjtSZWQtSG90LU1hcnJpYWdlO1N0cm9uZy1GYW1pbHk7VW5kZXJzdGFuZGluZy1QcmF5ZXI7RFJFQU0tVEhJTjtUaGUtU2NpZW5jZS1PZi1Hb2QtVm9sdW1lLTE7VGhhbmstWW91LUdPRDtUaGUtU2NpZW5jZS1PZi1Hb2QtVm9sdW1lLTI7VGhlLVNjaWVuY2UtT2YtR29kLVZvbHVtZS0zO1RoZS1TY2llbmNlLU9mLUdvZC1Wb2x1bWUtNDtUaGUtU2NpZW5jZS1PZi1Hb2QtVm9sdW1lLTU7VW5kZXJzdGFuZGluZy1UaGUtQmlibGU7VW5kZXJzdGFuZGluZy1UaGUtQ2h1cmNoIikuc3BsaXQoIjsiKTsNCgkJQ3VyVmFyID0gcGFyc2VJbnQoSXRlbXNWYXJbQ3VyVmFyXSkgLSAxOw0KCQlScHRWYXIgPSBScHRWYXIgKyAiPGRpdiBjbGFzcz0ncHIgZGRiYyByYzcgb2ggb3AwIGFkZmFkZWEgejEwJyBzdHlsZT0nbWF4LWhlaWdodDowcHg7bWF4LXdpZHRoOjBweDsnPiI7DQoJCQlScHRWYXIgPSBScHRWYXIgKyAiPGRpdiBjbGFzcz0ncHIgZGRiYyBidzEgYnNzIHJjNyBvaCcgc3R5bGU9J2JhY2tncm91bmQtY29sb3I6cmdiYSgiICsgQmtDVmFsVmFyICsgIiwxKTtib3JkZXItY29sb3I6cmdiYSgiICsgQmRDVmFsVmFyICsgIiwxKSc+IjsNCgkJCQlScHRWYXIgPSBScHRWYXIgKyAiPHRhYmxlIGNsYXNzPSd0Y2xwcyB0YWJicmQnPjx0ciBjbGFzcz0ndGNscHMgdGFiYnJkJz48dGQgY2xhc3M9J3RjbHBzIHRhYmJyZCB2YXQnPiINCgkJCQkJUnB0VmFyID0gUnB0VmFyICsgIjxkaXYgY2xhc3M9J3ByIGRkYmMgdmF0IG9wMTAwJyBzdHlsZT0naGVpZ2h0OjE1MHB4O3dpZHRoOjEwMHB4O2JhY2tncm91bmQtaW1hZ2U6IHVybChcIi4uL1JMaW5kZW1hbm4vQm9va3MvIiArIEJrc1ZhcltDdXJWYXJdICsgIi0yMDAucG5nXCIpO2JhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7YmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO2JhY2tncm91bmQtc2l6ZTogMTAwJSAxMDAlOycgb25jbGljaz0nQVR4Sm4oKSc+PC9kaXY+IjsNCgkJCQkJUnB0VmFyID0gUnB0VmFyICsgIjxkaXYgY2xhc3M9J2dhcDUnPjwvZGl2PiI7DQoJCQkJUnB0VmFyID0gUnB0VmFyICsgIjwvdGQ+PHRkIGNsYXNzPSd0Y2xwcyB0YWJicmQgdmF0Jz4iDQoJCQkJCVJwdFZhciA9IFJwdFZhciArICI8ZGl2IElEPSdCa0R0bFBubCcgY2xhc3M9J3ByIGRkYmMgb2ggdmF0JyBzdHlsZT0nY29sb3I6cmdiYSgiICsgQmRDVmFsVmFyICsgIiwxKSc+PC9kaXY+Ig0KCQkJCVJwdFZhciA9IFJwdFZhciArICI8ZGl2IGNsYXNzPSdwYSBkZGJjIGJ3MSBic3MgcGQyIHozIHN5c2NscmdyYXkgZnM5IGZ3NjAwJyBzdHlsZT0nYm9yZGVyLXJhZGl1czowcHggMHB4IDBweCAzcHg7dG9wOi0xcHg7cmlnaHQ6LTFweDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsMSknPkFEPC9kaXY+Ig0KCQkJUnB0VmFyID0gUnB0VmFyICsgIjwvdGQ+PC90cj48L3RhYmxlPiINCgkJCVJwdFZhciA9IFJwdFZhciArICI8ZGl2IGNsYXNzPSdwciBkYyc+PGEgaHJlZj0nIiArIEJrTGtBclZhcltDdXJWYXJdICsgIic+PGRpdiBjbGFzcz0ncHIgZGRiYyByYzEwIHBkNCBhbXogYncxIGJzcyBzeXNjbHJ3aGl0ZSB2YXQnIHN0eWxlPSdoZWlnaHQ6MzBweDt3aWR0aDo3MHB4O2JhY2tncm91bmQtaW1hZ2U6IHVybChcIi4uL3N5cy9hcnQvY3VzdG9tL2FkdnJ0ei9BbWF6b25HcmF5LnBuZ1wiKTtiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O2JhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjtiYWNrZ3JvdW5kLXNpemU6IDgwJSA4MCU7Jz48L2Rpdj48L2E+PC9kaXY+IjsNCgkJCVJwdFZhciA9IFJwdFZhciArICI8ZGl2IGNsYXNzPSdnYXA1Jz48L2Rpdj4iDQoJCQlScHRWYXIgPSBScHRWYXIgKyAiPGRpdiBjbGFzcz0ncHIgZHInPiINCgkJCVJwdFZhciA9IFJwdFZhciArICI8ZGl2IGNsYXNzPSdwYSBkZGJjIHJjNTBwIHBkMiBidzEgYnNzIHN5c2NscmJsYWNrIHN5c2JnbGlnaHRncmF5IGNwIGZzMTAgdzE1IGgxNSBsNSBiMCcgc3R5bGU9J2JvdHRvbTowcHgnIG9uY2xpY2s9J2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiUnB0UG5sXCIpLmlubmVySFRNTD1cIlwiJz5YPC9kaXY+Ig0KCQkJUnB0VmFyID0gUnB0VmFyICsgIjxkaXYgY2xhc3M9J3ByIGRkYmMgcmM3IHBkNCBhbXogc3lzY2xyYmxhY2sgc3lzYmd5ZWxsb3cgb2ggY3AgYncxIGJzcyBmczggZnc2MDAgcjUgY3AnIG9uY2xpY2s9J0Jrc0puKCk7QVR4Sm4oKTtkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIkFkVHhQbmxcIikuaW5uZXJITUw9XCIyNTBweFwiOyc+TmV4dDwvZGl2PiINCgkJCVJwdFZhciA9IFJwdFZhciArICI8L2Rpdj4iCQ0KCQkJUnB0VmFyID0gUnB0VmFyICsgIjxkaXYgY2xhc3M9J2dhcDUnIHN0eWxlPSdoZWlnaHQ6NXB4Jz48L2Rpdj4iDQoJCVJwdFZhciA9IFJwdFZhciArICI8L2Rpdj4iDQoJCVJwdFZhciA9IFJwdFZhciArICI8L2Rpdj4iDQoJCQ0KLy9ScHRWYXIgPSAiPGRpdiBjbGFzcz0ncHIgZGwnPjxkaXYgY2xhc3M9J3ByIGRkYmMgcmM3IHBkNiBhbXogc3lzY2xyYmxhY2sgc3lzYmd5ZWxsb3cgb2ggY3AgYncxIGJzcyBmczggZnc2MDAgY3AnIG9uY2xpY2s9J0Jrc0puKCk7QVR4Sm4oKTtkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIkFkVHhQbmxcIikuaW5uZXJITUw9XCIyNTBweFwiOyc+VEVTVCBORVhUIEFEOiAiICsgKEN1clZhciArIDEpICsgIjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9J2dhcDIwJz48L2Rpdj4iICsgUnB0VmFyDQoNCgkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1JwdFBubCcpLmlubmVySFRNTCA9IFJwdFZhcjsNCgl9DQp9DQoNCmZ1bmN0aW9uIEFUeEpuKCkNCnsNCglkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnQ3VyUG5sJykuaW5uZXJIVE1MOw0KCXZhciBJdGVtc1ZhciA9IChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnQWRMUG5sJykuaW5uZXJIVE1MKS5zcGxpdCgiOyIpOwkNCglDdXJWYXIgPSBwYXJzZUludChJdGVtc1ZhcltwYXJzZUludChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnQ3VyUG5sJykuaW5uZXJIVE1MKV0pIC0gMTsNCgl2YXIgQVR4VmFyID0gIiI7DQoJQVR4VmFyID0gQVR4VmFyICsgIlRpbWUgVHJhdmVsLCBUaGUgU3BlZWQgb2YgTGlnaHQsIEdyYXZpdHksIGFuZCBUaGUgQmlnIEJhbmcuIDxiciAvPjxiciAvPldoYXQgaXMgbXl0aCBhbmQgd2hhdCBpcyB0cnVlPzxiciAvPjxiciAvPkZpbmQgb3V0IGluIHRoaXMgYW5zd2VyIHBhY2tlZCBib29rLiINCglBVHhWYXIgPSBBVHhWYXIgKyAiO1lvdXIgUGVyY2VpdmVkIElkZW50aXR5IC0gVGhlIExpZmUgUmVwYWlyIE1hbnVhbDxiciAvPjxiciAvPkhvdyB0byBPdmVyY29tZSBEaWZmaWN1bHQgUGVvcGxlLCBDb25mdXNpb24sIFVuaGFwcGluZXNzLCBEZXByZXNzaW9uLCBBcnJvZ2FuY2UsIEplYWxvdXN5LCBGZWFyLCBEb3VidCwgYW5kIExpZXMuIg0KCUFUeFZhciA9IEFUeFZhciArICI7TWFrZSBZb3VycyBhIE1hcnJpYWdlIE1hZGUgaW4gSGVhdmVuIEZpbGxlZCB3aXRoIFBhc3Npb24gYW5kIEpveTxiciAvPjxiciAvPk1BUlJJQUdFIE1BTlVBTCINCglBVHhWYXIgPSBBVHhWYXIgKyAiO0hPVyBUTyBCVUlMRCBBIEZPVU5EQVRJT04gT0YgUk9DSzxiciAvPjxiciAvPlRIRSBGQU1JTFkgUkVQQUlSIE1BTlVBTCINCglBVHhWYXIgPSBBVHhWYXIgKyAiO1RvIG1ha2Ugb3VyIHByYXllcnMgd29yayBlZmZlY3RpdmVseSwgd2UgbmVlZCB0byBrbm93IFdIWSBPdXIgUHJheWVycyBEb250IFdvcms8YnIgLz48YnIgLz5MZWFybiB0aGUgYmFzaWNzIGluIFRoZSBQcmF5ZXIgSG93LVRvIE1hbnVhbCINCglBVHhWYXIgPSBBVHhWYXIgKyAiO1RoZSBXZWlnaHQgTG9zcyBSZXBhaXIgTWFudWFsPGJyIC8+PGJyIC8+RmVlbCBCZXR0ZXI8YnIgLz5GZWVsIFlvdW5nZXI8QnIgLz5MaXZlIExvbmdlcjxiciAvPkxpdmUgQmV0dGVyPGJyIC8+PGJyIC8+TGVhcm4gSG93IHRvIExvc2UgV2VpZ2h0IFdoaWxlIFNsZWVwaW5nIg0KCUFUeFZhciA9IEFUeFZhciArICI7VGhlIEZpcnN0IEZvdXIgRGF5czxiciAvPjxiciAvPklzIGl0IHBvc3NpYmxlIHRoYXQgQmlibGljYWwgQ3JlYXRpb24gaXMgc2NpZW50aWZpY2FsbHkgcG9zc2libGU/PGJyIC8+PGJyIC8+VGhlcmUgYXJlIGFuc3dlcnMiDQoJQVR4VmFyID0gQVR4VmFyICsgIjtGaW5kaW5nIEdyYXRpdHVkZSBpbiBIYXJkIFRpbWVzPGJyIC8+PGJyIC8+V2hlbiBsaWZlIGlzIGJlYXRpbmcgeW91IGRvd24sIHlvdSBuZWVkIHRvIGZpbmQgdGhlIGVsdXNpdmUgS2V5IGNhbGxlZCBHcmF0aXR1ZGUuPGJyIC8+PGJyIC8+WW91ciBHdWlkZSB0byBHcmF0aXR1ZGUiDQoJQVR4VmFyID0gQVR4VmFyICsgIjtEYXkgVGhyZWUgLSBHcmF2aXR5LCBMYW5kLCBTZWFzLCBhbmQgRXZvbHV0aW9uIG9mIFBsYW50czxiciAvPjxiciAvPlNvbGlkIGJhc2ljIHNjaWVuY2UgZXhwbGFpbmluZyBob3cgcGxhbnRzIGZvcm1lZCBhbmQgaG93IGxvbmcgaXQgdG9vay4iDQoJQVR4VmFyID0gQVR4VmFyICsgIjtEYXkgRml2ZSBhbmQgRGF5IFNpeCAtIFRoZSBDcmVhdHVyZXMgLSBSZXZvbHV0aW9uIG9yIEV2b2x1dGlvbjxiciAvPjxiciAvPkludmVzdGlnYXRlIHRoZSByZWFsaXRpZXMgYW5kIGV4dGVudHMgb2YgdGhlIGFycml2YWwgb2YgdGhlIGFuaW1hbHM8YnIgLz48YnIgLz4gRXZvbHV0aW9uIG9yIENyZWF0aW9uLCBvciB3YXMgaXQgYm90aD8iDQoJQVR4VmFyID0gQVR4VmFyICsgIjtFdm9sdXRpb24gdmVyc3VzIE1hbiAtIEluIE91ciBJbWFnZTxiciAvPjxiciAvPldhcyBpdCBhbGwgbW9ua2V5IGJ1c2luZXNzPyBPciB3YXMgbWFuIGNyZWF0ZWQsIGFuZCBpZiBzbywgYnkgd2hhdCBtZXRob2QgZGlkIGl0IG9jY3VyPyINCglBVHhWYXIgPSBBVHhWYXIgKyAiO0JvYXRzLCBGbG9vZHMsIGFuZCBOb2FoIC0gVGhlIERlbHVnZTxiciAvPjxiciAvPkNvdWxkIGFueSBib2F0IHJlYWxseSBob2xkIGFsbCBzcGVjaWVzPyBBbmQgd2hlcmUgZGlkIGFsbCB0aGF0IHdhdGVyIGdvPzxiciAvPjxiciAvPkFuc3dlcnMgZm9yIHRvdWdoIHF1ZXN0aW9ucyBmb3VuZCBoZXJlISINCglBVHhWYXIgPSBBVHhWYXIgKyAiO1RoZSBCaWJsZSBIb3ctVG8gTWFudWFsIEFORCBUaGUgVGhpbmdzIFdlIERvbiYjODIxN3QgU2VlPGJyIC8+PGJyIC8+V2hhdCYjODIxN3MgdGhlIHBvaW50IG9mIHRoZSBCaWJsZT88YnIgLz5JdCYjODIxN3Mgbm90IHdoYXQgcGVvcGxlIHRoaW5rLiAiDQoJQVR4VmFyID0gQVR4VmFyICsgIjtVcG9uIFRoaXMgUm9jayBJIFdpbGwgQnVpbGQgTXkgQ2h1cmNoPGJyIC8+PGJyIC8+SXMgdG9kYXkmIzgyMTdzICYjODIyMGNodXJjaCYjODIyMSB0aGUgUkVBTCBDaHVyY2g/PGJyIC8+PGJyIC8+QW5kIHdoaWNoIG9uZSBpcyB0aGUgYmVzdD8iDQoJdmFyIEJrVHhWYXIgPSBBVHhWYXIuc3BsaXQoIjsiKTsNCgl2YXIgQmtzVmFyID0gKCJCZW5kaW5nLVRoZS1SdWxlcjtIb3QtV2F0ZXI7UmVkLUhvdC1NYXJyaWFnZTtTdHJvbmctRmFtaWx5O1VuZGVyc3RhbmRpbmctUHJheWVyO0RSRUFNLVRISU47VGhlLVNjaWVuY2UtT2YtR29kLVZvbHVtZS0xO1RoYW5rLVlvdS1HT0Q7VGhlLVNjaWVuY2UtT2YtR29kLVZvbHVtZS0yO1RoZS1TY2llbmNlLU9mLUdvZC1Wb2x1bWUtMztUaGUtU2NpZW5jZS1PZi1Hb2QtVm9sdW1lLTQ7VGhlLVNjaWVuY2UtT2YtR29kLVZvbHVtZS01O1VuZGVyc3RhbmRpbmctVGhlLUJpYmxlO1VuZGVyc3RhbmRpbmctVGhlLUNodXJjaCIpLnNwbGl0KCI7Iik7DQoJdmFyIEJrVmFyID0gQmtzVmFyW0N1clZhcl0NCgl2YXIgQVR4MlZhciA9IEJrVHhWYXJbQ3VyVmFyXQ0KCUJrVmFyID0gQmtWYXIucmVwbGFjZSgiLSIsIiAiKQ0KCUJrVmFyID0gQmtWYXIucmVwbGFjZSgiLSIsIiAiKQ0KCUJrVmFyID0gQmtWYXIucmVwbGFjZSgiLSIsIiAiKQ0KCUJrVmFyID0gQmtWYXIucmVwbGFjZSgiLSIsIiAiKQ0KCUJrVmFyID0gQmtWYXIucmVwbGFjZSgiLSIsIiAiKQ0KCUJrVmFyID0gQmtWYXIucmVwbGFjZSgiLSIsIiAiKQ0KCUJrVmFyID0gQmtWYXIucmVwbGFjZSgiLSIsIiAiKQ0KCXZhciBhdHh0VmFyID0gIjxkaXYgSUQ9J0FkVHhQbmwnIGNsYXNzPSdwciBkZGJjIGFkdHh0IGZ3NjAwIGZzMTEnIHN0eWxlPSdwYWRkaW5nOjBweCA3cHggMHB4IDBweDsnPjxiciAvPiI7DQoJYXR4dFZhciA9IGF0eHRWYXIgKyBCa1ZhcjsNCglhdHh0VmFyID0gYXR4dFZhciArICI8ZGl2IGNsYXNzPSdnYXA1Jz48L2Rpdj4iDQoJYXR4dFZhciA9IGF0eHRWYXIgKyAiPGRpdiBjbGFzcz0ncHIgZGMgZnczMDAgZnM5Jz4iICsgQVR4MlZhciArICI8L2Rpdj4iOw0KCWF0eHRWYXIgPSBhdHh0VmFyICsgIjwvZGl2PiI7DQoJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkJrRHRsUG5sIikuaW5uZXJIVE1MID0gYXR4dFZhcjsNCn0NCg0KDQoNCmZ1bmN0aW9uIGFzZChUZXh0VmFyKQ0Kew0KCWlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnUnB0UG5sJykgIT0gbnVsbCkNCgl7DQoJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdScHRQbmwnKS5pbm5lckhUTUwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnUnB0UG5sJykuaW5uZXJIVE1MICsgVGV4dFZhciArICI8YnIgLz4iOw0KCX0NCn0NCg0KDQoNCmZ1bmN0aW9uIFNldEJ4V2lkdGhKbihUaGVPYmplY3RWYXIpDQp7DQoJaWYoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoVGhlT2JqZWN0VmFyKS5ub2RlTmFtZSA9PT0gIlNFTEVDVCIpDQoJew0KCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZChUaGVPYmplY3RWYXIpLnN0eWxlLndpZHRoID0gKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFRoZU9iamVjdFZhcikub3B0aW9uc1tkb2N1bWVudC5nZXRFbGVtZW50QnlJZChUaGVPYmplY3RWYXIpLnNlbGVjdGVkSW5kZXhdLnRleHQubGVuZ3RoICogNikgKyA0MCArICJweCI7DQoJfQ0KCWVsc2UNCgl7DQoJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFRoZU9iamVjdFZhcikuc3R5bGUud2lkdGggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChUaGVPYmplY3RWYXIpLnZhbHVlLmxlbmd0aCAqIDkgKyAicHgiOw0KCX0NCn0NCg0KDQoNCmZ1bmN0aW9uIFNob3dKbihNZVZhcixQYW5lbFZhcixQYXJrTG9jYXRpb25WYXIsSGVpZ2h0VmFyKQ0Kew0KCXZhciBPZmZTZXRIZWlnaHRWYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChQYW5lbFZhcikub2Zmc2V0SGVpZ2h0Ow0KCWlmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFBhbmVsVmFyKS5zdHlsZS5tYXhIZWlnaHQgPCBIZWlnaHRWYXIgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoUGFuZWxWYXIpLnN0eWxlLm1heEhlaWdodCA+IEhlaWdodFZhcikNCgl7DQoJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFBhbmVsVmFyKS5zdHlsZS5tYXhIZWlnaHQgPSBPZmZTZXRIZWlnaHRWYXIgKyAicHgiOw0KCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZChNZVZhcikuaW5uZXJIVE1MID0gIjxkaXYgY2xhc3M9J2dhcDIwJz48L2Rpdj4uIC4gLiBTaG93IE1vcmU8ZGl2IGNsYXNzPSdwciBkZGJjIHcyMCc+PC9kaXY+IjsNCgl9DQoJZWxzZQ0KCXsNCgkJSGVpZ2h0VmFyID0gIjMwMDBweCI7DQoJCU9mZlNldEhlaWdodFZhciA9IDMwMDA7DQoJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKE1lVmFyKS5pbm5lckhUTUwgPSAiPGRpdiBjbGFzcz0nZ2FwMjAnPjwvZGl2Pi4gLiAuIFNob3cgTGVzczxkaXYgY2xhc3M9J3ByIGRkYmMgdzIwIGgwJz48L2Rpdj4iOw0KCX0NCglPZmZTZXRIZWlnaHRWYXIgPSAoT2ZmU2V0SGVpZ2h0VmFyIC8gMTAwMCkNCglpZihPZmZTZXRIZWlnaHRWYXIgPCAxKXtPZmZTZXRIZWlnaHRWYXI9MTt9DQoJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoUGFuZWxWYXIpLnN0eWxlLnRyYW5zaXRpb24gPSAibWF4LWhlaWdodCAiICsgT2ZmU2V0SGVpZ2h0VmFyICsgInMiOw0KCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFBhbmVsVmFyKS5zdHlsZS5tYXhIZWlnaHQgPSBIZWlnaHRWYXI7DQoJd2luZG93LmxvY2F0aW9uLmhyZWYgPSBQYXJrTG9jYXRpb25WYXI7DQoJQmtzSm4oKTsNCn0NCg0KDQoNCmZ1bmN0aW9uIEFuZ2xlSm4oKQ0Kew0KCWlmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdTaW5CeCcpICE9IG51bGwgJiYgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0NvU2luQngnKSAhPSBudWxsICYmIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdUYW5nZW50QngnKSAhPSBudWxsICYmIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdPcHBvc2l0ZUJ4JykgIT0gbnVsbCAmJiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnSHlwb3RlbnVzZUJ4JykgIT0gbnVsbCAmJiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnQWRqYWNlbnRCeCcpICE9IG51bGwgJiYgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0FuZ2xlQUJ4JykgIT0gbnVsbCAmJiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnQW5nbGVCQngnKSAhPSBudWxsICYmIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdBbmdsZUNCeCcpICE9IG51bGwpDQoJew0KCQl2YXIgc2luT2ZBbmdsZVggPSBwYXJzZUZsb2F0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdPcHBvc2l0ZUJ4JykudmFsdWUpIC8gcGFyc2VGbG9hdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnSHlwb3RlbnVzZUJ4JykudmFsdWUpDQoJCXZhciBUaGVBbnN3ZXJzVmFyID0gIiINCg0KCQkvL2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdBZGphY2VudEJ4JykudmFsdWUgPSAyNA0KCQkvL2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdPcHBvc2l0ZUJ4JykudmFsdWUgPSAzNg0KCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnSHlwb3RlbnVzZUJ4JykudmFsdWUgPSBNYXRoLmh5cG90KHBhcnNlRmxvYXQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0FkamFjZW50QngnKS52YWx1ZSksIHBhcnNlRmxvYXQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ09wcG9zaXRlQngnKS52YWx1ZSkpDQoNCgkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0FuZ2xlQUJ4JykudmFsdWUgPSA5MA0KCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnQW5nbGVCQngnKS52YWx1ZSA9IChNYXRoLmFzaW4oc2luT2ZBbmdsZVgpICogMTgwL01hdGguUEkpDQoJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdBbmdsZUNCeCcpLnZhbHVlID0gKDkwIC0gKE1hdGguYXNpbihzaW5PZkFuZ2xlWCkgKiAxODAvTWF0aC5QSSkpDQoNCgkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1NpbkJ4JykudmFsdWUgPSAJcGFyc2VGbG9hdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnT3Bwb3NpdGVCeCcpLnZhbHVlKSAvIHBhcnNlRmxvYXQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0h5cG90ZW51c2VCeCcpLnZhbHVlKQ0KCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnQ29TaW5CeCcpLnZhbHVlID0gCXBhcnNlRmxvYXQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0FkamFjZW50QngnKS52YWx1ZSkgLyBwYXJzZUZsb2F0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdIeXBvdGVudXNlQngnKS52YWx1ZSkNCgkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1RhbmdlbnRCeCcpLnZhbHVlID0gCXBhcnNlRmxvYXQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ09wcG9zaXRlQngnKS52YWx1ZSkgLyBwYXJzZUZsb2F0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdBZGphY2VudEJ4JykudmFsdWUpDQoNCgkJVGhlQW5zd2Vyc1ZhciA9IFRoZUFuc3dlcnNWYXIgKyBzaW5PZkFuZ2xlWCArICI8YnIgLz4iDQoJCVRoZUFuc3dlcnNWYXIgPSBUaGVBbnN3ZXJzVmFyICsgKE1hdGguYXNpbihzaW5PZkFuZ2xlWCkgKiAxODAvTWF0aC5QSSkgKyAiIExhcmdlIEFuZ2xlPGJyIC8+Ig0KCQlUaGVBbnN3ZXJzVmFyID0gVGhlQW5zd2Vyc1ZhciArICg5MCAtIChNYXRoLmFzaW4oc2luT2ZBbmdsZVgpICogMTgwL01hdGguUEkpKSArICIgU21hbGwgQW5nbGU8YnIgLz4iDQoJCVRoZUFuc3dlcnNWYXIgPSBUaGVBbnN3ZXJzVmFyICsgTWF0aC5oeXBvdCgyNCwgMzYpICsgIjxiciAvPiINCgkJLy9hbGVydChNYXRoLnNpbihzaW5PZkFuZ2xlWCkpDQoJCS8vYWxlcnQocGFyc2VGbG9hdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnU2luQngnKS52YWx1ZSkgLyBwYXJzZUZsb2F0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdDb1NpbkJ4JykudmFsdWUpKQ0KCQ0KCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnU2hvd0Fuc3dlcnMnKS5pbm5lckhUTUwgPSBUaGVBbnN3ZXJzVmFyDQoJCQ0KCQkvL2h0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzIzNTk4NTQ3L2RyYXctYS1saW5lLWZyb20teC15LXdpdGgtYS1naXZlbi1hbmdsZS1hbmQtbGVuZ3RoDQoJCXZhciBjID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm15Q2FudmFzIik7DQoJCXZhciBjdHggPSBjLmdldENvbnRleHQoIjJkIik7DQoJCXgxID0gMzA7DQoJCXkxID0gMzA7DQoJCXIgPSAgODA7DQoJCXRoZXRhID0gMC41Ow0KCQljdHgubW92ZVRvKHgxLCB5MSk7DQoJCWN0eC5saW5lVG8oeDEgKyByICogTWF0aC5jb3ModGhldGEpLCB5MSArIHIgKiBNYXRoLnNpbih0aGV0YSkpOw0KCQljdHguc3Ryb2tlKCk7DQoJfQ0KfQ0KDQoNCg0KDQoNCmZ1bmN0aW9uIFN0YXJ0U2VxdWVuY2UoKQ0Kew0KCVN0YXJzSm4oJ0JUUlNDTicpOw0KCUNvbWV0Sm4oJ1Nyc0NtdHNBJywnY210QScsJ0JUUlNDTicpOwkNCglQb3NPcmJ0Sm4oJ1Nyc09yYnRBJyk7DQoJU3RhcnNKbignU3JGbGRUU09HJyk7CQkNCglDb21ldEpuKCdTcnNDbXRzRFQnLCdjbXREVCcsJ0RUU0NOJyk7CQkJDQoJU3RhcnNKbignU3JGbGRIRCcpOwkNCn0NCg0KDQoNCmZ1bmN0aW9uIFBvc09yYnRKbihTcnNPcmJ0VmFyKQ0Kew0KCWlmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFNyc09yYnRWYXIpICE9IG51bGwpDQoJew0KCQl2YXIgaGd0dmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoU3JzT3JidFZhcikub2Zmc2V0SGVpZ2h0IC0gMjANCgkJdmFyIHd0aHZhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFNyc09yYnRWYXIpLm9mZnNldFdpZHRoIC0gMjANCgkJdmFyIHJuZHZhcg0KCQlybmR2YXIgPSBNYXRoLmZsb29yKChNYXRoLnJhbmRvbSgpICogaGd0dmFyKSArIDEpOw0KCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZChTcnNPcmJ0VmFyKS5zdHlsZS50b3AgPSAoMTAgKyBwYXJzZUludChybmR2YXIpKSArICdweCc7DQoJCXJuZHZhciA9IE1hdGguZmxvb3IoKE1hdGgucmFuZG9tKCkgKiB3dGh2YXIpICsgMSk7DQoJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFNyc09yYnRWYXIpLnN0eWxlLmxlZnQgPSAoIDEwICsgcGFyc2VJbnQocm5kdmFyKSkgKyAncHgnOw0KCX0NCn0NCg0KDQoNCmZ1bmN0aW9uIENvbWV0Sm4oU3JzQ210c1ZhcixjbXRWYXIsU3JGbGRWYXIpDQp7DQoJaWYoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoU3JzQ210c1ZhcikgIT0gbnVsbCAmJiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjbXRWYXIpICE9IG51bGwgJiYgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoU3JGbGRWYXIpICE9IG51bGwpDQoJew0KCQl2YXIgcm5kdmFyID0gMg0KCQl2YXIgU3JzQ29tZXRWYXINCgkJdmFyIGhndHZhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFNyRmxkVmFyKS5vZmZzZXRIZWlnaHQgLSA1MDsNCgkJdmFyIHRvcHZhciA9IChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChTckZsZFZhcikub2Zmc2V0VG9wKTsNCg0KCQlTcnNDb21ldFZhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFNyc0NtdHNWYXIpLmlubmVySFRNTDsNCgkJU3JzQ29tZXRWYXIgPSBTcnNDb21ldFZhci5yZXBsYWNlKCJzZCIsInNhIik7DQoJCVNyc0NvbWV0VmFyID0gU3JzQ29tZXRWYXIucmVwbGFjZSgic2MiLCJzZCIpOw0KCQlTcnNDb21ldFZhciA9IFNyc0NvbWV0VmFyLnJlcGxhY2UoInNiIiwic2MiKTsNCgkJU3JzQ29tZXRWYXIgPSBTcnNDb21ldFZhci5yZXBsYWNlKCJzYSIsInNiIik7DQoJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFNyc0NtdHNWYXIpLmlubmVySFRNTCA9IFNyc0NvbWV0VmFyOw0KDQoJCVNyc0NvbWV0VmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY210VmFyKS5pbm5lckhUTUw7DQoJCVNyc0NvbWV0VmFyID0gU3JzQ29tZXRWYXIucmVwbGFjZSgic2MiLCJzZCIpOw0KCQlTcnNDb21ldFZhciA9IFNyc0NvbWV0VmFyLnJlcGxhY2UoInNiIiwic2MiKTsNCgkJU3JzQ29tZXRWYXIgPSBTcnNDb21ldFZhci5yZXBsYWNlKCJzZCIsInNiIik7DQoJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNtdFZhcikuaW5uZXJIVE1MID0gU3JzQ29tZXRWYXI7DQoNCgkJcm5kdmFyID0gTWF0aC5mbG9vcigoTWF0aC5yYW5kb20oKSAqIGhndHZhcikgKyAxKTsNCgkJcm5kdmFyID0gcm5kdmFyICogMSANCgkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoU3JzQ210c1Zhcikuc3R5bGUudG9wID0gKHJuZHZhcikgKyAncHgnOw0KCQl2YXIgQ3ljbGVTZWNvbmRzVmFyID0gTWF0aC5yYW5kb20oKSAqICgyMDAwMCAtIDUwMDApICsgNTAwMDsNCgkJc2V0VGltZW91dCgiQ29tZXRKbignIiArIFNyc0NtdHNWYXIgKyAiJywnIiArIGNtdFZhciArICInLCciICsgU3JGbGRWYXIgKyAiJykiLCBDeWNsZVNlY29uZHNWYXIpOw0KCQl9DQp9DQoNCg0KDQpmdW5jdGlvbiBTdGFyc0puKFNyRmxkVmFyKQ0Kew0KCWlmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFNyRmxkVmFyKSAhPSBudWxsICYmIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdTdHIxJykgIT0gbnVsbCAmJiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnU3RyMicpICE9IG51bGwgJiYgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1N0cjMnKSAhPSBudWxsICYmIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdTdHI0JykgIT0gbnVsbCAmJiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnU3RyNScpICE9IG51bGwpDQoJew0KCQl2YXIgZnJlcWEgPSAwDQoJCXZhciBzMXcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnU3RyMScpLmlubmVySFRNTDsNCgkJdmFyIHMyciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdTdHIyJykuaW5uZXJIVE1MOw0KCQl2YXIgczNiID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1N0cjMnKS5pbm5lckhUTUw7DQoJCXZhciBzNGYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnU3RyNCcpLmlubmVySFRNTDsNCgkJdmFyIHM1ZiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdTdHI1JykuaW5uZXJIVE1MOw0KCQl2YXIgZmxkVyA9IHBhcnNlSW50KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFNyRmxkVmFyKS5vZmZzZXRXaWR0aCk7DQoJCXZhciBmbGRIID0gcGFyc2VJbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoU3JGbGRWYXIpLm9mZnNldEhlaWdodCk7DQoJCWZvciAodmFyIGk9MDtpPHM1ZjtpKyspDQoJCXsNCgkJCWZyZXFhID0gcGFyc2VJbnQoZnJlcWEpICsgMQ0KCQkJdGhlY2xzID0gJ3NhJw0KCQkJVHB2YXIgPSBNYXRoLmZsb29yKChNYXRoLnJhbmRvbSgpICogZmxkVykgKyAxKTsNCgkJCUx0dmFyID0gTWF0aC5mbG9vcigoTWF0aC5yYW5kb20oKSAqIGZsZEgpICsgMSk7DQoJCQlpZihwYXJzZUludChmcmVxYSkgPCBwYXJzZUludChzMXcpKQ0KCQkJew0KCQkJCXRoZWNscyA9ICdwYSBkZGJjIHNiJw0KCQkJfQ0KCQkJZWxzZSBpZihwYXJzZUludChmcmVxYSkgPCBwYXJzZUludChzMXcpICsgcGFyc2VJbnQoczJyKSkNCgkJCXsNCgkJCQl0aGVjbHMgPSAncGEgZGRiYyBzYycNCgkJCX0NCgkJCWVsc2UgaWYocGFyc2VJbnQoZnJlcWEpIDwgcGFyc2VJbnQoczF3KSArIHBhcnNlSW50KHMycikgKyBwYXJzZUludChzM2IpKQ0KCQkJew0KCQkJCXRoZWNscyA9ICdwYSBkZGJjIHNkJw0KCQkJfQ0KCQkJZWxzZSBpZihwYXJzZUludChmcmVxYSkgPj0gcGFyc2VJbnQoczF3KSArIHBhcnNlSW50KHMycikgKyBwYXJzZUludChzM2IpICsgcGFyc2VJbnQoczRmKSkNCgkJCXsNCgkJCQl0aGVjbHMgPSAncGEgZGRiYyBzYScNCgkJCQlmcmVxYSA9IDA7DQoJCQl9DQoJCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZChTckZsZFZhcikuaW5uZXJIVE1MID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoU3JGbGRWYXIpLmlubmVySFRNTCArICI8ZGl2IGNsYXNzPSciICsgdGhlY2xzICsgIicgc3R5bGU9J3RvcDoiICsgTHR2YXIgKyAicHg7bGVmdDoiICsgVHB2YXIgKyAicHgnPiIgKyAiPC9kaXY+IjsNCgkJfQ0KCX0NCn0NCg0KDQoNCmZ1bmN0aW9uIFJ1bkdNVEpuKCl7DQoJdmFyIHZWYXINCglmb3IgKGk9MTsgaTwxMjsgaSsrKQ0KCXsNCgkJaWYoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dtdCcgKyBpKSAhPSBudWxsICYmIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtdCcgKyBpKSAhPSBudWxsKQ0KCQl7DQoJCQlpZihpID09IDEpe3ZWYXIgPSBUaGVHTVRKbigiTSIsNSl9DQoJCQllbHNlIGlmKGkgPT0gMil7dlZhciA9IFRoZUdNVEpuKCJNIiwyKX0NCgkJCWVsc2UgaWYoaSA9PSAzKXt2VmFyID0gVGhlR01USm4oIk0iLDApfQ0KCQkJZWxzZSBpZihpID09IDQpe3ZWYXIgPSBUaGVHTVRKbigiUCIsNCl9DQoJCQllbHNlIGlmKGkgPT0gNSl7dlZhciA9IFRoZUdNVEpuKCJQIiw2KX0NCgkJCWVsc2UgaWYoaSA9PSA2KXt2VmFyID0gVGhlR01USm4oIlAiLDcpfQ0KCQkJZWxzZSBpZihpID09IDcpe3ZWYXIgPSBUaGVHTVRKbigiUCIsOCl9DQoJCQllbHNlIGlmKGkgPT0gOCl7dlZhciA9IFRoZUdNVEpuKCJQIiwxMyl9DQoJCQllbHNlIGlmKGkgPT0gOSl7dlZhciA9IFRoZUdNVEpuKCJQIiwxNCl9DQoJCQllbHNlIGlmKGkgPT0gMTApe3ZWYXIgPSBUaGVHTVRKbigiUCIsMTUpfQ0KCQkJZWxzZSBpZihpID09IDExKXt2VmFyID0gVGhlR01USm4oIlAiLDE3KX0NCgkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnbXQnICsgaSkuaW5uZXJIVE1MID0gdlZhclswXTsNCgkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtdCcgKyBpKS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAncmdiYSgnICsgdlZhclsxXSArICcsMSknDQoJCX0NCgl9DQoJc2V0VGltZW91dCgiUnVuR01USm4oKSIsIDkwMDAwMCk7DQp9DQoNCg0KDQpmdW5jdGlvbiBUaGVHTVRKbihPcGVyYXRvclZhcixHTVRPZmZTZXRWYXIpDQp7DQoJdmFyIGN1cnJlbnRkYXRldmFyID0gbmV3IERhdGUoKTsgDQoJaWYoT3BlcmF0b3JWYXIgPT0gIk0iKQ0KCXsNCgkJY3VycmVudGRhdGV2YXIuc2V0SG91cnMoY3VycmVudGRhdGV2YXIuZ2V0SG91cnMoKSAtIHBhcnNlSW50KEdNVE9mZlNldFZhcikpOw0KCX0JDQoJZWxzZQ0KCXsNCgkJY3VycmVudGRhdGV2YXIuc2V0SG91cnMoY3VycmVudGRhdGV2YXIuZ2V0SG91cnMoKSArIHBhcnNlSW50KEdNVE9mZlNldFZhcikpOw0KCX0JDQoJY3VycmVudGRhdGV2YXIudG9Mb2NhbGVTdHJpbmcoKTsNCgl2YXIgdGhlTW9udGhWYXINCgl2YXIgQ2xvY2tTdWZmaXhWYXIgPSAiQU0iDQoJdmFyIENsb2NrVmFyDQoJdmFyIE1pbnV0ZXNWYXINCgl2YXIgZGF0ZXRpbWVWYXINCgl2YXIgY29sb3JWYXINCglpZihwYXJzZUludChjdXJyZW50ZGF0ZXZhci5nZXRNb250aCgpKSA9PSBwYXJzZUludCgwKSl7dGhlTW9udGhWYXIgPSAnSmFuJ30NCgllbHNlIGlmKHBhcnNlSW50KGN1cnJlbnRkYXRldmFyLmdldE1vbnRoKCkpID09IHBhcnNlSW50KDEpKXt0aGVNb250aFZhciA9ICdGZWInfQ0KCWVsc2UgaWYocGFyc2VJbnQoY3VycmVudGRhdGV2YXIuZ2V0TW9udGgoKSkgPT0gcGFyc2VJbnQoMikpe3RoZU1vbnRoVmFyID0gJ01hcid9DQoJZWxzZSBpZihwYXJzZUludChjdXJyZW50ZGF0ZXZhci5nZXRNb250aCgpKSA9PSBwYXJzZUludCgzKSl7dGhlTW9udGhWYXIgPSAnQXByJ30NCgllbHNlIGlmKHBhcnNlSW50KGN1cnJlbnRkYXRldmFyLmdldE1vbnRoKCkpID09IHBhcnNlSW50KDQpKXt0aGVNb250aFZhciA9ICdNYXknfQ0KCWVsc2UgaWYocGFyc2VJbnQoY3VycmVudGRhdGV2YXIuZ2V0TW9udGgoKSkgPT0gcGFyc2VJbnQoNSkpe3RoZU1vbnRoVmFyID0gJ0p1bid9DQoJZWxzZSBpZihwYXJzZUludChjdXJyZW50ZGF0ZXZhci5nZXRNb250aCgpKSA9PSBwYXJzZUludCg2KSl7dGhlTW9udGhWYXIgPSAnSnVsJ30NCgllbHNlIGlmKHBhcnNlSW50KGN1cnJlbnRkYXRldmFyLmdldE1vbnRoKCkpID09IHBhcnNlSW50KDcpKXt0aGVNb250aFZhciA9ICdBdWcnfQ0KCWVsc2UgaWYocGFyc2VJbnQoY3VycmVudGRhdGV2YXIuZ2V0TW9udGgoKSkgPT0gcGFyc2VJbnQoOCkpe3RoZU1vbnRoVmFyID0gJ1NlcCd9DQoJZWxzZSBpZihwYXJzZUludChjdXJyZW50ZGF0ZXZhci5nZXRNb250aCgpKSA9PSBwYXJzZUludCg5KSl7dGhlTW9udGhWYXIgPSAnT2N0J30NCgllbHNlIGlmKHBhcnNlSW50KGN1cnJlbnRkYXRldmFyLmdldE1vbnRoKCkpID09IHBhcnNlSW50KDEwKSl7dGhlTW9udGhWYXIgPSAnTm92J30NCgllbHNlIGlmKHBhcnNlSW50KGN1cnJlbnRkYXRldmFyLmdldE1vbnRoKCkpID09IHBhcnNlSW50KDExKSl7dGhlTW9udGhWYXIgPSAnRGVjJ30NCglDbG9ja1ZhciA9IGN1cnJlbnRkYXRldmFyLmdldEhvdXJzKCkNCglpZihwYXJzZUludChjdXJyZW50ZGF0ZXZhci5nZXRIb3VycygpKSA+PSAxMil7Q2xvY2tWYXIgPSBwYXJzZUludChjdXJyZW50ZGF0ZXZhci5nZXRIb3VycygpIC0gMTIpO0Nsb2NrU3VmZml4VmFyID0gIlBNIjt9DQoJaWYocGFyc2VJbnQoQ2xvY2tWYXIpID09IDApe0Nsb2NrVmFyID0gMTI7fQ0KCU1pbnV0ZXNWYXIgPSAoIkEiICsgMCArIGN1cnJlbnRkYXRldmFyLmdldE1pbnV0ZXMoKSkuc3Vic3RyKC0yKQ0KCWRhdGV0aW1lVmFyID0gIjxiPkxvY2FsIFRpbWU6ICIgKyBDbG9ja1ZhciArICI6IiArIE1pbnV0ZXNWYXIgKyBDbG9ja1N1ZmZpeFZhciArICIgKCIgKyB0aGVNb250aFZhciArICIgIiArIGN1cnJlbnRkYXRldmFyLmdldERhdGUoKSArICIsICIgKyBjdXJyZW50ZGF0ZXZhci5nZXRGdWxsWWVhcigpICsgIik8L2I+Ig0KCWNvbG9yVmFyID0gIjIzMCwyNDAsMjU1IjsNCglpZihDbG9ja1ZhciArIENsb2NrU3VmZml4VmFyID09ICI3UE0iKXtjb2xvclZhciA9ICIyMDAsMjAwLDIwMCJ9DQoJZWxzZSBpZihDbG9ja1ZhciArIENsb2NrU3VmZml4VmFyID09ICI4UE0iKXtjb2xvclZhciA9ICIxNTAsMTUwLDE1MCJ9DQoJZWxzZSBpZihDbG9ja1ZhciArIENsb2NrU3VmZml4VmFyID09ICI5UE0iKXtjb2xvclZhciA9ICIxMDAsMTAwLDEwMCJ9DQoJZWxzZSBpZihDbG9ja1ZhciArIENsb2NrU3VmZml4VmFyID09ICIxMFBNIil7Y29sb3JWYXIgPSAiNTAsNTAsNTAifQ0KCWVsc2UgaWYoQ2xvY2tWYXIgKyBDbG9ja1N1ZmZpeFZhciA9PSAiMTFQTSIpe2NvbG9yVmFyID0gIjAsMCwwIn0NCgllbHNlIGlmKENsb2NrVmFyICsgQ2xvY2tTdWZmaXhWYXIgPT0gIjEyQU0iKXtjb2xvclZhciA9ICIwLDAsMCJ9DQoJZWxzZSBpZihDbG9ja1ZhciArIENsb2NrU3VmZml4VmFyID09ICIxQU0iKXtjb2xvclZhciA9ICIwLDAsMCJ9DQoJZWxzZSBpZihDbG9ja1ZhciArIENsb2NrU3VmZml4VmFyID09ICIyQU0iKXtjb2xvclZhciA9ICIwLDAsMCJ9DQoJZWxzZSBpZihDbG9ja1ZhciArIENsb2NrU3VmZml4VmFyID09ICIzQU0iKXtjb2xvclZhciA9ICIwLDAsMCJ9DQoJZWxzZSBpZihDbG9ja1ZhciArIENsb2NrU3VmZml4VmFyID09ICI0QU0iKXtjb2xvclZhciA9ICI1MCw1MCw1MCJ9DQoJZWxzZSBpZihDbG9ja1ZhciArIENsb2NrU3VmZml4VmFyID09ICI1QU0iKXtjb2xvclZhciA9ICIxMDAsMTAwLDEwMCJ9DQoJZWxzZSBpZihDbG9ja1ZhciArIENsb2NrU3VmZml4VmFyID09ICI2QU0iKXtjb2xvclZhciA9ICIxNTAsMTUwLDE1MCJ9DQoJZWxzZSBpZihDbG9ja1ZhciArIENsb2NrU3VmZml4VmFyID09ICI3QU0iKXtjb2xvclZhciA9ICIyMDAsMjAwLDIwMCJ9DQoJcmV0dXJuIFtkYXRldGltZVZhcixjb2xvclZhcl0NCglCa3NKbigpOw0KfQ0KDQoNCmZ1bmN0aW9uIENvbnZlcnRNZWFzdXJlSm4oVW5pdHNWYXIsVmFsdWVWYXIsSW5PdXRWYXIpDQp7DQoJaWYoSW5PdXRWYXIgPT0gIkluIikNCgl7DQoJCWlmKFVuaXRzVmFyID09IDEpe1ZhbHVlVmFyID0gVmFsdWVWYXIgLyAxMn0gLy9JbmNoZXMNCgkJZWxzZSBpZihVbml0c1ZhciA9PSAyKXtWYWx1ZVZhciA9IFZhbHVlVmFyfSAvL0ZlZXQNCgkJZWxzZSBpZihVbml0c1ZhciA9PSAzKXtWYWx1ZVZhciA9IFZhbHVlVmFyICogNTI4MH0gLy9NaWxlcwkNCgkJZWxzZSBpZihVbml0c1ZhciA9PSA0KXtWYWx1ZVZhciA9IFZhbHVlVmFyICogMC4wMzI4MDgzOTl9IC8vQ2VudGltZXRlcnMNCgkJZWxzZSBpZihVbml0c1ZhciA9PSA1KXtWYWx1ZVZhciA9IFZhbHVlVmFyICogMy4yODA4Mzk5fSAvL01ldGVycw0KCQllbHNlIGlmKFVuaXRzVmFyID09IDYpe1ZhbHVlVmFyID0gVmFsdWVWYXIgKiAzMjgwLjgzOTg1fTsgLy9LaWxvbWV0ZXJzDQoJCVZhbHVlVmFyID0gVmFsdWVWYXIgLzUyODANCgl9DQoJZWxzZSBpZihJbk91dFZhciA9PSAiT3V0IikNCgl7DQoJCWlmKFVuaXRzVmFyID09IDEpe1ZhbHVlVmFyID0gVmFsdWVWYXIgKiA2MzM2MH0gLy9JbmNoZXMNCgkJZWxzZSBpZihVbml0c1ZhciA9PSAyKXtWYWx1ZVZhciA9IFZhbHVlVmFyICogNTI4MH0gLy9GZWV0DQoJCWVsc2UgaWYoVW5pdHNWYXIgPT0gMyl7VmFsdWVWYXIgPSBWYWx1ZVZhcn0gLy9NaWxlcwkNCgkJZWxzZSBpZihVbml0c1ZhciA9PSA0KXtWYWx1ZVZhciA9IFZhbHVlVmFyICogMTYwOTM0fSAvL0NlbnRpbWV0ZXJzDQoJCWVsc2UgaWYoVW5pdHNWYXIgPT0gNSl7VmFsdWVWYXIgPSBWYWx1ZVZhciAqIDE2MDkuMzR9IC8vTWV0ZXJzDQoJCWVsc2UgaWYoVW5pdHNWYXIgPT0gNil7VmFsdWVWYXIgPSBWYWx1ZVZhciAqIDEuNjA5MzR9OyAvL0tpbG9tZXRlcnMNCgl9DQoJcmV0dXJuIFZhbHVlVmFyDQp9DQoNCg0KZnVuY3Rpb24gR2V0VGV4dFVuaXRKbihVbml0c1ZhcikNCnsNCglpZihVbml0c1ZhciA9PSAxKXtWYWx1ZVZhciA9ICJJbmNoZXMifSAvL0luY2hlcw0KCWVsc2UgaWYoVW5pdHNWYXIgPT0gMil7VmFsdWVWYXIgPSAiRmVldCJ9IC8vRmVldA0KCWVsc2UgaWYoVW5pdHNWYXIgPT0gMyl7VmFsdWVWYXIgPSAiTWlsZXMifSAvL01pbGVzCQ0KCWVsc2UgaWYoVW5pdHNWYXIgPT0gNCl7VmFsdWVWYXIgPSAiQ2VudGltZXRlcnMifSAvL0NlbnRpbWV0ZXJzDQoJZWxzZSBpZihVbml0c1ZhciA9PSA1KXtWYWx1ZVZhciA9ICJNZXRlcnMifSAvL01ldGVycw0KCWVsc2UgaWYoVW5pdHNWYXIgPT0gNil7VmFsdWVWYXIgPSAiS2lsb21ldGVycyJ9OyAvL0tpbG9tZXRlcnMNCglyZXR1cm4gVmFsdWVWYXINCn0NCg0KDQo8L3NjcmlwdD4NCg0KPGRpdj5kZNTu3LkfsG8sNlZUhU4zILBdAIuR" />
</div>

			<div id="SPnl"></div>
			<div id="HeaderPnl" class="tsb syshdr sysfon"><div ID="HmMnu" class="pr dc z10"></div></div>
			<div id="DynamicPnl" class="tsb syscntnt sysfon"></div>
			<div id="ContentPnl" class="tsb syscntnt sysfon" style="background-color:rgba(0,0,0,1);"><div ID='BdyHdgPnl' class="tsb hdng w100p"></div><div class="tsb pr dc"><div ID="FinOverlayPnl" class="tsb pa dc z10"><img class="tsb pr w0 h0 vh" src="../sys/art/domain/processingspinner.gif"/></div>
<div class="pf t0 l0 h0 w0 oh vh">
<div ID="Str1">2</div>
<div ID="Str2">3</div>
<div ID="Str3">1</div>
<div ID="Str4">10</div>
<div ID="Str5">50</div>
</div>
<div ID="BTRSCN" class="pf dc  t0 l0 oh" style="height:100vh;width:100vw">
<div ID="SrsCmtsA" class="pr dl t0 l0" style="color:yellow;">
<div ID="s11A" class="pr ddbr cometA sa" style="color:white;width:50px;height:0px;top:1vh;left:1vw;transform:rotate(5deg);"><div ID="cmtA" class="pr ddbc t0 r0 sb" style="top:-4px;width:7px;height:7px;background-color:white;"></div></div>
</div>
</div>


<div class="pr dc t0 pd10">
<div class="gap20"></div>
<div class="pr dc fs12 sysclryellow fw600">
The Domain
<div class="pr dc fs24">



<div class="pr dc" onclick='asd'>
<div class='pr ddbc cp' onclick="location.href='http://www.bookyblog.com'">BookyBlog.com</div>



</div>
is for sale
</div>
<div class="gap20"></div>
<div class="tsb pr ddbc vat fs12 mw400 ffantonioV" style="background-color:rgba(150,150,150,1);padding:10px 10px 10px 10px">
<div class="tsb pr ddbc vat fs12 bw1 bss " style="background-color:rgba(220,220,220,1);">
<div class="pr dc vat fs114 pd5 fw600 sysclrblack" style="background-color:rgba(248,200,31,1)">
<div class="pr ddbc pd2 fs12">To make an offer on this domain<br />Enter your Email address and your offer and we'll contact you.</div>
</div>
<div class="pr dc vat fw300 pd5"><div class="pr ddbc w100 h0"></div><div class="pr ddbc w1w100 h000"></div><div class="pr ddbc w100 h0"></div><div class="pr ddbc w100 h0"></div><div class="pr ddbc w100 h0"></div><div class="pr ddbc w100 h0"></div>
<div ID="SetFcs" Class="pr ddbc oh vh w0 h0">Yes</div>
 <div ID="CustomFormAnchor" class="tsb pr ddbc oh h0 vh w0"></div><input ID="S1Jx" value="" type="email" class="tsb txtbx tal w100p" autocomplete="off"  style="padding:0px;" formnovalidate placeholder="Enter Your Email" onkeyup="CharsJn(this.value,100,this.id)" /><div ID="S1E" class="pr dc fs10 fw300 fsi oh" style="height:0px;color:rgba(225,0,0,1);padding:1px">Enter your properly formatted email</div><div ID="S1T" class="pr dc fs10 fw300" style="color:rgba(000,000,000,1);font-size:10pt;margin:2px 0px 0px 0px">Enter Your Email</div><div ID="S1V" class="pr ddbc vh oh h0 h0">EMAILMN0MX100</div><div class="pr dc" style="height:0PX"></div><input ID="S2Jx" value="" type="text" class="tsb txtbx tal w100p" autocomplete="off"  style="padding:0px;" formnovalidate placeholder="Enter Your Name" onkeyup="CharsJn(this.value,100,this.id)" /><div ID="S2E" class="pr dc fs10 fw300 fsi oh" style="height:0px;color:rgba(225,0,0,1);padding:1px">Enter Your Name</div><div ID="S2T" class="pr dc fs10 fw300" style="color:rgba(000,000,000,1);font-size:10pt;margin:2px 0px 0px 0px">Enter Your Name (Required)</div><div ID="S2V" class="pr ddbc vh oh h0 h0">TXTMN1MX100</div><div class="pr dc" style="height:5PX"></div><div class="tsb pr ddbc"><div class="tsb pr dl oh h0 op0">- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -</div><div class="tsb pr dc pd5"><div ID="CharsCt" class="tsb pa b0 r0 sysclrred fs8 ddbc">400 character limit</div></div><textarea ID="S3Jx" Rows="8" style="height:150px;" novalidate class="txtbx w100p" style="padding:0px;" onkeyup="CharsJn(this.value,400,this.id)" placeholder="Enter Offer Amount and your contact info"></textarea><div ID="S3E" class="pr dc fs10 fw300 fsi oh" style="height:0px;color:rgba(225,0,0,1);padding:1px">Enter Offer Amount and your contact info</div><div ID="S3T" class="pr dc fs10 fw300" style="color:rgba(000,000,000,1);font-size:10pt;margin:2px 0px 0px 0px">Enter Offer Amount and your contact info (Required)</div></div><div ID="S3V" class="pr ddbc vh oh h0 h0">MEMMN1MX400</div><div class="pr dc" style="height:5PX"></div>
<div class="tsb pr dc  rc7 cp fw600 sysclrblack w100p bw1 bss fs12" style="background-color:rgba(248,200,31,1)"   onClick="DDSlctFn('None','S0L');VldtFn('none','CustomBtn');"><div class="tsb pr ddbc h40 vam"></div><div class="tsb pr ddbc vam ffantonioV">Send</div></div>
<div class="gap5"></div>
<div ID="CustomBtn" class="tsb pr dc vh oh h0 w0" style="background-color:rgba(248,147,31,1)" onClick="FinJn('7Un7zZWpY9E5CYBe8qWpiJyyI/O8ZU/OcsOs7sjiZKooAAQNZ8uDrG2upLltkrvF18As8THvgcvYR41f4wvpg8AllhGmlzK1XU8q','Filter','Scroll');"><div class="tsb pr ddbc h40 vam"></div><div class="tsb pr ddbc vam">Submit LG Account Request</div></div> <div ID="VClr" class="tsb pr ddbc cp oh h0 vh w100p">rgba(0,150,0,1)</div> <div ID="NVClr" class="tsb pr ddbc cp oh h0 vh w100p">rgba(225,0,0,1)</div> <div ID="FldCnt" class="tsb pr ddbc cp oh h0 vh w100p">3</div>
</div>
</div>
</div>
<div class="gap20"></div>
<div class="pr dc fs12 sysclryellow fw600">
The Domain
<div class="pr dc fs24">



<div class='pr ddbc cp' onclick="location.href='http://www.bookyblog.com'">bookyblog.com</div>



</div>
is for sale
</div>
<div class="gap40"></div>

 
<div class="pr ddbc fw600 fs12 sysclrwhite">
<div class="pr dc fw600 fs16 sysclryellow" style="color:rgba(150,120,0,1)">
Other Available Domains 
</div>
<div class="pr ddbl fw100 fs14 sysclryellow pd10 rc7 sysbglightgray">
<a href='http://www.catholictube.net'>catholictube.net</a><br />
<a href='http://www.christianradiostations.org'>christianradiostations.org</a><br />
<a href='http://www.flawedlogicbook.com'>flawedlogicbook.com</a><br />
<a href='http://www.flowtheorybook.com'>flowtheorybook.com</a><br />
<a href='http://www.my-family-school.com'>my-family-school.com</a><br />
<a href='http://www.my-natural-family.com'>my-natural-family.com</a><br />
<a href='http://www.natural-family.com'>natural-family.com</a><br />
<a href='http://www.ourlastwarning.com'>ourlastwarning.com</a><br />
<a href='http://www.paulthepenguin.com'>paulthepenguin.com</a><br />
<a href='http://www.repentanceorjudgement.com'>repentanceorjudgement.com</a><br />
<a href='http://www.thecollegelie.com'>thecollegelie.com</a><br />
<a href='http://www.truthinstatistics.com'>truthinstatistics.com</a><br />
<a href='http://www.backtoedenbook.com'>backtoedenbook.com</a><br />
<a href='http://www.bmohowtomanual.com'>bmohowtomanual.com</a><br />
<a href='http://www.bookieblog.com'>bookieblog.com</a><br />
<a href='http://www.bookyblog.com'>bookyblog.com</a><br />
<a href='http://www.bookysayit.com'>bookysayit.com</a><br />
<a href='http://www.october34th.com'>october34th.com</a><br />
<a href='http://www.pacificwaveworld.com'>pacificwaveworld.com</a><br />
<a href='http://www.peoplemakememadwhen.com'>peoplemakememadwhen.com</a><br />
<a href='http://www.qazxcvb.com'>qazxcvb.com</a><br />
<a href='http://www.romanceisdeadwhen.com'>romanceisdeadwhen.com</a><br />
<a href='http://www.romanceiswhen.com'>romanceiswhen.com</a><br />
<a href='http://www.sonnetsnotspoken.com'>sonnetsnotspoken.com</a><br />
<a href='http://www.sonnetsunspoken.com'>sonnetsunspoken.com</a><br />
<a href='http://www.sweethome-america.com'>sweethome-america.com</a><br />
<a href='http://www.virtuessence.com'>virtuessence.com</a><br />
<a href='http://www.whoisthatactor.com'>whoisthatactor.com</a><br />
<a href='http://www.whoisthatactress.com'>whoisthatactress.com</a><br />
</div>
</div>
<div class="gap40"></div>
<div class="gap40"></div>
<div class="gap40"></div>
<div ID="RptPnl" class="pf dl t0 l0 vam sysclrred fw600 z10" style="padding:0px 0px 0px 10px;" ondblclick="this.innerHTML=''"></div>
<div ID="CurPnl" class="pr dl vam sysclrred fw600 z10 oh h0 w0 vh">100</div>
<div ID="AdLPnl" class="pr dl vam sysclrred fw600 z10 oh h0 w0 vh">1;2;3;4;5;6;7;8;9;10;11;12;13;14</div>
<div ID="ClrPnl" class="pr dl vam sysclrred fw600 z10 oh h0 w0 vh">2</div><div></div></div><div ID="hlpo" class="hoflx" style="height:0px;border-style:none;border-width:0px"></div></div>
			<div id="FooterPnl" class="tsb sysftr sysfon"><div class="z2" style="position:relative;text-align:center;font-size:10pt;">

<div class="gap20"></div>

<div class="pr ddbc mw700" style="padding:0px 15px 0px 15px">
10Use of this internet site is subject to express terms of use. By using this site, you signify that you agree to be bound by these Conditions of Use and all other Policies or Notices. As an Amazon Associate I earn from qualifying purchases.
</div>

<div class="gap5"></div>

<a class="tsb" style="color:rgba(162,197,219,1);" href='../?pge=30010-Conditions-of-Use' rel="nofollow">Conditions of Use</a> - <a class="tsb" style="color:rgba(162,197,219,1);" href='../?pge=30011-Privacy-Notice ' rel="nofollow">Privacy Notice</a> - <a class="tsb" style="color:rgba(162,197,219,1);" href='../?pge=30012-Media-Press-Kit' rel="nofollow">Media/Press kit</a>

<div class="gap5"></div>

Copyright © 2016-2025 bookyblog.com. All Rights Reserved.

<div class="gap5"></div>

</div>

<div class="gap20"></div>

</div>

<div ID="InsertPlayerPnl" class="pr ddbc t0 l0 h100p w100p">
rgba(000,000,000,1);
rgba(255,255,255,1);
rgba(255,255,255,1);
rgba(077,000,000,1);
rgba(255,100,100,1);
0px;
Yes;
pf;
1;
h0;
https://anchor.fm/s/fa959cc8/podcast/rss;
https://www.EverythingIsConnectedRL.com;
https://www.RLindemann.com/favicons/eicfavicons/EICFavIcon180.png;
https://www.RLindemann.com/?pge=30015-
</div>
<script src="../sys/js/EpPodCastPlayerV110.js"></script><div ID="CookieMessage" class="tsb pf dc b0 l0 w100p vam sysbggray" style="z-index:1000"><div class="tsb pr ddbj sysclrwhite pd4 mw500 vam m4" style="margin:4px 40px 4px 40px">www.bookyblog.com requires cookies and will not function properly without the use of cookies. Cookies are stored on your computer and are used to keep your cart contents in your cart and other similar purposes. If you do not want cookies from this site used then leave this site and delete any remaining cookies for www.bookyblog.com from your browser.</div><div class="tsb pr ddbc"><div class="tsb pr ddbc cp sysbtn fs16 fw600 vam pd4" style="color:rgba(0,0,0,1);background-color:rgba(200,200,0,1)" style="width:0vw" onClick="document.cookie = 'bookyblogIAgreedToCookies=Yes; expires=Thu, 11 Nov 2027 00:00:00 UTC';document.getElementById('CookieMessage').innerHTML = '';"><div class="tsb pr ddbc vam">I Understand</div></div><div class="tsb pr ddbc cp sysbtn fs16 fw600 vam pd4" style="color:rgba(0,0,0,1);background-color:rgba(200,200,0,1)" style="width:0vw" onClick="document.cookie = 'bookyblogIAgreedToCookies=No; expires=Tue, 11 Nov 2025 00:00:00 UTC';location.href='../clear/NoCookies.aspx';"><div class="tsb pr ddbc vam">I Do Not Agree</div></div></div><div class="gap10"></div></div></div>
			<div id="PagePnl" style="visibility:hidden;height:0px;width:0px;overflow:hidden;">
				<input name="LocalTimeBx" type="text" id="LocalTimeBx" />
				<input name="ScrollBx" type="text" id="ScrollBx" />
				<input name="ScrollPnlBx" type="text" id="ScrollPnlBx" />		
				<input name="PositionBx" type="text" id="PositionBx" />
				<textarea name="S1Bx" rows="2" cols="20" id="S1Bx">
</textarea>
				<textarea name="S2Bx" rows="2" cols="20" id="S2Bx">
</textarea>
				<input name="BodySetBx" type="text" value="L29wmle5T+m7piTeayLnKJOhl/AEHj7IQvx79G+UvX2OlKx6HvYHGBXFtAUo00Itg7FpdJzm/Mg54L4g2TnOGixTWY3mvIn+CBorKjYcJtD3MKim6FHzUk5QgUJtAdpuEgNZZGxZ45UVsX09NEznqjpwbzJ1MTDL/2wJWWF/UregAeDbG3lnpKFqqF33gD6TpmYP::" id="BodySetBx" />
				<input type="submit" name="Btn" value="" id="Btn" /><br />
			<input name="S3Bx" type="text" id="S3Bx" /><input name="S4Bx" type="text" id="S4Bx" /><input name="S5Bx" type="text" id="S5Bx" /><input name="S6Bx" type="text" id="S6Bx" /><input name="S7Bx" type="text" id="S7Bx" /><input name="S8Bx" type="text" id="S8Bx" /><input name="S9Bx" type="text" id="S9Bx" /><input name="S10Bx" type="text" id="S10Bx" /><input name="S11Bx" type="text" id="S11Bx" /><input name="S12Bx" type="text" id="S12Bx" /><input name="S13Bx" type="text" id="S13Bx" /><input name="S14Bx" type="text" id="S14Bx" /><input name="S15Bx" type="text" id="S15Bx" /><input name="S16Bx" type="text" id="S16Bx" /><input name="SbmSccs" type="text" id="SbmSccs" /><input name="MiscUtility" type="text" id="MiscUtility" /></div>
    
<div class="aspNetHidden">

	<input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="CA0B0334" />
	<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEdABlLHfBapR6HSxJWgvRrVIoJiuOPBfWUsYjUo+ZMwUz/eRXdbe8Y6vF4Oe08bcda8mBvf4aaeUlyTRFxC0wm9Sh4xQpBSUR5equN/j/dUHIb/oWxKPW+sKlGTMjbhWIfecx+FxUQ2TxrH+vOtxN+7o4Rq9sdzQpsrsV50KQjXvFTX9snAU+iwUHwacx4chXHT1rHe5laR8FI3ODPloF7zp3fLy6In/f+zq3KUy/Zf22mx1z6uv3mxERs0Boyx3Gpdj5rCITTpEuEDMh3mcfehSDAG/tupk6mg0nOtY0E4ZsAvI8VK0KVYUVxNOz+qYioRlM2wVvNHXvqD+LdZfNAySdQRAej6hO8DiweP5uENtlurcQkoNESyaRtfN/nlbf5XA1BEFb4xPSb7RD3yt3DON63H3zmjfWnlnhVVW5bS0yFBtrf41/3MCR+sWx9skUPRtNzOqxUwuZxYeUQJkgAtUgM/hgHE6ligNaK17uW/TymD/LUm73LvPZ8LG40QEz7u6heqosX5CctENF6O/Nxu5bi6WZqIj1t9z95OXOP09s7xYIii4o=" />
</div></form>
		<div id="SiteArt"></div>

<script type="text/javascript">
BksJn();
StartSequence();





function ATxJn()
{
	document.getElementById('CurPnl').innerHTML;
	var ItemsVar = (document.getElementById('AdLPnl').innerHTML).split(";");	
	CurVar = parseInt(ItemsVar[parseInt(document.getElementById('CurPnl').innerHTML)]) - 1;
	var ATxVar = "";
	ATxVar = ATxVar + "Time Travel, The Speed of Light, Gravity, and The Big Bang. <br /><br />What is myth and what is true?<br /><br />Find out in this answer packed book."
	ATxVar = ATxVar + ";Your Perceived Identity - The Life Repair Manual<br /><br />How to Overcome Difficult People, Confusion, Unhappiness, Depression, Arrogance, Jealousy, Fear, Doubt, and Lies."
	ATxVar = ATxVar + ";Make Yours a Marriage Made in Heaven Filled with Passion and Joy<br /><br />MARRIAGE MANUAL"
	ATxVar = ATxVar + ";HOW TO BUILD A FOUNDATION OF ROCK<br /><br />THE FAMILY REPAIR MANUAL"
	ATxVar = ATxVar + ";To make our prayers work effectively, we need to know WHY Our Prayers Dont Work<br /><br />Learn the basics in The Prayer How-To Manual"
	ATxVar = ATxVar + ";The Weight Loss Repair Manual<br /><br />Feel Better<br />Feel Younger<Br />Live Longer<br />Live Better<br /><br />Learn How to Lose Weight While Sleeping"
	ATxVar = ATxVar + ";The First Four Days<br /><br />Is it possible that Biblical Creation is scientifically possible?<br /><br />There are answers"
	ATxVar = ATxVar + ";Finding Gratitude in Hard Times<br /><br />When life is beating you down, you need to find the elusive Key called Gratitude.<br /><br />Your Guide to Gratitude"
	ATxVar = ATxVar + ";Day Three - Gravity, Land, Seas, and Evolution of Plants<br /><br />Solid basic science explaining how plants formed and how long it took."
	ATxVar = ATxVar + ";Day Five and Day Six - The Creatures - Revolution or Evolution<br /><br />Investigate the realities and extents of the arrival of the animals<br /><br /> Evolution or Creation, or was it both?"
	ATxVar = ATxVar + ";Evolution versus Man - In Our Image<br /><br />Was it all monkey business? Or was man created, and if so, by what method did it occur?"
	ATxVar = ATxVar + ";Boats, Floods, and Noah - The Deluge<br /><br />Could any boat really hold all species? And where did all that water go?<br /><br />Answers for tough questions found here!"
	ATxVar = ATxVar + ";The Bible How-To Manual AND The Things We Don&#8217t See<br /><br />What&#8217s the point of the Bible?<br />It&#8217s not what people think. "
	ATxVar = ATxVar + ";Upon This Rock I Will Build My Church<br /><br />Is today&#8217s &#8220church&#8221 the REAL Church?<br /><br />And which one is the best?"
	var BkTxVar = ATxVar.split(";");
	var BksVar = ("Bending-The-Ruler;Hot-Water;Red-Hot-Marriage;Strong-Family;Understanding-Prayer;DREAM-THIN;The-Science-Of-God-Volume-1;Thank-You-GOD;The-Science-Of-God-Volume-2;The-Science-Of-God-Volume-3;The-Science-Of-God-Volume-4;The-Science-Of-God-Volume-5;Understanding-The-Bible;Understanding-The-Church").split(";");
	var BkVar = BksVar[CurVar]
	var ATx2Var = BkTxVar[CurVar]
	BkVar = BkVar.replace("-"," ")
	BkVar = BkVar.replace("-"," ")
	BkVar = BkVar.replace("-"," ")
	BkVar = BkVar.replace("-"," ")
	BkVar = BkVar.replace("-"," ")
	BkVar = BkVar.replace("-"," ")
	BkVar = BkVar.replace("-"," ")
	var atxtVar = "<div ID='AdTxPnl' class='pr ddbc adtxt fw600 fs11' style='padding:0px 7px 0px 0px;'><br />";
	atxtVar = atxtVar + BkVar;
	atxtVar = atxtVar + "<div class='gap5'></div>"
	atxtVar = atxtVar + "<div class='pr dc fw300 fs9'>" + ATx2Var + "</div>";
	atxtVar = atxtVar + "</div>";
	document.getElementById("BkDtlPnl").innerHTML = atxtVar;
}



function asd(TextVar)
{
	if (document.getElementById('RptPnl') != null)
	{
		document.getElementById('RptPnl').innerHTML = document.getElementById('RptPnl').innerHTML + TextVar + "<br />";
	}
}



function SetBxWidthJn(TheObjectVar)
{
	if(document.getElementById(TheObjectVar).nodeName === "SELECT")
	{
		document.getElementById(TheObjectVar).style.width = (document.getElementById(TheObjectVar).options[document.getElementById(TheObjectVar).selectedIndex].text.length * 6) + 40 + "px";
	}
	else
	{
		document.getElementById(TheObjectVar).style.width = document.getElementById(TheObjectVar).value.length * 9 + "px";
	}
}



function ShowJn(MeVar,PanelVar,ParkLocationVar,HeightVar)
{
	var OffSetHeightVar = document.getElementById(PanelVar).offsetHeight;
	if(document.getElementById(PanelVar).style.maxHeight < HeightVar || document.getElementById(PanelVar).style.maxHeight > HeightVar)
	{
		document.getElementById(PanelVar).style.maxHeight = OffSetHeightVar + "px";
		document.getElementById(MeVar).innerHTML = "<div class='gap20'></div>. . . Show More<div class='pr ddbc w20'></div>";
	}
	else
	{
		HeightVar = "3000px";
		OffSetHeightVar = 3000;
		document.getElementById(MeVar).innerHTML = "<div class='gap20'></div>. . . Show Less<div class='pr ddbc w20 h0'></div>";
	}
	OffSetHeightVar = (OffSetHeightVar / 1000)
	if(OffSetHeightVar < 1){OffSetHeightVar=1;}
	document.getElementById(PanelVar).style.transition = "max-height " + OffSetHeightVar + "s";
	document.getElementById(PanelVar).style.maxHeight = HeightVar;
	window.location.href = ParkLocationVar;
	BksJn();
}



function AngleJn()
{
	if(document.getElementById('SinBx') != null && document.getElementById('CoSinBx') != null && document.getElementById('TangentBx') != null && document.getElementById('OppositeBx') != null && document.getElementById('HypotenuseBx') != null && document.getElementById('AdjacentBx') != null && document.getElementById('AngleABx') != null && document.getElementById('AngleBBx') != null && document.getElementById('AngleCBx') != null)
	{
		var sinOfAngleX = parseFloat(document.getElementById('OppositeBx').value) / parseFloat(document.getElementById('HypotenuseBx').value)
		var TheAnswersVar = ""

		//document.getElementById('AdjacentBx').value = 24
		//document.getElementById('OppositeBx').value = 36
		document.getElementById('HypotenuseBx').value = Math.hypot(parseFloat(document.getElementById('AdjacentBx').value), parseFloat(document.getElementById('OppositeBx').value))

		document.getElementById('AngleABx').value = 90
		document.getElementById('AngleBBx').value = (Math.asin(sinOfAngleX) * 180/Math.PI)
		document.getElementById('AngleCBx').value = (90 - (Math.asin(sinOfAngleX) * 180/Math.PI))

		document.getElementById('SinBx').value = 	parseFloat(document.getElementById('OppositeBx').value) / parseFloat(document.getElementById('HypotenuseBx').value)
		document.getElementById('CoSinBx').value = 	parseFloat(document.getElementById('AdjacentBx').value) / parseFloat(document.getElementById('HypotenuseBx').value)
		document.getElementById('TangentBx').value = 	parseFloat(document.getElementById('OppositeBx').value) / parseFloat(document.getElementById('AdjacentBx').value)

		TheAnswersVar = TheAnswersVar + sinOfAngleX + "<br />"
		TheAnswersVar = TheAnswersVar + (Math.asin(sinOfAngleX) * 180/Math.PI) + " Large Angle<br />"
		TheAnswersVar = TheAnswersVar + (90 - (Math.asin(sinOfAngleX) * 180/Math.PI)) + " Small Angle<br />"
		TheAnswersVar = TheAnswersVar + Math.hypot(24, 36) + "<br />"
		//alert(Math.sin(sinOfAngleX))
		//alert(parseFloat(document.getElementById('SinBx').value) / parseFloat(document.getElementById('CoSinBx').value))
	
		document.getElementById('ShowAnswers').innerHTML = TheAnswersVar
		
		//https://stackoverflow.com/questions/23598547/draw-a-line-from-x-y-with-a-given-angle-and-length
		var c = document.getElementById("myCanvas");
		var ctx = c.getContext("2d");
		x1 = 30;
		y1 = 30;
		r =  80;
		theta = 0.5;
		ctx.moveTo(x1, y1);
		ctx.lineTo(x1 + r * Math.cos(theta), y1 + r * Math.sin(theta));
		ctx.stroke();
	}
}





function StartSequence()
{
	StarsJn('BTRSCN');
	CometJn('SrsCmtsA','cmtA','BTRSCN');	
	PosOrbtJn('SrsOrbtA');
	StarsJn('SrFldTSOG');		
	CometJn('SrsCmtsDT','cmtDT','DTSCN');			
	StarsJn('SrFldHD');	
}



function PosOrbtJn(SrsOrbtVar)
{
	if(document.getElementById(SrsOrbtVar) != null)
	{
		var hgtvar = document.getElementById(SrsOrbtVar).offsetHeight - 20
		var wthvar = document.getElementById(SrsOrbtVar).offsetWidth - 20
		var rndvar
		rndvar = Math.floor((Math.random() * hgtvar) + 1);
		document.getElementById(SrsOrbtVar).style.top = (10 + parseInt(rndvar)) + 'px';
		rndvar = Math.floor((Math.random() * wthvar) + 1);
		document.getElementById(SrsOrbtVar).style.left = ( 10 + parseInt(rndvar)) + 'px';
	}
}



function CometJn(SrsCmtsVar,cmtVar,SrFldVar)
{
	if(document.getElementById(SrsCmtsVar) != null && document.getElementById(cmtVar) != null && document.getElementById(SrFldVar) != null)
	{
		var rndvar = 2
		var SrsCometVar
		var hgtvar = document.getElementById(SrFldVar).offsetHeight - 50;
		var topvar = (document.getElementById(SrFldVar).offsetTop);

		SrsCometVar = document.getElementById(SrsCmtsVar).innerHTML;
		SrsCometVar = SrsCometVar.replace("sd","sa");
		SrsCometVar = SrsCometVar.replace("sc","sd");
		SrsCometVar = SrsCometVar.replace("sb","sc");
		SrsCometVar = SrsCometVar.replace("sa","sb");
		document.getElementById(SrsCmtsVar).innerHTML = SrsCometVar;

		SrsCometVar = document.getElementById(cmtVar).innerHTML;
		SrsCometVar = SrsCometVar.replace("sc","sd");
		SrsCometVar = SrsCometVar.replace("sb","sc");
		SrsCometVar = SrsCometVar.replace("sd","sb");
		document.getElementById(cmtVar).innerHTML = SrsCometVar;

		rndvar = Math.floor((Math.random() * hgtvar) + 1);
		rndvar = rndvar * 1 
		document.getElementById(SrsCmtsVar).style.top = (rndvar) + 'px';
		var CycleSecondsVar = Math.random() * (20000 - 5000) + 5000;
		setTimeout("CometJn('" + SrsCmtsVar + "','" + cmtVar + "','" + SrFldVar + "')", CycleSecondsVar);
		}
}



function StarsJn(SrFldVar)
{
	if(document.getElementById(SrFldVar) != null && document.getElementById('Str1') != null && document.getElementById('Str2') != null && document.getElementById('Str3') != null && document.getElementById('Str4') != null && document.getElementById('Str5') != null)
	{
		var freqa = 0
		var s1w = document.getElementById('Str1').innerHTML;
		var s2r = document.getElementById('Str2').innerHTML;
		var s3b = document.getElementById('Str3').innerHTML;
		var s4f = document.getElementById('Str4').innerHTML;
		var s5f = document.getElementById('Str5').innerHTML;
		var fldW = parseInt(document.getElementById(SrFldVar).offsetWidth);
		var fldH = parseInt(document.getElementById(SrFldVar).offsetHeight);
		for (var i=0;i<s5f;i++)
		{
			freqa = parseInt(freqa) + 1
			thecls = 'sa'
			Tpvar = Math.floor((Math.random() * fldW) + 1);
			Ltvar = Math.floor((Math.random() * fldH) + 1);
			if(parseInt(freqa) < parseInt(s1w))
			{
				thecls = 'pa ddbc sb'
			}
			else if(parseInt(freqa) < parseInt(s1w) + parseInt(s2r))
			{
				thecls = 'pa ddbc sc'
			}
			else if(parseInt(freqa) < parseInt(s1w) + parseInt(s2r) + parseInt(s3b))
			{
				thecls = 'pa ddbc sd'
			}
			else if(parseInt(freqa) >= parseInt(s1w) + parseInt(s2r) + parseInt(s3b) + parseInt(s4f))
			{
				thecls = 'pa ddbc sa'
				freqa = 0;
			}
			document.getElementById(SrFldVar).innerHTML = document.getElementById(SrFldVar).innerHTML + "<div class='" + thecls + "' style='top:" + Ltvar + "px;left:" + Tpvar + "px'>" + "</div>";
		}
	}
}



function RunGMTJn(){
	var vVar
	for (i=1; i<12; i++)
	{
		if(document.getElementById('gmt' + i) != null && document.getElementById('mt' + i) != null)
		{
			if(i == 1){vVar = TheGMTJn("M",5)}
			else if(i == 2){vVar = TheGMTJn("M",2)}
			else if(i == 3){vVar = TheGMTJn("M",0)}
			else if(i == 4){vVar = TheGMTJn("P",4)}
			else if(i == 5){vVar = TheGMTJn("P",6)}
			else if(i == 6){vVar = TheGMTJn("P",7)}
			else if(i == 7){vVar = TheGMTJn("P",8)}
			else if(i == 8){vVar = TheGMTJn("P",13)}
			else if(i == 9){vVar = TheGMTJn("P",14)}
			else if(i == 10){vVar = TheGMTJn("P",15)}
			else if(i == 11){vVar = TheGMTJn("P",17)}
			document.getElementById('gmt' + i).innerHTML = vVar[0];
			document.getElementById('mt' + i).style.backgroundColor = 'rgba(' + vVar[1] + ',1)'
		}
	}
	setTimeout("RunGMTJn()", 900000);
}



function TheGMTJn(OperatorVar,GMTOffSetVar)
{
	var currentdatevar = new Date(); 
	if(OperatorVar == "M")
	{
		currentdatevar.setHours(currentdatevar.getHours() - parseInt(GMTOffSetVar));
	}	
	else
	{
		currentdatevar.setHours(currentdatevar.getHours() + parseInt(GMTOffSetVar));
	}	
	currentdatevar.toLocaleString();
	var theMonthVar
	var ClockSuffixVar = "AM"
	var ClockVar
	var MinutesVar
	var datetimeVar
	var colorVar
	if(parseInt(currentdatevar.getMonth()) == parseInt(0)){theMonthVar = 'Jan'}
	else if(parseInt(currentdatevar.getMonth()) == parseInt(1)){theMonthVar = 'Feb'}
	else if(parseInt(currentdatevar.getMonth()) == parseInt(2)){theMonthVar = 'Mar'}
	else if(parseInt(currentdatevar.getMonth()) == parseInt(3)){theMonthVar = 'Apr'}
	else if(parseInt(currentdatevar.getMonth()) == parseInt(4)){theMonthVar = 'May'}
	else if(parseInt(currentdatevar.getMonth()) == parseInt(5)){theMonthVar = 'Jun'}
	else if(parseInt(currentdatevar.getMonth()) == parseInt(6)){theMonthVar = 'Jul'}
	else if(parseInt(currentdatevar.getMonth()) == parseInt(7)){theMonthVar = 'Aug'}
	else if(parseInt(currentdatevar.getMonth()) == parseInt(8)){theMonthVar = 'Sep'}
	else if(parseInt(currentdatevar.getMonth()) == parseInt(9)){theMonthVar = 'Oct'}
	else if(parseInt(currentdatevar.getMonth()) == parseInt(10)){theMonthVar = 'Nov'}
	else if(parseInt(currentdatevar.getMonth()) == parseInt(11)){theMonthVar = 'Dec'}
	ClockVar = currentdatevar.getHours()
	if(parseInt(currentdatevar.getHours()) >= 12){ClockVar = parseInt(currentdatevar.getHours() - 12);ClockSuffixVar = "PM";}
	if(parseInt(ClockVar) == 0){ClockVar = 12;}
	MinutesVar = ("A" + 0 + currentdatevar.getMinutes()).substr(-2)
	datetimeVar = "<b>Local Time: " + ClockVar + ":" + MinutesVar + ClockSuffixVar + " (" + theMonthVar + " " + currentdatevar.getDate() + ", " + currentdatevar.getFullYear() + ")</b>"
	colorVar = "230,240,255";
	if(ClockVar + ClockSuffixVar == "7PM"){colorVar = "200,200,200"}
	else if(ClockVar + ClockSuffixVar == "8PM"){colorVar = "150,150,150"}
	else if(ClockVar + ClockSuffixVar == "9PM"){colorVar = "100,100,100"}
	else if(ClockVar + ClockSuffixVar == "10PM"){colorVar = "50,50,50"}
	else if(ClockVar + ClockSuffixVar == "11PM"){colorVar = "0,0,0"}
	else if(ClockVar + ClockSuffixVar == "12AM"){colorVar = "0,0,0"}
	else if(ClockVar + ClockSuffixVar == "1AM"){colorVar = "0,0,0"}
	else if(ClockVar + ClockSuffixVar == "2AM"){colorVar = "0,0,0"}
	else if(ClockVar + ClockSuffixVar == "3AM"){colorVar = "0,0,0"}
	else if(ClockVar + ClockSuffixVar == "4AM"){colorVar = "50,50,50"}
	else if(ClockVar + ClockSuffixVar == "5AM"){colorVar = "100,100,100"}
	else if(ClockVar + ClockSuffixVar == "6AM"){colorVar = "150,150,150"}
	else if(ClockVar + ClockSuffixVar == "7AM"){colorVar = "200,200,200"}
	return [datetimeVar,colorVar]
	BksJn();
}


function ConvertMeasureJn(UnitsVar,ValueVar,InOutVar)
{
	if(InOutVar == "In")
	{
		if(UnitsVar == 1){ValueVar = ValueVar / 12} //Inches
		else if(UnitsVar == 2){ValueVar = ValueVar} //Feet
		else if(UnitsVar == 3){ValueVar = ValueVar * 5280} //Miles	
		else if(UnitsVar == 4){ValueVar = ValueVar * 0.032808399} //Centimeters
		else if(UnitsVar == 5){ValueVar = ValueVar * 3.2808399} //Meters
		else if(UnitsVar == 6){ValueVar = ValueVar * 3280.83985}; //Kilometers
		ValueVar = ValueVar /5280
	}
	else if(InOutVar == "Out")
	{
		if(UnitsVar == 1){ValueVar = ValueVar * 63360} //Inches
		else if(UnitsVar == 2){ValueVar = ValueVar * 5280} //Feet
		else if(UnitsVar == 3){ValueVar = ValueVar} //Miles	
		else if(UnitsVar == 4){ValueVar = ValueVar * 160934} //Centimeters
		else if(UnitsVar == 5){ValueVar = ValueVar * 1609.34} //Meters
		else if(UnitsVar == 6){ValueVar = ValueVar * 1.60934}; //Kilometers
	}
	return ValueVar
}


function GetTextUnitJn(UnitsVar)
{
	if(UnitsVar == 1){ValueVar = "Inches"} //Inches
	else if(UnitsVar == 2){ValueVar = "Feet"} //Feet
	else if(UnitsVar == 3){ValueVar = "Miles"} //Miles	
	else if(UnitsVar == 4){ValueVar = "Centimeters"} //Centimeters
	else if(UnitsVar == 5){ValueVar = "Meters"} //Meters
	else if(UnitsVar == 6){ValueVar = "Kilometers"}; //Kilometers
	return ValueVar
}






StartSequence();





function BksJn()
{	
	if(document.getElementById('RptPnl') != null && document.getElementById('CurPnl') != null && document.getElementById('AdLPnl') != null && document.getElementById('ClrPnl') != null)
	{
		document.getElementById('RptPnl').style.top = document.getElementById('HmMnu').offsetTop + document.getElementById('HmMnu').offsetHeight + "px";

		var BkLkVar = "";
		BkLkVar = BkLkVar + "https://www.amazon.com/Bending-Ruler-Travel-Speed-Gravity/dp/0989331881?&_encoding=UTF8&tag=sayitbooks-20&linkCode=ur2&linkId=82514648efa27e38d4874a9388534aaa&camp=1789&creative=9325"
		BkLkVar = BkLkVar + ";https://www.amazon.com/Hot-Water-Perceived-Identity-Repair/dp/1956814140?&_encoding=UTF8&tag=sayitbooks-20&linkCode=ur2&linkId=217392e35079972ca5800a6c32c52153&camp=1789&creative=9325"
		BkLkVar = BkLkVar + ";https://www.amazon.com/Red-Hot-Marriage-Heaven-Passion/dp/1956814167?&_encoding=UTF8&tag=sayitbooks-20&linkCode=ur2&linkId=e11eb81e740a379ee923cebd7f7d89e0&camp=1789&creative=9325"
		BkLkVar = BkLkVar + ";https://www.amazon.com/Strong-Family-Foundation-Repair-Manual/dp/1956814183?&_encoding=UTF8&tag=sayitbooks-20&linkCode=ur2&linkId=837806e057633bcc5f49b65ec3b3e2a8&camp=1789&creative=9325"
		BkLkVar = BkLkVar + ";https://www.amazon.com/Understanding-Prayer-Prayers-How-Manual/dp/1956814205?&_encoding=UTF8&tag=sayitbooks-20&linkCode=ur2&linkId=bb4bc3e26fa14b6d8d2a3ea5321605ea&camp=1789&creative=9325"
		BkLkVar = BkLkVar + ";https://www.amazon.com/Dream-Thin-Weightloss-Repair-Sleeping/dp/1956814221?&_encoding=UTF8&tag=sayitbooks-20&linkCode=ur2&linkId=08efa475a688ca552411a7ac41464845&camp=1789&creative=9325"
		BkLkVar = BkLkVar + ";https://www.amazon.com/Science-God-First-Four-Days/dp/1956814248?&_encoding=UTF8&tag=sayitbooks-20&linkCode=ur2&linkId=6bc34ace43192e23c4da7d9c3e781537&camp=1789&creative=9325"
		BkLkVar = BkLkVar + ";https://www.amazon.com/Thank-You-God-Finding-Gratitude/dp/0989331873?&_encoding=UTF8&tag=sayitbooks-20&linkCode=ur2&linkId=2a13b8330562159b3d44d9da3d5fbcdc&camp=1789&creative=9325"
		BkLkVar = BkLkVar + ";https://www.amazon.com/Science-God-Gravity-Evolution-Plants/dp/1956814264?&_encoding=UTF8&tag=sayitbooks-20&linkCode=ur2&linkId=3eb5759dd02dafee7ebb343fa88074a6&camp=1789&creative=9325"
		BkLkVar = BkLkVar + ";https://www.amazon.com/Science-God-Creatures-Revolution-Evolution/dp/1956814280?&_encoding=UTF8&tag=sayitbooks-20&linkCode=ur2&linkId=707327d9b0389f40077e40c5b1adc692&camp=1789&creative=9325"
		BkLkVar = BkLkVar + ";https://www.amazon.com/Science-God-Evolution-versus-Image/dp/B0CHL7DLBR?&_encoding=UTF8&tag=sayitbooks-20&linkCode=ur2&linkId=82f2ef0a1a8773cb53e060c61aba7df9&camp=1789&creative=9325"
		BkLkVar = BkLkVar + ";https://www.amazon.com/Science-God-Boats-Floods-Deluge/dp/B0CJDF9Z66?&_encoding=UTF8&tag=sayitbooks-20&linkCode=ur2&linkId=bda6f15d70dcbf4d04b4bd07d290bf54&camp=1789&creative=9325"
		BkLkVar = BkLkVar + ";https://www.amazon.com/Understanding-Bible-How-Manual-Things/dp/1956814345?&_encoding=UTF8&tag=sayitbooks-20&linkCode=ur2&linkId=541590ebfb75672ad9a034e53cd1bffe&camp=1789&creative=9325"
		BkLkVar = BkLkVar + ";https://www.amazon.com/Understanding-Church-Upon-This-Build/dp/1956814361?&_encoding=UTF8&tag=sayitbooks-20&linkCode=ur2&linkId=49cc9f1577509e9c7a49c1ef1e982a04&camp=1789&creative=9325"
		var BkLkArVar = BkLkVar.split(";");
		var BkC1Var = ("0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0").split(";");
		var BdC1Var = ("200,200,200;200,200,200;200,200,200;200,200,200;200,200,200;200,200,200;200,200,200;200,200,200;200,200,200;200,200,200;200,200,200;200,200,200;200,200,200;200,200,200").split(";");
		var BkC2Var = ("18,2,41;18,2,41;18,2,41;18,2,41;18,2,41;18,2,41;18,2,41;18,2,41;18,2,41;18,2,41;18,2,41;18,2,41;18,2,41;18,2,41;18,2,41").split(";");
		var BdC2Var = ("255,153,0;255,153,0;255,153,0;255,153,0;255,153,0;255,153,0;255,153,0;255,153,0;255,153,0;255,153,0;255,153,0;255,153,0;255,153,0;255,153,0").split(";");
		var BkC3Var = ("94,1,43;94,1,43;94,1,43;94,1,43;94,1,43;94,1,43;94,1,43;94,1,43;94,1,43;94,1,43;94,1,43;94,1,43;94,1,43;94,1,43").split(";");
		var BdC3Var = ("189,140,15;189,140,15;189,140,15;189,140,15;189,140,15;189,140,15;189,140,15;189,140,15;189,140,15;189,140,15;189,140,15;189,140,15;189,140,15;189,140,15").split(";");
		var RptVar = "";
		var ItemsVar = (document.getElementById('AdLPnl').innerHTML).split(";");	
		var ClrVar = parseInt(document.getElementById('ClrPnl').innerHTML);
		document.getElementById('CurPnl').innerHTML = parseInt(document.getElementById('CurPnl').innerHTML) + 1;
		var CurVar = parseInt(document.getElementById('CurPnl').innerHTML);
		if(CurVar > ItemsVar.length - 1){CurVar=0;ClrVar = parseInt(document.getElementById('ClrPnl').innerHTML) + 1};
		document.getElementById('CurPnl').innerHTML = CurVar;
		if(ClrVar > 3){ClrVar=1};
		document.getElementById('ClrPnl').innerHTML = ClrVar;
		var BkCValVar = "";
		var BdCValVar = "";
		if(ClrVar == 1){BkCValVar=BkC1Var[CurVar];BdCValVar=BdC1Var[CurVar]}
		if(ClrVar == 2){BkCValVar=BkC2Var[CurVar];BdCValVar=BdC2Var[CurVar]}
		if(ClrVar == 3){BkCValVar=BkC3Var[CurVar];BdCValVar=BdC3Var[CurVar]}
		var BksVar = ("Bending-The-Ruler;Hot-Water;Red-Hot-Marriage;Strong-Family;Understanding-Prayer;DREAM-THIN;The-Science-Of-God-Volume-1;Thank-You-GOD;The-Science-Of-God-Volume-2;The-Science-Of-God-Volume-3;The-Science-Of-God-Volume-4;The-Science-Of-God-Volume-5;Understanding-The-Bible;Understanding-The-Church").split(";");
		CurVar = parseInt(ItemsVar[CurVar]) - 1;
		RptVar = RptVar + "<div class='pr ddbc rc7 oh op0 adfadea z10' style='max-height:0px;max-width:0px;'>";
			RptVar = RptVar + "<div class='pr ddbc bw1 bss rc7 oh' style='background-color:rgba(" + BkCValVar + ",1);border-color:rgba(" + BdCValVar + ",1)'>";
				RptVar = RptVar + "<table class='tclps tabbrd'><tr class='tclps tabbrd'><td class='tclps tabbrd vat'>"
					RptVar = RptVar + "<div class='pr ddbc vat op100' style='height:150px;width:100px;background-image: url(\"../RLindemann/Books/" + BksVar[CurVar] + "-200.png\");background-repeat: no-repeat;background-position: center;background-size: 100% 100%;' onclick='ATxJn()'></div>";
					RptVar = RptVar + "<div class='gap5'></div>";
				RptVar = RptVar + "</td><td class='tclps tabbrd vat'>"
					RptVar = RptVar + "<div ID='BkDtlPnl' class='pr ddbc oh vat' style='color:rgba(" + BdCValVar + ",1)'></div>"
				RptVar = RptVar + "<div class='pa ddbc bw1 bss pd2 z3 sysclrgray fs9 fw600' style='border-radius:0px 0px 0px 3px;top:-1px;right:-1px;background-color:rgba(255,255,255,1)'>AD</div>"
			RptVar = RptVar + "</td></tr></table>"
			RptVar = RptVar + "<div class='pr dc'><a href='" + BkLkArVar[CurVar] + "'><div class='pr ddbc rc10 pd4 amz bw1 bss sysclrwhite vat' style='height:30px;width:70px;background-image: url(\"../sys/art/custom/advrtz/AmazonGray.png\");background-repeat: no-repeat;background-position: center;background-size: 80% 80%;'></div></a></div>";
			RptVar = RptVar + "<div class='gap5'></div>"
			RptVar = RptVar + "<div class='pr dr'>"
			RptVar = RptVar + "<div class='pa ddbc rc50p pd2 bw1 bss sysclrblack sysbglightgray cp fs10 w15 h15 l5 b0' style='bottom:0px' onclick='document.getElementById(\"RptPnl\").innerHTML=\"\"'>X</div>"
			RptVar = RptVar + "<div class='pr ddbc rc7 pd4 amz sysclrblack sysbgyellow oh cp bw1 bss fs8 fw600 r5 cp' onclick='BksJn();ATxJn();document.getElementById(\"AdTxPnl\").innerHML=\"250px\";'>Next</div>"
			RptVar = RptVar + "</div>"	
			RptVar = RptVar + "<div class='gap5' style='height:5px'></div>"
		RptVar = RptVar + "</div>"
		RptVar = RptVar + "</div>"
		
//RptVar = "<div class='pr dl'><div class='pr ddbc rc7 pd6 amz sysclrblack sysbgyellow oh cp bw1 bss fs8 fw600 cp' onclick='BksJn();ATxJn();document.getElementById(\"AdTxPnl\").innerHML=\"250px\";'>TEST NEXT AD: " + (CurVar + 1) + "</div></div><div class='gap20'></div>" + RptVar

		document.getElementById('RptPnl').innerHTML = RptVar;
	}
}

function ATxJn()
{
	document.getElementById('CurPnl').innerHTML;
	var ItemsVar = (document.getElementById('AdLPnl').innerHTML).split(";");	
	CurVar = parseInt(ItemsVar[parseInt(document.getElementById('CurPnl').innerHTML)]) - 1;
	var ATxVar = "";
	ATxVar = ATxVar + "Time Travel, The Speed of Light, Gravity, and The Big Bang. <br /><br />What is myth and what is true?<br /><br />Find out in this answer packed book."
	ATxVar = ATxVar + ";Your Perceived Identity - The Life Repair Manual<br /><br />How to Overcome Difficult People, Confusion, Unhappiness, Depression, Arrogance, Jealousy, Fear, Doubt, and Lies."
	ATxVar = ATxVar + ";Make Yours a Marriage Made in Heaven Filled with Passion and Joy<br /><br />MARRIAGE MANUAL"
	ATxVar = ATxVar + ";HOW TO BUILD A FOUNDATION OF ROCK<br /><br />THE FAMILY REPAIR MANUAL"
	ATxVar = ATxVar + ";To make our prayers work effectively, we need to know WHY Our Prayers Dont Work<br /><br />Learn the basics in The Prayer How-To Manual"
	ATxVar = ATxVar + ";The Weight Loss Repair Manual<br /><br />Feel Better<br />Feel Younger<Br />Live Longer<br />Live Better<br /><br />Learn How to Lose Weight While Sleeping"
	ATxVar = ATxVar + ";The First Four Days<br /><br />Is it possible that Biblical Creation is scientifically possible?<br /><br />There are answers"
	ATxVar = ATxVar + ";Finding Gratitude in Hard Times<br /><br />When life is beating you down, you need to find the elusive Key called Gratitude.<br /><br />Your Guide to Gratitude"
	ATxVar = ATxVar + ";Day Three - Gravity, Land, Seas, and Evolution of Plants<br /><br />Solid basic science explaining how plants formed and how long it took."
	ATxVar = ATxVar + ";Day Five and Day Six - The Creatures - Revolution or Evolution<br /><br />Investigate the realities and extents of the arrival of the animals<br /><br /> Evolution or Creation, or was it both?"
	ATxVar = ATxVar + ";Evolution versus Man - In Our Image<br /><br />Was it all monkey business? Or was man created, and if so, by what method did it occur?"
	ATxVar = ATxVar + ";Boats, Floods, and Noah - The Deluge<br /><br />Could any boat really hold all species? And where did all that water go?<br /><br />Answers for tough questions found here!"
	ATxVar = ATxVar + ";The Bible How-To Manual AND The Things We Don&#8217t See<br /><br />What&#8217s the point of the Bible?<br />It&#8217s not what people think. "
	ATxVar = ATxVar + ";Upon This Rock I Will Build My Church<br /><br />Is today&#8217s &#8220church&#8221 the REAL Church?<br /><br />And which one is the best?"
	var BkTxVar = ATxVar.split(";");
	var BksVar = ("Bending-The-Ruler;Hot-Water;Red-Hot-Marriage;Strong-Family;Understanding-Prayer;DREAM-THIN;The-Science-Of-God-Volume-1;Thank-You-GOD;The-Science-Of-God-Volume-2;The-Science-Of-God-Volume-3;The-Science-Of-God-Volume-4;The-Science-Of-God-Volume-5;Understanding-The-Bible;Understanding-The-Church").split(";");
	var BkVar = BksVar[CurVar]
	var ATx2Var = BkTxVar[CurVar]
	BkVar = BkVar.replace("-"," ")
	BkVar = BkVar.replace("-"," ")
	BkVar = BkVar.replace("-"," ")
	BkVar = BkVar.replace("-"," ")
	BkVar = BkVar.replace("-"," ")
	BkVar = BkVar.replace("-"," ")
	BkVar = BkVar.replace("-"," ")
	var atxtVar = "<div ID='AdTxPnl' class='pr ddbc adtxt fw600 fs11' style='padding:0px 7px 0px 0px;'><br />";
	atxtVar = atxtVar + BkVar;
	atxtVar = atxtVar + "<div class='gap5'></div>"
	atxtVar = atxtVar + "<div class='pr dc fw300 fs9'>" + ATx2Var + "</div>";
	atxtVar = atxtVar + "</div>";
	document.getElementById("BkDtlPnl").innerHTML = atxtVar;
}



function asd(TextVar)
{
	if (document.getElementById('RptPnl') != null)
	{
		document.getElementById('RptPnl').innerHTML = document.getElementById('RptPnl').innerHTML + TextVar + "<br />";
	}
}



function SetBxWidthJn(TheObjectVar)
{
	if(document.getElementById(TheObjectVar).nodeName === "SELECT")
	{
		document.getElementById(TheObjectVar).style.width = (document.getElementById(TheObjectVar).options[document.getElementById(TheObjectVar).selectedIndex].text.length * 6) + 40 + "px";
	}
	else
	{
		document.getElementById(TheObjectVar).style.width = document.getElementById(TheObjectVar).value.length * 9 + "px";
	}
}



function ShowJn(MeVar,PanelVar,ParkLocationVar,HeightVar)
{
	var OffSetHeightVar = document.getElementById(PanelVar).offsetHeight;
	if(document.getElementById(PanelVar).style.maxHeight < HeightVar || document.getElementById(PanelVar).style.maxHeight > HeightVar)
	{
		document.getElementById(PanelVar).style.maxHeight = OffSetHeightVar + "px";
		document.getElementById(MeVar).innerHTML = "<div class='gap20'></div>. . . Show More<div class='pr ddbc w20'></div>";
	}
	else
	{
		HeightVar = "3000px";
		OffSetHeightVar = 3000;
		document.getElementById(MeVar).innerHTML = "<div class='gap20'></div>. . . Show Less<div class='pr ddbc w20 h0'></div>";
	}
	OffSetHeightVar = (OffSetHeightVar / 1000)
	if(OffSetHeightVar < 1){OffSetHeightVar=1;}
	document.getElementById(PanelVar).style.transition = "max-height " + OffSetHeightVar + "s";
	document.getElementById(PanelVar).style.maxHeight = HeightVar;
	window.location.href = ParkLocationVar;
	BksJn();
}



function AngleJn()
{
	if(document.getElementById('SinBx') != null && document.getElementById('CoSinBx') != null && document.getElementById('TangentBx') != null && document.getElementById('OppositeBx') != null && document.getElementById('HypotenuseBx') != null && document.getElementById('AdjacentBx') != null && document.getElementById('AngleABx') != null && document.getElementById('AngleBBx') != null && document.getElementById('AngleCBx') != null)
	{
		var sinOfAngleX = parseFloat(document.getElementById('OppositeBx').value) / parseFloat(document.getElementById('HypotenuseBx').value)
		var TheAnswersVar = ""

		//document.getElementById('AdjacentBx').value = 24
		//document.getElementById('OppositeBx').value = 36
		document.getElementById('HypotenuseBx').value = Math.hypot(parseFloat(document.getElementById('AdjacentBx').value), parseFloat(document.getElementById('OppositeBx').value))

		document.getElementById('AngleABx').value = 90
		document.getElementById('AngleBBx').value = (Math.asin(sinOfAngleX) * 180/Math.PI)
		document.getElementById('AngleCBx').value = (90 - (Math.asin(sinOfAngleX) * 180/Math.PI))

		document.getElementById('SinBx').value = 	parseFloat(document.getElementById('OppositeBx').value) / parseFloat(document.getElementById('HypotenuseBx').value)
		document.getElementById('CoSinBx').value = 	parseFloat(document.getElementById('AdjacentBx').value) / parseFloat(document.getElementById('HypotenuseBx').value)
		document.getElementById('TangentBx').value = 	parseFloat(document.getElementById('OppositeBx').value) / parseFloat(document.getElementById('AdjacentBx').value)

		TheAnswersVar = TheAnswersVar + sinOfAngleX + "<br />"
		TheAnswersVar = TheAnswersVar + (Math.asin(sinOfAngleX) * 180/Math.PI) + " Large Angle<br />"
		TheAnswersVar = TheAnswersVar + (90 - (Math.asin(sinOfAngleX) * 180/Math.PI)) + " Small Angle<br />"
		TheAnswersVar = TheAnswersVar + Math.hypot(24, 36) + "<br />"
		//alert(Math.sin(sinOfAngleX))
		//alert(parseFloat(document.getElementById('SinBx').value) / parseFloat(document.getElementById('CoSinBx').value))
	
		document.getElementById('ShowAnswers').innerHTML = TheAnswersVar
		
		//https://stackoverflow.com/questions/23598547/draw-a-line-from-x-y-with-a-given-angle-and-length
		var c = document.getElementById("myCanvas");
		var ctx = c.getContext("2d");
		x1 = 30;
		y1 = 30;
		r =  80;
		theta = 0.5;
		ctx.moveTo(x1, y1);
		ctx.lineTo(x1 + r * Math.cos(theta), y1 + r * Math.sin(theta));
		ctx.stroke();
	}
}





function StartSequence()
{
	StarsJn('BTRSCN');
	CometJn('SrsCmtsA','cmtA','BTRSCN');	
	PosOrbtJn('SrsOrbtA');
	StarsJn('SrFldTSOG');		
	CometJn('SrsCmtsDT','cmtDT','DTSCN');			
	StarsJn('SrFldHD');	
}



function PosOrbtJn(SrsOrbtVar)
{
	if(document.getElementById(SrsOrbtVar) != null)
	{
		var hgtvar = document.getElementById(SrsOrbtVar).offsetHeight - 20
		var wthvar = document.getElementById(SrsOrbtVar).offsetWidth - 20
		var rndvar
		rndvar = Math.floor((Math.random() * hgtvar) + 1);
		document.getElementById(SrsOrbtVar).style.top = (10 + parseInt(rndvar)) + 'px';
		rndvar = Math.floor((Math.random() * wthvar) + 1);
		document.getElementById(SrsOrbtVar).style.left = ( 10 + parseInt(rndvar)) + 'px';
	}
}



function CometJn(SrsCmtsVar,cmtVar,SrFldVar)
{
	if(document.getElementById(SrsCmtsVar) != null && document.getElementById(cmtVar) != null && document.getElementById(SrFldVar) != null)
	{
		var rndvar = 2
		var SrsCometVar
		var hgtvar = document.getElementById(SrFldVar).offsetHeight - 50;
		var topvar = (document.getElementById(SrFldVar).offsetTop);

		SrsCometVar = document.getElementById(SrsCmtsVar).innerHTML;
		SrsCometVar = SrsCometVar.replace("sd","sa");
		SrsCometVar = SrsCometVar.replace("sc","sd");
		SrsCometVar = SrsCometVar.replace("sb","sc");
		SrsCometVar = SrsCometVar.replace("sa","sb");
		document.getElementById(SrsCmtsVar).innerHTML = SrsCometVar;

		SrsCometVar = document.getElementById(cmtVar).innerHTML;
		SrsCometVar = SrsCometVar.replace("sc","sd");
		SrsCometVar = SrsCometVar.replace("sb","sc");
		SrsCometVar = SrsCometVar.replace("sd","sb");
		document.getElementById(cmtVar).innerHTML = SrsCometVar;

		rndvar = Math.floor((Math.random() * hgtvar) + 1);
		rndvar = rndvar * 1 
		document.getElementById(SrsCmtsVar).style.top = (rndvar) + 'px';
		var CycleSecondsVar = Math.random() * (20000 - 5000) + 5000;
		setTimeout("CometJn('" + SrsCmtsVar + "','" + cmtVar + "','" + SrFldVar + "')", CycleSecondsVar);
		}
}



function StarsJn(SrFldVar)
{
	if(document.getElementById(SrFldVar) != null && document.getElementById('Str1') != null && document.getElementById('Str2') != null && document.getElementById('Str3') != null && document.getElementById('Str4') != null && document.getElementById('Str5') != null)
	{
		var freqa = 0
		var s1w = document.getElementById('Str1').innerHTML;
		var s2r = document.getElementById('Str2').innerHTML;
		var s3b = document.getElementById('Str3').innerHTML;
		var s4f = document.getElementById('Str4').innerHTML;
		var s5f = document.getElementById('Str5').innerHTML;
		var fldW = parseInt(document.getElementById(SrFldVar).offsetWidth);
		var fldH = parseInt(document.getElementById(SrFldVar).offsetHeight);
		for (var i=0;i<s5f;i++)
		{
			freqa = parseInt(freqa) + 1
			thecls = 'sa'
			Tpvar = Math.floor((Math.random() * fldW) + 1);
			Ltvar = Math.floor((Math.random() * fldH) + 1);
			if(parseInt(freqa) < parseInt(s1w))
			{
				thecls = 'pa ddbc sb'
			}
			else if(parseInt(freqa) < parseInt(s1w) + parseInt(s2r))
			{
				thecls = 'pa ddbc sc'
			}
			else if(parseInt(freqa) < parseInt(s1w) + parseInt(s2r) + parseInt(s3b))
			{
				thecls = 'pa ddbc sd'
			}
			else if(parseInt(freqa) >= parseInt(s1w) + parseInt(s2r) + parseInt(s3b) + parseInt(s4f))
			{
				thecls = 'pa ddbc sa'
				freqa = 0;
			}
			document.getElementById(SrFldVar).innerHTML = document.getElementById(SrFldVar).innerHTML + "<div class='" + thecls + "' style='top:" + Ltvar + "px;left:" + Tpvar + "px'>" + "</div>";
		}
	}
}



function RunGMTJn(){
	var vVar
	for (i=1; i<12; i++)
	{
		if(document.getElementById('gmt' + i) != null && document.getElementById('mt' + i) != null)
		{
			if(i == 1){vVar = TheGMTJn("M",5)}
			else if(i == 2){vVar = TheGMTJn("M",2)}
			else if(i == 3){vVar = TheGMTJn("M",0)}
			else if(i == 4){vVar = TheGMTJn("P",4)}
			else if(i == 5){vVar = TheGMTJn("P",6)}
			else if(i == 6){vVar = TheGMTJn("P",7)}
			else if(i == 7){vVar = TheGMTJn("P",8)}
			else if(i == 8){vVar = TheGMTJn("P",13)}
			else if(i == 9){vVar = TheGMTJn("P",14)}
			else if(i == 10){vVar = TheGMTJn("P",15)}
			else if(i == 11){vVar = TheGMTJn("P",17)}
			document.getElementById('gmt' + i).innerHTML = vVar[0];
			document.getElementById('mt' + i).style.backgroundColor = 'rgba(' + vVar[1] + ',1)'
		}
	}
	setTimeout("RunGMTJn()", 900000);
}



function TheGMTJn(OperatorVar,GMTOffSetVar)
{
	var currentdatevar = new Date(); 
	if(OperatorVar == "M")
	{
		currentdatevar.setHours(currentdatevar.getHours() - parseInt(GMTOffSetVar));
	}	
	else
	{
		currentdatevar.setHours(currentdatevar.getHours() + parseInt(GMTOffSetVar));
	}	
	currentdatevar.toLocaleString();
	var theMonthVar
	var ClockSuffixVar = "AM"
	var ClockVar
	var MinutesVar
	var datetimeVar
	var colorVar
	if(parseInt(currentdatevar.getMonth()) == parseInt(0)){theMonthVar = 'Jan'}
	else if(parseInt(currentdatevar.getMonth()) == parseInt(1)){theMonthVar = 'Feb'}
	else if(parseInt(currentdatevar.getMonth()) == parseInt(2)){theMonthVar = 'Mar'}
	else if(parseInt(currentdatevar.getMonth()) == parseInt(3)){theMonthVar = 'Apr'}
	else if(parseInt(currentdatevar.getMonth()) == parseInt(4)){theMonthVar = 'May'}
	else if(parseInt(currentdatevar.getMonth()) == parseInt(5)){theMonthVar = 'Jun'}
	else if(parseInt(currentdatevar.getMonth()) == parseInt(6)){theMonthVar = 'Jul'}
	else if(parseInt(currentdatevar.getMonth()) == parseInt(7)){theMonthVar = 'Aug'}
	else if(parseInt(currentdatevar.getMonth()) == parseInt(8)){theMonthVar = 'Sep'}
	else if(parseInt(currentdatevar.getMonth()) == parseInt(9)){theMonthVar = 'Oct'}
	else if(parseInt(currentdatevar.getMonth()) == parseInt(10)){theMonthVar = 'Nov'}
	else if(parseInt(currentdatevar.getMonth()) == parseInt(11)){theMonthVar = 'Dec'}
	ClockVar = currentdatevar.getHours()
	if(parseInt(currentdatevar.getHours()) >= 12){ClockVar = parseInt(currentdatevar.getHours() - 12);ClockSuffixVar = "PM";}
	if(parseInt(ClockVar) == 0){ClockVar = 12;}
	MinutesVar = ("A" + 0 + currentdatevar.getMinutes()).substr(-2)
	datetimeVar = "<b>Local Time: " + ClockVar + ":" + MinutesVar + ClockSuffixVar + " (" + theMonthVar + " " + currentdatevar.getDate() + ", " + currentdatevar.getFullYear() + ")</b>"
	colorVar = "230,240,255";
	if(ClockVar + ClockSuffixVar == "7PM"){colorVar = "200,200,200"}
	else if(ClockVar + ClockSuffixVar == "8PM"){colorVar = "150,150,150"}
	else if(ClockVar + ClockSuffixVar == "9PM"){colorVar = "100,100,100"}
	else if(ClockVar + ClockSuffixVar == "10PM"){colorVar = "50,50,50"}
	else if(ClockVar + ClockSuffixVar == "11PM"){colorVar = "0,0,0"}
	else if(ClockVar + ClockSuffixVar == "12AM"){colorVar = "0,0,0"}
	else if(ClockVar + ClockSuffixVar == "1AM"){colorVar = "0,0,0"}
	else if(ClockVar + ClockSuffixVar == "2AM"){colorVar = "0,0,0"}
	else if(ClockVar + ClockSuffixVar == "3AM"){colorVar = "0,0,0"}
	else if(ClockVar + ClockSuffixVar == "4AM"){colorVar = "50,50,50"}
	else if(ClockVar + ClockSuffixVar == "5AM"){colorVar = "100,100,100"}
	else if(ClockVar + ClockSuffixVar == "6AM"){colorVar = "150,150,150"}
	else if(ClockVar + ClockSuffixVar == "7AM"){colorVar = "200,200,200"}
	return [datetimeVar,colorVar]
	BksJn();
}


function ConvertMeasureJn(UnitsVar,ValueVar,InOutVar)
{
	if(InOutVar == "In")
	{
		if(UnitsVar == 1){ValueVar = ValueVar / 12} //Inches
		else if(UnitsVar == 2){ValueVar = ValueVar} //Feet
		else if(UnitsVar == 3){ValueVar = ValueVar * 5280} //Miles	
		else if(UnitsVar == 4){ValueVar = ValueVar * 0.032808399} //Centimeters
		else if(UnitsVar == 5){ValueVar = ValueVar * 3.2808399} //Meters
		else if(UnitsVar == 6){ValueVar = ValueVar * 3280.83985}; //Kilometers
		ValueVar = ValueVar /5280
	}
	else if(InOutVar == "Out")
	{
		if(UnitsVar == 1){ValueVar = ValueVar * 63360} //Inches
		else if(UnitsVar == 2){ValueVar = ValueVar * 5280} //Feet
		else if(UnitsVar == 3){ValueVar = ValueVar} //Miles	
		else if(UnitsVar == 4){ValueVar = ValueVar * 160934} //Centimeters
		else if(UnitsVar == 5){ValueVar = ValueVar * 1609.34} //Meters
		else if(UnitsVar == 6){ValueVar = ValueVar * 1.60934}; //Kilometers
	}
	return ValueVar
}


function GetTextUnitJn(UnitsVar)
{
	if(UnitsVar == 1){ValueVar = "Inches"} //Inches
	else if(UnitsVar == 2){ValueVar = "Feet"} //Feet
	else if(UnitsVar == 3){ValueVar = "Miles"} //Miles	
	else if(UnitsVar == 4){ValueVar = "Centimeters"} //Centimeters
	else if(UnitsVar == 5){ValueVar = "Meters"} //Meters
	else if(UnitsVar == 6){ValueVar = "Kilometers"}; //Kilometers
	return ValueVar
}


</script>

<div></div>
		<div id="SiteArtB"></div>

		<script type="text/javascript">
			window.onload = LoadJn;
			localtime();
			if(document.getElementById('SetFcs') != null){if(document.getElementById('SetFcs').innerHTML.toUpperCase() != 'NO'){if(document.getElementById(document.getElementById('SetFcs').innerHTML) != null){document.getElementById(document.getElementById('SetFcs').innerHTML).focus();}};}else{if(document.getElementById('S1Jx') != null){document.getElementById('S1Jx').focus();}}
			RotatorJn(new Date().getTime());	
		</script>
		
		<script type="text/javascript">
			PlayerJFn();
			TabABJFnr();
			setTimeout("TabABJFnr()", document.getElementById('TabAltTime').innerHTML);
		</script>
  </body>
</html>

