Content-Type: multipart/related; start=; boundary=----------vz8vre3LOsirGgAqCZo2LA Content-Location: http://www.definicionabc.com/general/rico.php Subject: =?utf-8?Q?Definici=C3=B3n=20de=20Rico=20=C2=BB=20Concepto=20en=20Definici=C3=B3n=20ABC?= MIME-Version: 1.0 ------------vz8vre3LOsirGgAqCZo2LA Content-Disposition: inline; filename=rico.htm Content-Type: text/html; charset=UTF-8; name=rico.htm Content-ID: Content-Location: http://www.definicionabc.com/general/rico.php Content-Transfer-Encoding: 8bit Definición de Rico » Concepto en Definición ABC

Definición ABC » Rico

Definición de Rico

De acuerdo al uso que se le de a la palabra rico, la misma podrá referir diferentes cuestiones.

La referencia más popular y extendida de la palabra dice que rico es aquel individuo que tiene en su haber mucho dinero, ya sea porque es dueño de una empresa exitosa que factura millones de dólares al año, porque proviene de una familia opulenta que ha amasado en su historia una enorme fortuna o porque es dueño de tierras que producen grandes riquezas.

Por lo tanto, quien es rico poseerá una considerable riqueza. La riqueza, entonces, será la abundancia de recursos valuables de posesiones materiales o estará dada por el control de los mencionados activos. Por tanto, la riqueza será aquello opuesto a la pobreza de lo que resulta que el rico será la antítesis del pobre.

Generalmente, la riqueza la produce un proceso productivo que generó mucho más dinero del que se utilizó inicialmente para darle marcha al proceso en cuestión.

El dueño de una hacienda, de una siembra, de una mina, de una instalación de petróleo, de un restaurante, entre otros, de conseguir un buen equilibrio en lo que respecta al proceso de producción y las ventas, seguramente, será una persona rica/o.

Por otra parte, a la palabra rico es muy común que en el lenguaje corriente se la emplee para referirse a algo gustoso, sabroso o agradable. El pastel de papas que cocino anoche mi mamá estaba tan rico que me lo comí sola casi todo. Juan siempre tiene un olor tan rico, que cuando camina deja una estela a su paso.

En tanto, cuando el término es aplicado a las personas, mayormente, se hace con una intención de expresar cariño.

Y asimismo en el leguaje coloquial de algunas regiones de Latinoamérica el término se emplea para referirse a un niño que se caracteriza por ser bonito y gracioso. Juancito es un niño tan rico.



------------vz8vre3LOsirGgAqCZo2LA Content-Disposition: inline Content-Type: image/jpeg Content-Location: http://www.definicionabc.com/wp-content/themes/definicion/images/header-fondo.jpg Content-Transfer-Encoding: Base64 /9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAYEBAQFBAYFBQYJBgUGCQsIBgYICwwK CgsKCgwQDAwMDAwMEAwODxAPDgwTExQUExMcGxsbHCAgICAgICAgICD/2wBDAQcH Bw0MDRgQEBgaFREVGiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICD/wgARCADwAAoDAREAAhEBAxEB/8QAFwABAQEBAAAAAAAA AAAAAAAAAAIBBf/EABcBAQEBAQAAAAAAAAAAAAAAAAABAwT/2gAMAwEAAhADEAAA AeJrwDIEqJBKjASokEgyUSDFEglRMDASokGKJBKiYGAlRIMUSCVEgyB//8QAFBAB AAAAAAAAAAAAAAAAAAAAUP/aAAgBAQABBQJz/8QAFBEBAAAAAAAAAAAAAAAAAAAA UP/aAAgBAwEBPwFz/8QAFBEBAAAAAAAAAAAAAAAAAAAAUP/aAAgBAgEBPwFz/8QA FBABAAAAAAAAAAAAAAAAAAAAUP/aAAgBAQAGPwJz/8QAFxABAQEBAAAAAAAAAAAA AAAAEQAQMP/aAAgBAQABPyHGdZ1mZ1nWdZ6s6zrOs8f/2gAMAwEAAgADAAAAECW0 v9iQJLUv0mwNm9vwCZP29vwCZLW//8QAFBEBAAAAAAAAAAAAAAAAAAAAUP/aAAgB AwEBPxBz/8QAFBEBAAAAAAAAAAAAAAAAAAAAUP/aAAgBAgEBPxBz/8QAFxABAQEB AAAAAAAAAAAAAAAAEQAQIP/aAAgBAQABPxDgZ0Z5BnRnRnRmZmZmZmdGdGdGdGZm Zmb/2Q== ------------vz8vre3LOsirGgAqCZo2LA Content-Disposition: inline Content-Type: image/png Content-Location: http://www.definicionabc.com/wp-content/themes/definicion/images/content.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAAiYAAADICAMAAADrwdqvAAABmFBMVEUAAAD///8A AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbGxsAAAAzMzMAAABVVVUAAABiYmJt bW0AAACAgIAAAACQkJCOjo6UlJScnJwAAAClpaWrq6upqamsrKy1tbW9vb27u7u9 vb3BwcHFxcXJycnJycnOzs7T09PU1NTS0tLV1dXX19fa2trb29vb29vc3Nzf39/f 39/i4uLj4+Pj4+Pk5OTm5ubo6Ojn5+fp6enp6enr6+vs7Ozt7e3s7Ozu7u7u7u7w 8PDw8PDw8PDy8vLy8vLz8/P09PT19fX19fX39/f39/f39/f4+Pj5+fn7+/v5+fn7 +/v7+/v9/f38/Pz+/v79/f3+/v7+/v7////w8PD5+fnc3Nzl5eXn5+fo6Ojp6enq 6urr6+vs7Ozt7e3u7u7v7+/w8PDx8fHy8vLz8/P09PT19fX29vb39/f4+Pj5+fn6 +vr7+/v8/Pz9/f3+/v7///8M3D+IAAAAbXRSTlMAAAECAwQFBgcICQoLDA0ODxAR EhMUFRYXGBkcHR4fJCUnKiwwMTU2OTtBQUNER0xRUlVXXV9jaG1wcXN5e36BhIaJ jpGUl5men6Gkqayur7G0uby/wcTGzM7R09bZ3uDl5ujr7/Dx8vf6/P7+Ys8IgAAA CKJJREFUeNrt3PlT1HUcx3EUORaWXRZ22YUOw0qzKK08KLUMkw46MFHpMLSy7RYE FVwOZYH9t+NzffdzTtNMMzXT8/mD6y/+4Hse853vKPvqOED0l3VwAoIJwYT+DSYd Bzu7c/35gf9jtf9u//Tf8W/+qXx/rrvTYdLVP9wi8uvrFkw6TD2lp7kJ+f042Osy qTzHUcjvh3KfYHKw81BPTlR6+sXfmkT77ezs7mkmt6p5wWT/xbVSFS83zz7/8q8N okZjfWNr2zhZqEkm3X08WCloc3tX/eamepr0Dv7IUchvdWtH/eZrxaSv/ANHIb+V Dc1kvtovmOSrt1qtvd2dHV7cKOvJH/uPE/kee31EMakt7CvZ3tpY59WNTGu/L66q 99g5zaR6s7W7vcljlqLvsVcqmslXrZ2tVW5C0ffY2Yr857X+6nxrZ2OZm1DQ8v57 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 CB9/AvCXmlBY/ZYPAAAAAElFTkSuQmCC ------------vz8vre3LOsirGgAqCZo2LA Content-Disposition: inline Content-Type: image/png Content-Location: http://www.definicionabc.com/wp-content/themes/definicion/images/content-wrapper.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAAiYAAADICAMAAADrwdqvAAABy1BMVEUAAAD///8A AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcHBwAAAAAAAA1NTUAAAAAAABX V1cAAAAAAABlZWViYmIAAAAAAABwcHAAAAAAAAB6enoAAAAAAACCgoKNjY0AAACT k5MAAACQkJCenp4AAAAAAACnp6eurq4AAACvr68AAAAAAAC4uLi6urq9vb3BwcHG xsbIyMjJycnLy8vQ0NDR0dHT09PW1tbV1dXY2Nja2trc3Nzb29ve3t7f39/h4eHi 4uLj4+Pm5ubm5ubo6Ojp6enp6enr6+vr6+vt7e3t7e3u7u7u7u7w8PDx8fHy8vLy 8vLz8/P19fX19fX19fX39/f4+Pj39/f4+Pj5+fn7+/v7+/v8/Pz9/f3k5OTT09P9 /f3+/v7////ExMTNzc3S0tLV1dXX19fa2trc3Nzf39/k5OTl5eXm5ubn5+fo6Ojp 6enq6urr6+vs7Ozt7e3u7u7v7+/w8PDx8fHy8vLz8/P09PT19fX29vb39/f4+Pj5 +fn6+vr7+/v8/Pz9/f3+/v7///+JENV2AAAAdXRSTlMAAAECAwQFBgcICQoLDA0O DxAREhMUFRYXGBkaGxwdHSAjIyUmJicoKSkrLCwtLi8xMjQ1NTo7PUBCQ0ZHSktO UVdZXF9iZ2ptb3N1e32Bg4aIjpGWmZuhpKapq66xtLa7vsHGy87R1tjZ2+Dl6/Dy 8/T1+vywRnd9AAAJJ0lEQVR42u3d+1Oc1R3H8chlWfa+wLIbS2vUYprWqqWmNbWN KKsGRWoMSloblUixMZhttbeoVSAQQsItwsLz53bP9XnOOc9OO5OJP71fP2QcfvzO ezZnM8nHE488ckLoy48uRdHh9upRBEjL9UK/zKPzi82kfk1ksnLMeaDcaISZFOrX ZSZcB1orzKS/UF8mEzgaxTCTxg0ygWMsLZMWmcAxHmZSbPydTOA4U8oEmZyM5Bdi jgNjIiWTcZHJPT5NYJ0tZXq8TEpnOj8/IBPEzpX9TDKlCTKB63x5wM2kJ1M6SyZw TVaCTMrnZCZrHAfGVJDJQPm8zIRvOrCaYSaVySg6JhMkXKhmg0xeIRO4plMyaYpM 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 +D/8Fxu5N2YMM+GDAAAAAElFTkSuQmCC ------------vz8vre3LOsirGgAqCZo2LA Content-Disposition: inline Content-Type: image/png Content-Location: http://www.definicionabc.com/wp-content/themes/definicion/images/content-inner.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAAiYAAAAKAgMAAAD9UX2xAAAADFBMVEX///8AAAAA AAD////4MiRfAAAAA3RSTlMADBhFrxOEAAAAH0lEQVQ4y2NgYMj/PwjAEwYQGHXK qFNGnTLqlOHqFAA0djBicO1hwAAAAABJRU5ErkJggg== ------------vz8vre3LOsirGgAqCZo2LA Content-Disposition: inline Content-Type: image/png Content-Location: http://www.definicionabc.com/wp-content/themes/definicion/images/botonbuscar.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAAGQAAAAjCAMAAABVYV+yAAAAA3NCSVQICAjb4U/g AAAAhFBMVEX9/f38/Pz7+/v6+vr5+fn4+Pj39/f29vb19fX09PTz8/Py8vLx8fHw 8PDv7+/u7u7t7e3s7Ozr6+vq6urp6eno6Ojn5+fm5ubl5eXk5OTj4+Ph4eHe3t7a 2tva2trZ2dnZ2drY2NnY2NjS0tbOzdHNzNCpprelorOOiqOLh6CKhp9KQ2/11RND AAAACXBIWXMAAArwAAAK8AFCrDSYAAAAIXRFWHRTb2Z0d2FyZQBNYWNyb21lZGlh IEZpcmV3b3JrcyA0LjDqJid1AAAAFnRFWHRDcmVhdGlvbiBUaW1lADA3LzMwLzA5 5QYbmgAAAKtJREFUeJy911kWgjAQRNHGCSOKMwIGc5IwBHr/+7NZRPXdwDv1WcS8 DD7gDAsz8eRsXcE0NkxMc2hxidXXzdTbN5jtyVcvsNqTf8IFCiqRB5xE7nBakRuc RK5wWpESTiIXOImc4bQiBZxETnBaEQMnkSOcViSHk8gBTiJ7OK3IDk4iW7h1iUbE bMCKjuInA2siJVdgG6VLxOOvzjNCMW0Y5QRxih3wacXE/AeJirGMJhBXGwAAAABJ RU5ErkJggg== ------------vz8vre3LOsirGgAqCZo2LA Content-Disposition: inline Content-Type: image/png Content-Location: http://www.definicionabc.com/wp-content/themes/definicion/images/content-h2.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAAaQAAAARCAMAAACl4ih1AAAApVBMVEXd3d3////d 3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d 3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d 3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d 3d3d3d3d3d3d3d3d3d2YNz1SAAAANnRSTlMAAAEDCAkLERQdKCwyMzU2PT4/RElK S15fYGxvcHR1fYSHkJecnqWqq7jH1Njd3+Pk5/L3+vtl9R4IAAAAsElEQVRYw+3Y Vw7CMBREURM6IWBM6CWhl9DL7H9pRDIisIOHNefHkv+ermRbVjnX+IFzIynnJpqt GEk6L7kUGUm4BhAyknBzYM1IYtW7xuj2Ebh2tDFhk5EEChJ8ObUYSaLSMmu0Kbt0 3OH/qY/Bze7cR9meCwO6dcX27VQTPhwEi22kBSMJtk/fdmfgUGAksfwndtXKFtCM JNYYQy9deo+YkcSavn/Aa1GekYiR6NcLPY5+Hwm/17MAAAAASUVORK5CYII= ------------vz8vre3LOsirGgAqCZo2LA Content-Disposition: inline; filename=style.css Content-Type: text/css; charset=UTF-8; name=style.css Content-Location: http://www.definicionabc.com/wp-content/themes/definicion/style.css Content-Transfer-Encoding: 8bit body,html{height:100%;} html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td{border:0;outline:0;font-size:100%;vertical-align:baseline;background:transparent;margin:0;padding:0;} body{line-height:1;} ol,ul{list-style:none;} blockquote,q{quotes:none;} blockquote:before,blockquote:after,q:before,q:after{content:none;} :focus{outline:0;} del{text-decoration:line-through;} table{border-collapse:collapse;border-spacing:0;} .fl{float:left;} .fr{float:right;} .ac{text-align:center;} .ar{text-align:right;} .col-full:after{content:".";display:block;height:0;clear:both;visibility:hidden;} .fix{clear:both;height:1px;overflow:hidden;margin:-1px 0 0;} html body * span.clear,html body * div.clear,html body * li.clear,html body * dd.clear{background:none;border:0;clear:both;display:block;float:none;font-size:0;list-style:none;overflow:hidden;visibility:hidden;width:0;height:0;margin:0;padding:0;} body{font:14px/20px Georgia, serif;background:#ddd;color:#333;min-width:960px;} .gplusone{float:left;margin-right:2px;line-height:34px;padding-top:8px;margin-top:8px;} h1, h2, h3, h4, h5, h6{margin:0;font-family:Georgia, serif;color:#222;font-weight:normal;} h1{font-size:2em} h2{font-size:1.6em;} h3{font-size:1.6em;} h4{font-size:1.2em;} h5{font-size:1em;} h6{font-size:0.8em;} p{margin-bottom:20px;} img{vertical-align:bottom;-moz-force-broken-image-icon:1;} hr{display:none;} input, textarea{padding:7px 0 7px 7px;border-color:#EFEFEF #ccc #CCCCCC #efefef;border-width:1px;border-style:solid;} a:link, a:visited{color:#3088ff;text-decoration:none;} a:hover{color:#52302F;text-decoration:underline;} h1 a:link, h1 a:visited, h2 a:link, h2 a:visited, h3 a:link, h3 a:visited, h4 a:link, h4 a:visited, h5 a:link, h5 a:visited, h6 a:link, h6 a:visited{text-decoration:none;} h1 a:hover, h2 a:hover, h3 a:hover, h4 a:hover, h5 a:hover, h6 a:hover{text-decoration:underline;} #wrapper{background:#fff;padding:0 0 30px;} #wrapper-inner{width:960px;margin:0 auto;} .col-left{float:left;} .col-right{float:right;} .col-full{width:960px;margin:0 auto;} #header{padding:10px 0 20px 0;background:url(images/header-fondo.jpg) repeat;} #header a{font-weight:bold;color:#FFFFCC;} .header-inside{width:960px;margin:0 auto;} #logo{float:left;width:220px;font-size:12px;font-weight:normal;margin-bottom:15px;font-style:italic;line-height:20px;} #logo img{} #logo .site-title, #logo .site-description{font-family:Georgia, serif;color:#000;display:none;} #logo .site-title a{color:#222;font-size:20px;line-height:40px;text-transform:none;font-weight:normal;text-decoration:none;} #logo .site-title a:hover{text-decoration:underline;} #logo .site-description{color:#999;font:italic 14px Georgia, serif;} #prevnext{float:left;width:368px;padding-left:20px;border:0px solid #ccc;border-width:0px 0;font-weight:bold;color:#FFF;} #prevnext li{font-weight:bold;color:#000;float:left;} #prevnext li a{font-weight:bold;color:#000;letter-spacing:1px;} li#next.disabled a, li#next.disabled a small{background-position:right -150px !important;} li#next a{text-align:right;padding:3px 40px 1px 0;background-position:right -90px;} #prevnext li a:hover, #prevnext li a:focus{text-decoration:underline;} #prevnext li a:active, #prevnext li a:active small{color:#000;background-position:0 -30px;} li#next a:active{background-position:right -120px;} #chapters{position:fixed;top:0;left:0;width:100%;height:50px;background:url(images/chapters.png) repeat-x 0 0;z-index:150;} body.admin-bar{padding-top:28px;} body.admin-bar #chapters, body.admin-bar #vertical{top:28px;} #main{float:left;width:550px;} .content-wrapper{width:550px;padding-top:20px;margin:-30px 5px;background:url(images/content.png) no-repeat 0 0;position:relative;z-index:100;} .content-wrapper .content{padding:0 0 15px;background:url(images/content-wrapper.png) no-repeat 0 bottom;} .content-wrapper .content .content-inner{width:450px;padding:5px 50px 5px;background:url(images/content-inner.png) repeat-y;} body.archive .content-wrapper, body.search .content-wrapper{margin-bottom:100px;} #sidebar-left{width:160px;padding:10px 0 0 0;float:left;font-size:12px;} #sidebar-right{float:left;width:220px;padding:30px 0 0 15px;font-size:12px;} .wdb-social {background: #FFFFFF;border:1px solid #DDDDDD;border-right:none;margin-left: 0px;margin-right: 10px;margin-top: 240px;position: fixed;width: 150px;z-index: 0;} .wdb-social .wdb-social-box { padding:5px; width:140px; text-align:center;} #footer{padding:30px 0 0;z-index:50;} .footer-inside{width:960px;margin:0 auto;} .buscadorindex input{background:transparent url(images/botonbuscar.png) repeat-x bottom;font-family:Tahoma;font-size:.8em;font-weight:bold;text-transform:uppercase;color:#666;padding:5px;margin:6px;height:35px;width:70px;border:0;} .buscadortexto input{height:30px;float:left;margin:6px;font-size:18px;font-family:verdana,arial;background-color:#FFF;} .buscadortop{margin:12px;border:0;padding:12px;padding-left:10px;margin-bottom:18px;} #buscadortop .li{margin-top:5px;padding-top:5px;} #copyright, #credit{text-transform:uppercase;letter-spacing:1px;font-size:10px;} #copyright{height:40px;} #credit{margin-bottom:0;height:40px;text-align:right;} #breadcrumb{margin-bottom:1.5em;} .archive_header{float:left;width:460px;display:block;margin:-70px 0 70px 20px;padding:0 0 10px;font-weight:bold;} .archive_header .catrss a{font-size:11px;text-decoration:none;line-height:18px;} .post .title{font-size:24px;font-weight:normal;font-style:normal;color:#369;text-align:left;line-height:34px;padding:15px 10px 0;margin:0 -10px 0;border-bottom:0;} .content .title a{text-decoration:none;} .content .title a:hover, .content .title a:focus{text-decoration:underline;} .post .post-meta{padding:0 0 25px;font-style:italic;text-align:center;color:#999;font-size:12px;background:url(images/content-h2.png) no-repeat 0 bottom;} .post .post-meta a{color:#999;text-decoration:underline;} .post .post-meta a:hover{text-decoration:none;} .post .chapter-info{color:#999;text-align:left;font-size:12px;font-style:italic;padding:0 10px;line-height:49px;border-bottom:1px solid #ddd;margin:0 -10px;} .post .chapter-info .chapter-number{font-family:"Helvetica Neue", Helvetica, Arial, sans-serif;font-size:11px;font-style:normal;text-transform:uppercase;width:100px;text-align:left;} .post .chapter-info .chapter-caption{float:right;} .post .read-more{display:block;padding:0 0 20px;text-align:right;font-size:11px;font-style:italic;} .entry, .entry p{font:12px/1.5em Helvetica, Arial, sans-serif;} .entry h1, .entry h2, .entry h3, .entry h4, .entry h5, .entry h6{margin:0 0 0.5em;line-height:1.5em;} .entry p{margin-bottom:1.2em;} .entry blockquote{background:url(images/blockquote.png) no-repeat 0 12px;padding:10px 20px 10px 50px;color:#444;} .entry blockquote p{font-style:italic;} .entry ul{margin-bottom:1.5em;padding:0 0 0 10px;} .entry ul ul{margin:0;} .entry ul li{list-style-type:disc;} .entry ul ul li{list-style-type:circle;} .entry ol{margin-bottom:1.5em;padding:0 0 0 10px;} .entry ol ol{margin:0;} .entry ol li{list-style-type:decimal;} .entry ol li ol li{list-style-type:lower-latin;} .entry img, img.thumbnail{padding:1px;border:1px solid #e6e6e6;background:#F8F8F8;} img.wp-smiley{padding:0;border:none;} .alignleft{float:left;height:auto;margin:0px 20px 10px 0;} .alignright{float:right;height:auto;margin:0px 0 10px 20px;} .aligncenter{text-align:center;margin-bottom:15px;} img.aligncenter{margin-left:auto;margin-right:auto;display:block;} .entry .wp-caption{padding:1px;text-align:center;background:#F8F8F8;border:solid 1px #e6e6e6;} .entry .wp-caption img{margin:0;padding:4px 0;background:none;border:0;} .entry .wp-caption-text{margin:0;padding:0;font:0.9em/1.5em sans-serif;text-align:center;} .entry .wp-caption.aligncenter{margin:0 auto 15px;} .nav-entries, .wp-pagenavi{margin:-85px 0 0 0 !important;width:460px!important;padding:10px 15px;clear:none!important;float:left!important;} .nav-entries a{display:block;text-decoration:none;font-style:italic;} .nav-entries a:hover{text-decoration:underline;} #post-entries{margin-top:-20px;} #post-author{background:#fafafa;padding:15px;border:1px solid #e6e6e6;border-width:1px 0 1px;clear:both;} #post-author h4{margin-bottom:5px;} #post-author .profile-image{float:left;margin:0 15px 5px 0;padding:5px;border:1px solid #e6e6e6;background:#F8F8F8;background:rgba(255,255,255,0.7);} #post-author .profile-link{} .widget{margin-bottom:1.8em;} .widget h3{font-size:14px;font-weight:bold;font-style:italic;line-height:18px;padding-bottom:10px;border-bottom:1px solid #ddd;margin:5px 0 5px;} .widget p{margin-bottom:1em;} .widget ul{list-style:none;} .widget ul li{} .widget ul li a{padding:0 0 0 5px;line-height:22px;text-decoration:none;} .widget ul li a:hover{text-decoration:underline;} .widget ul ul{padding:0 0 0 15px;border-top:none;} .widget_recent_comments li, #twitter li{padding:6px 0;line-height:18px;border-bottom:1px solid #eee;} .widget_recent_comments li a, #twitter a{display:inline;padding:0;line-height:18px!important;background:none!important;border:none!important;} .searchform{background:#fefefe;width:99%;position:relative;border-color:#ccc #efefef #efefef #ccc;border-width:1px;border-style:solid;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;} .searchform input.s{padding:8px;width:85%;margin:0;border:none;background:none;color:#777;} .searchform input.submit{position:absolute;top:6px;right:10px;border:none;margin:0;padding:0;} #footer-widgets #wp-calendar th, #footer-widgets #wp-calendar td{color:#333;font-size:11px;} div #adsense{position:relative;left:20px;padding-top:10px;width:390px;padding-bottom:20px;margin-bottom:20px;} .ads_adsby, .ads_adsby:hover{background-color:#FFFFFF;margin-left:0px;color:#666666;text-decoration:none;font:12px Verdana, Arial;} .ads_link_1, .ads_link_1:hover{color:#2D8930;background-color:#FFFFFF;font-family:Verdana, Geneva, sans-serif;font-size:14px;font-weight:bold;text-decoration:underline;} .ads_descr_1{color:#000000;font-size:14px;font-family:Trebuchet MS, Arial, Sans-Serif;} .ads_url_1, .ads_url_1:hover{color:#2D8930;background-color:#FFFFFF;font-size:13px;text-decoration:none;font-family:Trebuchet MS, Arial, Sans-Serif;} .ads_link{color:#0000CC;font-size-adjust:none;font-stretch:normal;text-decoration:underline;font-weight:bold;font-family:Verdana, Geneva, sans-serif;font-size:14px;} .ads_link:hover{color:#000;} .ads_descr{color:#404040;font:14px Verdana, Geneva, sans-serif;} .ads_url{font-family:Trebuchet MS, Arial, Sans-Serif;font-size:13px;color:#000000;background-color:#FFFFFF;text-decoration:none;} .ads_url:hover{text-decoration:none;} /** menu **/ ol.snap_nav { clear: both; list-style: none; } ol.snap_nav li { display: block; float: left; padding: 0 5px 10px 0; } ol.snap_nav li a { font-weight: bold } ol.snap_nav li.snap_selected a { cursor: text; font-weight:normal; } ol.snap_titles { clear: both; display: block; border: 0; list-style: none; } ------------vz8vre3LOsirGgAqCZo2LA Content-Disposition: inline; filename=ads.js Content-Type: application/javascript; charset=UTF-8; name=ads.js Content-Location: http://www.definicionabc.com/ads.js Content-Transfer-Encoding: Base64 ZnVuY3Rpb24gZ29vZ2xlX2FkX3JlcXVlc3RfZG9uZShnb29nbGVfYWRzKSB7DQoN CnZhciBzID0gJyc7DQp2YXIgaTsNCg0KaWYgKGdvb2dsZV9hZHMubGVuZ3RoID09 IDApIHsNCnJldHVybjsNCn0NCg0KDQppZiAoZ29vZ2xlX2Fkc1swXS50eXBlID09 ICJmbGFzaCIpIHsNCg0KICAgcyArPSAnPGEgaHJlZj1cIicgKw0KZ29vZ2xlX2lu Zm8uZmVlZGJhY2tfdXJsICsgJ1wiPjxzcGFuIGNsYXNzPSJhZHNfYWRzYnkiPkF2 aXNvcyBHb29nbGU8L3NwYW4+PC9hPjxicj4nICsNCic8b2JqZWN0IGNsYXNzaWQ9 ImNsc2lkOkQyN0NEQjZFLUFFNkQtMTFjZi05NkI4LTQ0NDU1MzU0MDAwMCInICsN CicgY29kZWJhc2U9Imh0dHA6Ly9kb3dubG9hZC5tYWNyb21lZGlhLmNvbS9wdWIv c2hvY2t3YXZlL2NhYnMvZmxhc2gvc3dmbGFzaC5jYWIjdmVyc2lvbj02LDAsMCww IiBXSURUSD0iJyArDQpnb29nbGVfYWQuaW1hZ2Vfd2lkdGggKyAnIiBIRUlHSFQ9 IicgKw0KZ29vZ2xlX2FkLmltYWdlX2hlaWdodCArICciPiA8UEFSQU0gTkFNRT0i bW92aWUiIFZBTFVFPSInICsNCmdvb2dsZV9hZC5pbWFnZV91cmwgKyAnIj4nICsN Cic8UEFSQU0gTkFNRT0icXVhbGl0eSIgVkFMVUU9ImhpZ2giPicgKw0KJzxQQVJB TSBOQU1FPSJBbGxvd1NjcmlwdEFjY2VzcyIgVkFMVUU9Im5ldmVyIj4nICsNCic8 RU1CRUQgc3JjPSInICsNCmdvb2dsZV9hZC5pbWFnZV91cmwgKyAnIiBXSURUSD0i JyArDQpnb29nbGVfYWQuaW1hZ2Vfd2lkdGggKyAnIiBIRUlHSFQ9IicgKw0KZ29v Z2xlX2FkLmltYWdlX2hlaWdodCArDQonIiBUWVBFPSJhcHBsaWNhdGlvbi94LXNo b2Nrd2F2ZS1mbGFzaCInICsNCicgQWxsb3dTY3JpcHRBY2Nlc3M9Im5ldmVyIiAn ICsNCicgUExVR0lOU1BBR0U9Imh0dHA6Ly93d3cubWFjcm9tZWRpYS5jb20vZ28v Z2V0Zmxhc2hwbGF5ZXIiPjwvRU1CRUQ+PC9PQkpFQ1Q+JzsNCg0KfSBlbHNlIGlm IChnb29nbGVfYWRzWzBdLnR5cGUgPT0gImltYWdlIikgew0KDQogICBzICs9ICc8 YSBocmVmPVwiJyArDQpnb29nbGVfaW5mby5mZWVkYmFja191cmwgKyAnXCI+PHNw YW4gY2xhc3M9ImFkc19hZHNieSI+QXZpc29zIEdvb2dsZTwvc3Bhbj48L2E+PGJy PiA8YSBocmVmPSInICsNCmdvb2dsZV9hZHNbMF0udXJsICsgJyIgdGFyZ2V0PSJf dG9wIiB0aXRsZT0iZ28gdG8gJyArDQpnb29nbGVfYWRzWzBdLnZpc2libGVfdXJs ICsgJyIgb25tb3VzZW91dD0id2luZG93LnN0YXR1cz1cJ1wnIiBvbm1vdXNlb3Zl cj0id2luZG93LnN0YXR1cz1cJ2dvIHRvICcgKw0KZ29vZ2xlX2Fkc1swXS52aXNp YmxlX3VybCArICdcJztyZXR1cm4gdHJ1ZSI+PGltZyBib3JkZXI9IjAiIHNyYz0i JyArDQpnb29nbGVfYWRzWzBdLmltYWdlX3VybCArICcid2lkdGg9IicgKw0KZ29v Z2xlX2Fkc1swXS5pbWFnZV93aWR0aCArICciaGVpZ2h0PSInICsNCmdvb2dsZV9h ZHNbMF0uaW1hZ2VfaGVpZ2h0ICsgJyI+PC9hPic7DQoNCn0gZWxzZSBpZiAoZ29v Z2xlX2Fkc1swXS50eXBlID09ICJodG1sIikgew0KDQpzICs9IGdvb2dsZV9hZHNb MF0uc25pcHBldDsNCg0KfSBlbHNlIHsNCg0KaWYgKGdvb2dsZV9hZHMubGVuZ3Ro ID09IDEpIHsNCg0KICAgcyArPSAnPGEgaHJlZj1cIicgKw0KZ29vZ2xlX2luZm8u ZmVlZGJhY2tfdXJsICsgJ1wiPjxzcGFuIGNsYXNzPSJhZHNfYWRzYnkiPkF2aXNv cyBHb29nbGU8L3NwYW4+PC9hPjxicj4gPGEgaHJlZj0iJyArDQpnb29nbGVfYWRz WzBdLnVybCArICciIG9ubW91c2VvdXQ9IndpbmRvdy5zdGF0dXM9XCdcJyIgb25t b3VzZW92ZXI9IndpbmRvdy5zdGF0dXM9XCdnbyB0byAnICsNCmdvb2dsZV9hZHNb MF0udmlzaWJsZV91cmwgKyAnXCc7cmV0dXJuIHRydWUiPiA8c3BhbiBjbGFzcz0i YWRzX2xpbmtfMSI+IDxiPicgKw0KZ29vZ2xlX2Fkc1swXS5saW5lMSArICc8L2I+ PGJyPjwvc3Bhbj48L2E+IDxzcGFuIGNsYXNzPSJhZHNfZGVzY3JfMSI+JyArDQpn b29nbGVfYWRzWzBdLmxpbmUyICsgJyZuYnNwOycgKw0KZ29vZ2xlX2Fkc1swXS5s aW5lMyArICc8YnI+PC9zcGFuPiA8YSBocmVmPSInICsNCmdvb2dsZV9hZHNbMF0u dXJsICsgJyIgb25tb3VzZW91dD0id2luZG93LnN0YXR1cz1cJ1wnIiBvbm1vdXNl b3Zlcj0id2luZG93LnN0YXR1cz1cJ2dvIHRvICcgKw0KZ29vZ2xlX2Fkc1swXS52 aXNpYmxlX3VybCArICdcJztyZXR1cm4gdHJ1ZSI+PHNwYW4gY2xhc3M9ImFkc191 cmxfMSI+JyArDQpnb29nbGVfYWRzWzBdLnZpc2libGVfdXJsICsgJzwvc3Bhbj48 L2E+PGJyPic7DQoNCn0gZWxzZSBpZiAoZ29vZ2xlX2Fkcy5sZW5ndGggPiAxKSB7 DQoNCiAgIHMgKz0gJzxhIGhyZWY9XCInICsgZ29vZ2xlX2luZm8uZmVlZGJhY2tf dXJsICsgJ1wiPjxzcGFuIGNsYXNzPSJhZHNfYWRzYnkiPkF2aXNvcyBHb29nbGU8 L3NwYW4+PC9hPjxicj4nDQoNCg0KDQpmb3IoaSA9IDA7IGkgPCBnb29nbGVfYWRz Lmxlbmd0aDsgKytpKSB7DQoNCnMgKz0gJzxicj48YSBocmVmPSInICsNCmdvb2ds ZV9hZHNbaV0udXJsICsgJyIgb25tb3VzZW91dD0id2luZG93LnN0YXR1cz1cJ1wn IiBvbm1vdXNlb3Zlcj0id2luZG93LnN0YXR1cz1cJ2dvIHRvICcgKw0KZ29vZ2xl X2Fkc1tpXS52aXNpYmxlX3VybCArICdcJztyZXR1cm4gdHJ1ZSI+IDxzcGFuIGNs YXNzPSJhZHNfbGluayI+JyArDQovKmdvb2dsZV9hZHNbaV0ubGluZTEgKyAnPC9z cGFuPjwvYT48YnI+IDxzcGFuIGNsYXNzPSJhZHNfZGVzY3IiPicgKw0KZ29vZ2xl X2Fkc1tpXS5saW5lMiArICcmbmJzcDsnICsNCmdvb2dsZV9hZHNbaV0ubGluZTMg KyAnPC9zcGFuPjxicj4gPGEgaHJlZj0iJyArDQpnb29nbGVfYWRzW2ldLnVybCAr ICciIG9ubW91c2VvdXQ9IndpbmRvdy5zdGF0dXM9XCdcJyIgb25tb3VzZW92ZXI9 IndpbmRvdy5zdGF0dXM9XCdnbyB0byAnICsNCmdvb2dsZV9hZHNbaV0udmlzaWJs ZV91cmwgKyAnXCc7cmV0dXJuIHRydWUiPjxzcGFuIGNsYXNzPSJhZHNfdXJsIj4n ICsNCmdvb2dsZV9hZHNbaV0udmlzaWJsZV91cmwgKyAnPC9zcGFuPjwvYT48YnI+ JzsqLw0KZ29vZ2xlX2Fkc1tpXS5saW5lMSArICc8L3NwYW4+PC9hPjxiciAvPiA8 YSBocmVmPSInICsNCmdvb2dsZV9hZHNbaV0udXJsICsgJyIgb25tb3VzZW91dD0i d2luZG93LnN0YXR1cz1cJ1wnIiBvbm1vdXNlb3Zlcj0id2luZG93LnN0YXR1cz1c J2dvIHRvICcgKw0KZ29vZ2xlX2Fkc1tpXS52aXNpYmxlX3VybCArICdcJztyZXR1 cm4gdHJ1ZSI+PHNwYW4gY2xhc3M9ImFkc191cmwiPicgKw0KZ29vZ2xlX2Fkc1tp XS52aXNpYmxlX3VybCArICc8L3NwYW4+PC9hPiAtIDxzcGFuIGNsYXNzPSJhZHNf ZGVzY3IiPicgKw0KZ29vZ2xlX2Fkc1tpXS5saW5lMiArICcmbmJzcDsnICsNCmdv b2dsZV9hZHNbaV0ubGluZTMgKyAnPC9zcGFuPjxiciAvPic7DQoNCg0KfQ0KfQ0K ICAgIH0NCg0KICAgIGRvY3VtZW50LndyaXRlKHMpOw0KICAgIHJldHVybjsNCiAg fQ== ------------vz8vre3LOsirGgAqCZo2LA Content-Disposition: inline; filename=google_service.js Content-Type: text/javascript; charset=UTF-8; name=google_service.js Content-Location: http://partner.googleadservices.com/gampad/google_service.js Content-Transfer-Encoding: Quoted-Printable (function(){var f=3Dnull,k=3D!1;function l(a){this.t=3D{};this.tick=3Dfu= nction(a,c,d){d=3Dd?d:(new Date).getTime();this.t[a]=3D[d,c]};this.tick(= "start",f,a)}var m=3Dnew l;window.GA_jstiming=3D{Timer:l,load:m};if(wind= ow.GA_jstiming){window.GA_jstiming.d=3D{};window.GA_jstiming.i=3D1;var n= =3Dfunction(a,b,c){var d=3Da.t[b],e=3Da.t.start;if(d&&(e||c))return d=3D= a.t[b][0],e=3Dvoid 0!=3Dc?c:e[0],d-e};window.GA_jstiming.report=3Dfuncti= on(a,b,c){var d=3D"";a.h&&(d+=3D"&"+a.h);var e=3Da.t,j=3De.start,s=3D[],= o=3D[],h;for(h in e)if("start"!=3Dh&&0!=3Dh.indexOf("_")){var g=3De[h][1= ];g?e[g]&&o.push(h+"."+n(a,h,e[g][0])):j&&s.push(h+"."+n(a,h))}delete e.= start;if(b)for(var i in b)d+=3D"&"+i+"=3D"+b[i];var a=3D[c?c:"http://csi= .gstatic.com/csi","?v=3D3","&s=3D"+(window.GA_jstiming.sn|| "gam")+"&action=3D",a.name,o.length?"&it=3D"+o.join(","):"","",d,"&rt=3D= ",s.join(",")].join(""),b=3Dnew Image,p=3Dwindow.GA_jstiming.i++;window.= GA_jstiming.d[p]=3Db;b.onload=3Db.onerror=3Dfunction(){delete window.GA_= jstiming.d[p]};b.src=3Da;b=3Df;return a}};var q=3Dthis,r=3Dfunction(a,b)= {var c,d=3Db,e=3Da.split(".");c=3Dc||q;!(e[0]in c)&&c.execScript&&c.exec= Script("var "+e[0]);for(var j;e.length&&(j=3De.shift());)!e.length&&void= 0!=3D=3Dd?c[j]=3Dd:c=3Dc[j]?c[j]:c[j]=3D{}},u=3Dfunction(a){var b=3Dt;f= unction c(){}c.prototype=3Db.prototype;a.k=3Db.prototype;a.prototype=3Dn= ew c};var v=3D/^([\w-]+\.)*([\w-]{2,})(\:[0-9]+)?$/,w=3Dfunction(a,b){if= (!a)return b;var c=3Da.match(v);return c?c[0]:b};var x,y=3D"false",z=3Dk= ,A=3Dx=3D"true"=3D=3Dy?!0:"false"=3D=3Dy?k:z;var B=3Dfunction(){return w= ("","pubads.g.doubleclick.net")};var D=3Dfunction(a){for(var b=3DC,c=3D0= ,b=3D(""+b).replace(/^[\s\xa0]+|[\s\xa0]+$/g,"").split("."),a=3D(""+a).r= eplace(/^[\s\xa0]+|[\s\xa0]+$/g,"").split("."),d=3DMath.max(b.length,a.l= ength),e=3D0;0=3D=3Dc&&ep?1:0)||((0=3D=3Dg[2].leng= th)<(0=3D=3Di[2].length)? -1:(0=3D=3Dg[2].length)>(0=3D=3Di[2].length)?1:0)||(g[2]i[= 2]?1:0)}while(0=3D=3Dc)}return c};var E,F,G,H,I=3Dfunction(){return q.na= vigator?q.navigator.userAgent:f};H=3DG=3DF=3DE=3Dk;var J;if(J=3DI()){var= aa=3Dq.navigator;E=3D0=3D=3DJ.indexOf("Opera");F=3D!E&&-1!=3DJ.indexOf(= "MSIE");G=3D!E&&-1!=3DJ.indexOf("WebKit");H=3D!E&&!G&&"Gecko"=3D=3Daa.pr= oduct}var ba=3DE,K=3DF,L=3DH,ca=3DG,M; a:{var N=3D"",O;if(ba&&q.opera)var P=3Dq.opera.version,N=3D"function"=3D= =3Dtypeof P?P():P;else if(L?O=3D/rv\:([^\);]+)(\)|;)/:K?O=3D/MSIE\s+([^\= );]+)(\)|;)/:ca&&(O=3D/WebKit\/(\S+)/),O)var Q=3DO.exec(I()),N=3DQ?Q[1]:= "";if(K){var R,S=3Dq.document;R=3DS?S.documentMode:void 0;if(R>parseFloa= t(N)){M=3D""+R;break a}}M=3DN}var C=3DM,T=3D{},U=3D{},V=3Dfunction(){var= a=3D9;return U[a]||(U[a]=3DK&&document.documentMode&&document.documentM= ode>=3Da)};!K||V();if(L||K)if((!K||!V())&&L){var W=3D"1.9.1";T[W]||(T[W]= =3D0<=3DD(W))}K&&(T["9"]||(T["9"]=3D0<=3DD("9")));var da;da||w("","pagea= d2.googlesyndication.com");var ea=3Dfunction(a,b){for(var c in a)Object.= prototype.hasOwnProperty.call(a,c)&&b.call(f,a[c],c,a)};var X=3Dfunction= (a){this.c=3D[];this.b=3D{};for(var b=3D0,c=3Darguments.length;b<\/script>');this.e=3D!0;if(window.GA_jstiming&& window.GA_jstiming.Timer)window.GA_jstiming.load.name=3D"load",window.GA= _jstiming.load.tick("start")}};window.GS_googleServiceIds_||(window.GS_g= oogleServiceIds_=3D{});})() ------------vz8vre3LOsirGgAqCZo2LA Content-Disposition: inline; filename=plusone.js Content-Type: text/javascript; charset=utf-8; name=plusone.js Content-Location: https://apis.google.com/js/plusone.js Content-Transfer-Encoding: 8bit window.___jsl=window.___jsl||{}; window.___jsl.h=window.___jsl.h||'m;\/_\/apps-static\/_\/js\/widget\/__features__\/rt=j\/ver=Qj89meq-rmQ.es.\/sv=1\/am=!itqi7GDL5S6I4GqN1g\/d=1\/'; window.___jsl.l=[]; window.___gpq=[]; window.gapi=window.gapi||{}; window.gapi.plusone=window.gapi.plusone||(function(){ function f(n){return function(){window.___gpq.push(n,arguments)}} return{go:f('go'),render:f('render')}})(); function __bsld(){var p=window.gapi.plusone=window.googleapisv0.plusone;var f;while(f=window.___gpq.shift()){ p[f]&&p[f].apply(p,window.___gpq.shift())} } window['___jsl'] = window['___jsl'] || {};window['___jsl']['uc'] = 'https:\/\/apis.google.com\/js\/plusone.js';window['___jsl']['u'] = 'https:\/\/apis.google.com\/js\/plusone.js';window['___jsl']['f'] = ['plusone-unsupported'];window['___jsl']['ms'] = 'https://plus.google.com';(window['___jsl']['ci'] = (window['___jsl']['ci'] || [])).push({});var gapi=window.gapi||{};gapi.client=window.gapi&&window.gapi.client||{}; window.gapi=window.gapi||{}; (function(){var A=void 0,B=void 0,C="___jsl",U="h",D="l",V="m",E="ms",W="ci",X="cu",Y="c",Z="cm",$="o",n="p",o="q",F="lc",G="Q",s="I",t="il",u="_",v="https://ssl.gstatic.com",aa="/webclient/js",ba="/webclient/jsx/",H="https://apis.google.com",I=".js",ca="gcjs-3p",da=/^(https?:)?\/\/([^/:@]*)(:[0-9]+)?(\/[\w.,:!=/-]*)(\?[^#]*)?(#.*)?$/,J=/^[?#]([^&]*&)*jsh=([^&]*)/,K="d",p="r",ea="f",q="m",L="n",fa="sync",ga="callback",ha="config",ia="_ci",w="nodep",M="gapi.load: ",N=function(a,b){A&&A(a,b);throw M+ a+(b&&" "+b);},O=function(a){B&&B(a);var b=window.console;b&&b.warn(M+a)},ja=function(a,b,c){a=a[U];if(b=b&&J.exec(b)||c&&J.exec(c))try{a=decodeURIComponent(b[2])}catch(e){O("Invalid hint "+b[2])}return a},P=function(a){a.sort();for(var b=0;b<\/script>');else{var c=b,e=document.createElement("script");e.setAttribute("src",c);e.async=!0;c=document.getElementsByTagName("script")[0];c.parentNode.insertBefore(e,c)}},S=function(a,b,c,e,f,d){var g=c.shift(),h;h=g== p?v:g==q?e[E]||H:(h=c.shift())&&h.replace(/\/+$/,"");var j;g==p?(j=c.shift(),j=(j.indexOf(ba)?aa+"/":"")+j):j=c.shift();var i=g==K,k=i&&c.shift()||ca,c=i&&c.shift();if(g==K)d=b,b=j,f=k,a="/"+a.join(":")+(d.length?"!"+d.join(":"):"")+I+"?container="+f+"&c=2&jsload=0",b&&(a+="&r="+b),"d"==c&&(a+="&debug=1");else if(g==p||g==ea)d=b,b=j,a=(b.indexOf("/")?"/":"")+b+"/"+a.join("__")+(d.length?"--"+d.join("__"):"")+I;else if(g==q||g==L)b=j,a=a.join(",").replace(/\./g,"_").replace(/-/g,"_"),a=b.replace("__features__", a),a=f[w]?a.replace("/d=1/","/d=0/"):a,d&&(a.match(/\/$/)||(a+="/"),a+="cb=gapi."+encodeURIComponent(d));else return O("Unknown hint type "+g),"";if(!h)return"";h+=a;a=h;d=e;if(b=e=da.exec(a))if(b=!/\.\.|\/\//.test(e[4]))b:if(b=a,e=e[2],g==p)b=b.substr(0,v.length)==v;else if(g==q)e=d[E]||H,b=b.substr(0,e.length)==e;else{g=d[V];if(e&&g){g=g.split(",");d=0;for(b=g.length;d= 0) { v = v.substring(delimIndex + '://'.length, v.length); } u.name = 'siteurl'; u.value = v; u.type = 'hidden'; f.appendChild(u); }; if (n.appName == 'Microsoft Internet Explorer') { var s = f.parentNode.childNodes; for (var i = 0; i < s.length; i++) { if (s[i].nodeName == 'SCRIPT' && s[i].attributes['src'] && s[i].attributes['src'].nodeValue == unescape('http:\x2F\x2Fwww.google.es\x2Fcoop\x2Fcse\x2Fbrand?form=cse-search-box\x26lang=es')) { su(); break; } } } else { su(); } if (n.platform == 'Win32') { q.style.cssText = 'border: 1px solid #7e9db9; padding: 2px;'; } if (window.history.navigationMode) { window.history.navigationMode = 'compatible'; } var b = function() { if (q.value == '') { q.style.background = '#FFFFFF url(http:\x2F\x2Fwww.google.es\x2Fcse\x2Fintl\x2Fes\x2Fimages\x2Fgoogle_custom_search_watermark.gif) left no-repeat'; } }; var f = function() { q.style.background = '#ffffff'; }; q.onfocus = f; q.onblur = b; if (!/[&?]q=[^&]/.test(l.search)) { b(); } } })(); ------------vz8vre3LOsirGgAqCZo2LA Content-Disposition: inline; filename=show_ads.js Content-Type: text/javascript; charset=UTF-8; name=show_ads.js Content-Location: http://pagead2.googlesyndication.com/pagead/show_ads.js Content-Transfer-Encoding: Quoted-Printable (function(){var g=3D!0,h=3Dnull,j=3D!1,k=3D(new Date).getTime();var m=3D= this,aa=3Dfunction(a,b){var c=3Da.split("."),e=3Dm;!(c[0]in e)&&e.execSc= ript&&e.execScript("var "+c[0]);for(var d;c.length&&(d=3Dc.shift());)!c.= length&&void 0!=3D=3Db?e[d]=3Db:e=3De[d]?e[d]:e[d]=3D{}},ba=3Dfunction(a= ,b,c){return a.call.apply(a.bind,arguments)},ca=3Dfunction(a,b,c){if(!a)= throw Error();if(2/g,ha=3D/\"/g,o=3D{"\x00= ":"\\0","\u0008":"\\b","\u000c":"\\f","\n":"\\n","\r":"\\r","\t":"\\t","= \u000b":"\\x0B",'"':'\\"',"\\":"\\\\"},r=3D{"'":"\\'"},ja=3Dfunction(a){= for(var b=3D0,c=3D(""+ia).replace(/^[\s\xa0]+|[\s\xa0]+$/g,"").split("."= ),a=3D(""+a).replace(/^[\s\xa0]+|[\s\xa0]+$/g,"").split("."),e=3DMath.ma= x(c.length,a.length),d=3D0;0=3D=3Db&&d(0=3D=3Dl[1].length?0:parseInt(l[1],10)= )?1:0)||((0=3D=3Di[2].length)<(0=3D=3Dl[2].length)?-1:(0=3D=3Di[2].lengt= h)>(0=3D=3Dl[2].length)?1:0)||(i[2]l[2]?1:0)}while(0=3D=3D= b)}return b};var ka=3Ddocument,t=3Dwindow;var u=3Dfunction(a){return"tru= e"=3D=3Da?g:"false"=3D=3Da?j:j},la=3D/^([\w-]+\.)*([\w-]{2,})(\:[0-9]+)?= $/,w=3Dfunction(a){return!a?"pagead2.googlesyndication.com":(a=3Da.match= (la))?a[0]:"pagead2.googlesyndication.com"};var x=3DparseFloat("0"),ma=3D= isNaN(x)||1x?0:x;var na=3Du("false"),oa=3Du("false"),pa=3Du("false= "),ra=3Du("false");var sa=3Dfunction(){return w("")};var z,A,B,C,ta=3Dfu= nction(){return m.navigator?m.navigator.userAgent:h};C=3DB=3DA=3Dz=3Dj;v= ar E;if(E=3Dta()){var ua=3Dm.navigator;z=3D0=3D=3DE.indexOf("Opera");A=3D= !z&&-1!=3DE.indexOf("MSIE");B=3D!z&&-1!=3DE.indexOf("WebKit");C=3D!z&&!B= &&"Gecko"=3D=3Dua.product}var F=3DA,G=3DC,va=3DB,H; a:{var I=3D"",J;if(z&&m.opera)var K=3Dm.opera.version,I=3D"function"=3D=3D= typeof K?K():K;else if(G?J=3D/rv\:([^\);]+)(\)|;)/:F?J=3D/MSIE\s+([^\);]= +)(\)|;)/:va&&(J=3D/WebKit\/(\S+)/),J)var wa=3DJ.exec(ta()),I=3Dwa?wa[1]= :"";if(F){var L,xa=3Dm.document;L=3Dxa?xa.documentMode:void 0;if(L>parse= Float(I)){H=3D""+L;break a}}H=3DI}var ia=3DH,M=3D{},ya=3D{},za=3Dfunctio= n(){return ya[9]||(ya[9]=3DF&&document.documentMode&&9<=3Ddocument.docum= entMode)};!F||za();if(G||F)if(!F||!za())G&&(M["1.9.1"]||(M["1.9.1"]=3D0<= =3Dja("1.9.1")));F&&(M["9"]||(M["9"]=3D0<=3Dja("9")));w("");var N=3Dfunc= tion(a){return!!a&&"function"=3D=3Dtypeof a&&!!a.call},Aa=3Dfunction(a,b= ){if(!(2>arguments.length))for(var c=3D1,e=3Darguments.length;cMath.random())a=3D["ht= tp://",sa(),"/pagead/gen_204","?id=3Djserror","&jscb=3D",na?1:0,"&jscd=3D= ",oa?1:0,"&context=3D",O(a),"&msg=3D",O(b),"&file=3D",O(c),"&line=3D",O(= e.toString()),"&url=3D",O(ka.URL.substring(0,512)),"&ref=3D",O(ka.referr= er.substring(0,512))],a.push(["&client=3D",O(t.google_ad_client),"&forma= t=3D",O(t.google_ad_format),"&slotname=3D",O(t.google_ad_slot),"&output=3D= ",O(t.google_ad_output),"&ad_type=3D",O(t.google_ad_type)].join("")),a=3D= a.join(""),t.google_image_requests|| (t.google_image_requests=3D[]),b=3Dt.document.createElement("img"),b.src= =3Da,t.google_image_requests.push(b);return!pa});var Ca=3Dfunction(a){tr= y{var b=3Da.google_test;a.google_test=3D!b;if(a.google_test=3D=3D=3D!b)r= eturn a.google_test=3Db,g}catch(c){}return j},Da=3Dh,Ea=3Dfunction(){if(= !Da){for(var a=3Dwindow;a!=3Da.parent&&Ca(a.parent);)a=3Da.parent;Da=3Da= }return Da};var P,Q=3Dfunction(a){this.c=3D[];this.a=3Da||window;this.b=3D= 0;this.d=3Dh},Fa=3Dfunction(a,b){this.l=3Da;this.i=3Db};Q.prototype.n=3D= function(a,b){0=3D=3Dthis.b&&0=3D=3Dthis.c.length&&(!b||b=3D=3Dwindow)?(= this.b=3D2,this.g(new Fa(a,window))):this.h(a,b)};Q.prototype.h=3Dfuncti= on(a,b){this.c.push(new Fa(a,b||this.a));Ga(this)};Q.prototype.o=3Dfunct= ion(a){this.b=3D1;if(a)this.d=3Dthis.a.setTimeout(n(this.f,this),a)};Q.p= rototype.f=3Dfunction(){if(1=3D=3Dthis.b){if(this.d!=3Dh)this.a.clearTim= eout(this.d),this.d=3Dh;this.b=3D0}Ga(this)}; Q.prototype.p=3Dfunction(){return g};Q.prototype.nq=3DQ.prototype.n;Q.pr= ototype.nqa=3DQ.prototype.h;Q.prototype.al=3DQ.prototype.o;Q.prototype.r= l=3DQ.prototype.f;Q.prototype.sz=3DQ.prototype.p;var Ga=3Dfunction(a){a.= a.setTimeout(n(a.m,a),0)};Q.prototype.m=3Dfunction(){if(0=3D=3Dthis.b&&t= his.c.length){var a=3Dthis.c.shift();this.b=3D2;a.i.setTimeout(n(this.g,= this,a),0);Ga(this)}};Q.prototype.g=3Dfunction(a){this.b=3D0;a.l()}; var Ha=3Dfunction(a){try{return a.sz()}catch(b){return j}},Ja=3Dfunction= (a){return!!a&&("object"=3D=3Dtypeof a||"function"=3D=3Dtypeof a)&&Ha(a)= &&N(a.nq)&&N(a.nqa)&&N(a.al)&&N(a.rl)},Ka=3Dfunction(){if(P&&Ha(P))retur= n P;var a=3DEa(),b=3Da.google_jobrunner;return Ja(b)?P=3Db:a.google_jobr= unner=3DP=3Dnew Q(a)},La=3Dfunction(a,b){Ka().nq(a,b)},Ma=3Dfunction(a,b= ){Ka().nqa(a,b)};var Na=3D/MSIE [2-7]|PlayStation|Gecko\/20090226/i,Oa=3D= /Android|Opera/,Pa=3Dfunction(){var a=3DS,b=3DT.google_ad_width,c=3DT.go= ogle_ad_height,e=3D["");b=3D"border:none;height:"+c+"px;margin:0;padding:0;position= :relative;visibility:visible;width:"+b+"px";return['',e.join(" "),""].join("")};var Qa=3Dfunction(){}= ,Sa=3Dfunction(a,b,c){switch(typeof b){case "string":Ra(b,c);break;case = "number":c.push(isFinite(b)&&!isNaN(b)?b:"null");break;case "boolean":c.= push(b);break;case "undefined":c.push("null");break;case "object":if(b=3D= =3Dh){c.push("null");break}if(b instanceof Array){var e=3Db.length;c.pus= h("[");for(var d=3D"",f=3D0;fb?d+= =3D"000":256>b?d+=3D"00":4096>b&&(d+=3D"0");return Ta[a]=3Dd+b.toString(= 16)}));b.push('"')};var U=3D"google_ad_block,google_ad_channel,google_ad= _client,google_ad_format,google_ad_height,google_ad_host,google_ad_host_= channel,google_ad_host_tier_id,google_ad_output,google_ad_override,googl= e_ad_region,google_ad_section,google_ad_slot,google_ad_type,google_ad_wi= dth,google_adtest,google_allow_expandable_ads,google_alternate_ad_url,go= ogle_alternate_color,google_analytics_domain_name,google_analytics_uacct= ,google_bid,google_city,google_color_bg,google_color_border,google_color= _line,google_color_link,google_color_text,google_color_url,google_contai= ner_id,google_contents,google_country,google_cpm,google_ctr_threshold,go= ogle_cust_age,google_cust_ch,google_cust_gender,google_cust_id,google_cu= st_interests,google_cust_job,google_cust_l,google_cust_lh,google_cust_u_= url,google_disable_video_autoplay,google_ed,google_eids,google_enable_os= e,google_encoding,google_font_face,google_font_size,google_frame_id,goog= le_gl,google_hints,google_image_size,google_kw,google_kw_type,google_lan= guage,google_max_num_ads,google_max_radlink_len,google_num_radlinks,goog= le_num_radlinks_per_unit,google_num_slots_to_rotate,google_only_ads_with= _video,google_only_pyv_ads,google_only_userchoice_ads,google_override_fo= rmat,google_page_url,google_previous_watch,google_previous_searches,goog= le_referrer_url,google_region,google_reuse_colors,google_rl_dest_url,goo= gle_rl_filtering,google_rl_mode,google_rt,google_safe,google_scs,google_= skip,google_tag_info,google_targeting,google_tfs,google_tl,google_ui_fea= tures,google_ui_version,google_video_doc_id,google_video_product_type,go= ogle_with_pyv_ads".split(",");var V=3Dfunction(a){this.a=3Da;a.google_if= rame_oncopy||(a.google_iframe_oncopy=3D{handlers:{},log:[],img:0.01>Math= .random()?[]:h});this.e=3Da.google_iframe_oncopy;a.setTimeout(n(this.k,t= his),3E4)},Va;var W=3D"var i=3Dthis.id,s=3Dwindow.google_iframe_oncopy,H= =3Ds&&s.handlers,h=3DH&&H[i],w=3Dthis.contentWindow,d;try{d=3Dw.document= }catch(e){}if(h&&d&&(!d.body||!d.body.firstChild)){if(h.call){i+=3D'.cal= l';setTimeout(h,0)}else if(h.match){i+=3D'.nav';w.location.replace(h)}s.= log&&s.log.push(i)}"; /[&<>\"]/.test(W)&&(-1!=3DW.indexOf("&")&&(W=3DW.replace(da,"&")),-1= !=3DW.indexOf("<")&&(W=3DW.replace(ea,"<")),-1!=3DW.indexOf(">")&&(W=3D= W.replace(ga,">")),-1!=3DW.indexOf('"')&&(W=3DW.replace(ha,"""))= );Va=3DW;V.prototype.set=3Dfunction(a,b){this.e.handlers[a]=3Db;this.a.a= ddEventListener&&this.a.addEventListener("load",n(this.j,this,a),j)};V.p= rototype.j=3Dfunction(a){var a=3Dthis.a.document.getElementById(a),b=3Da= .contentWindow.document;if(a.onload&&b&&(!b.body||!b.body.firstChild))a.= onload()}; V.prototype.k=3Dfunction(){if(this.e.img){var a=3Dthis.e.log,b=3Dthis.a.= document;if(a.length)b=3D["http://",sa(),"/pagead/gen_204?id=3Diframecop= y&log=3D",O(a.join("-")),"&url=3D",O(b.URL.substring(0,512)),"&ref=3D",O= (b.referrer.substring(0,512))].join(""),a.length=3D0,a=3Dnew Image,this.= e.img.push(a),a.src=3Db}};var Wa=3Dfunction(){var a=3D"script",b=3Dw("")= ,c=3D"",c=3Dra?"https":"http";return["<",a,' src=3D"',[c,"://",b,"/pagea= d/js/r20111207/r20110914/show_ads_impl.js"].join(""),'">"].join(= "")},Xa=3Dfunction(a,b,c,e){return function(){var d=3Dj;e&&Ka().al(3E4);= try{var f;try{f=3D!!a.document.getElementById(b).contentWindow.document}= catch(qa){f=3Dj}if(f){var v=3D a.document.getElementById(b).contentWindow,p=3Dv.document;if(!p.body||!p= .body.firstChild)p.open(),v.google_async_iframe_close=3Dg,p.write(c)}els= e{var i=3Da.document.getElementById(b).contentWindow,l;f=3Dc;f=3D""+f;if= (f.quote)l=3Df.quote();else{v=3D['"'];for(p=3D0;pIa)D=3DR;else{var s=3DR;if(s in r)D=3Dr[s];else if(s in= o)D=3Dr[s]=3Do[s];else{var q=3Ds,y=3Ds.charCodeAt(0);if(31y)q=3D= s;else{if(256>y){if(q=3D"\\x",16>y||256< y)q+=3D"0"}else q=3D"\\u",4096>y&&(q+=3D"0");q+=3Dy.toString(16).toUpper= Case()}D=3Dr[s]=3Dq}}fa=3DD}ob[pb]=3Dfa}v.push('"');l=3Dv.join("")}i.loc= ation.replace("javascript:"+l)}d=3Dg}catch(wb){i=3DEa().google_jobrunner= ,Ja(i)&&i.rl()}d&&(new V(a)).set(b,Xa(a,b,c,j))}};window.google_loader_u= sed=3Dg;(function(a){if(!("google_onload_fired"in a))a.google_onload_fir= ed=3Dj,Ba(a,function(){a.google_onload_fired=3Dg})})(window);if(!window.= google_loader_experiment){var Ya;a:{var Za=3D["async_bad_black","block_b= ad_black"];if(!(1.0E-4>Math.random())){var $a=3DMath.random();if($a<",_script$$inline_107,">",jb,"google_= show_ads_impl=3Dtrue;google_unique_id=3D",Y.google_unique_id,';google_as= ync_iframe_id=3D"',Z,'";google_start_time=3D',k,";",xb?'google_loader_ex= periment=3D"'+xb+'";':"","google_bpp=3D",vb>k?vb-k:1,";",Wa(),""].join("");(Y.document.getElementById(Z)= ?La:Ma)(Xa(Y,Z,yb,g))}else window.q=3Dk,document.write(Wa());})(); ------------vz8vre3LOsirGgAqCZo2LA Content-Disposition: inline; filename=rico.jpg Content-Type: image/jpeg; name=rico.jpg Content-Location: http://www.definicionabc.com/wp-content/uploads/rico.jpg Content-Transfer-Encoding: Base64 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 L/8Ao/1P/tVfMLt/8AP/2Q== ------------vz8vre3LOsirGgAqCZo2LA Content-Disposition: inline; filename=widgets.js Content-Type: application/javascript; name=widgets.js Content-Location: http://platform.twitter.com/widgets.js Content-Transfer-Encoding: Base64 KGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gcyhhKXtmb3IodmFyIGI9MSxjO2M9YXJn dW1lbnRzW2JdO2IrKylmb3IodmFyIGQgaW4gYylhW2RdPWNbZF07cmV0dXJuIGF9 ZnVuY3Rpb24gdChhKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwo YSl9ZnVuY3Rpb24gdihhLGIpe2Zvcih2YXIgYz0wLGQ7ZD1hW2NdO2MrKylpZihi PT1kKXJldHVybiBjO3JldHVybi0xfWZ1bmN0aW9uIHcoKXt2YXIgYT10KGFyZ3Vt ZW50cyksYj1bXTtmb3IodmFyIGM9MCxkPWEubGVuZ3RoO2M8ZDtjKyspYVtjXS5s ZW5ndGg+MCYmYi5wdXNoKGFbY10ucmVwbGFjZSgvXC8kLywiIikpO3JldHVybiBi LmpvaW4oIi8iKX1mdW5jdGlvbiB4KGEsYixjKXt2YXIgZD1iLnNwbGl0KCIvIiks ZT1hO3doaWxlKGQubGVuZ3RoPjEpe3ZhciBmPWQuc2hpZnQoKTtlPWVbZl09ZVtm XXx8e319ZVtkWzBdXT1jfWZ1bmN0aW9uIHkoKXt9ZnVuY3Rpb24geihhLGIpe3Ro aXMuaWQ9dGhpcy5wYXRoPWEsdGhpcy5mb3JjZT0hIWJ9ZnVuY3Rpb24gQShhLGIp e3RoaXMuaWQ9YSx0aGlzLmJvZHk9Yix0eXBlb2YgYj09InVuZGVmaW5lZCImJih0 aGlzLnBhdGg9dGhpcy5yZXNvbHZlUGF0aChhKSl9ZnVuY3Rpb24gQihhLGIpe3Ro aXMuZGVwcz1hLHRoaXMuY29sbGVjdFJlc3VsdHM9Yix0aGlzLmRlcHMubGVuZ3Ro PT0wJiZ0aGlzLmNvbXBsZXRlKCl9ZnVuY3Rpb24gQyhhLGIpe3RoaXMuZGVwcz1h LHRoaXMuY29sbGVjdFJlc3VsdHM9Yn1mdW5jdGlvbiBEKCl7Zm9yKHZhciBhIGlu IGQpaWYoZFthXS5yZWFkeVN0YXRlPT0iaW50ZXJhY3RpdmUiKXJldHVybiBsW2Rb YV0uaWRdfWZ1bmN0aW9uIEUoYSxiKXt2YXIgZDtyZXR1cm4hYSYmYyYmKGQ9a3x8 RCgpKSxkPyhkZWxldGUgbFtkLnNjcmlwdElkXSxkLmJvZHk9YixkLmV4ZWN1dGUo KSk6KGo9ZD1uZXcgQShhLGIpLGlbZC5pZF09ZCksZH1mdW5jdGlvbiBGKCl7dmFy IGE9dChhcmd1bWVudHMpLGIsYztyZXR1cm4gdHlwZW9mIGFbMF09PSJzdHJpbmci JiYoYj1hLnNoaWZ0KCkpLGM9YS5zaGlmdCgpLEUoYixjKX1mdW5jdGlvbiBHKGEs Yil7dmFyIGM9Yi5pZHx8IiIsZD1jLnNwbGl0KCIvIik7ZC5wb3AoKTt2YXIgZT1k LmpvaW4oIi8iKTtyZXR1cm4gYS5yZXBsYWNlKC9eXC4vLGUpfWZ1bmN0aW9uIEgo YSxiKXtmdW5jdGlvbiBkKGEpe3JldHVybiBBLmV4cG9ydHNbRyhhLGIpXX12YXIg Yz1bXTtmb3IodmFyIGU9MCxmPWEubGVuZ3RoO2U8ZjtlKyspe2lmKGFbZV09PSJy ZXF1aXJlIil7Yy5wdXNoKGQpO2NvbnRpbnVlfWlmKGFbZV09PSJleHBvcnRzIil7 Yi5leHBvcnRzPWIuZXhwb3J0c3x8e30sYy5wdXNoKGIuZXhwb3J0cyk7Y29udGlu dWV9Yy5wdXNoKGQoYVtlXSkpfXJldHVybiBjfWZ1bmN0aW9uIEkoKXt2YXIgYT10 KGFyZ3VtZW50cyksYj1bXSxjLGQ7cmV0dXJuIHR5cGVvZiBhWzBdPT0ic3RyaW5n IiYmKGM9YS5zaGlmdCgpKSx1KGFbMF0pJiYoYj1hLnNoaWZ0KCkpLGQ9YS5zaGlm dCgpLEUoYyxmdW5jdGlvbihhKXtmdW5jdGlvbiBmKCl7dmFyIGU9SCh0KGIpLGMp LGY7dHlwZW9mIGQ9PSJmdW5jdGlvbiI/Zj1kLmFwcGx5KGMsZSk6Zj1kLHR5cGVv ZiBmPT0idW5kZWZpbmVkIiYmKGY9Yy5leHBvcnRzKSxhKGYpfXZhciBjPXRoaXMs ZT1bXTtmb3IodmFyIGc9MCxoPWIubGVuZ3RoO2c8aDtnKyspe3ZhciBpPWJbZ107 dihbInJlcXVpcmUiLCJleHBvcnRzIl0saSk9PS0xJiZlLnB1c2goRyhpLGMpKX1l Lmxlbmd0aD4wP0ouYXBwbHkodGhpcyxlLmNvbmNhdChmKSk6ZigpfSl9ZnVuY3Rp b24gSigpe3ZhciBhPXQoYXJndW1lbnRzKSxiLGM7dHlwZW9mIGFbYS5sZW5ndGgt MV09PSJmdW5jdGlvbiImJihiPWEucG9wKCkpLHR5cGVvZiBhW2EubGVuZ3RoLTFd PT0iYm9vbGVhbiImJihjPWEucG9wKCkpO3ZhciBkPW5ldyBCKEsoYSxjKSxjKTty ZXR1cm4gYiYmZC50aGVuKGIpLGR9ZnVuY3Rpb24gSyhhLGIpe3ZhciBjPVtdO2Zv cih2YXIgZD0wLGU7ZT1hW2RdO2QrKyl0eXBlb2YgZT09InN0cmluZyImJihlPUwo ZSkpLHUoZSkmJihlPW5ldyBDKEsoZSxiKSxiKSksYy5wdXNoKGUpO3JldHVybiBj fWZ1bmN0aW9uIEwoYSl7dmFyIGIsYztmb3IodmFyIGQ9MCxlO2U9Si5tYXRjaGVy c1tkXTtkKyspe3ZhciBmPWVbMF0sZz1lWzFdO2lmKGI9YS5tYXRjaChmKSlyZXR1 cm4gZyhhKX10aHJvdyBuZXcgRXJyb3IoYSsiIHdhcyBub3QgcmVjb2duaXNlZCBi eSBsb2FkZXIiKX1mdW5jdGlvbiBOKCl7cmV0dXJuIGEudXNpbmc9bSxhLnByb3Zp ZGU9bixhLmRlZmluZT1vLGEubG9hZHJ1bm5lcj1wLE19ZnVuY3Rpb24gTyhhKXtm b3IodmFyIGI9MDtiPEouYnVuZGxlcy5sZW5ndGg7YisrKWZvcih2YXIgYyBpbiBK LmJ1bmRsZXNbYl0paWYoYyE9YSYmdihKLmJ1bmRsZXNbYl1bY10sYSk+LTEpcmV0 dXJuIGN9dmFyIGM9YS5hdHRhY2hFdmVudCYmIWEub3BlcmEsZD1iLmdldEVsZW1l bnRzQnlUYWdOYW1lKCJzY3JpcHQiKSxlPTAsZixnPWIuY3JlYXRlRWxlbWVudCgi c2NyaXB0IiksaD17fSxpPXt9LGosayxsPXt9LG09YS51c2luZyxuPWEucHJvdmlk ZSxvPWEuZGVmaW5lLHA9YS5sb2FkcnVubmVyO2Zvcih2YXIgcT0wLHI7cj1kW3Fd O3ErKylpZihyLnNyYy5tYXRjaCgvbG9hZHJ1bm5lclwuanMoXD98I3wkKS8pKXtm PXI7YnJlYWt9dmFyIHU9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oYSl7cmV0dXJu IGEuY29uc3RydWN0b3I9PUFycmF5fTt5LnByb3RvdHlwZS50aGVuPWZ1bmN0aW9u KGIpe3ZhciBjPXRoaXM7cmV0dXJuIHRoaXMuc3RhcnRlZHx8KHRoaXMuc3RhcnRl ZD0hMCx0aGlzLnN0YXJ0KCkpLHRoaXMuY29tcGxldGVkP2IuYXBwbHkoYSx0aGlz LnJlc3VsdHMpOih0aGlzLmNhbGxiYWNrcz10aGlzLmNhbGxiYWNrc3x8W10sdGhp cy5jYWxsYmFja3MucHVzaChiKSksdGhpc30seS5wcm90b3R5cGUuc3RhcnQ9ZnVu Y3Rpb24oKXt9LHkucHJvdG90eXBlLmNvbXBsZXRlPWZ1bmN0aW9uKCl7aWYoIXRo aXMuY29tcGxldGVkKXt0aGlzLnJlc3VsdHM9dChhcmd1bWVudHMpLHRoaXMuY29t cGxldGVkPSEwO2lmKHRoaXMuY2FsbGJhY2tzKWZvcih2YXIgYj0wLGM7Yz10aGlz LmNhbGxiYWNrc1tiXTtiKyspYy5hcHBseShhLHRoaXMucmVzdWx0cyl9fSx6Lmxv YWRlZD1bXSx6LnByb3RvdHlwZT1uZXcgeSx6LnByb3RvdHlwZS5zdGFydD1mdW5j dGlvbigpe3ZhciBhPXRoaXMsYixjLGQ7cmV0dXJuKGQ9aVt0aGlzLmlkXSk/KGQu dGhlbihmdW5jdGlvbigpe2EuY29tcGxldGUoKX0pLHRoaXMpOigoYj1oW3RoaXMu aWRdKT9iLnRoZW4oZnVuY3Rpb24oKXthLmxvYWRlZCgpfSk6IXRoaXMuZm9yY2Um JnYoei5sb2FkZWQsdGhpcy5pZCk+LTE/dGhpcy5sb2FkZWQoKTooYz1PKHRoaXMu aWQpKT9KKGMsZnVuY3Rpb24oKXthLmxvYWRlZCgpfSk6dGhpcy5sb2FkKCksdGhp cyl9LHoucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24oKXt2YXIgYj10aGlzO2hbdGhp cy5pZF09Yjt2YXIgYz1nLmNsb25lTm9kZSghMSk7dGhpcy5zY3JpcHRJZD1jLmlk PSJMUiIrICsrZSxjLnR5cGU9InRleHQvamF2YXNjcmlwdCIsYy5hc3luYz0hMCxj Lm9uZXJyb3I9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoYi5wYXRoKyIgbm90 IGxvYWRlZCIpfSxjLm9ucmVhZHlzdGF0ZWNoYW5nZT1jLm9ubG9hZD1mdW5jdGlv bihjKXtjPWEuZXZlbnR8fGM7aWYoYy50eXBlPT0ibG9hZCJ8fHYoWyJsb2FkZWQi LCJjb21wbGV0ZSJdLHRoaXMucmVhZHlTdGF0ZSk+LTEpdGhpcy5vbnJlYWR5c3Rh dGVjaGFuZ2U9bnVsbCxiLmxvYWRlZCgpfSxjLnNyYz10aGlzLnBhdGgsaz10aGlz LGRbMF0ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYyxkWzBdKSxrPW51bGwsbFtj LmlkXT10aGlzfSx6LnByb3RvdHlwZS5sb2FkZWQ9ZnVuY3Rpb24oKXt0aGlzLmNv bXBsZXRlKCl9LHoucHJvdG90eXBlLmNvbXBsZXRlPWZ1bmN0aW9uKCl7dih6Lmxv YWRlZCx0aGlzLmlkKT09LTEmJnoubG9hZGVkLnB1c2godGhpcy5pZCksZGVsZXRl IGhbdGhpcy5pZF0seS5wcm90b3R5cGUuY29tcGxldGUuYXBwbHkodGhpcyxhcmd1 bWVudHMpfSxBLmV4cG9ydHM9e30sQS5wcm90b3R5cGU9bmV3IHosQS5wcm90b3R5 cGUucmVzb2x2ZVBhdGg9ZnVuY3Rpb24oYSl7cmV0dXJuIHcoSi5wYXRoLGErIi5q cyIpfSxBLnByb3RvdHlwZS5zdGFydD1mdW5jdGlvbigpe3ZhciBhLGIsYz10aGlz LGQ7dGhpcy5ib2R5P3RoaXMuZXhlY3V0ZSgpOihhPUEuZXhwb3J0c1t0aGlzLmlk XSk/dGhpcy5leHAoYSk6KGI9aVt0aGlzLmlkXSk/Yi50aGVuKGZ1bmN0aW9uKGEp e2MuZXhwKGEpfSk6KGJ1bmRsZT1PKHRoaXMuaWQpKT9KKGJ1bmRsZSxmdW5jdGlv bigpe2Muc3RhcnQoKX0pOihpW3RoaXMuaWRdPXRoaXMsdGhpcy5sb2FkKCkpfSxB LnByb3RvdHlwZS5sb2FkZWQ9ZnVuY3Rpb24oKXt2YXIgYSxiLGQ9dGhpcztjPyhi PUEuZXhwb3J0c1t0aGlzLmlkXSk/dGhpcy5leHAoYik6KGE9aVt0aGlzLmlkXSkm JmEudGhlbihmdW5jdGlvbihhKXtkLmV4cChhKX0pOihhPWosaj1udWxsLGEuaWQ9 YS5pZHx8dGhpcy5pZCxhLnRoZW4oZnVuY3Rpb24oYSl7ZC5leHAoYSl9KSl9LEEu cHJvdG90eXBlLmNvbXBsZXRlPWZ1bmN0aW9uKCl7ZGVsZXRlIGlbdGhpcy5pZF0s ei5wcm90b3R5cGUuY29tcGxldGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxBLnBy b3RvdHlwZS5leGVjdXRlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpczt0eXBlb2YgdGhp cy5ib2R5PT0ib2JqZWN0Ij90aGlzLmV4cCh0aGlzLmJvZHkpOnR5cGVvZiB0aGlz LmJvZHk9PSJmdW5jdGlvbiImJnRoaXMuYm9keS5hcHBseSh3aW5kb3csW2Z1bmN0 aW9uKGIpe2EuZXhwKGIpfV0pfSxBLnByb3RvdHlwZS5leHA9ZnVuY3Rpb24oYSl7 dGhpcy5jb21wbGV0ZSh0aGlzLmV4cG9ydHM9QS5leHBvcnRzW3RoaXMuaWRdPWF8 fHt9KX0sQi5wcm90b3R5cGU9bmV3IHksQi5wcm90b3R5cGUuc3RhcnQ9ZnVuY3Rp b24oKXtmdW5jdGlvbiBiKCl7dmFyIGI9W107YS5jb2xsZWN0UmVzdWx0cyYmKGJb MF09e30pO2Zvcih2YXIgYz0wLGQ7ZD1hLmRlcHNbY107YysrKXtpZighZC5jb21w bGV0ZWQpcmV0dXJuO2QucmVzdWx0cy5sZW5ndGg+MCYmKGEuY29sbGVjdFJlc3Vs dHM/ZCBpbnN0YW5jZW9mIEM/cyhiWzBdLGQucmVzdWx0c1swXSk6eChiWzBdLGQu aWQsZC5yZXN1bHRzWzBdKTpiPWIuY29uY2F0KGQucmVzdWx0cykpfWEuY29tcGxl dGUuYXBwbHkoYSxiKX12YXIgYT10aGlzO2Zvcih2YXIgYz0wLGQ7ZD10aGlzLmRl cHNbY107YysrKWQudGhlbihiKTtyZXR1cm4gdGhpc30sQy5wcm90b3R5cGU9bmV3 IHksQy5wcm90b3R5cGUuc3RhcnQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLGI9MCxj PVtdO3JldHVybiBhLmNvbGxlY3RSZXN1bHRzJiYoY1swXT17fSksZnVuY3Rpb24g ZCgpe3ZhciBlPWEuZGVwc1tiKytdO2U/ZS50aGVuKGZ1bmN0aW9uKGIpe2UucmVz dWx0cy5sZW5ndGg+MCYmKGEuY29sbGVjdFJlc3VsdHM/ZSBpbnN0YW5jZW9mIEM/ cyhjWzBdLGUucmVzdWx0c1swXSk6eChjWzBdLGUuaWQsZS5yZXN1bHRzWzBdKTpj LnB1c2goZS5yZXN1bHRzWzBdKSksZCgpfSk6YS5jb21wbGV0ZS5hcHBseShhLGMp fSgpLHRoaXN9LEkuYW1kPXt9O3ZhciBNPWZ1bmN0aW9uKGEpe3JldHVybiBhKEos RixNLGRlZmluZSl9O00uU2NyaXB0PXosTS5Nb2R1bGU9QSxNLkNvbGxlY3Rpb249 QixNLlNlcXVlbmNlPUMsTS5EZXBlbmRlbmN5PXksTS5ub0NvbmZsaWN0PU4sYS5s b2FkcnVubmVyPU0sYS51c2luZz1KLGEucHJvdmlkZT1GLGEuZGVmaW5lPUksSi5w YXRoPSIiLEoubWF0Y2hlcnM9W10sSi5tYXRjaGVycy5hZGQ9ZnVuY3Rpb24oYSxi KXt0aGlzLnVuc2hpZnQoW2EsYl0pfSxKLm1hdGNoZXJzLmFkZCgvKF5zY3JpcHQh fFwuanMkKS8sZnVuY3Rpb24oYSl7dmFyIGI9bmV3IHooYS5yZXBsYWNlKC9eXCQv LEoucGF0aC5yZXBsYWNlKC9cLyQvLCIiKSsiLyIpLnJlcGxhY2UoL15zY3JpcHQh LywiIiksITEpO3JldHVybiBiLmlkPWEsYn0pLEoubWF0Y2hlcnMuYWRkKC9eW2Et ekEtWjAtOV9cLVwvXSskLyxmdW5jdGlvbihhKXtyZXR1cm4gbmV3IEEoYSl9KSxK LmJ1bmRsZXM9W10sZiYmKEoucGF0aD1mLmdldEF0dHJpYnV0ZSgiZGF0YS1wYXRo Iil8fGYuc3JjLnNwbGl0KC9sb2FkcnVubmVyXC5qcy8pWzBdfHwiIiwobWFpbj1m LmdldEF0dHJpYnV0ZSgiZGF0YS1tYWluIikpJiZKLmFwcGx5KGEsbWFpbi5zcGxp dCgvXHMqLFxzKi8pKS50aGVuKGZ1bmN0aW9uKCl7fSkpfSkodGhpcyxkb2N1bWVu dCk7d2luZG93Ll9fdHd0dHJsciA9IGxvYWRydW5uZXIubm9Db25mbGljdCgpO19f dHd0dHJscihmdW5jdGlvbih1c2luZywgcHJvdmlkZSwgbG9hZHJ1bm5lciwgZGVm aW5lKSB7cHJvdmlkZSgiJHhkL2pzb24yLmpzIiwgZnVuY3Rpb24oZXhwb3J0cykg e3dpbmRvdy5KU09OfHwod2luZG93LkpTT049e30pLGZ1bmN0aW9uKCl7ZnVuY3Rp b24gZihhKXtyZXR1cm4gYTwxMD8iMCIrYTphfWZ1bmN0aW9uIHF1b3RlKGEpe3Jl dHVybiBlc2NhcGFibGUubGFzdEluZGV4PTAsZXNjYXBhYmxlLnRlc3QoYSk/JyIn K2EucmVwbGFjZShlc2NhcGFibGUsZnVuY3Rpb24oYSl7dmFyIGI9bWV0YVthXTty ZXR1cm4gdHlwZW9mIGI9PSJzdHJpbmciP2I6IlxcdSIrKCIwMDAwIithLmNoYXJD b2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNCl9KSsnIic6JyInK2ErJyIn fWZ1bmN0aW9uIHN0cihhLGIpe3ZhciBjLGQsZSxmLGc9Z2FwLGgsaT1iW2FdO2km JnR5cGVvZiBpPT0ib2JqZWN0IiYmdHlwZW9mIGkudG9KU09OPT0iZnVuY3Rpb24i JiYoaT1pLnRvSlNPTihhKSksdHlwZW9mIHJlcD09ImZ1bmN0aW9uIiYmKGk9cmVw LmNhbGwoYixhLGkpKTtzd2l0Y2godHlwZW9mIGkpe2Nhc2Uic3RyaW5nIjpyZXR1 cm4gcXVvdGUoaSk7Y2FzZSJudW1iZXIiOnJldHVybiBpc0Zpbml0ZShpKT9TdHJp bmcoaSk6Im51bGwiO2Nhc2UiYm9vbGVhbiI6Y2FzZSJudWxsIjpyZXR1cm4gU3Ry aW5nKGkpO2Nhc2Uib2JqZWN0IjppZighaSlyZXR1cm4ibnVsbCI7Z2FwKz1pbmRl bnQsaD1bXTtpZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KGkpPT09 IltvYmplY3QgQXJyYXldIil7Zj1pLmxlbmd0aDtmb3IoYz0wO2M8ZjtjKz0xKWhb Y109c3RyKGMsaSl8fCJudWxsIjtyZXR1cm4gZT1oLmxlbmd0aD09PTA/IltdIjpn YXA/IltcbiIrZ2FwK2guam9pbigiLFxuIitnYXApKyJcbiIrZysiXSI6IlsiK2gu am9pbigiLCIpKyJdIixnYXA9ZyxlfWlmKHJlcCYmdHlwZW9mIHJlcD09Im9iamVj dCIpe2Y9cmVwLmxlbmd0aDtmb3IoYz0wO2M8ZjtjKz0xKWQ9cmVwW2NdLHR5cGVv ZiBkPT0ic3RyaW5nIiYmKGU9c3RyKGQsaSksZSYmaC5wdXNoKHF1b3RlKGQpKyhn YXA/IjogIjoiOiIpK2UpKX1lbHNlIGZvcihkIGluIGkpT2JqZWN0Lmhhc093blBy b3BlcnR5LmNhbGwoaSxkKSYmKGU9c3RyKGQsaSksZSYmaC5wdXNoKHF1b3RlKGQp KyhnYXA/IjogIjoiOiIpK2UpKTtyZXR1cm4gZT1oLmxlbmd0aD09PTA/Int9Ijpn YXA/IntcbiIrZ2FwK2guam9pbigiLFxuIitnYXApKyJcbiIrZysifSI6InsiK2gu am9pbigiLCIpKyJ9IixnYXA9ZyxlfX10eXBlb2YgRGF0ZS5wcm90b3R5cGUudG9K U09OIT0iZnVuY3Rpb24iJiYoRGF0ZS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9u KGEpe3JldHVybiBpc0Zpbml0ZSh0aGlzLnZhbHVlT2YoKSk/dGhpcy5nZXRVVENG dWxsWWVhcigpKyItIitmKHRoaXMuZ2V0VVRDTW9udGgoKSsxKSsiLSIrZih0aGlz LmdldFVUQ0RhdGUoKSkrIlQiK2YodGhpcy5nZXRVVENIb3VycygpKSsiOiIrZih0 aGlzLmdldFVUQ01pbnV0ZXMoKSkrIjoiK2YodGhpcy5nZXRVVENTZWNvbmRzKCkp KyJaIjpudWxsfSxTdHJpbmcucHJvdG90eXBlLnRvSlNPTj1OdW1iZXIucHJvdG90 eXBlLnRvSlNPTj1Cb29sZWFuLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oYSl7 cmV0dXJuIHRoaXMudmFsdWVPZigpfSk7dmFyIGN4PS9bXHUwMDAwXHUwMGFkXHUw NjAwLVx1MDYwNFx1MDcwZlx1MTdiNFx1MTdiNVx1MjAwYy1cdTIwMGZcdTIwMjgt XHUyMDJmXHUyMDYwLVx1MjA2Zlx1ZmVmZlx1ZmZmMC1cdWZmZmZdL2csZXNjYXBh YmxlPS9bXFxcIlx4MDAtXHgxZlx4N2YtXHg5Zlx1MDBhZFx1MDYwMC1cdTA2MDRc dTA3MGZcdTE3YjRcdTE3YjVcdTIwMGMtXHUyMDBmXHUyMDI4LVx1MjAyZlx1MjA2 MC1cdTIwNmZcdWZlZmZcdWZmZjAtXHVmZmZmXS9nLGdhcCxpbmRlbnQsbWV0YT17 IlxiIjoiXFxiIiwiXHQiOiJcXHQiLCJcbiI6IlxcbiIsIlxmIjoiXFxmIiwiXHIi OiJcXHIiLCciJzonXFwiJywiXFwiOiJcXFxcIn0scmVwO3R5cGVvZiBKU09OLnN0 cmluZ2lmeSE9ImZ1bmN0aW9uIiYmKEpTT04uc3RyaW5naWZ5PWZ1bmN0aW9uKGEs YixjKXt2YXIgZDtnYXA9IiIsaW5kZW50PSIiO2lmKHR5cGVvZiBjPT0ibnVtYmVy Iilmb3IoZD0wO2Q8YztkKz0xKWluZGVudCs9IiAiO2Vsc2UgdHlwZW9mIGM9PSJz dHJpbmciJiYoaW5kZW50PWMpO3JlcD1iO2lmKCFifHx0eXBlb2YgYj09ImZ1bmN0 aW9uInx8dHlwZW9mIGI9PSJvYmplY3QiJiZ0eXBlb2YgYi5sZW5ndGg9PSJudW1i ZXIiKXJldHVybiBzdHIoIiIseyIiOmF9KTt0aHJvdyBuZXcgRXJyb3IoIkpTT04u c3RyaW5naWZ5Iil9KSx0eXBlb2YgSlNPTi5wYXJzZSE9ImZ1bmN0aW9uIiYmKEpT T04ucGFyc2U9ZnVuY3Rpb24odGV4dCxyZXZpdmVyKXtmdW5jdGlvbiB3YWxrKGEs Yil7dmFyIGMsZCxlPWFbYl07aWYoZSYmdHlwZW9mIGU9PSJvYmplY3QiKWZvcihj IGluIGUpT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoZSxjKSYmKGQ9d2Fsayhl LGMpLGQhPT11bmRlZmluZWQ/ZVtjXT1kOmRlbGV0ZSBlW2NdKTtyZXR1cm4gcmV2 aXZlci5jYWxsKGEsYixlKX12YXIgajtjeC5sYXN0SW5kZXg9MCxjeC50ZXN0KHRl eHQpJiYodGV4dD10ZXh0LnJlcGxhY2UoY3gsZnVuY3Rpb24oYSl7cmV0dXJuIlxc dSIrKCIwMDAwIithLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgt NCl9KSk7aWYoL15bXF0sOnt9XHNdKiQvLnRlc3QodGV4dC5yZXBsYWNlKC9cXCg/ OlsiXFxcL2JmbnJ0XXx1WzAtOWEtZkEtRl17NH0pL2csIkAiKS5yZXBsYWNlKC8i W14iXFxcblxyXSoifHRydWV8ZmFsc2V8bnVsbHwtP1xkKyg/OlwuXGQqKT8oPzpb ZUVdWytcLV0/XGQrKT8vZywiXSIpLnJlcGxhY2UoLyg/Ol58OnwsKSg/OlxzKlxb KSsvZywiIikpKXJldHVybiBqPWV2YWwoIigiK3RleHQrIikiKSx0eXBlb2YgcmV2 aXZlcj09ImZ1bmN0aW9uIj93YWxrKHsiIjpqfSwiIik6ajt0aHJvdyBuZXcgU3lu dGF4RXJyb3IoIkpTT04ucGFyc2UiKX0pfSgpO2V4cG9ydHMoKTtsb2FkcnVubmVy LlNjcmlwdC5sb2FkZWQucHVzaCgiJHhkL2pzb24yLmpzIil9KTsKcHJvdmlkZSgi dXRpbC91dGlsIixmdW5jdGlvbihhKXtmdW5jdGlvbiBiKGEpe2Zvcih2YXIgYj0x LGM7Yz1hcmd1bWVudHNbYl07YisrKWZvcih2YXIgZCBpbiBjKWFbZF09Y1tkXTty ZXR1cm4gYX1mdW5jdGlvbiBjKGEpe3JldHVybiBiKFtdLGEpfWZ1bmN0aW9uIGQo YSl7Zm9yKHZhciBiIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShiKSYmIWFbYl0mJmFb Yl0hPT0hMSYmYVtiXSE9PTAmJmRlbGV0ZSBhW2JdfWZ1bmN0aW9uIGUoYSxiKXtm b3IodmFyIGM9MCxkO2Q9YVtjXTtjKyspaWYoYj09ZClyZXR1cm4gYztyZXR1cm4t MX1mdW5jdGlvbiBmKGEsYil7aWYoIWEpcmV0dXJuIG51bGw7dmFyIGM9W107Zm9y KHZhciBkPTAsZT1hLmxlbmd0aDtkPGU7ZCsrKWIoYVtkXSkmJmMucHVzaChhW2Rd KTtyZXR1cm4gY31hKHthdWc6YixhcnJheTpjLGluZGV4T2Y6ZSxmaWx0ZXI6Zixj b21wYWN0OmR9KX0pOwpwcm92aWRlKCJ1dGlsL2V2ZW50cyIsZnVuY3Rpb24oYSl7 dXNpbmcoInV0aWwvdXRpbCIsZnVuY3Rpb24oYil7ZnVuY3Rpb24gZCgpe3RoaXMu Y29tcGxldGVkPSExLHRoaXMuY2FsbGJhY2tzPVtdfXZhciBjPXtiaW5kOmZ1bmN0 aW9uKGEsYil7cmV0dXJuIHRoaXMuX2hhbmRsZXJzPXRoaXMuX2hhbmRsZXJzfHx7 fSx0aGlzLl9oYW5kbGVyc1thXT10aGlzLl9oYW5kbGVyc1thXXx8W10sdGhpcy5f aGFuZGxlcnNbYV0ucHVzaChiKX0sdW5iaW5kOmZ1bmN0aW9uKGEsYyl7aWYoIXRo aXMuX2hhbmRsZXJzW2FdKXJldHVybjtpZihjKXt2YXIgZD1iLmluZGV4T2YodGhp cy5faGFuZGxlcnNbYV0sYyk7ZD49MCYmdGhpcy5faGFuZGxlcnNbYV0uc3BsaWNl KGQsMSl9ZWxzZSB0aGlzLl9oYW5kbGVyc1thXT1bXX0sdHJpZ2dlcjpmdW5jdGlv bihhLGIpe3ZhciBjPXRoaXMuX2hhbmRsZXJzJiZ0aGlzLl9oYW5kbGVyc1thXTti LnR5cGU9YTtpZihjKWZvcih2YXIgZD0wLGU7ZT1jW2RdO2QrKyllLmNhbGwodGhp cyxiKX19O2QucHJvdG90eXBlLmFkZENhbGxiYWNrPWZ1bmN0aW9uKGEpe3RoaXMu Y29tcGxldGVkP2EuYXBwbHkodGhpcyx0aGlzLnJlc3VsdHMpOnRoaXMuY2FsbGJh Y2tzLnB1c2goYSl9LGQucHJvdG90eXBlLmNvbXBsZXRlPWZ1bmN0aW9uKCl7dGhp cy5yZXN1bHRzPW1ha2VBcnJheShhcmd1bWVudHMpLHRoaXMuY29tcGxldGVkPSEw O2Zvcih2YXIgYT0wLGI7Yj10aGlzLmNhbGxiYWNrc1thXTthKyspYi5hcHBseSh0 aGlzLHRoaXMucmVzdWx0cyl9LGEoe0VtaXR0ZXI6YyxQcm9taXNlOmR9KX0pfSk7 CnByb3ZpZGUoInhkL2pzb25ycGMiLGZ1bmN0aW9uKGEpe3VzaW5nKCJ1dGlsL3V0 aWwiLCJ1dGlsL2V2ZW50cyIsZnVuY3Rpb24oYixjKXtmdW5jdGlvbiBkKGEpe3Ro aXMuY29uPWF9ZnVuY3Rpb24gZSgpe3RoaXMuaWQ9ZS5pZCsrfWZ1bmN0aW9uIGYo KXthKGZ1bmN0aW9uKGEpe3JldHVybiBuZXcgZChhKX0pfWIuYXVnKGQucHJvdG90 eXBlLHtleHBvc2U6ZnVuY3Rpb24oYSl7dGhpcy5jb24uYmluZCgibWVzc2FnZSIs dGhpcy5faGFuZGxlUmVxdWVzdChhKSl9LGNhbGw6ZnVuY3Rpb24oYSl7dmFyIGIs Yz10aGlzO2J8fChiPXt9LHRoaXMuY29uLmJpbmQoIm1lc3NhZ2UiLGZ1bmN0aW9u KGEpe3ZhciBjO3RyeXthPUpTT04ucGFyc2UoYSl9Y2F0Y2goZCl7cmV0dXJufXR5 cGVvZiBhLmlkPT0ibnVtYmVyIiYmKGM9YlthLmlkXSkmJihhLmVycm9yP2MudHJp Z2dlcigiZXJyb3IiLGEpOmMudHJpZ2dlcigic3VjY2VzcyIsYSksZGVsZXRlIGJb YS5pZF0pfSkpO3ZhciBkPW5ldyBlO3JldHVybiBiW2QuaWRdPWQsZC5zZW5kKHRo aXMuY29uLGEsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEp KX0sX2hhbmRsZVJlcXVlc3Q6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcztyZXR1cm4g ZnVuY3Rpb24gYyhjKXt2YXIgZCxlO3RyeXtjPUpTT04mJkpTT04ucGFyc2U/SlNP Ti5wYXJzZShjKTpKU09OJiZKU09OLmRlY29kZT9KU09OLmRlY29kZShjKToobmV3 IEZ1bmN0aW9uKCJyZXR1cm4gIitjKSkoKX1jYXRjaChmKXtyZXR1cm59dHlwZW9m IGMuaWQ9PSJudW1iZXIiJiZ0eXBlb2YgYVtjLm1ldGhvZF09PSJmdW5jdGlvbiIm JihlPWIuX3Jlc3BvbnNlQ2FsbGJhY2tzKGMuaWQpLGQ9YVtjLm1ldGhvZF0uYXBw bHkoYSxjLnBhcmFtcy5jb25jYXQoZSkpLHR5cGVvZiBkIT0idW5kZWZpbmVkIiYm ZVswXShkKSl9fSxfcmVzcG9uc2VDYWxsYmFja3M6ZnVuY3Rpb24oYSl7dmFyIGI9 dGhpcy5jb247cmV0dXJuW2Z1bmN0aW9uIGMoYyl7Yi5zZW5kKEpTT04uc3RyaW5n aWZ5KHtpZDphLHJlc3VsdDpjfSkpfSxmdW5jdGlvbiBkKGQpe2Iuc2VuZChKU09O LnN0cmluZ2lmeSh7aWQ6YSxlcnJvcjpkfSkpfV19fSksZS5pZD0wLGIuYXVnKGUu cHJvdG90eXBlLGMuRW1pdHRlcix7c2VuZDpmdW5jdGlvbihhLGIsYyl7cmV0dXJu IGEuc2VuZChKU09OLnN0cmluZ2lmeSh7aWQ6dGhpcy5pZCxtZXRob2Q6YixwYXJh bXM6Y30pKSx0aGlzfSxzdWNjZXNzOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmJp bmQoInN1Y2Nlc3MiLGEpLHRoaXN9LGVycm9yOmZ1bmN0aW9uKGEpe3JldHVybiB0 aGlzLmJpbmQoImVycm9yIixhKSx0aGlzfX0pLHR5cGVvZiBKU09OPT0idW5kZWZp bmVkIj91c2luZygiJHhkL2pzb24yLmpzIixmdW5jdGlvbigpe2YoKX0pOmYoKX0p fSk7CnByb3ZpZGUoInhkL2ZsYXNoIixmdW5jdGlvbihhKXtmdW5jdGlvbiBiKGEs Yil7dmFyIGM9Ynx8TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjEwMCksZD1bJzxv YmplY3QgaWQ9InhkZmxhc2hzaGltJytjKyciIG5hbWU9InhkZmxhc2hzaGltJytj KyciJywndHlwZT0iYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2giIGNsYXNz aWQ9ImNsc2lkOmQyN2NkYjZlLWFlNmQtMTFjZi05NmI4LTQ0NDU1MzU0MDAwMCIn LCd3aWR0aD0iMSIgaGVpZ2h0PSIxIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7 bGVmdDotOTk5OXB4O3RvcDotOTk5OXB4OyI+JywnPHBhcmFtIG5hbWU9Im1vdmll IiB2YWx1ZT0iJythKyImZGVidWc9Iit3aW5kb3cuX19YRERFQlVHX18rJyIvPics JzxwYXJhbSBuYW1lPSJ3bW9kZSIgdmFsdWU9IndpbmRvdyIvPicsJzxwYXJhbSBu YW1lPSJhbGxvd3NjcmlwdGFjY2VzcyIgdmFsdWU9ImFsd2F5cyIvPicsIjwvb2Jq ZWN0PiJdLmpvaW4oIiAiKTtyZXR1cm4gZH1hKHtvYmplY3Q6Yn0pfSk7CnByb3Zp ZGUoInhkL2RldGVjdGlvbiIsZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYigpe3RyeXty ZXR1cm4hIW5hdmlnYXRvci5wbHVnaW5zWyJTaG9ja3dhdmUgRmxhc2giXXx8ISEo bmV3IEFjdGl2ZVhPYmplY3QoIlNob2Nrd2F2ZUZsYXNoLlNob2Nrd2F2ZUZsYXNo IikpfWNhdGNoKGEpe3JldHVybiExfX1hKHtnZXRGbGFzaEVuYWJsZWQ6YixoYXNQ b3N0TWVzc2FnZTohIXdpbmRvdy5wb3N0TWVzc2FnZSxpc0lFOiEhbmF2aWdhdG9y LnVzZXJBZ2VudC5tYXRjaCgiTVNJRSIpfSl9KTsKcHJvdmlkZSgieGQvYmFzZSIs ZnVuY3Rpb24oYSl7dXNpbmcoInV0aWwvdXRpbCIsInV0aWwvZXZlbnRzIixmdW5j dGlvbihiLGMpe2Z1bmN0aW9uIGQoKXt9Yi5hdWcoZC5wcm90b3R5cGUsYy5FbWl0 dGVyLHt0cmFuc3BvcnRNZXRob2Q6IiIsaW5pdDpmdW5jdGlvbigpe30sc2VuZDpm dW5jdGlvbihhKXt2YXIgYjt0aGlzLl9yZWFkeT90aGlzLl9wZXJmb3JtU2VuZChh KTpiPXRoaXMuYmluZCgicmVhZHkiLGZ1bmN0aW9uKCl7dGhpcy51bmJpbmQoInJl YWR5IixiKSx0aGlzLl9wZXJmb3JtU2VuZChhKX0pfSxyZWFkeTpmdW5jdGlvbigp e3RoaXMudHJpZ2dlcigicmVhZHkiLHRoaXMpLHRoaXMuX3JlYWR5PSEwfSxpc1Jl YWR5OmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9yZWFkeX0scmVjZWl2ZTpmdW5j dGlvbihhKXt0aGlzLnRyaWdnZXIoIm1lc3NhZ2UiLGEpfX0pLGEoe0Nvbm5lY3Rp b246ZH0pfSl9KTsKcHJvdmlkZSgieGQvcGFyZW50IixmdW5jdGlvbihhKXt1c2lu ZygieGQvYmFzZSIsInV0aWwvdXRpbCIsInhkL2RldGVjdGlvbiIsZnVuY3Rpb24o YixjLGQpe2Z1bmN0aW9uIGgoYSl7dmFyIGI9W107Zm9yKHZhciBjIGluIGEpYi5w dXNoKGMrIj0iK2FbY10pO3JldHVybiBiLmpvaW4oIiwiKX1mdW5jdGlvbiBpKCl7 fXZhciBlPSJfX3JlYWR5X18iLGY9MCxnO2kucHJvdG90eXBlPW5ldyBiLkNvbm5l Y3Rpb24sYy5hdWcoaS5wcm90b3R5cGUse19jcmVhdGVDaGlsZDpmdW5jdGlvbigp e3RoaXMub3B0aW9ucy53aW5kb3c/dGhpcy5fY3JlYXRlV2luZG93KCk6dGhpcy5f Y3JlYXRlSWZyYW1lKCl9LF9jcmVhdGVJZnJhbWU6ZnVuY3Rpb24oKXt2YXIgYT17 YWxsb3dUcmFuc3BhcmVuY3k6ITAsZnJhbWVCb3JkZXI6IjAiLHNjcm9sbGluZzoi bm8iLHRhYkluZGV4OiIwIixuYW1lOnRoaXMuX25hbWUoKX0sYixlLGYsaD1jLmF1 ZyhjLmF1Zyh7fSxhKSx0aGlzLm9wdGlvbnMuaWZyYW1lKTt3aW5kb3cucG9zdE1l c3NhZ2U/KGd8fChnPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpKSxi PWcuY2xvbmVOb2RlKCExKSk6Yj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCc8aWZy YW1lIG5hbWU9IicraC5uYW1lKyciPicpLGIuaWQ9aC5uYW1lO2Zvcih2YXIgaSBp biBoKWkhPSJzdHlsZSImJmIuc2V0QXR0cmlidXRlKGksaFtpXSk7dmFyIGo9Yi5n ZXRBdHRyaWJ1dGUoInN0eWxlIik7aiYmdHlwZW9mIGouY3NzVGV4dCE9InVuZGVm aW5lZCI/ai5jc3NUZXh0PWguc3R5bGU6Yi5zdHlsZS5jc3NUZXh0PWguc3R5bGU7 dmFyIGs9dGhpcyxsPWZ1bmN0aW9uKCl7ay5jaGlsZD1iLmNvbnRlbnRXaW5kb3cs ay5fcmVhZHl8fGsuaW5pdCgpfTtpZighYi5hZGRFdmVudExpc3RlbmVyKXt2YXIg bT0hMTtiLmF0dGFjaEV2ZW50KCJvbmxvYWQiLGZ1bmN0aW9uKCl7aWYobSlyZXR1 cm47bT0hMCxsKCl9KX1lbHNlIGIuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsbCwh MSk7Yi5zcmM9dGhpcy5fc291cmNlKCksKGU9dGhpcy5vcHRpb25zLmFwcGVuZFRv KT9lLmFwcGVuZENoaWxkKGIpOihmPXRoaXMub3B0aW9ucy5yZXBsYWNlKT8oZT1m LnBhcmVudE5vZGUsZSYmZS5yZXBsYWNlQ2hpbGQoYixmKSk6ZG9jdW1lbnQuYm9k eS5pbnNlcnRCZWZvcmUoYixkb2N1bWVudC5ib2R5LmZpcnN0Q2hpbGQpLGQuaXNJ RSYmdGhpcy50cmFuc3BvcnRNZXRob2QmJnRoaXMudHJhbnNwb3J0TWV0aG9kPT09 IkZsYXNoIiYmKGIuc3JjPWIuc3JjKX0sX2NyZWF0ZVdpbmRvdzpmdW5jdGlvbigp e3ZhciBhPXt3aWR0aDo1NTAsaGVpZ2h0OjQ1MCxwZXJzb25hbGJhcjoiMCIsdG9v bGJhcjoiMCIsc2Nyb2xsYmFyczoiMSIscmVzaXphYmxlOiIxIn0sYixkLGUsZj1j LmF1ZyhjLmF1Zyh7fSxhKSx0aGlzLm9wdGlvbnMud2luZG93KSxnPXNjcmVlbi53 aWR0aCxpPXNjcmVlbi5oZWlnaHQ7Zi5sZWZ0PWYubGVmdHx8TWF0aC5yb3VuZChn LzItZi53aWR0aC8yKSxmLnRvcD1mLnRvcHx8TWF0aC5yb3VuZChpLzItZi5oZWln aHQvMiksaTxmLmhlaWdodCYmKGYudG9wPTAsZi5oZWlnaHQ9aSk7dmFyIGo9dGhp cy5fbmFtZSgpO2I9d2luZG93Lm9wZW4odGhpcy5fc291cmNlKCksaixoKGYpKSxi JiZiLmZvY3VzKCksdGhpcy5jaGlsZD1iLHRoaXMuaW5pdCgpfSxfc291cmNlOmZ1 bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5zcmN9LF9uYW1lOmZ1bmN0aW9u KCl7dmFyIGE9Il94ZF8iK2YrKztyZXR1cm4gd2luZG93LnBhcmVudCYmd2luZG93 LnBhcmVudCE9d2luZG93JiZ3aW5kb3cubmFtZSYmKGE9d2luZG93Lm5hbWUrYSks YX19KTt2YXIgaj1mdW5jdGlvbihhKXt0aGlzLnRyYW5zcG9ydE1ldGhvZD0iUG9z dE1lc3NhZ2UiLHRoaXMub3B0aW9ucz1hLHRoaXMuX2NyZWF0ZUNoaWxkKCl9O2ou cHJvdG90eXBlPW5ldyBpLGMuYXVnKGoucHJvdG90eXBlLHtpbml0OmZ1bmN0aW9u KCl7ZnVuY3Rpb24gYihiKXtiLnNvdXJjZT09PWEuY2hpbGQmJighYS5fcmVhZHkm JmIuZGF0YT09PWU/YS5yZWFkeSgpOmEucmVjZWl2ZShiLmRhdGEpKX12YXIgYT10 aGlzO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyP3dpbmRvdy5hZGRFdmVudExpc3Rl bmVyKCJtZXNzYWdlIixiLCExKTp3aW5kb3cuYXR0YWNoRXZlbnQoIm9ubWVzc2Fn ZSIsYil9LF9wZXJmb3JtU2VuZDpmdW5jdGlvbihhKXt0aGlzLmNoaWxkLnBvc3RN ZXNzYWdlKGEsdGhpcy5vcHRpb25zLnNyYyl9fSk7dmFyIGs9ZnVuY3Rpb24oYSl7 dGhpcy50cmFuc3BvcnRNZXRob2Q9IkZsYXNoIix0aGlzLm9wdGlvbnM9YSx0aGlz LnRva2VuPU1hdGgucmFuZG9tKCkudG9TdHJpbmcoMTYpLnN1YnN0cmluZygyKSx0 aGlzLl9zZXR1cCgpfTtrLnByb3RvdHlwZT1uZXcgaSxjLmF1ZyhrLnByb3RvdHlw ZSx7X3NldHVwOmZ1bmN0aW9uKCl7dmFyIGE9dGhpczt1c2luZygieGQvZmxhc2gi LGZ1bmN0aW9uKGIpe3dpbmRvd1siX194ZGNiIithLnRva2VuXT17cmVjZWl2ZTpm dW5jdGlvbihiKXshYS5fcmVhZHkmJmI9PT1lP2EucmVhZHkoKTphLnJlY2VpdmUo Yil9LGxvYWRlZDpmdW5jdGlvbigpe319O3ZhciBjPWRvY3VtZW50LmNyZWF0ZUVs ZW1lbnQoImRpdiIpO2MuaW5uZXJIVE1MPWIub2JqZWN0KCJodHRwczovL3Rmdy1j dXJyZW50LnMzLmFtYXpvbmF3cy5jb20veGQvZnQuc3dmPyZ0b2tlbj0iK2EudG9r ZW4rIiZwYXJlbnQ9dHJ1ZSZjYWxsYmFjaz1fX3hkY2IiK2EudG9rZW4rIiZ4ZG9t YWluPSIrYS5faG9zdCgpLGEudG9rZW4pLGRvY3VtZW50LmJvZHkuaW5zZXJ0QmVm b3JlKGMsZG9jdW1lbnQuYm9keS5maXJzdENoaWxkKSxhLnByb3h5PWMuZmlyc3RD aGlsZCxhLl9jcmVhdGVDaGlsZCgpfSl9LGluaXQ6ZnVuY3Rpb24oKXt9LF9wZXJm b3JtU2VuZDpmdW5jdGlvbihhKXt0aGlzLnByb3h5LnNlbmQoYSl9LF9ob3N0OmZ1 bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5zcmMucmVwbGFjZSgvaHR0cHM/ OlwvXC8vLCIiKS5zcGxpdCgvKDp8XC8pLylbMF19LF9zb3VyY2U6ZnVuY3Rpb24o KXtyZXR1cm4gdGhpcy5vcHRpb25zLnNyYysodGhpcy5vcHRpb25zLnNyYy5tYXRj aCgvXD8vKT8iJiI6Ij8iKSsieGRfdG9rZW49Iitlc2NhcGUodGhpcy50b2tlbil9 fSk7dmFyIGw9ZnVuY3Rpb24oYSl7dGhpcy50cmFuc3BvcnRNZXRob2Q9IkZhbGxi YWNrIix0aGlzLm9wdGlvbnM9YSx0aGlzLl9jcmVhdGVDaGlsZCgpfTtsLnByb3Rv dHlwZT1uZXcgaSxjLmF1ZyhsLnByb3RvdHlwZSx7aW5pdDpmdW5jdGlvbigpe30s X3BlcmZvcm1TZW5kOmZ1bmN0aW9uKGEpe319KSxhKHtjb25uZWN0OmZ1bmN0aW9u KGEpe3ZhciBiO3JldHVybiBkLmhhc1Bvc3RNZXNzYWdlP2QuaXNJRSYmYS53aW5k b3c/ZC5nZXRGbGFzaEVuYWJsZWQoKSYmKGI9bmV3IGsoYSkpOmI9bmV3IGooYSk6 ZC5pc0lFJiZkLmdldEZsYXNoRW5hYmxlZCgpJiYoYj1uZXcgayhhKSksYnx8KGI9 bmV3IGwoYSkpLGJ9fSl9KX0pOwpwcm92aWRlKCJpMThuL2xhbmd1YWdlcyIsZnVu Y3Rpb24oYSl7YShbIml0Iiwibm8iLCJkZSIsImZyIiwiamEiLCJ6aC1jbiIsImhp IiwiaHUiLCJzdiIsImZpIiwiZXMiLCJydSIsImtvIiwicHQiLCJ6aC10dyIsImlk IiwiY3MiLCJtc2EiLCJwbCIsImVzLWVzIiwicHQtcHQiLCJkYSIsImhlIiwiZWwi LCJ0ciIsIm5sIiwiZmlsIl0pfSk7CnByb3ZpZGUoInV0aWwvaWZyYW1lIixmdW5j dGlvbihhKXthKGZ1bmN0aW9uKGEpe3ZhciBiPWRvY3VtZW50LmNyZWF0ZUVsZW1l bnQoImRpdiIpLGM7Yi5pbm5lckhUTUw9IjxpZnJhbWUgYWxsb3d0cmFuc3BhcmVu Y3k9J3RydWUnIGZyYW1lYm9yZGVyPScwJyBzY3JvbGxpbmc9J25vJz48L2lmcmFt ZT4iLGM9Yi5maXJzdENoaWxkLGMuc3JjPWEudXJsLGMuY2xhc3NOYW1lPWEuY2xh c3NOYW1lfHwiIjtpZihhLmNzcylmb3IodmFyIGQgaW4gYS5jc3MpYy5zdHlsZVtk XT1hLmNzc1tkXTtpZihhLmF0dHJpYnV0ZXMpZm9yKHZhciBlIGluIGEuYXR0cmli dXRlcyljLnNldEF0dHJpYnV0ZShlLGEuYXR0cmlidXRlc1tlXSk7cmV0dXJuIGEu cmVwbGFjZT9hLnJlcGxhY2UucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoYyxhLnJl cGxhY2UpOmRvY3VtZW50LmJvZHkuaW5zZXJ0QmVmb3JlKGMsZG9jdW1lbnQuYm9k eS5maXJzdENoaWxkKSxjfSl9KTsKcHJvdmlkZSgidXRpbC9xdWVyeXN0cmluZyIs ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihhKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9u ZW50KGEpLnJlcGxhY2UoL1wrL2csIiUyQiIpfWZ1bmN0aW9uIGMoYSl7cmV0dXJu IGRlY29kZVVSSUNvbXBvbmVudChhKX1mdW5jdGlvbiBkKGEpe3ZhciBjPVtdO2Zv cih2YXIgZCBpbiBhKWFbZF0hPT1udWxsJiZ0eXBlb2YgYVtkXSE9InVuZGVmaW5l ZCImJmMucHVzaChiKGQpKyI9IitiKGFbZF0pKTtyZXR1cm4gYy5zb3J0KCkuam9p bigiJiIpfWZ1bmN0aW9uIGUoYSl7dmFyIGI9e30sZCxlLGYsZztpZihhKXtkPWEu c3BsaXQoIiYiKTtmb3IoZz0wO2Y9ZFtnXTtnKyspZT1mLnNwbGl0KCI9IiksZS5s ZW5ndGg9PTImJihiW2MoZVswXSldPWMoZVsxXSkpfXJldHVybiBifWZ1bmN0aW9u IGYoYSxiKXt2YXIgYz1kKGIpO3JldHVybiBjLmxlbmd0aD4wP2EuaW5kZXhPZigi PyIpPj0wP2ErIiYiK2QoYik6YSsiPyIrZChiKTphfWEoe3VybDpmLGRlY29kZTpl LGVuY29kZTpkLGVuY29kZVBhcnQ6YixkZWNvZGVQYXJ0OmN9KX0pOwpwcm92aWRl KCJ1dGlsL25vZGVzZWxlY3QiLGZ1bmN0aW9uKGEpe3ZhciBiPWRvY3VtZW50LGM9 InF1ZXJ5U2VsZWN0b3JBbGwiaW4gYj9mdW5jdGlvbihhLGMpe3JldHVybiBiLnF1 ZXJ5U2VsZWN0b3JBbGwoYSsiLiIrYyl9OiJnZXRFbGVtZW50c0J5Q2xhc3NOYW1l ImluIGI/ZnVuY3Rpb24oYSxjKXt2YXIgZD1iLmdldEVsZW1lbnRzQnlDbGFzc05h bWUoYyksZSxmPVtdO2ZvcihpPTA7ZT1kW2ldO2krKyllLnRhZ05hbWUudG9Mb3dl ckNhc2UoKT09YSYmZi5wdXNoKGUpO3JldHVybiBmfTpmdW5jdGlvbihhLGMpe3Zh ciBkPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYSksZSxmPW5ldyBSZWdFeHAoIig/ Ol58XFxzKykiK2MrIig/Olxccyt8JCkiKSxnPVtdO2ZvcihpPTA7ZT1kW2ldO2kr KylmLnRlc3QoZS5jbGFzc05hbWUpJiZnLnB1c2goZSk7cmV0dXJuIGd9O2EoYyl9 KTsKcHJvdmlkZSgiJHZlbmRvci9kb21yZWFkeS9yZWFkeS5qcyIsIGZ1bmN0aW9u KGV4cG9ydHMpIHshZnVuY3Rpb24oYSl7ZnVuY3Rpb24gaygpe2I9MTtmb3IodmFy IGE9MCxkPWMubGVuZ3RoO2E8ZDthKyspY1thXSgpfXZhciBiPTAsYz1bXSxkLGUs Zj0hMSxnPWEuY3JlYXRlRWxlbWVudCgiYSIpLGg9IkRPTUNvbnRlbnRMb2FkZWQi LGk9ImFkZEV2ZW50TGlzdGVuZXIiLGo9Im9ucmVhZHlzdGF0ZWNoYW5nZSI7L15s b2FkZXxjLy50ZXN0KGEucmVhZHlTdGF0ZSkmJihiPTEpLGFbaV0mJmFbaV0oaCxl PWZ1bmN0aW9uKCl7YS5yZW1vdmVFdmVudExpc3RlbmVyKGgsZSxmKSxrKCl9LGYp LGcuZG9TY3JvbGwmJmEuYXR0YWNoRXZlbnQoaixkPWZ1bmN0aW9uKCl7L15jLy50 ZXN0KGEucmVhZHlTdGF0ZSkmJihhLmRldGFjaEV2ZW50KGosZCksaygpKX0pO3Zh ciBsPWcuZG9TY3JvbGw/ZnVuY3Rpb24oYSl7c2VsZiE9dG9wP2I/YSgpOmMucHVz aChhKTohZnVuY3Rpb24oKXt0cnl7Zy5kb1Njcm9sbCgibGVmdCIpfWNhdGNoKGIp e3JldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bChhKX0sNTApfWEoKX0oKX06 ZnVuY3Rpb24oYSl7Yj9hKCk6Yy5wdXNoKGEpfTt0eXBlb2YgbW9kdWxlIT0idW5k ZWZpbmVkIiYmbW9kdWxlLmV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9e2RvbVJlYWR5 Omx9OndpbmRvdy5kb21SZWFkeT1sfShkb2N1bWVudCk7ZXhwb3J0cygpO2xvYWRy dW5uZXIuU2NyaXB0LmxvYWRlZC5wdXNoKCIkdmVuZG9yL2RvbXJlYWR5L3JlYWR5 LmpzIil9KTsKcHJvdmlkZSgidXRpbC9kb21yZWFkeSIsZnVuY3Rpb24oYSl7dXNp bmcoIiR2ZW5kb3IvZG9tcmVhZHkvcmVhZHkuanMiLGZ1bmN0aW9uKCl7YShkb21S ZWFkeSl9KX0pOwpwcm92aWRlKCJ0Zncvd2lkZ2V0L2Jhc2UiLGZ1bmN0aW9uKGEp e3VzaW5nKCJ1dGlsL3V0aWwiLCJ1dGlsL2RvbXJlYWR5IiwidXRpbC9ub2Rlc2Vs ZWN0IiwidXRpbC9xdWVyeXN0cmluZyIsInV0aWwvaWZyYW1lIiwiaTE4bi9sYW5n dWFnZXMiLGZ1bmN0aW9uKGIsYyxkLGUsZixnKXtmdW5jdGlvbiBuKCl7cmV0dXJu IHdpbmRvdy5sb2NhdGlvbi5ocmVmJiYhIXdpbmRvdy5sb2NhdGlvbi5ocmVmLm1h dGNoKCJ0d2l0dGVyLXRlc3QtYXV0b3NpemUiKX1mdW5jdGlvbiBvKGEpe3ZhciBi O2lmKCFhKXJldHVybjtyZXR1cm4oYj1hLmxhbmcpP2I6byhhLnBhcmVudE5vZGUp fWZ1bmN0aW9uIHAoKXt2YXIgYT1qLndpZGdldHMsYixjO2Zvcih2YXIgZSBpbiBh KXtlLm1hdGNoKC9cLi8pP2I9ZC5hcHBseSh0aGlzLGUuc3BsaXQoIi4iKSk6Yj1k b2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShlKTtmb3IodmFyIGY9MCxnO2c9 YltmXTtmKyspe2lmKGcuZ2V0QXR0cmlidXRlKCJkYXRhLXJlbmRlcmluZyIpKWNv bnRpbnVlO2cuc2V0QXR0cmlidXRlKCJkYXRhLXJlbmRlcmluZyIsInRydWUiKSxj PW5ldyBhW2VdKGcpLGsubGlzdC5wdXNoKGMpLGsuYnlJZFtjLmlkXT1jLGMucmVu ZGVyKGopfX19ZnVuY3Rpb24gcShhKXtqPWF9ZnVuY3Rpb24gcigpe3AoKX1mdW5j dGlvbiBzKGEpe3JldHVybiBhJiZrLmJ5SWRbYV0/ay5ieUlkW2FdLmVsZW1lbnQ6 bnVsbH12YXIgaD0wLGksaixrPXtsaXN0OltdLGJ5SWQ6e319LGw9MixtPWZ1bmN0 aW9uKCl7fTtiLmF1ZyhtLnByb3RvdHlwZSx7c2V0TGFuZ3VhZ2U6ZnVuY3Rpb24o YSl7dmFyIGM7YXx8KGE9dGhpcy5wYXJhbXMoKS5sYW5nfHx0aGlzLm9yaWdpbkVs ZW1lbnQuZ2V0QXR0cmlidXRlKCJkYXRhLWxhbmciKXx8byh0aGlzLm9yaWdpbkVs ZW1lbnQpKSxhPWEmJmEudG9Mb3dlckNhc2UoKTtpZighYSlyZXR1cm4gdGhpcy5s YW5nPSJlbiI7aWYofmIuaW5kZXhPZihnLGEpKXJldHVybiB0aGlzLmxhbmc9YTtj PWEucmVwbGFjZSgvWy1fXS4qLywiIik7aWYofmIuaW5kZXhPZihnLGMpKXJldHVy biB0aGlzLmxhbmc9Yzt0aGlzLmxhbmc9ImVuIn0sXzpmdW5jdGlvbihhLGIpe2I9 Ynx8e307aWYodGhpcy5sYW5ncyl7dmFyIGM9dGhpcy5sYW5nO2lmKCFjfHwhdGhp cy5sYW5ncy5oYXNPd25Qcm9wZXJ0eShjKSljPSJlbiI7YT10aGlzLmxhbmdzW2Nd W2FdfHxhfXJldHVybiBhLnJlcGxhY2UoL1x7XHsoW2Etel9dKylcfVx9L2csZnVu Y3Rpb24oYSxjKXtyZXR1cm4gYltjXXx8Int7IitjKyJ9fSJ9KX0sYWRkOmZ1bmN0 aW9uKGEpe2subGlzdC5wdXNoKHRoaXMpLGsuYnlJZFt0aGlzLmlkXT1hfSxjcmVh dGU6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHRoaXMuaWQ9dGhpcy5nZW5lcmF0 ZUlkKCksZih7dXJsOmEsY3NzOnt3aWR0aDpjWzBdKyh0eXBlb2YgY1swXSE9InN0 cmluZyI/InB4IjoiIiksaGVpZ2h0OmNbMV0rKHR5cGVvZiBjWzFdIT0ic3RyaW5n Ij8icHgiOiIiKX0sY2xhc3NOYW1lOmIsaWQ6dGhpcy5pZCxhdHRyaWJ1dGVzOmQs cmVwbGFjZTp0aGlzLm9yaWdpbkVsZW1lbnR9KX0scGFyYW1zOmZ1bmN0aW9uKCl7 dmFyIGE9dGhpcy5vcmlnaW5FbGVtZW50LmhyZWYmJnRoaXMub3JpZ2luRWxlbWVu dC5ocmVmLnNwbGl0KCI/IilbMV0sYj1hP2UuZGVjb2RlKGEpOnt9O3JldHVybiBi LmVuYWJsZU5ld1NpemluZz1uKCksKHRoaXMucGFyYW1zPWZ1bmN0aW9uKCl7cmV0 dXJuIGJ9KSgpfSxnZW5lcmF0ZUlkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3Jp Z2luRWxlbWVudC5pZHx8InR3aXR0ZXItd2lkZ2V0LSIraCsrfSx3anNWZXJzaW9u OmZ1bmN0aW9uKCl7cmV0dXJuIGx9fSksYSh7QmFzZTptLGluaXQ6cSxlbWJlZDpy LGZpbmQ6cyxUV0lUVEVSX1BST0ZJTEVfVVJMOi9eaHR0cHM/XDpcL1wvKD86d3d3 XC4pP3R3aXR0ZXJcLmNvbVwvKD86IyE/XC8pPyhbXHdfXXsxLDIwfSlcLz8kL30p fSl9KTsKcHJvdmlkZSgidXRpbC91cmkiLGZ1bmN0aW9uKGEpe3VzaW5nKCJ1dGls L3F1ZXJ5c3RyaW5nIiwidXRpbC91dGlsIixmdW5jdGlvbihiLGMpe2Z1bmN0aW9u IGQoYSl7dmFyIGI7cmV0dXJuIGEubWF0Y2goL15odHRwcz86XC9cLy8pP2E6KGI9 bG9jYXRpb24uaG9zdCxsb2NhdGlvbi5wb3J0Lmxlbmd0aD4wJiYoYis9IjoiK2xv Y2F0aW9uLnBvcnQpLFtsb2NhdGlvbi5wcm90b2NvbCwiLy8iLGIsYV0uam9pbigi IikpfWZ1bmN0aW9uIGUoKXt2YXIgYT1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFn TmFtZSgibGluayIpO2Zvcih2YXIgYj0wLGM7Yz1hW2JdO2IrKylpZihjLmdldEF0 dHJpYnV0ZSgicmVsIik9PSJjYW5vbmljYWwiKXJldHVybiBkKGMuZ2V0QXR0cmli dXRlKCJocmVmIikpO3JldHVybiBudWxsfWZ1bmN0aW9uIGYoKXt2YXIgYT1kb2N1 bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYSIpLGI9ZG9jdW1lbnQuZ2V0RWxl bWVudHNCeVRhZ05hbWUoImxpbmsiKSxkPS9cYm1lXGIvLGU9L15odHRwcz9cOlwv XC8od3d3XC4pP3R3aXR0ZXIuY29tXC8oW2EtekEtWjAtOV9dKykkLyxmPWMuYXJy YXkoYSkuY29uY2F0KGMuYXJyYXkoYikpLGcsaCxpO2Zvcih2YXIgaj0wLGs7az1m W2pdO2orKyl7aD1rLmdldEF0dHJpYnV0ZSgicmVsIiksaT1rLmdldEF0dHJpYnV0 ZSgiaHJlZiIpO2lmKGgmJmkmJmgubWF0Y2goZCkmJihnPWkubWF0Y2goZSkpKXJl dHVybiBnWzJdfX1hKHthYnNvbHV0aXplOmQsZ2V0Q2Fub25pY2FsVVJMOmUsZ2V0 U2NyZWVuTmFtZUZyb21QYWdlOmZ9KX0pfSk7CnByb3ZpZGUoInRmdy93aWRnZXQv aW50ZW50IixmdW5jdGlvbihhKXt1c2luZygidXRpbC91dGlsIiwidGZ3L3dpZGdl dC9iYXNlIiwidXRpbC9xdWVyeXN0cmluZyIsInV0aWwvdXJpIixmdW5jdGlvbihi LGMsZCxlKXtmdW5jdGlvbiBtKGEpe3ZhciBiPU1hdGgucm91bmQoay8yLWgvMiks Yz0wO2o+aSYmKGM9TWF0aC5yb3VuZChqLzItaS8yKSksd2luZG93Lm9wZW4oYSwi aW50ZW50IixnKyIsd2lkdGg9IitoKyIsaGVpZ2h0PSIraSsiLGxlZnQ9IitiKyIs dG9wPSIrYyl9ZnVuY3Rpb24gbihhLGIpe3VzaW5nKCJ4ZC9wYXJlbnQiLCJ4ZC9q c29ucnBjIixmdW5jdGlvbihjLGQpe3ZhciBlPWMuY29ubmVjdCh7d2luZG93Ont3 aWR0aDo1NTAsaGVpZ2h0OjQ1MH0sc3JjOmF9KTtkKGUpLmV4cG9zZSh7dHJpZ2dl cjpmdW5jdGlvbihhLGMpe3R3dHRyLmV2ZW50cy50cmlnZ2VyKGEse3RhcmdldDpi LHJlZ2lvbjoiaW50ZW50Iix0eXBlOmEsZGF0YTpjfSl9fSl9KX1mdW5jdGlvbiBv KGEpe3ZhciBiPSJvcmlnaW5hbF9yZWZlcmVyPSIrbG9jYXRpb24uaHJlZjtyZXR1 cm5bYSxiXS5qb2luKGEuaW5kZXhPZigiPyIpPT0tMT8iPyI6IiYiKX1mdW5jdGlv biBxKGEpe2E9YXx8d2luZG93LmV2ZW50O3ZhciBiPWEudGFyZ2V0fHxhLnNyY0Vs ZW1lbnQsYyxkO3doaWxlKGImJmIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSE9PSJh IiliPWIucGFyZW50Tm9kZTtpZihiJiZiLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9 PT0iYSImJmIuaHJlZil7Yz1iLmhyZWYubWF0Y2goZik7aWYoYyl7dmFyIGU9byhi LmhyZWYpO2U9ZS5yZXBsYWNlKC9eaHR0cFs6XS8sImh0dHBzOiIpLGU9ZS5yZXBs YWNlKC9eXC9cLy8sImh0dHBzOi8vIiksdHd0dHIuZXZlbnRzLmh1Yj8oZD1uZXcg cChsLmdlbmVyYXRlSWQoKSxiKSxsLmFkZChkKSxuKGUsYiksdHd0dHIuZXZlbnRz LnRyaWdnZXIoImNsaWNrIix7dGFyZ2V0OmIscmVnaW9uOiJpbnRlbnQiLHR5cGU6 ImNsaWNrIixkYXRhOnt9fSkpOm0oZSksYS5yZXR1cm5WYWx1ZT0hMSxhLnByZXZl bnREZWZhdWx0JiZhLnByZXZlbnREZWZhdWx0KCl9fX12YXIgZj0vdHdpdHRlclwu Y29tKFw6XGR7Miw0fSk/XC9pbnRlbnRcLyhcdyspLyxnPSJzY3JvbGxiYXJzPXll cyxyZXNpemFibGU9eWVzLHRvb2xiYXI9bm8sbG9jYXRpb249eWVzIixoPTU1MCxp PTUyMCxqPXNjcmVlbi5oZWlnaHQsaz1zY3JlZW4ud2lkdGgsbCxwPWZ1bmN0aW9u KGEsYil7dGhpcy5pZD1hLHRoaXMuZWxlbWVudD10aGlzLm9yaWdpbkVsZW1lbnQ9 Yn0scj1mdW5jdGlvbihhKXt0aGlzLm9yaWdpbkVsZW1lbnQ9W10sdGhpcy5lbGVt ZW50PWF9O3IucHJvdG90eXBlPW5ldyBjLkJhc2UsYi5hdWcoci5wcm90b3R5cGUs e3JlbmRlcjpmdW5jdGlvbihhKXtsPXRoaXMsd2luZG93Ll9fdHdpdHRlckludGVu dEhhbmRsZXJ8fChkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyP2RvY3VtZW50LmFk ZEV2ZW50TGlzdGVuZXIoImNsaWNrIixxLCExKTpkb2N1bWVudC5hdHRhY2hFdmVu dCYmZG9jdW1lbnQuYXR0YWNoRXZlbnQoIm9uY2xpY2siLHEpLHdpbmRvdy5fX3R3 aXR0ZXJJbnRlbnRIYW5kbGVyPSEwKX19KSxhKHtMaXN0ZW5lcjpyfSl9KX0pOwpw cm92aWRlKCJsaWIvdHd0IixmdW5jdGlvbihhKXthKGZ1bmN0aW9uKGEsYil7dmFy IGM9YSE9ImVuIj9hKyIuIjoiIjt1c2luZygiJHZlbmRvci90d3QvZGlzdC90d3Qu IitjKyJtaW4uanMiLGZ1bmN0aW9uKCl7dHd0LnNldHRpbmdzLmxhbmc9YSxiKHR3 dCl9KX0pfSk7CnByb3ZpZGUoInV0aWwvcGFyYW1zIixmdW5jdGlvbihhKXt1c2lu ZygidXRpbC9xdWVyeXN0cmluZyIsZnVuY3Rpb24oYil7dmFyIGM9ZnVuY3Rpb24o YSl7dmFyIGM9YS5zZWFyY2guc3Vic3RyKDEpO3JldHVybiBiLmRlY29kZShjKX0s ZD1mdW5jdGlvbihhKXt2YXIgYz1hLmhyZWYsZD1jLmluZGV4T2YoIiMiKSxlPWQ8 MD8iIjpjLnN1YnN0cmluZyhkKzEpO3JldHVybiBiLmRlY29kZShlKX0sZT1mdW5j dGlvbihhKXt2YXIgYj17fSxlPWMoYSksZj1kKGEpO2Zvcih2YXIgZyBpbiBlKWUu aGFzT3duUHJvcGVydHkoZykmJihiW2ddPWVbZ10pO2Zvcih2YXIgZyBpbiBmKWYu aGFzT3duUHJvcGVydHkoZykmJihiW2ddPWZbZ10pO3JldHVybiBifTthKHtjb21i aW5lZDplLGZyb21RdWVyeTpjLGZyb21GcmFnbWVudDpkfSl9KX0pOwpwcm92aWRl KCJ1dGlsL3dpZGdldHJwYyIsZnVuY3Rpb24oYSl7dXNpbmcoInV0aWwvcGFyYW1z IixmdW5jdGlvbihiKXtmdW5jdGlvbiBpKCl7aWYoIWooKSlyZXR1cm47dmFyIGE9 MCxiPXBhcmVudC5mcmFtZXMubGVuZ3RoLGU7aWYoZClyZXR1cm4gZDt0cnl7ZD1w YXJlbnQuZnJhbWVzW2NdO2lmKGQpcmV0dXJuIGR9Y2F0Y2goZil7fWZvcig7YTxi O2ErKyl0cnl7ZT1wYXJlbnQuZnJhbWVzW2FdO2lmKGUmJnR5cGVvZiBlLm9wZW5J bnRlbnQ9PSJmdW5jdGlvbiIpcmV0dXJuIGQ9ZX1jYXRjaChmKXt9fWZ1bmN0aW9u IGooKXt2YXIgYT0zNmU1O2lmKGYhPT11bmRlZmluZWQpcmV0dXJuIGY7Zj0hMTt2 YXIgYz1iLmNvbWJpbmVkKGRvY3VtZW50LmxvY2F0aW9uKS5fO3JldHVybiBjPy9e XGQrJC8udGVzdChjKSYmKGY9KyhuZXcgRGF0ZSktcGFyc2VJbnQoYyk8YSk6Zj0h MSxmfWZ1bmN0aW9uIGsoYSxiLGMpe2woZnVuY3Rpb24oZCl7ZC50cmlnZ2VyKCJf cmVzaXplIix7d2lkdGg6YixoZWlnaHQ6Y30sYSl9KX1mdW5jdGlvbiBsKCl7dmFy IGE9e307KHR5cGVvZiBhcmd1bWVudHNbMF0pLnRvTG93ZXJDYXNlKCk9PT0iZnVu Y3Rpb24iP2Euc3VjY2Vzcz1hcmd1bWVudHNbMF06YT1hcmd1bWVudHNbMF07dmFy IGI9YS5zdWNjZXNzfHxmdW5jdGlvbigpe30sYz1hLnRpbWVvdXR8fGZ1bmN0aW9u KCl7fSxkPWEubm9odWJ8fGZ1bmN0aW9uKCl7fSxmPWEuYXR0ZW1wdCE9PXVuZGVm aW5lZD9hLmF0dGVtcHQ6aDtpZighaigpfHxlKXJldHVybiBkKCksITE7dmFyIGs9 aSgpO2YtLTt0cnl7aWYoayYmay50cmlnZ2VyKXtiKGspO3JldHVybn19Y2F0Y2go bSl7fWlmKGY8PTApe2U9ITAsYygpO3JldHVybn13aW5kb3cuc2V0VGltZW91dChm dW5jdGlvbigpe2woe3N1Y2Nlc3M6Yix0aW1lb3V0OmMsbm9odWI6ZCxhdHRlbXB0 OmZ9KX0sZyl9dmFyIGM9InR3dHRySHViRnJhbWUiLGQsZSxmLGc9MTAwLGg9MjA7 YSh7cmVzaXplOmssd2l0aEh1YjpsLGlzRHluYW1pY1dpZGdldDpqfSl9KX0pOwpw cm92aWRlKCJkb20vY29va2llIixmdW5jdGlvbihhKXt1c2luZygidXRpbC91dGls IixmdW5jdGlvbihiKXthKGZ1bmN0aW9uKGEsYyxkKXt2YXIgZT1iLmF1Zyh7fSxk KTtpZihhcmd1bWVudHMubGVuZ3RoPjEmJlN0cmluZyhjKSE9PSJbb2JqZWN0IE9i amVjdF0iKXtpZihjPT09bnVsbHx8Yz09PXVuZGVmaW5lZCllLmV4cGlyZXM9LTE7 aWYodHlwZW9mIGUuZXhwaXJlcz09Im51bWJlciIpe3ZhciBmPWUuZXhwaXJlcyxn PW5ldyBEYXRlKChuZXcgRGF0ZSkuZ2V0VGltZSgpK2YqNjAqMWUzKTtlLmV4cGly ZXM9Z31yZXR1cm4gYz1TdHJpbmcoYyksZG9jdW1lbnQuY29va2llPVtlbmNvZGVV UklDb21wb25lbnQoYSksIj0iLGUucmF3P2M6ZW5jb2RlVVJJQ29tcG9uZW50KGMp LGUuZXhwaXJlcz8iOyBleHBpcmVzPSIrZS5leHBpcmVzLnRvVVRDU3RyaW5nKCk6 IiIsZS5wYXRoPyI7IHBhdGg9IitlLnBhdGg6IiIsZS5kb21haW4/IjsgZG9tYWlu PSIrZS5kb21haW46IiIsZS5zZWN1cmU/Ijsgc2VjdXJlIjoiIl0uam9pbigiIil9 ZT1jfHx7fTt2YXIgaCxpPWUucmF3P2Z1bmN0aW9uKGEpe3JldHVybiBhfTpkZWNv ZGVVUklDb21wb25lbnQ7cmV0dXJuKGg9KG5ldyBSZWdFeHAoIig/Ol58OyApIitl bmNvZGVVUklDb21wb25lbnQoYSkrIj0oW147XSopIikpLmV4ZWMoZG9jdW1lbnQu Y29va2llKSk/aShoWzFdKTpudWxsfSl9KX0pOwpwcm92aWRlKCJ1dGlsL2Rvbm90 dHJhY2siLGZ1bmN0aW9uKGEpe3VzaW5nKCJkb20vY29va2llIixmdW5jdGlvbihi KXthKGZ1bmN0aW9uKCl7cmV0dXJuIGIoImRudCIpPyEwOmRvY3VtZW50Lm5hdmln YXRvcj9kb2N1bWVudC5uYXZpZ2F0b3JbImRvTm90VHJhY2siXT09MTpuYXZpZ2F0 b3I/bmF2aWdhdG9yWyJkb05vdFRyYWNrIl09PTF8fG5hdmlnYXRvclsibXNEb05v dFRyYWNrIl09PTE6ITF9KX0pfSk7CnByb3ZpZGUoInRmdy93aWRnZXQvZ3Vlc3Rf Y29va2llIixmdW5jdGlvbihhKXt1c2luZygiZG9tL2Nvb2tpZSIsInV0aWwvZG9u b3R0cmFjayIsZnVuY3Rpb24oYixjKXtmdW5jdGlvbiBmKCl7aWYoYygpKWIoZCkm JmIoZCxudWxsLHtkb21haW46Ii50d2l0dGVyLmNvbSIscGF0aDoiLyJ9KTtlbHNl IGlmKCFiKGQpKXt2YXIgYT0idjE6IixmPSgrKG5ldyBEYXRlKSkudG9TdHJpbmco KStNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkqOTk5OTk5OTk5KTtiKGQsYStmLHtk b21haW46Ii50d2l0dGVyLmNvbSIscGF0aDoiLyIsZXhwaXJlczplfSl9fXZhciBk PSJwaWQiLGU9MTA1MTg5NzthKHtzZXQ6ZixndWVzdF9pZF9jb29raWU6ZCxkZWZh dWx0X2V4cGlyZTplfSl9KX0pOwpwcm92aWRlKCJ0Zncvd2lkZ2V0L3RyYWNraW5n IixmdW5jdGlvbihhKXt1c2luZygiZG9tL2Nvb2tpZSIsInV0aWwvZG9ub3R0cmFj ayIsInRmdy93aWRnZXQvZ3Vlc3RfY29va2llIiwidXRpbC93aWRnZXRycGMiLGZ1 bmN0aW9uKGIsYyxkLGUpe2Z1bmN0aW9uIGkoYSxiLGMpe3ZhciBkPWYrYjtpZigh YSlyZXR1cm47cmV0dXJuIGFbZF09YyxhfWZ1bmN0aW9uIGooYSxmLGosayxsKXtr fHwoaz0hMSksbHx8KGw9ITEpLGo9anx8InR3ZWV0YnV0dG9uIixqPWhbal18fGgu dHdlZXRidXR0b247dmFyIG09YS5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo ImltZyIpLG49W107a3x8KGkoZiwicmVmZXJyZXIiLGRvY3VtZW50LnJlZmVycmVy LnRvU3RyaW5nKCkpLGkoZiwid2lkZ2V0IiwrZS5pc0R5bmFtaWNXaWRnZXQoKSks IWwmJiFjKCk/KGkoZiwibGkiLCshIWIoInR3aWQiKSksaShmLGQuZ3Vlc3RfaWRf Y29va2llLGIoZC5ndWVzdF9pZF9jb29raWUpfHwiIikpOmkoZiwiZG50IiwiMSIp KTtmb3IodmFyIG8gaW4gZilpZihmLmhhc093blByb3BlcnR5KG8pKXt2YXIgcD1l bmNvZGVVUklDb21wb25lbnQobykscT1lbmNvZGVVUklDb21wb25lbnQoZltvXSk7 cT1xLnJlcGxhY2UoLycvZywiJTI3Iiksbi5wdXNoKHArIj0iK3EpfW0uc3JjPWcr aisiPyIrbi5qb2luKCImIiksbS5hbHQ9IiIsbS5zdHlsZS5wb3NpdGlvbj0iYWJz b2x1dGUiLG0uc3R5bGUuaGVpZ2h0PSIxcHgiLG0uc3R5bGUud2lkdGg9IjFweCIs bS5zdHlsZS50b3A9Ii05OTk5cHgiLG0uc3R5bGUubGVmdD0iLTk5OTlweCIsYS5h cHBlbmRDaGlsZChtKX12YXIgZj0idHd0dHJfIixnPSIvL3BsYXRmb3JtLnR3aXR0 ZXIuY29tL3dpZGdldHMvaW1hZ2VzLyIsaD17dHdlZXRidXR0b246InQuZ2lmIixm b2xsb3didXR0b246ImYuZ2lmIix0d2VldGVtYmVkOiJlLmdpZiJ9O2Eoe2FkZFBp eGVsOmosYWRkVmFyOml9KX0pfSk7CnByb3ZpZGUoIiR2ZW5kb3IvcXdlcnkvcXdl cnkuanMiLCBmdW5jdGlvbihleHBvcnRzKSB7LyohCiAgKiBxd2VyeS5qcyAtIGNv cHlyaWdodCBAZGVkZmF0CiAgKiBodHRwczovL2dpdGh1Yi5jb20vZGVkL3F3ZXJ5 CiAgKiBGb2xsb3cgb3VyIHNvZnR3YXJlIGh0dHA6Ly90d2l0dGVyLmNvbS9kZWRm YXQKICAqIE1JVCBMaWNlbnNlCiAgKi8hZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBH KGEpe2s9W107Zm9yKGQ9MCxvPWEubGVuZ3RoO2Q8bztkKyspa1tkXT1hW2RdO3Jl dHVybiBrfWZ1bmN0aW9uIE0oYSl7cmV0dXJuIGEubWF0Y2goRil9ZnVuY3Rpb24g TihhLGIsYyxlLGYsZyxoKXt2YXIgaixrLGw7aWYoYiYmdGhpcy50YWdOYW1lLnRv TG93ZXJDYXNlKCkhPT1iKXJldHVybiExO2lmKGMmJihqPWMubWF0Y2godikpJiZq WzFdIT09dGhpcy5pZClyZXR1cm4hMTtpZihjJiYocT1jLm1hdGNoKHcpKSlmb3Io ZD1xLmxlbmd0aDtkLS07KXtrPXFbZF0uc2xpY2UoMSk7aWYoIShJLmcoayl8fEku cyhrLG5ldyBSZWdFeHAoIihefFxccyspIitrKyIoXFxzK3wkKSIpKSkudGVzdCh0 aGlzLmNsYXNzTmFtZSkpcmV0dXJuITF9aWYoZSYmIWgpe2k9dGhpcy5hdHRyaWJ1 dGVzO2ZvcihsIGluIGkpaWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0 eS5jYWxsKGksbCkmJihpW2xdLm5hbWV8fGwpPT1mKXJldHVybiB0aGlzfXJldHVy biBlJiYhUShnLHRoaXMuZ2V0QXR0cmlidXRlKGYpfHwiIixoKT8hMTp0aGlzfWZ1 bmN0aW9uIE8oYSl7dmFyIGM9W10sZD1hLnBvcCgpLGU9TShkKSxmPWVbMV18fCIq IixnLGksaixrPWEubGVuZ3RoJiYoaD1hWzBdLm1hdGNoKHgpKT9iLmdldEVsZW1l bnRCeUlkKGhbMV0pOmI7aWYoIWspcmV0dXJuIGM7aj1rLmdldEVsZW1lbnRzQnlU YWdOYW1lKGYpO2ZvcihnPTAsaT1qLmxlbmd0aDtnPGk7ZysrKW09altnXSwocj1O LmFwcGx5KG0sZSkpJiZjLnB1c2gocik7cmV0dXJuIGN9ZnVuY3Rpb24gUChhKXty ZXR1cm4gSi5nKGEpfHxKLnMoYSxhLnJlcGxhY2UoLyhbLiorP1xePSE6JHt9KCl8 XFtcXVwvXFxdKS9nLCJcXCQxIikpfWZ1bmN0aW9uIFEoYSxiLGMpe3N3aXRjaChh KXtjYXNlIj0iOnJldHVybiBiPT1jO2Nhc2UiXj0iOnJldHVybiBiLm1hdGNoKEsu ZygiXj0iK2MpfHxLLnMoIl49IitjLG5ldyBSZWdFeHAoIl4iK1AoYykpKSk7Y2Fz ZSIkPSI6cmV0dXJuIGIubWF0Y2goSy5nKCIkPSIrYyl8fEsucygiJD0iK2MsbmV3 IFJlZ0V4cChQKGMpKyIkIikpKTtjYXNlIio9IjpyZXR1cm4gYi5tYXRjaChLLmco Yyl8fEsucyhjLG5ldyBSZWdFeHAoUChjKSkpKTtjYXNlIn49IjpyZXR1cm4gYi5t YXRjaChLLmcoIn49IitjKXx8Sy5zKCJ+PSIrYyxuZXcgUmVnRXhwKCIoPzpefFxc cyspIitQKGMpKyIoPzpcXHMrfCQpIikpKTtjYXNlInw9IjpyZXR1cm4gYi5tYXRj aChLLmcoInw9IitjKXx8Sy5zKCJ8PSIrYyxuZXcgUmVnRXhwKCJeIitQKGMpKyIo LXwkKSIpKSl9cmV0dXJuITF9ZnVuY3Rpb24gUihhKXt2YXIgYj1bXSxjPVtdLGQs ZyxoPUwuZyhhKXx8TC5zKGEsYS5zcGxpdChDKSk7aD1oLnNsaWNlKDApO2lmKCFo Lmxlbmd0aClyZXR1cm4gYjtiPU8oaCk7aWYoIWgubGVuZ3RoKXJldHVybiBiO2Zv cihlPTAsZz1iLmxlbmd0aCxmPTA7ZTxnO2UrKyl7bj1iW2VdLGo9bjtmb3IoZD1o Lmxlbmd0aDtkLS07KWk6d2hpbGUoaiE9PUImJihqPWoucGFyZW50Tm9kZSkpaWYo cD1OLmFwcGx5KGosTShoW2RdKSkpYnJlYWsgaTtwJiYoY1tmKytdPW4pfXJldHVy biBjfWZ1bmN0aW9uIFQoYSxjLGQpe3ZhciBlPXR5cGVvZiBjPT0ic3RyaW5nIj9k KGMpWzBdOmN8fGI7cmV0dXJuIFUoYSk/IWN8fFUoZSkmJlMoYSxlKT9bYV06W106 YSYmdHlwZW9mIGE9PSJvYmplY3QiJiZhLmxlbmd0aCYmaXNGaW5pdGUoYS5sZW5n dGgpP0coYSk6KGg9YS5tYXRjaCh4KSk/KG09Yi5nZXRFbGVtZW50QnlJZChoWzFd KSk/W21dOltdOihoPWEubWF0Y2goeikpP0coZS5nZXRFbGVtZW50c0J5VGFnTmFt ZShoWzFdKSk6ITF9ZnVuY3Rpb24gVShhKXtyZXR1cm4gYT09PXdpbmRvd3x8YSYm YS5ub2RlVHlwZSYmYS5ub2RlVHlwZS50b1N0cmluZygpLm1hdGNoKC9bMTldLyl9 ZnVuY3Rpb24gVihhLGMpe3ZhciBkPXR5cGVvZiBjPT0ic3RyaW5nIj9WKGMpWzBd OmN8fGI7cmV0dXJuIGQ/KGg9VChhLGMsVikpP2g6Yi5nZXRFbGVtZW50c0J5Q2xh c3NOYW1lJiYoaD1hLm1hdGNoKHkpKT9HKGQuZ2V0RWxlbWVudHNCeUNsYXNzTmFt ZShoWzFdKSk6RyhkLnF1ZXJ5U2VsZWN0b3JBbGwoYSkpOltdfWZ1bmN0aW9uIFco YSl7dmFyIGI9W10sYyxkO2U6Zm9yKGM9MDtjPGEubGVuZ3RoO2MrKyl7Zm9yKGQ9 MDtkPGIubGVuZ3RoO2QrKylpZihiW2RdPT1hW2NdKWNvbnRpbnVlIGU7YltiLmxl bmd0aF09YVtjXX1yZXR1cm4gYn12YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG4s byxwLHEscixzLHQsdSx2PS8jKFtcd1wtXSspLyx3PS9cLltcd1wtXSsvZyx4PS9e IyhbXHdcLV0rJCkvLHk9L15cLihbXHdcLV0rKSQvLHo9L14oW1x3XC1dKykkLyxB PS9eKFtcd10rKT9cLihbXHdcLV0rKSQvLEI9Yi5kb2N1bWVudEVsZW1lbnQsQz0v XHMoPyFbXHNcd1wtXC9cP1wmXD1cOlwuXChcKVwhLEAjJTw+XHtcfVwkXCpcXici XSpcXSkvLEQ9L14oW2EtejAtOV0rKT8oPzooW1wuXCNdK1tcd1wtXC4jXSspPykv LEU9L1xbKFtcd1wtXSspKD86KFtcfFxeXCRcKlx+XT9cPSlbJyJdPyhbIFx3XC1c L1w/XCZcPVw6XC5cKFwpXCEsQCMlPD5ce1x9XCRcKlxeXSspWyInXT8pP1xdLyxG PW5ldyBSZWdFeHAoRC5zb3VyY2UrIigiK0Uuc291cmNlKyIpPyIpLEg9ZnVuY3Rp b24oKXt0aGlzLmM9e319O0gucHJvdG90eXBlPXtnOmZ1bmN0aW9uKGEpe3JldHVy biB0aGlzLmNbYV18fHVuZGVmaW5lZH0sczpmdW5jdGlvbihhLGIpe3JldHVybiB0 aGlzLmNbYV09YixifX07dmFyIEk9bmV3IEgsSj1uZXcgSCxLPW5ldyBILEw9bmV3 IEgsUz0iY29tcGFyZURvY3VtZW50UG9zaXRpb24iaW4gQj9mdW5jdGlvbihhLGIp e3JldHVybihiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGEpJjE2KT09MTZ9OiJj b250YWlucyJpbiBCP2Z1bmN0aW9uKGEsYil7cmV0dXJuIGIhPT1hJiZiLmNvbnRh aW5zKGEpfTpmdW5jdGlvbihhLGIpe3doaWxlKGE9YS5wYXJlbnROb2RlKWlmKGE9 PT1iKXJldHVybiAxO3JldHVybiAwfSxYPWZ1bmN0aW9uKCl7cmV0dXJuIGIucXVl cnlTZWxlY3RvciYmYi5xdWVyeVNlbGVjdG9yQWxsP1Y6ZnVuY3Rpb24oYSxjKXt2 YXIgZD10eXBlb2YgYz09InN0cmluZyI/WChjKVswXTpjfHxiO2lmKCFkKXJldHVy bltdO3ZhciBmLGcsaT1bXSxqPVtdLGw7aWYoaD1UKGEsYyxYKSlyZXR1cm4gaDtp ZihoPWEubWF0Y2goQSkpe3M9ZC5nZXRFbGVtZW50c0J5VGFnTmFtZShoWzFdfHwi KiIpLGs9SS5nKGhbMl0pfHxJLnMoaFsyXSxuZXcgUmVnRXhwKCIoXnxcXHMrKSIr aFsyXSsiKFxccyt8JCkiKSk7Zm9yKGY9MCxnPXMubGVuZ3RoLGU9MDtmPGc7Zisr KWsudGVzdChzW2ZdLmNsYXNzTmFtZSkmJihpW2UrK109c1tmXSk7cmV0dXJuIGl9 Zm9yKGY9MCxzPWEuc3BsaXQoIiwiKSxnPXMubGVuZ3RoO2Y8ZztmKyspaltmXT1S KHNbZl0pO2ZvcihmPTAsZz1qLmxlbmd0aDtmPGcmJih1PWpbZl0pO2YrKyl7dmFy IG09dTtpZihkIT09Yil7bT1bXTtmb3IoZT0wLGg9dS5sZW5ndGg7ZTxoJiYobD11 W2VdKTtlKyspUyhsLGQpJiZtLnB1c2gobCl9aT1pLmNvbmNhdChtKX1yZXR1cm4g VyhpKX19KCksWT1hLnF3ZXJ5O1gubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVy biBhLnF3ZXJ5PVksdGhpc30sYS5xd2VyeT1YfSh0aGlzLGRvY3VtZW50KTtleHBv cnRzKCk7bG9hZHJ1bm5lci5TY3JpcHQubG9hZGVkLnB1c2goIiR2ZW5kb3IvcXdl cnkvcXdlcnkuanMiKX0pOwpwcm92aWRlKCJsaWIvcXdlcnkiLGZ1bmN0aW9uKGEp e3VzaW5nKCIkdmVuZG9yL3F3ZXJ5L3F3ZXJ5LmpzIixmdW5jdGlvbigpe2EocXdl cnkpfSl9KTsKcHJvdmlkZSgidXRpbC9xd2VyeXV0aWwiLGZ1bmN0aW9uKGEpe3Vz aW5nKCJsaWIvcXdlcnkiLGZ1bmN0aW9uKGIpe2Z1bmN0aW9uIGMoYSxjLGQsZSl7 dmFyIGY9YihhLGMpO2lmKCEoZi5sZW5ndGg+MCkpcmV0dXJuIGV8fCExO2Y9Zlsw XTtpZighZClyZXR1cm4gZjtzd2l0Y2goZCl7Y2FzZSJ0ZXh0Q29udGVudCI6cmV0 dXJuIGYudGV4dENvbnRlbnR8fGYuaW5uZXJUZXh0fHxlfHwhMTtjYXNlImlubmVy SFRNTCI6cmV0dXJuIGYuaW5uZXJIVE1MO2RlZmF1bHQ6cmV0dXJuIGYuZ2V0QXR0 cmlidXRlKGQpfX1hKHtxd2VyeTpiLHF3cHJvcDpjfSl9KX0pOwpwcm92aWRlKCJ1 dGlsL3R3ZWV0cGFyc2VyIixmdW5jdGlvbihhKXt1c2luZygidXRpbC9xd2VyeXV0 aWwiLGZ1bmN0aW9uKGIpe2Z1bmN0aW9uIGQoYSl7cmV0dXJuIGEmJmMudGVzdChh KT9hLm1hdGNoKGMpWzFdOiExfWZ1bmN0aW9uIGUoYSl7aWYoIWF8fCFhLm5vZGVO YW1lfHxhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkhPSJibG9ja3F1b3RlIilyZXR1 cm4hMTt2YXIgYz17fSxkPS90d2l0dGVyXC5jb21cLyg/OiMhXC8pP1thLXpBLVow LTlfXXsxLDIwfVwvc3RhdHVzKD86ZXMpP1wvKFxkKilcLz8vLGU9Yi5xd2VyeSgi cCIsYSk7aWYoZS5sZW5ndGgpe3ZhciBnPWVbMF07Yy50ZXh0PWcudGV4dENvbnRl bnR8fGcuaW5uZXJUZXh0fHwiIixjLnJlbmRlcmVkX3RleHQ9Zy5pbm5lckhUTUx8 fCIifXZhciBoPWIucXdlcnkoImEiLGEpLGk9aC5sZW5ndGgmJmhbaC5sZW5ndGgt MV07cmV0dXJuIGkmJihpLmdldEF0dHJpYnV0ZSgiZGF0YS1kYXRldGltZSIpP2Mu Y3JlYXRlZF9hdD1pLmdldEF0dHJpYnV0ZSgiZGF0YS1kYXRldGltZSIpOmMudGlt ZT1pLnRleHRDb250ZW50fHxpLmlubmVyVGV4dCksYy51c2VyPWYoYSksYy5pZF9z dHI9aSYmaS5ocmVmJiZkLnRlc3QoaS5ocmVmKT9SZWdFeHAuJDE6IiIsYy5pZF9z dHImJmMudGV4dCYmYy51c2VyP2M6ITF9ZnVuY3Rpb24gZihhKXt2YXIgYz17fSxk PS9eXHMqKC4rKVxzK1woQChbYS16QS1aMC05X117MSwyMH0pXClccyovLGU9L3R3 aXR0ZXJcLmNvbVwvKCMhXC8pPyhbYS16QS1aMC05X117MSwyMH0pLztmb3IodmFy IGY9MDtmPGEuY2hpbGROb2Rlcy5sZW5ndGg7ZisrKXt2YXIgZz1hLmNoaWxkTm9k ZXNbZl07aWYoZy5ub2RlVHlwZT09PTMmJmQudGVzdChnLm5vZGVWYWx1ZSl8fGcu bm9kZVR5cGU9PT0xJiZnLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0icCImJmQu dGVzdChnLmlubmVyVGV4dCkpe2MubmFtZT1SZWdFeHAuJDEuc3BsaXQoIiAiKS5z bGljZSgxKS5qb2luKCIgIiksYy5zY3JlZW5fbmFtZT1SZWdFeHAuJDI7YnJlYWt9 fWlmKGMuc2NyZWVuX25hbWUpcmV0dXJuIGM7dmFyIGg9Yi5xd2VyeSgiYSIsYSks aT1oLmxlbmd0aCYmaFtoLmxlbmd0aC0xXTtyZXR1cm4gZS50ZXN0KGkuaHJlZik/ KGMubmFtZT0iIixjLnNjcmVlbl9uYW1lPVJlZ0V4cC4kMixjKTohMX12YXIgYz0v XC8oWzAtOV0rKVwvPyQvO2Eoe3BhcnNlVHdlZXQ6ZSxwYXJzZUlkOmQscGFyc2VB dXRob3I6Zn0pfSl9KTsKcHJvdmlkZSgiaTE4bi9pMThuIixmdW5jdGlvbihhKXtm dW5jdGlvbiBiKCl7dHd0dHIuaTE4bl9taXNzaW5nX2ludGVydmFsfHwodHd0dHIu aTE4bl9taXNzaW5nX2ludGVydmFsPXdpbmRvdy5zZXRJbnRlcnZhbChmdW5jdGlv bigpe3R3dHRyLmkxOG5fbWlzc2luZyYmdHd0dHIuaTE4bl9taXNzaW5nLmxlbmd0 aD4wJiYoJC5hamF4KHt0eXBlOiJQT1NUIixkYXRhOiQucGFyYW0oe2F1dGhlbnRp Y2l0eV90b2tlbjp0d3R0ci5mb3JtX2F1dGhlbnRpY2l0eV90b2tlbixsb2NhdGlv bjp3aW5kb3cubG9jYXRpb24uaHJlZiwic3RyaW5nc1tdIjp0d3R0ci5pMThuX21p c3Npbmd9KSx1cmw6Ii90cmFuc2xhdGUvdW50cmFuc2xhdGVkX2phdmFzY3JpcHQi fSksdHd0dHIuaTE4bl9taXNzaW5nPW5ldyBBcnJheSl9LDFlNCkpfWZ1bmN0aW9u IGMoYSl7dHd0dHIuaTE4bl9taXNzaW5nfHwodHd0dHIuaTE4bl9taXNzaW5nPW5l dyBBcnJheSksdHd0dHIuaTE4bl9taXNzaW5nX3JlcG9ydGVkfHwodHd0dHIuaTE4 bl9taXNzaW5nX3JlcG9ydGVkPXt9KSx0d3R0ci5pMThuX21pc3NpbmdfcmVwb3J0 ZWRbYV18fCh0d3R0ci5pMThuX21pc3NpbmcucHVzaChlbmNvZGVVUklDb21wb25l bnQoYSkpLHR3dHRyLmkxOG5fbWlzc2luZ19yZXBvcnRlZFthXT0hMCl9ZnVuY3Rp b24gZChhLGIpe2lmKGIpZm9yKHZhciBjIGluIGIpYT1hLnJlcGxhY2UobmV3IFJl Z0V4cCgiXFwlXFx7IitjKyJcXH0iLCJnaSIpLGJbY10pO3JldHVybiBhfXdpbmRv dy5zZXR1cFRyYW5zbGF0aW9uQ2FsbGJhY2s9YixhKHtfOmZ1bmN0aW9uKGEsYil7 aWYodHd0dHIuaTE4bil7dmFyIGU9dHd0dHIuaTE4blthXTtlP2E9ZTpjKGEpfXJl dHVybiBkKGEsYil9LHNldHVwVHJhbnNsYXRpb25DYWxsYmFjazpifSl9KTsKcHJv dmlkZSgidGZ3L2RhdGEiLGZ1bmN0aW9uKGEpe3VzaW5nKCJ1dGlsL3F1ZXJ5c3Ry aW5nIixmdW5jdGlvbihiKXt3aW5kb3cudHd0dHI9d2luZG93LnR3dHRyfHx7fSx3 aW5kb3cudHd0dHIudGZ3PXdpbmRvdy50d3R0ci50Znd8fHt9LHdpbmRvdy50d3R0 ci50ZncuY2FsbGJhY2tzPXdpbmRvdy50d3R0ci50ZncuY2FsbGJhY2tzfHx7fTt2 YXIgYz0idHd0dHIudGZ3LmNhbGxiYWNrcyIsZD10d3R0ci50ZncuY2FsbGJhY2tz LGU9ImNiIixmPTAsZz0hMSxoPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGE9PXt9LnRv U3RyaW5nLmNhbGwoYikubWF0Y2goL1xzKFthLXpBLVpdKykvKVsxXS50b0xvd2Vy Q2FzZSgpfSxpPWZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbihiKXtiLmVycm9y P2EuZXJyb3ImJmEuZXJyb3IoYik6YS5zdWNjZXNzJiZhLnN1Y2Nlc3MoYiksYS5j b21wbGV0ZSYmYS5jb21wbGV0ZShiKSxqKGEpfX0saj1mdW5jdGlvbihhKXt2YXIg Yj1hLnNjcmlwdDtiJiYoYi5vbmxvYWQ9Yi5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVs bCxiLnBhcmVudE5vZGUmJmIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChiKSxhLnNj cmlwdD11bmRlZmluZWQsYj11bmRlZmluZWQpLGEuY2FsbGJhY2tOYW1lJiZ0d3R0 ci50ZncuY2FsbGJhY2tzW2EuY2FsbGJhY2tOYW1lXSYmZGVsZXRlIHR3dHRyLnRm dy5jYWxsYmFja3NbYS5jYWxsYmFja05hbWVdfSxrPWZ1bmN0aW9uKGEpe3ZhciBi PXt9O3JldHVybiBhLnN1Y2Nlc3MmJmgoImZ1bmN0aW9uIixhLnN1Y2Nlc3MpJiYo Yi5zdWNjZXNzPWEuc3VjY2VzcyksYS5lcnJvciYmaCgiZnVuY3Rpb24iLGEuZXJy b3IpJiYoYi5lcnJvcj1hLmVycm9yKSxhLmNvbXBsZXRlJiZoKCJmdW5jdGlvbiIs YS5jb21wbGV0ZSkmJihiLmNvbXBsZXRlPWEuY29tcGxldGUpLGJ9LGw9ZnVuY3Rp b24oYSxoKXtnJiYoYT1hLnJlcGxhY2UoL15cL1wvLywiaHR0cHM6Ly8iKSk7dmFy IGo9ZStmLGs9YysiLiIrajtkW2pdPWkoaCk7dmFyIGw9ZG9jdW1lbnQuY3JlYXRl RWxlbWVudCgic2NyaXB0IiksbT17Y2FsbGJhY2s6ayxzdXBwcmVzc19yZXNwb25z ZV9jb2RlczohMH07bC5zcmM9Yi51cmwoYSxtKSxsLmFzeW5jPSJhc3luYyI7dmFy IG49ZG9jdW1lbnQuaGVhZHx8ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUo ImhlYWQiKVswXXx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O24uYXBwZW5kQ2hp bGQobCksaC5zY3JpcHQ9bCxoLmNhbGxiYWNrTmFtZT1qLGYrK30sbT1mdW5jdGlv bihhLGIsYyl7dmFyIGQ9YS5sZW5ndGgsZT1bXSxmPXt9LGc9MDtyZXR1cm4gZnVu Y3Rpb24oZSl7dmFyIGg7aD1jKGUpLGZbaF09ZTtpZigrK2c9PT1kKXt2YXIgaT1b XSxqPVtdLGs9W107Zm9yKHZhciBsPTA7bDxkO2wrKyl7dmFyIGU9ZlthW2xdXTtp LnB1c2goZSksZS5lcnJvcj9rLnB1c2goZSk6ai5wdXNoKGUpfWIuZXJyb3ImJmsu bGVuZ3RoPjAmJmIuZXJyb3IoayksYi5zdWNjZXNzJiZqLmxlbmd0aD4wJiZiLnN1 Y2Nlc3MoaiksYi5jb21wbGV0ZSYmYi5jb21wbGV0ZShpKX19fSxuPXt9O24uY29u ZmlnPWZ1bmN0aW9uKGEpe2lmKGEuZm9yY2VTU0w9PT0hMHx8YS5mb3JjZVNTTD09 PSExKWc9YS5mb3JjZVNTTH0sbi51c2VyPWZ1bmN0aW9uKCl7dmFyIGE9Ii8vYXBp LnR3aXR0ZXIuY29tLzEvdXNlcnMvbG9va3VwLmpzb24iLGM9Ii8vY2RuLmFwaS50 d2l0dGVyLmNvbS8xL3VzZXJzL3Nob3cuanNvbiI7cmV0dXJuIGZ1bmN0aW9uKCl7 dmFyIGQsZT17fTthcmd1bWVudHMubGVuZ3RoPT09MT8oZD1hcmd1bWVudHNbMF0u c2NyZWVuTmFtZSxlPWsoYXJndW1lbnRzWzBdKSk6KGQ9YXJndW1lbnRzWzBdLGUu c3VjY2Vzcz1hcmd1bWVudHNbMV0pO3ZhciBmPWgoImFycmF5IixkKT9hOmM7ZD1o KCJhcnJheSIsZCk/ZC5qb2luKCIsIik6ZDt2YXIgZz17c2NyZWVuX25hbWU6ZH0s aT1iLnVybChmLGcpO2woaSxlKX19KCksbi5zdGF0dXM9ZnVuY3Rpb24oKXt2YXIg YT0iLy9jZG4uYXBpLnR3aXR0ZXIuY29tLzEvc3RhdHVzZXMvc2hvdy5qc29uIjty ZXR1cm4gZnVuY3Rpb24oKXt2YXIgYyxkPXt9O2FyZ3VtZW50cy5sZW5ndGg9PT0x PyhjPWFyZ3VtZW50c1swXS5pZCxkPWsoYXJndW1lbnRzWzBdKSk6KGM9YXJndW1l bnRzWzBdLGQuc3VjY2Vzcz1hcmd1bWVudHNbMV0pO2lmKCFoKCJhcnJheSIsYykp e3ZhciBlPXtpZDpjLGluY2x1ZGVfZW50aXRpZXM6ITB9LGY9Yi51cmwoYSxlKTts KGYsZCl9ZWxzZXt2YXIgZz1tKGMsZCxmdW5jdGlvbihhKXt2YXIgYjtyZXR1cm4g YS5lcnJvcj9iPWEucmVxdWVzdC5zcGxpdCgiaWQ9IilbMV0uc3BsaXQoIiYiKVsw XTpiPWEuaWRfc3RyLGJ9KTtmb3IodmFyIGk9MDtpPGMubGVuZ3RoO2krKyl7dmFy IGU9e2lkOmNbaV0saW5jbHVkZV9lbnRpdGllczohMH0sZj1iLnVybChhLGUpO2wo Zix7c3VjY2VzczpnLGVycm9yOmd9KX19fX0oKSxuLnR3ZWV0PW4uc3RhdHVzLG4u Y291bnQ9ZnVuY3Rpb24oKXt2YXIgYT0iLy9jZG4uYXBpLnR3aXR0ZXIuY29tLzEv dXJscy9jb3VudC5qc29uIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYz0iIixkPXt9 O2FyZ3VtZW50cy5sZW5ndGg9PT0xPyhjPWFyZ3VtZW50c1swXS51cmwsZD1rKGFy Z3VtZW50c1swXSkpOmFyZ3VtZW50cy5sZW5ndGg9PT0yJiYoYz1hcmd1bWVudHNb MF0sZC5zdWNjZXNzPWFyZ3VtZW50c1sxXSk7dmFyIGU9e3VybDpjfSxmPWIudXJs KGEsZSk7bChmLGQpfX0oKSxuLmZyaWVuZHNoaXBFeGlzdHM9ZnVuY3Rpb24oKXt2 YXIgYT0iLy9jZG4uYXBpLnR3aXR0ZXIuY29tLzEvZnJpZW5kc2hpcHMvZXhpc3Rz Lmpzb24iO3JldHVybiBmdW5jdGlvbihjKXt2YXIgZD1hcmd1bWVudHNbMF0sZT1r KGFyZ3VtZW50c1swXSksZj17c2NyZWVuX25hbWVfYTpjLnNjcmVlbk5hbWVBLHNj cmVlbl9uYW1lX2I6Yy5zY3JlZW5OYW1lQn0sZz1iLnVybChhLGYpO2woZyxlKX19 KCksYShuKX0pfSk7CnByb3ZpZGUoInV0aWwvaW5zZXJ0IixmdW5jdGlvbihhKXth KGZ1bmN0aW9uKGEsYil7aWYoYil7aWYoIWIucGFyZW50Tm9kZSlyZXR1cm4gYjti LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGEsYiksZGVsZXRlIGJ9ZWxzZSBkb2N1 bWVudC5ib2R5Lmluc2VydEJlZm9yZShhLGRvY3VtZW50LmJvZHkuZmlyc3RDaGls ZCk7cmV0dXJuIGF9KX0pOwpwcm92aWRlKCJ0Zncvd2lkZ2V0L3R3ZWV0IixmdW5j dGlvbihhKXt1c2luZygidXRpbC91dGlsIiwidGZ3L3dpZGdldC9iYXNlIiwidXRp bC9xdWVyeXN0cmluZyIsInV0aWwvdXJpIixmdW5jdGlvbihiLGMsZCxlKXt2YXIg Zj1kb2N1bWVudC50aXRsZSxnPWVuY29kZVVSSShsb2NhdGlvbi5ocmVmKSxoPWZ1 bmN0aW9uKGEpe3RoaXMub3JpZ2luRWxlbWVudD1hLHRoaXMuaWQ9dGhpcy5nZW5l cmF0ZUlkKCksdGhpcy52ZXJzaW9uPXRoaXMud2pzVmVyc2lvbigpO3ZhciBiPXRo aXMucGFyYW1zKCksYz1iLmNvdW50fHxhLmdldEF0dHJpYnV0ZSgiZGF0YS1jb3Vu dCIpLGQ9Yi5zaXplfHxhLmdldEF0dHJpYnV0ZSgiZGF0YS1zaXplIiksaD1lLmdl dFNjcmVlbk5hbWVGcm9tUGFnZSgpO3RoaXMuc2V0TGFuZ3VhZ2UoKSx+YS5jbGFz c05hbWUuaW5kZXhPZigidHdpdHRlci1oYXNodGFnLWJ1dHRvbiIpP3RoaXMudHlw ZT0iaGFzaHRhZyI6fmEuY2xhc3NOYW1lLmluZGV4T2YoInR3aXR0ZXItbWVudGlv bi1idXR0b24iKSYmKHRoaXMudHlwZT0ibWVudGlvbiIpLHRoaXMudGV4dD1iLnRl eHR8fGEuZ2V0QXR0cmlidXRlKCJkYXRhLXRleHQiKSx0aGlzLmFsaWduPWIuYWxp Z258fGEuZ2V0QXR0cmlidXRlKCJkYXRhLWFsaWduIil8fCIiLHRoaXMudmlhPWIu dmlhfHxhLmdldEF0dHJpYnV0ZSgiZGF0YS12aWEiKSx0aGlzLnJlbGF0ZWQ9Yi5y ZWxhdGVkfHxhLmdldEF0dHJpYnV0ZSgiZGF0YS1yZWxhdGVkIiksdGhpcy5jb3Vu dHVybD1iLmNvdW50dXJsfHxhLmdldEF0dHJpYnV0ZSgiZGF0YS1jb3VudHVybCIp LHRoaXMuc2VhcmNobGluaz1iLnNlYXJjaGxpbmt8fGEuZ2V0QXR0cmlidXRlKCJk YXRhLXNlYXJjaGxpbmsiKSx0aGlzLnBsYWNlaWQ9Yi5wbGFjZWlkfHxhLmdldEF0 dHJpYnV0ZSgiZGF0YS1wbGFjZWlkIiksdGhpcy5oYXNodGFncz1iLmhhc2h0YWdz fHxhLmdldEF0dHJpYnV0ZSgiZGF0YS1oYXNodGFncyIpLHRoaXMuc2NyZWVuX25h bWU9Yi5zY3JlZW5fbmFtZXx8YS5nZXRBdHRyaWJ1dGUoImRhdGEtYnV0dG9uLXNj cmVlbi1uYW1lIiksdGhpcy5idXR0b25faGFzaHRhZz1iLmJ1dHRvbl9oYXNodGFn fHxhLmdldEF0dHJpYnV0ZSgiZGF0YS1idXR0b24taGFzaHRhZyIpLHRoaXMudXJs PWIudXJsfHxhLmdldEF0dHJpYnV0ZSgiZGF0YS11cmwiKSx0aGlzLnNpemU9ZD09 ImxhcmdlIj8ibCI6Im0iLHRoaXMuZG50PWIuZG50fHxhLmdldEF0dHJpYnV0ZSgi ZGF0YS1kbnQiKXx8IiIsdGhpcy5lbmFibGVOZXdTaXppbmc9Yi5lbmFibGVOZXdT aXppbmd8fGEuZ2V0QXR0cmlidXRlKCJkYXRhLWVuYWJsZS1uZXctc2l6aW5nIiks dGhpcy5lbmFibGVOZXdTaXppbmc9dGhpcy5lbmFibGVOZXdTaXppbmd8fCF0aGlz LmxhbmdEaW1lbnNpb25zW3RoaXMubGFuZ118fHRoaXMuc2l6ZSE9Im0ifHwhIXRo aXMudHlwZSx0aGlzLnR5cGU/KHRoaXMuY291bnQ9Im5vbmUiLGgmJih0aGlzLnJl bGF0ZWQ9dGhpcy5yZWxhdGVkP2grIiwiK3RoaXMucmVsYXRlZDpoKSk6KHRoaXMu dGV4dD10aGlzLnRleHR8fGYsdGhpcy51cmw9dGhpcy51cmx8fGUuZ2V0Q2Fub25p Y2FsVVJMKCl8fGcsdGhpcy5jb3VudD10aGlzLnN1cHBvcnRDb3VudFtjXT9jOiJo b3Jpem9udGFsIix0aGlzLmNvdW50PXRoaXMuY291bnQ9PSJ2ZXJ0aWNhbCImJnRo aXMuc2l6ZT09ImwiPyJub25lIjp0aGlzLmNvdW50LHRoaXMudmlhPXRoaXMudmlh fHxoKX07aC5wcm90b3R5cGU9bmV3IGMuQmFzZSxiLmF1ZyhoLnByb3RvdHlwZSx7 c3VwcG9ydENvdW50Ont2ZXJ0aWNhbDoxLGhvcml6b250YWw6MSxub25lOjF9LHRp dGxlczp7ZW46IlR3aXR0ZXIgVHdlZXQgQnV0dG9uIn0sbGFuZ0RpbWVuc2lvbnM6 e2VuOnt2ZXJ0aWNhbDo1NSxob3Jpem9udGFsOjExMCxub25lOjU1fSxkZTp7dmVy dGljYWw6NjcsaG9yaXpvbnRhbDoxMjIsbm9uZTo2N30sZXM6e3ZlcnRpY2FsOjY0 LGhvcml6b250YWw6MTE4LG5vbmU6NjR9LGZyOnt2ZXJ0aWNhbDo2NSxob3Jpem9u dGFsOjExOCxub25lOjY1fSxpZDp7dmVydGljYWw6NTUsaG9yaXpvbnRhbDoxMTAs bm9uZTo1NX0saXQ6e3ZlcnRpY2FsOjU1LGhvcml6b250YWw6MTEwLG5vbmU6NTV9 LGtvOnt2ZXJ0aWNhbDo1NSxob3Jpem9udGFsOjExMCxub25lOjU1fSxqYTp7dmVy dGljYWw6ODAsaG9yaXpvbnRhbDoxMzAsbm9uZTo4MH0sbmw6e3ZlcnRpY2FsOjU1 LGhvcml6b250YWw6MTEwLG5vbmU6NTV9LHB0Ont2ZXJ0aWNhbDo2Nixob3Jpem9u dGFsOjEyMCxub25lOjY2fSxydTp7dmVydGljYWw6NjgsaG9yaXpvbnRhbDoxMjAs bm9uZTo2OH0sdHI6e3ZlcnRpY2FsOjY2LGhvcml6b250YWw6MTIwLG5vbmU6NjZ9 fSxkaW1lbnNpb25zOnt4OnttOntub3JtYWw6ODUsaG9yaXpvbnRhbDoxMzB9LGw6 e25vcm1hbDoxMDQsaG9yaXpvbnRhbDoxNjJ9fSx5OnttOntub3JtYWw6MjAsdmVy dGljYWw6NjJ9LGw6e25vcm1hbDoyOCx2ZXJ0aWNhbDoyOH19fSxwYXJhbWV0ZXJz OmZ1bmN0aW9uKCl7dmFyIGE9e3RleHQ6dGhpcy50ZXh0LHVybDp0aGlzLnVybCx2 aWE6dGhpcy52aWEscmVsYXRlZDp0aGlzLnJlbGF0ZWQsY291bnQ6dGhpcy5jb3Vu dCxsYW5nOnRoaXMubGFuZyxjb3VudHVybDp0aGlzLmNvdW50dXJsLHNlYXJjaGxp bms6dGhpcy5zZWFyY2hsaW5rLHBsYWNlaWQ6dGhpcy5wbGFjZWlkLG9yaWdpbmFs X3JlZmVyZXI6bG9jYXRpb24uaHJlZixpZDp0aGlzLmlkLHNpemU6dGhpcy5zaXpl LHR5cGU6dGhpcy50eXBlLHNjcmVlbl9uYW1lOnRoaXMuc2NyZWVuX25hbWUsYnV0 dG9uX2hhc2h0YWc6dGhpcy5idXR0b25faGFzaHRhZyxoYXNodGFnczp0aGlzLmhh c2h0YWdzLGFsaWduOnRoaXMuYWxpZ24sZG50OnRoaXMuZG50LGVuYWJsZU5ld1Np emluZzohIXRoaXMuZW5hYmxlTmV3U2l6aW5nLF86KyhuZXcgRGF0ZSksX3ZlcnNp b246dGhpcy52ZXJzaW9ufTtyZXR1cm4gYi5jb21wYWN0KGEpLGQuZW5jb2RlKGEp fSxyZW5kZXI6ZnVuY3Rpb24oYSl7dmFyIGI9YS5hc3NldFVybCgpKyIvd2lkZ2V0 cy90d2VldF9idXR0b24uMTMyNDMzMTM3My5odG1sIyIrdGhpcy5wYXJhbWV0ZXJz KCksYz10aGlzLmVuYWJsZU5ld1NpemluZz90aGlzLmRpbWVuc2lvbnMueFt0aGlz LnNpemVdWyJob3Jpem9udGFsIj09dGhpcy5jb3VudD8iaG9yaXpvbnRhbCI6Im5v cm1hbCJdOnRoaXMubGFuZ0RpbWVuc2lvbnNbdGhpcy5sYW5nXVt0aGlzLmNvdW50 XSxkPXRoaXMuZGltZW5zaW9ucy55W3RoaXMuc2l6ZV1bInZlcnRpY2FsIj09dGhp cy5jb3VudD8idmVydGljYWwiOiJub3JtYWwiXSxlPXRoaXMudGl0bGVzLmVuLGY9 dGhpczt0aGlzLm9yaWdpbkVsZW1lbnQuY2xhc3NOYW1lKz10aGlzLmNvdW50PyIg dHdpdHRlci1jb3VudC0iK3RoaXMuY291bnQ6IiIsdGhpcy5lbGVtZW50PXRoaXMu Y3JlYXRlKGIsdGhpcy5vcmlnaW5FbGVtZW50LmNsYXNzTmFtZSxbdGhpcy5lbmFi bGVOZXdTaXppbmc/MTpjLGRdLHt0aXRsZTplfSksd2luZG93LnNldFRpbWVvdXQo ZnVuY3Rpb24oKXtmLmVsZW1lbnQuZ2V0QXR0cmlidXRlKCJkYXRhLXJlc2l6ZWQi KXx8KGYuZWxlbWVudC5zdHlsZS53aWR0aD1jKyh0eXBlb2YgYyE9InN0cmluZyI/ InB4IjoiIikpfSwxNWUzKX19KSxhKHtFbWJlZGRhYmxlOmh9KX0pfSk7CnByb3Zp ZGUoInRmdy93aWRnZXQvdHdlZXRlbWJlZCIsZnVuY3Rpb24oYSl7dXNpbmcoInV0 aWwvdXRpbCIsInRmdy93aWRnZXQvYmFzZSIsInRmdy93aWRnZXQvdHdlZXQiLCJ1 dGlsL3VyaSIsInV0aWwvaW5zZXJ0IiwidGZ3L2RhdGEiLCJpMThuL2kxOG4iLCJ1 dGlsL3BhcmFtcyIsInV0aWwvcXdlcnl1dGlsIiwidXRpbC90d2VldHBhcnNlciIs InRmdy93aWRnZXQvdHJhY2tpbmciLGZ1bmN0aW9uKGIsYyxkLGUsZixnLGgsaSxq LGssbCl7dmFyIG09IjEuMCIsbj1pLmZyb21RdWVyeShkb2N1bWVudC5sb2NhdGlv biksbz1mdW5jdGlvbihhKXt0aGlzLmluaXQoKSx0aGlzLm9yaWdpbkVsZW1lbnQ9 YSx0aGlzLmlkPXRoaXMuZ2VuZXJhdGVJZCgpO3ZhciBjPS9eKFswLTldKykoID9w eCk/JC8sZD10aGlzLnBhcmFtcygpO3RoaXMuc2V0TGFuZ3VhZ2UoKSx0aGlzLnJl bGF0ZWQ9ZC5yZWxhdGVkfHxhLmdldEF0dHJpYnV0ZSgiZGF0YS1yZWxhdGVkIiks dGhpcy5wYXJ0bmVyPWQucGFydG5lcnx8YS5nZXRBdHRyaWJ1dGUoImRhdGEtcGFy dG5lciIpLHRoaXMuY2xhc3NOYW1lcz1iLmZpbHRlcihhLmNsYXNzTmFtZS5zcGxp dCgiICIpLGZ1bmN0aW9uKGEpe3JldHVybiEvKHR3aXR0ZXItdHdlZXQpLy50ZXN0 KGEpfSksdGhpcy5jbGFzc05hbWVzLnB1c2goWyJ0d3AtY29udGFpbmVyIl0pLHRo aXMuc3R5bGVBdHRyPVtdLHRoaXMuc3R5bGVBdHRyLnB1c2goYS5nZXRBdHRyaWJ1 dGUoInN0eWxlIil8fCIiKTt2YXIgZSxmPWEuZ2V0QXR0cmlidXRlKCJ3aWR0aCIp fHwiIjsoZT1mLm1hdGNoKGMpKT90aGlzLndpZHRoPWVbMV06YS5jbGFzc05hbWUu bWF0Y2goLyhcYnxeKXR3LWFsaWduLShsZWZ0fHJpZ2h0KShcYnwkKS9pKSYmKHRo aXMud2lkdGg9IjM1MCIpLHRoaXMud2lkdGgmJnRoaXMuc3R5bGVBdHRyLnB1c2go IndpZHRoOiIrdGhpcy53aWR0aCsicHghaW1wb3J0YW50IiksdGhpcy5oaWRlVGhy ZWFkPX5iLmluZGV4T2YodGhpcy5jbGFzc05hbWVzLCJ0dy1oaWRlLXRocmVhZCIp LHRoaXMuaGlkZU1lZGlhPX5iLmluZGV4T2YodGhpcy5jbGFzc05hbWVzLCJ0dy1o aWRlLW1lZGlhIiksdGhpcy5kYXRhPWsucGFyc2VUd2VldCh0aGlzLm9yaWdpbkVs ZW1lbnQpLHRoaXMuaW5SZXBseVRvPWEuZ2V0QXR0cmlidXRlKCJkYXRhLWluLXJl cGx5LXRvIil8fCIifTtvLnByb3RvdHlwZT1uZXcgYy5CYXNlLGIuYXVnKG8ucHJv dG90eXBlLHtpbml0OmZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhKXt2YXIgYj1kb2N1 bWVudC5jcmVhdGVFbGVtZW50KCJsaW5rIik7Yi5yZWw9InN0eWxlc2hlZXQiLGIu dHlwZT0idGV4dC9jc3MiLGIuaHJlZj10d3R0ci53aWRnZXRzLmNvbmZpZy5hc3Nl dFVybCgpKyIvIithLGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFk IilbMF0uYXBwZW5kQ2hpbGQoYil9YSgid2lkZ2V0cy5jc3MiKSxhKCJ0d3QvdHd0 LmNzcyIpLG8ucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH19LGNy ZWF0ZTpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMsZD1udWxsLGU9ISFhLnR3dF9k YXRhX3N0dWI7aWYoIWUpe3ZhciBnPXt9O2cuc3RhdHVzX2lkPWEuaWRfc3RyLGwu YWRkVmFyKGcsInZhcmlhbnQiLG0pLGwuYWRkVmFyKGcsInJlZmVycmVyIixkb2N1 bWVudC5sb2NhdGlvbi50b1N0cmluZygpKSxsLmFkZFBpeGVsKGRvY3VtZW50LmJv ZHksZywidHdlZXRlbWJlZCIsITApLGMuZGF0YS5pbl9yZXBseV90b19kYXRhJiYo Zy5zdGF0dXNfaWQ9Yy5kYXRhLmluX3JlcGx5X3RvX2RhdGEuaWRfc3RyLGwuYWRk UGl4ZWwoZG9jdW1lbnQuYm9keSxnLCJ0d2VldGVtYmVkIiwhMCkpfXJldHVybiB1 c2luZygibGliL3R3dCIsZnVuY3Rpb24oZyl7ZyhjLmxhbmcsZnVuY3Rpb24oZyl7 Zy5lbmRlcihmdW5jdGlvbihoKXt2YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50 KCJkaXYiKSxqPWcuYXV0b0Zvcm1hdChjLndpZHRofHxjLmVsZW1lbnQpLGs9Zyhh LHtmb3JtYXQ6aixwb3B1cFdlYkludGVudHM6ITEsdHdlZXRFbGVtZW50OiJibG9j a3F1b3RlIixzaG93TWVkaWE6IWMuaGlkZU1lZGlhLHNob3dFcnJvcnM6ITEsc2hv d0ZvbGxvd0J1dHRvbjohZSxyZW5kZXJBY3Rpb25zOiFlLHBhcnRuZXI6Yy5wYXJ0 bmVyLHJlbGF0ZWQ6Yy5yZWxhdGVkfSksbD0nPGRpdiBpZD0ie3tpZH19IiBjbGFz cz0ie3tjbGFzc05hbWVzfX0iIGxhbmc9Int7bGFuZ319IiB7eyNzdHlsZX19c3R5 bGU9Int7c3R5bGV9fSJ7ey9zdHlsZX19Pnt7e3R3dH19fTwvZGl2PicsbT17aWQ6 Yy5pZCxjbGFzc05hbWVzOmIsc3R5bGU6Yy5zdHlsZUF0dHIuam9pbigiOyIpLGxh bmc6Yy5sYW5nLHR3dDpjLmRhdGEuaW5fcmVwbHlfdG9fZGF0YT9rLmluUmVwbHlU byhhLmluX3JlcGx5X3RvX2RhdGEpLmh0bWwoKTprLmh0bWwoKX07aS5pbm5lckhU TUw9aC50b19odG1sKGwsbSksZD1mKGkuZmlyc3RDaGlsZCxjLmVsZW1lbnQpfSl9 KX0pLGR9LHJlbmRlcjpmdW5jdGlvbihhKXt2YXIgYj10aGlzO2lmKCFiLmRhdGEp cmV0dXJuO3VzaW5nKCJsaWIvdHd0IixmdW5jdGlvbihhKXthKGIubGFuZyxmdW5j dGlvbigpe3ZhciBhPWIuY2xhc3NOYW1lcy5qb2luKCIgIik7Yi5kYXRhLnR3dF9k YXRhX3N0dWI9ITAsYi5lbGVtZW50PWIub3JpZ2luRWxlbWVudCxiLmVsZW1lbnQ9 Yi5jcmVhdGUoYi5kYXRhLGEpLGIuaW5SZXBseVRvJiYhYi5oaWRlVGhyZWFkP2cu c3RhdHVzKHtpZDpbYi5kYXRhLmlkX3N0cixiLmluUmVwbHlUb10sY29tcGxldGU6 ZnVuY3Rpb24oYyl7dmFyIGQ9Y1swXSxlPWNbMV07aWYoZC5lcnJvcilyZXR1cm47 ZC5pbl9yZXBseV90b19zdGF0dXNfaWRfc3RyPT09ZS5pZF9zdHI/KGIuZGF0YT1k LGIuZGF0YS5pbl9yZXBseV90b19kYXRhPWUsYi5lbGVtZW50PWIuY3JlYXRlKGIu ZGF0YSxhKSk6ZC5pbl9yZXBseV90b19zdGF0dXNfaWRfc3RyP2cuc3RhdHVzKHtp ZDpkLmluX3JlcGx5X3RvX3N0YXR1c19pZF9zdHIsY29tcGxldGU6ZnVuY3Rpb24o Yyl7Yi5kYXRhPWQsYi5kYXRhLmluX3JlcGx5X3RvX2RhdGE9YyxiLmVsZW1lbnQ9 Yi5jcmVhdGUoYi5kYXRhLGEpfX0pOihiLmRhdGE9ZCxiLmVsZW1lbnQ9Yi5jcmVh dGUoYi5kYXRhLGEpKX19KTpnLnN0YXR1cyh7aWQ6Yi5kYXRhLmlkX3N0cixjb21w bGV0ZTpmdW5jdGlvbihjKXtjLmVycm9yPyhiLmRhdGEuZXJyb3I9Yy5lcnJvcixi LmVsZW1lbnQ9Yi5jcmVhdGUoYi5kYXRhLGEpKTooYi5kYXRhPWMsYy5pbl9yZXBs eV90b19zdGF0dXNfaWRfc3RyJiYhYi5oaWRlVGhyZWFkP2cuc3RhdHVzKHtpZDpj LmluX3JlcGx5X3RvX3N0YXR1c19pZF9zdHIsY29tcGxldGU6ZnVuY3Rpb24oZCl7 Yi5kYXRhPWMsYi5kYXRhLmluX3JlcGx5X3RvX2RhdGE9ZCxiLmVsZW1lbnQ9Yi5j cmVhdGUoYi5kYXRhLGEpfX0pOmIuZWxlbWVudD1iLmNyZWF0ZShiLmRhdGEsYSkp fX0pfSl9KX19KSxhKHtFbWJlZGRhYmxlOm99KX0pfSk7CnByb3ZpZGUoInRmdy93 aWRnZXQvZm9sbG93IixmdW5jdGlvbihhKXt1c2luZygidXRpbC91dGlsIiwidGZ3 L3dpZGdldC9iYXNlIiwidXRpbC9xdWVyeXN0cmluZyIsInV0aWwvdXJpIixmdW5j dGlvbihiLGMsZCxlKXt2YXIgZj1mdW5jdGlvbihhKXt0aGlzLm9yaWdpbkVsZW1l bnQ9YTt2YXIgYj10aGlzLnBhcmFtcygpLGM9Yi5zaXplfHxhLmdldEF0dHJpYnV0 ZSgiZGF0YS1zaXplIik7dGhpcy5pZD10aGlzLmdlbmVyYXRlSWQoKSx0aGlzLnZl cnNpb249dGhpcy53anNWZXJzaW9uKCksdGhpcy5zZXRMYW5ndWFnZSgpLHRoaXMu c2hvd1NjcmVlbk5hbWU9Yi5zaG93X3NjcmVlbl9uYW1lfHxhLmdldEF0dHJpYnV0 ZSgiZGF0YS1zaG93LXNjcmVlbi1uYW1lIil8fCIiLHRoaXMuc2hvd0NvdW50PWIu c2hvd19jb3VudHx8YS5nZXRBdHRyaWJ1dGUoImRhdGEtc2hvdy1jb3VudCIpfHwi Iix0aGlzLndpZHRoPWIud2lkdGh8fGEuZ2V0QXR0cmlidXRlKCJkYXRhLXdpZHRo Iil8fCIiLHRoaXMuc2NyZWVuTmFtZT10aGlzLnNjcmVlbk5hbWVGcm9tSHJlZigp LHRoaXMucHJldmlldz1iLnByZXZpZXd8fGEuZ2V0QXR0cmlidXRlKCJkYXRhLXBy ZXZpZXciKXx8IiIsdGhpcy5hbGlnbj1iLmFsaWdufHxhLmdldEF0dHJpYnV0ZSgi ZGF0YS1hbGlnbiIpfHwiIix0aGlzLmRudD1iLmRudHx8YS5nZXRBdHRyaWJ1dGUo ImRhdGEtZG50Iil8fCIiLHRoaXMuc2l6ZT1jPT0ibGFyZ2UiPyJsIjoibSIsdGhp cy5lbmFibGVOZXdTaXppbmc9Yi5lbmFibGVOZXdTaXppbmd8fGEuZ2V0QXR0cmli dXRlKCJkYXRhLWVuYWJsZS1uZXctc2l6aW5nIil9O2YucHJvdG90eXBlPW5ldyBj LkJhc2UsYi5hdWcoZi5wcm90b3R5cGUse3RpdGxlczp7ZW46IlR3aXR0ZXIgRm9s bG93IEJ1dHRvbiJ9LGRpbWVuc2lvbnM6e3g6e206MzAwLGw6MzUwfSx5OnttOjIw LGw6Mjh9fSxwYXJhbWV0ZXJzOmZ1bmN0aW9uKCl7dmFyIGE9e3NjcmVlbl9uYW1l OnRoaXMuc2NyZWVuTmFtZSxsYW5nOnRoaXMubGFuZyxzaG93X2NvdW50OnRoaXMu c2hvd0NvdW50LHNob3dfc2NyZWVuX25hbWU6dGhpcy5zaG93U2NyZWVuTmFtZSxh bGlnbjp0aGlzLmFsaWduLGlkOnRoaXMuaWQscHJldmlldzp0aGlzLnByZXZpZXcs c2l6ZTp0aGlzLnNpemUsZG50OnRoaXMuZG50LGVuYWJsZU5ld1NpemluZzohIXRo aXMuZW5hYmxlTmV3U2l6aW5nLF86KyhuZXcgRGF0ZSksX3ZlcnNpb246dGhpcy52 ZXJzaW9ufTtyZXR1cm4gYi5jb21wYWN0KGEpLGQuZW5jb2RlKGEpfSxzY3JlZW5O YW1lRnJvbUhyZWY6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9yaWdpbkVsZW1lbnQu aHJlZixiO2lmKGI9YS5tYXRjaChjLlRXSVRURVJfUFJPRklMRV9VUkwpKXJldHVy biBiWzFdfSxyZW5kZXI6ZnVuY3Rpb24oYSl7aWYoIXRoaXMuc2NyZWVuTmFtZSly ZXR1cm47dmFyIGI9YS5hc3NldFVybCgpKyIvd2lkZ2V0cy9mb2xsb3dfYnV0dG9u LjEzMjQzMzEzNzMuaHRtbCMiK3RoaXMucGFyYW1ldGVycygpLGM9dGhpcy53aWR0 aHx8dGhpcy5kaW1lbnNpb25zLnhbdGhpcy5zaXplXSxkPXRoaXMuZGltZW5zaW9u cy55W3RoaXMuc2l6ZV0sZT10aGlzLnRpdGxlcy5lbixmPXRoaXM7dGhpcy5lbGVt ZW50PXRoaXMuY3JlYXRlKGIsInR3aXR0ZXItZm9sbG93LWJ1dHRvbiIsW3RoaXMu ZW5hYmxlTmV3U2l6aW5nPzE6YyxkXSx7dGl0bGU6ZX0pLHdpbmRvdy5zZXRUaW1l b3V0KGZ1bmN0aW9uKCl7Zi5lbGVtZW50LmdldEF0dHJpYnV0ZSgiZGF0YS1yZXNp emVkIil8fChmLmVsZW1lbnQuc3R5bGUud2lkdGg9YysodHlwZW9mIGMhPSJzdHJp bmciPyJweCI6IiIpKX0sMTVlMyl9fSksYSh7RW1iZWRkYWJsZTpmfSl9KX0pOwoo ZnVuY3Rpb24oKXt3aW5kb3cudHd0dHI9d2luZG93LnR3dHRyfHx7fTtpZih0d3R0 ci53aWRnZXRzKXJldHVybiB0d3R0ci53aWRnZXRzLmxvYWRlZCYmdHd0dHIud2lk Z2V0cy5sb2FkKCksITE7aWYodHd0dHIuaW5pdClyZXR1cm4hMTt0d3R0ci5pbml0 PSEwLGZ1bmN0aW9uKCl7dHd0dHIuX2U9dHd0dHIuX2V8fFtdLHR3dHRyLnJlYWR5 PXR3dHRyLnJlYWR5fHxmdW5jdGlvbihhKXt0d3R0ci53aWRnZXRzJiZ0d3R0ci53 aWRnZXRzLmxvYWRlZD9hKHR3dHRyKTp0d3R0ci5fZS5wdXNoKGEpfX0oKSx0d3R0 ci5ob3N0PXR3dHRyLmhvc3R8fCJwbGF0Zm9ybS50d2l0dGVyLmNvbSIsdXNpbmcu cGF0aC5sZW5ndGg9PT0wJiYodXNpbmcucGF0aD0iLy8iK3R3dHRyLmhvc3QrIi9q cyIpLHR5cGVvZiB0d3R0ci5pZ25vcmVTU0w9PSJ1bmRlZmluZWQiJiYodHd0dHIu aWdub3JlU1NMPSExKTt2YXIgYT1bXTt0d3R0ci5ldmVudHM9e2JpbmQ6ZnVuY3Rp b24oYixjKXtyZXR1cm4gYS5wdXNoKFtiLGNdKX19LHVzaW5nKCJ1dGlsL2RvbXJl YWR5IixmdW5jdGlvbihiKXtiKGZ1bmN0aW9uKCl7dXNpbmcoInV0aWwvdXRpbCIs InRmdy93aWRnZXQvZm9sbG93IiwidGZ3L3dpZGdldC90d2VldCIsInRmdy93aWRn ZXQvdHdlZXRlbWJlZCIsInRmdy93aWRnZXQvaW50ZW50IiwidXRpbC9ldmVudHMi LCJ0Zncvd2lkZ2V0L2Jhc2UiLGZ1bmN0aW9uKGIsYyxkLGUsZixnLGgpe2Z1bmN0 aW9uIGooYSl7cmV0dXJuKHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbC5tYXRjaCgv c1w6JC8pfHxhKSYmIXR3dHRyLmlnbm9yZVNTTD8iaHR0cHMiOiJodHRwIn12YXIg aT17fTtpLndpZGdldHM9eyJhLnR3aXR0ZXItc2hhcmUtYnV0dG9uIjpkLkVtYmVk ZGFibGUsImEudHdpdHRlci1tZW50aW9uLWJ1dHRvbiI6ZC5FbWJlZGRhYmxlLCJh LnR3aXR0ZXItaGFzaHRhZy1idXR0b24iOmQuRW1iZWRkYWJsZSwiYS50d2l0dGVy LWZvbGxvdy1idXR0b24iOmMuRW1iZWRkYWJsZSwiYmxvY2txdW90ZS50d2l0dGVy LXR3ZWV0IjplLkVtYmVkZGFibGUsImRpdi50d2l0dGVyLXR3ZWV0IjplLkVtYmVk ZGFibGUsYm9keTpmLkxpc3RlbmVyfSxpLmFzc2V0VXJsPWZ1bmN0aW9uKGEpe3Jl dHVybiBqKGEpKyI6Ly8iK3R3dHRyLmhvc3R9LHVzaW5nKCJ4ZC9wYXJlbnQiLCJ4 ZC9qc29ucnBjIixmdW5jdGlvbihhLGIpe3ZhciBjPSJ0d3R0ckh1YkZyYW1lIixk PWkuYXNzZXRVcmwoKSsiL3dpZGdldHMvaHViLjEzMjQzMzEzNzMuaHRtbCI7aWYo d2luZG93LmxvY2F0aW9uJiZ3aW5kb3cubG9jYXRpb24uaHJlZi5tYXRjaCgvTGlu a2VkSW5cLmFwcC8pKXJldHVybiExO2lmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlk KGMpKXJldHVybjt0d3R0ci5ldmVudHMuaHViPWEuY29ubmVjdCh7c3JjOmQsaWZy YW1lOntuYW1lOmMsc3R5bGU6InBvc2l0aW9uOmFic29sdXRlO3RvcDotOTk5OWVt O3dpZHRoOjEwcHg7aGVpZ2h0OjEwcHgifX0pLGIodHd0dHIuZXZlbnRzLmh1Yiku ZXhwb3NlKHt0cmlnZ2VyOmZ1bmN0aW9uKGEsYixjKXtiPWJ8fHt9O3ZhciBkPWIu cmVnaW9uO2RlbGV0ZSBiLnJlZ2lvbix0d3R0ci5ldmVudHMudHJpZ2dlcihhLHt0 YXJnZXQ6aC5maW5kKGMpLGRhdGE6YixyZWdpb246ZCx0eXBlOmF9KX19KX0pO3Zh ciBrPXR3dHRyLmV2ZW50cyYmdHd0dHIuZXZlbnRzLmh1Yj90d3R0ci5ldmVudHM6 e307dHd0dHIuZXZlbnRzPWIuYXVnKGssZy5FbWl0dGVyKSx0d3R0ci5ldmVudHMu YmluZCgiX3Jlc2l6ZSIsZnVuY3Rpb24oYSl7YS50YXJnZXQmJmEudGFyZ2V0LnN0 eWxlJiYoYS50YXJnZXQuc3R5bGUud2lkdGg9YS5kYXRhLndpZHRoKyJweCIsYS50 YXJnZXQuc3R5bGUuaGVpZ2h0PWEuZGF0YS5oZWlnaHQrInB4IixhLnRhcmdldC5z ZXRBdHRyaWJ1dGUoImRhdGEtcmVzaXplZCIsInRydWUiKSl9KTt2YXIgbCxtO2Zv cihsPTA7bT1hW2xdO2wrKyl0d3R0ci5ldmVudHMuYmluZChtWzBdLG1bMV0pO2Zv cihsPTA7bT10d3R0ci5fZVtsXTtsKyspbSh0d3R0cik7dHd0dHIucmVhZHk9ZnVu Y3Rpb24oYSl7YSh0d3R0cil9LHR3dHRyLndpZGdldHM9e2xvYWQ6ZnVuY3Rpb24o KXtoLmluaXQoaSksaC5lbWJlZCgpLHR3dHRyLndpZGdldHMubG9hZGVkPSEwfSxj b25maWc6aX0sdHd0dHIud2lkZ2V0cy5sb2FkKCl9KX0pfSl9KSgpfSk7 ------------vz8vre3LOsirGgAqCZo2LA Content-Disposition: inline; filename=show.js Content-Type: text/javascript; charset=ISO-8859-1; name=show.js Content-Location: http://ads17256.hotwords.es/show.jsp?id=17256 Content-Transfer-Encoding: 8bit wr_boardsize = null;window.Scroller = null;function hw_exl(str_request){try {var head = document.getElementsByTagName('head')[0];var scriptElement = document.createElement('script');scriptElement.type = 'text/javascript';scriptElement.charset = 'ISO-8859-1';scriptElement.src = str_request;if (head != null) {head.appendChild(scriptElement);}else{var head = document.getElementsByTagName('body')[0];if (head != null) {head.appendChild(scriptElement);}}return true;}catch(e){return false; }}function hw_exl2(str_request){try {var head = document.getElementsByTagName('head')[0];var scriptElement = document.createElement('script');scriptElement.type = 'text/javascript';scriptElement.async = true;scriptElement.charset = 'ISO-8859-1';scriptElement.src = str_request;if (head != null) {head.insertBefore(scriptElement, head.firstChild);}else{var head = document.getElementsByTagName('body')[0];if (head != null) {head.appendChild(scriptElement);}}return true;}catch(e){return false; }}try{var site = document.location.href;if(typeof hotwwords == 'undefined'){hw_exl('http://zone29.hotwords.com.br/script.js?psite=5&cor=006600&atr=id&vatr=HOTWordsTxt&tag=div&id=17256&h=1555979940&d=' + escape(site));}hotwwords = "OK";}catch(e){}var _comscore = _comscore || [];_comscore.push({ c1: "8", c2: "10128934", c3: "31782500"});(function() {var s = document.createElement("script"), el = document.getElementsByTagName("script")[0]; s.async = true;s.src = (document.location.protocol == "https:" ? "https://sb" : "http://b") + ".scorecardresearch.com/beacon.js";el.parentNode.insertBefore(s, el);})();var _qevents = _qevents || [];(function() {var elem = document.createElement('script');elem.src = (document.location.protocol == "https:" ? "https://secure" : "http://edge") + ".quantserve.com/quant.js";elem.async = true;elem.type = "text/javascript";var scpt = document.getElementsByTagName('script')[0];scpt.parentNode.insertBefore(elem, scpt);})();_qevents.push({qacct:"p-de2fFrYaGn7Tk"}); ------------vz8vre3LOsirGgAqCZo2LA Content-Disposition: inline; filename=woothemes.png Content-Type: image/png; name=woothemes.png Content-Location: http://www.definicionabc.com/wp-content/themes/definicion/images/woothemes.png Content-Transfer-Encoding: Base64 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 ------------vz8vre3LOsirGgAqCZo2LA Content-Disposition: inline; filename=fo.js Content-Type: application/x-javascript; name=fo.js Content-Location: http://c4.zedo.com/jsc/c4/fo.js Content-Transfer-Encoding: Base64 Ly8gIENvcHlyaWdodCAoYykgMjAwMC0yMDExIFpFRE8gSW5jLiBBbGwgUmlnaHRz IFJlc2VydmVkLgpmdW5jdGlvbiBVMSgpewp2YXIgejE9bmF2aWdhdG9yLnVzZXJB Z2VudC50b0xvd2VyQ2FzZSgpO3ZhciB0NT0oejEuaW5kZXhPZignbWFjJykhPS0x KTt2YXIgejc9cGFyc2VJbnQobmF2aWdhdG9yLmFwcFZlcnNpb24pOwp2YXIgcTM9 KCF0NSYmKHoxLmluZGV4T2YoJ29wZXJhJyk9PS0xKSYmKHoxLmluZGV4T2YoJ21z aWUnKSE9LTEpJiYoejc+PTQpJiYoejEuaW5kZXhPZignd2VidHYnKT09LTEpJiYo ejEuaW5kZXhPZignbXNpZSA0Jyk9PS0xKSk7CmlmKHEzKXsKZG9jdW1lbnQud3Jp dGVsbignPHNjcicrJ2lwdCBsYW5ndWFnZT1WQlMnKydjcmlwdD4nKTsKZG9jdW1l bnQud3JpdGVsbignb24gZXJyb3IgcmVzdW1lIG5leHQnKTsKZG9jdW1lbnQud3Jp dGVsbignbjA9SXNPYmplY3QoQ3JlYXRlT2JqZWN0KCJTaG9ja3dhdmVGbGFzaC5T aG9ja3dhdmVGbGFzaC41IikpJyk7CmRvY3VtZW50LndyaXRlbG4oJ2lmKG4wPD0w KXRoZW4gbjA9SXNPYmplY3QoQ3JlYXRlT2JqZWN0KCJTaG9ja3dhdmVGbGFzaC5T aG9ja3dhdmVGbGFzaC40IikpJyk7CmRvY3VtZW50LndyaXRlbG4oJzwvc2NyJysn aXB0PicpOwp9CmVsc2UgaWYobmF2aWdhdG9yLm1pbWVUeXBlcyYmCm5hdmlnYXRv ci5taW1lVHlwZXNbImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoIl0mJgpu YXZpZ2F0b3IubWltZVR5cGVzWyJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFz aCJdLmVuYWJsZWRQbHVnaW4pewppZihuYXZpZ2F0b3IucGx1Z2lucyYmbmF2aWdh dG9yLnBsdWdpbnNbIlNob2Nrd2F2ZSBGbGFzaCJdKXsKdmFyIGMyPW5hdmlnYXRv ci5wbHVnaW5zWyJTaG9ja3dhdmUgRmxhc2giXS5kZXNjcmlwdGlvbjsKaWYocGFy c2VJbnQoYzIuc3Vic3RyaW5nKGMyLmluZGV4T2YoIi4iKS0yKSk+PTQpewpuMD0x Owp9fX0KdmFyIHQzPW5hdmlnYXRvci5qYXZhRW5hYmxlZCgpO3ZhciBvMD0xOwpp Zih0Myl7bzAgfD00O30KaWYobjApe28wIHw9ODt9CmlmKHEzKXsKaWYoZG9jdW1l bnQuZG9jdW1lbnRFbGVtZW50KXsKZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0 eWxlLmJlaGF2aW9yPSd1cmwoI2RlZmF1bHQjY2xpZW50Q2FwcyknOwppZihkb2N1 bWVudC5kb2N1bWVudEVsZW1lbnQuY29ubmVjdGlvblR5cGU9PSdsYW4nKXsKbzAg fD0xNjsKfX0KZWxzZSBpZihkb2N1bWVudC5ib2R5KXsKZG9jdW1lbnQuYm9keS5z dHlsZS5iZWhhdmlvcj0ndXJsKCNkZWZhdWx0I2NsaWVudENhcHMpJzsKaWYoZG9j dW1lbnQuYm9keS5jb25uZWN0aW9uVHlwZT09J2xhbicpewpvMCB8PTE2Owp9fX0K cmV0dXJuIG8wOwp9CmZ1bmN0aW9uIEIxKCl7CnZhciB2ND1uZXcgQXJyYXkoJ2Qx JywnZDInLCdkMycsJ2Q0JywnZDUnLCdkNicsJ2Q3JywnZDgnLCdkOScsJ2RhJywn ZGInLCdkYycsJ2RkJywnZGUnLCdkZicpOwpyZXR1cm4gdjQ7Cn0KdmFyIGQwPTA7 dmFyIHY4PScnO3ZhciB5MD0wO3ZhciB5MD0wO3ZhciB6ZF9wYXNzYmFja19uZXR3 b3JrSUQ7dmFyIHpkX3Bhc3NiYWNrX2V2ZW50SWQ7dmFyIHpkX3Bhc3NiYWNrX2Fk SWQ7dmFyIHpkX3Bhc3NiYWNrX2NoYW5uZWxJZDt2YXIgemRfcGFzc2JhY2tfZ2Vv TGV2ZWw7dmFyIHpkX1Biaz0nJzt2YXIgejA9JzAnO3ZhciBlMD0wOwp2YXIgejM9 Jyc7dmFyIHpkXyQ9Jyc7dmFyIG4wPTA7dmFyIGkxPScnO3ZhciBlMj0nJzt2YXIg eTI9Jyc7dmFyIHQyPSIiO3ZhciBjND0nJzt2YXIgeTQ9Jyc7dmFyIHYwPW5ldyBB cnJheSgpO3ZhciBxMD0nJzt2YXIgcTY9MDt2YXIgYzM9Jyc7dmFyIHpkX3BidmFy cz0iIjsKaWYodHlwZW9mIHpmbGFnX25pZCE9J3VuZGVmaW5lZCcpewpkMD16Zmxh Z19uaWQ7CnpmbGFnX25pZD0wOwp9CmlmKHR5cGVvZiB6ZmxhZ19jaGFyc2V0IT0n dW5kZWZpbmVkJyl7CnY4PSJjaGFyc2V0PSIremZsYWdfY2hhcnNldDsKemZsYWdf Y2hhcnNldD0iIjsKfQppZih0eXBlb2YgemZsYWdfc2lkIT0ndW5kZWZpbmVkJyl7 CnkwPXpmbGFnX3NpZDsKemZsYWdfc2lkPTA7Cn0KaWYodHlwZW9mIHpmbGFnX3Bi bnchPSd1bmRlZmluZWQnKXsKemRfcGJ2YXJzKz0iJnBuPSIremZsYWdfcGJudzsK emZsYWdfcGJudz0wOwp9CmlmKHR5cGVvZiB6ZmxhZ182IT0ndW5kZWZpbmVkJyl7 CnpkX3BidmFycys9IiY2PSIremZsYWdfNjsKemZsYWdfNj0wOwp9CmlmKHR5cGVv ZiB6ZmxhZ19wYmFkIT0ndW5kZWZpbmVkJyl7CnpkX3BidmFycys9IiZwYT0iK3pm bGFnX3BiYWQ7CnpmbGFnX3BiYWQ9MDsKfQppZih0eXBlb2YgemZsYWdfcGJjaCE9 J3VuZGVmaW5lZCcpewp6ZF9wYnZhcnMrPSImcGM9Iit6ZmxhZ19wYmNoOwp6Zmxh Z19wYmNoPTA7Cn0KaWYodHlwZW9mIHpmbGFnX3BiciE9J3VuZGVmaW5lZCcpewp6 ZF9wYnZhcnMrPSImcHI9Iit6ZmxhZ19wYnI7CnpmbGFnX3Bicj0wOwp9CmlmKHR5 cGVvZiB6ZmxhZ19jaWQhPSd1bmRlZmluZWQnKXsKejA9emZsYWdfY2lkOwppZih6 MDwwfHx6MD45OTk5OTkpewp6MD0wOwp9CnpmbGFnX2NpZD0wOwp9CmlmKHR5cGVv ZiB6ZmxhZ19jaGFubGltaXRzIT0ndW5kZWZpbmVkJyl7CnE2PXpmbGFnX2NoYW5s aW1pdHM7CnpmbGFnX2NoYW5saW1pdHM9MDsKfQppZih0eXBlb2YgemZsYWdfc3oh PSd1bmRlZmluZWQnKXsKZTA9emZsYWdfc3o7CmlmKGUwPDB8fGUwPjk1KXsKZTA9 MDsKfQp6ZmxhZ19zej0wOwp9CmlmKHR5cGVvZiB6ZmxhZ19rdyE9J3VuZGVmaW5l ZCcpewp6ZmxhZ19rdz16ZmxhZ19rdy5yZXBsYWNlKC8mL2csJ3p6YXp6Jyk7Cnoz PWVzY2FwZSh6ZmxhZ19rdyk7CnpmbGFnX2t3PSIiOwp9CmlmKHR5cGVvZiB6Zmxh Z18kIT0ndW5kZWZpbmVkJyl7CnpkXyQ9emZsYWdfJDsKemZsYWdfJD0nJzsKfQpp Zih0eXBlb2YgemZsYWdfZ2VvIT0ndW5kZWZpbmVkJyl7CmlmKCFpc05hTih6Zmxh Z19nZW8pKXsKZTI9IiZnYz0iK3pmbGFnX2dlbzsKemZsYWdfZ2VvPTA7Cn19Cmlm KHR5cGVvZiB6ZmxhZ19wYXJhbSE9J3VuZGVmaW5lZCcpewp0Mj0iJnA9Iit6Zmxh Z19wYXJhbTsKemZsYWdfcGFyYW09IiI7Cn0KaWYodHlwZW9mIHpmbGFnX2NsaWNr IT0ndW5kZWZpbmVkJyl7Cnp6VHJkPWVzY2FwZSh6ZmxhZ19jbGljayk7CnkyPScm bD0nK3p6VHJkOwp6ZmxhZ19jbGljaz0iIjsKfQppZih0eXBlb2YgemZsYWdfYWRf dGl0bGUhPSd1bmRlZmluZWQnKXsKenpUaXRsZT1lc2NhcGUoemZsYWdfYWRfdGl0 bGUpOwpjMz0nJnQ9Jyt6elRpdGxlOwp6ZmxhZ19hZF90aXRsZT0iIjsKfQppZih0 eXBlb2YgemZsYWdfaGFzQWQhPSd1bmRlZmluZWQnKXsKYzQ9JyZ5PScremZsYWdf aGFzQWQ7Cn0KaWYodHlwZW9mIHpmbGFnX251bSE9J3VuZGVmaW5lZCcpewp5ND16 ZmxhZ19udW07CnpmbGFnX251bT0wOwp9CmlmKHR5cGVvZiB6ZmxhZ19jayE9J3Vu ZGVmaW5lZCcpewpxMD0nJmNrPScremZsYWdfY2s7CnpmbGFnX2NrPTA7Cn0KdjA9 QjEoKTsKZm9yKHZhciBpPTA7aTx2MC5sZW5ndGg7aSsrKXsKaWYoZXZhbCgndHlw ZW9mKHpmbGFnXycrdjBbaV0rJykhPSJ1bmRlZmluZWQiJykpewpxMD1xMCsnJicr djBbaV0rJz0nK2V2YWwoJ3pmbGFnXycrdjBbaV0pOwpldmFsKCd6ZmxhZ18nK3Yw W2ldKyc9IiI7Jyk7Cn19CnZhciB6elN0cj0nJzsKaWYodHlwZW9mIHp6Q291bnRy eT09J3VuZGVmaW5lZCcpewp2YXIgenpDb3VudHJ5PTI1NTt9CmlmKHR5cGVvZiB6 ek1ldHJvPT0ndW5kZWZpbmVkJyl7CnZhciB6ek1ldHJvPTA7fQppZih0eXBlb2Yg enpTdGF0ZT09J3VuZGVmaW5lZCcpewp2YXIgenpTdGF0ZT0wO312YXIgenpTZWN0 aW9uPXkwO3ZhciB6elBiTklkPXpkX3Bhc3NiYWNrX25ldHdvcmtJRDt2YXIgenpQ YkVJZD16ZF9wYXNzYmFja19ldmVudElkO3ZhciB6elBiQUlkPXpkX3Bhc3NiYWNr X2FkSWQ7dmFyIHp6UGJDSWQ9emRfcGFzc2JhY2tfY2hhbm5lbElkO3ZhciB6elBi R2VvTHZsPXpkX3Bhc3NiYWNrX2dlb0xldmVsOwp2YXIgenpQYms9emRfUGJrOwpp Zih0eXBlb2YgenpQYms9PSd1bmRlZmluZWQnKXsKenpQYms9LTE7Cn0KdmFyIHp6 RD13aW5kb3cuZG9jdW1lbnQ7dmFyIHp6UmFuZD0oTWF0aC5mbG9vcihNYXRoLnJh bmRvbSgpKiAxMDAwMDAwKSUgMTAwMDApO3ZhciB6ekN1c3RvbT0nJzt2YXIgenpQ YXQ9Jyc7dmFyIHp6U2tpcD0nJzt2YXIgenpFeHA9Jyc7dmFyIHp6VHJkPScnO3Zh ciB6elBvcz0wO3ZhciB6ek53PTA7dmFyIHp6Q2g9MDsKdmFyIHp6RG1Db2Rlcz1u ZXcgQXJyYXkoKTt2YXIgenpEbVZhbHVlcz1uZXcgQXJyYXkoKTt2YXIgenpCcj05 OTt2YXIgenpMYW5nPTk5O3ZhciB6ekFHcnA9MDt2YXIgenpBY3Q9bmV3IEFycmF5 KCk7dmFyIHp6QWN0VmFsPW5ldyBBcnJheSgpOwppMT1VMSgpOwppZihpMTwwfHxp MT4zMSl7CmkxPTE7Cn0KcjA9JzxzY3InKydpcHQgbGFuZ3VhZ2U9ImphdmFzY3Jp cHQiIHNyYz0iaHR0cDovL2M3LnplZG8uY29tL2Jhci92MTYtNjAwL2M0L2pzYy9m bS5qcz9jPScrejArJyZhPScrcTYrJyZmPScreTQrJyZuPScrZDArJyZyPScraTEr JyZkPScrZTArJyZxPScrejMrJyYkPScremRfJCt6ZF9wYnZhcnMrJyZzPScreTAr ZTIrdDIreTIrYzQrYzMrcTArJyZ6PScrTWF0aC5yYW5kb20oKSsnIiAnK3Y4Kyc+ PC9zY3InKydpcHQ+JzsKZG9jdW1lbnQud3JpdGUocjApOwo= ------------vz8vre3LOsirGgAqCZo2LA Content-Disposition: inline; filename=like.htm Content-Type: text/html; charset=utf-8; name=like.htm Content-Location: http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.definicionabc.com%2Fgeneral%2Frico.php&send=false&layout=button_count&width=120&show_faces=false&action=like&colorscheme=light&font&height=21 Content-Transfer-Encoding: Quoted-Printable Likebody{background:#fff;font-size: 11px;font-family:"lucida grande",taho= ma,verdana,arial,sans-serif;color:#333;line-height:1.28;margin:0;padding= :0;text-align:left;direction:ltr;unicode-bidi:embed} h1,h2,h3,h4,h5,h6{font-size: 13px;color:#333;margin:0;padding:0} h1{font-size: 14px} h4,h5{font-size: 11px} p{margin:1em 0} a{cursor:pointer;color:#3b5998;text-decoration:none} a:hover{text-decoration:underline} img{border:0} td,td.label{font-size: 11px;text-align:left} dd{color:#000} dt{color:#777} ul{list-style-type:none;margin:0;padding:0} abbr{border-bottom:none} hr{background:#d9d9d9;border-width:0;color:#d9d9d9;height:1px} .clearfix:after{clear:both;content:".";display:block;font-size:0;height:= 0;line-height:0;visibility:hidden} .clearfix{zoom:1} .datawrap{word-wrap:break-word} .word_break{display:inline-block} wbr:after{content:"\00200B"} .ellipsis{overflow:hidden;text-overflow:ellipsis;-o-text-overflow:ellips= is;white-space:nowrap} .img_loading{position:absolute;top:-9999999px} .aero{opacity:.5} .column{float:left} .center{margin-left:auto;margin-right:auto} #facebook .hidden_elem{display:none !important} #facebook .invisible_elem{visibility:hidden} #facebook .accessible_elem{left:-9999px;position:absolute} .direction_ltr{direction:ltr} .direction_rtl{direction:rtl} .text_align_ltr{text-align:left} .text_align_rtl{text-align:right} body.transparent_widget{background-color:transparent;overflow:hidden} body.plugin.transparent_widget{overflow-y:hidden} .connect_widget{background-color:transparent} .connect_widget .connect_widget_facebook_favicon{background:url(http://s= tatic.ak.fbcdn.net/rsrc.php/v1/y7/r/ql9vukDCc4R.png) no-repeat -1px -47p= x transparent;display:block;height:14px;padding:0 0 0 0;width:14px;posit= ion:absolute;left:-1px} body.transparent_widget .generic_dialog_popup, .connect_widget .generic_dialog_popup{width:400px} .connect_widget .connect_widget_interactive_area{border-collapse:collaps= e} .connect_widget td.connect_widget_vertical_center{border-spacing:0;font-= size: 11px;line-height:normal;padding:0} .connect_widget td.connect_widget_button_cell{vertical-align:top} .connect_widget td.connect_widget_confirm_cell{padding-top:4px} .connect_widget .connect_button_slider{position:relative;zoom:1} .connect_widget .connect_widget_button_cell .connect_slide_hide_content{= overflow:hidden;width:1px;margin-right:0} .connect_widget .connect_slide_hide_content .connect_button_container{ma= rgin-left:1px} .button_count .connect_widget_interactive_area .connect_widget_facebook_= favicon,.button_count .connect_widget_interactive_area .connect_widget_t= ext{float:left;position:static} a.connect_widget_like_button{display:block;float:left;border-radius:3px;= padding:4px 5px;border:1px solid #000} .button_count a.connect_widget_like_button{padding:2px 4px} a.connect_widget_like_button span{line-height:14px} a.connect_widget_like_button:hover{text-decoration:none} .connect_widget_number_cloud{position:relative;background:#fff;border:1p= x solid #d3d3d3;height:25px;padding-top:7px;text-align:center} .like_widget_dark div.connect_widget_number_cloud{background-color:#d7d7= d7;border-color:#d7d7d7} div.connect_widget_number_cloud table.connect_widget_number_cloud_summar= y{margin-left:auto;margin-right:auto} div.connect_widget_number_cloud table.connect_widget_number_cloud_summar= y td{font-size: 13px} .thumbs_up_icon{width:15px;height:15px;margin-right:2px;background:url(h= ttp://static.ak.fbcdn.net/rsrc.php/v1/y7/r/ql9vukDCc4R.png) -1px -32px n= o-repeat} .like_widget_dark .thumbs_up_icon{background-position:-1px -2px} .like_widget_dark div.connect_widget_number_cloud_extension a{color:#333= } div.connect_widget_number_cloud .connect_widget_text{padding-left:0} .connect_widget_number_cloud_nub{position:absolute;z-index:2;height:7px;= width:7px;bottom:-7px;left:5px} .connect_widget_number_cloud_nub s,.connect_widget_number_cloud_nub i{bo= rder:solid transparent;border-top-color:#d3d3d3;border-width:5px;display= :block;position:relative} .connect_widget_number_cloud_nub i{left:0;top:-12px;border-top-color:#ff= f} .like_widget_dark .connect_widget_number_cloud_nub s{border-top-color:#d= 7d7d7} .like_widget_dark .connect_widget_number_cloud_nub i{display:none} .connect_widget_offscreen{position:absolute;top:-10000px} div.connect_widget_number_cloud_extension{font-size: 11px;height:30px;ma= rgin-left:4px;margin-right:4px;margin-top:6px} div.connect_widget_number_cloud_extension_icon{margin-left:2px;margin-to= p:3px} div.connect_widget_number_cloud_extension_text{border-color:#dedede;bord= er-width:1px 0 0 0;border-style:solid;line-height:11px;margin-top:1px;te= xt-align:center} div.connect_widget_number_cloud_extension_text table{width:100%} div.connect_widget_number_cloud_extension_text td{height:30px;text-align= :center;vertical-align:middle} div.connect_widget_number_cloud_extension span.like_reminder{color:#777;= font-size: 9px} .like_widget_dark div.connect_widget_number_cloud_extension span.like_re= minder{color:#333;font-size: 9px} table.connect_widget_button_count_summary,table.connect_widget_simple_su= mmary{background-color:#eceef5;color:#000;font-size: 11px;height:21px} table.connect_widget_button_count_summary div.thumbs_up{background:url(h= ttp://static.ak.fbcdn.net/rsrc.php/v1/y7/r/ql9vukDCc4R.png) no-repeat 3p= x -32px #eceef5;height:15px;width:18px} td.connect_widget_simple_including div.simple_liked{background:url(http:= //static.ak.fbcdn.net/rsrc.php/v1/y7/r/ql9vukDCc4R.png) no-repeat 3px -4= 7px #eceef5;height:15px;width:18px} .like_button_simple .connect_widget_like_button .liketext{background:url= (http://static.ak.fbcdn.net/rsrc.php/v1/y7/r/ql9vukDCc4R.png) no-repeat = 0 -47px #eceef5} .connect_widget_rtl table.connect_widget_button_count_summary div.thumbs= _up{background-position:-1px 0} table.connect_widget_button_count_summary div.undo{background-color:#ece= ef5;height:21px;width:18px} .like_button_dark table.connect_widget_button_count_summary div.undo{bac= kground-color:#d7d7d7} table.connect_widget_button_count_summary label.undo_button{margin-left:= 6px;margin-top:4px} table.connect_widget_button_count_summary div.summary_text{padding-left:= 3px;padding-right:6px;white-space:nowrap} table.connect_widget_simple_summary div.summary_text{padding-left:3px;pa= dding-right:6px;white-space:nowrap;color:#ccc} .like_button_dark table.connect_widget_button_count_summary,.like_button= _dark table.connect_widget_simple_summary{background-color:#d7d7d7} .like_button_dark table.connect_widget_button_count_summary div.thumbs_u= p{background:transparent url(http://static.ak.fbcdn.net/rsrc.php/v1/y7/r= /ql9vukDCc4R.png) no-repeat 3px -3px} .connect_widget_rtl .like_button_dark table.connect_widget_button_count_= summary div.thumbs_up{background-position:-1px -3px} .connect_widget_button_count_count{background:#fff;border:1px solid #d1d= 1d1;float:left;font-weight:normal;height:14px;margin-left:1px;min-width:= 15px;padding:1px 2px 1px 2px;text-align:center;line-height:14px;white-sp= ace:nowrap} .like_button_dark div.connect_widget_button_count_count{background-color= :#d7d7d7;border-color:#d7d7d7} .connect_widget_button_count_nub{float:left;position:relative;z-index:2;= height:0;width:5px;top:-5px;left:2px} .connect_widget_button_count_nub s,.connect_widget_button_count_nub i{bo= rder:solid transparent;border-right-color:#d7d7d7;border-width:4px 5px 4= px 0;top:1px;display:block;position:relative} .connect_widget_button_count_nub i{left:2px;top:-7px;border-right-color:= #fff} .like_button_dark .connect_widget_button_count_nub i{display:none} td.connect_widget_button_count_excluding{padding:0} td.connect_widget_button_count_including,td.connect_widget_simple_includ= ing{padding:0} td.connect_widget_button_count_including .connect_widget_button_count_co= unt.noGrayOut{background:transparent url(http://static.ak.fbcdn.net/rsrc= .php/v1/yp/r/qDH1xoDhFBF.gif) no-repeat 4px 2px;padding-left:22px;paddin= g-right:4px} .connect_widget_rtl td.connect_widget_button_count_including .connect_wi= dget_button_count.noGrayOut{background:transparent url(http://static.ak.= fbcdn.net/rsrc.php/v1/yp/r/qDH1xoDhFBF.gif) no-repeat 4px 2px;padding-ri= ght:22px;padding-left:4px} .connect_widget_like_button .vertical{display:block;top:-6px;left:0;marg= in:0 3px -6px 0;position:relative;padding:3px 4px 4px 3px;border-top:sol= id 1px;border-bottom:solid 1px} .button_count .connect_widget_like_button .vertical{padding:2px 3px 3px = 2px} .connect_widget_like_button .horizontal{height:100%;width:100%;position:= absolute;display:block;top:-3px;left:-3px;padding-left:1px;border-left:s= olid 1px;border-right:solid 1px} .connect_widget_like_button .corner_mask{overflow:hidden;width:3px;heigh= t:3px;position:absolute;display:block} .connect_widget_like_button .corner{background-image:url(http://static.a= k.fbcdn.net/rsrc.php/v1/y7/r/ql9vukDCc4R.png);height:6px;width:6px;displ= ay:block} .connect_widget_like_button .topleft{top:-6px;left:-3px} .connect_widget_like_button .topleft .corner{margin:0 0} .connect_widget_like_button .topright{top:-6px;right:0} .connect_widget_like_button .topright .corner{margin:0 0 0 -3px} .connect_widget_like_button .bottomright{bottom:0;right:0} .connect_widget_like_button .bottomright .corner{margin:-3px 0 0 -3px} .connect_widget_like_button .bottomleft{bottom:0;left:-3px} .connect_widget_like_button .bottomleft .corner{margin:-3px 0 0 0} .connect_widget_like_button .liketext{background:url(http://static.ak.fb= cdn.net/rsrc.php/v1/y7/r/ql9vukDCc4R.png) -1px -33px no-repeat;color:#3b= 5998;display:block;padding-left:17px;white-space:nowrap} .connect_widget_rtl .connect_button_container .liketext{background:url(h= ttp://static.ak.fbcdn.net/rsrc.php/v1/y7/r/ql9vukDCc4R.png) 34px -33px n= o-repeat} .connect_widget_like_button .liketextwithimage img{margin-bottom:-2px;ma= rgin-right:4px;width:13px} .hidden .connect_widget_like_button .liketextwithimage img{height:0;marg= in:0;padding:0;width:0} .connect_widget_like_button .fbLikeButtonTrackingPixel{display:inline;he= ight:0;width:0} .button_count .like_button_dark .like_button_no_like .liketext,.button_c= ount .connect_widget_like_button .liketext{background-position:left -47p= x;margin-left:-1px} .connect_widget .like_button_no_like .piece,.connect_widget .like_button= _no_like{background-color:#eceef5;border-color:#cad4e7} .connect_widget .like_button_no_like .corner{background-position:10px -8= 9px} .connect_widget a.like_button_no_like:hover .piece,.connect_widget a.lik= e_button_no_like:hover{background-color:#ebedf4;border-color:#9dacce} .connect_widget .like_button_no_like:hover .corner{background-position:1= 0px -95px} .connect_widget .like_button_pressed,.connect_widget .like_button_presse= d .piece{background-color:#ced4e6;border-color:#94a5ca} .connect_widget .like_button_pressed .corner{background-position:10px 55= px} .connect_widget .like_button_like .corner{background-position:10px 49px}= .connect_widget .like_button_dark .like_button_no_like,.connect_widget .= like_button_dark .like_button_no_like .piece{background-color:#d7d7d7;bo= rder-color:#cad4e7} .connect_widget .like_button_dark .like_button_no_like .corner{backgroun= d-position:10px -217px} .connect_widget .like_button_dark .liketext{color:#333;background-positi= on:left -3px;margin-left:-1px} .connect_widget .like_button_dark .like_button_no_like:hover,.connect_wi= dget .like_button_dark .like_button_no_like:hover .piece{background-colo= r:#d9d9d9;border-color:#e9e9e9} .connect_widget .like_button_dark .like_button_no_like:hover .corner{bac= kground-position:10px -217px} .connect_widget .like_button_dark .like_button_no_like_pressed,.connect_= widget .like_button_dark .like_button_no_like_pressed .piece{background-= color:#a8a8a8;border-color:#a8a8a8;border-top-color:#8f8f8f} .connect_widget .like_button_dark .like_button_no_like_pressed .corner{b= ackground-position:10px 80px} .connect_widget .like_button_dark .like_button_like .corner{background-p= osition:10px 74px} .connect_widget .connect_text_wrapper{position:relative} .connect_widget div.connect_confirmation_cell{padding:0;margin:0} .connect_widget div.connect_confirmation_cell_like{padding-left:0;positi= on:relative;left:-1px} .connect_widget div.connect_confirmation_cell_no_like{padding-left:7px} .connect_widget .vertical_centering{padding-top:5px} .connect_widget .connect_widget_text{display:block;padding-left:17px;lin= e-height:14px} .button_count .connect_widget_interactive_area .connect_widget_text{padd= ing-left:0;font-weight:bold} .connect_widget .like_button_dark .connect_widget_text,.connect_widget .= like_button_dark .connect_widget_confirmation{color:gray} .connect_widget .like_button_dark .connect_widget_text a{color:#fff} .connect_widget .connect_widget_connect_button{float:left} .connect_widget .connect_bar_widget_interactive_area{float:left} .connect_widget .connect_bar_widget_text_cell{width:400px} .connect_widget .connect_widget_icon{padding:4px 0 4px 4px;vertical-alig= n:middle} .connect_widget a.connect_widget_link_inactive{color:gray;text-decoratio= n:none;cursor:default} .connect_widget a.connect_widget_error_text{color:#a00;font-weight:bold}= .transparent_widget .uiBoxLightblue{background-color:transparent;backgro= und-color:rgba(165, 175, 200, .2)} .transparent_widget .uiBoxWhite,.transparent_widget .fbConnectWidgetFoot= er{background-color:transparent;background-color:rgba(255, 255, 255, .2)= } div.connect_widget_comment_box_nub{background:transparent url(http://sta= tic.ak.fbcdn.net/rsrc.php/v1/yn/r/vAOEfR4cWQM.gif) no-repeat 0 0;height:= 12px;left:-6px;position:absolute;top:6px;width:20px;z-index:3} div.connect_widget_comment_box_upward_nub{background:transparent url(htt= p://static.ak.fbcdn.net/rsrc.php/v1/yv/r/agyQHs6yLID.gif) no-repeat 0 0;= height:12px;left:5px;position:absolute;top:-6px;width:20px;z-index:3} .connect_widget_rtl div.connect_widget_comment_box_nub{background:transp= arent url(http://static.ak.fbcdn.net/rsrc.php/v1/yK/r/R95msRfVr6a.gif) n= o-repeat 0 0;left:-20px} .connect_widget div.connect_widget_comment_box{background-color:#fff;bor= der-color:#000;border-style:solid;border-width:1px 1px 2px 1px;position:= relative;z-index:100} .connect_widget div.connect_widget_comment_box.like_button_dark{backgrou= nd-color:#111;color:#ccc;border-color:#666} .connect_widget div.like_button_dark input.connect_widget_comment_textin= put{background-color:#666;border-color:#666;color:#dedede} .connect_widget div.connect_widget_header_text{float:left;height:20px;ov= erflow:hidden;padding-left:7px;padding-top:3px;width:200px} .connect_widget div.connect_widget_cancel_button{cursor:pointer;float:ri= ght;padding-right:7px;padding-top:3px} .connect_widget div.connect_widget_comment_text_area_div{padding-left:7p= x;padding-top:2px} .connect_widget div.connect_widget_comment_area{padding:8px} .connect_widget .connect_widget_comment_textinput{width:325px} .connect_widget .connect_widget_comment_summary{padding:7px 5px 7px 5px}= .connect_widget .connect_widget_comment_button{margin-left:-1px} .connect_widget .connect_widget_comment_close_button{margin-left:2px} .connect_widget .like_button_dark .connect_widget_comment_close_button{b= ackground-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yE/r/htZktl24= 4wt.png);background-repeat:no-repeat;opacity:.7} .connect_widget .like_button_dark .connect_widget_comment_close_button:h= over{opacity:1} .connect_widget textarea.connect_widget_comment_text_area{height:30px;wi= dth:476px} .connect_widget .connect_widget_image{height:30px;width:30px;padding-top= :3px;vertical-align:bottom} .connect_widget a.name_tooltip_link{display:block} .connect_widget a.name_tooltip_link .uiTooltipWrap:hover{display:none} .connect_widget .connect_widget_name{text-align:center} .connect_widget .connect_widget_sample_connection{float:left;padding-rig= ht:3px;width:30px;padding-top:5px} .connect_widget .connect_widget_user_not_connected{display:none} .connect_widget .connect_bar_widget_sample_connections{float:right} .connect_widget .connect_widget_whats_this{color:#999;font-size: 9px;pad= ding-top:4px} .connect_widget .connect_widget_whats_this a:hover{color:#3b5998;text-de= coration:none} .connect_widget .page_stream img{max-width:120px;height:auto} .connect_widget_like_button .liketext{background:url(http://static.ak.fb= cdn.net/rsrc.php/v1/y7/r/ql9vukDCc4R.png) -1px -33px no-repeat} .connect_widget a.like_button_no_like:hover .piece,.connect_widget a.lik= e_button_no_like:hover{background-color:#eceef5;border-color:#9dacce} .uiTooltipWrap{display:none} .like_button_like .tombstone_cross.custom_disable{background:none} .connect_widget_like_button.like_button_like .liketextwithimage.conn{dis= play:none} .connect_widget_like_button.like_button_no_like .liketextwithimage.disco= nn{display:none} .like_button_like .tombstone_cross img.disabled_icon{display:block} .like_button_like .tombstone_cross:hover img.disabled_icon{display:none}= .like_button_like .tombstone_cross img.hover_icon{display:none} .like_button_like .tombstone_cross:hover img.hover_icon{display:block} .like_button_no_like .tombstone_cross img{height:0;margin:0;padding:0;wi= dth:0} .connect_widget .like_button_like , .connect_widget .like_button_like .piece{background-color:#eee;border-co= lor:#ddd;cursor:default} .connect_widget .like_button_dark .like_button_like , .connect_widget .like_button_dark .like_button_like .piece{background-co= lor:#444;border-color:#555;cursor:default} .connect_widget .like_button_like .corner{background-position:10px -229p= x} .connect_widget .like_button_dark .like_button_like .corner{background-p= osition:10px -223px} .connect_widget .like_button_like .liketext{background-image:none;clear:= right;color:#aaa} .connect_widget .tombstone_cross{background:url(http://static.ak.fbcdn.n= et/rsrc.php/v1/y7/r/ql9vukDCc4R.png) no-repeat 0 -128px;display:block;fl= oat:left;height:12px;margin-right:3px;width:14px;z-index:99} .connect_widget .tombstone_cross_static{cursor:default} .like_button_no_like .tombstone_cross{display:none} .like_button_like .tombstone_cross{display:block} .connect_widget .like_button_dark .like_button_like .tombstone_cross{bac= kground:url(http://static.ak.fbcdn.net/rsrc.php/v1/y7/r/ql9vukDCc4R.png)= no-repeat 0 -156px} .connect_widget .like_button_like .tombstone_cross:hover{background-posi= tion:0 -235px;cursor:pointer} .connect_widget .like_button_like .tombstone_cross_static:hover{backgrou= nd-position:0 -128px;cursor:default} .connect_widget .like_button_simple .like_button_like .tombstone_cross:h= over{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/y7/r/ql= 9vukDCc4R.png);background-position:0 -128px;cursor:auto;height:12px;marg= in-left:0;margin-right:3px;margin-top:0;width:14px} .connect_widget .like_button_dark .like_button_like .tombstone_cross:hov= er{background-position:0 -247px} .connect_widget .connect_button_container .like_button_like .liketext, .connect_widget .connect_widget_connect_button .like_button_like .likete= xt{padding-left:17px} .connect_widget_comment_box div.connect_widget_comment_box_nub{backgroun= d:none} .connect_widget .like_button_dark .like_button_like .liketext{color:#666= } div.connect_widget div.connect_confirmation_cell_like{padding-left:7px} body.plugin{background:transparent;overflow:hidden}
Confirmar
<= /div>
2
1
=
------------vz8vre3LOsirGgAqCZo2LA Content-Disposition: inline Content-Type: image/png Content-Location: http://static.ak.fbcdn.net/rsrc.php/v1/y7/r/ql9vukDCc4R.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAABAAAAEfCAMAAAB/DLYyAAABI1BMVEX////////+ /v40NDSbq8tsg7Pl6fLq7fQ2WJnS2um7u7tmZmbh4eFzirbCyt9kZGTZ2dlERERV VVVRbKQeRYC9yN6+vr5geKyqqqrDw8M7WZji5vDT09Oenp5NTU1jeKN1i7jd3d3H x8fU1NTu7u7e4u5id6LLy8umpqbo6OjP2Oh1dXWJiYm4uLjOzs7b29vp6elof7HA wMCRkZFYapHFzOLy8vKMjIygoKCNoMV+fn6rq6t7j7rl5eW/yuBlZWWuu9W/xduN jY3u8fbT2eji4uKpqam8vLx3d3eoqKh7e3u9vb3u8PbX19dKaKTk5OSKioqkpKQ5 VZS0tLT29vZPaqNVcan6+vq2wNxwg6+MnsNXapCwvttXV1ded65paWmQpMmBnePY AAAAAXRSTlMAQObYZgAAAyRJREFUeF61juWW40oMBtNtO8yMg8zMsMx0men9n2K/ dhyNlBwle5LcmsmPqiOpHZsJryS9bIeCZz3hzwsIcsB6nvdvuOwBOOgPeTc3UB4K hWmC5xV+dGEhegWTW67CZ8O+kN6JDQWLP85fKRmcWWt3wmXroIzlWg3KQyo1TbA2 9Z8L8egVTPiuwmcj+Vn6P3YoJG1SuJ9DkAM2mUwuhctJAAf9oeT1NZSHXG5SWBqd wNFc3oVfolcw+dsSKnw6Gm2iEQYIwUPOmJwIJv5sQ4ZnYqXimx2/wgIujNzYQVdC EGLWg0AES6FR/aEa/TdicyQbywIWNrPFbreYZaG7Cbos1ENYaDlvsRCTAwjbgIft bLGYRaEAR2EBCh5DayTEpCOcAh5Oe1tbPVZavdegxwIUjAsx6Qh/Ah7ONoJg4+wx 1BcDsMgCFOgBkKs8AOGpeDzFy0MCjA+pRAIr6lHgA+G1TqfGix9PJOLjQy0epxVx VH/laT7/VNzIn5/ntSBX9FfaQHjl+LjCSzsA40MlCGiFHZ2eu+qAu36otgdUeWj4 DRn8RE2GF75csdbKid/t8I0EWwkc1g8CERIUxJfOnfSwp9Oqp8lplpyKvk9XZuVn IvL1jxHrKC50iEH4I4SCNgHUiZcDfzl4F7Th+A4GClwWBFkQ/n8yw57JqJ4hp1ly Kvo+XZk3HhG5ITwtFEImTgB9QgYUh1PnBApcFAQJNuZIhoi8TGS00J+fOAHUCRkA nXROoMBFQZBgY46kiciXibQW+vMTJ4A6IQOgk84JFLgoCBK5MZlXQPjqysoqL69W gB5oRT8KykD4Qqm0wEu5BPRAK/pRsAyE36+t3fOyvAb0QCv6UcnJ9wNO+gEygIKB GBaMMe7HJwCbAKHrE3RDf4VQvnSEkjeg1A/eIxQMxLBgjHE/PgHYBAhdn6Ab+iuE 8qXfQPM7ohkGCMHDB2PeiGB+PXonw5FYuTo0F4dXLLwxZuTGBboS9kPMT/v7Smi+ JZqxb6P8hCiHAULw8NyYSxHMl/p7GepiZffWHNzusnBpzMiNA3Ql7IWYT3t7Sij/ TeDTvwLENdsHdW/D3AAAAABJRU5ErkJggg== ------------vz8vre3LOsirGgAqCZo2LA Content-Disposition: inline; filename=likebox.htm Content-Type: text/html; charset=utf-8; name=likebox.htm Content-Location: http://www.facebook.com/plugins/likebox.php?href=http%3A%2F%2Fwww.facebook.com%2Fpages%2FDefinicionABCcom%2F254261611272116&width=250&colorscheme=light&show_faces=true&border_color&stream=false&header=false&height=258 Content-Transfer-Encoding: Quoted-Printable <= title>Likebox
3D"DefinicionABC.=
Confirmar
Te gusta esto.=  · P=C3=A1gina para administradores · Estad=C3=ADsticas<= span class=3D"connect_widget_error_span hidden_elem"> · = ;ErrorTe gusta esto. · P=C3=A1gina para administradores · Estad=C3=ADsticas ·=  Error=
A 4,865 perso= nas les gusta DefinicionABC.com.A 4,= 864 personas les gusta DefinicionABC.com.
------------vz8vre3LOsirGgAqCZo2LA Content-Disposition: inline Content-Type: image/png Content-Location: http://static.ak.fbcdn.net/rsrc.php/v1/yZ/r/AYwC2vHPaWW.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAAfUAAAHJCAYAAACc8KDHAAAXi0lEQVR42uzaLQqA MACAUe9/Di8wDBYVLDaTiOBddDKbGMybLzzGFlc+9lOdRwQACvD7DQAAUQcARB0A EHUAQNQBQNQBAFEHAEQdABB1AMhNHeb4RdQBIBOhW2I/7S9p3UkdADLTDOsj6Gnu +h0AMtWO2x30NHpTB4ACwu6jHAD4/Q4AiDoAIOoAgKgDAKIOAKIOAIg6ACDqAICo A4CoAwCiDgCIOgAg6gAg6gCAqAMAog5wsVcnRwQEQAAAhYhyk4H7SkEMQsDuCkJg RtVk4DlV/egYGpA6ACB1AJA6ACB1AEDqAIDUAUDqAIDUAQCpAwBSBwCkDgBSBwCk DgBIHQCQOgBIHQCQOgAgdQDgT7375xYAQG2Z+vW9CgCgtm+m3i0DAKgtU790iwAA asvUz+08AIDaMvVTOwsAoLZM/dhMAwCoLVM/NJMAAGrL1PevcQAAtWXqu+coAIDa MvXtcxgAQG2Z+uYxCACgtkx9/egHP/bqoAZAGAiAoEAKyIDiq63LHsm5uGQeY2A/ CwC15dS/dQcAUFtOva8rAIDadk59ngEA1JZTf2cLAKC2nVMfLQCA2nLqzzgCACjN 1AHA1AEAUwcATB0AMHUAMHUAwNQBAFMHAEwdAEwdADB1AMDUAQBTBwBMHQBMHQAw dQDA1AEAUwcAUwcATB0AMHUAwNQBwNSFAABTB+Bn195NAIShAIru5xpaWNqKYGXt Ai4gWFg5lyNEYyVY2CkPTnESkgUu+YCoAwCiDgCIOgCIOgAg6gDAJ1E/BwAgOFEH AFEHAEQdABB1AEDUAUDUAQBRBwBEHQAQdQAQdQDgL0U1pTeiDgBBlO2cunF7yPtO 6gAQTN0v+z3oee36HQCCaob1CnqevakDQPywJx/lAMDvdwBA1AEAUQcARB0AEHUA EHUAQNQBAFEHAEQdAEQdDvbqkAAAAAAAyP/Xjgg2qGrqVdXUq6qpV9XUq6qpV1VT r6qmXlVNvaqmXlVNvaqaelU19aqaelU19apq6lXV1KuqqVfV1KuqqVdVU6+qpl5V U6+qpl5VTb2qmnpVTb2qmnpVNfWqaupV1dSrCrt2cAMADAIxbP+puRV4R0byDFEL og4AiDoAIOoA0HaPEXUACITdSx0AAmH3/Q4AgbDbqQNAIOwO5QDA9TsAIOoAgKgD AKIOAIg6AIg6ACDqAICoAwCiDgCiDgCIOgAg6gCAqAOAqAMAog4AiDoAIOoAgKgD gKgDAKIOAIg6ACDqACDqAGPXjk0AhIEAiu6/hwsECxsVbOysRATHyAKRdGJjfeYV j5As8ElygKgDAKIOAIg6ACDqACDqAICoAwCiDgCIOgCIOgAg6gCAqAMAog4AjUY9 51wAgNhEHQBEHQAQdQBA1AEAUQcAUQcARB0AEHUAaEuXti+iDgBRpHEv03q91XM3 dQCIpp+PZ9Dr3vM7AEQ1LGcNel39qQPAD8JuUA4ATL8DAKIOAIg6ACDqAICo3+zV IQEAAADCsP6teQX8xAiAOQCIOgAg6gCAqAMAog4Aog4AiDoAIOoAgKgDgKg7AgBE HQAQdQBA1AEAUQcAUQcARB0AEHUAQNQBQNQBAFEHAEQdABB1AEDUAUDUAQBRBwBE HQAQdQAQdQBA1AEAUQcA7qg3AIy9OrtNIACiIOj8U+RaY27WsMDC71jyRPGkaqli aGjRvkqSJMX3P/X351MAQLae+vwuACBaT32e5wIAovXUX6+5AIBsPfXnqwCAaD31 x/NRAEC0nvr0mAoAyNZTn6YCAKL11O/3ewEA0Xrqt9tvAQDReurjOBYAkK2nfh0L AIjWU79eLwUAROupX87nAgCi9dRPp1MBANF66sfjsQCAaD31w+FQAEC0nvpuvy8A IFtPffdTAEC0nvp2uy0AIFpP/XsYCgCI1lMfhk0BANF66pv1pgCAaD319WpVAEC0 nvpyuSwAIFpPfbFYFAAQzdQBwNQBAFMHAEydP/bqrghBKIrCqEVRlA6C2sAMJOCn BMUODLeBT54762Ht2Q0+ABB1ABB1AEDUAQBRBwBEHQBEHQAQdQBA1AEAUQcARB0A RB0AEHUAQNQBAFEHAFEHAEQdABB1AODnqB8DAFTg8h23AAByO6PefdYAAFITdQAQ dQDg/6L+eC8BAKRWon4/DgCQWol6+5oDAEhN1AGgqqjfhjkAgMxEHQDqivq1nwIA SK1EvXlOAQA7e/V2AiEUREEwzXU1Ch8xeY1yFAbM4Uh9FHQGTbSe+nJcBQBk66nv VwEA0Xrq8z4KAIjWU/8/AQBE66lP2ygAIFtPfR0FACR7p34WABDN1AHgU1P/PQEA BDN1ADB1AMDUAQBTBwBMHQBMHQAwdQDA1AEAUwcAUwcATB0AMHUAwNQBAFMHAFMH AEwdADB1AMDUAcDUAQBTBwBMHQAwdbjZq3echsEgCqOsj21AQUmLkKio2QAbQKKg YjvEhJCnyYMY2iHKlEgkHRk4Vzq2bPlv3HwAov7ffwIAiDoAIOoAgKgDAKIOAH88 6psLAPAHHIWZmZmV3zbqH5+fAQDUllHvPgIAKC2j3nVdAAClZdTX6y4AgNoy6u/r AABKy6iv3lcBAJSWUV+ulgEA1JZRXy4DAPhdx6e3u/x0PqO+WCwCAPh9Jxd3cXnz +M3m/a6zGfX5/C0AgMNwdnWfMU/b5z3OZdTbtg0A4HCcXz9sg765730moz5rAwA4 KBn0/b/PqM9m0wAASsuoTyeTAABKy6iPx+MAAErLqI9GowAASsuoD4fDAABKy6gP Xl8DAKgtoz54CQCgtIx6v98PAKC0jPpz0wQAUFpGvWl6AQCUllHvPfUCAPhixw5O 3AaiAAy7NJdgDMbdBHJzDakglxzCFqAG4grszS2kjJchD8EwkmaHQALKfg++tSRm x2LX8CPvWkb9++trAAC7llF/Pp8BAOxaRv3xeAQAsGuiDgCiDgCIOgAg6gCAqAOA qAMAog4AiDoAIOoAIOoAgKgDAKIOAIg6ACDqACDqAICoAwCiDgCIOgCIOgAg6gCA qAMAfxz18gMA2DlR578T8Yac+3x+vV7fEsV9Xpvv8VfsbO/x/8ntdovRtZ8+f4vW e/9Mg6gj6iuqmP/cinq9PmMeUV5//MOoT7GcaW396XSaimhMxaFV9l5cmzfP864o 2nXDQY8yGfahqLdhf/efaRB1RH1dzK+DUY/IqEcV9dXwRTNjkUx1JKM/h9rlcvl9 b7VybSvA9d8gesdtyOe9m+vDQc/JsI9EPWXQRR1EHVFf87F4GYp6Xv9QfO1FvQ74 VoBz7TKSla2oH4pjJ+z1Pofi2OwZnaj35tCEPDaOR4Peht3X6SDqMGLgKT3N89KJ esxTxfJL8x6L0K5GvY5kHqd+1I/F1Hlir3//eD6fpzxfD3t73719q3uMDfOem2J7 RB1EHYajft8MViuDfS+itZyMey9YG1Fvn3BnnagPTBX1X+yd74tVRRjHxVf7Yl9E kMgi/Qm+SFlkXSRNehFRIJJIFEF0DY1QixRBpRdbRGsXjdU2tR8Iaq5i27IlynaT Ag13W9pi1X74wmhjNTZXK+jF8vTd0YHhYe7s3OOd49XzHfg45zxnzjlzdD2ffebO ORdCFz0Ur8XuP7Zf8rrPnl9CBFDOhFDqhCTFCmqHQcncg5XWToOSeR2kXi3bDUm9 InGlgn2nEUvgXJVapF7t4wEdD42MdHd3i38bf0YJodQJqU3qfYZ4qfcaoqUeP/yu s1y7HpA6CJS4Xxr05Lnw8Hu4z1Uz92pS37JliyxYsEBQC6VOCKVOyF0odX/xfKZe dUjePXaM0CPFnmminJJ4YEjfL3RBsWKn1AlpUKmfO3dOTp48KRrEJWUnuz7+Rl7a +qloEE/+ud6pU6fawDEwZWI5sW5bTxs4BnI7L66xCewAN4DcrLGOeOJrbQI7wA0g N2usI14Hqdv1x33PrWupO+tPeKR+3p397mTdEVJXGboHLcmQ0CPFnuWRNt1H77KW uha6LVbslDoh+ZBd6OnFroWeu9ghs0VgyqEtJ6EvAlMObTlJfQCIh4HE1zsAxMNA HSbKtYCSkryYdtjmmSjXAp4FfSp+HrTk/dY3LfQQHqFbgsdWsaq/hKg4jhkWuhY7 pU7IHZb68PCwkncc2O+2RPvhJ98qeceB/aTOkpvS5CT1KU0OQl/pSHwjmGtqG8P2 RNe60pH4RjDX1DaG7TVKHdxzr3Kt6FhA7BUtdJDoNbFeoQfFTqkTcgelXk3Y4+Pj Rp5jY2MyODjoE/ttydUn7L0Hz8hPv46Z46KWKhk8pZ79Wvc7Ap9rYqid2P5E17rf Ebg573TtxPZT6g377nct9Bix81E4QhpB6joDt2KfBmJPInWdgVuhO0PzlHr9rnVn MFPH9kTXujOYqWM7pd64UldCjxE7pU5IA0jd3NgnJibEHZY/e/asWMGnlPqVKxPi Dsu/tftLm7GnlvpFJfWLzjYBkkh0F5XULzrbBEgCqS8HEmB5omtdDiTA8qL/JyWE kLpLvVKpiI1j2caN6CcnJ5NJfdMb/WLjWHZFb0gs9TngqhE6ahPPR+pzwFUwBex5 U0t9NhjyC93EZye61tlgyC90E7fnzZ1SqSTXr1/PBPY1/0YzlIcMgWL7kbXYfoj4 Wbz6PQF/cBIbIQUcfreZ+sjIiLnZI2O3n63nkql/PvCjHY7PK1OfB8ZdqaMWH3UW 3Tww7kodtfhIOFlOUk+S05PlPNRy3tg3slXsV5YGqOBYRrqQYiahT+8b6Kc5dmdn p4CothnE7vSjqtCHUFPqhPAzdeCAYfhcPlPXvLP3dDKpQ2RL9PB7HlKHyJbo4feU Utd4svUhsy0xnmw903kloqj3pGvMdiXUJEK3JYHYVT+8Qn/9tbe/kFtS5+NmhBRR 6sDMdkdmLsjaTW2FnkLq+nn0Hy/8ZrL2kdHLYoWuqZPY5oOroUlyiTL0+XbY3SXx 8Lu+9nYl9facpN6upN6eSOpW3kE8Qk0h9CRid/sRkLrYgmXLsaLfEAkpiNTDpJd6 PCkmyGlSSV1n6Bot9YRi3wNkus75LXp7gAB93vyl7hdqPYWeQuzV+mGG2oFYfAVx zkwnhC+fufdePqMlrsnjUTZNzq+LbQZDoDlnqTeDIdDcQFLXQk0g9IxiDwtdS13e PXDGCp1SJ6Tor4klxcIKPW+s0BtO6lrs2YWeQOxa6H6pr9l2nFInhFInpAHJPvv9 dMT3kJ+OEGoSoWuxZ+pHWOoGTJKT0V/GtdTPF/3nhxBKnZAGRpzixjHDXX9vuMVs q9cz5o7QM4m9Hv3Qn6mLmPWHQZ+NgfNgftF/Xgih1AlpcHxSd7/sRH+lKCj83xkh hFInpKGH5ZXUfWKvUOqEEEqdEEIIIZQ6IYQQQih1QhTZvoL0yIsPlICAkq/9ihUr eiM4btqijmnv6wfiraAEOkAXOKSOi3UT7wAl0Gr35WteCSGUOqHUb0pd5O/PxNTZ pX7ItEVdq9SxvhCUA21DfSiDhZQ6IYRSJ4WQ+qZNm8SVns7SBz9aaaSO2mTrGaXe Zdqijpe6FXq4bWQfFlLqhJBCZWlhGusYi1d39wCpkR7sm6qvaN/o7fxCt7htdJZu MevZpN5h2qKuUerlOkm9TKkTQm59gcpReWTVrprAPpKyY0+uPdAHJJK+6X2eWn9Y sxb8rGJ3i9QlC5S6EXm3FboGbbxZ+stLH1TZes1SL5m2qGOljro1qm18H1qLfkMj pOiYPyBp6Xy/UgtG7Ppga7buk/ZV5SjQVmaQuly6PCET1/4NgjZG7ErqzUA2vHlC nn61R7B8vyv1Z55ffx+YB2a5uC8qwbPK1ZYts3zL7jGMGDylvb3dIAJ5L14sDiYe I/XnNh+VP//6R2xpZKlbweYo9SFH6o+5NdroLN1K3Zut1yLUDKIu1VnqpaLf0Agp Olbqsr18oha8UoesZd/R76NA2xmlfnnsWgw+qR/Yvusr2X3wO0Et0+uO0Be9sG6z rNuwTbD8KGiqRerum8c8y1FSX7p0qSxbtsxsx7JdN2A5RupW6JFSN0W/cEUcCTaD H4BobsWbrOCwPAAkwEAoY9YSRqwF9IL/btWtar3FuSbf+QfsNt2//v5+T6ausnQl dZ2t1zL0nWFIvaPOUu8o+g2NkKKjpS62/D4+KYf7hu+41Ds/+NrHTFI3QresfuWI INYMcbesXb9VLly6YsCyTMdcqUPMBkjPtzzT9tyG322JGH4Xj9QFfXWl3gvEMjo6 qmXY40hTyuVyNUx7N2MGolESPgUkwGkldQlNgrNZeYTUjcA1OluvZZJahslvXXWW elfRb2iEFJ3/27uf2CiqOIDjifFEeuLgkYMHz4SDB49GDxLv1gsaRIxGD+2BWIl/ QIlRW21SNUYSof5rNmpbQTMQMdYQjaD1D0VREi0IbWlJ1bZIU5Py8/de9iUvz5nX t0Mt0+53kk92Zne2bRrYb9/bmdkw6nLgyEn57sfzcunygpjlxKlxefbVI8lRT13C qPc/sPugEidhpJ4e9XYb9XUa7ls6nuwUF3Wzbu5b4el3N9VuH3dT8dHp9/JR9xc/ 6FY9gnuUJHjURTMijLoU8SK8oCRisZEZArcdi7o/Sg9H6uFovZHTyUqcpta3zFHv a/YXNKDZxabfbdDN8tfsvHTtHWok6kUj9FjU5czQsDjeSD0mKeqtbTUT9es13Lc+ /nS3uKibdXPfCk+/u6l2+7i5DUSjXrDkRT1c/KBbfgRTY+2CrKPy3Ftvv9SvN60k YsL/er29vfY2b7uBqHsBj4/WG7nwS5kLyixz1Aea/QUNaHaF0+/DJ8/Z7f5DJ8ym xvNP2dV9eLlH6vGolx+p3/ngUx/ZoJtbs61MuLd19ewXF/WXX3/XRL294tPv4Xvp llvcdsJI3f58YdT7+/vtYyaABezjidPvZUbq7ymJeKvBqGeRqGf1qB98e9sNshSz X7O/QABY5VHPhk7ZgJtlYmrW3nf0+G92+/3shzIj9dJRH/nlwpJB133yor5Op9xt 1Lfs+MBEfUM96pPDI6Pioj48csZE/eK1OPrdn34P/Y/vqduwh1FPCbCRMlIviPpm 97ycqN8cmYJfVBvTo572B5MuLWp9gpZmf4EAsEam3z/94rToYoJuty/P/yNnx/4o PVLXU9hC0ajvfGbQxNqn0XrND3rReerX3dVW+/q5vV/aqL+475g5UG5U72+ph11c 1M26DXr1p9/LR135UXdhL4h6j9pU395otvOinmVZX61Wy72NjdTDqHv7bVeSo93t VzbqXBsdQFNHfWp6TtzU++i5aVm8csW9v27WS43UXdS/+em8ZfYbG5+KRd36/sBn 4nvz3g4bdj/q/ohKo32TBl1c0JUf9on7dg4+ofEe9aI+mhP1q1Gxo9/j6lHflbq/ P70dkXmxzgqinoW/K71vq5pRoubMdqPft9n/MwNA7nvqM3Pzdn3g8IjZtOuHPv/Z rZceqbugn/193D03jHqU2ccE3IXdTbs7GvWxrjeO2ZCHunuPy44XPpGO5wfERf2r b0+70fpL6sYqRf32rfvkkT0fF3KLf58+Z1VfUU7DvF49pjb8dz9G4QCwwhefiUc9 DHrBKW1hyH12mt2FPSfqJuCFXnlnWFrbazbovg+zoybsvxL16lz+lagDwFVEvW33 YHLQdd+GLxOrjxUG3T94yY96z+btknbgUnrUdR8X8/CAOVk7H+hCBAGAD3Spu63V aewDXfR9chPuQik/kIm6C7qLeKo77t9v3nNfUuuWhyR09z0PS7P/YwAArIGoX/p7 QSYvzloTkzNyYcqy6+7+kD6nfATjUS8R9PipSpy+BADg89QBAMCqYZbYg5s6OzvF rJtbs128L38gAABQyai7oJvFXVDFhZ2oAwBQzahHg+5H3Q87UQcAoMJRD4MeRj0M O1EHAKBaUY8GPYx6GHaiDgBApaIeBj0e9TDsRB0AgGpE3Q96NOqxsBN1AACuLT/o CVGPh73Zf5kAABB1AADA9DsAAOBAOQAAOKWNU9oAAODiMwAAgMvEAgAAPtAFAAA+ epWPXgUAYJUgxAAArBX/Ann5P7V00sG6AAAAAElFTkSuQmCC ------------vz8vre3LOsirGgAqCZo2LA Content-Disposition: inline; filename=ELGnwSANHHU.css Content-Type: text/css; charset=utf-8; name=ELGnwSANHHU.css Content-Location: http://static.ak.fbcdn.net/rsrc.php/v1/yu/r/ELGnwSANHHU.css Content-Transfer-Encoding: 8bit /*1324594170,169776319*/ .fbEmu .body .fbEmuLink{color:#333} .fbEmu .body .fbEmuLink:hover{text-decoration:none} .fbEmu .body a.signature{color:#3b5998;display:inline} .fbEmu .body a.signature:hover{text-decoration:underline} .fbEmu .hover:hover .title .fbEmuLink{text-decoration:underline} /* @noflip */ .fbEmu .forceRTL{direction:rtl;text-align:right;display:block} /* @noflip */ .fbEmu .forceLTR{direction:ltr;text-align:left;display:block} .fbEmu .adInfo a.identity{color:gray;display:block;white-space:nowrap} .fbEmuHidePoll .undo{float:right;padding-left:2px;padding-bottom:2px;margin-bottom:3px;margin-left:5px} .fbEmuHidePoll .fbEmuXTitle{font-weight:bold} .fbEmuHidePoll .fbEmuXSubtitle{margin-bottom:10px} .fbEmuHideThanks .fbEmuXThanksTitle{font-weight:bold;margin-bottom:10px} .fbEmuLegacy .fbEmuHidePoll .otherdiv .other{width:141px} .fbEmuBlock .fbEmuHidePoll .otherdiv{margin-left:20px} .fbEmuEgo .fbEmuHidePoll .otherdiv .other{width:206px} .emu_x{float:right} .emu_x .uiSelectorButton{opacity:0} .old_x{opacity:0} .fbEmu:hover .old_x,.fbEmu:hover .uiSelectorButton,.emu_x .openToggler .uiSelectorButton{opacity:1} .fbEmuBlock .title{font-weight:bold;line-height:13px;margin-bottom:4px;margin-right:20px} .fbEmuEgo .body .fbEmuLink{line-height:13px} .fbEmuPremium .inline{padding-top:4px} .fbEmuPremium .body{line-height:13px} .fbEmuPremium .body .fbEmuLink{display:block} .fbEmuPremiumFan .action{padding-top:4px} .fbEmuMainBody .firstPassiveName{font-weight:bold} .fbEmuPremium .fbEmuStreamAttachment{margin-bottom:3px} .fbEmuPremium .fbEmuStreamAttachment.fbEmuStreamPhotoStory{margin-bottom:2px} .fbEmuStreamAttachment.fbEmuStreamEventStory a.fbEmuStreamTitle,.fbEmuPicStory a.fbEmuStreamTitle,.fbEmuLikeMessage{color:gray} .fbEmuPremium .fbEmuStreamAttachment.fbEmuStreamLinkStory img,.fbEmuPremium .fbEmuStreamAttachment.fbEmuStreamEventStory img{max-height:75px;max-width:75px} .fbEmuMarketplace .fbEmuStreamAttachment.fbEmuStreamLinkStory img,.fbEmuMarketplace .fbEmuStreamAttachment.fbEmuStreamEventStory img{max-height:50px;max-width:50px} .fbEmuStreamAttachment.fbEmuStreamLinkStory .fbEmuLink{margin-right:5px} .fbEmuStreamAttachment.fbEmuStreamLinkStory .fbEmuStreamTitle,.fbEmuPicStory a.fbEmuStreamTitle,.fbEmuStreamAttachment.fbEmuStreamEventStory .UIImageBlock_Content a{font-weight:normal} .fbEmuMarketplace .fbEmuStreamAttachment.fbEmuStreamPhotoStory img,.fbEmuMarketplace .fbEmuStreamAttachment.fbEmuStreamPhotoStory i{max-height:90px;max-width:118px} .fbEmuPremium .fbEmuStreamAttachment.fbEmuStreamPhotoStory img,.fbEmuPremium .fbEmuStreamAttachment.fbEmuStreamPhotoStory i{max-height:128px;max-width:168px} .fbEmuStreamStory .uiVideoThumb.fbEmuLargeThumb{margin-right:0} .fbEmuMarketplace .uiVideoThumb.fbEmuLargeThumb img{display:block;height:72px;max-height:72px;max-width:128px} .fbEmuPremium .uiVideoThumb.fbEmuLargeThumb img{height:104px;display:block;max-height:104px;max-width:185px} .fbEmuStreamStory .uiStreamMessage{font-weight:normal} .fbEmuStreamStory .fbEmuStreamTitle{display:block;font-weight:bold} .fbEmuStreamStory .fbEmuStreamBody{color:#666} .fbEmuStreamStory .uiPhotoThumb{display:inline-block} .fbEmuStreamStory .uiVideoThumb{display:inline-block;margin-right:5px} .fbEmuStreamStory .uiVideoThumb img{height:auto} .fbEmuStreamStory .uiVideoThumb.fbEmuSmallThumb img{max-width:60px} .fbEmuStreamStory .fbEmuStreamAttachment .uiPhotoThumb img{margin:3px} .fbEmuStreamStory .fbEmuAttachmentFrame{background-color:#000;text-align:center} .fbEmuStreamStory .fbEmuAttachmentFrame .uiVideoThumb{display:inline-block;margin:0} .fbEmuStreamStory .textOnly{width:175px;word-wrap:break-word} .fbEmuStreamStory .textWithMedia{max-width:125px;word-wrap:break-word} .fbEmuStreamAttachmentOffset{border-left:2px solid #ccc;padding-left:4px} .fbEmuStreamAttachmentOffset .fbEmuPicStory,.fbEmuStreamStory .fbEmuStreamAttachmentOffset .textOnly{border-left:0;padding-left:0} .fbEmuStreamStory .uiUfi .ufiItem{padding:3px 3px 2px} .fbEmuStreamStory .uiBlingBox .text{line-height:normal} .fbEmuStreamStory .uiBlingBox{margin-right:-1px;margin-left:-1px} .fbEmuStreamStory .uiBlingBox .img{margin-top:-1px} .fbEmuStreamStory .fbTimelineFeedbackComments{float:left;padding-right:3px} .fbEmuStreamStory .fbTimelineFeedbackLikes{float:left;padding-right:3px} .fbFeedTickerStory .fbEmuStreamStory .fbEmuStreamAttachment img{width:32px;height:32px} .fbFeedTickerStory .fbEmuStreamAttachment .UIImageBlock_Content{height:32px} .fbEmuStream .title{font-weight:bold;line-height:13px;margin-right:20px} .fbEmuStream .fbEmuContext{margin-bottom:2px} .fbEmuStream .action{margin:2px 0 1px 0} .fbEmuStream .body{line-height:13px} .fbEmuStreamBlockQuote{border-left:2px solid #ccc;padding:0 0 3px 8px} .fbEmuStream .text_exposed_link{padding:0 0 0 5px} .fbEmuStreamAttribution{color:gray} .bassLike{margin-top:2px} .fbEmuStreamStory{padding-top:1px} .fbEmuComboList .fbEmuComboListHeader{background-color:#ccc;border-top:1px solid #ccc;margin:13px 0 8px 0;padding:0;position:relative} .fbEmuComboList .fbEmuComboListHeader .fbEmuComboListHeaderText{background-color:#fff;color:#999;font-size: 9px;font-weight:bold;left:0;margin-left:32px;padding:0 8px;position:absolute;top:-6px} .fbEmuStreamComboStory .UIImageBlock_Content.fbEmuMainBody{height:32px;vertical-align:middle} div.fbEmuEgo .image .img{max-height:72px;max-width:100px;padding-top:3px} .fbEmuEgo .action{margin-top:5px} .fbEmuEgo{line-height:13px} .fbEmuEgo .fbEmuHide{margin-top:0 !important} .fbEmuEgo .title{font-weight:bold;margin-bottom:0 !important} .fbEmuEgo .image{width:100px;display:block} .fbEmuEgo .image_body_block{padding-top:3px} .fbEmuEgo .action{color:#777} .fbEmuEgo .action .fbEmuContext .fbEmuLink{color:#777} .fbEmuEgo .action div.UIImageBlock_Content{padding-top:1px} .fbEmuTracking{position:absolute;visibility:hidden} .fbEmuStreamStoryAttachment{padding-left:32px} .fbEmu .uiUfi{width:auto} button.async_saving .default_message, a.async_saving .default_message, form.async_saving .default_message, .saving_message{display:none} .default_message, button.async_saving .saving_message, a.async_saving .saving_message, form.async_saving .saving_message{display:inline} .async_throbber .async_saving{background:url(http://static.ak.fbcdn.net/rsrc.php/v1/yb/r/GsNJNwuI-UM.gif) no-repeat right;padding-right:20px} .async_throbber_left .async_saving{background:url(http://static.ak.fbcdn.net/rsrc.php/v1/yb/r/GsNJNwuI-UM.gif) no-repeat left;padding-left:20px} form{margin:0;padding:0} label{cursor:pointer;color:#666;font-weight:bold;vertical-align:middle} label input{font-weight:normal} textarea,.inputtext,.inputpassword{border:1px solid #bdc7d8;font-family:"lucida grande",tahoma,verdana,arial,sans-serif;font-size: 11px;padding:3px} select{border:1px solid #bdc7d8;font-family:"lucida grande",tahoma,verdana,arial,sans-serif;font-size: 11px;padding:2px} .inputtext,.inputpassword{margin:0;padding-bottom:4px} .inputradio{padding:0;margin:0 5px 0 0;vertical-align:middle} .inputcheckbox{border:0;vertical-align:middle} .inputbutton,.inputsubmit{border-style:solid;border-width:1px;border-color:#d9dfea #0e1f5b #0e1f5b #d9dfea;background-color:#3b5998;color:#fff;padding:2px 15px 3px 15px;text-align:center} .inputsubmit_disabled{background-color:#999;border-bottom:1px solid #000;border-right:1px solid #666;color:#fff} .inputaux{background:#f0f0f0;border-color:#e7e7e7 #666 #666 #e7e7e7;color:#000} .inputaux_disabled{color:#999} .inputsearch{background:#fff url(http://static.ak.fbcdn.net/rsrc.php/v1/yV/r/IJYgcESal33.png) no-repeat left 4px;padding-left:17px} body{background:#fff;font-size: 11px;font-family:"lucida grande",tahoma,verdana,arial,sans-serif;color:#333;line-height:1.28;margin:0;padding:0;text-align:left;direction:ltr;unicode-bidi:embed} h1,h2,h3,h4,h5,h6{font-size: 13px;color:#333;margin:0;padding:0} h1{font-size: 14px} h4,h5{font-size: 11px} p{margin:1em 0} a{cursor:pointer;color:#3b5998;text-decoration:none} a:hover{text-decoration:underline} img{border:0} td,td.label{font-size: 11px;text-align:left} dd{color:#000} dt{color:#777} ul{list-style-type:none;margin:0;padding:0} abbr{border-bottom:none} hr{background:#d9d9d9;border-width:0;color:#d9d9d9;height:1px} .clearfix:after{clear:both;content:".";display:block;font-size:0;height:0;line-height:0;visibility:hidden} .clearfix{zoom:1} .datawrap{word-wrap:break-word} .word_break{display:inline-block} wbr:after{content:"\00200B"} .ellipsis{overflow:hidden;text-overflow:ellipsis;-o-text-overflow:ellipsis;white-space:nowrap} .img_loading{position:absolute;top:-9999999px} .aero{opacity:.5} .column{float:left} .center{margin-left:auto;margin-right:auto} #facebook .hidden_elem{display:none !important} #facebook .invisible_elem{visibility:hidden} #facebook .accessible_elem{left:-9999px;position:absolute} .direction_ltr{direction:ltr} .direction_rtl{direction:rtl} .text_align_ltr{text-align:left} .text_align_rtl{text-align:right} .DOMControl_placeholder{color:#777} .no_js .DOMControl_placeholder{color:#000} body{overflow-y:scroll} .mini_iframe,.serverfbml_iframe{overflow-y:visible} .auto_resize_iframe{height:auto;overflow:hidden} .pipe{color:gray;padding:0 3px} #content{width:auto;padding:0;margin:0} .profile #content,.home #content,.search #content{min-height:600px} .UIStandardFrame_Container{width:960px;padding:0;margin:20px auto 0} .UIStandardFrame_Content{width:760px;float:left;margin:0;padding:0} .UIStandardFrame_SidebarAds{width:200px;padding:0;margin:0;float:right} .UIFullPage_Container{width:940px;padding:0 12px;margin:20px auto 0} .empty_message{font-size: 13px;line-height:17px;padding:20px 20px 50px 20px;text-align:center;background:#f7f7f7} .see_all{text-align:right} .standard_status_element{visibility:hidden} .standard_status_element.async_saving{visibility:visible} img.tracking_pixel{height:1px;position:absolute;visibility:hidden;width:1px} #dropmenu_container{display:block;height:0;margin:0 auto;padding:0;position:absolute;width:964px;z-index:300} .inlineBlock{display:inline-block;zoom:1} .text_exposed_root{display:inline} .text_exposed .text_exposed_show{display:inline} .text_exposed_show, .text_exposed .text_exposed_hide{display:none} .text_exposed_link{font-size: 9px;padding:0 12px 0 0;white-space:nowrap} .text_exposed_link_icon{margin:0 0 -1px 4px} .text_exposed .text_exposed_link{display:none !important} button.as_link{background:none;border:none;color:#3b5998;cursor:pointer;font-family:"lucida grande",tahoma,verdana,arial,sans-serif;font-size:100%;margin:0;overflow:visible;padding:0;text-align:left;width:auto} button.as_link:hover span,button.as_link:focus span{text-decoration:underline} button.as_link .button_img{margin:0 6px 0 0;vertical-align:text-bottom;width:16px;height:16px} .homeFixedLayout #rightCol{padding-top:56px} .home_right_column .fbFeedTicker{border-bottom:1px solid #c1c1c1;box-shadow:0 1px 0 rgba(0, 0, 0, .10)} .fbFeedTicker{width:244px} .homeFixedLayout .uiOverlayArrowRight{margin-right:3px} .homeFixedLayout #rightCol .uiSideHeader,#rightCol .tickerHeader{border-bottom:1px solid #d9d9d9;border-top:1px solid #e5e5e5;margin-bottom:8px;padding:3px 8px} .homeFixedLayout #rightCol .uiSideHeader a{color:#6d84b4} .homeFixedLayout #rightCol .tickerHeader{margin-bottom:0} .homeFixedLayout #rightCol .tickerHeader a{display:block} .homeFixedLayout #rightCol .tickerHeader a .img{display:block;padding-top:2px} .tickerStoryBlock .UIImageBlock_Content{max-width:183px} .fbFeedTicker.disconnected{opacity:.3} .fbFeedTicker .fbFeedTickerStory{background:#fff no-repeat 15px 16px;border-bottom:1px solid #fff;border-top:1px solid #e9e9e9;line-height:14px;outline:0;padding:6px 14px 6px 2px;position:relative} .hidden_rhc_ticker{display:none} .adsOnTop .fbCurrentThickline,.tickerOnTop .fbCurrentThickline{display:none} .adsOnTop div.fbCurrentThicklineForce,.tickerOnTop div.fbCurrentThicklineForce,#pagelet_current .displayedTickerToggleWrapper{display:block} .sidebarMode #pagelet_current .tickerLineToggle,.sidebarMode #pagelet_sidebar .tickerLineToggle,.sidebarMode #pagelet_rhc_ticker .tickerLineToggle,.canvasTicker #pagelet_ticker .tickerLineToggle{display:none} .tickerToggleWrapper{position:relative} .tickerLineToggle{display:none} .displayedTickerToggleWrapper .tickerLineToggle{background-color:#fff;display:block;height:7px;position:absolute;right:6px;top:-6px;width:20px;z-index:3} .displayedTickerToggleWrapper .tickerLineToggle .tickerLineToggleNormal{padding-left:4px} .displayedTickerToggleWrapper .tickerLineToggle .uiLoadingIndicatorAsync{padding-left:2px} .displayedTickerToggleWrapper .async_saving .tickerLineToggleNormal{display:none} .canHaveFixedElements #fixed_scrolling_container .displayedTickerToggleWrapper,.canHaveFixedElements .fixed_elem .displayedTickerToggleWrapper{margin-top:15px} .fbCurrentThickline,.sidebarMode .fbCurrentThickline{background:#e9e9e9;border-top:1px solid #ccc;display:block;height:1px} .tickerOnTop .fbFeedHeadThickLineCapable{border-top:1px solid #ccc} .fbFeedTicker .tickerStoryHidden .tickerStoryBlock{display:none} .fbFeedTicker .fbFeedTickerStory .uiProfilePhoto{margin-right:8px} .fbFeedTicker .fbFeedTickerStory .uiFacepile .uiProfilePhoto{margin-right:0} .fbFeedTicker .fbFeedTickerStory .tickerFeedMessage,.fbFeedTicker .fbFeedTickerStory div.tickerFeedMessage h6{display:inline;font-size: 11px;font-weight:normal} .fbFeedTicker .fbFeedTickerStory .actorName,.fbFeedTicker .fbFeedTickerStory .actorDescription{display:inline} .fbFeedTicker .fbFeedTickerStory .removeStory{float:right;margin-right:-5px} .fbFeedTicker .fbFeedTickerStory .fbEmuHidePoll{padding-left:5px} .fbFeedTicker .tickerStoryClickable{cursor:pointer} .fbFeedTicker .tickerStoryHidden{cursor:auto} .fbFeedTicker .fbFeedTickerStory .uiStreamPassive,.fbFeedTicker .fbFeedTickerStory .tickerAttachmentBodyText,.fbFeedTicker .tickerStoryClickable a,.fbFeedTicker .tickerStoryClickable .passiveName,.fbFeedTicker .tickerStoryClickable .token{color:#333;outline:0;text-decoration:none} .fbFeedTicker .tickerStoryActive,.fbFeedTicker .tickerStoryClickable:hover{background-color:#eceff5 !important;border-bottom-color:#eceff5 !important} .fbFeedTicker .tickerStoryClicked,.fbFeedTicker .tickerStoryClicked:hover,.fbFeedTicker .tickerStorySelected,.fbFeedTicker .tickerStorySelected:hover{background-color:#d8dfea !important;border-color:#a8b2ce !important} .fbFeedTicker .tickerStoryHidden,.fbFeedTicker .tickerStoryHidden:hover{background-color:#fff !important;border-bottom:1px solid #fff !important;border-top:1px solid #e9e9e9 !important} .fbFeedTicker .tickerStoryFetching.tickerStoryActive{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yk/r/LOOn0JtHNzb.gif)} .fbFeedTicker .tickerStoryFetching.tickerStoryActive .UIImageBlock_Image{visibility:hidden} .fbFeedTicker .scrollTopPrompt{background:#e7e9ef url(http://static.ak.fbcdn.net/rsrc.php/v1/yU/r/n93MoBZD7fU.png) center 3px no-repeat;box-shadow:rgba(67, 74, 90, .3) 0 1px 0;cursor:pointer;height:10px;position:absolute;width:244px;z-index:1} .fbFeedTicker .scrollTopPrompt:hover{background-color:#e1e2e9} .home_right_column .fbFeedTicker .scrollTopPrompt{background:#fbfbfb url(http://static.ak.fbcdn.net/rsrc.php/v1/yU/r/n93MoBZD7fU.png) center 3px no-repeat;box-shadow:rgba(0, 0, 0, .15) 0 1px 0} .home_right_column .fbFeedTicker .scrollTopPrompt:hover{background-color:#f2f2f2;box-shadow:rgba(0, 0, 0, .18) 0 1px 0} .fbFeedTicker .fbFeedTickerStory .attachmentLink{border-left:2px solid #ccc} .fbFeedTicker .attachmentPhotoOuter{width:54px;height:34px;border:1px solid #ccc;padding:2px;float:left;margin-left:3px} .fbFeedTicker .attachmentPhotoOuter:first-child{margin-left:0} .fbFeedTicker .tickerPhotoAttachment{display:none;overflow:hidden} div.fbFeedTicker .tickerStoryClickable .uiTooltipWrap{display:none} .fbFeedTicker .attachmentPhotoInner{overflow:hidden;width:54px;height:34px} .fbFeedTicker .attachmentPhoto{width:54px} .fbFeedTicker .highlightedStory{background-color:#fff9d7 !important;border-color:#e2c822 !important;padding:10px 5px;text-align:center} .fbFeedTicker .noTimestamps .ticker_timestamp{display:none} .fbFeedTicker .tickerSpamMenu{padding-left:5px;background:transparent !important} .fbFeedTicker .uiStreamInlineReplaceList{margin-left:15px;margin-top:5px} .tickerNUXDialog{margin-top:50px} .fbFeedTicker .fbFeedTickerStory.tickerNuxStory{background-color:#f4f4f4;border-bottom-color:silver;border-top-color:#ccc;box-shadow:rgba(0, 0, 0, .1) 0 1px 0;margin:-2px 0 -15px 0;padding:8px 8px 8px 10px;z-index:10} .tickerInlineOverlay{background-color:#fff;border:1px solid #ccc;border-color:rgba(0, 0, 0, .2);border-radius:2px;border-right:none;box-shadow:5px 0 10px 10px #eceff5;color:#6d84b4;display:none;height:17px;margin-top:-12px;padding:3px 10px 0 6px;position:absolute;right:0;top:50%} .fbFeedTicker .tickerStoryActive .tickerInlineOverlay{display:block} .fbFeedTicker .tickerStorySelected .tickerInlineOverlay{box-shadow:5px 0 10px 10px #d8dfea} .tickerInlineOverlay:hover{border-color:#7489b6;border-color:rgba(59, 89, 152, .55)} .tickerInlineOverlay:active{background-color:#f9fafc;background-color:rgba(249, 250, 252, .9);border-color:rgba(59, 89, 152, .5)} .tickerInlineOverlayDisabled{background-color:#fff !important;border-color:rgba(0, 0, 0, .2) !important} .tickerInlineOverlayLink{display:none} .canvasTicker .tickerInlineOverlayLink{display:none !important} .tickerActionBottomButton{display:none !important} .tickerActionExpandableButton{margin-top:-9px;position:absolute;right:7px;top:50%} .tickerActionExpandableButton .tickerActionButtonLink{background-color:#f8f8f8;background-image:-o-linear-gradient(bottom, #f0f0f0, #fff);box-shadow:0 1px 0 rgba(0, 0, 0, .10);height:16px;padding:3px 0 1px 20px;width:0} .tickerStoryClicked .tickerActionExpandableButton .tickerActionButtonLink{background-color:#fff;background-image:-o-linear-gradient(bottom, #fff, #f0f0f0)} .tickerActionExpandableButton .tickerActionVerb{color:#3b5998;display:none;font-weight:bold} .fbFeedTickerStory:hover .tickerActionExpandableButton .tickerActionButtonLink,.tickerStoryActive .tickerActionExpandableButton .tickerActionButtonLink{width:auto} .tickerStoryActive .tickerActionExpandableButton .tickerActionVerb,.fbFeedTickerStory:hover .tickerActionExpandableButton .tickerActionVerb{display:inline} .tickerActionExpandableButton .tickerActionIcon{position:absolute;left:6px;top:6px} .tickerActionButtonLink{background-color:#fff;border:1px solid #96a2c4;border-radius:3px;display:block} .tickerActionButtonLink .tickerActionVerb{padding-right:4px} .fbFeedTicker .tickerStoryWithIcon{padding-right:18px !important} .fbFeedTicker .tickerStoryWithButton{padding-right:33px !important} .fbFeedTickerStory .tickerVisitIcon{display:none;margin-top:-3px;opacity:.7;position:absolute;right:7px;top:50%} .fbFeedTickerStory:hover .tickerVisitIcon{display:block} .tickerMusicButtonImg{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yO/r/OuziOid04jS.png);background-repeat:no-repeat;background-position:-93px -90px;height:11px;width:9px} .tickerNewsButtonImg{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yO/r/OuziOid04jS.png);background-repeat:no-repeat;background-position:-81px -92px;height:11px;width:11px} .tickerVideoButtonImg{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yO/r/OuziOid04jS.png);background-repeat:no-repeat;background-position:-81px -104px;height:11px;width:11px} .tickerActionButtonImg{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yO/r/OuziOid04jS.png);background-repeat:no-repeat;background-position:-93px -102px;height:10px;width:10px} .tickerActionExpandableButton img.tickerGameButtonImg{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yO/r/OuziOid04jS.png);background-repeat:no-repeat;background-position:-81px -77px;height:14px;width:11px;top:5px} .fbCurrent .fbCurrentHeader{margin-bottom:6px} .fbCurrent .fbCurrentStory{padding:3px 5px} .fbCurrent .fbCurrentStory:hover{background-color:#eceff5;cursor:pointer} .fbCurrent .fbCurrentStory:hover a{text-decoration:none} .fbCurrent .fbCurrentStory .fbCurrentTitle{color:#3b5998} .fbCurrentContent .fbCurrentFooter{text-align:center} .fbCurrentContent .fbCurrentActionLink{color:#6d84b4} #chatFriendsOnline .chatGoOnlineLink span{background:url(http://static.ak.fbcdn.net/rsrc.php/v1/yW/r/AebrcwrBeG6.png) no-repeat right 3px;padding:0 12px 0 2px} #chatFriendsOnline .chatGoOnlineLink,#chatFriendsOnline .chatGoOnlineLink:hover,#chatFriendsOnline .chatReconnectLink,#chatFriendsOnline .chatReconnectLink:hover{margin:3px 0 0 7px;text-decoration:none} #chatFriendsOnline .fbChatReconnecting{display:inline-block} #chatFriendsOnline .chatGoOnlineLink .img{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yI/r/hzGzgtPh0ID.png);background-repeat:no-repeat;background-position:-332px -136px;height:16px;width:15px} #chatFriendsOnline .chatReconnectLink .img{margin-top:7px;background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yI/r/hzGzgtPh0ID.png);background-repeat:no-repeat;background-position:-351px -120px;height:13px;width:14px} #chatFriendsOnline .fbChatOfflineMessage,#chatFriendsOnline .fbChatDisconnectedMessage{padding:0 5px 0 1px} #chatFriendsOnline.disconnected .uiFacepileItem .img{opacity:.3} #chatFriendsOnline .typeaheadContainer td:first-child{width:100%} #chatFriendsOnline .sidebarBtn{display:none;margin-left:3px} .sidebarCapable #chatFriendsOnline .sidebarBtn{display:inline-block} .sidebarMode #chatFriendsOnline,.sidebarMode #fbDockChatBuddylistNub.fbNub,.sidebarMode #fbChatErrorNub{display:none} .sidebarMode #pageHead,.sidebarMode #globalContainer{left:-90px;position:relative} .sidebarMode .liquid #globalContainer{margin:0 90px} .sidebarMode .fbDockWrapper{right:175px} .sidebarMode .timelineLayout #rightCol.timeline_fixed{margin-right:-404px} .sidebarMode .timeline_fixed#pagelet_above_header_timeline{margin-right:-270px} .sidebarMode .fixed_elem.fbTimelineSideAds,.sidebarMode .fixed_elem.fbTimelineScrubber{margin-right:-405px} .sidebarMode .fbTimelineStickyHeader{right:310px} .sidebarMode #fbPhotoTheater .container{margin-left:-570px} .sidebarMode #friendBrowserRightColumn.fixed_elem{left:50%;margin-left:155px} .sidebarMode #friendBrowserRightColumn.friendBrowserNav.fixed_elem{left:50%;margin-left:135px} .sidebarMode #friendBrowserSideNav.fixed_elem{right:50%;margin-right:401px} .fbChatSidebar .fbChatTypeahead,.fbChatSidebar .fbChatTypeahead .wrap{border:0} .fbChatSidebar .fbChatTypeahead .textInput{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yI/r/hzGzgtPh0ID.png);background-repeat:no-repeat;background-position:0 -262px;background-color:#f4f6f9;box-shadow:inset 2px 0 0 -1px #e0e2e9, inset 0 1px #fff;box-sizing:border-box;color:#555;height:24px;padding-left:20px;padding-right:20px} .fbChatSidebar .fbChatTypeahead .textInput:focus{background-color:#fff} .fbChatSidebar{background-clip:padding-box;background-color:#f2f4f8;border-left:1px solid rgba(0, 0, 0, .4);box-shadow:inset 2px 0 2px -2px #b2b9c9;display:none;position:fixed;top:0;right:0;width:179px;z-index:300} .sidebarMode .fbChatSidebar{display:block} .fbChatSidebar .fbChatSidebarBody{overflow-x:hidden;overflow-y:auto;position:relative} .fbChatSidebar .scrollableOrderedList{height:100%;width:100% !important} .fbChatSidebar .scrollableOrderedList .uiScrollableAreaTrack{top:10px} .fbChatSidebar .fbChatOrderedList,.fbChatSidebar .fbChatTypeaheadView{padding-top:8px} .fbChatSidebar .fbChatOrderedList .item a{padding-right:22px} .fbChatSidebar .fbChatOrderedList .item.music a{padding-right:42px} .fbChatSidebar .fbChatOrderedList .item a:hover{box-shadow:inset 2px 0 2px -2px #b2b9c9} .fbChatSidebar .fbChatOrderedList .item .status{right:12px} .fbChatSidebar .fbChatOrderedList .separator .text{background-color:#f2f4f8} .fbChatSidebar .fbChatSidebarMessage{background-color:#fff;border-top:1px solid #ccd0db;box-shadow:inset 0 1px #fafafa;display:none;padding:8px} .fbChatSidebar.error .fbChatSidebarMessage,.fbChatSidebar.offline .fbChatSidebarMessage{display:block} .fbChatSidebar .fbChatSidebarMessage .img{float:left;margin-top:3px} .fbChatSidebar.error .fbChatSidebarMessage .img{margin-top:7px} .fbChatSidebar.offline .fbChatSidebarMessage .img{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yN/r/CMO8wGPyJ_4.png);background-repeat:no-repeat;background-position:-35px -27px;height:10px;width:16px} .fbChatSidebar.error .fbChatSidebarMessage .img{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yI/r/hzGzgtPh0ID.png);background-repeat:no-repeat;background-position:-351px -120px;height:13px;width:14px} .fbChatSidebar .fbChatSidebarMessage .message{margin-left:24px} .fbChatSidebar .fbChatSidebarMessage .message .fbChatReconnectLink{white-space:nowrap} .fbChatSidebar .fbChatSidebarFooter{border-top:1px solid #c9d0da;bottom:0;position:absolute} .fbChatSidebar .fbChatSidebarFooter td:first-child{vertical-align:top;width:100%} .fbChatSidebar .fbChatSidebarFooter .button{border-left:1px solid #c9d0da;box-shadow:inset 0 1px #fff;display:block;height:24px;width:26px} .fbChatSidebar .fbChatSidebarFooter .button:hover{background-color:#fff} .fbChatSidebar .fbChatSidebarFooter .toggle{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yI/r/hzGzgtPh0ID.png);background-repeat:no-repeat;background-position:-54px -64px} .fbChatTypeahead .throbber{display:none;position:absolute;margin-top:-5px;right:6px;top:50%} .fbChatTypeahead.hasValue .clear, .fbChatTypeahead.hasValue.typeaheadLoading .throbber{display:block} .fbChatTypeahead.typeaheadLoading .clear{display:none} .fbChatTypeaheadView li{color:#333;cursor:pointer;padding:2px 20px 2px 10px;position:relative} .fbChatTypeaheadView li.selected{background-color:#e0e4ee} .fbChatTypeaheadView li img{float:left;height:28px;margin-right:5px;width:28px} .fbChatTypeaheadView li .text{display:block;line-height:28px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap} .fbChatTypeaheadView li i{display:block;height:14px;margin-top:-7px;position:absolute;right:8px;top:50%;width:7px} .fbChatTypeaheadView li.active i{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yI/r/hzGzgtPh0ID.png);background-repeat:no-repeat;background-position:-493px -79px} .fbChatTypeaheadView li.mobile i{height:12px;width:8px;margin-top:-6px;right:9px;background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yI/r/hzGzgtPh0ID.png);background-repeat:no-repeat;background-position:-34px -49px} .fbChatTypeaheadView li.invis{opacity:.3} .fbChatTypeaheadView .noResults{padding:10px} .uiComposer{border-bottom:1px solid #ccc} .uiComposerTopBorder{border-top:1px solid #ccc} .uiComposerOpen,.no_js .uiComposer{border-bottom:none} .uiComposer .attachmentLoader{line-height:normal;position:absolute;right:2px;top:9px} .uiComposer .attachmentSentenceBar{line-height:22px;padding:3px 0 6px;position:relative;z-index:2;zoom:1} .uiComposer .attachmentCloseBtn{position:absolute;right:2px;top:7px} .uiComposer .attachmentFrame{border:1px solid #b4bbcd;border-bottom-color:#ccc} .uiComposerHideMessageBox .attachmentFrame,.uiComposerHideInput .attachmentFrame{border-bottom-color:#b4bbcd} .uiComposerHideContent .attachmentFrame{display:none} .uiComposerOpen .focus_target{padding-bottom:10px} .uiComposerWhiteMessageBox .child_was_focused{border-bottom:1px solid #e9e9e9} .uiComposerHideMessageBox .child_was_focused{border-bottom:none} .uiComposer .showWhenOpen,.uiComposer .showOnceInteracted{display:none !important} .uiComposerOpen .showWhenOpen,.no_js .uiComposer .showWhenOpen,.uiComposerInteracted .showOnceInteracted,.uiComposer .child_was_focused .showOnceInteracted{display:block !important} .uiComposerAttachment .attachmentLink{outline:none} .uiComposerAttachment .attachmentLink:focus{text-decoration:underline} .uiComposerAttachment .selected, .uiComposerAttachmentSelected .normal{display:none} .uiComposerAttachmentSelected .selected{display:inline} .uiComposerAttachment .nub{background:url(http://static.ak.fbcdn.net/rsrc.php/v1/yf/r/PfBgtiydy5U.gif) no-repeat center top;height:7px;left:2px;position:absolute;top:18px;width:11px} .uiMetaComposer .uiComposerAttachment .nub{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yb/r/ALnh3ly4npU.gif);left:4px;top:19px} span.uiComposerAttachment{color:#333;display:inline-block} .uiComposerAttachments{line-height:22px;padding:3px 0 4px;position:relative;z-index:2} .uiComposerOpen .uiComposerAttachments{padding-bottom:6px} .uiComposerMetaContainer{background-color:#fff;border:1px solid #b4bbcd;position:relative;z-index:1} .uiMetaComposer .uiComposerMetaContainer .attachmentFrame{border:0} .uiMetaComposer.uiComposerWhiteMessageBox .child_was_focused{border:none} .uiMetaComposerMessageBox{zoom:1} .uiComposerHideMessageBox .uiMetaComposerMessageBox{display:none} .uiComposerWhiteMessageBox .uiComposerMessageBox{background-color:#fff;border-width:0;padding:0} .uiMetaComposerMessageBoxTable{border-spacing:0;width:100%} .uiMetaComposerMessageBoxTable td{padding:0;vertical-align:top} .uiMetaComposerMessageBoxTable .attachmentBottomRow{height:0} .uiMetaComposerMessageBoxTable .attachmentBottomRow td{vertical-align:bottom} .uiMetaComposerMessageBox .inputContainer{background-color:#fff;zoom:1} .uiComposerHideInput .uiMetaComposerMessageBoxTable{display:none} .uiMetaComposerMessageBox .uiComposerMessageBoxControls{height:30px;margin:0} .uiMetaComposerMessageBox .uiComposerMessageBoxMentions .inputContainer{border:none;padding:0;position:relative;zoom:1} .uiMetaComposerMessageBox .uiComposerMention .inputContainer{z-index:2} .uiMetaComposerMessageBoxShelf{background-color:#f2f2f2;border-top:1px solid #e6e6e6} .uiMetaComposerMessageBox .composerTypeahead{border:0} .uiMetaComposerMessageBox .composerTypeahead .wrap{padding:5px !important;border:0} .uiMetaComposerMessageBox .uiMentionsInput .highlighter{font-size: 13px} .uiMetaComposerMessageBox .uiMentionsInput .highlighter div{line-height:16px} .uiMetaComposerMessageBox .uiMentionsInput .highlighter .metadataFragment{color:gray} .uiMetaComposerMessageBox .uiMentionsInput .highlighter .withToken,.uiMetaComposerMessageBox .uiMentionsInput .highlighter .timeToken,.uiMetaComposerMessageBox .uiMentionsInput .highlighter .placeToken{z-index:2;position:relative} .uiMetaComposerMessageBox .uiMentionsInput .highlighter .withToken{cursor:pointer;color:#3b5998} .uiMetaComposerMessageBox .uiMentionsInput .highlighter .withToken:hover{text-decoration:underline} .uiMetaComposerMessageBox .input{background:transparent;border-width:0;font-size: 13px;height:16px;margin:0;outline:none;padding:0;resize:none;vertical-align:bottom;width:100%} .child_was_focused .uiMetaComposerMessageBox .input{min-height:48px} .child_was_focused .uiMetaComposerMessageBox .inputContainer{min-height:58px} .uiMetaComposerMessageBox .composerTypeahead .uiStickyPlaceholderInput{width:100%} div.uiMetaComposerMessageBox .composerTypeahead .placeholder{font-size: 13px;padding:0} .uiMetaComposerMessageBox .attachmentMetaArea{position:relative} .uiMetaComposerMessageBox .textBlurb{line-height:30px} .uiMetaComposerMessageBox .textBlurb label{font-weight:normal;vertical-align:baseline} .uiMetaComposerMessageBox .textBlurb input{vertical-align:middle} .uiMetaComposerMessageBox .uiComposerTagControls{border-right:1px solid #e0e0e0;display:inline-block;float:left;height:30px;outline:none} .uiMetaComposerMessageBox .uiComposerTagControls:hover{background-color:#e9e9e9} .uiMetaComposerMessageBox .attachmentBarArea .uiComposerTagControlOpen{background-color:#fafafa;border-top:1px solid #f2f2f2;margin-top:-1px} .uiMetaComposerMessageBox .uiComposerBarRightArea{margin:4px} .uiMetaComposerMessageBox .submitBtn{padding:2px 16px} .uiMetaComposerMessageBox .fakePrivacyWidget,.uiMetaComposerMessageBox .fakePrivacyWidget:active,.uiMetaComposerMessageBox .fakePrivacyWidget:focus,.uiMetaComposerMessageBox .fakePrivacyWidget:hover{border-color:transparent} .uiMetaComposerMessageBox .fakePrivacyWidget .uiButtonText{font-weight:normal;color:gray} .uiMetaComposer .ComposerCitySharer{color:gray;line-height:30px;position:relative} .uiMetaComposer .friendsTokenizer{border:0;border-top:1px dashed #bdc7d8;padding:0} .uiMetaComposer .friendsTokenizer .uiTypeaheadView{width:300px} .uiMetaComposer .friendsTokenizer .tokenarea{padding-left:2px} .uiMetaComposer .attachmentBottomArea .inputtext{border:none;min-width:160px;outline:none} .uiMetaComposer .friendsTokenizer .uiTypeaheadDisabled{display:none} .uiMetaComposer .taggerLocationSharer{border:0;border-top:1px dashed #bdc7d8} .uiMetaComposer .taggerLocationSharer .wrap{border:0} .uiMetaComposer .taggerLocationSharer .uiStickyPlaceholderInput{width:100%} .uiMetaComposerMessageBox .cameraIcon{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yZ/r/AYwC2vHPaWW.png);background-repeat:no-repeat;background-position:0 -392px;width:29px} .uiMetaComposerMessageBox .cameraIconSelected{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yZ/r/AYwC2vHPaWW.png);background-repeat:no-repeat;background-position:-30px -392px;width:29px} .uiMetaComposerMessageBox .friendTaggerIcon{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yZ/r/AYwC2vHPaWW.png);background-repeat:no-repeat;background-position:-60px -392px;width:29px} .uiMetaComposerMessageBox .friendTaggerIconSelected{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yZ/r/AYwC2vHPaWW.png);background-repeat:no-repeat;background-position:-90px -392px;width:29px} .uiMetaComposerMessageBox .placeTaggerIcon{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yZ/r/AYwC2vHPaWW.png);background-repeat:no-repeat;background-position:-120px -392px;width:29px} .uiMetaComposerMessageBox .placeTaggerIconSelected{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yZ/r/AYwC2vHPaWW.png);background-repeat:no-repeat;background-position:-150px -392px;width:29px} .fbGalleryPrev,.fbDisabledGalleryPrev{float:left;margin-top:50px;opacity:.7} .fbGalleryPrev:hover{opacity:1} .fbGalleryNext,.fbDisabledGalleryNext{float:right;margin-top:50px;opacity:.7} .fbGalleryNext:hover{opacity:1} .fbConnectWidgetTopmost{border:1px solid #aaa;border-top-color:#315c99;overflow:hidden;padding:0;position:relative} div.fbDarkWidget{background-color:transparent} .fbDarkWidget .fbWidgetTitle{color:#fff} .fbDarkWidget a,.fbDarkWidget .profileName{color:#fff} .fbDarkWidget a.uiLinkSubtle{color:gray} div.fbConnectWidgetHeaderTitle{border-width:0 0 1px} div.ConnectActivityLogin{border-width:0 0 1px;zoom:1} .fbRecommendationWidgetContent .recommendations_metadata{padding-top:3px;color:gray} .fbDarkWidget .fbRecommendationWidgetContent .recommendations_metadata{color:#ccc} .fbGalleryImage{max-height:125px;max-width:140px} .fbShowBothHidden{display:none} .fbRecommendationsContainer{display:none} .fbShowBothRecommendationsHighlighted .fbRecommendationsContainer{display:inline} .fbShowBothRecommendationsHighlighted .fbActivityContainer{display:none} .fbActivityContainer{display:inline} .fbGalleryRecommendationsFacepile{position:relative} .fbGalleryRecommendationsFooter{width:150px} .fbGalleryRecommendationsImageBlock{display:block;margin-left:auto;margin-right:auto;text-align:center;height:125px} .fbGalleryRecommendationsImageContainer{width:140px;height:125px;background:#edeff4 url(http://static.ak.fbcdn.net/rsrc.php/v1/ye/r/nZW4C56WJb6.png) repeat 0 0;overflow:hidden;display:inline-block} .fbDarkWidget .fbGalleryRecommendationsImageContainer{background-position:-125px 0} .fbGalleryRecommendationsNode{height:275px} .fbGalleryRecommendationsText{padding-top:3px;height:64px} .fbShowBothActivityHeader{display:none} .fbShowBothRecommendationsHighlighted .fbShowBothActivityHeader{display:inline} .fbShowBothRecommendationsHeader{display:inline} .fbShowBothRecommendationsHighlighted .fbShowBothRecommendationsHeader{display:none} .fbDarkWidget div.ConnectActivityLogin{border-color:#303030;background-color:#000} .fbProfilePic{height:35px;width:35px} .fbImageContainer{width:35px;height:35px;background:#edeff4 url(http://static.ak.fbcdn.net/rsrc.php/v1/ye/r/nZW4C56WJb6.png) no-repeat 0 0;overflow:hidden} .fbDarkWidget .fbImageContainer{background-position:-35px 0} .fbConnectWidgetHeaderTitle{color:#1c2a47;border:1px solid #c6cedd;padding-bottom:7px;padding-top:8px;cursor:default} .fbConnectWidgetHeaderTitleBranded{background:#3b5998;color:#fff;cursor:default;padding-bottom:5px;padding-top:7px} .fbDarkWidget .fbConnectWidgetHeaderTitle{background-color:#333;border:1px solid #444} .fbLoginButton{float:left} .ConnectActivityLoginMessage{color:#666;line-height:14px;vertical-align:top;zoom:1} .fbDarkWidget .ConnectActivityLoginMessage{color:gray} .fbConnectWidgetFooter{bottom:0;cursor:default;position:absolute;width:100%} .transparent_widget .fbDarkWidget .fbConnectWidgetFooter{background-color:transparent} .fbConnectWidgetFooter .fbFooterBorder{border-top:1px solid #ccc;margin:0 6px;padding:4px 3px} .fbDarkWidget .fbConnectWidgetFooter .fbFooterBorder{border-top:1px solid #444} .fbConnectWidgetContent,.fbImageContainer img{visibility:hidden} .fbConnectWidgetContent,.fbGalleryRecommendationsImageContainer img{visibility:hidden} div.fbHalfPage{overflow:hidden} div.fbAdminOptions{float:right} body.transparent_widget{background-color:transparent;overflow:hidden} body.plugin.transparent_widget{overflow-y:hidden} .connect_widget{background-color:transparent} .connect_widget .connect_widget_facebook_favicon{background:url(http://static.ak.fbcdn.net/rsrc.php/v1/y7/r/ql9vukDCc4R.png) no-repeat -1px -47px transparent;display:block;height:14px;padding:0 0 0 0;width:14px;position:absolute;left:-1px} body.transparent_widget .generic_dialog_popup, .connect_widget .generic_dialog_popup{width:400px} .navIdentity{min-height:38px;border-bottom:1px solid #e0e0e0;margin:5px;padding-bottom:5px} #navAccount ul .navIdentityPic{float:left} #navAccount ul .navIdentityPic img{width:28px} #navAccount ul .navIdentityPic a{padding:5px} #navAccount ul .navIdentityPic a:hover{padding:4px 5px 4px 5px} #navAccount ul .navIdentitySub input{font-size: 9px} #navAccount ul .navIdentityLinks{margin:5px;float:left} .fbx #pageFooter{margin:auto;width:auto} .hasLeftCol #pageFooter{background-color:#fff;clear:both;margin-left:180px} #pagefooter{border-top:0} #pageFooter{color:#737373;font-size: 11px;margin:0 auto;width:980px} #pageFooter a{text-decoration:none;white-space:nowrap} #pageFooter a:last-child{margin-right:0} #pageFooter a:hover{text-decoration:underline} #contentCurve{background-color:#fff;border-bottom:1px solid #ccc;height:8px;font-size: 1px} .hasLeftCol #contentCurve{border:1px solid #ccc;border-top:none;position:relative} #footerContainer{border-top:1px solid #eee;margin-bottom:30px;padding:8px;position:relative} #footerContainer .navigation{text-align:right} .profileInfoSection{margin-bottom:30px} .profileInfoSection .emptyInfoSection{text-align:center;font-size: 13px} .profileInfoSection .inlineLabel{color:#999} .profileInfoSection .privacyTooltip{padding-top:4px} #blueBarHolder{height:41px} #blueBarHolder.slim{height:38px} #blueBar{background-color:#3b5998;min-width:981px;width:100%;z-index:300} #blueBar.fixed_elem{left:0;top:0} .tinyViewport #blueBar.fixed_elem{position:relative !important} .composerTourInProgress #blueBar.fixed_elem{position:static !important} #blueBar #pageHead{margin:0 auto;width:981px} #globalContainer{margin:0 auto;position:relative;zoom:1} .fbx #globalContainer{width:981px} .fbx #tab_canvas > div{padding-top:0} .fb_content{padding-bottom:20px} .fbx .fb_content{padding-bottom:0} .fbx #globalContainer #content{min-height:inherit} #mainContainer{margin-left:-1px;display:block;width:100%} .hasLeftCol #mainContainer{border-right:1px solid #ccc} #leftCol{display:none;float:left;padding:20px 0 0 2px;width:179px;word-wrap:break-word} .hasLeftCol #leftCol{display:block} #rightCol{margin-top:-10000px;float:right;padding-right:0;width:244px;word-wrap:break-word} .hasRightCol #rightCol{margin-top:0} .hasLeftCol #rightCol{padding-right:20px} #contentCol{background-color:#fff;padding-top:15px} .hasLeftCol #contentCol{border-left:1px solid #ccc;margin-left:181px} #headerArea{margin-bottom:5px;padding:2px 0 12px} .hasLeftCol #headerArea{float:left;margin:0 20px 0;width:759px} #contentArea{margin-right:-1px;padding-left:1px;word-wrap:break-word} .hasLeftCol #contentArea,.hasRightCol #contentArea{float:left;margin-right:0} .hasLeftCol #contentArea{padding:0 20px;width:759px} .hasRightCol #contentArea{width:714px} .hasLeftCol .hasRightCol #contentArea{padding-right:0;width:493px} #bottomContent{clear:both;padding:0 20px 12px} #pageHead{margin:0 auto;width:980px} .fbx #pageHead{margin:0;width:auto} #pageLogo{float:left;margin-left:-6px;z-index:5} #pageLogo a{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yO/r/OuziOid04jS.png);background-repeat:no-repeat;background-position:0 -183px;background-color:#3b5998;display:block;height:31px;width:103px} #pageLogo a:hover,#pageLogo a:focus,#pageLogo a:active{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yO/r/OuziOid04jS.png);background-repeat:no-repeat;background-position:0 -151px;background-color:#4b67a1;outline:none} #headNav{background-color:#627aad;border:1px solid #1d4088;border-bottom:0;height:30px;margin-left:180px} #pageNav li{float:left} #pageNav a{color:#fff;display:block;display:inline-block;font-weight:bold;height:22px;padding:8px 10px 0 10px;text-decoration:none} #pageNav a:hover,#pageNav a:focus,#pageNav a:active{outline:none;background-color:#6d86b7} #navAccount{position:relative} #navAccount.openToggler,.no_js #navAccount:hover{background-color:#fff;border:1px solid #333;border-bottom:0;margin:-1px -1px 0} #navAccount #navAccountLink{padding-right:16px;zoom:1} .openToggler #navAccountLink,.no_js #navAccount:hover #navAccountLink{background-color:#fff;color:#333;position:relative;z-index:2} .openToggler #navAccountLink:hover,.openToggler #navAccountLink:focus,.openToggler #navAccountLink:active,.no_js #navAccountLink:hover{background-color:#fff} #navAccountLink .accountPulldown{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yO/r/OuziOid04jS.png);background-repeat:no-repeat;background-position:-94px -32px;height:4px;left:5px;position:relative;top:-2px;width:7px} .openToggler #navAccountLink .dropMenuDivide,.no_js #navAccount:hover #navAccountLink .dropMenuDivide{background:#e0e0e0} .openToggler #navAccountLink .accountPulldown,.no_js #navAccount:hover #navAccountLink .accountPulldown{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yO/r/OuziOid04jS.png);background-repeat:no-repeat;background-position:-86px -32px} #navAccount .contextualHelp,#navAccount .navigation{background:#fff;border:1px solid #333;border-bottom:2px solid #2d4486;margin-right:-1px;margin-top:-1px;min-width:200px;padding:10px 0 5px;position:absolute;right:0;top:100%;z-index:1} #navAccount .navigation{display:none} #navAccount.openToggler .navigation,.no_js #navAccount:hover .navigation{display:block} #navAccount .navigation .logoutButton{display:block} #navAccount .logoutButton:hover{text-decoration:none} #navAccount .logoutButton input{width:100%;text-align:left;outline:0} #navAccount .navigation a,#navAccount .navigation .logoutButton input{color:#3a579a;display:block;font-weight:normal;height:auto;padding:4px 10px 5px;white-space:nowrap} #navAccount .navigation a:hover,#navAccount .navigation a:focus,#navAccount .navigation a:active,#navAccount .logoutButton:hover input,#navAccount .logoutButton input:active,#navAccount .logoutButton input:focus{background:#6d84b4;border-bottom:1px solid #3b5998;border-top:1px solid #3b5998;color:#fff;padding:3px 10px 4px;text-decoration:none} #navAccount li{display:block;float:none} #navAccountInfo{border-bottom:1px solid #e0e0e0;min-height:55px;position:relative;margin:5px 4px;padding:0 6px 0 64px} ul #navAccountInfo a:hover,ul #navAccountInfo a:focus,ul #navAccountInfo a:active{background:none;border:none;color:#3b5998;padding:4px 10px 5px;text-decoration:underline} #navAccountInfo #navAccountPic{left:-5px;margin:0;position:absolute;top:-9px} #navAccountInfo #navAccountPic img{width:50px;height:50px} #navAccount #navAccountName{font-size: 13px;font-weight:bold;margin:0;padding:0 !important} #navSearch{margin:4px 0 0 4px;position:relative;width:350px} #navSearch .uiSearchInput{border:0} #navSearch .uiSearchInput input{width:315px} #navSearch .uiTypeahead,#navSearch .uiTypeahead .wrap{border-color:#3b5998;height:22px;z-index:100;position:static} #navSearch .uiTypeaheadView{top:auto} .hideBanner .fbPageBanner, .fixedBody .fbPageBanner{display:none} .fbPageBannerInner{margin:auto;width:980px} .sidebarMode .fbPageBannerInner{left:-90px;position:relative} .permalink_body{background-color:#e7ebf2} .permalink_body #globalContainer .permalink_container{background-color:#fff;border:1px solid #c4cde0;padding:30px 0 30px 0;width:725px} .permalink_stream .uiStream .uiStreamMessage{font-size: 13px} .permalink_stream .fbStreamPermalinkHeader{border-bottom:1px solid #e9e9e9} .permalink_stream .permalinkCloseButton{margin:2px} .permalinkFullWidth .uiUfi, .permalinkFullWidth .uiStreamFooter{float:left} .permalinkFullWidth .uiUfi{clear:left} .permalinkFullWidth .uiUfi .ufiItem{border-bottom:1px solid #fff} .permalink_body .permalink_container .permalinkFullWidth{float:none;margin:auto;width:665px} .permalink_footer #pageFooter{width:725px} .permalinkFullWidth .fbStreamPermalinkHeader .subscribeButtonsContainer{margin-top:10px} #welcome_dashboard li.step{border-bottom:1px solid #ccc;padding:16px 0 20px 0} #welcome_dashboard li.last{border-bottom:0} #welcome_dashboard .importer_form{margin-top:9px} #welcome_dashboard .step_indicator{background:#8a9bc3;border:1px solid #627aad;color:#fff;display:inline;float:left;font-size: 17px;text-align:center;width:24px;padding:1px 0;margin-left:20px} #welcome_dashboard .active_step{background:#accd97;border-color:#74ac51} #welcome_dashboard .welcome_task{float:left;overflow:hidden;padding-left:15px;width:425px} #welcome_dashboard .welcome_task.welcomeTaskFriendRequests{overflow:visible} #welcome_dashboard .welcome_task_classmates{float:left;overflow:visible;padding-left:15px;width:425px} #welcome_dashboard .welcome_task_classmates li{padding:5px 0} .pymk_more_link{text-align:right} #welcome_dashboard .compact li{padding:2px 10px 2px 45px} #welcome_dashboard #mobile_editor,#welcome_dashboard .welcome_description{padding:10px 0 10px 0} #welcome_dashboard .NUXUploadPic{margin-top:10px} #welcome_dashboard .NUXUploadPic div.divider span{background:#fff} #welcome_dashboard #welcome_mobile_img{float:left;width:200px;margin-top:9px} #welcome_dashboard .welcome_mobile{float:left;width:220px;margin:9px 19px 0 0} #welcome_dashboard .welcome_badges{float:left;width:310px;margin:9px 25px 0 0} #welcome_dashboard .welcome_task ul{margin-top:4px} #welcome_dashboard .welcome_task.welcomeTaskImporter ul{margin:0} #welcome_dashboard .welcome_task.welcomeTaskImporter #importer_frame #new_ff{min-height:0} #welcome_dashboard .invite #footer_links,#welcome_dashboard .invite .sent_invites,#welcome_dashboard .invite #error_invites,#welcome_dashboard .invite #view_errors_msg{width:425px} #welcome_dashboard .friend_grid ul{list-style-type:none;margin:0} #welcome_dashboard .friend_grid li{padding:0} #welcome_dashboard .friend_grid .friend_grid_col{width:173px} #welcome_dashboard .editor td{padding-bottom:6px} #welcome_dashboard .editor td.label label{padding-top:6px} #welcome_dashboard .NUXUploadPic #profile_pic{border-top:1px solid #c3c3c3} #welcome_dashboard .throbber{display:none} #welcome_dashboard .async_saving .throbber{display:inline} #welcome_dashboard #friend_requests .friend_request{margin-bottom:10px;padding:10px 0 0 0} #welcome_dashboard #friend_requests .friend_request .thumbnail{float:left;margin-right:15px;width:50px} #welcome_dashboard #friend_requests .friend_request .prompt{float:left;line-height:16px;width:350px} #welcome_dashboard #friend_requests .friend_request .confirm_ignore_buttons{float:left;width:350px} #welcome_dashboard #friend_requests .uiButton{margin:8px 10px 0 0;position:relative;top:-5px} #welcome_dashboard .search_query .inputtext{float:left;line-height:14px;margin:0;padding:4px 3px 3px 3px} .fbxWelcomeBox .fbxWelcomeBoxBlock{margin-right:8px} .fbxWelcomeBox .fbxWelcomeBoxName{padding-bottom:1px} .fbxWelcomeBox div, .fbxWelcomeBoxBlock .fbxWelcomeBoxImg{height:40px !important} .fbxWelcomeBoxBlock .fbxWelcomeBoxImg{width:40px !important} .fbxWelcomeBoxName{display:block;font-weight:bold;width:112px;word-wrap:break-word} .UIActionLinks_title{font-size: 9px;font-weight:normal;white-space:nowrap;color:#999} .UIActionLinks_bottom{color:#999} .UIActionLinks_bottom a, .UIActionLinks_bottom button.as_link, .UIActionLinks_bottom .uiLinkButton input, .UIActionLinks_bottom .uiLinkButton input:hover{color:#6d84b4} .UIActionLinks .uiBlingBox{color:#3b5998} .cmt_like_icon{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yZ/r/AYwC2vHPaWW.png);background-repeat:no-repeat;background-position:-250px -407px;width:10px;height:9px} .comment_like_button{margin:-5px;padding:5px;padding-top:0} .comment_like_button:active,.comment_like_button:focus,.comment_like_button:hover{text-decoration:none} .fixed_elem{position:fixed !important} .tinyViewport .fixed_elem{position:static !important} body .fixedScrolling{position:fixed !important} body.fixedBody #contentCol{min-height:617px} body.fixedBody{overflow-x:hidden} .fixedBody #blueBar, .fixedBody #leftCol{position:fixed !important} .fixedBody #leftColContainer{float:left;padding-right:2px;width:179px} .fixedBody .hideWhenFixed{display:none} .subscribeButtonsContainer{display:inline-block;vertical-align:top} .subscribeButtonsContainer .uiButton{margin-left:0} div.subscribeButtonsContainer .subscribedButton,.subscribeButtonsContainer .subscribedButton .uiButtonText,.subscribeButtonsContainer .subscribedButton input{cursor:default} div.subscribeButtonsContainer .uiButtonHover,div.subscribeButtonsContainer .uiButtonHover:active,div.subscribeButtonsContainer .uiButtonHover:hover{background:#6d84b4;border-color:#3b5998;box-shadow:none} .subscribeButtonsContainer .uiButtonHover .uiButtonText{color:#fff} div.subscribeButtonsContainer .customimg{margin:2px 5px 0 0} .FlyoutSubscriptionMenu{min-width:180px} .SubscriptionMenu .itemLabel{overflow:hidden} .NonFriendSubscriptionMenu .hideFromNonFriend{display:none} div.SubscriptionMenu .SubscriptionMenuCategory .itemAnchor{font-weight:normal} .SelectorMenuOnFeed .uiMenuItem .itemAnchor{padding:1px 16px 1px 42px} .uiMenu .SelectorMenuOnFeed .checked .itemAnchor{background:url(http://static.ak.fbcdn.net/rsrc.php/v1/yu/r/6NHt8H5uyPf.png) 20px 5px no-repeat} .uiMenu .SelectorMenuOnFeed .checked a:active,.uiMenu .SelectorMenuOnFeed .checked a:focus{background-color:#6d84b4;background-position:20px -56px} .hasSubscriptionMenu .SubscriptionMenuItem,div.showSubscriptionMenu li,.isUnsubscribed .SubscribeMenuToggle,.SubscribeMenuSubscribe{display:none} div.showSubscriptionMenu li.SubscriptionMenuItem,.isUnsubscribed .SubscribeMenuSubscribe{display:block} span.FollowLink .followLinkInlineCheck{display:inline;margin-right:4px} .followLinkSubscribed{cursor:default} .FriendButton{display:inline-block;vertical-align:top} .FriendButton .uiButton{margin-left:0} div.FriendButton .enableFriendListFlyout,.FriendButton .enableFriendListFlyout .uiButtonText,.FriendButton .enableFriendListFlyout input{cursor:default} div.FriendButton .uiButtonHover{background:#6d84b4;border-color:#3b5998;box-shadow:none} .FriendButton .uiButtonHover .uiButtonText{color:#fff} .requestResponseMenu .action .itemAnchor{padding-right:22px} div.FriendButton .customimg{margin:2px 5px 0 0} .FriendListFlyoutLoading{text-align:center} .home #leftCol{min-height:600px} .home #rightCol .home_right_column{padding-top:44px} .home #rightCol .friend_list_right_column_header{height:44px} .profileItemImg{height:16px;width:16px} div.bookmarksMenuButton .uiCloseButton{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yL/r/cUj1ZMLxtSi.png);background-repeat:no-repeat;background-position:-65px -24px} div.bookmarksMenuButton .uiCloseButton{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yN/r/CMO8wGPyJ_4.png);background-repeat:no-repeat;background-position:-1px -28px} div.bookmarksMenuButton .uiCloseButton:hover,div.bookmarksMenuButton .openToggler .uiCloseButton{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yL/r/cUj1ZMLxtSi.png);background-repeat:no-repeat;background-position:-83px -24px} .uiSideNav ul{display:none} .uiSideNav .open ul{display:block} .uiSideNav .forceSubitems ul{display:block} .uiSideNav .hidden{display:none} .uiSideNav .item,.uiSideNav .subitem{color:#333;display:block;border-bottom:1px solid #fff;min-height:17px;line-height:13px;padding:3px 8px 0 28px;text-decoration:none} .uiSideNav .subitem{padding-left:37px} .uiSideNav .item:hover,.uiSideNav .item:active,.uiSideNav .item:focus,.uiSideNav .subitem:hover,.uiSideNav .subitem:active,.uiSideNav .subitem:focus{background-color:#eff2f7;text-decoration:none} .uiSideNav .selectedItem .item,.uiSideNav .selectedItem .item:hover,.uiSideNav ul .selectedItem .subitem,.uiSideNav ul .selectedItem .subitem:hover{background-color:#d8dfea;font-weight:bold} .uiSideNav .item .imgWrap{width:18px} .uiSideNav .external{padding-right:12px;background:url(http://static.ak.fbcdn.net/rsrc.php/v1/yW/r/AebrcwrBeG6.png) no-repeat right 3px} .uiSideNav .item .linkWrap{-o-text-overflow:ellipsis;display:block;max-width:116px;overflow:hidden;padding-left:0;text-overflow:ellipsis;white-space:nowrap} .uiSideNavCountText{color:gray} .uiSideNav .loading .item,.uiSideNav .sideNavItem .loading .subitem{background-color:#eff2f7;border-color:#eff2f7;border-bottom-color:#fff} .uiSideNav .loading .subitem{background-color:#fff;border-color:#fff} .uiFutureSideNav .actionLinks{font-size: 9px;font-weight:bold;text-transform:uppercase} .droppableNav .actionLinks{display:block} .actionLinks{line-height:12px;padding:4px 0 4px 28px;position:relative} .uiSideNav .loadingIndicator,.actionLinks .loadingIndicator{background:url(http://static.ak.fbcdn.net/rsrc.php/v1/yb/r/GsNJNwuI-UM.gif) no-repeat 0 0;display:none;height:11px;position:absolute;right:5px;top:5px;width:16px} .loading .loadingIndicator,.async_saving .loadingIndicator{display:block} .editMode .loadingIndicator,.loading ul .loadingIndicator{display:none} .uiSideNav ul .loading .loadingIndicator{top:5px} .uiSideNav .showSubitems .hiddenSubitem,.uiSideNav .open .navMore{display:block} .uiSideNav .hiddenSubitem,.uiSideNav .showSubitems .navMore,.uiSideNav .navMore{display:none} .uiSideNav li .navMore{margin:4px 0 10px 37px} .uiSideNav .loading .navMore{background-color:transparent} .uiSideNav .item:hover .buttonWrap .uiCloseButton{visibility:visible} .editMode .droppableNav .uiCloseButton, .editMode .droppableNav .item:hover .uiCloseButton{visibility:visible} .middot{display:none} .expandedMode .middot{display:inline} .uiSideNav .mover{display:none;left:-18px;overflow:hidden;position:absolute;text-align:right;top:3px;z-index:2} .uiSideNav .placeholder{border:2px dashed gray} .editMode .item{cursor:default;opacity:.5} .editMode .item:hover{background-color:transparent} .editMode .sortableItem{cursor:move;opacity:1} .editMode .sortableItem:hover{background-color:#eff2f7} .uiSideNav .mover .arrow{position:relative;top:-20px} .uiSideNav .mover .arrow:active,.uiSideNav .mover .arrow:focus{top:0} .droppableNav .grip{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yL/r/cUj1ZMLxtSi.png);background-repeat:no-repeat;background-position:-100px -23px;display:none;height:10px;margin-top:2px;width:10px} .editMode .droppableNav .grip{display:block} .editMode .uiSideNav .external{background-image:none} .middot,.navEdit,.navDone{display:none} .expandedMode .middot,.expandedMode .navEdit,.navEditDone .navEdit,.editMode .navDone{display:inline} .editMode .draggingMode{opacity:.5} .editMode .droppableNav .draggingMode{opacity:1} .editMode .uiSideNav ul{display:none} .editMode .middot,.editMode .navEdit,.editMode .navLessLink,.editMode .uiSideNav .count,.editMode .uiSideNav .divider,.editMode .uiSideNav .loading .mover,.editMode .uiSideNav .uiCloseButton{display:none !important} #sideNav #pinnedNav{margin-top:16px} #sideNav .belowThreshold,#sideNav .homeSideNav .actionLinks,#sideNav #pinnedNav .hideOption{display:none} #sideNav.editMode .homeSideNav .actionLinks{display:block} #sideNav .moreSectionsLink{color:#7f93bc;font-size: 9px;font-weight:bold} .navHeader,.navHeader a{color:#999;font-size: 9px;font-weight:bold;margin-top:12px} .navHeader .bookmarksNavSeeAll{color:#6d84b4;white-space:nowrap} .navHeader .uiLoadingIndicatorAsync{margin-top:-3px} .editMode .nonDroppableNav{opacity:.5} .editMode .nonDroppableNav .sortableItem{cursor:default} .editMode .homeSideNav .bookmarksNavSeeAll,.homeSideNav .bookmarksNavSeeAll{visibility:hidden} .homeSideNav:hover .bookmarksNavSeeAll,.forceMoreLink .bookmarksNavSeeAll{visibility:visible} .homeSideNav a:hover{text-decoration:none} .bookmarksNavSeeAll:hover{text-decoration:underline} .homeSideNav .loading .bookmarksNavSeeAll{display:none} .homeSideNav .bookmarksMenuButton ul{display:inline} .sideNavItem:hover .bookmarksMenuButton .uiCloseButton,.sideNavItem .bookmarksMenuButton a.selected{visibility:visible} .editMode .homeSideNav .sideNavItem .bookmarksMenuButton .uiCloseButton,.editMode .homeSideNav .sideNavItem:hover .bookmarksMenuButton .uiCloseButton{visibility:hidden} .droppableNav .rearrange{display:inline} .nonDroppableNav .rearrange{display:none} div.fbComposerWideSpacing{border-bottom:0;margin:9px 0 -6px;padding-bottom:4px} div.fbFriendListComposer{border-bottom:none;margin-left:-18px;padding-left:18px} div.fbFriendListComposer .focus_target{border-bottom:1px solid #e6e6e6;margin-left:-18px;padding-left:18px} div.fbFriendListComposer .child_was_focused{border-bottom:none} div.fbFriendListComposer .uiComposerAttachments{padding:5px 0 6px} #pagelet_rhc_ticker{margin-top:-5px} #pagelet_rhc_ticker .fbFeedTicker{padding-top:5px} .homeFixedLayout .fbFeedTicker.fixed_elem{background-color:#fff;z-index:2} .homeFixedLayout #contentCurve{height:0} div#contentCol.homeFixedLayout{padding-top:5px} .homeFixedLayout div#contentArea{padding-bottom:20px} .tickerOnTop #pagelet_rhc_ticker{margin-top:0;margin-bottom:5px} .adsOnTop .rightColumnWrapper .fixed_scrolling_wrapper, .tickerOnTop .rightColumnWrapper{width:244px} .sidebarMode .tickerOnTop #pagelet_rhc_ticker{margin-bottom:0} .tickerOnTop #pagelet_rhc_ticker .fbFeedTicker{padding-top:0} .sidebarMode .tickerOnTop #pagelet_current .fbCurrent{margin:6px 0 12px 0} .tickerOnTop #pagelet_current .fbCurrent{margin:8px 0 10px 0} .tickerOnTop .ticker_container .ticker_stream{margin-top:-1px} .tickerOnTop .ego_section{margin-bottom:0} .tickerOnTop .fbFeedTicker .ticker_container:before, .tickerOnTop .fbFeedTicker .ticker_container:after{background-color:rgba(0, 0, 0, .10) !important;content:"";display:block;height:1px !important;position:absolute;width:100%;z-index:2} .tickerOnTop .fixed_elem .ticker_container:before{background-color:transparent !important} .tickerOnTop .forceThickLine .ticker_container:before, .tickerOnTop .forceThickLine .ticker_container:after{background-color:transparent !important} .tickerOnTop .fbFeedTicker .ticker_container:after{bottom:0} .tickerOnTop .fbFeedTicker .fbTickerFooter{border-top:3px solid #f2f2f2} .tickerOnTop .fixed_elem .fbFeedHeadThickLineCapable{border:0} div.composerOpen #rightCol{padding-top:40px} div.fbStreamRecentStoriesPager{padding-bottom:20px;padding-top:13px} .fbStreamRecentStoriesPager a.fbStreamRecentStoriesWrap .img{position:relative;top:1px} .fbStreamRecentStoriesText{padding-left:7px} div.fbStreamRecentStoriesPager .fbStreamRecentStoriesWrap{border-bottom-color:#c2c8d1;border-top-color:#d8dfe9;padding-top:8px;padding-bottom:8px;text-align:center} .slim #blueBar{border-bottom:1px solid #133783;box-shadow:0 0 2px rgba(0, 0, 0, .52);height:37px;position:relative} .slimHeader #headNav{background:none;border:none;margin-left:176px} .slimHeader .fbJewelFlyout{top:37px} .slimHeader #jewelContainer{padding-top:5px} .slimHeader .fbJewel .jewelCount{background:none;top:0} .slimHeader .fbJewel .jewelCount span{border:solid 1px #d83722;border-bottom:solid 1px #c0311e;border-top:solid 1px #e23923;box-shadow:0 1px 0 rgba(0, 39, 121, .77);padding:0 1px} .slimHeader #jewelContainer .fbJewel a.jewelButton{height:31px;margin-top:1px} .slimHeader .openToggler a.jewelButton{height:31px !important} .slimHeader #fbMessagesJewel a.jewelButton{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yO/r/OuziOid04jS.png);background-repeat:no-repeat;background-position:-56px -75px} .slimHeader #fbMessagesJewel a.jewelButton:active,.slimHeader #fbMessagesJewel a.jewelButton:focus,.slimHeader #fbMessagesJewel a.jewelButton:hover{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yO/r/OuziOid04jS.png);background-repeat:no-repeat;background-position:0 -247px} .slimHeader #fbMessagesJewel.hasNew a.jewelButton{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yO/r/OuziOid04jS.png);background-repeat:no-repeat;background-position:-56px -110px} .slimHeader #fbMessagesJewel.openToggler a.jewelButton{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yO/r/OuziOid04jS.png) !important;background-repeat:no-repeat !important;background-position:-31px -110px !important} .slimHeader #fbNotificationsJewel a.jewelButton{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yO/r/OuziOid04jS.png);background-repeat:no-repeat;background-position:-25px -247px} .slimHeader #fbNotificationsJewel a.jewelButton:active,.slimHeader #fbNotificationsJewel a.jewelButton:focus,.slimHeader #fbNotificationsJewel a.jewelButton:hover{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yO/r/OuziOid04jS.png);background-repeat:no-repeat;background-position:-31px -75px} .slimHeader #fbNotificationsJewel.hasNew a.jewelButton{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yO/r/OuziOid04jS.png);background-repeat:no-repeat;background-position:-56px -40px} .slimHeader #fbNotificationsJewel.openToggler a.jewelButton{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yO/r/OuziOid04jS.png) !important;background-repeat:no-repeat !important;background-position:-31px -40px !important} .slimHeader #fbRequestsJewel a.jewelButton{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yO/r/OuziOid04jS.png);background-repeat:no-repeat;background-position:-25px -282px} .slimHeader #fbRequestsJewel a.jewelButton:active,.slimHeader #fbRequestsJewel a.jewelButton:focus,.slimHeader #fbRequestsJewel a.jewelButton:hover{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yO/r/OuziOid04jS.png);background-repeat:no-repeat;background-position:-50px -247px} .slimHeader #fbRequestsJewel.hasNew a.jewelButton{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yO/r/OuziOid04jS.png);background-repeat:no-repeat;background-position:-75px -247px} .slimHeader #fbRequestsJewel.openToggler a.jewelButton{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yO/r/OuziOid04jS.png) !important;background-repeat:no-repeat !important;background-position:0 -282px !important} .slimHeader #pageLogo a,.slimHeader #pageLogo a:hover,.slimHeader #pageLogo a:focus,.slimHeader #pageLogo a:active{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yO/r/OuziOid04jS.png);background-repeat:no-repeat;background-position:0 -214px;height:31px;margin-top:6px} .slimHeader #navSearch{margin-top:9px} .slimHeader #navSearch .uiTypeahead{background:none;border:solid 1px #294a8f;border-top:solid 1px #123682;border-radius:2px} .slimHeader #navSearch .uiSearchInput{background:#fff;border-radius:1px;border-top:1px solid #d9d9d9;height:20px;padding:0 0 1px} .slimHeader #navSearch div,.slimHeader #navSearch span{border:none} .slimHeader #navSearch .textInput .inputtext{padding-top:2px} .slimHeader #pageNav .topNavLink{height:31px} .slimHeader #pageNav a{color:#d8dfea} .slimHeader #pageNav{margin-right:1px;padding-top:6px} .slimHeader #pageNav .topNavLink:hover,.slimHeader #pageNav .topNavLink:focus,.slimHeader #pageNav .topNavLink:active,.slimHeader #pageNav .tinyman:hover a,.slimheader #pageNav .tinyman:focus a,.slimHeader #pageNav .tinyman:active a,.slimHeader #pageNav .topNavLink a:hover,.slimHeader #pageNav .topNavLink a:focus,.slimHeader #pageNav .topNavLink a:active{background-color:#4b67a1;color:#fff;height:31px} .slimHeader #pageNav .openToggler #navAccountLink,.slimHeader #pageNav .openToggler #navAccountLink:hover,.slimHeader #pageNav .openToggler #navAccountLink:focus,.slimHeader #pageNav .openToggler #navAccountLink:active,.slimHeader #pageNav .no_js #navAccountLink:hover{background-color:#fff} .slimHeader #pageNav .headerTinymanPhoto{border:solid 1px #294a8f;border-top:solid 1px #123682;border-radius:2px;height:23px;margin:3px 5px 3px 3px;width:23px} .slimHeader #pageNav .topNavLink .headerTinymanName{display:inline-block;max-width:175px;overflow:hidden;padding-right:8px;text-overflow:ellipsis;vertical-align:top;white-space:nowrap} .slimHeader #pageNav .topNavLink a{height:31px;line-height:29px;padding:0;vertical-align:top} .slimHeader #pageNav .middleLink a{padding:0 8px} .slimHeader #pageNav li.tinyman:after,.slimHeader #pageNav li.middleLink:after{background:#526da4;content:" ";display:inline-block;float:right;margin-top:9px;width:1px;height:14px} .slimHeader #pageNav .topNavLink:hover:after{background:#4b67a1} .slimHeader #pageNav li.middleLink:hover,.slimHeader #pageNav #navAccountLink:hover{margin-left:-1px;padding-left:1px} .slimHeader #pageNav .openToggler #navAccountLink:hover{margin-left:0;padding-left:0} .slimHeader #pageNav .menuPulldown{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yO/r/OuziOid04jS.png);background-repeat:no-repeat;background-position:-2px -315px;height:31px;width:24px} .slimHeader #pageNav .menuPulldown:hover{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yO/r/OuziOid04jS.png);background-repeat:no-repeat;background-position:-56px -315px;height:31px;width:24px} .slimHeader #pageNav #navAccount.openToggler,.slimHeader .no_js #navAccount:hover,.slimHeader #pageNav .openToggler #navAccountLink{height:31px;margin-top:0} .slimHeader #pageNav .openToggler .menuPulldown{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yO/r/OuziOid04jS.png) !important;background-repeat:no-repeat !important;background-position:-29px -315px !important;height:31px;width:24px} .slimHeader #pageNav #navAccountLink{padding-right:0} .slimHeader #pageNav .menuDivider{background:#ddd;font-size:0;height:1px;line-height:0;margin:6px 7px} .slimHeader #navAccount .navigation{border-bottom-color:#333;padding:4px 0} .slimHeader #pageNav #navAccount .navSubmenu{border-bottom:solid 1px #fff;border-top:solid 1px #fff;color:#222;height:18px;line-height:18px;padding:0 22px} .slimHeader #navAccount .navSubmenu input{color:#222;height:20px;margin-top:-1px;padding:0} .slimHeader #navAccount .navSubmenu .UIImageBlock{max-width:120px;width:120px;overflow:hidden} .slimHeader #navAccount .navSubmenu .UIImageBlock_Content{max-width:102px;overflow:hidden;display:inline-block;vertical-align:middle;text-overflow:ellipsis;white-space:nowrap} .slimHeader #navAccount .navSubmenu .navSubmenuPageLink{height:18px;color:#000;line-height:normal;border:none} .slimHeader #navAccount .navSubmenu:hover .navSubmenuPageLink,.slimHeader #navAccount .navSubmenu:focus .navSubmenuPageLink,.slimHeader #navAccount .navSubmenu:active .navSubmenuPageLink{color:#fff;background:#6d84b4;text-decoration:none;height:18px} .slimHeader #pageNav .navSubmenu img{height:18px;width:18px} .slimHeader #pageNav .navSubmenu img.uiLoadingIndicatorAsync{width:16px;height:11px;margin-top:4px} .slimHeader #navAccount .highlanderIntro{padding:0 22px 6px 22px} .slimHeader #navAccount .uiScrollableArea.contentAfter:after{display:none} .slimHeader #pageNav #navAccount .navSubmenu:hover,.slimHeader #pageNav #navAccount .navSubmenu:focus,.slimHeader #pageNav #navAccount .navSubmenu:active{background:#6d84b4;border-bottom:solid 1px #3b5998;border-top:solid 1px #3b5998;color:#fff} .slimHeader #navAccount .navSubmenu:hover input,.slimHeader #navAccount .navSubmenu:focus input,.slimHeader #navAccount .navSubmenu:active input{color:#fff;text-decoration:none} .slimHeader #navAccount .navIdentity{padding:5px 22px 5px 17px;width:200px} .slimHeader #navAccount .navIdentityPic a:hover,.slimHeader #navAccount .navIdentityPic:hover img{background:none;border:none;padding:0} .slimHeader #navAccount .navIdentityLinks{margin-top:3px;width:120px} .homeWiderContent div#rightCol .home_right_column{padding-top:0;width:244px} div#contentCol.homeWiderContent, .homeWiderContent #bottomContent{padding-left:0;padding-right:0} .homeWiderContent div#rightCol{padding-right:0} .hasLeftCol .homeWiderContent div#contentArea{padding-left:18px;padding-right:25px;width:511px} div.homeWiderContent .megaphone_box{margin-left:-18px;margin-top:-5px} .HovercardStage{min-width:275px;max-width:350px;padding:10px} .HovercardTitle{max-width:165px} .uiHovercardFooter .buttonsHovercardFooter{float:right} .HovercardLoading{padding:10px;width:275px} span.alternate_name{color:gray;font-weight:normal} .fbJewel{float:left;margin-right:-1px} #jewelContainer{float:left;position:relative;z-index:4} #jewelContainer .hasNew,#jewelContainer .openToggler{position:relative} .fbJewel .jewelCount{background-color:#00376a;border-radius:2px;color:#fff;display:none;font-size: 9px;font-weight:bold;padding-bottom:1px;position:absolute;right:-1px;top:-1px;z-index:101} #jewelContainer .hasNew .jewelCount{display:block} #jewelContainer .openToggler .jewelCount{display:none} .fbJewel .jewelCount span{background-color:#f03d25;border:1px solid #dd3822;border-radius:2px;border-top:0;display:block;padding:1px 1px 0} .fbJewel a.jewelButton{display:block;height:31px;text-decoration:none;margin:0 1px;width:24px} .fbJewel a.jewelButton:active,.fbJewel a.jewelButton:focus,.fbJewel a.jewelButton:hover{background-color:#4b67a1;outline:none;text-decoration:none} #jewelContainer .openToggler .jewelButton{background-color:#fff !important;border:1px solid #333;border-bottom:0;height:30px;margin:0} .fbJewelFlyout{background-color:#fff;border:1px solid #333;border-bottom:2px solid #293e6a;left:0;overflow:visible;position:absolute;top:30px;width:330px;z-index:-1} .fbJewelFlyout .metadata{padding-top:3px} .fbJewelFlyout .jewelItemList{padding:4px 0} .fbJewelFlyout .jewelHighlight .empty{border:none;padding:4px 8px} .fbJewelFlyout .jewelHighlight li a{color:#333;display:block;padding:4px 8px;text-decoration:none} .fbJewelFlyout .jewelHighlight li a:hover,.fbJewelFlyout .jewelHighlight li a:active,.fbJewelFlyout .jewelHighlight li a:focus{background-color:#6d84b4 !important;border-bottom:1px solid #3b5998;border-top:1px solid #3b5998;outline:none;padding-top:3px;padding-bottom:3px;text-decoration:none} .fbJewelFlyout .jewelHighlight a:hover span,.fbJewelFlyout .jewelHighlight a:active span,.fbJewelFlyout .jewelHighlight a:focus span,.fbJewelFlyout .jewelHighlight a:hover div,.fbJewelFlyout .jewelHighlight a:active div,.fbJewelFlyout .jewelHighlight a:focus div,.fbJewelFlyout .jewelHighlight li.selected a,.fbJewelFlyout .jewelHighlight li.selected .timestamp{color:#fff} .fbJewelFlyout .jewelHighlight li{cursor:pointer;border-top:1px solid #e6e6e6} .fbJewelFlyout .jewelHighlight li:first-child{border-top:none} .fbJewelFlyout li.jewelItemNew{background:#eff1f7} .fbJewelFlyout li.jewelItemResponded{background:#fff9d7} .fbJewelFlyout .jewelLoading{display:block;margin:10px auto} .fbJewelFlyout .jewelHeader{padding:7px 8px 7px 8px;border-color:#ddd} .fbJewelFlyout .jewelFooter a{background-color:#f7f7f7;border-top:1px solid #e0e0e0;display:block;font-weight:bold;padding:8px;text-align:center} .fbJewelFlyout .jewelFooter a:hover,.fbJewelFlyout .jewelFooter a:active,.fbJewelFlyout .jewelFooter a:focus{background-color:#6d84b4;border-top:1px solid #3b5998;color:#fff;outline:none;text-decoration:none} .fbJewelFlyout .jewelFooter .seeMoreCount{display:none;font-weight:bold;padding:2px 0 0} .fbJewelFlyout .jewelUnread .seeMoreCount{display:block} .fbJewelFlyout .jewelFooter a:hover .seeMoreCount,.fbJewelFlyout .jewelFooter a:active .seeMoreCount,.fbJewelFlyout .jewelFooter a:focus .seeMoreCount{color:#e7e7e7} #fbMessagesJewel a.jewelButton{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yO/r/OuziOid04jS.png);background-repeat:no-repeat;background-position:-56px -75px} #fbMessagesJewel a.jewelButton:active,#fbMessagesJewel a.jewelButton:focus,#fbMessagesJewel a.jewelButton:hover{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yO/r/OuziOid04jS.png);background-repeat:no-repeat;background-position:0 -247px} #fbMessagesJewel.hasNew a.jewelButton{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yO/r/OuziOid04jS.png);background-repeat:no-repeat;background-position:-56px -110px} #fbMessagesJewel.openToggler a.jewelButton{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yO/r/OuziOid04jS.png) !important;background-repeat:no-repeat !important;background-position:-31px -110px !important} #fbMessagesFlyout{left:25px} #fbMessagesFlyout li.empty{color:#757575;padding:4px 8px 10px} #fbMessagesFlyout li a{overflow:hidden;text-overflow:ellipsis;white-space:nowrap} #fbMessagesFlyout .content{display:block;width:auto} #fbMessagesFlyout .author{color:#3b5998;font-weight:bold;padding-top:2px;white-space:normal} #fbMessagesFlyout .preview{overflow:hidden;text-overflow:ellipsis;white-space:nowrap} #fbMessagesFlyout .subject{color:#333} #fbMessagesFlyout .time{color:#9d9d9d;font-size: 9px} #fbMessagesFlyout a:hover .author,#fbMessagesFlyout a:hover .preview,#fbMessagesFlyout a:hover .subject,#fbMessagesFlyout a:hover .time{color:#fff} .noMessages #fbNotificationsJewel{margin-left:25px} #fbNotificationsJewel a.jewelButton{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yO/r/OuziOid04jS.png);background-repeat:no-repeat;background-position:-25px -247px} #fbNotificationsJewel a.jewelButton:active,#fbNotificationsJewel a.jewelButton:focus,#fbNotificationsJewel a.jewelButton:hover{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yO/r/OuziOid04jS.png);background-repeat:no-repeat;background-position:-31px -75px} #fbNotificationsJewel.hasNew a.jewelButton{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yO/r/OuziOid04jS.png);background-repeat:no-repeat;background-position:-56px -40px} #fbNotificationsJewel.openToggler a.jewelButton{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yO/r/OuziOid04jS.png) !important;background-repeat:no-repeat !important;background-position:-31px -40px !important} #fbNotificationsFlyout{left:50px} #fbNotificationsFlyout a:hover .blueName{color:#fff} #fbNotificationsFlyout .blueName{color:#3b5998;font-weight:bold} #fbNotificationsFlyout .staticAppIcon{background-position:right;height:16px;width:16px} #fbNotificationsFlyout .selected .staticAppIcon{background-position:left} #fbNotificationsFlyout .info{max-width:259px;word-wrap:break-word} #fbRequestsJewel a.jewelButton{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yO/r/OuziOid04jS.png);background-repeat:no-repeat;background-position:-25px -282px} #fbRequestsJewel a.jewelButton:active,#fbRequestsJewel a.jewelButton:focus,#fbRequestsJewel a.jewelButton:hover{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yO/r/OuziOid04jS.png);background-repeat:no-repeat;background-position:-50px -247px} #fbRequestsJewel.hasNew a.jewelButton{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yO/r/OuziOid04jS.png);background-repeat:no-repeat;background-position:-75px -247px} #fbRequestsJewel.openToggler a.jewelButton{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yO/r/OuziOid04jS.png) !important;background-repeat:no-repeat !important;background-position:0 -282px !important} #fbRequestsFlyout ul.jewelItemList{padding:0} #fbRequestsFlyout li{padding:4px 8px} #fbRequestsFlyout .jewelHighlight li{padding:0} #fbRequestsFlyout li.empty,#fbRequestsFlyout .jewelHighlight li.empty{color:#757575;padding:4px 8px 10px 8px} #fbRequestsFlyout .fbRequestMessageWrapper{white-space:nowrap} #fbRequestsFlyout .fbRequestMessage{display:inline-block;max-width:169px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap} #fbRequestsFlyout .jewelHighlight .title{color:#3b5998} #fbRequestsFlyout .jewelHighlight .mutualFriends{color:gray} #fbRequestsFlyout .jewelHighlight a:hover .title,#fbRequestsFlyout .jewelHighlight a:focus .title,#fbRequestsFlyout .jewelHighlight a:active .title,#fbRequestsFlyout .jewelHighlight a:hover .mutualFriends,#fbRequestsFlyout .jewelHighlight a:focus .mutualFriends,#fbRequestsFlyout .jewelHighlight a:active .mutualFriends{color:#fff} #fbRequestsFlyout .jewelRequest .jewelRequestContent{padding-top:5px} #fbRequestsFlyout .title{font-size: 11px} #fbRequestsFlyout .requestLabel{line-height:12px} #fbRequestsFlyout .jewelFooter .seeMoreCount{display:block} .fbRequestsJewelRelationshipIcon{margin-bottom:-3px;padding-right:5px} #fbRequestsFlyout .fbRequestList{padding-top:4px} #fbRequestsFlyout .fbMoreRequestList{border-top:1px solid #e9e9e9;padding:0} #fbRequestsFlyout .friendBrowserExtraSpacing{margin:0} .uiScrollableArea #fbRequestsPYMKContainer .uiListItem:last-child{padding:0} #fbRequestsFlyout .jewelNoScroll .jewelFooter{margin-top:4px} #fbRequestsFlyout .uiScrollableAreaContent{padding-bottom:4px} #fbRequestsList .uiScrollableArea.contentAfter{border-bottom:1px solid #bbb} #fbRequestsList .uiScrollableArea{border-bottom:1px solid #e0e0e0} #fbRequestsFlyout .jewelNoScroll .jewelFooter a{border-top:1px solid #e0e0e0} #fbRequestsFlyout .jewelFooter a{border:0} #fbRequestsFlyout .jewelFooter a:hover{border-top:1px solid #3b5998} .uiScrollableHeaderBox{position:absolute;top:0;width:100%;z-index:1} #fbRequestsFlyout .jewelHeader{position:relative;background:white;padding-right:10px} #fbRequestsFlyout .uiScrollableAreaContent .uiListItem{padding-right:12px} .textMetrics{border:none;height:1px;overflow:hidden;padding:0;position:absolute;top:-9999999px} .ego_x{float:right;opacity:0} .ego_unit:hover .ego_x{opacity:1} .ego_title{display:block;font-weight:bold;margin-top:2px;max-width:162px;word-wrap:break-word} .ego_page .UIStandardFrame_Container{padding-left:0;width:980px} .ego_page .UIStandardFrame_Content{width:720px} .ego_page .UIStandardFrame_SidebarAds{width:auto} .ego_column{width:244px} .ego_section{margin-bottom:15px} .ego_section .async_saving a{display:none} .ego_section .indicator{display:none} .ego_section .async_saving .indicator{display:inline} .ego_unit{margin-bottom:8px} .ego_unit + .ego_unit, .ego_unit + .ego_appended_units .ego_unit{padding-top:8px;border-top:1px solid #e9e9e9} div.egoProfileTemplate div{margin-top:2px} div.egoStatusStory{max-width:197px;word-wrap:break-word} .fbpage_edit_header{padding:0;margin:0;height:31px;border:0;margin:-7px 0 19px;border-bottom:1px solid #ccc;background:#fff} .pages_edit .fbpage_edit_header{margin:0} .icon_dock{margin:0;padding:0;width:300px;float:right} .icon_dock .icon_dock_container{margin:0;padding:0;padding-top:8px;float:right;z-index:30} .icon_dock .edit_link{padding-right:8px;padding-top:10px;font-weight:bold;color:#666;display:block;margin:0;float:right} .icon_dock a{padding:0;padding-left:5px;padding-top:8px;margin:0 0 0 0} .edit_app_switcher{margin:0 0;padding-top:6px} .edit_app_switcher .app_switcher_button .name{padding:2px 0 2px 6px} .edit_app_switcher .app_switcher_menu{width:160px} .edit_app_switcher .app_switcher_menu .name{width:105px;text-align:left} .edit_app_switcher .app_switcher_button .arrow{padding:2px 0 1px} .fbpage_edit_header .left_header{float:left;font-size: 11px;font-weight:bold;overflow:hidden;padding:7px 0 2px;white-space:nowrap;width:250px} .fbpage_edit_header .left_header_text{padding-left:5px;position:relative;top:-4px} .fbpage_edit_header div.left_header .edit_link{font-weight:normal;padding-left:4px;color:#ccc} .fbpage_edit_header div.left_header .edit_link a{color:#6d84b4} .fan_status_inactive{background-color:#fffccc;color:#666;margin:0;padding:0 0 0 3px;line-height:18px} div.PageLikeButton .PageLikedButton,div.PageLikeButton .PageLikedButton .uiButtonText,div.PageLikeButton .PageLikedButton input{cursor:default} div.PageLikeButton .uiButtonHover,div.PageLikeButton .uiButtonHover:active,div.PageLikeButton .uiButtonHover:hover{background:#6d84b4;border-color:#3b5998;box-shadow:none} div.PageLikeButton .uiButtonHover input{color:#fff} .bulkTaggerTypeahead{width:210px} .bulk_tagger_body .bulkTagIcon{margin-top:6px;margin-right:7px} .bulk_tagger_body .bulkTagStatus{display:inline-block;padding-top:4px} .bulkTagSaving{display:none} .tagSaving .bulkTagSaving{display:inline-block;margin-top:2px} .bulk_tagger_loading{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yk/r/LOOn0JtHNzb.gif);background-repeat:no-repeat;background-position:center center;height:21px} div.fbCommentViewUfi ul.fbPhotoTheaterUfi, div.fbCommentViewUfi, div.fbCommentViewCaption{width:364px} span.fbCommentViewThumb i{width:320px} .photosCroppedThumbHighlighted{background-color:#edeff4;border-color:#3b5998} .fbxPhotoSetPageHeader .fbxPhotoSetPageHeaderByline{width:714px} .fbxPhotoSetPageHeader .fbxPhotoSetPageHeaderBox{width:714px;float:left} .fbxPhotoSetPageHeader .fbxPhotoSetViewSwitcher{width:8px} .fbxPhotoSetPageHeader .fbxPhotoSetViewSwitcher .fbxPhotoSetViewSwitcherIcon{margin-top:2px} #fbxPhotoSetViewSwitcherGrid{border-right:0} #fbxPhotoSetViewSwitcherComment{margin-left:0} #fbxPhotoSetViewSwitcherMap{margin-left:-2px;padding-left:2px;padding-right:10px} .fbxPhotoSetViewSwitcherThrobber{background-position:left center;display:inline-block} .fbxPhotoSetPageHeader .async_throbber_left .async_saving{padding-left:28px} #fbCommentViewList{margin-top:-10px} div.photoSetHeader{padding-bottom:0} .fbxPhotoSetPageMetadata{width:437px} .fbPhotoFeedbackForm .uiUfi{width:430px} .fbPhotosReorderableGrid .drag{z-index:200} .fbPhotosReorderableGrid .dragWrapper{position:relative} .fbPhotosReorderableGrid .dragWrapper .uiMediaThumb{cursor:move} .fbPhotosReorderableGrid .dragWrapper .dragHover{display:none} .fbPhotosReorderableGrid .dragWrapper:hover .dragHover{display:block !important} .fbPhotosReorderableGrid .dragHover{background-color:#ddd;position:absolute;left:10px;top:10px} .fbPhotosReorderableGrid .mover{display:block;left:-8px;overflow:hidden;position:absolute;text-align:right;top:3px;z-index:2} .fbPhotosReorderableGrid .mover .arrow{position:relative;top:-20px} .fbPhotosReorderableGrid .mover .arrow:active,.fbPhotosReorderableGrid .mover .arrow:focus{top:0} .fbPhotosGrid td{width:171px} .fbPhotosGridTight td{padding-right:8px;width:150px} .fbPhotosGrid .photoDetails{width:166px} .fbPhotosGrid .photoDetails .photoText{word-wrap:break-word;overflow:hidden} .fbPhotosGridTight .photoDetails{width:154px} .fbPhotosGrid .lastChild{padding-right:0} div.albumsHeader{padding-bottom:0} .fbPhotosGridHeader{margin:0 0 8px} .uiHeader + .fbPhotosGridHeader{margin-top:0} .fbPhotoInlineCaptionEditor .editIcon{background:url(http://static.ak.fbcdn.net/rsrc.php/v1/y4/r/ffUJLIqlYCk.gif) no-repeat -18px 0;height:18px;width:18px} .fbPhotoInlineCaptionEditor .editIcon:hover{background-position:0 0} .fbPhotoInlineCaptionEditor .captionWrapper{margin-right:18px} .fbPhotoInlineCaptionEditorEditMode .captionWrapper{margin-right:0} .fbPhotoInlineCaptionEditor .editForm, .fbPhotoInlineCaptionEditorEditMode .fbPhotoCaption, .fbPhotoInlineCaptionEditorEditMode .noCaption, .fbPhotoInlineCaptionEditorEditMode .editIcon{display:none} .fbPhotoInlineCaptionEditorEditMode .editForm{display:block;margin:0;padding:0;text-align:right} .fbPhotoInlineCaptionEditor textarea{width:429px;font-size: 11px;line-height:13px;margin:0 0 2px 0;padding:0} .fbPhotoInlineCaptionEditor .uiMentionsInput .highlighter{font-size: 11px;overflow:hidden;padding:4px 4px 0 4px;left:2px;top:2px;width:392px} .fbPhotoInlineCaptionEditor .mentionsTypeahead{margin-bottom:5px} .fbPhotoInlineCaptionEditor .mentionsTypeahead .wrap{padding:5px} .fbPhotoInlineCaptionEditor .uiTypeahead .innerWrap{overflow:visible} .fbPhotoInlineCaptionEditor .uiMentionsInput .highlighter div{line-height:13px;white-space:pre-wrap;text-align:left} .fbPhotosPhoto{background-color:#f2f2f2;position:relative} .fbPhotosPhoto .photo .img{display:block;margin-left:auto;margin-right:auto} .fbPhotosPhotoButtons{bottom:27px;color:#333;cursor:default;height:0;left:6px;position:absolute;right:6px;user-select:none;z-index:2} .imageLoading .fbPhotosPhotoButtons{display:none} .fbPhotosPhotoButtons .tagMessage,.fbPhotosPhotoButtons .cropMessage{background-color:#f2f2f2;background-color:rgba(255, 255, 255, .8);color:#333;display:none;height:20px;left:0;line-height:20px;margin-left:-10px;margin-right:-10px;padding:5px 10px 6px;position:absolute;right:0;top:0} .fbPhotosPhotoButtons .tagMessage .doneTaggingLink{cursor:pointer;display:inline-block;margin-left:10px} .fbPhotosPhotoButtons .likeCommentGroup .unlike{display:none} .fbPhotosPhotoButtons .viewerLikesThis .like{display:none} .fbPhotosPhotoButtons .viewerLikesThis .unlike{display:block} .taggingMode .fbPhotosPhotoButtons .tagMessage{display:block} .taggingMode .fbPhotosPhotoButtons .likeCommentGroup,.taggingMode .fbPhotosPhotoButtons .commentButton,.taggingMode .fbPhotosPhotoButtons .tagButton{display:none} .fbPhotosPhotoButtons .cropMessage{display:none} .croppingMode .fbPhotosPhotoButtons .cropMessage{display:block} .croppingMode .fbPhotosPhotoButtons .likeCommentGroup,.croppingMode .fbPhotosPhotoButtons .commentButton,.croppingMode .fbPhotosPhotoButtons .tagButton{display:none} .fbPhotosPhotoButtons .hasLocation .addLocation,.fbPhotosPhotoButtons .editLocation{display:none} .fbPhotosPhotoButtons .hasLocation .editLocation,.fbPhotosPhotoButtons .addLocation{display:block} .fbPhotosPhotoTagboxes{height:100%;left:0;position:absolute;top:0;width:100%;pointer-events:none} .showVideo .fbPhotosPhotoTagboxes,.minPhotoTagboxes{height:0} .fbPhotosPhotoTagboxes .tagsWrapper{display:inline-block;max-height:100%;max-width:100%;position:relative;vertical-align:middle} .minPhotoTagboxes .tagsWrapper{display:block;left:0;position:absolute;right:0;top:0} .fbPhotosPhotoTagboxBase{line-height:normal;position:absolute} .imageLoading .fbPhotosPhotoTagboxBase,.croppingMode .fbPhotosPhotoTagboxBase{display:none} .fbPhotosPhotoTagboxBase .borderTagBox,.fbPhotosPhotoTagboxBase .innerTagBox{box-sizing:border-box;height:100%;width:100%} .ieContentFix{display:none;font-size: 200px;height:100%;overflow:hidden;width:100%} .fbPhotosPhotoTagboxBase .tag{bottom:0;left:50%;position:absolute} .fbPhotosPhotoTagboxBase .tagPointer{left:-50%;position:relative} .fbPhotosPhotoTagboxBase .tagArrow{left:50%;margin-left:-10px;position:absolute;top:-4px} .fbPhotosPhotoTagboxBase .tagName{background:#fff;color:#404040;cursor:default;font-weight:normal;padding:2px 6px 3px;top:3px;white-space:nowrap} .fbPhotosPhotoTagboxBase .borderTagBox,.fbPhotosPhotoTagboxBase .tagName{box-shadow:0 0 1px rgba(0, 0, 0, .25), 0 1px 5px 3px rgba(0, 0, 0, .05);background-clip:padding-box;border:1px solid #404040;border-color:rgba(0, 0, 0, .25)} .fbPhotosPhotoTagboxBase .innerTagBox{border:4px solid #fff;border-color:rgba(255, 255, 255, .8)} .fbPhotosPhotoTagboxes .tagBoxPending .tagName{padding:3px 3px 3px 6px;pointer-events:auto} .fbPhotosPhotoTagboxes .tagName .tagForm span,.fbPhotosPhotoTagboxes .tagName .tagForm{display:inline-block;float:none;vertical-align:middle} .imageLoading .tagBoxPending,.taggingMode .fbPhotosPhotoTagboxes .tagBoxPending{display:none} .fbPhotosPhotoTagboxes .hover{opacity:1;z-index:1} .taggingMode .fbPhotosPhotoTagboxes .hover{cursor:crosshair;z-index:auto} .fbPhotosPhotoTagboxes .tagBox .tag{top:85%} .fbPhotosPhotoTagboxes .tagBoxPending .tag{margin-top:10px;top:100%} .fbPhotosPhotoTagboxes .tagBox .tagIgnored{color:#999} .fbPhotosPhotoTagboxes .tag,.fbPhotosPhotoTagboxes .innerTagBox,.fbPhotosPhotoTagboxes .borderTagBox{visibility:hidden} .fbPhotosPhotoTagboxes .tagBoxPending.showPendingTagName .tag,.fbPhotosPhotoTagboxes .tagBoxPending .borderTagBox,.fbPhotosPhotoTagboxes .tagBoxPending .innerTagBox{opacity:.7;-o-transition:opacity .3s linear;visibility:visible} .fbPhotosPhotoTagboxes .hover.tagBox .tag,.fbPhotosPhotoTagboxes .hover.tagBoxPending.showPendingTagName .tag,.fbPhotosPhotoTagboxes .showTag .borderTagBox,.fbPhotosPhotoTagboxes .showTag .innerTagBox,.fbPhotosPhotoTagboxes .tagBoxPendingResponse .tag,.fbPhotosPhotoTagboxes .tagBoxPending.hover .borderTagBox,.fbPhotosPhotoTagboxes .tagBoxPending.hover .innerTagBox{opacity:1;-o-transition:opacity .3s linear;visibility:visible} .showingTag .tagsWrapper .tagBoxPending .tag,.showingTag .tagsWrapper .tagBoxPending.showPendingTagName .tag,.showingTag .tagsWrapper .tagBoxPending .borderTagBox,.showingTag .tagsWrapper .tagBoxPending .innerTagBox{opacity:0} .fbPhotosPhotoTagboxes .hover.tagBoxPending .borderTagBox{border:1px solid #3b5998} .fbxPhoto .fbPhotoContributor{min-height:32px;padding:12px 0 5px;width:448px} .fbxPhoto .fbPhotoContributorName{font-weight:bold;padding-top:1px;padding-bottom:3px;display:inline} .fbxPhoto .fbPhotosPhotoCaption{outline:none;display:inline;width:auto} .fbxPhoto .fbPhotosPhotoCaption:empty{margin:0 !important} .fbxPhoto .fbPhotosPhotoCaption .fbPhotoInlineCaptionEditorEditMode{display:block;width:365px} .fbxPhoto .fbPhotoInlineCaptionEditor,.fbxPhoto .fbPhotoInlineCaptionEditor .captionWrapper,.fbxPhoto .fbPhotoInlineCaptionEditor .fbPhotoCaption{display:inline;margin:0} .fbxPhoto .fbPhotoInlineCaptionEditor .editIcon{background:url(http://static.ak.fbcdn.net/rsrc.php/v1/y4/r/-PAXP-deijE.gif) no-repeat 0 0;height:auto;width:auto} .fbxPhoto .fbPhotoInlineCaptionEditorEditMode .fbPhotoCaption{display:none} .fbxPhoto .fbPhotoInlineCaptionEditor .uiMentionsInput,.fbxPhoto .fbPhotoInlineCaptionEditor textarea{width:365px} .fbxPhoto .fbPhotoInlineCaptionEditor .uiMentionsInput .highlighter{width:335px} .fbxPhoto .fbPhotoUfiCol{padding-right:10px;vertical-align:top;width:474px} .fbxPhoto .fbPhotoDataCol{vertical-align:top;width:262px} .fbxPhoto .fbPhotosPhotoFeedback{margin-top:3px} .fbxPhoto .fbPhotosPhotoUfi{padding-top:2px} .fbxPhoto .fbPhotoRemoveFromProfileLink .img{margin-right:3px} .fbxPhoto .fbPhotoTagList{display:inline} .fbxPhoto .fbPhotoTagList .textTagHovercardLink{color:#333;text-decoration:none} .fbxPhoto .fbPhotoRemoveFromProfile{border-bottom:1px solid #e5e5e5;-o-transition:background 500ms ease-out} .fbxPhoto .fbPhotosOnProfile{padding-top:2px} .fbxPhoto .fbPhotosOnProfile .highlight{background:#fff8cc} .fbxPhoto .fbPhotosPhotoActions,.fbPhotosPhotoActions .rotateButtons{border-top:1px solid #e5e5e5} .fbxPhoto .fbPhotoRemoveFromProfile,.fbxPhoto .fbPhotosMediaInfo,.fbxPhoto .fbPhotosPhotoActions .fbUndoSpamReport,.fbxPhoto .fbPhotosPhotoActions a,.fbPhotosPhotoActions .rotateButtons{padding-left:5px;padding-right:5px} .fbPhotosPhotoActions .rotateButtons{height:25px;margin-bottom:5px} .fbxPhoto .fbPhotosPhotoActions .rotateWait{color:gray} .fbxPhoto .fbPhotosPhotoActions .fbUndoSpamReport a{padding-left:0;padding-right:0} .fbPhotosMediaInfo{margin-top:5px} .fbxPhoto .fbPhotosPhotoActions a,.fbxPhoto .fbPhotosPhotoActions .fbUndoSpamReport{display:block;margin-bottom:5px} .fbxPhoto .fbPhotosPhotoActions .iconActionLinks{border-bottom:1px solid #e5e5e5;margin-bottom:7px;padding-bottom:3px} .fbPhotosPhotoActions .taggingOn,.taggingMode .taggingOff{display:none} .taggingMode .taggingOn{display:inline} .fbPhotosPhotoActions .croppingModeOn .startCropping,.fbPhotosPhotoActions .doneCropping{display:none} .fbPhotosPhotoActions .croppingModeOn .doneCropping{display:block} .fbPhotosAudienceEditable{margin-right:0} .fbPhotosAudienceNotEditable{float:left;margin-top:1px} .fbPhotosAudience{margin-bottom:-5px;margin-top:-4px} .fbPhotosPhotoActions .addLocationActionIcon{margin:0 6px 0 1px} .fbPhotosPhotoActions .addLocation,.fbPhotosPhotoActions .hasLocation .editLocation{display:inline} .fbPhotosPhotoActions .editLocation,.fbPhotosPhotoActions .hasLocation .addLocation{display:none} #fbxPhotoContentContainer{position:relative} .fbPhotoTagApprovalBox{background-color:rgba(255,255,255,0.85);border:1px solid rgb(128,128,128);cursor:default;font-size: 11px;left:50%;margin:5px 0 0 -285px;padding:0;position:absolute;text-align:left;top:12px;width:558px;z-index:1} .fbPhotoApprovalPendingButtons{float:right} .fbPhotoApprovalPendingHeader{border-bottom:1px solid #c9c9c9;font-weight:bold;line-height:24px;padding-left:8px} .fbPhotoApprovalPrevPager,.fbPhotoApprovalNextPager{border-bottom:1px solid #c9c9c9;float:left;height:24px;width:25px} .fbPhotoApprovalUnit{line-height:normal;padding:10px 10px 16px 10px} .fbPhotoTagApprovalPager .pager{border-left:1px solid #c9c9c9;display:inline-block;float:right;height:24px;width:25px} .fbPhotoTagApprovalPager .prevPager{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yF/r/i83ivFZ2BNV.png);background-repeat:no-repeat;background-position:-25px -25px} .fbPhotoTagApprovalPager .prevPager.enabled{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yF/r/i83ivFZ2BNV.png);background-repeat:no-repeat;background-position:0 -25px} .fbPhotoTagApprovalPager .nextPager{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yF/r/i83ivFZ2BNV.png);background-repeat:no-repeat;background-position:-25px 0} .fbPhotoTagApprovalPager .nextPager.enabled{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yF/r/i83ivFZ2BNV.png);background-repeat:no-repeat;background-position:0 0} .imageLoading .fbPhotoTagApproval,.fbPhotoTagApproval.hidePagers .pager{display:none} .fbPhotoPublicLink{text-align:center} .theaterMode .defaultScrollbar, .theaterMode .defaultScrollbar .fbChatSidebar{margin-right:15px} .theaterMode .scrollbar20, .theaterMode .scrollbar20 .fbChatSidebar{margin-right:20px} .theaterMode #blueBar.fixed_elem #pageHead{position:relative} .theaterMode .defaultScrollbar #blueBar.fixed_elem #pageHead{left:-7px} .theaterMode .scrollbar20 #blueBar.fixed_elem #pageHead{left:-10px} .sidebarMode.theaterMode .defaultScrollbar #blueBar.fixed_elem #pageHead{left:-97px} .sidebarMode.theaterMode .scrollbar20 #blueBar.fixed_elem #pageHead{left:-100px} .theaterMode .defaultScrollbar .fbDockWrapperRight{right:15px} .theaterMode .scrollbar20 .fbDockWrapperRight{right:20px} .theaterMode .fbTimelineSideAds, .theaterMode .fbTimelineScrubber{margin-right:-483px} .sidebarMode.theaterMode .fbTimelineSideAds, .sidebarMode.theaterMode .fbTimelineScrubber{margin-right:-393px} .theaterMode .defaultScrollbar .fbTimelineStickyHeader{right:145px} .sidebarMode.theaterMode .defaultScrollbar .fbTimelineStickyHeader{right:325px} .theaterMode .scrollbar20 .fbTimelineStickyHeader{right:140px} .sidebarMode.theaterMode .scrollbar20 .fbTimelineStickyHeader{right:330px} .sidebarMode.theaterMode .defaultScrollbar .fbDockWrapperRight{right:190px} .sidebarMode.theaterMode .scrollbar20 .fbDockWrapperRight{right:195px} .sidebarMode.ticker.theaterMode .defaultScrollbar .fbDockWrapperRight{right:220px} .sidebarMode.ticker.theaterMode .scrollbar20 .fbDockWrapperRight{right:225px} .fbPhotoSnowbox{background-color:rgba(252, 252, 252, .75);bottom:0;left:0;overflow:hidden;position:fixed;right:0;top:0;z-index:300} .theaterMode .fbPhotoSnowbox{overflow-x:auto;overflow-y:scroll;z-index:101} .theaterMode body{overflow:hidden} .theaterMode #blueBar,.theaterMode .fbChatSidebar,.theaterMode .fbDockWrapper{z-index:50} .fbPhotoSnowbox .closeTheater{position:absolute;right:6px;top:6px;z-index:2} .fbPhotoSnowbox .container{background-color:#fff;box-shadow:0 0 1px rgba(0, 0, 0, .25), 0 1px 5px 3px rgba(0, 0, 0, .05), 0 5px 4px -3px rgba(0, 0, 0, .06);margin:9px auto 40px auto;max-width:960px;min-width:720px;padding:12px;width:720px} .fbPhotoSnowbox .bottomSpace{padding-bottom:40px;position:absolute} .fbPhotoSnowbox .stageWrapper,.fbPhotoSnowbox .stagePagers{text-align:center;width:100%} .fbPhotoSnowbox .stageWrapper{max-height:960px;min-height:402px;height:100%;cursor:default;position:relative} .fbPhotoSnowbox .stagePagers{height:51.1%;max-height:480px;min-height:201px} .fbPhotoSnowbox .stageActions,.fbPhotoSnowbox .stagePagers,.fbPhotoSnowbox .stage .stageWrapper img{user-select:none;-o-user-select:none} .fbPhotoSnowbox .stagePagers,.fbPhotoSnowbox .stageActions{cursor:pointer;left:0;position:absolute;top:0} .fbPhotoSnowbox .stageActions{bottom:0;height:0;top:auto;width:100%} .taggingMode .stageActions{height:100%} .fbPhotoSnowbox .photoInfoWrapper,.dataLoading .stageActions{display:none} .dataLoaded .photoInfoWrapper{display:block} .taggingMode .stageActions{background:url(http://static.ak.fbcdn.net/rsrc.php/v1/y4/r/-PAXP-deijE.gif) no-repeat;cursor:crosshair} .fbPhotoSnowbox .stage{background:#f6f6f6;cursor:pointer;display:block;font-size:0;height:100%;max-height:960px;min-height:402px;position:relative;text-align:center;width:100%} .fbPhotoSnowbox .stage .fbPhotosPhotoTagboxes{font-size: 11px} .fbPhotoSnowbox .videoStage,.imagePixelsLoading .stage{background:#f6f6f6 url(http://static.ak.fbcdn.net/rsrc.php/v1/y9/r/jKEcVPZFk-2.gif) no-repeat center center} .fbPhotoSnowbox .showVideo .videoStage{display:block} .fbPhotoSnowbox .videoStage,.fbPhotoSnowbox .showVideo .stage{display:none} .fbPhotoSnowbox .videoStage{height:100%;width:100%;position:absolute;z-index:1} .fbPhotoSnowbox .videoStage embed,.fbPhotoSnowbox .videoStage object{display:inline-block;max-height:100%;max-width:100%;text-align:center;vertical-align:middle} .fbPhotoSnowbox .stage img{display:inline-block;height:auto;image-rendering:optimizeQuality;max-height:100%;max-width:100%;vertical-align:middle;width:auto} .fbPhotoSnowbox .stageError{left:50%;margin-left:-278px;margin-top:-82px;position:absolute;text-align:left;top:50%} .fbPhotoSnowbox .uiButtonOverlay:active{box-shadow:0 0 1px rgba(0, 0, 0, .05), 0 0 2px rgba(0, 0, 0, .1), inset 0 1px 0 rgba(0, 0, 0, .08)} .fbPhotoSnowbox .prev,.fbPhotoSnowbox .next{bottom:-40px;left:-100px;padding:30px;position:absolute} .fbPhotoSnowbox .next{left:auto;right:-100px} .fbPhotoSnowbox .arrowLeft a,.fbPhotoSnowbox .arrowRight a{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yn/r/77uboGPzRks.png);background-position:10px 9px;background-repeat:no-repeat;cursor:pointer;height:30px;opacity:1;padding:0;width:31px} .pagingDisabled .arrowLeft a,.pagingDisabled .arrowRight a{opacity:.65;border-color:#a2a2a2;border-color:rgba(162, 162, 162, .55)} .fbPhotoSnowbox .pagingReady .arrowLeft a:hover,.fbPhotoSnowbox .pagingReady .arrowRight a:hover{border-color:#7489b6;border-color:rgba(59, 89, 152, .55)} .fbPhotoSnowbox .arrowRight a{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yi/r/KsODvVMV-0n.png)} .fbPhotoSnowbox .pagingReady .arrowLeft a:hover{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yC/r/B_qduFj1etl.png)} .fbPhotoSnowbox .pagingReady .arrowRight a:hover{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/y-/r/lWUUm37r11D.png)} .fbPhotoSnowbox .pagingReady .arrowLeft a:active{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yL/r/U1-etAWzQ4t.png)} .fbPhotoSnowbox .pagingReady .arrowRight a:active{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yj/r/wU__r0m45JU.png)} .fbPhotoSnowbox .fbPhotoSnowboxInfo{background:#fff;height:75px;padding:20px 0;width:100%} .dataLoading .fbPhotoSnowboxInfo{display:none} .fbPhotoSnowboxInfo .fbPhotoUfiCol,.fbPhotoSnowboxInfo .fbPhotoDataCol,.fbPhotoSnowboxInfo .fbPhotoAdsCol{padding:0 0 10px} .fbPhotoSnowboxInfo .fbPhotoUfiCol{width:60%} .fbPhotoSnowboxInfo .fbPhotoDataCol{max-width:280px;width:33%} .adsOnSide .fbPhotoSnowboxInfo .fbPhotoDataCol{max-width:170px;width:20%} .fbPhotoSnowboxInfo .fbPhotosPhotoUfi{width:auto} .fbPhotoSnowbox .fbPhotoSnowboxInfo .fbPhotoContributor{width:95%;max-width:515px;min-width:390px} .fbPhotoSnowboxInfo .photoDetailsContainer{width:100%;max-width:280px;float:right} .fbPhotoSnowboxInfo .ego_section{margin-bottom:0} .fbPhotoSnowboxInfo .ego_section .uiHeader{display:none} .fbPhotoSnowboxInfo .fbPhotoAdsCol .fbPhotoSnowboxAdsSide{display:none;float:right;width:170px} .adsOnSide .fbPhotoAdsCol .fbPhotoSnowboxAdsSide{display:block} .fbPhotoSnowboxAdsSide .ego_column{width:100%} .fbPhotoSnowboxAdsBottom{border-top:1px solid #e5e5e5;width:100%} .fbPhotoSnowboxAds.fbPhotoSnowboxAdsNone .fbPhotoSnowboxAdsSponsored,.adsOnSide .fbPhotoSnowboxAdsBottom{display:none} .fbPhotoSnowboxAdsBottom .fbEmuVertical .image img,.fbPhotoSnowboxAdsBottom .fbEmuVertical .image i{max-height:72px;max-width:100px;padding-top:3px} .fbPhotoSnowboxAdsBottom .fbEmuVertical .image{display:block;float:left;margin-right:8px;max-width:100px;width:42%} .fbPhotoSnowboxAdsBottom .fbEmuVertical .body{display:table-cell;vertical-align:top;width:58%} .fbPhotoSnowboxAdsBottom .fbEmuVertical .inline{float:left} .fbPhotoSnowboxAds .fbPhotoSnowboxAdsSponsored{float:right;text-align:right;width:95%} .dataLoading .fbPhotoSnowboxInfo .fbPhotoUfiCol,.dataLoading .fbPhotoSnowboxInfo .fbPhotoDataCol,.dataLoading .fbPhotoSnowboxInfo .fbPhotoAdsCol{display:none} a.uiMediaThumbTagging{cursor:default} a.uiMediaThumbTagging i,a.uiMediaThumbTagging .taggerOverlay{cursor:crosshair} a.uiMediaThumbTagging .taggerOverlayDisabled{cursor:default} a.uiMediaThumbTagging:hover,a.uiMediaThumbTagging:active,a.uiMediaThumbTagging:focus{border-color:#ccc;text-decoration:none} .tagWrapper{position:relative;overflow:hidden} a.uiMediaThumbTagging .taggerOverlay .lockBar{background-color:#222;color:#fff;left:10px;padding-left:21px;position:absolute;top:86px;opacity:.9} a.uiMediaThumbTagging .taggerOverlay .lockIcon{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/y7/r/LIMS6JdvvOD.png);background-repeat:no-repeat;display:inline-block;height:15px;left:6px;position:absolute;top:5px;width:15px} a.uiMediaThumbTagging .taggerOverlay .blackwash{background:#000;height:100%;left:0;opacity:.7;position:absolute;top:0;width:100%} a.uiMediaThumbTagging .taggerOverlay .highlightBox{border:2px solid #fff;opacity:.3;position:absolute} .fluploader_swfdiv{left:0;position:absolute;top:0} .fluploaderButtonLoading{padding-right:4px} .fluploaderButtonLoading .img{display:none} .fluploaderButtonLoading input{background:url(http://static.ak.fbcdn.net/rsrc.php/v1/y_/r/464P0IE2gPV.gif) no-repeat 0 1px;color:#5c5c5c;opacity:.5;padding-left:15px;position:relative;right:2px} .fluploaderConfirmButtonLoading input{background:url(http://static.ak.fbcdn.net/rsrc.php/v1/yb/r/GsNJNwuI-UM.gif) no-repeat 0 5px;color:#fff;opacity:1;padding-left:20px} .flashUploaderOverlay.uiOverlayPageWrapper{background-color:#e7ebf3;background-color:rgba(231, 235, 243, .92)} .flashUploaderOverlayButton{display:inline-block;position:relative;vertical-align:bottom} .composerPhotoGrid .flashUploaderOverlayButton{display:block} .flashUploaderOverlayButton.async_saving{background:url(http://static.ak.fbcdn.net/rsrc.php/v1/yk/r/LOOn0JtHNzb.gif) no-repeat center center} .flashUploaderOverlayButton.async_saving div,.flashUploaderOverlayButton.async_saving a{opacity:.5} .flashUploaderOverlayButton a.selectOver,.flashUploaderOverlayButton .selectOver a.attachmentLink{text-decoration:underline} .composerPhotoGrid .flashUploaderOverlayButton a.selectOver{background-color:#ebeef4} .flashUploaderOverlay .uiOverlayContent{padding-bottom:25px} .flashUploaderOverlay .uiOverlayCancelButton{display:none} .flashUploaderOverlay .headerBox{border-color:#c4cde0;border-bottom-color:rgb(245,245,245);border-bottom-color:rgba(0,0,0,0.1);border-radius:3px 3px 0 0;left:-1px;margin:0;position:absolute;right:-1px;top:-1px;z-index:2} .flashUploaderOverlay .albumInfoFields{width:330px} .flashUploaderOverlay .albumMetaFields{margin-left:110px} .flashUploaderOverlay .albumMetaPlacesInput{float:right;margin-right:20px;width:280px} .flashUploaderOverlay .albumInfoFields input{border-color:#fff;outline:none;-o-transition:border-color .2s} .flashUploaderOverlay .albumInfoFields input:hover,.flashUploaderOverlay .albumInfoFields input:focus{border-color:#bec7da} .flashUploaderOverlay .albumInfoFields .photoAlbumTitleInput:focus + .photoAlbumDescInput,.flashUploaderOverlay .albumInfoFields .photoAlbumTitleInput:hover + .photoAlbumDescInput:focus{border-top-color:transparent} .flashUploaderOverlay .fbPhotoBulkEditor{margin:65px -15px 0 -15px} .flashUploaderOverlay .fbPhotoBulkEditor .editablePhoto{margin-bottom:17px;margin-left:17px} .flashUploaderOverlay .headerFixed{border-bottom-color:#b0bbd7;border-radius:0;left:50%;margin-left:-483px;position:fixed;right:auto;width:946px} .flashUploaderOverlay .addPhotosEnabled .fakeButton,.flashUploaderOverlay .addPhotosDisabled .realButton{position:absolute;top:-10000px} .flashUploaderOverlay .footerBox{border-color:#c4cde0;border-radius:0 0 3px 3px;border-top-color:rgb(245,245,245);border-top-color:rgba(0,0,0,0.1);left:-1px;position:absolute;right:-1px} .footerBox .footerInner{width:100%} .flashUploaderOverlay .footerFixed{bottom:0;border-bottom:0;border-radius:0;border-top-color:#c4cde0;left:50%;margin-left:-483px;margin-top:50px;position:fixed;width:926px;z-index:1} .flashUploaderOverlay .titleInput input,.flashUploaderOverlay .descriptionInput{width:100%} .flashUploaderOverlay .placesTypeaheadCell{width:280px} .flashUploaderOverlay .progressLinks{padding-top:3px} .flashUploaderOverlay .progressWrap{width:120px} .showEmptyState .progressWrap{display:none} .flashUploaderOverlayFooter .quality{display:inline-block;left:10px;position:relative} .flashUploaderOverlayFooter .quality label{color:#666} .presenceIndicator{display:inline-block} .presenceIndicator .uiTooltipWrap{margin-left:-5px} .presenceIndicator i{display:inline-block;width:7px;height:14px} .presenceIndicator .online{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yI/r/hzGzgtPh0ID.png);background-repeat:no-repeat;background-position:-493px -79px} .presenceIndicator .mobile{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yI/r/hzGzgtPh0ID.png);background-repeat:no-repeat;background-position:-34px -49px;height:12px;width:8px} .presenceIndicator .offline{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yI/r/hzGzgtPh0ID.png);background-repeat:no-repeat;background-position:-493px -64px} .audienceSelector{text-align:left} .audienceSelectorNoTruncate,.audienceSelectorNoTruncate .uiSelectorButton,.audienceSelectorNoTruncate .uiSelectorButton:active,.audienceSelectorNoTruncate .uiSelectorButton:focus .audienceSelectorNoTruncate .uiSelectorButton:hover,.audienceSelectorNoTruncate .uiButtonSuppressed:active,.audienceSelectorNoTruncate .uiButtonSuppressed:focus,.audienceSelectorNoTruncate .uiButtonSuppressed:hover,.audienceSelectorNoTruncate .uiSelectorButton .uiButtonText{max-width:none !important} .audienceSelector .uiSelectorBigButtonLabel .uiButtonText{overflow:visible} .audienceSelector .uiSelectorButton .customimg{margin-left:-2px;margin-right:2px} .audienceSelector .uiButtonNoText .customimg{margin-right:-5px} .showSecondaryOptions li,.audienceSelector .secondaryOption,.audienceSelector .returnOption{display:none} .showSecondaryOptions li,.audienceSelector .secondaryOption,.audienceSelector .returnOption{display:none} .showSecondaryOptions .returnOption,.showSecondaryOptions .secondaryOption,.group .groupOption,.friendList .friendListOption{display:block} .friendList .groupOption,.group .friendListOption{display:none} .showSecondaryOptions .uiSelectorMenu{max-height:214px;overflow-y:auto} .composerAudienceWrapper .uiSelectorButton{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yI/r/hzGzgtPh0ID.png);background-repeat:no-repeat;background-position:right -1px} .composerAudienceWrapper .uiButton .uiButtonText{color:gray;font-weight:normal} .composerAudienceWrapper .audienceSelector .uiSelectorButton .customimg{opacity:.5} .composerAudienceWrapper:hover .uiButton .uiButtonText{color:#333} .composerAudienceWrapper .openToggler .uiButton .uiButtonText{color:#fff} .composerAudienceWrapper:hover .audienceSelector .uiSelectorButton .customimg,.composerAudienceWrapper .openToggler .uiSelectorButton .customimg{opacity:1} .composerAudienceWrapper .selected .plusLabel{color:#fff} .fbPrivacyAudienceIndicator .indicator{color:#333} .fbPrivacyAudienceIndicator .audienceIcon{margin-left:-18px} .fbPrivacyAudienceIndicator:hover{text-decoration:none} .fbAudienceHover{position:relative;top:2px} .fbProfileByline{width:493px;margin-top:4px;line-height:15px} .fbProfileBylineFragment, .fbProfileNonIconBylineFragment{margin-right:8px;color:#666} .fbProfileBylineIcon{margin-bottom:1px;vertical-align:bottom} .fbProfileLoggedOutByline{width:493px;margin-top:1px;line-height:14px} .fbLongBlurb{margin-right:8px;color:#666;padding-bottom:3px} .fbHubsTypeaheadThrobber{display:none;position:absolute;right:6px;top:5px} .typeaheadLoading .fbHubsTypeaheadThrobber{display:block} .fbProfileExperience .hubPhoto{margin-right:7px} .fbProfileExperience .wishlistPhoto{height:150px;margin-right:7px;width:150px} .fbProfileExperience .experienceContent{line-height:14px;padding-top:1px} .fbProfileExperience .experienceContentLarge{font-size: 13px;font-weight:bold;line-height:30px;padding-top:22px;padding-left:8px} .fbProfileExperience .experienceBody,.fbProfileExperience .subexperienceContent{margin-top:2px} .fbProfileExperience .subexperiences{margin:6px 0 0 15px} .fbProfileExperience .subexperience{padding-bottom:1px} .fbProfileExperience .subexperienceContent{width:273px} .showAllExperiences .revealerArrow{margin:0 0 2px 5px} .showAllExperiences:hover a,.showAllExperiences .mediaRevealer:hover{text-decoration:none} .profileInfoTable .highlight{background-color:#fffbe4} .profileInfoTable .fbProfileExperience.highlight{left:-5px;padding:5px 0 5px 5px;position:relative;top:-5px} .profileInfoTable .afterHighlight{margin-top:-10px} .profileInfoTable .highlight .complimentsBlingBox{margin-right:-5px} li.showAllExperiences{border-top:1px solid #e5eaf1;padding-top:7px;text-align:center} .showAllExperiences:hover{border-top-color:#d8dfea;background-color:#eceff4;cursor:pointer} .showAllExperiences a{display:inline-block;padding-bottom:8px} .fbProfileInfoExpandedRowWrapper .fbProfileExperience{text-align:left} .fbProfileInfoExpandedRowWrapper .revealerWrapper{margin-top:0} .fbProfileInfoWorkRowWrapper .fbProfileExperience{text-align:left} .fbProfileInfoEducationRowWrapper .fbProfileExperience{text-align:left} .profileHeader{margin-top:4px} .profileHeaderMain{width:513px} .profileHeaderMain h1{display:inline;margin-right:5px} .profileHeaderMain .profileHeaderButtons{display:inline-block;vertical-align:top;white-space:nowrap} .profileHeaderMain .profileHeaderButton{margin-right:5px;z-index:3} .profileHeaderMain #profile_connect_text .uiButton,.profileHeaderMain #profile_connect{margin-left:0} .profileHeader .mainButtonSpan{display:inline-block;vertical-align:top} .profileHeader .headerFormButton{display:inline} .profileHeader .headerActions{text-align:right} .profileHeader .subtitle{line-height:15px;padding-top:4px;width:490px} .profileHeader .profileActions{float:left;margin-top:3px} .profileHeader .profileCallButton .img{margin-top:2px} .profileHeader .fadedDespressedButton{opacity:.6} .ginormousProfileName{color:#1c2a47;font-size: 20px} .profileArrow{margin:0 5px 2px 6px} .fbx_above_html #above_the_profile{width:auto;padding-right:0} .profile-picture{background-color:#fff;display:block;overflow:hidden;position:relative;width:180px} .profile-picture:hover{text-decoration:none} .profile-picture:hover .edit_profilepicture{display:block} .profile-picture img{display:block;margin:auto;max-width:180px} .profile-picture span{background-color:#000;height:800px;position:absolute;top:0;right:0;width:1px;opacity:.30} .edit_profilepicture{background:#000;color:#fff;display:none;height:20px;opacity:.7;padding:6px 7px 0 23px;position:absolute;right:1px;top:0} .edit_profilepicture:hover{opacity:.95} span.edit_profilepicture_icon{background:url(http://static.ak.fbcdn.net/rsrc.php/v1/yA/r/QbfalTL4SQ2.png) no-repeat left 4px;height:18px;left:7px;opacity:.95;position:absolute;top:4px;width:18px} .profile-friends .profileFriendsContent{height:42px;line-height:14px;overflow:hidden} .profile-friends .profileFriendsText{overflow:hidden;text-overflow:ellipsis;width:102px;word-wrap:normal} .profile-friends .profileFriendsByline{width:172px} .profileFriendsByline{white-space:nowrap} .profileFriendsNetwork{white-space:nowrap} .profile-left-nav-facepile{margin:2px 6px 14px 6px} .relationshipSection:hover .fbProfileNavHeaderEditButton{display:block} .relationshipSection .fbProfileNavHeaderEditButton{display:none} .profile-friends{margin:7px 6px 15px} .profile-friends li{margin-bottom:7px} .profile-friends li .UIImageBlock_Content{padding-top:3px} .profile-friends-footer{border-top:1px solid #cdcdcd;padding:8px 10px 0 6px} .profile-friends-footer li:first-child{padding-top:0} div.profile-pagelet-section{margin-bottom:24px} .profile .fbx_profile_tab_loading{background:no-repeat url(http://static.ak.fbcdn.net/rsrc.php/v1/y9/r/jKEcVPZFk-2.gif) center center;padding:150px 0} .fbx .profileInfoTable th.label{padding-right:8px;width:80px} .fbx .nuxBanner .description{width:450px} .mediaRow .mediaPortrait{line-height:14px;padding:0;overflow:hidden;width:75px} .mediaRow .mediaPortrait .photo{height:75px;margin-bottom:5px} .mediaRow .mediaPortrait .mediaPageName{overflow:hidden;max-height:28px;word-wrap:break-word} .mediaRowWrapper{text-align:center} .mediaRowRevealer{line-height:12px} .inCommonSectionList{margin-bottom:1px} .profileInfoTable th.label{color:#999;font-weight:bold;line-height:15px;text-align:left;vertical-align:top;width:90px} .nile_profile .profileInfoTable th.label{font-size: 11px;line-height:16px} .profileInfoTable .greenLink{color:#060} .profileInfoTable td.data{line-height:15px} .profileInfoTable td.rightCol{padding:3px 0 0 35px;text-align:right;width:50px} .profileInfoTable .sampleImageCaption{text-align:center;width:50px;word-wrap:break-word} .profileInfoTable .uiInfoTable .label{color:#666;font-size: 11px;font-weight:normal;padding-top:0} .profileInfoTable .uiInfoTable .data{padding-top:0} .profileInfoTable .throbber{display:none} .profileInfoTable .async_saving .throbber{display:block} .showOtherMasher:hover{background-color:#edeff4;cursor:pointer} .showOtherMasher a{display:block;padding-bottom:8px;padding-top:6px} .showOtherMasher:hover a{text-decoration:underline} .fbProfileEditLink{text-align:left;background:url(http://static.ak.fbcdn.net/rsrc.php/v1/yh/r/_S0u1wZb3JC.png) no-repeat left 2px;padding-left:14px} .fbProfileLargePortrait{margin:2px 0 0 1px;width:75px;word-wrap:break-word} .fbProfileLargePortrait .photoCrop{background:#eee;height:75px;overflow:hidden;position:absolute;width:75px} .fbProfileLargePortrait .photoWrapper{height:79px} .fbProfileLargePortraitImgScaleHeight{height:75px;position:relative} .fbProfileLargePortraitImgScaleWidth{position:relative;width:75px} .fbProfileLargePortraitImgSmall{background-position:center 10%} .fbProfileLargePortraitImgMedium{background-position:center 15%} .fbProfileLargePortraitImgLarge{background-position:center 20%} .fbProfileLagePortraitImgHuge{background-position:center 30%} .fbProfilePhotoBar{margin-left:-2px} .fbProfilePhotoBar li{float:left;line-height:0;padding-left:2px} .fbProfilePhotoStrip{overflow:hidden;width:493px} .fbProfilePhotoStrip .fbProfilePhotoBar{display:block;width:900px} a.fbProfilePhotoThumb, a.fbProfilePhotoThumb:hover{border:none;padding:0} a.fbProfilePhotoThumb i{height:68px;width:97px} div.fbProfilePhotoThumbEmpty{background-color:#f2f2f2;border-top:1px solid #d9d9d9;height:67px;width:97px} .fbProfileThumbRemove{position:relative} .fbProfileThumbRemoveX{display:none;right:3px;position:absolute;top:2px} .fbProfileThumbRemove:hover .fbProfileThumbRemoveX,.async_saving .fbProfileThumbRemoveX,.fbProfileThumbRemoveDialog{text-decoration:none;display:block} .async_saving .fbProfileThumbRemoveX .fbProfilePhotoClose,.fbProfileThumbRemoveDialog .fbProfilePhotoClose{background-position:left -22px} .fbProfileThumbDontShowAgain label{font-weight:normal;vertical-align:text-bottom} .fbProfileSuppressConfirm .async_saving{display:none} .async_saving .fbProfilePhotoThumb{background:url(http://static.ak.fbcdn.net/rsrc.php/v1/yk/r/LOOn0JtHNzb.gif) no-repeat center center} .async_saving .fbProfilePhotoThumb i{opacity:.3} .fbProfileScalableThumb{overflow:hidden} .fbProfileScalableThumb .cropped{background-repeat:no-repeat;background-position:top center;display:block} .fbProfileNavHeaderEditButton{width:18px;height:18px;display:block} .fbProfileNavHeaderEditButton:hover .navHeaderPencil{opacity:.8} .fbProfileNavHeaderEditButton:active .navHeaderPencil{opacity:1} .fbxLeftNavHeaderActionLists{position:relative;top:-2px;margin-bottom:-7px} #profile_minifeed .reportHide{display:none} #profile_minifeed.uiReportStream .reportHide{display:block} #profile_minifeed.uiReportStream .uiStreamHide, #profile_minifeed.uiReportStream .uiStreamHide .uiSelectorButton{position:static} .fbProfileStream .uiStreamMessage .passiveName{font-weight:normal} .fbProfileStream .uiStreamMessage a.passiveName{font-weight:bold} .standardLayout .filterBox{padding:6px 7px 6px 5px} .standardLayout .filterBox table{border-collapse:collapse;width:100%} .standardLayout .filterBox td{padding:0} .standardLayout .fullWidth,.standardLayout .uiTypeahead{width:100%} .standardLayout .hasSelector .uiTypeahead .wrap{border-left:0} .standardLayout .hubsLoading .throbber{display:block} .standardLayout .hubsLoading .selected .uiCloseButton{display:none} .switchableLayout .buttonsCell{padding-left:6px} .switchableLayout .hasSelector .uiTypeahead .wrap{border-right:0} .fbProfileBrowserList .fbProfileBrowserListItem{padding:8px 0} .fbProfileBrowserList .async_saving{position:relative} .fbProfileBrowserList .async_saving .loadingIndicator{background:url(http://static.ak.fbcdn.net/rsrc.php/v1/yb/r/GsNJNwuI-UM.gif) no-repeat 0 0;height:11px;left:50%;margin:-5px 0 0 -6px;position:absolute;top:50%;width:16px} .fbProfileBrowserList .async_saving .auxiliaryButton{visibility:hidden} .normal .gridList,.grid .normalList,.normal .largeList,.large .normalList{top:150%;left:-3000px;position:fixed} .fbProfileBrowserLargeList li:first-child, .fbProfileBrowserLargeList .expandedList li:first-child{border-top:none;padding:0} .listView .throbber,.showListviewLoading .lists{display:none} .showListviewLoading .throbber{display:block;margin:0 auto;position:relative;top:40px} .limitReached .checkableListItem{opacity:.3} .limitReached .selectedCheckable{opacity:1} .hiddenList{top:150%;left:-3000px;position:fixed !important} .fbProfileBrowserListContainer .expandedList li:first-child{border-top:1px solid #e9e9e9} .fbProfileBrowserSummaryBox{border-bottom:1px solid #ccc} .hideSummary .fbProfileBrowserSummaryBox{display:none} .fbProfileBrowserTypeahead .nameTypeaheadThrobber{display:none;position:absolute;right:6px;top:5px} div.fbProfileBrowserTypeahead .clear, .fbProfileBrowser .loading .nameTypeaheadThrobber{display:block} .fbProfileBrowser .loading .clear{display:none} .fbProfileBrowserViewButtons{white-space:nowrap} .fbProfileBrowserViewButtons .profileBrowserViewButton{margin-left:0} .fbProfileBrowserViewButtons .normal{border-right:0} .fbProfileBrowserViewButtons .profileBrowserViewButton .customimg{margin-top:2px} .sp_1wttwv{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yJ/r/7SBq0qCGI6v.png);background-repeat:no-repeat;display:inline-block;height:16px;width:16px} .sx_8bcf21{width:11px;height:14px;background-position:-11px -0px} .selected .sx_8bcf21{background-position:-0px -0px} .sx_c920b3{background-position:-0px -15px} .sx_a57175{background-position:-0px -32px} .sp_1xqe5u{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yN/r/CMO8wGPyJ_4.png);background-repeat:no-repeat;display:inline-block;height:8px;width:4px} .sx_42a80d{width:17px;height:17px;background-position:-0px -27px} .sx_7d22e9{width:16px;height:10px;background-position:-35px -27px} .sx_11e42e{width:11px;height:11px;background-position:-4px -8px} .sx_89107f{background-position:-98px -27px} .sx_e839cb{background-position:-103px -27px} .sx_63952c{background-position:-108px -27px} .sx_3e154e{background-position:-113px -27px} .sx_ddb815{width:13px;height:14px;background-position:-0px -59px} .sx_c5ad6f{width:16px;height:16px;background-position:-18px -27px} .sx_c0d191{width:16px;height:10px;background-position:-52px -27px} .sx_d86a9c{width:15px;height:13px;background-position:-0px -45px} .sx_67a885{width:11px;height:9px;background-position:-86px -27px} .sx_d9106d{width:16px;height:10px;background-position:-69px -27px} .sp_3jmqkp{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yn/r/2SUOgDd15YA.png);background-repeat:no-repeat;display:inline-block;height:16px;width:16px} .sx_5a2909{width:19px;height:4px;background-position:-0px -316px} .sx_2592b4{width:17px;background-position:-17px -19px} .selected .sx_2592b4{background-position:-0px -19px} .sx_03d73f{width:17px;background-position:-17px -36px} .selected .sx_03d73f{background-position:-0px -36px} .sx_0a4ebb{width:10px;height:10px;background-position:-11px -486px} .sx_e131c2{width:10px;height:10px;background-position:-0px -486px} .sx_b6e177{width:10px;height:10px;background-position:-22px -472px} .sx_ffc25f{width:13px;height:10px;background-position:-17px -455px} .sx_7ea8e8{width:17px;background-position:-17px -70px} .selected .sx_7ea8e8{background-position:-0px -70px} .sx_2095bf{width:17px;background-position:-17px -87px} .selected .sx_2095bf{background-position:-0px -87px} .sx_9a0c6f{width:17px;background-position:-17px -53px} .selected .sx_9a0c6f{background-position:-0px -53px} .sx_e7da03{width:8px;height:14px;background-position:-8px -457px} .selected .sx_e7da03{background-position:-0px -457px} .sx_d07d6f{width:10px;height:14px;background-position:-10px -262px} .selected .sx_d07d6f{background-position:-0px -262px} .sx_72b508{width:8px;height:14px;background-position:-25px -440px} .selected .sx_72b508{background-position:-17px -440px} .sx_543e86{width:10px;height:12px;background-position:-10px -277px} .selected .sx_543e86{background-position:-0px -277px} .sx_5b5062{width:10px;height:12px;background-position:-10px -290px} .selected .sx_5b5062{background-position:-0px -290px} .sx_7ea93e{width:10px;height:12px;background-position:-10px -303px} .selected .sx_7ea93e{background-position:-0px -303px} .sx_dac19f{background-position:-16px -104px} .selected .sx_dac19f{background-position:-0px -104px} .sx_8dcac5{width:13px;height:12px;background-position:-13px -223px} .selected .sx_8dcac5{background-position:-0px -223px} .sx_6ff146{width:13px;height:12px;background-position:-13px -236px} .selected .sx_6ff146{background-position:-0px -236px} .sx_29498d{width:13px;height:12px;background-position:-13px -249px} .selected .sx_29498d{background-position:-0px -249px} .sx_67961c{background-position:-16px -121px} .selected .sx_67961c{background-position:-0px -121px} .sx_9e2f39{background-position:-16px -138px} .selected .sx_9e2f39{background-position:-0px -138px} .sx_450274{background-position:-16px -155px} .selected .sx_450274{background-position:-0px -155px} .sx_675610{background-position:-16px -172px} .selected .sx_675610{background-position:-0px -172px} .sx_1c9695{background-position:-16px -189px} .selected .sx_1c9695{background-position:-0px -189px} .sx_53b044{background-position:-0px -440px} .sx_732566{background-position:-16px -206px} .selected .sx_732566{background-position:-0px -206px} .sx_3e0f20{background-position:-17px -423px} .sx_7952aa{background-position:-0px -423px} .sx_4a615f{background-position:-17px -406px} .sx_d60df4{background-position:-0px -406px} .sx_e4cf38{background-position:-17px -389px} .sx_5c386b{background-position:-0px -389px} .sx_a55a09{background-position:-17px -372px} .sx_bd1ea4{background-position:-0px -372px} .sx_ec987c{width:18px;height:18px;background-position:-18px -0px} .sx_ec987c:hover{background-position:-0px -0px} .sx_83b684{width:15px;background-position:-21px -262px} .sx_006ede{background-position:-0px -321px} .sx_c956fb{background-position:-17px -321px} .sx_812219{background-position:-0px -338px} .sx_170968{width:11px;height:13px;background-position:-21px -293px} .sx_4f2b2e{width:11px;height:13px;background-position:-21px -279px} .sx_c6a97f{width:9px;height:13px;background-position:-27px -223px} .sx_60c20e{width:10px;height:13px;background-position:-0px -472px} .sx_050679{width:10px;height:13px;background-position:-11px -472px} .sx_321e54{width:9px;height:13px;background-position:-27px -237px} .sx_2e0fb0{width:8px;height:10px;background-position:-27px -251px} .sx_a67421{background-position:-17px -338px} .sx_a02c1a{background-position:-0px -355px} .sx_7fc8e3{background-position:-17px -355px} .sx_fa2502{width:9px;height:8px;background-position:-21px -307px} .sp_3lvq1x{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yZ/r/3ZgGMyiRs2C.png);background-repeat:no-repeat;display:inline-block;height:16px;width:16px} .sx_9fe1bc{width:4px;height:7px;background-position:-0px -87px} .sx_182038{width:13px;height:13px;background-position:-34px -68px} .sx_1fa561{background-position:-34px -51px} .sx_3542c0{background-position:-0px -70px} .sx_6a56ce{height:17px;background-position:-17px -51px} .sx_a88d58{height:18px;background-position:-0px -51px} .sx_b89ca0{background-position:-17px -69px} .sx_77691f{width:50px;height:50px;background-position:-0px -0px} .sp_44t9sy{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yO/r/OuziOid04jS.png);background-repeat:no-repeat;display:inline-block;height:31px;width:24px} .sx_52c057{width:16px;height:16px;background-position:-66px -280px} .selected .sx_52c057{background-position:-50px -280px} .sx_e40783{width:7px;height:12px;background-position:-93px -77px} .sx_17795b{width:7px;height:7px;background-position:-92px -116px} .sx_682bc5{width:14px;height:14px;background-position:-86px -17px} .sx_1314c1{width:11px;height:14px;background-position:-81px -77px} .sx_918657{width:10px;height:10px;background-position:-93px -102px} .sx_dc24e9{width:9px;height:11px;background-position:-93px -90px} .sx_0502f6{width:11px;height:11px;background-position:-81px -92px} .sx_5694c7{width:11px;height:11px;background-position:-81px -104px} .sx_c4aa61{width:16px;height:16px;background-position:-86px -0px} .sx_b5b9ba{width:10px;height:10px;background-position:-81px -116px} .sx_ed3a2d{background-position:-0px -247px} .sx_ce67e6{background-position:-56px -110px} .sx_e996ba{background-position:-31px -110px} .sx_eb7e94{background-position:-56px -75px} .sx_7ad0c1{background-position:-31px -75px} .sx_35e484{background-position:-56px -40px} .sx_2bb0c8{background-position:-31px -40px} .sx_2dfee3{background-position:-25px -247px} .sx_bfac90{background-position:-50px -247px} .sx_28eaf1{background-position:-75px -247px} .sx_c4a52f{background-position:-0px -282px} .sx_284355{background-position:-25px -282px} .sx_13130c{width:54px;height:18px;background-position:-31px -19px} .sx_7ce819{width:54px;height:18px;background-position:-31px -0px} .sx_36c1b6{width:30px;height:150px;background-position:-0px -0px} .sx_7e846a{width:25px;background-position:-55px -315px} .sx_3c7eb5{width:25px;background-position:-28px -315px} .sx_c7e425{width:25px;background-position:-1px -315px} .sx_05333d{width:7px;height:4px;background-position:-86px -32px} .sx_74c44a{width:7px;height:4px;background-position:-94px -32px} .sx_0dc362{width:89px;height:19px;background-position:-7px -219px} .sx_41d757{width:103px;background-position:-0px -151px} .sx_613c92{width:103px;height:30px;background-position:-0px -183px} .sx_c67f54{width:18px;height:18px;background-position:-81px -58px} .sx_4a054f{width:22px;height:19px;background-position:-81px -38px} .sp_7gxzm3{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yC/r/T6Df_lQ9NAd.png);background-repeat:no-repeat;display:inline-block;height:16px;width:16px} .sx_8083e0{background-position:-16px -91px} .selected .sx_8083e0{background-position:-0px -91px} .sx_2e418f{width:17px;height:17px;background-position:-17px -108px} .sx_c9a9e1{width:11px;height:7px;background-position:-48px -126px} .sx_3cced1{height:14px;background-position:-17px -126px} .sx_7c79d7{background-position:-120px -108px} .sx_4f50d6{background-position:-103px -108px} .sx_a25b38{background-position:-86px -108px} .sx_5c9843{background-position:-69px -108px} .sx_1fef04{width:9px;height:5px;background-position:-60px -126px} .sx_0d32ca{background-position:-152px -91px} .sx_6db9cb{height:17px;background-position:-52px -108px} .sx_50e223{background-position:-135px -91px} .sx_514eb3{background-position:-118px -91px} .sx_e0e469{background-position:-101px -91px} .sx_861a0f{height:15px;background-position:-137px -108px} .sx_dd3c20{width:13px;height:10px;background-position:-34px -126px} .sx_4d5f90{width:12px;height:11px;background-position:-38px -143px} .sx_deed82{width:10px;background-position:-14px -143px} .sx_bab380{height:19px;background-position:-0px -108px} .sx_5ae8f1{background-position:-50px -91px} .sx_310e1b{height:15px;background-position:-171px -108px} .sx_a287aa{width:13px;background-position:-0px -143px} .sx_3b5b59{background-position:-33px -91px} .sx_4ac91f{height:14px;background-position:-0px -128px} .sx_b1b394{height:15px;background-position:-154px -108px} .sx_2e7250{background-position:-67px -91px} .sx_5f3e50{background-position:-84px -91px} .sx_198fc9{height:17px;background-position:-35px -108px} .sx_2278cc{background-position:-169px -91px} .sx_424dbf{width:10px;height:10px;background-position:-51px -143px} .sx_7bb3ab{width:12px;height:12px;background-position:-25px -143px} .sx_048b1a{width:5px;height:3px;background-position:-70px -126px} .sx_7e668c{width:190px;height:90px;background-position:-0px -0px} .sp_82j0y8{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yQ/r/hagyLX0EQuD.png);background-repeat:no-repeat;display:inline-block;height:11px;width:11px} .sx_4b9eec{background-position:-0px -12px} .sx_f4458d{width:12px;background-position:-0px -0px} .sp_85o21n{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/y0/r/HqmTE3gWIqf.png);background-repeat:no-repeat;display:inline-block;height:16px;width:16px} .sx_24da70{background-position:-16px -0px} .selected .sx_24da70{background-position:-0px -0px} .sx_a6bed3{background-position:-0px -17px} .sx_a887dd{background-position:-0px -34px} .sp_9080ad{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yQ/r/QcjhEWC6Qto.png);background-repeat:no-repeat;display:inline-block;height:16px;width:16px} .sx_97d088{background-position:-16px -0px} .selected .sx_97d088{background-position:-0px -0px} .sx_2cf8d0{background-position:-16px -17px} .selected .sx_2cf8d0{background-position:-0px -17px} .sp_9brcjp{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yZ/r/AYwC2vHPaWW.png);background-repeat:no-repeat;display:inline-block;height:14px;width:500px} .sx_fea529{width:29px;height:30px;background-position:-0px -392px} .sx_a75c55{width:29px;height:30px;background-position:-30px -392px} .sx_9b28bc{width:29px;height:30px;background-position:-60px -392px} .sx_bec2dd{width:29px;height:30px;background-position:-90px -392px} .sx_8e44b2{width:29px;height:30px;background-position:-120px -392px} .sx_d2124e{width:29px;height:30px;background-position:-150px -392px} .sx_c574fd{width:14px;background-position:-102px -423px} .sx_dab1c5{width:16px;height:9px;background-position:-233px -407px} .sx_c186ef{width:16px;height:9px;background-position:-199px -407px} .sx_431422{width:9px;height:16px;background-position:-0px -440px} .sx_b48afc{width:9px;height:16px;background-position:-10px -440px} .sx_bdfdef{width:16px;height:9px;background-position:-216px -407px} .sx_45e154{width:10px;height:10px;background-position:-212px -420px} .sx_5fa2e3{width:10px;height:10px;background-position:-201px -420px} .sx_3b507e{width:10px;height:10px;background-position:-223px -420px} .sx_2e6454{width:10px;height:10px;background-position:-234px -420px} .sx_f2f372{width:13px;height:8px;background-position:-272px -398px} .sx_deb8a7{width:11px;background-position:-216px -392px} .selected .sx_deb8a7{background-position:-205px -392px} .sx_b88059{width:5px;background-position:-122px -423px} .selected .sx_b88059{background-position:-117px -423px} .sx_557d6d{width:8px;background-position:-76px -423px} .selected .sx_557d6d{background-position:-68px -423px} .sx_77fd93{width:12px;background-position:-192px -392px} .selected .sx_77fd93{background-position:-180px -392px} .sx_68d914{width:9px;height:12px;background-position:-189px -407px} .selected .sx_68d914{background-position:-180px -407px} .sx_54f5ea{width:10px;background-position:-261px -392px} .selected .sx_54f5ea{background-position:-251px -392px} .sx_d2e0cb{width:11px;background-position:-239px -392px} .selected .sx_d2e0cb{background-position:-228px -392px} .sx_26177c{width:5px;height:3px;background-position:-292px -392px} .sx_4c0ffb{width:16px;height:16px;background-position:-51px -423px} .sx_59bee1{width:8px;background-position:-93px -423px} .selected .sx_59bee1{background-position:-85px -423px} .sx_f58e66{width:16px;height:16px;background-position:-34px -423px} .sx_5d8efa{width:16px;height:16px;background-position:-17px -423px} .sx_944ff7{width:16px;height:16px;background-position:-0px -423px} .sx_dcbe44{width:19px;height:5px;background-position:-272px -392px} .sx_d0bf76{width:10px;height:9px;background-position:-250px -407px} .sx_e55119{width:11px;height:12px;background-position:-189px -420px} .sx_60c040{width:8px;height:13px;background-position:-180px -420px} .sx_450ec4{width:9px;height:13px;background-position:-140px -423px} .sx_a95eda{width:11px;height:13px;background-position:-128px -423px} .sx_303670{width:9px;height:13px;background-position:-150px -423px} .sx_9daf3a{width:9px;height:13px;background-position:-160px -423px} .sx_bc75e6{width:9px;height:13px;background-position:-170px -423px} .sx_302622{height:48px;background-position:-0px -343px} .sx_39e8ba{height:48px;background-position:-0px -294px} .sx_95c1fa{height:48px;background-position:-0px -245px} .sx_4adbe0{height:48px;background-position:-0px -196px} .sx_e5076d{height:48px;background-position:-0px -147px} .sx_e92a0a{height:48px;background-position:-0px -98px} .sx_fee029{height:48px;background-position:-0px -49px} .sx_7d246a{height:48px;background-position:-0px -0px} .sp_9n65ze{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/y0/r/TXubQUNnlcL.png);background-repeat:no-repeat;display:inline-block;height:16px;width:16px} .sx_3e0f32{background-position:-16px -0px} .selected .sx_3e0f32{background-position:-0px -0px} .sx_4580b3{background-position:-16px -17px} .selected .sx_4580b3{background-position:-0px -17px} .sx_59b774{background-position:-16px -34px} .selected .sx_59b774{background-position:-0px -34px} .sx_2f7e8c{background-position:-16px -51px} .selected .sx_2f7e8c{background-position:-0px -51px} .sx_9d847e{background-position:-16px -68px} .selected .sx_9d847e{background-position:-0px -68px} .sx_3b0d2c{background-position:-16px -85px} .selected .sx_3b0d2c{background-position:-0px -85px} .sx_357f07{background-position:-16px -102px} .selected .sx_357f07{background-position:-0px -102px} .sx_26dcd9{background-position:-16px -119px} .selected .sx_26dcd9{background-position:-0px -119px} .sx_75a768{background-position:-16px -136px} .selected .sx_75a768{background-position:-0px -136px} .sx_77ad6f{background-position:-16px -153px} .selected .sx_77ad6f{background-position:-0px -153px} .sx_dd5681{background-position:-16px -170px} .selected .sx_dd5681{background-position:-0px -170px} .sx_7e6380{background-position:-16px -187px} .selected .sx_7e6380{background-position:-0px -187px} .sp_bca4zy{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yl/r/Mb18_ALBDjO.png);background-repeat:no-repeat;display:inline-block;height:32px;width:32px} .sx_1c1388{background-position:-0px -0px} .sx_baf9fc{width:16px;height:16px;background-position:-0px -33px} .sp_cw9sqr{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/y2/r/vmJvmrkIH7p.png);background-repeat:no-repeat;display:inline-block;height:16px;width:16px} .sx_560381{background-position:-0px -0px} .sx_edf3e1{width:11px;height:10px;background-position:-0px -66px} .sx_1de284{width:9px;height:11px;background-position:-0px -77px} .sx_fbc1e6{width:12px;height:14px;background-position:-0px -51px} .sx_f80c60{background-position:-0px -17px} .sx_408ebf{background-position:-0px -34px} .sp_drcbuo{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/y6/r/7bKSHd-AKAr.png);background-repeat:no-repeat;display:inline-block;height:16px;width:16px} .sx_87378f{background-position:-16px -0px} .selected .sx_87378f{background-position:-0px -0px} .sx_b82a23{background-position:-16px -17px} .selected .sx_b82a23{background-position:-0px -17px} .sx_d9bb1d{background-position:-16px -34px} .selected .sx_d9bb1d{background-position:-0px -34px} .sx_c89c1e{background-position:-16px -51px} .selected .sx_c89c1e{background-position:-0px -51px} .sx_1cee77{background-position:-16px -68px} .selected .sx_1cee77{background-position:-0px -68px} .sx_e0de72{background-position:-16px -85px} .selected .sx_e0de72{background-position:-0px -85px} .sp_dvvrzw{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yy/r/_R3oUqgojRB.png);background-repeat:no-repeat;display:inline-block;height:16px;width:17px} .sx_27b911{background-position:-17px -0px} .selected .sx_27b911{background-position:-0px -0px} .sx_857306{width:16px;background-position:-0px -17px} .sp_elh64b{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yF/r/7HxTDFMfDBW.png);background-repeat:no-repeat;display:inline-block;height:16px;width:16px} .sx_e37050{background-position:-0px -0px} .sx_692d37{background-position:-0px -17px} .sx_a0511d{background-position:-0px -34px} .sx_c11a58{background-position:-0px -51px} .sp_eswsc6{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/y5/r/MRBj8_4d7kV.png);background-repeat:no-repeat;display:inline-block;height:16px;width:16px} .sx_3fa2fe{background-position:-0px -0px} .sx_9d0339{background-position:-0px -17px} .sx_7468eb{background-position:-0px -34px} .sx_858681{background-position:-0px -51px} .sx_f82496{background-position:-0px -68px} .sx_7bd465{background-position:-0px -85px} .sx_4494b0{background-position:-0px -102px} .sx_60972b{background-position:-0px -119px} .sx_7e25ec{background-position:-0px -136px} .sx_d80bfc{background-position:-0px -153px} .sx_883daf{background-position:-0px -170px} .sx_dbaffe{background-position:-0px -187px} .sx_284d12{background-position:-0px -204px} .sx_c96831{background-position:-0px -221px} .sx_6cf8cc{background-position:-0px -238px} .sp_hggxg5{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/y0/r/XFGomNqsFb8.png);background-repeat:no-repeat;display:inline-block;height:16px;width:16px} .sx_7fd0ed{background-position:-16px -289px} .selected .sx_7fd0ed{background-position:-0px -289px} .sx_bf5fff{background-position:-16px -272px} .selected .sx_bf5fff{background-position:-0px -272px} .sx_ca09dd{background-position:-16px -255px} .selected .sx_ca09dd{background-position:-0px -255px} .sx_17a3e9{background-position:-16px -238px} .selected .sx_17a3e9{background-position:-0px -238px} .sx_b6d5c4{background-position:-16px -221px} .selected .sx_b6d5c4{background-position:-0px -221px} .sx_f91fd5{background-position:-16px -204px} .selected .sx_f91fd5{background-position:-0px -204px} .sx_c7011f{background-position:-16px -187px} .selected .sx_c7011f{background-position:-0px -187px} .sx_73ab6d{background-position:-16px -170px} .selected .sx_73ab6d{background-position:-0px -170px} .sx_4d0269{background-position:-16px -153px} .selected .sx_4d0269{background-position:-0px -153px} .sx_0aa85e{background-position:-16px -136px} .selected .sx_0aa85e{background-position:-0px -136px} .sx_ae907f{background-position:-16px -119px} .selected .sx_ae907f{background-position:-0px -119px} .sx_b9ebbc{background-position:-16px -102px} .selected .sx_b9ebbc{background-position:-0px -102px} .sx_4cb2a3{background-position:-16px -85px} .selected .sx_4cb2a3{background-position:-0px -85px} .sx_b43e15{background-position:-16px -68px} .selected .sx_b43e15{background-position:-0px -68px} .sx_30ffe9{background-position:-16px -51px} .selected .sx_30ffe9{background-position:-0px -51px} .sx_a99b3a{background-position:-16px -34px} .selected .sx_a99b3a{background-position:-0px -34px} .sx_3a51b2{background-position:-16px -17px} .selected .sx_3a51b2{background-position:-0px -17px} .sx_518d68{width:17px;background-position:-17px -0px} .selected .sx_518d68{background-position:-0px -0px} .sx_0c80dd{width:10px;height:14px;background-position:-10px -321px} .selected .sx_0c80dd{background-position:-0px -321px} .sx_9e13c5{width:11px;height:14px;background-position:-11px -306px} .selected .sx_9e13c5{background-position:-0px -306px} .sx_ecfbef{width:8px;height:14px;background-position:-25px -336px} .selected .sx_ecfbef{background-position:-17px -336px} .sx_34d45a{background-position:-0px -336px} .sp_recommendations{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yM/r/tc6kQtD6Y3L.png);background-repeat:no-repeat;display:inline-block;height:14px;width:14px} .sx_recommendations_favicon{background-position:-0px -0px} div.experienceAttachment{border-left:2px solid #ccc;float:none} div.experienceAttachment .img{margin-top:1px} .uiStreamStory .uiPhotoThumb img{max-width:121px} .uiStreamStory .largePhoto img{max-width:300px} .uiStream .uiStreamHeader{background-color:#e9e9e9;border-top:1px solid #ccc;height:1px;margin:20px 0 5px -18px;padding:0;position:relative} .uiStream .uiStreamHeader .uiStreamHeaderChronologicalForm,.uiStream .uiStreamHeader .uiStreamHeaderText{background-color:#fff;left:0;padding-right:2px;position:absolute} .uiStream .uiStreamHeader .uiStreamHeaderText{color:gray;margin-left:68px;top:-6px} .uiStream .uiStreamHeader .uiStreamHeaderChronologicalForm{left:auto;right:35px;top:-7px} .uiStream .uiStreamHeader .uiStreamHeaderChronologicalForm .uiSelectorButton .uiButtonText{color:gray;font-size: 9px;font-weight:bold} .uiStream .uiStreamHeader .uiStreamHeaderChronologicalForm .uiSelectorButton:hover .uiButtonText{text-decoration:underline} .uiStream .uiStreamHeader .uiStreamHeaderChronologicalForm .uiSelectorButton,.uiStream .uiStreamHeader .uiStreamHeaderChronologicalForm .uiSelectorButton:active,.uiStream .uiStreamHeader .uiStreamHeaderChronologicalForm .uiSelectorButton:focus,.uiStream .uiStreamHeader .uiStreamHeaderChronologicalForm .uiSelectorButton:hover{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yL/r/cUj1ZMLxtSi.png);background-repeat:no-repeat;background-position:right -4px;background-color:transparent;border:none;box-shadow:none;padding:0 9px 0 3px;margin:-1px 2px 0 2px} .uiStreamHeaderChronologicalFormNux{background-color:#f6f6f6;border-top:1px solid #ddd;margin-bottom:-4px;margin-top:4px;max-width:300px;padding:10px} .uiStreamHeaderChronologicalFormNuxRed{color:#f03d25} .uiStreamHeaderChronologicalForm .uiStreamHeaderChronologicalFormNux .uiCloseButton{float:right;margin:-5px -5px 0 0} .uiSelector .openToggler .uiStreamHeaderChronologicalFormNux .uiCloseButtonSmall{background-position:left 0} .uiSelector .openToggler .uiStreamHeaderChronologicalFormNux .uiCloseButtonSmall:hover,.uiSelector .openToggler .uiStreamHeaderChronologicalFormNux .uiCloseButtonSmall:focus{background-position:left -24px} .uiSelector .openToggler .uiStreamHeaderChronologicalFormNux .uiCloseButtonSmall:active{background-position:left -36px} .uiStreamMinistoryGroup{padding:10px 0 11px 60px} .uiStreamMinistoryGroup .uiStreamStory{padding-top:1px} .uiStreamMinistoryGroup .header{color:#aaa;padding:2px 0 8px} .uiStreamMinistoryGroup .uiStreamStory .ministoryMessage{color:#333} .uiStreamMinistoryGroup .uiStreamStory .ministoryInlineMessage{display:inline} .uiStreamMinistoryGroup .showSimilar{display:block;margin:0 2px 8px 22px} .uiStreamMinistoryGroup .showSimilarAjax{display:block;margin:2px 2px 0 22px} .uiStreamMinistoryGroup .ministoryUfi{margin-bottom:6px} div.uiAttachmentPhotoBox .uiMediaThumb, div.uiAttachmentPhotoBox div.horizontalSplitContainer{display:inline-block;float:left} div.uiAttachmentPhotoBox .uiMediaThumb{padding:2px} div.uiAttachmentPhotoBox .beforeHorizontalSplit{margin-right:3px} div.uiAttachmentPhotoBox .beforeVerticalSplit{margin-bottom:3px} .uiStream .uiStreamMessage{color:#000;font-size: 11px;font-weight:normal;margin:0 0 5px 0} .uiStream .uiStreamHeadline{margin-bottom:0} .uiStream .uiStreamPassive{margin-bottom:5px} .Locale_zh_CN .uiStream .uiStreamMessage,.Locale_zh_TW .uiStream .uiStreamMessage,.Locale_zh_HK .uiStream .uiStreamMessage{font-size: 13px} .Locale_ja_JP .uiStream .uiStreamMessage{font-size: 12px} .uiStreamMessage,.uiAttachmentTitle,.uiAttachmentDesc{word-break:break-word;word-wrap:break-word} .uiStreamMessage .actorDescription{padding-bottom:3px} .uiStreamMessage .suggestionBio .actorDescription{padding-bottom:0} .uiStreamMessage .suggestionBio{width:410px} .fbStreamPrivacy .lock{bottom:-2px;margin-bottom:-5px;position:relative;vertical-align:top} div.uiAttachmentTitle{color:#333} .uiStreamStory{padding-right:35px;zoom:1} .uiStream .uiStreamHide{float:right;margin:-2px -35px 0 0} .uiStream .substoryHideSelector{float:right;margin:-2px 0 0 0} .uiStreamHide .uiSelectorButton,a.uiCloseButton.uiStreamHide,.uiStream .uiStreamStory:hover .uiStreamSubstory .uiStreamHide .uiSelectorButton{left:-9999px;position:absolute} .uiStream .uiStreamStory:hover .uiStreamHide .uiSelectorButton,.uiStream .uiStreamStory:hover a.uiCloseButton.uiStreamHide,.uiStream .uiStreamStory .uiStreamSubstory:hover .uiStreamHide .uiSelectorButton,.uiStream .uiStreamStory .uiStreamHide .openToggler .uiSelectorButton,.uiStream .uiStreamStory:hover .uiStreamSubstory .uiStreamHide .openToggler .uiSelectorButton{left:auto;position:relative} .uiStream .uiAttachmentDesc,.uiStream .uiStreamPassive,.uiStream .uiStreamRobotextBeforeMessage,.uiStream .uiAdminAttribution{color:gray} .uiStream .tagIcon{vertical-align:bottom} .uiStream .text_exposed_link{display:block;padding-top:4px;font-size: 11px} .uiStream .uiStreamStoryHide .storyContent{display:none} .uiStreamAttachments .external img{max-height:90px;max-width:90px} .uiStream .uiAttachmentDetails{color:#333} .uiAttachmentInline .uiAttachmentTitle,.uiAttachmentInline .uiAttachmentDesc{display:inline} .uiStreamMessage .actorName,.uiStreamMessage .passiveName{font-weight:bold} .uiStreamMessage .wallArrowIcon{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yN/r/CMO8wGPyJ_4.png);background-repeat:no-repeat;background-position:-86px -27px;height:9px;margin:0 5px;width:11px} .uiStreamMessage .readButton{float:right} .uiAttachmentNoMedia{border-left:2px solid #ccc} .uiAttachmentMedia{float:left} .uiStreamAttachments .exploded .swfObject{margin-bottom:7px} .uiStreamAttachments .exploded .UIImageBlock_Image{margin-right:0} .uiStreamAttachments .exploded .UIImageBlock_Content,.uiStreamAttachments .text_exposed .truncatedMediaInfo{clear:both;display:block;padding-left:0;width:auto} .uiStreamAttachments .truncatedMediaItem{display:none} .uiStreamAttachments .text_exposed .truncatedMediaItem{display:block} .uiStreamAttachments .truncatedMediaInfo{display:table;zoom:1} .uiStreamPrivacyContainer{color:#999} .uiStreamCollapsed{border-top:1px solid #eee} .uiStreamSubstories li.showAll{line-height:15px;padding:8px 0 0} .uiStreamSubstories li.showAll a{color:#6d84b4} .uiStreamSubstories .unseenItem{border-left:2px solid #a8b2ce;margin-left:-4px;padding-left:2px} .uiStreamSubstories .uiUfi{width:358px} .uiStream .uiStreamSeparator{background-color:#e9e9e9;border:0;height:7px;margin:6px 0;padding:0;text-align:center} .uiStream .uiStreamSeparatorText{background-color:#fff;padding:0 5px;position:relative;top:-4px} .uiStream .suppressBorder{border-top:0} .uiStreamFooter,.uiStreamSource,.uiStreamAdditionalLogging{color:#999} .uiStreamFooter a{color:#6d84b4} .uiStreamSource a{color:#999} .uiStreamActionFooter .UIActionLinks_bottom a{color:#3b5998} .uiStreamNub{border-bottom:1px solid #c2cbe1;margin-top:2px} .uiStream .uiStreamNoBorderStory{border-width:0} .uiStreamBoulderStyleAgg .uiStreamAttachments .external{display:block;margin:0;padding-bottom:5px;padding-right:10px} .uiStreamBoulderStyleAgg .uiStreamAttachments .external img{max-height:100px;max-width:120px} .uiStreamInlineTextarea{height:13px;width:98%} .uiStream .uiStreamBoulderStyle{margin-left:-18px;padding:12px 35px 14px 18px;position:relative} .uiStream .uiStreamBoulderStyleNew{padding:0;position:static} .uiStreamBoulderStyleNew .storyHighlightIndicatorWrapper{position:relative} .uiStream .uiStreamBoulderStyleNew .storyContent{padding:12px 35px 14px 18px} .uiStream .uiStreamBoulderStyleNew .uiStreamSubstory .storyContent{padding:0} .uiStreamBoulderStyleAgg .substoryActorPic img,.uiStreamBoulderStyleAgg .uiStreamInlineAction .inlineActionInputPic{height:32px;width:32px} .uiStreamBoulderStyleAgg .storyContent{padding-bottom:2px} .uiStreamBoulderStyleAgg .storyInnerContent .mainWrapper{margin-top:0} .uiStreamBoulderStyleAgg .uiStreamSubstories{padding-top:5px} .uiStreamBoulderStyle .uiStreamSubstories .uiUfi{width:350px} .uiStreamBoulderStyleAgg .uiStreamSubstories .uiStreamShowAll{border-bottom:0;text-align:left} .uiStreamBoulderStyleAgg .uiStreamSubstories .uiStreamShowAll span{font-weight:normal} .uiStreamBoulderStyleAgg .uiStreamSubstory{margin:0;padding:3px 0} .uiStreamBoulderStyleAgg .inlineSubstory .uiStreamSubstory{border-bottom:1px solid #e5e5e5;padding-bottom:10px} .uiStream .uiStreamBoulderStyle .highlightSelector{margin:-14px -25px 0 0} .uiStreamHomepage .uiStreamStory:first-child .highlightSelector{margin-top:-20px} .uiStream .uiStreamBoulderStyle .substoryHideSelector{margin:-2px 0 0} .uiStream .uiStreamBoulderStyle .highlightSelector .uiSelectorButton{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yL/r/cUj1ZMLxtSi.png);background-repeat:no-repeat;background-position:0 -23px;display:inline-block;height:24px;width:21px} .uiStream .uiStreamBoulderStyle .highlightSelector .uiSelectorButton,.uiStream .uiStreamBoulderStyle .highlightSelector .uiSelectorButton:active,.uiStream .uiStreamBoulderStyle .highlightSelector .uiSelectorButton:focus,.uiStream .uiStreamBoulderStyle .highlightSelector .uiSelectorButton:hover{background-color:transparent;border:0} .uiStream .uiStreamBoulderStyle .highlightSelector .uiSelectorMenuWrapper{margin:-3px 1px 0 0} .uiStream .uiStreamBoulderStyle .highlightSelector .uiSelectorButton:hover{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yL/r/cUj1ZMLxtSi.png);background-repeat:no-repeat;background-position:-21px -23px} .uiStream .uiStreamBoulderStyle .highlightSelector .openToggler .uiSelectorButton{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yL/r/cUj1ZMLxtSi.png);background-repeat:no-repeat;background-position:-42px -23px} .uiStream .highlightIndicator{display:inline-block;height:16px;left:-1px;position:absolute;top:-1px;width:16px} .uiStream .uiStreamStoryHide .highlightIndicator{display:none} .uiStream .highlightIndicator .img{opacity:0;position:absolute} .uiStream .uiStreamBoulderStyle:hover .highlightIndicator .img,.uiStream .uiStreamBoulderHighlight:hover .highlightIndicator .img,.uiStream .uiStreamBoulderHighlight .highlightIndicator .img{opacity:1} .uiStream .uiStreamBoulderStyle .highlightIndicator .hoverTriangle,.uiStream .uiStreamBoulderStyle a.highlightIndicator:hover .nullTriangle{display:none} .uiStream .uiStreamBoulderStyle a.highlightIndicator:hover .hoverTriangle{display:inline} .uiStreamHomepage .uiStreamStory:first-child .highlightIndicator{top:-7px} .UIIntentionalStream_Error{display:none;padding-top:2px;padding-bottom:8px} .UIIntentionalStream_HiddenInfo{float:right} .UIIntentionalStream_AutoUpdate{margin:5px} .UIIntentionalStream_AutoUpdateMessage, .UIIntentionalStream_AutoUpdateControl{float:right} .feedback_toggle_link .feedbackBling .text{line-height:normal} a.feedbackBling{margin-left:-1px;margin-right:-1px;padding-bottom:0;padding-top:0} .feedback_toggle_link .feedbackBling .img{margin-top:-1px} .scrollable{overflow-y:auto} .contextual_dialog .generic_dialog_popup{padding-top:9px;position:absolute;width:360px} .contextual_dialog .arrow{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yZ/r/AYwC2vHPaWW.png);background-repeat:no-repeat;background-position:-272px -398px;height:9px;margin-left:25px;margin-top:-2px;position:absolute;top:4px;width:13px} .contextual_dialog .contextual_dialog_content{background:#fff;border:1px solid #333;border-bottom:2px solid #283e6a;line-height:15px} .contextual_dialog .contextual_dialog_content div.dialog_loading{background:#fff;border:0;font-size: 11px} .contextual_dialog .dialog_title{color:#000;font-size: 11px;padding-bottom:2px;padding:8px 10px 0} .contextual_dialog .dialog_body{padding:8px 10px} .contextual_dialog .dialog_buttons{background-color:#f2f2f2;border-top:1px solid #ccc;padding:8px 10px} .contextual_dialog .dialog_buttons_msg{float:right} .contextual_dialog .dialog_loading,.contextual_dialog .dialog_loading_shown .dialog_title,.contextual_dialog .dialog_loading_shown .dialog_content{display:none} .contextual_dialog .dialog_loading_shown .dialog_loading{display:block} .pop_container_advanced{background:rgba(82,82,82,0.7);border-radius:8px;padding:10px} .pop_content_old{position:relative} .pop_container{direction:ltr;position:relative;top:10px} .pop_topleft,.pop_topright,.pop_bottomleft,.pop_bottomright{height:10px;width:10px;overflow:hidden;position:absolute} .pop_topleft{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yZ/r/AYwC2vHPaWW.png);background-repeat:no-repeat;background-position:-223px -420px;left:-10px;top:-10px} .pop_topright{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yZ/r/AYwC2vHPaWW.png);background-repeat:no-repeat;background-position:-234px -420px;right:-10px;top:-10px} .pop_bottomleft{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yZ/r/AYwC2vHPaWW.png);background-repeat:no-repeat;background-position:-212px -420px;bottom:-10px;left:-10px} .pop_bottomright{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yZ/r/AYwC2vHPaWW.png);background-repeat:no-repeat;background-position:-201px -420px;right:-10px;bottom:-10px} .pop_verticalslab,.pop_horizontalslab{width:100%;height:100%;position:absolute;background:#525252;opacity:.7} .pop_verticalslab{margin:-10px 0 0;padding-bottom:20px} .pop_horizontalslab{margin:0 0 0 -10px;padding-right:20px} .generic_dialog{height:0;left:0;overflow:visible;outline:none;position:fixed;top:0;width:100%;z-index:200} .generic_dialog_modal,.generic_dialog_fixed_overflow{background-color:rgba(252, 252, 252, .9);height:100%;z-index:300} .generic_dialog_fixed_overflow{overflow-x:auto;overflow-y:scroll} .generic_dialog_fixed_overflow .generic_dialog_popup{height:auto;padding-bottom:40px} .generic_dialog_overflow_mode body{overflow:hidden !important} .generic_dialog_popup{height:0;overflow:visible;position:relative;width:465px;margin:auto} .generic_dialog div.dialog_loading{background-color:#f2f2f2;border:1px solid #606060;font-size: 24px;padding:10px} .pop_content{direction:ltr;outline:none} .pop_dialog_rtl .pop_content{direction:rtl} .pop_content h2.dialog_title{background:#6d84b4;border:1px solid #3b5998;border-bottom:none;color:#fff;font-size: 14px;font-weight:bold;margin:0} .pop_content h2.secure{background:#6d84b4 url(http://static.ak.fbcdn.net/rsrc.php/v1/yu/r/jp8TzrZb6J1.png) 98% no-repeat} .pop_content h2.loading{background:#6d84b4 url(http://static.ak.fbcdn.net/rsrc.php/v1/y-/r/AGUNXgX_Wx3.gif) 98% no-repeat} .pop_content h2.dialog_loading{background:#6d84b4 url(http://static.ak.fbcdn.net/rsrc.php/v1/y-/r/AGUNXgX_Wx3.gif) no-repeat 400px 10px;padding-right:40px} .pop_content h2 span{display:block;padding:5px 10px} .pop_content .dialog_content{background:#fff;border:1px solid #555;border-top-width:0} .pop_content .dialog_content.dialog_content_titleless{border-top:1px solid #555} .pop_content .dialog_loading,.dialog_loading_shown .dialog_title,.dialog_loading_shown .dialog_content{display:none} .dialog_loading_shown .dialog_loading{display:block} .pop_content .dialog_body{padding:10px;border-bottom:1px solid #ccc} .omitDialogFooter .pop_content .dialog_body{border-bottom:0} .pop_content .dialog_summary{background:#f2f2f2;padding:8px 10px;border-bottom:1px solid #ccc} .pop_content .dialog_buttons{background:#f2f2f2;padding:8px 10px 8px 10px;position:relative;text-align:right} .pop_content .dialog_buttons_msg{float:left;line-height:17px;padding-top:4px} .pop_content .dialog_footer{background:#F2F2F2 none repeat scroll 0} .full_bleed .pop_content .dialog_body{padding:0} .uiSimpleScrollingLoadingIndicator{display:none;margin:auto} .async_saving .uiSimpleScrollingLoadingIndicator{display:block} .uiUfiLikeIcon{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yN/r/CMO8wGPyJ_4.png);background-repeat:no-repeat;background-position:0 -45px;display:block;height:13px;width:15px} .uiUfiLikeIconDisabled,.uiUfiLikeIconDisabled:active,.uiUfiLikeIconDisabled:focus{cursor:default;outline:none} .ufiItem .async_saving .uiUfiViewSharesLink, .ufiItem .stat_elem .uiUfiViewSharesLoading{display:none} .ufiItem .async_saving .uiUfiViewSharesLoading{display:inline} .uiButton,.uiButtonSuppressed:active,.uiButtonSuppressed:focus,.uiButtonSuppressed:hover{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yZ/r/AYwC2vHPaWW.png);background-repeat:no-repeat;background-position:0 -245px;background-color:#eee;border:1px solid #999;border-bottom-color:#888;box-shadow:0 1px 0 rgba(0, 0, 0, .1);cursor:pointer;display:inline-block;font-size: 11px;font-weight:bold;line-height:13px;padding:2px 6px;text-align:center;text-decoration:none;vertical-align:top;white-space:nowrap} .uiButtonLarge{line-height:16px} .uiButton + .uiButton{margin-left:4px} .uiButton:hover{text-decoration:none} .uiButton:active,.uiButtonDepressed{background:#ddd;border-bottom-color:#999;box-shadow:0 1px 0 rgba(0, 0, 0, .05)} .uiButton .img{margin-top:2px;vertical-align:top} .uiButtonLarge .img{margin-top:4px} .uiButton .customimg{margin-top:0} .uiButton .uiButtonText,.uiButton input{background:none;border:0;color:#333;cursor:pointer;display:inline-block;font-family:'Lucida Grande', Tahoma, Verdana, Arial, sans-serif;font-size: 11px;font-weight:bold;margin:0;padding:1px 0 2px;white-space:nowrap} .uiButtonOverlay,.uiButtonOverlay:hover{background-clip:padding-box;background-color:#fff;background-color:rgba(255, 255, 255, .8);background-image:none;border-color:#a5a5a5;border-color:rgba(0, 0, 0, .35);border-radius:2px} .uiButtonOverlay:focus,.uiButtonOverlay:active{background-color:#f9fafc;background-color:rgba(249, 250, 252, .9);border-color:#3b5998;border-color:rgba(59, 89, 152, .5)} .async_saving .uiButton.uiButtonOverlay,.uiButtonOverlay.uiButtonDisabled,.uiButtonOverlay.uiButtonDisabled:active,.uiButtonOverlay.uiButtonDisabled:focus,.uiButtonOverlay.uiButtonDisabled:hover{background-color:#fff;background-color:rgba(255, 255, 255, .8);border-color:#c8c8c8;border-color:rgba(180, 180, 180, .8)} .uiButtonSpecial{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yZ/r/AYwC2vHPaWW.png);background-repeat:no-repeat;background-position:0 -49px;background-color:#69a74e;border-color:#3b6e22 #3b6e22 #2c5115} .uiButtonSpecial:active{background:#609946;border-bottom-color:#3b6e22} .async_saving .uiButton.uiButtonSpecial,.uiButtonSpecial.uiButtonDisabled,.uiButtonSpecial.uiButtonDisabled:active,.uiButtonSpecial.uiButtonDisabled:focus,.uiButtonSpecial.uiButtonDisabled:hover{background:#b4d3a7;border-color:#9db791} .uiButtonConfirm{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yZ/r/AYwC2vHPaWW.png);background-repeat:no-repeat;background-position:0 -294px;background-color:#5b74a8;border-color:#29447e #29447e #1a356e} .uiButtonConfirm:active{background:#4f6aa3;border-bottom-color:#29447e} .async_saving .uiButton.uiButtonConfirm,.uiButtonConfirm.uiButtonDisabled,.uiButtonConfirm.uiButtonDisabled:active,.uiButtonConfirm.uiButtonDisabled:focus,.uiButtonConfirm.uiButtonDisabled:hover{background:#adbad4;border-color:#94a2bf} .async_saving .uiButton.uiButtonSpecial .uiButtonText,.async_saving .uiButton.uiButtonSpecial input,.async_saving .uiButton.uiButtonConfirm .uiButtonText,.async_saving .uiButton.uiButtonConfirm input,.uiButtonSpecial .uiButtonText,.uiButtonSpecial input,.uiButtonSpecial.uiButtonDisabled .uiButtonText,.uiButtonSpecial.uiButtonDisabled input,.uiButtonConfirm .uiButtonText,.uiButtonConfirm input,.uiButtonConfirm.uiButtonDisabled .uiButtonText,.uiButtonConfirm.uiButtonDisabled input{color:#fff} .async_saving .uiButton,.uiButtonDisabled,.uiButtonDisabled:active,.uiButtonDisabled:focus,.uiButtonDisabled:hover{background:#f2f2f2;border-color:#c8c8c8;box-shadow:none} .async_saving .uiButton .img,.uiButtonDisabled .img{opacity:.5} .async_saving .uiButton .uiButtonText,.async_saving .uiButton input,.uiButtonDisabled .uiButtonText,.uiButtonDisabled input{color:#b8b8b8} .async_saving .uiButton,.async_saving .uiButton .uiButtonText,.async_saving .uiButton input,.uiButtonDepressed,.uiButtonDepressed .uiButtonText,.uiButtonDepressed input,.uiButtonDisabled,.uiButtonDisabled .uiButtonText,.uiButtonDisabled input{cursor:default} .uiButtonLarge,.uiButtonLarge .uiButtonText,.uiButtonLarge input{font-size: 13px} .uiButtonSuppressed{background:none;border-color:transparent;box-shadow:none} .uiButtonNoText .img{margin-left:-1px;margin-right:-1px} .android .uiButton .uiButtonText,.android .uiButton input{padding:3px 0 1px 1px} .uiCloseButton{cursor:pointer;display:inline-block;margin:0;padding:0;zoom:1} label.uiCloseButton{overflow:hidden} .uiCloseButton input{cursor:pointer;opacity:0;outline:none;padding:18px} .uiCloseButton{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yA/r/4WSewcWboV8.png);background-repeat:no-repeat;height:15px;width:15px} .uiCloseButtonSmall{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yx/r/ogYrclupeJV.png);height:11px;margin-top:1px;width:11px} .uiCloseButtonHuge{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yj/r/ubIGOTIgUYc.png)} .uiCloseButtonDark{background-position:left -16px} .uiCloseButtonInverted{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yo/r/33RpiRygxAr.png);background-position:left -16px} .uiCloseButton:hover,.uiCloseButton:focus{background-position:left -32px} .uiCloseButton:active{background-position:left -48px} .uiCloseButtonSmallDark{background-position:left -12px} .uiCloseButtonSmallInverted{background-position:left -12px;background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yT/r/Vi-KTnbdMKr.png)} .uiCloseButtonSmall:hover,.uiCloseButtonSmall:focus{background-position:left -24px} .uiCloseButtonSmall:active{background-position:left -36px} .uiButtonGroup{background-clip:padding-box;background-color:#fff;border:1px solid #a5a5a5;border-color:rgba(0, 0, 0, .35);border-radius:3px;box-shadow:0 1px 0 rgba(0, 0, 0, .1);display:inline-block;padding:0;white-space:nowrap} .uiButtonGroup .uiButtonGroupItem{border-left:1px solid #d9d9d9;border-color:rgba(0, 0, 0, .15);display:inline-block;vertical-align:top} .uiButtonGroup .firstItem{border-left:0} .uiButtonGroup .uiSelector,.uiButtonGroup .uiButton{box-shadow:none;vertical-align:top} .uiButtonGroup .selectorItem .uiSelector,.uiButtonGroup .buttonItem .uiButton{margin:-1px} .uiButtonGroup .uiButtonLarge{padding:2px 8px} .uiButtonGroup .uiButtonOverlay,.uiButtonGroupOverlay .uiButtonGroupItem .uiButtonDisabled,.uiButtonGroupOverlay .uiButtonGroupItem .uiButtonDisabled:hover,.uiButtonGroupOverlay .uiButtonGroupItem .uiButtonDisabled:active,.uiButtonGroupOverlay .uiButtonGroupItem .uiButtonDisabled:focus{background-clip:padding-box;border-color:transparent} .uiButtonGroup .selectorItem .openToggler .uiButton,.uiButtonGroup .buttonItem .uiButtonSpecial,.uiButtonGroup .buttonItem .uiButtonConfirm{position:relative;z-index:1} .uiButtonGroup span .uiButtonOverlay,.uiButtonGroup span .uiButtonOverlay:hover{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yZ/r/075xK96KBT0.png);background-repeat:no-repeat;background-position:right -156px;background-color:transparent} .uiButtonGroup span .uiButtonOverlay:active,.uiButtonGroup span .uiButtonOverlay:focus{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yZ/r/075xK96KBT0.png);background-repeat:no-repeat;background-position:right -107px;background-color:transparent} .uiButtonGroupOverlay span .uiButtonOverlay.uiButtonDisabled{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yZ/r/075xK96KBT0.png);background-repeat:no-repeat;background-position:right -156px} .uiButtonGroup .buttonItem .uiButtonOverlay,.uiButtonGroup .buttonItem .uiButtonOverlay:hover{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yZ/r/075xK96KBT0.png);background-repeat:no-repeat;background-position:0 -58px} .uiButtonGroup .buttonItem .uiButtonOverlay:active,.uiButtonGroup .buttonItem .uiButtonOverlay:focus{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yZ/r/075xK96KBT0.png);background-repeat:no-repeat;background-position:0 -9px} .uiButtonGroupOverlay .buttonItem .uiButtonOverlay.uiButtonDisabled{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yZ/r/075xK96KBT0.png);background-repeat:no-repeat;background-position:0 -58px} .uiButtonGroupOverlay .uiButton{border-radius:0} .uiButtonGroupOverlay > :first-child .uiButton{border-top-left-radius:3px;border-bottom-left-radius:3px} .uiButtonGroupOverlay > :last-child .uiButton{border-top-right-radius:3px;border-bottom-right-radius:3px} .uiLinkButton input{background:none;border:none;color:#3b5998;cursor:pointer;font-family:'Lucida Grande', Tahoma, Verdana, Arial, sans-serif;font-size: 11px;margin:0;padding:0;vertical-align:top} .uiLinkButton:hover,.uiLinkButton input:hover,.uiLinkButton input:focus,.uiLinkButton input:active{color:#3b5998;text-decoration:underline} .uiLinkButtonSubtle input,.uiLinkButtonSubtle:hover,.uiLinkButtonSubtle input:hover,.uiLinkButtonSubtle input:focus,.uiLinkButtonSubtle input:active{color:gray} .uiLinkButton input.async_saving{text-decoration:none} .uiBoxGray{background-color:#f2f2f2;border:1px solid #ccc} .uiBoxDarkgray{color:#ccc;background-color:#333;border:1px solid #666} .uiBoxLightblue{background-color:#edeff4;border:1px solid #d8dfea} .uiBoxRed{background-color:#ffebe8;border:1px solid #dd3c10} .uiBoxWhite{background-color:#fff;border:1px solid #ccc} .uiBoxYellow{background-color:#fff9d7;border:1px solid #e2c822} .uiBoxOverlay{background:rgba(255, 255, 255, .85);border:1px solid #3b5998;border:1px solid rgba(59, 89, 153, .65);zoom:1} .noborder{border:none} .topborder{border-bottom:none;border-left:none;border-right:none} .bottomborder{border-left:none;border-right:none;border-top:none} .dashedborder{border-style:dashed} .uiGrid{border:0;border-collapse:collapse;border-spacing:0} .uiGridCalc{width:100%} .uiGrid .vTop{vertical-align:top} .uiGrid .vMid{vertical-align:middle} .uiGrid .vBot{vertical-align:bottom} .uiGrid .hLeft{text-align:left} .uiGrid .hCent{text-align:center} .uiGrid .hRght{text-align:right} .uiIconText{padding-left:21px;position:relative} label.uiIconText{vertical-align:baseline} .uiIconText .img{left:0;position:absolute;top:-1px;vertical-align:middle} i.img u{position:absolute;top:-9999999px} .UIImageBlock_Content{display:table-cell;vertical-align:top;width:10000px} .UIImageBlock_Image{float:left;margin-right:5px} .UIImageBlock_Image .img,img.UIImageBlock_Image,i.UIImageBlock_Image{display:block} .UIImageBlock_Ext{float:right} .UIImageBlock_ICON_Image{margin-right:5px} .UIImageBlock_ICON_Content{padding-top:1px} .UIImageBlock_SMALL_Image{margin-right:8px} .UIImageBlock_MED_Image,.UIImageBlock_ENT_Image{margin-right:10px} .UIImageBlock_Entity .UIImageBlock_Content{height:50px;vertical-align:middle} .UIImageBlock_Entity img.UIImageBlock_Image,.UIImageBlock_Entity i.UIImageBlock_Image,.UIImageBlock_Entity .UIImageBlock_Image .img{height:50px;width:50px} .UIImageBlock_Entity .UIImageBlock_Ext{margin-top:14px;padding-left:8px} .uiInfoTable{border:0;border-collapse:collapse;border-spacing:0;width:100%} .uiInfoTable .spacer td{padding:5px 0} .noBorder .spacer td{padding:0;visibility:hidden} .uiInfoTable .label, .uiInfoTable .data, .uiInfoTable .rightCol{padding:3px 0 1px 0;text-align:left;vertical-align:top} .uiInfoTable .dataRow .data, .uiInfoTable .dataRow .rightCol{padding-top:5px} .uiInfoTable .data > input, .uiInfoTable .data > label input, .uiInfoTable .rightCol > input, .uiInfoTable .rightCol > label input{margin-left:0} .uiInfoTable .label{color:#666;font-weight:bold;padding-right:10px;text-align:right;width:130px} .uiInfoTable .dataRow .label{padding-top:8px} .uiInfoTable .label .annotation{color:#999} .uiInfoTable .rightCol{padding:0 0 0 20px;width:225px} .lfloat{float:left} .rfloat{float:right} a.uiLinkSubtle{color:gray} .uiListItem{display:block} .uiListHorizontalItem{float:left} .uiListLight,.uiListMedium,.uiListDark{border-style:solid} .uiListHorizontalItemBorder{border-width:0 0 0 1px} .uiListVerticalItemBorder{border-width:1px 0 0 0} .uiListItem:first-child{border-width:0} .uiListLight{border-color:#e9e9e9} .uiListMedium{border-color:#ccc} .uiListDark{border-color:#aaa} .uiListBulleted{color:#3b5998;list-style-type:square;margin-left:12px} .pas{padding:5px} .pam{padding:10px} .pal{padding:20px} .pts{padding-top:5px} .ptm{padding-top:10px} .ptl{padding-top:20px} .prs{padding-right:5px} .prm{padding-right:10px} .prl{padding-right:20px} .pbs{padding-bottom:5px} .pbm{padding-bottom:10px} .pbl{padding-bottom:20px} .pls{padding-left:5px} .plm{padding-left:10px} .pll{padding-left:20px} .phs{padding-left:5px;padding-right:5px} .phm{padding-left:10px;padding-right:10px} .phl{padding-left:20px;padding-right:20px} .pvs{padding-top:5px;padding-bottom:5px} .pvm{padding-top:10px;padding-bottom:10px} .pvl{padding-top:20px;padding-bottom:20px} .mas{margin:5px} .mam{margin:10px} .mal{margin:20px} .mts{margin-top:5px} .mtm{margin-top:10px} .mtl{margin-top:20px} .mrs{margin-right:5px} .mrm{margin-right:10px} .mrl{margin-right:20px} .mbs{margin-bottom:5px} .mbm{margin-bottom:10px} .mbl{margin-bottom:20px} .mls{margin-left:5px} .mlm{margin-left:10px} .mll{margin-left:20px} .mhs{margin-left:5px;margin-right:5px} .mhm{margin-left:10px;margin-right:10px} .mhl{margin-left:20px;margin-right:20px} .mvs{margin-top:5px;margin-bottom:5px} .mvm{margin-top:10px;margin-bottom:10px} .mvl{margin-top:20px;margin-bottom:20px} .fss{font-size: 9px} .fsm{font-size: 11px} .fsl{font-size: 13px} .fsxl{font-size: 16px} .fsxxl{font-size: 18px} .fwn{font-weight:normal} .fwb{font-weight:bold} .fcb{color:#333} .fcg{color:gray} .uiLoadingIndicatorAsync{display:none} .async_saving .uiLoadingIndicatorAsync{display:inline} .flashFallbackButton{text-align:center} .uiInputLabel + .uiInputLabel{margin-top:3px} .uiInputLabel + .inlineBlock.uiInputLabel{margin-left:10px;margin-top:0} .uiInputLabelRadio,.uiInputLabelCheckbox{float:left;margin:0;padding:0} .uiInputLabelRadio{margin-top:1px} .uiInputLabel label{color:#333;display:block;font-weight:normal;margin-left:17px;vertical-align:baseline} .uiMentionsInput{position:relative} .uiMentionsInput .mentionsTextarea,.uiMentionsInput .mentionsTypeahead{background:transparent;zoom:1} .uiMentionsInput .highlighter{left:1px;overflow:hidden;position:absolute;padding:4px;top:1px} .uiMentionsInput .highlighter div{color:transparent;line-height:14px;white-space:pre-wrap;width:100%} .uiMentionsInput .highlighter b{background:#d8dfea;font-weight:normal} .uiSearchInput{background:#fff;border:1px solid #899bc1;border-top-color:#6484b4;display:inline-block} .uiSearchInput span{border:0;border-top:1px solid #ededed;display:inline-block;padding:1px 0 2px;position:relative} .uiSearchInput input{border:0;margin:0 22px 0 5px;outline:none;padding:1px 5px 2px 0;width:190px} .uiSearchInput button{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yO/r/OuziOid04jS.png);background-repeat:no-repeat;background-position:-81px -38px;background-color:#fff;border:0;cursor:pointer;display:block;height:19px;padding:0;position:absolute;right:0;top:0;width:22px} .uiSelector .uiCloseButton{background-clip:padding-box;border:1px solid transparent;margin:0} .uiSelector .openToggler .uiCloseButton{background-position:left -32px} .uiSelector .openToggler .uiCloseButtonSmall{background-position:left -24px} .uiMenu{background-color:#fff;padding:3px 0 4px;overflow-y:auto} .uiMenuItem .itemAnchor{border:solid #fff;border-width:1px 0;color:#111;display:block;font-weight:normal;line-height:16px;padding:1px 16px 1px 22px;text-decoration:none} .uiMenuItem a:hover{text-decoration:none} .uiMenuItem a:active,.uiMenuItem a:focus{background-color:#6d84b4;border-color:#3b5998;color:#fff;outline:none} .uiMenu .checked .itemAnchor{background:url(http://static.ak.fbcdn.net/rsrc.php/v1/yu/r/6NHt8H5uyPf.png) left 4px no-repeat;font-weight:bold} .uiMenu .checked a:active,.uiMenu .checked a:focus{background-color:#6d84b4;background-position:left -56px} .uiMenuItem{white-space:nowrap} .uiMenuItem .itemLabel{display:block;max-width:300px;text-overflow:ellipsis;-o-text-overflow:ellipsis;white-space:nowrap} .uiMenuItem .itemWithIcon .itemLabel,.uiMenuItem .itemIcon{display:inline-block;vertical-align:middle} .uiMenuItem .itemLabel .menuIcon{vertical-align:sub} .uiMenuItemBigLabel .itemLabel{overflow:hidden;min-width:300px} .uiMenuItem .disabledAnchor,.uiMenu .disabled .itemAnchor{display:none} .uiMenu .disabled .disabledAnchor{display:block} .uiMenu .disabled .itemAnchor{opacity:.55} .uiMenuItemGroup .groupTitle{margin:0 16px 3px 22px} .uiMenuSeparator{border-bottom:1px solid #ddd;margin:5px 7px 6px;padding-top:1px} .openToggler{z-index:100} .uiToggleFlyout,.toggleTargetClosed,.openToggler .uiToggleFlyout .uiToggleFlyout{display:none} .openToggler .uiToggleFlyout,.openToggler .uiToggleFlyout .openToggler .uiToggleFlyout{display:block} .hideToggler{border:0;height:0;opacity:0;overflow:hidden;position:absolute;width:0} body.opera .hideToggler{padding:0} .uiSelector{max-width:200px;vertical-align:top} .uiSelector .wrap{position:relative} .uiSelector select,.uiSelector .submitButton,.no_js form .uiSelectorButton{display:none} .no_js form .uiSelector select,.no_js form .uiSelector .submitButton{display:inline} .uiSelector .uiButton,.uiSelector .uiButton:active,.uiSelector .uiButton:focus,.uiSelector .uiButton:hover{background-image:none} .uiSelector .uiSelectorButton{vertical-align:top} .uiSelector .uiSelectorButton:active{background-color:#ddd} .uiSelector .openToggler .uiSelectorButton,.uiSelector .openToggler .uiSelectorButton:active,.uiSelector .openToggler .uiSelectorButton:focus,.uiSelector .openToggler .uiSelectorButton:hover{background-color:#6d84b4;border:1px solid #3b5998;border-bottom-color:#6d84b4;box-shadow:none} .uiSelectorNormal .uiSelectorChevronOnly,.uiSelectorNormal .uiSelectorChevronOnly:active,.uiSelectorNormal .uiSelectorChevronOnly:focus,.uiSelectorNormal .uiSelectorChevronOnly:hover{height:20px;padding:0} .uiSelectorNormal .uiSelectorButton,.uiSelectorNormal .uiSelectorButton:active,.uiSelectorNormal .uiSelectorButton:focus,.uiSelectorNormal .uiSelectorButton:hover,.uiSelectorNormal .uiButtonSuppressed:active,.uiSelectorNormal .uiButtonSuppressed:focus,.uiSelectorNormal .uiButtonSuppressed:hover{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yZ/r/AYwC2vHPaWW.png);background-repeat:no-repeat;background-position:right -343px;max-width:169px;padding-right:23px} .uiSelectorNormal .uiButtonDisabled,.uiSelectorNormal a.uiButtonDisabled:active,.uiSelectorNormal a.uiButtonDisabled:focus,.uiSelectorNormal a.uiButtonDisabled:hover{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yZ/r/AYwC2vHPaWW.png);background-repeat:no-repeat;background-position:right -196px} .uiSelectorNormal .uiButtonSuppressed.uiButtonDisabled{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yZ/r/AYwC2vHPaWW.png);background-repeat:no-repeat;background-position:right 0} .uiSelectorNormal .uiButtonOverlay,.uiSelectorNormal .uiButtonOverlay:active,.uiSelectorNormal .uiButtonOverlay:focus,.uiSelectorNormal .uiButtonOverlay:hover,.uiSelectorNormal .uiSelectorButton:active,.uiSelectorNormal .uiButtonSuppressed{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yZ/r/AYwC2vHPaWW.png);background-repeat:no-repeat;background-position:right -99px} .uiSelectorNormal .openToggler .uiSelectorButton,.uiSelectorNormal .openToggler .uiSelectorButton:active,.uiSelectorNormal .openToggler .uiSelectorButton:focus,.uiSelectorNormal .openToggler .uiSelectorButton:hover,.uiSelectorNormal .openToggler .uiButtonSuppressed,.uiSelectorNormal .openToggler .uiButtonSuppressed:active,.uiSelectorNormal .openToggler .uiButtonSuppressed:focus,.uiSelectorNormal .openToggler .uiButtonSuppressed:hover{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yZ/r/AYwC2vHPaWW.png);background-repeat:no-repeat;background-position:right -147px} .uiSelectorNormal .uiSelectorButton .uiButtonText{max-width:169px;overflow:hidden;text-overflow:ellipsis;-o-text-overflow:ellipsis;vertical-align:top} .uiSelectorNormal .uiSelectorBigButtonLabel .img{float:left} .uiSelectorNormal .uiSelectorBigButtonLabel .uiButtonText{display:block} .uiSelectorNormal .openToggler .uiSelectorButton .uiButtonText{color:#fff} .uiSelectorMenuWrapper{bottom:auto;left:0;margin:-1px 0 30px;max-width:340px;min-width:100%;position:absolute;right:auto;top:100%;z-index:-1} .uiSelectorRight .uiSelectorMenuWrapper{left:auto;right:0} .uiSelectorMenuWrapper .loading{padding:5px 20px} .uiSelectorMenuWrapper .loading span{background:url(http://static.ak.fbcdn.net/rsrc.php/v1/yb/r/GsNJNwuI-UM.gif) no-repeat 0 0;display:inline-block;height:11px;margin:0 auto;width:16px} .uiSelector .uiMenu{border:1px solid #777;border-bottom:2px solid #293e6a} .uiContextualLayer .uiSelector{margin:0;max-width:none;position:relative} .uiContextualLayerPositioner .aboveleft .uiSelector,.uiContextualLayerPositioner .aboveright .uiSelector{top:2px} .uiContextualLayerPositioner .belowleft .uiSelector,.uiContextualLayerPositioner .belowright .uiSelector{top:-1px} .uiContextualLayer .uiSelectorMenuWrapper{position:static;margin:0} .uiContextualLayer .uiSelector .uiSelectorButton{position:absolute} .uiContextualLayerPositioner .aboveleft .uiSelector .uiSelectorButton,.uiContextualLayerPositioner .aboveright .uiSelector .uiSelectorButton{border:1px solid #3b5998;border-top-color:#6d84b4;margin-top:-2px;top:100%} .uiContextualLayerPositioner .belowleft .uiSelector .uiSelectorButton,.uiContextualLayerPositioner .belowright .uiSelector .uiSelectorButton{bottom:100%;margin-bottom:-1px} .uiContextualLayerPositioner .aboveleft .uiSelector .uiSelectorButton,.uiContextualLayerPositioner .belowleft .uiSelector .uiSelectorButton{left:0} .uiContextualLayerPositioner .aboveright .uiSelector .uiSelectorButton,.uiContextualLayerPositioner .belowright .uiSelector .uiSelectorButton{right:0} .uiTextareaNoResize{resize:none} .uiTextareaAutogrow{overflow:hidden} .uiHeader h2{color:#1c2a47;font-size: 16px} .uiHeader h2 a{color:#1c2a47} .uiHeader h3,.uiHeader h4{color:#333;font-size: 11px} .uiHeader h5{color:#666;font-size: 11px} .uiHeaderWithImage .uiHeaderTop{position:relative} .uiHeaderWithImage .uiHeaderTitle{padding-left:22px} .uiHeaderImage{left:0;position:absolute} .uiHeader h2 .uiHeaderImage{top:2px} .uiHeaderTopBorder{border-top:1px solid #aaa;padding-top:.5em} div.uiHeaderTopBorder{margin-left:0} .uiHeaderTopAndBottomBorder{border-bottom:1px solid #e9e9e9;border-top:1px solid #aaa;padding:5px 0} .uiHeaderMiddleBorder{border-bottom:1px solid #ccc;height:.8em;margin:.5em 0 1.5em 0;position:relative} .uiHeaderMiddleBorder .uiHeaderTitle,.uiHeaderMiddleBorder .uiHeaderActions{background-color:#fff;position:absolute;top:0} .uiHeaderMiddleBorder .uiHeaderTitle{left:0;padding-right:.5em} .uiHeaderMiddleBorder .uiHeaderActions{padding-left:.5em;right:0} .uiHeaderMiddleBorder .uiButton{margin-top:-2px} .uiHeaderBottomBorder{border-bottom:1px solid #aaa;padding-bottom:.5em} .uiHeaderPage{padding:6px 0 16px} .uiHeaderPage .uiHeaderTitle{line-height:20px;min-height:20px;padding-bottom:2px;vertical-align:bottom} .uiHeaderPage .uiHeaderActions{margin-top:-1px} .uiHeaderPage .uiHeaderTop .fsl{margin-top:3px} .uiHeaderNav{border-color:#eee;margin:8px 0 0 6px;padding:7px 6px 3px 5px} .uiHeaderNavEmpty{padding-top:6px} .uiHeaderNav h4{color:gray} .uiHeaderSection,.uiSideHeader{background-color:#f2f2f2;border-bottom:none;border-top:solid 1px #e2e2e2;padding:4px 5px 5px} .uiScrollableArea{height:100%;overflow:hidden;position:relative;width:100%} .uiScrollableAreaWrap,.native .uiScrollableAreaWrap:active{height:100%;overflow-x:hidden;overflow-y:auto;position:relative;width:150%} .uiScrollableAreaWrap:active{overflow:hidden} .native .uiScrollableAreaWrap,.native .uiScrollableAreaBody,.no_js .uiScrollableAreaWrap,.no_js .uiScrollableAreaBody{width:auto !important} .uiScrollableAreaBody{position:relative} .uiScrollableAreaTrack{bottom:2px;display:block;position:absolute;right:2px;top:2px;width:7px;z-index:5} .uiScrollableArea .uiContextualLayerPositioner{z-index:4} .native .uiScrollableAreaTrack,.no_js .uiScrollableAreaTrack{display:none} .fade .uiScrollableAreaTrack{opacity:0} .uiScrollableAreaGripper{background-clip:content-box;background-color:rgba(0, 0, 0, .4);border:1px solid rgba(85, 85, 85, .6);border-radius:7px;position:absolute;-o-transition:25ms;width:5px} .uiScrollableArea.contentBefore:before,.uiScrollableArea.contentAfter:after{content:'';display:block;height:2px;position:absolute;width:100%;z-index:99} .uiScrollableArea.contentBefore:before{top:0} .uiScrollableArea.contentAfter:after{background-color:rgba(0, 0, 0, .07);bottom:0} .uiMoreLinkCaret{margin-left:2px;padding-bottom:2px} .uiTooltip{position:relative} .uiTooltip:active,.uiTooltip:focus,.uiTooltip:hover{outline:none;text-decoration:none;z-index:5} .uiTooltipWrap{display:none} .uiTooltipWrap:hover{visibility:hidden} .uiTooltipText{background-color:#282828;color:#fff !important;display:block;font-size: 11px;line-height:14px;padding:4px 8px;text-align:left;white-space:nowrap} .uiTooltip:active .uiTooltipWrap,.uiTooltip:focus .uiTooltipWrap,.uiTooltip:hover .uiTooltipWrap{background:url(http://static.ak.fbcdn.net/rsrc.php/v1/y1/r/uVR6w3wRHEJ.gif) left bottom no-repeat;bottom:100%;display:block;left:0;padding:0 0 4px;position:absolute} .uiTooltip:active .center,.uiTooltip:focus .center,.uiTooltip:hover .center{left:50%;margin-left:-10px;padding-left:10px} .uiTooltip .center .uiTooltipText{left:-50%;position:relative} .uiTooltip .centerbottom .uiTooltipText{margin-left:18px} .uiTooltip:active .right,.uiTooltip:focus .right,.uiTooltip:hover .right{background-position:right bottom;left:auto;right:0} .uiTooltip:active .middle,.uiTooltip:focus .middle,.uiTooltip:hover .middle{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yR/r/kPCE0g_tKJs.gif);background-position:right top;left:auto;margin:-4px 4px 0 0;right:100%;padding:4px;top:50%} .uiTooltip .middle .uiTooltipText{margin-top:-10px} .uiTooltip:active .rightmiddle,.uiTooltip:focus .rightmiddle,.uiTooltip:hover .rightmiddle{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yY/r/_ZWZupdaAgS.gif);background-position:left top;left:100%;margin:-4px 0 0 4px;right:auto} .uiTooltip:active .bottom,.uiTooltip:focus .bottom,.uiTooltip:hover .bottom{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yX/r/k2R_CZuPy2I.png);background-position:left top;bottom:auto;padding:4px 0 0;top:100%} .uiTooltip:active .rightbottom,.uiTooltip:focus .rightbottom,.uiTooltip:hover .rightbottom{background-position:right top} .openToggler > .uiTooltip:active .uiTooltipWrap,.openToggler > .uiTooltip:focus .uiTooltipWrap,.openToggler > .uiTooltip:hover .uiTooltipWrap{display:none} .uiCollapsedList .visible{margin-right:10px} .uiCollapsedListHidden .showAll{list-style-type:none} .uiCollapsedListVisible .showAll, .uiCollapsedListHidden .hiddenItem{display:none} .uiCollapsedListNoSeparate .visible{margin-right:3px} .uiCollapsedListVisible .visible, .uiCollapsedListMiddot .visible{margin-right:0} .objectListItem{padding-bottom:8px;padding-top:8px} .passive .objectListItem{color:gray} .objectListItem .auxiliary{text-align:right} .mouseEventsDisabled .MicrosoftMap{cursor:default !important} .uiMediaThumb{background:#fff;border:1px solid #ccc;display:inline-block;outline:none;padding:4px;position:relative;vertical-align:bottom} .loading.uiMediaThumb{background:url(http://static.ak.fbcdn.net/rsrc.php/v1/yk/r/LOOn0JtHNzb.gif) no-repeat center center} .loading.uiMediaThumb i{opacity:.3} .uiMediaThumbSelected{background-color:#3b5998;border-color:#3b5998} .uiMediaThumb:hover,.uiMediaThumb:hover .uiMediaThumbWrap,.uiMediaThumb:active,.uiMediaThumb:active .uiMediaThumbWrap,.uiMediaThumb:focus,.uiMediaThumb:focus .uiMediaThumbWrap{border-color:#3b5998} .uiMediaThumb i{background-color:#eee;background-position:center 25%;background-repeat:no-repeat;display:block} .uiMediaThumbSmall i{height:54px;width:73px} .uiMediaThumbMedium i{height:85px;width:114px} .uiMediaThumbLarge i{height:116px;width:149px} .uiMediaThumbHuge i{height:120px;width:161px} .uiMediaThumbAlb{margin-bottom:4px;margin-right:4px} .uiMediaThumbWrap{background:#fff;border:1px solid #ccc;left:4px;padding:4px;position:absolute;top:4px} .uiMediaThumbAlbSmall,.uiMediaThumbSmall .uiMediaThumbWrap i{height:49px;width:68px} .uiMediaThumbAlbMedium,.uiMediaThumbMedium .uiMediaThumbWrap i{height:80px;width:109px} .uiMediaThumbAlbLarge,.uiMediaThumbLarge .uiMediaThumbWrap i{height:111px;width:144px} .uiMediaThumbAlbHuge,.uiMediaThumbHuge .uiMediaThumbWrap i{height:115px;width:156px} .uiPhotoThumb{border:1px solid #ccc;display:inline-block} .uiPhotoThumb img{display:block;margin:3px} .uiPhotoThumb:hover{border:1px solid #3b5998} .loading.uiPhotoThumb{background:url(http://static.ak.fbcdn.net/rsrc.php/v1/yb/r/GsNJNwuI-UM.gif) no-repeat center center} .loading.uiPhotoThumb img{opacity:.3} .uiVideoThumb{border:0;overflow:hidden;position:relative} .uiVideoThumb img{display:inline-block;max-height:130px;max-width:130px} .uiVideoThumb img[width]{max-width:auto} .uiVideoThumb i{background:url(http://static.ak.fbcdn.net/rsrc.php/v1/y6/r/gY6pCnDw29i.png) no-repeat 0 0;bottom:5px;height:26px;left:5px;position:absolute;width:35px} .uiVideoThumbSmall i{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yN/r/aERK2-5sOBX.png);bottom:3px;height:22px;left:3px;width:27px} .uiVideoThumbTiny i{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yr/r/AF1Uwjj81fI.png);bottom:3px;height:17px;width:21px;left:3px} .uiVideoThumbLoading i{background:url(http://static.ak.fbcdn.net/rsrc.php/v1/y9/r/jKEcVPZFk-2.gif) no-repeat 50% 50%;bottom:0;height:100%;left:0;width:100%} .uiVideoThumbSmall.uiVideoThumbLoading i,.uiVideoThumbTiny.uiVideoThumbLoading i{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yb/r/GsNJNwuI-UM.gif)} .uiVideoThumbLoading img{opacity:.15} .uiMorePager .uiMorePagerPrimary{display:block;padding:10px 15px} .uiMorePager .uiMorePagerPrimary:hover{background-color:#d8dfea} .uiMorePager .uiMorePagerSecondary{margin:10px 15px} .uiMorePager .arrow{display:inline-block;vertical-align:top} .uiMorePager .uiMorePagerLoader{display:none;padding:11px 15px 9px;text-align:center} .async_saving .uiMorePagerLoader{display:block} .async_saving .uiMorePagerPrimary, .async_saving .uiMorePagerSecondary{display:none} .uiMorePagerCenter{text-align:center} .uiMorePagerLight .uiMorePagerPrimary, .uiMorePagerLight .uiMorePagerLoader{padding:6px 5px 10px;border-top:1px solid #e5eaf1} .uiMorePagerLight .uiMorePagerPrimary:hover{background-color:#edeff4;border-top:1px solid #d8dfea} .uiMorePagerLight .uiMorePagerSecondary{margin:6px 5px} .uiSideNav .loading .uiLoadingIndicatorAsync,.uiFutureSideNav .loading .uiLoadingIndicatorAsync{display:inline} .editMode .uiSideNav .loading .uiLoadingIndicatorAsync,.uiSideNav .loading ul .uiLoadingIndicatorAsync{display:none} .uiSideNav .uiLoadingIndicatorAsync{position:relative;top:2px} .uiSideNav .buttonWrap{clear:left;float:left;height:20px;text-align:right;width:20px} .uiSideNav .sideNavItem{padding-right:20px;margin-left:-20px;width:100%} .uiSideNav .drag{margin-left:0} .uiSideNav .item,.uiSideNav .subitem{margin-left:20px;margin-right:-20px} .uiSideNav .sideNavItem .imgWrap{margin-left:-22px;margin-top:-1px;float:left} .uiSideNav .sideNavItem .linkWrap{-o-text-overflow:ellipsis;display:block;overflow:hidden;padding-left:0;text-overflow:ellipsis;white-space:nowrap} .uiSideNav .sideNavItem .hasCount{max-width:110px} .uiSideNav .sideNavItem .noCount{max-width:145px} .uiSideNav .sideNavItem .subitem .hasCount{max-width:90px} .uiSideNav .sideNavItem .subitem .noCount{max-width:125px} .uiSideNav .loading .noCount{max-width:127px} .uiSideNav .sideNavItem .uiSideNavEditButton{margin:2px 5px 0 0;text-align:left} .uiSideNav .sideNavItem .uiCloseButton{opacity:0} .uiSideNav .sideNavItem .uiCloseButton:focus,.uiSideNav .sideNavItem:hover .uiCloseButton,.uiSideNav .sideNavItem .openToggler .uiCloseButton{opacity:1} .uiNarrowSideNav .uiSideNav .sideNavItem:hover .buttonWrap,.uiNarrowSideNav .uiSideNav .hover .buttonWrap,.uiNarrowSideNav .uiSideNav .editMenuOpened .buttonWrap{padding-right:4px;width:25px} .uiNarrowSideNav .uiSideNav .sideNavItem:hover .item .rfloat,.uiNarrowSideNav .uiSideNav .hover .item .rfloat,.uiNarrowSideNav .uiSideNav .editMenuOpened .item .rfloat{display:none} .uiNarrowSideNav .uiSideNav .buttonWrap{float:right;margin-right:-2px;width:0} .uiNarrowSideNav .sideNavItem{padding-right:0;margin-left:0} .uiNarrowSideNav .sideNavItem .item,.uiNarrowSideNav .sideNavItem .subitem{margin-left:0;margin-right:0} .uiSideNavCountSprited{background:url(http://static.ak.fbcdn.net/rsrc.php/v1/yk/r/BwKwOpPWbGZ.png) no-repeat right 0;color:#3b5998;display:inline-block;font-weight:bold;line-height:13px;/* @noflip */ padding-right:4px;text-decoration:none} .uiSideNavCountSprited .countValue{/* @noflip */ background:url(http://static.ak.fbcdn.net/rsrc.php/v1/yk/r/BwKwOpPWbGZ.png) no-repeat 0 -13px;/* @noflip */ padding-left:4px} .uiSideNavCountSprited .countValue, .uiSideNavCountSprited .maxCountIndicator{display:inline-block;height:13px;vertical-align:top} .uiSideNav .async_saving .uiSideNavCountSprited, .uiSideNav .loading .uiSideNavCountSprited{display:none} .uiSideNavCount{background-color:#d8dfea;border-radius:2px;color:#3b5998;font-weight:bold;left:-1px;padding:0 4px;position:relative} .uiSideNav .uiSideNavCount{padding-bottom:2px} .uiSideNavCountInline{display:inline-block;line-height:15px} .uiSideNav .async_saving .uiSideNavCount,.uiSideNav .loading .uiSideNavCount{display:none} .uiContextualDialogDefaultPadding{padding:15px} .uiContextualDialogFooter{padding:6px 7px 6px 8px} .uiContextualDialogPositioner, .uiContextualDialogPositioner .uiContextualDialog{position:absolute;z-index:200} .uiContextualDialogFixed{position:fixed} .uiContextualDialogAbove .uiContextualDialog{bottom:0} .uiContextualDialogBelow .uiContextualDialog{top:0} .uiContextualDialogLeft .uiContextualDialog, .uiContextualDialogRightAligned .uiContextualDialog{right:0} .uiContextualDialog, .uiContextualDialog:focus{outline:0 solid transparent} .uiContextualLayerPositioner{height:0;position:absolute;z-index:200} .uiContextualLayer{position:absolute} div.uiContextualLayerPositionerFixed{position:fixed} .uiOverlay{position:relative;z-index:200} .uiOverlayContent{background:#fff;border:1px solid #8c8c8c;border:1px solid rgba(0, 0, 0, .45);border-bottom:1px solid #666;box-shadow:0 3px 8px rgba(0, 0, 0, .3);position:relative} .uiOverlayFooter{text-align:right} .uiOverlayFooterMessage{width:100%} .uiOverlayFooterButtons{white-space:nowrap} .uiOverlayArrow{position:absolute;overflow:hidden} .uiOverlayArrowTop{padding-top:10px} .uiOverlayArrowRight{padding-right:10px} .uiOverlayArrowBottom{padding-bottom:10px} .uiOverlayArrowLeft{padding-left:10px} .uiOverlayArrowTop .uiOverlayArrow{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yZ/r/AYwC2vHPaWW.png);background-repeat:no-repeat;background-position:-216px -407px;height:9px;top:2px;width:16px} .uiOverlayArrowRight .uiOverlayArrow{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yZ/r/AYwC2vHPaWW.png);background-repeat:no-repeat;background-position:-10px -440px;height:16px;right:2px;width:9px} .uiOverlayArrowBottom .uiOverlayArrow{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yZ/r/AYwC2vHPaWW.png);background-repeat:no-repeat;background-position:-233px -407px;bottom:2px;height:9px;width:16px} .uiOverlayWithFooterArrowBottom .uiOverlayArrow{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yZ/r/AYwC2vHPaWW.png);background-repeat:no-repeat;background-position:-199px -407px} .uiOverlayArrowLeft .uiOverlayArrow{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yZ/r/AYwC2vHPaWW.png);background-repeat:no-repeat;background-position:0 -440px;height:16px;left:2px;width:9px} .uiTooltipX{position:relative;zoom:1} .uiTooltipX .content{background-color:#282828;color:#fff;font-size: 11px;line-height:14px;padding:4px 8px;text-align:left;white-space:nowrap} .uiTooltipX .tooltipText{max-width:334px} .uiTooltipX .tooltipWrap{white-space:normal;width:334px;word-wrap:break-word} .uiTooltipX .tooltipText span{zoom:1} .uiTooltipX i.arrow{border:4px solid transparent;font-size:0;height:0;line-height:0;position:absolute;width:0} .aboveleft .uiTooltipX,.aboveright .uiTooltipX,.abovecenter .uiTooltipX{margin-bottom:1px;padding-bottom:4px} .aboveleft .uiTooltipX i.arrow,.aboveright .uiTooltipX i.arrow,.abovecenter .uiTooltipX i.arrow{border-bottom:0;border-top-color:#282828;bottom:0} .belowleft .uiTooltipX,.belowright .uiTooltipX,.belowcenter .uiTooltipX{margin-top:1px;padding-top:4px} .belowleft .uiTooltipX i.arrow,.belowright .uiTooltipX i.arrow,.belowcenter .uiTooltipX i.arrow{border-bottom-color:#282828;border-top:0;top:0} .aboveleft .uiTooltipX i.arrow,.belowleft .uiTooltipX i.arrow{left:5px} .aboveright .uiTooltipX i.arrow,.belowright .uiTooltipX i.arrow{right:5px} .abovecenter .uiTooltipX i.arrow,.belowcenter .uiTooltipX i.arrow{left:50%;margin-left:-4px} .left .uiTooltipX{margin-right:1px;padding-right:4px} .left .uiTooltipX i.arrow{border-left-color:#282828;border-right:0;right:0;top:6px} .right .uiTooltipX{margin-left:1px;padding-left:4px} .right .uiTooltipX i.arrow{border-left:0;border-right-color:#282828;left:0;top:6px} .uiFacepileSmall ul{margin-top:-2px} .uiFacepileMedium ul{margin-top:-1px} .uiFacepileLarge ul{margin-top:-3px} .uiFacepile .link{display:inline-block} .uiFacepile .uiFacepileItem .img{vertical-align:bottom} .uiFacepileSmall .uiFacepileItem{margin:2px 2px 0 0} .uiFacepileMedium .uiFacepileItem{margin:1px 1px 0 0} .uiFacepileLarge .uiFacepileItem{margin:3px 3px 0 0} .uiFacepile li:last-child .img{margin-right:0} .uiFacepile .showAll{width:100%} .uiFacepile .showAllLink{border-color:#7792ba;border-width:1px 0 0;padding:3px;vertical-align:middle} .uiFacepileSmall .showAllLink{line-height:18px;margin:2px 2px 0 0} .uiFacepileMedium .showAllLink{line-height:24px;margin:1px 1px 0 0} .uiFacepileLarge .showAllLink{line-height:44px;margin:5px 5px 0 0} .uiFacepile .chatOnline .uiTooltipText{background-position:right center;background-repeat:no-repeat;border-right:7px solid #282828;padding-right:12px} .uiFacepile .chatOnline .uiTooltipText{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yU/r/gATt-jY8pG8.png)} .uiFacepile .chatStatus{border:solid #fff;border-width:1px 0 0 1px;bottom:0;height:5px;position:absolute;right:0;width:5px} .uiFacepile .chatOnline .chatStatus{background:#84ca5a} .uiFacepile .chatOffline .chatStatus,.uiFacepile .chatIdle .chatStatus,.uiFacepile .chatMobile .chatStatus{border:none} .uiProfilePhotoHugeBadCrop{background-position:center 25%} .uiProfilePhotoHuge{width:100px;height:100px} .uiProfilePhotoLarge{width:50px;height:50px} .uiProfilePhotoMedium{width:32px;height:32px} .uiProfilePhotoSmall{width:24px;height:24px} .uiScaledImageContainer{position:relative;overflow:hidden} .uiScaledImageCentered{background-color:#f2f2f2;text-align:center} .uiScaledImageContainer img{height:100%;min-height:100%;position:relative} .uiScaledImageContainer .scaledImageFitWidth{height:auto;width:100%} .uiScaledImageContainer .verticallyAligned{min-height:0;vertical-align:middle} .uiToken{background:#e2e6f0;border:1px solid #9daccc;border-radius:2px;color:#1c2a47;cursor:default;display:block;float:left;height:14px;margin:0 4px 4px 0;padding:0 3px;position:relative;white-space:nowrap} .uiToken .remove{margin:2px 0 -2px 1px;outline:none} .uiTokenSelected{background-color:#6d84b4;border-color:#3b5998;color:#fff} .uiTokenizer{background:#fff} .uiNormalTokenizer .uiTypeahead{width:100%} .uiNormalTokenizer .tokenarea{overflow:hidden;padding-top:6px} .uiTypeaheadView{display:block;left:0;position:absolute;top:100%;width:100%} .uiTypeaheadView ul{background:#fff;border:solid;border-width:1px 1px 2px;border-color:#333 #333 #293e6a;overflow:hidden;padding:2px 0} .uiTypeaheadView .freeform{border-top-color:#ddd;padding:2px 6px 1px;text-align:center} .uiTypeaheadView li{border:solid #fff;border-width:1px 0;color:#333;cursor:pointer;display:block;min-height:1px;padding:0 6px;position:relative} .uiTypeaheadView strong{background-color:#d8dfea;color:#3b5998} div.uiTypeaheadView .selected{background-color:#6d84b4;border-color:#3b5998} .uiTypeaheadView .selected,.uiTypeaheadView .selected a,.uiTypeaheadView .selected div,.uiTypeaheadView .selected span{color:#fff !important} .uiTypeaheadView .selected strong{background-color:#5670a6} .uiTypeaheadView .text,.uiTypeaheadView .subtext,.uiTypeaheadView .category{display:block;padding-bottom:2px} .uiTypeaheadView .category{color:#666} .uiTypeaheadView .subtext{color:#999} .uiTypeaheadView .arrow{background:transparent url(http://static.ak.fbcdn.net/rsrc.php/v1/yV/r/IJYgcESal33.png) 0 -413px;display:inline-block;height:7px;margin-left:4px;width:4px} .uiTypeaheadView .selected .arrow{background-position:0 -420px} .uiTypeahead .uiTypeaheadView .calltoaction{background:#f7f7f7;border-bottom:none;border-color:#ddd;display:block;min-height:1px;margin:2px 0 -2px;padding:8px;text-align:center} .uiTypeahead .uiTypeaheadView .calltoaction.selected{background:#6d84b4;border-color:#3b5998} .typeaheadLoading .uiTypeaheadView .calltoaction span.text{visibility:hidden} .typeaheadLoading .uiTypeaheadView .calltoaction{background:#f7f7f7 url(http://static.ak.fbcdn.net/rsrc.php/v1/yb/r/GsNJNwuI-UM.gif) no-repeat 50% 50%} .typeaheadLoading .uiTypeaheadView .calltoaction.selected{background:#6d84b4 url(http://static.ak.fbcdn.net/rsrc.php/v1/y-/r/AGUNXgX_Wx3.gif) no-repeat 50% 50%} .uiTypeaheadView .bucketed ul{padding:0} .uiTypeaheadView .bucketed .header{background-color:#f2f2f2;border-top:1px solid #e2e2e2;border-bottom:none;margin-top:4px;min-height:10px;padding:2px 15px 2px 6px} .uiTypeaheadView .bucketed .header:first-child{border-top:none;margin-top:0} .uiTypeaheadView .bucketed .header .text{color:#000 !important} .uiClearableTypeahead .selected .clear{display:block} .uiClearableTypeahead .clear,.uiTypeaheadDisabled .selected .clear{display:none;position:absolute;margin-top:-7px;right:3px;top:50%} .uiClearableTypeahead .selected{padding-right:16px} .uiTypeaheadDisabled .selected{padding-right:0} .photoTypeahead .photo{display:none;height:16px;left:3px;position:absolute;top:2px;width:16px} .photoTypeahead .selected .photo{display:block} .photoTypeahead .selected .textInput{padding-left:23px} .photoTypeahead.uiTypeaheadDisabled .selected .photo{opacity:.30} .uiTypeahead{background:#fff;border:solid #bdc7d8;border-width:1px 0;cursor:default;position:relative} .uiTypeahead .wrap{border:solid #bdc7d8;border-width:0 1px} .uiTypeahead .innerWrap{overflow:hidden;zoom:1} .uiTypeahead .textInput{background-color:transparent;border:0;outline:0;width:100%} .uiTypeahead .selected{background-color:#e2e8f6} .uiTypeaheadDisabled, .uiTypeaheadDisabled div.wrap{border-color:#ccc} .uiTypeaheadDisabled div.wrap{background:#e2e2e2} .uiTypeaheadDisabled div.wrap .textInput{color:#333} .uiTypeaheadFocused, .uiTypeaheadFocused .uiTypeahead{z-index:1} .uiTypeaheadView .basic img{display:block;float:left;padding-right:4px} .uiTypeahead .uiTypeaheadView .basic .calltoaction{padding:3px} .uiTypeaheadView .compact li{min-height:32px;padding:2px 10px 2px 45px} .uiTypeaheadView .compact .splitpics,.uiTypeaheadView .compact img{display:block;height:32px;left:6px;position:absolute;width:32px} .uiTypeaheadView .compact .text{font-weight:bold} .uiTypeaheadView .compact .details{color:#999;padding-top:0} .uiTypeaheadView .compact .detailsContents{position:relative} .uiTypeaheadView .compact .splitpic{float:left;overflow:hidden;width:15px} .uiTypeaheadView .compact .splitpics img{left:0;margin-left:-8px;position:static} .uiTypeaheadView .compact .splitpics .leftpic{margin-right:1px;width:16px} .uiTypeaheadView .compact .splitpics .toppic{height:15px;margin-bottom:1px} .uiTypeaheadView .compact .splitpics .bottompic{height:16px} .uiTypeaheadView .compact .splitpics .toppic img,.uiTypeaheadView .compact .splitpics .bottompic img{margin-top:-8px} .uiTypeaheadView .compact .friendlist img{background-color:transparent} .uiTypeaheadView .search li{min-height:50px;padding:2px 30px 2px 63px} .uiTypeaheadView .search li a{outline:none} .uiTypeaheadView .search li a:hover{text-decoration:none} .uiTypeaheadView .search .playButton{height:30px;left:16px;top:12px;position:absolute;width:30px;background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yO/r/OuziOid04jS.png);background-repeat:no-repeat;background-position:0 0} .uiTypeaheadView .search a:hover .playButton{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yO/r/OuziOid04jS.png);background-repeat:no-repeat;background-position:0 -30px} .uiTypeaheadView .search .music_playing a .playButton{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yO/r/OuziOid04jS.png);background-repeat:no-repeat;background-position:0 -60px} .uiTypeaheadView .search .music_playing a:hover .playButton{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yO/r/OuziOid04jS.png);background-repeat:no-repeat;background-position:0 -90px} .uiTypeaheadView .search .song.async_saving a .playButton{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yO/r/OuziOid04jS.png);background-repeat:no-repeat;background-position:0 -120px} .uiTypeaheadView .search .song.async_saving a .playLoader{position:absolute;width:14px;height:14px;left:24px;top:20px;background:url(http://static.ak.fbcdn.net/rsrc.php/v1/yp/r/DrGcdjdlpCl.gif) no-repeat} .uiTypeaheadView .search img{background-color:#eceff5;display:block;height:50px;left:6px;position:absolute;width:50px} .uiTypeaheadView .search .text{color:#3b5998;font-weight:bold} .uiTypeaheadView .search .subtext{font-size: 9px} .uiTypeaheadView .search .seeMore{color:#3b5998;font-size: 11px;font-weight:bold;padding-bottom:0;padding-right:7px} .uiTypeaheadView .search .web{padding:2px 15px 2px 6px} .uiTypeaheadView .search .question{min-height:14px;padding:3px 30px 3px 6px} .uiTypeaheadView .search .question .text{display:inline} .uiTypeaheadView .search .question .subtext{display:inline;margin-left:5px;white-space:nowrap} .uiTypeaheadView .search .friendlist .photo{background-color:transparent} .uiTypeaheadView .search .text .alias{color:#999;font-weight:normal} .uiBlingBox{border-bottom:1px solid #fff;display:inline-block;padding:3px 4px 3px 2px} .uiBlingBox:hover{text-decoration:none;background-color:#eceff5;border-bottom:1px solid #e5eaf1} .uiBlingBox .text{line-height:11px;vertical-align:text-bottom} .uiBlingBoxSm .text{font-size: 9px} .uiBlingBox .img{margin-right:2px;vertical-align:text-top} .uiBlingBoxSm .img{vertical-align:text-bottom} .uiBlingBox .emptyBling{margin-right:0 !important} .autoexpand_mode .feedback_toggle_link{display:none} .UIActionLinks .uiLinkButton,.UIActionLinks .uiLinkButton input,.UIActionLinks .uiLinkButton input:hover{color:#6b84b4;font-weight:normal;vertical-align:baseline} .collapsed_comments .uiUfi{display:none} .uiUfi{padding-top:2px;width:398px;margin:0} .uiUfi .ufiItem{background-color:#edeff4;border-bottom:1px solid #d2d9e7;margin-top:1px;padding:5px 5px 4px} .uiUfi .uiUfiSpamItem{background-color:#e2e2e2} .uiUfi .uiUfiUnseenItem{border-left:2px solid #a8b2ce;padding-left:3px} .uiUfi .ufiNub{margin-bottom:-2px;margin-top:0} .uiUfi .ufiNub i{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/y7/r/UvyvLtJTQzO.png);background-repeat:no-repeat;background-position:0 0;display:block;height:5px;margin-left:17px;width:9px} .uiUfi .uiUfiViewAll .uiLinkButton,.uiUfi .uiUfiViewReposts a{display:block} .uiUfiAddComment .actorPic{float:left;margin-right:6px} .uiUfiAddComment .commentArea{padding:0 !important} .uiUfiAddComment .commentBox{padding:0 8px 0 0} .uiUfiAddComment .commentBtn{float:right} .uiUfiAddComment .textBox{display:block;margin:0;width:100%} .child_is_active .uiUfiAddCommentCollapsed .textBox,.child_was_focused .commentArea .inlineShareBox .textBox,.uiUfiAddComment .textBox{height:29px} .uiUfiAddCommentCollapsed .textBox{height:14px} .hidden_add_comment .uiUfiAddComment,.uiUfiAddCommentCollapsed .actorPic,.uiUfiAddComment .commentBtn,.uiUfiAddCommentCollapsed .sendOnEnterTip,.uiUfiAddCommentCollapsed .commentBoxSubtitle,.commentUndoTip{display:none} .child_is_active .uiUfiAddCommentCollapsed .actorPic,.child_is_active .uiUfiAddComment .commentBtn,.child_is_active .sendOnEnterTip,.child_is_active .commentBoxSubtitle,.commentUndone .child_is_focused .commentUndoTip{display:block} .commentUndone .commentBoxSubtitle,.commentUndone .sendOnEnterTip{display:none} .uiUfiAddTip{padding-top:1px;padding-left:0} .uiUfiAddComment .mentionsAddComment .commentBox{padding:0} .uiUfiAddComment .mentionsAddComment .mentionsTypeahead .wrap{padding:3px} .uiUfiAddComment .mentionsAddComment .textBoxContainer{background-color:#fff} .uiUfiAddComment .mentionsAddComment .textBox{padding:0;line-height:13px} .uiUfiAddComment .mentionsAddComment .highlighter{padding:3px} .uiUfiAddComment .mentionsAddComment .highlighter div{line-height:13px} .uiUfiComment .commentContent{padding-top:1px} .uiUfiComment .actorName{font-weight:bold} .uiUfiComment .commentActions{padding-top:2px} .uiUfiComment .deleteAction,.uiUfiComment .commentHideSelector .uiSelectorButton,.uiUfiComment .commentRemoverButton{opacity:0} .uiUfiComment .socialContext a{color:gray} .uiUfiComment:hover .deleteAction,.uiUfiComment:hover .commentHideSelector .uiSelectorButton,.uiUfiSpamItem .commentHideSelector .uiSelectorButton,.uiUfiComment .commentHideSelector .openToggler .uiSelectorButton,.uiUfiComment:hover .commentRemoverButton{opacity:1} .uiUfiFailureShow, .uiUfiCommentFailed .uiUfiFailureHide{display:none} .uiUfiCommentFailed .uiUfiFailureShow{display:block} .uiUfiCommentFailed{background:#f2f2f2 !important;border-left:2px solid #aaa7a2} .uiUfiCommentFailed .actorName, .uiUfiCommentFailed{color:gray} .uiUfiCommentFailed .uiUfiFailureMessage{color:#111} .uiUfiSmall .commentArea .textBox{height:14px} .UIPage_LoggedOut .UIFullPage_Container, .UIPage_LoggedOut .UIStandardFrame_Container{margin-top:26px} #bootloader_7bkGa { height: 42px; } ------------vz8vre3LOsirGgAqCZo2LA Content-Disposition: inline; filename=OvaMxscrnNG.css Content-Type: text/css; charset=utf-8; name=OvaMxscrnNG.css Content-Location: http://static.ak.fbcdn.net/rsrc.php/v1/yP/r/OvaMxscrnNG.css Content-Transfer-Encoding: 8bit /*1324322698,169775811*/ .fbDarkWidget .fan_box, .fbDarkWidget .uiStream .uiStreamMessage{color:gray} .fbDarkWidget .fan_box a{color:#ccc} .fan_box .full_widget{border:solid 1px #94a3c4;background:white} .fan_box .full_widget .connect_top{background:#eceff5} .fan_box .connect_top{padding:10px 10px 8px 10px} .pts .fan_box .connect_top{padding:5px 10px 8px 5px} .fan_box .profileimage{float:left;width:40px;height:40px;padding:0 10px 0 0;margin:0 0 4px 0} .fan_box .connect_action{padding:0 0 0 8px} .fan_box .connect_action .name{line-height:15px;font-size: 14px;font-weight:bold} .fan_box .connect_button{padding-top:5px} .fan_box .connect_button .uiButton{margin:1px 0 0 0} .fan_box .connect_action a.undo{margin:0 0 0 3px} .fan_box .page_stream, .fan_box .page_stream_short{text-align:center;padding:0 5px;overflow:auto;border-top:solid 1px #d8dfea;position:relative} .fan_box .storyContent{text-align:left} .fan_box .page_stream{overflow-x:hidden} .fan_box .page_stream .loader{padding-top:20px} .fan_box .UIIntentionalStory{background:transparent;text-align:left;padding:7px 0 0 0} .fan_box .UIIntentionalStory .UIMediaItem_UnknownWidth{max-width:100px} .fan_box .connections{border-top:solid 1px #d8dfea;padding:10px 0 4px 10px;min-height:150px} .pts .fan_box .connections{padding:5px 0 4px 5px} .fan_box .connections .connections_grid{padding-top:5px} .fan_box .connections_grid .grid_item{float:left;padding:0 5px 8px 0;overflow:hidden;width:50px} .fan_box .connections_grid .grid_item .name{font-size: 9px;color:gray;overflow:hidden;padding-top:2px;text-align:center;white-space:nowrap} .fan_box .connect_span{margin:0 0 1px} .fan_box .connect_widget .connect_widget_text{padding:0} .fan_box .connect_widget td.connect_widget_vertical_center{height:20px} .fan_box .connect_widget .connect_widget_interactive_area{margin:5px 0 0} .connect_comment_widget{margin:0 4px;padding:5px 0;position:relative} .connect_comment_widget .nub{background:transparent url(http://static.ak.fbcdn.net/rsrc.php/v1/yv/r/agyQHs6yLID.gif) no-repeat 8px 0;height:6px;width:20px;padding:0;margin:0;left:0;line-height:0;position:absolute;z-index:2;top:0} .connect_comment_widget .side_nub{background:transparent url(http://static.ak.fbcdn.net/rsrc.php/v1/yn/r/vAOEfR4cWQM.gif) no-repeat 0 0;height:20px;width:6px;padding:0;margin:0;left:-5px;line-height:0;position:absolute;z-index:2;top:14px} .connect_comment_widget_rtl .side_nub{background:transparent url(http://static.ak.fbcdn.net/rsrc.php/v1/yK/r/R95msRfVr6a.gif) no-repeat 0 0} .connect_comment_widget .comment_content{background:white;border-color:#333333 #333333 #283e6c;border-style:solid;border-width:1px 1px 2px;zoom:1} .connect_comment_widget .connect_comment_widget_text{padding:8px 8px 4px} .connect_comment_widget .connect_comment_widget_custom_text{color:gray} .connect_comment_widget .connect_comment_widget_placeholder_input{width:304px;color:gray;line-height:16px;height:20px} .connect_comment_widget .connect_comment_widget_placeholder_input_region{padding:8px 8px 5px} .connect_comment_widget .connect_comment_widget_user_pic{display:block;float:left;height:auto;padding:0 5px 0 0;width:50px} .connect_comment_widget .connect_comment_widget_full_input_textarea{height:50px;width:319px} .connect_comment_widget .connect_comment_widget_full_input_region{padding:8px 8px 5px} .connect_comment_widget textarea.connect_comment_widget_disabled{color:gray} .connect_comment_widget.like_button_dark textarea.connect_comment_widget_disabled{color:#dedede} .connect_comment_widget div.connect_comment_share_preview{padding-left:55px;padding-top:6px} .connect_comment_widget div.connect_comment_widget_button_region{padding:8px 8px 5px;text-align:right;background-color:#f2f2f2;border-top:1px solid #bdc7d8} .connect_comment_widget_checkbox_region div.uiinputlabel{display:inline-block;float:left} .connect_comment_widget.like_button_dark div.connect_comment_widget_button_region{background-color:#333;border-top:1px solid #666} .like_button_dark .nub,.like_button_dark .connect_widget_comment_box_upward_nub{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yL/r/7vbl1usLlV8.gif)} .like_button_dark .side_nub{background:transparent url(http://static.ak.fbcdn.net/rsrc.php/v1/yB/r/Gvy8rtIdNBK.gif) no-repeat 0 0;left:-4px} .connect_comment_widget_rtl.like_button_dark .side_nub{background:transparent url(http://static.ak.fbcdn.net/rsrc.php/v1/yp/r/E-2vs4qfO7d.gif) no-repeat 0 0} .like_button_dark .comment_content{background:#111;border:1px solid #666;border-bottom:2px solid #ccc;color:#ccc} .like_button_dark .connect_comment_widget_placeholder_input{border:1px solid #505050;background:#505050;color:#fff} .like_button_dark .connect_comment_widget_full_input_textarea,.like_button_dark .connect_comment_widget_placeholder_input{background-color:#000;border-color:#434343;color:#fff} .like_button_dark .connect_comment_widget_full_input_textarea{color:#fff} .like_button_dark a{color:#fff} .connect_comment_widget .connect_comment_widget_title{font-size: 12px;font-weight:bold;margin-top:-2px} .connect_comment_widget.like_button_dark .connect_comment_widget_title{color:#ccc} .connect_comment_widget .connect_comment_widget_description,.connect_comment_widget .connect_comment_widget_href{font-size: 11px;line-height:11px;margin-bottom:6px} .connect_comment_widget .connect_comment_widget_description{color:#000} .connect_comment_widget.like_button_dark .connect_comment_widget_description{color:#ccc} .connect_widget .large_font{font-size: 13px} .metadata{color:#000;font-size: 11px;margin:7px 0 4px 0} .metadata_with_margin{margin-left:16px} .profile_images_without_margin{margin-left:0} .uiFacepileMedium li.profile_image_small img.uiProfilePhoto{display:block;float:left;height:32px;padding:3px 3px 0 0;width:32px} .uiFacepileMedium li.profile_image_small{height:35px;margin:0} .pluginLogin{min-height:22px} .connect_widget .metadata .connect_widget_text_no_icon{padding:0} .connect_widget .connect_widget_interactive_area{border-collapse:collapse} .connect_widget td.connect_widget_vertical_center{border-spacing:0;font-size: 11px;line-height:normal;padding:0} .connect_widget td.connect_widget_button_cell{vertical-align:top} .connect_widget td.connect_widget_confirm_cell{padding-top:4px} .connect_widget .connect_button_slider{position:relative;zoom:1} .connect_widget .connect_widget_button_cell .connect_slide_hide_content{overflow:hidden;width:1px;margin-right:0} .connect_widget .connect_slide_hide_content .connect_button_container{margin-left:1px} .button_count .connect_widget_interactive_area .connect_widget_facebook_favicon,.button_count .connect_widget_interactive_area .connect_widget_text{float:left;position:static} a.connect_widget_like_button{display:block;float:left;border-radius:3px;padding:4px 5px;border:1px solid #000} .button_count a.connect_widget_like_button{padding:2px 4px} a.connect_widget_like_button span{line-height:14px} a.connect_widget_like_button:hover{text-decoration:none} .connect_widget_number_cloud{position:relative;background:#fff;border:1px solid #d3d3d3;height:25px;padding-top:7px;text-align:center} .like_widget_dark div.connect_widget_number_cloud{background-color:#d7d7d7;border-color:#d7d7d7} div.connect_widget_number_cloud table.connect_widget_number_cloud_summary{margin-left:auto;margin-right:auto} div.connect_widget_number_cloud table.connect_widget_number_cloud_summary td{font-size: 13px} .thumbs_up_icon{width:15px;height:15px;margin-right:2px;background:url(http://static.ak.fbcdn.net/rsrc.php/v1/y7/r/ql9vukDCc4R.png) -1px -32px no-repeat} .like_widget_dark .thumbs_up_icon{background-position:-1px -2px} .like_widget_dark div.connect_widget_number_cloud_extension a{color:#333} div.connect_widget_number_cloud .connect_widget_text{padding-left:0} .connect_widget_number_cloud_nub{position:absolute;z-index:2;height:7px;width:7px;bottom:-7px;left:5px} .connect_widget_number_cloud_nub s,.connect_widget_number_cloud_nub i{border:solid transparent;border-top-color:#d3d3d3;border-width:5px;display:block;position:relative} .connect_widget_number_cloud_nub i{left:0;top:-12px;border-top-color:#fff} .like_widget_dark .connect_widget_number_cloud_nub s{border-top-color:#d7d7d7} .like_widget_dark .connect_widget_number_cloud_nub i{display:none} .connect_widget_offscreen{position:absolute;top:-10000px} div.connect_widget_number_cloud_extension{font-size: 11px;height:30px;margin-left:4px;margin-right:4px;margin-top:6px} div.connect_widget_number_cloud_extension_icon{margin-left:2px;margin-top:3px} div.connect_widget_number_cloud_extension_text{border-color:#dedede;border-width:1px 0 0 0;border-style:solid;line-height:11px;margin-top:1px;text-align:center} div.connect_widget_number_cloud_extension_text table{width:100%} div.connect_widget_number_cloud_extension_text td{height:30px;text-align:center;vertical-align:middle} div.connect_widget_number_cloud_extension span.like_reminder{color:#777;font-size: 9px} .like_widget_dark div.connect_widget_number_cloud_extension span.like_reminder{color:#333;font-size: 9px} table.connect_widget_button_count_summary,table.connect_widget_simple_summary{background-color:#eceef5;color:#000;font-size: 11px;height:21px} table.connect_widget_button_count_summary div.thumbs_up{background:url(http://static.ak.fbcdn.net/rsrc.php/v1/y7/r/ql9vukDCc4R.png) no-repeat 3px -32px #eceef5;height:15px;width:18px} td.connect_widget_simple_including div.simple_liked{background:url(http://static.ak.fbcdn.net/rsrc.php/v1/y7/r/ql9vukDCc4R.png) no-repeat 3px -47px #eceef5;height:15px;width:18px} .like_button_simple .connect_widget_like_button .liketext{background:url(http://static.ak.fbcdn.net/rsrc.php/v1/y7/r/ql9vukDCc4R.png) no-repeat 0 -47px #eceef5} .connect_widget_rtl table.connect_widget_button_count_summary div.thumbs_up{background-position:-1px 0} table.connect_widget_button_count_summary div.undo{background-color:#eceef5;height:21px;width:18px} .like_button_dark table.connect_widget_button_count_summary div.undo{background-color:#d7d7d7} table.connect_widget_button_count_summary label.undo_button{margin-left:6px;margin-top:4px} table.connect_widget_button_count_summary div.summary_text{padding-left:3px;padding-right:6px;white-space:nowrap} table.connect_widget_simple_summary div.summary_text{padding-left:3px;padding-right:6px;white-space:nowrap;color:#ccc} .like_button_dark table.connect_widget_button_count_summary,.like_button_dark table.connect_widget_simple_summary{background-color:#d7d7d7} .like_button_dark table.connect_widget_button_count_summary div.thumbs_up{background:transparent url(http://static.ak.fbcdn.net/rsrc.php/v1/y7/r/ql9vukDCc4R.png) no-repeat 3px -3px} .connect_widget_rtl .like_button_dark table.connect_widget_button_count_summary div.thumbs_up{background-position:-1px -3px} .connect_widget_button_count_count{background:#fff;border:1px solid #d1d1d1;float:left;font-weight:normal;height:14px;margin-left:1px;min-width:15px;padding:1px 2px 1px 2px;text-align:center;line-height:14px;white-space:nowrap} .like_button_dark div.connect_widget_button_count_count{background-color:#d7d7d7;border-color:#d7d7d7} .connect_widget_button_count_nub{float:left;position:relative;z-index:2;height:0;width:5px;top:-5px;left:2px} .connect_widget_button_count_nub s,.connect_widget_button_count_nub i{border:solid transparent;border-right-color:#d7d7d7;border-width:4px 5px 4px 0;top:1px;display:block;position:relative} .connect_widget_button_count_nub i{left:2px;top:-7px;border-right-color:#fff} .like_button_dark .connect_widget_button_count_nub i{display:none} td.connect_widget_button_count_excluding{padding:0} td.connect_widget_button_count_including,td.connect_widget_simple_including{padding:0} td.connect_widget_button_count_including .connect_widget_button_count_count.noGrayOut{background:transparent url(http://static.ak.fbcdn.net/rsrc.php/v1/yp/r/qDH1xoDhFBF.gif) no-repeat 4px 2px;padding-left:22px;padding-right:4px} .connect_widget_rtl td.connect_widget_button_count_including .connect_widget_button_count.noGrayOut{background:transparent url(http://static.ak.fbcdn.net/rsrc.php/v1/yp/r/qDH1xoDhFBF.gif) no-repeat 4px 2px;padding-right:22px;padding-left:4px} .connect_widget_like_button .vertical{display:block;top:-6px;left:0;margin:0 3px -6px 0;position:relative;padding:3px 4px 4px 3px;border-top:solid 1px;border-bottom:solid 1px} .button_count .connect_widget_like_button .vertical{padding:2px 3px 3px 2px} .connect_widget_like_button .horizontal{height:100%;width:100%;position:absolute;display:block;top:-3px;left:-3px;padding-left:1px;border-left:solid 1px;border-right:solid 1px} .connect_widget_like_button .corner_mask{overflow:hidden;width:3px;height:3px;position:absolute;display:block} .connect_widget_like_button .corner{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/y7/r/ql9vukDCc4R.png);height:6px;width:6px;display:block} .connect_widget_like_button .topleft{top:-6px;left:-3px} .connect_widget_like_button .topleft .corner{margin:0 0} .connect_widget_like_button .topright{top:-6px;right:0} .connect_widget_like_button .topright .corner{margin:0 0 0 -3px} .connect_widget_like_button .bottomright{bottom:0;right:0} .connect_widget_like_button .bottomright .corner{margin:-3px 0 0 -3px} .connect_widget_like_button .bottomleft{bottom:0;left:-3px} .connect_widget_like_button .bottomleft .corner{margin:-3px 0 0 0} .connect_widget_like_button .liketext{background:url(http://static.ak.fbcdn.net/rsrc.php/v1/y7/r/ql9vukDCc4R.png) -1px -33px no-repeat;color:#3b5998;display:block;padding-left:17px;white-space:nowrap} .connect_widget_rtl .connect_button_container .liketext{background:url(http://static.ak.fbcdn.net/rsrc.php/v1/y7/r/ql9vukDCc4R.png) 34px -33px no-repeat} .connect_widget_like_button .liketextwithimage img{margin-bottom:-2px;margin-right:4px;width:13px} .hidden .connect_widget_like_button .liketextwithimage img{height:0;margin:0;padding:0;width:0} .connect_widget_like_button .fbLikeButtonTrackingPixel{display:inline;height:0;width:0} .button_count .like_button_dark .like_button_no_like .liketext,.button_count .connect_widget_like_button .liketext{background-position:left -47px;margin-left:-1px} .connect_widget .like_button_no_like .piece,.connect_widget .like_button_no_like{background-color:#eceef5;border-color:#cad4e7} .connect_widget .like_button_no_like .corner{background-position:10px -89px} .connect_widget a.like_button_no_like:hover .piece,.connect_widget a.like_button_no_like:hover{background-color:#ebedf4;border-color:#9dacce} .connect_widget .like_button_no_like:hover .corner{background-position:10px -95px} .connect_widget .like_button_pressed,.connect_widget .like_button_pressed .piece{background-color:#ced4e6;border-color:#94a5ca} .connect_widget .like_button_pressed .corner{background-position:10px 55px} .connect_widget .like_button_like .corner{background-position:10px 49px} .connect_widget .like_button_dark .like_button_no_like,.connect_widget .like_button_dark .like_button_no_like .piece{background-color:#d7d7d7;border-color:#cad4e7} .connect_widget .like_button_dark .like_button_no_like .corner{background-position:10px -217px} .connect_widget .like_button_dark .liketext{color:#333;background-position:left -3px;margin-left:-1px} .connect_widget .like_button_dark .like_button_no_like:hover,.connect_widget .like_button_dark .like_button_no_like:hover .piece{background-color:#d9d9d9;border-color:#e9e9e9} .connect_widget .like_button_dark .like_button_no_like:hover .corner{background-position:10px -217px} .connect_widget .like_button_dark .like_button_no_like_pressed,.connect_widget .like_button_dark .like_button_no_like_pressed .piece{background-color:#a8a8a8;border-color:#a8a8a8;border-top-color:#8f8f8f} .connect_widget .like_button_dark .like_button_no_like_pressed .corner{background-position:10px 80px} .connect_widget .like_button_dark .like_button_like .corner{background-position:10px 74px} .connect_widget .connect_text_wrapper{position:relative} .connect_widget div.connect_confirmation_cell{padding:0;margin:0} .connect_widget div.connect_confirmation_cell_like{padding-left:0;position:relative;left:-1px} .connect_widget div.connect_confirmation_cell_no_like{padding-left:7px} .connect_widget .vertical_centering{padding-top:5px} .connect_widget .connect_widget_text{display:block;padding-left:17px;line-height:14px} .button_count .connect_widget_interactive_area .connect_widget_text{padding-left:0;font-weight:bold} .connect_widget .like_button_dark .connect_widget_text,.connect_widget .like_button_dark .connect_widget_confirmation{color:gray} .connect_widget .like_button_dark .connect_widget_text a{color:#fff} .connect_widget .connect_widget_connect_button{float:left} .connect_widget .connect_bar_widget_interactive_area{float:left} .connect_widget .connect_bar_widget_text_cell{width:400px} .connect_widget .connect_widget_icon{padding:4px 0 4px 4px;vertical-align:middle} .connect_widget a.connect_widget_link_inactive{color:gray;text-decoration:none;cursor:default} .connect_widget a.connect_widget_error_text{color:#a00;font-weight:bold} .transparent_widget .uiBoxLightblue{background-color:transparent;background-color:rgba(165, 175, 200, .2)} .transparent_widget .uiBoxWhite,.transparent_widget .fbConnectWidgetFooter{background-color:transparent;background-color:rgba(255, 255, 255, .2)} div.connect_widget_comment_box_nub{background:transparent url(http://static.ak.fbcdn.net/rsrc.php/v1/yn/r/vAOEfR4cWQM.gif) no-repeat 0 0;height:12px;left:-6px;position:absolute;top:6px;width:20px;z-index:3} div.connect_widget_comment_box_upward_nub{background:transparent url(http://static.ak.fbcdn.net/rsrc.php/v1/yv/r/agyQHs6yLID.gif) no-repeat 0 0;height:12px;left:5px;position:absolute;top:-6px;width:20px;z-index:3} .connect_widget_rtl div.connect_widget_comment_box_nub{background:transparent url(http://static.ak.fbcdn.net/rsrc.php/v1/yK/r/R95msRfVr6a.gif) no-repeat 0 0;left:-20px} .connect_widget div.connect_widget_comment_box{background-color:#fff;border-color:#000;border-style:solid;border-width:1px 1px 2px 1px;position:relative;z-index:100} .connect_widget div.connect_widget_comment_box.like_button_dark{background-color:#111;color:#ccc;border-color:#666} .connect_widget div.like_button_dark input.connect_widget_comment_textinput{background-color:#666;border-color:#666;color:#dedede} .connect_widget div.connect_widget_header_text{float:left;height:20px;overflow:hidden;padding-left:7px;padding-top:3px;width:200px} .connect_widget div.connect_widget_cancel_button{cursor:pointer;float:right;padding-right:7px;padding-top:3px} .connect_widget div.connect_widget_comment_text_area_div{padding-left:7px;padding-top:2px} .connect_widget div.connect_widget_comment_area{padding:8px} .connect_widget .connect_widget_comment_textinput{width:325px} .connect_widget .connect_widget_comment_summary{padding:7px 5px 7px 5px} .connect_widget .connect_widget_comment_button{margin-left:-1px} .connect_widget .connect_widget_comment_close_button{margin-left:2px} .connect_widget .like_button_dark .connect_widget_comment_close_button{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yE/r/htZktl244wt.png);background-repeat:no-repeat;opacity:.7} .connect_widget .like_button_dark .connect_widget_comment_close_button:hover{opacity:1} .connect_widget textarea.connect_widget_comment_text_area{height:30px;width:476px} .connect_widget .connect_widget_image{height:30px;width:30px;padding-top:3px;vertical-align:bottom} .connect_widget a.name_tooltip_link{display:block} .connect_widget a.name_tooltip_link .uiTooltipWrap:hover{display:none} .connect_widget .connect_widget_name{text-align:center} .connect_widget .connect_widget_sample_connection{float:left;padding-right:3px;width:30px;padding-top:5px} .connect_widget .connect_widget_user_not_connected{display:none} .connect_widget .connect_bar_widget_sample_connections{float:right} .connect_widget .connect_widget_whats_this{color:#999;font-size: 9px;padding-top:4px} .connect_widget .connect_widget_whats_this a:hover{color:#3b5998;text-decoration:none} .connect_widget .page_stream img{max-width:120px;height:auto} .connect_widget_like_button .liketext{background:url(http://static.ak.fbcdn.net/rsrc.php/v1/y7/r/ql9vukDCc4R.png) -1px -33px no-repeat} .connect_widget a.like_button_no_like:hover .piece,.connect_widget a.like_button_no_like:hover{background-color:#eceef5;border-color:#9dacce} .uiTooltipWrap{display:none} .connect_widget .like_button_like , .connect_widget .like_button_like .piece{background-color:#eee;border-color:#ddd;cursor:default} .connect_widget .like_button_dark .like_button_like , .connect_widget .like_button_dark .like_button_like .piece{background-color:#444;border-color:#555;cursor:default} .connect_widget .like_button_like .corner{background-position:10px -229px} .connect_widget .like_button_dark .like_button_like .corner{background-position:10px -223px} .connect_widget .like_button_like .liketext{background-image:none;clear:right;color:#aaa} .connect_widget .tombstone_cross{background:url(http://static.ak.fbcdn.net/rsrc.php/v1/y7/r/ql9vukDCc4R.png) no-repeat 0 -128px;display:block;float:left;height:12px;margin-right:3px;width:14px;z-index:99} .connect_widget .tombstone_cross_static{cursor:default} .like_button_no_like .tombstone_cross{display:none} .like_button_like .tombstone_cross{display:block} .connect_widget .like_button_dark .like_button_like .tombstone_cross{background:url(http://static.ak.fbcdn.net/rsrc.php/v1/y7/r/ql9vukDCc4R.png) no-repeat 0 -156px} .connect_widget .like_button_like .tombstone_cross:hover{background-position:0 -235px;cursor:pointer} .connect_widget .like_button_like .tombstone_cross_static:hover{background-position:0 -128px;cursor:default} .connect_widget .like_button_simple .like_button_like .tombstone_cross:hover{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/y7/r/ql9vukDCc4R.png);background-position:0 -128px;cursor:auto;height:12px;margin-left:0;margin-right:3px;margin-top:0;width:14px} .connect_widget .like_button_dark .like_button_like .tombstone_cross:hover{background-position:0 -247px} .connect_widget .connect_button_container .like_button_like .liketext, .connect_widget .connect_widget_connect_button .like_button_like .liketext{padding-left:17px} .connect_widget_comment_box div.connect_widget_comment_box_nub{background:none} .connect_widget .like_button_dark .like_button_like .liketext{color:#666} div.connect_widget div.connect_confirmation_cell_like{padding-left:7px} body.plugin{background:transparent;overflow:hidden} .connect_widget{overflow:hidden} .connect_widget .connect_widget_facebook_logo_menubar{background-color:#3b5998;border:1px solid #244588;border-bottom:none;margin-bottom:-1px;position:relative} .connect_widget .connect_widget_facebook_logo{padding:3px 0 5px 6px;float:left} .connect_widget .connect_widget_facebook_logo span{background:transparent url(http://static.ak.fbcdn.net/rsrc.php/v1/yx/r/zZEOQP4uOC1.gif) no-repeat scroll 0 0;display:block;height:17px;width:90px} .connect_widget .connect_widget_facebook_logo:hover span{background-position:left -17px} .connect_widget .connect_widget_menu_options{float:right} .connect_widget .connect_widget_menu_link{float:left;height:17px;margin-right:5px;padding:5px 5px 3px 5px;color:#fff;font-size: 11px} .connect_widget .connect_widget_menu_link:hover{background-color:#5c75aa;text-decoration:none} .fb_button_simple, .fb_button_simple_rtl{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yH/r/eIpbnVKI9lR.png);background-repeat:no-repeat;cursor:pointer;outline:none;text-decoration:none} .fb_button_simple_rtl{background-position:right 0} .fb_button_simple .fb_button_text{margin:0 0 0 20px;padding-bottom:1px} .fb_button_simple_rtl .fb_button_text{margin:0 10px 0 0} a.fb_button_simple:hover .fb_button_text, a.fb_button_simple_rtl:hover .fb_button_text, .fb_button_simple:hover .fb_button_text, .fb_button_simple_rtl:hover .fb_button_text{text-decoration:underline} .fb_button, .fb_button_rtl{background:#29447e url(http://static.ak.fbcdn.net/rsrc.php/v1/yL/r/FGFbc80dUKj.png);background-repeat:no-repeat;cursor:pointer;display:inline-block;padding:0 0 0 1px;text-decoration:none;outline:none} .fb_button .fb_button_text, .fb_button_rtl .fb_button_text{background:#5f78ab url(http://static.ak.fbcdn.net/rsrc.php/v1/yL/r/FGFbc80dUKj.png);border-top:solid 1px #879ac0;border-bottom:solid 1px #1a356e;color:#fff;display:block;font-family:"lucida grande",tahoma,verdana,arial,sans-serif;font-weight:bold;padding:2px 6px 3px 6px;margin:1px 1px 0 21px;text-shadow:none} a.fb_button, a.fb_button_rtl, .fb_button, .fb_button_rtl{text-decoration:none} a.fb_button:active .fb_button_text, a.fb_button_rtl:active .fb_button_text, .fb_button:active .fb_button_text, .fb_button_rtl:active .fb_button_text{border-bottom:solid 1px #29447e;border-top:solid 1px #45619d;background:#4f6aa3;text-shadow:none} .fb_button_xlarge, .fb_button_xlarge_rtl{background-position:left -60px;font-size: 24px;line-height:30px} .fb_button_xlarge .fb_button_text{padding:3px 8px 3px 12px;margin-left:38px} a.fb_button_xlarge:active{background-position:left -99px} .fb_button_xlarge_rtl{background-position:right -268px} .fb_button_xlarge_rtl .fb_button_text{padding:3px 8px 3px 12px;margin-right:39px} a.fb_button_xlarge_rtl:active{background-position:right -307px} .fb_button_large, .fb_button_large_rtl{background-position:left -138px;font-size: 13px;line-height:16px} .fb_button_large .fb_button_text{margin-left:24px;padding:2px 6px 4px 6px} a.fb_button_large:active{background-position:left -163px} .fb_button_large_rtl{background-position:right -346px} .fb_button_large_rtl .fb_button_text{margin-right:25px} a.fb_button_large_rtl:active{background-position:right -371px} .fb_button_medium, .fb_button_medium_rtl{background-position:left -188px;font-size: 11px;line-height:14px} a.fb_button_medium:active{background-position:left -210px} .fb_button_medium_rtl{background-position:right -396px} .fb_button_text_rtl, .fb_button_medium_rtl .fb_button_text{padding:2px 6px 3px 6px;margin-right:22px} a.fb_button_medium_rtl:active{background-position:right -418px} .fb_button_small, .fb_button_small_rtl{background-position:left -232px;font-size: 10px;line-height:10px} .fb_button_small .fb_button_text{padding:2px 6px 3px;margin-left:17px} a.fb_button_small:active, .fb_button_small:active{background-position:left -250px} .fb_button_small_rtl{background-position:right -440px} .fb_button_small_rtl .fb_button_text{padding:2px 6px;margin-right:18px} a.fb_button_small_rtl:active{background-position:right -458px} #bootloader_mFuKk { height: 42px; } ------------vz8vre3LOsirGgAqCZo2LA Content-Disposition: inline; filename=Lp_Ns2NjfvH.js Content-Type: application/x-javascript; charset=utf-8; name=Lp_Ns2NjfvH.js Content-Location: http://static.ak.fbcdn.net/rsrc.php/v1/yD/r/Lp_Ns2NjfvH.js Content-Transfer-Encoding: Base64 LyoxMzI0MjcwMjg4LDE3NjgzMjY5NSovCgppZiAod2luZG93LkNhdmFscnlMb2dn ZXIpIHsgQ2F2YWxyeUxvZ2dlci5zdGFydF9qcyhbInBRMjdcLyJdKTsgfQoKZnVu Y3Rpb24gaW5jb3Jwb3JhdGVfZnJhZ21lbnQoYSl7dmFyIGM9L14oPzooPzpbXjpc Lz8jXSspOik/KD86XC9cLyg/OlteXC8/I10qKSk/KFtePyNdKikoPzpcPyhbXiNd KikpPyg/OiMoLiopKT8vO3ZhciBiPScnO2EuaHJlZi5yZXBsYWNlKGMsZnVuY3Rp b24oZCxnLGgsZil7dmFyIGUsaTtlPWk9ZysoaD8nPycraDonJyk7aWYoZil7Zj1m LnJlcGxhY2UoL14oIXwlMjEpLywnJyk7aWYoZi5jaGFyQXQoMCk9PScvJyllPWYu cmVwbGFjZSgvXlwvKy8sJy8nKTt9aWYoZSE9aSl7aWYod2luZG93Ll9zY3JpcHRf cGF0aClkb2N1bWVudC5jb29raWU9InJkaXI9Iit3aW5kb3cuX3NjcmlwdF9wYXRo KyI7IHBhdGg9LzsgZG9tYWluPSIrd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLnJl cGxhY2UoL14uKihcLmZhY2Vib29rXC4uKikkL2ksJyQxJyk7d2luZG93LmxvY2F0 aW9uLnJlcGxhY2UoYitlKTt9fSk7fWlmKHdpbmRvdy5faW5jb3Jwb3JhdGVfZnJh Z21lbnQpaW5jb3Jwb3JhdGVfZnJhZ21lbnQod2luZG93LmxvY2F0aW9uKTsKd2lu ZG93Ll9fREVWX189d2luZG93Ll9fREVWX198fDA7aWYoIXdpbmRvdy5za2lwRG9t YWluTG93ZXImJmRvY3VtZW50LmRvbWFpbi50b0xvd2VyQ2FzZSgpLm1hdGNoKC8o XnxcLilmYWNlYm9va1wuLiovKSlkb2N1bWVudC5kb21haW49d2luZG93LmxvY2F0 aW9uLmhvc3RuYW1lLnJlcGxhY2UoL14uKihmYWNlYm9va1wuLiopJC9pLCckMScp O2Z1bmN0aW9uIGJhZ29maG9sZGluZygpe31mdW5jdGlvbiBiYWdvZihhKXtyZXR1 cm4gZnVuY3Rpb24oKXtyZXR1cm4gYTt9O31pZighRGF0ZS5ub3cpRGF0ZS5ub3c9 ZnVuY3Rpb24gbm93KCl7cmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpO307aWYo IUFycmF5LmlzQXJyYXkpQXJyYXkuaXNBcnJheT1mdW5jdGlvbihhKXtyZXR1cm4g T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpPT0nW29iamVjdCBBcnJh eV0nO307RW52PXdpbmRvdy5FbnZ8fHt9O0Vudi5zdGFydD1FbnYuc3RhcnR8fERh dGUubm93KCk7ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTmFtZT1kb2N1 bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NOYW1lLnJlcGxhY2UoJ25vX2pzJywn Jyk7CndpbmRvdy5yZXF1aXJlfHwoZnVuY3Rpb24oKXt2YXIgej17fSx3PXt9LG49 MCx5PXRoaXMsaT0xLGw9MixqPSdzcGVjaWFsJyxkPSdleHBvcnRzJyxjPSdkZXBl bmRlbmNpZXMnLGc9J21vZHVsZScsbT0nd2FpdGluZycsZT0nZmFjdG9yeScsaz11 bmRlZmluZWQsYj0nZGVmaW5lJyxmPSdnbG9iYWwnLGg9J3JlcXVpcmUnLGE9J2Nv bnRleHQnO2Z1bmN0aW9uIHphKHppKXt2YXIgems9elt6aV0semQsemg7aWYoemtb bV0mJnprW2pdJmwpcSgpO2lmKCF6a1tkXSl7dmFyIHpmPXprW2RdPXt9LHpnPXpr W2VdO2lmKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh6Zyk9PT0nW29i amVjdCBGdW5jdGlvbl0nKXt2YXIgemM9W10semU9emtbY10semo9emUubGVuZ3Ro O2lmKHprW2pdJmwpemo9TWF0aC5taW4oemosemcubGVuZ3RoKTtmb3Ioemg9MDt6 aDx6ajt6aCsrKXt6ZD16ZVt6aF07emMucHVzaCh6ZD09PWc/ems6KHpkPT09ZD96 Zjp6YSh6ZCkpKTt9dmFyIHpsPXpnLmFwcGx5KHprW2FdfHx5LHpjKTtpZih6bCl6 a1tkXT16bDt9ZWxzZSB6a1tkXT16Zzt9cmV0dXJuIHprW2RdO31mdW5jdGlvbiB1 KHpnLHplLHpmLHpkLHpjKXtpZih6ZT09PWspe3plPVtdO3pmPXpnO3pnPXMoKTt9 ZWxzZSBpZih6Zj09PWspe3pmPXplO3plPXpnO3pnPXMoKTt9aWYoelt6Z10pcmV0 dXJuO3ZhciB6aD17aWQ6emd9O3poW2VdPXpmO3poW2NdPXplO3poW2FdPXpjO3po W2pdPXpkO3pbemddPXpoO28oemcpO31mdW5jdGlvbiB4KHpkLHplLHpjKXt1KHpk LHplLGssaSx6Yyk7fWZ1bmN0aW9uIHEoKXt2YXIgemQ9e30semM7Zm9yKHpjIGlu IHcpaWYoelt6Y10mJiF6ZFt6Y10mJnpbemNdW2pdJmwpcih7fSx6Yyx6ZCk7fWZ1 bmN0aW9uIHIoemYsemMsemcpe3pnW3pjXT0xO3ZhciB6ZT13W3pjXSx6ZDtpZigh emUpcmV0dXJuO3pmW3pjXT0xO2Zvcih6ZCBpbiB6ZSl7aWYoIXpbemRdW2pdJmwp Y29udGludWU7aWYoemZbemRdKXtkZWxldGUgemVbemRdO3pbemRdW21dLS07aWYo IXpbemRdW21dKXQoemQpO31lbHNlIHIoemYsemQsemcpO316Zlt6Y109MDt9ZnVu Y3Rpb24gcygpe3JldHVybiAnX19tb2RfXycrbisrO31mdW5jdGlvbiBvKHplKXt2 YXIgemY9elt6ZV07dmFyIHpnPTA7Zm9yKHZhciB6ZD0wO3pkPHpmW2NdLmxlbmd0 aDt6ZCsrKXt2YXIgemM9emZbY11bemRdO2lmKCF6W3pjXXx8elt6Y11bbV0pe3db emNdfHwod1t6Y109e30pO3dbemNdW3plXT0xO3pnKys7fX16ZlttXT16ZztpZigh emcpdCh6ZSk7fWZ1bmN0aW9uIHQoemQpe3ZhciB6ZT16W3pkXTtpZih6ZVtqXSZp KXphKHpkKTt2YXIgemY9d1t6ZF07aWYoemYpe2RlbGV0ZSB3W3pkXTtmb3IodmFy IHpjIGluIHpmKWlmKCEtLXpbemNdW21dKXQoemMpO319ZnVuY3Rpb24gcCh6ZCx6 Yyl7elt6ZF09e2lkOnpkfTt6W3pkXVtkXT16Yzt9cChnLDApO3AoZCwwKTtwKGIs dSk7cChmLHkpO3AoaCx6YSk7dS5hbWQ9e307eVtiXT11O3lbaF09emE7emEuZW5z dXJlPXg7dmFyIHpiPWZhbHNlO3ZhciB2PWZ1bmN0aW9uKHpmLHpkLHplLHpjKXt1 KHpmLHpkLHplLHpjfHxsKTtpZih6W3pmXVttXSYmIXpiKXpiPXNldFRpbWVvdXQo ZnVuY3Rpb24oKXtxKCk7emI9ZmFsc2U7fSw5KTt9O3kuX19kPWZ1bmN0aW9uKHpm LHpkLHplLHpjKXt6ZD1bZixnLGgsZF0uY29uY2F0KHpkKTt2KHpmLHpkLHplLHpj KTt9O3kuX19lPWZ1bmN0aW9uKHpmLHpkLHplLHpjKXt6ZD1bZixoLGcsZF0uY29u Y2F0KHpkKTt2KHpmLHpkLHplLHpjKTt9O30pKCk7Cl9fZSgiaGFzQXJyYXlOYXR1 cmUiLFtdLGZ1bmN0aW9uKGIsZSxkLGEpe2Z1bmN0aW9uIGMoZil7cmV0dXJuICgh IWYmJih0eXBlb2YgZj09J29iamVjdCd8fHR5cGVvZiBmPT0nZnVuY3Rpb24nKSYm KCdsZW5ndGgnIGluIGYpJiYhKCdzZXRJbnRlcnZhbCcgaW4gZikmJihPYmplY3Qu cHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZik9PT0iW29iamVjdCBBcnJheV0ifHwo J2NhbGxlZScgaW4gZil8fCgnaXRlbScgaW4gZikpKTt9ZC5leHBvcnRzPWM7fSk7 Cl9fZSgiQXJyYXlVdGlscyIsWyJoYXNBcnJheU5hdHVyZSIsIkFycmF5VXRpbHMi XSxmdW5jdGlvbihjLGYsZSxiKXt2YXIgZD1mKCJoYXNBcnJheU5hdHVyZSIpO3Zh ciBhPXtjcmVhdGVGcm9tOmZ1bmN0aW9uKGgpe2lmKCFkKGgpKXJldHVybiBbaF07 aWYoaC5pdGVtKXt2YXIgZz1oLmxlbmd0aCxpPW5ldyBBcnJheShnKTt3aGlsZShn LS0paVtnXT1oW2ddO3JldHVybiBpO31yZXR1cm4gQXJyYXkucHJvdG90eXBlLnNs aWNlLmNhbGwoaCk7fX07ZS5leHBvcnRzPWE7fSk7Cl9fZSgiY29weVByb3BlcnRp ZXMiLFtdLGZ1bmN0aW9uKGMsZSxkLGIpe2Z1bmN0aW9uIGEoZyxoKXtnPWd8fHt9 O2g9aHx8e307Zm9yKHZhciBmIGluIGgpZ1tmXT1oW2ZdO2lmKGguaGFzT3duUHJv cGVydHkmJmguaGFzT3duUHJvcGVydHkoJ3RvU3RyaW5nJykmJih0eXBlb2YgaC50 b1N0cmluZyE9J3VuZGVmaW5lZCcpJiYoZy50b1N0cmluZyE9PWgudG9TdHJpbmcp KWcudG9TdHJpbmc9aC50b1N0cmluZztyZXR1cm4gZzt9ZC5leHBvcnRzPWE7fSk7 Cl9fZSgidXRpbCIsW10sZnVuY3Rpb24oYixkLGMsYSl7aWYodHlwZW9mIGNvbnNv bGU9PSd1bmRlZmluZWQnKWIuY29uc29sZT17bG9nOmJhZ29maG9sZGluZyxpbmZv OmJhZ29maG9sZGluZyx3YXJuOmJhZ29maG9sZGluZyxkZWJ1ZzpiYWdvZmhvbGRp bmcsZGlyOmJhZ29maG9sZGluZyxlcnJvcjpiYWdvZmhvbGRpbmd9O2IuVXRpbD1j LmV4cG9ydHM9Yi5jb25zb2xlO30sMyk7Cl9fZSgiYXJiaXRlciIsWyJBcnJheVV0 aWxzIiwiY29weVByb3BlcnRpZXMiLCJoYXNBcnJheU5hdHVyZSIsInV0aWwiXSxm dW5jdGlvbihnLGosaSxmKXt2YXIgYj1qKCdBcnJheVV0aWxzJyk7dmFyIGU9aign Y29weVByb3BlcnRpZXMnKTt2YXIgaD1qKCdoYXNBcnJheU5hdHVyZScpO3ZhciBj PWooJ3V0aWwnKTt2YXIgZD1udWxsO2Z1bmN0aW9uIGsobCl7ZD1sO31pZighd2lu ZG93LmFzeW5jX2NhbGxiYWNrKXdpbmRvdy5hc3luY19jYWxsYmFjaz1mdW5jdGlv bihsLG0pe3JldHVybiBsO307ZnVuY3Rpb24gYSgpe2UodGhpcyx7X2xpc3RlbmVy czpbXSxfZXZlbnRzOnt9LF9jYWxsYmFja3M6e30sX2xhc3RfaWQ6MSxfbGlzdGVu Ont9LF9pbmRleDp7fX0pO2UodGhpcyxhKTtkZWxldGUgdGhpcy5zZXRFcnJvckhh bmRsZXI7fWUoYSx7U1VCU0NSSUJFX05FVzonbmV3JyxTVUJTQ1JJQkVfQUxMOidh bGwnLEJFSEFWSU9SX0VWRU5UOidldmVudCcsQkVIQVZJT1JfUEVSU0lTVEVOVDon cGVyc2lzdGVudCcsQkVIQVZJT1JfU1RBVEU6J3N0YXRlJyxMSVZFTUVTU0FHRTon bGl2ZW1lc3NhZ2UnLEJPT1RMT0FEOidib290bG9hZCcsRlVOQ1RJT05fRVhURU5T SU9OOidmdW5jdGlvbl9leHQnLHNldEVycm9ySGFuZGxlcjprLHN1YnNjcmliZTpm dW5jdGlvbih2LG0sdCl7aWYoIXZ8fHYubGVuZ3RoPT0wKXJldHVybiBudWxsO3Y9 Yi5jcmVhdGVGcm9tKHYpO3ZhciBsPWEuX2dldEluc3RhbmNlKHRoaXMpO2wuX2xp c3RlbmVycy5wdXNoKHtjYWxsYmFjazptLHR5cGVzOnZ9KTt2YXIgcz1sLl9saXN0 ZW5lcnMubGVuZ3RoLTE7Zm9yKHZhciBvPTA7bzx2Lmxlbmd0aDtvKyspaWYobC5f aW5kZXhbdltvXV0pe2wuX2luZGV4W3Zbb11dLnB1c2gocyk7fWVsc2UgbC5faW5k ZXhbdltvXV09W3NdO3Q9dHx8YS5TVUJTQ1JJQkVfQUxMO2lmKHQ9PWEuU1VCU0NS SUJFX0FMTCl7dmFyIG4sdSxyO2Zvcih2YXIgcD0wO3A8di5sZW5ndGg7cCsrKXt1 PXZbcF07aWYodSBpbiBsLl9ldmVudHMpZm9yKHZhciBxPTA7cTxsLl9ldmVudHNb dV0ubGVuZ3RoO3ErKyl7bj1sLl9ldmVudHNbdV1bcV07cj1tLmFwcGx5KG51bGws W3Usbl0pO2lmKHI9PT1mYWxzZSl7bC5fZXZlbnRzW3VdLnNwbGljZShxLDEpO3Et LTt9fX19cmV0dXJuIHtzdWJzY3JpYmVySUQ6c307fSx1bnN1YnNjcmliZTpmdW5j dGlvbihwKXt2YXIgbD1hLl9nZXRJbnN0YW5jZSh0aGlzKTt2YXIgbj1sLl9saXN0 ZW5lcnNbcC5zdWJzY3JpYmVySURdO2lmKCFuKXJldHVybjtmb3IodmFyIG89MDtv PG4udHlwZXMubGVuZ3RoO28rKyl7dmFyIHE9bi50eXBlc1tvXTtpZihsLl9pbmRl eFtxXSlmb3IodmFyIG09MDttPGwuX2luZGV4W3FdLmxlbmd0aDttKyspaWYobC5f aW5kZXhbcV1bbV09PXAuc3Vic2NyaWJlcklEKXtsLl9pbmRleFtxXS5zcGxpY2Uo bSwxKTtpZihsLl9pbmRleFtxXS5sZW5ndGg9PTApZGVsZXRlIGwuX2luZGV4W3Fd O2JyZWFrO319ZGVsZXRlIGwuX2xpc3RlbmVyc1twLnN1YnNjcmliZXJJRF07fSxp bmZvcm06ZnVuY3Rpb24oeCxuLG0pe3ZhciB5PWgoeCk7eD1iLmNyZWF0ZUZyb20o eCk7dmFyIGw9YS5fZ2V0SW5zdGFuY2UodGhpcyk7dmFyIHU9e307bT1tfHxhLkJF SEFWSU9SX0VWRU5UO2Zvcih2YXIgcT0wO3E8eC5sZW5ndGg7cSsrKXt2YXIgdj14 W3FdLHA9bnVsbDtpZihtPT1hLkJFSEFWSU9SX1BFUlNJU1RFTlQpe3A9bC5fZXZl bnRzLmxlbmd0aDtpZighKHYgaW4gbC5fZXZlbnRzKSlsLl9ldmVudHNbdl09W107 bC5fZXZlbnRzW3ZdLnB1c2gobik7bC5fZXZlbnRzW3ZdLl9zdGF0ZWZ1bD1mYWxz ZTt9ZWxzZSBpZihtPT1hLkJFSEFWSU9SX1NUQVRFKXtwPTA7bC5fZXZlbnRzW3Zd PVtuXTtsLl9ldmVudHNbdl0uX3N0YXRlZnVsPXRydWU7fWVsc2UgaWYodiBpbiBs Ll9ldmVudHMpbC5fZXZlbnRzW3ZdLl9zdGF0ZWZ1bD1mYWxzZTt3aW5kb3cuQXJi aXRlck1vbml0b3ImJkFyYml0ZXJNb25pdG9yLnJlY29yZCgnZXZlbnQnLHYsbixs KTt2YXIgdDtpZihsLl9pbmRleFt2XSl7dmFyIHc9Yi5jcmVhdGVGcm9tKGwuX2lu ZGV4W3ZdKTtmb3IodmFyIHI9MDtyPHcubGVuZ3RoO3IrKyl7dmFyIHM9bC5fbGlz dGVuZXJzW3dbcl1dO2lmKHMpe3RyeXt0PXMuY2FsbGJhY2suYXBwbHkobnVsbCxb dixuXSk7fWNhdGNoKG8pe2lmKGQpZChvKTt9aWYodD09PWZhbHNlKXtpZihwIT09 bnVsbClsLl9ldmVudHNbdl0uc3BsaWNlKHAsMSk7YnJlYWs7fX19fWwuX3VwZGF0 ZUNhbGxiYWNrcyh2LG4pO3dpbmRvdy5BcmJpdGVyTW9uaXRvciYmQXJiaXRlck1v bml0b3IucmVjb3JkKCdkb25lJyx2LG4sbCk7dVt2XT10O31yZXR1cm4geT91OnVb eFswXV07fSxxdWVyeTpmdW5jdGlvbihtKXt2YXIgbD1hLl9nZXRJbnN0YW5jZSh0 aGlzKTtpZighKG0gaW4gbC5fZXZlbnRzKSlyZXR1cm4gbnVsbDtpZihsLl9ldmVu dHNbbV0ubGVuZ3RoKXJldHVybiBsLl9ldmVudHNbbV1bMF07cmV0dXJuIG51bGw7 fSxfaW5zdGFuY2U6bnVsbCxfZ2V0SW5zdGFuY2U6ZnVuY3Rpb24obCl7aWYobCBp bnN0YW5jZW9mIGEpcmV0dXJuIGw7aWYoIWEuX2luc3RhbmNlKWEuX2luc3RhbmNl PW5ldyBhKCk7cmV0dXJuIGEuX2luc3RhbmNlO30scmVnaXN0ZXJDYWxsYmFjazpm dW5jdGlvbihtLG8pe3ZhciBzLG49MCxsPWEuX2dldEluc3RhbmNlKHRoaXMpLHI9 ZmFsc2U7aWYodHlwZW9mIG09PSdmdW5jdGlvbicpe3M9bC5fbGFzdF9pZDtsLl9s YXN0X2lkKys7cj10cnVlO31lbHNle2lmKCFsLl9jYWxsYmFja3NbbV0pcmV0dXJu IG51bGw7cz1tO31pZihoKG8pKXt2YXIgdD17fTtmb3IodmFyIHE9MDtxPG8ubGVu Z3RoO3ErKyl0W29bcV1dPTE7bz10O31mb3IodmFyIHUgaW4gbyl7dHJ5e2lmKGwu cXVlcnkodSkpY29udGludWU7fWNhdGNoKHApe31uKz1vW3VdO2lmKGwuX2xpc3Rl blt1XT09PXVuZGVmaW5lZClsLl9saXN0ZW5bdV09e307bC5fbGlzdGVuW3VdW3Nd PShsLl9saXN0ZW5bdV1bc118fDApK29bdV07fWlmKG49PTAmJnIpe20oKTtyZXR1 cm4gbnVsbDt9aWYoIXIpe2wuX2NhbGxiYWNrc1tzXS5kZXBudW0rPW47fWVsc2Ug bC5fY2FsbGJhY2tzW3NdPXtjYWxsYmFjazphc3luY19jYWxsYmFjayhtLCdhcmJp dGVyJyksZGVwbnVtOm59O3JldHVybiBzO30sX3VwZGF0ZUNhbGxiYWNrczpmdW5j dGlvbihvLG4pe2lmKG49PT1udWxsfHwhdGhpcy5fbGlzdGVuW29dKXJldHVybjtm b3IodmFyIG0gaW4gdGhpcy5fbGlzdGVuW29dKXt0aGlzLl9saXN0ZW5bb11bbV0t LTtpZih0aGlzLl9saXN0ZW5bb11bbV08PTApZGVsZXRlIHRoaXMuX2xpc3Rlbltv XVttXTt0aGlzLl9jYWxsYmFja3NbbV0uZGVwbnVtLS07aWYodGhpcy5fY2FsbGJh Y2tzW21dLmRlcG51bTw9MCl7dmFyIGw9dGhpcy5fY2FsbGJhY2tzW21dLmNhbGxi YWNrO2RlbGV0ZSB0aGlzLl9jYWxsYmFja3NbbV07bCgpO319fX0pO2cuQXJiaXRl cj1pLmV4cG9ydHM9YTt9LDMpOwpfX2UoImlzRW1wdHkiLFtdLGZ1bmN0aW9uKGIs ZSxkLGEpe2Z1bmN0aW9uIGMoZyl7aWYoZyBpbnN0YW5jZW9mIEFycmF5KXtyZXR1 cm4gZy5sZW5ndGg9PT0wO31lbHNlIGlmKGcgaW5zdGFuY2VvZiBPYmplY3Qpe2Zv cih2YXIgZiBpbiBnKXJldHVybiBmYWxzZTtyZXR1cm4gdHJ1ZTt9ZWxzZSByZXR1 cm4gIWc7fWQuZXhwb3J0cz1jO30pOwpfX2UoImJvb3Rsb2FkZXIiLFsiQXJyYXlV dGlscyIsImFyYml0ZXIiLCJ1dGlsIiwiaXNFbXB0eSJdLGZ1bmN0aW9uKHgsemEs eix3KXt2YXIgYj16YSgnQXJyYXlVdGlscycpO3ZhciBhPXphKCdhcmJpdGVyJyk7 dmFyIGQ9emEoJ3V0aWwnKTt2YXIgeT16YSgnaXNFbXB0eScpO3ZhciBmPXt9O3Zh ciBrPW51bGw7dmFyIHA9e307dmFyIG49e307dmFyIGg9e307dmFyIGk9e307dmFy IHQ9W107dmFyIGw9bnVsbDt2YXIgcT17fTt2YXIgaj17fTt2YXIgZz1mYWxzZTt2 YXIgdj1bXTt2YXIgZT01MDAwO2Z1bmN0aW9uIG8oemssemgsemYsemMpe2lmKHpr PT0nanMnKXt2YXIgemc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7 emcuc3JjPXpoO3pnLnR5cGU9J3RleHQvamF2YXNjcmlwdCc7emcuYXN5bmM9dHJ1 ZTt2YXIgemI9ZnVuY3Rpb24oKXtjLmRvbmUoW3pmXSk7fTt6Zy5vbmxvYWQ9emcu b25lcnJvcj16Yjt6Zy5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtpZih0 aGlzLnJlYWR5U3RhdGUgaW4ge2xvYWRlZDoxLGNvbXBsZXRlOjF9KXpiKCk7fTt6 Yy5hcHBlbmRDaGlsZCh6Zyk7fWVsc2UgaWYoems9PSdjc3MnKXtpZihkb2N1bWVu dC5jcmVhdGVTdHlsZVNoZWV0KXt2YXIgemk9dCx6aj0tMTtmb3IodmFyIHpkPTA7 emQ8emkubGVuZ3RoO3pkKyspaWYoemlbemRdLmltcG9ydHMubGVuZ3RoPDI1KXt6 aj16ZDticmVhazt9aWYoemo9PS0xKXt6aS5wdXNoKGRvY3VtZW50LmNyZWF0ZVN0 eWxlU2hlZXQoKSk7emo9emkubGVuZ3RoLTE7fXppW3pqXS5hZGRJbXBvcnQoemgp O2lbemZdPXt0YWdJZHg6emosaHJlZjp6aH07fWVsc2V7dmFyIHplPWRvY3VtZW50 LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTt6ZS5yZWw9InN0eWxlc2hlZXQiO3plLnR5 cGU9InRleHQvY3NzIjt6ZS5tZWRpYT0iYWxsIjt6ZS5ocmVmPXpoO2lbemZdPXts aW5rOnplfTt6Yy5hcHBlbmRDaGlsZCh6ZSk7fXMoemYpO319ZnVuY3Rpb24gcigp e3ZhciB6ZTt2YXIgemI9W107dmFyIHpmPURhdGUubm93KCk7aWYoemY+PWspe2Zv cih6ZSBpbiBmKXpiLnB1c2goemUpO2lmKHdpbmRvdy5sb2dKU0Vycm9yKWlmKE1h dGgucmFuZG9tKCk8LjAxKWxvZ0pTRXJyb3IoJ2Jvb3Rsb2FkZXInLHtlcnJvcjon Q1NTIHRpbWVvdXQnLGV4dHJhOntuYW1lOnpiLmpvaW4oJywnKX19KTt9ZWxzZSBm b3IoemUgaW4gZil7dmFyIHpnPWZbemVdO3ZhciB6aD13aW5kb3cuZ2V0Q29tcHV0 ZWRTdHlsZT93aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh6ZyxudWxsKTp6Zy5jdXJy ZW50U3R5bGU7aWYoemgmJnBhcnNlSW50KHpoLmhlaWdodCwxMCk+MSl6Yi5wdXNo KHplKTt9aWYoIXkoemIpKXtmb3IodmFyIHpkPTA7emQ8emIubGVuZ3RoO3pkKysp e3ZhciB6Yz1mW3piW3pkXV07emMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh6Yyk7 ZGVsZXRlIGZbemJbemRdXTt9az16ZitlO2MuZG9uZSh6Yix0cnVlKTt9cmV0dXJu IHkoZik7fWZ1bmN0aW9uIHMoemQpe3ZhciB6Yj0nYm9vdGxvYWRlcl8nK3pkLnJl cGxhY2UoL1teYS16MC05XS9pZywnXycpO3ZhciB6ZT1kb2N1bWVudC5jcmVhdGVF bGVtZW50KCdtZXRhJyk7emUuaWQ9emI7Yy5nZXRIYXJkcG9pbnQoKS5hcHBlbmRD aGlsZCh6ZSk7az1EYXRlLm5vdygpK2U7dmFyIHpmPXkoZik7Zlt6ZF09emU7aWYo emYpdmFyIHpjPXNldEludGVydmFsKGZ1bmN0aW9uIF9wb2xsKCl7aWYocigpKXpj JiZjbGVhckludGVydmFsKHpjKTt9LDIwLGZhbHNlKTt9ZnVuY3Rpb24gdSh6ZSl7 aWYoemUgaW4gaSl7dmFyIHpjPWlbemVdLHpkPXpjLmxpbms7aWYoemQpe3pkLnBh cmVudE5vZGUucmVtb3ZlQ2hpbGQoemQpO31lbHNle3ZhciB6Zj10W3pjLnRhZ0lk eF07Zm9yKHZhciB6Yj0wO3piPHpmLmltcG9ydHMubGVuZ3RoO3piKyspaWYoemYu aW1wb3J0c1t6Yl0uaHJlZj09emMuaHJlZil7emYucmVtb3ZlSW1wb3J0KHpiKTti cmVhazt9fWRlbGV0ZSBpW3plXTtkZWxldGUgcFt6ZV07YS5pbmZvcm0oYS5CT09U TE9BRCsnLycremUsbnVsbCxhLkJFSEFWSU9SX1NUQVRFKTt9fWZ1bmN0aW9uIG0o emQsemIpe2lmKCFnKXt2LnB1c2goW3pkLHpiXSk7cmV0dXJuO316ZD1iLmNyZWF0 ZUZyb20oemQpO3ZhciB6Zz1bXTtmb3IodmFyIHplPTA7emU8emQubGVuZ3RoOysr emUpe2lmKCF6ZFt6ZV0pY29udGludWU7dmFyIHpjPWhbemRbemVdXTtpZighIXpj KWZvcih2YXIgemY9MDt6Zjx6Yy5sZW5ndGg7Kyt6Zil6Zy5wdXNoKHpjW3pmXSk7 fWMubG9hZFJlc291cmNlcyh6Zyx6Yik7fXZhciBjPXtjb25maWd1cmVQYWdlOmZ1 bmN0aW9uKHpiKXt2YXIgemg9e307dmFyIHpnPWMucmVzb2x2ZVJlc291cmNlcyh6 Yik7dmFyIHpjO2Zvcih6Yz0wO3pjPHpnLmxlbmd0aDt6YysrKXt6aFt6Z1t6Y10u c3JjXT16Z1t6Y107Yy5yZXF1ZXN0ZWQoemdbemNdLm5hbWUpO3MoemdbemNdLm5h bWUpO312YXIgemU9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2xpbmsn KTtmb3IoemM9MDt6Yzx6ZS5sZW5ndGg7Kyt6Yyl7aWYoemVbemNdLnJlbCE9J3N0 eWxlc2hlZXQnKWNvbnRpbnVlO2Zvcih2YXIgemQgaW4gemgpaWYoemVbemNdLmhy ZWYuaW5kZXhPZih6ZCkhPT0tMSl7dmFyIHpmPXpoW3pkXS5uYW1lO2lbemZdPXts aW5rOnplW3pjXX07aWYoemhbemRdLnBlcm1hbmVudCluW3pmXT10cnVlO2RlbGV0 ZSB6aFt6ZF07YnJlYWs7fX19LGxvYWRNb2R1bGVzOmZ1bmN0aW9uKHpjLHpiKXt6 Yz1iLmNyZWF0ZUZyb20oemMpO20oemMsZnVuY3Rpb24gaW5qZWN0X21vZHVsZV9j YWxsYmFjaygpe3ZhciB6ZT1bXTtmb3IodmFyIHpkPTA7emQ8emMubGVuZ3RoO3pk KyspemUucHVzaCh6YSh6Y1t6ZF0pKTt6Yi5hcHBseSh0aGlzLHplKTt9KTt9LGxv YWRDb21wb25lbnRzOmZ1bmN0aW9uKHpjLHpiKXttKHpjLHpiKTt9LGxvYWRSZXNv dXJjZXM6ZnVuY3Rpb24oemssemMsemosem4pe3ZhciB6Zjt6az1jLnJlc29sdmVS ZXNvdXJjZXMoYi5jcmVhdGVGcm9tKHprKSk7aWYoemope3ZhciB6aD17fTtmb3Io emY9MDt6Zjx6ay5sZW5ndGg7Kyt6Zil6aFt6a1t6Zl0ubmFtZV09dHJ1ZTtmb3Io dmFyIHpnIGluIHApaWYoISh6ZyBpbiBuKSYmISh6ZyBpbiB6aCkmJiEoemcgaW4g aikpdSh6Zyk7aj17fTt9dmFyIHpvPVtdO3ZhciB6aT1bXTtmb3IoemY9MDt6Zjx6 ay5sZW5ndGg7Kyt6Zil7dmFyIHpsPXprW3pmXTtpZih6bC5wZXJtYW5lbnQpblt6 bC5uYW1lXT10cnVlO3ZhciB6bT1hLkJPT1RMT0FEKycvJyt6bC5uYW1lO2lmKGEu cXVlcnkoem0pIT09bnVsbCljb250aW51ZTtpZighemwubm9uYmxvY2tpbmcpemku cHVzaCh6bSk7aWYoIXBbemwubmFtZV0pe2MucmVxdWVzdGVkKHpsLm5hbWUpO3pv LnB1c2goemwpO3dpbmRvdy5DYXZhbHJ5TG9nZ2VyJiZDYXZhbHJ5TG9nZ2VyLmdl dEluc3RhbmNlKCkubWVhc3VyZVJlc291cmNlcyh6bCx6bik7fX1pZih6Yyl6Yz1h LnJlZ2lzdGVyQ2FsbGJhY2soemMsemkpO3ZhciB6ZT1kb2N1bWVudC5kb2N1bWVu dE1vZGV8fCsoL01TSUUuKFxkKykvLmV4ZWMobmF2aWdhdG9yLnVzZXJBZ2VudCl8 fFtdKVsxXTt2YXIgemQ9Yy5nZXRIYXJkcG9pbnQoKTt2YXIgemI9emU/emQ6ZG9j dW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO2Zvcih6Zj0wO3pmPHpvLmxl bmd0aDsrK3pmKW8oem9bemZdLnR5cGUsem9bemZdLnNyYyx6b1t6Zl0ubmFtZSx6 Yik7aWYoemQhPT16Yil6ZC5hcHBlbmRDaGlsZCh6Yik7cmV0dXJuIHpjO30scmVx dWVzdFJlc291cmNlOmZ1bmN0aW9uKHplLHpkLHpjKXt2YXIgemI9Yy5nZXRIYXJk cG9pbnQoKTtvKHplLHpkLHpjLHpiKTt9LGRvbmU6ZnVuY3Rpb24oemYsemMpe2Mu cmVxdWVzdGVkKHpmKTtpZighemMpe3ZhciB6ZT17c2VuZGVyOnRoaXN9O2EuaW5m b3JtKGEuQk9PVExPQUQsemUsYS5CRUhBVklPUl9FVkVOVCk7fWZvcih2YXIgemI9 MDt6Yjx6Zi5sZW5ndGg7Kyt6Yil7dmFyIHpkPXpmW3piXTthLmluZm9ybShhLkJP T1RMT0FEKycvJyt6ZCx0cnVlLGEuQkVIQVZJT1JfU1RBVEUpO319LHJlcXVlc3Rl ZDpmdW5jdGlvbih6Yyl7emM9Yi5jcmVhdGVGcm9tKHpjKTtmb3IodmFyIHpiPTA7 emI8emMubGVuZ3RoOysremIpcFt6Y1t6Yl1dPXRydWU7fSxlbmFibGVCb290bG9h ZDpmdW5jdGlvbih6Yyl7Zm9yKHZhciB6ZCBpbiB6YylpZighaFt6ZF0paFt6ZF09 emNbemRdO2lmKCFnKXtnPXRydWU7Zm9yKHZhciB6Yj0wO3piPHYubGVuZ3RoO3pi KyspYy5sb2FkQ29tcG9uZW50cy5hcHBseShudWxsLHZbemJdKTt2PVtdO319LGdl dEhhcmRwb2ludDpmdW5jdGlvbigpe2lmKCFsKXt2YXIgemI9ZG9jdW1lbnQuZ2V0 RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKTtsPXpiLmxlbmd0aCYmemJbMF18fGRv Y3VtZW50LmJvZHk7fXJldHVybiBsO30sc2V0UmVzb3VyY2VNYXA6ZnVuY3Rpb24o emMpe2lmKCF6YylyZXR1cm47Zm9yKHZhciB6YiBpbiB6Yyl7aWYoIXpjW3piXS5u YW1lKXpjW3piXS5uYW1lPXpiO3FbemJdPXpjW3piXTt9fSxyZXNvbHZlUmVzb3Vy Y2VzOmZ1bmN0aW9uKHpkKXtpZighemQpcmV0dXJuIFtdO3ZhciB6Yz1bXTtmb3Io dmFyIHpiPTA7emI8emQubGVuZ3RoOysremIpaWYodHlwZW9mIHpkW3piXT09J3N0 cmluZycpe2lmKHpkW3piXSBpbiBxKXpjLnB1c2gocVt6ZFt6Yl1dKTt9ZWxzZSB6 Yy5wdXNoKHpkW3piXSk7cmV0dXJuIHpjO30sbG9hZEVhcmx5UmVzb3VyY2VzOmZ1 bmN0aW9uKHpkKXt2YXIgemI7Yy5zZXRSZXNvdXJjZU1hcCh6ZCk7dmFyIHpjPVtd O2Zvcih6YiBpbiB6ZCl6Yy5wdXNoKHFbemJdKTtjLmxvYWRSZXNvdXJjZXMoemMp O2Zvcih6YiBpbiB6ZCl7dmFyIHplPXFbemJdO2lmKCF6ZS5wZXJtYW5lbnQpalt6 ZS5uYW1lXT16ZTt9fSxpc0Rpc3BsYXlKUzpmdW5jdGlvbih6Yil7aWYodHlwZW9m IHpiPT0nc3RyaW5nJyl6Yj1xW3piXTtyZXR1cm4gemIuZGlzcGxheWpzO319O3gu Qm9vdGxvYWRlcj16LmV4cG9ydHM9Yzt9LDMpOwpfX2UoIkVudiIsWyJjb3B5UHJv cGVydGllcyIsIkVudiJdLGZ1bmN0aW9uKGQsZixlLGMpe3ZhciBiPWYoImNvcHlQ cm9wZXJ0aWVzIik7dmFyIGE9e3N0YXJ0OkRhdGUubm93KCl9O2lmKGQuRW52KXti KGEsZC5FbnYpO2QuRW52PXVuZGVmaW5lZDt9ZS5leHBvcnRzPWE7fSk7Cl9fZSgi b25sb2FkIixbImFyYml0ZXIiLCJjb3B5UHJvcGVydGllcyJdLGZ1bmN0aW9uKGws dSxtLGspe3ZhciBhPXUoJ2FyYml0ZXInKTt2YXIgYz1hLkJFSEFWSU9SX1NUQVRF O3ZhciBoPWZ1bmN0aW9uKHYpe3dpbmRvdy5DYXZhbHJ5TG9nZ2VyJiZDYXZhbHJ5 TG9nZ2VyLmdldEluc3RhbmNlKCkuc2V0VGltZVN0YW1wKHYpO307dmFyIGI9e09O TE9BRDonb25sb2FkL29ubG9hZCcsT05MT0FEX0NBTExCQUNLOidvbmxvYWQvb25s b2FkX2NhbGxiYWNrJyxPTkxPQURfRE9NQ09OVEVOVDonb25sb2FkL2RvbV9jb250 ZW50X3JlYWR5JyxPTkxPQURfRE9NQ09OVEVOVF9DQUxMQkFDSzonb25sb2FkL2Rv bWNvbnRlbnRfY2FsbGJhY2snLE9OQkVGT1JFVU5MT0FEOidvbmxvYWQvYmVmb3Jl dW5sb2FkJyxPTlVOTE9BRDonb25sb2FkL3VubG9hZCd9O2Z1bmN0aW9uIGcoKXty ZXR1cm4gIXdpbmRvdy5sb2FkaW5nX3BhZ2VfY2hyb21lO31mdW5jdGlvbiBxKHYp e2lmKHdpbmRvdy5sb2FkZWQmJnR5cGVvZiBfcnVuSG9vayE9J3VuZGVmaW5lZCcp e19ydW5Ib29rKHYsJ29ubGF0ZWxvYWRob29rcycpO31lbHNlIGQoJ29ubG9hZGhv b2tzJyx2KTt9ZnVuY3Rpb24gbih2KXtpZih3aW5kb3cuYWZ0ZXJsb2FkZWQmJnR5 cGVvZiBfcnVuSG9vayE9J3VuZGVmaW5lZCcpe3NldFRpbWVvdXQoZnVuY3Rpb24o KXtfcnVuSG9vayh2LCdvbmxhdGVhZnRlcmxvYWRob29rcycpO30sMCk7fWVsc2Ug ZCgnb25hZnRlcmxvYWRob29rcycsdik7fWZ1bmN0aW9uIG8odix3KXtpZih3PT09 dW5kZWZpbmVkKXc9ZygpO3c/ZCgnb25iZWZvcmVsZWF2ZWhvb2tzJyx2KTpkKCdv bmJlZm9yZXVubG9hZGhvb2tzJyx2KTt9ZnVuY3Rpb24gcyh2KXtpZighd2luZG93 Lm9udW5sb2FkKXdpbmRvdy5vbnVubG9hZD1mdW5jdGlvbigpe2EuaW5mb3JtKGIu T05VTkxPQUQsdHJ1ZSxjKTt9O2QoJ29udW5sb2FkaG9va3MnLHYpO31mdW5jdGlv biBwKHYpe2QoJ29ubGVhdmVob29rcycsdik7fWZ1bmN0aW9uIGQodyx2KXt3aW5k b3dbd109KHdpbmRvd1t3XXx8W10pLmNvbmNhdCh2KTt9ZnVuY3Rpb24gdCh2KXt3 aW5kb3dbdl09W107fWZ1bmN0aW9uIGYoKXthLmluZm9ybShiLk9OTE9BRF9ET01D T05URU5ULHRydWUsYyk7fWZ1bmN0aW9uIGUoKXt2YXIgdj1kb2N1bWVudCx6PXdp bmRvdztpZih2LmFkZEV2ZW50TGlzdGVuZXIpe3ZhciB6YT0vQXBwbGVXZWJLaXQu KFxkKykvLmV4ZWMobmF2aWdhdG9yLnVzZXJBZ2VudCk7aWYoemEmJnphWzFdPDUy NSl7dmFyIHk9c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXtpZigvbG9hZGVkfGNvbXBs ZXRlLy50ZXN0KHYucmVhZHlTdGF0ZSkpe2YoKTtjbGVhckludGVydmFsKHkpO319 LDEwKTt9ZWxzZSB2LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQi LGYsdHJ1ZSk7fWVsc2V7dmFyIHg9J2phdmFzY3JpcHQ6dm9pZCgwKSc7aWYoei5s b2NhdGlvbi5wcm90b2NvbD09J2h0dHBzOicpeD0nLy86Jzt2LndyaXRlKCc8c2Ny aXB0IG9ucmVhZHlzdGF0ZWNoYW5nZT0iaWYgKHRoaXMucmVhZHlTdGF0ZT09XCdj b21wbGV0ZVwnKSB7JysndGhpcy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMp O19kb21jb250ZW50cmVhZHkoKTt9IiAnKydkZWZlcj0iZGVmZXIiIHNyYz0iJyt4 KyciPjxcL3NjcmlwdFw+Jyk7fXZhciB3PXoub25sb2FkO3oub25sb2FkPWZ1bmN0 aW9uKCl7aCgndF9sYXlvdXQnKTt3JiZ3KCk7YS5pbmZvcm0oYi5PTkxPQUQsdHJ1 ZSxjKTt9O3oub25iZWZvcmV1bmxvYWQ9ZnVuY3Rpb24oKXt2YXIgemI9e307YS5p bmZvcm0oYi5PTkJFRk9SRVVOTE9BRCx6YixjKTtpZighemIud2FybilhLmluZm9y bSgnb25sb2FkL2V4aXQnLHRydWUpO3JldHVybiB6Yi53YXJuO307fXZhciByPWEu cmVnaXN0ZXJDYWxsYmFjayhmdW5jdGlvbigpe2goJ3Rfb25sb2FkJyk7YS5pbmZv cm0oYi5PTkxPQURfQ0FMTEJBQ0ssdHJ1ZSxjKTt9LFtiLk9OTE9BRF0pO3ZhciBq PWEucmVnaXN0ZXJDYWxsYmFjayhmdW5jdGlvbigpe2goJ3RfZG9tY29udGVudCcp O2EuaW5mb3JtKGIuT05MT0FEX0RPTUNPTlRFTlRfQ0FMTEJBQ0ssdHJ1ZSxjKTt9 LFtiLk9OTE9BRF9ET01DT05URU5UXSk7aWYoIXdpbmRvdy5fZXZlbnRIYW5kbGVy c0Jvb3RzdHJhcHBlZCl7X2V2ZW50SGFuZGxlcnNCb290c3RyYXBwZWQ9dHJ1ZTtl KCk7fW0uZXhwb3J0cz17RXZlbnQ6YixydW5PbmxvYWQ6cSxydW5BZnRlcmxvYWQ6 bixydW5PbmxlYXZlOnB9O3ZhciBpPXUoJ2NvcHlQcm9wZXJ0aWVzJyk7aShsLHtP bmxvYWRFdmVudDpiLG9ubG9hZFJlZ2lzdGVyOnEsb25hZnRlcmxvYWRSZWdpc3Rl cjpuLG9ubGVhdmVSZWdpc3RlcjpwLG9uYmVmb3JldW5sb2FkUmVnaXN0ZXI6byxv bnVubG9hZFJlZ2lzdGVyOnMsZG9tY29udGVudF9jYWxsYmFjazpqLG9ubG9hZF9j YWxsYmFjazpyLF9kb21jb250ZW50cmVhZHk6ZixyZW1vdmVIb29rOnQsX2FkZEhv b2s6ZH0pO30sMyk7Cl9fZSgiRWFnbGVFeWUiLFsiYXJiaXRlciIsImJvb3Rsb2Fk ZXIiLCJFbnYiLCJvbmxvYWQiLCJ1dGlsIl0sZnVuY3Rpb24obyx2LHMsbil7dmFy IGE9dignYXJiaXRlcicpO3ZhciBjPXYoJ2Jvb3Rsb2FkZXInKTt2YXIgZT12KCdF bnYnKTt2YXIgZj12KCdvbmxvYWQnKTt2YXIgaD12KCd1dGlsJyk7dmFyIHk9J19l Xyc7dmFyIHphPSh3aW5kb3cubmFtZXx8JycpLnRvU3RyaW5nKCk7aWYoemEubGVu Z3RoPT03JiZ6YS5zdWJzdHIoMCwzKT09eSl7emE9emEuc3Vic3RyKDMpO31lbHNl e3phPXdpbmRvdy5fRWFnbGVFeWVTZWVkO2lmKHdpbmRvdz09d2luZG93LnRvcCl3 aW5kb3cubmFtZT15K3dpbmRvdy5fRWFnbGVFeWVTZWVkO312YXIgdz0od2luZG93 LmxvY2F0aW9uLnByb3RvY29sPT0naHR0cHM6JyYmZG9jdW1lbnQuY29va2llLm1h dGNoKC9cYmNzbT0xLykpPyc7IHNlY3VyZSc6Jyc7dmFyIHQ9eSt6YSsnXyc7dmFy IG09bmV3IERhdGUoRGF0ZS5ub3coKSs2MDQ4MDAwMDApLnRvR01UU3RyaW5nKCk7 dmFyIGs9d2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLnJlcGxhY2UoL14uKihmYWNl Ym9va1wuLiopJC9pLCckMScpO3ZhciBsPSc7IGV4cGlyZXM9JyttKyc7cGF0aD0v OyBkb21haW49JytrK3c7dmFyIGo9MDt2YXIgdTt2YXIgej13aW5kb3cuX0VhZ2xl RXllU2Vzc2lvblN0b3JhZ2UmJndpbmRvdy5zZXNzaW9uU3RvcmFnZTt2YXIgcT1k b2N1bWVudC5jb29raWUubGVuZ3RoO3ZhciByPWZhbHNlO3ZhciB4PURhdGUubm93 KCk7ZnVuY3Rpb24gcCh6ZSl7dmFyIHpiPTIxNjYxMzYyNjE7Zm9yKHZhciB6Yz0w LHpkPXplLmxlbmd0aDt6Yzx6ZDsrK3pjKXpiPSh6Yl56ZS5jaGFyQ29kZUF0KHpj KSkqMTY3Nzc2MTk7emIrPXpiPDwxMzt6Yl49emI+Pjc7emIrPXpiPDwzO3piXj16 Yj4+MTc7emIrPXpiPDw1O3JldHVybiAoemJ8MCkrMjE0NzQ4MzY0ODt9ZnVuY3Rp b24gaSh6Yil7cmV0dXJuIHQrKGorKykrJz0nK2VuY29kZVVSSUNvbXBvbmVudCh6 YikrbDt9ZnVuY3Rpb24gYigpe3ZhciB6Yj1bXTt2YXIgemU9ZmFsc2U7dmFyIHpk PTA7dmFyIHpjPTA7dGhpcy5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuICF6Yi5s ZW5ndGg7fTt0aGlzLmVucXVldWU9ZnVuY3Rpb24oemcsemYpe2lmKHpmKXt6Yi51 bnNoaWZ0KHpnKTt9ZWxzZSB6Yi5wdXNoKHpnKTt9O3RoaXMuZGVxdWV1ZT1mdW5j dGlvbigpe3piLnNoaWZ0KCk7fTt0aGlzLnBlZWs9ZnVuY3Rpb24oKXtyZXR1cm4g emJbMF07fTt0aGlzLmNsZWFyPWZ1bmN0aW9uKHpoKXtxPU1hdGgubWluKHEsZG9j dW1lbnQuY29va2llLmxlbmd0aCk7aWYoIXImJihuZXcgRGF0ZSgpLXg+NjAwMDAp KXI9dHJ1ZTt2YXIgemY9IXpoJiYoZG9jdW1lbnQuY29va2llLnNlYXJjaCh5KT49 MCk7dmFyIHpyPSEhZS5jb29raWVfaGVhZGVyX2xpbWl0O3ZhciB6bT1lLmNvb2tp ZV9jb3VudF9saW1pdHx8MTk7dmFyIHpuPWUuY29va2llX2hlYWRlcl9saW1pdHx8 Mzk1MDt2YXIgems9em0tNTt2YXIgemw9em4tMTAwMDt3aGlsZSghdGhpcy5pc0Vt cHR5KCkpe3ZhciB6Zz1pKHRoaXMucGVlaygpKTtpZih6ciYmKHpnLmxlbmd0aD56 bnx8KHImJnpnLmxlbmd0aCtxPnpuKSkpe3RoaXMuZGVxdWV1ZSgpO2NvbnRpbnVl O31pZigoemZ8fHpyKSYmKChkb2N1bWVudC5jb29raWUubGVuZ3RoK3pnLmxlbmd0 aD56bil8fChkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKS5sZW5ndGg+em0pKSli cmVhaztkb2N1bWVudC5jb29raWU9emc7emY9dHJ1ZTt0aGlzLmRlcXVldWUoKTt9 dmFyIHpvPURhdGUubm93KCk7aWYoemh8fCF6ZSYmemYmJigoemM+MCkmJihNYXRo Lm1pbigxMCpNYXRoLnBvdygyLHpjLTEpLDYwMDAwKSt6ZDx6bykpJiZhLnF1ZXJ5 KGYuRXZlbnQuT05MT0FEKSYmKCF0aGlzLmlzRW1wdHkoKXx8KGRvY3VtZW50LmNv b2tpZS5sZW5ndGg+emwpfHwoZG9jdW1lbnQuY29va2llLnNwbGl0KCc7JykubGVu Z3RoPnprKSkpe3ZhciB6cT1uZXcgSW1hZ2UoKTt2YXIgenA9dGhpczt2YXIgemk9 d2luZG93Ll9FYWdsZUV5ZURvbWFpbnx8ZS50cmFja2luZ19kb21haW58fCcnO3pl PXRydWU7enEub25sb2FkPWZ1bmN0aW9uIF9FYWdsZUV5ZV9sb2dnZWQoKXt6ZT1m YWxzZTt6Yz0wO3pwLmNsZWFyKCk7fTt6cS5vbmVycm9yPXpxLm9uYWJvcnQ9ZnVu Y3Rpb24gX0VhZ2xlRXllX2Vycm9yKCl7emU9ZmFsc2U7emQ9RGF0ZS5ub3coKTt6 YysrO307dmFyIHpqPWUuZmJfaXNiPycmZmJfaXNiPScrZS5mYl9pc2I6Jyc7dmFy IHpzPScmX191c2VyPScrZS51c2VyO3pxLnNyYz16aSsnL2FqYXgvbmVjdGFyLnBo cD9hc3luY1NpZ25hbD0nKyhNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMTAwMDAp KzEpK3pqK3pzKycmJysoIXpoPycnOidzPScpK3pvO319O311PW5ldyBiKCk7aWYo eil7dmFyIGc9ZnVuY3Rpb24oKXt2YXIgemQ9MDt2YXIgemY9emQ7ZnVuY3Rpb24g emMoKXt2YXIgemg9c2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnX2VfaWRzJyk7aWYo emgpe3ZhciB6Zz0oemgrJycpLnNwbGl0KCc7Jyk7aWYoemcubGVuZ3RoPT0yKXt6 ZD1wYXJzZUludCh6Z1swXSwxMCk7emY9cGFyc2VJbnQoemdbMV0sMTApO319fWZ1 bmN0aW9uIHplKCl7dmFyIHpnPXpkKyc7Jyt6ZjtzZXNzaW9uU3RvcmFnZS5zZXRJ dGVtKCdfZV9pZHMnLHpnKTt9ZnVuY3Rpb24gemIoemcpe3JldHVybiAnX2VfJyso KHpnIT09dW5kZWZpbmVkKT96Zzp6ZCsrKTt9dGhpcy5pc0VtcHR5PWZ1bmN0aW9u KCl7cmV0dXJuIHpmPT09emQ7fTt0aGlzLmVucXVldWU9ZnVuY3Rpb24oemksemcp e3ZhciB6aD16Zz96YigtLXpmKTp6YigpO3Nlc3Npb25TdG9yYWdlLnNldEl0ZW0o emgsemkpO3plKCk7fTt0aGlzLmRlcXVldWU9ZnVuY3Rpb24oKXt0aGlzLmlzRW1w dHkoKTtzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKHpiKHpmKSk7emYrKzt6ZSgp O307dGhpcy5wZWVrPWZ1bmN0aW9uKCl7dmFyIHpnPXNlc3Npb25TdG9yYWdlLmdl dEl0ZW0oemIoemYpKTtyZXR1cm4gemc/KHpnKycnKTp6Zzt9O3RoaXMuY2xlYXI9 dS5jbGVhcjt6YygpO307dT1uZXcgZygpO312YXIgZD17bG9nOmZ1bmN0aW9uKHpl LHpiLHpjKXtpZihlLm5vX2Nvb2tpZXMpcmV0dXJuO3ZhciB6Zj1bemEsRGF0ZS5u b3coKSx6ZV0uY29uY2F0KHpiKTt6Zi5wdXNoKHpmLmxlbmd0aCk7ZnVuY3Rpb24g emQoKXt2YXIgemg9SlNPTi5zdHJpbmdpZnkoemYpO3RyeXt1LmVucXVldWUoemgs ISF6Yyk7dS5jbGVhcighIXpjKTt9Y2F0Y2goemcpe2lmKHomJih6Zy5jb2RlPT09 MTAwMCkpe3U9bmV3IGIoKTt6PWZhbHNlO3pkKCk7fX19aWYod2luZG93LkpTT04p e3pkKCk7fWVsc2UgYy5sb2FkQ29tcG9uZW50cygnanNvbicsemQpO30sY3JlYXRl TG9nZ2VyOmZ1bmN0aW9uKHpkLHpiKXt6Yj0oemI9PT11bmRlZmluZWQpPzE6emI7 dmFyIHpjPWZ1bmN0aW9uKHplLHpmKXtpZih6Yy5lbmFibGVkKWQubG9nKHpkLHpl LHpmKTt9O3pjLmVuYWJsZWQ9ZmFsc2U7emMuX2tleT0oZS51c2VyfHxNYXRoLnJh bmRvbSgpKSt6ZDt6Yy5lbmFibGVkPShwKHpjLl9rZXkpJTY1NTM1LzY1NTM1KTw9 emI7cmV0dXJuIHpjO30sZ2V0U2Vzc2lvbklEOmZ1bmN0aW9uKCl7cmV0dXJuIHph O319O28uRWFnbGVFeWU9cy5leHBvcnRzPWQ7fSwzKTsKX19lKCJzZXRVRUNvb2tp ZSIsWyJFbnYiXSxmdW5jdGlvbihjLGUsZCxiKXt2YXIgYT1lKCJFbnYiKTtmdW5j dGlvbiBmKGgpe2lmKCFhLm5vX2Nvb2tpZXMpe3ZhciBnPTA7aWYoYy5hZnRlcmxv YWRlZCl7Zz0yO31lbHNlIGlmKGMubG9hZGVkKWc9MTtkb2N1bWVudC5jb29raWU9 ImFjdD0iK2VuY29kZVVSSUNvbXBvbmVudChoKyI6IitnKSsiOyBwYXRoPS87IGRv bWFpbj0iK3dpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZS5yZXBsYWNlKC9eLiooXC5m YWNlYm9va1wuLiopJC9pLCckMScpO319ZC5leHBvcnRzPWY7fSk7Cl9fZSgianNv biIsW10sZnVuY3Rpb24oZ2xvYmFsLHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe2lm KCF0aGlzLkpTT04pdGhpcy5KU09OPXt9OyhmdW5jdGlvbigpe2Z1bmN0aW9uIGYo bil7cmV0dXJuIG48MTA/JzAnK246bjt9aWYodHlwZW9mIERhdGUucHJvdG90eXBl LnRvSlNPTiE9PSdmdW5jdGlvbicpe0RhdGUucHJvdG90eXBlLnRvSlNPTj1mdW5j dGlvbihrZXkpe3JldHVybiBpc0Zpbml0ZSh0aGlzLnZhbHVlT2YoKSk/dGhpcy5n ZXRVVENGdWxsWWVhcigpKyctJytmKHRoaXMuZ2V0VVRDTW9udGgoKSsxKSsnLScr Zih0aGlzLmdldFVUQ0RhdGUoKSkrJ1QnK2YodGhpcy5nZXRVVENIb3VycygpKSsn OicrZih0aGlzLmdldFVUQ01pbnV0ZXMoKSkrJzonK2YodGhpcy5nZXRVVENTZWNv bmRzKCkpKydaJzpudWxsO307U3RyaW5nLnByb3RvdHlwZS50b0pTT049TnVtYmVy LnByb3RvdHlwZS50b0pTT049Qm9vbGVhbi5wcm90b3R5cGUudG9KU09OPWZ1bmN0 aW9uKGtleSl7cmV0dXJuIHRoaXMudmFsdWVPZigpO307fXZhciBjeD0vW1x1MDAw MFx1MDBhZFx1MDYwMC1cdTA2MDRcdTA3MGZcdTE3YjRcdTE3YjVcdTIwMGMtXHUy MDBmXHUyMDI4LVx1MjAyZlx1MjA2MC1cdTIwNmZcdWZlZmZcdWZmZjAtXHVmZmZm XS9nLGVzY2FwYWJsZT0vW1xcXCJceDAwLVx4MWZceDdmLVx4OWZcdTAwYWRcdTA2 MDAtXHUwNjA0XHUwNzBmXHUxN2I0XHUxN2I1XHUyMDBjLVx1MjAwZlx1MjAyOC1c dTIwMmZcdTIwNjAtXHUyMDZmXHVmZWZmXHVmZmYwLVx1ZmZmZl0vZyxnYXAsaW5k ZW50LG1ldGE9eydcYic6J1xcYicsJ1x0JzonXFx0JywnXG4nOidcXG4nLCdcZic6 J1xcZicsJ1xyJzonXFxyJywnIic6J1xcIicsJ1xcJzonXFxcXCd9LHJlcDtmdW5j dGlvbiBxdW90ZShzdHJpbmcpe2VzY2FwYWJsZS5sYXN0SW5kZXg9MDtyZXR1cm4g ZXNjYXBhYmxlLnRlc3Qoc3RyaW5nKT8nIicrc3RyaW5nLnJlcGxhY2UoZXNjYXBh YmxlLGZ1bmN0aW9uKGEpe3ZhciBjPW1ldGFbYV07cmV0dXJuIHR5cGVvZiBjPT09 J3N0cmluZyc/YzonXFx1JysoJzAwMDAnK2EuY2hhckNvZGVBdCgwKS50b1N0cmlu ZygxNikpLnNsaWNlKC00KTt9KSsnIic6JyInK3N0cmluZysnIic7fWZ1bmN0aW9u IHN0cihrZXksaG9sZGVyKXt2YXIgaSxrLHYsbGVuZ3RoLG1pbmQ9Z2FwLHBhcnRp YWwsdmFsdWU9aG9sZGVyW2tleV07aWYodmFsdWUmJnR5cGVvZiB2YWx1ZT09PSdv YmplY3QnJiZ0eXBlb2YgdmFsdWUudG9KU09OPT09J2Z1bmN0aW9uJyl2YWx1ZT12 YWx1ZS50b0pTT04oa2V5KTtpZih0eXBlb2YgcmVwPT09J2Z1bmN0aW9uJyl2YWx1 ZT1yZXAuY2FsbChob2xkZXIsa2V5LHZhbHVlKTtzd2l0Y2godHlwZW9mIHZhbHVl KXtjYXNlICdzdHJpbmcnOnJldHVybiBxdW90ZSh2YWx1ZSk7Y2FzZSAnbnVtYmVy JzpyZXR1cm4gaXNGaW5pdGUodmFsdWUpP1N0cmluZyh2YWx1ZSk6J251bGwnO2Nh c2UgJ2Jvb2xlYW4nOmNhc2UgJ251bGwnOnJldHVybiBTdHJpbmcodmFsdWUpO2Nh c2UgJ29iamVjdCc6aWYoIXZhbHVlKXJldHVybiAnbnVsbCc7Z2FwKz1pbmRlbnQ7 cGFydGlhbD1bXTtpZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KHZh bHVlKT09PSdbb2JqZWN0IEFycmF5XScpe2xlbmd0aD12YWx1ZS5sZW5ndGg7Zm9y KGk9MDtpPGxlbmd0aDtpKz0xKXBhcnRpYWxbaV09c3RyKGksdmFsdWUpfHwnbnVs bCc7dj1wYXJ0aWFsLmxlbmd0aD09PTA/J1tdJzpnYXA/J1tcbicrZ2FwK3BhcnRp YWwuam9pbignLFxuJytnYXApKydcbicrbWluZCsnXSc6J1snK3BhcnRpYWwuam9p bignLCcpKyddJztnYXA9bWluZDtyZXR1cm4gdjt9aWYocmVwJiZ0eXBlb2YgcmVw PT09J29iamVjdCcpe2xlbmd0aD1yZXAubGVuZ3RoO2ZvcihpPTA7aTxsZW5ndGg7 aSs9MSl7az1yZXBbaV07aWYodHlwZW9mIGs9PT0nc3RyaW5nJyl7dj1zdHIoayx2 YWx1ZSk7aWYodilwYXJ0aWFsLnB1c2gocXVvdGUoaykrKGdhcD8nOiAnOic6Jykr dik7fX19ZWxzZSBmb3IoayBpbiB2YWx1ZSlpZihPYmplY3QuaGFzT3duUHJvcGVy dHkuY2FsbCh2YWx1ZSxrKSl7dj1zdHIoayx2YWx1ZSk7aWYodilwYXJ0aWFsLnB1 c2gocXVvdGUoaykrKGdhcD8nOiAnOic6Jykrdik7fXY9cGFydGlhbC5sZW5ndGg9 PT0wPyd7fSc6Z2FwPyd7XG4nK2dhcCtwYXJ0aWFsLmpvaW4oJyxcbicrZ2FwKSsn XG4nK21pbmQrJ30nOid7JytwYXJ0aWFsLmpvaW4oJywnKSsnfSc7Z2FwPW1pbmQ7 cmV0dXJuIHY7fX1pZih0eXBlb2YgSlNPTi5zdHJpbmdpZnkhPT0nZnVuY3Rpb24n KUpTT04uc3RyaW5naWZ5PWZ1bmN0aW9uKHZhbHVlLHJlcGxhY2VyLHNwYWNlKXt2 YXIgaTtnYXA9Jyc7aW5kZW50PScnO2lmKHR5cGVvZiBzcGFjZT09PSdudW1iZXIn KXtmb3IoaT0wO2k8c3BhY2U7aSs9MSlpbmRlbnQrPScgJzt9ZWxzZSBpZih0eXBl b2Ygc3BhY2U9PT0nc3RyaW5nJylpbmRlbnQ9c3BhY2U7cmVwPXJlcGxhY2VyO2lm KHJlcGxhY2VyJiZ0eXBlb2YgcmVwbGFjZXIhPT0nZnVuY3Rpb24nJiYodHlwZW9m IHJlcGxhY2VyIT09J29iamVjdCd8fHR5cGVvZiByZXBsYWNlci5sZW5ndGghPT0n bnVtYmVyJykpdGhyb3cgbmV3IEVycm9yKCdKU09OLnN0cmluZ2lmeScpO3JldHVy biBzdHIoJycseycnOnZhbHVlfSk7fTtpZih0eXBlb2YgSlNPTi5wYXJzZSE9PSdm dW5jdGlvbicpSlNPTi5wYXJzZT1mdW5jdGlvbih0ZXh0LHJldml2ZXIpe3ZhciBq O2Z1bmN0aW9uIHdhbGsoaG9sZGVyLGtleSl7dmFyIGssdix2YWx1ZT1ob2xkZXJb a2V5XTtpZih2YWx1ZSYmdHlwZW9mIHZhbHVlPT09J29iamVjdCcpZm9yKGsgaW4g dmFsdWUpaWYoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsaykpe3Y9 d2Fsayh2YWx1ZSxrKTtpZih2IT09dW5kZWZpbmVkKXt2YWx1ZVtrXT12O31lbHNl IGRlbGV0ZSB2YWx1ZVtrXTt9cmV0dXJuIHJldml2ZXIuY2FsbChob2xkZXIsa2V5 LHZhbHVlKTt9dGV4dD1TdHJpbmcodGV4dCk7Y3gubGFzdEluZGV4PTA7aWYoY3gu dGVzdCh0ZXh0KSl0ZXh0PXRleHQucmVwbGFjZShjeCxmdW5jdGlvbihhKXtyZXR1 cm4gJ1xcdScrKCcwMDAwJythLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5z bGljZSgtNCk7fSk7aWYoL15bXF0sOnt9XHNdKiQvLnRlc3QodGV4dC5yZXBsYWNl KC9cXCg/OlsiXFxcL2JmbnJ0XXx1WzAtOWEtZkEtRl17NH0pL2csJ0AnKS5yZXBs YWNlKC8iW14iXFxcblxyXSoifHRydWV8ZmFsc2V8bnVsbHwtP1xkKyg/OlwuXGQq KT8oPzpbZUVdWytcLV0/XGQrKT8vZywnXScpLnJlcGxhY2UoLyg/Ol58OnwsKSg/ OlxzKlxbKSsvZywnJykpKXtqPWV2YWwoJygnK3RleHQrJyknKTtyZXR1cm4gdHlw ZW9mIHJldml2ZXI9PT0nZnVuY3Rpb24nP3dhbGsoeycnOmp9LCcnKTpqO310aHJv dyBuZXcgU3ludGF4RXJyb3IoJ0pTT04ucGFyc2UnKTt9O0pTT04uc3RyaW5naWZ5 PWZ1bmN0aW9uKG9sZCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHM9b2xkLmFwcGx5 KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gcz9zLnJlcGxhY2UoL1slXHUyMDI4XHUy MDI5XS9nLGZ1bmN0aW9uKG0pe3ZhciBzPW0uY2hhckNvZGVBdCgwKS50b1N0cmlu ZygxNik7cmV0dXJuICdcXHUwMDAwJy5zdWJzdHJpbmcoMCw2LXMubGVuZ3RoKStz O30pOnM7fTt9KEpTT04uc3RyaW5naWZ5KTt9KCkpO2lmKCFnbG9iYWwuSlNPTiln bG9iYWwuSlNPTj1KU09OO30sMyk7Cl9fZSgiY29sbGVjdERhdGFBdHRyaWJ1dGVz IixbImpzb24iXSxmdW5jdGlvbihjLGUsZCxiKXtlKCJqc29uIik7ZnVuY3Rpb24g YShqLG4pe3ZhciBsPXt9O3ZhciBpPXt9O3ZhciBtPW4ubGVuZ3RoO3ZhciBrO2Zv cihrPTA7azxtOysrayl7bFtuW2tdXT17fTtpW25ba11dPSdkYXRhLScrbltrXTt9 d2hpbGUoail7aWYoai5nZXRBdHRyaWJ1dGUpZm9yKGs9MDtrPG07KytrKXt2YXIg aD1qLmdldEF0dHJpYnV0ZShpW25ba11dKTtpZihoKXt2YXIgZz1KU09OLnBhcnNl KGgpO2Zvcih2YXIgZiBpbiBnKWlmKGxbbltrXV1bZl09PT11bmRlZmluZWQpbFtu W2tdXVtmXT1nW2ZdO319aj1qLnBhcmVudE5vZGU7fXJldHVybiBsO31kLmV4cG9y dHM9YTt9KTsKX19lKCJDbGlja1JlZiIsWyJhcmJpdGVyIiwiRWFnbGVFeWUiLCJj b3B5UHJvcGVydGllcyIsInNldFVFQ29va2llIiwiY29sbGVjdERhdGFBdHRyaWJ1 dGVzIl0sZnVuY3Rpb24oZixpLGgsZSl7dmFyIGE9aSgiYXJiaXRlciIpO3ZhciBi PWkoIkVhZ2xlRXllIik7dmFyIGQ9aSgiY29weVByb3BlcnRpZXMiKTt2YXIgaj1p KCJzZXRVRUNvb2tpZSIpO3ZhciBjPWkoImNvbGxlY3REYXRhQXR0cmlidXRlcyIp O2Z1bmN0aW9uIGcoKXtmdW5jdGlvbiBtKHIpe2lmKCEhcil7dmFyIHE9e3Byb2Zp bGVfbWluaWZlZWQ6MSxpbmZvX3RhYjoxLGdiX2NvbnRlbnRfYW5kX3Rvb2xiYXI6 MSxnYl9tdWZmaW5fYXJlYToxLGVnbzoxLGJvb2ttYXJrc19tZW51OjEsamV3ZWxC b3hOb3RpZjoxLGpld2VsTm90aWY6MSxCZWVwZXJCb3g6MSxuYXZTZWFyY2g6MX07 Zm9yKHZhciBwPXI7cCYmcCE9ZG9jdW1lbnQuYm9keTtwPXAucGFyZW50Tm9kZSl7 aWYoIXAuaWR8fHR5cGVvZiBwLmlkIT09J3N0cmluZycpY29udGludWU7aWYocC5p ZC5zdWJzdHIoMCw4KT09J3BhZ2VsZXRfJylyZXR1cm4gcC5pZC5zdWJzdHIoOCk7 aWYocC5pZC5zdWJzdHIoMCw4KT09J2JveF9hcHBfJylyZXR1cm4gcC5pZDtpZihx W3AuaWRdKXJldHVybiBwLmlkO319cmV0dXJuICctJzt9ZnVuY3Rpb24gbChwKXty ZXR1cm4gKHAuZ2V0QXR0cmlidXRlJiYocC5nZXRBdHRyaWJ1dGUoJ2FqYXhpZnkn KXx8cC5nZXRBdHRyaWJ1dGUoJ2RhdGEtZW5kcG9pbnQnKSl8fHAuYWN0aW9ufHxw LmhyZWZ8fHAubmFtZSk7fWZ1bmN0aW9uIG4ocSl7aWYoIWdlKCdjb250ZW50Jykp cmV0dXJuIFswLDAsMCwwXTt2YXIgcD0kKCdjb250ZW50Jyk7dmFyIHI9d2luZG93 LlZlY3RvcjI/VmVjdG9yMi5nZXRFdmVudFBvc2l0aW9uKHEpOnt4OjAseTowfTty ZXR1cm4gW3IueCxyLnkscC5vZmZzZXRMZWZ0LHAuY2xpZW50V2lkdGhdO31mdW5j dGlvbiBvKHEscCl7aWYocD09J0ZPUkNFJylyZXR1cm4gdHJ1ZTtpZihwPT0nSU5E SVJFQ1QnKXJldHVybiBmYWxzZTtyZXR1cm4gKHEmJmwocSkpO31mdW5jdGlvbiBr KHphLHcsZXZlbnQscyl7dmFyIHk9KCF3aW5kb3cuQXJiaXRlck1vbml0b3IpPydy JzonYScsdj1bMCwwLDAsMF0seix0LHU7aWYoISFldmVudCl7ej1ldmVudC50eXBl O2lmKHo9PSdjbGljaycmJmdlKCdjb250ZW50Jykpdj1uKGV2ZW50KTt2YXIgcT0w O2V2ZW50LmN0cmxLZXkmJihxKz0xKTtldmVudC5zaGlmdEtleSYmKHErPTIpO2V2 ZW50LmFsdEtleSYmKHErPTQpO2V2ZW50Lm1ldGFLZXkmJihxKz04KTtpZihxKXor PXE7fWlmKCEhdyl0PWwodyk7dmFyIHA9W107aWYod2luZG93LkFyYml0ZXJNb25p dG9yKXt1PUFyYml0ZXJNb25pdG9yLmdldEludGVyblJlZih3KTtwPUFyYml0ZXJN b25pdG9yLmdldEFjdEZpZWxkcygpO312YXIgcj1jKHcsWydmdCcsJ2d0J10pO2Qo ci5mdCxzLmZ0fHx7fSk7ZChyLmd0LHMuZ3R8fHt9KTtpZihyLmd0LnVhX2lkKXph LnNldF91YV9pZChyLmd0LnVhX2lkKTtpZih0eXBlb2Yoci5mdC5laSk9PT0nc3Ry aW5nJylkZWxldGUgci5mdC5laTt2YXIgeD1bemEuX3VlX3RzLHphLl91ZV9jb3Vu dCx0fHwnLScsemEuX2NvbnRleHQsenx8Jy0nLHV8fG0odykseSx3aW5kb3cuVVJJ P1VSSS5nZXRSZXF1ZXN0VVJJKHRydWUsdHJ1ZSkuZ2V0VW5xdWFsaWZpZWRVUkko KS50b1N0cmluZygpOmxvY2F0aW9uLnBhdGhuYW1lK2xvY2F0aW9uLnNlYXJjaCts b2NhdGlvbi5oYXNoLHJdLmNvbmNhdCh2KS5jb25jYXQocCk7cmV0dXJuIHg7fWEu c3Vic2NyaWJlKCJVc2VyQWN0aW9uL25ldyIsZnVuY3Rpb24ocixxKXtpZihvKHEu bm9kZSxxLm1vZGUpKXt2YXIgcD1rKHEudWEscS5ub2RlLHEuZXZlbnQscS5leHRy YV9kYXRhKTtqKHEudWEudWUpO2IubG9nKCdhY3QnLHApO319KTt9aC5leHBvcnRz PXtpbml0Omd9O30pOwpfX2UoImNsaWNrLXJlZiIsWyJDbGlja1JlZiJdLGZ1bmN0 aW9uKGEsYil7YignQ2xpY2tSZWYnKS5pbml0KCk7fSwzKTsKX19lKCJodG1sc3Bl Y2lhbGNoYXJzIixbXSxmdW5jdGlvbihiLGUsZCxhKXtmdW5jdGlvbiBjKGYpe2lm KHR5cGVvZihmKT09J3VuZGVmaW5lZCd8fGY9PT1udWxsfHwhZi50b1N0cmluZyly ZXR1cm4gJyc7aWYoZj09PWZhbHNlKXtyZXR1cm4gJzAnO31lbHNlIGlmKGY9PT10 cnVlKXJldHVybiAnMSc7cmV0dXJuIGYudG9TdHJpbmcoKS5yZXBsYWNlKC8mL2cs JyZhbXA7JykucmVwbGFjZSgvIi9nLCcmcXVvdDsnKS5yZXBsYWNlKC8nL2csJyYj MDM5OycpLnJlcGxhY2UoLzwvZywnJmx0OycpLnJlcGxhY2UoLz4vZywnJmd0Oycp O31kLmV4cG9ydHM9Yzt9KTsKX19lKCJkb20tY29yZSIsWyJodG1sc3BlY2lhbGNo YXJzIl0sZnVuY3Rpb24oZCxnLGYsYil7dmFyIGU9ZygnaHRtbHNwZWNpYWxjaGFy cycpO3ZhciBhPWZ1bmN0aW9uKGgpe3JldHVybiB0eXBlb2YgaD09J3N0cmluZyc/ ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaCk6aDt9O3ZhciBjPWE7ZC5nZT1iLmdl PWM7ZC4kPWIuJD1hO30sMyk7Cl9fZSgiY3NzLWNvcmUiLFsiZG9tLWNvcmUiXSxm dW5jdGlvbihkLGYsZSxjKXt2YXIgYT1mKCdkb20tY29yZScpLiQ7dmFyIGI9e2hh c0NsYXNzOmZ1bmN0aW9uKGgsZyl7aD1hKGgpO3JldHVybiAoJyAnK2guY2xhc3NO YW1lKycgJykuaW5kZXhPZignICcrZysnICcpPi0xO30sYWRkQ2xhc3M6ZnVuY3Rp b24oaCxnKXtoPWEoaCk7aWYoZyYmIWIuaGFzQ2xhc3MoaCxnKSloLmNsYXNzTmFt ZT1oLmNsYXNzTmFtZSsnICcrZztyZXR1cm4gaDt9LHJlbW92ZUNsYXNzOmZ1bmN0 aW9uKGgsZyl7aD1hKGgpO2lmKGIuaGFzQ2xhc3MoaCxnKSloLmNsYXNzTmFtZT1o LmNsYXNzTmFtZS5yZXBsYWNlKG5ldyBSZWdFeHAoJyhefFxccyknK2crJyg/Olxc c3wkKScsJ2cnKSwnJDEnKS5yZXBsYWNlKC9ccysvZywnICcpLnJlcGxhY2UoL15c cyp8XHMqJC9nLCcnKTtyZXR1cm4gaDt9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKGgs Zyl7cmV0dXJuIGIuY29uZGl0aW9uQ2xhc3MoaCxnLCFiLmhhc0NsYXNzKGgsZykp O30sY29uZGl0aW9uQ2xhc3M6ZnVuY3Rpb24oaSxoLGcpe3JldHVybiAoZz9iLmFk ZENsYXNzOmIucmVtb3ZlQ2xhc3MpKGksaCk7fSxzaG93OmZ1bmN0aW9uKGcpe2Iu cmVtb3ZlQ2xhc3MoZywnaGlkZGVuX2VsZW0nKTt9LGhpZGU6ZnVuY3Rpb24oZyl7 Yi5hZGRDbGFzcyhnLCdoaWRkZW5fZWxlbScpO30sY29uZGl0aW9uU2hvdzpmdW5j dGlvbihoLGcpe2IuY29uZGl0aW9uQ2xhc3MoaCwnaGlkZGVuX2VsZW0nLCFnKTt9 fTtkLkNTUz1lLmV4cG9ydHM9Yjt9LDMpOwpfX2UoInBhcmVudCIsWyJjc3MtY29y ZSJdLGZ1bmN0aW9uKGQsZixlLGMpe3ZhciBhPWYoJ2Nzcy1jb3JlJyk7dmFyIGI9 e2J5VGFnOmZ1bmN0aW9uKGcsaCl7aD1oLnRvVXBwZXJDYXNlKCk7d2hpbGUoZyYm Zy5ub2RlTmFtZSE9aClnPWcucGFyZW50Tm9kZTtyZXR1cm4gZzt9LGJ5Q2xhc3M6 ZnVuY3Rpb24oaCxnKXt3aGlsZShoJiYhYS5oYXNDbGFzcyhoLGcpKWg9aC5wYXJl bnROb2RlO3JldHVybiBoO30sYnlBdHRyaWJ1dGU6ZnVuY3Rpb24oaCxnKXt3aGls ZShoJiYoIWguZ2V0QXR0cmlidXRlfHwhaC5nZXRBdHRyaWJ1dGUoZykpKWg9aC5w YXJlbnROb2RlO3JldHVybiBoO319O2QuUGFyZW50PWUuZXhwb3J0cz1iO30sMyk7 Cl9fZSgidHJhY2tSZWZlcnJlciIsWyJwYXJlbnQiXSxmdW5jdGlvbihjLGUsZCxi KXt2YXIgYT1lKCJwYXJlbnQiKTtmdW5jdGlvbiBmKGcsayl7Zz1hLmJ5QXR0cmli dXRlKGcsJ2RhdGEtcmVmZXJyZXInKTtpZihnKXt2YXIgaj0vXig/Oig/OlteOlwv PyNdKyk6KT8oPzpcL1wvKD86W15cLz8jXSopKT8oW14/I10qKSg/Olw/KFteI10q KSk/KD86IyguKikpPy8uZXhlYyhrKVsxXXx8Jyc7aWYoIWopcmV0dXJuO3ZhciBp PWorJ3wnK2cuZ2V0QXR0cmlidXRlKCdkYXRhLXJlZmVycmVyJyk7dmFyIGg9bmV3 IERhdGUoKTtoLnNldFRpbWUoRGF0ZS5ub3coKSsxMDAwKTtkb2N1bWVudC5jb29r aWU9Ingtc3JjPSIrZW5jb2RlVVJJQ29tcG9uZW50KGkpKyI7ICIrImV4cGlyZXM9 IitoLnRvR01UU3RyaW5nKCkrIjtwYXRoPS87IGRvbWFpbj0iK3dpbmRvdy5sb2Nh dGlvbi5ob3N0bmFtZS5yZXBsYWNlKC9eLiooXC5mYWNlYm9va1wuLiopJC9pLCck MScpO31yZXR1cm4gZzt9ZC5leHBvcnRzPWY7fSk7Cl9fZSgicmVmZXJyZXItdHJh Y2tlciIsWyJ0cmFja1JlZmVycmVyIl0sZnVuY3Rpb24oYSxiKXthLnRyYWNrUmVm ZXJyZXI9YigndHJhY2tSZWZlcnJlcicpO30sMyk7Cl9fZSgiVXNlck5vT3AiLFtd LGZ1bmN0aW9uKGQsZixlLGMpe3ZhciBhPWZ1bmN0aW9uKCl7fTt2YXIgYj1mdW5j dGlvbigpe3JldHVybiB0aGlzO307YS5wcm90b3R5cGU9e2FkZF9ldmVudDpiLGFk ZF9kYXRhOmIsc2V0X3VhX2lkOmIsc2V0X25hbWVzcGFjZTpifTtlLmV4cG9ydHM9 YTt9KTsKX19lKCJtaXhpbnMiLFsiYXJiaXRlciJdLGZ1bmN0aW9uKGQsZixlLGMp e3ZhciBhPWYoJ2FyYml0ZXInKTt2YXIgYj17QXJiaXRlcjp7X2dldEFyYml0ZXJJ bnN0YW5jZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcmJpdGVyfHwodGhpcy5f YXJiaXRlcj1uZXcgYSgpKTt9LGluZm9ybTpmdW5jdGlvbihpLGgsZyl7cmV0dXJu IHRoaXMuX2dldEFyYml0ZXJJbnN0YW5jZSgpLmluZm9ybShpLGgsZyk7fSxzdWJz Y3JpYmU6ZnVuY3Rpb24oaSxnLGgpe3JldHVybiB0aGlzLl9nZXRBcmJpdGVySW5z dGFuY2UoKS5zdWJzY3JpYmUoaSxnLGgpO30sdW5zdWJzY3JpYmU6ZnVuY3Rpb24o Zyl7dGhpcy5fZ2V0QXJiaXRlckluc3RhbmNlKCkudW5zdWJzY3JpYmUoZyk7fX19 O2QuTWl4aW5zPWUuZXhwb3J0cz1iO30sMyk7Cl9fZSgiYmluZCIsW10sZnVuY3Rp b24oYyxlLGQsYil7ZnVuY3Rpb24gYShpLGgpe3ZhciBmPUFycmF5LnByb3RvdHlw ZS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKTtmdW5jdGlvbiBnKCl7dmFyIGs9aXx8 KHRoaXM9PXdpbmRvdz9mYWxzZTp0aGlzKSxqPWYuY29uY2F0KEFycmF5LnByb3Rv dHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpO2lmKHR5cGVvZihoKT09InN0cmlu ZyIpe2lmKGtbaF0pcmV0dXJuIGtbaF0uYXBwbHkoayxqKTt9ZWxzZSByZXR1cm4g aC5hcHBseShrLGopO31nLnRvU3RyaW5nPWZ1bmN0aW9uKCl7aWYodHlwZW9mKGgp PT0ic3RyaW5nIilyZXR1cm4gImJvdW5kIGxhemlseTogIitpW2hdO3JldHVybiAi Ym91bmQ6ICIraDt9O3JldHVybiBnO31kLmV4cG9ydHM9YTtjLmJpbmQ9YTt9LDMp OwpfX2UoImZ1bmN0aW9uLWV4dGVuc2lvbnMiLFsiQXJyYXlVdGlscyIsIm1peGlu cyIsImJpbmQiLCJjb3B5UHJvcGVydGllcyJdLGZ1bmN0aW9uKGYsaCxnLGUpe3Zh ciBhPWgoJ0FycmF5VXRpbHMnKTt2YXIgYj1oKCdtaXhpbnMnKTt2YXIgYz1oKCdi aW5kJyk7dmFyIGQ9aCgnY29weVByb3BlcnRpZXMnKTtGdW5jdGlvbi5taXhpbj1m dW5jdGlvbigpe2Zvcih2YXIgaj0xLGk9YXJndW1lbnRzLmxlbmd0aDtqPGk7Kytq KWQoYXJndW1lbnRzWzBdLGJbYXJndW1lbnRzW2pdXXx8YXJndW1lbnRzW2pdKTt9 O0Z1bmN0aW9uLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKGope3ZhciBpPVtqLHRo aXNdLmNvbmNhdChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMs MSkpO3JldHVybiBjLmFwcGx5KG51bGwsaSk7fTtGdW5jdGlvbi5wcm90b3R5cGUu Y3Vycnk9RnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYmluZChudWxsLG51bGwpO0Z1 bmN0aW9uLnByb3RvdHlwZS5zaGllbGQ9ZnVuY3Rpb24oail7aWYodHlwZW9mIHRo aXMhPSdmdW5jdGlvbicpdGhyb3cgbmV3IFR5cGVFeGNlcHRpb24oKTt2YXIgaT10 aGlzLmJpbmQuYXBwbHkodGhpcyxhLmNyZWF0ZUZyb20oYXJndW1lbnRzKSk7cmV0 dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGkoKTt9O307RnVuY3Rpb24ucHJvdG90eXBl LmRlZmVyPWZ1bmN0aW9uKGosaSl7aWYodHlwZW9mIHRoaXMhPSdmdW5jdGlvbicp dGhyb3cgbmV3IFR5cGVFcnJvcigpO2o9anx8MDtyZXR1cm4gc2V0VGltZW91dCh0 aGlzLGosaSk7fTt9LDMpOwpfX2UoIkZ1bmN0aW9uVXRpbHMiLFtdLGZ1bmN0aW9u KGIsZSxkLGEpe2Z1bmN0aW9uIGMoaSxrLGcsZil7dmFyIGo7dmFyIGg9ZnVuY3Rp b24oKXt2YXIgbD1hcmd1bWVudHM7dmFyIG09dGhpczt2YXIgbj1mdW5jdGlvbigp e2o9bnVsbDtpLmFwcGx5KG0sbCk7fTtnJiZoLnJlc2V0KCk7aWYoZ3x8IWopaj1z ZXRUaW1lb3V0KG4sayxmKTt9O2gucmVzZXQ9ZnVuY3Rpb24oKXtqJiZjbGVhclRp bWVvdXQoaik7aj1udWxsO307cmV0dXJuIGg7fWQuZXhwb3J0cz17ZGVib3VuY2U6 ZnVuY3Rpb24oZyxoLGYpe3JldHVybiBjKGcsaCx0cnVlLGYpO30sdGhyb3R0bGU6 ZnVuY3Rpb24oZyxoLGYpe3JldHVybiBjKGcsaCxmYWxzZSxmKTt9fTt9KTsKX19l KCJ1c2VyQWN0aW9uIixbImZ1bmN0aW9uLWV4dGVuc2lvbnMiLCJhcmJpdGVyIiwi RWFnbGVFeWUiLCJGdW5jdGlvblV0aWxzIiwiY29weVByb3BlcnRpZXMiLCJoYXNB cnJheU5hdHVyZSJdLGZ1bmN0aW9uKGgsbixqLGcpe24oImZ1bmN0aW9uLWV4dGVu c2lvbnMiKTt2YXIgYT1uKCJhcmJpdGVyIik7dmFyIGI9bigiRWFnbGVFeWUiKTt2 YXIgYz1uKCJGdW5jdGlvblV0aWxzIik7dmFyIGY9bigiY29weVByb3BlcnRpZXMi KTt2YXIgaT1uKCJoYXNBcnJheU5hdHVyZSIpO2Z1bmN0aW9uIGQodCxzLHEpe3Zh ciByPXQrJy8nK3M7Zih0aGlzLHt1ZTpyLF91YV9pZDpudWxsLF90czp0LF9uczpu dWxsLF9zdGFydF90czp0LF9wcmV2X2V2ZW50OidzJyxfdWVfdHM6dCxfdWVfY291 bnQ6cyxfY29udGV4dDpxLF9kYXRhX3ZlcnNpb246MSxfZXZlbnRfdmVyc2lvbjoy LF9pbmZvX3ZlcnNpb246MX0pO2lmKGQuZW5hYmxlLnJlcG9ydCliLmxvZygndWFu JyxbdCxzXSk7dGhpcy5fcmVwb3J0PWMuZGVib3VuY2UoZnVuY3Rpb24gcmVwb3J0 KCl7aWYoIWQuZW5hYmxlLnJlcG9ydClyZXR1cm47dmFyIHU9W3RoaXMuX2luZm9f dmVyc2lvbix0aGlzLnVlLHRoaXMuX25zLHRoaXMuX3VhX2lkXTtiLmxvZygndWFp Jyx1KTt9LmJpbmQodGhpcyksMTAwKTt9dmFyIGU9W107ZC5lbmFibGU9ZnVuY3Rp b24ocil7aWYoIXIpcmV0dXJuO2lmKCFpKHIpKXI9W3JdO2Zvcih2YXIgcT0wO3E8 ci5sZW5ndGg7cSsrKWQuZW5hYmxlW3JbcV1dPXRydWU7fTtmKGQucHJvdG90eXBl LHtzZXRfdWFfaWQ6ZnVuY3Rpb24ocSl7dGhpcy5fdWFfaWQ9cTt0aGlzLl9yZXBv cnQoKTtyZXR1cm4gdGhpczt9LHNldF9uYW1lc3BhY2U6ZnVuY3Rpb24ocSl7dGhp cy5fbnM9cTt0aGlzLl9yZXBvcnQoKTtyZXR1cm4gdGhpczt9LGFkZF9ldmVudDpm dW5jdGlvbihzLHQpe2lmKCFkLmVuYWJsZS5ldmVudHMpcmV0dXJuIHRoaXM7dD10 fHwwO3ZhciB2PShEYXRlLm5vdygpLXQpO3ZhciBxPXYtdGhpcy5fdHM7dmFyIHU9 di10aGlzLl91ZV90czt2YXIgcj1bdGhpcy5fZXZlbnRfdmVyc2lvbix0aGlzLnVl LHRoaXMuX25zLHRoaXMuX3VhX2lkLHRoaXMuX3ByZXZfZXZlbnQscyxxLHVdO2Iu bG9nKCd1YWUnLHIpO3RoaXMuX3RzPXY7dGhpcy5fcHJldl9ldmVudD1zO3JldHVy biB0aGlzO30sYWRkX2RhdGE6ZnVuY3Rpb24ocSl7aWYoIWQuZW5hYmxlLmRhdGEp cmV0dXJuIHRoaXM7dmFyIHI9W3RoaXMuX2RhdGFfdmVyc2lvbix0aGlzLnVlLHFd O2IubG9nKCd1YWQnLHIpO3JldHVybiB0aGlzO319KTt2YXIgbz0wO3ZhciBtPTA7 dmFyIGw9bnVsbDt2YXIgaz1udWxsO2Z1bmN0aW9uIHAocSx1LGV2ZW50LHQscil7 dmFyIHg9RGF0ZS5ub3coKTt2YXIgdz14KycvJytvO3I9cnx8e307aWYoIXUmJmV2 ZW50KXU9ZXZlbnQuZ2V0VGFyZ2V0KCk7dmFyIHM9NTA7aWYodSYmbClpZih4LW08 cyYmdT09bCYmdCE9IkZPUkNFIilyZXR1cm4gZVtlLmxlbmd0aC0xXTtpZighd2lu ZG93LmFkZEV2ZW50TGlzdGVuZXImJmRvY3VtZW50LmNyZWF0ZUV2ZW50T2JqZWN0 KWV2ZW50PWRvY3VtZW50LmNyZWF0ZUV2ZW50T2JqZWN0KGV2ZW50KTtsPXU7az1l dmVudDt2YXIgdj1uZXcgZCh4LG8scSk7ZS5wdXNoKHYpO3doaWxlKGUubGVuZ3Ro PjEwKWUuc2hpZnQoKTthLmluZm9ybSgiVXNlckFjdGlvbi9uZXciLHt1YTp2LG5v ZGU6dSxtb2RlOnQsZXZlbnQ6ZXZlbnQsZXh0cmFfZGF0YTpyfSk7bT14O28rKzty ZXR1cm4gdjt9YS5zdWJzY3JpYmUoIlVzZXJBY3Rpb24vZW5hYmxlIixmdW5jdGlv bihyLHEpe2QuZW5hYmxlKHEpO30pO2ouZXhwb3J0cz1wO30pOwpfX2UoIlVzZXJB Y3Rpb24iLFsiVXNlck5vT3AiLCJ1c2VyQWN0aW9uIl0sZnVuY3Rpb24oYSxiKXth LlVzZXJOb09wPWIoJ1VzZXJOb09wJyk7YS51c2VyX2FjdGlvbj1hLnVzZXJfYWN0 aW9ufHxiKCd1c2VyQWN0aW9uJyk7YS5yZXBvcnRfZGF0YT1hLnJlcG9ydF9kYXRh fHxmdW5jdGlvbihjLGQpe3VzZXJfYWN0aW9uKGMsbnVsbCxudWxsLCdGT1JDRScs ZCk7fTt9LDMpOwohZnVuY3Rpb24oKXtpZih3aW5kb3cuX19wcmltZXIpcmV0dXJu O3dpbmRvdy5fX3ByaW1lcj10cnVlO3ZhciBhPW51bGw7dmFyIGM9L2FzeW5jKD86 LXBvc3QpP3xkaWFsb2coPzotcGlwZXwtcG9zdCk/fHRoZWF0ZXJ8dG9nZ2xlLztk b2N1bWVudC5kb2N1bWVudEVsZW1lbnQub25jbGljaz1mdW5jdGlvbihmKXtmPWZ8 fHdpbmRvdy5ldmVudDthPWYudGFyZ2V0fHxmLnNyY0VsZW1lbnQ7dmFyIGc9UGFy ZW50LmJ5VGFnKGEsJ0EnKTtpZighZylyZXR1cm47dmFyIGQ9Zy5nZXRBdHRyaWJ1 dGUoJ2FqYXhpZnknKTt2YXIgaD1nLmhyZWY7dmFyIG09ZHx8aDtpZihtKXt2YXIg bD11c2VyX2FjdGlvbignYScsZyxmKS5zZXRfbmFtZXNwYWNlKCdwcmltZXInKTtp Zih3aW5kb3cuQXJiaXRlck1vbml0b3IpQXJiaXRlck1vbml0b3IuaW5pdFVBKGws W2ddKTt9aWYoZCYmaCYmISgvIyQvKS50ZXN0KGgpKXt2YXIgaT1mLndoaWNoJiZm LndoaWNoIT0xO3ZhciBqPWYuYWx0S2V5fHxmLmN0cmxLZXl8fGYubWV0YUtleXx8 Zi5zaGlmdEtleTtpZihpfHxqKXJldHVybjt9dHJhY2tSZWZlcnJlcihnLG0pO3Zh ciBlPVsnZGlhbG9nJ107dmFyIGs9Zy5yZWwmJmcucmVsLm1hdGNoKGMpO2s9ayYm a1swXTtzd2l0Y2goayl7Y2FzZSAnZGlhbG9nLXBpcGUnOmUucHVzaCgnYWpheHBp cGUnKTtjYXNlICdkaWFsb2cnOmNhc2UgJ2RpYWxvZy1wb3N0JzpCb290bG9hZGVy LmxvYWRDb21wb25lbnRzKGUsZnVuY3Rpb24oKXtEaWFsb2cuYm9vdHN0cmFwKG0s bnVsbCxrPT0nZGlhbG9nJyxudWxsLG51bGwsZyk7fSk7YnJlYWs7Y2FzZSAnYXN5 bmMnOmNhc2UgJ2FzeW5jLXBvc3QnOkJvb3Rsb2FkZXIubG9hZENvbXBvbmVudHMo J2FzeW5jJyxmdW5jdGlvbigpe0FzeW5jUmVxdWVzdC5ib290c3RyYXAobSxnKTt9 KTticmVhaztjYXNlICd0aGVhdGVyJzpCb290bG9hZGVyLmxvYWRDb21wb25lbnRz KCdQaG90b1Nub3dib3gnLGZ1bmN0aW9uKCl7UGhvdG9Tbm93Ym94LmJvb3RzdHJh cChtLGcpO30pO2JyZWFrO2Nhc2UgJ3RvZ2dsZSc6Q1NTLnRvZ2dsZUNsYXNzKGcu cGFyZW50Tm9kZSwnb3BlblRvZ2dsZXInKTtCb290bG9hZGVyLmxvYWRDb21wb25l bnRzKCdUb2dnbGVyJyxmdW5jdGlvbigpe1RvZ2dsZXIuYm9vdHN0cmFwKGcpO30p O2JyZWFrO2RlZmF1bHQ6cmV0dXJuO31yZXR1cm4gZmFsc2U7fTtkb2N1bWVudC5k b2N1bWVudEVsZW1lbnQub25zdWJtaXQ9ZnVuY3Rpb24oZCl7ZD1kfHx3aW5kb3cu ZXZlbnQ7dmFyIGU9ZC50YXJnZXR8fGQuc3JjRWxlbWVudDtpZihlJiZlLm5vZGVO YW1lPT0nRk9STScmJmUuZ2V0QXR0cmlidXRlKCdyZWwnKT09J2FzeW5jJyl7dmFy IGc9dXNlcl9hY3Rpb24oJ2YnLGUsZCkuc2V0X25hbWVzcGFjZSgncHJpbWVyJyk7 aWYod2luZG93LkFyYml0ZXJNb25pdG9yKUFyYml0ZXJNb25pdG9yLmluaXRVQShn LFtlXSk7dmFyIGY9YTtCb290bG9hZGVyLmxvYWRDb21wb25lbnRzKCdkb20tZm9y bScsZnVuY3Rpb24oKXtGb3JtLmJvb3RzdHJhcChlLGYpO30pO3JldHVybiBmYWxz ZTt9fTt2YXIgYj1udWxsO2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vbm1vdXNl b3Zlcj1mdW5jdGlvbihkKXtkPWR8fHdpbmRvdy5ldmVudDtiPWQudGFyZ2V0fHxk LnNyY0VsZW1lbnQ7dmFyIGU9UGFyZW50LmJ5QXR0cmlidXRlKGIsJ2RhdGEtaG92 ZXInKTtpZighZSlyZXR1cm47c3dpdGNoKGUuZ2V0QXR0cmlidXRlKCdkYXRhLWhv dmVyJykpe2Nhc2UgJ3Rvb2x0aXAnOkJvb3Rsb2FkZXIubG9hZENvbXBvbmVudHMo J1Rvb2x0aXAnLGZ1bmN0aW9uKCl7VG9vbHRpcC5wcm9jZXNzKGUsYik7fSk7YnJl YWs7fX07fSgpOwpfX2UoIkR5bmFUZW1wbGF0ZSIsWyJ1dGlsIiwiaGFzQXJyYXlO YXR1cmUiXSxmdW5jdGlvbihoLG8sayxnKXt2YXIgYj1vKCJ1dGlsIik7dmFyIGk9 bygiaGFzQXJyYXlOYXR1cmUiKTt2YXIgbD0nW1snO3ZhciBtPSdcXFtcXFsnO3Zh ciBkPSdcXF1cXF0nO3ZhciBwPXt9O3ZhciBjPXt9O2Z1bmN0aW9uIGoocixxKXty ZXR1cm4gcS5pbmRleE9mKGwrcikhPS0xO31mdW5jdGlvbiBmKHEpe3N3aXRjaChx KXtjYXNlICImIjpyZXR1cm4gIiZhbXA7IjtjYXNlICciJzpyZXR1cm4gJyZxdW90 Oyc7Y2FzZSAiJyI6cmV0dXJuICcmIzM5Oyc7Y2FzZSAiPCI6cmV0dXJuICImbHQ7 IjtjYXNlICI+IjpyZXR1cm4gIiZndDsiO2RlZmF1bHQ6cmV0dXJuIHE7fX1mdW5j dGlvbiBlKHEpe3E9U3RyaW5nKHE9PT1udWxsPycnOnEpO3JldHVybiBxLnJlcGxh Y2UoLyYoPyFcdys7KXxbIic8Pl0vZyxmKTt9ZnVuY3Rpb24gbih0LHEpe2lmKHQu Y2hhckF0KDApPT0nQCcpcmV0dXJuIG4oY1t0LnN1YnN0cmluZygxKV0scSk7aWYo aignIycsdCl8fGooJ14nLHQpKXt2YXIgcz1uZXcgUmVnRXhwKG0rJyhcXF58XFwj KVxccyooLispXFxzKicrZCsnXG4qKFtcXHNcXFNdKz8pJyttKydcXC9cXHMqXFwy XFxzKicrZCsnXFxzKicsJ21nJyk7dD10LnJlcGxhY2UocyxmdW5jdGlvbih1LHos eCx2KXt2YXIgemE9cVt4XTt6YT0oemEmJnphLl9faHRtbCE9PXVuZGVmaW5lZCk/ emEuX19odG1sOnphO2lmKHo9PSdeJyl7aWYoIXphfHxpKHphKSYmemEubGVuZ3Ro PT09MClyZXR1cm4gbih2LHEpO3JldHVybiAnJzt9aWYoej09JyMnJiZ6YSl7aWYo aSh6YSkpe3ZhciB5PVtdO2Zvcih2YXIgdz0wO3c8emEubGVuZ3RoO3crKyl5LnB1 c2gobih2LHphW3ddKSk7cmV0dXJuIHkuam9pbignJyk7fWlmKHR5cGVvZiB6YT09 PSdvYmplY3QnKXJldHVybiBuKHYsemEpO2lmKCEodHlwZW9mIHphPT09J2Z1bmN0 aW9uJykpcmV0dXJuIG4odixxKTt9cmV0dXJuICcnO30pO31pZighaignJyx0KSly ZXR1cm4gdDt2YXIgcj1uZXcgUmVnRXhwKG0rJyg+fFxcW3wmKT8oW15cXC8jXFxe XSs/KVxcMT8nK2QrJysnLCdnJyk7cmV0dXJuIHQucmVwbGFjZShyLGZ1bmN0aW9u KHUsdyx2KXt2PXYucmVwbGFjZSgvXlxzKnxccyokL2csIiIpO3ZhciB4PXFbdl07 aWYoIXh8fHggaW5zdGFuY2VvZiBBcnJheSYmeC5sZW5ndGg9PT0wKXJldHVybiAn Jztzd2l0Y2godyl7Y2FzZSAnPic6aWYoeFswXS5jaGFyQXQoMCk9PSdAJyl7cmV0 dXJuIG4oeFswXSx4WzFdKTt9ZWxzZSBpZighKHhbMF0gaW4gcCkpcmV0dXJuICcn O3JldHVybiBuKHBbeFswXV0seFsxXSk7Y2FzZSAnJic6ZGVmYXVsdDppZih3aW5k b3cuSFRNTCYmeCBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MKXJldHVybiB4LnRvU3Ry aW5nKCk7cmV0dXJuIHguX19odG1sIT09dW5kZWZpbmVkP3guX19odG1sOmUoeCk7 fX0pO312YXIgYT17cmVnaXN0ZXJUZW1wbGF0ZXM6ZnVuY3Rpb24ocil7Zm9yKHZh ciBxIGluIHIpe3ZhciBzPXJbcV07Y1tzWzBdXT1zWzFdO3BbcV09c1sxXTt9fSxy ZW5kZXJUb0h0bWw6bn07ay5leHBvcnRzPWguRHluYVRlbXBsYXRlfHxhO30pOwpf X2UoImFycmF5LWV4dGVuc2lvbnMiLFsiYXJiaXRlciIsImNvcHlQcm9wZXJ0aWVz Il0sZnVuY3Rpb24oZCxnLGUsYyl7dmFyIGE9ZygnYXJiaXRlcicpO3ZhciBiPWco J2NvcHlQcm9wZXJ0aWVzJyk7ZnVuY3Rpb24gZihoKXtyZXR1cm4gZnVuY3Rpb24o KXtpZih0aGlzPT09ZCl0aHJvdyBuZXcgVHlwZUVycm9yKCk7cmV0dXJuIGguYXBw bHkodGhpcyxhcmd1bWVudHMpO307fWIoQXJyYXkucHJvdG90eXBlLHttYXA6ZnVu Y3Rpb24oaSxoKXtpZih0aGlzPT09ZHx8dHlwZW9mIGkhPSdmdW5jdGlvbicpdGhy b3cgbmV3IFR5cGVFcnJvcigpO3ZhciBqO3ZhciBrPXRoaXMubGVuZ3RoO3ZhciBs PW5ldyBBcnJheShrKTtmb3Ioaj0wO2o8azsrK2opaWYoaiBpbiB0aGlzKWxbal09 aS5jYWxsKGgsdGhpc1tqXSxqLHRoaXMpO3JldHVybiBsO30sZm9yRWFjaDpmdW5j dGlvbihpLGgpe3RoaXMubWFwKGksaCk7fSxmaWx0ZXI6ZihmdW5jdGlvbihpLGgp e2lmKHR5cGVvZiBpIT0nZnVuY3Rpb24nKXRocm93IG5ldyBUeXBlRXJyb3IoKTt2 YXIgaixtLGs9dGhpcy5sZW5ndGgsbD1bXTtmb3Ioaj0wO2o8azsrK2opaWYoaiBp biB0aGlzKXttPXRoaXNbal07aWYoaS5jYWxsKGgsbSxqLHRoaXMpKWwucHVzaCht KTt9cmV0dXJuIGw7fSksZXZlcnk6ZihmdW5jdGlvbihpLGgpe2lmKHR5cGVvZiBp IT09J2Z1bmN0aW9uJyl0aHJvdyBuZXcgVHlwZUVycm9yKCk7dmFyIGw9bmV3IE9i amVjdCh0aGlzKTt2YXIgaz1sLmxlbmd0aDtmb3IodmFyIGo9MDtqPGs7aisrKWlm KGogaW4gbClpZighaS5jYWxsKGgsbFtqXSxqLGwpKXJldHVybiBmYWxzZTtyZXR1 cm4gdHJ1ZTt9KSxzb21lOmYoZnVuY3Rpb24oaSxoKXtpZih0eXBlb2YgaSE9PSdm dW5jdGlvbicpdGhyb3cgbmV3IFR5cGVFcnJvcigpO3ZhciBsPW5ldyBPYmplY3Qo dGhpcyk7dmFyIGs9bC5sZW5ndGg7Zm9yKHZhciBqPTA7ajxrO2orKylpZihqIGlu IGwpaWYoaS5jYWxsKGgsbFtqXSxqLGwpKXJldHVybiB0cnVlO3JldHVybiBmYWxz ZTt9KSxyZWR1Y2U6bnVsbCxyZWR1Y2VSaWdodDpudWxsLHNvcnQ6ZihBcnJheS5w cm90b3R5cGUuc29ydCkscmV2ZXJzZTpmKEFycmF5LnByb3RvdHlwZS5yZXZlcnNl KSxjb25jYXQ6ZihBcnJheS5wcm90b3R5cGUuY29uY2F0KSxzbGljZTpmKEFycmF5 LnByb3RvdHlwZS5zbGljZSksaW5kZXhPZjpmKEFycmF5LnByb3RvdHlwZS5pbmRl eE9mfHxmdW5jdGlvbihqLGgpe3ZhciBpPXRoaXMubGVuZ3RoO2h8PTA7aWYoaDww KWgrPWk7Zm9yKDtoPGk7aCsrKWlmKGggaW4gdGhpcyYmdGhpc1toXT09PWopcmV0 dXJuIGg7cmV0dXJuIC0xO30pLGNvbnRhaW5zOmZ1bmN0aW9uKGgpe3JldHVybiB0 aGlzLmluZGV4T2YoaCkhPS0xO30scmVtb3ZlOmZ1bmN0aW9uKGkpe3ZhciBoPXRo aXMuaW5kZXhPZihpKTtpZihoIT0tMSl0aGlzLnNwbGljZShoLDEpO319KTtBcnJh eS5wcm90b3R5cGUuZWFjaD1BcnJheS5wcm90b3R5cGUuZm9yRWFjaDthLmluZm9y bSgnZmJqcy9wcm90b3R5cGVzJyk7fSwzKTsKX19lKCJKU0NDIixbImFycmF5LWV4 dGVuc2lvbnMiLCJ1dGlsIiwiaXNFbXB0eSJdLGZ1bmN0aW9uKGYsbCxrLGQpe2wo ImFycmF5LWV4dGVuc2lvbnMiKTt2YXIgYj1sKCJ1dGlsIik7dmFyIGk9bCgiaXNF bXB0eSIpO3ZhciBlPXt9O3ZhciBnPXt9O3ZhciBqPXt9O2Z1bmN0aW9uIGMobil7 dmFyIG87dmFyIG09ZmFsc2U7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoIW0pe289bigp O209dHJ1ZTt9cmV0dXJuIG87fTt9ZnVuY3Rpb24gaChtLG8pe2lmKGkobSkpcmV0 dXJuO2Zvcih2YXIgbiBpbiBtKXtlW25dPWMobVtuXSk7aWYobyl7aWYoIWpbb10p altvXT1bXTtqW29dLnB1c2gobik7fX19dmFyIGE9e2dldDpmdW5jdGlvbihtKXty ZXR1cm4gKGVbbV18fGdbbV0pKCk7fSxpbml0OmZ1bmN0aW9uKG0pe2gobSk7fSxp bml0Rm9yUGFnZWxldDpmdW5jdGlvbihuLG0pe2gobSxuKTt9LGNsZWFyRm9yUGFn ZWxldDpmdW5jdGlvbihvKXtpZihqW29dKXtmb3IodmFyIG09MDttPGpbb10ubGVu Z3RoO20rKyl7dmFyIG49altvXVttXTtnW25dPWVbbl07ZGVsZXRlIGVbbl07fWRl bGV0ZSBqW29dO319fTtrLmV4cG9ydHM9Zi5KU0NDPWE7fSk7Cl9fZSgiaW52b2tl Q2FsbGJhY2tzIixbXSxmdW5jdGlvbihiLGUsZCxhKXtmdW5jdGlvbiBjKGcsaSl7 aWYoZylmb3IodmFyIGg9MDtoPGcubGVuZ3RoO2grKyl0cnl7KG5ldyBGdW5jdGlv bihnW2hdKSkuYXBwbHkoaSk7fWNhdGNoKGYpe319ZC5leHBvcnRzPWM7fSk7Cl9f ZSgiYmlnLXBpcGUiLFsiZnVuY3Rpb24tZXh0ZW5zaW9ucyIsImFyYml0ZXIiLCJi b290bG9hZGVyIiwiRHluYVRlbXBsYXRlIiwiRW52IiwiSlNDQyIsInV0aWwiLCJk b20tY29yZSIsImJpbmQiLCJjb3B5UHJvcGVydGllcyIsImhhc0FycmF5TmF0dXJl IiwiaW52b2tlQ2FsbGJhY2tzIl0sZnVuY3Rpb24oZ2xvYmFsLHJlcXVpcmUsbW9k dWxlLGV4cG9ydHMpe3JlcXVpcmUoJ2Z1bmN0aW9uLWV4dGVuc2lvbnMnKTt2YXIg QXJiaXRlcj1yZXF1aXJlKCdhcmJpdGVyJyk7dmFyIEJvb3Rsb2FkZXI9cmVxdWly ZSgnYm9vdGxvYWRlcicpO3ZhciBEeW5hVGVtcGxhdGU9cmVxdWlyZSgnRHluYVRl bXBsYXRlJyk7dmFyIEVudj1yZXF1aXJlKCdFbnYnKTt2YXIgSlNDQz1yZXF1aXJl KCdKU0NDJyk7dmFyIFV0aWw9cmVxdWlyZSgndXRpbCcpO3ZhciAkPXJlcXVpcmUo J2RvbS1jb3JlJykuJDt2YXIgYmluZD1yZXF1aXJlKCdiaW5kJyk7dmFyIGNvcHlQ cm9wZXJ0aWVzPXJlcXVpcmUoJ2NvcHlQcm9wZXJ0aWVzJyk7dmFyIGdlPXJlcXVp cmUoJ2RvbS1jb3JlJykuZ2U7dmFyIGhhc0FycmF5TmF0dXJlPXJlcXVpcmUoJ2hh c0FycmF5TmF0dXJlJyk7dmFyIGludm9rZUNhbGxiYWNrcz1yZXF1aXJlKCdpbnZv a2VDYWxsYmFja3MnKTt2YXIgaWU9ZG9jdW1lbnQuZG9jdW1lbnRNb2RlfHwrKC9N U0lFLihcZCspLy5leGVjKG5hdmlnYXRvci51c2VyQWdlbnQpfHxbXSlbMV07ZnVu Y3Rpb24gb2JqZWN0aWZ5KHRoaW5nKXtyZXR1cm4gKCF0aGluZ3x8aGFzQXJyYXlO YXR1cmUodGhpbmcpJiZ0aGluZy5sZW5ndGg9PT0wKT97fTp0aGluZzt9ZnVuY3Rp b24gZ2V0Q29udGVudE1hcmt1cChjb250ZW50KXtpZighY29udGVudHx8dHlwZW9m IGNvbnRlbnQ9PT0nc3RyaW5nJylyZXR1cm4gY29udGVudDtpZihjb250ZW50LmNv bnRhaW5lcl9pZCl7dmFyIGNvbnRhaW5lcj0kKGNvbnRlbnQuY29udGFpbmVyX2lk KTtjb250ZW50PWV4dHJhY3RNYXJrdXAoY29udGFpbmVyKXx8Jyc7Y29udGFpbmVy LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY29udGFpbmVyKTtyZXR1cm4gY29udGVu dDt9aWYoY29udGVudC5sZW5ndGg+PTIpcmV0dXJuIER5bmFUZW1wbGF0ZS5yZW5k ZXJUb0h0bWwoY29udGVudFswXSxjb250ZW50WzFdKTtyZXR1cm4gbnVsbDt9ZnVu Y3Rpb24gZXh0cmFjdE1hcmt1cChjb250YWluZXIpe2lmKCFjb250YWluZXIuZmly c3RDaGlsZCl7Qm9vdGxvYWRlci5sb2FkQ29tcG9uZW50cygnZXJyb3Itc2lnbmFs JyxmdW5jdGlvbigpe3NlbmRfZXJyb3Jfc2lnbmFsKCdiaWdwaXBlJywnUGFnZWxl dCBtYXJrdXAgY29udGFpbmVyIGlzIGVtcHR5LicpO30pO3JldHVybiBudWxsO31p Zihjb250YWluZXIuZmlyc3RDaGlsZC5ub2RlVHlwZSE9PTgpcmV0dXJuIG51bGw7 dmFyIGNvbW1lbnQ9Y29udGFpbmVyLmZpcnN0Q2hpbGQubm9kZVZhbHVlO2NvbW1l bnQ9Y29tbWVudC5zdWJzdHJpbmcoMSxjb21tZW50Lmxlbmd0aC0xKTtyZXR1cm4g Y29tbWVudC5yZXBsYWNlKC9cXChbXHNcU118JCkvZywnJDEnKTt9ZnVuY3Rpb24g YXBwZW5kTm9kZXMoY29udGFpbmVyLG1hcmt1cCl7dmFyIG5uPWRvY3VtZW50LmNy ZWF0ZUVsZW1lbnQoJ2RpdicpO3ZhciBoYXg9aWU8NztpZihoYXgpY29udGFpbmVy LmFwcGVuZENoaWxkKG5uKTtubi5pbm5lckhUTUw9bWFya3VwO3ZhciBmcmFnPWRv Y3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTt3aGlsZShubi5maXJzdENo aWxkKWZyYWcuYXBwZW5kQ2hpbGQobm4uZmlyc3RDaGlsZCk7Y29udGFpbmVyLmFw cGVuZENoaWxkKGZyYWcpO2lmKGhheCljb250YWluZXIucmVtb3ZlQ2hpbGQobm4p O31mdW5jdGlvbiBCaWdQaXBlKG9wdGlvbnMpe2NvcHlQcm9wZXJ0aWVzKHRoaXMs e2FyYml0ZXI6QXJiaXRlcixyb290Tm9kZUlEOidjb250ZW50JyxsaWQ6MCxpc0Fq YXg6ZmFsc2UscnJFbmFibGVkOnRydWUsZG9tQ29udGVudENhbGxiYWNrOmRvbWNv bnRlbnRfY2FsbGJhY2ssb25sb2FkQ2FsbGJhY2s6b25sb2FkX2NhbGxiYWNrLGRv bUNvbnRlbnRFdnQ6T25sb2FkRXZlbnQuT05MT0FEX0RPTUNPTlRFTlRfQ0FMTEJB Q0ssb25sb2FkRXZ0Ok9ubG9hZEV2ZW50Lk9OTE9BRF9DQUxMQkFDSyxmb3JjZUZp bmlzaDpmYWxzZSxqc0VhcmxpZXI6ZmFsc2UsX3BoYXNlRG9uZUNhbGxiYWNrczpb XSxfY3VycmVudFBoYXNlOjAsX2xhc3RQaGFzZTotMX0pO2NvcHlQcm9wZXJ0aWVz KHRoaXMsb3B0aW9ucyk7dGhpcy5fY2F2YWxyeT0odGhpcy5saWQmJndpbmRvdy5D YXZhbHJ5TG9nZ2VyKT9DYXZhbHJ5TG9nZ2VyLmdldEluc3RhbmNlKHRoaXMubGlk KTpudWxsO3RoaXMuX2luc3Q9dGhpcy5fY2F2YWxyeSYmKHdpbmRvdy5fcGFnZWxl dF9wcm9maWxlfHx0aGlzLl9jYXZhbHJ5LmlzUGFnZWxldFByb2ZpbGVyKCkpO0Jp Z1BpcGUuX2N1cnJlbnRfaW5zdGFuY2U9dGhpcztpZihFbnYudHRpX3Zpc2lvbj09 MSkobmV3IFRUSVZpc3VhbGl6ZXIodGhpcykpLmluaXQoKTt0aGlzLmFyYml0ZXIu cmVnaXN0ZXJDYWxsYmFjayh0aGlzLmRvbUNvbnRlbnRDYWxsYmFjayxbJ3BhZ2Vs ZXRfZGlzcGxheWVkX2FsbCddKTt0aGlzLmFyYml0ZXIuaW5mb3JtKCdwaGFzZV9i ZWdpbl8wJyx0cnVlLEFyYml0ZXIuQkVIQVZJT1JfU1RBVEUpO3RoaXMuX2luc3Qm JnRoaXMuX2NhdmFscnkuc2V0VGltZVN0YW1wKCd0X3BoYXNlX2JlZ2luXzAnKTt0 aGlzLm9ubG9hZENhbGxiYWNrPXRoaXMuYXJiaXRlci5yZWdpc3RlckNhbGxiYWNr KHRoaXMub25sb2FkQ2FsbGJhY2ssWydwYWdlbGV0X2Rpc3BsYXllZF9hbGwnXSk7 fWNvcHlQcm9wZXJ0aWVzKEJpZ1BpcGUucHJvdG90eXBlLHtfZGlzcGxheVBhZ2Vs ZXRIYW5kbGVyOmZ1bmN0aW9uKHBhZ2VsZXQpe2lmKHRoaXMuZGlzcGxheUNhbGxi YWNrKXt0aGlzLmRpc3BsYXlDYWxsYmFjayh0aGlzLl9kaXNwbGF5UGFnZWxldC5i aW5kKHRoaXMscGFnZWxldCkpO31lbHNlIHRoaXMuX2Rpc3BsYXlQYWdlbGV0KHBh Z2VsZXQpO30sX2Rpc3BsYXlQYWdlbGV0OmZ1bmN0aW9uKHBhZ2VsZXQpe2lmKHRo aXMuX2luc3QpdGhpcy5fY2F2YWxyeS5vblBhZ2VsZXRFdmVudCgnZGlzcGxheV9z dGFydCcscGFnZWxldC5pZCk7cGFnZWxldC5jb250ZW50PW9iamVjdGlmeShwYWdl bGV0LmNvbnRlbnQpO3ZhciBpbmZvcm1fbm93PXRydWU7Zm9yKHZhciB0YXJnZXRf aWQgaW4gcGFnZWxldC5jb250ZW50KXt2YXIgY29udGVudD1wYWdlbGV0LmNvbnRl bnRbdGFyZ2V0X2lkXTtpZihwYWdlbGV0LmFwcGVuZCl0YXJnZXRfaWQ9dGhpcy5f Z2V0QXBwZW5kVGFyZ2V0SUQocGFnZWxldCk7dmFyIHRhcmdldD1nZSh0YXJnZXRf aWQpO2lmKHRhcmdldCl7Y29udGVudD1nZXRDb250ZW50TWFya3VwKGNvbnRlbnQp O2lmKGNvbnRlbnQpaWYoIXBhZ2VsZXQuYXBwZW5kJiZwYWdlbGV0Lmhhc19pbmxp bmVfanMpe2lmKHdpbmRvdy5ET00mJndpbmRvdy5IVE1MKXtET00uc2V0Q29udGVu dCh0YXJnZXQsSFRNTChjb250ZW50KSk7fWVsc2V7aW5mb3JtX25vdz1mYWxzZTtC b290bG9hZGVyLmxvYWRDb21wb25lbnRzKFsnZG9tJywnZG9tLWh0bWwnXSxmdW5j dGlvbigpe0RPTS5zZXRDb250ZW50KHRhcmdldCxIVE1MKGNvbnRlbnQpKTt0aGlz LmFyYml0ZXIuaW5mb3JtKHBhZ2VsZXQuaWQrJ19kaXNwbGF5ZWQnLHRydWUsQXJi aXRlci5CRUhBVklPUl9TVEFURSk7fS5iaW5kKHRoaXMpKTt9fWVsc2UgaWYocGFn ZWxldC5hcHBlbmR8fGllPDgpe2lmKCFwYWdlbGV0LmFwcGVuZCl3aGlsZSh0YXJn ZXQuZmlyc3RDaGlsZCl0YXJnZXQucmVtb3ZlQ2hpbGQodGFyZ2V0LmZpcnN0Q2hp bGQpO2FwcGVuZE5vZGVzKHRhcmdldCxjb250ZW50KTt9ZWxzZSB0YXJnZXQuaW5u ZXJIVE1MPWNvbnRlbnQ7aWYodGhpcy5faW5zdCl0aGlzLl9jYXZhbHJ5Lm9uUGFn ZWxldEV2ZW50KCdkaXNwbGF5JyxwYWdlbGV0LmlkKTt2YXIgcmVmZXJyZXI9dGFy Z2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1yZWZlcnJlcicpO2lmKCFyZWZlcnJlcil0 YXJnZXQuc2V0QXR0cmlidXRlKCdkYXRhLXJlZmVycmVyJyx0YXJnZXRfaWQpO319 aWYoaW5mb3JtX25vdyl0aGlzLmFyYml0ZXIuaW5mb3JtKHBhZ2VsZXQuaWQrJ19k aXNwbGF5ZWQnLHRydWUsQXJiaXRlci5CRUhBVklPUl9TVEFURSk7aWYocGFnZWxl dC5jYWNoZV9oaXQmJkVudi5wY19kZWJ1Zz09MSkkKHBhZ2VsZXQuaWQpLnN0eWxl LmJvcmRlcj0iMXB4IHJlZCBzb2xpZCI7fSxfZ2V0QXBwZW5kVGFyZ2V0SUQ6ZnVu Y3Rpb24ocGFnZWxldCl7aWYoIXBhZ2VsZXQuYXBwZW5kKXJldHVybiBudWxsO3Jl dHVybiAocGFnZWxldC5hcHBlbmQ9PT0nYmlncGlwZV9yb290Jyk/dGhpcy5yb290 Tm9kZUlEOnBhZ2VsZXQuYXBwZW5kO30sX2Rvd25sb2FkSnNGb3JQYWdlbGV0OmZ1 bmN0aW9uKHBhZ2VsZXQpe0Jvb3Rsb2FkZXIubG9hZFJlc291cmNlcyhwYWdlbGV0 LmpzfHxbXSxiaW5kKHRoaXMsZnVuY3Rpb24oKXtpZih0aGlzLl9pbnN0KXRoaXMu X2NhdmFscnkub25QYWdlbGV0RXZlbnQoJ2pzZG9uZScscGFnZWxldC5pZCk7cGFn ZWxldC5yZXF1aXJlcz1wYWdlbGV0LnJlcXVpcmVzfHxbXTtpZighdGhpcy5pc0Fq YXh8fHBhZ2VsZXQucGhhc2U+PTEpcGFnZWxldC5yZXF1aXJlcy5wdXNoKCd1aXBh Z2Vfb25sb2FkJyk7dmFyIGZpcmVfb25sb2Fkcz1iaW5kKHRoaXMsZnVuY3Rpb24o KXt0aGlzLl9pc1JlbGV2YW50KCkmJmludm9rZUNhbGxiYWNrcyhwYWdlbGV0Lm9u bG9hZCk7aWYodGhpcy5faW5zdCl0aGlzLl9jYXZhbHJ5Lm9uUGFnZWxldEV2ZW50 KCdvbmxvYWQnLHBhZ2VsZXQuaWQpO3RoaXMuYXJiaXRlci5pbmZvcm0oJ3BhZ2Vs ZXRfb25sb2FkJyx0cnVlLEFyYml0ZXIuQkVIQVZJT1JfRVZFTlQpO3BhZ2VsZXQu cHJvdmlkZXMmJnRoaXMuYXJiaXRlci5pbmZvcm0ocGFnZWxldC5wcm92aWRlcyx0 cnVlLEFyYml0ZXIuQkVIQVZJT1JfU1RBVEUpO30pO3ZhciBmaXJlX29uYWZ0ZXJs b2Fkcz1iaW5kKHRoaXMsZnVuY3Rpb24oKXt0aGlzLl9pc1JlbGV2YW50KCkmJmlu dm9rZUNhbGxiYWNrcyhwYWdlbGV0Lm9uYWZ0ZXJsb2FkKTt9KTtpZih0aGlzLmRl bGF5KXt2YXIgdGVtcD1maXJlX29ubG9hZHM7ZmlyZV9vbmxvYWRzPWZ1bmN0aW9u KCl7c2V0VGltZW91dCh0ZW1wLDQwMCk7fTt9dGhpcy5hcmJpdGVyLnJlZ2lzdGVy Q2FsbGJhY2soZmlyZV9vbmxvYWRzLHBhZ2VsZXQucmVxdWlyZXMpO3RoaXMuYXJi aXRlci5yZWdpc3RlckNhbGxiYWNrKGZpcmVfb25hZnRlcmxvYWRzLFt0aGlzLm9u bG9hZEV2dF0pO30pLGZhbHNlLHBhZ2VsZXQuaWQpO30sX2Rvd25sb2FkQ3NzQW5k RGlzcGxheVBhZ2VsZXQ6ZnVuY3Rpb24ocGFnZWxldCl7aWYodGhpcy5faW5zdCl0 aGlzLl9jYXZhbHJ5Lm9uUGFnZWxldEV2ZW50KCdjc3MnLHBhZ2VsZXQuaWQpO3Zh ciBmbj1iaW5kKHRoaXMsZnVuY3Rpb24oKXt2YXIgZGVwPXBhZ2VsZXQuZGlzcGxh eV9kZXBlbmRlbmN5fHxbXTt2YXIgc2lnbmFscz1bXTtmb3IodmFyIGk9MDtpPGRl cC5sZW5ndGg7aSsrKXNpZ25hbHMucHVzaChkZXBbaV0rJ19kaXNwbGF5ZWQnKTt0 aGlzLmFyYml0ZXIucmVnaXN0ZXJDYWxsYmFjayh0aGlzLl9kaXNwbGF5UGFnZWxl dEhhbmRsZXIuYmluZCh0aGlzLHBhZ2VsZXQpLHNpZ25hbHMpO30pO3ZhciBjc3M9 cGFnZWxldC5jc3N8fFtdO0Jvb3Rsb2FkZXIubG9hZFJlc291cmNlcyhjc3MsZm4s ZmFsc2UscGFnZWxldC5pZCk7aWYodGhpcy5faW5zdCl0aGlzLl9jYXZhbHJ5Lm9u UGFnZWxldEV2ZW50KCdjc3NfZW5kJyxwYWdlbGV0LmlkKTt9LF9kb3dubG9hZEFu ZFNjaGVkdWxlRGlzcGxheUpTOmZ1bmN0aW9uKHBhZ2VsZXQpe3ZhciBqcz1wYWdl bGV0LmpzfHxbXTt2YXIgZGlzcGxheWpzPVtdO2Zvcih2YXIgaT0wO2k8anMubGVu Z3RoO2krKylpZihCb290bG9hZGVyLmlzRGlzcGxheUpTKGpzW2ldKSlkaXNwbGF5 anMucHVzaChqc1tpXSk7Qm9vdGxvYWRlci5sb2FkUmVzb3VyY2VzKGRpc3BsYXlq cyxiaW5kKHRoaXMsZnVuY3Rpb24oKXtpZihwYWdlbGV0Lm9uZGlzcGxheSYmcGFn ZWxldC5vbmRpc3BsYXkubGVuZ3RoKXRoaXMuYXJiaXRlci5yZWdpc3RlckNhbGxi YWNrKGZ1bmN0aW9uKCl7aW52b2tlQ2FsbGJhY2tzKHBhZ2VsZXQub25kaXNwbGF5 KTt9LFtwYWdlbGV0LmlkKydfZGlzcGxheWVkJ10pO30pKTt9LG9uUGFnZWxldEFy cml2ZTpmdW5jdGlvbihwYWdlbGV0KXtpZih0aGlzLl9pbnN0KXt0aGlzLl9jYXZh bHJ5Lm9uUGFnZWxldEV2ZW50KCdhcnJpdmUnLHBhZ2VsZXQuaWQpO3RoaXMuX2Nh dmFscnkuZXZlbnRzW3BhZ2VsZXQuaWRdLnBoYXNlPXBhZ2VsZXQucGhhc2U7fXZh ciBwaGFzZT1wYWdlbGV0LnBoYXNlO2lmKCF0aGlzLl9waGFzZURvbmVDYWxsYmFj a3NbcGhhc2VdKXRoaXMuX3BoYXNlRG9uZUNhbGxiYWNrc1twaGFzZV09dGhpcy5h cmJpdGVyLnJlZ2lzdGVyQ2FsbGJhY2sodGhpcy5fb25QaGFzZURvbmUuYmluZCh0 aGlzKSxbJ3BoYXNlX2NvbXBsZXRlXycrcGhhc2VdKTt0aGlzLmFyYml0ZXIucmVn aXN0ZXJDYWxsYmFjayh0aGlzLl9waGFzZURvbmVDYWxsYmFja3NbcGhhc2VdLFtw YWdlbGV0LmlkKydfZGlzcGxheWVkJ10pO2lmKHBhZ2VsZXQuY2FjaGVhYmxlKXtp ZihwYWdlbGV0LmNhY2hlX2hpdCl7QXJiaXRlci5yZWdpc3RlckNhbGxiYWNrKGZ1 bmN0aW9uKCl7dGhpcy5fcHJvY2Vzc1BhZ2VsZXQodGhpcy5sb2FkRnJvbUNhY2hl KHBhZ2VsZXQpKTt9LmJpbmQodGhpcyksWydwYWdlbGV0X2NhY2hlX2xvYWRlZCdd KTt9ZWxzZXtQYWdlbGV0Q2FjaGUud3JpdGUocGFnZWxldCk7dGhpcy5fcHJvY2Vz c1BhZ2VsZXQocGFnZWxldCk7fX1lbHNlIHRoaXMuX3Byb2Nlc3NQYWdlbGV0KHBh Z2VsZXQpO2lmKHRoaXMuX2luc3QpdGhpcy5fY2F2YWxyeS5vblBhZ2VsZXRFdmVu dCgnYXJyaXZlX2VuZCcscGFnZWxldC5pZCk7fSxfcHJvY2Vzc1BhZ2VsZXQ6ZnVu Y3Rpb24ocGFnZWxldCl7dmFyIHBoYXNlPXBhZ2VsZXQucGhhc2U7dmFyIHRhcmdl dF9pZD10aGlzLl9nZXRBcHBlbmRUYXJnZXRJRChwYWdlbGV0KXx8cGFnZWxldC5p ZDtCaWdQaXBlLnBhZ2VsZXRJRHNbdGFyZ2V0X2lkXT10YXJnZXRfaWQ7aWYocGFn ZWxldC50aGVfZW5kKXRoaXMuX2xhc3RQaGFzZT1wYWdlbGV0LnBoYXNlO2lmKHBh Z2VsZXQudHRpX3BoYXNlIT09dW5kZWZpbmVkKXRoaXMuX3R0aVBoYXNlPXBhZ2Vs ZXQudHRpX3BoYXNlO2lmKHBhZ2VsZXQuaXNfc2Vjb25kX3RvX2xhc3RfcGhhc2Up dGhpcy5fc2Vjb25kVG9MYXN0UGhhc2U9cGFnZWxldC5waGFzZTtwYWdlbGV0Lmpz Y2MmJmludm9rZUNhbGxiYWNrcyhbcGFnZWxldC5qc2NjXSk7aWYocGFnZWxldC5q c2NjX21hcCl7dmFyIGpzY2NfbWFwPWV2YWwocGFnZWxldC5qc2NjX21hcCk7SlND Qy5pbml0Rm9yUGFnZWxldCh0YXJnZXRfaWQsanNjY19tYXApO31wYWdlbGV0LnRw bHRzJiZEeW5hVGVtcGxhdGUucmVnaXN0ZXJUZW1wbGF0ZXMocGFnZWxldC50cGx0 cyk7Qm9vdGxvYWRlci5zZXRSZXNvdXJjZU1hcChwYWdlbGV0LnJlc291cmNlX21h cCk7Qm9vdGxvYWRlci5lbmFibGVCb290bG9hZChvYmplY3RpZnkocGFnZWxldC5i b290bG9hZGFibGUpKTt2YXIgcGhhc2Vfc3RhcnRfZXZ0PSdwaGFzZV9iZWdpbl8n K3BoYXNlO3RoaXMuYXJiaXRlci5yZWdpc3RlckNhbGxiYWNrKHRoaXMuX2Rvd25s b2FkQ3NzQW5kRGlzcGxheVBhZ2VsZXQuYmluZCh0aGlzLHBhZ2VsZXQpLFtwaGFz ZV9zdGFydF9ldnRdKTt0aGlzLmFyYml0ZXIucmVnaXN0ZXJDYWxsYmFjayh0aGlz Ll9kb3dubG9hZEFuZFNjaGVkdWxlRGlzcGxheUpTLmJpbmQodGhpcyxwYWdlbGV0 KSxbcGhhc2Vfc3RhcnRfZXZ0XSk7dmFyIGpzX2V2ZW50cz1bcGFnZWxldC5pZCsn X2Rpc3BsYXllZCddO2lmKCF0aGlzLmpzTm9uQmxvY2spaWYodGhpcy5qc0Vhcmxp ZXIpe2pzX2V2ZW50cy5wdXNoKCdzdGFydF90b19kb3dubG9hZF9qcycpO31lbHNl IGpzX2V2ZW50cy5wdXNoKHRoaXMuZG9tQ29udGVudEV2dCk7dGhpcy5hcmJpdGVy LnJlZ2lzdGVyQ2FsbGJhY2sodGhpcy5vbmxvYWRDYWxsYmFjayxbJ3BhZ2VsZXRf b25sb2FkJ10pO3RoaXMuYXJiaXRlci5yZWdpc3RlckNhbGxiYWNrKHRoaXMuX2Rv d25sb2FkSnNGb3JQYWdlbGV0LmJpbmQodGhpcyxwYWdlbGV0KSxqc19ldmVudHMp O2lmKHBhZ2VsZXQuanNjYWxscyl0aGlzLmFyYml0ZXIucmVnaXN0ZXJDYWxsYmFj ayhmdW5jdGlvbigpe2ludm9rZUNhbGxiYWNrcyhbcGFnZWxldC5qc2NhbGxzXSk7 fSxbcGFnZWxldC5pZCsnX2Rpc3BsYXllZCddKTtwYWdlbGV0LmlzX2xhc3QmJnRo aXMuYXJiaXRlci5pbmZvcm0oJ3BoYXNlX2NvbXBsZXRlXycrcGhhc2UsdHJ1ZSxB cmJpdGVyLkJFSEFWSU9SX1NUQVRFKTt9LF9vblBoYXNlRG9uZTpmdW5jdGlvbigp e2lmKHRoaXMuX2N1cnJlbnRQaGFzZT09PXRoaXMuX3R0aVBoYXNlJiZ0aGlzLnJy RW5hYmxlZCl7dGhpcy5hcmJpdGVyLmluZm9ybSgndHRpX2JpZ3BpcGUnLHtzOnRo aXMubGlkfSxBcmJpdGVyLkJFSEFWSU9SX0VWRU5UKTt0aGlzLl9jYXZhbHJ5JiZ0 aGlzLl9jYXZhbHJ5LnNldFRUSVBoYXNlKHRoaXMuX3R0aVBoYXNlKS5tZWFzdXJl UGFnZUxvYWQodHJ1ZSk7fXZhciBuZXh0UGhhc2U9dGhpcy5fY3VycmVudFBoYXNl KzE7dmFyIGZuPShmdW5jdGlvbih3YXNfc2Vjb25kX3RvX2xhc3RfcGhhc2Upe2lm KHRoaXMuanNFYXJsaWVyJiZ3YXNfc2Vjb25kX3RvX2xhc3RfcGhhc2UpdGhpcy5h cmJpdGVyLmluZm9ybSgnc3RhcnRfdG9fZG93bmxvYWRfanMnLHRydWUsQXJiaXRl ci5CRUhBVklPUl9TVEFURSk7dGhpcy5faW5zdCYmdGhpcy5fY2F2YWxyeS5zZXRU aW1lU3RhbXAoJ3RfcGhhc2VfYmVnaW5fJytuZXh0UGhhc2UpO3RoaXMuYXJiaXRl ci5pbmZvcm0oJ3BoYXNlX2JlZ2luXycrbmV4dFBoYXNlLHRydWUsQXJiaXRlci5C RUhBVklPUl9TVEFURSk7fSkuYmluZCh0aGlzLHRoaXMuX2N1cnJlbnRQaGFzZT09 PXRoaXMuX3NlY29uZFRvTGFzdFBoYXNlKTtpZih0aGlzLl9jdXJyZW50UGhhc2U9 PT10aGlzLl9sYXN0UGhhc2UmJnRoaXMuX2lzUmVsZXZhbnQoKSl0aGlzLmFyYml0 ZXIuaW5mb3JtKCdwYWdlbGV0X2Rpc3BsYXllZF9hbGwnLHRydWUsQXJiaXRlci5C RUhBVklPUl9TVEFURSk7dGhpcy5fY3VycmVudFBoYXNlKys7aWYoaWUpe3NldFRp bWVvdXQoZm4sMjApO31lbHNlIGZuKCk7fSxfaXNSZWxldmFudDpmdW5jdGlvbigp e3JldHVybiB0aGlzPT1CaWdQaXBlLl9jdXJyZW50X2luc3RhbmNlfHx0aGlzLmpz Tm9uQmxvY2t8fHRoaXMuZm9yY2VGaW5pc2g7fX0pO0JpZ1BpcGUucGFnZWxldElE cz17fTtnbG9iYWwuQmlnUGlwZT1tb2R1bGUuZXhwb3J0cz1CaWdQaXBlO30sMyk7 Cl9fZSgiQ2xhc3MiLFsiZnVuY3Rpb24tZXh0ZW5zaW9ucyIsImFyYml0ZXIiLCJi aW5kIl0sZnVuY3Rpb24obixwLG8sbSl7cCgnZnVuY3Rpb24tZXh0ZW5zaW9ucycp O3ZhciBhPXAoJ2FyYml0ZXInKTt2YXIgbD1wKCdiaW5kJyk7dmFyIGg9e307dmFy IGQ9bnVsbDt2YXIgYj17ZXh0ZW5kOmZ1bmN0aW9uKHEscil7aWYoIWQpZD1hLnN1 YnNjcmliZShhLkJPT1RMT0FELGopO2lmKHR5cGVvZiByPT0nc3RyaW5nJyl7aShx LHIpO31lbHNlIGMocSxyKTt9LG1peGluOmZ1bmN0aW9uKHMscil7dmFyIHE9QXJy YXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtxWzBdPXFbMF0ucHJv dG90eXBlO0Z1bmN0aW9uLm1peGluLmFwcGx5KEZ1bmN0aW9uLHEpO319O2Z1bmN0 aW9uIGkocixzKXtyLl9fY2xhc3NfZXh0ZW5kaW5nPXRydWU7dmFyIHE9YS5yZWdp c3RlckNhbGxiYWNrKGwobnVsbCxjLHIscyksW2EuRlVOQ1RJT05fRVhURU5TSU9O KycvJytzLGEuQk9PVExPQURdKTtpZihxIT09bnVsbCloW3NdPXRydWU7fWZ1bmN0 aW9uIGooKXtmb3IodmFyIHEgaW4gaClpZighIW5bcV0pe2RlbGV0ZSBoW3FdO2lm KCFuW3FdLl9fY2xhc3NfZXh0ZW5kaW5nKXthLmluZm9ybShhLkZVTkNUSU9OX0VY VEVOU0lPTisnLycrcSx0cnVlLGEuQkVIQVZJT1JfU1RBVEUpO31lbHNlIG5bcV0u X19jbGFzc19uYW1lPXE7fX1mdW5jdGlvbiBjKHEscyl7ZGVsZXRlIHEuX19jbGFz c19leHRlbmRpbmc7cz10eXBlb2Ygcz09J3N0cmluZyc/bltzXTpzO3ZhciB0PWco cywwKTt2YXIgcj1nKHEsdC5wcm90b3R5cGUuX19sZXZlbCsxKTtyLnBhcmVudD10 O2lmKCEhcS5fX2NsYXNzX25hbWUpYS5pbmZvcm0oYS5GVU5DVElPTl9FWFRFTlNJ T04rJy8nK3EuX19jbGFzc19uYW1lLHRydWUsYS5CRUhBVklPUl9TVEFURSk7fWZ1 bmN0aW9uIGcocyxxKXtpZihzLl9tZXRhcHJvdG90eXBlKXJldHVybiBzLl9tZXRh cHJvdG90eXBlO3ZhciByPW5ldyBGdW5jdGlvbigpO3IuY29uc3RydWN0PWU7ci5w cm90b3R5cGUuY29uc3RydWN0PWsocyxxLHRydWUpO3IucHJvdG90eXBlLl9fbGV2 ZWw9cTtyLmJhc2U9cztzLnByb3RvdHlwZS5wYXJlbnQ9cjtzLl9tZXRhcHJvdG90 eXBlPXI7cmV0dXJuIHI7fWZ1bmN0aW9uIGUocSl7ZihxLnBhcmVudCk7dmFyIHQ9 W107dmFyIHM9cTt3aGlsZShzLnBhcmVudCl7dmFyIHI9bmV3IHMucGFyZW50KCk7 dC5wdXNoKHIpO3IuX19pbnN0YW5jZT1xO3M9cy5wYXJlbnQ7fXEucGFyZW50PXRb MV07dC5yZXZlcnNlKCk7dC5wb3AoKTtxLl9fcGFyZW50cz10O3EuX19pbnN0YW5j ZT1xO3JldHVybiBxLnBhcmVudC5jb25zdHJ1Y3QuYXBwbHkocS5wYXJlbnQsYXJn dW1lbnRzKTt9ZnVuY3Rpb24gZih0KXtpZih0LmluaXRpYWxpemVkKXJldHVybjt2 YXIgcT10LmJhc2UucHJvdG90eXBlO2lmKHQucGFyZW50KXtmKHQucGFyZW50KTt2 YXIgdT10LnBhcmVudC5wcm90b3R5cGU7Zm9yKHZhciByIGluIHUpaWYociE9J19f bGV2ZWwnJiZyIT0nY29uc3RydWN0JyYmcVtyXT09PXVuZGVmaW5lZClxW3JdPXQu cHJvdG90eXBlW3JdPXVbcl07fXQuaW5pdGlhbGl6ZWQ9dHJ1ZTt2YXIgcz10LnBy b3RvdHlwZS5fX2xldmVsO2Zvcih2YXIgciBpbiBxKWlmKHIhPSdwYXJlbnQnKXFb cl09dC5wcm90b3R5cGVbcl09ayhxW3JdLHMpO31mdW5jdGlvbiBrKHMscix0KXtp Zih0eXBlb2YgcyE9J2Z1bmN0aW9uJ3x8cy5fX3Byb3RvdHlwZWQpcmV0dXJuIHM7 dmFyIHE9ZnVuY3Rpb24oKXt2YXIgdz10aGlzLl9faW5zdGFuY2U7aWYodyl7dmFy IHg9dy5wYXJlbnQ7dy5wYXJlbnQ9cj93Ll9fcGFyZW50c1tyLTFdOm51bGw7dmFy IHU9YXJndW1lbnRzO2lmKHQpe3U9W107Zm9yKHZhciB2PTE7djxhcmd1bWVudHMu bGVuZ3RoO3YrKyl1LnB1c2goYXJndW1lbnRzW3ZdKTt9dmFyIHk9cy5hcHBseSh3 LHUpO3cucGFyZW50PXg7cmV0dXJuIHk7fWVsc2UgcmV0dXJuIHMuYXBwbHkodGhp cyxhcmd1bWVudHMpO307cS5fX3Byb3RvdHlwZWQ9dHJ1ZTtyZXR1cm4gcTt9bi5D bGFzcz1vLmV4cG9ydHM9Yjt9LDMpOwood2luZG93Ll9fYyYmIXdpbmRvdy5fX2Mu c3R1Yil8fGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShmLGMpe3ZhciBlPSh0eXBlb2Yg YyE9PSd1bmRlZmluZWQnKT9mW2NdOmY7aWYoT2JqZWN0LnByb3RvdHlwZS50b1N0 cmluZy5jYWxsKGUpPT09J1tvYmplY3QgQXJyYXldJyl7Zm9yKHZhciBiPTA7Yjxl Lmxlbmd0aDtiKyspYShlLGIpO31lbHNlIGlmKHR5cGVvZiBlPT0nb2JqZWN0Jylp ZihlLl9fbSl7ZltjXT1yZXF1aXJlKGUuX19tKTt9ZWxzZSBpZihlLl9fZSl7Zltj XT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlLl9fZSk7fWVsc2UgZm9yKHZhciBk IGluIGUpYShlLGQpO313aW5kb3cuX19jPWZ1bmN0aW9uKGUsZCxjLGIpe3JlcXVp cmUuZW5zdXJlKFtlXS5jb25jYXQoY3x8W10pLGZ1bmN0aW9uKGYpe2ImJmEoYik7 ZCYmZltkXS5hcHBseShmLGIpO30pO307d2luZG93Ll9fZj1mdW5jdGlvbihkLGMs Yil7ZGVmaW5lKGQsYyxmdW5jdGlvbihlKXthKGIpO3JldHVybiBlLmZyb21KU09O LmFwcGx5KG51bGwsYik7fSk7fTt9KCk7Cl9fZSgiY3VycnkiLFsiYmluZCJdLGZ1 bmN0aW9uKGQsZixlLGMpe3ZhciBhPWYoJ2JpbmQnKTt2YXIgYj1hKG51bGwsYSxu dWxsKTtlLmV4cG9ydHM9YjtkLmN1cnJ5PWI7fSwzKTsKX19lKCJldmVudC1mb3Jt LWJ1YmJsaW5nIixbXSxmdW5jdGlvbihiLGQsYyxhKXtiLkV2ZW50PWIuRXZlbnR8 fGZ1bmN0aW9uKCl7fTtFdmVudC5fX2lubGluZVN1Ym1pdD1mdW5jdGlvbihmLGV2 ZW50KXt2YXIgZT1FdmVudC5fX2dldEhhbmRsZXImJkV2ZW50Ll9fZ2V0SGFuZGxl cihmLCdzdWJtaXQnKTtyZXR1cm4gZT9udWxsOkV2ZW50Ll9fYnViYmxlU3VibWl0 KGYsZXZlbnQpO307RXZlbnQuX19idWJibGVTdWJtaXQ9ZnVuY3Rpb24oZSxldmVu dCl7aWYoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmF0dGFjaEV2ZW50KXt2YXIg Zjt3aGlsZShmIT09ZmFsc2UmJihlPWUucGFyZW50Tm9kZSkpZj1lLm9uc3VibWl0 P2Uub25zdWJtaXQoZXZlbnQpOkV2ZW50Ll9fZmlyZSYmRXZlbnQuX19maXJlKGUs J3N1Ym1pdCcsZXZlbnQpO3JldHVybiBmO319O30sMyk7Cl9fZSgiZGVmZXJVbnRp bCIsW10sZnVuY3Rpb24oYyxlLGQsYil7ZnVuY3Rpb24gYShoLGcsbCxmLG0pe3Zh ciBqPWcoKTtpZihqKXtoKGopO3JldHVybiBudWxsO312YXIgaz1EYXRlLm5vdygp O3ZhciBpPXNldEludGVydmFsKGZ1bmN0aW9uKCl7aj1nKCk7aWYoIWope2lmKCFs fHwobDxuZXcgRGF0ZSgpLWspKXJldHVybjttJiZtKCk7fWNsZWFySW50ZXJ2YWwo aSk7aChqKTt9LDIwLGYpO3JldHVybiBpO31kLmV4cG9ydHM9YTt9KTsKX19lKCJm dW5jdGlvbi11dGlscyIsWyJGdW5jdGlvblV0aWxzIiwiZGVmZXJVbnRpbCJdLGZ1 bmN0aW9uKGIsYyl7dmFyIGE9YygnRnVuY3Rpb25VdGlscycpO2IuZGVib3VuY2U9 YS5kZWJvdW5jZTtiLnRocm90dGxlPWEudGhyb3R0bGU7Yi5kZWZlcl91bnRpbD1j KCdkZWZlclVudGlsJyk7fSwzKTsKX19lKCJvYmplY3QtY29yZS11dGlscyIsWyJp c0VtcHR5IiwiY29weVByb3BlcnRpZXMiXSxmdW5jdGlvbihjLGUsZCxiKXtjLmlz X2VtcHR5PWUoJ2lzRW1wdHknKTtjLmNvcHlfcHJvcGVydGllcz1lKCdjb3B5UHJv cGVydGllcycpO2Z1bmN0aW9uIGEoZixnKXtyZXR1cm4gY29weV9wcm9wZXJ0aWVz KHdpbmRvd1tmXXx8KHdpbmRvd1tmXT17fSksZyk7fWMuYWRkX3Byb3BlcnRpZXM9 Yi5hZGRfcHJvcGVydGllcz1hO30sMyk7CkluaXRpYWxKU0xvYWRlcj13aW5kb3cu SW5pdGlhbEpTTG9hZGVyfHx7SU5JVElBTF9KU19SRUFEWTonQk9PVExPQUQvSlNS RUFEWScsbG9hZDpmdW5jdGlvbihhKXtJbml0aWFsSlNMb2FkZXIuY2FsbGJhY2s9 Qm9vdGxvYWRlci5sb2FkUmVzb3VyY2VzKGEsSW5pdGlhbEpTTG9hZGVyLmNhbGxi YWNrKTt9LGNhbGxiYWNrOkFyYml0ZXIucmVnaXN0ZXJDYWxsYmFjayhmdW5jdGlv bigpe0FyYml0ZXIuaW5mb3JtKEluaXRpYWxKU0xvYWRlci5JTklUSUFMX0pTX1JF QURZLHRydWUsQXJiaXRlci5CRUhBVklPUl9TVEFURSk7fSxbT25sb2FkRXZlbnQu T05MT0FEX0RPTUNPTlRFTlRfQ0FMTEJBQ0tdKX07Cl9fZSgiSW50bCIsW10sZnVu Y3Rpb24oYyxmLGQsYil7ZnVuY3Rpb24gYShnKXtpZih0eXBlb2YgZyE9J3N0cmlu ZycpcmV0dXJuIGZhbHNlO3JldHVybiBnLm1hdGNoKG5ldyBSZWdFeHAoYS5wdW5j dF9jaGFyX2NsYXNzKydbJysnKSInKyInIisnXHUwMEJCJysnXHUwRjNCJysnXHUw RjNEJysnXHUyMDE5JysnXHUyMDFEJysnXHUyMDNBJysnXHUzMDA5JysnXHUzMDBC JysnXHUzMDBEJysnXHUzMDBGJysnXHUzMDExJysnXHUzMDE1JysnXHUzMDE3Jysn XHUzMDE5JysnXHUzMDFCJysnXHUzMDFFJysnXHUzMDFGJysnXHVGRDNGJysnXHVG RjA3JysnXHVGRjA5JysnXHVGRjNEJysnXHMnKyddKiQnKSk7fWEucHVuY3RfY2hh cl9jbGFzcz0nWycrJy4hPycrJ1x1MzAwMicrJ1x1RkYwMScrJ1x1RkYxRicrJ1x1 MDk2NCcrJ1x1MjAyNicrJ1x1MEVBRicrJ1x1MTgwMScrJ1x1MEUyRicrJ1x1RkYw RScrJ10nO2Z1bmN0aW9uIGUobSl7dmFyIGssaj1tLGw9d2luZG93LmludGxfbG9j YWxlX3Jld3JpdGVzLGgsaTt0cnl7aWYobCl7dmFyIHBhdHM9W10scmVwcz1bXTtm b3IodmFyIHAgaW4gbC5wYXR0ZXJucyl7dmFyIHBhdD1wLHJlcD1sLnBhdHRlcm5z W3BdO2ZvcihoIGluIGwubWV0YSl7az1uZXcgUmVnRXhwKGguc2xpY2UoMSwtMSks J2cnKTtwYXQ9cGF0LnJlcGxhY2UoayxsLm1ldGFbaF0pO3JlcD1yZXAucmVwbGFj ZShrLGwubWV0YVtoXSk7fXBhdHNbcGF0cy5sZW5ndGhdPXBhdDtyZXBzW3JlcHMu bGVuZ3RoXT1yZXA7fWZvcih2YXIgaWk9MDtpaTxwYXRzLmxlbmd0aDtpaSsrKXtr PW5ldyBSZWdFeHAocGF0c1tpaV0uc2xpY2UoMSwtMSksJ2cnKTtpZihyZXBzW2lp XT09J2phdmFzY3JpcHQnKXtpPW0ubWF0Y2goayk7aD1pJiZpWzBdO2lmKGgpbT1t LnJlcGxhY2UoayxoLnNsaWNlKDEpLnRvTG93ZXJDYXNlKCkpO31lbHNlIG09bS5y ZXBsYWNlKGsscmVwc1tpaV0pO319fWNhdGNoKGcpe209ajt9az1uZXcgUmVnRXhw KCdceDAxJywnZycpO209bS5yZXBsYWNlKGssJycpO3JldHVybiBtO31kLmV4cG9y dHM9e2VuZHNJblB1bmN0OmEscGhvbm9sb2dpY2FsUnVsZXM6ZX07fSk7Cl9fZSgi X3R4IixbIkludGwiXSxmdW5jdGlvbihkLGYsZSxjKXt2YXIgYT1mKCdJbnRsJyk7 ZnVuY3Rpb24gYihrLGcpe2lmKCFnKXJldHVybiBrO3ZhciBqO2Zvcih2YXIgaSBp biBnKXtpZihhLmVuZHNJblB1bmN0KGdbaV0pKXtqPW5ldyBSZWdFeHAoJ1xceycr aSsnXFx9JythLmVuZHNJblB1bmN0LnB1bmN0X2NoYXJfY2xhc3MrJyonLCdnJyk7 fWVsc2Ugaj1uZXcgUmVnRXhwKCdcXHsnK2krJ1xcfScsJ2cnKTt2YXIgaD0nXHgw MSc7az1rLnJlcGxhY2UoaixoK2dbaV0raCk7fWs9YS5waG9ub2xvZ2ljYWxSdWxl cyhrKTtyZXR1cm4gazt9ZS5leHBvcnRzPWI7fSk7Cl9fZSgidHgiLFsiX3R4Il0s ZnVuY3Rpb24oYyxlLGQsYil7dmFyIGE9ZSgnX3R4Jyk7ZnVuY3Rpb24gZihoLGcp e2lmKHR5cGVvZiBfc3RyaW5nX3RhYmxlPT0ndW5kZWZpbmVkJylyZXR1cm47aD1f c3RyaW5nX3RhYmxlW2hdO3JldHVybiBhKGgsZyk7fWQuZXhwb3J0cz1mO30pOwpf X2UoImludGwtY29yZSIsWyJ0eCIsIl90eCIsIkludGwiXSxmdW5jdGlvbihjLGQp e3ZhciBlPWQoJ3R4Jyk7dmFyIGI9ZCgnX3R4Jyk7dmFyIGE9ZCgnSW50bCcpO2Mu dHg9ZTtjLl90eD1iO2MuaW50bF9lbmRzX2luX3B1bmN0PWEuZW5kc0luUHVuY3Q7 Yy5pbnRsX3Bob25vbG9naWNhbF9ydWxlcz1hLnBob25vbG9naWNhbFJ1bGVzO30s Myk7Cl9fZSgiSlNMb2dnZXIiLFsianNvbiJdLGZ1bmN0aW9uKGQsZixlLGMpe2Yo J2pzb24nKTtmdW5jdGlvbiBiKGgpe3RoaXMuY2F0PWg7dGhpcy5fY291bnRzPXt9 O312YXIgYT17X0pTTG9nZ2VyOmIsaW5zdGFuY2VzOnt9LGJhY2tsb2c6W10sc3Ry aW5naWZ5OmZ1bmN0aW9uKGkpe2lmKGkgaW5zdGFuY2VvZiBFcnJvciYmd2luZG93 LlN5c3RlbUV2ZW50cylpPVN5c3RlbUV2ZW50cy5ub3JtYWxpemVFcnJvcihpKTt0 cnl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGkpO31jYXRjaChoKXtyZXR1cm4gJ3t9 Jzt9fX07ZnVuY3Rpb24gZyhoKXtiLnByb3RvdHlwZVtoXT1mdW5jdGlvbihldmVu dCxpKXtpZihhLmJhY2tsb2cubGVuZ3RoPDEwMClhLmJhY2tsb2cucHVzaChbdGhp cy5jYXQsaCxldmVudCxpJiZhLnN0cmluZ2lmeShpKSxuZXcgRGF0ZSgpXSk7fTt9 ZygnZGVidWcnKTtnKCdsb2cnKTtnKCd3YXJuJyk7ZygnZXJyb3InKTtnKCdidW1w Jyk7ZygncmF0ZScpO2QuSlNMb2dnZXI9ZS5leHBvcnRzPXtfOmEsRFVNUF9FVkVO VDonanNsb2dnZXIvZHVtcCcsY3JlYXRlOmZ1bmN0aW9uKGgpe3JldHVybiBhLmlu c3RhbmNlc1toXXx8KGEuaW5zdGFuY2VzW2hdPW5ldyBiKGgpKTt9fTt9LDMpOwoh ZnVuY3Rpb24oKXt2YXIgYj1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7dmFyIGE9 ZnVuY3Rpb24oYyl7Yz1jfHx3aW5kb3cuZXZlbnQ7dmFyIGQ9Yy50YXJnZXR8fGMu c3JjRWxlbWVudDt2YXIgZj1kLmdldEF0dHJpYnV0ZSgncGxhY2Vob2xkZXInKTtp ZihmKXt2YXIgZT1QYXJlbnQuYnlDbGFzcyhkLCdmb2N1c190YXJnZXQnKTtpZign Zm9jdXMnPT1jLnR5cGV8fCdmb2N1c2luJz09Yy50eXBlKXtpZihkLnZhbHVlPT1m JiZDU1MuaGFzQ2xhc3MoZCwnRE9NQ29udHJvbF9wbGFjZWhvbGRlcicpKXtkLnZh bHVlPScnO0NTUy5yZW1vdmVDbGFzcyhkLCdET01Db250cm9sX3BsYWNlaG9sZGVy Jyk7fWlmKGUpe0NTUy5hZGRDbGFzcyhlLCdjaGlsZF9pc19hY3RpdmUnKTtDU1Mu YWRkQ2xhc3MoZSwnY2hpbGRfaXNfZm9jdXNlZCcpO0NTUy5hZGRDbGFzcyhlLCdj aGlsZF93YXNfZm9jdXNlZCcpO0FyYml0ZXIuaW5mb3JtKCdyZWZsb3cnKTt9fWVs c2V7aWYoZC52YWx1ZT09Jycpe0NTUy5hZGRDbGFzcyhkLCdET01Db250cm9sX3Bs YWNlaG9sZGVyJyk7ZC52YWx1ZT1mO2UmJkNTUy5yZW1vdmVDbGFzcyhlLCdjaGls ZF9pc19hY3RpdmUnKTtkLnN0eWxlLmRpcmVjdGlvbj0nJzt9ZSYmQ1NTLnJlbW92 ZUNsYXNzKGUsJ2NoaWxkX2lzX2ZvY3VzZWQnKTt9fX07aWYoYi5hZGRFdmVudExp c3RlbmVyKXtiLmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJyxhLHRydWUpO2IuYWRk RXZlbnRMaXN0ZW5lcignYmx1cicsYSx0cnVlKTt9ZWxzZSBiLm9uZm9jdXNpbj1i Lm9uZm9jdXNvdXQ9YTt9KCk7Cl9fZSgiZ29VUkkiLFtdLGZ1bmN0aW9uKGIsZSxk LGEpe2Z1bmN0aW9uIGMoZyxmKXtnPWcudG9TdHJpbmcoKTtpZighZiYmYi5QYWdl VHJhbnNpdGlvbnMmJlBhZ2VUcmFuc2l0aW9ucy5pc0luaXRpYWxpemVkKCkpe1Bh Z2VUcmFuc2l0aW9ucy5nbyhnKTt9ZWxzZSBpZih3aW5kb3cubG9jYXRpb24uaHJl Zj09Zyl7d2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO31lbHNlIHdpbmRvdy5sb2Nh dGlvbi5ocmVmPWc7fWQuZXhwb3J0cz1jO30pOwpfX2UoInByZWx1ZGUtdXRpbHMi LFsiZ29VUkkiLCJpbnZva2VDYWxsYmFja3MiXSxmdW5jdGlvbihhLGIpe2EuZ29V Ukk9YignZ29VUkknKTthLmludm9rZV9jYWxsYmFja3M9YignaW52b2tlQ2FsbGJh Y2tzJyk7fSwzKTsKZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm9ua2V5ZG93bj1m dW5jdGlvbihhKXthPWF8fHdpbmRvdy5ldmVudDt2YXIgYj1hLnRhcmdldHx8YS5z cmNFbGVtZW50O3ZhciBjPWEua2V5Q29kZT09MTMmJiFhLmFsdEtleSYmIWEuY3Ry bEtleSYmIWEubWV0YUtleSYmIWEuc2hpZnRLZXkmJkNTUy5oYXNDbGFzcyhiLCdl bnRlcl9zdWJtaXQnKTtpZihjKXtCb290bG9hZGVyLmxvYWRDb21wb25lbnRzKFsn ZG9tJywnaW5wdXQtbWV0aG9kcyddLGZ1bmN0aW9uKCl7aWYoIUlucHV0LmlzRW1w dHkoYikpe3ZhciBkPURPTS5zY3J5KGIuZm9ybSwnLmVudGVyX3N1Ym1pdF90YXJn ZXQnKVswXXx8RE9NLnNjcnkoYi5mb3JtLCdbdHlwZT0ic3VibWl0Il0nKVswXTtk JiZkLmNsaWNrKCk7fX0pO3JldHVybiBmYWxzZTt9fTsKZnVuY3Rpb24gZmNfY2xp Y2soYSxiKXt1c2VyX2FjdGlvbigndWZpJyxhKTtmY19leHBhbmQoYSxiKTt9ZnVu Y3Rpb24gZmNfZXhwYW5kKGEsYil7dmFyIGM9UGFyZW50LmJ5VGFnKGEsJ2Zvcm0n KTtmY191bmNvbGxhcHNlKGMpO0NTUy5yZW1vdmVDbGFzcyhjLCdoaWRkZW5fYWRk X2NvbW1lbnQnKTtpZihiIT09ZmFsc2UpKGMuYWRkX2NvbW1lbnRfdGV4dF90ZXh0 fHxjLmFkZF9jb21tZW50X3RleHQpLmZvY3VzKCk7cmV0dXJuIGZhbHNlO31mdW5j dGlvbiBmY191bmNvbGxhcHNlKGEpe0NTUy5yZW1vdmVDbGFzcyhhLCdjb2xsYXBz ZWRfY29tbWVudHMnKTt9Cl9fZSgid2FpdF9mb3JfbG9hZCIsWyJib290bG9hZGVy Iiwib25sb2FkIiwiYmluZCJdLGZ1bmN0aW9uKGUsZyxmLGQpe3ZhciBhPWcoJ2Jv b3Rsb2FkZXInKTt2YXIgYj1nKCdvbmxvYWQnKTt2YXIgYz1nKCdiaW5kJyk7ZnVu Y3Rpb24gaChrLGwpe3JldHVybiB3aW5kb3cubG9hZGVkJiZsLmNhbGwoayk7fWZ1 bmN0aW9uIGkobCxrLG0pe2EubG9hZENvbXBvbmVudHMoayxjKGwsbSkpO3JldHVy biBmYWxzZTt9ZnVuY3Rpb24gaihtLGwsbyl7bz1jKG0sbyxsKTtpZih3aW5kb3cu bG9hZGVkKXJldHVybiBvKCk7c3dpdGNoKChsfHxldmVudCkudHlwZSl7Y2FzZSAn bG9hZCc6Y2FzZSAnZm9jdXMnOmIucnVuQWZ0ZXJsb2FkKG8pO3JldHVybjtjYXNl ICdjbGljayc6dmFyIG49bS5zdHlsZSxrPWRvY3VtZW50LmJvZHkuc3R5bGU7bi5j dXJzb3I9ay5jdXJzb3I9J3Byb2dyZXNzJztiLnJ1bkFmdGVybG9hZChmdW5jdGlv bigpe24uY3Vyc29yPWsuY3Vyc29yPScnO2lmKG0udGFnTmFtZS50b0xvd2VyQ2Fz ZSgpPT0nYScpe2lmKGZhbHNlIT09bygpJiZtLmhyZWYpd2luZG93LmxvY2F0aW9u LmhyZWY9bS5ocmVmO31lbHNlIGlmKG0uY2xpY2spbS5jbGljaygpO30pO2JyZWFr O31yZXR1cm4gZmFsc2U7fWUucnVuX2lmX2xvYWRlZD1oO2UucnVuX3dpdGg9aTtl LndhaXRfZm9yX2xvYWQ9ajt9LDMpOwp2b2lkKDApOw== ------------vz8vre3LOsirGgAqCZo2LA Content-Disposition: inline; filename=XshNoryluJO.js Content-Type: application/x-javascript; charset=utf-8; name=XshNoryluJO.js Content-Location: http://static.ak.fbcdn.net/rsrc.php/v1/y9/r/XshNoryluJO.js Content-Transfer-Encoding: Base64 LyoxMzI0NTM3MTcyLDE2OTc3NjMxNyovCgppZiAod2luZG93LkNhdmFscnlMb2dn ZXIpIHsgQ2F2YWxyeUxvZ2dlci5zdGFydF9qcyhbImcxbzM4Il0pOyB9CgpfX2Uo Ik9iamVjdFV0aWxzIixbImNvcHlQcm9wZXJ0aWVzIiwiaGFzQXJyYXlOYXR1cmUi XSxmdW5jdGlvbihkLGcsZixjKXt2YXIgYj1nKCJjb3B5UHJvcGVydGllcyIpO3Zh ciBlPWcoImhhc0FycmF5TmF0dXJlIik7dmFyIGE9e29iamVjdDpmdW5jdGlvbihp KXt2YXIgaD1uZXcgRnVuY3Rpb24oKTtoLnByb3RvdHlwZT1pO3JldHVybiBuZXcg aCgpO30saXNTY2FsYXI6ZnVuY3Rpb24oaCl7cmV0dXJuICgvc3RyaW5nfG51bWJl cnxib29sZWFuLykudGVzdCh0eXBlb2YgaCk7fSxnZXRLZXlzOmZ1bmN0aW9uKGop e3ZhciBpPVtdO2Zvcih2YXIgaCBpbiBqKWkucHVzaChoKTtyZXR1cm4gaTt9LGdl dFZhbHVlczpmdW5jdGlvbihpKXt2YXIgaj1bXTtmb3IodmFyIGggaW4gaSlqLnB1 c2goaVtoXSk7cmV0dXJuIGo7fSxjb3VudEtleXM6ZnVuY3Rpb24oail7dmFyIGg9 MDtmb3IodmFyIGkgaW4gailoKys7cmV0dXJuIGg7fSxhcmVFcXVhbDpmdW5jdGlv bihoLGkpe3JldHVybiBKU09OLnN0cmluZ2lmeShoKT09SlNPTi5zdHJpbmdpZnko aSk7fSxtZXJnZTpmdW5jdGlvbigpe3ZhciBpPXt9O2Zvcih2YXIgaD0wO2g8YXJn dW1lbnRzLmxlbmd0aDtoKyspYihpLGFyZ3VtZW50c1toXSk7cmV0dXJuIGk7fSxj b2FsZXNjZTpmdW5jdGlvbigpe2Zvcih2YXIgaD0wO2g8YXJndW1lbnRzLmxlbmd0 aDsrK2gpaWYoYXJndW1lbnRzW2hdIT1udWxsKXJldHVybiBhcmd1bWVudHNbaF07 cmV0dXJuIG51bGw7fSxjcmVhdGVGcm9tOmZ1bmN0aW9uKGosbCl7dmFyIGs9e307 dmFyIGk9ZShsKTtpZih0eXBlb2YgbD09J3VuZGVmaW5lZCcpbD10cnVlO2Zvcih2 YXIgaD1qLmxlbmd0aDtoLS07KWtbaltoXV09aT9sW2hdOmw7cmV0dXJuIGs7fX07 Zi5leHBvcnRzPWE7fSk7Cl9fZSgib2JqZWN0LWV4dGVuc2lvbnMiLFsiT2JqZWN0 VXRpbHMiXSxmdW5jdGlvbihjLGUsZCxiKXt2YXIgYT1lKCdPYmplY3RVdGlscycp O2MuYXJlX2VxdWFsPWEuYXJlRXF1YWw7Yy5jb2FsZXNjZT1hLmNvYWxlc2NlO2Mu Y291bnQ9YS5jb3VudEtleXM7Yy5pc19zY2FsYXI9YS5pc1NjYWxhcjtjLmtleXM9 YS5nZXRLZXlzO2MubWVyZ2U9YS5tZXJnZTtjLm9iamVjdD1hLm9iamVjdDtjLnZh bHVlcz1hLmdldFZhbHVlcztPYmplY3QuZnJvbT1hLmNyZWF0ZUZyb207fSwzKTsK X19lKCJ1YSIsW10sZnVuY3Rpb24oYixkLGMsYSl7dmFyIGU9e2llOmZ1bmN0aW9u KCl7cmV0dXJuIGUuX3BvcHVsYXRlKCl8fHRoaXMuX2llO30saWU2NDpmdW5jdGlv bigpe3JldHVybiBlLmllKCkmJnRoaXMuX3dpbjY0O30sZmlyZWZveDpmdW5jdGlv bigpe3JldHVybiBlLl9wb3B1bGF0ZSgpfHx0aGlzLl9maXJlZm94O30sb3BlcmE6 ZnVuY3Rpb24oKXtyZXR1cm4gZS5fcG9wdWxhdGUoKXx8dGhpcy5fb3BlcmE7fSxz YWZhcmk6ZnVuY3Rpb24oKXtyZXR1cm4gZS5fcG9wdWxhdGUoKXx8dGhpcy5fc2Fm YXJpO30sY2hyb21lOmZ1bmN0aW9uKCl7cmV0dXJuIGUuX3BvcHVsYXRlKCl8fHRo aXMuX2Nocm9tZTt9LHdpbmRvd3M6ZnVuY3Rpb24oKXtyZXR1cm4gZS5fcG9wdWxh dGUoKXx8dGhpcy5fd2luZG93czt9LG9zeDpmdW5jdGlvbigpe3JldHVybiBlLl9w b3B1bGF0ZSgpfHx0aGlzLl9vc3g7fSxsaW51eDpmdW5jdGlvbigpe3JldHVybiBl Ll9wb3B1bGF0ZSgpfHx0aGlzLl9saW51eDt9LGlwaG9uZTpmdW5jdGlvbigpe3Jl dHVybiBlLl9wb3B1bGF0ZSgpfHx0aGlzLl9pcGhvbmU7fSxfcG9wdWxhdGVkOmZh bHNlLF9wb3B1bGF0ZTpmdW5jdGlvbigpe2lmKGUuX3BvcHVsYXRlZClyZXR1cm47 ZS5fcG9wdWxhdGVkPXRydWU7dmFyIGk9bmF2aWdhdG9yLnVzZXJBZ2VudDt2YXIg Zj0vKD86TVNJRS4oXGQrXC5cZCspKXwoPzooPzpGaXJlZm94fEdyYW5QYXJhZGlz b3xJY2V3ZWFzZWwpLihcZCtcLlxkKykpfCg/Ok9wZXJhKD86LitWZXJzaW9uLnwu KShcZCtcLlxkKykpfCg/OkFwcGxlV2ViS2l0LihcZCsoPzpcLlxkKyk/KSkvLmV4 ZWMoaSk7dmFyIGg9LyhNYWMgT1MgWCl8KFdpbmRvd3MpfChMaW51eCkvLmV4ZWMo aSk7dmFyIGc9L1xiKGlQaG9uZXxpUFthb11kKS8uZXhlYyhpKTtlLl93aW42ND0h ISgvV2luNjQvLmV4ZWMoaSkpO2lmKGYpe2UuX2llPWZbMV0/cGFyc2VGbG9hdChm WzFdKTpOYU47aWYoZS5faWUmJmRvY3VtZW50LmRvY3VtZW50TW9kZSllLl9pZT1k b2N1bWVudC5kb2N1bWVudE1vZGU7ZS5fZmlyZWZveD1mWzJdP3BhcnNlRmxvYXQo ZlsyXSk6TmFOO2UuX29wZXJhPWZbM10/cGFyc2VGbG9hdChmWzNdKTpOYU47ZS5f c2FmYXJpPWZbNF0/cGFyc2VGbG9hdChmWzRdKTpOYU47aWYoZS5fc2FmYXJpKXtm PS8oPzpDaHJvbWVcLyhcZCtcLlxkKykpLy5leGVjKGkpO2UuX2Nocm9tZT1mJiZm WzFdP3BhcnNlRmxvYXQoZlsxXSk6TmFOO31lbHNlIGUuX2Nocm9tZT1OYU47fWVs c2UgZS5faWU9ZS5fZmlyZWZveD1lLl9vcGVyYT1lLl9jaHJvbWU9ZS5fc2FmYXJp PU5hTjtpZihoKXtpZihoWzFdKXt2YXIgaj0vKD86TWFjIE9TIFggKFxkKyg/Olsu X11cZCspPykpLy5leGVjKGkpO2UuX29zeD1qP3BhcnNlRmxvYXQoalsxXS5yZXBs YWNlKCdfJywnLicpKTp0cnVlO31lbHNlIGUuX29zeD1mYWxzZTtlLl93aW5kb3dz PSEhaFsyXTtlLl9saW51eD0hIWhbM107fWVsc2UgZS5fb3N4PWUuX3dpbmRvd3M9 ZS5fbGludXg9ZmFsc2U7ZS5faXBob25lPWc7fX07Yi51YT1jLmV4cG9ydHM9ZTt9 LDMpOwpfX2UoIlN5c3RlbUV2ZW50cyIsWyJhcmJpdGVyIiwiRW52IiwidWEiLCJ1 dGlsIiwiY29weVByb3BlcnRpZXMiXSxmdW5jdGlvbihyLHYsdCxxKXt2YXIgYT12 KCdhcmJpdGVyJyk7dmFyIGM9dignRW52Jyk7dmFyIHg9digndWEnKTt2YXIgZT12 KCd1dGlsJyk7dmFyIHA9dignY29weVByb3BlcnRpZXMnKTt2YXIgZD1uZXcgYSgp O3ZhciBmPVtdLGI9MTAwMDtzZXRJbnRlcnZhbChmdW5jdGlvbigpe2Zvcih2YXIg eT0wO3k8Zi5sZW5ndGg7eSsrKWZbeV0oKTt9LGIsZmFsc2UpO2Z1bmN0aW9uIGgo KXtyZXR1cm4gKC9jX3VzZXI9KFxkKykvLnRlc3QoZG9jdW1lbnQuY29va2llKSYm UmVnRXhwLiQxKXx8MDt9dmFyIGw9Yy51c2VyO3ZhciBrPW5hdmlnYXRvci5vbkxp bmU7Zi5wdXNoKGZ1bmN0aW9uKCl7dmFyIHk9bmF2aWdhdG9yLm9uTGluZTtpZihr IT15KXtkLmluZm9ybShkLk9OTElORSx5LGEuQkVIQVZJT1JfU1RBVEUpO2s9eTt9 fSk7dmFyIG89bDtmLnB1c2goZnVuY3Rpb24oKXt2YXIgeT1oKCk7aWYobyE9eSl7 ZC5pbmZvcm0oZC5VU0VSLHksYS5CRUhBVklPUl9TVEFURSk7bz15O319KTt2YXIg bT1EYXRlLm5vdygpO2YucHVzaChmdW5jdGlvbigpe3ZhciB6PURhdGUubm93KCk7 dmFyIHk9ei1tLWI7aWYoeT4xMDAwMClkLmluZm9ybShkLkFXQUtFLHkpO209ejt9 KTtmdW5jdGlvbiB1KHkpe3ZhciB6PXk/e2xpbmU6eS5saW5lTnVtYmVyfHx5Lmxp bmUsbWVzc2FnZTp5Lm1lc3NhZ2UsbmFtZTp5Lm5hbWUsc2NyaXB0OnkuZmlsZU5h bWV8fHkuc291cmNlVVJMLHN0YWNrOnkuc3RhY2tUcmFjZXx8eS5zdGFja306e307 aWYoeC5jaHJvbWUoKSYmeS5zdGFjayYmLyhcd3szLDV9OlwvXC9bXjpdKyk6KFxk KykvLnRlc3QoeS5zdGFjaykpe3ouc2NyaXB0PVJlZ0V4cC4kMTt6LmxpbmU9cGFy c2VJbnQoUmVnRXhwLiQyLDEwKTt9Zm9yKHZhciB6YSBpbiB6KWlmKHpbemFdPT1u dWxsKWRlbGV0ZSB6W3phXTtyZXR1cm4gejt9dmFyIGc9bnVsbDt2YXIgbj1mYWxz ZTtmdW5jdGlvbiB3KHoseSl7aWYoeC5pZSgpKXJldHVybiB6O3JldHVybiBmdW5j dGlvbigpe2lmKG4pcmV0dXJuIHouYXBwbHkodGhpcyxhcmd1bWVudHMpO3RyeXtu PXRydWU7dmFyIHJlcz16LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtuPWZhbHNlO3Jl dHVybiByZXM7fWNhdGNoKHphKXtuPWZhbHNlO2c9ZC5ub3JtYWxpemVFcnJvcih6 YSk7aWYoeSl5KGcpO3Rocm93IHphO319O31mdW5jdGlvbiBzKHkpe2lmKHkgaW5z dGFuY2VvZiBFcnJvcil5PXUoeSk7ZC5pbmZvcm0oZC5FUlJPUix5KTt9ZnVuY3Rp b24gaSh6YSx6Yix6KXt2YXIgeT1nfHx7bWVzc2FnZTp6YSxzY3JpcHQ6emIsbGlu ZTp6fTtnPW51bGw7eS5zY3JpcHQ9eS5zY3JpcHR8fHpiO3kubGluZT15LmxpbmV8 fHo7cyh5KTt9ZnVuY3Rpb24gaigpe3dpbmRvdy5vbmVycm9yPWk7fWEuc2V0RXJy b3JIYW5kbGVyKGQuaW5mb3JtRXJyb3IpO2ooKTtmLnB1c2goaik7ci5TeXN0ZW1F dmVudHM9dC5leHBvcnRzPXAoZCx7VVNFUjonU3lzdGVtRXZlbnRzL1VTRVInLE9O TElORTonU3lzdGVtRXZlbnRzL09OTElORScsQVdBS0U6J1N5c3RlbUV2ZW50cy9B V0FLRScsRVJST1I6J1N5c3RlbUV2ZW50cy9FUlJPUicsdHJhcEVycm9yOncsbm9y bWFsaXplRXJyb3I6dSxpbmZvcm1FcnJvcjpzLGlzUGFnZU93bmVyOmZ1bmN0aW9u KHkpe3JldHVybiB5fHxoKCk9PWw7fX0pO30sMyk7CmZ1bmN0aW9uIF9vbmxvYWRI b29rKCl7IXdpbmRvdy5sb2FkZWQmJndpbmRvdy5DYXZhbHJ5TG9nZ2VyJiZDYXZh bHJ5TG9nZ2VyLmdldEluc3RhbmNlKCkuc2V0VGltZVN0YW1wKCd0X3ByZWhvb2tz Jyk7X3J1bkhvb2tzKCdvbmxvYWRob29rcycpOyF3aW5kb3cubG9hZGVkJiZ3aW5k b3cuQ2F2YWxyeUxvZ2dlciYmQ2F2YWxyeUxvZ2dlci5nZXRJbnN0YW5jZSgpLnNl dFRpbWVTdGFtcCgndF9ob29rcycpO3dpbmRvdy5sb2FkZWQ9dHJ1ZTtBcmJpdGVy LmluZm9ybSgndWlwYWdlX29ubG9hZCcsdHJ1ZSxBcmJpdGVyLkJFSEFWSU9SX1NU QVRFKTt9ZnVuY3Rpb24gX29uYWZ0ZXJsb2FkSG9vaygpe19ydW5Ib29rcygnb25h ZnRlcmxvYWRob29rcycpO3dpbmRvdy5hZnRlcmxvYWRlZD10cnVlO31mdW5jdGlv biBfcnVuSG9vayhiLGMpe3RyeXtyZXR1cm4gYigpO31jYXRjaChhKXt2YXIgZXJy PVN5c3RlbUV2ZW50cy5ub3JtYWxpemVFcnJvcihhKTtlcnIuZXZlbnRfdHlwZT1j O2Vyci5jYXRlZ29yeT0ncnVuaG9vayc7U3lzdGVtRXZlbnRzLmluZm9ybUVycm9y KGVycik7fX1mdW5jdGlvbiBfcnVuSG9va3MoYil7dmFyIGQ9Yj09J29uYmVmb3Jl bGVhdmVob29rcyd8fGI9PSdvbmJlZm9yZXVubG9hZGhvb2tzJzt2YXIgZT1udWxs O2Rve3ZhciBhPXdpbmRvd1tiXTtpZighZCl3aW5kb3dbYl09bnVsbDtpZighYSli cmVhaztmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKylpZihkKXtlPWV8fF9ydW5I b29rKGFbY10sYik7fWVsc2UgX3J1bkhvb2soYVtjXSxiKTtpZihkKWJyZWFrO313 aGlsZSh3aW5kb3dbYl0pO2lmKGQmJmUpcmV0dXJuIGU7fWZ1bmN0aW9uIGtlZXBf d2luZG93X3NldF9hc19sb2FkZWQoKXtpZih3aW5kb3cubG9hZGVkPT1mYWxzZSl7 d2luZG93LmxvYWRlZD10cnVlO19ydW5Ib29rcygnb25sb2FkaG9va3MnKTt9aWYo d2luZG93LmFmdGVybG9hZGVkPT1mYWxzZSl7d2luZG93LmFmdGVybG9hZGVkPXRy dWU7X3J1bkhvb2tzKCdvbmFmdGVybG9hZGhvb2tzJyk7fX1BcmJpdGVyLnJlZ2lz dGVyQ2FsbGJhY2soX29ubG9hZEhvb2ssW09ubG9hZEV2ZW50Lk9OTE9BRF9ET01D T05URU5UX0NBTExCQUNLLEluaXRpYWxKU0xvYWRlci5JTklUSUFMX0pTX1JFQURZ XSk7QXJiaXRlci5yZWdpc3RlckNhbGxiYWNrKF9vbmFmdGVybG9hZEhvb2ssW09u bG9hZEV2ZW50Lk9OTE9BRF9ET01DT05URU5UX0NBTExCQUNLLE9ubG9hZEV2ZW50 Lk9OTE9BRF9DQUxMQkFDSyxJbml0aWFsSlNMb2FkZXIuSU5JVElBTF9KU19SRUFE WV0pO0FyYml0ZXIuc3Vic2NyaWJlKE9ubG9hZEV2ZW50Lk9OQkVGT1JFVU5MT0FE LGZ1bmN0aW9uKGIsYSl7YS53YXJuPV9ydW5Ib29rcygnb25iZWZvcmVsZWF2ZWhv b2tzJyl8fF9ydW5Ib29rcygnb25iZWZvcmV1bmxvYWRob29rcycpO2lmKCFhLndh cm4pe3dpbmRvdy5sb2FkZWQ9ZmFsc2U7d2luZG93LmFmdGVybG9hZGVkPWZhbHNl O319LEFyYml0ZXIuU1VCU0NSSUJFX05FVyk7QXJiaXRlci5zdWJzY3JpYmUoT25s b2FkRXZlbnQuT05VTkxPQUQsZnVuY3Rpb24oYixhKXtfcnVuSG9va3MoJ29udW5s b2FkaG9va3MnKTt9LEFyYml0ZXIuU1VCU0NSSUJFX05FVyk7CnZvaWQoMCk7Cl9f ZSgiRGF0YVN0b3JlIixbXSxmdW5jdGlvbihpLGssaixoKXt2YXIgZj17fTt2YXIg Yz17fTt2YXIgZz0xO3ZhciBiPTE7ZnVuY3Rpb24gZChsKXt2YXIgbTtpZih0eXBl b2YgbD09J3N0cmluZycpe209J3N0cl8nK2w7fWVsc2V7bT0nZWxlbV8nKyhsLl9f RkJfVE9LRU58fChsLl9fRkJfVE9LRU49W2crK10pKVswXTtjW21dPWw7fXJldHVy biBmW21dfHwoZlttXT17fSk7fWZ1bmN0aW9uIGUobCl7aWYoIWwubm9kZU5hbWUp cmV0dXJuIGZhbHNlO3RyeXtpZihudWxsIT1sLm9mZnNldFBhcmVudClyZXR1cm4g ZmFsc2U7fWNhdGNoKG0pe31pZihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY29u dGFpbnMpe3JldHVybiAhZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNvbnRhaW5z KGwpO31lbHNlIHJldHVybiAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNvbXBh cmVEb2N1bWVudFBvc2l0aW9uKGwpJmIpO312YXIgYT17c2V0OmZ1bmN0aW9uKG4s bSxvKXt2YXIgbD1kKG4pO2xbbV09bztyZXR1cm4gbjt9LGdldDpmdW5jdGlvbihw LG8sbil7dmFyIG09ZChwKSxxPW1bb107aWYodHlwZW9mIHE9PT0ndW5kZWZpbmVk JyYmcC5nZXRBdHRyaWJ1dGUpe3ZhciBsPXAuZ2V0QXR0cmlidXRlKCdkYXRhLScr byk7cT0obnVsbD09PWwpP3VuZGVmaW5lZDpsO31pZigobiE9PXVuZGVmaW5lZCkm JihxPT09dW5kZWZpbmVkKSlxPW1bb109bjtyZXR1cm4gcTt9LHJlbW92ZTpmdW5j dGlvbihuLG0pe3ZhciBsPWQobiksbz1sW21dO2RlbGV0ZSBsW21dO3JldHVybiBv O30sY2xlYW51cDpmdW5jdGlvbigpe3ZhciBtLGw7Zm9yKG0gaW4gYyl7bD1jW21d O2lmKGUobCkpe2RlbGV0ZSBmW21dO2RlbGV0ZSBjW21dO319fX07ai5leHBvcnRz PWE7fSk7Cl9fZSgic3RyaW5nLWV4dGVuc2lvbnMiLFsiYXJiaXRlciJdLGZ1bmN0 aW9uKGMsZSxkLGIpe3ZhciBhPWUoJ2FyYml0ZXInKTtTdHJpbmcucHJvdG90eXBl LnRyaW09ZnVuY3Rpb24oKXtpZih0aGlzPT13aW5kb3cpcmV0dXJuIG51bGw7cmV0 dXJuIHRoaXMucmVwbGFjZSgvXlxzKnxccyokL2csJycpO307Yi50cmltPWMudHJp bT1mdW5jdGlvbihnKXt0cnl7cmV0dXJuIFN0cmluZyhnLnRvU3RyaW5nKCkpLnRy aW0oKTt9Y2F0Y2goZil7cmV0dXJuICcnO319O1N0cmluZy5wcm90b3R5cGUuc3Rh cnRzV2l0aD1mdW5jdGlvbihmKXtpZih0aGlzPT13aW5kb3cpcmV0dXJuIG51bGw7 cmV0dXJuIHRoaXMuc3Vic3RyaW5nKDAsZi5sZW5ndGgpPT1mO307U3RyaW5nLnBy b3RvdHlwZS5lbmRzV2l0aD1mdW5jdGlvbihmKXtpZih0aGlzPT13aW5kb3cpcmV0 dXJuIG51bGw7cmV0dXJuIHRoaXMubGVuZ3RoPj1mLmxlbmd0aCYmdGhpcy5zdWJz dHJpbmcodGhpcy5sZW5ndGgtZi5sZW5ndGgpPT1mO307U3RyaW5nLnByb3RvdHlw ZS5zcGxpdD0oZnVuY3Rpb24oZil7cmV0dXJuIGZ1bmN0aW9uKG0sail7dmFyIGc9 IiI7aWYobT09PW51bGx8fGo9PT1udWxsKXtyZXR1cm4gW107fWVsc2UgaWYodHlw ZW9mIG09PSdzdHJpbmcnKXtyZXR1cm4gZi5jYWxsKHRoaXMsbSxqKTt9ZWxzZSBp ZihtPT09dW5kZWZpbmVkKXtyZXR1cm4gW3RoaXMudG9TdHJpbmcoKV07fWVsc2Ug aWYobSBpbnN0YW5jZW9mIFJlZ0V4cCl7aWYoIW0uXzJ8fCFtLl8xKXtnPW0udG9T dHJpbmcoKS5yZXBsYWNlKC9eW1xTXHNdK1wvLywiIik7aWYoIW0uXzEpaWYoIW0u Z2xvYmFsKXttLl8xPW5ldyBSZWdFeHAobS5zb3VyY2UsImciK2cpO31lbHNlIG0u XzE9MTt9c2VwYXJhdG9yMT1tLl8xPT09MT9tOm0uXzE7dmFyIG49KG0uXzI/bS5f MjptLl8yPW5ldyBSZWdFeHAoIl4iK3NlcGFyYXRvcjEuc291cmNlKyIkIixnKSk7 aWYoaj09PXVuZGVmaW5lZHx8ajwwKXtqPWZhbHNlO31lbHNle2o9TWF0aC5mbG9v cihqKTtpZighailyZXR1cm4gW107fXZhciBrLGw9W10saT0wLGg9MDt3aGlsZSgo aj9oKys8PWo6dHJ1ZSkmJihrPXNlcGFyYXRvcjEuZXhlYyh0aGlzKSkpe2lmKChr WzBdLmxlbmd0aD09PTApJiYoc2VwYXJhdG9yMS5sYXN0SW5kZXg+ay5pbmRleCkp c2VwYXJhdG9yMS5sYXN0SW5kZXgtLTtpZihzZXBhcmF0b3IxLmxhc3RJbmRleD5p KXtpZihrLmxlbmd0aD4xKWtbMF0ucmVwbGFjZShuLGZ1bmN0aW9uKCl7Zm9yKHZh ciBvPTE7bzxhcmd1bWVudHMubGVuZ3RoLTI7bysrKWlmKGFyZ3VtZW50c1tvXT09 PXVuZGVmaW5lZClrW29dPXVuZGVmaW5lZDt9KTtsPWwuY29uY2F0KHRoaXMuc3Vi c3RyaW5nKGksay5pbmRleCksKGsuaW5kZXg9PT10aGlzLmxlbmd0aD9bXTprLnNs aWNlKDEpKSk7aT1zZXBhcmF0b3IxLmxhc3RJbmRleDt9aWYoa1swXS5sZW5ndGg9 PT0wKXNlcGFyYXRvcjEubGFzdEluZGV4Kys7fXJldHVybiAoaT09PXRoaXMubGVu Z3RoKT8oc2VwYXJhdG9yMS50ZXN0KCIiKT9sOmwuY29uY2F0KCIiKSk6KGo/bDps LmNvbmNhdCh0aGlzLnN1YnN0cmluZyhpKSkpO31lbHNlIHJldHVybiBmLmNhbGwo dGhpcyxtLGopO307fSkoU3RyaW5nLnByb3RvdHlwZS5zcGxpdCk7YS5pbmZvcm0o J2ZianMvcHJvdG90eXBlcycpO30sMyk7Cl9fZSgiZXZhbC1nbG9iYWwiLFtdLGZ1 bmN0aW9uKGMsZSxkLGIpe2Z1bmN0aW9uIGEoaCl7aWYoJ3N0cmluZychPXR5cGVv ZihoKSl7dGhyb3cgbmV3IEVycm9yKCdKUyBzZW50IHRvIGV2YWxfZ2xvYmFsIGlz IG5vdCBhIHN0cmluZy4gIE9ubHkgc3RyaW5ncyAnKydhcmUgcGVybWl0dGVkLicp O31lbHNlIGlmKCcnPT1oKXJldHVybjt2YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVt ZW50KCdzY3JpcHQnKTtpLnR5cGU9J3RleHQvamF2YXNjcmlwdCc7dHJ5e2kuYXBw ZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoaCkpO31jYXRjaChmKXtp LnRleHQ9aDt9dmFyIGc9KGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJo ZWFkIilbMF18fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk7Zy5hcHBlbmRDaGls ZChpKTtnLnJlbW92ZUNoaWxkKGkpO31jLmV2YWxfZ2xvYmFsPWIuZXZhbF9nbG9i YWw9YTt9LDMpOwpfX2UoImRvbS1odG1sIixbImZ1bmN0aW9uLWV4dGVuc2lvbnMi LCJzdHJpbmctZXh0ZW5zaW9ucyIsIkFycmF5VXRpbHMiLCJ1YSIsImNvcHlQcm9w ZXJ0aWVzIiwiZXZhbC1nbG9iYWwiXSxmdW5jdGlvbihlLGcsZixkKXtnKCdmdW5j dGlvbi1leHRlbnNpb25zJyk7Zygnc3RyaW5nLWV4dGVuc2lvbnMnKTt2YXIgYT1n KCdBcnJheVV0aWxzJyk7dmFyIGg9ZygndWEnKTt2YXIgYz1nKCdjb3B5UHJvcGVy dGllcycpO2Z1bmN0aW9uIGIoaSl7aWYoaSYmaS5fX2h0bWwpaT1pLl9faHRtbDtp ZighKHRoaXMgaW5zdGFuY2VvZiBiKSl7aWYoaSBpbnN0YW5jZW9mIGIpcmV0dXJu IGk7cmV0dXJuIG5ldyBiKGkpO310aGlzLl9jb250ZW50PWk7dGhpcy5fZGVmZXI9 ZmFsc2U7dGhpcy5fZXh0cmFfYWN0aW9uPScnO3RoaXMuX25vZGVzPW51bGw7dGhp cy5faW5saW5lX2pzPWJhZ29maG9sZGluZzt0aGlzLl9pZV9jbG9uZV9idWc9ZmFs c2U7cmV0dXJuIHRoaXM7fWIuaXNIVE1MPWZ1bmN0aW9uKGkpe3JldHVybiBpJiYo aSBpbnN0YW5jZW9mIGJ8fGkuX19odG1sIT09dW5kZWZpbmVkKTt9O2IucmVwbGFj ZUpTT05XcmFwcGVyPWZ1bmN0aW9uKGkpe3JldHVybiBpJiZpLl9faHRtbCE9PXVu ZGVmaW5lZD9uZXcgYihpLl9faHRtbCk6aTt9O2MoYi5wcm90b3R5cGUse3RvU3Ry aW5nOmZ1bmN0aW9uKCl7dmFyIGk9dGhpcy5fY29udGVudHx8Jyc7aWYodGhpcy5f ZXh0cmFfYWN0aW9uKWkrPSc8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+ Jyt0aGlzLl9leHRyYV9hY3Rpb24rJzwvc2NyJysnaXB0Pic7cmV0dXJuIGk7fSxz ZXRBY3Rpb246ZnVuY3Rpb24oaSl7dGhpcy5fZXh0cmFfYWN0aW9uPWk7cmV0dXJu IHRoaXM7fSxnZXRBY3Rpb246ZnVuY3Rpb24oKXt0aGlzLl9maWxsQ2FjaGUoKTt2 YXIgaT1mdW5jdGlvbigpe3RoaXMuX2lubGluZV9qcygpO3ZhciBqPWcoJ2V2YWwt Z2xvYmFsJykuZXZhbF9nbG9iYWw7aih0aGlzLl9leHRyYV9hY3Rpb24pO30uYmlu ZCh0aGlzKTtpZih0aGlzLmdldERlZmVycmVkKCkpe3JldHVybiBpLmRlZmVyLmJp bmQoaSk7fWVsc2UgcmV0dXJuIGk7fSxzZXREZWZlcnJlZDpmdW5jdGlvbihpKXt0 aGlzLl9kZWZlcj0hIWk7cmV0dXJuIHRoaXM7fSxnZXREZWZlcnJlZDpmdW5jdGlv bigpe3JldHVybiB0aGlzLl9kZWZlcjt9LGdldENvbnRlbnQ6ZnVuY3Rpb24oKXty ZXR1cm4gdGhpcy5fY29udGVudDt9LGdldE5vZGVzOmZ1bmN0aW9uKCl7dGhpcy5f ZmlsbENhY2hlKCk7cmV0dXJuIHRoaXMuX25vZGVzO30sZ2V0Um9vdE5vZGU6ZnVu Y3Rpb24oKXtyZXR1cm4gdGhpcy5nZXROb2RlcygpWzBdO30saWVDbG9uZUJ1Zzpm dW5jdGlvbigpe3RoaXMuX2ZpbGxDYWNoZSgpO3JldHVybiB0aGlzLl9pZV9jbG9u ZV9idWc7fSxfZmlsbENhY2hlOmZ1bmN0aW9uKCl7aWYobnVsbCE9PXRoaXMuX25v ZGVzKXJldHVybjt2YXIgbD10aGlzLl9jb250ZW50O2lmKCFsKXt0aGlzLl9ub2Rl cz1bXTtyZXR1cm47fWw9bC5yZXBsYWNlKC8oPChcdyspW14+XSo/KVwvPi9nLGZ1 bmN0aW9uKHQsdSx2KXtyZXR1cm4gdi5tYXRjaCgvXihhYmJyfGJyfGNvbHxpbWd8 aW5wdXR8bGlua3xtZXRhfHBhcmFtfGhyfGFyZWF8ZW1iZWQpJC9pKT90OnUrJz48 LycrdisnPic7fSk7dmFyIHA9bC50cmltKCkudG9Mb3dlckNhc2UoKSxzPWRvY3Vt ZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLGo9ZmFsc2U7dmFyIHI9KCFwLmluZGV4 T2YoJzxvcHQnKSYmWzEsJzxzZWxlY3QgbXVsdGlwbGU9Im11bHRpcGxlIiBjbGFz cz0iX19XUkFQUEVSIj4nLCc8L3NlbGVjdD4nXSl8fCghcC5pbmRleE9mKCc8bGVn JykmJlsxLCc8ZmllbGRzZXQgY2xhc3M9Il9fV1JBUFBFUiI+JywnPC9maWVsZHNl dD4nXSl8fChwLm1hdGNoKC9ePCh0aGVhZHx0Ym9keXx0Zm9vdHxjb2xnfGNhcCkv KSYmWzEsJzx0YWJsZSBjbGFzcz0iX19XUkFQUEVSIj4nLCc8L3RhYmxlPiddKXx8 KCFwLmluZGV4T2YoJzx0cicpJiZbMiwnPHRhYmxlPjx0Ym9keSBjbGFzcz0iX19X UkFQUEVSIj4nLCc8L3Rib2R5PjwvdGFibGU+J10pfHwoKCFwLmluZGV4T2YoJzx0 ZCcpfHwhcC5pbmRleE9mKCc8dGgnKSkmJlszLCc8dGFibGU+PHRib2R5Pjx0ciBj bGFzcz0iX19XUkFQUEVSIj4nLCc8L3RyPjwvdGJvZHk+PC90YWJsZT4nXSl8fCgh cC5pbmRleE9mKCc8Y29sJykmJlsyLCc8dGFibGU+PHRib2R5PjwvdGJvZHk+PGNv bGdyb3VwIGNsYXNzPSJfX1dSQVBQRVIiPicsJzwvY29sZ3JvdXA+PC90YWJsZT4n XSl8fG51bGw7aWYobnVsbD09PXIpe3MuY2xhc3NOYW1lPSdfX1dSQVBQRVInO2lm KGguaWUoKSl7cj1bMCwnPHNwYW4gc3R5bGU9ImRpc3BsYXk6bm9uZSI+Jm5ic3A7 PC9zcGFuPicsJyddO2o9dHJ1ZTt9ZWxzZSByPVswLCcnLCcnXTt9cy5pbm5lckhU TUw9clsxXStsK3JbMl07d2hpbGUoclswXS0tKXM9cy5sYXN0Q2hpbGQ7aWYoailz LnJlbW92ZUNoaWxkKHMuZmlyc3RDaGlsZCk7cy5jbGFzc05hbWUhPSdfX1dSQVBQ RVInO2lmKDAhPT1zLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdvcHRpb24nKS5sZW5n dGh8fDAhPT1zLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdvYmplY3QnKS5sZW5ndGgp dGhpcy5faWVfY2xvbmVfYnVnPXRydWU7aWYoaC5pZSgpKXt2YXIgcTtpZighcC5p bmRleE9mKCc8dGFibGUnKSYmLTE9PXAuaW5kZXhPZignPHRib2R5Jykpe3E9cy5m aXJzdENoaWxkJiZzLmZpcnN0Q2hpbGQuY2hpbGROb2Rlczt9ZWxzZSBpZihyWzFd PT0nPHRhYmxlPicmJi0xPT1wLmluZGV4T2YoJzx0Ym9keScpKXtxPXMuY2hpbGRO b2Rlczt9ZWxzZSBxPVtdO2Zvcih2YXIgbj1xLmxlbmd0aC0xO24+PTA7LS1uKWlm KHFbbl0ubm9kZU5hbWUmJnFbbl0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09J3Ri b2R5JyYmcVtuXS5jaGlsZE5vZGVzLmxlbmd0aD09MClxW25dLnBhcmVudE5vZGUu cmVtb3ZlQ2hpbGQocVtuXSk7fXZhciBvPXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUo J3NjcmlwdCcpO3ZhciBpPVtdO2Zvcih2YXIgbT0wO208by5sZW5ndGg7bSsrKWlm KG9bbV0uc3JjKXtpLnB1c2goQm9vdGxvYWRlci5yZXF1ZXN0UmVzb3VyY2UuYmlu ZChCb290bG9hZGVyLCdqcycsb1ttXS5zcmMpKTt9ZWxzZSBpLnB1c2goZXZhbF9n bG9iYWwuYmluZChudWxsLG9bbV0uaW5uZXJIVE1MKSk7Zm9yKHZhciBtPW8ubGVu Z3RoLTE7bT49MDttLS0pb1ttXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG9bbV0p O3ZhciBrPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDxpLmxlbmd0aDt0KyspaVt0 XSgpO307dGhpcy5fbm9kZXM9YS5jcmVhdGVGcm9tKHMuY2hpbGROb2Rlcyk7dGhp cy5faW5saW5lX2pzPWs7fX0pO2UuSFRNTD1mLmV4cG9ydHM9Yjt9LDMpOwpfX2Uo ImRvbSIsWyJBcnJheVV0aWxzIiwiY3NzLWNvcmUiLCJkb20taHRtbCIsIk9iamVj dFV0aWxzIiwiZG9tLWNvcmUiLCJjb3B5UHJvcGVydGllcyIsInVhIiwidHgiLCJf dHgiXSxmdW5jdGlvbihtLG8sbixrKXt2YXIgYz1vKCdBcnJheVV0aWxzJyk7dmFy IGQ9bygnY3NzLWNvcmUnKTt2YXIgZj1vKCdkb20taHRtbCcpO3ZhciBnPW8oJ09i amVjdFV0aWxzJyk7dmFyIGE9bygnZG9tLWNvcmUnKS4kO3ZhciBqPW8oJ2NvcHlQ cm9wZXJ0aWVzJyk7dmFyIGw9bygnZG9tLWNvcmUnKS5nZTt2YXIgcT1vKCd1YScp O3ZhciBwPW8oJ3R4Jyk7dmFyIGg9bygnX3R4Jyk7ZnVuY3Rpb24gaShyKXtmdW5j dGlvbiBzKHQpe3JldHVybiBlLmNyZWF0ZSgnZGl2Jyx7fSx0KS5pbm5lckhUTUw7 fXJldHVybiBmdW5jdGlvbih3LHQpe3ZhciB1PXt9O2lmKHQpZm9yKHZhciB2IGlu IHQpdVt2XT1zKHRbdl0pO3JldHVybiBmKHIodyx1KSk7fTt9dmFyIGU9e2ZpbmQ6 ZnVuY3Rpb24ocix0KXt2YXIgcz1lLnNjcnkocix0KTtyZXR1cm4gc1swXTt9LHNj cnk6ZnVuY3Rpb24oemEsem0pe2lmKCF6YSlyZXR1cm4gW107dmFyIHpuPXptLnNw bGl0KCcgJyk7dmFyIHU9W3phXTt2YXIgej16YT09PWRvY3VtZW50O2Zvcih2YXIg emQ9MDt6ZDx6bi5sZW5ndGg7emQrKyl7aWYodS5sZW5ndGg9PTApYnJlYWs7aWYo em5bemRdPT0nJyljb250aW51ZTt2YXIgemw9em5bemRdO3ZhciB6aj1bXTt2YXIg enU9ZmFsc2U7aWYoemwuY2hhckF0KDApPT0nXicpaWYoemQ9PTApe3p1PXRydWU7 emw9emwuc2xpY2UoMSk7fWVsc2UgcmV0dXJuIFtdO3psPXpsLnJlcGxhY2UoL1wu L2csJyAuJyk7emw9emwucmVwbGFjZSgvXCMvZywnICMnKTt6bD16bC5yZXBsYWNl KC9cWy9nLCcgWycpO3ZhciB6cT16bC5zcGxpdCgnICcpO3ZhciB6cj16cVswXXx8 JyonO3ZhciB6ZT16cVsxXSYmenFbMV0uY2hhckF0KDApPT0nIyc7aWYoemUpe3Zh ciB5PWwoenFbMV0uc2xpY2UoMSksdHJ1ZSk7aWYoeSYmKCcqJz09enJ8fHkudGFn TmFtZS50b0xvd2VyQ2FzZSgpPT16cikpZm9yKHZhciB6aD0wO3poPHUubGVuZ3Ro O3poKyspaWYoenUmJmUuY29udGFpbnMoeSx1W3poXSkpe3pqPVt5XTticmVhazt9 ZWxzZSBpZihkb2N1bWVudD09dVt6aF18fGUuY29udGFpbnModVt6aF0seSkpe3pq PVt5XTticmVhazt9fWVsc2V7dmFyIHp0PVtdO3ZhciB0PXUubGVuZ3RoO2Zvcih2 YXIgemY9MDt6Zjx0O3pmKyspe2lmKHp1KXt2YXIgemI9W107dmFyIHg9dVt6Zl0u cGFyZW50Tm9kZTt2YXIgcj16cj09JyonO3doaWxlKGUuaXNFbGVtZW50Tm9kZSh4 KSl7aWYocnx8eC50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PXpyKXpiLnB1c2goeCk7 eD14LnBhcmVudE5vZGU7fX1lbHNlIHZhciB6Yj11W3pmXS5nZXRFbGVtZW50c0J5 VGFnTmFtZSh6cik7dmFyIHpjPXpiLmxlbmd0aDtmb3IodmFyIHppPTA7emk8emM7 emkrKyl6dC5wdXNoKHpiW3ppXSk7fWZvcih2YXIgem89MTt6bzx6cS5sZW5ndGg7 em8rKyl7dmFyIHpwPXpxW3pvXTt2YXIgemc9enAuY2hhckF0KDApPT0nLic7dmFy IHY9enAuc3Vic3RyaW5nKDEpO2Zvcih2YXIgemY9MDt6Zjx6dC5sZW5ndGg7emYr Kyl7dmFyIHpzPXp0W3pmXTtpZighenMpY29udGludWU7aWYoemcpe2lmKCFkLmhh c0NsYXNzKHpzLHYpKWRlbGV0ZSB6dFt6Zl07Y29udGludWU7fWVsc2V7dmFyIHc9 enAuc2xpY2UoMSx6cC5sZW5ndGgtMSk7aWYody5pbmRleE9mKCc9Jyk9PS0xKXtp Zih6cy5nZXRBdHRyaWJ1dGUodyk9PT1udWxsKXtkZWxldGUgenRbemZdO2NvbnRp bnVlO319ZWxzZXt2YXIgems9dy5zcGxpdCgnPScpO3ZhciBzPXprWzBdO3ZhciB6 dj16a1sxXTt6dj16di5zbGljZSgxLHp2Lmxlbmd0aC0xKTtpZih6cy5nZXRBdHRy aWJ1dGUocykhPXp2KXtkZWxldGUgenRbemZdO2NvbnRpbnVlO319fX19Zm9yKHZh ciB6Zj0wO3pmPHp0Lmxlbmd0aDt6ZisrKWlmKHp0W3pmXSl7emoucHVzaCh6dFt6 Zl0pO2lmKHp1KWJyZWFrO319dT16ajt9cmV0dXJuIHU7fSxnZXRUZXh0OihmdW5j dGlvbigpe3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLHM9ci50 ZXh0Q29udGVudCE9bnVsbD8ndGV4dENvbnRlbnQnOidpbm5lclRleHQnO3JldHVy biBmdW5jdGlvbih0KXtpZighdCl7cmV0dXJuICcnO31lbHNlIGlmKGUuaXNUZXh0 Tm9kZSh0KSl7cmV0dXJuIHQuZGF0YTt9ZWxzZSByZXR1cm4gdFtzXTt9O30pKCks Z2V0U2VsZWN0aW9uOmZ1bmN0aW9uKCl7dmFyIHM9d2luZG93LmdldFNlbGVjdGlv bixyPWRvY3VtZW50LnNlbGVjdGlvbjtpZihzKXtyZXR1cm4gcygpKycnO31lbHNl IGlmKHIpcmV0dXJuIHIuY3JlYXRlUmFuZ2UoKS50ZXh0O3JldHVybiBudWxsO30s Y3JlYXRlOmZ1bmN0aW9uKHQscixzKXt0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo dCk7aWYocil7cj1qKHt9LHIpO2lmKHIuc3R5bGUpe2oodC5zdHlsZSxyLnN0eWxl KTtkZWxldGUgci5zdHlsZTt9Zm9yKHZhciB1IGluIHIpaWYodS50b0xvd2VyQ2Fz ZSgpLmluZGV4T2YoJ29uJyk9PTApe2lmKCEodHlwZW9mIHJbdV0hPSdmdW5jdGlv bicpKWlmKHdpbmRvdy5FdmVudCYmRXZlbnQubGlzdGVuKXtFdmVudC5saXN0ZW4o dCx1LnN1YnN0cigyKSxyW3VdKTt9ZWxzZSB0W3VdPXJbdV07ZGVsZXRlIHJbdV07 fWoodCxyKTt9aWYocyE9dW5kZWZpbmVkKWUuc2V0Q29udGVudCh0LHMpO3JldHVy biB0O30scHJlcGVuZENvbnRlbnQ6ZnVuY3Rpb24odCxzKXtpZighZS5pc05vZGUo dCkpdGhyb3cgbmV3IEVycm9yKCdET00ucHJlcGVuZENvbnRlbnQ6IHJlZmVyZW5j ZSBlbGVtZW50IGlzIG5vdCBhIG5vZGUnKTt2YXIgcj1mdW5jdGlvbih1KXtpZih0 LmZpcnN0Q2hpbGQpe3QuaW5zZXJ0QmVmb3JlKHUsdC5maXJzdENoaWxkKTt9ZWxz ZSB0LmFwcGVuZENoaWxkKHUpO307cmV0dXJuIGUuX2FkZENvbnRlbnQocyxyLHQp O30saW5zZXJ0QWZ0ZXI6ZnVuY3Rpb24odCxzKXtpZighZS5pc05vZGUodCl8fCF0 LnBhcmVudE5vZGUpdGhyb3cgbmV3IEVycm9yKCdET00uaW5zZXJ0QWZ0ZXI6IHJl ZmVyZW5jZSBlbGVtZW50IGlzIG5vdCBhIG5vZGUnKTt2YXIgcj1mdW5jdGlvbih1 KXtpZih0Lm5leHRTaWJsaW5nKXt0LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHUs dC5uZXh0U2libGluZyk7fWVsc2UgdC5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHUp O307cmV0dXJuIGUuX2FkZENvbnRlbnQocyxyLHQucGFyZW50Tm9kZSk7fSxpbnNl cnRCZWZvcmU6ZnVuY3Rpb24ocyx0KXtpZighZS5pc05vZGUodCl8fCF0LnBhcmVu dE5vZGUpdGhyb3cgbmV3IEVycm9yKCdET00uaW5zZXJ0QmVmb3JlOiByZWZlcmVu Y2UgZWxlbWVudCBpcyBub3QgYSBub2RlIG9yICcrJ2RvZXMgbm90IGhhdmUgYSBw YXJlbnQuJyk7dmFyIHI9ZnVuY3Rpb24odSl7dC5wYXJlbnROb2RlLmluc2VydEJl Zm9yZSh1LHQpO307cmV0dXJuIGUuX2FkZENvbnRlbnQocyxyLHQucGFyZW50Tm9k ZSk7fSxzZXRDb250ZW50OmZ1bmN0aW9uKHMscil7aWYoIWUuaXNOb2RlKHMpKXRo cm93IG5ldyBFcnJvcignRE9NLnNldENvbnRlbnQ6IHJlZmVyZW5jZSBlbGVtZW50 IGlzIG5vdCBhIG5vZGUnKTtlLmVtcHR5KHMpO3JldHVybiBlLmFwcGVuZENvbnRl bnQocyxyKTt9LGFwcGVuZENvbnRlbnQ6ZnVuY3Rpb24odCxzKXtpZighZS5pc05v ZGUodCkpdGhyb3cgbmV3IEVycm9yKCdET00uYXBwZW5kQ29udGVudDogcmVmZXJl bmNlIGVsZW1lbnQgaXMgbm90IGEgbm9kZScpO3ZhciByPWZ1bmN0aW9uKHUpe3Qu YXBwZW5kQ2hpbGQodSk7fTtyZXR1cm4gZS5fYWRkQ29udGVudChzLHIsdCk7fSxy ZXBsYWNlOmZ1bmN0aW9uKHQscyl7aWYoIWUuaXNOb2RlKHQpfHwhdC5wYXJlbnRO b2RlKXRocm93IG5ldyBFcnJvcignRE9NLnJlcGxhY2U6IHJlZmVyZW5jZSBlbGVt ZW50IG11c3QgYmUgYSBub2RlIHdpdGggYScrJyBwYXJlbnQnKTt2YXIgcj1mdW5j dGlvbih1KXt0LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKHUsdCk7fTtyZXR1cm4g ZS5fYWRkQ29udGVudChzLHIsdC5wYXJlbnROb2RlKTt9LHJlbW92ZTpmdW5jdGlv bihyKXtyPWEocik7aWYoci5wYXJlbnROb2RlKXIucGFyZW50Tm9kZS5yZW1vdmVD aGlsZChyKTt9LGVtcHR5OmZ1bmN0aW9uKHIpe3I9YShyKTt3aGlsZShyLmZpcnN0 Q2hpbGQpZS5yZW1vdmUoci5maXJzdENoaWxkKTt9LGNvbnRhaW5zOmZ1bmN0aW9u KHMscil7cz1sKHMpO3I9bChyKTtpZighc3x8IXIpe3JldHVybiBmYWxzZTt9ZWxz ZSBpZihzPT09cil7cmV0dXJuIHRydWU7fWVsc2UgaWYoZS5pc1RleHROb2RlKHMp KXtyZXR1cm4gZmFsc2U7fWVsc2UgaWYoZS5pc1RleHROb2RlKHIpKXtyZXR1cm4g ZS5jb250YWlucyhzLHIucGFyZW50Tm9kZSk7fWVsc2UgaWYocy5jb250YWlucyl7 cmV0dXJuIHMuY29udGFpbnMocik7fWVsc2UgaWYocy5jb21wYXJlRG9jdW1lbnRQ b3NpdGlvbil7cmV0dXJuICEhKHMuY29tcGFyZURvY3VtZW50UG9zaXRpb24ocikm MTYpO31lbHNlIHJldHVybiBmYWxzZTt9LGdldFJvb3RFbGVtZW50OmZ1bmN0aW9u KCl7dmFyIHI9bnVsbDtpZih3aW5kb3cuUXVpY2tsaW5nJiZRdWlja2xpbmcuaXNB Y3RpdmUoKSlyPWwoJ2NvbnRlbnQnKTtyZXR1cm4gcnx8ZG9jdW1lbnQuYm9keTt9 LGlzTm9kZTpmdW5jdGlvbihyKXtyZXR1cm4gISEociYmKHR5cGVvZiBOb2RlPT0n b2JqZWN0Jz9yIGluc3RhbmNlb2YgTm9kZTp0eXBlb2Ygcj09Im9iamVjdCImJnR5 cGVvZiByLm5vZGVUeXBlPT0nbnVtYmVyJyYmdHlwZW9mIHIubm9kZU5hbWU9PSdz dHJpbmcnKSk7fSxpc05vZGVPZlR5cGU6ZnVuY3Rpb24ocyx0KXt2YXIgdT1jLmNy ZWF0ZUZyb20odCkuam9pbignfCcpLnRvVXBwZXJDYXNlKCkuc3BsaXQoJ3wnKTt2 YXIgcj1nLmNyZWF0ZUZyb20odSk7cmV0dXJuIGUuaXNOb2RlKHMpJiZzLm5vZGVO YW1lIGluIHI7fSxpc0VsZW1lbnROb2RlOmZ1bmN0aW9uKHIpe3JldHVybiBlLmlz Tm9kZShyKSYmci5ub2RlVHlwZT09MTt9LGlzVGV4dE5vZGU6ZnVuY3Rpb24ocil7 cmV0dXJuIGUuaXNOb2RlKHIpJiZyLm5vZGVUeXBlPT0zO30sX2FkZENvbnRlbnQ6 ZnVuY3Rpb24odSxyLHpkKXt1PWYucmVwbGFjZUpTT05XcmFwcGVyKHUpO2lmKHUg aW5zdGFuY2VvZiBmJiYtMT09dS50b1N0cmluZygpLmluZGV4T2YoJzxzY3InKydp cHQnKSYmJyc9PXpkLmlubmVySFRNTCl7dmFyIHg9cS5pZSgpO2lmKCF4fHwoeD43 JiYhZS5pc05vZGVPZlR5cGUoemQsWyd0YWJsZScsJ3Rib2R5JywndGhlYWQnLCd0 Zm9vdCcsJ3RyJywnc2VsZWN0JywnZmllbGRzZXQnXSkpKXt2YXIgeT14PyI8ZW0g c3R5bGU9XCJkaXNwbGF5Om5vbmU7XCI+Jm5ic3A7PC9lbT4iOiIiO3pkLmlubmVy SFRNTD15K3U7eCYmemQucmVtb3ZlQ2hpbGQoemQuZmlyc3RDaGlsZCk7cmV0dXJu IGMuY3JlYXRlRnJvbSh6ZC5jaGlsZE5vZGVzKTt9fWVsc2UgaWYoZS5pc1RleHRO b2RlKHpkKSl7emQuZGF0YT11O3JldHVybiBbdV07fXZhciB6YSx2PVtdLHM9W107 dmFyIHc9ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO2lmKCEodSBp bnN0YW5jZW9mIEFycmF5KSl1PVt1XTtmb3IodmFyIHo9MDt6PHUubGVuZ3RoO3or Kyl7emE9Zi5yZXBsYWNlSlNPTldyYXBwZXIodVt6XSk7aWYoemEgaW5zdGFuY2Vv ZiBmKXtzLnB1c2goemEuZ2V0QWN0aW9uKCkpO3ZhciB6Yz16YS5nZXROb2Rlcygp LHQ7Zm9yKHZhciB6Yj0wO3piPHpjLmxlbmd0aDt6YisrKXt0PShxLnNhZmFyaSgp fHwocS5pZSgpJiZ6YS5pZUNsb25lQnVnKCkpKT96Y1t6Yl06emNbemJdLmNsb25l Tm9kZSh0cnVlKTt2LnB1c2godCk7dy5hcHBlbmRDaGlsZCh0KTt9fWVsc2UgaWYo Zy5pc1NjYWxhcih6YSkpe3ZhciB6ZT1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh6 YSk7di5wdXNoKHplKTt3LmFwcGVuZENoaWxkKHplKTt9ZWxzZSBpZihlLmlzTm9k ZSh6YSkpe3YucHVzaCh6YSk7dy5hcHBlbmRDaGlsZCh6YSk7fWVsc2UgaWYoISh6 YSBpbnN0YW5jZW9mIEFycmF5KSl6YSE9PW51bGw7fXIodyk7Zm9yKHZhciB6PTA7 ejxzLmxlbmd0aDt6Kyspc1t6XSgpO3JldHVybiB2O30sZ2V0RG9jdW1lbnRTY3Jv bGxFbGVtZW50OmZ1bmN0aW9uKHIpe3I9cnx8ZG9jdW1lbnQ7aWYoZC5oYXNDbGFz cyhyLmJvZHksJ3dyYXBwZWQnKSl7dmFyIHM9ci5nZXRFbGVtZW50QnlJZCgnYm9k eScpO2lmKHMpcmV0dXJuIHM7fXJldHVybiAhKHEuY2hyb21lKCl8fHEuc2FmYXJp KCkpJiZyLmNvbXBhdE1vZGU9PT0nQ1NTMUNvbXBhdCc/ci5kb2N1bWVudEVsZW1l bnQ6ci5ib2R5O30sdHg6aShwKSxfdHg6aShoKX07ZnVuY3Rpb24gYih0LHIscyl7 aWYodHlwZW9mIHIhPSdvYmplY3QnfHxlLmlzTm9kZShyKXx8ciBpbnN0YW5jZW9m IEFycmF5fHxmLmlzSFRNTChyKSl7cz1yO3I9bnVsbDt9cmV0dXJuIGUuY3JlYXRl KHQscixzKTt9bS4kTj1lLiROPWI7bS5ET009bi5leHBvcnRzPWU7fSwzKTsKX19l KCJldmVudC1leHRlbnNpb25zIixbImV2ZW50LWZvcm0tYnViYmxpbmciLCJEYXRh U3RvcmUiLCJPYmplY3RVdGlscyIsInBhcmVudCIsImNvcHlQcm9wZXJ0aWVzIiwi dXNlckFjdGlvbiIsIlN5c3RlbUV2ZW50cyIsImRvbSJdLGZ1bmN0aW9uKGwscixw LGspe3IoJ2V2ZW50LWZvcm0tYnViYmxpbmcnKTt2YXIgZD1yKCdEYXRhU3RvcmUn KTt2YXIgZj1yKCdPYmplY3RVdGlscycpO3ZhciBnPXIoJ3BhcmVudCcpO3ZhciBq PXIoJ2NvcHlQcm9wZXJ0aWVzJyk7dmFyIHQ9cigndXNlckFjdGlvbicpO3ZhciBo PXIoJ1N5c3RlbUV2ZW50cycpO3ZhciBjPXIoJ2RvbScpO0V2ZW50LkRBVEFTVE9S RV9LRVk9J0V2ZW50Lmxpc3RlbmVycyc7aWYoIUV2ZW50LnByb3RvdHlwZSlFdmVu dC5wcm90b3R5cGU9e307ZnVuY3Rpb24gYih2LHcsdSl7dGhpcy50YXJnZXQ9djt0 aGlzLnR5cGU9dzt0aGlzLmRhdGE9dTt9Yi5wcm90b3R5cGU9e2dldERhdGE6ZnVu Y3Rpb24oKXt0aGlzLmRhdGE9dGhpcy5kYXRhfHx7fTtyZXR1cm4gdGhpcy5kYXRh O30sc3RvcDpmdW5jdGlvbigpe3RoaXMuY2FuY2VsQnViYmxlPXRydWU7dGhpcy5z dG9wUHJvcGFnYXRpb24mJnRoaXMuc3RvcFByb3BhZ2F0aW9uKCk7cmV0dXJuIHRo aXM7fSxwcmV2ZW50OmZ1bmN0aW9uKCl7dGhpcy5yZXR1cm5WYWx1ZT1mYWxzZTt0 aGlzLnByZXZlbnREZWZhdWx0JiZ0aGlzLnByZXZlbnREZWZhdWx0KCk7cmV0dXJu IHRoaXM7fSxraWxsOmZ1bmN0aW9uKCl7dGhpcy5zdG9wKCkucHJldmVudCgpO3Jl dHVybiBmYWxzZTt9LGdldFRhcmdldDpmdW5jdGlvbigpe3ZhciB1PXRoaXMudGFy Z2V0fHx0aGlzLnNyY0VsZW1lbnQ7cmV0dXJuIHU/JCh1KTpudWxsO319O2Z1bmN0 aW9uIGEodSl7aWYodSBpbnN0YW5jZW9mIGIpcmV0dXJuIHU7dT11fHx3aW5kb3cu ZXZlbnR8fHt9O2lmKCF1Ll9pbmhlcml0c19mcm9tX3Byb3RvdHlwZSlmb3IodmFy IHcgaW4gRXZlbnQucHJvdG90eXBlKXRyeXt1W3ddPUV2ZW50LnByb3RvdHlwZVt3 XTt9Y2F0Y2godil7fXJldHVybiB1O31qKEV2ZW50LnByb3RvdHlwZSx7X2luaGVy aXRzX2Zyb21fcHJvdG90eXBlOnRydWUsZ2V0UmVsYXRlZFRhcmdldDpmdW5jdGlv bigpe3ZhciB1PXRoaXMucmVsYXRlZFRhcmdldHx8KHRoaXMuZnJvbUVsZW1lbnQ9 PT10aGlzLnNyY0VsZW1lbnQ/dGhpcy50b0VsZW1lbnQ6dGhpcy5mcm9tRWxlbWVu dCk7cmV0dXJuIHU/JCh1KTpudWxsO30sZ2V0TW9kaWZpZXJzOmZ1bmN0aW9uKCl7 dmFyIHU9e2NvbnRyb2w6ISF0aGlzLmN0cmxLZXksc2hpZnQ6ISF0aGlzLnNoaWZ0 S2V5LGFsdDohIXRoaXMuYWx0S2V5LG1ldGE6ISF0aGlzLm1ldGFLZXl9O3UuYWNj ZXNzPXVhLm9zeCgpP3UuY29udHJvbDp1LmFsdDt1LmFueT11LmNvbnRyb2x8fHUu c2hpZnR8fHUuYWx0fHx1Lm1ldGE7cmV0dXJuIHU7fX0pO2ooRXZlbnQucHJvdG90 eXBlLGIucHJvdG90eXBlKTtqKEV2ZW50LHtsaXN0ZW46ZnVuY3Rpb24odix6Zix4 LHpiKXtpZih0eXBlb2Ygdj09J3N0cmluZycpdj0kKHYpO2lmKHR5cGVvZiB6Yj09 J3VuZGVmaW5lZCcpemI9RXZlbnQuUHJpb3JpdHkuTk9STUFMO2lmKHR5cGVvZiB6 Zj09J29iamVjdCcpe3ZhciB3PXt9O2Zvcih2YXIgemUgaW4gemYpd1t6ZV09RXZl bnQubGlzdGVuKHYsemUsemZbemVdLHpiKTtyZXR1cm4gdzt9aWYoemYubWF0Y2go L15vbi9pKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJCYWQgZXZlbnQgbmFtZSBgIitl dmVudCsiJzogdXNlIGBjbGljaycsIG5vdCBgb25jbGljaycuIik7aWYodi5ub2Rl TmFtZT09J0xBQkVMJyYmemY9PSdjbGljaycpe3ZhciB6YT12LmdldEVsZW1lbnRz QnlUYWdOYW1lKCdpbnB1dCcpO3Y9emEubGVuZ3RoPT0xP3phWzBdOnY7fWVsc2Ug aWYodj09PXdpbmRvdyYmemY9PT0nc2Nyb2xsJyl7dmFyIHpkPWMuZ2V0RG9jdW1l bnRTY3JvbGxFbGVtZW50KCk7aWYoemQhPT1kb2N1bWVudC5kb2N1bWVudEVsZW1l bnQmJnpkIT09ZG9jdW1lbnQuYm9keSl2PXpkO312YXIgeT1kLmdldCh2LG0se30p O2lmKHNbemZdKXt2YXIgdT1zW3pmXTt6Zj11LmJhc2U7eD11LndyYXAoeCk7fWko dix6Zik7dmFyIHpnPXlbemZdO2lmKCEoemIgaW4gemcpKXpnW3piXT1bXTt2YXIg ej16Z1t6Yl0ubGVuZ3RoLHpjPW5ldyBlKHgsemdbemJdLHopO3pnW3piXS5wdXNo KHpjKTtyZXR1cm4gemM7fSxzdG9wOmZ1bmN0aW9uKHUpe3JldHVybiBhKHUpLnN0 b3AoKTt9LHByZXZlbnQ6ZnVuY3Rpb24odSl7cmV0dXJuIGEodSkucHJldmVudCgp O30sa2lsbDpmdW5jdGlvbih1KXtyZXR1cm4gYSh1KS5raWxsKCk7fSxnZXRLZXlD b2RlOmZ1bmN0aW9uKGV2ZW50KXtldmVudD1hKGV2ZW50KTtpZighZXZlbnQpcmV0 dXJuIGZhbHNlO3N3aXRjaChldmVudC5rZXlDb2RlKXtjYXNlIDYzMjMyOnJldHVy biAzODtjYXNlIDYzMjMzOnJldHVybiA0MDtjYXNlIDYzMjM0OnJldHVybiAzNztj YXNlIDYzMjM1OnJldHVybiAzOTtjYXNlIDYzMjcyOmNhc2UgNjMyNzM6Y2FzZSA2 MzI3NTpyZXR1cm4gbnVsbDtjYXNlIDYzMjc2OnJldHVybiAzMztjYXNlIDYzMjc3 OnJldHVybiAzNDt9aWYoZXZlbnQuc2hpZnRLZXkpc3dpdGNoKGV2ZW50LmtleUNv ZGUpe2Nhc2UgMzM6Y2FzZSAzNDpjYXNlIDM3OmNhc2UgMzg6Y2FzZSAzOTpjYXNl IDQwOnJldHVybiBudWxsO31yZXR1cm4gZXZlbnQua2V5Q29kZTt9LGdldFByaW9y aXRpZXM6ZnVuY3Rpb24oKXtpZighcSl7dmFyIHU9Zi5nZXRWYWx1ZXMoRXZlbnQu UHJpb3JpdHkpO3Uuc29ydChmdW5jdGlvbih2LHcpe3JldHVybiB2LXc7fSk7cT11 O31yZXR1cm4gcTt9LGZpcmU6ZnVuY3Rpb24oeCx6LHUpe3ZhciB2PW5ldyBiKHgs eix1KTt2YXIgeTtkb3t2YXIgdz1FdmVudC5fX2dldEhhbmRsZXIoeCx6KTtpZih3 KXk9dyh2KTt4PXgucGFyZW50Tm9kZTt9d2hpbGUoeCYmeSE9PWZhbHNlJiYhdi5j YW5jZWxCdWJibGUpO3JldHVybiB5IT09ZmFsc2U7fSxfX2ZpcmU6ZnVuY3Rpb24o dSx3LGV2ZW50KXt2YXIgdj1FdmVudC5fX2dldEhhbmRsZXIodSx3KTtpZih2KXJl dHVybiB2KGEoZXZlbnQpKTt9LF9fZ2V0SGFuZGxlcjpmdW5jdGlvbih1LHYpe3Jl dHVybiBkLmdldCh1LEV2ZW50LkRBVEFTVE9SRV9LRVkrdik7fX0pO3ZhciBxPW51 bGwsbT1FdmVudC5EQVRBU1RPUkVfS0VZO3ZhciBuPWZ1bmN0aW9uKHUpe3JldHVy biBmdW5jdGlvbih2KXtpZighYy5jb250YWlucyh0aGlzLHYuZ2V0UmVsYXRlZFRh cmdldCgpKSlyZXR1cm4gdS5jYWxsKHRoaXMsdik7fTt9O3ZhciBzPXttb3VzZWVu dGVyOntiYXNlOidtb3VzZW92ZXInLHdyYXA6bn0sbW91c2VsZWF2ZTp7YmFzZTon bW91c2VvdXQnLHdyYXA6bn19O3ZhciBpPWZ1bmN0aW9uKHUsemEpe3ZhciB2PSdv bicremE7dmFyIHk9by5iaW5kKHUpO3ZhciB4PWQuZ2V0KHUsbSk7aWYoemEgaW4g eClyZXR1cm47eFt6YV09e307aWYodS5hZGRFdmVudExpc3RlbmVyKXt1LmFkZEV2 ZW50TGlzdGVuZXIoemEseSxmYWxzZSk7fWVsc2UgaWYodS5hdHRhY2hFdmVudCl1 LmF0dGFjaEV2ZW50KHYseSk7ZC5zZXQodSxtK3phLHkpO2lmKHVbdl0pe3ZhciB6 PXU9PT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ/RXZlbnQuUHJpb3JpdHkuX0JV QkJMRTpFdmVudC5Qcmlvcml0eS5UUkFESVRJT05BTDt2YXIgdz11W3ZdO3Vbdl09 bnVsbDtFdmVudC5saXN0ZW4odSx6YSx3LHopO31pZih1Lm5vZGVOYW1lPT09J0ZP Uk0nJiZ6YT09PSdzdWJtaXQnKUV2ZW50Lmxpc3Rlbih1LHphLEV2ZW50Ll9fYnVi YmxlU3VibWl0LmN1cnJ5KHUpLEV2ZW50LlByaW9yaXR5Ll9CVUJCTEUpO307dmFy IG89ZnVuY3Rpb24oZXZlbnQpe2V2ZW50PWEoZXZlbnQpO3ZhciB6Yj1ldmVudC50 eXBlO2lmKCFkLmdldCh0aGlzLG0pKXRocm93IG5ldyBFcnJvcigiQmFkIGxpc3Rl bkhhbmRsZXIgY29udGV4dC4iKTt2YXIgemM9ZC5nZXQodGhpcyxtKVt6Yl07aWYo IXpjKXRocm93IG5ldyBFcnJvcigiTm8gcmVnaXN0ZXJlZCBoYW5kbGVycyBmb3Ig YCIremIrIicuIik7aWYoemI9PSdjbGljaycpe3ZhciB3PWcuYnlUYWcoZXZlbnQu Z2V0VGFyZ2V0KCksJ2EnKTt2YXIgemQ9dCgnY2xpY2snLHcsZXZlbnQpLnNldF9u YW1lc3BhY2UoJ2V2dF9leHQnKTtpZih3aW5kb3cuQXJiaXRlck1vbml0b3IpQXJi aXRlck1vbml0b3IuaW5pdFVBKHpkLFt3XSk7fXZhciB5PUV2ZW50LmdldFByaW9y aXRpZXMoKTtmb3IodmFyIHg9MDt4PHkubGVuZ3RoO3grKyl7dmFyIHo9eVt4XTtp Zih6IGluIHpjKXt2YXIgdT16Y1t6XTtmb3IodmFyIHY9MDt2PHUubGVuZ3RoO3Yr Kyl7aWYoIXVbdl0pY29udGludWU7dmFyIHphPXVbdl0uZmlyZSh0aGlzLGV2ZW50 KTtpZih6YT09PWZhbHNlKXtyZXR1cm4gZXZlbnQua2lsbCgpO31lbHNlIGlmKGV2 ZW50LmNhbmNlbEJ1YmJsZSlldmVudC5zdG9wKCk7fX19cmV0dXJuIGV2ZW50LnJl dHVyblZhbHVlO307RXZlbnQuUHJpb3JpdHk9e1VSR0VOVDotMjAsVFJBRElUSU9O QUw6LTEwLE5PUk1BTDowLF9CVUJCTEU6MTAwMH07ZnVuY3Rpb24gZSh2LHUsdyl7 dGhpcy5faGFuZGxlcj12O3RoaXMuX2NvbnRhaW5lcj11O3RoaXMuX2luZGV4PXc7 fWUucHJvdG90eXBlPXtyZW1vdmU6ZnVuY3Rpb24oKXtkZWxldGUgdGhpcy5faGFu ZGxlcjtkZWxldGUgdGhpcy5fY29udGFpbmVyW3RoaXMuX2luZGV4XTt9LGZpcmU6 ZnVuY3Rpb24odSxldmVudCl7dmFyIHY9aC50cmFwRXJyb3IodGhpcy5faGFuZGxl cixmdW5jdGlvbih3KXt3LmV2ZW50X3R5cGU9ZXZlbnQudHlwZTt3LmRvbV9lbGVt ZW50PXUubmFtZXx8dS5pZDt3LmNhdGVnb3J5PSdldmVudGhhbmRsZXInO30pO3Jl dHVybiB2LmNhbGwodSxldmVudCk7fX07bC4kRT1rLiRFPWE7fSwzKTsKX19lKCJj c3MiLFsiZG9tIiwiY3NzLWNvcmUiLCJjb3B5UHJvcGVydGllcyJdLGZ1bmN0aW9u KGUsZyxmLGQpe3ZhciBiPWcoJ2RvbScpO3ZhciBhPWcoJ2Nzcy1jb3JlJyk7dmFy IGM9ZygnY29weVByb3BlcnRpZXMnKTtjKGEse3Nob3duOmZ1bmN0aW9uKGgpe3Jl dHVybiAhYS5oYXNDbGFzcyhoLCdoaWRkZW5fZWxlbScpO30sdG9nZ2xlOmZ1bmN0 aW9uKGgpe2EuY29uZGl0aW9uU2hvdyhoLCFhLnNob3duKGgpKTt9LHNldENsYXNz OmZ1bmN0aW9uKGksaCl7JChpKS5jbGFzc05hbWU9aHx8Jyc7cmV0dXJuIGk7fSxz ZXRTdHlsZTpmdW5jdGlvbihoLGksail7c3dpdGNoKGkpe2Nhc2UgJ29wYWNpdHkn Omguc3R5bGUub3BhY2l0eT1qO2guc3R5bGUuZmlsdGVyPWohPT0nJz8nYWxwaGEo b3BhY2l0eT0nK2oqMTAwKycpJzonJzticmVhaztjYXNlICdmbG9hdCc6aC5zdHls ZS5jc3NGbG9hdD1oLnN0eWxlLnN0eWxlRmxvYXQ9ajticmVhaztkZWZhdWx0Omk9 aS5yZXBsYWNlKC8tKC4pL2csZnVuY3Rpb24oayxsKXtyZXR1cm4gbC50b1VwcGVy Q2FzZSgpO30pO2guc3R5bGVbaV09ajt9cmV0dXJuIGg7fSxnZXRTdHlsZTpmdW5j dGlvbihpLGspe2k9JChpKTtrPWsucmVwbGFjZSgvLSguKS9nLGZ1bmN0aW9uKGws bSl7cmV0dXJuIG0udG9VcHBlckNhc2UoKTt9KTtmdW5jdGlvbiBqKGwpe3JldHVy biBsLnJlcGxhY2UoLyhbQS1aXSkvZywnLSQxJykudG9Mb3dlckNhc2UoKTt9aWYo d2luZG93LmdldENvbXB1dGVkU3R5bGUpe3ZhciBoPXdpbmRvdy5nZXRDb21wdXRl ZFN0eWxlKGksbnVsbCk7aWYoaClyZXR1cm4gaC5nZXRQcm9wZXJ0eVZhbHVlKGoo aykpO31pZihkb2N1bWVudC5kZWZhdWx0VmlldyYmZG9jdW1lbnQuZGVmYXVsdFZp ZXcuZ2V0Q29tcHV0ZWRTdHlsZSl7dmFyIGg9ZG9jdW1lbnQuZGVmYXVsdFZpZXcu Z2V0Q29tcHV0ZWRTdHlsZShpLG51bGwpO2lmKGgpcmV0dXJuIGguZ2V0UHJvcGVy dHlWYWx1ZShqKGspKTtpZihrPT0iZGlzcGxheSIpcmV0dXJuICJub25lIjt9aWYo aS5jdXJyZW50U3R5bGUpcmV0dXJuIGkuY3VycmVudFN0eWxlW2tdO3JldHVybiBp LnN0eWxlJiZpLnN0eWxlW2tdO30sZ2V0U3R5bGVGbG9hdDpmdW5jdGlvbihoLGkp e3JldHVybiBwYXJzZUZsb2F0KGEuZ2V0U3R5bGUoaCxpKSwxMCk7fSxnZXRPcGFj aXR5OmZ1bmN0aW9uKGgpe2g9JChoKTt2YXIgaT1hLmdldFN0eWxlKGgsJ2ZpbHRl cicpO3ZhciBqPW51bGw7aWYoaSYmKGo9LyhcZCsoPzpcLlxkKyk/KS8uZXhlYyhp KSkpe3JldHVybiBwYXJzZUZsb2F0KGoucG9wKCkpLzEwMDt9ZWxzZSBpZihpPWEu Z2V0U3R5bGUoaCwnb3BhY2l0eScpKXtyZXR1cm4gcGFyc2VGbG9hdChpKTt9ZWxz ZSByZXR1cm4gMTt9LGlzRml4ZWQ6ZnVuY3Rpb24oaCl7d2hpbGUoaCYmaCE9PWRv Y3VtZW50LmRvY3VtZW50RWxlbWVudCl7aWYoYS5nZXRTdHlsZShoLCdwb3NpdGlv bicpPT09J2ZpeGVkJylyZXR1cm4gdHJ1ZTtoPWgucGFyZW50Tm9kZTt9cmV0dXJu IGZhbHNlO30sZ2V0U2Nyb2xsUGFyZW50OihmdW5jdGlvbigpe2Z1bmN0aW9uIGgo aSxrKXt2YXIgaj1hLmdldFN0eWxlKGksayk7cmV0dXJuIChqPT09J2F1dG8nfHxq PT09J3Njcm9sbCcpO31yZXR1cm4gZnVuY3Rpb24oaSl7aWYoIWkpcmV0dXJuIG51 bGw7d2hpbGUoaSE9PWRvY3VtZW50LmJvZHkpe2lmKGgoaSwnb3ZlcmZsb3cnKXx8 aChpLCdvdmVyZmxvd1knKXx8aChpLCdvdmVyZmxvd1gnKSlyZXR1cm4gaTtpPWku cGFyZW50Tm9kZTt9cmV0dXJuIHdpbmRvdzt9O30pKCl9KTtmLmV4cG9ydHM9YTt9 LDMpOwpfX2UoIkFzeW5jUmVzcG9uc2UiLFsiRW52IiwiY29weVByb3BlcnRpZXMi LCJ0eCJdLGZ1bmN0aW9uKGUsZyxmLGQpe3ZhciBiPWcoIkVudiIpO3ZhciBjPWco ImNvcHlQcm9wZXJ0aWVzIik7ZS50eD1nKCJ0eCIpO2Z1bmN0aW9uIGEoaSxoKXtj KHRoaXMse2Vycm9yOjAsZXJyb3JTdW1tYXJ5Om51bGwsZXJyb3JEZXNjcmlwdGlv bjpudWxsLG9ubG9hZDpudWxsLHJlcGxheTpmYWxzZSxwYXlsb2FkOmh8fG51bGws cmVxdWVzdDppfHxudWxsLHNpbGVudEVycm9yOmZhbHNlLGlzX2xhc3Q6dHJ1ZX0p O3JldHVybiB0aGlzO31jKGEse2RlZmF1bHRFcnJvckhhbmRsZXI6ZnVuY3Rpb24o aSl7dHJ5e2lmKCFpLnNpbGVudEVycm9yKXthLnZlcmJvc2VFcnJvckhhbmRsZXIo aSk7fWVsc2UgaS5sb2dFcnJvckJ5R3JvdXAoJ3NpbGVudCcsMTApO31jYXRjaCho KXthbGVydChpKTt9fSx2ZXJib3NlRXJyb3JIYW5kbGVyOmZ1bmN0aW9uKGkpe3Ry eXt2YXIgc3VtbWFyeT1pLmdldEVycm9yU3VtbWFyeSgpO3ZhciBkZXNjPWkuZ2V0 RXJyb3JEZXNjcmlwdGlvbigpO2kubG9nRXJyb3JCeUdyb3VwKCdwb3B1cCcsMTAp O2lmKGkuc2lsZW50RXJyb3ImJmRlc2M9PScnKWRlc2M9IlNlIGhhIHByb2R1Y2lk byB1biBlcnJvciB5IGVzdGFtb3MgdHJhYmFqYW5kbyBwYXJhIGFycmVnbGFybG8g ZW4gY3VhbnRvIHNlYSBwb3NpYmxlLiBQcm9udG8gcG9kclx1MDBlMXMgdm9sdmVy IGEgaW50ZW50YXJsby4iO0Jvb3Rsb2FkZXIubG9hZENvbXBvbmVudHMoJ2RpYWxv ZycsZnVuY3Rpb24oKXtuZXcgRGlhbG9nKCkuc2V0VGl0bGUoc3VtbWFyeSkuc2V0 Qm9keShkZXNjKS5zZXRCdXR0b25zKFtEaWFsb2cuT0tdKS5zZXRNb2RhbCh0cnVl KS5zZXRDYXVzYWxFbGVtZW50KHRoaXMucmVsYXRpdmVUbykuc2hvdygpO30pO31j YXRjaChoKXthbGVydChpKTt9fX0pO2MoYS5wcm90b3R5cGUse2dldFJlcXVlc3Q6 ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZXF1ZXN0O30sZ2V0UGF5bG9hZDpmdW5j dGlvbigpe3JldHVybiB0aGlzLnBheWxvYWQ7fSxnZXRFcnJvcjpmdW5jdGlvbigp e3JldHVybiB0aGlzLmVycm9yO30sZ2V0RXJyb3JTdW1tYXJ5OmZ1bmN0aW9uKCl7 cmV0dXJuIHRoaXMuZXJyb3JTdW1tYXJ5O30sc2V0RXJyb3JTdW1tYXJ5OmZ1bmN0 aW9uKGgpe2g9KGg9PT11bmRlZmluZWQ/bnVsbDpoKTt0aGlzLmVycm9yU3VtbWFy eT1oO3JldHVybiB0aGlzO30sZ2V0RXJyb3JEZXNjcmlwdGlvbjpmdW5jdGlvbigp e3JldHVybiB0aGlzLmVycm9yRGVzY3JpcHRpb247fSxnZXRFcnJvcklzV2Fybmlu ZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVycm9ySXNXYXJuaW5nO30sbG9nRXJy b3I6ZnVuY3Rpb24oaCxqKXtpZih3aW5kb3cuc2VuZF9lcnJvcl9zaWduYWwpe3Zh ciBpPXtlcnJfY29kZTp0aGlzLmVycm9yLHZpcDooYi52aXB8fCctJyl9O2lmKGoh PT11bmRlZmluZWQpe2kuZHVyYXRpb249ai5kdXJhdGlvbjtpLnhmYl9pcD1qLnhm Yl9pcDt9dmFyIGs9dGhpcy5yZXF1ZXN0LmdldFVSSSgpO2kucGF0aD1rfHwnLSc7 aS5haWQ9dGhpcy5yZXF1ZXN0LnVzZXJBY3Rpb25JRDtpZihrJiZrLmluZGV4T2Yo J3NjcmliZV9lbmRwb2ludC5waHAnKSE9LTEpaD0nYXN5bmNfZXJyb3JfZG91Ymxl JztzZW5kX2Vycm9yX3NpZ25hbChoLEpTT04uc3RyaW5naWZ5KGkpKTt9fSxsb2dF cnJvckJ5R3JvdXA6ZnVuY3Rpb24oaSxoKXtpZihNYXRoLmZsb29yKE1hdGgucmFu ZG9tKCkqaCk9PTApaWYodGhpcy5lcnJvcj09MTM1NzAxMHx8dGhpcy5lcnJvcjwx NTAwMCl7dGhpcy5sb2dFcnJvcignYXN5bmNfZXJyb3Jfb29wc18nK2kpO31lbHNl IHRoaXMubG9nRXJyb3IoJ2FzeW5jX2Vycm9yX2xvZ2ljXycraSk7fX0pO2YuZXhw b3J0cz1hO30pOwpfX2UoImNvb2tpZSIsWyJFbnYiXSxmdW5jdGlvbihkLGYsZSxj KXt2YXIgYj1mKCdFbnYnKTt2YXIgYT17c2V0OmZ1bmN0aW9uKGcsaCxqLGssbCl7 aWYoYi5ub19jb29raWVzJiZnIT0ndHBhJylyZXR1cm47dmFyIGk7aWYoail7dmFy IG09bmV3IERhdGUoKTtpPW5ldyBEYXRlKCk7aS5zZXRUaW1lKG0uZ2V0VGltZSgp K2opO31kb2N1bWVudC5jb29raWU9ZysiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGgp KyI7ICIrKGo/ImV4cGlyZXM9IitpLnRvR01UU3RyaW5nKCkrIjsgIjoiIikrInBh dGg9Iisoa3x8Jy8nKSsiOyBkb21haW49Iit3aW5kb3cubG9jYXRpb24uaG9zdG5h bWUucmVwbGFjZSgvXi4qKFwuZmFjZWJvb2tcLi4qKSQvaSwnJDEnKSsobD8iOyBz ZWN1cmUiOiIiKTt9LGNsZWFyOmZ1bmN0aW9uKGcpe2RvY3VtZW50LmNvb2tpZT1n KyI9OyBleHBpcmVzPVRodSwgMDEtSmFuLTE5NzAgMDA6MDA6MDEgR01UOyAiKyJw YXRoPS87IGRvbWFpbj0iK3dpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZS5yZXBsYWNl KC9eLiooXC5mYWNlYm9va1wuLiopJC9pLCckMScpO30sZ2V0OmZ1bmN0aW9uKGop e3ZhciBrPWorIj0iO3ZhciBoPWRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpO2Zv cih2YXIgaT0wO2k8aC5sZW5ndGg7aSsrKXt2YXIgZz1oW2ldO3doaWxlKGcuY2hh ckF0KDApPT0nICcpZz1nLnN1YnN0cmluZygxLGcubGVuZ3RoKTtpZihnLmluZGV4 T2Yoayk9PT0wKXJldHVybiBkZWNvZGVVUklDb21wb25lbnQoZy5zdWJzdHJpbmco ay5sZW5ndGgsZy5sZW5ndGgpKTt9cmV0dXJuIG51bGw7fX07ZS5leHBvcnRzPWE7 ZC5nZXRDb29raWU9YS5nZXQ7ZC5zZXRDb29raWU9YS5zZXQ7ZC5jbGVhckNvb2tp ZT1hLmNsZWFyO30sMyk7Cl9fZSgidXJpIixbImRvbSIsImNvcHlQcm9wZXJ0aWVz Il0sZnVuY3Rpb24oZSxnLGYsZCl7dmFyIGE9ZygnZG9tJyk7dmFyIGM9ZygnY29w eVByb3BlcnRpZXMnKTtmdW5jdGlvbiBiKGgpe2lmKCEodGhpcyBpbnN0YW5jZW9m IGIpKXJldHVybiBuZXcgYihofHx3aW5kb3cubG9jYXRpb24uaHJlZik7dGhpcy5w YXJzZShofHwnJyk7fWMoYix7Z2V0UmVxdWVzdFVSSTpmdW5jdGlvbihoLGkpe2g9 aD09PXVuZGVmaW5lZHx8aDtpZihoJiZ3aW5kb3cuUGFnZVRyYW5zaXRpb25zJiZQ YWdlVHJhbnNpdGlvbnMuaXNJbml0aWFsaXplZCgpKXtyZXR1cm4gUGFnZVRyYW5z aXRpb25zLmdldEN1cnJlbnRVUkkoISFpKS5nZXRRdWFsaWZpZWRVUkkoKTt9ZWxz ZSByZXR1cm4gbmV3IGIod2luZG93LmxvY2F0aW9uLmhyZWYpO30sZ2V0TW9zdFJl Y2VudFVSSTpmdW5jdGlvbigpe2lmKHdpbmRvdy5QYWdlVHJhbnNpdGlvbnMmJlBh Z2VUcmFuc2l0aW9ucy5pc0luaXRpYWxpemVkKCkpe3JldHVybiBQYWdlVHJhbnNp dGlvbnMuZ2V0TW9zdFJlY2VudFVSSSgpLmdldFF1YWxpZmllZFVSSSgpO31lbHNl IHJldHVybiBuZXcgYih3aW5kb3cubG9jYXRpb24uaHJlZik7fSxnZXROZXh0VVJJ OmZ1bmN0aW9uKCl7aWYod2luZG93LlBhZ2VUcmFuc2l0aW9ucyYmUGFnZVRyYW5z aXRpb25zLmlzSW5pdGlhbGl6ZWQoKSl7cmV0dXJuIFBhZ2VUcmFuc2l0aW9ucy5n ZXROZXh0VVJJKCkuZ2V0UXVhbGlmaWVkVVJJKCk7fWVsc2UgcmV0dXJuIG5ldyBi KHdpbmRvdy5sb2NhdGlvbi5ocmVmKTt9LGV4cHJlc3Npb246LygoKFx3Kyk6XC9c LykoW15cLzpdKikoOihcZCspKT8pPyhbXiM/XSopKFw/KFteI10qKSk/KCMoLiop KT8vLGFycmF5UXVlcnlFeHByZXNzaW9uOi9eKFx3KykoKD86XFtcdypcXSkrKT0/ KC4qKS8sZXhwbG9kZVF1ZXJ5OmZ1bmN0aW9uKG4pe2lmKCFuKXJldHVybiB7fTt2 YXIgbz17fTtuPW4ucmVwbGFjZSgvJTVCL2lnLCdbJykucmVwbGFjZSgvJTVEL2ln LCddJyk7bj1uLnNwbGl0KCcmJyk7Zm9yKHZhciBpPTAsaz1uLmxlbmd0aDtpPGs7 aSsrKXt2YXIgbD1uW2ldLm1hdGNoKGIuYXJyYXlRdWVyeUV4cHJlc3Npb24pO2lm KCFsKXt2YXIgcT1uW2ldLnNwbGl0KCc9Jyk7b1tiLmRlY29kZUNvbXBvbmVudChx WzBdKV09cVsxXT09PXVuZGVmaW5lZD9udWxsOmIuZGVjb2RlQ29tcG9uZW50KHFb MV0pO31lbHNle3ZhciBqPWxbMl0uc3BsaXQoL1xdXFt8XFt8XF0vKS5zbGljZSgw LC0xKTt2YXIgbT1sWzFdO3ZhciByPWIuZGVjb2RlQ29tcG9uZW50KGxbM118fCcn KTtqWzBdPW07dmFyIHA9bztmb3IodmFyIGg9MDtoPGoubGVuZ3RoLTE7aCsrKWlm KGpbaF0pe2lmKHBbaltoXV09PT11bmRlZmluZWQpaWYoaltoKzFdJiYhaltoKzFd Lm1hdGNoKC9eXGQrJC8pKXtwW2pbaF1dPXt9O31lbHNlIHBbaltoXV09W107cD1w W2pbaF1dO31lbHNle2lmKGpbaCsxXSYmIWpbaCsxXS5tYXRjaCgvXlxkKyQvKSl7 cC5wdXNoKHt9KTt9ZWxzZSBwLnB1c2goW10pO3A9cFtwLmxlbmd0aC0xXTt9aWYo cCBpbnN0YW5jZW9mIEFycmF5JiZqW2oubGVuZ3RoLTFdPT09Jycpe3AucHVzaChy KTt9ZWxzZSBwW2pbai5sZW5ndGgtMV1dPXI7fX1yZXR1cm4gbzt9LGltcGxvZGVR dWVyeTpmdW5jdGlvbihtLGwsaCl7bD1sfHwnJztpZihoPT09dW5kZWZpbmVkKWg9 dHJ1ZTt2YXIgbj1bXTtpZihtPT09bnVsbHx8bT09PXVuZGVmaW5lZCl7bi5wdXNo KGg/Yi5lbmNvZGVDb21wb25lbnQobCk6bCk7fWVsc2UgaWYobSBpbnN0YW5jZW9m IEFycmF5KXtmb3IodmFyIGo9MDtqPG0ubGVuZ3RoOysrail0cnl7aWYobVtqXSE9 PXVuZGVmaW5lZCluLnB1c2goYi5pbXBsb2RlUXVlcnkobVtqXSxsPyhsKydbJytq KyddJyk6aikpO31jYXRjaChpKXt9fWVsc2UgaWYodHlwZW9mKG0pPT0nb2JqZWN0 Jyl7aWYoYS5pc05vZGUobSkpe24ucHVzaCgne25vZGV9Jyk7fWVsc2UgZm9yKHZh ciBrIGluIG0pdHJ5e2lmKG1ba10hPT11bmRlZmluZWQpbi5wdXNoKGIuaW1wbG9k ZVF1ZXJ5KG1ba10sbD8obCsnWycraysnXScpOmspKTt9Y2F0Y2goaSl7fX1lbHNl IGlmKGgpe24ucHVzaChiLmVuY29kZUNvbXBvbmVudChsKSsnPScrYi5lbmNvZGVD b21wb25lbnQobSkpO31lbHNlIG4ucHVzaChsKyc9JyttKTtyZXR1cm4gbi5qb2lu KCcmJyk7fSxlbmNvZGVDb21wb25lbnQ6ZnVuY3Rpb24oayl7dmFyIGo9U3RyaW5n KGspLnNwbGl0KC8oW1xbXF1dKS8pO2Zvcih2YXIgaD0wLGk9ai5sZW5ndGg7aDxp O2grPTIpaltoXT1lbmNvZGVVUklDb21wb25lbnQoaltoXSk7cmV0dXJuIGouam9p bignJyk7fSxkZWNvZGVDb21wb25lbnQ6ZnVuY3Rpb24oaCl7cmV0dXJuIGRlY29k ZVVSSUNvbXBvbmVudChoLnJlcGxhY2UoL1wrL2csJyAnKSk7fSxJTlZBTElEX0RP TUFJTjonaW52YWxpZC5pbnZhbGlkJyxzYW5pdGl6ZURvbWFpbjpmdW5jdGlvbiho KXt2YXIgaT1uZXcgUmVnRXhwKCdbXFx4MDAtXFx4MmNcXHgyZlxceDNiLVxceDQw XFx4NWNcXHg1ZVxceDYwXFx4N2ItXFx4N2YnKydcXHVGREQwLVxcdUZERUZcXHVG RkYwLVxcdUZGRkYnKydcXHUyMDQ3XFx1MjA0OFxcdUZFNTZcXHVGRTVGXFx1RkYw M1xcdUZGMEZcXHVGRjFGXScpO2lmKGkudGVzdChoKSl7cmV0dXJuIGIuSU5WQUxJ RF9ET01BSU47fWVsc2UgcmV0dXJuIGg7fX0pO2MoYi5wcm90b3R5cGUse3BhcnNl OmZ1bmN0aW9uKGkpe3ZhciBoPWkudG9TdHJpbmcoKS5tYXRjaChiLmV4cHJlc3Np b24pO2ModGhpcyx7cHJvdG9jb2w6aFszXXx8JycsZG9tYWluOmIuc2FuaXRpemVE b21haW4oaFs0XXx8JycpLHBvcnQ6aFs2XXx8JycscGF0aDpoWzddfHwnJyxxdWVy eV9zOmhbOV18fCcnLGZyYWdtZW50OmhbMTFdfHwnJ30pO3JldHVybiB0aGlzO30s c2V0UHJvdG9jb2w6ZnVuY3Rpb24oaCl7dGhpcy5wcm90b2NvbD1oO3JldHVybiB0 aGlzO30sZ2V0UHJvdG9jb2w6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm90b2Nv bDt9LHNldFF1ZXJ5RGF0YTpmdW5jdGlvbihoKXt0aGlzLnF1ZXJ5X3M9Yi5pbXBs b2RlUXVlcnkoaCk7cmV0dXJuIHRoaXM7fSxhZGRRdWVyeURhdGE6ZnVuY3Rpb24o aCl7cmV0dXJuIHRoaXMuc2V0UXVlcnlEYXRhKGModGhpcy5nZXRRdWVyeURhdGEo KSxoKSk7fSxyZW1vdmVRdWVyeURhdGE6ZnVuY3Rpb24oaSl7aWYoIShpIGluc3Rh bmNlb2YgQXJyYXkpKWk9W2ldO3ZhciBrPXRoaXMuZ2V0UXVlcnlEYXRhKCk7Zm9y KHZhciBoPTAsaj1pLmxlbmd0aDtoPGo7KytoKWRlbGV0ZSBrW2lbaF1dO3JldHVy biB0aGlzLnNldFF1ZXJ5RGF0YShrKTt9LGdldFF1ZXJ5RGF0YTpmdW5jdGlvbigp e3JldHVybiBiLmV4cGxvZGVRdWVyeSh0aGlzLnF1ZXJ5X3MpO30sc2V0RnJhZ21l bnQ6ZnVuY3Rpb24oaCl7dGhpcy5mcmFnbWVudD1oO3JldHVybiB0aGlzO30sZ2V0 RnJhZ21lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mcmFnbWVudDt9LHNldERv bWFpbjpmdW5jdGlvbihoKXt0aGlzLmRvbWFpbj1iLnNhbml0aXplRG9tYWluKGgp O3JldHVybiB0aGlzO30sZ2V0RG9tYWluOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu ZG9tYWluO30sc2V0UG9ydDpmdW5jdGlvbihoKXt0aGlzLnBvcnQ9aDtyZXR1cm4g dGhpczt9LGdldFBvcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wb3J0O30sc2V0 UGF0aDpmdW5jdGlvbihoKXt0aGlzLnBhdGg9aDtyZXR1cm4gdGhpczt9LGdldFBh dGg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXRoLnJlcGxhY2UoL15cLysvLCcv Jyk7fSxpc0VtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuICEodGhpcy5wYXRofHx0aGlz LnByb3RvY29sfHx0aGlzLmRvbWFpbnx8dGhpcy5wb3J0fHx0aGlzLnF1ZXJ5X3N8 fHRoaXMuZnJhZ21lbnQpO30sdG9TdHJpbmc6ZnVuY3Rpb24oKXt2YXIgaD0nJzt0 aGlzLnByb3RvY29sJiYoaCs9dGhpcy5wcm90b2NvbCsnOi8vJyk7dGhpcy5kb21h aW4mJihoKz10aGlzLmRvbWFpbik7dGhpcy5wb3J0JiYoaCs9JzonK3RoaXMucG9y dCk7aWYodGhpcy5kb21haW4mJiF0aGlzLnBhdGgpaCs9Jy8nO3RoaXMucGF0aCYm KGgrPXRoaXMucGF0aCk7dGhpcy5xdWVyeV9zJiYoaCs9Jz8nK3RoaXMucXVlcnlf cyk7dGhpcy5mcmFnbWVudCYmKGgrPScjJyt0aGlzLmZyYWdtZW50KTtyZXR1cm4g aDt9LHZhbHVlT2Y6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygpO30s aXNGYWNlYm9va1VSSTpmdW5jdGlvbigpe2lmKCFiLl9mYWNlYm9va1VSSVJlZ2V4 KWIuX2ZhY2Vib29rVVJJUmVnZXg9bmV3IFJlZ0V4cCgnKF58XFwuKWZhY2Vib29r XFwuY29tKFteLl0qKSQnLCdpJyk7cmV0dXJuICghdGhpcy5kb21haW58fGIuX2Zh Y2Vib29rVVJJUmVnZXgudGVzdCh0aGlzLmRvbWFpbikpO30saXNRdWlja2xpbmdF bmFibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5RdWlja2xpbmcmJlF1aWNr bGluZy5pc0FjdGl2ZSgpJiZRdWlja2xpbmcuaXNQYWdlQWN0aXZlKHRoaXMpO30s Z2V0UmVnaXN0ZXJlZERvbWFpbjpmdW5jdGlvbigpe2lmKCF0aGlzLmRvbWFpbily ZXR1cm4gJyc7aWYoIXRoaXMuaXNGYWNlYm9va1VSSSgpKXJldHVybiBudWxsO3Zh ciBpPXRoaXMuZG9tYWluLnNwbGl0KCcuJyk7dmFyIGg9aS5pbmRleE9mKCdmYWNl Ym9vaycpO3JldHVybiBpLnNsaWNlKGgpLmpvaW4oJy4nKTt9LGdldFVucXVhbGlm aWVkVVJJOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBiKHRoaXMpLnNldFByb3RvY29s KG51bGwpLnNldERvbWFpbihudWxsKS5zZXRQb3J0KG51bGwpO30sZ2V0UXVhbGlm aWVkVVJJOmZ1bmN0aW9uKCl7dmFyIGk9bmV3IGIodGhpcyk7aWYoIWkuZ2V0RG9t YWluKCkpe3ZhciBoPWIoKTtpLnNldFByb3RvY29sKGguZ2V0UHJvdG9jb2woKSku c2V0RG9tYWluKGguZ2V0RG9tYWluKCkpLnNldFBvcnQoaC5nZXRQb3J0KCkpO31y ZXR1cm4gaTt9LGlzU2FtZU9yaWdpbjpmdW5jdGlvbihoKXt2YXIgaT1ofHx3aW5k b3cubG9jYXRpb24uaHJlZjtpZighKGkgaW5zdGFuY2VvZiBiKSlpPW5ldyBiKGku dG9TdHJpbmcoKSk7aWYodGhpcy5nZXRQcm90b2NvbCgpJiZ0aGlzLmdldFByb3Rv Y29sKCkhPWkuZ2V0UHJvdG9jb2woKSlyZXR1cm4gZmFsc2U7aWYodGhpcy5nZXRE b21haW4oKSYmdGhpcy5nZXREb21haW4oKSE9aS5nZXREb21haW4oKSlyZXR1cm4g ZmFsc2U7cmV0dXJuIHRydWU7fSxnbzpmdW5jdGlvbihoKXtnb1VSSSh0aGlzLGgp O30sc2V0U3ViZG9tYWluOmZ1bmN0aW9uKGkpe3ZhciBqPW5ldyBiKHRoaXMpLmdl dFF1YWxpZmllZFVSSSgpO3ZhciBoPWouZ2V0RG9tYWluKCkuc3BsaXQoJy4nKTtp ZihoLmxlbmd0aDw9Mil7aC51bnNoaWZ0KGkpO31lbHNlIGhbMF09aTtyZXR1cm4g ai5zZXREb21haW4oaC5qb2luKCcuJykpO30sZ2V0U3ViZG9tYWluOmZ1bmN0aW9u KCl7aWYoIXRoaXMuZ2V0RG9tYWluKCkpcmV0dXJuICcnO3ZhciBoPXRoaXMuZ2V0 RG9tYWluKCkuc3BsaXQoJy4nKTtpZihoLmxlbmd0aDw9Mil7cmV0dXJuICcnO31l bHNlIHJldHVybiBoWzBdO30sc2V0U2VjdXJlOmZ1bmN0aW9uKGgpe3JldHVybiB0 aGlzLnNldFByb3RvY29sKGg/J2h0dHBzJzonaHR0cCcpO30saXNTZWN1cmU6ZnVu Y3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRQcm90b2NvbCgpPT0naHR0cHMnO319KTtl LlVSST1mLmV4cG9ydHM9Yjt9LDMpOwpfX2UoIkFzeW5jUmVxdWVzdCIsWyJhcnJh eS1leHRlbnNpb25zIiwiZXZlbnQtZXh0ZW5zaW9ucyIsImpzb24iLCJBc3luY0RP TSIsIkFzeW5jUmVzcG9uc2UiLCJib290bG9hZGVyIiwiY29va2llIiwiY3NzLWNv cmUiLCJkb20iLCJFbnYiLCJKU0NDIiwicGFyZW50IiwidXJpIiwidXRpbCIsImJp bmQiLCJjb3B5UHJvcGVydGllcyIsImdvVVJJIiwiaW52b2tlQ2FsbGJhY2tzIiwi aXNFbXB0eSIsImV2YWwtZ2xvYmFsIl0sZnVuY3Rpb24oZ2xvYmFsLHJlcXVpcmUs bW9kdWxlLGV4cG9ydHMpe3JlcXVpcmUoImFycmF5LWV4dGVuc2lvbnMiKTtyZXF1 aXJlKCJldmVudC1leHRlbnNpb25zIik7cmVxdWlyZSgianNvbiIpO3ZhciBBc3lu Y0RPTT1yZXF1aXJlKCJBc3luY0RPTSIpO3ZhciBBc3luY1Jlc3BvbnNlPXJlcXVp cmUoIkFzeW5jUmVzcG9uc2UiKTt2YXIgQm9vdGxvYWRlcj1yZXF1aXJlKCJib290 bG9hZGVyIik7dmFyIENvb2tpZT1yZXF1aXJlKCJjb29raWUiKTt2YXIgQ1NTPXJl cXVpcmUoImNzcy1jb3JlIik7dmFyIERPTT1yZXF1aXJlKCJkb20iKTt2YXIgRW52 PXJlcXVpcmUoIkVudiIpO3ZhciBKU0NDPXJlcXVpcmUoIkpTQ0MiKTt2YXIgUGFy ZW50PXJlcXVpcmUoInBhcmVudCIpO3ZhciBVUkk9cmVxdWlyZSgidXJpIik7dmFy IFV0aWw9cmVxdWlyZSgidXRpbCIpO3ZhciBiaW5kPXJlcXVpcmUoImJpbmQiKTt2 YXIgY29weVByb3BlcnRpZXM9cmVxdWlyZSgiY29weVByb3BlcnRpZXMiKTt2YXIg Z29VUkk9cmVxdWlyZSgiZ29VUkkiKTt2YXIgaW52b2tlQ2FsbGJhY2tzPXJlcXVp cmUoImludm9rZUNhbGxiYWNrcyIpO3ZhciBpc0VtcHR5PXJlcXVpcmUoImlzRW1w dHkiKTtmdW5jdGlvbiBBc3luY1JlcXVlc3QodXJpKXt2YXIgZGlzcGF0Y2hSZXNw b25zZT1iaW5kKHRoaXMsZnVuY3Rpb24oYXN5bmNSZXNwb25zZSl7dHJ5e3RoaXMu Y2xlYXJTdGF0dXNJbmRpY2F0b3IoKTtpZighdGhpcy5pc1JlbGV2YW50KCkpe2lu dm9rZUVycm9ySGFuZGxlcigxMDEwKTtyZXR1cm47fWlmKHRoaXMuaW5pdGlhbEhh bmRsZXIoYXN5bmNSZXNwb25zZSkhPT1mYWxzZSl7Y2xlYXJUaW1lb3V0KHRoaXMu dGltZXIpO2FzeW5jUmVzcG9uc2UuanNjYyYmaW52b2tlQ2FsbGJhY2tzKFthc3lu Y1Jlc3BvbnNlLmpzY2NdKTtpZihhc3luY1Jlc3BvbnNlLmpzY2NfbWFwKXt2YXIg anNjY19tYXA9ZXZhbChhc3luY1Jlc3BvbnNlLmpzY2NfbWFwKTtKU0NDLmluaXQo anNjY19tYXApO31pZih0aGlzLmhhbmRsZXIpdHJ5e3ZhciBzdXBwcmVzc19vbmxv YWQ9dGhpcy5oYW5kbGVyKGFzeW5jUmVzcG9uc2UpO31jYXRjaChleGNlcHRpb24p e2FzeW5jUmVzcG9uc2UuaXNfbGFzdCYmdGhpcy5maW5hbGx5SGFuZGxlcihhc3lu Y1Jlc3BvbnNlKTt0aHJvdyBleGNlcHRpb247fWlmKHN1cHByZXNzX29ubG9hZCE9 PUFzeW5jUmVxdWVzdC5zdXBwcmVzc09ubG9hZFRva2VuKXt2YXIgZG9tT3BzPWFz eW5jUmVzcG9uc2UuZG9tb3BzO2lmKGRvbU9wcylBc3luY0RPTS5pbnZva2UoZG9t T3BzLHRoaXMuZ2V0UmVsYXRpdmVUbygpKTthc3luY1Jlc3BvbnNlLmpzY2FsbHMm Jmludm9rZUNhbGxiYWNrcyhbYXN5bmNSZXNwb25zZS5qc2NhbGxzXSk7dmFyIG9u bG9hZD1hc3luY1Jlc3BvbnNlLm9ubG9hZDtpZihvbmxvYWQpZm9yKHZhciBpaT0w O2lpPG9ubG9hZC5sZW5ndGg7aWkrKyl0cnl7KG5ldyBGdW5jdGlvbihvbmxvYWRb aWldKSkuYXBwbHkodGhpcyk7fWNhdGNoKGV4Y2VwdGlvbil7fWlmKHRoaXMubGlk KUFyYml0ZXIuaW5mb3JtKCd0dGlfYWpheCcse3M6dGhpcy5saWQsZDpbdGhpcy5f c2VuZFRpbWVTdGFtcHx8MCwodGhpcy5fc2VuZFRpbWVTdGFtcCYmdGhpcy5fcmVz cG9uc2VUaW1lKT8odGhpcy5fcmVzcG9uc2VUaW1lLXRoaXMuX3NlbmRUaW1lU3Rh bXApOjBdfSxBcmJpdGVyLkJFSEFWSU9SX0VWRU5UKTt2YXIgb25hZnRlcmxvYWQ9 YXN5bmNSZXNwb25zZS5vbmFmdGVybG9hZDtpZihvbmFmdGVybG9hZClmb3IodmFy IGlpPTA7aWk8b25hZnRlcmxvYWQubGVuZ3RoO2lpKyspdHJ5eyhuZXcgRnVuY3Rp b24ob25hZnRlcmxvYWRbaWldKSkuYXBwbHkodGhpcyk7fWNhdGNoKGV4Y2VwdGlv bil7fX1hc3luY1Jlc3BvbnNlLmlzX2xhc3QmJnRoaXMuZmluYWxseUhhbmRsZXIo YXN5bmNSZXNwb25zZSk7fX1jYXRjaChleGNlcHRpb24pe319KTt2YXIgZGlzcGF0 Y2hFcnJvclJlc3BvbnNlPWJpbmQodGhpcyxmdW5jdGlvbihhc3luY1Jlc3BvbnNl LGlzVHJhbnNwb3J0KXt0cnl7dGhpcy5jbGVhclN0YXR1c0luZGljYXRvcigpO3Zh ciBhc3luY19lcnJvcj1hc3luY1Jlc3BvbnNlLmdldEVycm9yKCk7aWYodGhpcy5f c2VuZFRpbWVTdGFtcCl7dmFyIF9kdXJhdGlvbj1EYXRlLm5vdygpLXRoaXMuX3Nl bmRUaW1lU3RhbXA7dmFyIHhmYl9pcD10aGlzLl94RmJTZXJ2ZXJ8fCctJzthc3lu Y1Jlc3BvbnNlLmxvZ0Vycm9yKCdhc3luY19lcnJvcicse2R1cmF0aW9uOl9kdXJh dGlvbix4ZmJfaXA6eGZiX2lwfSk7fWVsc2UgYXN5bmNSZXNwb25zZS5sb2dFcnJv cignYXN5bmNfZXJyb3InKTtpZigoIXRoaXMuaXNSZWxldmFudCgpKXx8YXN5bmNf ZXJyb3I9PT0xMDEwKXJldHVybjtpZihhc3luY19lcnJvcj09MTM1NzAwOHx8YXN5 bmNfZXJyb3I9PTEzNTcwMDd8fGFzeW5jX2Vycm9yPT0xNDQyMDAyfHxhc3luY19l cnJvcj09MTM1NzAwMSl7dmFyIGlzX2NvbmZpcm1hdGlvbj1mYWxzZTtpZihhc3lu Y19lcnJvcj09MTM1NzAwOHx8YXN5bmNfZXJyb3I9PTEzNTcwMDcpaXNfY29uZmly bWF0aW9uPXRydWU7dmFyIHBheWxvYWQ9YXN5bmNSZXNwb25zZS5nZXRQYXlsb2Fk KCk7dGhpcy5fZGlzcGxheVNlcnZlckRpYWxvZyhwYXlsb2FkLl9fZGlhbG9nLGlz X2NvbmZpcm1hdGlvbik7fWVsc2UgaWYodGhpcy5pbml0aWFsSGFuZGxlcihhc3lu Y1Jlc3BvbnNlKSE9PWZhbHNlKXtjbGVhclRpbWVvdXQodGhpcy50aW1lcik7dHJ5 e2lmKGlzVHJhbnNwb3J0KXt0aGlzLnRyYW5zcG9ydEVycm9ySGFuZGxlcihhc3lu Y1Jlc3BvbnNlKTt9ZWxzZSB0aGlzLmVycm9ySGFuZGxlcihhc3luY1Jlc3BvbnNl KTt9Y2F0Y2goZXhjZXB0aW9uKXt0aGlzLmZpbmFsbHlIYW5kbGVyKGFzeW5jUmVz cG9uc2UpO3Rocm93IGV4Y2VwdGlvbjt9dGhpcy5maW5hbGx5SGFuZGxlcihhc3lu Y1Jlc3BvbnNlKTt9fWNhdGNoKGV4Y2VwdGlvbil7fX0pO3ZhciBfaW50ZXJwcmV0 VHJhbnNwb3J0UmVzcG9uc2U9YmluZCh0aGlzLGZ1bmN0aW9uKCl7aWYodGhpcy5n ZXRPcHRpb24oJ3N1cHByZXNzRXZhbHVhdGlvbicpKXt2YXIgcj1uZXcgQXN5bmNS ZXNwb25zZSh0aGlzLHRoaXMudHJhbnNwb3J0KTtyZXR1cm4ge2FzeW5jUmVzcG9u c2U6cn07fXZhciBfc2VuZEVycm9yPWZ1bmN0aW9uKHAsZXJyb3JfY29kZSxzdHIp e2lmKCF3aW5kb3cuc2VuZF9lcnJvcl9zaWduYWwpcmV0dXJuO2lmKHRoaXMuX3hG YlNlcnZlcil7ZXJyb3JfY29kZT0nMTAwOF8nK2Vycm9yX2NvZGU7fWVsc2UgZXJy b3JfY29kZT0nMTAxMl8nK2Vycm9yX2NvZGU7c2VuZF9lcnJvcl9zaWduYWwoJ2Fz eW5jX3hwb3J0X3Jlc3AnLGVycm9yX2NvZGUrJzonKyh0aGlzLl94RmJTZXJ2ZXJ8 fCctJykrJzonK3AuZ2V0VVJJKCkrJzonK3N0ci5sZW5ndGgrJzonK3N0ci5zdWJz dHIoMCwxNjAwKSk7fTt2YXIgc2hpZWxkPSJmb3IgKDs7KTsiO3ZhciBzaGllbGRs ZW49c2hpZWxkLmxlbmd0aDt2YXIgdGV4dD10aGlzLnRyYW5zcG9ydC5yZXNwb25z ZVRleHQ7aWYodGV4dC5sZW5ndGg8PXNoaWVsZGxlbil7X3NlbmRFcnJvcih0aGlz LCdlbXB0eScsdGV4dCk7cmV0dXJuIHt0cmFuc3BvcnRFcnJvcjonUmVzcG9uc2Ug dG9vIHNob3J0IG9uIGFzeW5jIHRvICcrdGhpcy5nZXRVUkkoKX07fXZhciBvZmZz ZXQ9MDt3aGlsZSh0ZXh0LmNoYXJBdChvZmZzZXQpPT0iICJ8fHRleHQuY2hhckF0 KG9mZnNldCk9PSJcbiIpb2Zmc2V0Kys7b2Zmc2V0JiZ0ZXh0LnN1YnN0cmluZyhv ZmZzZXQsb2Zmc2V0K3NoaWVsZGxlbik9PXNoaWVsZDt2YXIgc2FmZVJlc3BvbnNl PXRleHQuc3Vic3RyaW5nKG9mZnNldCtzaGllbGRsZW4pO3RyeXt2YXIgcmVzcG9u c2U9ZXZhbCgnKCcrc2FmZVJlc3BvbnNlKycpJyk7fWNhdGNoKGV4Y2VwdGlvbil7 X3NlbmRFcnJvcih0aGlzLCdleGNlcCcsdGV4dCk7cmV0dXJuIHt0cmFuc3BvcnRF cnJvcjonZXZhbCgpIGZhaWxlZCBvbiBhc3luYyB0byAnK3RoaXMuZ2V0VVJJKCl9 O31yZXR1cm4gaW50ZXJwcmV0UmVzcG9uc2UocmVzcG9uc2UpO30pO3ZhciBpbnRl cnByZXRSZXNwb25zZT1iaW5kKHRoaXMsZnVuY3Rpb24ocmVzcG9uc2Upe2lmKHJl c3BvbnNlLnJlZGlyZWN0KXJldHVybiB7cmVkaXJlY3Q6cmVzcG9uc2UucmVkaXJl Y3R9O3ZhciByPW5ldyBBc3luY1Jlc3BvbnNlKHRoaXMpO2lmKHJlc3BvbnNlLl9f YXIhPTEpe3IucGF5bG9hZD1yZXNwb25zZTt9ZWxzZXtjb3B5UHJvcGVydGllcyhy LHJlc3BvbnNlKTtpZihyZXNwb25zZS50cGx0cylpZih3aW5kb3cuRHluYVRlbXBs YXRlKUR5bmFUZW1wbGF0ZS5yZWdpc3RlclRlbXBsYXRlcyhyZXNwb25zZS50cGx0 cyk7fXJldHVybiB7YXN5bmNSZXNwb25zZTpyfTt9KTt2YXIgaW52b2tlUmVzcG9u c2VIYW5kbGVyPWJpbmQodGhpcyxmdW5jdGlvbihpbnRlcnApe2lmKHR5cGVvZihp bnRlcnAucmVkaXJlY3QpIT0ndW5kZWZpbmVkJyl7KGZ1bmN0aW9uKCl7dGhpcy5z ZXRVUkkoaW50ZXJwLnJlZGlyZWN0KS5zZW5kKCk7fSkuYmluZCh0aGlzKS5kZWZl cigpO3JldHVybjt9aWYodGhpcy5oYW5kbGVyfHx0aGlzLmVycm9ySGFuZGxlcnx8 dGhpcy50cmFuc3BvcnRFcnJvckhhbmRsZXIpaWYodHlwZW9mKGludGVycC5hc3lu Y1Jlc3BvbnNlKSE9J3VuZGVmaW5lZCcpe3ZhciByPWludGVycC5hc3luY1Jlc3Bv bnNlO2lmKCF0aGlzLmlzUmVsZXZhbnQoKSl7aW52b2tlRXJyb3JIYW5kbGVyKDEw MTApO3JldHVybjt9aWYoci5pbmxpbmVqcyl7dmFyIGV2YWxfZ2xvYmFsPXJlcXVp cmUoImV2YWwtZ2xvYmFsIikuZXZhbF9nbG9iYWw7ZXZhbF9nbG9iYWwoci5pbmxp bmVqcyk7fWlmKHIubGlkKXt0aGlzLl9yZXNwb25zZVRpbWU9RGF0ZS5ub3coKTtp Zih3aW5kb3cuQ2F2YWxyeUxvZ2dlcil0aGlzLmNhdmFscnk9Q2F2YWxyeUxvZ2dl ci5nZXRJbnN0YW5jZShyLmxpZCk7dGhpcy5saWQ9ci5saWQ7fWlmKHIuZ2V0RXJy b3IoKSYmIXIuZ2V0RXJyb3JJc1dhcm5pbmcoKSl7dmFyIGZuPWRpc3BhdGNoRXJy b3JSZXNwb25zZTt9ZWxzZSB2YXIgZm49ZGlzcGF0Y2hSZXNwb25zZTtCb290bG9h ZGVyLnNldFJlc291cmNlTWFwKHIucmVzb3VyY2VfbWFwKTtpZihyLmJvb3Rsb2Fk YWJsZSlCb290bG9hZGVyLmVuYWJsZUJvb3Rsb2FkKHIuYm9vdGxvYWRhYmxlKTtm bj1mbi5zaGllbGQobnVsbCxyKTtmbj1mbi5kZWZlci5iaW5kKGZuKTt2YXIgaXNf dHJhbnNpdGlvbmFsPWZhbHNlO2lmKHRoaXMucHJlQm9vdGxvYWRIYW5kbGVyKWlz X3RyYW5zaXRpb25hbD10aGlzLnByZUJvb3Rsb2FkSGFuZGxlcihyKTtyLmNzcz1y LmNzc3x8W107ci5qcz1yLmpzfHxbXTtCb290bG9hZGVyLmxvYWRSZXNvdXJjZXMo ci5jc3MuY29uY2F0KHIuanMpLGZuLGlzX3RyYW5zaXRpb25hbCx0aGlzLmdldFVS SSgpKTt9ZWxzZSBpZih0eXBlb2YoaW50ZXJwLnRyYW5zcG9ydEVycm9yKSE9J3Vu ZGVmaW5lZCcpe2lmKHRoaXMuX3hGYlNlcnZlcil7aW52b2tlRXJyb3JIYW5kbGVy KDEwMDgpO31lbHNlIGludm9rZUVycm9ySGFuZGxlcigxMDEyKTt9ZWxzZSBpbnZv a2VFcnJvckhhbmRsZXIoMTAwNyk7fSk7dmFyIGludm9rZUVycm9ySGFuZGxlcj1i aW5kKHRoaXMsZnVuY3Rpb24oZXhwbGljaXRFcnJvcil7dHJ5e2lmKCF3aW5kb3cu bG9hZGVkJiYhdGhpcy5nZXRPcHRpb24oJ2hhbmRsZUVycm9yQWZ0ZXJVbmxvYWQn KSlyZXR1cm47fWNhdGNoKGV4KXtyZXR1cm47fXZhciByPW5ldyBBc3luY1Jlc3Bv bnNlKHRoaXMpO3ZhciBlcnI7dHJ5e2Vycj1leHBsaWNpdEVycm9yfHx0aGlzLnRy YW5zcG9ydC5zdGF0dXN8fDEwMDQ7fWNhdGNoKGV4KXtlcnI9MTAwNTt9aWYodGhp cy5fcmVxdWVzdEFib3J0ZWQpZXJyPTEwMTE7dHJ5e2lmKHRoaXMucmVzcG9uc2VU ZXh0PT0nJyllcnI9MTAwMjt9Y2F0Y2goaWdub3JlKXt9aWYodGhpcy50cmFuc3Bv cnRFcnJvckhhbmRsZXIpe3ZhciBkZXNjLHN1bW1hcnk7dmFyIHNpbGVudD10cnVl O2lmKGZhbHNlPT09bmF2aWdhdG9yLm9uTGluZSl7c3VtbWFyeT0iTm8gaGF5IGNv bmV4aVx1MDBmM24gZGUgcmVkIjtkZXNjPSJQYXJlY2UgcXVlIHR1IG5hdmVnYWRv ciBlc3RcdTAwZTEgZGVzY29uZWN0YWRvLiBDb21wcnVlYmEgbGEgY29uZXhpXHUw MGYzbiBkZSBpbnRlcm5ldCB5IHZ1ZWx2ZSBhIGludGVudGFybG8uIjtlcnI9MTAw Njt9ZWxzZSBpZihlcnI+PTMwMCYmZXJyPD0zOTkpe3N1bW1hcnk9IlJlZGlyZWNj aVx1MDBmM24iO2Rlc2M9IllvdXIgYWNjZXNzIHRvIEZhY2Vib29rIHdhcyByZWRp cmVjdGVkIG9yIGJsb2NrZWQgYnkgYSB0aGlyZCBwYXJ0eSBhdCB0aGlzIHRpbWUs IHBsZWFzZSBjb250YWN0IHlvdXIgSVNQIG9yIHJlbG9hZC4gIjtyZWRpcl91cmw9 dGhpcy50cmFuc3BvcnQuZ2V0UmVzcG9uc2VIZWFkZXIoIkxvY2F0aW9uIik7aWYo cmVkaXJfdXJsKWdvVVJJKHJlZGlyX3VybCx0cnVlKTtzaWxlbnQ9dHJ1ZTt9ZWxz ZXtzdW1tYXJ5PSJcdTAwYTFVeSEiO2Rlc2M9IlNlIGhhIHByb2R1Y2lkbyB1biBl cnJvciB5IGVzdGFtb3MgdHJhYmFqYW5kbyBwYXJhIGFycmVnbGFybG8gZW4gY3Vh bnRvIHNlYSBwb3NpYmxlLiBQcm9udG8gcG9kclx1MDBlMXMgdm9sdmVyIGEgaW50 ZW50YXJsby4iO30hdGhpcy5nZXRPcHRpb24oJ3N1cHByZXNzRXJyb3JBbGVydHMn KTtjb3B5UHJvcGVydGllcyhyLHtlcnJvcjplcnIsZXJyb3JTdW1tYXJ5OnN1bW1h cnksZXJyb3JEZXNjcmlwdGlvbjpkZXNjLHNpbGVudEVycm9yOnNpbGVudH0pO2Rp c3BhdGNoRXJyb3JSZXNwb25zZShyLHRydWUpO319KTt2YXIgaGFuZGxlUmVzcG9u c2U9ZnVuY3Rpb24ocmVzcG9uc2Upe3ZhciBhc3luY1Jlc3BvbnNlPXRoaXMuaW50 ZXJwcmV0UmVzcG9uc2UocmVzcG9uc2UpO3RoaXMuaW52b2tlUmVzcG9uc2VIYW5k bGVyKGFzeW5jUmVzcG9uc2UpO307dmFyIG9uU3RhdGVDaGFuZ2U9ZnVuY3Rpb24o KXt0cnl7aWYodGhpcy50cmFuc3BvcnQucmVhZHlTdGF0ZT09NCl7QXN5bmNSZXF1 ZXN0Ll9pbmZsaWdodFB1cmdlKCk7dHJ5e2lmKHR5cGVvZih0aGlzLnRyYW5zcG9y dC5nZXRSZXNwb25zZUhlYWRlcikhPSd1bmRlZmluZWQnJiZ0aGlzLnRyYW5zcG9y dC5nZXRSZXNwb25zZUhlYWRlcignWC1GQi1TZXJ2ZXInKSl0aGlzLl94RmJTZXJ2 ZXI9dGhpcy50cmFuc3BvcnQuZ2V0UmVzcG9uc2VIZWFkZXIoJ1gtRkItU2VydmVy Jyk7fWNhdGNoKGV4KXt9aWYodGhpcy50cmFuc3BvcnQuc3RhdHVzPj0yMDAmJnRo aXMudHJhbnNwb3J0LnN0YXR1czwzMDApe2ludm9rZVJlc3BvbnNlSGFuZGxlcihf aW50ZXJwcmV0VHJhbnNwb3J0UmVzcG9uc2UoKSk7fWVsc2UgaWYodWEuc2FmYXJp KCkmJih0eXBlb2YodGhpcy50cmFuc3BvcnQuc3RhdHVzKT09J3VuZGVmaW5lZCcp KXtpbnZva2VFcnJvckhhbmRsZXIoMTAwMik7fWVsc2UgaWYod2luZG93LkVudiYm d2luZG93LkVudi5yZXRyeV9hamF4X29uX25ldHdvcmtfZXJyb3ImJnRoaXMudHJh bnNwb3J0LnN0YXR1cyBpbiB7MDoxLDEyMDI5OjEsMTIwMzA6MSwxMjAzMToxLDEy MTUyOjF9JiZ0aGlzLnJlbWFpbmluZ1JldHJpZXM+MCl7LS10aGlzLnJlbWFpbmlu Z1JldHJpZXM7ZGVsZXRlIHRoaXMudHJhbnNwb3J0O3RoaXMuc2VuZCh0cnVlKTty ZXR1cm47fWVsc2UgaW52b2tlRXJyb3JIYW5kbGVyKCk7aWYodGhpcy5nZXRPcHRp b24oJ2FzeW5jaHJvbm91cycpIT09ZmFsc2UpZGVsZXRlIHRoaXMudHJhbnNwb3J0 O319Y2F0Y2goZXhjZXB0aW9uKXt0cnl7aWYoIXdpbmRvdy5sb2FkZWQpcmV0dXJu O31jYXRjaChleCl7cmV0dXJuO31kZWxldGUgdGhpcy50cmFuc3BvcnQ7aWYodGhp cy5yZW1haW5pbmdSZXRyaWVzPjApey0tdGhpcy5yZW1haW5pbmdSZXRyaWVzO3Ro aXMuc2VuZCh0cnVlKTt9ZWxzZXshdGhpcy5nZXRPcHRpb24oJ3N1cHByZXNzRXJy b3JBbGVydHMnKTtpZih3aW5kb3cuc2VuZF9lcnJvcl9zaWduYWwpc2VuZF9lcnJv cl9zaWduYWwoJ2FzeW5jX3hwb3J0X3Jlc3AnLCcxMDA3OicrKHRoaXMuX3hGYlNl cnZlcnx8Jy0nKSsnOicrdGhpcy5nZXRVUkkoKSsnOicrZXhjZXB0aW9uLm1lc3Nh Z2UpO2ludm9rZUVycm9ySGFuZGxlcigxMDA3KTt9fX07dmFyIG9uSlNPTlBSZXNw b25zZT1mdW5jdGlvbihkYXRhLG1vcmVfY2h1bmtlZF9yZXNwb25zZSl7dmFyIGlz X2ZpcnN0PSh0aGlzLmlzX2ZpcnN0PT09dW5kZWZpbmVkKTt0aGlzLmlzX2ZpcnN0 PWlzX2ZpcnN0O2lmKHRoaXMudHJhbnNwb3J0SWZyYW1lJiYhbW9yZV9jaHVua2Vk X3Jlc3BvbnNlKXtpZih0aGlzLmNhdmFscnkpdGhpcy5jYXZhbHJ5LmNvbGxlY3RC cm93c2VyVGltaW5nKHRoaXMudHJhbnNwb3J0SWZyYW1lLmNvbnRlbnRXaW5kb3cp OyhmdW5jdGlvbih4KXtkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHgpO30pLmJp bmQobnVsbCx0aGlzLnRyYW5zcG9ydElmcmFtZSkuZGVmZXIoKTt9aWYodWEuaWUo KT49OSYmd2luZG93LkpTT04pZGF0YT13aW5kb3cuSlNPTi5wYXJzZSh3aW5kb3cu SlNPTi5zdHJpbmdpZnkoZGF0YSkpO3ZhciByPXRoaXMuaW50ZXJwcmV0UmVzcG9u c2UoZGF0YSk7ci5hc3luY1Jlc3BvbnNlLmlzX2ZpcnN0PWlzX2ZpcnN0O3IuYXN5 bmNSZXNwb25zZS5pc19sYXN0PSFtb3JlX2NodW5rZWRfcmVzcG9uc2U7dGhpcy5p bnZva2VSZXNwb25zZUhhbmRsZXIocik7cmV0dXJuIG1vcmVfY2h1bmtlZF9yZXNw b25zZTt9O2NvcHlQcm9wZXJ0aWVzKHRoaXMse29uc3RhdGVjaGFuZ2U6b25TdGF0 ZUNoYW5nZSxvbmpzb25wcmVzcG9uc2U6b25KU09OUFJlc3BvbnNlLGludm9rZVJl c3BvbnNlSGFuZGxlcjppbnZva2VSZXNwb25zZUhhbmRsZXIsaW50ZXJwcmV0UmVz cG9uc2U6aW50ZXJwcmV0UmVzcG9uc2UsaGFuZGxlUmVzcG9uc2U6aGFuZGxlUmVz cG9uc2UsdHJhbnNwb3J0Om51bGwsbWV0aG9kOidQT1NUJyx1cmk6JycsdGltZW91 dDpudWxsLHRpbWVyOm51bGwsaW5pdGlhbEhhbmRsZXI6YmFnb2Zob2xkaW5nLGhh bmRsZXI6bnVsbCxlcnJvckhhbmRsZXI6bnVsbCx0cmFuc3BvcnRFcnJvckhhbmRs ZXI6bnVsbCx0aW1lb3V0SGFuZGxlcjpudWxsLGZpbmFsbHlIYW5kbGVyOmJhZ29m aG9sZGluZyxzZXJ2ZXJEaWFsb2dDYW5jZWxIYW5kbGVyOmJhZ29maG9sZGluZyxy ZWxhdGl2ZVRvOm51bGwsc3RhdHVzRWxlbWVudDpudWxsLHN0YXR1c0NsYXNzOicn LGRhdGE6e30sZmlsZTpudWxsLGNvbnRleHQ6e30scmVhZE9ubHk6ZmFsc2Usd3Jp dGVSZXF1aXJlZFBhcmFtczpbJ3Bvc3RfZm9ybV9pZCddLHJlbWFpbmluZ1JldHJp ZXM6MCxvcHRpb246e2FzeW5jaHJvbm91czp0cnVlLHN1cHByZXNzRXJyb3JIYW5k bGVyV2FybmluZzpmYWxzZSxzdXBwcmVzc0V2YWx1YXRpb246ZmFsc2Usc3VwcHJl c3NFcnJvckFsZXJ0czpmYWxzZSxyZXRyaWVzOjAsanNvbnA6ZmFsc2UsYnVuZGxl OmZhbHNlLHVzZUlmcmFtZVRyYW5zcG9ydDpmYWxzZSx0ZmJFbmRwb2ludDp0cnVl LGhhbmRsZUVycm9yQWZ0ZXJVbmxvYWQ6ZmFsc2V9LHVzZXJBY3Rpb25JRDonLSd9 KTt0aGlzLmVycm9ySGFuZGxlcj1Bc3luY1Jlc3BvbnNlLmRlZmF1bHRFcnJvckhh bmRsZXI7dGhpcy50cmFuc3BvcnRFcnJvckhhbmRsZXI9YmluZCh0aGlzLCdlcnJv ckhhbmRsZXInKTtpZih1cmkhPXVuZGVmaW5lZCl0aGlzLnNldFVSSSh1cmkpO3Jl dHVybiB0aGlzO31BcmJpdGVyLnN1YnNjcmliZSgicGFnZV90cmFuc2l0aW9uIixm dW5jdGlvbih0eXBlLG1lc3NhZ2Upe0FzeW5jUmVxdWVzdC5faWRfdGhyZXNob2xk PW1lc3NhZ2UuaWQ7fSk7Y29weVByb3BlcnRpZXMoQXN5bmNSZXF1ZXN0LHtyZWNl aXZlSlNPTlBSZXNwb25zZTpmdW5jdGlvbihpZCxkYXRhLG1vcmVfY2h1bmtlZF9y ZXNwb25zZSl7aWYodGhpcy5fSlNPTlBSZWNlaXZlcnNbaWRdKXtpZighdGhpcy5f SlNPTlBSZWNlaXZlcnNbaWRdKGRhdGEsbW9yZV9jaHVua2VkX3Jlc3BvbnNlKSlk ZWxldGUgdGhpcy5fSlNPTlBSZWNlaXZlcnNbaWRdO31lbHNlIGlmKHdpbmRvdy5s b2dKU0Vycm9yJiYhbW9yZV9jaHVua2VkX3Jlc3BvbnNlKXt2YXIgdXJpPShkYXRh LnBheWxvYWQmJmRhdGEucGF5bG9hZC51cmkpfHwnJztsb2dKU0Vycm9yKCdhamF4 Jyx7ZXJyb3I6J1VuZXhwZWN0ZWRKc29uUmVzcG9uc2UnLGV4dHJhOntpZDppZCx1 cmk6dXJpfX0pO319LF9idW5kbGVSZXF1ZXN0OmZ1bmN0aW9uKHJlcXVlc3Qpe2lm KHJlcXVlc3QuZ2V0T3B0aW9uKCdqc29ucCcpfHxyZXF1ZXN0LmdldE9wdGlvbign dXNlSWZyYW1lVHJhbnNwb3J0Jykpe3JlcXVlc3Quc2V0T3B0aW9uKCdidW5kbGUn LGZhbHNlKTtyZXR1cm4gZmFsc2U7fWVsc2UgaWYoIXJlcXVlc3QudXJpLmlzRmFj ZWJvb2tVUkkoKSl7cmVxdWVzdC5zZXRPcHRpb24oJ2J1bmRsZScsZmFsc2UpO3Jl dHVybiBmYWxzZTt9ZWxzZSBpZighcmVxdWVzdC5nZXRPcHRpb24oJ2FzeW5jaHJv bm91cycpKXtyZXF1ZXN0LnNldE9wdGlvbignYnVuZGxlJyxmYWxzZSk7cmV0dXJu IGZhbHNlO312YXIgcGF0aD1yZXF1ZXN0LnVyaS5nZXRQYXRoKCk7aWYoIUFzeW5j UmVxdWVzdC5fYnVuZGxlVGltZXIpQXN5bmNSZXF1ZXN0Ll9idW5kbGVUaW1lcj1z ZXRUaW1lb3V0KGZ1bmN0aW9uKCl7QXN5bmNSZXF1ZXN0Ll9zZW5kQnVuZGxlZFJl cXVlc3RzKCk7fSwwKTtBc3luY1JlcXVlc3QuX2FsbEJ1bmRsZWRSZXF1ZXN0cy5w dXNoKFtwYXRoLHJlcXVlc3RdKTtyZXR1cm4gdHJ1ZTt9LF9zZW5kQnVuZGxlZFJl cXVlc3RzOmZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KEFzeW5jUmVxdWVzdC5fYnVu ZGxlVGltZXIpO0FzeW5jUmVxdWVzdC5fYnVuZGxlVGltZXI9bnVsbDt2YXIgYnVu ZGxlZF9yZXF1ZXN0cz1Bc3luY1JlcXVlc3QuX2FsbEJ1bmRsZWRSZXF1ZXN0cztB c3luY1JlcXVlc3QuX2FsbEJ1bmRsZWRSZXF1ZXN0cz1bXTtpZihidW5kbGVkX3Jl cXVlc3RzLmxlbmd0aD09MSl7dmFyIHJlcXVlc3Q9YnVuZGxlZF9yZXF1ZXN0c1sw XVsxXTtyZXF1ZXN0LnNldE9wdGlvbignYnVuZGxlJyxmYWxzZSkuc2VuZCgpO3Jl dHVybiByZXF1ZXN0O31pZihidW5kbGVkX3JlcXVlc3RzLmxlbmd0aD09PTApcmV0 dXJuIG51bGw7dmFyIGRhdGE9W107Zm9yKHZhciBpaT0wO2lpPGJ1bmRsZWRfcmVx dWVzdHMubGVuZ3RoO2lpKyspZGF0YS5wdXNoKFtidW5kbGVkX3JlcXVlc3RzW2lp XVswXSxVUkkuaW1wbG9kZVF1ZXJ5KGJ1bmRsZWRfcmVxdWVzdHNbaWldWzFdLmRh dGEpXSk7dmFyIHF1ZXJ5X2RhdGE9e2RhdGE6ZGF0YX07dmFyIHJlcXVlc3Q9bmV3 IEFzeW5jUmVxdWVzdCgpO3JlcXVlc3Quc2V0VVJJKCcvYWpheC9wcm94eS5waHAn KS5zZXREYXRhKHF1ZXJ5X2RhdGEpLnNldE1ldGhvZCgnUE9TVCcpLnNldEluaXRp YWxIYW5kbGVyKGJhZ29mKHRydWUpKS5zZXRBbGxvd0Nyb3NzUGFnZVRyYW5zaXRp b24odHJ1ZSkuc2V0SGFuZGxlcihmdW5jdGlvbihyKXt2YXIgcGF5bG9hZD1yLmdl dFBheWxvYWQoKTt2YXIgcmVzcG9uc2VzPXBheWxvYWQucmVzcG9uc2VzO2lmKHJl c3BvbnNlcy5sZW5ndGghPWJ1bmRsZWRfcmVxdWVzdHMubGVuZ3RoKXtyZXR1cm47 fWVsc2UgZm9yKHZhciBpaT0wO2lpPGJ1bmRsZWRfcmVxdWVzdHMubGVuZ3RoO2lp Kyspe3ZhciBwYXRoPWJ1bmRsZWRfcmVxdWVzdHNbaWldWzBdO3ZhciByZXF1ZXN0 PWJ1bmRsZWRfcmVxdWVzdHNbaWldWzFdO3JlcXVlc3QuaWQ9dGhpcy5pZDtpZihy ZXNwb25zZXNbaWldWzBdIT1wYXRoKXtyZXF1ZXN0Lmludm9rZVJlc3BvbnNlSGFu ZGxlcih7dHJhbnNwb3J0RXJyb3I6J1dyb25nIHJlc3BvbnNlIG9yZGVyIGluIGJ1 bmRsZWQgcmVxdWVzdCB0byAnK3BhdGh9KTtjb250aW51ZTt9dmFyIGFzeW5jUmVz cG9uc2U9cmVxdWVzdC5pbnRlcnByZXRSZXNwb25zZShyZXNwb25zZXNbaWldWzFd KTtyZXF1ZXN0Lmludm9rZVJlc3BvbnNlSGFuZGxlcihhc3luY1Jlc3BvbnNlKTt9 fSkuc2V0VHJhbnNwb3J0RXJyb3JIYW5kbGVyKGZ1bmN0aW9uKHJlc3BvbnNlKXt2 YXIgcGF0aHM9W107dmFyIGludGVycD17dHJhbnNwb3J0RXJyb3I6cmVzcG9uc2Uu ZXJyb3JEZXNjcmlwdGlvbn07Zm9yKHZhciBpaT0wO2lpPGJ1bmRsZWRfcmVxdWVz dHMubGVuZ3RoO2lpKyspe3ZhciBwYXRoPWJ1bmRsZWRfcmVxdWVzdHNbaWldWzBd O3ZhciByZXF1ZXN0PWJ1bmRsZWRfcmVxdWVzdHNbaWldWzFdO3BhdGhzLnB1c2go cGF0aCk7cmVxdWVzdC5pZD10aGlzLmlkO3JlcXVlc3QuaW52b2tlUmVzcG9uc2VI YW5kbGVyKGludGVycCk7fX0pLnNlbmQoKTtyZXR1cm4gcmVxdWVzdDt9LGJvb3Rz dHJhcDpmdW5jdGlvbihocmVmLGVsZW0saXNfcG9zdCl7dmFyIG1ldGhvZD0nR0VU Jzt2YXIgcmVhZG9ubHk9dHJ1ZTt2YXIgZGF0YT17fTtpZihpc19wb3N0fHxlbGVt JiYoZWxlbS5yZWw9PSdhc3luYy1wb3N0J3x8ZWxlbS5nZXRBdHRyaWJ1dGUmJmVs ZW0uZ2V0QXR0cmlidXRlKCdmb3JjZW1ldGhvZCcpPT0ncG9zdCcpKXttZXRob2Q9 J1BPU1QnO3JlYWRvbmx5PWZhbHNlO2lmKGhyZWYpe2hyZWY9VVJJKGhyZWYpO2Rh dGE9aHJlZi5nZXRRdWVyeURhdGEoKTtocmVmLnNldFF1ZXJ5RGF0YSh7fSk7fX12 YXIgc3RhdHVzX2VsZW09UGFyZW50LmJ5Q2xhc3MoZWxlbSwnc3RhdF9lbGVtJyl8 fGVsZW07aWYoc3RhdHVzX2VsZW0mJkNTUy5oYXNDbGFzcyhzdGF0dXNfZWxlbSwn YXN5bmNfc2F2aW5nJykpcmV0dXJuIGZhbHNlO3ZhciBhc3luYz1uZXcgQXN5bmNS ZXF1ZXN0KGhyZWYpLnNldFJlYWRPbmx5KHJlYWRvbmx5KS5zZXRNZXRob2QobWV0 aG9kKS5zZXREYXRhKGRhdGEpLnNldE5lY3Rhck1vZHVsZURhdGFTYWZlKGVsZW0p LnNldFJlbGF0aXZlVG8oZWxlbSkuc2V0SGFuZGxlcihmdW5jdGlvbihyZXNwb25z ZSl7RXZlbnQuZmlyZShlbGVtLCdzdWNjZXNzJyx7cmVzcG9uc2U6cmVzcG9uc2V9 KTt9KS5zZXRFcnJvckhhbmRsZXIoZnVuY3Rpb24ocmVzcG9uc2Upe2lmKEV2ZW50 LmZpcmUoZWxlbSwnZXJyb3InLHtyZXNwb25zZTpyZXNwb25zZX0pIT09ZmFsc2Up QXN5bmNSZXNwb25zZS5kZWZhdWx0RXJyb3JIYW5kbGVyKHJlc3BvbnNlKTt9KTtp ZihzdGF0dXNfZWxlbSl7YXN5bmMuc2V0U3RhdHVzRWxlbWVudChzdGF0dXNfZWxl bSk7dmFyIHN0YXR1c19jbGFzcz1zdGF0dXNfZWxlbS5nZXRBdHRyaWJ1dGUoJ2Rh dGEtc3RhdHVzLWNsYXNzJyk7c3RhdHVzX2NsYXNzJiZhc3luYy5zZXRTdGF0dXND bGFzcyhzdGF0dXNfY2xhc3MpO31hc3luYy5zZW5kKCk7cmV0dXJuIGZhbHNlO30s cG9zdDpmdW5jdGlvbihocmVmLGRhdGEpe25ldyBBc3luY1JlcXVlc3QoaHJlZiku c2V0UmVhZE9ubHkoZmFsc2UpLnNldE1ldGhvZCgnUE9TVCcpLnNldERhdGEoZGF0 YSkuc2VuZCgpO3JldHVybiBmYWxzZTt9LGdldExhc3RJZDpmdW5jdGlvbigpe3Jl dHVybiBBc3luY1JlcXVlc3QuX2xhc3RfaWQ7fSxfSlNPTlBSZWNlaXZlcnM6e30s X2FsbEJ1bmRsZWRSZXF1ZXN0czpbXSxfYnVuZGxlVGltZXI6bnVsbCxzdXBwcmVz c09ubG9hZFRva2VuOnt9LF9sYXN0X2lkOjIsX2lkX3RocmVzaG9sZDoyLF9pbmZs aWdodDpbXSxfaW5mbGlnaHRBZGQ6YmFnb2Zob2xkaW5nLF9pbmZsaWdodFB1cmdl OmJhZ29maG9sZGluZyxfaW5mbGlnaHRFbmFibGU6ZnVuY3Rpb24oKXtpZih1YS5p ZSgpKXtjb3B5UHJvcGVydGllcyhBc3luY1JlcXVlc3Qse19pbmZsaWdodEFkZDpm dW5jdGlvbihhcil7dGhpcy5faW5mbGlnaHQucHVzaChhcik7fSxfaW5mbGlnaHRQ dXJnZTpmdW5jdGlvbigpe0FzeW5jUmVxdWVzdC5faW5mbGlnaHQ9QXN5bmNSZXF1 ZXN0Ll9pbmZsaWdodC5maWx0ZXIoZnVuY3Rpb24oYXIpe3JldHVybiBhci50cmFu c3BvcnQmJmFyLnRyYW5zcG9ydC5yZWFkeVN0YXRlPDQ7fSk7fX0pO29udW5sb2Fk UmVnaXN0ZXIoZnVuY3Rpb24oKXtBc3luY1JlcXVlc3QuX2luZmxpZ2h0LmVhY2go ZnVuY3Rpb24oYXIpe2lmKGFyLnRyYW5zcG9ydCYmYXIudHJhbnNwb3J0LnJlYWR5 U3RhdGU8NCl7YXIudHJhbnNwb3J0LmFib3J0KCk7ZGVsZXRlIGFyLnRyYW5zcG9y dDt9fSk7fSk7fX19KTtjb3B5UHJvcGVydGllcyhBc3luY1JlcXVlc3QucHJvdG90 eXBlLHtzZXRNZXRob2Q6ZnVuY3Rpb24obSl7dGhpcy5tZXRob2Q9bS50b1N0cmlu ZygpLnRvVXBwZXJDYXNlKCk7cmV0dXJuIHRoaXM7fSxnZXRNZXRob2Q6ZnVuY3Rp b24oKXtyZXR1cm4gdGhpcy5tZXRob2Q7fSxzZXREYXRhOmZ1bmN0aW9uKG9iail7 dGhpcy5kYXRhPW9iajtyZXR1cm4gdGhpczt9LHNldEZpbGU6ZnVuY3Rpb24oZmls ZSl7dGhpcy5maWxlPWZpbGU7cmV0dXJuIHRoaXM7fSxnZXREYXRhOmZ1bmN0aW9u KCl7cmV0dXJuIHRoaXMuZGF0YTt9LHNldENvbnRleHREYXRhOmZ1bmN0aW9uKGtl eSx2YWx1ZSxlbmFibGVkKXtlbmFibGVkPWVuYWJsZWQ9PT11bmRlZmluZWQ/dHJ1 ZTplbmFibGVkO2lmKGVuYWJsZWQpdGhpcy5jb250ZXh0WydfbG9nXycra2V5XT12 YWx1ZTtyZXR1cm4gdGhpczt9LF9zZXRVc2VyQWN0aW9uSUQ6ZnVuY3Rpb24oKXt2 YXIgdWU9d2luZG93LkFyYml0ZXJNb25pdG9yJiZBcmJpdGVyTW9uaXRvci5nZXRV RSgpfHwnLSc7dGhpcy51c2VyQWN0aW9uSUQ9KHdpbmRvdy5FYWdsZUV5ZSYmRWFn bGVFeWUuZ2V0U2Vzc2lvbklEKCl8fCctJykrJy8nK3VlO30sc2V0VVJJOmZ1bmN0 aW9uKHVyaSl7dmFyIHVyaV9vYmo9VVJJKHVyaSk7aWYodGhpcy5nZXRPcHRpb24o J3VzZUlmcmFtZVRyYW5zcG9ydCcpJiYhdXJpX29iai5pc0ZhY2Vib29rVVJJKCkp cmV0dXJuIHRoaXM7aWYoIXRoaXMuZ2V0T3B0aW9uKCdqc29ucCcpJiYhdGhpcy5n ZXRPcHRpb24oJ3VzZUlmcmFtZVRyYW5zcG9ydCcpJiYhdXJpX29iai5pc1NhbWVP cmlnaW4oKSlyZXR1cm4gdGhpczt0aGlzLl9zZXRVc2VyQWN0aW9uSUQoKTtpZigh dXJpfHx1cmlfb2JqLmlzRW1wdHkoKSl7aWYod2luZG93LnNlbmRfZXJyb3Jfc2ln bmFsJiZ3aW5kb3cuZ2V0X2Vycm9yX3N0YWNrKXt2YXIgZGF0YT17ZXJyX2NvZGU6 MTAxMyx2aXA6Jy0nLGR1cmF0aW9uOjAseGZiX2lwOictJyxwYXRoOndpbmRvdy5s b2NhdGlvbi5ocmVmLGFpZDp0aGlzLnVzZXJBY3Rpb25JRH07c2VuZF9lcnJvcl9z aWduYWwoJ2FzeW5jX2Vycm9yJyxKU09OLnN0cmluZ2lmeShkYXRhKSk7c2VuZF9l cnJvcl9zaWduYWwoJ2FzeW5jX3hwb3J0X3N0YWNrJywnMTAxMzonK3dpbmRvdy5s b2NhdGlvbi5ocmVmKyc6OicrZ2V0X2Vycm9yX3N0YWNrKCkpO31yZXR1cm4gdGhp czt9dGhpcy51cmk9dXJpX29iajtyZXR1cm4gdGhpczt9LGdldFVSSTpmdW5jdGlv bigpe3JldHVybiB0aGlzLnVyaS50b1N0cmluZygpO30sc2V0SW5pdGlhbEhhbmRs ZXI6ZnVuY3Rpb24oZm4pe3RoaXMuaW5pdGlhbEhhbmRsZXI9Zm47cmV0dXJuIHRo aXM7fSxzZXRIYW5kbGVyOmZ1bmN0aW9uKGZuKXtpZighKHR5cGVvZihmbikhPSdm dW5jdGlvbicpKXRoaXMuaGFuZGxlcj1mbjtyZXR1cm4gdGhpczt9LGdldEhhbmRs ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYW5kbGVyO30sc2V0RXJyb3JIYW5k bGVyOmZ1bmN0aW9uKGZuKXtpZighKHR5cGVvZihmbikhPSdmdW5jdGlvbicpKXRo aXMuZXJyb3JIYW5kbGVyPWZuO3JldHVybiB0aGlzO30sc2V0VHJhbnNwb3J0RXJy b3JIYW5kbGVyOmZ1bmN0aW9uKGZuKXt0aGlzLnRyYW5zcG9ydEVycm9ySGFuZGxl cj1mbjtyZXR1cm4gdGhpczt9LGdldEVycm9ySGFuZGxlcjpmdW5jdGlvbigpe3Jl dHVybiB0aGlzLmVycm9ySGFuZGxlcjt9LGdldFRyYW5zcG9ydEVycm9ySGFuZGxl cjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zcG9ydEVycm9ySGFuZGxlcjt9 LHNldFRpbWVvdXRIYW5kbGVyOmZ1bmN0aW9uKHRpbWVvdXQsZm4pe2lmKCEodHlw ZW9mKGZuKSE9J2Z1bmN0aW9uJykpe3RoaXMudGltZW91dD10aW1lb3V0O3RoaXMu dGltZW91dEhhbmRsZXI9Zm47fXJldHVybiB0aGlzO30scmVzZXRUaW1lb3V0OmZ1 bmN0aW9uKHRpbWVvdXQpe2lmKCEodGhpcy50aW1lb3V0SGFuZGxlcj09PW51bGwp KWlmKHRpbWVvdXQ9PT1udWxsKXt0aGlzLnRpbWVvdXQ9bnVsbDtjbGVhclRpbWVv dXQodGhpcy50aW1lcik7dGhpcy50aW1lcj1udWxsO31lbHNle3ZhciBjbGVhcl9v bl9xdWlja2xpbmdfZXZlbnQ9IXRoaXMuX2FsbG93Q3Jvc3NQYWdlVHJhbnNpdGlv bjt0aGlzLnRpbWVvdXQ9dGltZW91dDtjbGVhclRpbWVvdXQodGhpcy50aW1lcik7 dGhpcy50aW1lcj10aGlzLl9oYW5kbGVUaW1lb3V0LmJpbmQodGhpcykuZGVmZXIo dGhpcy50aW1lb3V0LGNsZWFyX29uX3F1aWNrbGluZ19ldmVudCk7fXJldHVybiB0 aGlzO30sX2hhbmRsZVRpbWVvdXQ6ZnVuY3Rpb24oKXt0aGlzLmFiYW5kb24oKTt0 aGlzLnRpbWVvdXRIYW5kbGVyKHRoaXMpO30sc2V0TmV3U2VyaWFsOmZ1bmN0aW9u KCl7dGhpcy5pZD0rK0FzeW5jUmVxdWVzdC5fbGFzdF9pZDtyZXR1cm4gdGhpczt9 LHNldEZpbmFsbHlIYW5kbGVyOmZ1bmN0aW9uKGZuKXt0aGlzLmZpbmFsbHlIYW5k bGVyPWZuO3JldHVybiB0aGlzO30sc2V0U2VydmVyRGlhbG9nQ2FuY2VsSGFuZGxl cjpmdW5jdGlvbihmbil7dGhpcy5zZXJ2ZXJEaWFsb2dDYW5jZWxIYW5kbGVyPWZu O3JldHVybiB0aGlzO30sc2V0UHJlQm9vdGxvYWRIYW5kbGVyOmZ1bmN0aW9uKGZu KXt0aGlzLnByZUJvb3Rsb2FkSGFuZGxlcj1mbjtyZXR1cm4gdGhpczt9LHNldFJl YWRPbmx5OmZ1bmN0aW9uKHJlYWRPbmx5KXtpZighKHR5cGVvZihyZWFkT25seSkh PSdib29sZWFuJykpdGhpcy5yZWFkT25seT1yZWFkT25seTtyZXR1cm4gdGhpczt9 LHNldEZCTUxGb3JtOmZ1bmN0aW9uKCl7dGhpcy53cml0ZVJlcXVpcmVkUGFyYW1z PVsiZmJfc2lnIl07cmV0dXJuIHRoaXM7fSxnZXRSZWFkT25seTpmdW5jdGlvbigp e3JldHVybiB0aGlzLnJlYWRPbmx5O30sc2V0UmVsYXRpdmVUbzpmdW5jdGlvbihl bGVtZW50KXt0aGlzLnJlbGF0aXZlVG89ZWxlbWVudDtyZXR1cm4gdGhpczt9LGdl dFJlbGF0aXZlVG86ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWxhdGl2ZVRvO30s c2V0U3RhdHVzQ2xhc3M6ZnVuY3Rpb24oYyl7dGhpcy5zdGF0dXNDbGFzcz1jO3Jl dHVybiB0aGlzO30sc2V0U3RhdHVzRWxlbWVudDpmdW5jdGlvbihlbGVtZW50KXt0 aGlzLnN0YXR1c0VsZW1lbnQ9ZWxlbWVudDtyZXR1cm4gdGhpczt9LGdldFN0YXR1 c0VsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gZ2UodGhpcy5zdGF0dXNFbGVtZW50 KTt9LGlzUmVsZXZhbnQ6ZnVuY3Rpb24oKXtpZih0aGlzLl9hbGxvd0Nyb3NzUGFn ZVRyYW5zaXRpb24pcmV0dXJuIHRydWU7aWYoIXRoaXMuaWQpcmV0dXJuIHRydWU7 cmV0dXJuIHRoaXMuaWQ+QXN5bmNSZXF1ZXN0Ll9pZF90aHJlc2hvbGQ7fSxjbGVh clN0YXR1c0luZGljYXRvcjpmdW5jdGlvbigpe3ZhciBzdGF0dXNFbGVtPXRoaXMu Z2V0U3RhdHVzRWxlbWVudCgpO2lmKHN0YXR1c0VsZW0pe0NTUy5yZW1vdmVDbGFz cyhzdGF0dXNFbGVtLCdhc3luY19zYXZpbmcnKTtDU1MucmVtb3ZlQ2xhc3Moc3Rh dHVzRWxlbSx0aGlzLnN0YXR1c0NsYXNzKTt9fSxhZGRTdGF0dXNJbmRpY2F0b3I6 ZnVuY3Rpb24oKXt2YXIgc3RhdHVzRWxlbT10aGlzLmdldFN0YXR1c0VsZW1lbnQo KTtpZihzdGF0dXNFbGVtKXtDU1MuYWRkQ2xhc3Moc3RhdHVzRWxlbSwnYXN5bmNf c2F2aW5nJyk7Q1NTLmFkZENsYXNzKHN0YXR1c0VsZW0sdGhpcy5zdGF0dXNDbGFz cyk7fX0sc3BlY2lmaWVzV3JpdGVSZXF1aXJlZFBhcmFtczpmdW5jdGlvbigpe3Jl dHVybiB0aGlzLndyaXRlUmVxdWlyZWRQYXJhbXMuZXZlcnkoZnVuY3Rpb24ocGFy YW0pe3RoaXMuZGF0YVtwYXJhbV09dGhpcy5kYXRhW3BhcmFtXXx8RW52W3BhcmFt XXx8KGdlKHBhcmFtKXx8e30pLnZhbHVlO2lmKHRoaXMuZGF0YVtwYXJhbV0hPT11 bmRlZmluZWQpcmV0dXJuIHRydWU7cmV0dXJuIGZhbHNlO30sdGhpcyk7fSxzZXRP cHRpb246ZnVuY3Rpb24ob3B0LHYpe2lmKHR5cGVvZih0aGlzLm9wdGlvbltvcHRd KSE9J3VuZGVmaW5lZCcpdGhpcy5vcHRpb25bb3B0XT12O3JldHVybiB0aGlzO30s Z2V0T3B0aW9uOmZ1bmN0aW9uKG9wdCl7dHlwZW9mKHRoaXMub3B0aW9uW29wdF0p PT0ndW5kZWZpbmVkJztyZXR1cm4gdGhpcy5vcHRpb25bb3B0XTt9LGFib3J0OmZ1 bmN0aW9uKCl7aWYodGhpcy50cmFuc3BvcnQpe3ZhciBvbGRfaGFuZGxlcj10aGlz LmdldFRyYW5zcG9ydEVycm9ySGFuZGxlcigpO3RoaXMuc2V0T3B0aW9uKCdzdXBw cmVzc0Vycm9yQWxlcnRzJyx0cnVlKTt0aGlzLnNldFRyYW5zcG9ydEVycm9ySGFu ZGxlcihiYWdvZmhvbGRpbmcpO3RoaXMuX3JlcXVlc3RBYm9ydGVkPTE7dGhpcy50 cmFuc3BvcnQuYWJvcnQoKTt0aGlzLnNldFRyYW5zcG9ydEVycm9ySGFuZGxlcihv bGRfaGFuZGxlcik7fX0sYWJhbmRvbjpmdW5jdGlvbigpe2NsZWFyVGltZW91dCh0 aGlzLnRpbWVyKTt0aGlzLnNldE9wdGlvbignc3VwcHJlc3NFcnJvckFsZXJ0cycs dHJ1ZSkuc2V0SGFuZGxlcihiYWdvZmhvbGRpbmcpLnNldEVycm9ySGFuZGxlcihi YWdvZmhvbGRpbmcpLnNldFRyYW5zcG9ydEVycm9ySGFuZGxlcihiYWdvZmhvbGRp bmcpO2lmKHRoaXMudHJhbnNwb3J0KXt0aGlzLl9yZXF1ZXN0QWJvcnRlZD0xO3Ro aXMudHJhbnNwb3J0LmFib3J0KCk7fX0sc2V0TmVjdGFyRGF0YTpmdW5jdGlvbihu Y3RyUGFyYW1zKXtpZihuY3RyUGFyYW1zKXtpZih0aGlzLmRhdGEubmN0cj09PXVu ZGVmaW5lZCl0aGlzLmRhdGEubmN0cj17fTtjb3B5UHJvcGVydGllcyh0aGlzLmRh dGEubmN0cixuY3RyUGFyYW1zKTt9cmV0dXJuIHRoaXM7fSxzZXROZWN0YXJNb2R1 bGVEYXRhU2FmZTpmdW5jdGlvbihlbGVtKXtpZih0aGlzLnNldE5lY3Rhck1vZHVs ZURhdGEpdGhpcy5zZXROZWN0YXJNb2R1bGVEYXRhKGVsZW0pO3JldHVybiB0aGlz O30sc2V0TmVjdGFySW1wcmVzc2lvbklkU2FmZTpmdW5jdGlvbigpe2lmKHRoaXMu c2V0TmVjdGFySW1wcmVzc2lvbklkKXRoaXMuc2V0TmVjdGFySW1wcmVzc2lvbklk KCk7cmV0dXJuIHRoaXM7fSxzZXRBbGxvd0Nyb3NzUGFnZVRyYW5zaXRpb246ZnVu Y3Rpb24oYWxsb3cpe3RoaXMuX2FsbG93Q3Jvc3NQYWdlVHJhbnNpdGlvbj0hIWFs bG93O2lmKHRoaXMudGltZXIpdGhpcy5yZXNldFRpbWVvdXQodGhpcy50aW1lb3V0 KTtyZXR1cm4gdGhpczt9LHNlbmQ6ZnVuY3Rpb24oaXNSZXRyeSl7aXNSZXRyeT1p c1JldHJ5fHxmYWxzZTtpZighdGhpcy51cmkpcmV0dXJuIGZhbHNlOyF0aGlzLmVy cm9ySGFuZGxlciYmIXRoaXMuZ2V0T3B0aW9uKCdzdXBwcmVzc0Vycm9ySGFuZGxl cldhcm5pbmcnKTtpZih0aGlzLmdldE9wdGlvbignanNvbnAnKSYmdGhpcy5tZXRo b2QhPSdHRVQnKXRoaXMuc2V0TWV0aG9kKCdHRVQnKTtpZih0aGlzLmdldE9wdGlv bigndXNlSWZyYW1lVHJhbnNwb3J0JykmJnRoaXMubWV0aG9kIT0nR0VUJyl0aGlz LnNldE1ldGhvZCgnR0VUJyk7dGhpcy50aW1lb3V0SGFuZGxlciE9PW51bGwmJih0 aGlzLmdldE9wdGlvbignanNvbnAnKXx8dGhpcy5nZXRPcHRpb24oJ3VzZUlmcmFt ZVRyYW5zcG9ydCcpKTtpZighdGhpcy5nZXRSZWFkT25seSgpKXt0aGlzLnNwZWNp Zmllc1dyaXRlUmVxdWlyZWRQYXJhbXMoKTtpZih0aGlzLm1ldGhvZCE9J1BPU1Qn KXJldHVybiBmYWxzZTt9aWYodGhpcy5tZXRob2Q9PSdQT1NUJyYmdGhpcy5nZXRP cHRpb24oJ3RmYkVuZHBvaW50Jykpe3RoaXMuZGF0YS5mYl9kdHNnPUVudi5mYl9k dHNnO3RoaXMuZGF0YS5sc2Q9Z2V0Q29va2llKCdsc2QnKTt9aWYoIWlzRW1wdHko dGhpcy5jb250ZXh0KSYmdGhpcy5nZXRPcHRpb24oJ3RmYkVuZHBvaW50Jykpe2Nv cHlQcm9wZXJ0aWVzKHRoaXMuZGF0YSx0aGlzLmNvbnRleHQpO3RoaXMuZGF0YS5h amF4X2xvZz0xO31pZih3aW5kb3cuRW52JiZFbnYuZm9yY2VfcGFyYW0pY29weVBy b3BlcnRpZXModGhpcy5kYXRhLEVudi5mb3JjZV9wYXJhbSk7aWYoIXRoaXMuZ2V0 UmVhZE9ubHkoKSYmdGhpcy5nZXRPcHRpb24oJ3RmYkVuZHBvaW50JykmJnRoaXMu bWV0aG9kPT0nUE9TVCcmJnRoaXMuZGF0YS5wb3N0X2Zvcm1faWRfc291cmNlPT09 dW5kZWZpbmVkKXRoaXMuZGF0YS5wb3N0X2Zvcm1faWRfc291cmNlPSdBc3luY1Jl cXVlc3QnO2lmKHdpbmRvdy5FbnYpdGhpcy5kYXRhLl9fdXNlcj1FbnYudXNlcjt0 aGlzLl9zZXRVc2VyQWN0aW9uSUQoKTtpZih0aGlzLmdldE9wdGlvbignYnVuZGxl JykmJkFzeW5jUmVxdWVzdC5fYnVuZGxlUmVxdWVzdCh0aGlzKSlyZXR1cm4gdHJ1 ZTt0aGlzLnNldE5ld1NlcmlhbCgpO2lmKHRoaXMuZ2V0T3B0aW9uKCd0ZmJFbmRw b2ludCcpKXt0aGlzLnVyaS5hZGRRdWVyeURhdGEoe19fYToxfSk7aWYoRW52LmZi X2lzYil0aGlzLnVyaS5hZGRRdWVyeURhdGEoe2ZiX2lzYjpFbnYuZmJfaXNifSk7 fXRoaXMuZmluYWxseUhhbmRsZXI9YXN5bmNfY2FsbGJhY2sodGhpcy5maW5hbGx5 SGFuZGxlciwnZmluYWwnKTt2YXIgdXJpX3N0cixxdWVyeTtpZih0aGlzLm1ldGhv ZD09J0dFVCd8fHRoaXMuZmlsZSl7dXJpX3N0cj10aGlzLnVyaS5hZGRRdWVyeURh dGEodGhpcy5kYXRhKS50b1N0cmluZygpO3F1ZXJ5PScnO31lbHNle3VyaV9zdHI9 dGhpcy51cmkudG9TdHJpbmcoKTtxdWVyeT1VUkkuaW1wbG9kZVF1ZXJ5KHRoaXMu ZGF0YSk7fWlmKHRoaXMuZ2V0T3B0aW9uKCdqc29ucCcpfHx0aGlzLmdldE9wdGlv bigndXNlSWZyYW1lVHJhbnNwb3J0Jykpe3VyaV9zdHI9dGhpcy51cmkuYWRkUXVl cnlEYXRhKHtfX2E6dGhpcy5pZH0pLnRvU3RyaW5nKCk7QXN5bmNSZXF1ZXN0Ll9K U09OUFJlY2VpdmVyc1t0aGlzLmlkXT1hc3luY19jYWxsYmFjayhiaW5kKHRoaXMs J29uanNvbnByZXNwb25zZScpLCdqc29uJyk7aWYodGhpcy5nZXRPcHRpb24oJ2pz b25wJykpeyhmdW5jdGlvbigpe2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoJE4o J3NjcmlwdCcse3NyYzp1cmlfc3RyLHR5cGU6InRleHQvamF2YXNjcmlwdCJ9KSk7 fSkuYmluZCh0aGlzKS5kZWZlcigpO31lbHNle3ZhciBzdHlsZT17cG9zaXRpb246 J2Fic29sdXRlJyx0b3A6Jy05OTk5OTk5cHgnLHdpZHRoOic4MHB4JyxoZWlnaHQ6 JzgwcHgnfTt0aGlzLnRyYW5zcG9ydElmcmFtZT0kTignaWZyYW1lJyx7c3JjOiJq YXZhc2NyaXB0OicnIixzdHlsZTpzdHlsZX0pO2RvY3VtZW50LmJvZHkuYXBwZW5k Q2hpbGQodGhpcy50cmFuc3BvcnRJZnJhbWUpO3RoaXMudHJhbnNwb3J0SWZyYW1l LnNyYz11cmlfc3RyO31yZXR1cm4gdHJ1ZTt9aWYodGhpcy50cmFuc3BvcnQpcmV0 dXJuIGZhbHNlO3ZhciB0cmFuc3BvcnQ9bnVsbDt0cnl7dHJhbnNwb3J0PW5ldyBY TUxIdHRwUmVxdWVzdCgpO31jYXRjaChpZ25vcmVkKXt9aWYoIXRyYW5zcG9ydCl0 cnl7dHJhbnNwb3J0PW5ldyBBY3RpdmVYT2JqZWN0KCJNc3htbDIuWE1MSFRUUCIp O31jYXRjaChpZ25vcmVkKXt9aWYoIXRyYW5zcG9ydCl0cnl7dHJhbnNwb3J0PW5l dyBBY3RpdmVYT2JqZWN0KCJNaWNyb3NvZnQuWE1MSFRUUCIpO31jYXRjaChpZ25v cmVkKXt9aWYoIXRyYW5zcG9ydClyZXR1cm4gZmFsc2U7dHJhbnNwb3J0Lm9ucmVh ZHlzdGF0ZWNoYW5nZT1hc3luY19jYWxsYmFjayhiaW5kKHRoaXMsJ29uc3RhdGVj aGFuZ2UnKSwneGhyJyk7aWYoIWlzUmV0cnkpdGhpcy5yZW1haW5pbmdSZXRyaWVz PXRoaXMuZ2V0T3B0aW9uKCdyZXRyaWVzJyk7aWYod2luZG93LnNlbmRfZXJyb3Jf c2lnbmFsfHx3aW5kb3cuQXJiaXRlck1vbml0b3IpdGhpcy5fc2VuZFRpbWVTdGFt cD10aGlzLl9zZW5kVGltZVN0YW1wfHxEYXRlLm5vdygpO3RoaXMudHJhbnNwb3J0 PXRyYW5zcG9ydDt0cnl7dGhpcy50cmFuc3BvcnQub3Blbih0aGlzLm1ldGhvZCx1 cmlfc3RyLHRoaXMuZ2V0T3B0aW9uKCdhc3luY2hyb25vdXMnKSk7fWNhdGNoKGV4 KXtyZXR1cm4gZmFsc2U7fXZhciBzdm5fcmV2PUVudi5zdm5fcmV2O2lmKHN2bl9y ZXYpdGhpcy50cmFuc3BvcnQuc2V0UmVxdWVzdEhlYWRlcignWC1TVk4tUmV2JyxT dHJpbmcoc3ZuX3JldikpO2lmKHRoaXMubWV0aG9kPT0nUE9TVCcpdGhpcy50cmFu c3BvcnQuc2V0UmVxdWVzdEhlYWRlcignQ29udGVudC1UeXBlJywnYXBwbGljYXRp b24veC13d3ctZm9ybS11cmxlbmNvZGVkJyk7dGhpcy5hZGRTdGF0dXNJbmRpY2F0 b3IoKTtxdWVyeT10aGlzLmZpbGV8fHF1ZXJ5O3RoaXMudHJhbnNwb3J0LnNlbmQo cXVlcnkpO2lmKHRoaXMudGltZW91dCE9PW51bGwpdGhpcy5yZXNldFRpbWVvdXQo dGhpcy50aW1lb3V0KTtBc3luY1JlcXVlc3QuX2luZmxpZ2h0QWRkKHRoaXMpO3Jl dHVybiB0cnVlO30sX2Rpc3BsYXlTZXJ2ZXJEaWFsb2c6ZnVuY3Rpb24obW9kZWws aXNfY29uZmlybWF0aW9uKXtCb290bG9hZGVyLmxvYWRDb21wb25lbnRzKCdkaWFs b2cnLGZ1bmN0aW9uKCl7dmFyIGRpYWxvZz1uZXcgRGlhbG9nKG1vZGVsKTtpZihp c19jb25maXJtYXRpb24pZGlhbG9nLnNldEhhbmRsZXIodGhpcy5fZGlzcGxheUNv bmZpcm1hdGlvbkhhbmRsZXIuYmluZCh0aGlzLGRpYWxvZykpO2RpYWxvZy5zZXRD YW5jZWxIYW5kbGVyKGZ1bmN0aW9uKCl7dGhpcy5zZXJ2ZXJEaWFsb2dDYW5jZWxI YW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmZpbmFsbHlIYW5kbGVy LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt9LmJpbmQodGhpcykpLnNldENhdXNhbEVs ZW1lbnQodGhpcy5yZWxhdGl2ZVRvKS5zZXRDbG9zZUhhbmRsZXIodGhpcy5maW5h bGx5SGFuZGxlci5iaW5kKHRoaXMpKS5zaG93KCk7fS5iaW5kKHRoaXMpKTt9LF9k aXNwbGF5Q29uZmlybWF0aW9uSGFuZGxlcjpmdW5jdGlvbihkaWFsb2cpe3RoaXMu ZGF0YS5jb25maXJtZWQ9MTtjb3B5UHJvcGVydGllcyh0aGlzLmRhdGEsZGlhbG9n LmdldEZvcm1EYXRhKCkpO3RoaXMuc2VuZCgpO319KTttb2R1bGUuZXhwb3J0cz1B c3luY1JlcXVlc3Q7fSk7Cl9fZSgiYXN5bmMiLFsiQXN5bmNSZXF1ZXN0IiwiQXN5 bmNSZXNwb25zZSJdLGZ1bmN0aW9uKGEsYil7YS5Bc3luY1JlcXVlc3Q9YignQXN5 bmNSZXF1ZXN0Jyk7YS5Bc3luY1Jlc3BvbnNlPWIoJ0FzeW5jUmVzcG9uc2UnKTt9 LDMpOwpfX2UoImRhdGEtc3RvcmUiLFsiRGF0YVN0b3JlIl0sZnVuY3Rpb24oYSxi KXthLkRhdGFTdG9yZT1hLkRhdGFTdG9yZXx8YignRGF0YVN0b3JlJyk7fSwzKTsK ZnVuY3Rpb24gRW11Q29udHJvbGxlcihhLGIpe3RoaXMuaW1wcmVzc2lvbj1iO3Ro aXMuY29udGFpbmVySWQ9YTtEYXRhU3RvcmUuc2V0KCQoYSksJ2VtdUNvbnRyb2xs ZXInLHRoaXMpO3JldHVybiB0aGlzO31jb3B5X3Byb3BlcnRpZXMoRW11Q29udHJv bGxlcix7ZnJvbUNvbnRhaW5lcjpmdW5jdGlvbihhKXt2YXIgYj1nZShhKTtpZigh YilyZXR1cm4gbnVsbDtyZXR1cm4gRGF0YVN0b3JlLmdldChiLCdlbXVDb250cm9s bGVyJyk7fSxnZXRFdmVudENsYXNzOmZ1bmN0aW9uKGEpe3JldHVybiAiZW11RXZl bnQiK1N0cmluZyhhKS50cmltKCk7fX0pO2NvcHlfcHJvcGVydGllcyhFbXVDb250 cm9sbGVyLnByb3RvdHlwZSx7RVZFTlRfSEFORExFUl9QQVRIOicvYWpheC9lbXUv ZW5kLnBocCcsQ0xJQ0s6MSxGQU46ImZhZF9mYW4iLGV2ZW50OmZ1bmN0aW9uKGMs YixkLGEpe3ZhciBlPXtlaWQ6dGhpcy5pbXByZXNzaW9uLGY6MCx1aTp0aGlzLmNv bnRhaW5lcklkLGVuOmMsYToxfTtpZihiKWUuZWQ9SlNPTi5zdHJpbmdpZnkoYik7 aWYoIWEpdmFyIGE9YmFnb2Zob2xkaW5nO3ZhciBmPW5ldyBBc3luY1JlcXVlc3Qo KS5zZXRVUkkodGhpcy5FVkVOVF9IQU5ETEVSX1BBVEgpLnNldERhdGEoZSkuc2V0 RXJyb3JIYW5kbGVyKGEpO2lmKGQpZi5zZXRIYW5kbGVyKGQpO2Yuc2VuZCgpO30s cmVkaXJlY3Q6ZnVuY3Rpb24oKXt2YXIgYT17ZWlkOnRoaXMuaW1wcmVzc2lvbixm OjAsdWk6dGhpcy5jb250YWluZXJJZCxlbjp0aGlzLkNMSUNLLGE6MCxzaWc6TWF0 aC5mbG9vcihNYXRoLnJhbmRvbSgpKjY1NTM1KSs2NTUzNn07dmFyIGI9bmV3IFVS SSh0aGlzLkVWRU5UX0hBTkRMRVJfUEFUSCk7Yi5zZXRRdWVyeURhdGEoYSk7Z29V UkkoYik7fX0pOwp2YXIgU2hvcnRDbGlja0hhbmRsZXJzPXtFVkVOVF9OQU1FX0NB TUVfQkFDSzonY2FtZWJhY2snLG9uY2xpY2tlZDpmdW5jdGlvbihhKXtpZih0aGlz Lm9uc2l0ZSlyZXR1cm47aWYoYS5idXR0b24hPT0wfHxhLmdldE1vZGlmaWVycygp LmFueSlyZXR1cm47dGhpcy5jbGlja190cz0oK25ldyBEYXRlKCkpO2lmKHRoaXMu bGlzdGVuZXJzIT09dW5kZWZpbmVkKWZvcih2YXIgYiBpbiB0aGlzLmxpc3RlbmVy cyl0aGlzLmxpc3RlbmVyc1tiXS5yZW1vdmUoKTt0aGlzLmxpc3RlbmVycz17Zm9j dXM6RXZlbnQubGlzdGVuKHdpbmRvdywnZm9jdXMnLFNob3J0Q2xpY2tIYW5kbGVy cy5vbmNhbWViYWNrLmJpbmQodGhpcykpfTt9LG9uY2FtZWJhY2s6ZnVuY3Rpb24o Yyl7dmFyIGI9KCtuZXcgRGF0ZSgpKS10aGlzLmNsaWNrX3RzO3RoaXMubGlzdGVu ZXJzW2MudHlwZV0ucmVtb3ZlKCk7dmFyIGE9e2NsaWNrX3RzOnRoaXMuY2xpY2tf dHMsbGVuZ3RoOmIsdHJpZ2dlcjpjLnR5cGV9O3RoaXMuc2VuZERhdGEoU2hvcnRD bGlja0hhbmRsZXJzLkVWRU5UX05BTUVfQ0FNRV9CQUNLLGEpO319OwpmdW5jdGlv biBFbXVUcmFja2VyKGEsYyl7dGhpcy5iYXNlPUVtdUNvbnRyb2xsZXIuZnJvbUNv bnRhaW5lcihhKTshdGhpcy5iYXNlO3RoaXMub25zaXRlPWM7dmFyIGI9RE9NLnNj cnkoJChhKSwiYS4iK0VtdUNvbnRyb2xsZXIuZ2V0RXZlbnRDbGFzcyhFbXVUcmFj a2VyLkVWRU5UX0NMSUNLKSk7Yi5lYWNoKGZ1bmN0aW9uKGQpe0V2ZW50Lmxpc3Rl bihkLCdjbGljaycsU2hvcnRDbGlja0hhbmRsZXJzLm9uY2xpY2tlZC5iaW5kKHRo aXMpKTt9LmJpbmQodGhpcykpO3JldHVybiB0aGlzO31jb3B5X3Byb3BlcnRpZXMo RW11VHJhY2tlcix7RVZFTlRfQ0xJQ0s6MX0pO2NvcHlfcHJvcGVydGllcyhFbXVU cmFja2VyLnByb3RvdHlwZSx7c2VuZERhdGE6ZnVuY3Rpb24oYixhKXt0aGlzLmJh c2UuZXZlbnQoYixhKTt9fSk7Cl9fZSgiQWpheFJlcXVlc3QiLFsiYXJyYXktZXh0 ZW5zaW9ucyIsImpzb24iLCJTeXN0ZW1FdmVudHMiLCJ1YSIsInVyaSJdLGZ1bmN0 aW9uKGgsaixpLGcpe2ooJ2FycmF5LWV4dGVuc2lvbnMnKTtqKCdqc29uJyk7dmFy IGI9aignU3lzdGVtRXZlbnRzJyk7dmFyIGs9aigndWEnKTt2YXIgYz1qKCd1cmkn KTt2YXIgZj1mYWxzZTtmdW5jdGlvbiBhKGwsbixtKXtpZih3aW5kb3cuWE1MSHR0 cFJlcXVlc3Qpe3RoaXMueGhyPW5ldyBYTUxIdHRwUmVxdWVzdCgpO31lbHNlIGlm KHdpbmRvdy5BY3RpdmVYT2JqZWN0KXRoaXMueGhyPW5ldyBBY3RpdmVYT2JqZWN0 KCdNU1hNTDIuWE1MSFRUUC4zLjAnKTtpZighKG4gaW5zdGFuY2VvZiBjKSluPW5l dyBjKG4pO2lmKG0mJmw9PSdHRVQnKXtuLnNldFF1ZXJ5RGF0YShtKTt9ZWxzZSB0 aGlzLl9wYXJhbXM9bTt0aGlzLm1ldGhvZD1sO3RoaXMudXJpPW47dGhpcy54aHIu b3BlbihsLG4pO31hLmNvcnNFbmFibGVkPXdpbmRvdy5YTUxIdHRwUmVxdWVzdCYm KCd3aXRoQ3JlZGVudGlhbHMnIGluIG5ldyBYTUxIdHRwUmVxdWVzdCgpKTthLkVS Uk9SPSdhcjplcnJvcic7YS5USU1FT1VUPSdhcjp0aW1lb3V0JzthLlBST1hZX0VS Uk9SPSdhcjpwcm94eSBlcnJvcic7YS5UUkFOU1BPUlRfRVJST1I9J2FyOnRyYW5z cG9ydCBlcnJvcic7YS5TRVJWRVJfRVJST1I9J2FyOmh0dHAgZXJyb3InO2EuUEFS U0VfRVJST1I9J2FyOnBhcnNlIGVycm9yJzthLl9pbmZsaWdodD1bXTtmdW5jdGlv biBkKCl7dmFyIGw9YS5faW5mbGlnaHQ7YS5faW5mbGlnaHQ9W107bC5lYWNoKGZ1 bmN0aW9uKG0pe20uYWJvcnQoKTt9KTt9ZnVuY3Rpb24gZShsKXtsLm9uUmVzcG9u c2U9bC5vbkVycm9yPWwub25TdWNjZXNzPW51bGw7Y2xlYXJUaW1lb3V0KGwuX3Rp bWVyKTtpZihsLnhociYmbC54aHIucmVhZHlTdGF0ZTw0KXtsLnhoci5hYm9ydCgp O2wueGhyPW51bGw7fWEuX2luZmxpZ2h0PWEuX2luZmxpZ2h0LmZpbHRlcihmdW5j dGlvbihtKXtyZXR1cm4gbSYmbSE9bCYmbS54aHImJm0ueGhyLnJlYWR5U3RhdGU8 NDt9KTt9YS5wcm90b3R5cGU9e3RpbWVvdXQ6NjAwMDAscHJlbHVkZTovXmZvciBc KDs7XCk7LyxfY2FsbDpmdW5jdGlvbihsLG0pe2lmKHRoaXNbbF0pdGhpc1tsXSh0 aGlzKTt9LF9wYXJzZVN0YXR1czpmdW5jdGlvbigpe3ZhciBuLG07dHJ5e249dGhp cy54aHIuc3RhdHVzO209dGhpcy54aHIuc3RhdHVzVGV4dDt9Y2F0Y2gobCl7dGhp cy5lcnJvclR5cGU9YS5UUkFOU1BPUlRfRVJST1I7dGhpcy5lcnJvclRleHQ9bCsn JztyZXR1cm47fWlmKG49PT0wJiYhKC9eKGZpbGV8ZnRwKS8udGVzdCh0aGlzLnVy aSkpKXt0aGlzLmVycm9yVHlwZT1hLlRSQU5TUE9SVF9FUlJPUjt9ZWxzZSBpZihu Pj0xMDAmJm48MjAwKXt0aGlzLmVycm9yVHlwZT1hLlBST1hZX0VSUk9SO31lbHNl IGlmKG4+PTIwMCYmbjwzMDApe3JldHVybjt9ZWxzZSBpZihuPj0zMDAmJm48NDAw KXt0aGlzLmVycm9yVHlwZT1hLlBST1hZX0VSUk9SO31lbHNlIGlmKG4+PTQwMCYm bjw1MDApe3RoaXMuZXJyb3JUeXBlPWEuU0VSVkVSX0VSUk9SO31lbHNlIGlmKG4+ PTUwMCYmbjw2MDApe3RoaXMuZXJyb3JUeXBlPWEuUFJPWFlfRVJST1I7fWVsc2Ug aWYobj09MTIyMyl7cmV0dXJuO31lbHNlIGlmKG4+PTEyMDAxJiZuPD0xMjE1Nil7 dGhpcy5lcnJvclR5cGU9YS5UUkFOU1BPUlRfRVJST1I7fWVsc2V7bT0ndW5yZWNv Z25pemVkIHN0YXR1cyBjb2RlOiAnK247dGhpcy5lcnJvclR5cGU9YS5FUlJPUjt9 aWYoIXRoaXMuZXJyb3JUeXBlKXRoaXMuZXJyb3JUZXh0PW07fSxfcGFyc2VDb250 ZW50OmZ1bmN0aW9uKCl7dmFyIG07dHJ5e209dGhpcy54aHIucmVzcG9uc2VUZXh0 fHwnJzt9Y2F0Y2gobCl7dGhpcy5lcnJvclR5cGU9YS5FUlJPUjt0aGlzLmVycm9y VGV4dD0ncmVzcG9uc2VUZXh0IG5vdCBhdmFpbGFibGUgLSAnK2wubWVzc2FnZTt9 dHJ5e2lmKHRoaXMucHJlbHVkZSl7aWYoIXRoaXMucHJlbHVkZS50ZXN0KG0pKXRo cm93IG5ldyBFcnJvcignTWlzc2luZyBwcmVsdWRlIC0gcG9zc2libGUgWFNTIHZ1 bG5lcmFiaWxpdHkhKScpO209bS5yZXBsYWNlKHRoaXMucHJlbHVkZSwnJyk7fXRo aXMuanNvbj1KU09OLnBhcnNlKG0pO31jYXRjaChsKXt0aGlzLmVycm9yVHlwZT1h LlBBUlNFX0VSUk9SO3RoaXMuZXJyb3JUZXh0PSdleGNlcHRpb24gcGFyc2luZyBK U09OIC0gJytsLm1lc3NhZ2U7fWlmKCF0aGlzLmVycm9yVHlwZSYmIXRoaXMuanNv bil7dGhpcy5lcnJvclR5cGU9YS5QQVJTRV9FUlJPUjt0aGlzLmVycm9yVGV4dD0n ZW1wdHkgSlNPTic7fX0sX29uUmVhZHlTdGF0ZTpmdW5jdGlvbigpe2lmKCF0aGlz Lnhocnx8dGhpcy54aHIucmVhZHlTdGF0ZTw0fHxmKXJldHVybjt0aGlzLl9jYWxs KCdvblJlc3BvbnNlJyk7dGhpcy5fcGFyc2VTdGF0dXMoKTtpZighdGhpcy5lcnJv clR5cGUpdGhpcy5fcGFyc2VDb250ZW50KCk7dGhpcy5fY2FsbCghdGhpcy5lcnJv clR5cGU/J29uU3VjY2Vzcyc6J29uRXJyb3InLHRydWUpO2UodGhpcyk7fSxzZW5k OmZ1bmN0aW9uKGwpe3RoaXMueGhyLm9ucmVhZHlzdGF0ZWNoYW5nZT1iLnRyYXBF cnJvcih0aGlzLl9vblJlYWR5U3RhdGUuYmluZCh0aGlzKSk7dmFyIG09dGhpcy50 aW1lb3V0O2lmKG0pdGhpcy5fdGltZXI9c2V0VGltZW91dCgoZnVuY3Rpb24oKXt0 aGlzLmVycm9yVHlwZT1hLlRJTUVPVVQ7dGhpcy5lcnJvclRleHQ9J3RpbWVvdXQg YWZ0ZXIgJyttKycgbXMnO3RoaXMuX2NhbGwoJ29uRXJyb3InLHRydWUpO2UodGhp cyk7fSkuYmluZCh0aGlzKSxtLGZhbHNlKTthLl9pbmZsaWdodC5wdXNoKHRoaXMp O2lmKHRoaXMubWV0aG9kPT0nUE9TVCcpdGhpcy54aHIuc2V0UmVxdWVzdEhlYWRl cignQ29udGVudC1UeXBlJywnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNv ZGVkJyk7dGhpcy54aHIuc2VuZChsP2MuaW1wbG9kZVF1ZXJ5KGwpOicnKTt9LGFi b3J0OmZ1bmN0aW9uKCl7ZSh0aGlzKTt9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7dmFy IGw9J1tBamF4UmVxdWVzdCByZWFkeVN0YXRlPScrdGhpcy54aHIucmVhZHlTdGF0 ZTtpZih0aGlzLmVycm9yVHlwZSlsKz0nIGVycm9yVHlwZT0nK3RoaXMuZXJyb3JU eXBlKycgKCcrdGhpcy5lcnJvclRleHQrJyknO3JldHVybiBsKyddJzt9LHRvSlNP TjpmdW5jdGlvbigpe3JldHVybiB7anNvbjp0aGlzLmpzb24sZXJyb3JUeXBlOnRo aXMuZXJyb3JUeXBlLGVycm9yVGV4dDp0aGlzLmVycm9yVGV4dH07fX07aWYod2lu ZG93LmFkZEV2ZW50TGlzdGVuZXIpe3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdi ZWZvcmV1bmxvYWQnLGZ1bmN0aW9uKCl7Zj10cnVlO3NldFRpbWVvdXQoZnVuY3Rp b24oKXtmPWZhbHNlO30pO30sZmFsc2UpO2lmKGsuZmlyZWZveCgpKXdpbmRvdy5h ZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJyxmdW5jdGlvbihldmVudCl7aWYoZXZl bnQua2V5Q29kZT09PUtFWVMuRVNDKWV2ZW50LnByZXZlbnQoKTt9LGZhbHNlKTt9 aWYod2luZG93LmF0dGFjaEV2ZW50KXdpbmRvdy5hdHRhY2hFdmVudCgnb251bmxv YWQnLGQpO2kuZXhwb3J0cz1hO30pOwpfX2UoIkNoYW5uZWxDb25zdGFudHMiLFtd LGZ1bmN0aW9uKGQsZixlLGMpe3ZhciBhPSdwcmVzZW5jZS8nO3ZhciBiPXtPTl9D T05ORUNUOmErJ2Nvbm5lY3QnLE9OX0lETEU6YSsnaWRsZScsT05fU0hVVERPV046 YSsnc2h1dGRvd24nLE9OX0lOVkFMSURfSElTVE9SWTphKydpbnZhbGlkX2hpc3Rv cnknLE9OX0NPTkZJRzphKydjb25maWcnLE9OX0VOVEVSX1NUQVRFOmErJ2VudGVy X3N0YXRlJyxPTl9FWElUX1NUQVRFOmErJ2V4aXRfc3RhdGUnLE9LOidvaycsRVJS T1I6J2Vycm9yJyxFUlJPUl9NQVg6J2Vycm9yX21heCcsRVJST1JfTUlTU0lORzon ZXJyb3JfbWlzc2luZycsRVJST1JfTVNHX1RZUEU6J2Vycm9yX21zZ190eXBlJyxF UlJPUl9TSFVURE9XTjonZXJyb3Jfc2h1dGRvd24nLEhJTlRfQVVUSDonc2h1dGRv d24gYXV0aCcsSElOVF9DT05OOidzaHV0ZG93biBjb25uJyxISU5UX0RJU0FCTEVE OidzaHV0ZG93biBkaXNhYmxlZCcsSElOVF9JTlZBTElEX1NUQVRFOidzaHV0ZG93 biBpbnZhbGlkIHN0YXRlJyxISU5UX01BSU5UOidzaHV0ZG93biBtYWludCcsSElO VF9VTlNVUFBPUlRFRDonc2h1dGRvd24gdW5zdXBwb3J0ZWQnLHJlYXNvbl9Vbmtu b3duOjAscmVhc29uX0FzeW5jRXJyb3I6MSxyZWFzb25fVG9vTG9uZzoyLHJlYXNv bl9SZWZyZXNoOjMscmVhc29uX1JlZnJlc2hEZWxheTo0LHJlYXNvbl9VSVJlc3Rh cnQ6NSxyZWFzb25fTmVlZFNlcTo2LHJlYXNvbl9QcmV2RmFpbGVkOjcscmVhc29u X0lGcmFtZUxvYWRHaXZlVXA6OCxyZWFzb25fSUZyYW1lTG9hZFJldHJ5OjkscmVh c29uX0lGcmFtZUxvYWRSZXRyeVdvcmtlZDoxMCxyZWFzb25fUGFnZVRyYW5zaXRp b25SZXRyeToxMSxyZWFzb25fSUZyYW1lTG9hZE1heFN1YmRvbWFpbjoxMixyZWFz b25fTm9DaGFubmVsSW5mbzoxMyxyZWFzb25fTm9DaGFubmVsSG9zdDoxNCxnZXRB cmJpdGVyVHlwZTpmdW5jdGlvbihnKXtyZXR1cm4gYSsnbWVzc2FnZTonK2c7fX07 ZS5leHBvcnRzPWI7fSk7Cl9fZSgiVXNlckFjdGl2aXR5IixbImV2ZW50LWV4dGVu c2lvbnMiLCJhcmJpdGVyIiwiRnVuY3Rpb25VdGlscyJdLGZ1bmN0aW9uKGYsaCxn LGUpe2goImV2ZW50LWV4dGVuc2lvbnMiKTt2YXIgYT1oKCJhcmJpdGVyIik7dmFy IGI9aCgiRnVuY3Rpb25VdGlscyIpO3ZhciBkPURhdGUubm93KCk7dmFyIGM9e0RF RkFVTFRfSURMRV9NUzo1MDAwLEVWRU5UX0lOVEVSVkFMX01TOjUwMCxzdWJzY3Jp YmVPbmNlOmZ1bmN0aW9uKGope3ZhciBrPWMuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7 Yy51bnN1YnNjcmliZShrKTtqKCk7fSk7fSxzdWJzY3JpYmU6ZnVuY3Rpb24oail7 cmV0dXJuIGEuc3Vic2NyaWJlKCd1c2VyYWN0aXZpdHkvYWN0aXZpdHknLGopO30s dW5zdWJzY3JpYmU6ZnVuY3Rpb24oail7YS51bnN1YnNjcmliZShqKTt9LGlzQWN0 aXZlOmZ1bmN0aW9uKGope3JldHVybiAobmV3IERhdGUoKS1kPChqfHxjLkRFRkFV TFRfSURMRV9NUykpO319O3ZhciBpPWIudGhyb3R0bGUoZnVuY3Rpb24oZXZlbnQp e2Q9RGF0ZS5ub3coKTthLmluZm9ybSgndXNlcmFjdGl2aXR5L2FjdGl2aXR5Jyxl dmVudCk7fSxjLkVWRU5UX0lOVEVSVkFMX01TLGZhbHNlKTtFdmVudC5saXN0ZW4o ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHttb3VzZW92ZXI6aSxrZXlkb3duOmks Y2xpY2s6aX0pO2cuZXhwb3J0cz1jO30pOwpfX2UoIk1vdmluZ1N0YXQiLFtdLGZ1 bmN0aW9uKGMsZSxkLGIpe2Z1bmN0aW9uIGEoayl7az1rfHw2MDAwMDt2YXIgZz17 dDpuZXcgRGF0ZSgpLGNvdW50OjAsdjowfTt2YXIgaD1nLGo9MCxmPTA7ZnVuY3Rp b24gaSgpe3ZhciBsPW5ldyBEYXRlKCktazt3aGlsZShoJiZoLm5leHQmJmgudDxs KXtqLT1oLnY7Zi09aC5jb3VudDtoPWgubmV4dDt9fXRoaXMuYWRkPWZ1bmN0aW9u KG0pe2orPW07ZisrO3ZhciBsPW5ldyBEYXRlKCk7aWYobC1nLnQ8MTAwMCl7Zy52 Kz1tO2cuY291bnQrKzt9ZWxzZXtnLm5leHQ9e3Q6bCx2Om0sY291bnQ6MX07Zz1n Lm5leHQ7aSgpO319O3RoaXMudGFsbHk9ZnVuY3Rpb24obCl7bD1sfHwxMDAwO2ko KTtyZXR1cm4ge3N1bTpqLGNvdW50OmYsdGltZUF2ZXJhZ2U6aipsL2t9O307fWQu ZXhwb3J0cz1hO30pOwpfX2UoIkZCQWpheFJlcXVlc3QiLFsiZG9tLWNvcmUiLCJF bnYiLCJBamF4UmVxdWVzdCJdLGZ1bmN0aW9uKGYsaCxnLGUpe3ZhciBhPWgoJ2Rv bS1jb3JlJykuJDt2YXIgYz1oKCdFbnYnKTt2YXIgYj1oKCdBamF4UmVxdWVzdCcp O2Z1bmN0aW9uIGQoaixtLGspe2s9a3x8e307ay5fX2E9MTtrLl9fdXNlcj1jLnVz ZXI7ay5wb3N0X2Zvcm1faWQ9YSgncG9zdF9mb3JtX2lkJykudmFsdWU7dmFyIGw9 bmV3IGIoaixtLGspO3ZhciBpPWwuX3BhcnNlQ29udGVudDtsLl9wYXJzZUNvbnRl bnQ9ZnVuY3Rpb24oKXtpLmFwcGx5KHRoaXMpO3ZhciBuPXRoaXMuanNvbjtpZihu KXtpZihuLmVycm9yKXt0aGlzLmVycm9yVHlwZT1iLlNFUlZFUl9FUlJPUjt0aGlz LmVycm9yVGV4dD0nQXN5bmNSZXNwb25zZSBlcnJvcjogJytuLmVycm9yO310aGlz Lmpzb249bi5wYXlsb2FkO319O3JldHVybiBsO31nLmV4cG9ydHM9ZDt9KTsKX19l KCJtYXRoLWV4dGVuc2lvbnMiLFsiY29weVByb3BlcnRpZXMiXSxmdW5jdGlvbihk LGYsZSxjKXt2YXIgYj1mKCdjb3B5UHJvcGVydGllcycpO3ZhciBhPWUuZXhwb3J0 cz17cmFuZDMyOmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5k b20oKSo0Mjk0OTY3Mjk1KTt9LHZlcmlmeU51bWJlcjpmdW5jdGlvbihnKXtpZih0 eXBlb2YgZz09J3VuZGVmaW5lZCd8fGlzTmFOKGcpfHxnPT1OdW1iZXIuUE9TSVRJ VkVfSU5GSU5JVFl8fGc9PU51bWJlci5ORUdBVElWRV9JTkZJTklUWSlnPTA7cmV0 dXJuIGc7fSxtb2Q6ZnVuY3Rpb24oZyxoKXt2YXIgaT1nJWg7aWYoaSpoPDApaSs9 aDtyZXR1cm4gaTt9LGNsaXA6ZnVuY3Rpb24oaSxoLGcpe3JldHVybiBNYXRoLm1h eChoLE1hdGgubWluKGksZykpO319O2IoZCxhKTt9LDMpOwpfX2UoIkRvY1JQQyIs WyJhcnJheS1leHRlbnNpb25zIiwianNvbiJdLGZ1bmN0aW9uKGMsZSxkLGIpe2Uo J2FycmF5LWV4dGVuc2lvbnMnKTtlKCdqc29uJyk7dmFyIGE9e19hcGlzOnt9LG9y aWdpbjpsb2NhdGlvbi5vcmlnaW58fChsb2NhdGlvbisnJykucmVwbGFjZSgvKFte OlwvXSlcLy4qLywnJDEnKSxvcmlnaW5GaWx0ZXI6L1wuZmFjZWJvb2tcLmNvbSg6 XGQrKT8kLyxfaW5pdDpmdW5jdGlvbigpe3ZhciBmPWZ1bmN0aW9uKGV2ZW50KXtl dmVudD1ldmVudHx8d2luZG93LmV2ZW50O3ZhciBnPWV2ZW50LmRvbWFpbnx8ZXZl bnQub3JpZ2luO2lmKGEub3JpZ2luRmlsdGVyLnRlc3QoZykpYS5fZGlzcGF0Y2go ZXZlbnQuZGF0YSk7fTtpZih3aW5kb3cucG9zdE1lc3NhZ2UpaWYod2luZG93LmFk ZEV2ZW50TGlzdGVuZXIpe3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdl JyxmLGZhbHNlKTt9ZWxzZSB3aW5kb3cub25tZXNzYWdlPWY7dGhpcy5faW5pdD1m dW5jdGlvbigpe307fSxfZGlzcGF0Y2g6ZnVuY3Rpb24oZyl7Zz1KU09OLnBhcnNl KGcpO3ZhciBmPUpTT04uc3RyaW5naWZ5KGcucGFyYW1zKTtpZihhLl9hcGlzLmhh c093blByb3BlcnR5KGcuYXBpKSl7dmFyIGg9YS5fYXBpc1tnLmFwaV07aWYoaFtn Lm1ldGhvZF0paFtnLm1ldGhvZF0uYXBwbHkoaCxnLnBhcmFtcyk7fX0scHVibGlz aDpmdW5jdGlvbihnLGYpe2EuX2luaXQoKTthLl9hcGlzW2ZdPWc7fSxwcm94eTpm dW5jdGlvbihsLGcsaSxqKXthLl9pbml0KCk7dmFyIGs9e19wcm94eUlkOk1hdGgu cmFuZG9tKCkudG9TdHJpbmcoMzYpLF9zZXE6MH07ZnVuY3Rpb24gZihtKXtrW21d PWZ1bmN0aW9uKCl7dmFyIG89e2FwaTpnLG1ldGhvZDptLHBhcmFtczpBcnJheS5w cm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpfTt2YXIgbj1KU09OLnN0cmlu Z2lmeShvLnBhcmFtcyk7bz1KU09OLnN0cmluZ2lmeShvKTtpZihsLnBvc3RNZXNz YWdlKXtsLnBvc3RNZXNzYWdlKG8saik7fWVsc2UgaWYobC5Eb2NSUEMpbC5Eb2NS UEMuX2Rpc3BhdGNoKG8pO307fWZvcih2YXIgaD0wO2g8aS5sZW5ndGg7aCsrKWYo aVtoXSk7cmV0dXJuIGs7fX07ZC5leHBvcnRzPWMuRG9jUlBDPWE7fSwzKTsKX19l KCJDaGFubmVsVHJhbnNwb3J0IixbImNvcHlQcm9wZXJ0aWVzIiwiYmluZCIsInV0 aWwiLCJBamF4UmVxdWVzdCIsInVyaSIsIkpTTG9nZ2VyIiwiRG9jUlBDIiwiQ2hh bm5lbENvbnN0YW50cyJdLGZ1bmN0aW9uKHAscixxLG4pe3ZhciBtPXIoJ2NvcHlQ cm9wZXJ0aWVzJyk7dmFyIGs9cignYmluZCcpO3ZhciBqPXIoJ3V0aWwnKTt2YXIg YT1yKCdBamF4UmVxdWVzdCcpO3ZhciBpPXIoJ3VyaScpO3ZhciBnPXIoJ0pTTG9n Z2VyJyk7dmFyIGQ9cignRG9jUlBDJyk7dmFyIGM9cignQ2hhbm5lbENvbnN0YW50 cycpO2Z1bmN0aW9uIGwoKXtyZXR1cm4gKDEwNDg1NzYqTWF0aC5yYW5kb20oKXww KS50b1N0cmluZygzNik7fWZ1bmN0aW9uIG8odSx2KXt2YXIgdz11LnN1YmRvbWFp bjt3PXc9PT1udWxsPycnOih3KyctJyk7dmFyIHg9bmV3IGkodikuc2V0RG9tYWlu KHcrdS5ob3N0KycuZmFjZWJvb2suY29tJykuc2V0UG9ydCh1LnBvcnQpLnNldFNl Y3VyZShpKCkuaXNTZWN1cmUoKSk7cmV0dXJuIHg7fWZ1bmN0aW9uIHModix4LHcp e3ZhciB6YTt2YXIgdT1mdW5jdGlvbih6Yyl7aWYoemEpe3phPW51bGw7cmV0dXJu IHpjP3goKTp3KCk7fX07dmFyIHk9e2NiOmwoKX07dmFyIHpiPW8odiwnL3Bpbmcn KS5zZXRRdWVyeURhdGEoeSk7dmFyIHo9bmV3IEltYWdlKCk7ei5vbmxvYWQ9dS5i aW5kKG51bGwsdHJ1ZSk7ei5vbmVycm9yPXUuYmluZChudWxsLGZhbHNlKTt6YT1z ZXRUaW1lb3V0KHoub25lcnJvciwxMDAwMCxmYWxzZSk7ei5hYm9ydD1mdW5jdGlv bigpe2lmKHphKXtjbGVhclRpbWVvdXQoemEpO3phPW51bGw7fXoub25sb2FkPXou b25lcnJvcj1udWxsO307ei5zcmM9byh2LCcvcGluZycpO3JldHVybiB6O31mdW5j dGlvbiB0KHUseCx3KXt2YXIgdj0obmV3IERhdGUoKS11LnVzZXJBY3RpdmUpLzEw MDB8MDt2YXIgeT17Y2hhbm5lbDp1LnVzZXJfY2hhbm5lbCxzZXE6dS5zZXEsY2xp ZW50aWQ6dS5zZXNzaW9uSUQsY2I6bCgpLGlkbGU6dn07aWYodjw2MCl5LnN0YXRl PSdhY3RpdmUnO3ZhciB6YT1vKHUsJy9wdWxsJykuc2V0UXVlcnlEYXRhKHkpO3Zh ciB6PW5ldyBhKCdHRVQnLHphKTtpZihhLmNvcnNFbmFibGVkKXoueGhyLndpdGhD cmVkZW50aWFscz10cnVlO3oub25TdWNjZXNzPXg7ei5vbkVycm9yPXc7ei5zZW5k KCk7cmV0dXJuIHo7fWZ1bmN0aW9uIGgodSl7dGhpcy5tYW5hZ2VyPXU7KHRoaXMu aW5pdCYmdGhpcy5pbml0KCkpO31mdW5jdGlvbiBiKHUpe2guYXBwbHkodGhpcyxh cmd1bWVudHMpO31iLnByb3RvdHlwZT17bG9nTmFtZTonQ09SUycsZW50ZXJTdGF0 ZTpmdW5jdGlvbih3LHUpe2lmKHRoaXMuX3JlcXVlc3Qpe3RoaXMuX3JlcXVlc3Qu YWJvcnQodHJ1ZSk7dGhpcy5fcmVxdWVzdD1udWxsO31pZih3PT0naW5pdCcpc2V0 VGltZW91dChrKHRoaXMubWFuYWdlciwnZXhpdFN0YXRlJyxjLk9LKSwzMDAwLGZh bHNlKTtpZighL3B1bGx8cGluZy8udGVzdCh3KSlyZXR1cm47dmFyIHY9dGhpcy5t YW5hZ2VyO2lmKHc9PSdwaW5nJyl7dGhpcy5fcmVxdWVzdD1zKHUsayh2LCdleGl0 U3RhdGUnLGMuT0spLGsodiwnZXhpdFN0YXRlJyxjLkVSUk9SKSk7fWVsc2UgaWYo dz09J3B1bGwnKXRoaXMuX3JlcXVlc3Q9dCh1LGsodiwnX3Byb2Nlc3NUcmFuc3Bv cnREYXRhJyksayh2LCdleGl0U3RhdGUnLGMuRVJST1IpKTt9fTtmdW5jdGlvbiBm KHUpe2guYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuX2lmcmFtZT1kb2N1bWVu dC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTt0aGlzLl9pZnJhbWUuc3R5bGUuZGlz cGxheT0nbm9uZSc7ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLl9pZnJh bWUpO2QucHVibGlzaCh0aGlzLCdvdXRlclRyYW5zcG9ydCcpO31mLnByb3RvdHlw ZT17bG9nTmFtZTonaWZyYW1lJyxfaW5pdElmcmFtZTpmdW5jdGlvbih1KXt3aW5k b3cub25jaGFubmVsaWZyYW1lcmVhZHk9ZnVuY3Rpb24oKXtnLmNyZWF0ZSgnY2hh bm5lbCcpLmxvZygnaWZyYW1lX3Jlc291cmNlcycpO3JldHVybiB1LnJlc291cmNl czt9O2lmKHUpe3RoaXMuX2lmcmFtZVVSST1vKHUsdS5wYXRoKTtpZih1LmJ1c3RJ ZnJhbWUpdGhpcy5faWZyYW1lVVJJLnNldFF1ZXJ5RGF0YSh7Y2I6bCgpfSk7fWVs c2UgdGhpcy5faWZyYW1lVVJJPSdhYm91dDpibGFuayc7dGhpcy5faWZyYW1lUHJv eHk9bnVsbDt0cnl7dGhpcy5faWZyYW1lLmNvbnRlbnRXaW5kb3cubG9jYXRpb24u cmVwbGFjZSh0aGlzLl9pZnJhbWVVUkkpO31jYXRjaCh2KXt0aGlzLmV4aXRTdGF0 ZShjLkVSUk9SLHYrJycpO319LGVudGVyU3RhdGU6ZnVuY3Rpb24odix1KXtpZih2 PT0naW5pdCcpe3RoaXMuX2luaXRJZnJhbWUodSk7fWVsc2UgaWYoL2lkbGV8cGlu Z3xwdWxsLy50ZXN0KHYpKXtpZih0aGlzLl9pZnJhbWVQcm94eSl7dGhpcy5faWZy YW1lUHJveHkuZW50ZXJTdGF0ZS5hcHBseSh0aGlzLl9pZnJhbWVQcm94eSxhcmd1 bWVudHMpO31lbHNlIGlmKHYhPSdpZGxlJyl0aGlzLmV4aXRTdGF0ZShjLkVSUk9S LCdpZnJhbWUgbm90IHlldCBsb2FkZWQnKTt9ZWxzZSBpZih2PT0nc2h1dGRvd24n KXRoaXMuX2luaXRJZnJhbWUoKTt9LF9wcm9jZXNzVHJhbnNwb3J0RGF0YTpmdW5j dGlvbigpe3RoaXMubWFuYWdlci5fcHJvY2Vzc1RyYW5zcG9ydERhdGEuYXBwbHko dGhpcy5tYW5hZ2VyLGFyZ3VtZW50cyk7fSxleGl0U3RhdGU6ZnVuY3Rpb24odSl7 aWYodGhpcy5tYW5hZ2VyLnN0YXRlPT0naW5pdCcmJnU9PWMuT0spdGhpcy5faWZy YW1lUHJveHk9ZC5wcm94eSh0aGlzLl9pZnJhbWUuY29udGVudFdpbmRvdywnaW5u ZXJUcmFuc3BvcnQnLFsnZW50ZXJTdGF0ZSddLCh0aGlzLl9pZnJhbWVVUkkrJycp LnJlcGxhY2UoL2lmcmFtZS4qLywnJykpO2lmKC9waW5nfHB1bGwvLnRlc3QodGhp cy5tYW5hZ2VyLnN0YXRlKSYmIXRoaXMuX2lmcmFtZVByb3h5KXJldHVybjt0aGlz Lm1hbmFnZXIuZXhpdFN0YXRlLmFwcGx5KHRoaXMubWFuYWdlcixhcmd1bWVudHMp O319O2Z1bmN0aW9uIGUoKXt0aGlzLmluaXQ9dGhpcy5pbml0LmJpbmQodGhpcyk7 aC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7fWUucHJvdG90eXBlPXtsb2dOYW1lOidp ZnJhbWUoaW5uZXIpJyxpbml0OmZ1bmN0aW9uKCl7ZC5wdWJsaXNoKHRoaXMsJ2lu bmVyVHJhbnNwb3J0Jyk7dHJ5e3ZhciBwcm94eT1kLnByb3h5KHdpbmRvdy5wYXJl bnQsJ291dGVyVHJhbnNwb3J0JyxbJ19wcm9jZXNzVHJhbnNwb3J0RGF0YScsJ2V4 aXRTdGF0ZSddLHRvcC5Eb2NSUEMub3JpZ2luKTttKHRoaXMscHJveHkpO3RoaXMu ZXhpdFN0YXRlKGMuT0spO31jYXRjaCh1KXt9fSxlbnRlclN0YXRlOmZ1bmN0aW9u KHYsdSl7aWYodGhpcy5fcmVxdWVzdCl7dGhpcy5fcmVxdWVzdC5hYm9ydCgpO3Ro aXMuX3JlcXVlc3Q9bnVsbDt9aWYodj09J3BpbmcnKXt0aGlzLl9yZXF1ZXN0PXMo dSxrKHRoaXMsJ2V4aXRTdGF0ZScsYy5PSyksayh0aGlzLCdleGl0U3RhdGUnLGMu RVJST1IpKTt9ZWxzZSBpZih2PT0ncHVsbCcpdGhpcy5fcmVxdWVzdD10KHUsayh0 aGlzLCdfcHJvY2Vzc1RyYW5zcG9ydERhdGEnKSxrKHRoaXMsJ2V4aXRTdGF0ZScs Yy5FUlJPUikpO319O2lmKHdpbmRvdyE9PXdpbmRvdy5wYXJlbnQmJi9pZnJhbWUv LnRlc3Qod2luZG93LmxvY2F0aW9uKSlwLnRyYW5zcG9ydD1uZXcgZSgpO3EuZXhw b3J0cz17Z2V0VVJJOm8sVHJhbnNwb3J0OmgsQ09SU1RyYW5zcG9ydDpiLElmcmFt ZVRyYW5zcG9ydDpmLElmcmFtZUlubmVyVHJhbnNwb3J0OmV9O30pOwpfX2UoIkNo YW5uZWxNYW5hZ2VyIixbImpzb24iLCJvbmxvYWQiLCJhcnJheS1leHRlbnNpb25z IiwiZnVuY3Rpb24tZXh0ZW5zaW9ucyIsImNvcHlQcm9wZXJ0aWVzIiwiQXJyYXlV dGlscyIsIkZ1bmN0aW9uVXRpbHMiLCJhcmJpdGVyIiwiU3lzdGVtRXZlbnRzIiwi dXJpIiwiVXNlckFjdGl2aXR5IiwiTW92aW5nU3RhdCIsIkpTTG9nZ2VyIiwiQWph eFJlcXVlc3QiLCJGQkFqYXhSZXF1ZXN0IiwiQXN5bmNSZXF1ZXN0IiwiUHJlc2Vu Y2VVdGlsIiwiUHJlc2VuY2VTdGF0ZSIsInByZXNlbmNlLWNvb2tpZS1tYW5hZ2Vy IiwiQ2hhbm5lbENvbnN0YW50cyIsIkNoYW5uZWxUcmFuc3BvcnQiLCJDaGFubmVs SW5pdGlhbERhdGEiXSxmdW5jdGlvbih6YSx6ZSx6Yyx6KXt6ZSgnanNvbicpO3pl KCdvbmxvYWQnKTt6ZSgnYXJyYXktZXh0ZW5zaW9ucycpO3plKCdmdW5jdGlvbi1l eHRlbnNpb25zJyk7dmFyIHk9emUoJ2NvcHlQcm9wZXJ0aWVzJyk7dmFyIGM9emUo J0FycmF5VXRpbHMnKTt2YXIgaj16ZSgnRnVuY3Rpb25VdGlscycpO3ZhciBiPXpl KCdhcmJpdGVyJyk7dmFyIG09emUoJ29ubG9hZCcpO3ZhciBxPXplKCdTeXN0ZW1F dmVudHMnKTt2YXIgcj16ZSgndXJpJyk7dmFyIHM9emUoJ1VzZXJBY3Rpdml0eScp O3ZhciBsPXplKCdNb3ZpbmdTdGF0Jyk7dmFyIGs9emUoJ0pTTG9nZ2VyJyk7dmFy IGE9emUoJ0FqYXhSZXF1ZXN0Jyk7dmFyIGk9emUoJ0ZCQWpheFJlcXVlc3QnKTt2 YXIgZD16ZSgnQXN5bmNSZXF1ZXN0Jyk7dmFyIG89emUoJ1ByZXNlbmNlVXRpbCcp O3ZhciBuPXplKCdQcmVzZW5jZVN0YXRlJyk7dmFyIHpkPXplKCdwcmVzZW5jZS1j b29raWUtbWFuYWdlcicpO3ZhciBlPXplKCdDaGFubmVsQ29uc3RhbnRzJyk7dmFy IGg9emUoJ0NoYW5uZWxUcmFuc3BvcnQnKTt2YXIgZz16ZSgnQ2hhbm5lbEluaXRp YWxEYXRhJyk7dmFyIHc9ay5jcmVhdGUoJ2NoYW5uZWwnKTt2YXIgcD17aWRsZTp7 b2s6J2luaXQhJ30saW5pdDp7b2s6J3B1bGwhJyxlcnJvcjoncmVjb25uZWN0J30s cHVsbDp7b2s6J3B1bGwhJyxlcnJvcjoncGluZycsZXJyb3JfbWlzc2luZzoncHVs bCcsZXJyb3JfbXNnX3R5cGU6J3B1bGwnLHJlZnJlc2hfMDoncmVjb25uZWN0Jyxy ZWZyZXNoXzExMDoncmVjb25uZWN0JyxyZWZyZXNoXzExMToncHVsbCcscmVmcmVz aF8xMTI6J3B1bGwnLHJlZnJlc2hfMTEzOidwdWxsJyxyZWZyZXNoXzExNzoncmVj b25uZWN0J30scGluZzp7b2s6J3B1bGwhJyxlcnJvcjoncGluZyd9LHJlY29ubmVj dDp7b2s6J2luaXQhJyxlcnJvcjoncmVjb25uZWN0J30sc2h1dGRvd246e30sX2Fs bDp7ZXJyb3JfbWF4OidzaHV0ZG93biEnLGVycm9yX3NodXRkb3duOidzaHV0ZG93 biEnfX07dmFyIHU9e3VzZXJBY3RpdmU6RGF0ZS5ub3coKSxzZXNzaW9uSUQ6KE1h dGgucmFuZG9tKCkqMjE0NzQ4MzY0OHwwKS50b1N0cmluZygxNil9O2Z1bmN0aW9u IHpmKHpnKXtyZXR1cm4gemcudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXjAtOWEt el0rL2csJ18nKTt9ZnVuY3Rpb24gemIoemcpe3cubG9nKHpmKCdhcmJpdGVyXycr emcpKTtiLmluZm9ybS5hcHBseShiLGFyZ3VtZW50cyk7fXZhciB0PWZhbHNlO2Z1 bmN0aW9uIHgoKXtpZih1LnN1YmRvbWFpbj09bnVsbCl7dmFyIHpnPTA7dmFyIHpo PXpkLmdldFN1YkNvb2tpZSgnY2gnKTtpZih6aCYmemguc3ViKXtmb3IodmFyIHpp PTA7emk8emguc3ViLmxlbmd0aDt6aSsrKWlmKCF6aC5zdWJbemldKXt6Zz16aTti cmVhazt9aWYoemk9PXpoLnN1Yi5sZW5ndGgpaWYoemk9PWUuTUFYX1NVQkRPTUFJ TlMmJnIoKS5pc1NlY3VyZSgpKXt6Zz1udWxsO2suY3JlYXRlKCdjaGFubmVsX2Nv b2tpZScpLmVycm9yKCdpZnJhbWVfbWF4X3N1YmRvbWFpbnNfcmVhY2hlZCcpO31l bHNlIHpnPXpoLnN1Yi5sZW5ndGg7fXUuc3ViZG9tYWluPXpnO319ZnVuY3Rpb24g digpe3ZhciB6aD17fTtpZihmLmdldENvbmZpZygnaG9zdCcpKXtpZih1Ll9zdWJk b21haW4hPW51bGwpe3ZhciB6Zz16ZC5nZXRTdWJDb29raWUoJ2NoJyk7dmFyIHpq PSh6ZyYmemcuc3ViKT96Zy5zdWI6W107dmFyIHppPXpqLmxlbmd0aDt6alt1Ll9z dWJkb21haW5dPXQ/MDoxO3poLnN1Yj16ai5tYXAoZnVuY3Rpb24oemspe3JldHVy biB6az8xOjA7fSk7fXpoW2YuZ2V0Q29uZmlnKCd1c2VyX2NoYW5uZWwnKV09Zi5n ZXRDb25maWcoJ3NlcScsMCk7fXJldHVybiB6aDt9dmFyIGY9e01BWF9TVUJET01B SU5TOjYsc3RhdGU6J2lkbGUnLF9idW1wczowLF9mYWlsczp7fSxfY29ubmVjdHM6 MCxfY29ubmVjdFN0YXRlOm51bGwsX2NvbmZpZzp1LGluaXQ6ZnVuY3Rpb24oemkp e3RoaXMuaW5pdD1mdW5jdGlvbigpe307aWYodHlwZW9mKHMpIT0ndW5kZWZpbmVk JylzLnN1YnNjcmliZShmdW5jdGlvbigpe3RoaXMuX2NvbmZpZy51c2VyQWN0aXZl PURhdGUubm93KCk7fS5iaW5kKHRoaXMpKTt6ZC5yZWdpc3RlcignY2gnLHYpO3Zh ciB6az1mdW5jdGlvbigpe3Q9dHJ1ZTtuLmRvU3luYyh0cnVlKTt9O2lmKHR5cGVv ZiB3aW5kb3cub25wYWdlc2hvdyE9J3VuZGVmaW5lZCcpe0V2ZW50Lmxpc3Rlbih3 aW5kb3csJ3BhZ2VoaWRlJyx6ayk7fWVsc2UgbS5ydW5PbmxvYWQoemspO3ZhciB6 ZztiLnN1YnNjcmliZShlLk9OX0VOVEVSX1NUQVRFLGZ1bmN0aW9uKHptLHpsKXt6 Zz1EYXRlLm5vdygpO30pO3ZhciB6aD0oZnVuY3Rpb24oKXtpZih0aGlzLmlzU2h1 dGRvd24oKSlyZXR1cm47dmFyIHpuPURhdGUubm93KCksem09emd8fHpuO3ZhciB6 bD16bi16bTtpZih0aGlzLnN0YXRlPT0ncHVsbCcmJnpsPjkwMDAwKXt6Zz1udWxs O3RoaXMuZ2V0TG9nZ2VyKCkubG9nKCdqdW1wc3RhcnQnLHtzdGF0ZTp0aGlzLnN0 YXRlLGRvcm1hbnQ6emx9KTt0aGlzLmVudGVyU3RhdGUoJ2luaXQnKTt9fSkuYmlu ZCh0aGlzKTtzZXRJbnRlcnZhbCh6aCwxMDAwMCxmYWxzZSk7dGhpcy5fdHJhbnNw b3J0UmF0ZT1uZXcgbCgzMDAwMCk7dmFyIHpqPShhLmNvcnNFbmFibGVkJiYhdS5m b3JjZUlmcmFtZSk/J0NPUlNUcmFuc3BvcnQnOidJZnJhbWVUcmFuc3BvcnQnO3Ro aXMudHJhbnNwb3J0PW5ldyBoW3pqXSh0aGlzKTtpZih6aSl0aGlzLmVudGVyU3Rh dGUuYXBwbHkodGhpcyxhcmd1bWVudHMpO24uZG9TeW5jKCk7Yi5zdWJzY3JpYmUo ay5EVU1QX0VWRU5ULGZ1bmN0aW9uKGV2ZW50LHpsKXt6bC50cmFuc3BvcnRSYXRl PXRoaXMuX3RyYW5zcG9ydFJhdGUudGFsbHkoKTt6bC50cmFuc3BvcnRUeXBlPXpq O3psLnRyYW5zcG9ydFZlcnNpb249Mjt9LmJpbmQodGhpcykpO3RoaXMuX2luaXRD aGFubmVsRXZlbnRzKCk7dGhpcy5faW5pdENvbm5lY3Rpdml0eU1vbml0b3Jpbmco KTt9LGdldExvZ2dlcjpmdW5jdGlvbih6Zyl7emc9emd8fCdjaGFubmVsJztyZXR1 cm4gay5jcmVhdGUoemcpO30sY29uZmlndXJlOmZ1bmN0aW9uKCl7Yy5jcmVhdGVG cm9tKGFyZ3VtZW50cykuZWFjaCh5LmJpbmQobnVsbCx0aGlzLl9jb25maWcpKTti LmluZm9ybShlLk9OX0NPTkZJRyx0aGlzKTt9LGdldENvbmZpZzpmdW5jdGlvbih6 aCx6Zyl7cmV0dXJuIHpoIGluIHRoaXMuX2NvbmZpZz90aGlzLl9jb25maWdbemhd OnpnO30saXNTaHV0ZG93bjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXRlPT0n c2h1dGRvd24nO30sX2luaXRDaGFubmVsRXZlbnRzOmZ1bmN0aW9uKCl7dmFyIHpp LHpoO3ZhciB6Zz1qLmRlYm91bmNlKGZ1bmN0aW9uKCl7emk9emg7aWYoemgpe2Iu aW5mb3JtKGUuT05fQ09OTkVDVCk7fWVsc2UgaWYoIXRoaXMuaXNTaHV0ZG93bigp KWIuaW5mb3JtKGUuT05fSURMRSk7fS5iaW5kKHRoaXMpLDUwMDAsZmFsc2UpO2Iu c3Vic2NyaWJlKGUuT05fRU5URVJfU1RBVEUsZnVuY3Rpb24oemosemspe3poPXpr LnN0YXRlPT0ncHVsbCc7aWYoemkhPXpoKXt6ZygpO31lbHNlIHpnLnJlc2V0KCk7 fSk7fSxfaW5pdENvbm5lY3Rpdml0eU1vbml0b3Jpbmc6ZnVuY3Rpb24oKXt2YXIg emw9bmV3IERhdGUoKTt2YXIgemc9MTtmdW5jdGlvbiB6aygpe3NldFRpbWVvdXQo emssemcqMTAwMCxmYWxzZSk7aWYobmF2aWdhdG9yLm9uTGluZSl7dy5idW1wKCdj b25uX3QnLHpnKTtpZihmLnN0YXRlPT0ncHVsbCcpdy5idW1wKCdjb25uX3RfcHVs bCcsemcpO319emsoKTt2YXIgem09WzE1LDMwLDYwLDEyMCwyNDBdO3ZhciB6aT1m YWxzZSx6aj1mYWxzZTtmdW5jdGlvbiB6aCh6bil7c2V0VGltZW91dChmdW5jdGlv bigpe3cucmF0ZSgncHVsbGVudGVyXycrem4semkpO3cucmF0ZSgncHVsbGV4aXRf Jyt6bix6aik7fSx6bioxMDAwLGZhbHNlKTt9d2hpbGUoem0ubGVuZ3RoKXpoKHpt LnNoaWZ0KCkpO2Iuc3Vic2NyaWJlKGUuT05fRU5URVJfU1RBVEUsZnVuY3Rpb24o em4sem8pe2lmKHpvLnN0YXRlPT0ncHVsbCcpemk9dHJ1ZTt6bD1uZXcgRGF0ZSgp O30pO2Iuc3Vic2NyaWJlKGUuT05fRVhJVF9TVEFURSxmdW5jdGlvbih6bix6byl7 aWYoem8uc3RhdGU9PSdwdWxsJyYmemwpe3ZhciB6cD16by5zdGF0dXM9PWUuT0s/ ZS5PSzooem8mJnpvLmVycm9yVHlwZSk7c3dpdGNoKHpwKXtjYXNlIGUuT0s6emo9 dHJ1ZTt6cD0nb2snO2JyZWFrO2Nhc2UgYS5FUlJPUjp6cD0nZXJyb3InO2JyZWFr O2Nhc2UgYS5USU1FT1VUOnpwPSd0aW1lb3V0JzticmVhaztjYXNlIGEuUFJPWFlf RVJST1I6enA9J3Byb3h5JzticmVhaztjYXNlIGEuVFJBTlNQT1JUX0VSUk9SOnpw PSd0cmFuc3BvcnQnO2JyZWFrO2Nhc2UgYS5TRVJWRVJfRVJST1I6enA9J2h0dHAn O2JyZWFrO2Nhc2UgYS5QQVJTRV9FUlJPUjp6cD0ncGFyc2UnO2JyZWFrO2RlZmF1 bHQ6enA9J290aGVyJzticmVhazt9dmFyIHpxPShuZXcgRGF0ZSgpLXpsKS8xMDAw O2lmKHpxPDApe3JldHVybjt9ZWxzZSBpZih6cT4zNjAwKXpxPTM2MDA7dy5idW1w KCdjb25uX251bScpO3cuYnVtcCgnY29ubl9leGl0Jyx6cSk7dy5idW1wKCdjb25u X251bV8nK3pwKTt3LmJ1bXAoJ2Nvbm5fZXhpdF8nK3pwLHpxKTt9fSk7fSxfc2Vu ZElmcmFtZUVycm9yOmZ1bmN0aW9uKHpoKXt2YXIgemc9bmV3IGQoKS5zZXRVUkko Jy9hamF4L3ByZXNlbmNlL3JlY29ubmVjdC5waHAnKS5zZXREYXRhKHtyZWFzb246 emgsaWZyYW1lX2xvYWRlZDp0aGlzLmlmcmFtZUV2ZXJMb2FkZWR9KS5zZXRPcHRp b24oJ3N1cHByZXNzRXJyb3JIYW5kbGVyV2FybmluZycsdHJ1ZSkuc2V0T3B0aW9u KCdyZXRyaWVzJywxKS5zZXRNZXRob2QoJ0dFVCcpLnNldFJlYWRPbmx5KHRydWUp LnNldEFsbG93Q3Jvc3NQYWdlVHJhbnNpdGlvbih0cnVlKTt6Zy5zcGVjaWZpZXNX cml0ZVJlcXVpcmVkUGFyYW1zKCkmJnpnLnNlbmQoKTt9LF9idW1wRGVsYXk6ZnVu Y3Rpb24oemcpe2lmKHpnKXt0aGlzLl9idW1wcz0wO3RoaXMuX2ZhaWxzPXt9O31l bHNlIHRoaXMuX2J1bXBzKys7fSxfZ2V0RGVsYXk6ZnVuY3Rpb24oKXt2YXIgemk9 Zi5nZXRDb25maWcoJ01JTl9SRVRSWV9JTlRFUlZBTCcsMTAwMDApO3ZhciB6aD1m LmdldENvbmZpZygnTUFYX1JFVFJZX0lOVEVSVkFMJyw2MDAwMCk7dmFyIHpnPU1h dGgubWluKHppKk1hdGgucG93KDIsTWF0aC5tYXgoMCx0aGlzLl9idW1wcy0xKSks emgpO3JldHVybiB6ZyooLjc1K01hdGgucmFuZG9tKCkvMil8MDt9LGVudGVyU3Rh dGU6ZnVuY3Rpb24oKXtpZih0aGlzLl9pbkVudGVyU3RhdGUpdGhyb3cgbmV3IEVy cm9yKCdlbnRlclN0YXRlKCkgbWF5IG5vdCBiZSBuZXN0ZWQnKTt0aGlzLl9pbkVu dGVyU3RhdGU9dHJ1ZTt0cnl7dGhpcy5fZW50ZXJTdGF0ZS5hcHBseSh0aGlzLGFy Z3VtZW50cyk7dGhpcy5faW5FbnRlclN0YXRlPWZhbHNlO31jYXRjaCh6Zyl7dGhp cy5faW5FbnRlclN0YXRlPWZhbHNlO3Rocm93IHpnO319LF9lbnRlclN0YXRlOmZ1 bmN0aW9uKHpuKXt2YXIgemg9MDt2YXIgems9bnVsbDt2YXIgemc9Yy5jcmVhdGVG cm9tKGFyZ3VtZW50cyk7aWYodGhpcy5pc1NodXRkb3duKCkpcmV0dXJuO2NsZWFy VGltZW91dCh0aGlzLl9kZWZlcnJlZFRyYW5zaXRpb24pO3RoaXMuX2RlZmVycmVk VHJhbnNpdGlvbj1udWxsO3RoaXMudHJhbnNwb3J0LmVudGVyU3RhdGUoJ2lkbGUn KTt0aGlzLnN0YXRlPSdpZGxlJztpZigvISQvLnRlc3Qoem4pKXt2YXIgem09dGhp cy5fdHJhbnNwb3J0UmF0ZS50YWxseSgpLnRpbWVBdmVyYWdlO3ZhciB6bD1mLmdl dENvbmZpZygnTUFYX0NIQU5ORUxfU1RBVEVTX1BFUl9TRUMnLDEpO2lmKHptPj16 bCl6aD0xMDAwL3psO31lbHNlIGlmKCEoLyMkLy50ZXN0KHpuKSkpemg9dGhpcy5f Z2V0RGVsYXkoKTt6bj16bi5yZXBsYWNlKC9cVyokLywnJyk7aWYoIXBbem5dKXRo cm93IG5ldyBFcnJvcignaW52YWxpZCBzdGF0ZTonK3puKTt2YXIgemk7aWYoemg8 PTApe3ppPXtzdGF0ZTp6bn07dGhpcy5fdHJhbnNwb3J0UmF0ZS5hZGQoMSk7dGhp cy5zdGF0ZT16bjt2YXIgemo9dGhpc1snX2VudGVyXycrdGhpcy5zdGF0ZV07aWYo emope3pnLnNoaWZ0KCk7emouYXBwbHkodGhpcyx6Zyk7fWlmKC9pbml0fGlkbGV8 cHVsbHxwaW5nLy50ZXN0KHRoaXMuc3RhdGUpKXt4KCk7dGhpcy50cmFuc3BvcnQu ZW50ZXJTdGF0ZSh0aGlzLnN0YXRlLHUpO319ZWxzZXt0aGlzLnN0YXRlPSdpZGxl Jzt6aT17c3RhdGU6dGhpcy5zdGF0ZSxkZWxheTp6aCxuZXh0U3RhdGU6em59O3pn WzBdPXpuKycjJzt0aGlzLl9kZWZlcnJlZFRyYW5zaXRpb249KGZ1bmN0aW9uKCl7 dGhpcy5fZGVmZXJyZWRUcmFuc2l0aW9uPW51bGw7dGhpcy5lbnRlclN0YXRlLmFw cGx5KHRoaXMsemcpO30pLmJpbmQodGhpcykuZGVmZXIoemgsZmFsc2UpO313Lmxv ZygnZW50ZXJfJyt0aGlzLnN0YXRlLHppKTtiLmluZm9ybShlLk9OX0VOVEVSX1NU QVRFLHppKTt9LGV4aXRTdGF0ZTpmdW5jdGlvbih6bix6ail7aWYodGhpcy5pc1No dXRkb3duKCkpcmV0dXJuO3ZhciB6Zz1jLmNyZWF0ZUZyb20oYXJndW1lbnRzKSx6 bT10aGlzLnN0YXRlO3ZhciB6aD17c3RhdGU6em0sc3RhdHVzOnpufTtpZih6aiYm emouZXJyb3JUeXBlKXt6aC5lcnJvclR5cGU9emouZXJyb3JUeXBlO3poLmVycm9y VGV4dD16ai5lcnJvclRleHQ7fWlmKHpqJiZ6ai5qc29uKXtpZih6ai5qc29uLnQp emgudD16ai5qc29uLnQ7aWYoemouanNvbi5yZWFzb24pemgucmVhc29uPXpqLmpz b24ucmVhc29uO2lmKHpqLmpzb24uc2VxKXpoLnNlcT16ai5qc29uLnNlcTt9dy5s b2coJ2V4aXRfJyt6bSx6aCk7Yi5pbmZvcm0oZS5PTl9FWElUX1NUQVRFLHpoKTt2 YXIgemk9dGhpc1snX2V4aXRfJyt6bV07aWYoemkpem49emkuYXBwbHkodGhpcyx6 Zyl8fHpuO2lmKHpuIT1lLk9LKXt0aGlzLl9idW1wRGVsYXkoKTt0aGlzLl9mYWls c1t6bV09KHRoaXMuX2ZhaWxzW3ptXXx8MCkrMTt9dmFyIHpsPXBbem1dW3puXXx8 cC5fYWxsW3puXTt2YXIgems9emwmJnpsLnJlcGxhY2UoLyEqJC8sJycpO2lmKCF6 ayl7dy5lcnJvcigndGVybWluYWxfdHJhbnNpdGlvbicsemgpO3RoaXMuX3NodXRk b3duSGludD1lLkhJTlRfSU5WQUxJRF9TVEFURTt6bD0nc2h1dGRvd24hJzt9dGhp cy5fbGFzdFN0YXRlPXptO3RoaXMuX2xhc3RTdGF0dXM9em47dGhpcy5lbnRlclN0 YXRlKHpsKTt9LF9wcm9jZXNzVHJhbnNwb3J0RGF0YTpmdW5jdGlvbih6bil7dmFy IHppPXpuLmpzb24senA9emkudDtpZigncycgaW4gemkpe3ppLnNlcT16aS5zO2Rl bGV0ZSB6aS5zO312YXIgemg9dTt2YXIgems9emguc2VxO2lmKCdzZXEnIGluIHpp KXt6aC5zZXE9emkuc2VxO24uZG9TeW5jKCk7fWlmKHpwPT0nY29udGludWUnKXt0 aGlzLl9idW1wRGVsYXkodHJ1ZSk7cmV0dXJuIHRoaXMuZXhpdFN0YXRlKGUuT0sp O31lbHNlIGlmKHpwPT0ncmVmcmVzaCd8fHpwPT0ncmVmcmVzaERlbGF5Jyl7cmV0 dXJuIHRoaXMuZXhpdFN0YXRlKCdyZWZyZXNoXycrKHppLnJlYXNvbnx8MCksem4p O31lbHNlIGlmKHpwPT0nZnVsbFJlbG9hZCcpe3pkLmNsZWFyKCk7dy5sb2coemYo J2FyYml0ZXJfJytlLk9OX0lOVkFMSURfSElTVE9SWSkpO3piKGUuT05fSU5WQUxJ RF9ISVNUT1JZKTtyZXR1cm4gdGhpcy5leGl0U3RhdGUoZS5FUlJPUl9NSVNTSU5H LHpuKTt9ZWxzZSBpZih6cD09J21zZycpe3ZhciB6aix6bCx6byx6ZztpZih6aS5t c2dzKXt6bD16aS5tc2dzO3ZhciB6bT0wO2Zvcih6aj0wO3pqPHpsLmxlbmd0aDt6 aisrKWlmKHpsW3pqXS5zZXEhPT0tMSl6bSsrO3pvPXUuc2VxLXptO2Zvcih6aj0w O3pqPHpsLmxlbmd0aDt6aisrKXtpZih6bz49emspe3pnPXpsW3pqXS5tc2c7aWYo emcudHlwZSl6YihlLmdldEFyYml0ZXJUeXBlKHpnLnR5cGUpLHtvYmo6emd9KTt9 ZWxzZSB3Lndhcm4oJ3NlcV9yZWdyZXNzaW9uJyx7c2VxOnpvLGxhc3Rfc2VxOnpr LG5vbl90cmFuc2llbnQ6em0sbWVzc2FnZXM6emwubGVuZ3RofSk7aWYoemxbempd LnNlcSE9PS0xKXpvKys7fX1lbHNle3psPXppLm1zO3pvPXUuc2VxLXpsLmxlbmd0 aDtmb3Ioemo9MDt6ajx6bC5sZW5ndGg7emorKyx6bysrKWlmKHpvPj16ayl7emc9 emxbempdO2lmKHpnLnR5cGUpemIoZS5nZXRBcmJpdGVyVHlwZSh6Zy50eXBlKSx7 b2JqOnpnfSk7fWVsc2Ugdy53YXJuKCdzZXFfcmVncmVzc2lvbicse3NlcTp6byxs YXN0X3NlcTp6ayxtZXNzYWdlczp6bC5sZW5ndGh9KTt9dGhpcy5fYnVtcERlbGF5 KHRydWUpO3JldHVybiB0aGlzLmV4aXRTdGF0ZShlLk9LKTt9cmV0dXJuIHRoaXMu ZXhpdFN0YXRlKGUuRVJST1JfTVNHX1RZUEUsJ3R5cGUgPSAnK3pwKTt9LF9lbnRl cl9pbml0OmZ1bmN0aW9uKCl7aWYodGhpcy5fZmFpbHMuaW5pdD49MilyZXR1cm4g dGhpcy5leGl0U3RhdGUuYmluZCh0aGlzLGUuRVJST1JfTUFYKS5kZWZlcigpO3Ro aXMuX2luaXRUaW1lcj10aGlzLmV4aXRTdGF0ZS5iaW5kKHRoaXMsZS5FUlJPUiwn dGltZW91dCcpLmRlZmVyKGYuZ2V0Q29uZmlnKCdJRlJBTUVfTE9BRF9USU1FT1VU JywzMDAwMCksZmFsc2UpO30sX2VudGVyX3JlY29ubmVjdDpmdW5jdGlvbih6Zyl7 aWYoIW8uaGFzVXNlckNvb2tpZSgpKXt3Lndhcm4oJ25vX3VzZXJfY29va2llJyk7 KGZ1bmN0aW9uKCl7Zi5fc2h1dGRvd25IaW50PWUuSElOVF9BVVRIO2YuZXhpdFN0 YXRlKGUuRVJST1JfU0hVVERPV04pO30pLmRlZmVyKCk7cmV0dXJuO312YXIgemg9 bmV3IGkoJ0dFVCcsJy9hamF4L3ByZXNlbmNlL3JlY29ubmVjdC5waHAnLHtyZWFz b246emcsaWZyYW1lX2xvYWRlZDp0aGlzLmlmcmFtZUV2ZXJMb2FkZWR9KTt6aC5v blN1Y2Nlc3M9KGZ1bmN0aW9uKCl7Zi5jb25maWd1cmUobnVsbCx6aC5qc29uKTt6 ZC5zdG9yZSgpO3RoaXMuZXhpdFN0YXRlKGUuT0spO30pLmJpbmQodGhpcyk7emgu b25FcnJvcj0oZnVuY3Rpb24oKXt2YXIgemk9emguanNvbiYmemguanNvbi5lcnJv cjtpZih6aC5lcnJvclR5cGU9PWEuVFJBTlNQT1JUX0VSUk9SfHx6aC5lcnJvclR5 cGU9PWEuUFJPWFlfRVJST1IpdGhpcy5fc2h1dGRvd25IaW50PWUuSElOVF9DT05O O2lmKHppJiZ6aT09MTM1NjAwNyl7dGhpcy5fc2h1dGRvd25IaW50PWUuSElOVF9N QUlOVDt9ZWxzZSBpZih6aT09MTM1NzAwMXx8emk9PTEzNTcwMDR8fHppPT0xMzQ4 MDA5KXt0aGlzLl9zaHV0ZG93bkhpbnQ9ZS5ISU5UX0FVVEg7fWVsc2UgdGhpcy5f c2h1dGRvd25IaW50PW51bGw7dGhpcy5leGl0U3RhdGUodGhpcy5fc2h1dGRvd25I aW50P2UuRVJST1JfU0hVVERPV046ZS5FUlJPUix6aCk7fSkuYmluZCh0aGlzKTt6 aC5zZW5kKCk7fSxfZW50ZXJfc2h1dGRvd246ZnVuY3Rpb24oKXt6YihlLk9OX1NI VVRET1dOLHtyZWFzb246dGhpcy5fc2h1dGRvd25IaW50fSk7fSxfZXhpdF9pbml0 OmZ1bmN0aW9uKHpnKXtpZih0aGlzLl9pbml0VGltZXIpdGhpcy5faW5pdFRpbWVy PWNsZWFyVGltZW91dCh0aGlzLl9pbml0VGltZXIpO2lmKHpnPT1lLk9LKXt0aGlz LmlmcmFtZUV2ZXJMb2FkZWQ9dHJ1ZTt9ZWxzZSBpZih6Zz09ZS5FUlJPUl9NQVgp dGhpcy5fc2VuZElmcmFtZUVycm9yKGUucmVhc29uX0lGcmFtZUxvYWRHaXZlVXAp O319O3pjLmV4cG9ydHM9ZjtpZihnLnNlcnZlckluaXRpYWxpemVkPT1udWxsKXtm LmNvbmZpZ3VyZShnLmNoYW5uZWxDb25maWcpO2lmKC9zaHV0ZG93bi8udGVzdChn LnN0YXRlKSl7Zi5fc2h1dGRvd25IaW50PWVbZy5yZWFzb25dO31lbHNlIGcucmVj b25uZWN0UmVhc29uO2YuaW5pdChnLnN0YXRlLGcucmVhc29uKTt9fSk7Cl9fZSgi Q2hhbm5lbENvbm5lY3Rpb24iLFsiYXJiaXRlciIsImNvcHlQcm9wZXJ0aWVzIiwi Q2hhdENvbmZpZyIsIlN5c3RlbUV2ZW50cyIsIkNoYW5uZWxDb25zdGFudHMiLCJD aGFubmVsTWFuYWdlciJdLGZ1bmN0aW9uKHEscyxyLHApe3ZhciBhPXMoJ2FyYml0 ZXInKTt2YXIgbz1zKCdjb3B5UHJvcGVydGllcycpO3ZhciBlPXMoJ0NoYXRDb25m aWcnKTt2YXIgZj1zKCdTeXN0ZW1FdmVudHMnKTt2YXIgYz1zKCdDaGFubmVsQ29u c3RhbnRzJyk7dmFyIGQ9cygnQ2hhbm5lbE1hbmFnZXInKTt2YXIgbT1udWxsO3Zh ciBrPW51bGw7dmFyIGg9ZmFsc2U7dmFyIGI9byhuZXcgYSgpLHtDT05ORUNURUQ6 J2NoYXQtY29ubmVjdGlvbi9jb25uZWN0ZWQnLFJFQ09OTkVDVElORzonY2hhdC1j b25uZWN0aW9uL3JlY29ubmVjdGluZycsU0hVVERPV046J2NoYXQtY29ubmVjdGlv bi9zaHV0ZG93bicsTVVURV9XQVJOSU5HOidjaGF0LWNvbm5lY3Rpb24vbXV0ZScs VU5NVVRFX1dBUk5JTkc6J2NoYXQtY29ubmVjdGlvbi91bm11dGUnfSk7ZnVuY3Rp b24gZygpe2lmKGspe2NsZWFyVGltZW91dChrKTtrPW51bGw7fX1mdW5jdGlvbiBu KCl7ZygpO2IuaW5mb3JtKGIuVU5NVVRFX1dBUk5JTkcpO31mdW5jdGlvbiBqKHQp e2coKTtrPW4uZGVmZXIodCxmYWxzZSk7Yi5pbmZvcm0oYi5NVVRFX1dBUk5JTkcp O31mdW5jdGlvbiBpKHUsdCl7aWYodT09PWMuT05fRU5URVJfU1RBVEUmJih0LnN0 YXRlPT09J3B1bGwnfHx0Lm5leHRTdGF0ZT09PSdwdWxsJykpe2lmKGgpe2g9ZmFs c2U7Yi5pbmZvcm0oYi5DT05ORUNURUQpO319ZWxzZSBpZih1PT09Yy5PTl9FTlRF Ul9TVEFURSYmKHQuc3RhdGU9PT0ncGluZyd8fHQubmV4dFN0YXRlPT09J3Bpbmcn KSl7aD10cnVlO2IuaW5mb3JtKGIuUkVDT05ORUNUSU5HLHQuZGVsYXkpO31lbHNl IGlmKHU9PT1jLk9OX1NIVVRET1dOKXtoPXRydWU7Yi5pbmZvcm0oYi5TSFVURE9X Tix0LnJlYXNvbik7fX1mdW5jdGlvbiBsKHQpe2lmKGQuc3RhdGU9PT0ncGluZyd8 fGQuaXNTaHV0ZG93bigpKXJldHVybjtiLmluZm9ybShiLlJFQ09OTkVDVElORyww KTtpZighIXQpe2lmKG0hPT1udWxsKXtjbGVhclRpbWVvdXQobSk7bT1udWxsO31k LmVudGVyU3RhdGUoJ3BpbmchJyk7fWVsc2UgaWYoIW0pbT1zZXRUaW1lb3V0KGZ1 bmN0aW9uKCl7ZC5lbnRlclN0YXRlKCdwaW5nIScpO209bnVsbDt9LGUuZ2V0KCdj aGFubmVsX21hbnVhbF9yZWNvbm5lY3RfZGVmZXJfbXNlYycpLGZhbHNlKTt9YS5z dWJzY3JpYmUoW2MuT05fRU5URVJfU1RBVEUsYy5PTl9TSFVURE9XTl0saSk7Zi5z dWJzY3JpYmUoZi5BV0FLRSxmdW5jdGlvbigpe2woKTtqKGUuZ2V0KCdtdXRlX3dh cm5pbmdfdGltZV9tc2VjJykpO30pO28oYix7ZGlzY29ubmVjdGVkOmZ1bmN0aW9u KCl7cmV0dXJuIGgmJiFrO30scmVjb25uZWN0OmwsdW5tdXRlV2FybmluZzpufSk7 ci5leHBvcnRzPWI7fSk7Cl9fZSgiY2hhbm5lbF9jb25zdGFudHMiLFsiQ2hhbm5l bENvbnN0YW50cyJdLGZ1bmN0aW9uKGIsYyl7dmFyIGE9YygnQ2hhbm5lbENvbnN0 YW50cycpO2IuY2hhbm5lbF9jb25zdGFudHM9Yi5jaGFubmVsX2NvbnN0YW50c3x8 YTt9LDMpOwpfX2UoIkJ1dHRvbiIsWyJldmVudC1leHRlbnNpb25zIiwiY3NzIiwi RGF0YVN0b3JlIiwiZG9tIiwicGFyZW50Il0sZnVuY3Rpb24oZyxpLGgsZil7aSgn ZXZlbnQtZXh0ZW5zaW9ucycpO3ZhciBiPWkoJ2NzcycpO3ZhciBkPWkoJ0RhdGFT dG9yZScpO3ZhciBjPWkoJ2RvbScpO3ZhciBlPWkoJ3BhcmVudCcpO3ZhciBhPShm dW5jdGlvbigpe3ZhciBrPSd1aUJ1dHRvbkRpc2FibGVkJzt2YXIgaj0ndWlCdXR0 b25EZXByZXNzZWQnO3ZhciBtPSdidXR0b246YmxvY2tlcic7dmFyIGw9J2hyZWYn O2Z1bmN0aW9uIG4ocyxyKXt2YXIgcT1kLmdldChzLG0pO2lmKHIpe2lmKHEpe3Eu cmVtb3ZlKCk7ZC5yZW1vdmUocyxtKTt9fWVsc2UgaWYoIXEpZC5zZXQocyxtLEV2 ZW50Lmxpc3RlbihzLCdjbGljaycsYmFnb2YoZmFsc2UpLEV2ZW50LlByaW9yaXR5 LlVSR0VOVCkpO31mdW5jdGlvbiBvKHEpe3ZhciByPWUuYnlDbGFzcyhxLCd1aUJ1 dHRvbicpO2lmKCFyKXRocm93IG5ldyBFcnJvcignaW52YWxpZCB1c2UgY2FzZScp O3JldHVybiByO31mdW5jdGlvbiBwKHEpe3JldHVybiBjLmlzTm9kZU9mVHlwZShx LCdhJyk7fXJldHVybiB7Z2V0SW5wdXRFbGVtZW50OmZ1bmN0aW9uKHEpe3E9byhx KTtpZihwKHEpKXRocm93IG5ldyBFcnJvcignaW52YWxpZCB1c2UgY2FzZScpO3Jl dHVybiBjLmZpbmQocSwnaW5wdXQnKTt9LGlzRW5hYmxlZDpmdW5jdGlvbihxKXty ZXR1cm4gIWIuaGFzQ2xhc3MobyhxKSxrKTt9LHNldEVuYWJsZWQ6ZnVuY3Rpb24o dCxxKXt0PW8odCk7Yi5jb25kaXRpb25DbGFzcyh0LGssIXEpO2lmKHAodCkpe3Zh ciByPXQuaHJlZjt2YXIgdT1kLmdldCh0LGwsJyMnKTtpZihxKXtpZighcil0Lmhy ZWY9dTt9ZWxzZXtpZihyJiZyIT09dSlkLnNldCh0LGwscik7dC5yZW1vdmVBdHRy aWJ1dGUoJ2hyZWYnKTt9bih0LHEpO31lbHNle3ZhciBzPWEuZ2V0SW5wdXRFbGVt ZW50KHQpO3MuZGlzYWJsZWQ9IXE7bihzLHEpO319LHNldERlcHJlc3NlZDpmdW5j dGlvbihyLHEpe2IuY29uZGl0aW9uQ2xhc3MobyhyKSxqLHEpO30saXNEZXByZXNz ZWQ6ZnVuY3Rpb24ocSl7cmV0dXJuIGIuaGFzQ2xhc3MobyhxKSxqKTt9LHNldExh YmVsOmZ1bmN0aW9uKHIscSl7cj1vKHIpO2lmKHAocikpe3ZhciBzPWMuZmluZChy LCdzcGFuLnVpQnV0dG9uVGV4dCcpO2Muc2V0Q29udGVudChzLHEpO31lbHNlIGEu Z2V0SW5wdXRFbGVtZW50KHIpLnZhbHVlPXE7Yi5jb25kaXRpb25DbGFzcyhyLCd1 aUJ1dHRvbk5vVGV4dCcsIXEpO30sc2V0SWNvbjpmdW5jdGlvbihyLHEpe2lmKCFj LmlzTm9kZShxKSlyZXR1cm47Yi5hZGRDbGFzcyhxLCdjdXN0b21pbWcnKTtyPW8o cik7dmFyIHM9Yy5zY3J5KHIsJy5pbWcnKVswXTtpZihzIT1xKWlmKHMpe2MucmVw bGFjZShzLHEpO31lbHNlIGMucHJlcGVuZENvbnRlbnQocixxKTt9fTt9KSgpO2cu QnV0dG9uPWguZXhwb3J0cz1hO30sMyk7Cl9fZSgiY29udHJvbC1kb20iLFsiRGF0 YVN0b3JlIiwiZG9tLWNvcmUiXSxmdW5jdGlvbihlLGcsZixkKXt2YXIgYz1nKCdE YXRhU3RvcmUnKTt2YXIgYT1nKCdkb20tY29yZScpLiQ7ZnVuY3Rpb24gYihoKXt0 aGlzLnJvb3Q9YShoKTt0aGlzLnVwZGF0aW5nPWZhbHNlO2Muc2V0KGgsJ0RPTUNv bnRyb2wnLHRoaXMpO31iLnByb3RvdHlwZT17Z2V0Um9vdDpmdW5jdGlvbigpe3Jl dHVybiB0aGlzLnJvb3Q7fSxiZWdpblVwZGF0ZTpmdW5jdGlvbigpe2lmKHRoaXMu dXBkYXRpbmcpcmV0dXJuIGZhbHNlO3RoaXMudXBkYXRpbmc9dHJ1ZTtyZXR1cm4g dHJ1ZTt9LGVuZFVwZGF0ZTpmdW5jdGlvbigpe3RoaXMudXBkYXRpbmc9ZmFsc2U7 fSx1cGRhdGU6ZnVuY3Rpb24oaCl7aWYoIXRoaXMuYmVnaW5VcGRhdGUoKSlyZXR1 cm4gdGhpczt0aGlzLm9udXBkYXRlKGgpO3RoaXMuZW5kVXBkYXRlKCk7fSxvbnVw ZGF0ZTpmdW5jdGlvbihoKXt9fTtiLmdldEluc3RhbmNlPWZ1bmN0aW9uKGgpe3Jl dHVybiBjLmdldChoLCdET01Db250cm9sJyk7fTtlLkRPTUNvbnRyb2w9Zi5leHBv cnRzPWI7fSwzKTsKX19lKCJpbnB1dC1tZXRob2RzIixbImJvb3Rsb2FkZXIiLCJj c3MtY29yZSIsImRvbSIsImNvbnRyb2wtZG9tIiwib2JqZWN0LWNvcmUtdXRpbHMi XSxmdW5jdGlvbihnLGksaCxmKXt2YXIgYT1pKCdib290bG9hZGVyJyk7dmFyIGI9 aSgnY3NzLWNvcmUnKTt2YXIgYz1pKCdkb20nKTt2YXIgZD1pKCdjb250cm9sLWRv bScpO3ZhciBlPWZ1bmN0aW9uKGope3ZhciBrPWouZ2V0QXR0cmlidXRlKCdtYXhs ZW5ndGgnKTtpZihrJiZrPjApYS5sb2FkQ29tcG9uZW50cygnbWF4bGVuZ3RoLWZv cm0tbGlzdGVuZXInLGZ1bmN0aW9uKCl7SW5wdXQuZW5mb3JjZU1heExlbmd0aChq LGspO30pO307aC5leHBvcnRzPXtmb2N1czpmdW5jdGlvbihqKXt0cnl7ai5mb2N1 cygpO31jYXRjaChrKXt9fSxpc0VtcHR5OmZ1bmN0aW9uKGope3JldHVybiAhKC9c Uy8pLnRlc3Qoai52YWx1ZXx8JycpfHxiLmhhc0NsYXNzKGosJ0RPTUNvbnRyb2xf cGxhY2Vob2xkZXInKTt9LGdldFZhbHVlOmZ1bmN0aW9uKGope3JldHVybiBJbnB1 dC5pc0VtcHR5KGopPycnOmoudmFsdWU7fSxzZXRWYWx1ZTpmdW5jdGlvbihrLGwp e2IucmVtb3ZlQ2xhc3MoaywnRE9NQ29udHJvbF9wbGFjZWhvbGRlcicpO2sudmFs dWU9bHx8Jyc7ZShrKTt2YXIgaj1kLmdldEluc3RhbmNlKGspO2omJmoucmVzZXRI ZWlnaHQmJmoucmVzZXRIZWlnaHQoKTt9LHNldFBsYWNlaG9sZGVyOmZ1bmN0aW9u KGosayl7ai5zZXRBdHRyaWJ1dGUoJ3RpdGxlJyxrKTtqLnNldEF0dHJpYnV0ZSgn cGxhY2Vob2xkZXInLGspO2lmKGo9PWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpcmV0 dXJuO2lmKElucHV0LmlzRW1wdHkoaikpe2IuY29uZGl0aW9uQ2xhc3MoaiwnRE9N Q29udHJvbF9wbGFjZWhvbGRlcicsayk7ai52YWx1ZT1rfHwnJzt9fSxyZXNldDpm dW5jdGlvbihqKXt2YXIgaz1qIT09ZG9jdW1lbnQuYWN0aXZlRWxlbWVudD8oai5n ZXRBdHRyaWJ1dGUoJ3BsYWNlaG9sZGVyJyl8fCcnKTonJztqLnZhbHVlPWs7Yi5j b25kaXRpb25DbGFzcyhqLCdET01Db250cm9sX3BsYWNlaG9sZGVyJyxrKTtqLnN0 eWxlLmhlaWdodD0nJzt9LHNldFN1Ym1pdE9uRW50ZXI6ZnVuY3Rpb24oaixrKXti LmNvbmRpdGlvbkNsYXNzKGosJ2VudGVyX3N1Ym1pdCcsayk7fSxnZXRTdWJtaXRP bkVudGVyOmZ1bmN0aW9uKGope3JldHVybiBiLmhhc0NsYXNzKGosJ2VudGVyX3N1 Ym1pdCcpO30sc2V0TWF4TGVuZ3RoOmZ1bmN0aW9uKGosayl7aWYoaz4wKXtqLnNl dEF0dHJpYnV0ZSgnbWF4bGVuZ3RoJyxrKTtlKGopO31lbHNlIGoucmVtb3ZlQXR0 cmlidXRlKCdtYXhsZW5ndGgnKTt9fTtpKCdvYmplY3QtY29yZS11dGlscycpLmFk ZF9wcm9wZXJ0aWVzKCdJbnB1dCcsaC5leHBvcnRzKTt9LDMpOwpfX2UoIkZvcm0i LFsiZXZlbnQtZXh0ZW5zaW9ucyIsIkFycmF5VXRpbHMiLCJBc3luY1JlcXVlc3Qi LCJBc3luY1Jlc3BvbnNlIiwiRGF0YVN0b3JlIiwiZG9tIiwiRW52IiwiaW5wdXQt bWV0aG9kcyIsInBhcmVudCIsInVyaSIsInRyYWNrUmVmZXJyZXIiXSxmdW5jdGlv bihsLG4sbSxrKXtuKCJldmVudC1leHRlbnNpb25zIik7dmFyIGE9bigiQXJyYXlV dGlscyIpO3ZhciBiPW4oIkFzeW5jUmVxdWVzdCIpO3ZhciBjPW4oIkFzeW5jUmVz cG9uc2UiKTt2YXIgZT1uKCJEYXRhU3RvcmUiKTt2YXIgZD1uKCJkb20iKTt2YXIg Zj1uKCJFbnYiKTt2YXIgaD1uKCJpbnB1dC1tZXRob2RzIik7dmFyIGk9bigicGFy ZW50Iik7dmFyIGo9bigidXJpIik7dmFyIG89bigidHJhY2tSZWZlcnJlciIpO3Zh ciBnPXtnZXRJbnB1dHM6ZnVuY3Rpb24ocCl7cD1wfHxkb2N1bWVudDtyZXR1cm4g W10uY29uY2F0KGEuY3JlYXRlRnJvbShkLnNjcnkocCwnaW5wdXQnKSksYS5jcmVh dGVGcm9tKGQuc2NyeShwLCdzZWxlY3QnKSksYS5jcmVhdGVGcm9tKGQuc2NyeShw LCd0ZXh0YXJlYScpKSxhLmNyZWF0ZUZyb20oZC5zY3J5KHAsJ2J1dHRvbicpKSk7 fSxnZXRTZWxlY3RWYWx1ZTpmdW5jdGlvbihwKXtyZXR1cm4gcC5vcHRpb25zW3Au c2VsZWN0ZWRJbmRleF0udmFsdWU7fSxzZXRTZWxlY3RWYWx1ZTpmdW5jdGlvbihx LHIpe2Zvcih2YXIgcD0wO3A8cS5vcHRpb25zLmxlbmd0aDsrK3ApaWYocS5vcHRp b25zW3BdLnZhbHVlPT1yKXtxLnNlbGVjdGVkSW5kZXg9cDticmVhazt9fSxnZXRS YWRpb1ZhbHVlOmZ1bmN0aW9uKHEpe2Zvcih2YXIgcD0wO3A8cS5sZW5ndGg7cCsr KWlmKHFbcF0uY2hlY2tlZClyZXR1cm4gcVtwXS52YWx1ZTtyZXR1cm4gbnVsbDt9 LGdldEVsZW1lbnRzOmZ1bmN0aW9uKHApe3JldHVybiBhLmNyZWF0ZUZyb20ocC50 YWdOYW1lPT0nRk9STSc/cC5lbGVtZW50czpnLmdldElucHV0cyhwKSk7fSxnZXRB dHRyaWJ1dGU6ZnVuY3Rpb24ocSxwKXtyZXR1cm4gKHEuZ2V0QXR0cmlidXRlTm9k ZShwKXx8e30pLnZhbHVlfHxudWxsO30sc2V0RGlzYWJsZWQ6ZnVuY3Rpb24ocSxw KXtnLmdldEVsZW1lbnRzKHEpLmZvckVhY2goZnVuY3Rpb24ocil7aWYoci5kaXNh YmxlZCE9dW5kZWZpbmVkKXt2YXIgcz1lLmdldChyLCdvcmlnRGlzYWJsZWRTdGF0 ZScpO2lmKHApe2lmKHM9PT11bmRlZmluZWQpZS5zZXQociwnb3JpZ0Rpc2FibGVk U3RhdGUnLHIuZGlzYWJsZWQpO3IuZGlzYWJsZWQ9cDt9ZWxzZXtpZihzIT09dHJ1 ZSlyLmRpc2FibGVkPWZhbHNlO2UucmVtb3ZlKHIsJ29yaWdEaXNhYmxlZFN0YXRl Jyk7fX19KTt9LGJvb3RzdHJhcDpmdW5jdGlvbihzLHQpe3ZhciB1PShnLmdldEF0 dHJpYnV0ZShzLCdtZXRob2QnKXx8J0dFVCcpLnRvVXBwZXJDYXNlKCk7dD1pLmJ5 VGFnKHQsJ2J1dHRvbicpfHx0O3ZhciB3PWkuYnlDbGFzcyh0LCdzdGF0X2VsZW0n KXx8cztpZihDU1MuaGFzQ2xhc3ModywnYXN5bmNfc2F2aW5nJykpcmV0dXJuO2lm KHQmJih0LmZvcm0hPT1zfHwodC5ub2RlTmFtZSE9J0lOUFVUJyYmdC5ub2RlTmFt ZSE9J0JVVFRPTicpfHx0LnR5cGUhPSdzdWJtaXQnKSl7dmFyIHg9ZC5zY3J5KHMs Jy5lbnRlcl9zdWJtaXRfdGFyZ2V0JylbMF07dmFyIHE9dDt4JiYodD14KTt9dmFy IHI9Zy5zZXJpYWxpemUocyx0KTtnLnNldERpc2FibGVkKHMsdHJ1ZSk7dmFyIHA9 Zy5nZXRBdHRyaWJ1dGUocywnYWpheGlmeScpfHxnLmdldEF0dHJpYnV0ZShzLCdh Y3Rpb24nKTtvKHMscCk7dmFyIHY9bmV3IGIocCk7di5zZXREYXRhKHIpLnNldE5l Y3Rhck1vZHVsZURhdGFTYWZlKHMpLnNldFJlYWRPbmx5KHU9PSdHRVQnKS5zZXRN ZXRob2QodSkuc2V0UmVsYXRpdmVUbyhzKS5zZXRTdGF0dXNFbGVtZW50KHcpLnNl dEluaXRpYWxIYW5kbGVyKGcuc2V0RGlzYWJsZWQuY3VycnkocyxmYWxzZSkpLnNl dEhhbmRsZXIoZnVuY3Rpb24oeSl7RXZlbnQuZmlyZShzLCdzdWNjZXNzJyx7cmVz cG9uc2U6eX0pO30pLnNldEVycm9ySGFuZGxlcihmdW5jdGlvbih5KXtpZihFdmVu dC5maXJlKHMsJ2Vycm9yJyx7cmVzcG9uc2U6eX0pIT09ZmFsc2UpYy5kZWZhdWx0 RXJyb3JIYW5kbGVyKHkpO30pLnNldEZpbmFsbHlIYW5kbGVyKGcuc2V0RGlzYWJs ZWQuY3VycnkocyxmYWxzZSkpLnNlbmQoKTt9LHNlcmlhbGl6ZTpmdW5jdGlvbihx LHIpe3ZhciBwPXt9O2cuZ2V0RWxlbWVudHMocSkuZm9yRWFjaChmdW5jdGlvbihz KXtpZihzLm5hbWUmJiFzLmRpc2FibGVkJiZzLnR5cGUhPSdzdWJtaXQnKWlmKCFz LnR5cGV8fCgocy50eXBlPT0ncmFkaW8nfHxzLnR5cGU9PSdjaGVja2JveCcpJiZz LmNoZWNrZWQpfHxzLnR5cGU9PSd0ZXh0J3x8cy50eXBlPT0ncGFzc3dvcmQnfHxz LnR5cGU9PSdoaWRkZW4nfHxzLnRhZ05hbWU9PSdURVhUQVJFQScpe3ZhciB3O2lm KHMubmFtZT09J3Bvc3RfZm9ybV9pZCcpdz1mLnBvc3RfZm9ybV9pZDtnLl9zZXJp YWxpemVIZWxwZXIocCxzLm5hbWUsd3x8aC5nZXRWYWx1ZShzKSk7fWVsc2UgaWYo cy50YWdOYW1lPT0nU0VMRUNUJylmb3IodmFyIHQ9MCx1PXMub3B0aW9ucy5sZW5n dGg7dDx1OysrdCl7dmFyIHY9cy5vcHRpb25zW3RdO2lmKHYuc2VsZWN0ZWQpZy5f c2VyaWFsaXplSGVscGVyKHAscy5uYW1lLHYudmFsdWUpO319KTtpZihyJiZyLm5h bWUmJidzdWJtaXQnPT1yLnR5cGUmJmQuY29udGFpbnMocSxyKSYmZC5pc05vZGVP ZlR5cGUocixbJ2lucHV0JywnYnV0dG9uJ10pKWcuX3NlcmlhbGl6ZUhlbHBlcihw LHIubmFtZSxyLnZhbHVlKTtyZXR1cm4gZy5fc2VyaWFsaXplRml4KHApO30sX3Nl cmlhbGl6ZUhlbHBlcjpmdW5jdGlvbihwLHMsdCl7dmFyIHI9LyhbXlxdXSspXFso W15cXV0qKVxdKC4qKS8uZXhlYyhzKTtpZihyKXtwW3JbMV1dPXBbclsxXV18fHt9 O2lmKHJbMl09PScnKXt2YXIgcT0wO3doaWxlKHBbclsxXV1bcV0hPXVuZGVmaW5l ZClxKys7fWVsc2UgcT1yWzJdO2lmKHJbM109PScnKXtwW3JbMV1dW3FdPXQ7fWVs c2UgZy5fc2VyaWFsaXplSGVscGVyKHBbclsxXV0scS5jb25jYXQoclszXSksdCk7 fWVsc2UgcFtzXT10O30sX3NlcmlhbGl6ZUZpeDpmdW5jdGlvbihwKXt2YXIgdD1b XTtmb3IodmFyIHEgaW4gcCl7aWYocFtxXSBpbnN0YW5jZW9mIE9iamVjdClwW3Fd PWcuX3NlcmlhbGl6ZUZpeChwW3FdKTt0LnB1c2gocSk7fWlmKHQubGVuZ3RoPjAp e3ZhciBzPTAscj10cnVlO3Quc29ydCgpLmVhY2goZnVuY3Rpb24odil7aWYodiE9 cysrKXI9ZmFsc2U7fSk7aWYocil7dmFyIHU9W107dC5lYWNoKGZ1bmN0aW9uKHYp e3Vbdl09cFt2XTt9KTtyZXR1cm4gdTt9fXJldHVybiBwO30scG9zdDpmdW5jdGlv bihzLHEscil7dmFyIHA9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZm9ybScpO3Au YWN0aW9uPXMudG9TdHJpbmcoKTtwLm1ldGhvZD0nUE9TVCc7cC5zdHlsZS5kaXNw bGF5PSdub25lJztpZihyKXAudGFyZ2V0PXI7aWYoZ2UoJ3Bvc3RfZm9ybV9pZCcp KXEucG9zdF9mb3JtX2lkPSQoJ3Bvc3RfZm9ybV9pZCcpLnZhbHVlO3EuZmJfZHRz Zz1mLmZiX2R0c2c7cS5wb3N0X2Zvcm1faWRfc291cmNlPSdkeW5hbWljX3Bvc3Qn O2cuY3JlYXRlSGlkZGVuSW5wdXRzKHEscCk7ZC5nZXRSb290RWxlbWVudCgpLmFw cGVuZENoaWxkKHApO3Auc3VibWl0KCk7cmV0dXJuIGZhbHNlO30sY3JlYXRlSGlk ZGVuSW5wdXRzOmZ1bmN0aW9uKHYscCxzLHUpe3M9c3x8e307dmFyIHI7dmFyIHc9 ai5pbXBsb2RlUXVlcnkodiwnJyxmYWxzZSk7dmFyIHg9dy5zcGxpdCgnJicpO2Zv cih2YXIgcT0wO3E8eC5sZW5ndGg7cSsrKWlmKHhbcV0pe3ZhciB5PXhbcV0uc3Bs aXQoJz0nKTt2YXIgdD15WzBdO3ZhciB6PXlbMV07aWYodD09PXVuZGVmaW5lZHx8 ej09PXVuZGVmaW5lZCljb250aW51ZTt6PWouZGVjb2RlQ29tcG9uZW50KHopO2lm KHNbdF0mJnUpe3NbdF0udmFsdWU9ejt9ZWxzZXtyPSROKCdpbnB1dCcse3R5cGU6 J2hpZGRlbicsbmFtZTp0LHZhbHVlOnp9KTtzW3RdPXI7cC5hcHBlbmRDaGlsZChy KTt9fXJldHVybiBzO30sZ2V0Rmlyc3RFbGVtZW50OmZ1bmN0aW9uKHEsdil7dj12 fHxbJ2lucHV0W3R5cGU9InRleHQiXScsJ3RleHRhcmVhJywnaW5wdXRbdHlwZT0i cGFzc3dvcmQiXScsJ2lucHV0W3R5cGU9ImJ1dHRvbiJdJywnaW5wdXRbdHlwZT0i c3VibWl0Il0nXTt2YXIgdT1bXTtmb3IodmFyIHM9MDtzPHYubGVuZ3RoO3MrKyl7 dT1kLnNjcnkocSx2W3NdKTtmb3IodmFyIHI9MDtyPHUubGVuZ3RoO3IrKyl7dmFy IHQ9dVtyXTt0cnl7aWYoZWxlbWVudFkodCk+MCYmZWxlbWVudFgodCk+MClyZXR1 cm4gdDt9Y2F0Y2gocCl7fX19cmV0dXJuIG51bGw7fSxmb2N1c0ZpcnN0OmZ1bmN0 aW9uKHEpe3ZhciBwPWcuZ2V0Rmlyc3RFbGVtZW50KHEpO2lmKHApe3AuZm9jdXMo KTtyZXR1cm4gdHJ1ZTt9cmV0dXJuIGZhbHNlO319O20uZXhwb3J0cz1nO30pOwpf X2UoImRvbS1mb3JtIixbIkZvcm0iXSxmdW5jdGlvbihhLGIpe2EuRm9ybT1iKCdG b3JtJyk7fSwzKTsKZnVuY3Rpb24gVVJMU2NyYXBlcihhKXt0aGlzLmlucHV0PWE7 dGhpcy5lbmFibGUoKTt9Q2xhc3MubWl4aW4oVVJMU2NyYXBlciwnQXJiaXRlcics e3Jlc2V0OmZ1bmN0aW9uKCl7dGhpcy5sYXN0TWF0Y2g9bnVsbDt9LGVuYWJsZTpm dW5jdGlvbigpe2lmKHRoaXMuZXZlbnRzKXJldHVybjt2YXIgYT1mdW5jdGlvbihi KXtzZXRUaW1lb3V0KHRoaXMuY2hlY2suYmluZCh0aGlzLGIpLDMwKTt9O3RoaXMu ZXZlbnRzPUV2ZW50Lmxpc3Rlbih0aGlzLmlucHV0LHtwYXN0ZTphLmJpbmQodGhp cyxmYWxzZSksa2V5ZG93bjphLmJpbmQodGhpcyx0cnVlKX0pO30sZGlzYWJsZTpm dW5jdGlvbigpe2lmKCF0aGlzLmV2ZW50cylyZXR1cm47Zm9yKHZhciBldmVudCBp biB0aGlzLmV2ZW50cyl0aGlzLmV2ZW50c1tldmVudF0ucmVtb3ZlKCk7dGhpcy5l dmVudHM9bnVsbDt9LGNoZWNrOmZ1bmN0aW9uKGIpe3ZhciBjPXRoaXMuaW5wdXQu dmFsdWU7aWYoYiYmVVJMU2NyYXBlci50cmlnZ2VyKGMpKXJldHVybjt2YXIgYT1V UkxTY3JhcGVyLm1hdGNoKGMpO2lmKGEmJmEhPXRoaXMubGFzdE1hdGNoKXt0aGlz Lmxhc3RNYXRjaD1hO3RoaXMuaW5mb3JtKCdtYXRjaCcse3VybDphfSk7fX19KTso ZnVuY3Rpb24oKXt2YXIgYT0nISIjJSZcJygpKiwtLi86Ozw+P0BbXFxdXl9ge3x9 JyxyPSdcdTIwMDAtXHUyMDZGXHUwMGFiXHUwMGJiJzt2YXIgbz0nKD86KD86aHR8 Zil0cHM/KTovLycsZz0nKD86KD86XFxkezEsM31bLl0pezN9XFxkezEsM30pJyxz PScoPzpcXGIpd3d3XFxkezAsM31bLl0nLGo9J1teXFxzJythK3IrJ10nLGg9Jyg/ Oig/OlsuOlxcLV8lQF18JytqKycpKicraisnKScscD0nKD86Wy5dW2Etel17Miw0 fSknLG49Jyg/OjpcXGQrKXswLDF9JyxkPScoPz1bXC8/I10pJzt2YXIgZj0nKD86 JysnKD86JytvK2grbisnKXwnKycoPzonK2crbisnKXwnKycoPzonK3MraCtwK24r Jyl8JysnKD86JytoK3ArbitkKycpJysnKSc7dmFyIGU9J1tcLyM/XScsYz0nXFwo W15cXHMoKTw+XStcXCknLGw9J1teXFxzKCk8Pl0rJyxrPSdbXlxccycrYStyKydd Jzt2YXIgbT0nKD86JysnKD86JytlKycpJysnKD86JysnKD86JytjKyd8JytsKycp KicrJyg/OicrYysnfCcraysnKScrJykqJysnKSonO3ZhciBpPW5ldyBSZWdFeHAo JygnKycoPzonK2YrJyknKycoPzonK20rJyknKycpJywnaW0nKTt2YXIgYj1uZXcg UmVnRXhwKCcoJysnKD86JytvK2grbisnKXwnKycoPzonK3MraCtwK24rJyknKycp Jyk7dmFyIHE9L1tccyciO10vO1VSTFNjcmFwZXIubWF0Y2g9ZnVuY3Rpb24odSl7 dmFyIHQ9KGkuZXhlYyh1KXx8W10pWzFdfHxudWxsO2lmKHQmJnQuaW5kZXhPZign QCcpIT0tMSl7cmV0dXJuIChiLmV4ZWModCkpP3Q6bnVsbDt9ZWxzZSByZXR1cm4g dDt9O1VSTFNjcmFwZXIudHJpZ2dlcj1mdW5jdGlvbih0KXtyZXR1cm4gIXEudGVz dCh0LmNoYXJBdCh0Lmxlbmd0aC0xKSk7fTt9KSgpOwooZnVuY3Rpb24oKXt2YXIg Yj0xLGE9Mjt2YXIgZj17fTt2YXIgZT1mdW5jdGlvbigpe3ZhciBoPURPTS5zY3J5 KHRoaXMucm9vdCwnc3Bhbi5saW5rQXR0YWNobWVudCcpWzBdO2lmKCFoJiZ0aGlz LmlzTWV0YUNvbXBvc2VyKWg9RE9NLnNjcnkodGhpcy5yb290LCdzcGFuLmF0dGFj aG1lbnRBY2NlcHRzTGluaycpWzBdO2lmKCFoKXJldHVybjt2YXIgZz1QYXJlbnQu YnlUYWcoaCwnZm9ybScpO3RoaXMuc2NyYXBlcj1uZXcgVVJMU2NyYXBlcih0aGlz LmlucHV0KTt0aGlzLnNjcmFwZXIuc3Vic2NyaWJlKCdtYXRjaCcsZnVuY3Rpb24o aSxqKXtpZih0aGlzLmlzTWV0YUNvbXBvc2VyKXt2YXIgaz10aGlzLmZvcm0ueGhw Y190YXJnZXRpZDt2YXIgbD1uZXcgVVJJKCcvYWpheC9tZXRhY29tcG9zZXIvYXR0 YWNobWVudC9saW5rL3NjcmFwZXIucGhwJyk7bC5hZGRRdWVyeURhdGEoe3NjcmFw ZV91cmw6ZW5jb2RlVVJJQ29tcG9uZW50KGoudXJsKSx0YXJnZXRpZDprLnZhbHVl fSk7Zy5hY3Rpb249bC50b1N0cmluZygpO31lbHNle0NTUy5zaG93KGgpO2cuYWN0 aW9uPScvYWpheC9jb21wb3Nlci9hdHRhY2htZW50L2xpbmsvc2NyYXBlci5waHA/ c2NyYXBlX3VybD0nK2VuY29kZVVSSUNvbXBvbmVudChqLnVybCk7fWcueGhwYy52 YWx1ZT1oLmlkO2cueGhwYy5kaXNhYmxlZD1mYWxzZTtnLnhocGMuY2xpY2soKTt9 LmJpbmQodGhpcykpO3RoaXMuaXNNZXRhQ29tcG9zZXImJnRoaXMuc2NyYXBlci5j aGVjaygpO307dmFyIGQ9ZnVuY3Rpb24oKXt2YXIgaD10aGlzLmZvcm0ueGhwY190 YXJnZXRpZDt2YXIgaT1oLnZhbHVlO3ZhciBnPUFyYml0ZXIuc3Vic2NyaWJlKCdD b21wb3NlckF1ZGllbmNlU2VsZWN0b3IvZ3JvdXAnLGZ1bmN0aW9uKGssbCl7aC52 YWx1ZT1sLmdyb3VwO30pO3ZhciBqPUFyYml0ZXIuc3Vic2NyaWJlKCdDb21wb3Nl ckF1ZGllbmNlU2VsZWN0b3Ivbm9uZ3JvdXAnLGZ1bmN0aW9uKCl7aC52YWx1ZT1p O30pO29udW5sb2FkUmVnaXN0ZXIoQXJiaXRlci51bnN1YnNjcmliZS5jdXJyeShn KSk7b251bmxvYWRSZWdpc3RlcihBcmJpdGVyLnVuc3Vic2NyaWJlLmN1cnJ5KGop KTt9O3ZhciBjPWZ1bmN0aW9uKGcpe2lmKHRoaXMuaW5mb3JtKCdzdWJtaXQnKT09 PWZhbHNlKXtnLmtpbGwoKTtyZXR1cm4gZmFsc2U7fWlmKHRoaXMuc3VibWl0SGFu ZGxlcilyZXR1cm4gKG5ldyBGdW5jdGlvbih0aGlzLnN1Ym1pdEhhbmRsZXIpKS5h cHBseSh0aGlzLmZvcm0pO307d2luZG93LkNvbXBvc2VyPWZ1bmN0aW9uKGosaSxo LGcpe2Zbai5pZF09dGhpczt0aGlzLnJvb3Q9ajt0aGlzLnJlc2V0Q2ZnPWk7dGhp cy5kYXRhU291cmNlPWc7dGhpcy5sYXp5RW5kcG9pbnQ9dGhpcy5yZXNldENmZyYm dGhpcy5yZXNldENmZy5sYXp5RW5kcG9pbnQ7Qm9vdGxvYWRlci5sb2FkQ29tcG9u ZW50cygnZG9tJyxmdW5jdGlvbigpe3RoaXMuZm9jdXM9RE9NLmZpbmQoaiwnZGl2 LmZvY3VzX3RhcmdldCcpO3RoaXMuZm9ybT1ET00uZmluZChqLCdmb3JtLmF0dGFj aG1lbnRGb3JtJyk7dGhpcy5jb250ZW50PURPTS5maW5kKGosJ2Rpdi5hdHRhY2ht ZW50Q29udGVudCcpO3RoaXMuaXNNZXRhQ29tcG9zZXI9aDtpZih0aGlzLmlzTWV0 YUNvbXBvc2VyKXt0aGlzLm1lc3NhZ2VCb3g9RE9NLmZpbmQoaiwnZGl2LnVpTWV0 YUNvbXBvc2VyTWVzc2FnZUJveCcpO3RoaXMubWV0YUFyZWE9RE9NLmZpbmQoaiwn ZGl2LmF0dGFjaG1lbnRNZXRhQXJlYScpO3RoaXMuYm90dG9tQXJlYT1ET00uZmlu ZChqLCdkaXYuYXR0YWNobWVudEJvdHRvbUFyZWEnKTt0aGlzLmJhckFyZWE9RE9N LmZpbmQoaiwnZGl2LmF0dGFjaG1lbnRCYXJBcmVhJyk7dGhpcy5ibHVyYj1ET00u ZmluZChqLCdkaXYudWlNZXRhQ29tcG9zZXJNZXNzYWdlQm94IGRpdi50ZXh0Qmx1 cmInKTt0aGlzLmlucHV0PURPTS5maW5kKGosJ2Rpdi51aU1ldGFDb21wb3Nlck1l c3NhZ2VCb3ggdGV4dGFyZWEuaW5wdXQnKTt0aGlzLmJ1dHRvbj1ET00uZmluZChq LCdkaXYudWlNZXRhQ29tcG9zZXJNZXNzYWdlQm94IGxhYmVsLnN1Ym1pdEJ0bicp O3RoaXMucHJpdmFjeT1ET00uZmluZChqLCdkaXYudWlNZXRhQ29tcG9zZXJNZXNz YWdlQm94IGxpLnByaXZhY3lXaWRnZXQnKTt9ZWxzZXt0aGlzLmJsdXJiPURPTS5m aW5kKGosJ2Rpdi51aUNvbXBvc2VyTWVzc2FnZUJveCBkaXYudGV4dEJsdXJiJyk7 dGhpcy5pbnB1dD1ET00uZmluZChqLCdkaXYudWlDb21wb3Nlck1lc3NhZ2VCb3gg dGV4dGFyZWEuaW5wdXQnKTt0aGlzLmJ1dHRvbj1ET00uZmluZChqLCdkaXYudWlD b21wb3Nlck1lc3NhZ2VCb3ggbGFiZWwuc3VibWl0QnRuJyk7dGhpcy5wcml2YWN5 PURPTS5maW5kKGosJ2Rpdi51aUNvbXBvc2VyTWVzc2FnZUJveCBsaS5wcml2YWN5 V2lkZ2V0Jyk7fUV2ZW50Lmxpc3Rlbih0aGlzLmZvcm0sJ3N1Ym1pdCcsYy5iaW5k KHRoaXMpKTtpZih0aGlzLmlzTWV0YUNvbXBvc2VyKXtFdmVudC5saXN0ZW4odGhp cy5pbnB1dCwnZm9jdXMnLHRoaXMub25Gb2N1cy5iaW5kKHRoaXMpKTtpZihQYXJl bnQuYnlDbGFzcyh0aGlzLmlucHV0LCdjaGlsZF93YXNfZm9jdXNlZCcpKXRoaXMu b25Gb2N1cy5iaW5kKHRoaXMpLmRlZmVyKCk7fUFyYml0ZXIuaW5mb3JtKCd4aHBj L2NvbnN0cnVjdC8nK2ouaWQsdGhpcyxBcmJpdGVyLkJFSEFWSU9SX1NUQVRFKTt9 LmJpbmQodGhpcykpO307Q2xhc3MubWl4aW4oQ29tcG9zZXIsJ0FyYml0ZXInLHtp bml0OmZ1bmN0aW9uKGcpe3RoaXMubWVudGlvbnNJbnB1dD1nO2lmKHRoaXMubWVu dGlvbnNJbnB1dCl7dGhpcy5tZW50aW9uc0lucHV0LnN1YnNjcmliZSgnaW5pdCcs ZnVuY3Rpb24oKXt2YXIgaD10aGlzLm1lbnRpb25zSW5wdXQuZ2V0VHlwZWFoZWFk KCkuZ2V0VmlldygpO2guc3Vic2NyaWJlKFsncmVzZXQnLCdyZW5kZXInXSxmdW5j dGlvbihpKXtDU1MuY29uZGl0aW9uQ2xhc3ModGhpcy5yb290LCd1aUNvbXBvc2Vy TWVudGlvbicsKGk9PSdyZW5kZXInKSk7fS5iaW5kKHRoaXMpKTt9LmJpbmQodGhp cykpO3RoaXMubWVudGlvbnNJbnB1dC5zdWJzY3JpYmUoJ3VwZGF0ZScsZnVuY3Rp b24oaSxoKXtBcmJpdGVyLmluZm9ybSgnQ29tcG9zZXIvbWVudGlvbnMnLGtleXMo aC5tZW50aW9uZWQpKTt9KTt9ZS5jYWxsKHRoaXMpO2lmKHRoaXMuaXNNZXRhQ29t cG9zZXIpZC5jYWxsKHRoaXMpO3RoaXMuaW5mb3JtKCdpbml0JyxudWxsLEFyYml0 ZXIuQkVIQVZJT1JfUEVSU0lTVEVOVCk7b25iZWZvcmV1bmxvYWRSZWdpc3Rlcih0 aGlzLl9oYW5kbGVVbnNhdmVkQ2hhbmdlcy5iaW5kKHRoaXMpKTt9LHNldEJsdXJi OmZ1bmN0aW9uKGcpe0RPTS5zZXRDb250ZW50KHRoaXMuYmx1cmIsZyk7fSxzZXRF bmFibGVkOmZ1bmN0aW9uKGcpe0J1dHRvbi5zZXRFbmFibGVkKHRoaXMuYnV0dG9u LGcpO30sc2V0TG9hZGluZzpmdW5jdGlvbihnKXtDU1MuY29uZGl0aW9uQ2xhc3Mo dGhpcy5yb290LCdhc3luY19zYXZpbmcnLCEhZyk7fSxzZXRDb250ZW50VmlzaWJs ZTpmdW5jdGlvbihnKXtDU1MuY29uZGl0aW9uQ2xhc3ModGhpcy5yb290LCd1aUNv bXBvc2VySGlkZUNvbnRlbnQnLCFnKTt9LHNldE1lc3NhZ2VCb3hWaXNpYmxlOmZ1 bmN0aW9uKGcpe0NTUy5jb25kaXRpb25DbGFzcyh0aGlzLnJvb3QsJ3VpQ29tcG9z ZXJIaWRlTWVzc2FnZUJveCcsIWcpO30sc2V0SW5wdXRWaXNpYmxlOmZ1bmN0aW9u KGcpe0NTUy5jb25kaXRpb25DbGFzcyh0aGlzLnJvb3QsJ3VpQ29tcG9zZXJIaWRl SW5wdXQnLCFnKTt9LHNldFRvcGljVGFnZ2VyVmlzaWJsZTpmdW5jdGlvbihnKXtD U1MuY29uZGl0aW9uQ2xhc3ModGhpcy5yb290LCd1aVRhZ0NvbXBvc2VySGlkZGVu JywhZyk7fSxtdXRhdGU6ZnVuY3Rpb24oaSl7dmFyIGg9Z2UoaS54aHBjKTtpZiho KXt2YXIgaj1ET00uc2NyeSh0aGlzLnJvb3QsJy51aUNvbXBvc2VyQXR0YWNobWVu dFNlbGVjdGVkJylbMF07aWYoaS5jb25maXJtQXVnbWVudGF0aW9uJiZqIT09aCly ZXR1cm47aiYmQ1NTLnJlbW92ZUNsYXNzKGosJ3VpQ29tcG9zZXJBdHRhY2htZW50 U2VsZWN0ZWQnKTtDU1MuYWRkQ2xhc3MoaCwndWlDb21wb3NlckF0dGFjaG1lbnRT ZWxlY3RlZCcpO2lmKCFpLmRpc2FibGVDYWNoZSlFdmVudC5saXN0ZW4oaCwnY2xp Y2snLGZ1bmN0aW9uKGspeyRFKGspLnN0b3AoKTtpLmRpc2FibGVDYWNoZT10cnVl O3RoaXMubXV0YXRlKGkpO30uYmluZCh0aGlzKSk7fWlmKCFpLmtlZXBDb250ZW50 QXJlYXMpe3RoaXMuc2V0Q29udGVudFZpc2libGUoZmFsc2UpO0RPTS5lbXB0eSh0 aGlzLmNvbnRlbnQpO2lmKHRoaXMuaXNNZXRhQ29tcG9zZXIpe3RoaXMubWVudGlv bnNJbnB1dCYmdGhpcy5tZW50aW9uc0lucHV0LnNldEF1eENvbnRlbnQobnVsbCk7 RE9NLmVtcHR5KHRoaXMubWV0YUFyZWEpO0RPTS5lbXB0eSh0aGlzLmJvdHRvbUFy ZWEpO0RPTS5lbXB0eSh0aGlzLmJhckFyZWEpO319aWYoaS5jb250ZW50KXtET00u c2V0Q29udGVudCh0aGlzLmNvbnRlbnQsSFRNTChpLmNvbnRlbnQpKTt0aGlzLnNl dENvbnRlbnRWaXNpYmxlKHRydWUpO31pZih0aGlzLmlzTWV0YUNvbXBvc2VyKXtp Lm1ldGFDb250ZW50JiZET00uc2V0Q29udGVudCh0aGlzLm1ldGFBcmVhLEhUTUwo aS5tZXRhQ29udGVudCkpO2kuYm90dG9tQ29udGVudCYmRE9NLnNldENvbnRlbnQo dGhpcy5ib3R0b21BcmVhLEhUTUwoaS5ib3R0b21Db250ZW50KSk7aS5iYXJDb250 ZW50JiZET00uc2V0Q29udGVudCh0aGlzLmJhckFyZWEsSFRNTChpLmJhckNvbnRl bnQpKTt9dGhpcy5zZXRNZXNzYWdlQm94VmlzaWJsZSghaS5tZXNzYWdlQm94SGlk ZGVuKTtDU1MuY29uZGl0aW9uQ2xhc3ModGhpcy5yb290LCd1aUNvbXBvc2VyV2hp dGVNZXNzYWdlQm94JywhaS5tZXNzYWdlQm94SGlkZGVuJiYhaS5pbnB1dEhpZGRl biYmIWkuY29udGVudCk7dGhpcy5zZXRJbnB1dFZpc2libGUoIWkuaW5wdXRIaWRk ZW4pO0NTUy5jb25kaXRpb25TaG93KHRoaXMucHJpdmFjeSwhaS5wcml2YWN5V2lk Z2V0SGlkZGVuKTtJbnB1dC5zZXRQbGFjZWhvbGRlcih0aGlzLmlucHV0LGkucGxh Y2Vob2xkZXIpO0J1dHRvbi5zZXRMYWJlbCh0aGlzLmJ1dHRvbixpLmJ1dHRvbkxh YmVsKTt0aGlzLnNldEJsdXJiKEhUTUwoaS5ibHVyYikpO2lmKGkuYXV0b3NjcmFw ZSl7dGhpcy5zY3JhcGVyJiZ0aGlzLnNjcmFwZXIuZW5hYmxlKCk7fWVsc2UgdGhp cy5zY3JhcGVyJiZ0aGlzLnNjcmFwZXIuZGlzYWJsZSgpO3RoaXMuc2V0RW5hYmxl ZCghaS5kaXNhYmxlZCk7dGhpcy5zZXRUb3BpY1RhZ2dlclZpc2libGUoIWkuaGlk ZVRvcGljVGFnZ2VyKTt0aGlzLmZvcm0uc2V0QXR0cmlidXRlKCdhY3Rpb24nLGku ZW5kcG9pbnQpO2lmKGkuZm9ybVR5cGU9PWIpe3RoaXMuZm9ybS5zZXRBdHRyaWJ1 dGUoJ3JlbCcsJ2FzeW5jJyk7fWVsc2UgdGhpcy5mb3JtLnJlbW92ZUF0dHJpYnV0 ZSgncmVsJyk7aWYoaS5mb3JtVHlwZT09YSl7dGhpcy5mb3JtLnRhcmdldD1pLmlm cmFtZU5hbWU7dGhpcy5mb3JtLmVuY3R5cGU9dGhpcy5mb3JtLmVuY29kaW5nPSdt dWx0aXBhcnQvZm9ybS1kYXRhJzt9ZWxzZXt0aGlzLmZvcm0ucmVtb3ZlQXR0cmli dXRlKCd0YXJnZXQnKTt0aGlzLmZvcm0ucmVtb3ZlQXR0cmlidXRlKCdlbmN0eXBl Jyk7dGhpcy5mb3JtLnJlbW92ZUF0dHJpYnV0ZSgnZW5jb2RpbmcnKTt9dGhpcy5z dWJtaXRIYW5kbGVyPWkuc3VibWl0SGFuZGxlcjt0aGlzLmxhenlFbmRwb2ludD1p LmxhenlFbmRwb2ludDtpLmF0dGFjaG1lbnRKUyYmKG5ldyBGdW5jdGlvbihpLmF0 dGFjaG1lbnRKUykpLmFwcGx5KHRoaXMpO0NTUy5hZGRDbGFzcyh0aGlzLnJvb3Qs J3VpQ29tcG9zZXJJbnRlcmFjdGVkJyk7Q1NTLmFkZENsYXNzKHRoaXMucm9vdCwn dWlDb21wb3Nlck9wZW4nKTtpZihpLm1lc3NhZ2VCb3hGb2N1c2VkKXt2YXIgZz1k b2N1bWVudC5hY3RpdmVFbGVtZW50O2lmKGc9PT1kb2N1bWVudC5ib2R5fHxQYXJl bnQuYnlDbGFzcyhnLCdhdHRhY2htZW50TGluaycpKXRoaXMuZm9jdXNJbnB1dC5i aW5kKHRoaXMpLmRlZmVyKCk7fUFyYml0ZXIuaW5mb3JtKCdjb21wb3Nlci9tdXRh dGUnLHRoaXMpO30sc3Vic2NyaWJlVG9NdXRhdGU6ZnVuY3Rpb24oZyl7cmV0dXJu IEFyYml0ZXIuc3Vic2NyaWJlKCdjb21wb3Nlci9tdXRhdGUnLGZ1bmN0aW9uKGgs aSl7aWYoaT09PXRoaXMpZygpO30uYmluZCh0aGlzKSk7fSxyZXNldDpmdW5jdGlv bihoLGcpe2lmKCFoKXtJbnB1dC5yZXNldCh0aGlzLmlucHV0KTt0aGlzLm1lbnRp b25zSW5wdXQmJnRoaXMubWVudGlvbnNJbnB1dC5yZXNldCgpO31pZih0aGlzLmlz TWV0YUNvbXBvc2VyKXtET00uZW1wdHkodGhpcy5tZXRhQXJlYSk7RE9NLmVtcHR5 KHRoaXMuYm90dG9tQXJlYSk7RE9NLmVtcHR5KHRoaXMuYmFyQXJlYSk7fWlmKHRo aXMucmVzZXRDZmcpe3RoaXMubXV0YXRlKHRoaXMucmVzZXRDZmcpO31lbHNle3Zh ciBpPURPTS5zY3J5KHRoaXMucm9vdCwnLnVpQ29tcG9zZXJBdHRhY2htZW50U2Vs ZWN0ZWQnKVswXTtpZihpKUNTUy5yZW1vdmVDbGFzcyhpLCd1aUNvbXBvc2VyQXR0 YWNobWVudFNlbGVjdGVkJyk7fUNTUy5yZW1vdmVDbGFzcyh0aGlzLnJvb3QsJ3Vp Q29tcG9zZXJJbnRlcmFjdGVkJyk7Q1NTLnNldENsYXNzKHRoaXMuZm9jdXMsJ2Zv Y3VzX3RhcmdldCcpO3RoaXMuc2V0TG9hZGluZyhmYWxzZSk7aWYoZyl7dmFyIGo9 RE9NLnNjcnkodGhpcy5yb290LCcud2lkZ2V0JylbMF07aiYmRE9NLnJlcGxhY2Uo aixnKTt9QXJiaXRlci5pbmZvcm0oJ2NvbXBvc2VyL3Jlc2V0Jyk7fSxvbkZvY3Vz OmZ1bmN0aW9uKCl7aWYodGhpcy5sYXp5RW5kcG9pbnQpe3ZhciBnPURPTS5maW5k KHRoaXMucm9vdCwnZm9ybS5hdHRhY2htZW50U2VsZWN0Rm9ybScpO3ZhciBpPW5l dyBVUkkodGhpcy5sYXp5RW5kcG9pbnQpO2kuc2V0UXVlcnlEYXRhKHtpc0F1Z21l bnRhdGlvbjp0cnVlfSk7Zy5hY3Rpb249aS50b1N0cmluZygpO3ZhciBoPURPTS5z Y3J5KHRoaXMucm9vdCwnLnVpQ29tcG9zZXJBdHRhY2htZW50U2VsZWN0ZWQnKVsw XTtnLnhocGMudmFsdWU9aCYmaC5pZDtnLnhocGMuY2xpY2soKTtDU1MucmVtb3Zl Q2xhc3MuY3VycnkodGhpcy5yb290LCdhc3luY19zYXZpbmcnKS5kZWZlcigpO310 aGlzLmluZm9ybSgnZm9jdXMnKTt9LGZvY3VzSW5wdXQ6ZnVuY3Rpb24oKXtJbnB1 dC5mb2N1cyh0aGlzLmlucHV0KTt9LGdldElucHV0OmZ1bmN0aW9uKCl7cmV0dXJu IHRoaXMuaW5wdXQ7fSx1cGRhdGVEYXRhU291cmNlVG9rZW46ZnVuY3Rpb24oZyl7 aWYodGhpcy5kYXRhU291cmNlKXRoaXMuZGF0YVNvdXJjZS51cGRhdGVUb2tlbihn KTt9LF9oYW5kbGVVbnNhdmVkQ2hhbmdlczpmdW5jdGlvbigpe3ZhciBnPVBhZ2VU cmFuc2l0aW9ucy5nZXROZXh0VVJJKCk7aWYoZy5nZXRRdWVyeURhdGEoKS5oYXNP d25Qcm9wZXJ0eSgndGhlYXRlcicpKXJldHVybjtpZih0aGlzLmlucHV0Lm9mZnNl dFBhcmVudCE9PW51bGwmJiFJbnB1dC5pc0VtcHR5KHRoaXMuaW5wdXQpJiYhKHdp bmRvdy5EaWFsb2cmJkRpYWxvZy5nZXRDdXJyZW50KCkpKXJldHVybiAiWW91IGhh dmVuJ3QgZmluaXNoZWQgeW91ciBwb3N0IHlldC4gRG8geW91IHdhbnQgdG8gbGVh dmUgd2l0aG91dCBmaW5pc2hpbmc/Ijt9fSk7Y29weV9wcm9wZXJ0aWVzKENvbXBv c2VyLHtwdWJsaXNoOmZ1bmN0aW9uKGgsZyl7Zz1nfHx7fTtnLmNvbXBvc2VyPUNv bXBvc2VyLmdldEluc3RhbmNlKCQoaCkpO2cuY29tcG9zZXIucmVzZXQoZmFsc2Us Zy5hdWRpZW5jZU1hcmt1cCk7Zy5hdWRpZW5jZU1hcmt1cD1udWxsO2lmKGcuc3Ry ZWFtTWFya3VwKWcuc3RyZWFtU3Rvcnk9SFRNTChnLnN0cmVhbU1hcmt1cCkuZ2V0 Um9vdE5vZGUoKTtBcmJpdGVyLmluZm9ybSgnY29tcG9zZXIvcHVibGlzaCcsZyk7 fSxnZXRJbnN0YW5jZTpmdW5jdGlvbihnKXt2YXIgaD1QYXJlbnQuYnlDbGFzcygk KGcpLCd1aUNvbXBvc2VyJyk7cmV0dXJuIGg/ZltoLmlkXTpudWxsO319KTt9KSgp OwpmdW5jdGlvbiBNZXRhQ29tcG9zZXJNZXNzYWdlQm94KCl7fU1ldGFDb21wb3Nl ck1lc3NhZ2VCb3gucHJvdG90eXBlPXtpbml0OmZ1bmN0aW9uKGIsYSl7dGhpcy5p bnB1dENvbnRhaW5lcj1ET00uc2NyeShiLCdkaXYuaW5wdXRDb250YWluZXInKVsw XTt0aGlzLnRleHRJbnB1dD1ET00uc2NyeShiLCd0ZXh0YXJlYS5tZW50aW9uc1Rl eHRhcmVhJylbMF07dGhpcy5tZXRhQXJlYT1ET00uc2NyeShiLCdkaXYuYXR0YWNo bWVudE1ldGFBcmVhJylbMF07dGhpcy5ib3R0b21BcmVhPURPTS5zY3J5KGIsJ2Rp di5hdHRhY2htZW50Qm90dG9tQXJlYScpWzBdO3RoaXMuYmFyQXJlYT1ET00uc2Ny eShiLCdkaXYuYXR0YWNobWVudEJhckFyZWEnKVswXTtFdmVudC5saXN0ZW4odGhp cy5pbnB1dENvbnRhaW5lciwnY2xpY2snLGZ1bmN0aW9uKGMpe3ZhciBkPWMuZ2V0 VGFyZ2V0KCk7aWYoIURPTS5jb250YWlucyh0aGlzLm1ldGFBcmVhLGQpJiZkIT09 dGhpcy50ZXh0SW5wdXQpdGhpcy50ZXh0SW5wdXQuZm9jdXMoKTt9LmJpbmQodGhp cykpO319OwpfX2UoIlhEIixbImZ1bmN0aW9uLWV4dGVuc2lvbnMiLCJjb3B5UHJv cGVydGllcyIsInVhIiwidXJpIiwiYXJiaXRlciJdLGZ1bmN0aW9uKGcsaSxoLGYp e2koImZ1bmN0aW9uLWV4dGVuc2lvbnMiKTt2YXIgZT1pKCJjb3B5UHJvcGVydGll cyIpO3ZhciBqPWkoInVhIik7dmFyIGI9aSgidXJpIik7dmFyIGE9aSgiYXJiaXRl ciIpO3ZhciBkPXtfY2FsbGJhY2tzOltdLF9vcHRzOnthdXRvUmVzaXplOmZhbHNl LGFsbG93U2hyaW5rOnRydWUsY2hhbm5lbFVybDpudWxsLGhpZGVPdmVyZmxvdzpm YWxzZSxuZXdSZXNpemVNZXRob2Q6ZmFsc2UscmVzaXplVGltZW91dDoxMDAscmVz aXplV2lkdGg6ZmFsc2UsZXhwZWN0UmVzaXplQWNrOmZhbHNlLHJlc2l6ZUFja1Rp bWVvdXQ6NjAwMH0sX2xhc3RSZXNpemVBY2tJZDowLF9yZXNpemVDb3VudDowLF9y ZXNpemVUaW1lc3RhbXA6MCxpbml0OmZ1bmN0aW9uKGspe3RoaXMuX29wdHM9ZShl KHt9LHRoaXMuX29wdHMpLGspO2lmKHRoaXMuX29wdHMuYXV0b1Jlc2l6ZSl0aGlz Ll9zdGFydFJlc2l6ZU1vbml0b3IoKTthLnN1YnNjcmliZSgnQ29ubmVjdC5VbnNh ZmUucmVzaXplLmFjaycsZnVuY3Rpb24obSxsKXtpZighbC5pZClsLmlkPXRoaXMu X3Jlc2l6ZUNvdW50O2lmKGwuaWQ+dGhpcy5fbGFzdFJlc2l6ZUFja0lkKXRoaXMu X2xhc3RSZXNpemVBY2tJZD1sLmlkO30uYmluZCh0aGlzKSk7fSxzZW5kOmZ1bmN0 aW9uKGwsayl7az1rfHx0aGlzLl9vcHRzLmNoYW5uZWxVcmw7aWYoIWspcmV0dXJu O2lmKGsuc3Vic3RyKDAsNCkhPSdodHRwJylyZXR1cm47dmFyIHM9aysnJicrYi5p bXBsb2RlUXVlcnkobCksbz0nZicrKE1hdGgucmFuZG9tKCkqKDE8PDMwKSkudG9T dHJpbmcoMTYpLnJlcGxhY2UoJy4nLCcnKSxtPWRvY3VtZW50LmJvZHkuYXBwZW5k Q2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpLHI9ZmFsc2U7bS5z dHlsZS5wb3NpdGlvbj0nYWJzb2x1dGUnO20uc3R5bGUudG9wPSctMTAwMDBweCc7 bS5zdHlsZS53aWR0aD0nMXB4JzttLnN0eWxlLmhlaWdodD0nMXB4JztkLl9jYWxs YmFja3Nbb109ZnVuY3Rpb24oKXtpZihyKXsoZnVuY3Rpb24oKXttLnBhcmVudE5v ZGUucmVtb3ZlQ2hpbGQobSk7fSkuZGVmZXIoMzAwMCk7ZGVsZXRlIGQuX2NhbGxi YWNrc1tvXTt9fTtpZihqLmllKCkpe3ZhciBwLG49ZG9jdW1lbnQuY3JlYXRlRWxl bWVudCgnZGl2Jyk7cD0nPGlmcmFtZSBvbmxvYWQ9IlhELl9jYWxsYmFja3MuJytv KycoKSI+PC9pZnJhbWU+JztuLmlubmVySFRNTD1wO24uZmlyc3RDaGlsZC5zZXRB dHRyaWJ1dGUoJ3NyYycscyk7cD1uLmlubmVySFRNTDttLmlubmVySFRNTD0nPGlm cmFtZSBzcmM9ImphdmFzY3JpcHQ6ZmFsc2UiPjwvaWZyYW1lPic7cj10cnVlOyhm dW5jdGlvbigpe20uaW5uZXJIVE1MPXA7fSkuZGVmZXIoKTt9ZWxzZXt2YXIgcT1k b2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtxLm9ubG9hZD1kLl9jYWxs YmFja3Nbb107bS5hcHBlbmRDaGlsZChxKTtyPXRydWU7cS5zcmM9czt9fSxfY29t cHV0ZVNpemU6ZnVuY3Rpb24oKXtyZXR1cm4ge3dpZHRoOnRoaXMuX29wdHMucmVz aXplV2lkdGg/dGhpcy5fY2FsY1dpZHRoKGQuZm9yY2VkX21pbl93aWR0aCk6MCxo ZWlnaHQ6dGhpcy5fY2FsY0hlaWdodCh0aGlzLl9vcHRzLm5ld1Jlc2l6ZU1ldGhv ZCl9O30sX2NhbGNIZWlnaHQ6ZnVuY3Rpb24obil7dmFyIGs9ZG9jdW1lbnQuYm9k eSxsPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxtPTA7aWYobil7bT1NYXRoLm1h eChNYXRoLm1heChrLm9mZnNldEhlaWdodCxrLnNjcm9sbEhlaWdodCkray5vZmZz ZXRUb3AsTWF0aC5tYXgobC5vZmZzZXRIZWlnaHQsbC5zY3JvbGxIZWlnaHQpK2wu b2Zmc2V0VG9wKTt9ZWxzZXtpZihqLmllKCkpe209TWF0aC5tYXgoay5vZmZzZXRI ZWlnaHQsay5zY3JvbGxIZWlnaHQpK2sub2Zmc2V0VG9wO31lbHNlIG09bC5vZmZz ZXRIZWlnaHQrbC5vZmZzZXRUb3A7aWYod2luZG93LkRpYWxvZyltPU1hdGgubWF4 KG0sRGlhbG9nLm1heF9ib3R0b20pO31yZXR1cm4gbTt9LF9jYWxjV2lkdGg6ZnVu Y3Rpb24ocSl7dmFyIGs9ZG9jdW1lbnQuYm9keSxvPWRvY3VtZW50LmRvY3VtZW50 RWxlbWVudCxyPTA7aWYoay5vZmZzZXRXaWR0aDxrLnNjcm9sbFdpZHRoKXtyPWsu c2Nyb2xsV2lkdGgray5vZmZzZXRMZWZ0O31lbHNle3ZhciBuPWsuY2hpbGROb2Rl cztmb3IodmFyIHA9MDtwPG4ubGVuZ3RoO3ArKyl7dmFyIGw9bltwXTt2YXIgbT1s Lm9mZnNldFdpZHRoK2wub2Zmc2V0TGVmdDtpZihtPnIpcj1tO319aWYocSlyPU1h dGgubWF4KHIscSk7aWYoby5jbGllbnRMZWZ0PjApcis9KG8uY2xpZW50TGVmdCoy KTtpZihvLmNsaWVudFRvcD4wKWhlaWdodCs9KG8uY2xpZW50VG9wKjIpO3JldHVy biByO30sX3N0YXJ0UmVzaXplTW9uaXRvcjpmdW5jdGlvbigpe3ZhciBsLGs9ZG9j dW1lbnQuZG9jdW1lbnRFbGVtZW50O2lmKHRoaXMuX29wdHMuaGlkZU92ZXJmbG93 KXtrLnN0eWxlLm92ZXJmbG93PSdoaWRkZW4nO2RvY3VtZW50LmJvZHkuc3R5bGUu b3ZlcmZsb3c9J2hpZGRlbic7fXNldEludGVydmFsKChmdW5jdGlvbigpe3ZhciBw PXRoaXMuX2NvbXB1dGVTaXplKCk7dmFyIHE9RGF0ZS5ub3coKTt2YXIgbT10aGlz Ll9sYXN0UmVzaXplQWNrSWQ8dGhpcy5fcmVzaXplQ291bnQmJihxLXRoaXMuX3Jl c2l6ZVRpbWVzdGFtcCk+dGhpcy5fb3B0cy5yZXNpemVBY2tUaW1lb3V0O2lmKCFs fHwodGhpcy5fb3B0cy5leHBlY3RSZXNpemVBY2smJm0pfHwodGhpcy5fb3B0cy5h bGxvd1NocmluayYmbC53aWR0aCE9cC53aWR0aCl8fCghdGhpcy5fb3B0cy5hbGxv d1NocmluayYmbC53aWR0aDxwLndpZHRoKXx8KHRoaXMuX29wdHMuYWxsb3dTaHJp bmsmJmwuaGVpZ2h0IT1wLmhlaWdodCl8fCghdGhpcy5fb3B0cy5hbGxvd1Nocmlu ayYmbC5oZWlnaHQ8cC5oZWlnaHQpKXtsPXA7dGhpcy5fcmVzaXplQ291bnQrKzt0 aGlzLl9yZXNpemVUaW1lc3RhbXA9cTt2YXIgbz17dHlwZToncmVzaXplJyxoZWln aHQ6cC5oZWlnaHQsYWNrRGF0YTp7aWQ6dGhpcy5fcmVzaXplQ291bnR9fTtpZihw LndpZHRoJiZwLndpZHRoIT0wKW8ud2lkdGg9cC53aWR0aDt0cnl7aWYoYihkb2N1 bWVudC5yZWZlcnJlcikuaXNGYWNlYm9va1VSSSgpJiZ3aW5kb3cucGFyZW50IT13 aW5kb3cmJndpbmRvdy5uYW1lJiZ3aW5kb3cucGFyZW50LmxvY2F0aW9uJiZ3aW5k b3cucGFyZW50LmxvY2F0aW9uLnRvU3RyaW5nJiZiKHdpbmRvdy5wYXJlbnQubG9j YXRpb24pLmlzRmFjZWJvb2tVUkkoKSl7dmFyIGlmcmFtZXM9d2luZG93LnBhcmVu dC5kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaWZyYW1lJyk7Zm9yKHZh ciBpPTA7aTxpZnJhbWVzLmxlbmd0aDtpPWkrMSlpZihpZnJhbWVzW2ldLm5hbWU9 PXdpbmRvdy5uYW1lKXtpZih0aGlzLl9vcHRzLnJlc2l6ZVdpZHRoKWlmcmFtZXNb aV0uc3R5bGUud2lkdGg9by53aWR0aCsncHgnO2lmcmFtZXNbaV0uc3R5bGUuaGVp Z2h0PW8uaGVpZ2h0KydweCc7fX10aGlzLnNlbmQobyk7fWNhdGNoKG4pe3RoaXMu c2VuZChvKTt9fX0pLmJpbmQodGhpcyksdGhpcy5fb3B0cy5yZXNpemVUaW1lb3V0 KTt9fTt2YXIgYz1lKHt9LGQpO2guZXhwb3J0cy5VbnZlcmlmaWVkWEQ9YztoLmV4 cG9ydHMuWEQ9ZDtnLlVudmVyaWZpZWRYRD1jO2cuWEQ9ZDt9KTsKX19lKCJjb25u ZWN0LXhkIixbIlhEIl0sZnVuY3Rpb24oYSxiKXthLlVudmVyaWZpZWRYRD1iKCdY RCcpLlVudmVyaWZpZWRYRDthLlhEPWIoJ1hEJykuWEQ7fSwzKTsKV2luZG93Q29t bT17X2NhbGxiYWNrczp7fSxtYWtlSGFuZGxlcjpmdW5jdGlvbihhLGMpe2M9Y3x8 J29wZW5lcic7dmFyIGI9J2YnKyhNYXRoLnJhbmRvbSgpKigxPDwzMCkpLnRvU3Ry aW5nKDE2KS5yZXBsYWNlKCcuJywnJyk7V2luZG93Q29tbS5fY2FsbGJhY2tzW2Jd PWE7cmV0dXJuIG5ldyBVUkkoJy9jb25uZWN0L3dpbmRvd19jb21tLnBocCcpLnNl dFF1ZXJ5RGF0YSh7X2lkOmIsX3JlbGF0aW9uOmN9KS5nZXRRdWFsaWZpZWRVUkko KS50b1N0cmluZygpO30sX3JlY3Y6ZnVuY3Rpb24oYil7dmFyIGE9bmV3IFVSSShi KS5nZXRRdWVyeURhdGEoKTtXaW5kb3dDb21tLl9jYWxsYmFja3NbYS5faWRdKGEp O319OwpfX2UoInZlY3RvciIsWyJldmVudC1leHRlbnNpb25zIiwiZG9tIiwiY29w eVByb3BlcnRpZXMiLCJ1YSJdLGZ1bmN0aW9uKGgsaixpLGcpe3ZhciBhPWooJ2V2 ZW50LWV4dGVuc2lvbnMnKS4kRTt2YXIgYj1qKCdkb20nKTt2YXIgZD1qKCdjb3B5 UHJvcGVydGllcycpO3ZhciBrPWooJ3VhJyk7ZnVuY3Rpb24gYyhtLG4sbCl7ZCh0 aGlzLHt4OnBhcnNlRmxvYXQobSkseTpwYXJzZUZsb2F0KG4pLGRvbWFpbjpsfHwn cHVyZSd9KTt9ZChjLnByb3RvdHlwZSx7dG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1 cm4gJygnK3RoaXMueCsnLCAnK3RoaXMueSsnKSc7fSxhZGQ6ZnVuY3Rpb24obixv KXtpZihhcmd1bWVudHMubGVuZ3RoPT0xKXtpZihuLmRvbWFpbiE9J3B1cmUnKW49 bi5jb252ZXJ0VG8odGhpcy5kb21haW4pO3JldHVybiB0aGlzLmFkZChuLngsbi55 KTt9dmFyIGw9cGFyc2VGbG9hdChuKTt2YXIgbT1wYXJzZUZsb2F0KG8pO3JldHVy biBuZXcgYyh0aGlzLngrbCx0aGlzLnkrbSx0aGlzLmRvbWFpbik7fSxtdWw6ZnVu Y3Rpb24obCxtKXtpZih0eXBlb2YobSk9PSJ1bmRlZmluZWQiKW09bDtyZXR1cm4g bmV3IGModGhpcy54KmwsdGhpcy55Km0sdGhpcy5kb21haW4pO30sc3ViOmZ1bmN0 aW9uKGwsbSl7aWYoYXJndW1lbnRzLmxlbmd0aD09MSl7cmV0dXJuIHRoaXMuYWRk KGwubXVsKC0xKSk7fWVsc2UgcmV0dXJuIHRoaXMuYWRkKC1sLC1tKTt9LGRpc3Rh bmNlVG86ZnVuY3Rpb24obCl7cmV0dXJuIHRoaXMuc3ViKGwpLm1hZ25pdHVkZSgp O30sbWFnbml0dWRlOmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguc3FydCgodGhpcy54 KnRoaXMueCkrKHRoaXMueSp0aGlzLnkpKTt9LGNvbnZlcnRUbzpmdW5jdGlvbihs KXtpZihsIT0ncHVyZScmJmwhPSd2aWV3cG9ydCcmJmwhPSdkb2N1bWVudCcpcmV0 dXJuIG5ldyBjKDAsMCk7aWYobD09dGhpcy5kb21haW4pcmV0dXJuIG5ldyBjKHRo aXMueCx0aGlzLnksdGhpcy5kb21haW4pO2lmKGw9PSdwdXJlJylyZXR1cm4gbmV3 IGModGhpcy54LHRoaXMueSk7aWYodGhpcy5kb21haW49PSdwdXJlJylyZXR1cm4g bmV3IGMoMCwwKTt2YXIgbT1jLmdldFNjcm9sbFBvc2l0aW9uKCdkb2N1bWVudCcp O3ZhciBuPXRoaXMueCxvPXRoaXMueTtpZih0aGlzLmRvbWFpbj09J2RvY3VtZW50 Jyl7bi09bS54O28tPW0ueTt9ZWxzZXtuKz1tLng7bys9bS55O31yZXR1cm4gbmV3 IGMobixvLGwpO30sc2V0RWxlbWVudFBvc2l0aW9uOmZ1bmN0aW9uKGwpe3ZhciBt PXRoaXMuY29udmVydFRvKCdkb2N1bWVudCcpO2wuc3R5bGUubGVmdD1wYXJzZUlu dChtLngpKydweCc7bC5zdHlsZS50b3A9cGFyc2VJbnQobS55KSsncHgnO3JldHVy biB0aGlzO30sc2V0RWxlbWVudERpbWVuc2lvbnM6ZnVuY3Rpb24obCl7cmV0dXJu IHRoaXMuc2V0RWxlbWVudFdpZHRoKGwpLnNldEVsZW1lbnRIZWlnaHQobCk7fSxz ZXRFbGVtZW50V2lkdGg6ZnVuY3Rpb24obCl7bC5zdHlsZS53aWR0aD1wYXJzZUlu dCh0aGlzLngsMTApKydweCc7cmV0dXJuIHRoaXM7fSxzZXRFbGVtZW50SGVpZ2h0 OmZ1bmN0aW9uKGwpe2wuc3R5bGUuaGVpZ2h0PXBhcnNlSW50KHRoaXMueSwxMCkr J3B4JztyZXR1cm4gdGhpczt9LHNjcm9sbEVsZW1lbnRCeTpmdW5jdGlvbihsKXtp ZihsPT1kb2N1bWVudC5ib2R5KXt3aW5kb3cuc2Nyb2xsQnkodGhpcy54LHRoaXMu eSk7fWVsc2V7bC5zY3JvbGxMZWZ0Kz10aGlzLng7bC5zY3JvbGxUb3ArPXRoaXMu eTt9cmV0dXJuIHRoaXM7fX0pO2QoYyx7Z2V0RXZlbnRQb3NpdGlvbjpmdW5jdGlv bihtLGwpe2w9bHx8J2RvY3VtZW50JzttPWEobSk7dmFyIG49Yi5nZXREb2N1bWVu dFNjcm9sbEVsZW1lbnQoKTt2YXIgcD1tLnBhZ2VYfHwobS5jbGllbnRYK24uc2Ny b2xsTGVmdCk7dmFyIHE9bS5wYWdlWXx8KG0uY2xpZW50WStuLnNjcm9sbFRvcCk7 dmFyIG89bmV3IGMocCxxLCdkb2N1bWVudCcpO3JldHVybiBvLmNvbnZlcnRUbyhs KTt9LGdldFNjcm9sbFBvc2l0aW9uOmZ1bmN0aW9uKGwpe2w9bHx8J2RvY3VtZW50 Jzt2YXIgbT1iLmdldERvY3VtZW50U2Nyb2xsRWxlbWVudCgpO3ZhciBuPW0uc2Ny b2xsTGVmdDt2YXIgbz1tLnNjcm9sbFRvcDtyZXR1cm4gbmV3IGMobixvLCdkb2N1 bWVudCcpLmNvbnZlcnRUbyhsKTt9LGdldEVsZW1lbnRQb3NpdGlvbjpmdW5jdGlv bihuLG0pe209bXx8J2RvY3VtZW50JztpZighbilyZXR1cm47aWYoISgnZ2V0Qm91 bmRpbmdDbGllbnRSZWN0JyBpbiBuKSlyZXR1cm4gbmV3IGMoMCwwLCdkb2N1bWVu dCcpO3ZhciBwPW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbD1kb2N1bWVudC5k b2N1bWVudEVsZW1lbnQsbz1NYXRoLnJvdW5kKHAubGVmdCktbC5jbGllbnRMZWZ0 LHE9TWF0aC5yb3VuZChwLnRvcCktbC5jbGllbnRUb3A7cmV0dXJuIG5ldyBjKG8s cSwndmlld3BvcnQnKS5jb252ZXJ0VG8obSk7fSxnZXRFbGVtZW50RGltZW5zaW9u czpmdW5jdGlvbihsKXtyZXR1cm4gbmV3IGMobC5vZmZzZXRXaWR0aHx8MCxsLm9m ZnNldEhlaWdodHx8MCk7fSxnZXRWaWV3cG9ydERpbWVuc2lvbnM6ZnVuY3Rpb24o KXt2YXIgbD0od2luZG93JiZ3aW5kb3cuaW5uZXJXaWR0aCl8fChkb2N1bWVudCYm ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50JiZkb2N1bWVudC5kb2N1bWVudEVsZW1l bnQuY2xpZW50V2lkdGgpfHwoZG9jdW1lbnQmJmRvY3VtZW50LmJvZHkmJmRvY3Vt ZW50LmJvZHkuY2xpZW50V2lkdGgpfHwwO3ZhciBtPSh3aW5kb3cmJndpbmRvdy5p bm5lckhlaWdodCl8fChkb2N1bWVudCYmZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50 JiZkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KXx8KGRvY3Vt ZW50JiZkb2N1bWVudC5ib2R5JiZkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodCl8 fDA7cmV0dXJuIG5ldyBjKGwsbSwndmlld3BvcnQnKTt9LGdldERvY3VtZW50RGlt ZW5zaW9uczpmdW5jdGlvbihsKXtsPWx8fGRvY3VtZW50O3ZhciBtPWIuZ2V0RG9j dW1lbnRTY3JvbGxFbGVtZW50KGwpO2lmKG09PT1sLmJvZHkmJmsuZmlyZWZveCgp KW09bC5kb2N1bWVudEVsZW1lbnQ7dmFyIG49bS5zY3JvbGxXaWR0aHx8MDt2YXIg bz1tLnNjcm9sbEhlaWdodHx8MDtyZXR1cm4gbmV3IGMobixvLCdkb2N1bWVudCcp O30sZGVzZXJpYWxpemU6ZnVuY3Rpb24obSl7dmFyIGw9bS5zcGxpdCgnLCcpO3Jl dHVybiBuZXcgYyhsWzBdLGxbMV0pO319KTtmdW5jdGlvbiBlKGwpe3JldHVybiBj LmdldEVsZW1lbnRQb3NpdGlvbihsLCdkb2N1bWVudCcpLng7fWZ1bmN0aW9uIGYo bCl7cmV0dXJuIGMuZ2V0RWxlbWVudFBvc2l0aW9uKGwsJ2RvY3VtZW50JykueTt9 aC5lbGVtZW50WT1mO2guZWxlbWVudFg9ZTtoLlZlY3RvcjI9aS5leHBvcnRzPWM7 fSwzKTsKX19lKCJQb3B1cFdpbmRvdyIsWyJjb3B5UHJvcGVydGllcyIsInVhIiwi dmVjdG9yIl0sZnVuY3Rpb24oZSxnLGYsZCl7dmFyIGM9ZygiY29weVByb3BlcnRp ZXMiKTt2YXIgaD1nKCJ1YSIpO3ZhciBiPWcoInZlY3RvciIpO3ZhciBhPXtfb3B0 czp7YWxsb3dTaHJpbms6dHJ1ZSx0aW1lb3V0OjEwMH0saW5pdDpmdW5jdGlvbihp KXtjb3B5X3Byb3BlcnRpZXMoYS5fb3B0cyxpKTtzZXRJbnRlcnZhbChhLl9yZXNp emVDaGVjayxhLl9vcHRzLnRpbWVvdXQpO30sX3Jlc2l6ZUNoZWNrOmZ1bmN0aW9u KCl7dmFyIG09Yi5nZXRWaWV3cG9ydERpbWVuc2lvbnMoKSxpPWEuX2dldERvY3Vt ZW50U2l6ZSgpLGs9aS55LW0ueSxsPWkueC1tLng7aWYobDwwKWw9MDtpZighYS5f b3B0cy5hbGxvd1NocmluayYmazwwKWs9MDtpZihrfHxsKXRyeXtpZih3aW5kb3cu Y29uc29sZSYmd2luZG93LmNvbnNvbGUuZmlyZWJ1Zyljb25zb2xlLmxvZygnUmVz aXppbmcgd2lsbCBub3Qgd29yayBpbiBmaXJlZm94IHdpdGggZmlyZWJ1ZyBlbmFi bGVkLiAnKydTZWUgaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1 Zy5jZ2k/aWQ9NjkxNjkzJyk7d2luZG93LnJlc2l6ZUJ5KGwsayk7aWYobCl3aW5k b3cubW92ZUJ5KGwvLTIsMCk7fWNhdGNoKGope319LF9nZXREb2N1bWVudFNpemU6 ZnVuY3Rpb24oKXt2YXIgaT1iLmdldERvY3VtZW50RGltZW5zaW9ucygpO2lmKHdp bmRvdy5EaWFsb2cmJkRpYWxvZy5tYXhfYm90dG9tJiZEaWFsb2cubWF4X2JvdHRv bT5pLnkpaS55PURpYWxvZy5tYXhfYm90dG9tO3JldHVybiBpO30sb3BlbjpmdW5j dGlvbihxLGoscil7dmFyIG49dHlwZW9mIHdpbmRvdy5zY3JlZW5YIT0ndW5kZWZp bmVkJz93aW5kb3cuc2NyZWVuWDp3aW5kb3cuc2NyZWVuTGVmdCxvPXR5cGVvZiB3 aW5kb3cuc2NyZWVuWSE9J3VuZGVmaW5lZCc/d2luZG93LnNjcmVlblk6d2luZG93 LnNjcmVlblRvcCxtPXR5cGVvZiB3aW5kb3cub3V0ZXJXaWR0aCE9J3VuZGVmaW5l ZCc/d2luZG93Lm91dGVyV2lkdGg6ZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCxs PXR5cGVvZiB3aW5kb3cub3V0ZXJIZWlnaHQhPSd1bmRlZmluZWQnP3dpbmRvdy5v dXRlckhlaWdodDooZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQtMjIpLGs9cGFy c2VJbnQobisoKG0tcikvMiksMTApLHA9cGFyc2VJbnQobysoKGwtaikvMi41KSwx MCksaT0oJ3dpZHRoPScrcisnLGhlaWdodD0nK2orJyxsZWZ0PScraysnLHRvcD0n K3ApO3JldHVybiB3aW5kb3cub3BlbihxLCdfYmxhbmsnLGkpO319O2YuZXhwb3J0 cz1hO30pOwpfX2UoInBvcHVwLXJlc2l6ZXIiLFsiUG9wdXBXaW5kb3ciXSxmdW5j dGlvbihhLGIpe2EuUG9wdXBSZXNpemVyPWIoJ1BvcHVwV2luZG93Jyk7fSwzKTsK Q29ubmVjdExvZ2luPXtpbml0OmZ1bmN0aW9uKGEpe3RoaXMuYXBwSUQ9YS5hcHBJ RDt0aGlzLmFkZFRvUHJvZmlsZT1hLmFkZFRvUHJvZmlsZTt0aGlzLm9uZUNsaWNr PWEub25lQ2xpY2s7dGhpcy5jaGFubmVsVXJsPWEuY2hhbm5lbFVybDtYRC5pbml0 KGEpO30sbG9naW46ZnVuY3Rpb24oYSxjLGIpe2lmKHRoaXMub25lQ2xpY2smJiFj KXt0aGlzLl9vbmVDbGljayhhKTt9ZWxzZSB0aGlzLl9vcGVuUG9wdXAoYSxjLGIp O30sbG9nb3V0OmZ1bmN0aW9uKCl7WEQuc2VuZCh7dHlwZTonbG9nb3V0J30pO30s X29uZUNsaWNrOmZ1bmN0aW9uKGEpe25ldyBBc3luY1JlcXVlc3QoKS5zZXRVUkko Jy9hamF4L2FwaS90b3MucGhwJykuc2V0RGF0YSh7YXBwX2lkOnRoaXMuYXBwSUQs Z3JhbnRfcGVybToxfSkuc2V0SGFuZGxlcihmdW5jdGlvbihiKXtDb25uZWN0TG9n aW4uX3JlZnJlc2hMb2dpblN0YXR1cygpO2EmJmEoKTt9KS5zZW5kKCk7fSxfb3Bl blBvcHVwOmZ1bmN0aW9uKGMsZSxkKXtkPWR8fHt9O3ZhciBiPVdpbmRvd0NvbW0u bWFrZUhhbmRsZXIoZnVuY3Rpb24oaCl7Q29ubmVjdExvZ2luLl9jbG9zZVBvcHVw KCk7aWYoQ29ubmVjdExvZ2luLmFwcElEKUNvbm5lY3RMb2dpbi5fcmVmcmVzaExv Z2luU3RhdHVzKCk7YyYmYygpO30pLGE9V2luZG93Q29tbS5tYWtlSGFuZGxlcihm dW5jdGlvbihoKXtDb25uZWN0TG9naW4uX2Nsb3NlUG9wdXAoKTt9KSxnPW5ldyBV UkkoJy9sb2dpbi5waHAnKTtnLnNldFF1ZXJ5RGF0YSh7YXBpX2tleTp0aGlzLmFw cElELG5leHQ6YixjaGFubmVsX3VybDphLGNhbmNlbF91cmw6YSxyZXFfcGVybXM6 ZSx2OicxLjAnLGZiY29ubmVjdDoxLGFkZF90b19wcm9maWxlOnRoaXMuYWRkVG9Q cm9maWxlLGRpc3BsYXk6J3BvcHVwJ30pO2cuYWRkUXVlcnlEYXRhKGQpO3ZhciBm PXRoaXMuX2dldFNpemUoZCk7dGhpcy5fcG9wdXA9UG9wdXBSZXNpemVyLm9wZW4o Zy50b1N0cmluZygpLGYuaGVpZ2h0LGYud2lkdGgpO30sX2Nsb3NlUG9wdXA6ZnVu Y3Rpb24oKXtpZih0aGlzLl9wb3B1cCl7dGhpcy5fcG9wdXAuY2xvc2UoKTt0aGlz Ll9wb3B1cD1udWxsO319LF9yZWZyZXNoTG9naW5TdGF0dXM6ZnVuY3Rpb24oKXtp Zih0aGlzLmNoYW5uZWxVcmwpe1hELnNlbmQoe3R5cGU6J3JlZnJlc2hMb2dpblN0 YXR1cyd9KTt9ZWxzZSB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7fSxfZ2V0U2l6 ZTpmdW5jdGlvbihhKXtpZihhLnNvY2lhbF9wbHVnaW49PSdyZWdpc3RyYXRpb24n KXtyZXR1cm4ge3dpZHRoOjY0MCxoZWlnaHQ6MzcwfTt9ZWxzZSByZXR1cm4ge3dp ZHRoOjYxMCxoZWlnaHQ6MjgwfTt9fTsKKGZ1bmN0aW9uKCl7dmFyIGE9J2ZhY2Vi b29rLmRlc2t0b3BwbHVnaW4nO0ZiRGVza3RvcERldGVjdD17bWltZVR5cGU6J2Fw cGxpY2F0aW9uL3gtZmFjZWJvb2stZGVza3RvcC0xJyxpc1BsdWdpbkluc3RhbGxl ZDpmdW5jdGlvbigpe3ZhciBlPW51bGw7aWYod2luZG93LkFjdGl2ZVhPYmplY3Qp e3RyeXtlPW5ldyBBY3RpdmVYT2JqZWN0KGEpO2lmKGUpcmV0dXJuIHRydWU7fWNh dGNoKGIpe319ZWxzZSBpZihuYXZpZ2F0b3IucGx1Z2lucyl7bmF2aWdhdG9yLnBs dWdpbnMucmVmcmVzaChmYWxzZSk7Zm9yKHZhciBjPTAsZD1uYXZpZ2F0b3IucGx1 Z2lucy5sZW5ndGg7YzxkO2MrKyl7ZT1uYXZpZ2F0b3IucGx1Z2luc1tjXTtpZihl Lmxlbmd0aCYmZVswXS50eXBlPT09dGhpcy5taW1lVHlwZSlyZXR1cm4gdHJ1ZTt9 fXJldHVybiBmYWxzZTt9LHBhdGNoTG9naW5Gb3JtOmZ1bmN0aW9uKCl7aWYodGhp cy5pc1BsdWdpbkluc3RhbGxlZCgpKXtuZXcgQXN5bmNSZXF1ZXN0KCcvYWpheC9k ZXNrdG9wL2xvZ2lubWVzc2FnZScpLnNlbmQoKTt2YXIgYj0kKCdwZXJzaXN0X2Jv eCcpO2lmKGIpYi5jaGVja2VkPXRydWU7fX0sc2V0Q29udGV4dHVhbERpYWxvZzpm dW5jdGlvbihiKXt2YXIgZD0kKCdwZXJzaXN0X2JveCcpO2lmKCFkLmNoZWNrZWQp dGhpcy50b2dnbGVXYXJuaW5nKGIpO3ZhciBjPWZ1bmN0aW9uKCl7ZC5jaGVja2Vk P2IuaGlkZSgpOmIuc2hvdygpO307RXZlbnQubGlzdGVuKGQsJ2NsaWNrJyxjKTtF dmVudC5saXN0ZW4oZCwna2V5ZG93bicsYyk7fX07fSkoKTsKKGZ1bmN0aW9uKCl7 RmJEZXNrdG9wUGx1Z2luPXtfcGx1Z2luOidfbm90X2NoZWNrZWQnLGdldFBsdWdp bjpmdW5jdGlvbigpe2lmKHRoaXMuX3BsdWdpbj09PSdfbm90X2NoZWNrZWQnKXt0 aGlzLl9wbHVnaW49bnVsbDtpZihGYkRlc2t0b3BEZXRlY3QuaXNQbHVnaW5JbnN0 YWxsZWQoKSl7dmFyIGE9RE9NLmNyZWF0ZSgnZGl2Jyk7ZG9jdW1lbnQuYm9keS5h cHBlbmRDaGlsZChhKTtET00uc2V0Q29udGVudChhLEhUTUwoJzxvYmplY3QgaWQ9 Imtpd2lfcGx1Z2luIiAnKyd0eXBlPSInK0ZiRGVza3RvcERldGVjdC5taW1lVHlw ZSsnIiB3aWR0aD0iMCIgaGVpZ2h0PSIwIj4nKyc8L29iamVjdD4nKSk7dGhpcy5f cGx1Z2luPSQoJ2tpd2lfcGx1Z2luJyk7fX1yZXR1cm4gdGhpcy5fcGx1Z2luO30s bG9nb3V0OmZ1bmN0aW9uKGIpe2I9Ynx8IjAiO3ZhciBhPXRoaXMuZ2V0UGx1Z2lu KCk7aWYoYSlhLmxvZ291dChiKTt9LHNob3VsZFN1cHByZXNzQmVlcGVyOmZ1bmN0 aW9uKCl7dmFyIGE9dGhpcy5nZXRQbHVnaW4oKTtyZXR1cm4gYSYmJ2lzQXBwUnVu bmluZycgaW4gYSYmYS5pc0FwcFJ1bm5pbmcoKTt9LHNob3VsZFN1cHByZXNzU2lk ZWJhcjpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0UGx1Z2luKCk7cmV0dXJuIGEm Jidpc0FwcERvY2tlZCcgaW4gYSYmYS5pc0FwcERvY2tlZCgpO30sdHJhbnNmZXJB dXRoVG9rZW46ZnVuY3Rpb24oYixjKXtpZihiJiZiLmxlbmd0aD4wKXt2YXIgYT10 aGlzLmdldFBsdWdpbigpO2lmKGEpYS5zZXRBY2Nlc3NUb2tlbihiLGMpO31pZih0 aGlzLnJlZGlyZWN0SG9tZSl3aW5kb3cubG9jYXRpb24uaHJlZj1VUkkoKS5zZXRQ YXRoKCkudG9TdHJpbmcoKTt9fTt9KSgpOwpfX2UoImFzeW5jLXNpZ25hbCIsWyJF bnYiXSxmdW5jdGlvbihkLGYsZSxjKXt2YXIgYj1mKCdFbnYnKTtmdW5jdGlvbiBh KGgsZyl7dGhpcy5kYXRhPWd8fHt9O2lmKGIudHJhY2tpbmdfZG9tYWluJiZoLmNo YXJBdCgwKT09Jy8nKWg9Yi50cmFja2luZ19kb21haW4raDt0aGlzLnVyaT1oO3Ro aXMuaGFuZGxlcj1udWxsO31hLnByb3RvdHlwZS5zZXRIYW5kbGVyPWZ1bmN0aW9u KGcpe3RoaXMuaGFuZGxlcj1nO3JldHVybiB0aGlzO307YS5wcm90b3R5cGUuc2Vu ZD1mdW5jdGlvbigpe3ZhciBpPXRoaXMuaGFuZGxlcixoPXRoaXMuZGF0YSxtPXRo aXMudXJpLGw9W10saj1uZXcgSW1hZ2UoKSxnPWRvY3VtZW50LmdldEVsZW1lbnRC eUlkKCdwb3N0X2Zvcm1faWQnKTtoLmFzeW5jU2lnbmFsPU1hdGguZmxvb3IoTWF0 aC5yYW5kb20oKSoxMDAwMCkrMTtpZihnKWgucG9zdF9mb3JtX2lkPWcudmFsdWU7 aC5fX3VzZXI9Yi51c2VyO2lmKGIuZmJfaXNiKWguZmJfaXNiPWIuZmJfaXNiO2Zv cih2YXIgayBpbiBoKWwucHVzaChlbmNvZGVVUklDb21wb25lbnQoaykrJz0nK2Vu Y29kZVVSSUNvbXBvbmVudChoW2tdKSk7aWYobS5pbmRleE9mKCc/Jyk9PS0xKW0r PSc/JzttKz1sLmpvaW4oJyYnKTtpZihpKWoub25sb2FkPWoub25lcnJvcj0oZnVu Y3Rpb24obyxuKXtyZXR1cm4gZnVuY3Rpb24oKXtuKChvLmhlaWdodD09MSkpO307 fSkoaixpKTtqLnNyYz1tO3JldHVybiB0aGlzO307ZC5Bc3luY1NpZ25hbD1lLmV4 cG9ydHM9YTt9LDMpOwpmdW5jdGlvbiBkZXRlY3RfYnJva2VuX3Byb3h5X2NhY2hl KGQsYSl7dmFyIGI9Z2V0Q29va2llKGEpO2lmKChiIT1kKSYmKGIhPW51bGwpJiYo ZCE9JzAnKSl7dmFyIGM9e2M6J3NpX2RldGVjdF9icm9rZW5fcHJveHlfY2FjaGUn LG06YSsnICcrZCsnICcrYn07dmFyIGU9bmV3IFVSSSgnL2NvbW1vbi9zY3JpYmVf ZW5kcG9pbnQucGhwJykuZ2V0UXVhbGlmaWVkVVJJKCkudG9TdHJpbmcoKTtuZXcg QXN5bmNTaWduYWwoZSxjKS5zZW5kKCk7fX0KX19lKCJhamF4cGlwZSIsWyJhcmJp dGVyIiwiQXN5bmNSZXF1ZXN0IiwiYmlnLXBpcGUiLCJkb20iLCJFbnYiLCJKU0ND IiwiY29weVByb3BlcnRpZXMiLCJkb20tY29yZSJdLGZ1bmN0aW9uKGwsbixtLGop e3ZhciBiPW4oJ2FyYml0ZXInKTt2YXIgYz1uKCdBc3luY1JlcXVlc3QnKTt2YXIg ZD1uKCdiaWctcGlwZScpO3ZhciBlPW4oJ2RvbScpO3ZhciBmPW4oJ0VudicpO3Zh ciBnPW4oJ0pTQ0MnKTt2YXIgaT1uKCdjb3B5UHJvcGVydGllcycpO3ZhciBrPW4o J2RvbS1jb3JlJykuZ2U7ZnVuY3Rpb24gaChwLHEpe3ZhciByPWsocCk7aWYocil7 aWYoIXEpci5zdHlsZS5taW5IZWlnaHQ9JzYwMHB4Jztmb3IodmFyIHMgaW4gZC5w YWdlbGV0SURzKWlmKHAhPT1zJiZlLmNvbnRhaW5zKHIscykpe2cuY2xlYXJGb3JQ YWdlbGV0KHMpO2RlbGV0ZSBkLnBhZ2VsZXRJRHNbc107fWUuZW1wdHkocik7fX1m dW5jdGlvbiBvKHAscSl7dmFyIHI9ayhwKTtpZihyKWlmKCFxKXIuc3R5bGUubWlu SGVpZ2h0PScxMDBweCc7fWZ1bmN0aW9uIGEocSxwKXt0aGlzLl91cmk9cTt0aGlz Ll9xdWVyeV9kYXRhPXA7dGhpcy5fcmVxdWVzdD1uZXcgYygpO3RoaXMuX2NhbnZh c19pZD1udWxsO3RoaXMuX2FsbG93X2Nyb3NzX3BhZ2VfdHJhbnNpdGlvbj10cnVl O31pKGEucHJvdG90eXBlLHtzZXRDYW52YXNJZDpmdW5jdGlvbihwKXt0aGlzLl9j YW52YXNfaWQ9cDtyZXR1cm4gdGhpczt9LHNldFVSSTpmdW5jdGlvbihwKXt0aGlz Ll91cmk9cDtyZXR1cm4gdGhpczt9LHNldERhdGE6ZnVuY3Rpb24ocCl7dGhpcy5f cXVlcnlfZGF0YT1wO3JldHVybiB0aGlzO30sZ2V0RGF0YTpmdW5jdGlvbihwKXty ZXR1cm4gdGhpcy5fcXVlcnlfZGF0YTt9LHNldEFsbG93Q3Jvc3NQYWdlVHJhbnNp dGlvbjpmdW5jdGlvbihwKXt0aGlzLl9hbGxvd19jcm9zc19wYWdlX3RyYW5zaXRp b249cDtyZXR1cm4gdGhpczt9LHNldEFwcGVuZDpmdW5jdGlvbihwKXt0aGlzLl9h cHBlbmQ9cDtyZXR1cm4gdGhpczt9LHNlbmQ6ZnVuY3Rpb24oKXt0aGlzLl9yZXF1 ZXN0LnNldE9wdGlvbigndXNlSWZyYW1lVHJhbnNwb3J0Jyx0cnVlKS5zZXRVUkko dGhpcy5fdXJpKS5zZXREYXRhKGkoe2FqYXhwaXBlOjEsYWpheHBpcGVfdG9rZW46 Zi5hamF4cGlwZV90b2tlbn0sdGhpcy5fcXVlcnlfZGF0YSkpLnNldFByZUJvb3Rs b2FkSGFuZGxlcih0aGlzLl9wcmVCb290bG9hZEhhbmRsZXIuYmluZCh0aGlzKSku c2V0SW5pdGlhbEhhbmRsZXIodGhpcy5fb25Jbml0aWFsUmVzcG9uc2UuYmluZCh0 aGlzKSkuc2V0SGFuZGxlcih0aGlzLl9vblJlc3BvbnNlLmJpbmQodGhpcykpLnNl dE1ldGhvZCgnR0VUJykuc2V0UmVhZE9ubHkodHJ1ZSkuc2V0QWxsb3dDcm9zc1Bh Z2VUcmFuc2l0aW9uKHRoaXMuX2FsbG93X2Nyb3NzX3BhZ2VfdHJhbnNpdGlvbik7 YS5fY3VycmVudF9yZXF1ZXN0PXRoaXMuX3JlcXVlc3Q7dGhpcy5fcmVxdWVzdC5z ZW5kKCk7cmV0dXJuIHRoaXM7fSxfcHJlQm9vdGxvYWRGaXJzdFJlc3BvbnNlOmZ1 bmN0aW9uKHApe3JldHVybiBmYWxzZTt9LF9maXJlRG9tQ29udGVudENhbGxiYWNr OmZ1bmN0aW9uKCl7dGhpcy5fYXJiaXRlci5pbmZvcm0oJ2FqYXhwaXBlL2RvbWNv bnRlbnRfY2FsbGJhY2snLHRydWUsYi5CRUhBVklPUl9TVEFURSk7fSxfZmlyZU9u bG9hZENhbGxiYWNrOmZ1bmN0aW9uKCl7dGhpcy5fYXJiaXRlci5pbmZvcm0oJ2Fq YXhwaXBlL29ubG9hZF9jYWxsYmFjaycsdHJ1ZSxiLkJFSEFWSU9SX1NUQVRFKTt9 LF9pc1JlbGV2YW50OmZ1bmN0aW9uKHApe3JldHVybiB0aGlzLl9yZXF1ZXN0PT1h Ll9jdXJyZW50X3JlcXVlc3R8fHRoaXMuX2pzTm9uQmxvY2s7fSxfcHJlQm9vdGxv YWRIYW5kbGVyOmZ1bmN0aW9uKHEpe3ZhciBwPXEuZ2V0UGF5bG9hZCgpO2lmKCFw fHxwLnJlZGlyZWN0fHwhdGhpcy5faXNSZWxldmFudChxKSlyZXR1cm4gZmFsc2U7 dmFyIHI9ZmFsc2U7aWYocS5pc19maXJzdCl7IXRoaXMuX2FwcGVuZCYmIXRoaXMu X2Rpc3BsYXlDYWxsYmFjayYmaCh0aGlzLl9jYW52YXNfaWQsdGhpcy5fY29uc3RI ZWlnaHQpO3RoaXMuX2FyYml0ZXI9bmV3IGIoKTtyPXRoaXMuX3ByZUJvb3Rsb2Fk Rmlyc3RSZXNwb25zZShxKTt0aGlzLnBpcGU9bmV3IGQoe2FyYml0ZXI6dGhpcy5f YXJiaXRlcixyb290Tm9kZUlEOnRoaXMuX2NhbnZhc19pZCxsaWQ6dGhpcy5fcmVx dWVzdC5saWQscnJFbmFibGVkOnEucGF5bG9hZC5yb2FkcnVubmVyX2VuYWJsZWQs aXNBamF4OnRydWUsZG9tQ29udGVudENhbGxiYWNrOnRoaXMuX2ZpcmVEb21Db250 ZW50Q2FsbGJhY2suYmluZCh0aGlzKSxvbmxvYWRDYWxsYmFjazp0aGlzLl9maXJl T25sb2FkQ2FsbGJhY2suYmluZCh0aGlzKSxkb21Db250ZW50RXZ0OidhamF4cGlw ZS9kb21jb250ZW50X2NhbGxiYWNrJyxvbmxvYWRFdnQ6J2FqYXhwaXBlL29ubG9h ZF9jYWxsYmFjaycsanNOb25CbG9jazp0aGlzLl9qc05vbkJsb2NrLGRpc3BsYXlD YWxsYmFjazp0aGlzLl9kaXNwbGF5Q2FsbGJhY2t9KTt9cmV0dXJuIHI7fSxfcmVk aXJlY3Q6ZnVuY3Rpb24ocSl7aWYocS5yZWRpcmVjdCl7aWYocS5mb3JjZXx8IXRo aXMuaXNQYWdlQWN0aXZlKHEucmVkaXJlY3QpKXt2YXIgcD1bJ2FqYXhwaXBlJywn YWpheHBpcGVfdG9rZW4nXS5jb25jYXQodGhpcy5nZXRTYW5pdGl6ZWRQYXJhbWV0 ZXJzKCkpO2dvX29yX3JlcGxhY2Uod2luZG93LmxvY2F0aW9uLFVSSShxLnJlZGly ZWN0KS5yZW1vdmVRdWVyeURhdGEocCksdHJ1ZSk7fWVsc2UgUGFnZVRyYW5zaXRp b25zLmdvKHEucmVkaXJlY3QsdHJ1ZSk7cmV0dXJuIHRydWU7fWVsc2UgcmV0dXJu IGZhbHNlO30saXNQYWdlQWN0aXZlOmZ1bmN0aW9uKHApe3JldHVybiB0cnVlO30s Z2V0U2FuaXRpemVkUGFyYW1ldGVyczpmdW5jdGlvbigpe3JldHVybiBbXTt9LF92 ZXJzaW9uQ2hlY2s6ZnVuY3Rpb24ocCl7cmV0dXJuIHRydWU7fSxfb25Jbml0aWFs UmVzcG9uc2U6ZnVuY3Rpb24ocSl7dmFyIHA9cS5nZXRQYXlsb2FkKCk7aWYoIXRo aXMuX2lzUmVsZXZhbnQocSkpcmV0dXJuIGZhbHNlO2lmKCFwKXJldHVybiB0cnVl O2lmKHRoaXMuX3JlZGlyZWN0KHApfHwhdGhpcy5fdmVyc2lvbkNoZWNrKHApKXJl dHVybiBmYWxzZTtyZXR1cm4gdHJ1ZTt9LF9wcm9jZXNzRmlyc3RSZXNwb25zZTpm dW5jdGlvbihxKXt2YXIgcD1xLmdldFBheWxvYWQoKTtpZihrKHRoaXMuX2NhbnZh c19pZCkmJnAuY2FudmFzX2NsYXNzIT09bnVsbClDU1Muc2V0Q2xhc3ModGhpcy5f Y2FudmFzX2lkLHAuY2FudmFzX2NsYXNzKTt9LHNldEZpcnN0UmVzcG9uc2VDYWxs YmFjazpmdW5jdGlvbihwKXt0aGlzLl9maXJzdFJlc3BvbnNlQ2FsbGJhY2s9cDty ZXR1cm4gdGhpczt9LHNldEZpcnN0UmVzcG9uc2VIYW5kbGVyOmZ1bmN0aW9uKHAp e3RoaXMuX3Byb2Nlc3NGaXJzdFJlc3BvbnNlPXA7cmV0dXJuIHRoaXM7fSxfb25S ZXNwb25zZTpmdW5jdGlvbihxKXt2YXIgcD1xLnBheWxvYWQ7aWYoIXRoaXMuX2lz UmVsZXZhbnQocSkpcmV0dXJuIGMuc3VwcHJlc3NPbmxvYWRUb2tlbjtpZihxLmlz X2ZpcnN0KXt0aGlzLl9wcm9jZXNzRmlyc3RSZXNwb25zZShxKTt0aGlzLl9maXJz dFJlc3BvbnNlQ2FsbGJhY2smJnRoaXMuX2ZpcnN0UmVzcG9uc2VDYWxsYmFjaygp O3AucHJvdmlkZXM9cC5wcm92aWRlc3x8W107cC5wcm92aWRlcy5wdXNoKCd1aXBh Z2Vfb25sb2FkJyk7aWYodGhpcy5fYXBwZW5kKXAuYXBwZW5kPXRoaXMuX2NhbnZh c19pZDt9aWYocCl7aWYoJ2NvbnRlbnQnIGluIHAuY29udGVudCYmdGhpcy5fY2Fu dmFzX2lkIT09bnVsbCYmdGhpcy5fY2FudmFzX2lkIT0nY29udGVudCcpe3AuY29u dGVudFt0aGlzLl9jYW52YXNfaWRdPXAuY29udGVudC5jb250ZW50O2RlbGV0ZSBw LmNvbnRlbnQuY29udGVudDt9dGhpcy5waXBlLm9uUGFnZWxldEFycml2ZShwKTt9 aWYocS5pc19sYXN0KW8odGhpcy5fY2FudmFzX2lkLHRoaXMuX2NvbnN0SGVpZ2h0 KTtyZXR1cm4gYy5zdXBwcmVzc09ubG9hZFRva2VuO30sc2V0TmVjdGFyTW9kdWxl RGF0YVNhZmU6ZnVuY3Rpb24ocCl7dGhpcy5fcmVxdWVzdC5zZXROZWN0YXJNb2R1 bGVEYXRhU2FmZShwKTtyZXR1cm4gdGhpczt9LHNldEZpbmFsbHlIYW5kbGVyOmZ1 bmN0aW9uKHApe3RoaXMuX3JlcXVlc3Quc2V0RmluYWxseUhhbmRsZXIocCk7cmV0 dXJuIHRoaXM7fSxzZXRFcnJvckhhbmRsZXI6ZnVuY3Rpb24ocCl7dGhpcy5fcmVx dWVzdC5zZXRFcnJvckhhbmRsZXIocCk7cmV0dXJuIHRoaXM7fSxhYm9ydDpmdW5j dGlvbigpe3RoaXMuX3JlcXVlc3QuYWJvcnQoKTtpZihhLl9jdXJyZW50X3JlcXVl c3Q9PXRoaXMuX3JlcXVlc3QpYS5fY3VycmVudF9yZXF1ZXN0PW51bGw7dGhpcy5f cmVxdWVzdD1udWxsO3JldHVybiB0aGlzO30sc2V0SlNOb25CbG9jazpmdW5jdGlv bihwKXt0aGlzLl9qc05vbkJsb2NrPXA7cmV0dXJuIHRoaXM7fSxzZXREaXNwbGF5 Q2FsbGJhY2s6ZnVuY3Rpb24ocCl7dGhpcy5fZGlzcGxheUNhbGxiYWNrPXA7cmV0 dXJuIHRoaXM7fSxzZXRDb25zdEhlaWdodDpmdW5jdGlvbihwKXt0aGlzLl9jb25z dEhlaWdodD1wO3JldHVybiB0aGlzO30sZ2V0QXN5bmNSZXF1ZXN0OmZ1bmN0aW9u KCl7cmV0dXJuIHRoaXMuX3JlcXVlc3Q7fX0pO2koYSx7Z2V0Q3VycmVudFJlcXVl c3Q6ZnVuY3Rpb24oKXtyZXR1cm4gYS5fY3VycmVudF9yZXF1ZXN0O30sc2V0Q3Vy cmVudFJlcXVlc3Q6ZnVuY3Rpb24ocCl7YS5fY3VycmVudF9yZXF1ZXN0PXA7fSxp c0FjdGl2ZU9uUGFnZTpmdW5jdGlvbihwKXtyZXR1cm4gZi5hamF4cGlwZV9lbmFi bGVkO319KTtsLkFqYXhQaXBlUmVxdWVzdD1tLmV4cG9ydHM9YTt9LDMpOwpfX2Uo ImdvT3JSZXBsYWNlIixbInVyaSJdLGZ1bmN0aW9uKGMsZixlLGIpe3ZhciBhPWYo InVyaSIpO2Z1bmN0aW9uIGQoZyxqLGkpe3ZhciBrPW5ldyBhKGopO2lmKGcucGF0 aG5hbWU9PScvJyYmay5nZXRQYXRoKCkhPScvJyYmay5pc1F1aWNrbGluZ0VuYWJs ZWQoKSl7dmFyIGg9Zy5zZWFyY2g/e306e3E6Jyd9O2s9bmV3IGEoKS5zZXRQYXRo KCcvJykuc2V0UXVlcnlEYXRhKGgpLnNldEZyYWdtZW50KGsuZ2V0VW5xdWFsaWZp ZWRVUkkoKSkudG9TdHJpbmcoKTtqPWsudG9TdHJpbmcoKTt9aWYoaSYmISh1YS5p ZSgpPDgpKXtnLnJlcGxhY2Uoaik7fWVsc2UgaWYoZy5ocmVmPT1qKXtnLnJlbG9h ZCgpO31lbHNlIGcuaHJlZj1qO31lLmV4cG9ydHM9ZDt9KTsKX19lKCJjb21wdXRl UmVsYXRpdmVVUkkiLFsiYXJyYXktZXh0ZW5zaW9ucyIsInVyaSIsInV0aWwiLCJp c0VtcHR5Il0sZnVuY3Rpb24oZixpLGgsZSl7aSgiYXJyYXktZXh0ZW5zaW9ucyIp O3ZhciBhPWkoInVyaSIpO3ZhciBiPWkoInV0aWwiKTt2YXIgZz1pKCJpc0VtcHR5 Iik7ZnVuY3Rpb24gYyhrLGope2lmKCFqKXJldHVybiBrO2lmKGouY2hhckF0KDAp PT0nLycpcmV0dXJuIGo7dmFyIGw9ay5zcGxpdCgnLycpLnNsaWNlKDAsLTEpO2xb MF0hPT0nJztqLnNwbGl0KCcvJykuZm9yRWFjaChmdW5jdGlvbihtKXtpZighKG09 PScuJykpaWYobT09Jy4uJyl7aWYobC5sZW5ndGg+MSlsPWwuc2xpY2UoMCwtMSk7 fWVsc2UgbC5wdXNoKG0pO30pO3JldHVybiBsLmpvaW4oJy8nKTt9ZnVuY3Rpb24g ZChtLGspe3ZhciBuPW5ldyBhKCksbD1rO209bmV3IGEobSk7az1uZXcgYShrKTtp ZihrLmdldERvbWFpbigpJiYhay5pc0ZhY2Vib29rVVJJKCkpcmV0dXJuIGw7dmFy IG89bTt2YXIgaj1bJ1Byb3RvY29sJywnRG9tYWluJywnUG9ydCcsJ1BhdGgnLCdR dWVyeURhdGEnLCdGcmFnbWVudCddO2ouZm9yRWFjaChmdW5jdGlvbihxKXt2YXIg cD1xPT0nUGF0aCcmJm89PT1tO2lmKHApbi5zZXRQYXRoKGMobS5nZXRQYXRoKCks ay5nZXRQYXRoKCkpKTtpZighZyhrWydnZXQnK3FdKCkpKW89aztpZighcCluWydz ZXQnK3FdKG9bJ2dldCcrcV0oKSk7fSk7cmV0dXJuIG47fWguZXhwb3J0cz1kO30p OwpfX2UoIkhpc3RvcnlNYW5hZ2VyIixbImV2ZW50LWV4dGVuc2lvbnMiLCJmdW5j dGlvbi1leHRlbnNpb25zIiwiY29va2llIiwiRW52IiwidWEiLCJ1cmkiLCJjb3B5 UHJvcGVydGllcyJdLGZ1bmN0aW9uKGcsaSxoLGYpe2koImV2ZW50LWV4dGVuc2lv bnMiKTtpKCJmdW5jdGlvbi1leHRlbnNpb25zIik7dmFyIGE9aSgiY29va2llIik7 dmFyIGI9aSgiRW52Iik7dmFyIGo9aSgidWEiKTt2YXIgZD1pKCJ1cmkiKTt2YXIg ZT1pKCJjb3B5UHJvcGVydGllcyIpO3ZhciBjPXtfSUZSQU1FX0JBU0VfVVJJOido dHRwOi8vc3RhdGljLmFrLmZhY2Vib29rLmNvbS9jb21tb24vaGlzdG9yeV9tYW5h Z2VyLnBocCcsaGlzdG9yeTpudWxsLGN1cnJlbnQ6MCxmcmFnbWVudDpudWxsLF9z ZXRJZnJhbWVTcmNGcmFnbWVudDpmdW5jdGlvbihsKXtsPWwudG9TdHJpbmcoKTt2 YXIgaz1jLmhpc3RvcnkubGVuZ3RoLTE7Yy5pZnJhbWUuc3JjPWMuX0lGUkFNRV9C QVNFX1VSSSsnP3xpbmRleD0nK2srJyMnK2VuY29kZVVSSUNvbXBvbmVudChsKTty ZXR1cm4gYzt9LGdldElmcmFtZVNyY0ZyYWdtZW50OmZ1bmN0aW9uKCl7cmV0dXJu IGRlY29kZVVSSUNvbXBvbmVudChkKGMuaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9j dW1lbnQubG9jYXRpb24uaHJlZikuZ2V0RnJhZ21lbnQoKSk7fSxuZXh0ZnJhbWU6 ZnVuY3Rpb24oayxsKXtpZihsKXtjLl9zZXRJZnJhbWVTcmNGcmFnbWVudChrKTty ZXR1cm47fWlmKGshPT11bmRlZmluZWQpe2MuaWZyYW1lUXVldWUucHVzaChrKTt9 ZWxzZXtjLmlmcmFtZVF1ZXVlLnNwbGljZSgwLDEpO2MuaWZyYW1lVGltZW91dD1u dWxsO2MuY2hlY2tVUkkoKTt9aWYoYy5pZnJhbWVRdWV1ZS5sZW5ndGgmJiFjLmlm cmFtZVRpbWVvdXQpe3ZhciBtPWMuaWZyYW1lUXVldWVbMF07Yy5pZnJhbWVUaW1l b3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtjLl9zZXRJZnJhbWVTcmNGcmFnbWVu dChtKTt9LDEwMCxmYWxzZSk7fX0saXNJbml0aWFsaXplZDpmdW5jdGlvbigpe3Jl dHVybiAhIWMuX2luaXRpYWxpemVkO30saW5pdDpmdW5jdGlvbigpe2lmKCFiLkFM TE9XX1RSQU5TSVRJT05fSU5fSUZSQU1FJiZ3aW5kb3chPXdpbmRvdy50b3ApcmV0 dXJuO2lmKGMuX2luaXRpYWxpemVkKXJldHVybiBjO3ZhciBsPWQoKTt2YXIgaz1s LmdldEZyYWdtZW50KCl8fCcnO2lmKGsuY2hhckF0KDApPT09JyEnKXtrPWsuc3Vi c3RyKDEpO2wuc2V0RnJhZ21lbnQoayk7fWlmKGQuZ2V0UmVxdWVzdFVSSShmYWxz ZSkuZ2V0UHJvdG9jb2woKS50b0xvd2VyQ2FzZSgpPT0naHR0cHMnKWMuX0lGUkFN RV9CQVNFX1VSST0naHR0cHM6Ly9zLXN0YXRpYy5hay5mYWNlYm9vay5jb20vY29t bW9uL2hpc3RvcnlfbWFuYWdlci5waHAnO2UoYyx7X2luaXRpYWxpemVkOnRydWUs ZnJhZ21lbnQ6ayxvcmlnX2ZyYWdtZW50OmssaGlzdG9yeTpbbF0sY2FsbGJhY2tz OltdLGxhc3RDaGFuZ2VkOkRhdGUubm93KCksY2Fub25pY2FsOmQoJyMnKSxmcmFn bWVudFRpbWVvdXQ6bnVsbCx1c2VyOjAsaWZyYW1lVGltZW91dDpudWxsLGlmcmFt ZVF1ZXVlOltdLGVuYWJsZWQ6dHJ1ZSxkZWJ1ZzpiYWdvZmhvbGRpbmd9KTtpZih3 aW5kb3cuaGlzdG9yeSYmaGlzdG9yeS5wdXNoU3RhdGUpe3RoaXMubGFzdFVSST1k b2N1bWVudC5VUkw7d2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKHRoaXMubGFz dFVSSSxudWxsKTtFdmVudC5saXN0ZW4od2luZG93LCdwb3BzdGF0ZScsZnVuY3Rp b24obSl7aWYobSYmbS5zdGF0ZSYmYy5sYXN0VVJJIT1tLnN0YXRlKXtjLmxhc3RV Ukk9bS5zdGF0ZTtjLmxhc3RDaGFuZ2VkPURhdGUubm93KCk7Yy5ub3RpZnkoZCht LnN0YXRlKS5nZXRVbnF1YWxpZmllZFVSSSgpLnRvU3RyaW5nKCkpO319LmJpbmQo YykpO2lmKGouc2FmYXJpKCk8NTM0fHxqLmNocm9tZSgpPD0xMyl7c2V0SW50ZXJ2 YWwoYy5jaGVja1VSSSw0MixmYWxzZSk7Yy5fdXBkYXRlUmVmZXJlclVSSSh0aGlz Lmxhc3RVUkkpO31yZXR1cm4gYzt9Yy5fdXBkYXRlUmVmZXJlclVSSShkLmdldFJl cXVlc3RVUkkoZmFsc2UpKTtpZihqLnNhZmFyaSgpPDUwMHx8ai5maXJlZm94KCk8 Mil7Yy5lbmFibGVkPWZhbHNlO3JldHVybiBjO31pZihqLmllKCk8OCl7Yy5pZnJh bWU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7ZShjLmlmcmFtZS5z dHlsZSx7d2lkdGg6JzAnLGhlaWdodDonMCcsZnJhbWVib3JkZXI6JzAnLGxlZnQ6 JzAnLHRvcDonMCcscG9zaXRpb246J2Fic29sdXRlJ30pO2MuX3NldElmcmFtZVNy Y0ZyYWdtZW50KGspO2RvY3VtZW50LmJvZHkuaW5zZXJ0QmVmb3JlKGMuaWZyYW1l LGRvY3VtZW50LmJvZHkuZmlyc3RDaGlsZCk7fWVsc2UgaWYoJ29uaGFzaGNoYW5n ZScgaW4gd2luZG93KXtFdmVudC5saXN0ZW4od2luZG93LCdoYXNoY2hhbmdlJyxm dW5jdGlvbigpe2MuY2hlY2tVUkkuYmluZChjKS5kZWZlcigpO30pO31lbHNlIHNl dEludGVydmFsKGMuY2hlY2tVUkksNDIsZmFsc2UpO3JldHVybiBjO30scmVnaXN0 ZXJVUklIYW5kbGVyOmZ1bmN0aW9uKGspe2MuY2FsbGJhY2tzLnB1c2goayk7cmV0 dXJuIGM7fSxzZXRDYW5vbmljYWxMb2NhdGlvbjpmdW5jdGlvbihrKXtjLmNhbm9u aWNhbD1kKGspO3JldHVybiBjO30sbm90aWZ5OmZ1bmN0aW9uKG0pe2lmKG09PWMu b3JpZ19mcmFnbWVudCltPWMuY2Fub25pY2FsLmdldEZyYWdtZW50KCk7Zm9yKHZh ciBsPTA7bDxjLmNhbGxiYWNrcy5sZW5ndGg7bCsrKXRyeXtpZihjLmNhbGxiYWNr c1tsXShtKSlyZXR1cm4gdHJ1ZTt9Y2F0Y2goayl7fXJldHVybiBmYWxzZTt9LGNo ZWNrVVJJOmZ1bmN0aW9uKCl7aWYoRGF0ZS5ub3coKS1jLmxhc3RDaGFuZ2VkPDQw MClyZXR1cm47aWYod2luZG93Lmhpc3RvcnkmJmhpc3RvcnkucHVzaFN0YXRlKXt2 YXIgbj1kKGRvY3VtZW50LlVSTCkucmVtb3ZlUXVlcnlEYXRhKCdyZWYnKS50b1N0 cmluZygpO3ZhciBtPWQoYy5sYXN0VVJJKS5yZW1vdmVRdWVyeURhdGEoJ3JlZicp LnRvU3RyaW5nKCk7aWYobiE9bSl7Yy5sYXN0Q2hhbmdlZD1EYXRlLm5vdygpO2Mu bGFzdFVSST1uO2lmKGouc2FmYXJpKCk8NTM0KWMuX3VwZGF0ZVJlZmVyZXJVUkko bik7Yy5ub3RpZnkoZChuKS5nZXRVbnF1YWxpZmllZFVSSSgpLnRvU3RyaW5nKCkp O31yZXR1cm47fWlmKGouaWUoKTw4JiZjLmlmcmFtZVF1ZXVlLmxlbmd0aClyZXR1 cm47aWYoai5zYWZhcmkoKSYmd2luZG93Lmhpc3RvcnkubGVuZ3RoPT0yMDApe2lm KCFjLndhcm5lZCljLndhcm5lZD10cnVlO3JldHVybjt9dmFyIGs9ZCgpLmdldEZy YWdtZW50KCk7aWYoay5jaGFyQXQoMCk9PSchJylrPWsuc3Vic3RyKDEpO2lmKGou aWUoKTw4KWs9Yy5nZXRJZnJhbWVTcmNGcmFnbWVudCgpO2s9ay5yZXBsYWNlKC8l MjMvZywnIycpO2lmKGshPWMuZnJhZ21lbnQucmVwbGFjZSgvJTIzL2csJyMnKSl7 Yy5kZWJ1ZyhbaywnIHZzICcsYy5mcmFnbWVudCwnd2hsOiAnLHdpbmRvdy5oaXN0 b3J5Lmxlbmd0aCwnUUhMOiAnLGMuaGlzdG9yeS5sZW5ndGhdLmpvaW4oJyAnKSk7 Zm9yKHZhciBsPWMuaGlzdG9yeS5sZW5ndGgtMTtsPj0wOy0tbClpZihjLmhpc3Rv cnlbbF0uZ2V0RnJhZ21lbnQoKS5yZXBsYWNlKC8lMjMvZywnIycpPT1rKWJyZWFr OysrYy51c2VyO2lmKGw+PTApe2MuZ28obC1jLmN1cnJlbnQpO31lbHNlIGMuZ28o JyMnK2spOy0tYy51c2VyO319LF91cGRhdGVSZWZlcmVyVVJJOmZ1bmN0aW9uKG8p e289by50b1N0cmluZygpO2lmKG8uY2hhckF0KDApIT0nLycmJm8uaW5kZXhPZign Ly8nKT09LTEpcmV0dXJuO3ZhciBuPW5ldyBkKHdpbmRvdy5sb2NhdGlvbik7aWYo bi5pc0ZhY2Vib29rVVJJKCkpe3ZhciBrPW4uZ2V0UGF0aCgpK3dpbmRvdy5sb2Nh dGlvbi5zZWFyY2g7fWVsc2UgdmFyIGs9Jyc7dmFyIG09ZChvKS5nZXRRdWFsaWZp ZWRVUkkoKS5zZXRGcmFnbWVudChrKS50b1N0cmluZygpO3ZhciBsPTIwNDg7aWYo bS5sZW5ndGg+bCltPW0uc3Vic3RyaW5nKDAsbCkrJy4uLic7YS5zZXQoJ3gtcmVm ZXJlcicsbSk7fSxnbzpmdW5jdGlvbihtLG8scCl7aWYod2luZG93Lmhpc3Rvcnkm Jmhpc3RvcnkucHVzaFN0YXRlKXtvfHx0eXBlb2YobSk9PSdudW1iZXInO3ZhciBy PWQobSkucmVtb3ZlUXVlcnlEYXRhKCdyZWYnKS50b1N0cmluZygpO2MubGFzdENo YW5nZWQ9RGF0ZS5ub3coKTt0aGlzLmxhc3RVUkk9cjtpZihwKXt3aW5kb3cuaGlz dG9yeS5yZXBsYWNlU3RhdGUobSxudWxsLHIpO31lbHNlIHdpbmRvdy5oaXN0b3J5 LnB1c2hTdGF0ZShtLG51bGwscik7aWYoai5zYWZhcmkoKTw1MzQpYy5fdXBkYXRl UmVmZXJlclVSSShtKTtyZXR1cm4gZmFsc2U7fWMuZGVidWcoJ2dvOiAnK20pO2lm KG89PT11bmRlZmluZWQpbz10cnVlO2lmKCFjLmVuYWJsZWQpaWYoIW8pcmV0dXJu IGZhbHNlO2lmKHR5cGVvZihtKT09J251bWJlcicpe2lmKCFtKXJldHVybiBmYWxz ZTt2YXIgbD1tK2MuY3VycmVudDt2YXIgbj1NYXRoLm1heCgwLE1hdGgubWluKGMu aGlzdG9yeS5sZW5ndGgtMSxsKSk7Yy5jdXJyZW50PW47bD1jLmhpc3Rvcnlbbl0u Z2V0RnJhZ21lbnQoKXx8Yy5vcmlnX2ZyYWdtZW50O2w9ZChsKS5yZW1vdmVRdWVy eURhdGEoJ3JlZicpLmdldFVucXVhbGlmaWVkVVJJKCkudG9TdHJpbmcoKTtjLmZy YWdtZW50PWw7Yy5sYXN0Q2hhbmdlZD1EYXRlLm5vdygpO2lmKGouaWUoKTw4KXtp ZihjLmZyYWdtZW50VGltZW91dCljbGVhclRpbWVvdXQoYy5mcmFnbWVudFRpbWVv dXQpO2MuX3RlbXBvcmFyeV9mcmFnbWVudD1sO2MuZnJhZ21lbnRUaW1lb3V0PXNl dFRpbWVvdXQoZnVuY3Rpb24oKXt3aW5kb3cubG9jYXRpb24uaGFzaD0nIyEnK2w7 ZGVsZXRlIGMuX3RlbXBvcmFyeV9mcmFnbWVudDt9LDc1MCxmYWxzZSk7aWYoIWMu dXNlciljLm5leHRmcmFtZShsLHApO31lbHNlIGlmKCFjLnVzZXIpZ29fb3JfcmVw bGFjZSh3aW5kb3cubG9jYXRpb24sd2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQo JyMnKVswXSsnIyEnK2wscCk7aWYobyljLm5vdGlmeShsKTtjLl91cGRhdGVSZWZl cmVyVVJJKGwpO3JldHVybiBmYWxzZTt9bT1kKG0pO2lmKG0uZ2V0RG9tYWluKCk9 PWQoKS5nZXREb21haW4oKSltPWQoJyMnK20uZ2V0VW5xdWFsaWZpZWRVUkkoKSk7 dmFyIGs9Yy5oaXN0b3J5W2MuY3VycmVudF0uZ2V0RnJhZ21lbnQoKTt2YXIgcT1t LmdldEZyYWdtZW50KCk7aWYocT09a3x8KGs9PWMub3JpZ19mcmFnbWVudCYmcT09 Yy5jYW5vbmljYWwuZ2V0RnJhZ21lbnQoKSkpe2lmKG8pYy5ub3RpZnkocSk7Yy5f dXBkYXRlUmVmZXJlclVSSShxKTtyZXR1cm4gZmFsc2U7fWlmKHApYy5jdXJyZW50 LS07dmFyIHM9KGMuaGlzdG9yeS5sZW5ndGgtYy5jdXJyZW50KS0xO2MuaGlzdG9y eS5zcGxpY2UoYy5jdXJyZW50KzEscyk7Yy5oaXN0b3J5LnB1c2goZChtKSk7cmV0 dXJuIGMuZ28oMSxvLHApO30sZ2V0Q3VycmVudEZyYWdtZW50OmZ1bmN0aW9uKCl7 dmFyIGs9Yy5fdGVtcG9yYXJ5X2ZyYWdtZW50IT09dW5kZWZpbmVkP2MuX3RlbXBv cmFyeV9mcmFnbWVudDpkLmdldFJlcXVlc3RVUkkoZmFsc2UpLmdldEZyYWdtZW50 KCk7cmV0dXJuIGs9PWMub3JpZ19mcmFnbWVudD9jLmNhbm9uaWNhbC5nZXRGcmFn bWVudCgpOms7fX07aC5leHBvcnRzPWM7fSk7Cl9fZSgiYW5pbWF0aW9uIixbImNz cyJdLGZ1bmN0aW9uKGQsZixlLGMpe3ZhciBhPWYoJ2NzcycpO2Z1bmN0aW9uIGIo Zyl7aWYoZz09dW5kZWZpbmVkKXJldHVybjtpZihkPT10aGlzKXtyZXR1cm4gbmV3 IGIoZyk7fWVsc2V7dGhpcy5vYmo9Zzt0aGlzLl9yZXNldF9zdGF0ZSgpO3RoaXMu cXVldWU9W107dGhpcy5sYXN0X2F0dHI9bnVsbDt9fWIucmVzb2x1dGlvbj0yMDti Lm9mZnNldD0wO2IucHJvdG90eXBlLl9yZXNldF9zdGF0ZT1mdW5jdGlvbigpe3Ro aXMuc3RhdGU9e2F0dHJzOnt9LGR1cmF0aW9uOjUwMH07fTtiLnByb3RvdHlwZS5z dG9wPWZ1bmN0aW9uKCl7dGhpcy5fcmVzZXRfc3RhdGUoKTt0aGlzLnF1ZXVlPVtd O3JldHVybiB0aGlzO307Yi5wcm90b3R5cGUuX2J1aWxkX2NvbnRhaW5lcj1mdW5j dGlvbigpe2lmKHRoaXMuY29udGFpbmVyX2Rpdil7dGhpcy5fcmVmcmVzaF9jb250 YWluZXIoKTtyZXR1cm47fWlmKHRoaXMub2JqLmZpcnN0Q2hpbGQmJnRoaXMub2Jq LmZpcnN0Q2hpbGQuX19hbmltYXRpb25fcmVmcyl7dGhpcy5jb250YWluZXJfZGl2 PXRoaXMub2JqLmZpcnN0Q2hpbGQ7dGhpcy5jb250YWluZXJfZGl2Ll9fYW5pbWF0 aW9uX3JlZnMrKzt0aGlzLl9yZWZyZXNoX2NvbnRhaW5lcigpO3JldHVybjt9dmFy IGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7aC5zdHlsZS5wYWRkaW5n PScwcHgnO2guc3R5bGUubWFyZ2luPScwcHgnO2guc3R5bGUuYm9yZGVyPScwcHgn O2guX19hbmltYXRpb25fcmVmcz0xO3ZhciBnPXRoaXMub2JqLmNoaWxkTm9kZXM7 d2hpbGUoZy5sZW5ndGgpaC5hcHBlbmRDaGlsZChnWzBdKTt0aGlzLm9iai5hcHBl bmRDaGlsZChoKTt0aGlzLl9vcmlnX292ZXJmbG93PXRoaXMub2JqLnN0eWxlLm92 ZXJmbG93O3RoaXMub2JqLnN0eWxlLm92ZXJmbG93PSdoaWRkZW4nO3RoaXMuY29u dGFpbmVyX2Rpdj1oO3RoaXMuX3JlZnJlc2hfY29udGFpbmVyKCk7fTtiLnByb3Rv dHlwZS5fcmVmcmVzaF9jb250YWluZXI9ZnVuY3Rpb24oKXt0aGlzLmNvbnRhaW5l cl9kaXYuc3R5bGUuaGVpZ2h0PSdhdXRvJzt0aGlzLmNvbnRhaW5lcl9kaXYuc3R5 bGUud2lkdGg9J2F1dG8nO3RoaXMuY29udGFpbmVyX2Rpdi5zdHlsZS5oZWlnaHQ9 dGhpcy5jb250YWluZXJfZGl2Lm9mZnNldEhlaWdodCsncHgnO3RoaXMuY29udGFp bmVyX2Rpdi5zdHlsZS53aWR0aD10aGlzLmNvbnRhaW5lcl9kaXYub2Zmc2V0V2lk dGgrJ3B4Jzt9O2IucHJvdG90eXBlLl9kZXN0cm95X2NvbnRhaW5lcj1mdW5jdGlv bigpe2lmKCF0aGlzLmNvbnRhaW5lcl9kaXYpcmV0dXJuO2lmKCEtLXRoaXMuY29u dGFpbmVyX2Rpdi5fX2FuaW1hdGlvbl9yZWZzKXt2YXIgZz10aGlzLmNvbnRhaW5l cl9kaXYuY2hpbGROb2Rlczt3aGlsZShnLmxlbmd0aCl0aGlzLm9iai5hcHBlbmRD aGlsZChnWzBdKTt0aGlzLm9iai5yZW1vdmVDaGlsZCh0aGlzLmNvbnRhaW5lcl9k aXYpO310aGlzLmNvbnRhaW5lcl9kaXY9bnVsbDt0aGlzLm9iai5zdHlsZS5vdmVy Zmxvdz10aGlzLl9vcmlnX292ZXJmbG93O307Yi5BVFRSX1RPPTE7Yi5BVFRSX0JZ PTI7Yi5BVFRSX0ZST009MztiLnByb3RvdHlwZS5fYXR0cj1mdW5jdGlvbihnLGos aSl7Zz1nLnJlcGxhY2UoLy1bYS16XS9naSxmdW5jdGlvbihrKXtyZXR1cm4gay5z dWJzdHJpbmcoMSkudG9VcHBlckNhc2UoKTt9KTt2YXIgaD1mYWxzZTtzd2l0Y2go Zyl7Y2FzZSAnYmFja2dyb3VuZCc6dGhpcy5fYXR0cignYmFja2dyb3VuZENvbG9y JyxqLGkpO3JldHVybiB0aGlzO2Nhc2UgJ21hcmdpbic6aj1iLnBhcnNlX2dyb3Vw KGopO3RoaXMuX2F0dHIoJ21hcmdpbkJvdHRvbScsalswXSxpKTt0aGlzLl9hdHRy KCdtYXJnaW5MZWZ0JyxqWzFdLGkpO3RoaXMuX2F0dHIoJ21hcmdpblJpZ2h0Jyxq WzJdLGkpO3RoaXMuX2F0dHIoJ21hcmdpblRvcCcsalszXSxpKTtyZXR1cm4gdGhp cztjYXNlICdwYWRkaW5nJzpqPWIucGFyc2VfZ3JvdXAoaik7dGhpcy5fYXR0cign cGFkZGluZ0JvdHRvbScsalswXSxpKTt0aGlzLl9hdHRyKCdwYWRkaW5nTGVmdCcs alsxXSxpKTt0aGlzLl9hdHRyKCdwYWRkaW5nUmlnaHQnLGpbMl0saSk7dGhpcy5f YXR0cigncGFkZGluZ1RvcCcsalszXSxpKTtyZXR1cm4gdGhpcztjYXNlICdiYWNr Z3JvdW5kQ29sb3InOmNhc2UgJ2JvcmRlckNvbG9yJzpjYXNlICdjb2xvcic6aj1i LnBhcnNlX2NvbG9yKGopO2JyZWFrO2Nhc2UgJ29wYWNpdHknOmo9cGFyc2VGbG9h dChqLDEwKTticmVhaztjYXNlICdoZWlnaHQnOmNhc2UgJ3dpZHRoJzppZihqPT0n YXV0bycpe2g9dHJ1ZTt9ZWxzZSBqPXBhcnNlSW50KGosMTApO2JyZWFrO2Nhc2Ug J2JvcmRlcldpZHRoJzpjYXNlICdsaW5lSGVpZ2h0JzpjYXNlICdmb250U2l6ZSc6 Y2FzZSAnbWFyZ2luQm90dG9tJzpjYXNlICdtYXJnaW5MZWZ0JzpjYXNlICdtYXJn aW5SaWdodCc6Y2FzZSAnbWFyZ2luVG9wJzpjYXNlICdwYWRkaW5nQm90dG9tJzpj YXNlICdwYWRkaW5nTGVmdCc6Y2FzZSAncGFkZGluZ1JpZ2h0JzpjYXNlICdwYWRk aW5nVG9wJzpjYXNlICdib3R0b20nOmNhc2UgJ2xlZnQnOmNhc2UgJ3JpZ2h0Jzpj YXNlICd0b3AnOmNhc2UgJ3Njcm9sbFRvcCc6Y2FzZSAnc2Nyb2xsTGVmdCc6aj1w YXJzZUludChqLDEwKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihnKycg aXMgbm90IGEgc3VwcG9ydGVkIGF0dHJpYnV0ZSEnKTt9aWYodGhpcy5zdGF0ZS5h dHRyc1tnXT09PXVuZGVmaW5lZCl0aGlzLnN0YXRlLmF0dHJzW2ddPXt9O2lmKGgp dGhpcy5zdGF0ZS5hdHRyc1tnXS5hdXRvPXRydWU7c3dpdGNoKGkpe2Nhc2UgYi5B VFRSX0ZST006dGhpcy5zdGF0ZS5hdHRyc1tnXS5zdGFydD1qO2JyZWFrO2Nhc2Ug Yi5BVFRSX0JZOnRoaXMuc3RhdGUuYXR0cnNbZ10uYnk9dHJ1ZTtjYXNlIGIuQVRU Ul9UTzp0aGlzLnN0YXRlLmF0dHJzW2ddLnZhbHVlPWo7YnJlYWs7fX07Yi5fZ2V0 X2JveF93aWR0aD1mdW5jdGlvbihpKXt2YXIgaj1wYXJzZUludChhLmdldFN0eWxl KGksJ3BhZGRpbmdMZWZ0JyksMTApLGs9cGFyc2VJbnQoYS5nZXRTdHlsZShpLCdw YWRkaW5nUmlnaHQnKSwxMCksZz1wYXJzZUludChhLmdldFN0eWxlKGksJ2JvcmRl ckxlZnRXaWR0aCcpLDEwKSxoPXBhcnNlSW50KGEuZ2V0U3R5bGUoaSwnYm9yZGVy UmlnaHRXaWR0aCcpLDEwKTtyZXR1cm4gaS5vZmZzZXRXaWR0aC0oaj9qOjApLShr P2s6MCktKGc/ZzowKS0oaD9oOjApO307Yi5fZ2V0X2JveF9oZWlnaHQ9ZnVuY3Rp b24oaSl7dmFyIGs9cGFyc2VJbnQoYS5nZXRTdHlsZShpLCdwYWRkaW5nVG9wJyks MTApLGo9cGFyc2VJbnQoYS5nZXRTdHlsZShpLCdwYWRkaW5nQm90dG9tJyksMTAp LGc9cGFyc2VJbnQoYS5nZXRTdHlsZShpLCdib3JkZXJUb3BXaWR0aCcpLDEwKSxo PXBhcnNlSW50KGEuZ2V0U3R5bGUoaSwnYm9yZGVyQm90dG9tV2lkdGgnKSwxMCk7 cmV0dXJuIGkub2Zmc2V0SGVpZ2h0LShrP2s6MCktKGo/ajowKS0oZz9nOjApLSho P2g6MCk7fTtiLnByb3RvdHlwZS50bz1mdW5jdGlvbihnLGgpe2lmKGg9PT11bmRl ZmluZWQpe3RoaXMuX2F0dHIodGhpcy5sYXN0X2F0dHIsZyxiLkFUVFJfVE8pO31l bHNle3RoaXMuX2F0dHIoZyxoLGIuQVRUUl9UTyk7dGhpcy5sYXN0X2F0dHI9Zzt9 cmV0dXJuIHRoaXM7fTtiLnByb3RvdHlwZS5ieT1mdW5jdGlvbihnLGgpe2lmKGg9 PT11bmRlZmluZWQpe3RoaXMuX2F0dHIodGhpcy5sYXN0X2F0dHIsZyxiLkFUVFJf QlkpO31lbHNle3RoaXMuX2F0dHIoZyxoLGIuQVRUUl9CWSk7dGhpcy5sYXN0X2F0 dHI9Zzt9cmV0dXJuIHRoaXM7fTtiLnByb3RvdHlwZS5mcm9tPWZ1bmN0aW9uKGcs aCl7aWYoaD09PXVuZGVmaW5lZCl7dGhpcy5fYXR0cih0aGlzLmxhc3RfYXR0cixn LGIuQVRUUl9GUk9NKTt9ZWxzZXt0aGlzLl9hdHRyKGcsaCxiLkFUVFJfRlJPTSk7 dGhpcy5sYXN0X2F0dHI9Zzt9cmV0dXJuIHRoaXM7fTtiLnByb3RvdHlwZS5kdXJh dGlvbj1mdW5jdGlvbihnKXt0aGlzLnN0YXRlLmR1cmF0aW9uPWc/ZzowO3JldHVy biB0aGlzO307Yi5wcm90b3R5cGUuY2hlY2twb2ludD1mdW5jdGlvbihoLGcpe2lm KGg9PT11bmRlZmluZWQpaD0xO3RoaXMuc3RhdGUuY2hlY2twb2ludD1oO3RoaXMu cXVldWUucHVzaCh0aGlzLnN0YXRlKTt0aGlzLl9yZXNldF9zdGF0ZSgpO3RoaXMu c3RhdGUuY2hlY2twb2ludGNiPWc7cmV0dXJuIHRoaXM7fTtiLnByb3RvdHlwZS5i bGluZD1mdW5jdGlvbigpe3RoaXMuc3RhdGUuYmxpbmQ9dHJ1ZTtyZXR1cm4gdGhp czt9O2IucHJvdG90eXBlLmhpZGU9ZnVuY3Rpb24oKXt0aGlzLnN0YXRlLmhpZGU9 dHJ1ZTtyZXR1cm4gdGhpczt9O2IucHJvdG90eXBlLnNob3c9ZnVuY3Rpb24oKXt0 aGlzLnN0YXRlLnNob3c9dHJ1ZTtyZXR1cm4gdGhpczt9O2IucHJvdG90eXBlLmVh c2U9ZnVuY3Rpb24oZyl7dGhpcy5zdGF0ZS5lYXNlPWc7cmV0dXJuIHRoaXM7fTti LnByb3RvdHlwZS5nbz1mdW5jdGlvbigpe3ZhciBoPShuZXcgRGF0ZSgpKS5nZXRU aW1lKCk7dGhpcy5xdWV1ZS5wdXNoKHRoaXMuc3RhdGUpO2Zvcih2YXIgZz0wO2c8 dGhpcy5xdWV1ZS5sZW5ndGg7ZysrKXt0aGlzLnF1ZXVlW2ddLnN0YXJ0PWgtYi5v ZmZzZXQ7aWYodGhpcy5xdWV1ZVtnXS5jaGVja3BvaW50KWgrPXRoaXMucXVldWVb Z10uY2hlY2twb2ludCp0aGlzLnF1ZXVlW2ddLmR1cmF0aW9uO31iLnB1c2godGhp cyk7cmV0dXJuIHRoaXM7fTtiLnByb3RvdHlwZS5fc2hvdz1mdW5jdGlvbigpe2Eu c2hvdyh0aGlzLm9iaik7fTtiLnByb3RvdHlwZS5faGlkZT1mdW5jdGlvbigpe2Eu aGlkZSh0aGlzLm9iaik7fTtiLnByb3RvdHlwZS5fZnJhbWU9ZnVuY3Rpb24ocyl7 dmFyIGk9dHJ1ZTt2YXIgcj1mYWxzZTt2YXIgdT1mYWxzZTt2YXIgdDtmdW5jdGlv biBqKHYpe3JldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbdl18fGRvY3Vt ZW50LmJvZHlbdl07fWZvcih2YXIgaz0wO2s8dGhpcy5xdWV1ZS5sZW5ndGg7aysr KXt2YXIgaD10aGlzLnF1ZXVlW2tdO2lmKGguc3RhcnQ+cyl7aT1mYWxzZTtjb250 aW51ZTt9aWYoaC5jaGVja3BvaW50Y2Ipe3RoaXMuX2NhbGxiYWNrKGguY2hlY2tw b2ludGNiLHMtaC5zdGFydCk7aC5jaGVja3BvaW50Y2I9bnVsbDt9aWYoaC5zdGFy dGVkPT09dW5kZWZpbmVkKXtpZihoLnNob3cpdGhpcy5fc2hvdygpO2Zvcih2YXIg ZyBpbiBoLmF0dHJzKXtpZihoLmF0dHJzW2ddLnN0YXJ0IT09dW5kZWZpbmVkKWNv bnRpbnVlO3N3aXRjaChnKXtjYXNlICdiYWNrZ3JvdW5kQ29sb3InOmNhc2UgJ2Jv cmRlckNvbG9yJzpjYXNlICdjb2xvcic6dD1iLnBhcnNlX2NvbG9yKGEuZ2V0U3R5 bGUodGhpcy5vYmosZz09J2JvcmRlckNvbG9yJz8nYm9yZGVyTGVmdENvbG9yJzpn KSk7aWYoaC5hdHRyc1tnXS5ieSl7aC5hdHRyc1tnXS52YWx1ZVswXT1NYXRoLm1p bigyNTUsTWF0aC5tYXgoMCxoLmF0dHJzW2ddLnZhbHVlWzBdK3RbMF0pKTtoLmF0 dHJzW2ddLnZhbHVlWzFdPU1hdGgubWluKDI1NSxNYXRoLm1heCgwLGguYXR0cnNb Z10udmFsdWVbMV0rdFsxXSkpO2guYXR0cnNbZ10udmFsdWVbMl09TWF0aC5taW4o MjU1LE1hdGgubWF4KDAsaC5hdHRyc1tnXS52YWx1ZVsyXSt0WzJdKSk7fWJyZWFr O2Nhc2UgJ29wYWNpdHknOnQ9YS5nZXRPcGFjaXR5KHRoaXMub2JqKTtpZihoLmF0 dHJzW2ddLmJ5KWguYXR0cnNbZ10udmFsdWU9TWF0aC5taW4oMSxNYXRoLm1heCgw LGguYXR0cnNbZ10udmFsdWUrdCkpO2JyZWFrO2Nhc2UgJ2hlaWdodCc6dD1iLl9n ZXRfYm94X2hlaWdodCh0aGlzLm9iaik7aWYoaC5hdHRyc1tnXS5ieSloLmF0dHJz W2ddLnZhbHVlKz10O2JyZWFrO2Nhc2UgJ3dpZHRoJzp0PWIuX2dldF9ib3hfd2lk dGgodGhpcy5vYmopO2lmKGguYXR0cnNbZ10uYnkpaC5hdHRyc1tnXS52YWx1ZSs9 dDticmVhaztjYXNlICdzY3JvbGxMZWZ0JzpjYXNlICdzY3JvbGxUb3AnOnQ9KHRo aXMub2JqPT09ZG9jdW1lbnQuYm9keSk/aihnKTp0aGlzLm9ialtnXTtpZihoLmF0 dHJzW2ddLmJ5KWguYXR0cnNbZ10udmFsdWUrPXQ7aFsnbGFzdCcrZ109dDticmVh aztkZWZhdWx0OnQ9cGFyc2VJbnQoYS5nZXRTdHlsZSh0aGlzLm9iaixnKSwxMCl8 fDA7aWYoaC5hdHRyc1tnXS5ieSloLmF0dHJzW2ddLnZhbHVlKz10O2JyZWFrO31o LmF0dHJzW2ddLnN0YXJ0PXQ7fWlmKChoLmF0dHJzLmhlaWdodCYmaC5hdHRycy5o ZWlnaHQuYXV0byl8fChoLmF0dHJzLndpZHRoJiZoLmF0dHJzLndpZHRoLmF1dG8p KXtpZih1YS5maXJlZm94KCk8Myl1PXRydWU7dGhpcy5fZGVzdHJveV9jb250YWlu ZXIoKTtmb3IodmFyIGcgaW4ge2hlaWdodDoxLHdpZHRoOjEsZm9udFNpemU6MSxi b3JkZXJMZWZ0V2lkdGg6MSxib3JkZXJSaWdodFdpZHRoOjEsYm9yZGVyVG9wV2lk dGg6MSxib3JkZXJCb3R0b21XaWR0aDoxLHBhZGRpbmdMZWZ0OjEscGFkZGluZ1Jp Z2h0OjEscGFkZGluZ1RvcDoxLHBhZGRpbmdCb3R0b206MX0paWYoaC5hdHRyc1tn XSl0aGlzLm9iai5zdHlsZVtnXT1oLmF0dHJzW2ddLnZhbHVlKyh0eXBlb2YgaC5h dHRyc1tnXS52YWx1ZT09J251bWJlcic/J3B4JzonJyk7aWYoaC5hdHRycy5oZWln aHQmJmguYXR0cnMuaGVpZ2h0LmF1dG8paC5hdHRycy5oZWlnaHQudmFsdWU9Yi5f Z2V0X2JveF9oZWlnaHQodGhpcy5vYmopO2lmKGguYXR0cnMud2lkdGgmJmguYXR0 cnMud2lkdGguYXV0byloLmF0dHJzLndpZHRoLnZhbHVlPWIuX2dldF9ib3hfd2lk dGgodGhpcy5vYmopO31oLnN0YXJ0ZWQ9dHJ1ZTtpZihoLmJsaW5kKXRoaXMuX2J1 aWxkX2NvbnRhaW5lcigpO312YXIgbz0ocy1oLnN0YXJ0KS9oLmR1cmF0aW9uO2lm KG8+PTEpe289MTtpZihoLmhpZGUpdGhpcy5faGlkZSgpO31lbHNlIGk9ZmFsc2U7 dmFyIHE9aC5lYXNlP2guZWFzZShvKTpvO2lmKCFyJiZvIT0xJiZoLmJsaW5kKXI9 dHJ1ZTtpZih1JiZ0aGlzLm9iai5wYXJlbnROb2RlKXt2YXIgcD10aGlzLm9iai5w YXJlbnROb2RlO3ZhciBuPXRoaXMub2JqLm5leHRTaWJsaW5nO3AucmVtb3ZlQ2hp bGQodGhpcy5vYmopO31mb3IodmFyIGcgaW4gaC5hdHRycylzd2l0Y2goZyl7Y2Fz ZSAnYmFja2dyb3VuZENvbG9yJzpjYXNlICdib3JkZXJDb2xvcic6Y2FzZSAnY29s b3InOnRoaXMub2JqLnN0eWxlW2ddPSdyZ2IoJytiLmNhbGNfdHdlZW4ocSxoLmF0 dHJzW2ddLnN0YXJ0WzBdLGguYXR0cnNbZ10udmFsdWVbMF0sdHJ1ZSkrJywnK2Iu Y2FsY190d2VlbihxLGguYXR0cnNbZ10uc3RhcnRbMV0saC5hdHRyc1tnXS52YWx1 ZVsxXSx0cnVlKSsnLCcrYi5jYWxjX3R3ZWVuKHEsaC5hdHRyc1tnXS5zdGFydFsy XSxoLmF0dHJzW2ddLnZhbHVlWzJdLHRydWUpKycpJzticmVhaztjYXNlICdvcGFj aXR5JzphLnNldFN0eWxlKHRoaXMub2JqLCdvcGFjaXR5JyxiLmNhbGNfdHdlZW4o cSxoLmF0dHJzW2ddLnN0YXJ0LGguYXR0cnNbZ10udmFsdWUpKTticmVhaztjYXNl ICdoZWlnaHQnOmNhc2UgJ3dpZHRoJzp0aGlzLm9iai5zdHlsZVtnXT1xPT0xJiZo LmF0dHJzW2ddLmF1dG8/J2F1dG8nOmIuY2FsY190d2VlbihxLGguYXR0cnNbZ10u c3RhcnQsaC5hdHRyc1tnXS52YWx1ZSx0cnVlKSsncHgnO2JyZWFrO2Nhc2UgJ3Nj cm9sbExlZnQnOmNhc2UgJ3Njcm9sbFRvcCc6dmFyIGw9dGhpcy5vYmo9PT1kb2N1 bWVudC5ib2R5O3Q9bD9qKGcpOnRoaXMub2JqW2ddO2lmKGhbJ2xhc3QnK2ddIT09 dCl7ZGVsZXRlIGguYXR0cnNbZ107fWVsc2V7dmFyIG09Yi5jYWxjX3R3ZWVuKHEs aC5hdHRyc1tnXS5zdGFydCxoLmF0dHJzW2ddLnZhbHVlLHRydWUpO2lmKCFsKXtt PXRoaXMub2JqW2ddPW07fWVsc2V7aWYoZz09J3Njcm9sbExlZnQnKXtkLnNjcm9s bFRvKG0saignc2Nyb2xsVG9wJykpO31lbHNlIGQuc2Nyb2xsVG8oaignc2Nyb2xs TGVmdCcpLG0pO209aihnKTt9aFsnbGFzdCcrZ109bTt9YnJlYWs7ZGVmYXVsdDp0 aGlzLm9iai5zdHlsZVtnXT1iLmNhbGNfdHdlZW4ocSxoLmF0dHJzW2ddLnN0YXJ0 LGguYXR0cnNbZ10udmFsdWUsdHJ1ZSkrJ3B4JzticmVhazt9aWYobz09MSl7dGhp cy5xdWV1ZS5zcGxpY2Uoay0tLDEpO3RoaXMuX2NhbGxiYWNrKGgub25kb25lLHMt aC5zdGFydC1oLmR1cmF0aW9uKTt9fWlmKHUpcFtuPydpbnNlcnRCZWZvcmUnOidh cHBlbmRDaGlsZCddKHRoaXMub2JqLG4pO2lmKCFyJiZ0aGlzLmNvbnRhaW5lcl9k aXYpdGhpcy5fZGVzdHJveV9jb250YWluZXIoKTtyZXR1cm4gIWk7fTtiLnByb3Rv dHlwZS5vbmRvbmU9ZnVuY3Rpb24oZyl7dGhpcy5zdGF0ZS5vbmRvbmU9ZztyZXR1 cm4gdGhpczt9O2IucHJvdG90eXBlLl9jYWxsYmFjaz1mdW5jdGlvbihnLGgpe2lm KGcpe2Iub2Zmc2V0PWg7Zy5jYWxsKHRoaXMpO2Iub2Zmc2V0PTA7fX07Yi5jYWxj X3R3ZWVuPWZ1bmN0aW9uKGcsaCxpLGope3JldHVybiAoaj9wYXJzZUludDpwYXJz ZUZsb2F0KSgoaS1oKSpnK2gsMTApO307Yi5wYXJzZV9jb2xvcj1mdW5jdGlvbihn KXt2YXIgaD0vXiMoW2EtZjAtOV17MSwyfSkoW2EtZjAtOV17MSwyfSkoW2EtZjAt OV17MSwyfSkkL2kuZXhlYyhnKTtpZihoKXtyZXR1cm4gW3BhcnNlSW50KGhbMV0u bGVuZ3RoPT0xP2hbMV0raFsxXTpoWzFdLDE2KSxwYXJzZUludChoWzJdLmxlbmd0 aD09MT9oWzJdK2hbMl06aFsyXSwxNikscGFyc2VJbnQoaFszXS5sZW5ndGg9PTE/ aFszXStoWzNdOmhbM10sMTYpXTt9ZWxzZXt2YXIgaT0vXnJnYmE/ICpcKChbMC05 XSspLCAqKFswLTldKyksICooWzAtOV0rKSg/OiwgKihbMC05XSspKT9cKSQvLmV4 ZWMoZyk7aWYoaSl7aWYoaVs0XT09PScwJyl7cmV0dXJuIFsyNTUsMjU1LDI1NV07 fWVsc2UgcmV0dXJuIFtwYXJzZUludChpWzFdLDEwKSxwYXJzZUludChpWzJdLDEw KSxwYXJzZUludChpWzNdLDEwKV07fWVsc2UgaWYoZz09J3RyYW5zcGFyZW50Jyl7 cmV0dXJuIFsyNTUsMjU1LDI1NV07fWVsc2UgdGhyb3cgJ05hbWVkIGNvbG9yIGF0 dHJpYnV0ZXMgYXJlIG5vdCBzdXBwb3J0ZWQuJzt9fTtiLnBhcnNlX2dyb3VwPWZ1 bmN0aW9uKGcpe2c9dHJpbShnKS5zcGxpdCgvICsvKTtpZihnLmxlbmd0aD09NCl7 cmV0dXJuIGc7fWVsc2UgaWYoZy5sZW5ndGg9PTMpe3JldHVybiBbZ1swXSxnWzFd LGdbMl0sZ1sxXV07fWVsc2UgaWYoZy5sZW5ndGg9PTIpe3JldHVybiBbZ1swXSxn WzFdLGdbMF0sZ1sxXV07fWVsc2UgcmV0dXJuIFtnWzBdLGdbMF0sZ1swXSxnWzBd XTt9O2IucHVzaD1mdW5jdGlvbihnKXtpZighYi5hY3RpdmUpYi5hY3RpdmU9W107 Yi5hY3RpdmUucHVzaChnKTtpZihiLmFjdGl2ZS5sZW5ndGg9PT0xKXtpZighYi5y ZXF1ZXN0QW5pbWF0aW9uRnJhbWUpe3ZhciBoPWQucmVxdWVzdEFuaW1hdGlvbkZy YW1lfHxkLndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZXx8ZC5tb3pSZXF1ZXN0 QW5pbWF0aW9uRnJhbWU7aWYoaCliLnJlcXVlc3RBbmltYXRpb25GcmFtZT1oLmJp bmQoZCk7fWlmKGIucmVxdWVzdEFuaW1hdGlvbkZyYW1lKXtiLnJlcXVlc3RBbmlt YXRpb25GcmFtZShiLl9hbmltYXRlKTt9ZWxzZSBiLnRpbWVvdXQ9c2V0SW50ZXJ2 YWwoYi5fYW5pbWF0ZSxiLnJlc29sdXRpb24sZmFsc2UpO31pZihiLnJlcXVlc3RB bmltYXRpb25GcmFtZSliLl91cGRhdGVFbmRpbmdUaW1lcigpO2IuX2FuaW1hdGUo RGF0ZS5ub3coKSx0cnVlKTt9O2IuX3VwZGF0ZUVuZGluZ1RpbWVyPWZ1bmN0aW9u KCl7aWYoIWIucmVxdWVzdEFuaW1hdGlvbkZyYW1lKXRocm93IG5ldyBFcnJvcign RW5kaW5nIHRpbWVyIG9ubHkgdmFsaWQgd2l0aCByZXF1ZXN0QW5pbWF0aW9uRnJh bWUnKTt2YXIgaj0wO2Zvcih2YXIgZz0wO2c8Yi5hY3RpdmUubGVuZ3RoO2crKyl7 dmFyIGw9Yi5hY3RpdmVbZ107Zm9yKHZhciBrPTA7azxsLnF1ZXVlLmxlbmd0aDtr Kyspe3ZhciBoPWwucXVldWVba10uc3RhcnQrbC5xdWV1ZVtrXS5kdXJhdGlvbjtp ZihoPmopaj1oO319aWYoYi50aW1lb3V0KXtjbGVhclRpbWVvdXQoYi50aW1lb3V0 KTtkZWxldGUgYi50aW1lb3V0O312YXIgaT1EYXRlLm5vdygpO2lmKGo+aSliLnRp bWVvdXQ9c2V0VGltZW91dChiLl9hbmltYXRlLnNoaWVsZCgpLGotaSxmYWxzZSk7 fTtiLl9hbmltYXRlPWZ1bmN0aW9uKGosaSl7aj1qfHxEYXRlLm5vdygpO2Zvcih2 YXIgaD0oaT09PXRydWUpP2IuYWN0aXZlLmxlbmd0aC0xOjA7aDxiLmFjdGl2ZS5s ZW5ndGg7aCsrKXRyeXtpZighYi5hY3RpdmVbaF0uX2ZyYW1lKGopKWIuYWN0aXZl LnNwbGljZShoLS0sMSk7fWNhdGNoKGcpe2IuYWN0aXZlLnNwbGljZShoLS0sMSk7 fWlmKGIuYWN0aXZlLmxlbmd0aD09PTApe2lmKGIudGltZW91dCl7aWYoYi5yZXF1 ZXN0QW5pbWF0aW9uRnJhbWUpe2NsZWFyVGltZW91dChiLnRpbWVvdXQpO31lbHNl IGNsZWFySW50ZXJ2YWwoYi50aW1lb3V0KTtkZWxldGUgYi50aW1lb3V0O319ZWxz ZSBpZihiLnJlcXVlc3RBbmltYXRpb25GcmFtZSliLnJlcXVlc3RBbmltYXRpb25G cmFtZShiLl9hbmltYXRlKTt9O2IuZWFzZT17fTtiLmVhc2UuYmVnaW49ZnVuY3Rp b24oZyl7cmV0dXJuIE1hdGguc2luKE1hdGguUEkvMiooZy0xKSkrMTt9O2IuZWFz ZS5lbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIE1hdGguc2luKC41Kk1hdGguUEkqZyk7 fTtiLmVhc2UuYm90aD1mdW5jdGlvbihnKXtyZXR1cm4gLjUqTWF0aC5zaW4oTWF0 aC5QSSooZy0uNSkpKy41O307Yi5wcmVwZW5kSW5zZXJ0PWZ1bmN0aW9uKGgsZyl7 Yi5pbnNlcnQoaCxnLERPTS5wcmVwZW5kQ29udGVudCk7fTtiLmFwcGVuZEluc2Vy dD1mdW5jdGlvbihoLGcpe2IuaW5zZXJ0KGgsZyxET00uYXBwZW5kQ29udGVudCk7 fTtiLmluc2VydD1mdW5jdGlvbihpLGcsaCl7YS5zZXRTdHlsZShnLCdvcGFjaXR5 JywwKTtoKGksZyk7YihnKS5mcm9tKCdvcGFjaXR5JywwKS50bygnb3BhY2l0eScs MSkuZHVyYXRpb24oNDAwKS5nbygpO307ZC5hbmltYXRpb249ZS5leHBvcnRzPWI7 fSwzKTsKX19lKCJjc3Mtc3VwcG9ydCIsWyJjc3MtY29yZSIsImNvcHlQcm9wZXJ0 aWVzIl0sZnVuY3Rpb24oZCxmLGUsYyl7dmFyIGE9ZignY3NzLWNvcmUnKTt2YXIg Yj1mKCdjb3B5UHJvcGVydGllcycpO2IoYSx7c3VwcG9ydHNCb3JkZXJSYWRpdXM6 ZnVuY3Rpb24oKXt2YXIgaT1bJ0todG1sQm9yZGVyUmFkaXVzJywnT0JvcmRlclJh ZGl1cycsJ01vekJvcmRlclJhZGl1cycsJ1dlYmtpdEJvcmRlclJhZGl1cycsJ21z Qm9yZGVyUmFkaXVzJywnYm9yZGVyUmFkaXVzJ107dmFyIGo9ZmFsc2UsZz1kb2N1 bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtmb3IodmFyIGg9aS5sZW5ndGg7aD49 MDtoLS0paWYoaj1nLnN0eWxlW2lbaF1dIT09dW5kZWZpbmVkKWJyZWFrO2Euc3Vw cG9ydHNCb3JkZXJSYWRpdXM9YmFnb2Yoaik7cmV0dXJuIGo7fX0pO2UuZXhwb3J0 cz1hO30sMyk7Cl9fZSgiTG9jYWxlIixbImNzcyJdLGZ1bmN0aW9uKGQsZixlLGMp e3ZhciBhPWYoImNzcyIpO3ZhciBiPXtpc1JUTDpmdW5jdGlvbigpe3JldHVybiAn cnRsJz09PWEuZ2V0U3R5bGUoZG9jdW1lbnQuYm9keSwnZGlyZWN0aW9uJyk7fX07 ZS5leHBvcnRzPWI7fSk7Cl9fZSgiZ2V0T3ZlcmxheVpJbmRleCIsWyJjc3MiXSxm dW5jdGlvbihkLGYsZSxiKXt2YXIgYT1mKCJjc3MiKTtmdW5jdGlvbiBjKGksayl7 az1rfHxkb2N1bWVudC5ib2R5O3ZhciBoPVtdO3doaWxlKGkmJmkhPT1rKXtoLnB1 c2goaSk7aT1pLnBhcmVudE5vZGU7fWlmKGkhPT1rKXJldHVybiAwO2Zvcih2YXIg aj1oLmxlbmd0aC0xO2o+PTA7ai0tKXt2YXIgZz1oW2pdO2lmKGEuZ2V0U3R5bGUo ZywncG9zaXRpb24nKSE9J3N0YXRpYycpe3ZhciBsPXBhcnNlSW50KGEuZ2V0U3R5 bGUoZywnei1pbmRleCcpLDEwKTtpZighaXNOYU4obCkpcmV0dXJuIGw7fX1yZXR1 cm4gMDt9ZS5leHBvcnRzPWM7fSk7Cl9fZSgia2V5LWV2ZW50LWNvbnN0YW50cyIs W10sZnVuY3Rpb24oYyxlLGQsYil7dmFyIGE9e0JBQ0tTUEFDRTo4LFRBQjo5LFJF VFVSTjoxMyxFU0M6MjcsU1BBQ0U6MzIsUEFHRV9VUDozMyxQQUdFX0RPV046MzQs TEVGVDozNyxVUDozOCxSSUdIVDozOSxET1dOOjQwLERFTEVURTo0NixDT01NQTox ODh9O2MuS0VZUz1kLmV4cG9ydHM9YTt9LDMpOwpfX2UoIkRpYWxvZyIsWyJhcnJh eS1leHRlbnNpb25zIiwiZXZlbnQtZXh0ZW5zaW9ucyIsImFuaW1hdGlvbiIsImFy Yml0ZXIiLCJBcnJheVV0aWxzIiwiQXN5bmNSZXF1ZXN0IiwiQnV0dG9uIiwiY3Nz LXN1cHBvcnQiLCJkb20iLCJGb3JtIiwiTG9jYWxlIiwiT2JqZWN0VXRpbHMiLCJv bmxvYWQiLCJ1YSIsInVyaSIsInZlY3RvciIsImNvcHlQcm9wZXJ0aWVzIiwiZ2V0 T3ZlcmxheVpJbmRleCIsInR4Iiwia2V5LWV2ZW50LWNvbnN0YW50cyJdLGZ1bmN0 aW9uKGdsb2JhbCxyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtyZXF1aXJlKCJhcnJh eS1leHRlbnNpb25zIik7cmVxdWlyZSgiZXZlbnQtZXh0ZW5zaW9ucyIpO3ZhciBh bmltYXRpb249cmVxdWlyZSgiYW5pbWF0aW9uIik7dmFyIEFyYml0ZXI9cmVxdWly ZSgiYXJiaXRlciIpO3ZhciBBcnJheVV0aWxzPXJlcXVpcmUoIkFycmF5VXRpbHMi KTt2YXIgQXN5bmNSZXF1ZXN0PXJlcXVpcmUoIkFzeW5jUmVxdWVzdCIpO3ZhciBC dXR0b249cmVxdWlyZSgiQnV0dG9uIik7dmFyIENTUz1yZXF1aXJlKCJjc3Mtc3Vw cG9ydCIpO3ZhciBET009cmVxdWlyZSgiZG9tIik7dmFyIEZvcm09cmVxdWlyZSgi Rm9ybSIpO3ZhciBMb2NhbGU9cmVxdWlyZSgiTG9jYWxlIik7dmFyIE9iamVjdFV0 aWxzPXJlcXVpcmUoIk9iamVjdFV0aWxzIik7dmFyIE9ubG9hZD1yZXF1aXJlKCJv bmxvYWQiKTt2YXIgdWE9cmVxdWlyZSgidWEiKTt2YXIgVVJJPXJlcXVpcmUoInVy aSIpO3ZhciBWZWN0b3IyPXJlcXVpcmUoInZlY3RvciIpO3ZhciBjb3B5UHJvcGVy dGllcz1yZXF1aXJlKCJjb3B5UHJvcGVydGllcyIpO3ZhciBnZXRPdmVybGF5Wklu ZGV4PXJlcXVpcmUoImdldE92ZXJsYXlaSW5kZXgiKTtnbG9iYWwudHg9cmVxdWly ZSgidHgiKTt2YXIgS0VZUz1yZXF1aXJlKCJrZXktZXZlbnQtY29uc3RhbnRzIik7 ZnVuY3Rpb24gRGlhbG9nKG1vZGVsKXt0aGlzLl9zaG93X2xvYWRpbmc9dHJ1ZTt0 aGlzLl9hdXRvX2ZvY3VzPXRydWU7dGhpcy5fc3VibWl0X29uX2VudGVyPWZhbHNl O3RoaXMuX2ZhZGVfZW5hYmxlZD10cnVlO3RoaXMuX29ubG9hZF9oYW5kbGVycz1b XTt0aGlzLl90b3A9MTI1O3RoaXMuX3VuaXF1ZUlEPSdkaWFsb2dfJytEaWFsb2cu X2dsb2JhbENvdW50Kys7dGhpcy5fY29udGVudD1udWxsO3RoaXMuX29iaj1udWxs O3RoaXMuX3BvcHVwPW51bGw7dGhpcy5fb3ZlcmxheT1udWxsO3RoaXMuX3NoaW09 bnVsbDt0aGlzLl9jYXVzYWxfZWxlbT1udWxsO3RoaXMuX3ByZXZpb3VzX2ZvY3Vz PW51bGw7dGhpcy5fYnV0dG9ucz1bXTt0aGlzLl9idWlsZERpYWxvZygpO2lmKG1v ZGVsKXRoaXMuX3NldEZyb21Nb2RlbChtb2RlbCk7RGlhbG9nLl9pbml0KCk7fWNv cHlQcm9wZXJ0aWVzKERpYWxvZyx7T0s6e25hbWU6J29rJyxsYWJlbDoiQWNlcHRh ciJ9LENBTkNFTDp7bmFtZTonY2FuY2VsJyxsYWJlbDoiQ2FuY2VsYXIiLGNsYXNz TmFtZTonaW5wdXRhdXgnfSxDTE9TRTp7bmFtZTonY2xvc2UnLGxhYmVsOiJDZXJy YXIifSxORVhUOntuYW1lOiduZXh0JyxsYWJlbDoiU2lndWllbnRlIn0sU0FWRTp7 bmFtZTonc2F2ZScsbGFiZWw6Ikd1YXJkYXIifSxTVUJNSVQ6e25hbWU6J3N1Ym1p dCcsbGFiZWw6IkVudmlhciJ9LENPTkZJUk06e25hbWU6J2NvbmZpcm0nLGxhYmVs OiJDb25maXJtYXIifSxERUxFVEU6e25hbWU6J2RlbGV0ZScsbGFiZWw6IkVsaW1p bmFyIn0sX2dsb2JhbENvdW50OjAsX2JvdHRvbXM6WzBdLG1heF9ib3R0b206MCxf dXBkYXRlTWF4Qm90dG9tOmZ1bmN0aW9uKCl7RGlhbG9nLm1heF9ib3R0b209TWF0 aC5tYXguYXBwbHkoTWF0aCxEaWFsb2cuX2JvdHRvbXMpO319KTtjb3B5UHJvcGVy dGllcyhEaWFsb2cse09LX0FORF9DQU5DRUw6W0RpYWxvZy5PSyxEaWFsb2cuQ0FO Q0VMXSxfU1RBTkRBUkRfQlVUVE9OUzpbRGlhbG9nLk9LLERpYWxvZy5DQU5DRUws RGlhbG9nLkNMT1NFLERpYWxvZy5TQVZFLERpYWxvZy5TVUJNSVQsRGlhbG9nLkNP TkZJUk0sRGlhbG9nLkRFTEVURV0sU0laRTp7V0lERTo1NTUsU1RBTkRBUkQ6NDQ1 fSxfSEFMT19XSURUSDoxMCxfQk9SREVSX1dJRFRIOjEsX1BBRERJTkdfV0lEVEg6 MTAsX1BBR0VfTUFSR0lOOjQwLF9zdGFjazpbXSxfaXNVc2luZ0NTU0JvcmRlcnM6 ZnVuY3Rpb24oKXtyZXR1cm4gQ1NTLnN1cHBvcnRzQm9yZGVyUmFkaXVzKCl8fHVh LmllKCk8Nzt9LG5ld0J1dHRvbjpmdW5jdGlvbihuYW1lLGxhYmVsLGNsYXNzTmFt ZSxoYW5kbGVyKXt2YXIgYnV0dG9uPXtuYW1lOm5hbWUsbGFiZWw6bGFiZWx9O2lm KGNsYXNzTmFtZSlidXR0b24uY2xhc3NOYW1lPWNsYXNzTmFtZTtpZihoYW5kbGVy KWJ1dHRvbi5oYW5kbGVyPWhhbmRsZXI7cmV0dXJuIGJ1dHRvbjt9LGdldEN1cnJl bnQ6ZnVuY3Rpb24oKXt2YXIgc3RhY2s9RGlhbG9nLl9zdGFjaztyZXR1cm4gc3Rh Y2subGVuZ3RoP3N0YWNrW3N0YWNrLmxlbmd0aC0xXTpudWxsO30sYm9vdHN0cmFw OmZ1bmN0aW9uKHVyaSxkYXRhLHJlYWRfb25seSxtZXRob2QsbW9kZWwsZWxlbSl7 ZGF0YT1kYXRhfHx7fTt2YXIgdXNlX3BpcGU9ZWxlbSYmZWxlbS5yZWw9PSdkaWFs b2ctcGlwZSc7Y29weVByb3BlcnRpZXMoZGF0YSxuZXcgVVJJKHVyaSkuZ2V0UXVl cnlEYXRhKCkpO21ldGhvZD1tZXRob2R8fChyZWFkX29ubHk/J0dFVCc6J1BPU1Qn KTt2YXIgc3RhdHVzX2VsZW09UGFyZW50LmJ5Q2xhc3MoZWxlbSwnc3RhdF9lbGVt Jyl8fGVsZW07aWYoc3RhdHVzX2VsZW0mJkNTUy5oYXNDbGFzcyhzdGF0dXNfZWxl bSwnYXN5bmNfc2F2aW5nJykpcmV0dXJuIGZhbHNlO3ZhciByZXF1ZXN0O2lmKHVz ZV9waXBlKXtyZXF1ZXN0PW5ldyBBamF4UGlwZVJlcXVlc3QoKTt9ZWxzZSByZXF1 ZXN0PW5ldyBBc3luY1JlcXVlc3QoKS5zZXRSZWFkT25seSghIXJlYWRfb25seSku c2V0TWV0aG9kKG1ldGhvZCkuc2V0UmVsYXRpdmVUbyhlbGVtKS5zZXRTdGF0dXNF bGVtZW50KHN0YXR1c19lbGVtKTtyZXF1ZXN0LnNldFVSSSh1cmkpLnNldE5lY3Rh ck1vZHVsZURhdGFTYWZlKGVsZW0pLnNldERhdGEoZGF0YSk7dmFyIGRpYWxvZz1u ZXcgRGlhbG9nKG1vZGVsKS5zZXRDYXVzYWxFbGVtZW50KGVsZW0pLnNldEFzeW5j KHJlcXVlc3QsdXNlX3BpcGUpO2RpYWxvZy5zaG93KCk7cmV0dXJuIGZhbHNlO30s X2luaXQ6ZnVuY3Rpb24oKXt0aGlzLl9pbml0PWJhZ29maG9sZGluZztPbmxvYWQu cnVuT25sZWF2ZShEaWFsb2cuX3RlYXJEb3duLnNoaWVsZChudWxsLGZhbHNlKSk7 QXJiaXRlci5zdWJzY3JpYmUoJ3BhZ2VfdHJhbnNpdGlvbicsRGlhbG9nLl90ZWFy RG93bi5zaGllbGQobnVsbCx0cnVlKSk7RXZlbnQubGlzdGVuKGRvY3VtZW50LmRv Y3VtZW50RWxlbWVudCwna2V5ZG93bicsZnVuY3Rpb24oZXZlbnQpe2lmKEV2ZW50 LmdldEtleUNvZGUoZXZlbnQpPT1LRVlTLkVTQyYmIWV2ZW50LmdldE1vZGlmaWVy cygpLmFueSl7aWYoRGlhbG9nLl9lc2NhcGUoKSlldmVudC5raWxsKCk7fWVsc2Ug aWYoRXZlbnQuZ2V0S2V5Q29kZShldmVudCk9PUtFWVMuUkVUVVJOJiYhZXZlbnQu Z2V0TW9kaWZpZXJzKCkuYW55KWlmKERpYWxvZy5fZW50ZXIoKSlldmVudC5raWxs KCk7fSk7RXZlbnQubGlzdGVuKHdpbmRvdywncmVzaXplJyxmdW5jdGlvbihldmVu dCl7dmFyIGRpYWxvZz1EaWFsb2cuZ2V0Q3VycmVudCgpO2RpYWxvZyYmZGlhbG9n Ll9yZXNldERpYWxvZ09iaigpO30pO30sX2ZpbmRCdXR0b246ZnVuY3Rpb24oYnV0 dG9ucyxuYW1lKXtpZihidXR0b25zKWZvcih2YXIgaT0wO2k8YnV0dG9ucy5sZW5n dGg7KytpKWlmKGJ1dHRvbnNbaV0ubmFtZT09bmFtZSlyZXR1cm4gYnV0dG9uc1tp XTtyZXR1cm4gbnVsbDt9LF90ZWFyRG93bjpmdW5jdGlvbihpc19wYWdlX3RyYW5z aXRpb24pe3ZhciBzdGFjaz1EaWFsb2cuX3N0YWNrLnNsaWNlKCk7Zm9yKHZhciBp aT1zdGFjay5sZW5ndGgtMTtpaT49MDtpaS0tKWlmKCEoaXNfcGFnZV90cmFuc2l0 aW9uJiZzdGFja1tpaV0uX2Nyb3NzX3RyYW5zaXRpb24pKXN0YWNrW2lpXS5oaWRl KCk7fSxfZXNjYXBlOmZ1bmN0aW9uKCl7dmFyIGRpYWxvZz1EaWFsb2cuZ2V0Q3Vy cmVudCgpO2lmKCFkaWFsb2cpcmV0dXJuIGZhbHNlO3ZhciBzZW1pX21vZGFsPWRp YWxvZy5fc2VtaV9tb2RhbDt2YXIgYnV0dG9ucz1kaWFsb2cuX2J1dHRvbnM7aWYo IWJ1dHRvbnMubGVuZ3RoJiYhc2VtaV9tb2RhbClyZXR1cm4gZmFsc2U7aWYoc2Vt aV9tb2RhbCYmIWJ1dHRvbnMubGVuZ3RoKXtkaWFsb2cuaGlkZSgpO3JldHVybiB0 cnVlO312YXIgYnV0dG9uX3RvX3NpbXVsYXRlO3ZhciBjYW5jZWxfYnV0dG9uPURp YWxvZy5fZmluZEJ1dHRvbihidXR0b25zLCdjYW5jZWwnKTtpZihkaWFsb2cuX2Nh bmNlbEhhbmRsZXIpe2RpYWxvZy5jYW5jZWwoKTtyZXR1cm4gdHJ1ZTt9ZWxzZSBp ZihjYW5jZWxfYnV0dG9uKXtidXR0b25fdG9fc2ltdWxhdGU9Y2FuY2VsX2J1dHRv bjt9ZWxzZSBpZihidXR0b25zLmxlbmd0aD09MSl7YnV0dG9uX3RvX3NpbXVsYXRl PWJ1dHRvbnNbMF07fWVsc2UgcmV0dXJuIGZhbHNlO2RpYWxvZy5faGFuZGxlQnV0 dG9uKGJ1dHRvbl90b19zaW11bGF0ZSk7cmV0dXJuIHRydWU7fSxfZW50ZXI6ZnVu Y3Rpb24oKXt2YXIgZGlhbG9nPURpYWxvZy5nZXRDdXJyZW50KCk7aWYoIWRpYWxv Z3x8IWRpYWxvZy5fc3VibWl0X29uX2VudGVyKXJldHVybiBmYWxzZTtpZihkb2N1 bWVudC5hY3RpdmVFbGVtZW50IT1kaWFsb2cuX2ZyYW1lKXJldHVybiBmYWxzZTt2 YXIgYnV0dG9ucz1kaWFsb2cuX2J1dHRvbnM7aWYoIWJ1dHRvbnMpcmV0dXJuIGZh bHNlO2RpYWxvZy5faGFuZGxlQnV0dG9uKGJ1dHRvbnNbMF0pO3JldHVybiB0cnVl O30sY2FsbF9vcl9ldmFsOmZ1bmN0aW9uKG9iaixmdW5jLGFyZ3Mpe2lmKCFmdW5j KXJldHVybiB1bmRlZmluZWQ7YXJncz1hcmdzfHx7fTtpZih0eXBlb2YoZnVuYyk9 PSdzdHJpbmcnKXt2YXIgcGFyYW1zPU9iamVjdFV0aWxzLmdldEtleXMoYXJncyku am9pbignLCAnKTtmdW5jPWV2YWwoJyh7ZjogZnVuY3Rpb24oJytwYXJhbXMrJykg eyAnK2Z1bmMrJ319KScpLmY7fXJldHVybiBmdW5jLmFwcGx5KG9iaixPYmplY3RV dGlscy5nZXRWYWx1ZXMoYXJncykpO319KTtjb3B5UHJvcGVydGllcyhEaWFsb2cu cHJvdG90eXBlLHtfY3Jvc3NfdHJhbnNpdGlvbjpmYWxzZSxfbG9hZGluZzpmYWxz ZSxfc2hvd2luZzpmYWxzZSxzaG93OmZ1bmN0aW9uKCl7aWYodGhpcy5fYXN5bmNf cmVxdWVzdCYmdGhpcy5fc2hvd19sb2FkaW5nKXt0aGlzLnNob3dMb2FkaW5nKCk7 fWVsc2V7dGhpcy5fc2hvd2luZz10cnVlO3RoaXMuX3VwZGF0ZSgpO31yZXR1cm4g dGhpczt9LHNob3dMb2FkaW5nOmZ1bmN0aW9uKCl7dGhpcy5fbG9hZGluZz10cnVl O0NTUy5hZGRDbGFzcyh0aGlzLl9mcmFtZSwnZGlhbG9nX2xvYWRpbmdfc2hvd24n KTt0aGlzLl9yZW5kZXJEaWFsb2coKTtyZXR1cm4gdGhpczt9LGhpZGU6ZnVuY3Rp b24oKXtpZighdGhpcy5fc2hvd2luZyYmIXRoaXMuX2xvYWRpbmcpcmV0dXJuIHRo aXM7dGhpcy5fc2hvd2luZz1mYWxzZTtpZih0aGlzLl9hdXRvaGlkZV90aW1lb3V0 KXtjbGVhclRpbWVvdXQodGhpcy5fYXV0b2hpZGVfdGltZW91dCk7dGhpcy5fYXV0 b2hpZGVfdGltZW91dD1udWxsO31pZih0aGlzLl9mYWRlX2VuYWJsZWQmJkRpYWxv Zy5fc3RhY2subGVuZ3RoPD0xKXt0aGlzLl9mYWRlT3V0KCk7fWVsc2UgdGhpcy5f aGlkZSgpO3JldHVybiB0aGlzO30sY2FuY2VsOmZ1bmN0aW9uKCl7aWYoIXRoaXMu X2NhbmNlbEhhbmRsZXJ8fHRoaXMuX2NhbmNlbEhhbmRsZXIoKSE9PWZhbHNlKXRo aXMuaGlkZSgpO30sZ2V0Um9vdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vYmo7 fSxnZXRCb2R5OmZ1bmN0aW9uKCl7cmV0dXJuIERPTS5zY3J5KHRoaXMuX29iaiwn ZGl2LmRpYWxvZ19ib2R5JylbMF07fSxnZXRCdXR0b25FbGVtZW50OmZ1bmN0aW9u KGJ1dHRvbil7aWYodHlwZW9mIGJ1dHRvbj09J3N0cmluZycpYnV0dG9uPURpYWxv Zy5fZmluZEJ1dHRvbih0aGlzLl9idXR0b25zLGJ1dHRvbik7aWYoIWJ1dHRvbnx8 IWJ1dHRvbi5uYW1lKXJldHVybiBudWxsO3ZhciBpbnB1dHM9RE9NLnNjcnkodGhp cy5fcG9wdXAsJ2lucHV0Jyk7dmFyIG5hbWVfZmlsdGVyPWZ1bmN0aW9uKGVsZW0p e3JldHVybiBlbGVtLm5hbWU9PWJ1dHRvbi5uYW1lO307cmV0dXJuIGlucHV0cy5m aWx0ZXIobmFtZV9maWx0ZXIpWzBdfHxudWxsO30sZ2V0Q29udGVudE5vZGU6ZnVu Y3Rpb24oKXtyZXR1cm4gRE9NLmZpbmQodGhpcy5fY29udGVudCwnZGl2LmRpYWxv Z19jb250ZW50Jyk7fSxnZXRGb3JtRGF0YTpmdW5jdGlvbigpe3JldHVybiBGb3Jt LnNlcmlhbGl6ZSh0aGlzLmdldENvbnRlbnROb2RlKCkpO30sc2V0QWxsb3dDcm9z c1BhZ2VUcmFuc2l0aW9uOmZ1bmN0aW9uKGFsbG93KXt0aGlzLl9jcm9zc190cmFu c2l0aW9uPWFsbG93O3JldHVybiB0aGlzO30sc2V0U2hvd2luZzpmdW5jdGlvbigp e3RoaXMuc2hvdygpO3JldHVybiB0aGlzO30sc2V0SGlkaW5nOmZ1bmN0aW9uKCl7 dGhpcy5oaWRlKCk7cmV0dXJuIHRoaXM7fSxzZXRUaXRsZTpmdW5jdGlvbih0aXRs ZSl7dmFyIG5vZGU9dGhpcy5fbm9kZXMudGl0bGU7dmFyIGlubmVyX25vZGU9dGhp cy5fbm9kZXMudGl0bGVfaW5uZXI7dmFyIGNvbnRlbnRfbm9kZT10aGlzLl9ub2Rl cy5jb250ZW50O0RPTS5zZXRDb250ZW50KGlubmVyX25vZGUsdGhpcy5fZm9ybWF0 KHRpdGxlfHwnJykpO0NTUy5jb25kaXRpb25TaG93KG5vZGUsISF0aXRsZSk7Q1NT LmNvbmRpdGlvbkNsYXNzKGNvbnRlbnRfbm9kZSwnZGlhbG9nX2NvbnRlbnRfdGl0 bGVsZXNzJywhdGl0bGUpO3JldHVybiB0aGlzO30sc2V0Qm9keTpmdW5jdGlvbihi b2R5KXtET00uc2V0Q29udGVudCh0aGlzLl9ub2Rlcy5ib2R5LHRoaXMuX2Zvcm1h dChib2R5KSk7cmV0dXJuIHRoaXM7fSxzZXRFeHRyYURhdGE6ZnVuY3Rpb24oZGF0 YSl7dGhpcy5fZXh0cmFfZGF0YT1kYXRhO3JldHVybiB0aGlzO30sc2V0UmV0dXJu RGF0YTpmdW5jdGlvbihkYXRhKXt0aGlzLl9yZXR1cm5fZGF0YT1kYXRhO3JldHVy biB0aGlzO30sc2V0U2hvd0xvYWRpbmc6ZnVuY3Rpb24oc2hvdyl7dGhpcy5fc2hv d19sb2FkaW5nPXNob3c7cmV0dXJuIHRoaXM7fSxzZXRGdWxsQmxlZWQ6ZnVuY3Rp b24oaXNfZnVsbF9ibGVlZCl7dGhpcy5fZnVsbF9ibGVlZD1pc19mdWxsX2JsZWVk O3RoaXMuX3VwZGF0ZVdpZHRoKCk7Q1NTLmNvbmRpdGlvbkNsYXNzKHRoaXMuX29i aiwnZnVsbF9ibGVlZCcsaXNfZnVsbF9ibGVlZCk7cmV0dXJuIHRoaXM7fSxzZXRD YXVzYWxFbGVtZW50OmZ1bmN0aW9uKGVsZW0pe3RoaXMuX2NhdXNhbF9lbGVtPWVs ZW07cmV0dXJuIHRoaXM7fSxzZXRVc2VyRGF0YTpmdW5jdGlvbihkYXRhKXt0aGlz Ll91c2VyX2RhdGE9ZGF0YTtyZXR1cm4gdGhpczt9LGdldFVzZXJEYXRhOmZ1bmN0 aW9uKCl7cmV0dXJuIHRoaXMuX3VzZXJfZGF0YTt9LHNldEF1dG9oaWRlOmZ1bmN0 aW9uKGF1dG9oaWRlKXtpZihhdXRvaGlkZSl7aWYodGhpcy5fc2hvd2luZyl7dGhp cy5fYXV0b2hpZGVfdGltZW91dD1zZXRUaW1lb3V0KHRoaXMuaGlkZS5zaGllbGQo dGhpcyksYXV0b2hpZGUpO31lbHNlIHRoaXMuX2F1dG9oaWRlPWF1dG9oaWRlO31l bHNle3RoaXMuX2F1dG9oaWRlPW51bGw7aWYodGhpcy5fYXV0b2hpZGVfdGltZW91 dCl7Y2xlYXJUaW1lb3V0KHRoaXMuX2F1dG9oaWRlX3RpbWVvdXQpO3RoaXMuX2F1 dG9oaWRlX3RpbWVvdXQ9bnVsbDt9fXJldHVybiB0aGlzO30sc2V0U3VtbWFyeTpm dW5jdGlvbihzdW1tYXJ5KXt2YXIgbm9kZT10aGlzLl9ub2Rlcy5zdW1tYXJ5O0RP TS5zZXRDb250ZW50KG5vZGUsdGhpcy5fZm9ybWF0KHN1bW1hcnl8fCcnKSk7Q1NT LmNvbmRpdGlvblNob3cobm9kZSwhIXN1bW1hcnkpO3JldHVybiB0aGlzO30sc2V0 QnV0dG9uczpmdW5jdGlvbihiKXt2YXIgYnV0dG9ucyxidXR0b247aWYoIShiIGlu c3RhbmNlb2YgQXJyYXkpKXtidXR0b25zPUFycmF5VXRpbHMuY3JlYXRlRnJvbShh cmd1bWVudHMpO31lbHNlIGJ1dHRvbnM9Yjtmb3IodmFyIGk9MDtpPGJ1dHRvbnMu bGVuZ3RoOysraSlpZih0eXBlb2YgYnV0dG9uc1tpXT09J3N0cmluZycpe2J1dHRv bj1EaWFsb2cuX2ZpbmRCdXR0b24oRGlhbG9nLl9TVEFOREFSRF9CVVRUT05TLGJ1 dHRvbnNbaV0pO2J1dHRvbnNbaV09YnV0dG9uO310aGlzLl9idXR0b25zPWJ1dHRv bnM7dmFyIGJ1dHRvbl9jb250ZW50PVtdO2lmKGJ1dHRvbnMmJmJ1dHRvbnMubGVu Z3RoPjApZm9yKHZhciBpaT0wO2lpPGJ1dHRvbnMubGVuZ3RoO2lpKyspe2J1dHRv bj1idXR0b25zW2lpXTt2YXIgYnV0dG9uX2lucHV0PSROKCdpbnB1dCcse3R5cGU6 J2J1dHRvbicsbmFtZTpidXR0b24ubmFtZXx8JycsdmFsdWU6YnV0dG9uLmxhYmVs fSk7dmFyIGJ1dHRvbl9ub2RlPSROKCdsYWJlbCcse2NsYXNzTmFtZTondWlCdXR0 b24gdWlCdXR0b25MYXJnZSB1aUJ1dHRvbkNvbmZpcm0nfSxidXR0b25faW5wdXQp O2lmKGJ1dHRvbi5jbGFzc05hbWUpe2J1dHRvbi5jbGFzc05hbWUuc3BsaXQoL1xz Ky8pLmVhY2goZnVuY3Rpb24oZSl7Q1NTLmFkZENsYXNzKGJ1dHRvbl9ub2RlLGUp O30pO2lmKENTUy5oYXNDbGFzcyhidXR0b25fbm9kZSwnaW5wdXRhdXgnKSl7Q1NT LnJlbW92ZUNsYXNzKGJ1dHRvbl9ub2RlLCdpbnB1dGF1eCcpO0NTUy5yZW1vdmVD bGFzcyhidXR0b25fbm9kZSwndWlCdXR0b25Db25maXJtJyk7fWlmKENTUy5oYXND bGFzcyhidXR0b25fbm9kZSwndWlCdXR0b25TcGVjaWFsJykpQ1NTLnJlbW92ZUNs YXNzKGJ1dHRvbl9ub2RlLCd1aUJ1dHRvbkNvbmZpcm0nKTt9aWYoYnV0dG9uLmlj b24pRE9NLnByZXBlbmRDb250ZW50KGJ1dHRvbl9ub2RlLCROKCdpbWcnLHtzcmM6 YnV0dG9uLmljb24sY2xhc3NOYW1lOidpbWcgbXJzJ30pKTtpZihidXR0b24uZGlz YWJsZWQpQnV0dG9uLnNldEVuYWJsZWQoYnV0dG9uX25vZGUsZmFsc2UpO0V2ZW50 Lmxpc3RlbihidXR0b25faW5wdXQsJ2NsaWNrJyx0aGlzLl9oYW5kbGVCdXR0b24u YmluZCh0aGlzLGJ1dHRvbi5uYW1lKSk7Zm9yKHZhciBhdHRyIGluIGJ1dHRvbilp ZihhdHRyLmluZGV4T2YoJ2RhdGEtJyk9PT0wJiZhdHRyLmxlbmd0aD41KWJ1dHRv bl9pbnB1dC5zZXRBdHRyaWJ1dGUoYXR0cixidXR0b25bYXR0cl0pO2J1dHRvbl9j b250ZW50LnB1c2goYnV0dG9uX25vZGUpO31ET00uc2V0Q29udGVudCh0aGlzLl9u b2Rlcy5idXR0b25zLGJ1dHRvbl9jb250ZW50KTt0aGlzLl91cGRhdGVCdXR0b25W aXNpYmlsaXR5KCk7cmV0dXJuIHRoaXM7fSxzZXRCdXR0b25zTWVzc2FnZTpmdW5j dGlvbihtZXNzYWdlKXtET00uc2V0Q29udGVudCh0aGlzLl9ub2Rlcy5idXR0b25f bWVzc2FnZSx0aGlzLl9mb3JtYXQobWVzc2FnZXx8JycpKTt0aGlzLl9oYXNfYnV0 dG9uX21lc3NhZ2U9ISFtZXNzYWdlO3RoaXMuX3VwZGF0ZUJ1dHRvblZpc2liaWxp dHkoKTtyZXR1cm4gdGhpczt9LF91cGRhdGVCdXR0b25WaXNpYmlsaXR5OmZ1bmN0 aW9uKCl7dmFyIHNob3c9dGhpcy5fYnV0dG9ucy5sZW5ndGg+MHx8dGhpcy5faGFz X2J1dHRvbl9tZXNzYWdlO0NTUy5jb25kaXRpb25TaG93KHRoaXMuX25vZGVzLmJ1 dHRvbl93cmFwcGVyLHNob3cpO0NTUy5jb25kaXRpb25DbGFzcyh0aGlzLl9vYmos J29taXREaWFsb2dGb290ZXInLCFzaG93KTt9LHNldENsaWNrQnV0dG9uT25FbnRl cjpmdW5jdGlvbihpbnB1dF9pZCxidXR0b24pe3RoaXMuX2NsaWNrT25FbnRlclRh cmdldD1pbnB1dF9pZDtpZighdGhpcy5fY2xpY2tPbkVudGVyTGlzdGVuZXIpdGhp cy5fY2xpY2tPbkVudGVyTGlzdGVuZXI9RXZlbnQubGlzdGVuKHRoaXMuX25vZGVz LmJvZHksJ2tleXByZXNzJyxmdW5jdGlvbihldmVudCl7dmFyIHRhcmdldD1ldmVu dC5nZXRUYXJnZXQoKTtpZih0YXJnZXQmJnRhcmdldC5pZD09PXRoaXMuX2NsaWNr T25FbnRlclRhcmdldClpZihFdmVudC5nZXRLZXlDb2RlKGV2ZW50KT09S0VZUy5S RVRVUk4pe3RoaXMuX2hhbmRsZUJ1dHRvbihidXR0b24pO2V2ZW50LmtpbGwoKTt9 cmV0dXJuIHRydWU7fS5iaW5kKHRoaXMpKTtyZXR1cm4gdGhpczt9LHNldFN0YWNr YWJsZTpmdW5jdGlvbihzdGFja2FibGUsc2hvd24pe3RoaXMuX2lzX3N0YWNrYWJs ZT1zdGFja2FibGU7dGhpcy5fc2hvd25fd2hpbGVfc3RhY2tlZD1zdGFja2FibGUm JnNob3duO3JldHVybiB0aGlzO30sc2V0SGFuZGxlcjpmdW5jdGlvbihoYW5kbGVy KXt0aGlzLl9oYW5kbGVyPWhhbmRsZXI7cmV0dXJuIHRoaXM7fSxzZXRDYW5jZWxI YW5kbGVyOmZ1bmN0aW9uKGNhbmNlbEhhbmRsZXIpe3RoaXMuX2NhbmNlbEhhbmRs ZXI9RGlhbG9nLmNhbGxfb3JfZXZhbC5iaW5kKG51bGwsdGhpcyxjYW5jZWxIYW5k bGVyKTtyZXR1cm4gdGhpczt9LHNldENsb3NlSGFuZGxlcjpmdW5jdGlvbihjbG9z ZV9oYW5kbGVyKXt0aGlzLl9jbG9zZV9oYW5kbGVyPURpYWxvZy5jYWxsX29yX2V2 YWwuYmluZChudWxsLHRoaXMsY2xvc2VfaGFuZGxlcik7cmV0dXJuIHRoaXM7fSxj bGVhckhhbmRsZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRIYW5kbGVyKG51 bGwpO30sc2V0UG9zdFVSSTpmdW5jdGlvbihwb3N0X3VyaSxhc3luY2hyb25vdXMp e2lmKGFzeW5jaHJvbm91cz09PXVuZGVmaW5lZClhc3luY2hyb25vdXM9dHJ1ZTtp Zihhc3luY2hyb25vdXMpe3RoaXMuc2V0SGFuZGxlcih0aGlzLl9zdWJtaXRGb3Jt LmJpbmQodGhpcywnUE9TVCcscG9zdF91cmkpKTt9ZWxzZSB0aGlzLnNldEhhbmRs ZXIoZnVuY3Rpb24oKXtGb3JtLnBvc3QocG9zdF91cmksdGhpcy5nZXRGb3JtRGF0 YSgpKTt0aGlzLmhpZGUoKTt9LmJpbmQodGhpcykpO3JldHVybiB0aGlzO30sc2V0 R2V0VVJJOmZ1bmN0aW9uKGdldF91cmkpe3RoaXMuc2V0SGFuZGxlcih0aGlzLl9z dWJtaXRGb3JtLmJpbmQodGhpcywnR0VUJyxnZXRfdXJpKSk7cmV0dXJuIHRoaXM7 fSxzZXRNb2RhbDpmdW5jdGlvbihtb2RhbCl7dGhpcy5fbW9kYWw9bW9kYWw7Q1NT LmNvbmRpdGlvbkNsYXNzKHRoaXMuX29iaiwnZ2VuZXJpY19kaWFsb2dfbW9kYWwn LG1vZGFsKTtyZXR1cm4gdGhpczt9LHNldFNlbWlNb2RhbDpmdW5jdGlvbihjbGlj a291dCl7aWYoY2xpY2tvdXQpe3RoaXMuc2V0TW9kYWwodHJ1ZSk7dGhpcy5fc2Vt aU1vZGFsTGlzdGVuZXI9RXZlbnQubGlzdGVuKHRoaXMuX29iaiwnY2xpY2snLGZ1 bmN0aW9uKGUpe2lmKCFET00uY29udGFpbnModGhpcy5fcG9wdXAsZS5nZXRUYXJn ZXQoKSkpdGhpcy5oaWRlKCk7fS5iaW5kKHRoaXMpKTt9ZWxzZSB0aGlzLl9zZW1p TW9kYWxMaXN0ZW5lciYmdGhpcy5fc2VtaU1vZGFsTGlzdGVuZXIucmVtb3ZlKCk7 dGhpcy5fc2VtaV9tb2RhbD1jbGlja291dDtyZXR1cm4gdGhpczt9LHNldFdpZGVE aWFsb2c6ZnVuY3Rpb24oaXNfd2lkZSl7dGhpcy5fd2lkZV9kaWFsb2c9aXNfd2lk ZTt0aGlzLl91cGRhdGVXaWR0aCgpO3JldHVybiB0aGlzO30sc2V0Q29udGVudFdp ZHRoOmZ1bmN0aW9uKHdpZHRoKXt0aGlzLl9jb250ZW50X3dpZHRoPXdpZHRoO3Ro aXMuX3VwZGF0ZVdpZHRoKCk7cmV0dXJuIHRoaXM7fSxzZXRUaXRsZUxvYWRpbmc6 ZnVuY3Rpb24obG9hZGluZyl7aWYobG9hZGluZz09PXVuZGVmaW5lZClsb2FkaW5n PXRydWU7dmFyIGhlYWRlcj1ET00uZmluZCh0aGlzLl9wb3B1cCwnaDIuZGlhbG9n X3RpdGxlJyk7aWYoaGVhZGVyKUNTUy5jb25kaXRpb25DbGFzcyhoZWFkZXIsJ2xv YWRpbmcnLGxvYWRpbmcpO3JldHVybiB0aGlzO30sc2V0U2VjdXJlOmZ1bmN0aW9u KGlzX3NlY3VyZSl7Q1NTLmNvbmRpdGlvbkNsYXNzKHRoaXMuX25vZGVzLnRpdGxl LCdzZWN1cmUnLGlzX3NlY3VyZSk7cmV0dXJuIHRoaXM7fSxzZXRDbGFzc05hbWU6 ZnVuY3Rpb24oY2xhc3NfbmFtZSl7Q1NTLmFkZENsYXNzKHRoaXMuX29iaixjbGFz c19uYW1lKTtyZXR1cm4gdGhpczt9LHNldEZhZGVFbmFibGVkOmZ1bmN0aW9uKGVu YWJsZWQpe3RoaXMuX2ZhZGVfZW5hYmxlZD1lbmFibGVkO3JldHVybiB0aGlzO30s c2V0Rm9vdGVyOmZ1bmN0aW9uKGZvb3Rlcil7dmFyIG5vZGU9dGhpcy5fbm9kZXMu Zm9vdGVyO0RPTS5zZXRDb250ZW50KG5vZGUsdGhpcy5fZm9ybWF0KGZvb3Rlcnx8 JycpKTtDU1MuY29uZGl0aW9uU2hvdyhub2RlLCEhZm9vdGVyKTtyZXR1cm4gdGhp czt9LHNldEF1dG9Gb2N1czpmdW5jdGlvbihmb2N1cyl7dGhpcy5fYXV0b19mb2N1 cz1mb2N1cztyZXR1cm4gdGhpczt9LHNldFRvcDpmdW5jdGlvbih0b3Ape3RoaXMu X3RvcD10b3A7dGhpcy5fcmVzZXREaWFsb2dPYmooKTtyZXR1cm4gdGhpczt9LG9u bG9hZFJlZ2lzdGVyOmZ1bmN0aW9uKGhhbmRsZXIpe0FycmF5VXRpbHMuY3JlYXRl RnJvbShoYW5kbGVyKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe2lmKHR5cGVvZiBpPT0n c3RyaW5nJylpPW5ldyBGdW5jdGlvbihpKTt0aGlzLl9vbmxvYWRfaGFuZGxlcnMu cHVzaChpLmJpbmQodGhpcykpO30uYmluZCh0aGlzKSk7cmV0dXJuIHRoaXM7fSxz ZXRBc3luY1VSTDpmdW5jdGlvbih1cmwpe3JldHVybiB0aGlzLnNldEFzeW5jKG5l dyBBc3luY1JlcXVlc3QodXJsKSk7fSxzZXRBc3luYzpmdW5jdGlvbihhc3luY19y ZXF1ZXN0LHVzZV9waXBlKXt2YXIgaGFuZGxlcj1mdW5jdGlvbihyZXNwb25zZSl7 aWYodGhpcy5fYXN5bmNfcmVxdWVzdCE9YXN5bmNfcmVxdWVzdClyZXR1cm47dGhp cy5fYXN5bmNfcmVxdWVzdD1udWxsO3ZhciBwYXlsb2FkPXJlc3BvbnNlLmdldFBh eWxvYWQoKTt2YXIgZGlhbG9nPXBheWxvYWQ7dmFyIGZuPWZ1bmN0aW9uKCl7aWYo dGhpcy5fbG9hZGluZyl0aGlzLl9zaG93aW5nPXRydWU7aWYodHlwZW9mIGRpYWxv Zz09J3N0cmluZycpe3RoaXMuc2V0Qm9keShkaWFsb2cpO31lbHNlIHRoaXMuX3Nl dEZyb21Nb2RlbChkaWFsb2cpO3RoaXMuX3VwZGF0ZSgpO30uYmluZCh0aGlzKTtp Zih1c2VfcGlwZSl7ZGlhbG9nPXBheWxvYWQuZGlhbG9nO0Jvb3Rsb2FkZXIuc2V0 UmVzb3VyY2VNYXAocGF5bG9hZC5yZXNvdXJjZV9tYXApO0Jvb3Rsb2FkZXIubG9h ZFJlc291cmNlcyhwYXlsb2FkLmNzcyxmbik7fWVsc2UgZm4oKTt9LmJpbmQodGhp cyk7dmFyIGRhdGE9YXN5bmNfcmVxdWVzdC5nZXREYXRhKCk7ZGF0YS5fX2Q9MTth c3luY19yZXF1ZXN0LnNldERhdGEoZGF0YSk7dmFyIHJlcXVlc3Q7aWYodXNlX3Bp cGUpe2FzeW5jX3JlcXVlc3Quc2V0Rmlyc3RSZXNwb25zZUhhbmRsZXIoaGFuZGxl cik7cmVxdWVzdD1hc3luY19yZXF1ZXN0LmdldEFzeW5jUmVxdWVzdCgpO31lbHNl e3ZhciBvcmlnX2hhbmRsZXI9YXN5bmNfcmVxdWVzdC5nZXRIYW5kbGVyKCl8fGJh Z29maG9sZGluZzthc3luY19yZXF1ZXN0LnNldEhhbmRsZXIoZnVuY3Rpb24ocmVz cG9uc2Upe29yaWdfaGFuZGxlcihyZXNwb25zZSk7aGFuZGxlcihyZXNwb25zZSk7 fSk7cmVxdWVzdD1hc3luY19yZXF1ZXN0O312YXIgb3JpZ19lcnJvcl9oYW5kbGVy PXJlcXVlc3QuZ2V0RXJyb3JIYW5kbGVyKCl8fGJhZ29maG9sZGluZzt2YXIgb3Jp Z190cmFuc19lcnJvcl9oYW5kbGVyPXJlcXVlc3QuZ2V0VHJhbnNwb3J0RXJyb3JI YW5kbGVyKCl8fGJhZ29maG9sZGluZzt2YXIgaGFuZGxlX2Vycm9yPWZ1bmN0aW9u KCl7dGhpcy5fYXN5bmNfcmVxdWVzdD1udWxsO2lmKHRoaXMuX3Nob3dpbmcpe3Ro aXMuX3VwZGF0ZSgpO31lbHNlIHRoaXMuX2hpZGUoKTt9LmJpbmQodGhpcyk7cmVx dWVzdC5zZXRBbGxvd0Nyb3NzUGFnZVRyYW5zaXRpb24odGhpcy5fY3Jvc3NfdHJh bnNpdGlvbikuc2V0RXJyb3JIYW5kbGVyKGZ1bmN0aW9uKHJlc3BvbnNlKXtoYW5k bGVfZXJyb3IoKTtvcmlnX2Vycm9yX2hhbmRsZXIocmVzcG9uc2UpO30pLnNldFRy YW5zcG9ydEVycm9ySGFuZGxlcihmdW5jdGlvbihyZXNwb25zZSl7aGFuZGxlX2Vy cm9yKCk7b3JpZ190cmFuc19lcnJvcl9oYW5kbGVyKHJlc3BvbnNlKTt9KTthc3lu Y19yZXF1ZXN0LnNlbmQoKTt0aGlzLl9hc3luY19yZXF1ZXN0PWFzeW5jX3JlcXVl c3Q7dGhpcy5fdXBkYXRlKCk7cmV0dXJuIHRoaXM7fSxfZm9ybWF0OmZ1bmN0aW9u KGNvbnRlbnQpe2lmKHR5cGVvZiBjb250ZW50PT0nc3RyaW5nJyl7Y29udGVudD1I VE1MKGNvbnRlbnQpO31lbHNlIGNvbnRlbnQ9SFRNTC5yZXBsYWNlSlNPTldyYXBw ZXIoY29udGVudCk7aWYoY29udGVudCBpbnN0YW5jZW9mIEhUTUwpY29udGVudC5z ZXREZWZlcnJlZCh0cnVlKTtyZXR1cm4gY29udGVudDt9LF91cGRhdGU6ZnVuY3Rp b24oKXtpZighdGhpcy5fc2hvd2luZylyZXR1cm47aWYodGhpcy5fYXV0b2hpZGUm JiF0aGlzLl9hc3luY19yZXF1ZXN0JiYhdGhpcy5fYXV0b2hpZGVfdGltZW91dCl0 aGlzLl9hdXRvaGlkZV90aW1lb3V0PXNldFRpbWVvdXQoYmluZCh0aGlzLCdoaWRl JyksdGhpcy5fYXV0b2hpZGUpO2lmKHRoaXMuX2FzeW5jX3JlcXVlc3QmJnRoaXMu X3Nob3dfbG9hZGluZyl7dGhpcy5zaG93TG9hZGluZygpO31lbHNle0NTUy5yZW1v dmVDbGFzcyh0aGlzLl9mcmFtZSwnZGlhbG9nX2xvYWRpbmdfc2hvd24nKTt0aGlz Ll9sb2FkaW5nPWZhbHNlO3RoaXMuX3JlbmRlckRpYWxvZygpO3RoaXMuX3J1bk9u bG9hZHMoKTt0aGlzLl9wcmV2aW91c19mb2N1cz1kb2N1bWVudC5hY3RpdmVFbGVt ZW50O0lucHV0LmZvY3VzKHRoaXMuX2ZyYW1lKTt9fSxfcnVuT25sb2FkczpmdW5j dGlvbigpe2Zvcih2YXIgaT0wO2k8dGhpcy5fb25sb2FkX2hhbmRsZXJzLmxlbmd0 aDsrK2kpdHJ5e3RoaXMuX29ubG9hZF9oYW5kbGVyc1tpXSgpO31jYXRjaChleCl7 fXRoaXMuX29ubG9hZF9oYW5kbGVycz1bXTt9LF91cGRhdGVXaWR0aDpmdW5jdGlv bigpe3ZhciBkaWFsb2dfd2lkdGg9MipEaWFsb2cuX0JPUkRFUl9XSURUSDtpZihE aWFsb2cuX2lzVXNpbmdDU1NCb3JkZXJzKCkpZGlhbG9nX3dpZHRoKz0yKkRpYWxv Zy5fSEFMT19XSURUSDtpZih0aGlzLl9jb250ZW50X3dpZHRoKXtkaWFsb2dfd2lk dGgrPXRoaXMuX2NvbnRlbnRfd2lkdGg7aWYoIXRoaXMuX2Z1bGxfYmxlZWQpZGlh bG9nX3dpZHRoKz0yKkRpYWxvZy5fUEFERElOR19XSURUSDt9ZWxzZSBpZih0aGlz Ll93aWRlX2RpYWxvZyl7ZGlhbG9nX3dpZHRoKz1EaWFsb2cuU0laRS5XSURFO31l bHNlIGRpYWxvZ193aWR0aCs9RGlhbG9nLlNJWkUuU1RBTkRBUkQ7dGhpcy5fcG9w dXAuc3R5bGUud2lkdGg9ZGlhbG9nX3dpZHRoKydweCc7fSxfcmVuZGVyRGlhbG9n OmZ1bmN0aW9uKCl7dGhpcy5fc2hvd0RpYWxvZygpO3RoaXMuX3N1Ym1pdF9vbl9l bnRlcj1mYWxzZTtpZih0aGlzLl9hdXRvX2ZvY3VzKXt2YXIgaW5wdXQ9Rm9ybS5n ZXRGaXJzdEVsZW1lbnQodGhpcy5fY29udGVudCxbJ2lucHV0W3R5cGU9InRleHQi XScsJ3RleHRhcmVhJywnaW5wdXRbdHlwZT0icGFzc3dvcmQiXSddKTtpZihpbnB1 dCl7Rm9ybS5mb2N1c0ZpcnN0LmJpbmQodGhpcyx0aGlzLl9jb250ZW50KS5kZWZl cigpO31lbHNlIHRoaXMuX3N1Ym1pdF9vbl9lbnRlcj10cnVlO312YXIgYm90dG9t PVZlY3RvcjIuZ2V0RWxlbWVudERpbWVuc2lvbnModGhpcy5fY29udGVudCkueStW ZWN0b3IyLmdldEVsZW1lbnRQb3NpdGlvbih0aGlzLl9jb250ZW50KS55O0RpYWxv Zy5fYm90dG9tcy5wdXNoKGJvdHRvbSk7dGhpcy5fYm90dG9tPWJvdHRvbTtEaWFs b2cuX3VwZGF0ZU1heEJvdHRvbSgpO3JldHVybiB0aGlzO30sX2J1aWxkRGlhbG9n OmZ1bmN0aW9uKCl7dGhpcy5fb2JqPSROKCdkaXYnLHtjbGFzc05hbWU6J2dlbmVy aWNfZGlhbG9nJyxpZDp0aGlzLl91bmlxdWVJRH0pO3RoaXMuX29iai5zdHlsZS5k aXNwbGF5PSdub25lJztkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuX29i aik7aWYoIXRoaXMuX3BvcHVwKXRoaXMuX3BvcHVwPSROKCdkaXYnLHtjbGFzc05h bWU6J2dlbmVyaWNfZGlhbG9nX3BvcHVwJ30pO3RoaXMuX3BvcHVwLnN0eWxlLmxl ZnQ9dGhpcy5fcG9wdXAuc3R5bGUudG9wPScnO3RoaXMuX29iai5hcHBlbmRDaGls ZCh0aGlzLl9wb3B1cCk7aWYodWEuaWUoKTw3JiYhdGhpcy5fc2hpbSlCb290bG9h ZGVyLmxvYWRDb21wb25lbnRzKCdpZnJhbWUtc2hpbScsZnVuY3Rpb24oKXt0aGlz Ll9zaGltPW5ldyBJZnJhbWVTaGltKHRoaXMuX3BvcHVwKTt9KTt0aGlzLl9idWls ZERpYWxvZ0NvbnRhaW5lcigpO3RoaXMuX2J1aWxkRGlhbG9nQ29udGVudCgpO30s X3Nob3dEaWFsb2c6ZnVuY3Rpb24oKXtpZighdGhpcy5faGFzU2V0WkluZGV4JiZ0 aGlzLl9jYXVzYWxfZWxlbSl7dmFyIHpfaW5kZXg9Z2V0T3ZlcmxheVpJbmRleCh0 aGlzLl9jYXVzYWxfZWxlbSk7dGhpcy5faGFzU2V0WkluZGV4PXpfaW5kZXg+KHRo aXMuX21vZGFsPzMwMDoyMDApO0NTUy5zZXRTdHlsZSh0aGlzLl9vYmosJ3otaW5k ZXgnLHRoaXMuX2hhc1NldFpJbmRleD96X2luZGV4OicnKTt9dGhpcy5fcHVzaE9u dG9TdGFjaygpO3RoaXMuX29iai5zdHlsZS5oZWlnaHQ9KHRoaXMuX21vZGFsJiZ1 YS5pZSgpPDcpP1ZlY3RvcjIuZ2V0RG9jdW1lbnREaW1lbnNpb25zKCkueSsncHgn Om51bGw7aWYodGhpcy5fb2JqJiZ0aGlzLl9vYmouc3R5bGUuZGlzcGxheSl7dGhp cy5fb2JqLnN0eWxlLnZpc2liaWxpdHk9J2hpZGRlbic7dGhpcy5fb2JqLnN0eWxl LmRpc3BsYXk9Jyc7dGhpcy5yZXNldERpYWxvZ1Bvc2l0aW9uKCk7dGhpcy5fb2Jq LnN0eWxlLnZpc2liaWxpdHk9Jyc7dGhpcy5fb2JqLmRpYWxvZz10aGlzO31lbHNl IHRoaXMucmVzZXREaWFsb2dQb3NpdGlvbigpO2NsZWFySW50ZXJ2YWwodGhpcy5h Y3RpdmVfaGlkaW5nKTt0aGlzLmFjdGl2ZV9oaWRpbmc9c2V0SW50ZXJ2YWwodGhp cy5fYWN0aXZlUmVzaXplLmJpbmQodGhpcyksNTAwKTtyZXR1cm4gdGhpczt9LF91 cGRhdGVTaGltOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NoaW0mJnRoaXMuX3No aW0uc2hvdygpO30sX2FjdGl2ZVJlc2l6ZTpmdW5jdGlvbigpe2lmKHRoaXMubGFz dF9vZmZzZXRfaGVpZ2h0IT10aGlzLl9jb250ZW50Lm9mZnNldEhlaWdodCl7dGhp cy5sYXN0X29mZnNldF9oZWlnaHQ9dGhpcy5fY29udGVudC5vZmZzZXRIZWlnaHQ7 dGhpcy5yZXNldERpYWxvZ1Bvc2l0aW9uKCk7fX0sX2J1aWxkRGlhbG9nQ29udGFp bmVyOmZ1bmN0aW9uKCl7Q1NTLmFkZENsYXNzKHRoaXMuX29iaiwncG9wX2RpYWxv ZycpO2lmKExvY2FsZS5pc1JUTCgpKUNTUy5hZGRDbGFzcyh0aGlzLl9vYmosJ3Bv cF9kaWFsb2dfcnRsJyk7dmFyIG1hcmt1cDtpZihEaWFsb2cuX2lzVXNpbmdDU1NC b3JkZXJzKCkpe21hcmt1cD0nPGRpdiBjbGFzcz0icG9wX2NvbnRhaW5lcl9hZHZh bmNlZCI+JysnPGRpdiBjbGFzcz0icG9wX2NvbnRlbnQiIGlkPSJwb3BfY29udGVu dCI+PC9kaXY+JysnPC9kaXY+Jzt9ZWxzZSBtYXJrdXA9JzxkaXYgY2xhc3M9InBv cF9jb250YWluZXIiPicrJzxkaXYgY2xhc3M9InBvcF92ZXJ0aWNhbHNsYWIiPjwv ZGl2PicrJzxkaXYgY2xhc3M9InBvcF9ob3Jpem9udGFsc2xhYiI+PC9kaXY+Jysn PGRpdiBjbGFzcz0icG9wX3RvcGxlZnQiPjwvZGl2PicrJzxkaXYgY2xhc3M9InBv cF90b3ByaWdodCI+PC9kaXY+JysnPGRpdiBjbGFzcz0icG9wX2JvdHRvbXJpZ2h0 Ij48L2Rpdj4nKyc8ZGl2IGNsYXNzPSJwb3BfYm90dG9tbGVmdCI+PC9kaXY+Jysn PGRpdiBjbGFzcz0icG9wX2NvbnRlbnQgcG9wX2NvbnRlbnRfb2xkIiBpZD0icG9w X2NvbnRlbnQiPjwvZGl2PicrJzwvZGl2Pic7RE9NLnNldENvbnRlbnQodGhpcy5f cG9wdXAsSFRNTChtYXJrdXApKTt2YXIgZnJhbWU9RE9NLmZpbmQodGhpcy5fcG9w dXAsJ2Rpdi5wb3BfY29udGVudCcpO2ZyYW1lLnNldEF0dHJpYnV0ZSgndGFiSW5k ZXgnLCcwJyk7ZnJhbWUuc2V0QXR0cmlidXRlKCdyb2xlJywnYWxlcnRkaWFsb2cn KTt0aGlzLl9mcmFtZT10aGlzLl9jb250ZW50PWZyYW1lO30sX2J1aWxkRGlhbG9n Q29udGVudDpmdW5jdGlvbigpe3ZhciBsb2FkaW5nPSROKCdkaXYnLHtjbGFzc05h bWU6J2RpYWxvZ19sb2FkaW5nJ30sIkNhcmdhbmRvLi4uIik7dmFyIHRpdGxlX2lu bmVyPSROKCdzcGFuJyk7dmFyIHRpdGxlPSROKCdoMicse2NsYXNzTmFtZTonZGlh bG9nX3RpdGxlIGhpZGRlbl9lbGVtJyxpZDondGl0bGVfJyt0aGlzLl91bmlxdWVJ RH0sdGl0bGVfaW5uZXIpO3ZhciBzdW1tYXJ5PSROKCdkaXYnLHtjbGFzc05hbWU6 J2RpYWxvZ19zdW1tYXJ5IGhpZGRlbl9lbGVtJ30pO3ZhciBib2R5PSROKCdkaXYn LHtjbGFzc05hbWU6J2RpYWxvZ19ib2R5J30pO3ZhciBidXR0b25zPSROKCdkaXYn KTt2YXIgYnV0dG9uX21lc3NhZ2U9JE4oJ2Rpdicse2NsYXNzTmFtZTonZGlhbG9n X2J1dHRvbnNfbXNnJ30pO3ZhciBidXR0b25fd3JhcHBlcj0kTignZGl2Jyx7Y2xh c3NOYW1lOidkaWFsb2dfYnV0dG9ucyBjbGVhcmZpeCBoaWRkZW5fZWxlbSd9LFti dXR0b25fbWVzc2FnZSxidXR0b25zXSk7dmFyIGZvb3Rlcj0kTignZGl2Jyx7Y2xh c3NOYW1lOidkaWFsb2dfZm9vdGVyIGhpZGRlbl9lbGVtJ30pO3ZhciBjb250ZW50 PSROKCdkaXYnLHtjbGFzc05hbWU6J2RpYWxvZ19jb250ZW50J30sW3N1bW1hcnks Ym9keSxidXR0b25fd3JhcHBlcixmb290ZXJdKTt0aGlzLl9ub2Rlcz17c3VtbWFy eTpzdW1tYXJ5LGJvZHk6Ym9keSxidXR0b25zOmJ1dHRvbnMsYnV0dG9uX21lc3Nh Z2U6YnV0dG9uX21lc3NhZ2UsYnV0dG9uX3dyYXBwZXI6YnV0dG9uX3dyYXBwZXIs Zm9vdGVyOmZvb3Rlcixjb250ZW50OmNvbnRlbnQsdGl0bGU6dGl0bGUsdGl0bGVf aW5uZXI6dGl0bGVfaW5uZXJ9O0RPTS5zZXRDb250ZW50KHRoaXMuX2ZyYW1lLFt0 aXRsZSxjb250ZW50LGxvYWRpbmddKTt9LHJlc2V0RGlhbG9nUG9zaXRpb246ZnVu Y3Rpb24oKXtpZighdGhpcy5fcG9wdXApcmV0dXJuO3RoaXMuX3Jlc2V0RGlhbG9n T2JqKCk7dGhpcy5fdXBkYXRlU2hpbSgpO30sX3Jlc2V0RGlhbG9nT2JqOmZ1bmN0 aW9uKCl7dmFyIHRvdGFsX21hcmdpbj0yKkRpYWxvZy5fUEFHRV9NQVJHSU47dmFy IHZpZXdwb3J0X2RpbWVuc2lvbnM9VmVjdG9yMi5nZXRWaWV3cG9ydERpbWVuc2lv bnMoKTt2YXIgdmlld3BvcnRfd2lkdGg9dmlld3BvcnRfZGltZW5zaW9ucy54LXRv dGFsX21hcmdpbjt2YXIgdmlld3BvcnRfaGVpZ2h0PXZpZXdwb3J0X2RpbWVuc2lv bnMueS10b3RhbF9tYXJnaW47dmFyIHRvdGFsX2hhbG9fd2lkdGg9MipEaWFsb2cu X0hBTE9fV0lEVEg7dmFyIGNvbnRlbnRfZGltZW5zaW9ucz1WZWN0b3IyLmdldEVs ZW1lbnREaW1lbnNpb25zKHRoaXMuX2NvbnRlbnQpO3ZhciBjb250ZW50X3dpZHRo PWNvbnRlbnRfZGltZW5zaW9ucy54K3RvdGFsX2hhbG9fd2lkdGg7dmFyIGNvbnRl bnRfaGVpZ2h0PWNvbnRlbnRfZGltZW5zaW9ucy55K3RvdGFsX2hhbG9fd2lkdGg7 dmFyIHRvcD10aGlzLl90b3A7dmFyIGVtcHR5X2hvcml6X3NwYWNlPXZpZXdwb3J0 X3dpZHRoLWNvbnRlbnRfd2lkdGg7dmFyIGVtcHR5X3ZlcnRpY2FsX3NwYWNlPXZp ZXdwb3J0X2hlaWdodC1jb250ZW50X2hlaWdodDtpZihlbXB0eV92ZXJ0aWNhbF9z cGFjZTwwKXt0b3A9RGlhbG9nLl9QQUdFX01BUkdJTjt9ZWxzZSBpZih0b3A+ZW1w dHlfdmVydGljYWxfc3BhY2UpdG9wPURpYWxvZy5fUEFHRV9NQVJHSU4rKE1hdGgu bWF4KGVtcHR5X3ZlcnRpY2FsX3NwYWNlLDApLzIpO3ZhciBzY3JvbGw9ZW1wdHlf aG9yaXpfc3BhY2U8MHx8ZW1wdHlfdmVydGljYWxfc3BhY2U8MDtDU1MuY29uZGl0 aW9uQ2xhc3ModGhpcy5fb2JqLCdnZW5lcmljX2RpYWxvZ19maXhlZF9vdmVyZmxv dycsc2Nyb2xsKTtDU1MuY29uZGl0aW9uQ2xhc3MoZG9jdW1lbnQuZG9jdW1lbnRF bGVtZW50LCdnZW5lcmljX2RpYWxvZ19vdmVyZmxvd19tb2RlJyxzY3JvbGwpO0NT Uy5zZXRTdHlsZSh0aGlzLl9wb3B1cCwndG9wJyx0b3ArJ3B4Jyk7aWYodG9wLVZl Y3RvcjIuZ2V0RWxlbWVudFBvc2l0aW9uKHRoaXMuX3BvcHVwLCd2aWV3cG9ydCcp Lnk+MSl7dG9wKz1WZWN0b3IyLmdldFNjcm9sbFBvc2l0aW9uKCkueTtDU1Muc2V0 U3R5bGUodGhpcy5fcG9wdXAsJ3RvcCcsdG9wKydweCcpO319LF9mYWRlT3V0OmZ1 bmN0aW9uKHRlbXBvcmFyeSl7aWYoIXRoaXMuX3BvcHVwKXJldHVybjt0cnl7YW5p bWF0aW9uKHRoaXMuX29iaikuZHVyYXRpb24oMCkuY2hlY2twb2ludCgpLnRvKCdv cGFjaXR5JywwKS5oaWRlKCkuZHVyYXRpb24oMjUwKS5vbmRvbmUodGhpcy5faGlk ZS5iaW5kKHRoaXMsdGVtcG9yYXJ5KSkuZ28oKTt9Y2F0Y2goZSl7dGhpcy5faGlk ZSh0ZW1wb3JhcnkpO319LF9oaWRlOmZ1bmN0aW9uKHRlbXBvcmFyeSl7aWYodGhp cy5fb2JqKXRoaXMuX29iai5zdHlsZS5kaXNwbGF5PSdub25lJztDU1MucmVtb3Zl Q2xhc3MoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCdnZW5lcmljX2RpYWxvZ19v dmVyZmxvd19tb2RlJyk7dGhpcy5fdXBkYXRlU2hpbSgpO2NsZWFySW50ZXJ2YWwo dGhpcy5hY3RpdmVfaGlkaW5nKTtpZih0aGlzLl9ib3R0b20pe3ZhciBicz1EaWFs b2cuX2JvdHRvbXM7YnMuc3BsaWNlKGJzLmluZGV4T2YodGhpcy5fYm90dG9tKSwx KTtEaWFsb2cuX3VwZGF0ZU1heEJvdHRvbSgpO31pZih0aGlzLl9wcmV2aW91c19m b2N1cyYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudCYmRE9NLmNvbnRhaW5zKHRoaXMu X29iaixkb2N1bWVudC5hY3RpdmVFbGVtZW50KSlJbnB1dC5mb2N1cyh0aGlzLl9w cmV2aW91c19mb2N1cyk7aWYodGVtcG9yYXJ5KXJldHVybjt0aGlzLmRlc3Ryb3ko KTt9LGRlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLl9wb3BGcm9tU3RhY2soKTtpZih0 aGlzLl9vYmope0RPTS5yZW1vdmUodGhpcy5fb2JqKTt0aGlzLl9vYmo9bnVsbDt0 aGlzLl9zaGltJiZ0aGlzLl9zaGltLmhpZGUoKTt0aGlzLl9zaGltPW51bGw7fXRo aXMuX2NsaWNrT25FbnRlckxpc3RlbmVyJiZ0aGlzLl9jbGlja09uRW50ZXJMaXN0 ZW5lci5yZW1vdmUoKTtpZih0aGlzLl9jbG9zZV9oYW5kbGVyKXRoaXMuX2Nsb3Nl X2hhbmRsZXIoe3JldHVybl9kYXRhOnRoaXMuX3JldHVybl9kYXRhfSk7fSxfaGFu ZGxlQnV0dG9uOmZ1bmN0aW9uKGJ1dHRvbil7aWYodHlwZW9mIGJ1dHRvbj09J3N0 cmluZycpYnV0dG9uPURpYWxvZy5fZmluZEJ1dHRvbih0aGlzLl9idXR0b25zLGJ1 dHRvbik7dmFyIHZhbHVlPURpYWxvZy5jYWxsX29yX2V2YWwoYnV0dG9uLGJ1dHRv bi5oYW5kbGVyKTtpZih2YWx1ZT09PWZhbHNlKXJldHVybjtpZihidXR0b24ubmFt ZT09J2NhbmNlbCcpe3RoaXMuY2FuY2VsKCk7fWVsc2UgaWYoRGlhbG9nLmNhbGxf b3JfZXZhbCh0aGlzLHRoaXMuX2hhbmRsZXIse2J1dHRvbjpidXR0b259KSE9PWZh bHNlKXRoaXMuaGlkZSgpO30sX3N1Ym1pdEZvcm06ZnVuY3Rpb24obWV0aG9kLHVy aSxidXR0b24pe3ZhciBkYXRhPXRoaXMuZ2V0Rm9ybURhdGEoKTtpZihidXR0b24p ZGF0YVtidXR0b24ubmFtZV09YnV0dG9uLmxhYmVsO2lmKHRoaXMuX2V4dHJhX2Rh dGEpY29weVByb3BlcnRpZXMoZGF0YSx0aGlzLl9leHRyYV9kYXRhKTt2YXIgYXN5 bmNfcmVxdWVzdD1uZXcgQXN5bmNSZXF1ZXN0KCkuc2V0VVJJKHVyaSkuc2V0RGF0 YShkYXRhKS5zZXRNZXRob2QobWV0aG9kKS5zZXROZWN0YXJNb2R1bGVEYXRhU2Fm ZSh0aGlzLl9jYXVzYWxfZWxlbSkuc2V0UmVhZE9ubHkobWV0aG9kPT0nR0VUJyk7 dGhpcy5zZXRBc3luYyhhc3luY19yZXF1ZXN0KTtyZXR1cm4gZmFsc2U7fSxfc2V0 RnJvbU1vZGVsOmZ1bmN0aW9uKG9yaWdpbmFsX21vZGVsKXt2YXIgbW9kZWw9e307 Y29weVByb3BlcnRpZXMobW9kZWwsb3JpZ2luYWxfbW9kZWwpO2Zvcih2YXIgcHJv cGVydHlOYW1lIGluIG1vZGVsKXtpZihwcm9wZXJ0eU5hbWU9PSdvbmxvYWRSZWdp c3Rlcicpe3RoaXMub25sb2FkUmVnaXN0ZXIobW9kZWxbcHJvcGVydHlOYW1lXSk7 Y29udGludWU7fXZhciBtdXRhdG9yPXRoaXNbJ3NldCcrcHJvcGVydHlOYW1lLnN1 YnN0cigwLDEpLnRvVXBwZXJDYXNlKCkrcHJvcGVydHlOYW1lLnN1YnN0cigxKV07 bXV0YXRvci5hcHBseSh0aGlzLEFycmF5VXRpbHMuY3JlYXRlRnJvbShtb2RlbFtw cm9wZXJ0eU5hbWVdKSk7fX0sX3VwZGF0ZUJvdHRvbTpmdW5jdGlvbigpe3ZhciBi b3R0b209VmVjdG9yMi5nZXRFbGVtZW50RGltZW5zaW9ucyh0aGlzLl9jb250ZW50 KS55K1ZlY3RvcjIuZ2V0RWxlbWVudFBvc2l0aW9uKHRoaXMuX2NvbnRlbnQpLnk7 RGlhbG9nLl9ib3R0b21zW0RpYWxvZy5fYm90dG9tcy5sZW5ndGgtMV09Ym90dG9t O0RpYWxvZy5fdXBkYXRlTWF4Qm90dG9tKCk7fSxfcHVzaE9udG9TdGFjazpmdW5j dGlvbigpe3ZhciBzdGFjaz1EaWFsb2cuX3N0YWNrO2lmKCFzdGFjay5sZW5ndGgp QXJiaXRlci5pbmZvcm0oJ2xheWVyX3Nob3duJyx7dHlwZTonRGlhbG9nJ30pO3N0 YWNrLnJlbW92ZSh0aGlzKTtzdGFjay5wdXNoKHRoaXMpO2Zvcih2YXIgaT1zdGFj ay5sZW5ndGgtMjtpPj0wO2ktLSl7dmFyIHByZXZfZGlhbG9nPXN0YWNrW2ldO2lm KCFwcmV2X2RpYWxvZy5faXNfc3RhY2thYmxlJiYhcHJldl9kaWFsb2cuX2FzeW5j X3JlcXVlc3Qpe3ByZXZfZGlhbG9nLl9oaWRlKCk7fWVsc2UgaWYoIXByZXZfZGlh bG9nLl9zaG93bl93aGlsZV9zdGFja2VkKXByZXZfZGlhbG9nLl9oaWRlKHRydWUp O319LF9wb3BGcm9tU3RhY2s6ZnVuY3Rpb24oKXt2YXIgc3RhY2s9RGlhbG9nLl9z dGFjazt2YXIgd2FzX3RvcD0oc3RhY2tbc3RhY2subGVuZ3RoLTFdPT09dGhpcyk7 c3RhY2sucmVtb3ZlKHRoaXMpO2lmKHN0YWNrLmxlbmd0aCl7aWYod2FzX3RvcClz dGFja1tzdGFjay5sZW5ndGgtMV0uX3Nob3dEaWFsb2coKTt9ZWxzZSBBcmJpdGVy LmluZm9ybSgnbGF5ZXJfaGlkZGVuJyx7dHlwZTonRGlhbG9nJ30pO319KTttb2R1 bGUuZXhwb3J0cz1EaWFsb2c7fSk7Cl9fZSgiZG9tLXNjcm9sbCIsWyJkb20iLCJ2 ZWN0b3IiLCJib290bG9hZGVyIiwiZG9tLWNvcmUiLCJjc3MiXSxmdW5jdGlvbiho LGosaSxmKXt2YXIgYT1qKCdkb20nKS4kTjt2YXIgZT1qKCd2ZWN0b3InKTt2YXIg Yj1qKCdib290bG9hZGVyJyk7dmFyIGc9aignZG9tLWNvcmUnKS5nZTt2YXIgYz1q KCdjc3MnKTt2YXIgZD17Z2V0U2Nyb2xsU3RhdGU6ZnVuY3Rpb24oKXt2YXIgbj1l LmdldFZpZXdwb3J0RGltZW5zaW9ucygpO3ZhciBrPWUuZ2V0RG9jdW1lbnREaW1l bnNpb25zKCk7dmFyIGw9KGsueD5uLngpO3ZhciBtPShrLnk+bi55KTtsKz0wO20r PTA7cmV0dXJuIG5ldyBlKGwsbSk7fSxfc2Nyb2xsYmFyU2l6ZTpudWxsLF9pbml0 U2Nyb2xsYmFyU2l6ZTpmdW5jdGlvbigpe3ZhciBrPWEoJ3AnKTtrLnN0eWxlLndp ZHRoPScxMDAlJztrLnN0eWxlLmhlaWdodD0nMjAwcHgnO3ZhciBsPWEoJ2Rpdicp O2wuc3R5bGUucG9zaXRpb249J2Fic29sdXRlJztsLnN0eWxlLnRvcD0nMHB4Jzts LnN0eWxlLmxlZnQ9JzBweCc7bC5zdHlsZS52aXNpYmlsaXR5PSdoaWRkZW4nO2wu c3R5bGUud2lkdGg9JzIwMHB4JztsLnN0eWxlLmhlaWdodD0nMTUwcHgnO2wuc3R5 bGUub3ZlcmZsb3c9J2hpZGRlbic7bC5hcHBlbmRDaGlsZChrKTtkb2N1bWVudC5i b2R5LmFwcGVuZENoaWxkKGwpO3ZhciBtPWsub2Zmc2V0V2lkdGg7bC5zdHlsZS5v dmVyZmxvdz0nc2Nyb2xsJzt2YXIgbj1rLm9mZnNldFdpZHRoO2lmKG09PW4pbj1s LmNsaWVudFdpZHRoO2RvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobCk7ZC5fc2Ny b2xsYmFyU2l6ZT1tLW47fSxnZXRTY3JvbGxiYXJTaXplOmZ1bmN0aW9uKCl7aWYo ZC5fc2Nyb2xsYmFyU2l6ZT09PW51bGwpZC5faW5pdFNjcm9sbGJhclNpemUoKTty ZXR1cm4gZC5fc2Nyb2xsYmFyU2l6ZTt9LHNjcm9sbFRvOmZ1bmN0aW9uKHAsayxu LGwsbSl7aWYodHlwZW9mIGs9PSd1bmRlZmluZWQnfHxrPT09dHJ1ZSlrPTc1MDtp ZighKHAgaW5zdGFuY2VvZiBlKSl7dmFyIHE9ZS5nZXRTY3JvbGxQb3NpdGlvbigp Lng7dmFyIHI9ZS5nZXRFbGVtZW50UG9zaXRpb24oJChwKSkueTtwPW5ldyBlKHEs ciwnZG9jdW1lbnQnKTtpZighbCl7dmFyIG89ZygnYmx1ZUJhcicpO2lmKG8mJmMu aXNGaXhlZChvKSlwLnktPWUuZ2V0RWxlbWVudERpbWVuc2lvbnMobykueS8obj8y OjEpO319aWYobil7cC55LT1lLmdldFZpZXdwb3J0RGltZW5zaW9ucygpLnkvMjt9 ZWxzZSBpZihsKXtwLnktPWUuZ2V0Vmlld3BvcnREaW1lbnNpb25zKCkueTtwLnkr PWw7fXA9cC5jb252ZXJ0VG8oJ2RvY3VtZW50Jyk7aWYoayl7Yi5sb2FkQ29tcG9u ZW50cygnYW5pbWF0aW9uJyxmdW5jdGlvbigpe3ZhciBzPWRvY3VtZW50LmJvZHk7 YW5pbWF0aW9uKHMpLnRvKCdzY3JvbGxUb3AnLHAueSkudG8oJ3Njcm9sbExlZnQn LHAueCkuZWFzZShhbmltYXRpb24uZWFzZS5lbmQpLmR1cmF0aW9uKGspLm9uZG9u ZShtKS5nbygpO30pO31lbHNlIGlmKHdpbmRvdy5zY3JvbGxUbyl7d2luZG93LnNj cm9sbFRvKHAueCxwLnkpO20mJm0oKTt9fX07aC5ET01TY3JvbGw9aS5leHBvcnRz PWQ7fSwzKTsKX19lKCJsaW5rLWNvbnRyb2xsZXIiLFsiZXZlbnQtZXh0ZW5zaW9u cyIsIkRhdGFTdG9yZSIsInBhcmVudCIsInRyYWNrUmVmZXJyZXIiXSxmdW5jdGlv bihqLGwsayxpKXtsKCdldmVudC1leHRlbnNpb25zJyk7dmFyIGE9bCgnRGF0YVN0 b3JlJyk7dmFyIGI9bCgncGFyZW50Jyk7dmFyIG09bCgndHJhY2tSZWZlcnJlcicp O3ZhciBjPSdMaW5rQ29udHJvbGxlckhhbmRsZXInO3ZhciBnPVtdO3ZhciBlPVtd O2Z1bmN0aW9uIGQoZXZlbnQpe3ZhciBwPWIuYnlUYWcoZXZlbnQuZ2V0VGFyZ2V0 KCksJ2EnKTt2YXIgbj1wJiZwLmdldEF0dHJpYnV0ZSgnaHJlZicsMik7aWYoIW58 fHAucmVsfHwhaChuKXx8YS5nZXQocCxjKSlyZXR1cm47dmFyIG89RXZlbnQubGlz dGVuKHAsJ2NsaWNrJyxmdW5jdGlvbihxKXtpZihuLmNoYXJBdChuLmxlbmd0aC0x KT09JyMnKXtxLnByZXZlbnQoKTtyZXR1cm47fW0ocCxuKTtmKHAscSk7fSk7YS5z ZXQocCxjLG8pO31mdW5jdGlvbiBmKHEsZXZlbnQpe2lmKHEudGFyZ2V0fHxldmVu dC5nZXRNb2RpZmllcnMoKS5hbnl8fChldmVudC53aGljaCYmZXZlbnQud2hpY2gh PTEpKXJldHVybjt2YXIgbj1nLmNvbmNhdChlKTtmb3IodmFyIG89MCxwPW4ubGVu Z3RoO288cDtvKyspaWYobltvXShxLGV2ZW50KT09PWZhbHNlKXJldHVybiBldmVu dC5raWxsKCk7fWZ1bmN0aW9uIGgobil7dmFyIG89bi5tYXRjaCgvXihcdyspOi8p O3JldHVybiAhb3x8b1sxXS5tYXRjaCgvXmh0dHAvaSk7fWouTGlua0NvbnRyb2xs ZXI9ay5leHBvcnRzPXtyZWdpc3RlckhhbmRsZXI6ZnVuY3Rpb24obil7Zy5wdXNo KG4pO30scmVnaXN0ZXJGYWxsYmFja0hhbmRsZXI6ZnVuY3Rpb24obil7ZS5wdXNo KG4pO319O0V2ZW50Lmxpc3Rlbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsJ21v dXNlZG93bicsZCk7RXZlbnQubGlzdGVuKGRvY3VtZW50LmRvY3VtZW50RWxlbWVu dCwna2V5ZG93bicsZCk7fSwzKTsKX19lKCJQYWdlVHJhbnNpdGlvbnMiLFsiZXZl bnQtZXh0ZW5zaW9ucyIsImZ1bmN0aW9uLWV4dGVuc2lvbnMiLCJzdHJpbmctZXh0 ZW5zaW9ucyIsImFyYml0ZXIiLCJEaWFsb2ciLCJkb20iLCJkb20tc2Nyb2xsIiwi RW52IiwiRm9ybSIsIkhpc3RvcnlNYW5hZ2VyIiwibGluay1jb250cm9sbGVyIiwi T2JqZWN0VXRpbHMiLCJ1YSIsInVyaSIsInV0aWwiLCJ2ZWN0b3IiLCJjb21wdXRl UmVsYXRpdmVVUkkiLCJjb3B5UHJvcGVydGllcyIsImRvbS1jb3JlIiwiZ29PclJl cGxhY2UiLCJ1c2VyQWN0aW9uIiwidHgiXSxmdW5jdGlvbihzLHYsdSxxKXt2KCJl dmVudC1leHRlbnNpb25zIik7digiZnVuY3Rpb24tZXh0ZW5zaW9ucyIpO3YoInN0 cmluZy1leHRlbnNpb25zIik7dmFyIGE9digiYXJiaXRlciIpO3ZhciBkPXYoIkRp YWxvZyIpO3ZhciBiPXYoImRvbSIpO3ZhciBjPXYoImRvbS1zY3JvbGwiKTt2YXIg ZT12KCJFbnYiKTt2YXIgZj12KCJGb3JtIik7dmFyIGc9digiSGlzdG9yeU1hbmFn ZXIiKTt2YXIgaD12KCJsaW5rLWNvbnRyb2xsZXIiKTt2YXIgaT12KCJPYmplY3RV dGlscyIpO3ZhciB3PXYoInVhIik7dmFyIGs9digidXJpIik7dmFyIGw9digidXRp bCIpO3ZhciBtPXYoInZlY3RvciIpO3ZhciBvPXYoImNvbXB1dGVSZWxhdGl2ZVVS SSIpO3ZhciBwPXYoImNvcHlQcm9wZXJ0aWVzIik7dmFyIHI9digiZG9tLWNvcmUi KS5nZTt2YXIgdD12KCJnb09yUmVwbGFjZSIpO3ZhciB4PXYoInVzZXJBY3Rpb24i KTtzLnR4PXYoInR4Iik7dmFyIGo9e190cmFuc2l0aW9uX2hhbmRsZXJzOltdLF9z Y3JvbGxfcG9zaXRpb25zOnt9LF9zY3JvbGxfbG9ja2VkOmZhbHNlLGlzSW5pdGlh bGl6ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gISFqLl9pbml0aWFsaXplZDt9LF9pbml0 OmZ1bmN0aW9uKCl7aWYoIWUuQUxMT1dfVFJBTlNJVElPTl9JTl9JRlJBTUUmJndp bmRvdyE9d2luZG93LnRvcClyZXR1cm47aWYoai5faW5pdGlhbGl6ZWQpcmV0dXJu IGo7ai5faW5pdGlhbGl6ZWQ9dHJ1ZTt2YXIgemI9ay5nZXRSZXF1ZXN0VVJJKGZh bHNlKTt2YXIgeT16Yi5nZXRVbnF1YWxpZmllZFVSSSgpO3ZhciB6Yz1rKHkpLnNl dEZyYWdtZW50KG51bGwpO3ZhciB6YT15LmdldEZyYWdtZW50KCk7aWYoemEuY2hh ckF0KDApPT09JyEnJiZ6Yy50b1N0cmluZygpPT09emEuc3Vic3RyKDEpKXk9emM7 cChqLHtfY3VycmVudF91cmk6eSxfbW9zdF9yZWNlbnRfdXJpOnksX25leHRfdXJp Onl9KTt2YXIgejtpZih6Yi5nZXRGcmFnbWVudCgpLnN0YXJ0c1dpdGgoJy8nKSl7 ej16Yi5nZXRGcmFnbWVudCgpO31lbHNlIHo9eTtnLmluaXQoKS5zZXRDYW5vbmlj YWxMb2NhdGlvbignIycreikucmVnaXN0ZXJVUklIYW5kbGVyKGouX2hpc3RvcnlN YW5hZ2VySGFuZGxlcik7aC5yZWdpc3RlckZhbGxiYWNrSGFuZGxlcihqLl9yZXdy aXRlSHJlZik7aC5yZWdpc3RlckZhbGxiYWNrSGFuZGxlcihqLl9vbmxpbmtjbGlj ayk7RXZlbnQubGlzdGVuKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwnc3VibWl0 JyxqLl9vbmZvcm1zdWJtaXQpO0V2ZW50Lmxpc3Rlbih3aW5kb3csJ3Njcm9sbCcs ZnVuY3Rpb24oKXtpZighai5fc2Nyb2xsX2xvY2tlZClqLl9zY3JvbGxfcG9zaXRp b25zW2ouX2N1cnJlbnRfdXJpXT1tLmdldFNjcm9sbFBvc2l0aW9uKCk7fSk7cmV0 dXJuIGo7fSxyZWdpc3RlckhhbmRsZXI6ZnVuY3Rpb24oeix5KXtqLl9pbml0KCk7 eT15fHw1O2lmKCFqLl90cmFuc2l0aW9uX2hhbmRsZXJzW3ldKWouX3RyYW5zaXRp b25faGFuZGxlcnNbeV09W107ai5fdHJhbnNpdGlvbl9oYW5kbGVyc1t5XS5wdXNo KHopO30sZ2V0Q3VycmVudFVSSTpmdW5jdGlvbih5KXtpZighai5fY3VycmVudF91 cmkmJiF5KXJldHVybiBuZXcgayhqLl9tb3N0X3JlY2VudF91cmkpO3JldHVybiBu ZXcgayhqLl9jdXJyZW50X3VyaSk7fSxnZXRNb3N0UmVjZW50VVJJOmZ1bmN0aW9u KCl7cmV0dXJuIG5ldyBrKGouX21vc3RfcmVjZW50X3VyaSk7fSxnZXROZXh0VVJJ OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBrKGouX25leHRfdXJpKTt9LF9yZXdyaXRl SHJlZjpmdW5jdGlvbih5KXt2YXIgemE9eS5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTt2 YXIgej1vKGouX21vc3RfcmVjZW50X3VyaS5nZXRRdWFsaWZpZWRVUkkoKSx6YSku dG9TdHJpbmcoKTtpZih6YSE9eil5LnNldEF0dHJpYnV0ZSgnaHJlZicseik7fSxf b25saW5rY2xpY2s6ZnVuY3Rpb24oeSl7bi5sb29rQnVzeSh5KTtqLmdvKHkuZ2V0 QXR0cmlidXRlKCdocmVmJykpO3JldHVybiBmYWxzZTt9LF9vbmZvcm1zdWJtaXQ6 ZnVuY3Rpb24oZXZlbnQpe3ZhciB6PWV2ZW50LmdldFRhcmdldCgpO2lmKGYuZ2V0 QXR0cmlidXRlKHosJ3JlbCcpfHxmLmdldEF0dHJpYnV0ZSh6LCd0YXJnZXQnKSly ZXR1cm47dmFyIHk9eCgnZm9ybScseixldmVudCkuc2V0X25hbWVzcGFjZSgncGFn ZV90cmFuc2l0aW9uJyk7aWYod2luZG93LkFyYml0ZXJNb25pdG9yKUFyYml0ZXJN b25pdG9yLmluaXRVQSh5LFt6XSk7dmFyIHpiPW5ldyBrKGYuZ2V0QXR0cmlidXRl KHosJ2FjdGlvbicpfHwnJyk7dmFyIHphPW8oai5fbW9zdF9yZWNlbnRfdXJpLHpi KTt6LnNldEF0dHJpYnV0ZSgnYWN0aW9uJyx6YS50b1N0cmluZygpKTtpZigoZi5n ZXRBdHRyaWJ1dGUoeiwnbWV0aG9kJyl8fCdHRVQnKS50b1VwcGVyQ2FzZSgpPT09 J0dFVCcpe2ouZ28oemEuYWRkUXVlcnlEYXRhKGYuc2VyaWFsaXplKHopKSk7ZXZl bnQua2lsbCgpO319LGdvOmZ1bmN0aW9uKHpiLHope3ZhciB5PW5ldyBrKHpiKS5y ZW1vdmVRdWVyeURhdGEoJ3F1aWNrbGluZycpLmdldFF1YWxpZmllZFVSSSgpO3Zh ciB6YT15LmdldFVucXVhbGlmaWVkVVJJKCk7ZGVsZXRlIGouX3Njcm9sbF9wb3Np dGlvbnNbemFdOyF6JiZ4KCd1cmknLHtocmVmOnkudG9TdHJpbmcoKX0sbnVsbCwn SU5ESVJFQ1QnKTtuLmxvb2tCdXN5KCk7ai5fbG9hZFBhZ2UoeSxmdW5jdGlvbih6 Yyl7aWYoemMpe2cuZ28oeS50b1N0cmluZygpLGZhbHNlLHopO31lbHNlIHQod2lu ZG93LmxvY2F0aW9uLHkseik7fSk7fSxfaGlzdG9yeU1hbmFnZXJIYW5kbGVyOmZ1 bmN0aW9uKHkpe2lmKHkuY2hhckF0KDApIT0nLycpcmV0dXJuIGZhbHNlO3goJ2gn LHtocmVmOnl9LG51bGwpO2ouX2xvYWRQYWdlKG5ldyBrKHkpLGZ1bmN0aW9uKHop e2lmKCF6KXQod2luZG93LmxvY2F0aW9uLHksdHJ1ZSk7fSk7cmV0dXJuIHRydWU7 fSxfbG9hZFBhZ2U6ZnVuY3Rpb24oemMsemEpe2lmKGsoemMpLmdldEZyYWdtZW50 KCkmJmkuYXJlRXF1YWwoayh6Yykuc2V0RnJhZ21lbnQobnVsbCkuZ2V0UXVhbGlm aWVkVVJJKCksayhqLl9jdXJyZW50X3VyaSkuc2V0RnJhZ21lbnQobnVsbCkuZ2V0 UXVhbGlmaWVkVVJJKCkpKXtqLl9jdXJyZW50X3VyaT1qLl9tb3N0X3JlY2VudF91 cmk9emM7ai5yZXN0b3JlU2Nyb2xsUG9zaXRpb24oKTtuLnN0b3BMb29raW5nQnVz eSgpO3JldHVybjt9dmFyIHpiPWouX3Njcm9sbF9wb3NpdGlvbnNbai5fY3VycmVu dF91cmldO2ouX2N1cnJlbnRfdXJpPW51bGw7ai5fbmV4dF91cmk9emM7aWYoemIp Yy5zY3JvbGxUbyh6YixmYWxzZSk7dmFyIHo9ZnVuY3Rpb24oKXtqLl9zY3JvbGxf bG9ja2VkPXRydWU7dmFyIHpkPWouX2hhbmRsZVRyYW5zaXRpb24oemMpO3phJiZ6 YSh6ZCk7fTt2YXIgeT1fcnVuSG9va3MoJ29uYmVmb3JlbGVhdmVob29rcycpO2lm KHkpe24uc3RvcExvb2tpbmdCdXN5KCk7ai5fd2FybkJlZm9yZUxlYXZpbmcoeSx6 KTt9ZWxzZSB6KCk7fSxfaGFuZGxlVHJhbnNpdGlvbjpmdW5jdGlvbih6ZSl7d2lu ZG93Lm9uYmVmb3JlbGVhdmVob29rcz11bmRlZmluZWQ7bi5sb29rQnVzeSgpO2lm KCF6ZS5pc1NhbWVPcmlnaW4oKSlyZXR1cm4gZmFsc2U7dmFyIHpkPXdpbmRvdy5B c3luY1JlcXVlc3QmJndpbmRvdy5Bc3luY1JlcXVlc3QuZ2V0TGFzdElkKCk7YS5p bmZvcm0oInByZV9wYWdlX3RyYW5zaXRpb24iLHtmcm9tOmouZ2V0TW9zdFJlY2Vu dFVSSSgpLHRvOnplfSk7Zm9yKHZhciB6YT1qLl90cmFuc2l0aW9uX2hhbmRsZXJz Lmxlbmd0aC0xO3phPj0wOy0temEpe3ZhciB6PWouX3RyYW5zaXRpb25faGFuZGxl cnNbemFdO2lmKCF6KWNvbnRpbnVlO2Zvcih2YXIgemI9ei5sZW5ndGgtMTt6Yj49 MDstLXpiKWlmKHpbemJdKHplKT09PXRydWUpe3ZhciB6Yz17c2VuZGVyOnRoaXMs dXJpOnplLGlkOnpkfTt0cnl7YS5pbmZvcm0oInBhZ2VfdHJhbnNpdGlvbiIsemMp O31jYXRjaCh5KXt9cmV0dXJuIHRydWU7fWVsc2Ugei5zcGxpY2UoemIsMSk7fXJl dHVybiBmYWxzZTt9LHVuaWZ5VVJJOmZ1bmN0aW9uKCl7ai5fY3VycmVudF91cmk9 ai5fbW9zdF9yZWNlbnRfdXJpPWouX25leHRfdXJpO30sdHJhbnNpdGlvbkNvbXBs ZXRlOmZ1bmN0aW9uKHkpe2ouX2V4ZWN1dGVDb21wbGV0aW9uQ2FsbGJhY2soKTtu LnN0b3BMb29raW5nQnVzeSgpO2oudW5pZnlVUkkoKTtpZigheSlqLnJlc3RvcmVT Y3JvbGxQb3NpdGlvbigpO3RyeXtpZihkb2N1bWVudC5hY3RpdmVFbGVtZW50JiZk b2N1bWVudC5hY3RpdmVFbGVtZW50Lm5vZGVOYW1lPT09J0EnKWRvY3VtZW50LmFj dGl2ZUVsZW1lbnQuYmx1cigpO31jYXRjaCh6KXt9fSxfZXhlY3V0ZUNvbXBsZXRp b25DYWxsYmFjazpmdW5jdGlvbigpe2lmKGouX2NvbXBsZXRpb25DYWxsYmFjaylq Ll9jb21wbGV0aW9uQ2FsbGJhY2soKTtqLl9jb21wbGV0aW9uQ2FsbGJhY2s9bnVs bDt9LHNldENvbXBsZXRpb25DYWxsYmFjazpmdW5jdGlvbih5KXtqLl9jb21wbGV0 aW9uQ2FsbGJhY2s9eTt9LHJld3JpdGVDdXJyZW50VVJJOmZ1bmN0aW9uKHoseSl7 ai5yZWdpc3RlckhhbmRsZXIoZnVuY3Rpb24oKXtpZih6PT1qLmdldE1vc3RSZWNl bnRVUkkoKS5nZXRVbnF1YWxpZmllZFVSSSgpLnRvU3RyaW5nKCkpe2oudHJhbnNp dGlvbkNvbXBsZXRlKCk7cmV0dXJuIHRydWU7fX0pO2ouZ28oeSx0cnVlKTt9LF93 YXJuQmVmb3JlTGVhdmluZzpmdW5jdGlvbih6LHkpe25ldyBkKCkuc2V0VGl0bGUo Ilx1MDBiZlNlZ3VybyBxdWUgcXVpZXJlcyBzYWxpciBkZSBlc3RhIHBcdTAwZTFn aW5hPyIpLnNldEJvZHkoaHRtbGl6ZSh6KSkuc2V0QnV0dG9ucyhbe25hbWU6J2xl YXZlX3BhZ2UnLGxhYmVsOiJTYWxpciBkZSBlc3RhIHBcdTAwZTFnaW5hIixoYW5k bGVyOnl9LHtuYW1lOidjb250aW51ZV9lZGl0aW5nJyxsYWJlbDoiTm8gc2FsaXIg ZGUgZXN0YSBwXHUwMGUxZ2luYSIsY2xhc3NOYW1lOidpbnB1dGF1eCd9XSkuc2V0 TW9kYWwodHJ1ZSkuc2hvdygpO30scmVzdG9yZVNjcm9sbFBvc2l0aW9uOmZ1bmN0 aW9uKCl7ai5fc2Nyb2xsX2xvY2tlZD1mYWxzZTt2YXIgemE9ai5fY3VycmVudF91 cmk7dmFyIHpjPWouX3Njcm9sbF9wb3NpdGlvbnNbemFdO2lmKHpjKXtjLnNjcm9s bFRvKHpjLGZhbHNlKTtyZXR1cm47fWZ1bmN0aW9uIHpiKHpkKXtyZXR1cm4gKHpk fHxudWxsKSYmKGIuc2NyeShkb2N1bWVudC5ib2R5LCJhW25hbWU9JyIrZXNjYXBl X2pzX3F1b3Rlcyh6ZCkrIiddIilbMF18fHIoemQpKTt9dmFyIHk9emIoayh6YSku Z2V0RnJhZ21lbnQoKSk7aWYoeSl7dmFyIHo9bS5nZXRFbGVtZW50UG9zaXRpb24o eSk7ei54PTA7Yy5zY3JvbGxUbyh6KTt9fX07dmFyIG49d2luZG93Ll9CdXN5VUlN YW5hZ2VyfHx7X2xvb2tpbmdfYnVzeTpmYWxzZSxfb3JpZ2luYWxfY3Vyc29yczpb XSxsb29rQnVzeTpmdW5jdGlvbih5KXtpZih5KW4uX2dpdmVQcm9ncmVzc0N1cnNv cih5KTtpZihuLl9sb29raW5nX2J1c3kpcmV0dXJuO24uX2xvb2tpbmdfYnVzeT10 cnVlO24uX2dpdmVQcm9ncmVzc0N1cnNvcihkb2N1bWVudC5kb2N1bWVudEVsZW1l bnQpO30sc3RvcExvb2tpbmdCdXN5OmZ1bmN0aW9uKCl7aWYoIW4uX2xvb2tpbmdf YnVzeSlyZXR1cm47bi5fbG9va2luZ19idXN5PWZhbHNlO3doaWxlKG4uX29yaWdp bmFsX2N1cnNvcnMubGVuZ3RoKXt2YXIgemE9bi5fb3JpZ2luYWxfY3Vyc29ycy5w b3AoKTt2YXIgej16YVswXTt2YXIgeT16YVsxXTtpZih6LnN0eWxlKXouc3R5bGUu Y3Vyc29yPXl8fCcnO319LF9naXZlUHJvZ3Jlc3NDdXJzb3I6ZnVuY3Rpb24oeSl7 aWYoIXcuc2FmYXJpKCkpe24uX29yaWdpbmFsX2N1cnNvcnMucHVzaChbeSx5LnN0 eWxlLmN1cnNvcl0pO3kuc3R5bGUuY3Vyc29yPSdwcm9ncmVzcyc7fX19O3UuZXhw b3J0cz1qO30pOwpfX2UoInBhZ2UtdHJhbnNpdGlvbnMiLFsiZ29PclJlcGxhY2Ui LCJjb21wdXRlUmVsYXRpdmVVUkkiLCJIaXN0b3J5TWFuYWdlciIsIlBhZ2VUcmFu c2l0aW9ucyJdLGZ1bmN0aW9uKGEsYil7YS5nb19vcl9yZXBsYWNlPWIoJ2dvT3JS ZXBsYWNlJyk7YS5jb21wdXRlUmVsYXRpdmVVUkk9YignY29tcHV0ZVJlbGF0aXZl VVJJJyk7YS5IaXN0b3J5TWFuYWdlcj1hLkhpc3RvcnlNYW5hZ2VyfHxiKCdIaXN0 b3J5TWFuYWdlcicpO2EuUGFnZVRyYW5zaXRpb25zPWEuUGFnZVRyYW5zaXRpb25z fHxiKCdQYWdlVHJhbnNpdGlvbnMnKTt9LDMpOwp2YXIgTmF2aWdhdGlvbk1lc3Nh Z2U9e05BVklHQVRJT05fQkVHSU46J05hdmlnYXRpb25NZXNzYWdlL25hdmlnYXRp b25CZWdpbicsTkFWSUdBVElPTl9TRUxFQ1Q6J05hdmlnYXRpb25NZXNzYWdlL25h dmlnYXRpb25TZWxlY3QnLE5BVklHQVRJT05fRklSU1RfUkVTUE9OU0U6J05hdmln YXRpb25NZXNzYWdlL25hdmlnYXRpb25GaXJzdFJlc3BvbnNlJyxOQVZJR0FUSU9O X0NPTVBMRVRFRDonTmF2aWdhdGlvbk1lc3NhZ2UvbmF2aWdhdGlvbkNvbXBsZXRl ZCcsTkFWSUdBVElPTl9GQUlMRUQ6J05hdmlnYXRpb25NZXNzYWdlL25hdmlnYXRp b25GYWlsZWQnLE5BVklHQVRJT05fQ09VTlRfVVBEQVRFOidOYXZpZ2F0aW9uTWVz c2FnZS9uYXZpZ2F0aW9uQ291bnQnLE5BVklHQVRJT05fRkFWT1JJVEVfVVBEQVRF OidOYXZpZ2F0aW9uTWVzc2FnZS9uYXZpZ2F0aW9uRmF2b3JpdGVVcGRhdGUnLE5B VklHQVRJT05fSVRFTV9SRU1PVkVEOidOYXZpZ2F0aW9uTWVzc2FnZS9uYXZpZ2F0 aW9uSXRlbVJlbW92ZWQnLE5BVklHQVRJT05fSVRFTV9ISURERU46J05hdmlnYXRp b25NZXNzYWdlL25hdmlnYXRpb25JdGVtSGlkZGVuJyxJTlRFUk5BTF9MT0FESU5H X0JFR0lOOidOYXZpZ2F0aW9uTWVzc2FnZS9pbnRlcm5hbExvYWRpbmdCZWdpbics SU5URVJOQUxfTE9BRElOR19DT01QTEVURUQ6J05hdmlnYXRpb25NZXNzYWdlL2lu dGVybmFsTG9hZGluZ0NvbXBsZXRlZCd9OwpmdW5jdGlvbiBBc3luY0xheW91dCgp e31Bc3luY0xheW91dC5wcm90b3R5cGU9e2luaXQ6ZnVuY3Rpb24oYSl7dGhpcy5j YW52YXNfaWQ9YTtpZihnZSgncmlnaHRDb2wnKSl0aGlzLmF1eGlsaWFyeV9pZD0n cmlnaHRDb2wnO2lmKGdlKCdoZWFkZXJBcmVhJykpdGhpcy5oZWFkZXJfaWQ9J2hl YWRlckFyZWEnO2lmKGdlKCd0b29sYmFyQ29udGFpbmVyJykpdGhpcy50b29sYmFy X2lkPSd0b29sYmFyQ29udGFpbmVyJzt0aGlzLndhaXRpbmdGb3JBdXg9ZmFsc2U7 UGFnZVRyYW5zaXRpb25zLnJlZ2lzdGVySGFuZGxlcih0aGlzLmNhdGNoUGFnZVRy YW5zaXRpb24uYmluZCh0aGlzKSk7dGhpcy5zdWJzY3JpcHRpb249QXJiaXRlci5z dWJzY3JpYmUoTmF2aWdhdGlvbk1lc3NhZ2UuTkFWSUdBVElPTl9CRUdJTix0aGlz Lm9uTmF2aWdhdGUuYmluZCh0aGlzKSk7cmV0dXJuIHRoaXM7fSxjYXRjaFBhZ2VU cmFuc2l0aW9uOmZ1bmN0aW9uKGEpe0FyYml0ZXIudW5zdWJzY3JpYmUodGhpcy5z dWJzY3JpcHRpb24pO3JldHVybiBmYWxzZTt9LGdldENhbnZhc0lEOmZ1bmN0aW9u KGEpe3JldHVybiB0aGlzLmN1c3RvbUNhbnZhc0lEP3RoaXMuY3VzdG9tQ2FudmFz SUQ6KGEuc2lkZWNvbD8nY29udGVudENvbCc6J2NvbnRlbnRBcmVhJyk7fSxvbk5h dmlnYXRlOmZ1bmN0aW9uKGMsYSl7dmFyIGQ9YS51c2VBamF4UGlwZSYmQWpheFBp cGVSZXF1ZXN0LmlzQWN0aXZlT25QYWdlKGEucGFyYW1zLmVuZHBvaW50KTthPWEu cGFyYW1zO2lmKGEuZW5kcG9pbnQpe2lmKHRoaXMucmVxdWVzdCl7dGhpcy5yZXF1 ZXN0LnNldEZpbmFsbHlIYW5kbGVyKGJhZ29maG9sZGluZyk7dGhpcy5yZXF1ZXN0 LmFib3J0KCk7fWlmKHRoaXMuc2lkZVJlcXVlc3QpdGhpcy5zaWRlUmVxdWVzdC5h Ym9ydCgpO2lmKGQpe3RoaXMucmVxdWVzdD1uZXcgQWpheFBpcGVSZXF1ZXN0KCku c2V0VVJJKGEuZW5kcG9pbnQpLnNldERhdGEoYSkuc2V0Q2FudmFzSWQodGhpcy5n ZXRDYW52YXNJRChhKSkuc2V0RmluYWxseUhhbmRsZXIodGhpcy5maW5hbGx5SGFu ZGxlci5iaW5kKHRoaXMpKS5zZXRFcnJvckhhbmRsZXIodGhpcy5lcnJvckhhbmRs ZXIuYmluZCh0aGlzKSkuc2V0Rmlyc3RSZXNwb25zZUNhbGxiYWNrKHRoaXMuZmly c3RSZXNwb25zZUNhbGxiYWNrLmJpbmQodGhpcykpLnNlbmQoKTt9ZWxzZXthLmhh bmRsZWQ9dHJ1ZTt0aGlzLndhaXRpbmdGb3JBdXg9YS5zaWRlY29sO3ZhciBlPSEh YS5pZnJhbWU7dmFyIGI9bmV3IEFzeW5jUmVxdWVzdCgpLnNldE9wdGlvbigndXNl SWZyYW1lVHJhbnNwb3J0JyxlKS5zZXRVUkkobmV3IFVSSShhLmVuZHBvaW50KSku c2V0UmVhZE9ubHkodHJ1ZSkuc2V0TWV0aG9kKCdHRVQnKS5zZXREYXRhKGEpLnNl dEhhbmRsZXIodGhpcy5vblJlc3BvbnNlLmJpbmQodGhpcykpLnNldEVycm9ySGFu ZGxlcih0aGlzLmVycm9ySGFuZGxlci5iaW5kKHRoaXMpKS5zZXRGaW5hbGx5SGFu ZGxlcih0aGlzLmZpbmFsbHlIYW5kbGVyLmJpbmQodGhpcykpO3RoaXMucmVxdWVz dD1iO2Iuc2VuZCgpO319fSxvblNpZGVSZXNwb25zZTpmdW5jdGlvbihiKXt2YXIg YT1iLmdldFBheWxvYWQoKTtpZihhJiZ0aGlzLmF1eGlsaWFyeV9pZCl0aGlzLnJl Y2VpdmVkQXV4KGEpO30scmVjZWl2ZWRBdXg6ZnVuY3Rpb24oYSl7IXRoaXMud2Fp dGluZ0ZvckF1eDt0aGlzLndhaXRpbmdGb3JBdXg9ZmFsc2U7RE9NLnNldENvbnRl bnQoJCh0aGlzLmF1eGlsaWFyeV9pZCksSFRNTChhKSk7fSxvblJlc3BvbnNlOmZ1 bmN0aW9uKGUpe3ZhciBkPWUuZ2V0UGF5bG9hZCgpO2lmKGQucmVkaXJlY3Qpe2dv VVJJKGQucmVkaXJlY3QpO31lbHNle3ZhciBjPWQuaHRtbHx8ZDtET00uc2V0Q29u dGVudCgkKHRoaXMuY2FudmFzX2lkKSxIVE1MKGMpKTtpZihkLnNpZGVfaHRtbCYm dGhpcy5hdXhpbGlhcnlfaWQpdGhpcy5yZWNlaXZlZEF1eChkLnNpZGVfaHRtbCk7 aWYodGhpcy5oZWFkZXJfaWQmJiFkLmtlZXBfaGVhZGVyKXt2YXIgYj0kKHRoaXMu aGVhZGVyX2lkKTtET00uc2V0Q29udGVudChiLEhUTUwoZC5oZWFkZXJfaHRtbHx8 JycpKTtDU1MuY29uZGl0aW9uU2hvdyhiLGQuaGVhZGVyX2h0bWwpO31pZihkLnRv b2xiYXJfaHRtbCYmdGhpcy50b29sYmFyX2lkKURPTS5zZXRDb250ZW50KCQodGhp cy50b29sYmFyX2lkKSxIVE1MKGQudG9vbGJhcl9odG1sKSk7aWYoZC5qcykobmV3 IEZ1bmN0aW9uKGQuanMpKSgpO0NTUy5jb25kaXRpb25DbGFzcygnY29udGVudENv bCcsJ2hhc1JpZ2h0Q29sJyx0aGlzLmF1eGlsaWFyeV9pZCYmIWQubm9SaWdodFNp ZGUpO3ZhciBmPWdlKCdyaWdodENvbCcpO2lmKGYmJmQubm9SaWdodFNpZGUpRE9N LmVtcHR5KGYpO312YXIgYT1lLmdldFJlcXVlc3QoKS5nZXREYXRhKCk7QXJiaXRl ci5pbmZvcm0oTmF2aWdhdGlvbk1lc3NhZ2UuTkFWSUdBVElPTl9DT01QTEVURUQs YS5rZXkpO30sZXJyb3JIYW5kbGVyOmZ1bmN0aW9uKGEpe0FzeW5jUmVzcG9uc2Uu dmVyYm9zZUVycm9ySGFuZGxlcihhKTtBcmJpdGVyLmluZm9ybShOYXZpZ2F0aW9u TWVzc2FnZS5OQVZJR0FUSU9OX0ZBSUxFRCk7dGhpcy5yZXF1ZXN0PW51bGw7fSxm aXJzdFJlc3BvbnNlQ2FsbGJhY2s6ZnVuY3Rpb24oYSl7d2luZG93LnNjcm9sbFRv KDAsMCk7QXJiaXRlci5pbmZvcm0oTmF2aWdhdGlvbk1lc3NhZ2UuTkFWSUdBVElP Tl9GSVJTVF9SRVNQT05TRSk7fSxmaW5hbGx5SGFuZGxlcjpmdW5jdGlvbihhKXt0 aGlzLnJlcXVlc3Q9bnVsbDtQYWdlVHJhbnNpdGlvbnMudHJhbnNpdGlvbkNvbXBs ZXRlKHRydWUpO0FyYml0ZXIuaW5mb3JtKE5hdmlnYXRpb25NZXNzYWdlLk5BVklH QVRJT05fQ09NUExFVEVEKTt9fTsKZnVuY3Rpb24gRnV0dXJlU2lkZU5hdigpe0Z1 dHVyZVNpZGVOYXYuaW5zdGFuY2UmJkZ1dHVyZVNpZGVOYXYuaW5zdGFuY2UudW5p bnN0YWxsKCk7RnV0dXJlU2lkZU5hdi5pbnN0YW5jZT10aGlzO31GdXR1cmVTaWRl TmF2Lmluc3RhbmNlPW51bGw7RnV0dXJlU2lkZU5hdi5nZXRJbnN0YW5jZT1mdW5j dGlvbigpe3JldHVybiBGdXR1cmVTaWRlTmF2Lmluc3RhbmNlfHxuZXcgRnV0dXJl U2lkZU5hdigpO307RnV0dXJlU2lkZU5hdi5wcm90b3R5cGU9e2luaXQ6ZnVuY3Rp b24oYyxiLGEpe3RoaXMucm9vdD1jO3RoaXMuaXRlbXM9e307dGhpcy5zZWN0aW9u cz17fTt0aGlzLmVkaXRvcj1udWxsO3RoaXMuZWRpdGluZz1mYWxzZTt0aGlzLnNl bGVjdGVkPW51bGw7dGhpcy5sb2FkaW5nPW51bGw7dGhpcy5rZXlQYXJhbT0nc2sn O3RoaXMuZGVmYXVsdEtleT1iO3RoaXMudXJpPVVSSS5nZXRSZXF1ZXN0VVJJKCk7 dGhpcy5hamF4UGlwZT1hO3RoaXMuYWpheFBpcGVFbmRwb2ludHM9e307dGhpcy5z aWRlY29sPXRydWU7dGhpcy5faW5zdGFsbGVkPXRydWU7dGhpcy5faGFuZGxlUGFn ZVRyYW5zaXRpb25zPXRydWU7UGFnZVRyYW5zaXRpb25zLnJlZ2lzdGVySGFuZGxl cihmdW5jdGlvbihkKXtyZXR1cm4gdGhpcy5faGFuZGxlUGFnZVRyYW5zaXRpb25z JiZ0aGlzLmhhbmRsZVBhZ2VUcmFuc2l0aW9uKGQpO30uYmluZCh0aGlzKSk7dGhp cy5fZXZlbnRIYW5kbGVycz1bXTt0aGlzLl9hcmJpdGVyU3Vic2NyaXB0aW9ucz1b QXJiaXRlci5zdWJzY3JpYmUoTmF2aWdhdGlvbk1lc3NhZ2UuTkFWSUdBVElPTl9D T01QTEVURUQsdGhpcy5uYXZpZ2F0aW9uQ29tcGxldGUuYmluZCh0aGlzKSksQXJi aXRlci5zdWJzY3JpYmUoTmF2aWdhdGlvbk1lc3NhZ2UuTkFWSUdBVElPTl9GQUlM RUQsdGhpcy5uYXZpZ2F0aW9uRmFpbGVkLmJpbmQodGhpcykpLEFyYml0ZXIuc3Vi c2NyaWJlKE5hdmlnYXRpb25NZXNzYWdlLk5BVklHQVRJT05fQ09VTlRfVVBEQVRF LHRoaXMubmF2aWdhdGlvbkNvdW50VXBkYXRlLmJpbmQodGhpcykpLEFyYml0ZXIu c3Vic2NyaWJlKE5hdmlnYXRpb25NZXNzYWdlLk5BVklHQVRJT05fU0VMRUNULHRo aXMubmF2aWdhdGlvblNlbGVjdC5iaW5kKHRoaXMpKSxBcmJpdGVyLnN1YnNjcmli ZShQcmVzZW5jZU1lc3NhZ2UuZ2V0QXJiaXRlck1lc3NhZ2VUeXBlKCduYXZfdXBk YXRlX2NvdW50cycpLHRoaXMubmF2aWdhdGlvbkNvdW50VXBkYXRlRnJvbVByZXNl bmNlLmJpbmQodGhpcykpXTt0aGlzLl9leHBsaWNpdEhvdmVyPVtdO3RoaXMuX2Vu c3VyZUhvdmVyKCdzaWRlTmF2SXRlbScpO3RoaXMuX2V2ZW50SGFuZGxlcnMucHVz aChFdmVudC5saXN0ZW4od2luZG93LCdyZXNpemUnLHRoaXMuX2hhbmRsZVJlc2l6 ZS5iaW5kKHRoaXMpKSk7dGhpcy5fY2hlY2tOYXJyb3coKTt0aGlzLl9zZWxlY3Rv clN1YnNjcmlwdGlvbnM9W107d2luZG93LlNlbGVjdG9yJiZ0aGlzLl9zZWxlY3Rv clN1YnNjcmlwdGlvbnMucHVzaChTZWxlY3Rvci5zdWJzY3JpYmUoWydvcGVuJywn Y2xvc2UnXSxmdW5jdGlvbihmLGQpe3ZhciBlPVBhcmVudC5ieUNsYXNzKGQuc2Vs ZWN0b3IsJ3NpZGVOYXZJdGVtJyk7ZSYmQ1NTLmNvbmRpdGlvbkNsYXNzKGUsJ2Vk aXRNZW51T3BlbmVkJyxmPT09J29wZW4nKTt9KSk7b25sZWF2ZVJlZ2lzdGVyKHRo aXMudW5pbnN0YWxsLmJpbmQodGhpcykpO30sX2hhbmRsZVJlc2l6ZTooZnVuY3Rp b24oKXt2YXIgYTtyZXR1cm4gZnVuY3Rpb24oKXthJiZjbGVhclRpbWVvdXQoYSk7 YT10aGlzLl9jaGVja05hcnJvdy5iaW5kKHRoaXMpLmRlZmVyKDIwMCk7fTt9KSgp LF9jaGVja05hcnJvdzpmdW5jdGlvbigpe0NTUy5jb25kaXRpb25DbGFzcyh0aGlz LnJvb3QsJ3VpTmFycm93U2lkZU5hdicsVmVjdG9yMi5nZXRFbGVtZW50UG9zaXRp b24odGhpcy5yb290KS54PDIwKTt9LF9lbnN1cmVIb3ZlcjpmdW5jdGlvbihhKXtp Zih1YS5pZSgpPDgpQm9vdGxvYWRlci5sb2FkQ29tcG9uZW50cygnZXhwbGljaXQt aG92ZXInLGZ1bmN0aW9uKCl7dGhpcy5fZXhwbGljaXRIb3Zlci5wdXNoKG5ldyBF eHBsaWNpdEhvdmVyKHRoaXMucm9vdCxhKSk7fS5iaW5kKHRoaXMpKTt9LHVuaW5z dGFsbDpmdW5jdGlvbigpe2lmKHRoaXMuX2luc3RhbGxlZCl7dGhpcy5faW5zdGFs bGVkPWZhbHNlO3RoaXMuX2hhbmRsZVBhZ2VUcmFuc2l0aW9ucz1mYWxzZTt0aGlz Ll9hcmJpdGVyU3Vic2NyaXB0aW9ucy5mb3JFYWNoKEFyYml0ZXIudW5zdWJzY3Jp YmUpO3RoaXMuX3NlbGVjdG9yU3Vic2NyaXB0aW9ucy5mb3JFYWNoKFNlbGVjdG9y LnVuc3Vic2NyaWJlKTt0aGlzLl9ldmVudEhhbmRsZXJzLmZvckVhY2goZnVuY3Rp b24oYSl7YS5yZW1vdmUoKTt9KTt0aGlzLl9leHBsaWNpdEhvdmVyLmZvckVhY2go ZnVuY3Rpb24oYSl7YS51bmluc3RhbGwoKTt9KTt9fSxpbml0U2VjdGlvbjpmdW5j dGlvbihiLGEpe3RoaXMuX2luaXRJdGVtcyhhKTt0aGlzLl9pbml0U2VjdGlvbihi KTt9LGFkZEl0ZW06ZnVuY3Rpb24oYSxiKXt0aGlzLl9pbml0SXRlbShhLGIpO30s X2luaXRJdGVtczpmdW5jdGlvbihiKXt2YXIgYT1mdW5jdGlvbihjLGUpe3ZhciBk PXRoaXMuX2luaXRJdGVtKGMsZSk7JChjLmNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0 aW9uKGYpe2EoZixkKTt9KTt9LmJpbmQodGhpcyk7JEEoYikuZm9yRWFjaChmdW5j dGlvbihjKXthKGMsbnVsbCk7fSk7fSxfaW5pdEl0ZW06ZnVuY3Rpb24oYSxkKXt2 YXIgYj10aGlzLml0ZW1zW2EuaWRdPXRoaXMuX2NvbnN0cnVjdEl0ZW0oYSxkKTtp ZihiLmVxdWFscyh0aGlzLnNlbGVjdGVkKXx8YS5zZWxlY3RlZCl0aGlzLnNldFNl bGVjdGVkKGIpO3ZhciBjPWIuZ2V0TGlua05vZGUoKTtjJiZ0aGlzLl9ldmVudEhh bmRsZXJzLnB1c2goRXZlbnQubGlzdGVuKGMsJ2NsaWNrJyxmdW5jdGlvbihldmVu dCl7cmV0dXJuICF0aGlzLmVkaXRpbmc7fS5iaW5kKHRoaXMpKSk7cmV0dXJuIGI7 fSxfaW5pdFNlY3Rpb246ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5zZWN0aW9uc1th LmlkXT10aGlzLl9jb25zdHJ1Y3RTZWN0aW9uKGEpO3RoaXMuX2V2ZW50SGFuZGxl cnMucHVzaChFdmVudC5saXN0ZW4oYi5ub2RlLCdjbGljaycsdGhpcy5oYW5kbGVT ZWN0aW9uQ2xpY2suYmluZCh0aGlzLGIpKSk7RE9NLnNjcnkoYi5ub2RlLCdkaXYu Ym9va21hcmtzTWVudUJ1dHRvbicpLmZvckVhY2goQ1NTLnNob3cpO3JldHVybiBi O30sX2NvbnN0cnVjdEl0ZW06ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3IEZ1dHVy ZVNpZGVOYXZJdGVtKGEsYik7fSxfY29uc3RydWN0U2VjdGlvbjpmdW5jdGlvbihh KXtyZXR1cm4gbmV3IEZ1dHVyZVNpZGVOYXZTZWN0aW9uKGEpO30saGFuZGxlU2Vj dGlvbkNsaWNrOmZ1bmN0aW9uKGMsZXZlbnQpe3ZhciBiPXRoaXMuX2dldEV2ZW50 VGFyZ2V0KGV2ZW50LCdhJyk7dmFyIGE9dGhpcy5fZ2V0SXRlbUZvck5vZGUoYik7 aWYoIWIpe3JldHVybjt9ZWxzZSBpZihDU1MuaGFzQ2xhc3MoYi5wYXJlbnROb2Rl LCd1aU1lbnVJdGVtJykpe3RoaXMuX2hhbmRsZU1lbnVDbGljayhjLGEsYi5wYXJl bnROb2RlLGV2ZW50KTt9ZWxzZSB0aGlzLl9oYW5kbGVMaW5rQ2xpY2soYyxiLGV2 ZW50KTt9LF9nZXRFdmVudFRhcmdldDpmdW5jdGlvbihldmVudCxhKXt2YXIgYj1l dmVudC5nZXRUYXJnZXQoKTtpZihiLnRhZ05hbWUhPT1hLnRvVXBwZXJDYXNlKCkp e3JldHVybiBQYXJlbnQuYnlUYWcoYixhKTt9ZWxzZSByZXR1cm4gYjt9LF9oYW5k bGVNZW51Q2xpY2s6ZnVuY3Rpb24oYyxhLGIsZXZlbnQpe2lmKENTUy5oYXNDbGFz cyhiLCdyZWFycmFuZ2UnKSl0aGlzLmJlZ2luRWRpdChjKTt9LF9oYW5kbGVMaW5r Q2xpY2s6ZnVuY3Rpb24oYixhLGV2ZW50KXtpZihDU1MuaGFzQ2xhc3MoYSwnbmF2 RWRpdERvbmUnKSl7dGhpcy5lZGl0aW5nP3RoaXMuZW5kRWRpdCgpOnRoaXMuYmVn aW5FZGl0KGIpO2V2ZW50LmtpbGwoKTt9fSxnZXRJdGVtOmZ1bmN0aW9uKGEpe2lm KHRoaXMuX2lzQ3VycmVudFBhdGgoYSkpe3JldHVybiB0aGlzLl9nZXRJdGVtRm9y S2V5KHRoaXMuX2dldEtleShhLmdldFF1ZXJ5RGF0YSgpKXx8dGhpcy5kZWZhdWx0 S2V5KTt9ZWxzZSByZXR1cm4gdGhpcy5fZ2V0SXRlbUZvclBhdGgoYS5nZXRQYXRo KCkpO30sZ2V0Tm9kZUZvcktleTpmdW5jdGlvbihiKXt2YXIgYT10aGlzLl9nZXRJ dGVtRm9yS2V5KGIpO2lmKGEpcmV0dXJuIGEubm9kZTt9LF9pc0N1cnJlbnRQYXRo OmZ1bmN0aW9uKGEpe3JldHVybiBhLmdldERvbWFpbigpPT09dGhpcy51cmkuZ2V0 RG9tYWluKCkmJmEuZ2V0UGF0aCgpPT09dGhpcy51cmkuZ2V0UGF0aCgpO30sX2dl dEtleTpmdW5jdGlvbihhKXtyZXR1cm4gYVt0aGlzLmtleVBhcmFtXTt9LF9nZXRJ dGVtRm9yTm9kZTpmdW5jdGlvbihhKXthPVBhcmVudC5ieUNsYXNzKGEsJ3NpZGVO YXZJdGVtJyk7cmV0dXJuIGEmJnRoaXMuaXRlbXNbYS5pZF07fSxfZ2V0SXRlbUZv cktleTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fZmluZEl0ZW0oZnVuY3Rpb24o Yil7cmV0dXJuIGIubWF0Y2hLZXkoYSk7fSk7fSxfZ2V0SXRlbUZvclBhdGg6ZnVu Y3Rpb24oYSl7cmV0dXJuIHRoaXMuX2ZpbmRJdGVtKGZ1bmN0aW9uKGIpe3JldHVy biBiLm1hdGNoUGF0aChhKTt9KTt9LF9maW5kSXRlbTpmdW5jdGlvbihhKXtmb3Io dmFyIGIgaW4gdGhpcy5pdGVtcylpZihhKHRoaXMuaXRlbXNbYl0pKXJldHVybiB0 aGlzLml0ZW1zW2JdO30scmVtb3ZlSXRlbTpmdW5jdGlvbihhKXtpZihhJiZ0aGlz Lml0ZW1zW2EuaWRdKXtET00ucmVtb3ZlKGEubm9kZSk7ZGVsZXRlIHRoaXMuaXRl bXNbYS5pZF07fX0scmVtb3ZlSXRlbUJ5S2V5OmZ1bmN0aW9uKGEpe3RoaXMucmVt b3ZlSXRlbSh0aGlzLl9nZXRJdGVtRm9yS2V5KGEpKTt9LG1vdmVJdGVtOmZ1bmN0 aW9uKGQsYixjKXt2YXIgYT1ET00uZmluZChkLm5vZGUsJ3VsLnVpU2lkZU5hdicp OyhjP0RPTS5wcmVwZW5kQ29udGVudDpET00uYXBwZW5kQ29udGVudCkoYSxiLm5v ZGUpO30sc2V0TG9hZGluZzpmdW5jdGlvbihhKXt0aGlzLmxvYWRpbmcmJnRoaXMu bG9hZGluZy5oaWRlTG9hZGluZygpO3RoaXMubG9hZGluZz1hO3RoaXMubG9hZGlu ZyYmdGhpcy5sb2FkaW5nLnNob3dMb2FkaW5nKCk7fSxzZXRTZWxlY3RlZDpmdW5j dGlvbihhKXt0aGlzLnNldExvYWRpbmcobnVsbCk7aWYodGhpcy5zZWxlY3RlZCl7 dGhpcy5zZWxlY3RlZC5oaWRlU2VsZWN0ZWQoKTt0aGlzLnNlbGVjdGVkLmdldFRv cCgpLmhpZGVDaGlsZHJlbigpO310aGlzLnNlbGVjdGVkPWE7aWYodGhpcy5zZWxl Y3RlZCl7dGhpcy5zZWxlY3RlZC5zaG93U2VsZWN0ZWQoKTt0aGlzLnNlbGVjdGVk LmdldFRvcCgpLnNob3dDaGlsZHJlbigpO319LGhhbmRsZVBhZ2VUcmFuc2l0aW9u OmZ1bmN0aW9uKGMpe3ZhciBhPXRoaXMuZ2V0SXRlbShjKTt2YXIgYj1hJiZhLmVu ZHBvaW50JiZ0aGlzLl9kb1BhZ2VUcmFuc2l0aW9uKGEsYyk7cmV0dXJuIGI7fSxf ZG9QYWdlVHJhbnNpdGlvbjpmdW5jdGlvbihhLGIpe3RoaXMuc2V0TG9hZGluZyhh KTt0aGlzLl9zZW5kUGFnZVRyYW5zaXRpb24oYS5lbmRwb2ludCxjb3B5X3Byb3Bl cnRpZXModGhpcy5fZ2V0VHJhbnNpdGlvbkRhdGEoYSxiKSxiLmdldFF1ZXJ5RGF0 YSgpKSk7cmV0dXJuIHRydWU7fSxfc2VuZFBhZ2VUcmFuc2l0aW9uOmZ1bmN0aW9u KGIsYSl7YS5lbmRwb2ludD1iO0FyYml0ZXIuaW5mb3JtKE5hdmlnYXRpb25NZXNz YWdlLk5BVklHQVRJT05fQkVHSU4se3VzZUFqYXhQaXBlOnRoaXMuX3VzZUFqYXhQ aXBlKGIpLHBhcmFtczphfSk7fSxfZ2V0VHJhbnNpdGlvbkRhdGE6ZnVuY3Rpb24o YixjKXt2YXIgYT17fTthLnNpZGVjb2w9dGhpcy5zaWRlY29sO2EucGF0aD1jLmdl dFBhdGgoKTthW3RoaXMua2V5UGFyYW1dPWIudGV4dEtleTthLmtleT1iLnRleHRL ZXk7cmV0dXJuIGE7fSxfdXNlQWpheFBpcGU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRo aXMuYWpheFBpcGV8fHRoaXMuYWpheFBpcGVFbmRwb2ludHNbYV07fSxuYXZpZ2F0 aW9uQ29tcGxldGU6ZnVuY3Rpb24oKXt0aGlzLmxvYWRpbmcmJnRoaXMuc2V0U2Vs ZWN0ZWQodGhpcy5sb2FkaW5nKTt9LG5hdmlnYXRpb25GYWlsZWQ6ZnVuY3Rpb24o KXt0aGlzLnNldExvYWRpbmcobnVsbCk7fSxuYXZpZ2F0aW9uU2VsZWN0OmZ1bmN0 aW9uKGMsYSl7dmFyIGI9dGhpcy5fZ2V0SXRlbUZvcktleSh0aGlzLl9nZXRLZXko YSkpO2lmKGEuYXNMb2FkaW5nKXt0aGlzLnNldExvYWRpbmcoYik7fWVsc2UgdGhp cy5zZXRTZWxlY3RlZChiKTt9LG5hdmlnYXRpb25Db3VudFVwZGF0ZTpmdW5jdGlv bihjLGEpe3ZhciBiPXRoaXMuX2dldEl0ZW1Gb3JLZXkoYSYmYS5rZXkpO2lmKGIp aWYodHlwZW9mIGEuY291bnQhPT0idW5kZWZpbmVkIil7Yi5zZXRDb3VudChhLmNv dW50LGEuaGlkZSk7fWVsc2UgaWYodHlwZW9mIGEuaW5jcmVtZW50IT09InVuZGVm aW5lZCIpYi5pbmNyZW1lbnRDb3VudChhLmluY3JlbWVudCxhLmhpZGUpO30sbmF2 aWdhdGlvbkNvdW50VXBkYXRlRnJvbVByZXNlbmNlOmZ1bmN0aW9uKGMsYSl7YT1h Lm9iajtpZihhKWlmKCFhLmNsYXNzX25hbWV8fGEuY2xhc3NfbmFtZSYmQ1NTLmhh c0NsYXNzKHRoaXMucm9vdCxhLmNsYXNzX25hbWUpKWlmKGEuaXRlbXMpZm9yKHZh ciBiPTA7YjxhLml0ZW1zLmxlbmd0aDtiKyspdGhpcy5uYXZpZ2F0aW9uQ291bnRV cGRhdGUoYyxhLml0ZW1zW2JdKTt9LGJlZ2luRWRpdDpmdW5jdGlvbihhKXtpZigh dGhpcy5lZGl0aW5nKXt0aGlzLmVkaXRpbmc9dHJ1ZTtDU1MuYWRkQ2xhc3ModGhp cy5yb290LCdlZGl0TW9kZScpO3RoaXMuX3VwZGF0ZVRyYWNraW5nRGF0YSgpO0Jv b3Rsb2FkZXIubG9hZENvbXBvbmVudHMoJ3NvcnRhYmxlLXNpZGUtbmF2LWpzJyx0 aGlzLl9pbml0RWRpdG9yLmJpbmQodGhpcyxhKSk7fX0sZW5kRWRpdDpmdW5jdGlv bigpe2lmKHRoaXMuZWRpdGluZyl7Q1NTLnJlbW92ZUNsYXNzKHRoaXMucm9vdCwn ZWRpdE1vZGUnKTt0aGlzLmVkaXRvci5lbmRFZGl0KCk7dGhpcy5lZGl0b3I9bnVs bDt0aGlzLmVkaXRpbmc9ZmFsc2U7dGhpcy5fdXBkYXRlVHJhY2tpbmdEYXRhKCk7 fX0sX3VwZGF0ZVRyYWNraW5nRGF0YTpmdW5jdGlvbihhKXt2YXIgYz10aGlzLnJv b3QuZ2V0QXR0cmlidXRlKCdkYXRhLWd0Jyl8fCJ7fSI7dHJ5e2M9SlNPTi5wYXJz ZShjKTtpZih0aGlzLmVkaXRpbmcpe2MuZWRpdGluZz10cnVlO31lbHNlIGRlbGV0 ZSBjLmVkaXRpbmc7dGhpcy5yb290LnNldEF0dHJpYnV0ZSgnZGF0YS1ndCcsSlNP Ti5zdHJpbmdpZnkoYykpO31jYXRjaChiKXt9fSxfaW5pdEVkaXRvcjpmdW5jdGlv bihhKXt0aGlzLmVkaXRvcj1hLmdldEVkaXRvcigpO3RoaXMuZWRpdG9yLmJlZ2lu RWRpdCgpO319O2Z1bmN0aW9uIEZ1dHVyZVNpZGVOYXZTZWN0aW9uKGEpe3RoaXMu aWQ9YS5pZDt0aGlzLm5vZGU9dGhpcy5ub2RlfHwkKGEuaWQpO3RoaXMuZWRpdEVu ZHBvaW50PWEuZWRpdEVuZHBvaW50O31GdXR1cmVTaWRlTmF2U2VjdGlvbi5wcm90 b3R5cGU9e2VxdWFsczpmdW5jdGlvbihhKXtyZXR1cm4gYSYmYS5pZD09PXRoaXMu aWQ7fSxnZXRFZGl0b3I6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFNvcnRhYmxlU2lk ZU5hdihET00uZmluZCh0aGlzLm5vZGUsJ3VsLnVpU2lkZU5hdicpLHRoaXMuZWRp dEVuZHBvaW50KTt9fTtmdW5jdGlvbiBGdXR1cmVTaWRlTmF2SXRlbShhLGMpe3Ro aXMuaWQ9YS5pZDt0aGlzLnVwPWM7dGhpcy5lbmRwb2ludD1hLmVuZHBvaW50O3Ro aXMudHlwZT1hLnR5cGU7dGhpcy5ub2RlPWEubm9kZXx8JChhLmlkKTt0aGlzLnBh dGhzPWEucGF0aD8kQShhLnBhdGgpOltdO3RoaXMua2V5cz1hLmtleT8kQShhLmtl eSk6W107dmFyIGI9dGhpcy5fZmluZEtleXModGhpcy5rZXlzKTt0aGlzLm51bWVy aWNLZXk9Yi5udW1lcmljfHx0aGlzLmtleXNbMF07dGhpcy50ZXh0S2V5PWIudGV4 dHx8dGhpcy5rZXlzWzBdO3RoaXMuX3BhdGhQYXR0ZXJuPXRoaXMuX2J1aWxkUmVn ZXgodGhpcy5wYXRocyk7dGhpcy5fa2V5UGF0dGVybj10aGlzLl9idWlsZFJlZ2V4 KHRoaXMua2V5cyk7dGhpcy5oaWRlTG9hZGluZygpO3RoaXMuaGlkZVNlbGVjdGVk KCk7fUZ1dHVyZVNpZGVOYXZJdGVtLnByb3RvdHlwZT17ZXF1YWxzOmZ1bmN0aW9u KGEpe3JldHVybiBhJiZhLmlkPT09dGhpcy5pZDt9LGdldExpbmtOb2RlOmZ1bmN0 aW9uKCl7cmV0dXJuIChET00uc2NyeSh0aGlzLm5vZGUsJ2EuaXRlbScpWzBdfHxE T00uc2NyeSh0aGlzLm5vZGUsJ2Euc3ViaXRlbScpWzBdKTt9LG1hdGNoUGF0aDpm dW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fbWF0Y2hJbnB1dCh0aGlzLl9wYXRoUGF0 dGVybixhKTt9LG1hdGNoS2V5OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9tYXRj aElucHV0KHRoaXMuX2tleVBhdHRlcm4sYSk7fSxfbWF0Y2hJbnB1dDpmdW5jdGlv bihjLGEpe3ZhciBiPWMmJmMuZXhlYyhhKTtyZXR1cm4gYiYmYi5zbGljZSgxKTt9 LGdldFRvcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzVG9wKCk/dGhpczp0aGlz LnVwLmdldFRvcCgpO30saXNUb3A6ZnVuY3Rpb24oYSl7cmV0dXJuICF0aGlzLnVw O30sc2V0Q291bnQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5fdXBkYXRlQ291 bnQoYSx0cnVlKTt9LGluY3JlbWVudENvdW50OmZ1bmN0aW9uKGEsYil7cmV0dXJu IHRoaXMuX3VwZGF0ZUNvdW50KGEsZmFsc2UpO30sX3VwZGF0ZUNvdW50OmZ1bmN0 aW9uKGEsaCxlKXt2YXIgYz1ET00uc2NyeSh0aGlzLm5vZGUsJ3NwYW4uY291bnQn KVswXTt2YXIgZD1jJiZET00uc2NyeShjLCdzcGFuLmNvdW50VmFsdWUnKVswXTtp ZihkKXt2YXIgYj1oPzA6cGFyc2VJbnQoRE9NLmdldFRleHQoZCksMTApO3ZhciBp PU1hdGgubWF4KDAsYithKTt2YXIgZj10aGlzLmlzVG9wKCk/J2hpZGRlbic6J2hp ZGRlblN1Yml0ZW0nO0RPTS5zZXRDb250ZW50KGQsaSk7ZSYmQ1NTLmNvbmRpdGlv bkNsYXNzKHRoaXMubm9kZSxmLCFpKTtDU1MuY29uZGl0aW9uQ2xhc3MoYywnaGlk ZGVuX2VsZW0nLCFpKTtpZih0aGlzLmlzVG9wKCkpe3ZhciBnPURPTS5zY3J5KHRo aXMubm9kZSwnZGl2LmxpbmtXcmFwJylbMF07aWYoZyl7Q1NTLmNvbmRpdGlvbkNs YXNzKGcsJ25vQ291bnQnLCFpKTtDU1MuY29uZGl0aW9uQ2xhc3MoZywnaGFzQ291 bnQnLGkpO319fX0sc2hvd0xvYWRpbmc6ZnVuY3Rpb24oKXtDU1MuYWRkQ2xhc3Mo dGhpcy5ub2RlLCdsb2FkaW5nJyk7fSxoaWRlTG9hZGluZzpmdW5jdGlvbigpe0NT Uy5yZW1vdmVDbGFzcyh0aGlzLm5vZGUsJ2xvYWRpbmcnKTt9LHNob3dTZWxlY3Rl ZDpmdW5jdGlvbigpe0NTUy5hZGRDbGFzcyh0aGlzLm5vZGUsJ3NlbGVjdGVkSXRl bScpO0NTUy5oYXNDbGFzcyh0aGlzLm5vZGUsJ2hpZGVyJykmJkNTUy5hZGRDbGFz cyh0aGlzLl9nZXRFeHBhbmRlclBhcmVudCgpLCdleHBhbmRlZE1vZGUnKTt9LGhp ZGVTZWxlY3RlZDpmdW5jdGlvbigpe0NTUy5yZW1vdmVDbGFzcyh0aGlzLm5vZGUs J3NlbGVjdGVkSXRlbScpO30sc2hvd0NoaWxkcmVuOmZ1bmN0aW9uKCl7Q1NTLmFk ZENsYXNzKHRoaXMubm9kZSwnb3BlbicpO30saGlkZUNoaWxkcmVuOmZ1bmN0aW9u KCl7Q1NTLnJlbW92ZUNsYXNzKHRoaXMubm9kZSwnb3BlbicpO30sX2dldEV4cGFu ZGVyUGFyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIFBhcmVudC5ieUNsYXNzKHRoaXMu bm9kZSwnZXhwYW5kYWJsZVNpZGVOYXYnKTt9LF9idWlsZFJlZ2V4OmZ1bmN0aW9u KGEpe2lmKGEubGVuZ3RoKXt2YXIgYj1hLm1hcChmdW5jdGlvbihjKXtpZih0eXBl b2YgYz09PSJzdHJpbmciKXtyZXR1cm4gYy5yZXBsYWNlKC8oW15hLXowLTlfXSkv aWcsJ1xcJDEnKTt9ZWxzZSBpZihjJiZjLnJlZ2V4KXJldHVybiBjLnJlZ2V4O30p O3JldHVybiBuZXcgUmVnRXhwKCdeKD86JytiLmpvaW4oJ3wnKSsnKSQnKTt9fSxf ZmluZEtleXM6ZnVuY3Rpb24oYyl7dmFyIGU9L14oYXBwfGdyb3VwfGZsKV8vO3Zh ciBhPXt9O2Zvcih2YXIgYj0wO2I8Yy5sZW5ndGg7YisrKXt2YXIgZD1lLnRlc3Qo Y1tiXSk7aWYoZCYmIWEubnVtZXJpYyl7YS5udW1lcmljPWNbYl07fWVsc2UgaWYo IWQmJiFhLnRleHQpYS50ZXh0PWNbYl07aWYoYS5udW1lcmljJiZhLnRleHQpYnJl YWs7fXJldHVybiBhO319OwpmdW5jdGlvbiBGdXR1cmVQcm9maWxlU2lkZU5hdigp e3RoaXMucGFyZW50LmNvbnN0cnVjdCh0aGlzKTt9Q2xhc3MuZXh0ZW5kKEZ1dHVy ZVByb2ZpbGVTaWRlTmF2LCdGdXR1cmVTaWRlTmF2Jyk7RnV0dXJlUHJvZmlsZVNp ZGVOYXYucHJvdG90eXBlPXtpbml0OmZ1bmN0aW9uKCl7dGhpcy5wYXJlbnQuaW5p dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5hamF4UGlwZT10cnVlO3RoaXMu YWx0S2V5UGFyYW09J3YnO3RoaXMuc2lkZWNvbD1mYWxzZTt9LF9jb25zdHJ1Y3RJ dGVtOmZ1bmN0aW9uKGEsYil7cmV0dXJuIG5ldyBGdXR1cmVQcm9maWxlU2lkZU5h dkl0ZW0oYSxiKTt9LF9kb1BhZ2VUcmFuc2l0aW9uOmZ1bmN0aW9uKGEsYil7aWYo IXRoaXMuX3Byb2ZpbGVDaGFuZ2VkKGIpJiYhdGhpcy5fc2NvcGVDaGFuZ2VkKGEp KXJldHVybiB0aGlzLnBhcmVudC5fZG9QYWdlVHJhbnNpdGlvbihhLGIpO30sX3By b2ZpbGVDaGFuZ2VkOmZ1bmN0aW9uKGMpe3ZhciBiPWMuZ2V0UXVlcnlEYXRhKCk7 dmFyIGE9dGhpcy51cmkuZ2V0UXVlcnlEYXRhKCk7cmV0dXJuIChiLmlkIT09YS5p ZHx8Yi52aWV3YXMhPT1hLnZpZXdhc3x8Yi5hbmQhPT1hLmFuZCk7fSxfc2NvcGVD aGFuZ2VkOmZ1bmN0aW9uKGEpe3JldHVybiAoIXRoaXMuc2VsZWN0ZWR8fGEubGF5 b3V0VHlwZSE9PXRoaXMuc2VsZWN0ZWQubGF5b3V0VHlwZSk7fSxfZ2V0S2V5OmZ1 bmN0aW9uKGEpe3JldHVybiB0aGlzLnBhcmVudC5fZ2V0S2V5KGEpfHxhW3RoaXMu YWx0S2V5UGFyYW1dO319O2Z1bmN0aW9uIEZ1dHVyZVByb2ZpbGVTaWRlTmF2SXRl bShhLGIpe3RoaXMucGFyZW50LmNvbnN0cnVjdCh0aGlzLGEsYik7dGhpcy5sYXlv dXRUeXBlPWEubGF5b3V0dHlwZTt9Q2xhc3MuZXh0ZW5kKEZ1dHVyZVByb2ZpbGVT aWRlTmF2SXRlbSwnRnV0dXJlU2lkZU5hdkl0ZW0nKTsKZnVuY3Rpb24gdXNlRmFj ZWJvb2tSZWZlcmVyKGIsYSxmKXt2YXIgZD1mYWxzZTtmdW5jdGlvbiBlKCl7aWYo ZClyZXR1cm47ZD10cnVlO2IuY29udGVudFdpbmRvdy5kb2N1bWVudC5ib2R5LnN0 eWxlLm1hcmdpbj0wO2EoKTt9dmFyIGM9KFVSSSgpLmlzU2VjdXJlKCk/J2h0dHBz Oi8vcy1zdGF0aWMuYWsuZmFjZWJvb2suY29tJzonaHR0cDovL3N0YXRpYy5hay5m YWNlYm9vay5jb20nKSsnL2NvbW1vbi9yZWZlcmVyX2ZyYW1lLnBocCc7aWYoZilj Kz0nP2ZiX3NvdXJjZT0nK2Y7RXZlbnQubGlzdGVuKGIsJ2xvYWQnLGUpO2Iuc3Jj PWM7fWZ1bmN0aW9uIHVzZUZhY2Vib29rUmVmZXJlckh0bWwoYixhLGMpe3VzZUZh Y2Vib29rUmVmZXJlcihiLGZ1bmN0aW9uKCl7Yi5jb250ZW50V2luZG93LmRvY3Vt ZW50LmJvZHkuaW5uZXJIVE1MPWE7fSxjKTt9Cl9fZSgiaHRtbHNwZWNpYWxjaGFy cy1nbG9iYWwiLFsiaHRtbHNwZWNpYWxjaGFycyJdLGZ1bmN0aW9uKGEsYil7YS5o dG1sc3BlY2lhbGNoYXJzPWIoJ2h0bWxzcGVjaWFsY2hhcnMnKTt9LDMpOwpmdW5j dGlvbiBodG1saXplKGEpe3JldHVybiBodG1sc3BlY2lhbGNoYXJzKGEpLnJlcGxh Y2UoL1xyXG4vZywnPGJyIC8+JykucmVwbGFjZSgvW1xyXG5dL2csJzxiciAvPicp O31mdW5jdGlvbiBlc2NhcGVfanNfcXVvdGVzKGEpe2lmKHR5cGVvZihhKT09J3Vu ZGVmaW5lZCd8fCFhLnRvU3RyaW5nKXJldHVybiAnJztyZXR1cm4gYS50b1N0cmlu ZygpLnJlcGxhY2UoL1xcL2csJ1xcXFwnKS5yZXBsYWNlKC9cbi9nLCdcXG4nKS5y ZXBsYWNlKC9cci9nLCdcXHInKS5yZXBsYWNlKC8iL2csJ1xceDIyJykucmVwbGFj ZSgvJy9nLCdcXFwnJykucmVwbGFjZSgvPC9nLCdcXHgzYycpLnJlcGxhY2UoLz4v ZywnXFx4M2UnKS5yZXBsYWNlKC8mL2csJ1xceDI2Jyk7fQppZih0eXBlb2YgZGVj b25jZXB0PT0idW5kZWZpbmVkIil2YXIgZGVjb25jZXB0PXt9O2lmKHR5cGVvZiBk ZWNvbmNlcHQudXRpbD09InVuZGVmaW5lZCIpZGVjb25jZXB0LnV0aWw9e307aWYo dHlwZW9mIGRlY29uY2VwdC5TV0ZPYmplY3RVdGlsPT0idW5kZWZpbmVkIilkZWNv bmNlcHQuU1dGT2JqZWN0VXRpbD17fTtkZWNvbmNlcHQuU1dGT2JqZWN0PWZ1bmN0 aW9uKGgsZCxqLGMsaSxhLGYsbCxnLGIpe2lmKCFkb2N1bWVudC5nZXRFbGVtZW50 QnlJZClyZXR1cm47dGhpcy5ERVRFQ1RfS0VZPWI/YjonZGV0ZWN0Zmxhc2gnO3Ro aXMuc2tpcERldGVjdD1kZWNvbmNlcHQudXRpbC5nZXRSZXF1ZXN0UGFyYW1ldGVy KHRoaXMuREVURUNUX0tFWSk7dGhpcy5wYXJhbXM9e307dGhpcy52YXJpYWJsZXM9 e307dGhpcy5hdHRyaWJ1dGVzPVtdO3RoaXMuZmFsbGJhY2tfaHRtbD0nJzt0aGlz LmZhbGxiYWNrX2pzX2Zjbj1mdW5jdGlvbigpe307aWYoaCl0aGlzLnNldEF0dHJp YnV0ZSgnc3dmJyxoKTtpZihkKXRoaXMuc2V0QXR0cmlidXRlKCdpZCcsZCk7aWYo ail0aGlzLnNldEF0dHJpYnV0ZSgnd2lkdGgnLGopO2lmKGMpdGhpcy5zZXRBdHRy aWJ1dGUoJ2hlaWdodCcsYyk7dGhpcy5pbnN0YWxsZWRWZXI9ZGVjb25jZXB0LlNX Rk9iamVjdFV0aWwuZ2V0UGxheWVyVmVyc2lvbigpO2lmKGkpe2lmKCEoaSBpbnN0 YW5jZW9mIEFycmF5KSlpPVtpXTt2YXIgaztpLmVhY2goZnVuY3Rpb24obil7az1u ZXcgZGVjb25jZXB0LlBsYXllclZlcnNpb24obi50b1N0cmluZygpLnNwbGl0KCcu JykpO2lmKGsubWFqb3I9PXRoaXMuaW5zdGFsbGVkVmVyLm1ham9yKXt0aGlzLnNl dEF0dHJpYnV0ZSgndmVyc2lvbicsayk7cmV0dXJuO31lbHNlIGlmKCF0aGlzLmdl dEF0dHJpYnV0ZSgndmVyc2lvbicpfHxrLm1ham9yPHRoaXMuZ2V0QXR0cmlidXRl KCd2ZXJzaW9uJykubWFqb3IpdGhpcy5zZXRBdHRyaWJ1dGUoJ3ZlcnNpb24nLGsp O30uYmluZCh0aGlzKSk7fWlmKCF3aW5kb3cub3BlcmEmJmRvY3VtZW50LmFsbCYm dGhpcy5pbnN0YWxsZWRWZXIubWFqb3I+NylpZighZGVjb25jZXB0LnVubG9hZFNl dCl7ZGVjb25jZXB0LlNXRk9iamVjdFV0aWwucHJlcFVubG9hZD1mdW5jdGlvbigp e19fZmxhc2hfdW5sb2FkSGFuZGxlcj1mdW5jdGlvbigpe307X19mbGFzaF9zYXZl ZFVubG9hZEhhbmRsZXI9ZnVuY3Rpb24oKXt9O3dpbmRvdy5hdHRhY2hFdmVudCgi b251bmxvYWQiLGRlY29uY2VwdC5TV0ZPYmplY3RVdGlsLmNsZWFudXBTV0ZzKTt9 O3dpbmRvdy5hdHRhY2hFdmVudCgib25iZWZvcmV1bmxvYWQiLGRlY29uY2VwdC5T V0ZPYmplY3RVdGlsLnByZXBVbmxvYWQpO2RlY29uY2VwdC51bmxvYWRTZXQ9dHJ1 ZTt9aWYoYSl0aGlzLmFkZFBhcmFtKCdiZ2NvbG9yJyxhKTt2YXIgZT1mP2Y6J2hp Z2gnO3RoaXMuYWRkUGFyYW0oJ3F1YWxpdHknLGUpO3RoaXMuc2V0QXR0cmlidXRl KCd1c2VFeHByZXNzSW5zdGFsbCcsZmFsc2UpO3RoaXMuc2V0QXR0cmlidXRlKCdk b0V4cHJlc3NJbnN0YWxsJyxmYWxzZSk7dmFyIG09KGwpP2w6d2luZG93LmxvY2F0 aW9uO3RoaXMuc2V0QXR0cmlidXRlKCd4aVJlZGlyZWN0VXJsJyxtKTt0aGlzLnNl dEF0dHJpYnV0ZSgncmVkaXJlY3RVcmwnLCcnKTtpZihnKXRoaXMuc2V0QXR0cmli dXRlKCdyZWRpcmVjdFVybCcsZyk7dGhpcy5zZXRBdHRyaWJ1dGUoJ3VzZUlmcmFt ZScsZmFsc2UpO307ZGVjb25jZXB0LlNXRk9iamVjdC5pZVdvcmthcm91bmRBcHBs aWVkPWZhbHNlO2RlY29uY2VwdC5TV0ZPYmplY3QuZW5zdXJlSUVXb3JrYXJvdW5k QXR0YWNoZWQ9ZnVuY3Rpb24oKXtpZighZGVjb25jZXB0LlNXRk9iamVjdC5pZVdv cmthcm91bmRBcHBsaWVkJiZkb2N1bWVudC5hdHRhY2hFdmVudCl7ZGVjb25jZXB0 LlNXRk9iamVjdC5pZVdvcmthcm91bmRBcHBsaWVkPXRydWU7ZG9jdW1lbnQuYXR0 YWNoRXZlbnQoJ29ucHJvcGVydHljaGFuZ2UnLGRlY29uY2VwdC5TV0ZPYmplY3Qu b25Eb2N1bWVudFByb3BlcnR5Q2hhbmdlKTt9fTtkZWNvbmNlcHQuU1dGT2JqZWN0 Lm9uRG9jdW1lbnRQcm9wZXJ0eUNoYW5nZT1mdW5jdGlvbihldmVudCl7aWYoZXZl bnQucHJvcGVydHlOYW1lPT0idGl0bGUiKXt2YXIgYT1kb2N1bWVudC50aXRsZTtp ZihhIT1udWxsJiZhLmluZGV4T2YoJyMhJykhPS0xKXthPWEuc3Vic3RyaW5nKDAs YS5pbmRleE9mKCcjIScpKTtkb2N1bWVudC50aXRsZT1hO319fTtkZWNvbmNlcHQu U1dGT2JqZWN0LnByb3RvdHlwZT17dXNlRXhwcmVzc0luc3RhbGw6ZnVuY3Rpb24o YSl7dGhpcy54aVNXRlBhdGg9IWE/Ii9zd2YvZXhwcmVzc2luc3RhbGwuc3dmIjph O3RoaXMuc2V0QXR0cmlidXRlKCd1c2VFeHByZXNzSW5zdGFsbCcsdHJ1ZSk7fSxz ZXRBdHRyaWJ1dGU6ZnVuY3Rpb24oYSxiKXt0aGlzLmF0dHJpYnV0ZXNbYV09Yjt9 LGdldEF0dHJpYnV0ZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVz W2FdfHwiIjt9LGFkZFBhcmFtOmZ1bmN0aW9uKGEsYil7dGhpcy5wYXJhbXNbYV09 Yjt9LGdldFBhcmFtczpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmFtczt9LGFk ZFZhcmlhYmxlOmZ1bmN0aW9uKGEsYil7dGhpcy52YXJpYWJsZXNbYV09Yjt9LGdl dFZhcmlhYmxlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnZhcmlhYmxlc1thXXx8 IiI7fSxnZXRWYXJpYWJsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YXJpYWJs ZXM7fSxnZXRWYXJpYWJsZVBhaXJzOmZ1bmN0aW9uKCl7dmFyIGI9W107dmFyIGE7 dmFyIGM9dGhpcy5nZXRWYXJpYWJsZXMoKTtmb3IoYSBpbiBjKWJbYi5sZW5ndGhd PWErIj0iK2NbYV07cmV0dXJuIGIuam9pbignJicpO30sZ2V0U1dGSFRNTDpmdW5j dGlvbigpe3ZhciBmLGQsYTtpZihuYXZpZ2F0b3IucGx1Z2lucyYmbmF2aWdhdG9y Lm1pbWVUeXBlcyYmbmF2aWdhdG9yLm1pbWVUeXBlcy5sZW5ndGgpe2lmKHRoaXMu Z2V0QXR0cmlidXRlKCJkb0V4cHJlc3NJbnN0YWxsIikpe3RoaXMuYWRkVmFyaWFi bGUoIk1NcGxheWVyVHlwZSIsIlBsdWdJbiIpO3RoaXMuc2V0QXR0cmlidXRlKCdz d2YnLHRoaXMueGlTV0ZQYXRoKTt9ZD17dHlwZTonYXBwbGljYXRpb24veC1zaG9j a3dhdmUtZmxhc2gnLHNyYzp0aGlzLmdldEF0dHJpYnV0ZSgnc3dmJyksd2lkdGg6 dGhpcy5nZXRBdHRyaWJ1dGUoJ3dpZHRoJyksaGVpZ2h0OnRoaXMuZ2V0QXR0cmli dXRlKCdoZWlnaHQnKSxzdHlsZTp0aGlzLmdldEF0dHJpYnV0ZSgnc3R5bGUnKXx8 JycsaWQ6dGhpcy5nZXRBdHRyaWJ1dGUoJ2lkJyksbmFtZTp0aGlzLmdldEF0dHJp YnV0ZSgnaWQnKX07dmFyIGM9dGhpcy5nZXRQYXJhbXMoKTtmb3IodmFyIGIgaW4g YylkW2JdPWNbYl07YT10aGlzLmdldFZhcmlhYmxlUGFpcnMoKTtpZihhKWQuZmxh c2h2YXJzPWE7Zj1yZW5kZXJfdGFnX2FzX2h0bWxzdHJpbmcoJ2VtYmVkJyxkLG51 bGwpO31lbHNle2lmKHRoaXMuZ2V0QXR0cmlidXRlKCJkb0V4cHJlc3NJbnN0YWxs Iikpe3RoaXMuYWRkVmFyaWFibGUoIk1NcGxheWVyVHlwZSIsIkFjdGl2ZVgiKTt0 aGlzLnNldEF0dHJpYnV0ZSgnc3dmJyx0aGlzLnhpU1dGUGF0aCk7fWQ9e2lkOnRo aXMuZ2V0QXR0cmlidXRlKCdpZCcpLGNsYXNzaWQ6J2Nsc2lkOkQyN0NEQjZFLUFF NkQtMTFjZi05NkI4LTQ0NDU1MzU0MDAwMCcsd2lkdGg6dGhpcy5nZXRBdHRyaWJ1 dGUoJ3dpZHRoJyksaGVpZ2h0OnRoaXMuZ2V0QXR0cmlidXRlKCdoZWlnaHQnKSxz dHlsZTp0aGlzLmdldEF0dHJpYnV0ZSgnc3R5bGUnKXx8Jyd9O3ZhciBlPXJlbmRl cl90YWdfYXNfaHRtbHN0cmluZygncGFyYW0nLHtuYW1lOidtb3ZpZScsdmFsdWU6 dGhpcy5nZXRBdHRyaWJ1dGUoJ3N3ZicpfSxudWxsKTt2YXIgYz10aGlzLmdldFBh cmFtcygpO2Zvcih2YXIgYiBpbiBjKWUrPXJlbmRlcl90YWdfYXNfaHRtbHN0cmlu ZygncGFyYW0nLHtuYW1lOmIsdmFsdWU6Y1tiXX0sbnVsbCk7YT10aGlzLmdldFZh cmlhYmxlUGFpcnMoKTtpZihhKWUrPXJlbmRlcl90YWdfYXNfaHRtbHN0cmluZygn cGFyYW0nLHtuYW1lOidmbGFzaHZhcnMnLHZhbHVlOmF9LG51bGwpO2Y9cmVuZGVy X3RhZ19hc19odG1sc3RyaW5nKCdvYmplY3QnLGQsZSk7fXJldHVybiBmO30sd3Jp dGU6ZnVuY3Rpb24oYSl7aWYodGhpcy5nZXRBdHRyaWJ1dGUoJ3VzZUV4cHJlc3NJ bnN0YWxsJykpe3ZhciBiPW5ldyBkZWNvbmNlcHQuUGxheWVyVmVyc2lvbihbNiww LDY1XSk7aWYodGhpcy5pbnN0YWxsZWRWZXIudmVyc2lvbklzVmFsaWQoYikmJiF0 aGlzLmluc3RhbGxlZFZlci52ZXJzaW9uSXNWYWxpZCh0aGlzLmdldEF0dHJpYnV0 ZSgndmVyc2lvbicpKSl7dGhpcy5zZXRBdHRyaWJ1dGUoJ2RvRXhwcmVzc0luc3Rh bGwnLHRydWUpO3RoaXMuYWRkVmFyaWFibGUoIk1NcmVkaXJlY3RVUkwiLGVzY2Fw ZSh0aGlzLmdldEF0dHJpYnV0ZSgneGlSZWRpcmVjdFVybCcpKSk7ZG9jdW1lbnQu dGl0bGU9ZG9jdW1lbnQudGl0bGUuc2xpY2UoMCw0NykrIiAtIEZsYXNoIFBsYXll ciBJbnN0YWxsYXRpb24iO3RoaXMuYWRkVmFyaWFibGUoIk1NZG9jdGl0bGUiLGRv Y3VtZW50LnRpdGxlKTt9fXZhciBjPSh0eXBlb2YgYT09J3N0cmluZycpP2RvY3Vt ZW50LmdldEVsZW1lbnRCeUlkKGEpOmE7aWYoIWMpcmV0dXJuIGZhbHNlO0NTUy5h ZGRDbGFzcyhjLCdzd2ZPYmplY3QnKTtjLnNldEF0dHJpYnV0ZSgnZGF0YS1zd2Zp ZCcsdGhpcy5nZXRBdHRyaWJ1dGUoJ2lkJykpO2lmKHRoaXMuc2tpcERldGVjdHx8 dGhpcy5nZXRBdHRyaWJ1dGUoJ2RvRXhwcmVzc0luc3RhbGwnKXx8dGhpcy5pbnN0 YWxsZWRWZXIudmVyc2lvbklzVmFsaWQodGhpcy5nZXRBdHRyaWJ1dGUoJ3ZlcnNp b24nKSkpe2lmKCF0aGlzLmdldEF0dHJpYnV0ZSgndXNlSWZyYW1lJykpe2RlY29u Y2VwdC5TV0ZPYmplY3QuZW5zdXJlSUVXb3JrYXJvdW5kQXR0YWNoZWQoKTtjLmlu bmVySFRNTD10aGlzLmdldFNXRkhUTUwoKTt9ZWxzZSB0aGlzLl9jcmVhdGVJZnJh bWUoYyk7cmV0dXJuIHRydWU7fWVsc2V7aWYodGhpcy5nZXRBdHRyaWJ1dGUoJ3Jl ZGlyZWN0VXJsJykhPSIiKWRvY3VtZW50LmxvY2F0aW9uLnJlcGxhY2UodGhpcy5n ZXRBdHRyaWJ1dGUoJ3JlZGlyZWN0VXJsJykpO25lZWRfdmVyc2lvbj10aGlzLmdl dEF0dHJpYnV0ZSgndmVyc2lvbicpLm1ham9yKycuJyt0aGlzLmdldEF0dHJpYnV0 ZSgndmVyc2lvbicpLm1pbm9yKycuJyt0aGlzLmdldEF0dHJpYnV0ZSgndmVyc2lv bicpLnJldjtoYXZlX3ZlcnNpb249dGhpcy5pbnN0YWxsZWRWZXIubWFqb3IrJy4n K3RoaXMuaW5zdGFsbGVkVmVyLm1pbm9yKycuJyt0aGlzLmluc3RhbGxlZFZlci5y ZXY7dGhpcy5mYWxsYmFja19qc19mY24oaGF2ZV92ZXJzaW9uLG5lZWRfdmVyc2lv bik7Yy5pbm5lckhUTUw9dGhpcy5mYWxsYmFja19odG1sO31yZXR1cm4gZmFsc2U7 fSxfY3JlYXRlSWZyYW1lOmZ1bmN0aW9uKGIpe3ZhciBhPSROKCdpZnJhbWUnLHt3 aWR0aDp0aGlzLmdldEF0dHJpYnV0ZSgnd2lkdGgnKSxoZWlnaHQ6dGhpcy5nZXRB dHRyaWJ1dGUoJ2hlaWdodCcpLGZyYW1lQm9yZGVyOjB9KTtET00uZW1wdHkoYik7 Yi5hcHBlbmRDaGlsZChhKTt1c2VGYWNlYm9va1JlZmVyZXJIdG1sLmJpbmQobnVs bCxhLHRoaXMuZ2V0U1dGSFRNTCgpLHRoaXMuZ2V0QXR0cmlidXRlKCdpZnJhbWVT b3VyY2UnKSkuZGVmZXIoKTt9fTtkZWNvbmNlcHQuU1dGT2JqZWN0VXRpbC5nZXRQ bGF5ZXJWZXJzaW9uPWZ1bmN0aW9uKCl7dmFyIGE9bmV3IGRlY29uY2VwdC5QbGF5 ZXJWZXJzaW9uKFswLDAsMF0pO2lmKG5hdmlnYXRvci5wbHVnaW5zJiZuYXZpZ2F0 b3IubWltZVR5cGVzLmxlbmd0aCl7Zm9yKHZhciBnPTA7ZzxuYXZpZ2F0b3IucGx1 Z2lucy5sZW5ndGg7ZysrKXRyeXt2YXIgeD1uYXZpZ2F0b3IucGx1Z2luc1tnXTtp Zih4Lm5hbWU9PSdTaG9ja3dhdmUgRmxhc2gnKXtQbGF5ZXJWZXJzaW9uX3RtcD1u ZXcgZGVjb25jZXB0LlBsYXllclZlcnNpb24oeC5kZXNjcmlwdGlvbi5yZXBsYWNl KC8oW2EtekEtWl18XHMpKy8sIiIpLnJlcGxhY2UoLyhccysocnxkKXxccytiWzAt OV0rKS8sIi4iKS5zcGxpdCgiLiIpKTtpZih0eXBlb2YgYT09J3VuZGVmaW5lZCd8 fFBsYXllclZlcnNpb25fdG1wLm1ham9yPmEubWFqb3J8fChQbGF5ZXJWZXJzaW9u X3RtcC5tYWpvcj09YS5tYWpvciYmKFBsYXllclZlcnNpb25fdG1wLm1pbm9yPmEu bWlub3J8fChQbGF5ZXJWZXJzaW9uX3RtcC5taW5vcj09YS5taW5vciYmUGxheWVy VmVyc2lvbl90bXAucmV2PmEucmV2KSkpKWE9UGxheWVyVmVyc2lvbl90bXA7fX1j YXRjaChmKXt9fWVsc2UgaWYobmF2aWdhdG9yLnVzZXJBZ2VudCYmbmF2aWdhdG9y LnVzZXJBZ2VudC5pbmRleE9mKCJXaW5kb3dzIENFIik+PTApe3ZhciBiPTE7dmFy IGM9Mzt3aGlsZShiKXRyeXtjKys7Yj1uZXcgQWN0aXZlWE9iamVjdCgiU2hvY2t3 YXZlRmxhc2guU2hvY2t3YXZlRmxhc2guIitjKTthPW5ldyBkZWNvbmNlcHQuUGxh eWVyVmVyc2lvbihbYywwLDBdKTt9Y2F0Y2goZCl7Yj1udWxsO319ZWxzZXt0cnl7 dmFyIGI9bmV3IEFjdGl2ZVhPYmplY3QoIlNob2Nrd2F2ZUZsYXNoLlNob2Nrd2F2 ZUZsYXNoLjciKTt9Y2F0Y2goZSl7dHJ5e3ZhciBiPW5ldyBBY3RpdmVYT2JqZWN0 KCJTaG9ja3dhdmVGbGFzaC5TaG9ja3dhdmVGbGFzaC42Iik7YT1uZXcgZGVjb25j ZXB0LlBsYXllclZlcnNpb24oWzYsMCwyMV0pO2IuQWxsb3dTY3JpcHRBY2Nlc3M9 ImFsd2F5cyI7fWNhdGNoKGUyKXtpZihhLm1ham9yPT02KXJldHVybiBhO310cnl7 Yj1uZXcgQWN0aXZlWE9iamVjdCgiU2hvY2t3YXZlRmxhc2guU2hvY2t3YXZlRmxh c2giKTt9Y2F0Y2goZTMpe319aWYoYiE9bnVsbClhPW5ldyBkZWNvbmNlcHQuUGxh eWVyVmVyc2lvbihiLkdldFZhcmlhYmxlKCIkdmVyc2lvbiIpLnNwbGl0KCIgIilb MV0uc3BsaXQoIiwiKSk7fXJldHVybiBhO307ZGVjb25jZXB0LlBsYXllclZlcnNp b249ZnVuY3Rpb24oYSl7dGhpcy5tYWpvcj1hWzBdIT1udWxsP3BhcnNlSW50KGFb MF0pOjA7dGhpcy5taW5vcj1hWzFdIT1udWxsP3BhcnNlSW50KGFbMV0pOjA7dGhp cy5yZXY9YVsyXSE9bnVsbD9wYXJzZUludChhWzJdKTowO307ZGVjb25jZXB0LlBs YXllclZlcnNpb24ucHJvdG90eXBlLnZlcnNpb25Jc1ZhbGlkPWZ1bmN0aW9uKGEp e2lmKHRoaXMubWFqb3I8YS5tYWpvcilyZXR1cm4gZmFsc2U7aWYodGhpcy5tYWpv cj5hLm1ham9yKXJldHVybiB0cnVlO2lmKHRoaXMubWlub3I8YS5taW5vcilyZXR1 cm4gZmFsc2U7aWYodGhpcy5taW5vcj5hLm1pbm9yKXJldHVybiB0cnVlO2lmKHRo aXMucmV2PGEucmV2KXJldHVybiBmYWxzZTtyZXR1cm4gdHJ1ZTt9O2RlY29uY2Vw dC51dGlsPXtnZXRSZXF1ZXN0UGFyYW1ldGVyOmZ1bmN0aW9uKGMpe3ZhciBkPWRv Y3VtZW50LmxvY2F0aW9uLnNlYXJjaHx8ZG9jdW1lbnQubG9jYXRpb24uaGFzaDtp ZihjPT1udWxsKXJldHVybiBkO2lmKGQpe3ZhciBiPWQuc3Vic3RyaW5nKDEpLnNw bGl0KCImIik7Zm9yKHZhciBhPTA7YTxiLmxlbmd0aDthKyspaWYoYlthXS5zdWJz dHJpbmcoMCxiW2FdLmluZGV4T2YoIj0iKSk9PWMpcmV0dXJuIGJbYV0uc3Vic3Ry aW5nKChiW2FdLmluZGV4T2YoIj0iKSsxKSk7fXJldHVybiAiIjt9fTtkZWNvbmNl cHQuU1dGT2JqZWN0VXRpbC5jbGVhbnVwU1dGcz1mdW5jdGlvbigpe3ZhciBiPWRv Y3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJPQkpFQ1QiKTtmb3IodmFyIGE9 Yi5sZW5ndGgtMTthPj0wO2EtLSl7YlthXS5zdHlsZS5kaXNwbGF5PSdub25lJztm b3IodmFyIGMgaW4gYlthXSlpZih0eXBlb2YgYlthXVtjXT09J2Z1bmN0aW9uJyli W2FdW2NdPWZ1bmN0aW9uKCl7fTt9fTtpZighZG9jdW1lbnQuZ2V0RWxlbWVudEJ5 SWQmJmRvY3VtZW50LmFsbClkb2N1bWVudC5nZXRFbGVtZW50QnlJZD1mdW5jdGlv bihhKXtyZXR1cm4gZG9jdW1lbnQuYWxsW2FdO307dmFyIGdldFF1ZXJ5UGFyYW1W YWx1ZT1kZWNvbmNlcHQudXRpbC5nZXRSZXF1ZXN0UGFyYW1ldGVyO3ZhciBGbGFz aE9iamVjdD1kZWNvbmNlcHQuU1dGT2JqZWN0O3ZhciBTV0ZPYmplY3Q9ZGVjb25j ZXB0LlNXRk9iamVjdDtmdW5jdGlvbiBzcGF3bl9mbGFzaF91cGRhdGVfZGlhbG9n KCl7bmV3IEFzeW5jUmVxdWVzdCgpLnNldFVSSSgnL2FqYXgvZmxhc2hfdXBkYXRl X2RpYWxvZy5waHAnKS5zZXRNZXRob2QoJ0dFVCcpLnNldFJlYWRPbmx5KHRydWUp LnNlbmQoKTt9ZnVuY3Rpb24gc2V0Rmxhc2hGYWxsYmFjayhkLGcpe3ZhciBiPWdl KGQpO3ZhciBhPWRlY29uY2VwdC5TV0ZPYmplY3RVdGlsLmdldFBsYXllclZlcnNp b24oKTt2YXIgZTtnLmVhY2goZnVuY3Rpb24oaCl7aD1uZXcgZGVjb25jZXB0LlBs YXllclZlcnNpb24oaC50b1N0cmluZygpLnNwbGl0KCcuJykpO2lmKGgubWFqb3I9 PWEubWFqb3Ipe2U9aDtyZXR1cm47fWVsc2UgaWYodHlwZW9mIGU9PSd1bmRlZmlu ZWQnfHxoLm1ham9yPGUubWFqb3IpZT1oO30uYmluZCh0aGlzKSk7aWYoYiYmYS5t YWpvcj4wKXt2YXIgYz1hLm1ham9yKycuJythLm1pbm9yKycuJythLnJldjt2YXIg Zj1lLm1ham9yKycuJytlLm1pbm9yKycuJytlLnJldjtiLmlubmVySFRNTD1fdHgo Ik5lY2VzaXRhcyB0ZW5lciBGbGFzaCB7cmVxdWlyZWQtdmVyc2lvbn0gcGFyYSB2 ZXIgZXN0ZSBjb250ZW5pZG8uIFR1IHZlcnNpXHUwMGYzbiBhY3R1YWwgZXMge2N1 cnJlbnQtdmVyc2lvbn0uIERlc2NhcmdhIGxhIHZlcnNpXHUwMGYzbiBtXHUwMGUx cyByZWNpZW50ZSBkZSBGbGFzaCBQbGF5ZXIuIix7J3JlcXVpcmVkLXZlcnNpb24n OmYsJ2N1cnJlbnQtdmVyc2lvbic6Y30pO319ZnVuY3Rpb24gc2hvd0ZsYXNoRXJy b3JEaWFsb2coYixhKXtCb290bG9hZGVyLmxvYWRDb21wb25lbnRzKCdlcnJvci1k aWFsb2cnLGZ1bmN0aW9uKCl7RXJyb3JEaWFsb2cuc2hvdyhiLGEpO30pO31mdW5j dGlvbiByZW5kZXJfdGFnX2FzX2h0bWxzdHJpbmcoZixiLGMpe3ZhciBhPS9eW0Et WmEtejAtOVwtXSskLztpZighZi5tYXRjaChhKSl0aHJvdyBuZXcgRXJyb3IoJ0lu dmFsaWQgdGFnICcrZik7dmFyIGU9JzwnK2Y7Zm9yKHZhciBkIGluIGIpe2lmKCFk Lm1hdGNoKGEpKXRocm93IG5ldyBFcnJvcignSW52YWxpZCBhdHRyICcrZCk7ZSs9 JyAnK2QrJz0iJytodG1sc3BlY2lhbGNoYXJzKGJbZF0pKyciJzt9aWYoYz09PW51 bGwpe3JldHVybiBlKycvPic7fWVsc2UgcmV0dXJuIGUrJz4nK2MrJzwvJytmKyc+ Jzt9CmZ1bmN0aW9uIEZsYXNoKCl7fWNvcHlfcHJvcGVydGllcyhGbGFzaCx7SU5J VDonZmxhc2gvaW5pdCcsUkVBRFk6J2ZsYXNoL3JlYWR5JyxGQUlMRUQ6J2ZsYXNo L2ZhaWxlZCd9KTsKd2luZG93LlN1YnNjcmlwdGlvbkxldmVscz17QUxMOicxNjIz MTg4MTA1MTQ2NzknLERFRkFVTFQ6JzI3MTY3MDg5Mjg1ODY5NicsVE9QOicyNjYx NTY4NzM0MDM3NTUnfTt3aW5kb3cuRWRpdFN1YnNjcmlwdGlvbnM9d2luZG93LkVk aXRTdWJzY3JpcHRpb25zfHwoZnVuY3Rpb24oKXt2YXIgYT0xMzt2YXIgYj1bU3Vi c2NyaXB0aW9uTGV2ZWxzLkFMTCxTdWJzY3JpcHRpb25MZXZlbHMuREVGQVVMVCxT dWJzY3JpcHRpb25MZXZlbHMuVE9QXTt2YXIgZD17fTt2YXIgZz17fTt2YXIgdD17 fTt2YXIgcz17fTt2YXIgZj17fTt2YXIgZT17fTt2YXIgcj0iL2FqYXgvZm9sbG93 L2ZvbGxvd19wcm9maWxlLnBocCI7dmFyIHc9Ii9hamF4L2ZvbGxvdy91bmZvbGxv d19wcm9maWxlLnBocCI7ZnVuY3Rpb24gbih5KXtyZXR1cm4gYi5jb250YWlucyh5 KTt9ZnVuY3Rpb24gaih5LHpiLHosemMpe3ZhciB6YT1QYXJlbnQuYnlDbGFzcyh6 YywndWlNZW51SXRlbScpO2lmKCF6YXx8IURPTS5jb250YWlucyh5LHphKSl7cmV0 dXJuO31lbHNlIGlmKENTUy5oYXNDbGFzcyh6YSwnU3Vic2NyaWJlTWVudVRvZ2ds ZScpKXtDU1MudG9nZ2xlQ2xhc3MoeSwnc2hvd1N1YnNjcmlwdGlvbk1lbnUnKTty ZXR1cm4gZmFsc2U7fWVsc2UgaWYoQ1NTLmhhc0NsYXNzKHphLCdTdWJzY3JpYmVN ZW51U3Vic2NyaWJlJykpe0NTUy50b2dnbGVDbGFzcyh5LCdzaG93U3Vic2NyaXB0 aW9uTWVudScpO2woeSx6Yik7cmV0dXJuIGZhbHNlO31lbHNlIGlmKENTUy5oYXND bGFzcyh6YSwnU3Vic2NyaWJlTWVudVVuc3Vic2NyaWJlJykpe0NTUy50b2dnbGVD bGFzcyh5LCdzaG93U3Vic2NyaXB0aW9uTWVudScpO20oeSx6Yik7cmV0dXJuIGZh bHNlO31lbHNlIGlmKENTUy5oYXNDbGFzcyh6YSwnU3Vic2NyaXB0aW9uTWVudUl0 ZW0nKSl7ayh5LHpiLHosemEpO3JldHVybiBmYWxzZTt9fWZ1bmN0aW9uIGsoeSx6 Yix6LHphKXtpZihDU1MuaGFzQ2xhc3MoemEsJ1N1YnNjcmlwdGlvbk1lbnVMZXZl bCcpKXtpZihNZW51LmlzSXRlbUNoZWNrZWQoemEpKXJldHVybjtvKHksemIsaSh6 YSksdHJ1ZSx6KTt9ZWxzZSBpZihDU1MuaGFzQ2xhc3MoemEsJ1N1YnNjcmlwdGlv bk1lbnVDYXRlZ29yeScpKXgoemIsemEsIU1lbnUuaXNJdGVtQ2hlY2tlZCh6YSks dHJ1ZSx6KTt9ZnVuY3Rpb24gbCh5LHphKXt2YXIgej17cHJvZmlsZV9pZDp6YX07 QXJiaXRlci5pbmZvcm0oJ0ZvbGxvd1VzZXInLHopO0NTUy5yZW1vdmVDbGFzcyh5 LCdpc1Vuc3Vic2NyaWJlZCcpO25ldyBBc3luY1JlcXVlc3QoKS5zZXRVUkkociku c2V0TWV0aG9kKCdQT1NUJykuc2V0RGF0YSh7cHJvZmlsZV9pZDp6YSxsb2NhdGlv bjphfSkuc2V0RXJyb3JIYW5kbGVyKEFyYml0ZXIuaW5mb3JtLmN1cnJ5KCdGb2xs b3dVc2VyRmFpbCcseikpLnNlbmQoKTt9ZnVuY3Rpb24gbSh5LHphKXt2YXIgej17 cHJvZmlsZV9pZDp6YX07QXJiaXRlci5pbmZvcm0oJ1VuZm9sbG93aW5nVXNlcics eik7Q1NTLmFkZENsYXNzKHksJ2lzVW5zdWJzY3JpYmVkJyk7bmV3IEFzeW5jUmVx dWVzdCgpLnNldFVSSSh3KS5zZXRNZXRob2QoJ1BPU1QnKS5zZXREYXRhKHtwcm9m aWxlX2lkOnphLGxvY2F0aW9uOmF9KS5zZXRFcnJvckhhbmRsZXIoQXJiaXRlci5p bmZvcm0uY3VycnkoJ1VuZm9sbG93VXNlckZhaWwnLHopKS5zZW5kKCk7fWZ1bmN0 aW9uIHAoemEsemIseil7dmFyIHk9e3Byb2ZpbGVfaWQ6emEsbGV2ZWw6dFt6YV0s Y3VzdG9tX2NhdGVnb3JpZXM6c1t6YV0sbG9jYXRpb246en07bmV3IEFzeW5jUmVx dWVzdCgpLnNldFVSSSgnL2FqYXgvZm9sbG93L21hbmFnZV9zdWJzY3JpcHRpb25z LnBocCcpLnNldERhdGEoeSkuc2VuZCgpO31mdW5jdGlvbiB1KHosemIpe3ZhciB5 PXNbemJdfHxbXTt2YXIgemE9TWVudS5nZXRJdGVtcyh6KTt6YS5mb3JFYWNoKGZ1 bmN0aW9uKHpkKXtpZihDU1MuaGFzQ2xhc3MoemQsJ1N1YnNjcmlwdGlvbk1lbnVD YXRlZ29yeScpKXt2YXIgemM9aSh6ZCk7aWYoeS5jb250YWlucyh6Yykpe2MoemQp O31lbHNlIHYoemQpO319KTtvKHosemIsdFt6Yl0sZmFsc2UpO31mdW5jdGlvbiBp KHope3ZhciB5PURPTS5zY3J5KHosJ2lucHV0JylbMF07cmV0dXJuIHkmJnkudmFs dWU7fWZ1bmN0aW9uIGgoeSl7cmV0dXJuIERPTS5maW5kKHksJ2EuaXRlbUFuY2hv cicpO31mdW5jdGlvbiBjKHkpe0NTUy5hZGRDbGFzcyh5LCdjaGVja2VkJyk7aCh5 KS5zZXRBdHRyaWJ1dGUoJ2FyaWEtY2hlY2tlZCcsdHJ1ZSk7fWZ1bmN0aW9uIHYo eSl7Q1NTLnJlbW92ZUNsYXNzKHksJ2NoZWNrZWQnKTtoKHkpLnNldEF0dHJpYnV0 ZSgnYXJpYS1jaGVja2VkJyxmYWxzZSk7fWZ1bmN0aW9uIHgoemMsemEseSx6ZCx6 Yil7aWYoeSl7Yyh6YSk7fWVsc2Ugdih6YSk7dmFyIHplPWkoemEpO2lmKG4oemUp KXt5JiZxKHpjLHplKTt9ZWxzZSBpZih5KXtpZighc1t6Y10uY29udGFpbnMoemUp KXNbemNdLnB1c2goemUpO31lbHNle3ZhciB6PXNbemNdLmluZGV4T2YoemUpO2lm KHohPT0tMSlzW3pjXS5zcGxpY2UoeiwxKTt9aWYoemQpcCh6Yyx6ZSx6Yik7fWZ1 bmN0aW9uIHEoeix5KXt0W3pdPXk7QXJiaXRlci5pbmZvcm0oJ1N1YnNjcmlwdGlv bkxldmVsVXBkYXRlZCcse3Byb2ZpbGVfaWQ6eixsZXZlbDp5fSk7fWZ1bmN0aW9u IG8oeSx6Yyx6LHplLHpiKXt2YXIgemE9RE9NLnNjcnkoeSwnLlN1YnNjcmlwdGlv bk1lbnVMZXZlbCcpO3ZhciB6ZD1udWxsO3phLmZvckVhY2goZnVuY3Rpb24oemYp e2lmKGkoemYpPT16KXt6ZD16Zjt9ZWxzZSBpZihNZW51LmlzSXRlbUNoZWNrZWQo emYpKXgoemMsemYsZmFsc2UsZmFsc2UpO30pO3pkJiZ4KHpjLHpkLHRydWUsemUs emIpO31BcmJpdGVyLnN1YnNjcmliZSgnVW5mb2xsb3dVc2VyJyxmdW5jdGlvbih5 LHope2lmKGZbei5wcm9maWxlX2lkXSl7cSh6LnByb2ZpbGVfaWQsZlt6LnByb2Zp bGVfaWRdKTtzW3oucHJvZmlsZV9pZF09ZVt6LnByb2ZpbGVfaWRdLnNsaWNlKCk7 fX0pO0FyYml0ZXIuc3Vic2NyaWJlKCdVcGRhdGVTdWJzY3JpcHRpb25MZXZlbCcs ZnVuY3Rpb24oeSx6Yil7dmFyIHpkPXpiLnByb2ZpbGVfaWQrJyc7dmFyIHpjPXpi LmxldmVsKycnO3EoemQsemMpO3ZhciB6YTtmb3IoemEgaW4gZClpZihkW3phXT09 PXpkKXt2YXIgej1nZSh6YSk7eiYmbyh6LHpkLHpjLGZhbHNlKTt9fSk7cmV0dXJu IHtpbml0OmZ1bmN0aW9uKHksemIsemEpe3ZhciB6PXkuaWQ7aWYoIWRbel0pRXZl bnQubGlzdGVuKHksJ2NsaWNrJyxmdW5jdGlvbih6Yyl7cmV0dXJuIGooeSxkW3pd LHphLHpjLmdldFRhcmdldCgpKTt9KTtpZih0W3piXSl1KHksemIpO2Rbel09emI7 Q1NTLmNvbmRpdGlvbkNsYXNzKHksJ05vbkZyaWVuZFN1YnNjcmlwdGlvbk1lbnUn LCFnW3piXSk7fSxnZXRTdWJzY3JpcHRpb25zOmZ1bmN0aW9uKHkpe3JldHVybiB7 bGV2ZWw6dFt5XSxjdXN0b21fY2F0ZWdvcmllczpzW3ldfTt9LHNldFN1YnNjcmlw dGlvbnM6ZnVuY3Rpb24oemIsemEsemQsemMseix5KXtxKHpiLHpkKycnKTtnW3pi XT16YTtmW3piXT16KycnO3NbemJdPXpjLm1hcChTdHJpbmcpO2VbemJdPXkubWFw KFN0cmluZyk7fX07fSkoKTsKZnVuY3Rpb24gSG92ZXJGbHlvdXQoYSl7dGhpcy5f Zmx5b3V0PWE7dGhpcy5fc2hvd0RlbGF5PTA7dGhpcy5faGlkZURlbGF5PTEwMDt0 aGlzLl9zaG93VGltZW91dD1udWxsO3RoaXMuX2hpZGVUaW1lb3V0PW51bGw7dGhp cy5fZmx5b3V0U3Vic2NyaXB0aW9ucz1bdGhpcy5fZmx5b3V0LnN1YnNjcmliZSgn bW91c2VlbnRlcicsdGhpcy5fb25GbHlvdXRNb3VzZUVudGVyLmJpbmQodGhpcykp LHRoaXMuX2ZseW91dC5zdWJzY3JpYmUoJ21vdXNlbGVhdmUnLHRoaXMuaGlkZUZs eW91dC5zaGllbGQodGhpcykpXTt0aGlzLl9ub2Rlcz1bXTt0aGlzLl9kYXRhU3Rv cmVVbmlxdWU9J0hvdmVyRmx5b3V0XycrRGF0ZS5ub3coKTt9Q2xhc3MubWl4aW4o SG92ZXJGbHlvdXQsJ0FyYml0ZXInLHtpbml0Tm9kZTpmdW5jdGlvbihhKXt0aGlz Ll9ub2Rlcy5wdXNoKGEpO0RhdGFTdG9yZS5zZXQoYSx0aGlzLl9kYXRhU3RvcmVV bmlxdWUrJ19saXN0ZW5lcnMnLFtFdmVudC5saXN0ZW4oYSwnbW91c2VlbnRlcics dGhpcy5fb25Ob2RlTW91c2VFbnRlci5iaW5kKHRoaXMsYSkpLEV2ZW50Lmxpc3Rl bihhLCdtb3VzZWxlYXZlJyx0aGlzLmhpZGVGbHlvdXQuc2hpZWxkKHRoaXMpKV0p O3JldHVybiB0aGlzO30sZGVhY3RpdmF0ZU5vZGU6ZnVuY3Rpb24oYSl7dmFyIGI9 RGF0YVN0b3JlLmdldChhLHRoaXMuX2RhdGFTdG9yZVVuaXF1ZSsnX2xpc3RlbmVy cycpO2lmKGIpd2hpbGUoYi5sZW5ndGgpYi5wb3AoKS5yZW1vdmUoKTt0aGlzLl9u b2Rlcy5yZW1vdmUoYSk7fSxzZXRTaG93RGVsYXk6ZnVuY3Rpb24oYSl7dGhpcy5f c2hvd0RlbGF5PWE7cmV0dXJuIHRoaXM7fSxzZXRIaWRlRGVsYXk6ZnVuY3Rpb24o YSl7dGhpcy5faGlkZURlbGF5PWE7cmV0dXJuIHRoaXM7fSxzaG93Rmx5b3V0OmZ1 bmN0aW9uKGEsYil7dGhpcy5zZXRBY3RpdmVOb2RlKGEpO2lmKGIpe3RoaXMuX2Zs eW91dC5zZXRDb250ZXh0KGEpLnNob3coKTt0aGlzLmluZm9ybSgnc2hvdycsYSk7 fWVsc2UgdGhpcy5fc2hvd1RpbWVvdXQ9dGhpcy5zaG93Rmx5b3V0LmJpbmQodGhp cyxhLHRydWUpLmRlZmVyKHRoaXMuX3Nob3dEZWxheSk7cmV0dXJuIHRoaXM7fSxo aWRlRmx5b3V0OmZ1bmN0aW9uKGEpe2NsZWFyVGltZW91dCh0aGlzLl9zaG93VGlt ZW91dCk7aWYoYSl7dGhpcy5fZmx5b3V0LmhpZGUoKTt0aGlzLmluZm9ybSgnaGlk ZScsdGhpcy5fYWN0aXZlTm9kZSk7dGhpcy5fYWN0aXZlTm9kZT1udWxsO31lbHNl IHRoaXMuX2hpZGVUaW1lb3V0PXRoaXMuaGlkZUZseW91dC5iaW5kKHRoaXMsdHJ1 ZSkuZGVmZXIodGhpcy5faGlkZURlbGF5KTt9LGdldEFjdGl2ZU5vZGU6ZnVuY3Rp b24oKXtyZXR1cm4gdGhpcy5fYWN0aXZlTm9kZTt9LHNldEFjdGl2ZU5vZGU6ZnVu Y3Rpb24oYSl7Y2xlYXJUaW1lb3V0KHRoaXMuX2hpZGVUaW1lb3V0KTtpZih0aGlz Ll9hY3RpdmVOb2RlJiZ0aGlzLl9hY3RpdmVOb2RlIT09YSl0aGlzLmhpZGVGbHlv dXQodHJ1ZSk7dGhpcy5fYWN0aXZlTm9kZT1hO3JldHVybiB0aGlzO30sZGVzdHJv eTpmdW5jdGlvbigpe3doaWxlKHRoaXMuX2ZseW91dFN1YnNjcmlwdGlvbnMubGVu Z3RoKXRoaXMuX2ZseW91dC51bnN1YnNjcmliZSh0aGlzLl9mbHlvdXRTdWJzY3Jp cHRpb25zLnBvcCgpKTtmb3IodmFyIGE9MDthPHRoaXMuX25vZGVzLmxlbmd0aDth Kyspe3ZhciBiPURhdGFTdG9yZS5nZXQodGhpcy5fbm9kZXNbYV0sdGhpcy5fZGF0 YVN0b3JlVW5pcXVlKydfbGlzdGVuZXJzJyk7aWYoYil3aGlsZShiLmxlbmd0aCli LnBvcCgpLnJlbW92ZSgpO319LF9vbk5vZGVNb3VzZUVudGVyOmZ1bmN0aW9uKGEp e2lmKHRoaXMuX2FjdGl2ZU5vZGU9PT1hKXtjbGVhclRpbWVvdXQodGhpcy5faGlk ZVRpbWVvdXQpO31lbHNlIHRoaXMuc2hvd0ZseW91dChhKTt9LF9vbkZseW91dE1v dXNlRW50ZXI6ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGhpcy5faGlkZVRpbWVv dXQpO319KTsKdmFyIFN1YnNjcmlwdGlvbkZseW91dENvbnRyb2xsZXI9KGZ1bmN0 aW9uKCl7dmFyIGQ9bnVsbDt2YXIgYzt2YXIgZTt2YXIgYjtmdW5jdGlvbiBhKCl7 dmFyIGk9RWRpdFN1YnNjcmlwdGlvbnMuZ2V0U3Vic2NyaXB0aW9ucyhiKTtpZihp KXt2YXIgaD1pLmN1c3RvbV9jYXRlZ29yaWVzO2lmKGgmJmgubGVuZ3RoPT09MClB cmJpdGVyLmluZm9ybSgnVW5mb2xsb3dVc2VyJyx7cHJvZmlsZV9pZDpiLGZyb21f aGlkZV9mbHlvdXQ6dHJ1ZX0pO319ZnVuY3Rpb24gZyhoLGope2I9RGF0YVN0b3Jl LmdldChqLCdwcm9maWxlX2lkJyk7dmFyIGk9RGF0YVN0b3JlLmdldChqLCdsb2Mn KTtFZGl0U3Vic2NyaXB0aW9ucy5pbml0KGUsYixpKTtDU1MuYWRkQ2xhc3Moaiwn c2VsZWN0ZWQnKTtDU1MuYWRkQ2xhc3MoaiwndWlCdXR0b25Ib3ZlcicpO2lmKERh dGFTdG9yZS5nZXQoaiwnb25jbG9zZScpKWNsZWFyVGltZW91dChEYXRhU3RvcmUu cmVtb3ZlKGosJ29uY2xvc2V0aW1lb3V0JykpO31mdW5jdGlvbiBmKGgsaSl7Yj1u dWxsO0NTUy5yZW1vdmVDbGFzcyhpLCdzZWxlY3RlZCcpO0NTUy5yZW1vdmVDbGFz cyhpLCd1aUJ1dHRvbkhvdmVyJyk7aWYoRGF0YVN0b3JlLmdldChpLCdvbmNsb3Nl JykpRGF0YVN0b3JlLnNldChpLCdvbmNsb3NldGltZW91dCcsZnVuY3Rpb24oKXt2 YXIgaj1EYXRhU3RvcmUucmVtb3ZlKGksJ29uY2xvc2UnKTtqJiZqKCk7fS5kZWZl cigxNTAwKSk7fXJldHVybiB7aW5pdDpmdW5jdGlvbihoLGkpe1N1YnNjcmlwdGlv bkZseW91dENvbnRyb2xsZXIuaW5pdD1iYWdvZmhvbGRpbmc7Yz1oO2U9aTtkPW5l dyBIb3ZlckZseW91dChoKTtkLnNldFNob3dEZWxheSgxMDApLnNldEhpZGVEZWxh eSgxNTApO2Quc3Vic2NyaWJlKCdzaG93JyxnKTtkLnN1YnNjcmliZSgnaGlkZScs Zik7QXJiaXRlci5zdWJzY3JpYmUoWydVbmZvbGxvd1VzZXInLCdVbmZvbGxvd2lu Z1VzZXInXSxmdW5jdGlvbihqLGspe2lmKCFrLmZyb21faGlkZV9mbHlvdXQmJmsu cHJvZmlsZV9pZD09Yil7aWYod2luZG93LkhvdmVyY2FyZCYmSG92ZXJjYXJkLmNv bnRhaW5zJiZjKWlmKEhvdmVyY2FyZC5jb250YWlucyhjLmdldENvbnRleHQoKSkp SG92ZXJjYXJkLmhpZGUoKTtkLmhpZGVGbHlvdXQodHJ1ZSk7fX0pO30saW5pdE5v ZGU6ZnVuY3Rpb24oaSxqLGgpe0RhdGFTdG9yZS5zZXQoaSwncHJvZmlsZV9pZCcs aik7RGF0YVN0b3JlLnNldChpLCdsb2MnLGgpO2QuaW5pdE5vZGUoaSk7fSxzZXRB Y3RpdmVOb2RlOmZ1bmN0aW9uKGgpe2Quc2V0QWN0aXZlTm9kZShoKTt9LHNob3c6 ZnVuY3Rpb24oaCl7ZC5zaG93Rmx5b3V0KGgsdHJ1ZSk7fSxzZXRDbG9zZUxpc3Rl bmVyOmZ1bmN0aW9uKGksaCl7aWYoZC5nZXRBY3RpdmVOb2RlKCkhPT1pKXtoKCk7 fWVsc2UgRGF0YVN0b3JlLnNldChpLCdvbmNsb3NlJyxoKTt9fTt9KSgpOwpGcmll bmRSZXF1ZXN0TWVzc2FnZT17U1RBVFVTOidGcmllbmRSZXF1ZXN0L2NoYW5nZScs VU5GUklFTkQ6J0ZyaWVuZFJlcXVlc3QvdW5mcmllbmQnLENBTkNFTDonRnJpZW5k UmVxdWVzdC9jYW5jZWwnLENBTkNFTExJTkc6J0ZyaWVuZFJlcXVlc3QvY2FuY2Vs bGluZycsQ0FOQ0VMX0ZBSUw6J0ZyaWVuZFJlcXVlc3QvY2FuY2VsRmFpbCcsU0VO VDonRnJpZW5kUmVxdWVzdC9zZW50JyxTRU5ESU5HOidGcmllbmRSZXF1ZXN0L3Nl bmRpbmcnLFNFTkRfRkFJTDonRnJpZW5kUmVxdWVzdC9zZW5kRmFpbCcsQ09ORklS TTonRnJpZW5kUmVxdWVzdC9jb25maXJtJyxDT05GSVJNSU5HOidGcmllbmRSZXF1 ZXN0L2NvbmZpcm1pbmcnLENPTkZJUk1fRkFJTDonRnJpZW5kUmVxdWVzdC9jb25m aXJtRmFpbCd9O2Z1bmN0aW9uIEZyaWVuZFN0YXR1cyhhLGMsYil7dGhpcy5pZD1h O3RoaXMudXBkYXRlKGMsYik7fUZyaWVuZFN0YXR1cy5wcm90b3R5cGU9e3VwZGF0 ZTpmdW5jdGlvbihiLGEpe2ImJih0aGlzLnN0YXR1cz1iKTtpZihhKXt0aGlzLmxp c3RzPSRBKGEpLm1hcChTdHJpbmcpO3RoaXMuX2luZm9ybUxpc3RDaGFuZ2UoKTt9 fSxpc0NvbXBsZXRlOmZ1bmN0aW9uKCl7cmV0dXJuICEhdGhpcy5saXN0czt9LGFk ZFRvTGlzdDpmdW5jdGlvbihhKXtpZih0aGlzLmxpc3RzJiYhdGhpcy5saXN0cy5j b250YWlucyhhKSl0aGlzLmxpc3RzLnB1c2goYSk7dGhpcy5faW5mb3JtTGlzdENo YW5nZSgpO30scmVtb3ZlRnJvbUxpc3Q6ZnVuY3Rpb24oYil7aWYodGhpcy5saXN0 cyl7dmFyIGE9dGhpcy5saXN0cy5pbmRleE9mKGIpO2EhPT0tMSYmdGhpcy5saXN0 cy5zcGxpY2UoYSwxKTt9dGhpcy5faW5mb3JtTGlzdENoYW5nZSgpO30sdXBkYXRl TGlzdDpmdW5jdGlvbihiLGEpe2E/dGhpcy5hZGRUb0xpc3QoYik6dGhpcy5yZW1v dmVGcm9tTGlzdChiKTt9LF9pbmZvcm1MaXN0Q2hhbmdlOmZ1bmN0aW9uKCl7QXJi aXRlci5pbmZvcm0oJ0ZyaWVuZExpc3RNZW1iZXJzaGlwQ2hhbmdlJyx7dWlkOnRo aXMuaWQsbGlzdHM6dGhpcy5saXN0c30pO319O2NvcHlfcHJvcGVydGllcyhGcmll bmRTdGF0dXMse0FSRV9GUklFTkRTOjEsSU5DT01JTkdfUkVRVUVTVDoyLE9VVEdP SU5HX1JFUVVFU1Q6MyxDQU5fUkVRVUVTVDo0fSk7KGZ1bmN0aW9uKCl7dmFyIGE9 e307dmFyIGI9e307ZnVuY3Rpb24gYyhmLGQsZSl7aWYoIWFbZS51aWRdKXthW2Uu dWlkXT1uZXcgRnJpZW5kU3RhdHVzKGUudWlkLGYpO31lbHNlIGFbZS51aWRdLnVw ZGF0ZShmKTtBcmJpdGVyLmluZm9ybShGcmllbmRSZXF1ZXN0TWVzc2FnZS5TVEFU VVMse3VpZDplLnVpZCxzdGF0dXM6Zn0pO31vbmxvYWRSZWdpc3RlcihmdW5jdGlv bigpe0FyYml0ZXIuc3Vic2NyaWJlKFtGcmllbmRSZXF1ZXN0TWVzc2FnZS5DQU5D RUwsRnJpZW5kUmVxdWVzdE1lc3NhZ2UuVU5GUklFTkQsRnJpZW5kUmVxdWVzdE1l c3NhZ2UuU0VORF9GQUlMXSxjLmN1cnJ5KEZyaWVuZFN0YXR1cy5DQU5fUkVRVUVT VCkpO0FyYml0ZXIuc3Vic2NyaWJlKFtGcmllbmRSZXF1ZXN0TWVzc2FnZS5DT05G SVJNX0ZBSUxdLGMuY3VycnkoRnJpZW5kU3RhdHVzLklOQ09NSU5HX1JFUVVFU1Qp KTtBcmJpdGVyLnN1YnNjcmliZShbRnJpZW5kUmVxdWVzdE1lc3NhZ2UuQ0FOQ0VM X0ZBSUwsRnJpZW5kUmVxdWVzdE1lc3NhZ2UuU0VOVCxGcmllbmRSZXF1ZXN0TWVz c2FnZS5TRU5ESU5HXSxjLmN1cnJ5KEZyaWVuZFN0YXR1cy5PVVRHT0lOR19SRVFV RVNUKSk7QXJiaXRlci5zdWJzY3JpYmUoW0ZyaWVuZFJlcXVlc3RNZXNzYWdlLkNP TkZJUk0sRnJpZW5kUmVxdWVzdE1lc3NhZ2UuQ09ORklSTUlOR10sYy5jdXJyeShG cmllbmRTdGF0dXMuQVJFX0ZSSUVORFMpKTt9KTtjb3B5X3Byb3BlcnRpZXMoRnJp ZW5kU3RhdHVzLHtDTE9TRV9GUklFTkRTOm51bGwsQUNRVUFJTlRBTkNFUzpudWxs LGdldEZyaWVuZDpmdW5jdGlvbihkLGUpe2lmKGFbZF0mJmFbZF0uaXNDb21wbGV0 ZSgpKXtlKGFbZF0pO31lbHNlIGlmKGJbZF0pe2JbZF0ucHVzaChlKTt9ZWxzZXti W2RdPVtlXTtuZXcgQXN5bmNSZXF1ZXN0KCkuc2V0VVJJKCIvYWpheC9mcmllbmRz L3N0YXR1cy5waHAiKS5zZXREYXRhKHtmcmllbmQ6ZH0pLnNldEhhbmRsZXIoZnVu Y3Rpb24oZyl7dmFyIGY9Zy5nZXRQYXlsb2FkKCk7RnJpZW5kU3RhdHVzLmluaXRG cmllbmQoZCxmLnN0YXR1cyxmLmxpc3RzKTt9KS5zZW5kKCk7fX0saW5pdEZyaWVu ZDpmdW5jdGlvbihlLGcsZil7dmFyIGQ9YVtlXXx8bmV3IEZyaWVuZFN0YXR1cyhl KTtkLnVwZGF0ZShkLnN0YXR1c3x8ZyxkLmxpc3RzfHxmKTthW2VdPWQ7YltlXSYm YltlXS5mb3JFYWNoKGZ1bmN0aW9uKGgpe2goZCk7fSk7YltlXT1udWxsO30sc2V0 U3BlY2lhbExpc3RzOmZ1bmN0aW9uKGQpe0ZyaWVuZFN0YXR1cy5DTE9TRV9GUklF TkRTPWQuY2xvc2UrJyc7RnJpZW5kU3RhdHVzLkFDUVVBSU5UQU5DRVM9ZC5hY3Er Jyc7fX0pO30pKCk7Cl9fZSgiZW52IixbIkVudiJdLGZ1bmN0aW9uKGIsYyl7dmFy IGE9YygnRW52Jyk7Yi5FbnY9YTt9LDMpOwpvbmxvYWRSZWdpc3RlcihmdW5jdGlv bigpe2NvcHlfcHJvcGVydGllcyhBc3luY1JlcXVlc3QucHJvdG90eXBlLHtzZXRO ZWN0YXJNb2R1bGVEYXRhOmZ1bmN0aW9uKGMpe2lmKHRoaXMubWV0aG9kPT0nUE9T VCcpe3ZhciBkPUVudi5tb2R1bGU7aWYoYyYmZD09PXVuZGVmaW5lZCl7dmFyIGI9 e2ZicGFnZV9mYW5fY29uZmlybToxfTt2YXIgZT1udWxsO2Zvcih2YXIgYT1jO2Em JmEhPWRvY3VtZW50LmJvZHk7YT1hLnBhcmVudE5vZGUpe2lmKCFhLmlkfHx0eXBl b2YgYS5pZCE9PSdzdHJpbmcnKWNvbnRpbnVlO2lmKGEuaWQuc3RhcnRzV2l0aCgn cGFnZWxldF8nKSl7ZD1hLmlkO2JyZWFrO31pZighZSYmYlthLmlkXSllPWEuaWQ7 fWlmKGQ9PT11bmRlZmluZWQmJmUpZD1lO31pZihkIT09dW5kZWZpbmVkKXtpZih0 aGlzLmRhdGEubmN0cj09PXVuZGVmaW5lZCl0aGlzLmRhdGEubmN0cj17fTt0aGlz LmRhdGEubmN0ci5fbW9kPWQ7fX19LHNldE5lY3RhckltcHJlc3Npb25JZDpmdW5j dGlvbigpe2lmKHRoaXMubWV0aG9kPT0nUE9TVCcpe3ZhciBhPUVudi5pbXBpZDtp ZihhIT09dW5kZWZpbmVkKXtpZih0aGlzLmRhdGEubmN0cj09PXVuZGVmaW5lZCl0 aGlzLmRhdGEubmN0cj17fTt0aGlzLmRhdGEubmN0ci5faW1waWQ9YTt9fX19KTt9 KTsKX19lKCJkaWFsb2ciLFsiRGlhbG9nIl0sZnVuY3Rpb24oYixjKXt2YXIgYT1j KCdEaWFsb2cnKTtiLkRpYWxvZz1hO30sMyk7CmZ1bmN0aW9uIGZicGFnZV9zZXRf ZmFuX3N0YXR1cyhjLGYsYSxoLGcsZCxlKXtnPWc/ZzpmdW5jdGlvbihqKXtfZmJw YWdlX3Nob3dfY2hhbmdlX3N0YXR1c19mZWVkYmFjayhjLGouZ2V0UGF5bG9hZCgp KTt9O3ZhciBiPXtmYnBhZ2VfaWQ6ZixhZGQ6YSxyZWxvYWQ6aH07aWYoZSE9bnVs bCljb3B5X3Byb3BlcnRpZXMoYixlKTt2YXIgaT1uZXcgQXN5bmNSZXF1ZXN0KCku c2V0VVJJKCcvYWpheC9wYWdlcy9mYW5fc3RhdHVzLnBocCcpLnNldERhdGEoYiku c2V0TmVjdGFyTW9kdWxlRGF0YVNhZmUoYykuc2V0SGFuZGxlcihnKTtpZihkKWku c2V0RXJyb3JIYW5kbGVyKGQpO2kuc2VuZCgpO3JldHVybiBmYWxzZTt9ZnVuY3Rp b24gZmJwYWdlX3NldF9mYXZvcml0ZV9zdGF0dXMoZCxlLGEpe3ZhciBmPWZ1bmN0 aW9uKCl7X2ZicGFnZV9zaG93X2NoYW5nZV9zdGF0dXNfZmVlZGJhY2soZCx0aGlz LmdldFVzZXJEYXRhKCkpO307dmFyIGM9e2ZicGFnZV9pZDplLGFkZDphfTt2YXIg Yj1uZXcgQXN5bmNSZXF1ZXN0KCkuc2V0TWV0aG9kKCdQT1NUJykuc2V0VVJJKCcv YWpheC9wYWdlcy9mYXZvcml0ZV9zdGF0dXMucGhwJykuc2V0RGF0YShjKTtuZXcg RGlhbG9nKCkuc2V0QXN5bmMoYikuc2V0Q2xvc2VIYW5kbGVyKGYpLnNob3coKTty ZXR1cm4gZmFsc2U7fWZ1bmN0aW9uIF9mYnBhZ2Vfc2hvd19jaGFuZ2Vfc3RhdHVz X2ZlZWRiYWNrKGIsYSl7aWYoIWF8fCFiKXJldHVybjtpZihhLnJlbG9hZCl7ZmJw YWdlX3JlbG9hZF9vbl9mYW5fc3RhdHVzX2NoYW5nZWQoYS5wcmVzZXJ2ZV90YWIp O31lbHNlIGZicGFnZV9yZWRyYXdfb25fZmFuX3N0YXR1c19jaGFuZ2VkKGIsYS5m ZWVkYmFjayk7fWZ1bmN0aW9uIGZicGFnZV9yZWxvYWRfb25fZmFuX3N0YXR1c19j aGFuZ2VkKGEpe3ZhciBjPVVSSS5nZXRSZXF1ZXN0VVJJKCk7aWYoYSl7dmFyIGI9 RnV0dXJlU2lkZU5hdi5nZXRJbnN0YW5jZSgpLnNlbGVjdGVkLnRleHRLZXk7aWYo IWMuZ2V0UXVlcnlEYXRhKCkuc2smJmIpYy5hZGRRdWVyeURhdGEoe3NrOmJ9KTt9 d2luZG93LmxvY2F0aW9uLmhyZWY9Yzt9ZnVuY3Rpb24gZmJwYWdlX3JlZHJhd19v bl9mYW5fc3RhdHVzX2NoYW5nZWQoYSxiKXtpZighYilyZXR1cm47dmFyIGQ9ZG9j dW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO2QuaW5uZXJIVE1MPWI7Q1NTLnNl dENsYXNzKGQsJ2Zhbl9zdGF0dXNfaW5hY3RpdmUnKTthLnBhcmVudE5vZGUucmVw bGFjZUNoaWxkKGQsYSk7dmFyIGM9ZnVuY3Rpb24oKXtpZihkYXRhLmNhbl9yZXBl YXRfYWN0aW9uKWQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoYSxkKTt9O2FuaW1h dGlvbihkKS5kdXJhdGlvbigzMDAwKS5jaGVja3BvaW50KCkudG8oJ2JhY2tncm91 bmRDb2xvcicsJyNGRkZGRkYnKS5kdXJhdGlvbigxMDAwKS5vbmRvbmUoYykuZ28o KTt9CmZ1bmN0aW9uIFNpbXBsZURyYWcoYSl7RXZlbnQubGlzdGVuKGEsJ21vdXNl ZG93bicsdGhpcy5fc3RhcnQuYmluZCh0aGlzKSk7fUNsYXNzLm1peGluKFNpbXBs ZURyYWcsJ0FyYml0ZXInLHtfc3RhcnQ6ZnVuY3Rpb24oZXZlbnQpe3RoaXMuaW5m b3JtKCdzdGFydCcsZXZlbnQpO3ZhciBiPXVhLmllKCk8OT9kb2N1bWVudC5kb2N1 bWVudEVsZW1lbnQ6d2luZG93O3ZhciBhPUV2ZW50Lmxpc3RlbihiLHtzZWxlY3Rz dGFydDpFdmVudC5wcmV2ZW50LG1vdXNlbW92ZTp0aGlzLmluZm9ybS5iaW5kKHRo aXMsJ3VwZGF0ZScpLG1vdXNldXA6ZnVuY3Rpb24oZXZlbnQpe2Zvcih2YXIgYyBp biBhKWFbY10ucmVtb3ZlKCk7dGhpcy5pbmZvcm0oJ2VuZCcsZXZlbnQpO30uYmlu ZCh0aGlzKX0pO3JldHVybiBmYWxzZTt9fSk7CmZ1bmN0aW9uIFNjcm9sbGFibGVB cmVhKCl7fWNvcHlfcHJvcGVydGllcyhTY3JvbGxhYmxlQXJlYSx7Z2V0SW5zdGFu Y2U6ZnVuY3Rpb24oYSl7dmFyIGI9UGFyZW50LmJ5Q2xhc3MoYSwndWlTY3JvbGxh YmxlQXJlYScpO3JldHVybiBiP0RhdGFTdG9yZS5nZXQoYiwnU2Nyb2xsYWJsZUFy ZWEnKTpudWxsO30scG9rZTpmdW5jdGlvbihiKXt2YXIgYT1TY3JvbGxhYmxlQXJl YS5nZXRJbnN0YW5jZShiKTthJiZhLnBva2UoKTt9fSk7U2Nyb2xsYWJsZUFyZWEu cHJvdG90eXBlPXtpbml0OmZ1bmN0aW9uKGEsYil7Yj1ifHx7fTt0aGlzLl9lbGVt PWE7dGhpcy5fd3JhcD1ET00uZmluZChhLCdkaXYudWlTY3JvbGxhYmxlQXJlYVdy YXAnKTt0aGlzLl9ib2R5PURPTS5maW5kKHRoaXMuX3dyYXAsJ2Rpdi51aVNjcm9s bGFibGVBcmVhQm9keScpO3RoaXMuX3RyYWNrPURPTS5maW5kKGEsJ2Rpdi51aVNj cm9sbGFibGVBcmVhVHJhY2snKTt0aGlzLl9ncmlwcGVyPURPTS5maW5kKHRoaXMu X3RyYWNrLCdkaXYudWlTY3JvbGxhYmxlQXJlYUdyaXBwZXInKTt0aGlzLl9vcHRp b25zPWI7dGhpcy5hZGp1c3RHcmlwcGVyKCk7dGhpcy5fbGlzdGVuZXJzPVtFdmVu dC5saXN0ZW4odGhpcy5fd3JhcCwnc2Nyb2xsJyx0aGlzLl9oYW5kbGVTY3JvbGwu YmluZCh0aGlzKSldO2lmKGIuZmFkZSE9PWZhbHNlKXRoaXMuX2xpc3RlbmVycy5w dXNoKEV2ZW50Lmxpc3RlbihhLCdtb3VzZWVudGVyJyx0aGlzLmFkanVzdEdyaXBw ZXIuc2hpZWxkKHRoaXMpKSxFdmVudC5saXN0ZW4oYSwnbW91c2VlbnRlcicsdGhp cy5zaG93U2Nyb2xsYmFyLnNoaWVsZCh0aGlzKSksRXZlbnQubGlzdGVuKGEsJ21v dXNlbW92ZScsdGhpcy5faGFuZGxlTW91c2Vtb3ZlLmJpbmQodGhpcykpLEV2ZW50 Lmxpc3RlbihhLCdtb3VzZW91dCcsdGhpcy5oaWRlU2Nyb2xsYmFyLnNoaWVsZCh0 aGlzKSkpO3RoaXMuaW5pdERyYWcoKTtEYXRhU3RvcmUuc2V0KHRoaXMuX2VsZW0s J1Njcm9sbGFibGVBcmVhJyx0aGlzKTtpZighYi5wZXJzaXN0ZW50KW9ubGVhdmVS ZWdpc3Rlcih0aGlzLmRlc3Ryb3kuYmluZCh0aGlzKSk7fSxpbml0RHJhZzpmdW5j dGlvbigpe3ZhciBhPW5ldyBTaW1wbGVEcmFnKHRoaXMuX2dyaXBwZXIpO2Euc3Vi c2NyaWJlKCdzdGFydCcsZnVuY3Rpb24oYixldmVudCl7aWYoISgoZXZlbnQud2hp Y2gmJmV2ZW50LndoaWNoPT09MSl8fChldmVudC5idXR0b24mJmV2ZW50LmJ1dHRv bj09PTEpKSlyZXR1cm47dmFyIGQ9VmVjdG9yMi5nZXRFdmVudFBvc2l0aW9uKGV2 ZW50KS55O3ZhciBlPXRoaXMuX2dyaXBwZXIub2Zmc2V0VG9wO3ZhciBmPWEuc3Vi c2NyaWJlKCd1cGRhdGUnLGZ1bmN0aW9uKGcsZXZlbnQpe3ZhciBqPVZlY3RvcjIu Z2V0RXZlbnRQb3NpdGlvbihldmVudCkueS1kO3ZhciBpPXRoaXMuX2VsZW0uY2xp ZW50SGVpZ2h0O3ZhciBoPXRoaXMuX2JvZHkub2Zmc2V0SGVpZ2h0O3ZhciBwPXRo aXMuX3RyYWNrLm9mZnNldEhlaWdodDt2YXIgaz1pL2gqcDt2YXIgbT1oLXRoaXMu X3dyYXAub2Zmc2V0SGVpZ2h0O3ZhciBsPWUrajt2YXIgbj1wLWs7bD1NYXRoLm1h eChNYXRoLm1pbihsLG4pLDApO3ZhciBvPWwvbiptO3RoaXMuX3dyYXAuc2Nyb2xs VG9wPW87fS5iaW5kKHRoaXMpKTt2YXIgYz1hLnN1YnNjcmliZSgnZW5kJyxmdW5j dGlvbigpe2EudW5zdWJzY3JpYmUoZik7YS51bnN1YnNjcmliZShjKTt9KTt9LmJp bmQodGhpcykpO30sYWRqdXN0R3JpcHBlcjpmdW5jdGlvbigpe3ZhciBiPXRoaXMu X2VsZW0uY2xpZW50SGVpZ2h0O3ZhciBhPXRoaXMuX2JvZHkub2Zmc2V0SGVpZ2h0 O3ZhciBlPXRoaXMuX3RyYWNrLm9mZnNldEhlaWdodDt2YXIgYz1iL2EqZTtpZihj PGUpe0NTUy5zZXRTdHlsZSh0aGlzLl9ncmlwcGVyLCdoZWlnaHQnLGMrJ3B4Jyk7 dmFyIGQ9dGhpcy5fd3JhcC5zY3JvbGxUb3AvYSplO0NTUy5zZXRTdHlsZSh0aGlz Ll9ncmlwcGVyLCd0b3AnLGQrJ3B4Jyk7Q1NTLnNob3codGhpcy5fZ3JpcHBlcik7 fWVsc2UgQ1NTLmhpZGUodGhpcy5fZ3JpcHBlcik7dGhpcy5fY2hlY2tDb250ZW50 Qm91bmRhcmllcygpO3JldHVybiB0aGlzO30sX2NoZWNrQ29udGVudEJvdW5kYXJp ZXM6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl93cmFwLnNjcm9sbFRvcDt2YXIgYj10 aGlzLl93cmFwLnNjcm9sbEhlaWdodC10aGlzLl93cmFwLmNsaWVudEhlaWdodDtD U1MuY29uZGl0aW9uQ2xhc3ModGhpcy5fZWxlbSwnY29udGVudEJlZm9yZScsYT4w KTtDU1MuY29uZGl0aW9uQ2xhc3ModGhpcy5fZWxlbSwnY29udGVudEFmdGVyJyxh PGIpO30sZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuX2xpc3RlbmVycy5mb3JFYWNo KGZ1bmN0aW9uKGEpe2EucmVtb3ZlKCk7fSk7dGhpcy5fbGlzdGVuZXJzLmxlbmd0 aD0wO30sX2hhbmRsZU1vdXNlbW92ZTpmdW5jdGlvbihldmVudCl7dmFyIGE9VmVj dG9yMi5nZXRFbGVtZW50UG9zaXRpb24odGhpcy5fdHJhY2spLng7dmFyIGI9VmVj dG9yMi5nZXRFbGVtZW50RGltZW5zaW9ucyh0aGlzLl90cmFjaykueDtpZihNYXRo LmFicyhhK2IvMi1WZWN0b3IyLmdldEV2ZW50UG9zaXRpb24oZXZlbnQpLngpPDI1 KXt0aGlzLnNob3dTY3JvbGxiYXIoZmFsc2UpO31lbHNlIHRoaXMuaGlkZVNjcm9s bGJhcigpO30sX2hhbmRsZVNjcm9sbDpmdW5jdGlvbihldmVudCl7dGhpcy5hZGp1 c3RHcmlwcGVyKCk7aWYodGhpcy5fb3B0aW9ucy5mYWRlIT09ZmFsc2UpdGhpcy5z aG93U2Nyb2xsYmFyKCk7fSxoaWRlU2Nyb2xsYmFyOmZ1bmN0aW9uKCl7aWYoIXRo aXMuX3Njcm9sbGJhclZpc2libGUpcmV0dXJuIHRoaXM7dGhpcy5fc2Nyb2xsYmFy VmlzaWJsZT1mYWxzZTtpZih0aGlzLl9oaWRlVGltZW91dCl7Y2xlYXJUaW1lb3V0 KHRoaXMuX2hpZGVUaW1lb3V0KTt0aGlzLl9oaWRlVGltZW91dD1udWxsO310aGlz Ll9oaWRlVGltZW91dD1mdW5jdGlvbigpe2lmKHRoaXMuX3Njcm9sbGJhckFuaW1h dGlvbil7dGhpcy5fc2Nyb2xsYmFyQW5pbWF0aW9uLnN0b3AoKTt0aGlzLl9zY3Jv bGxiYXJBbmltYXRpb249bnVsbDt9dGhpcy5fc2Nyb2xsYmFyQW5pbWF0aW9uPWFu aW1hdGlvbih0aGlzLl90cmFjaykuZnJvbSgnb3BhY2l0eScsMSkudG8oJ29wYWNp dHknLDApLmR1cmF0aW9uKDI1MCkub25kb25lKENTUy5hZGRDbGFzcy5jdXJyeSh0 aGlzLl90cmFjaywnaW52aXNpYmxlX2VsZW0nKSkuZ28oKTt9LmJpbmQodGhpcyku ZGVmZXIoNzUwKTtyZXR1cm4gdGhpczt9LHNob3dTY3JvbGxiYXI6ZnVuY3Rpb24o YSl7aWYodGhpcy5fc2Nyb2xsYmFyVmlzaWJsZSlyZXR1cm4gdGhpczt0aGlzLl9z Y3JvbGxiYXJWaXNpYmxlPXRydWU7aWYodGhpcy5faGlkZVRpbWVvdXQpe2NsZWFy VGltZW91dCh0aGlzLl9oaWRlVGltZW91dCk7dGhpcy5faGlkZVRpbWVvdXQ9bnVs bDt9aWYodGhpcy5fc2Nyb2xsYmFyQW5pbWF0aW9uKXt0aGlzLl9zY3JvbGxiYXJB bmltYXRpb24uc3RvcCgpO3RoaXMuX3Njcm9sbGJhckFuaW1hdGlvbj1udWxsO31D U1Muc2V0U3R5bGUodGhpcy5fdHJhY2ssJ29wYWNpdHknLDEpO0NTUy5yZW1vdmVD bGFzcyh0aGlzLl90cmFjaywnaW52aXNpYmxlX2VsZW0nKTtpZihhIT09ZmFsc2Up dGhpcy5oaWRlU2Nyb2xsYmFyKCk7cmV0dXJuIHRoaXM7fSxzY3JvbGxUb0JvdHRv bTpmdW5jdGlvbigpe2FuaW1hdGlvbih0aGlzLl93cmFwKS50bygnc2Nyb2xsVG9w Jyx0aGlzLl93cmFwLnNjcm9sbEhlaWdodCkuZWFzZShhbmltYXRpb24uZWFzZS5l bmQpLmdvKCk7fSxwb2tlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5fd3JhcC5zY3Jv bGxUb3A7dGhpcy5fd3JhcC5zY3JvbGxUb3ArPTE7dGhpcy5fd3JhcC5zY3JvbGxU b3AtPTE7dGhpcy5fd3JhcC5zY3JvbGxUb3A9YTtyZXR1cm4gdGhpcy5zaG93U2Ny b2xsYmFyKGZhbHNlKTt9fTsKdmFyIER5bmFtaWNGcmllbmRMaXN0RWR1Y2F0aW9u PShmdW5jdGlvbigpe3ZhciBoO3ZhciBlO3ZhciBkO3ZhciBjO3ZhciBhO3ZhciBp O3ZhciBnPWZ1bmN0aW9uKCl7ZCYmZC5oaWRlKCk7YyYmYy5oaWRlKCk7fTt2YXIg Zj1mdW5jdGlvbihqKXtlLnJlbW92ZShqKTtnKCk7YSh7YWNjZXB0X3RhZ19lZHVj YXRpb246dHJ1ZX0pO307dmFyIGI9ZnVuY3Rpb24oKXtnKCk7YSh7bnV4X2NhbmNl bDp0cnVlfSk7fTtyZXR1cm4ge2luaXQ6ZnVuY3Rpb24oayxqKXtoPWs7ZT0kQShq KS5tYXAoU3RyaW5nKTtQYWdlVHJhbnNpdGlvbnMucmVnaXN0ZXJIYW5kbGVyKGZ1 bmN0aW9uKCl7ZygpO2g9ZmFsc2U7YT11bmRlZmluZWQ7ZT1bXTt9KTt9LHNob3dE aWFsb2c6ZnVuY3Rpb24oayxsLGope2lmKGgmJmUuY29udGFpbnMoaykpe2coKTtB cmJpdGVyLmluZm9ybSgnRHluYW1pY0ZyaWVuZExpc3RFZHVjYXRpb24vZGlhbG9n T3Blbicse3VpZDpsLGZsaWQ6a30pO2E9ajtkPW5ldyBEaWFsb2coKS5zZXRBc3lu YyhuZXcgQXN5bmNSZXF1ZXN0KCcvYWpheC9mcmllbmRzL2xpc3RzL3NtYXJ0X2xp c3RfZWR1Y2F0aW9uLnBocCcpLnNldE1ldGhvZCgnR0VUJykuc2V0RGF0YSh7Zmxp ZDprLHVpZDpsfSkuc2V0UmVhZE9ubHkodHJ1ZSkpLnNldEhhbmRsZXIoZi5iaW5k KHRoaXMsaykpLnNldENsb3NlSGFuZGxlcihmdW5jdGlvbigpe0FyYml0ZXIuaW5m b3JtKCdEeW5hbWljRnJpZW5kTGlzdEVkdWNhdGlvbi9kaWFsb2dDbG9zZWQnLHt1 aWQ6bCxmbGlkOmt9KTt9KS5zZXRDYW5jZWxIYW5kbGVyKGZ1bmN0aW9uKCl7QXJi aXRlci5pbmZvcm0oJ0R5bmFtaWNGcmllbmRMaXN0RWR1Y2F0aW9uL2RpYWxvZ0Nh bmNlbCcse3VpZDpsLGZsaWQ6a30pO30pLnNob3coKTt9ZWxzZSBqKCk7fSxzaG93 Q29udGV4dHVhbERpYWxvZzpmdW5jdGlvbihrLG0sbCxqKXtpZihoJiZlLmNvbnRh aW5zKGspKXtnKCk7aT1sO2E9ajtuZXcgQXN5bmNSZXF1ZXN0KCcvYWpheC9mcmll bmRzL2xpc3RzL3NtYXJ0X2xpc3RfY29udGV4dHVhbF9lZHVjYXRpb24ucGhwJyku c2V0TWV0aG9kKCdHRVQnKS5zZXREYXRhKHtmbGlkOmssdWlkOm19KS5zZXRSZWFk T25seSh0cnVlKS5zZW5kKCk7fWVsc2UgaigpO30sc2V0Q29udGV4dHVhbERpYWxv ZzpmdW5jdGlvbihsLGosayxtKXtjPWw7Yy5zZXRDb250ZXh0KGkpO2Muc2hvdygp O0V2ZW50Lmxpc3RlbihqLCdjbGljaycsZi5iaW5kKHRoaXMsbSkpO0V2ZW50Lmxp c3RlbihrLCdjbGljaycsYik7fX07fSkoKTsKdmFyIEZyaWVuZEVkaXRMaXN0cz0o ZnVuY3Rpb24oKXt2YXIgYT03O3ZhciBjPXt9O3ZhciBtPSIvYWpheC9wcm9maWxl L3JlbW92ZWZyaWVuZGNvbmZpcm0ucGhwIjt2YXIgYj0iL2ZyaWVuZHMvYWpheC9y ZW1vdmVfZnJpZW5kLnBocD90eXBlPWZyaWVuZCZmYng9MSI7dmFyIGg7ZnVuY3Rp b24gaihwLHEsbyl7dmFyIHI9Y1twLmlkXTt2YXIgbj1mdW5jdGlvbih1KXt2YXIg dD17YWN0aW9uOm8/J2FkZF9saXN0JzonZGVsX2xpc3QnLHRvX2ZyaWVuZDpyLmlk LGZyaWVuZGxpc3RzOltxXSxzb3VyY2U6aH07aWYodSljb3B5X3Byb3BlcnRpZXMo dCx1KTtyLnVwZGF0ZUxpc3QocSxvKTt2YXIgdjtpZihvJiZxPT1GcmllbmRTdGF0 dXMuQ0xPU0VfRlJJRU5EUyl7dj1lKHAsRnJpZW5kU3RhdHVzLkFDUVVBSU5UQU5D RVMpO2lmKE1lbnUuaXNJdGVtQ2hlY2tlZCh2KSl7TWVudS50b2dnbGVJdGVtKHYp O2oocCxGcmllbmRTdGF0dXMuQUNRVUFJTlRBTkNFUyxmYWxzZSk7fX1lbHNlIGlm KG8mJnE9PUZyaWVuZFN0YXR1cy5BQ1FVQUlOVEFOQ0VTKXt2PWUocCxGcmllbmRT dGF0dXMuQ0xPU0VfRlJJRU5EUyk7aWYoTWVudS5pc0l0ZW1DaGVja2VkKHYpKXtN ZW51LnRvZ2dsZUl0ZW0odik7aihwLEZyaWVuZFN0YXR1cy5DTE9TRV9GUklFTkRT LGZhbHNlKTt9fXZhciB3PXtmbGlkOnEsdWlkOnIuaWR9O3ZhciBzPW8/J0ZyaWVu ZExpc3RIb3ZlcmNhcmQvYWRkJzonRnJpZW5kTGlzdEhvdmVyY2FyZC9yZW1vdmUn O0FyYml0ZXIuaW5mb3JtKHMsdyk7bmV3IEFzeW5jUmVxdWVzdCgpLnNldFVSSSgn L2FqYXgvYWRkX2ZyaWVuZC9hY3Rpb24ucGhwJykuc2V0RGF0YSh0KS5zZW5kKCk7 fTtpZihvKXtEeW5hbWljRnJpZW5kTGlzdEVkdWNhdGlvbi5zaG93RGlhbG9nKHEs ci5pZCxuKTt9ZWxzZSBuKCk7fWZ1bmN0aW9uIGQobyl7dmFyIG49RE9NLnNjcnko bywnaW5wdXQnKVswXTtyZXR1cm4gbiYmbi52YWx1ZTt9ZnVuY3Rpb24gZihuLHAs cSl7dmFyIG89e3VpZDpwLmlkfTtuZXcgQXN5bmNSZXF1ZXN0KCkuc2V0VVJJKGIp LnNldE1ldGhvZCgnUE9TVCcpLnNldERhdGEoe2ZyaWVuZDpwLmlkfSkuc2V0SGFu ZGxlcihBcmJpdGVyLmluZm9ybS5iaW5kKEFyYml0ZXIsRnJpZW5kUmVxdWVzdE1l c3NhZ2UuQ0FOQ0VMLG8pKS5zZXRFcnJvckhhbmRsZXIoQXJiaXRlci5pbmZvcm0u YmluZChBcmJpdGVyLEZyaWVuZFJlcXVlc3RNZXNzYWdlLkNBTkNFTF9GQUlMLG8p KS5zZXRTdGF0dXNFbGVtZW50KHEpLnNlbmQoKTt9ZnVuY3Rpb24gZShuLG8pe3Zh ciBxPU1lbnUuZ2V0SXRlbXMobik7Zm9yKHZhciBwPTA7cDxxLmxlbmd0aDtwKysp aWYoZChxW3BdKT09bylyZXR1cm4gcVtwXTtyZXR1cm4gbnVsbDt9ZnVuY3Rpb24g ayhuLG8pe3ZhciBwPU1lbnUuZ2V0SXRlbXMobik7cC5mb3JFYWNoKGZ1bmN0aW9u KHMpe3ZhciByPWQocyk7dmFyIHE9by5saXN0cy5jb250YWlucyhyKTtpZihNZW51 LmlzSXRlbUNoZWNrZWQocykhPT1xKU1lbnUudG9nZ2xlSXRlbShzKTt9KTt9ZnVu Y3Rpb24gaShvKXt2YXIgcD1NZW51LmdldEl0ZW1zKG8pO3ZhciByPSFDU1MuaGFz Q2xhc3MobywnZm9sbG93QnV0dG9uRmx5b3V0JykmJiFDU1MuaGFzQ2xhc3Mobywn bGlrZUJ1dHRvbkZseW91dCcpO3ZhciBuPVtdO3ZhciB0PVtdO3ZhciB2PTA7dmFy IHU9MDtwLmZvckVhY2goZnVuY3Rpb24oeSl7aWYoQ1NTLmhhc0NsYXNzKHksJ25l dmVySGlkZScpKXtDU1MucmVtb3ZlQ2xhc3MoeSwndW5kZXJTaG93TW9yZScpO3Yr Kzt9ZWxzZSBpZihNZW51LmlzSXRlbUNoZWNrZWQoeSkpe24ucHVzaCh5KTt9ZWxz ZSBpZihDU1MuaGFzQ2xhc3MoeSwnbmV2ZXJTaG93Jyl8fENTUy5oYXNDbGFzcyh5 LCdGcmllbmRMaXN0Q3JlYXRlVHJpZ2dlcicpfHwoIXImJkNTUy5oYXNDbGFzcyh5 LCdmcmllbmRPcHRpb25zT25seScpKSl7Q1NTLmFkZENsYXNzKHksJ3VuZGVyU2hv d01vcmUnKTt1Kys7fWVsc2UgdC5wdXNoKHkpO30pO3ZhciB4PWEtdjt2YXIgcz1u LmNvbmNhdCh0KTt2YXIgcT11O3MuZm9yRWFjaChmdW5jdGlvbih5KXtpZihDU1Mu aGFzQ2xhc3MoeSwnU2hvd01vcmVJdGVtJykpe3gtLTtyZXR1cm47fWlmKHgpe0NT Uy5yZW1vdmVDbGFzcyh5LCd1bmRlclNob3dNb3JlJyk7eC0tO31lbHNle0NTUy5h ZGRDbGFzcyh5LCd1bmRlclNob3dNb3JlJyk7cT10cnVlO319KTtDU1MuY29uZGl0 aW9uQ2xhc3MobywnaGFzTW9yZUZyaWVuZExpc3RJdGVtcycscSk7dmFyIHc9RE9N LnNjcnkobywnLkZyaWVuZExpc3RNZW51U2hvd01vcmUnKTt3LmZvckVhY2goZnVu Y3Rpb24oeSl7Q1NTLnJlbW92ZUNsYXNzKHksJ0ZyaWVuZExpc3RNZW51U2hvd01v cmUnKTt9KTt9ZnVuY3Rpb24gbChvLHApe3ZhciBxPURPTS5zY3J5KG8sJy5Gcmll bmRMaXN0VW5mcmllbmQnKVswXTt2YXIgbj1ET00uc2NyeShvLCcuRnJpZW5kTGlz dENhbmNlbCcpWzBdO2lmKG4pQ1NTLmNvbmRpdGlvblNob3cobixwLnN0YXR1cz09 RnJpZW5kU3RhdHVzLk9VVEdPSU5HX1JFUVVFU1QpO2lmKHEpe0NTUy5jb25kaXRp b25TaG93KHEscC5zdGF0dXM9PUZyaWVuZFN0YXR1cy5BUkVfRlJJRU5EUyk7RE9N LmZpbmQocSwnYScpLnNldEF0dHJpYnV0ZSgnYWpheGlmeScsVVJJKG0pLmFkZFF1 ZXJ5RGF0YSh7dWlkOnAuaWR9KS50b1N0cmluZygpKTt9fXZhciBnPWZ1bmN0aW9u KCl7Zz1iYWdvZmhvbGRpbmc7QXJiaXRlci5zdWJzY3JpYmUoRnJpZW5kUmVxdWVz dE1lc3NhZ2UuU1RBVFVTLGZ1bmN0aW9uKHIscSl7Zm9yKHZhciBwIGluIGMpe3Zh ciBuPWdlKHApO3ZhciBvPWNbcF07aWYobiYmbyYmby5pZD09cS51aWQpe2sobixv KTtsKG4sbyk7aShuKTt9fX0pO01lbnUuc3Vic2NyaWJlKCdzZWxlY3QnLGZ1bmN0 aW9uKG4sbyl7aWYoQ1NTLmhhc0NsYXNzKG8uaXRlbSwnU2hvd01vcmVJdGVtJykm JkNTUy5oYXNDbGFzcyhvLm1lbnUsJ0ZyaWVuZExpc3RNZW51Jykpe0NTUy5hZGRD bGFzcyhvLm1lbnUsJ0ZyaWVuZExpc3RNZW51U2hvd01vcmUnKTtTY3JvbGxhYmxl QXJlYS5wb2tlKG8uaXRlbSk7fX0pO307cmV0dXJuIHtpbml0OmZ1bmN0aW9uKG4s byxwKXtuPSQobik7aD1wO2coKTtpZighY1tuLmlkXSlNZW51LnN1YnNjcmliZSgn c2VsZWN0JyxmdW5jdGlvbihxLHIpe2lmKERPTS5jb250YWlucyhuLHIuaXRlbSkp aWYoUGFyZW50LmJ5Q2xhc3Moci5pdGVtLCdGcmllbmRMaXN0SXRlbScpKXtNZW51 LnRvZ2dsZUl0ZW0oci5pdGVtKTt2YXIgcz1kKHIuaXRlbSk7aihuLHMsTWVudS5p c0l0ZW1DaGVja2VkKHIuaXRlbSkpO31lbHNlIGlmKFBhcmVudC5ieUNsYXNzKHIu aXRlbSwnRnJpZW5kTGlzdENhbmNlbCcpKXtmKG4sY1tuLmlkXSxyLml0ZW0pO31l bHNlIGlmKFBhcmVudC5ieUNsYXNzKHIuaXRlbSwnRnJpZW5kTGlzdFVuZnJpZW5k JykpRnJpZW5kTGlzdEZseW91dENvbnRyb2xsZXIuaGlkZShmYWxzZSk7fSk7Q1NT LmFkZENsYXNzKG4sJ2FzeW5jX3NhdmluZycpO0ZyaWVuZFN0YXR1cy5nZXRGcmll bmQobyxmdW5jdGlvbihxKXtrKG4scSk7bChuLHEpO2Nbbi5pZF09cTtpKG4pO0NT Uy5yZW1vdmVDbGFzcyhuLCdhc3luY19zYXZpbmcnKTt9LmJpbmQodGhpcykpO319 O30pKCk7CnZhciBQYWdlTGlrZUJ1dHRvbj13aW5kb3cuUGFnZUxpa2VCdXR0b258 fChmdW5jdGlvbigpe2Z1bmN0aW9uIGEoaCxnLGQsZixlKXtmYnBhZ2Vfc2V0X2Zh bl9zdGF0dXMoZT9kOmYsaCxlLGZhbHNlLG51bGwsKGZ1bmN0aW9uKCl7YyhkLGYs IWUpO30pLmJpbmQodGhpcykse2Zhbl9vcmlnaW46Z30pO31mdW5jdGlvbiBjKGQs ZixlKXtDU1MuY29uZGl0aW9uU2hvdyhkLCFlKTtDU1MuY29uZGl0aW9uU2hvdyhm LGUpO31mdW5jdGlvbiBiKGQpe2lmKENTUy5oYXNDbGFzcyhkLCdlbmFibGVGcmll bmRMaXN0Rmx5b3V0Jykpe0ZyaWVuZExpc3RGbHlvdXRDb250cm9sbGVyLnNob3co ZCk7fWVsc2UgRnJpZW5kTGlzdEZseW91dENvbnRyb2xsZXIuaGlkZSgpO31yZXR1 cm4ge0xJS0VEOidsaWtlZCcsVU5MSUtFRDondW5saWtlZCcsaW5pdDpmdW5jdGlv bihoLGQsZSxnLGYpe0FyYml0ZXIuc3Vic2NyaWJlKFBhZ2VMaWtlQnV0dG9uLkxJ S0VELGZ1bmN0aW9uKGksail7aWYoZz09PWoucHJvZmlsZV9pZCl7YyhkLGUsdHJ1 ZSk7YShnLGYsZCxlLHRydWUpO319KTtBcmJpdGVyLnN1YnNjcmliZShQYWdlTGlr ZUJ1dHRvbi5VTkxJS0VELGZ1bmN0aW9uKGksail7aWYoZz09PWoucHJvZmlsZV9p ZCl7YyhkLGUsZmFsc2UpO2EoZyxmLGQsZSxmYWxzZSk7fX0pO0V2ZW50Lmxpc3Rl bihkLCdjbGljaycsZnVuY3Rpb24oKXtBcmJpdGVyLmluZm9ybShQYWdlTGlrZUJ1 dHRvbi5MSUtFRCx7cHJvZmlsZV9pZDpnfSk7YihlKTt9KTt9LGluaXRNZW51OmZ1 bmN0aW9uKGQsZixlKXtFdmVudC5saXN0ZW4oZCwnY2xpY2snLGZ1bmN0aW9uKGcp e3ZhciBoPVBhcmVudC5ieUNsYXNzKGcuZ2V0VGFyZ2V0KCksJ3VpTWVudUl0ZW0n KTtpZihDU1MuaGFzQ2xhc3MoaCwnUGFnZU1lbnVVbmxpa2UnKSlBcmJpdGVyLmlu Zm9ybShQYWdlTGlrZUJ1dHRvbi5VTkxJS0VELHtwcm9maWxlX2lkOmZ9KTt9KTt9 fTt9KSgpOwp2YXIgRnJpZW5kTGlzdEZseW91dENvbnRyb2xsZXI9KGZ1bmN0aW9u KCl7dmFyIGQ7dmFyIGU7dmFyIG09bnVsbDt2YXIgbz1udWxsO3ZhciBhO3ZhciBu O3ZhciB2O3ZhciBrO3ZhciBzO3ZhciBmO3ZhciBjPTE1MDA7ZnVuY3Rpb24gcSgp e2NsZWFyVGltZW91dChrKTt9ZnVuY3Rpb24gcCgpe2lmKGEpe0NTUy5yZW1vdmVD bGFzcyhhLCdzZWxlY3RlZCcpO0NTUy5yZW1vdmVDbGFzcyhhLCd1aUJ1dHRvbkhv dmVyJyk7aWYoRGF0YVN0b3JlLmdldChhLCdmbGZjbG9zZWxpc3RlbmVyJykpe3Zh ciB4PWE7RGF0YVN0b3JlLnNldChhLCdmbGZjbG9zZWxpc3RlbmVydGltZW91dCcs Zy5jdXJyeSh4KS5kZWZlcihjKSk7fX1lPWZhbHNlO2IoKTthPW51bGw7fWZ1bmN0 aW9uIGgoeCl7aWYoRE9NLmlzTm9kZU9mVHlwZSh4LCdsYWJlbCcpJiZDU1MuaGFz Q2xhc3MoeCwndWlCdXR0b24nKSl4PUJ1dHRvbi5nZXRJbnB1dEVsZW1lbnQoeCk7 cmV0dXJuIERhdGFTdG9yZS5nZXQoeCwncHJvZmlsZWlkJyk7fWZ1bmN0aW9uIGIo KXtuJiZuLnJlbW92ZSgpO249bnVsbDtzJiZBcmJpdGVyLnVuc3Vic2NyaWJlKHMp O3M9bnVsbDtrJiZjbGVhclRpbWVvdXQoayk7az1udWxsO31mdW5jdGlvbiBsKHkp e3ZhciB6PWgoeSk7dmFyIHg9RGF0YVN0b3JlLmdldCh5LCdmbGxvYycpO0ZyaWVu ZEVkaXRMaXN0cy5pbml0KG0seix4KTtFZGl0U3Vic2NyaXB0aW9ucy5pbml0KG0s eix4KTtQYWdlTGlrZUJ1dHRvbi5pbml0TWVudShtLHoseCk7Q1NTLmNvbmRpdGlv bkNsYXNzKG0sJ2ZvbGxvd0J1dHRvbkZseW91dCcsQ1NTLmhhc0NsYXNzKHksJ3By b2ZpbGVGb2xsb3dCdXR0b24nKSk7Q1NTLmNvbmRpdGlvbkNsYXNzKG0sJ2ZyaWVu ZEJ1dHRvbkZseW91dCcsQ1NTLmhhc0NsYXNzKHksJ0ZyaWVuZFJlcXVlc3RGcmll bmRzJyl8fENTUy5oYXNDbGFzcyh5LCdGcmllbmRSZXF1ZXN0SW5jb21pbmcnKXx8 Q1NTLmhhc0NsYXNzKHksJ0ZyaWVuZFJlcXVlc3RPdXRnb2luZycpKTtDU1MuY29u ZGl0aW9uQ2xhc3MobSwnbGlrZUJ1dHRvbkZseW91dCcsQ1NTLmhhc0NsYXNzKHks J3Byb2ZpbGVMaWtlQnV0dG9uJykpO3ZhciB6YT1ET00uc2NyeShtLCdkaXYudWlT Y3JvbGxhYmxlQXJlYScpWzBdO3phJiZTY3JvbGxhYmxlQXJlYS5wb2tlKHphKTt9 ZnVuY3Rpb24gdSh4KXtpZighZHx8ZSlyZXR1cm47ZC5zZXRDb250ZXh0KHgpO0NT Uy5hZGRDbGFzcyh4LCdzZWxlY3RlZCcpO0NTUy5hZGRDbGFzcyh4LCd1aUJ1dHRv bkhvdmVyJyk7ZC5zZXRGaXhlZChDU1MuaXNGaXhlZCh4KSkuc2hvdygpO2E9eDtl PXRydWU7aWYobSl7bCh4KTt9ZWxzZSBuZXcgQXN5bmNSZXF1ZXN0KCkuc2V0VVJJ KCcvYWpheC9mcmllbmRzL2xpc3RzL2ZseW91dF9jb250ZW50LnBocCcpLnNldFN0 YXR1c0VsZW1lbnQoZC5nZXRPdmVybGF5KCkpLnNlbmQoKTtiKCk7bj1FdmVudC5s aXN0ZW4oeCwnbW91c2VsZWF2ZScsaSk7cz1BcmJpdGVyLnN1YnNjcmliZSgnT3Zl cmxheS9zaG93JyxqKTtpZihEYXRhU3RvcmUuZ2V0KHgsJ2ZsZmNsb3NlbGlzdGVu ZXInKSljbGVhclRpbWVvdXQoRGF0YVN0b3JlLnJlbW92ZSh4LCdmbGZjbG9zZWxp c3RlbmVydGltZW91dCcpKTt2YXIgeT1oKHgpO0ZyaWVuZFN0YXR1cy5nZXRGcmll bmQoeSxmdW5jdGlvbih6KXtpZighbylyZXR1cm47aWYoei5zdGF0dXM9PUZyaWVu ZFN0YXR1cy5PVVRHT0lOR19SRVFVRVNUKXtDU1Muc2hvdyhvKTtBc3luY1JlcXVl c3QuYm9vdHN0cmFwKCcvYWpheC9mcmllbmRzL2xpc3RzL251eF9mbHlvdXQucGhw JyxudWxsLHRydWUpO31lbHNlIENTUy5oaWRlKG8pO30pO31mdW5jdGlvbiB0KHgp e2E9eDt2PXUuY3VycnkoeCkuZGVmZXIoMTAwKTtuPUV2ZW50Lmxpc3Rlbih4LCdt b3VzZWxlYXZlJyxmdW5jdGlvbigpe2NsZWFyVGltZW91dCh2KTthPW51bGw7biYm bi5yZW1vdmUoKTt9KTt9ZnVuY3Rpb24gaSgpe2s9ai5kZWZlcigxNTApO31mdW5j dGlvbiB3KCl7dmFyIHk9RGlhbG9nLmdldEN1cnJlbnQoKTt2YXIgeD15JiZ5Lmdl dEJvZHkoKTtyZXR1cm4gISEoeCYmRE9NLnNjcnkoeCwnLmZyaWVuZExpc3REaWFs b2dUb3VyQ2Fyb3VzZWwnKVswXSk7fWZ1bmN0aW9uIGooKXtpZihmfHx3KCkpcmV0 dXJuO3VhLmllKCk8OCYmZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmZvY3VzKCk7 ZCYmZC5oaWRlKCk7fWZ1bmN0aW9uIHIoZXZlbnQpe3ZhciB4PVBhcmVudC5ieVRh ZyhldmVudC5nZXRUYXJnZXQoKSwnYScpO2lmKHgmJkNTUy5oYXNDbGFzcyh4LCdG cmllbmRMaXN0QWN0aW9uSXRlbScpKWkoKTt9ZnVuY3Rpb24gZyh5KXt2YXIgeD1E YXRhU3RvcmUucmVtb3ZlKHksJ2ZsZmNsb3NlbGlzdGVuZXInKTt4JiZ4KCk7fXJl dHVybiB7aW5pdDpmdW5jdGlvbih4KXtGcmllbmRMaXN0Rmx5b3V0Q29udHJvbGxl ci5pbml0PWJhZ29maG9sZGluZztkPXg7ZC5zdWJzY3JpYmUoJ21vdXNlZW50ZXIn LHEpO2Quc3Vic2NyaWJlKCdtb3VzZWxlYXZlJyxpKTtkLnN1YnNjcmliZSgnaGlk ZScscCk7aWYobSlET00uc2V0Q29udGVudChkLmdldENvbnRlbnQoKSxbbSxvXSk7 RXZlbnQubGlzdGVuKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwnbW91c2VvdmVy JyxmdW5jdGlvbih5KXt2YXIgej1QYXJlbnQuYnlDbGFzcyh5LmdldFRhcmdldCgp LCdlbmFibGVGcmllbmRMaXN0Rmx5b3V0Jyk7aWYoeilpZihhPT09eil7Y2xlYXJU aW1lb3V0KGspO31lbHNle2UmJmooKTt0KHopO319KTtBcmJpdGVyLnN1YnNjcmli ZSgnRHluYW1pY0ZyaWVuZExpc3RFZHVjYXRpb24vZGlhbG9nT3BlbicsZnVuY3Rp b24oKXtmPXRydWU7fSk7QXJiaXRlci5zdWJzY3JpYmUoJ0R5bmFtaWNGcmllbmRM aXN0RWR1Y2F0aW9uL2RpYWxvZ0Nsb3NlZCcsZnVuY3Rpb24oKXtmPWZhbHNlO2ko KTt9KTt9LGluaXRDb250ZW50OmZ1bmN0aW9uKHkpe3ZhciB4PXkuZ2V0Um9vdE5v ZGUoKTtET00uYXBwZW5kQ29udGVudChkb2N1bWVudC5ib2R5LHgpOyhmdW5jdGlv bigpe2lmKCFtKXttPXg7ZCYmRE9NLnNldENvbnRlbnQoZC5nZXRDb250ZW50KCks W20sb10pO0NTUy5zaG93KG0pO0V2ZW50Lmxpc3RlbihtLCdjbGljaycscik7ZSYm bChhKTt9ZWxzZXtET00ucmVtb3ZlKHgpO3g9bnVsbDt9fSkuZGVmZXIoKTt9LGlu aXROdXg6ZnVuY3Rpb24oeCl7aWYobylyZXR1cm47bz14LmdldFJvb3ROb2RlKCk7 ZCYmRE9NLnNldENvbnRlbnQoZC5nZXRDb250ZW50KCksW20sb10pO30sc2hvdzpm dW5jdGlvbih4KXt1KHgpO30saGlkZTpmdW5jdGlvbih4KXt4PT09ZmFsc2U/aigp OmkoKTt9LHNldEFjdGl2ZU5vZGU6ZnVuY3Rpb24oeCl7ZSYmaigpO2E9eDtuPUV2 ZW50Lmxpc3Rlbih4LCdtb3VzZWxlYXZlJyxmdW5jdGlvbigpe2E9bnVsbDtuJiZu LnJlbW92ZSgpO30pO30sc2V0Q2xvc2VMaXN0ZW5lcjpmdW5jdGlvbih5LHgpe0Rh dGFTdG9yZS5zZXQoeSwnZmxmY2xvc2VsaXN0ZW5lcicseCk7aWYoYSE9eSlEYXRh U3RvcmUuc2V0KHksJ2ZsZmNsb3NlbGlzdGVuZXJ0aW1lb3V0JyxnLmN1cnJ5KHkp LmRlZmVyKGMpKTt9LHNldENsb3NlTGlzdGVuZXJUaW1lb3V0OmZ1bmN0aW9uKHgp e2M9eDt9fTt9KSgpOwp2YXIgRm9sbG93QnV0dG9uPXdpbmRvdy5Gb2xsb3dCdXR0 b258fChmdW5jdGlvbigpe3ZhciBhPTE0O2Z1bmN0aW9uIGQoZSxnLGYpe0NTUy5j b25kaXRpb25TaG93KGcsZik7Q1NTLmNvbmRpdGlvblNob3coZSwhZik7fWZ1bmN0 aW9uIGMoZSl7aWYoQ1NTLmhhc0NsYXNzKGUsJ2VuYWJsZUZyaWVuZExpc3RGbHlv dXQnKSl7RnJpZW5kTGlzdEZseW91dENvbnRyb2xsZXIuc2hvdyhlKTt9ZWxzZSBG cmllbmRMaXN0Rmx5b3V0Q29udHJvbGxlci5oaWRlKCk7fWZ1bmN0aW9uIGIoaSxq LGgpe3ZhciBmPURPTS5zY3J5KGksJy5sb3dJY29uJylbMF07dmFyIGc9RE9NLnNj cnkoaSwnLm1lZEljb24nKVswXTt2YXIgZT1ET00uc2NyeShpLCcuaGlnaEljb24n KVswXTtpZighZnx8IWd8fCFlKXJldHVybjtBcmJpdGVyLnN1YnNjcmliZSgnU3Vi c2NyaXB0aW9uTGV2ZWxVcGRhdGVkJyxmdW5jdGlvbihrLGwpe2lmKGg9PT1sLnBy b2ZpbGVfaWQpc3dpdGNoKGwubGV2ZWwpe2Nhc2UgU3Vic2NyaXB0aW9uTGV2ZWxz LkFMTDpCdXR0b24uc2V0SWNvbihqLGUpO2JyZWFrO2Nhc2UgU3Vic2NyaXB0aW9u TGV2ZWxzLkRFRkFVTFQ6QnV0dG9uLnNldEljb24oaixnKTticmVhaztjYXNlIFN1 YnNjcmlwdGlvbkxldmVscy5UT1A6QnV0dG9uLnNldEljb24oaixmKTticmVhazt9 fSk7fXJldHVybiB7aW5pdDpmdW5jdGlvbihrLGcsbCxqLGksaCl7aWYoIUNTUy5o YXNDbGFzcyhsLCdlbmFibGVGcmllbmRMaXN0Rmx5b3V0JykpU3Vic2NyaXB0aW9u Rmx5b3V0Q29udHJvbGxlci5pbml0Tm9kZShsLGosaSk7aWYoaT09YSYmQ1NTLnNo b3duKGwpKVN1YnNjcmlwdGlvbkZseW91dENvbnRyb2xsZXIuc2hvdyhsKTtFdmVu dC5saXN0ZW4oZywnY2xpY2snLGZ1bmN0aW9uKCl7ZChnLGwsdHJ1ZSk7U3Vic2Ny aXB0aW9uRmx5b3V0Q29udHJvbGxlci5zZXRBY3RpdmVOb2RlKGwpO3ZhciBtPW5l dyBVUkkoZy5nZXRBdHRyaWJ1dGUoJ2FqYXhpZnknKSk7dmFyIG49e3Byb2ZpbGVf aWQ6aixsb2NhdGlvbjppLHNvdXJjZTonZm9sbG93LWJ1dHRvbicsc3Vic2NyaWJl ZF9idXR0b25faWQ6bC5pZCx4aWRzOm0uZ2V0UXVlcnlEYXRhKCkueGlkc307bmV3 IEFzeW5jUmVxdWVzdCgpLnNldFVSSShoKS5zZXREYXRhKG4pLnNldFJlbGF0aXZl VG8obCkuc2VuZCgpO30pO2smJmIoayxsLGopO0FyYml0ZXIuc3Vic2NyaWJlKFsn Rm9sbG93VXNlcicsJ1VuZm9sbG93VXNlciddLGZ1bmN0aW9uKG4sbSl7KG0ucHJv ZmlsZV9pZD09aikmJmQoZyxsLG49PSdGb2xsb3dVc2VyJyk7YyhsKTt9KTt2YXIg Zj1mYWxzZTtBcmJpdGVyLnN1YnNjcmliZSgnVW5mb2xsb3dpbmdVc2VyJyxmdW5j dGlvbihtLG4pe2lmKG4ucHJvZmlsZV9pZD09ail7Zj1DU1Muc2hvd24obCk7ZiYm ZChnLGwsZmFsc2UpO319KTtBcmJpdGVyLnN1YnNjcmliZSgnVW5mb2xsb3dVc2Vy RmFpbCcsZnVuY3Rpb24obSxuKXtpZihuLnByb2ZpbGVfaWQ9PWomJmYpZChnLGws dHJ1ZSk7fSk7QXJiaXRlci5zdWJzY3JpYmUoJ0ZvbGxvd1VzZXJGYWlsJyxmdW5j dGlvbihtLG4pe2lmKG4ucHJvZmlsZV9pZD09aiYmZilkKGcsbCxmYWxzZSk7fSk7 dmFyIGU9ZmFsc2U7QXJiaXRlci5zdWJzY3JpYmUoW0ZyaWVuZFJlcXVlc3RNZXNz YWdlLlNFTkRJTkcsRnJpZW5kUmVxdWVzdE1lc3NhZ2UuQ09ORklSTUlOR10sZnVu Y3Rpb24obSxuKXtpZihuLnVpZD09ail7ZT1DU1Muc2hvd24oZyk7ZSYmZChnLGws dHJ1ZSk7fX0pO0FyYml0ZXIuc3Vic2NyaWJlKFtGcmllbmRSZXF1ZXN0TWVzc2Fn ZS5TRU5EX0ZBSUwsRnJpZW5kUmVxdWVzdE1lc3NhZ2UuQ09ORklSTV9GQUlMXSxm dW5jdGlvbihtLG4pe2lmKG4udWlkPT1qJiZlKWQoZyxsLGZhbHNlKTt9KTtBcmJp dGVyLnN1YnNjcmliZShGcmllbmRSZXF1ZXN0TWVzc2FnZS5VTkZSSUVORCxmdW5j dGlvbihtLG4peyhuLnVpZD09aikmJmQoZyxsLGZhbHNlKTt9KTt9fTt9KSgpOwp2 YXIgQWRkRnJpZW5kQnV0dG9uPXtFUlJPUl9BTFJFQURZX0FEREVEOjE0MzEwMDUs aW5pdDpmdW5jdGlvbihzLHEsdCxrLHIsbCxuLG8saCxqKXt2YXIgZz1udWxsO3Zh ciBmPURPTS5zY3J5KHMsJy5hZGRCdXR0b24nKVswXTt2YXIgcD1ET00uc2NyeShz LCcub3V0Z29pbmdCdXR0b24nKVswXTt2YXIgbT1ET00uc2NyeShzLCcuaW5jb21p bmdCdXR0b24nKVswXTt2YXIgaT1ET00uc2NyeShzLCcuZnJpZW5kQnV0dG9uJylb MF07ZnVuY3Rpb24gYih1LHgsdyl7dmFyIHY9bmV3IFVSSShmLmdldEF0dHJpYnV0 ZSgnYWpheGlmeScpKTt2YXIgeT0nJzt2YXIgej1nZSgnZmJSZXF1ZXN0c1Vud2Fu dGVkJyk7aWYoeil7eT16LnZhbHVlO3oudmFsdWU9Jyc7fWxpbmtfZGF0YT1jb2xs ZWN0X2RhdGFfYXR0cmlicyhzLFsnZnQnLCdndCddKTtuZXcgQXN5bmNSZXF1ZXN0 KCkuc2V0VVJJKGwpLnNldERhdGEoe3RvX2ZyaWVuZDpxLGFjdGlvbjp1LGhvd19m b3VuZDprLHJlZl9wYXJhbTpyLGxpbmtfZGF0YTpsaW5rX2RhdGEsb3V0Z29pbmdf aWQ6cC5pZCx4aWRzOnYuZ2V0UXVlcnlEYXRhKCkueGlkcyx1bndhbnRlZDp5LGxv Z2dpbmdfbG9jYXRpb246bixub19mbHlvdXRfb25fY2xpY2s6byxlZ29fbG9nX2Rh dGE6aH0pLnNldEVycm9ySGFuZGxlcih4KS5zZXRTZXJ2ZXJEaWFsb2dDYW5jZWxI YW5kbGVyKHcpLnNldFJlbGF0aXZlVG8ocCkuc2VuZCgpO31mdW5jdGlvbiBlKHUs dil7ZiYmQ1NTLmhpZGUoZik7cCYmQ1NTLmhpZGUocCk7bSYmQ1NTLmhpZGUobSk7 aSYmQ1NTLmhpZGUoaSk7aWYodSlDU1Muc2hvdyh1KTtpZignT3V0Z29pbmcnPT12 JiZnIT12JiZqKWFuaW1hdGlvbih1KS5mcm9tKCdiYWNrZ3JvdW5kQ29sb3InLCcj RkZGOENDJykudG8oJ2JhY2tncm91bmRDb2xvcicsJyNGRkZGRkYnKS5mcm9tKCdi b3JkZXJDb2xvcicsJyNGRkUyMjInKS50bygnYm9yZGVyQ29sb3InLCcjRkZGRkZG JykuZHVyYXRpb24oMjAwMCkuZ28oKTtnJiZDU1MucmVtb3ZlQ2xhc3MocywnZlN0 YXR1cycrZyk7Zz12O0NTUy5hZGRDbGFzcyhzLCdmU3RhdHVzJyt2KTt9ZnVuY3Rp b24gYyh1KXtpZihDU1MuaGFzQ2xhc3ModSwnZW5hYmxlRnJpZW5kTGlzdEZseW91 dCcpKXtGcmllbmRMaXN0Rmx5b3V0Q29udHJvbGxlci5zaG93KHUpO31lbHNlIEZy aWVuZExpc3RGbHlvdXRDb250cm9sbGVyLmhpZGUoKTt9dmFyIGQ9QXJiaXRlci5z dWJzY3JpYmUoRnJpZW5kUmVxdWVzdE1lc3NhZ2UuU1RBVFVTLGZ1bmN0aW9uKHYs dSl7aWYodS51aWQhPXEpcmV0dXJuO3N3aXRjaCh1LnN0YXR1cyl7Y2FzZSBGcmll bmRTdGF0dXMuQVJFX0ZSSUVORFM6cmV0dXJuIGUoaSwnRnJpZW5kcycpO2Nhc2Ug RnJpZW5kU3RhdHVzLklOQ09NSU5HX1JFUVVFU1Q6cmV0dXJuIGUobSwnSW5jb21p bmcnKTtjYXNlIEZyaWVuZFN0YXR1cy5PVVRHT0lOR19SRVFVRVNUOnJldHVybiBl KHAsJ091dGdvaW5nJyk7Y2FzZSBGcmllbmRTdGF0dXMuQ0FOX1JFUVVFU1Q6cmV0 dXJuIGUoZiwnUmVxdWVzdGFibGUnKTt9fSk7dmFyIGE7aWYodClhPUFyYml0ZXIu c3Vic2NyaWJlKEZyaWVuZFJlcXVlc3RNZXNzYWdlLkNPTkZJUk0sZnVuY3Rpb24o dSx2KXt2LnVpZD09cSYmZ29VUkkodCk7fSk7ZiYmRXZlbnQubGlzdGVuKGYsJ2Ns aWNrJyxmdW5jdGlvbigpe0FyYml0ZXIuaW5mb3JtKEZyaWVuZFJlcXVlc3RNZXNz YWdlLlNFTkRJTkcse3VpZDpxfSk7aWYobyl7RnJpZW5kTGlzdEZseW91dENvbnRy b2xsZXIuc2V0QWN0aXZlTm9kZShwKTt9ZWxzZSBjKHApO2IoImFkZF9mcmllbmQi LGZ1bmN0aW9uKHYpe3ZhciB1PXYuZXJyb3I9PUFkZEZyaWVuZEJ1dHRvbi5FUlJP Ul9BTFJFQURZX0FEREVEP0ZyaWVuZFJlcXVlc3RNZXNzYWdlLlNFTlQ6RnJpZW5k UmVxdWVzdE1lc3NhZ2UuU0VORF9GQUlMO0FyYml0ZXIuaW5mb3JtKHUse3VpZDpx fSk7RnJpZW5kTGlzdEZseW91dENvbnRyb2xsZXIuaGlkZSgpO0FzeW5jUmVzcG9u c2UuZGVmYXVsdEVycm9ySGFuZGxlcih2KTt9LGZ1bmN0aW9uKHUpe0FyYml0ZXIu aW5mb3JtKEZyaWVuZFJlcXVlc3RNZXNzYWdlLlNFTkRfRkFJTCx7dWlkOnF9KTtG cmllbmRMaXN0Rmx5b3V0Q29udHJvbGxlci5oaWRlKCk7fSk7fSk7UGFnZVRyYW5z aXRpb25zLnJlZ2lzdGVySGFuZGxlcihmdW5jdGlvbigpe0FyYml0ZXIudW5zdWJz Y3JpYmUoZCk7YSYmQXJiaXRlci51bnN1YnNjcmliZShhKTt9KTt9fTsKdmFyIEZy aWVuZEJ1dHRvbkljb249e2luaXQ6ZnVuY3Rpb24oYixlLGYpe3ZhciBkPURPTS5m aW5kKGUsJy5kZWZhdWx0SWNvbicpO3ZhciBjPURPTS5maW5kKGUsJy5jbG9zZUlj b24nKTt2YXIgYT1ET00uZmluZChlLCcuYWNxSWNvbicpO0FyYml0ZXIuc3Vic2Ny aWJlKCdGcmllbmRMaXN0TWVtYmVyc2hpcENoYW5nZScsZnVuY3Rpb24oZyxoKXtp ZihoLnVpZD09Zil7dmFyIGo9aC5saXN0cy5jb250YWlucyhGcmllbmRTdGF0dXMu Q0xPU0VfRlJJRU5EUyk7dmFyIGk9aC5saXN0cy5jb250YWlucyhGcmllbmRTdGF0 dXMuQUNRVUFJTlRBTkNFUyk7aWYoaiYmIWkpe0J1dHRvbi5zZXRJY29uKGIsYyk7 fWVsc2UgaWYoaSYmIWope0J1dHRvbi5zZXRJY29uKGIsYSk7fWVsc2UgQnV0dG9u LnNldEljb24oYixkKTt9fSk7fX07CmZ1bmN0aW9uIGFkanVzdEltYWdlKGUsZyl7 aWYoIWcpe3ZhciBhPWUucGFyZW50Tm9kZTt3aGlsZShhLnBhcmVudE5vZGUmJihD U1MuZ2V0U3R5bGUoYSwnZGlzcGxheScpIT0nYmxvY2snfHxhLm9mZnNldFdpZHRo PT0wKSlhPWEucGFyZW50Tm9kZTtnPWEub2Zmc2V0V2lkdGg7fXZhciBjPWUub2Zm c2V0V2lkdGg7aWYoYz09MCl7dmFyIGQ9ZS5uZXh0U2libGluZyxmPWUucGFyZW50 Tm9kZTtkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpO2M9ZS5vZmZzZXRXaWR0 aDtpZihkKXtmLmluc2VydEJlZm9yZShlLGQpO31lbHNlIGYuYXBwZW5kQ2hpbGQo ZSk7fWlmKGM+Zyl0cnl7aWYodWEuaWUoKTw4KXt2YXIgaW1nX2Rpdj1kb2N1bWVu dC5jcmVhdGVFbGVtZW50KCdkaXYnKTtpbWdfZGl2LnN0eWxlLmZpbHRlcj0ncHJv Z2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhSW1hZ2VMb2FkZXIo c3JjPSInK2Uuc3JjLnJlcGxhY2UoJyInLCclMjInKSsnIiwgc2l6aW5nTWV0aG9k PSJzY2FsZSIpJztpbWdfZGl2LnN0eWxlLndpZHRoPWcrJ3B4JztpbWdfZGl2LnN0 eWxlLmhlaWdodD1NYXRoLmZsb29yKCgoZy9lLm9mZnNldFdpZHRoKSplLm9mZnNl dEhlaWdodCkpKydweCc7aWYoZS5wYXJlbnROb2RlLnRhZ05hbWU9PSdBJylpbWdf ZGl2LnN0eWxlLmN1cnNvcj0ncG9pbnRlcic7ZS5wYXJlbnROb2RlLmluc2VydEJl Zm9yZShpbWdfZGl2LGUpO2UucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKTt9ZWxz ZSB0aHJvdyAxO31jYXRjaChiKXtlLnN0eWxlLndpZHRoPWcrJ3B4Jzt9Q1NTLnJl bW92ZUNsYXNzKGUsJ2ltZ19sb2FkaW5nJyk7fWZ1bmN0aW9uIGltYWdlQ29uc3Ry YWluU2l6ZShlLGIsYyxkKXt2YXIgYT1uZXcgSW1hZ2UoKTthLm9ubG9hZD1mdW5j dGlvbigpe2lmKGEud2lkdGg+MCYmYS5oZWlnaHQ+MCl7dmFyIGs9YS53aWR0aDt2 YXIgaD1hLmhlaWdodDtpZihrPmJ8fGg+Yyl7dmFyIGc9Yy9iO3ZhciBmPWgvaztp ZihmPmcpe2s9ayooYy9oKTtoPWM7fWVsc2V7aD1oKihiL2spO2s9Yjt9fXZhciBq PWdlKGQpO2lmKGope3ZhciBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycp O2kuc3JjPWU7aS53aWR0aD1rO2kuaGVpZ2h0PWg7ai5wYXJlbnROb2RlLmluc2Vy dEJlZm9yZShpLGopO2oucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChqKTt9fX07YS5z cmM9ZTt9ZnVuY3Rpb24gaW1hZ2VfaGFzX2xvYWRlZChhKXtpZihhLm5hdHVyYWxX aWR0aCE9PXVuZGVmaW5lZCl7cmV0dXJuIGEuY29tcGxldGUmJmEud2lkdGghPTA7 fWVsc2UgaWYoYS5oZWlnaHQ9PTIwJiZhLndpZHRoPT0yMCYmYS5jb21wbGV0ZSl7 cmV0dXJuIGZhbHNlO31lbHNlIGlmKGEuY29tcGxldGU9PT11bmRlZmluZWQmJnVh LnNhZmFyaSgpPDUwMCl7dmFyIGI9bmV3IEltYWdlKCk7Yi5zcmM9YS5zcmM7cmV0 dXJuIGIuY29tcGxldGU7fXJldHVybiBhLmNvbXBsZXRlO31mdW5jdGlvbiBpbWFn ZV9oYXNfZmFpbGVkKGEpe2lmKChhLmNvbXBsZXRlPT1udWxsJiZhLndpZHRoPT0y MCYmYS5oZWlnaHQ9PTIwKXx8KGEubWltZVR5cGUhPW51bGwmJmEuY29tcGxldGUm JmEubWltZVR5cGU9PScnKXx8KGEubmF0dXJhbEhlaWdodCE9bnVsbCYmYS5jb21w bGV0ZSYmYS5uYXR1cmFsSGVpZ2h0PT0wKSlyZXR1cm4gdHJ1ZTt9Cl9fZSgiaW50 bC1sb2NhbGUiLFsiTG9jYWxlIl0sZnVuY3Rpb24oYSxiKXthLmludGxfbG9jYWxl X2lzX3J0bD1iKCdMb2NhbGUnKS5pc1JUTDt9LDMpOwpmdW5jdGlvbiBUZXh0SW5w dXRDb250cm9sKGIpe3RoaXMucGFyZW50LmNvbnN0cnVjdCh0aGlzLGIpO3ZhciBh PXRoaXMuZ2V0Um9vdCgpO3ZhciBjPWZ1bmN0aW9uKCl7dGhpcy51cGRhdGUuYmlu ZCh0aGlzKS5kZWZlcigpO30uYmluZCh0aGlzKTtFdmVudC5saXN0ZW4oYSx7a2V5 ZG93bjpjLHBhc3RlOmN9KTt9Q2xhc3MuZXh0ZW5kKFRleHRJbnB1dENvbnRyb2ws J0RPTUNvbnRyb2wnKTtUZXh0SW5wdXRDb250cm9sLnByb3RvdHlwZT17c2V0TWF4 TGVuZ3RoOmZ1bmN0aW9uKGEpe0lucHV0LnNldE1heExlbmd0aCh0aGlzLmdldFJv b3QoKSxhKTtyZXR1cm4gdGhpczt9LGdldFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJu IElucHV0LmdldFZhbHVlKHRoaXMuZ2V0Um9vdCgpKTt9LGlzRW1wdHk6ZnVuY3Rp b24oKXtyZXR1cm4gSW5wdXQuaXNFbXB0eSh0aGlzLmdldFJvb3QoKSk7fSxzZXRW YWx1ZTpmdW5jdGlvbihhKXtJbnB1dC5zZXRWYWx1ZSh0aGlzLmdldFJvb3QoKSxh KTt0aGlzLnVwZGF0ZSgpO3JldHVybiB0aGlzO30sY2xlYXI6ZnVuY3Rpb24oKXty ZXR1cm4gdGhpcy5zZXRWYWx1ZSgnJyk7fSxzZXRQbGFjZWhvbGRlclRleHQ6ZnVu Y3Rpb24oYSl7SW5wdXQuc2V0UGxhY2Vob2xkZXIodGhpcy5nZXRSb290KCksYSk7 cmV0dXJuIHRoaXM7fX07CmZ1bmN0aW9uIFRleHRNZXRyaWNzKGEpe3RoaXMuX25v ZGU9YTt2YXIgYj10aGlzLl9zaGFkb3c9JE4oJ3RleHRhcmVhJyx7Y2xhc3NOYW1l Oid0ZXh0TWV0cmljcyd9KTt2YXIgYz1bJ2ZvbnRTaXplJywnZm9udFN0eWxlJywn Zm9udFdlaWdodCcsJ2ZvbnRGYW1pbHknLCdsaW5lSGVpZ2h0Jywnd29yZFdyYXAn XTtjLmVhY2goZnVuY3Rpb24oZCl7Q1NTLnNldFN0eWxlKGIsZCxDU1MuZ2V0U3R5 bGUoYSxkKSk7fSk7ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChiKTt9VGV4dE1l dHJpY3MucHJvdG90eXBlPXttZWFzdXJlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5f bm9kZTt2YXIgYj10aGlzLl9zaGFkb3c7dmFyIGM9YS5jbGllbnRXaWR0aC1DU1Mu Z2V0U3R5bGVGbG9hdChhLCdwYWRkaW5nTGVmdCcpLUNTUy5nZXRTdHlsZUZsb2F0 KGEsJ3BhZGRpbmdSaWdodCcpO0NTUy5zZXRTdHlsZShiLCd3aWR0aCcsYysncHgn KTtiLnZhbHVlPWEudmFsdWUrJy4uLic7cmV0dXJuIHt3aWR0aDpiLnNjcm9sbFdp ZHRoLGhlaWdodDpiLnNjcm9sbEhlaWdodH07fSxkZXN0cm95OmZ1bmN0aW9uKCl7 RE9NLnJlbW92ZSh0aGlzLl9zaGFkb3cpO319OwpmdW5jdGlvbiBUZXh0QXJlYUNv bnRyb2woYSl7dGhpcy5hdXRvZ3Jvdz1mYWxzZTt0aGlzLnBhcmVudC5jb25zdHJ1 Y3QodGhpcyxhKTt0aGlzLndpZHRoPW51bGw7RXZlbnQubGlzdGVuKGEse2ZvY3Vz OnRoaXMuX2hhbmRsZUZvY3VzLmJpbmQodGhpcyl9KTt9Q2xhc3MuZXh0ZW5kKFRl eHRBcmVhQ29udHJvbCwnVGV4dElucHV0Q29udHJvbCcpO0NsYXNzLm1peGluKFRl eHRBcmVhQ29udHJvbCwnQXJiaXRlcicse3NldEF1dG9ncm93OmZ1bmN0aW9uKGEp e3RoaXMuYXV0b2dyb3c9YTtyZXR1cm4gdGhpczt9LG9udXBkYXRlOmZ1bmN0aW9u KCl7dGhpcy5wYXJlbnQub251cGRhdGUoKTtpZih0aGlzLmF1dG9ncm93KXt2YXIg ZD10aGlzLmdldFJvb3QoKTtpZighdGhpcy5tZXRyaWNzKXRoaXMubWV0cmljcz1u ZXcgVGV4dE1ldHJpY3MoZCk7aWYodHlwZW9mIHRoaXMubWluSGVpZ2h0PT09J3Vu ZGVmaW5lZCcpe3ZhciBjPUNTUy5nZXRTdHlsZUZsb2F0KGQsJ2hlaWdodCcpO3Ro aXMubWluSGVpZ2h0PWM+MD9jOmQub2Zmc2V0SGVpZ2h0LTg7fWlmKHR5cGVvZiB0 aGlzLmlzQm9yZGVyQm94PT09J3VuZGVmaW5lZCcpaWYoQ1NTLmdldFN0eWxlKGQs J2JveC1zaXppbmcnKT09J2JvcmRlci1ib3gnfHxDU1MuZ2V0U3R5bGUoZCwnLW1v ei1ib3gtc2l6aW5nJyk9PSdib3JkZXItYm94J3x8Q1NTLmdldFN0eWxlKGQsJy13 ZWJraXQtYm94LXNpemluZycpPT0nYm9yZGVyLWJveCcpe3RoaXMuaXNCb3JkZXJC b3g9dHJ1ZTt0aGlzLmJvcmRlckJveE9mZnNldD1DU1MuZ2V0U3R5bGVGbG9hdChk LCdwYWRkaW5nLXRvcCcpK0NTUy5nZXRTdHlsZUZsb2F0KGQsJ3BhZGRpbmctYm90 dG9tJykrQ1NTLmdldFN0eWxlRmxvYXQoZCwnYm9yZGVyLXRvcC13aWR0aCcpK0NT Uy5nZXRTdHlsZUZsb2F0KGQsJ2JvcmRlci1ib3R0b20td2lkdGgnKTt9ZWxzZSB0 aGlzLmlzQm9yZGVyQm94PWZhbHNlO3ZhciBiPXRoaXMubWV0cmljcy5tZWFzdXJl KCk7dmFyIGE9TWF0aC5tYXgodGhpcy5taW5IZWlnaHQsYi5oZWlnaHQpO2lmKHRo aXMuaXNCb3JkZXJCb3gpYSs9dGhpcy5ib3JkZXJCb3hPZmZzZXQ7aWYoYSE9dGhp cy5oZWlnaHQpe0NTUy5zZXRTdHlsZShkLCdoZWlnaHQnLGErJ3B4Jyk7dGhpcy5o ZWlnaHQ9YTtBcmJpdGVyLmluZm9ybSgncmVmbG93Jyk7dGhpcy5pbmZvcm0oJ3Jl c2l6ZScpO319ZWxzZSBpZih0aGlzLm1ldHJpY3Mpe3RoaXMubWV0cmljcy5kZXN0 cm95KCk7dGhpcy5tZXRyaWNzPW51bGw7fX0scmVzZXRIZWlnaHQ6ZnVuY3Rpb24o KXt0aGlzLmhlaWdodD0tMTt0aGlzLnVwZGF0ZSgpO30sX2hhbmRsZUZvY3VzOmZ1 bmN0aW9uKCl7dGhpcy53aWR0aD1udWxsO319KTtUZXh0QXJlYUNvbnRyb2wuZ2V0 SW5zdGFuY2U9ZnVuY3Rpb24oYil7dmFyIGE9RE9NQ29udHJvbC5nZXRJbnN0YW5j ZShiKTtpZighYSl7YT1uZXcgVGV4dEFyZWFDb250cm9sKGIpO0NTUy5oYXNDbGFz cyhiLCd1aVRleHRhcmVhQXV0b2dyb3cnKSYmYS5zZXRBdXRvZ3Jvdyh0cnVlKTti Ll9oYXNfY29udHJvbD10cnVlO31yZXR1cm4gYTt9OwpmdW5jdGlvbiBzaG93KCl7 Zm9yKHZhciBiPTA7Yjxhcmd1bWVudHMubGVuZ3RoO2IrKyl7dmFyIGE9Z2UoYXJn dW1lbnRzW2JdKTtpZihhJiZhLnN0eWxlKWEuc3R5bGUuZGlzcGxheT0nJzt9cmV0 dXJuIGZhbHNlO31mdW5jdGlvbiBoaWRlKCl7Zm9yKHZhciBiPTA7Yjxhcmd1bWVu dHMubGVuZ3RoO2IrKyl7dmFyIGE9Z2UoYXJndW1lbnRzW2JdKTtpZihhJiZhLnN0 eWxlKWEuc3R5bGUuZGlzcGxheT0nbm9uZSc7fXJldHVybiBmYWxzZTt9ZnVuY3Rp b24gc2hvd24oYSl7YT1nZShhKTtyZXR1cm4gKGEuc3R5bGUuZGlzcGxheSE9J25v bmUnJiYhKGEuc3R5bGUuZGlzcGxheT09JycmJmEub2Zmc2V0V2lkdGg9PTApKTt9 ZnVuY3Rpb24gdG9nZ2xlKCl7Zm9yKHZhciBiPTA7Yjxhcmd1bWVudHMubGVuZ3Ro O2IrKyl7dmFyIGE9JChhcmd1bWVudHNbYl0pO2Euc3R5bGUuZGlzcGxheT1DU1Mu Z2V0U3R5bGUoYSwiZGlzcGxheSIpPT0nYmxvY2snPydub25lJzonYmxvY2snO31y ZXR1cm4gZmFsc2U7fWZ1bmN0aW9uIHRvZ2dsZURpc3BsYXlOb25lKCl7Zm9yKHZh ciBiPTA7Yjxhcmd1bWVudHMubGVuZ3RoO2IrKyl7dmFyIGE9JChhcmd1bWVudHNb Yl0pO2lmKHNob3duKGEpKXtoaWRlKGEpO31lbHNlIHNob3coYSk7fXJldHVybiBm YWxzZTt9CmZ1bmN0aW9uIFVudHJ1c3RlZExpbmsoYSxkLGIsYyl7dGhpcy5kb209 YTt0aGlzLnVybD1hLmhyZWY7dGhpcy5oYXNoPWQ7dGhpcy5mdW5jX2dldF9wYXJh bXM9Y3x8ZnVuY3Rpb24oKXtyZXR1cm4ge307fTtFdmVudC5saXN0ZW4odGhpcy5k b20sJ2NsaWNrJyx0aGlzLm9uY2xpY2suYmluZCh0aGlzKSk7RXZlbnQubGlzdGVu KHRoaXMuZG9tLCdtb3VzZWRvd24nLHRoaXMub25tb3VzZWRvd24uYmluZCh0aGlz KSk7RXZlbnQubGlzdGVuKHRoaXMuZG9tLCdtb3VzZXVwJyx0aGlzLm9ubW91c2V1 cC5iaW5kKHRoaXMpKTtFdmVudC5saXN0ZW4odGhpcy5kb20sJ21vdXNlb3V0Jyx0 aGlzLm9ubW91c2VvdXQuYmluZCh0aGlzKSk7dGhpcy5vbm1vdXNlZG93bigkRShi KSk7fVVudHJ1c3RlZExpbmsuYm9vdHN0cmFwPWZ1bmN0aW9uKGEsZCxiLGMpe2lm KGEuX191bnRydXN0ZWQpcmV0dXJuO2EuX191bnRydXN0ZWQ9dHJ1ZTtuZXcgVW50 cnVzdGVkTGluayhhLGQsYixjKTt9O1VudHJ1c3RlZExpbmsucHJvdG90eXBlLmdl dFJld3JpdHRlblVSST1mdW5jdGlvbigpe3ZhciBhPWNvcHlfcHJvcGVydGllcyh7 dTp0aGlzLnVybCxoOnRoaXMuaGFzaH0sdGhpcy5mdW5jX2dldF9wYXJhbXModGhp cy5kb20pKTt2YXIgYj1uZXcgVVJJKCcvbC5waHAnKTtyZXR1cm4gYi5zZXRRdWVy eURhdGEoYSkuc2V0U3ViZG9tYWluKCd3d3cnKS5zZXRQcm90b2NvbCgnaHR0cCcp O307VW50cnVzdGVkTGluay5wcm90b3R5cGUub25jbGljaz1mdW5jdGlvbigpeyhm dW5jdGlvbigpe3RoaXMuZG9tLmhyZWY9dGhpcy51cmw7fSkuYmluZCh0aGlzKS5k ZWZlcigxMDApO3RoaXMuZG9tLmhyZWY9dGhpcy5nZXRSZXdyaXR0ZW5VUkkoKTt9 O1VudHJ1c3RlZExpbmsucHJvdG90eXBlLm9ubW91c2Vkb3duPWZ1bmN0aW9uKGEp e2lmKGEuYnV0dG9uPT0yKXRoaXMuZG9tLmhyZWY9dGhpcy5nZXRSZXdyaXR0ZW5V UkkoKTt9O1VudHJ1c3RlZExpbmsucHJvdG90eXBlLm9ubW91c2V1cD1mdW5jdGlv bigpe3RoaXMuZG9tLmhyZWY9dGhpcy5nZXRSZXdyaXR0ZW5VUkkoKTt9O1VudHJ1 c3RlZExpbmsucHJvdG90eXBlLm9ubW91c2VvdXQ9ZnVuY3Rpb24oKXt0aGlzLmRv bS5ocmVmPXRoaXMudXJsO307CmZ1bmN0aW9uIEtleUV2ZW50Q29udHJvbGxlcigp e3RoaXMuaGFuZGxlcnM9e307ZG9jdW1lbnQub25rZXl1cD10aGlzLm9ua2V5ZXZl bnQuYmluZCh0aGlzLCdvbmtleXVwJyk7ZG9jdW1lbnQub25rZXlkb3duPXRoaXMu b25rZXlldmVudC5iaW5kKHRoaXMsJ29ua2V5ZG93bicpO2RvY3VtZW50Lm9ua2V5 cHJlc3M9dGhpcy5vbmtleWV2ZW50LmJpbmQodGhpcywnb25rZXlwcmVzcycpO31j b3B5X3Byb3BlcnRpZXMoS2V5RXZlbnRDb250cm9sbGVyLHtpbnN0YW5jZTpudWxs LGdldEluc3RhbmNlOmZ1bmN0aW9uKCl7cmV0dXJuIEtleUV2ZW50Q29udHJvbGxl ci5pbnN0YW5jZXx8KEtleUV2ZW50Q29udHJvbGxlci5pbnN0YW5jZT1uZXcgS2V5 RXZlbnRDb250cm9sbGVyKCkpO30sZGVmYXVsdEZpbHRlcjpmdW5jdGlvbihldmVu dCxhKXtldmVudD0kRShldmVudCk7cmV0dXJuIEtleUV2ZW50Q29udHJvbGxlci5m aWx0ZXJFdmVudFR5cGVzKGV2ZW50LGEpJiZLZXlFdmVudENvbnRyb2xsZXIuZmls dGVyRXZlbnRUYXJnZXRzKGV2ZW50LGEpJiZLZXlFdmVudENvbnRyb2xsZXIuZmls dGVyRXZlbnRNb2RpZmllcnMoZXZlbnQsYSk7fSxmaWx0ZXJFdmVudFR5cGVzOmZ1 bmN0aW9uKGV2ZW50LGEpe2lmKGE9PT0nb25rZXlkb3duJylyZXR1cm4gdHJ1ZTty ZXR1cm4gZmFsc2U7fSxmaWx0ZXJFdmVudFRhcmdldHM6ZnVuY3Rpb24oZXZlbnQs Yil7dmFyIGE9ZXZlbnQuZ2V0VGFyZ2V0KCk7cmV0dXJuICFET00uaXNOb2RlT2ZU eXBlKGEsS2V5RXZlbnRDb250cm9sbGVyLl9pbnRlcmFjdGl2ZUVsZW1lbnRzKXx8 KGEudHlwZSBpbiBLZXlFdmVudENvbnRyb2xsZXIuX3VuaW50ZXJlc3RpbmdUeXBl cyl8fChET00uaXNOb2RlT2ZUeXBlKGEsWydpbnB1dCcsJ3RleHRhcmVhJ10pJiZh LnZhbHVlLmxlbmd0aD09PTAmJmV2ZW50LmtleUNvZGUgaW4gS2V5RXZlbnRDb250 cm9sbGVyLl9jb250cm9sS2V5cyk7fSxmaWx0ZXJFdmVudE1vZGlmaWVyczpmdW5j dGlvbihldmVudCxhKXtpZihldmVudC5jdHJsS2V5fHxldmVudC5hbHRLZXl8fGV2 ZW50Lm1ldGFLZXl8fGV2ZW50LnJlcGVhdClyZXR1cm4gZmFsc2U7cmV0dXJuIHRy dWU7fSxyZWdpc3RlcktleTpmdW5jdGlvbihmLGEsZCxnKXtpZihkPT09dW5kZWZp bmVkKWQ9S2V5RXZlbnRDb250cm9sbGVyLmRlZmF1bHRGaWx0ZXI7dmFyIGI9S2V5 RXZlbnRDb250cm9sbGVyLmdldEluc3RhbmNlKCk7dmFyIGM9Yi5tYXBLZXkoZik7 aWYoaXNfZW1wdHkoYi5oYW5kbGVycykpb25sZWF2ZVJlZ2lzdGVyKGIucmVzZXRI YW5kbGVycy5iaW5kKGIpKTtmb3IodmFyIGU9MDtlPGMubGVuZ3RoO2UrKyl7Zj1j W2VdO2lmKCFiLmhhbmRsZXJzW2ZdfHxnKWIuaGFuZGxlcnNbZl09W107Yi5oYW5k bGVyc1tmXS5wdXNoKHtjYWxsYmFjazphLGZpbHRlcjpkfSk7fX0sa2V5Q29kZU1h cDp7QkFDS1NQQUNFOls4XSxUQUI6WzldLFJFVFVSTjpbMTNdLEVTQ0FQRTpbMjdd LExFRlQ6WzM3LDYzMjM0XSxVUDpbMzgsNjMyMzJdLFJJR0hUOlszOSw2MzIzNV0s RE9XTjpbNDAsNjMyMzNdLERFTEVURTpbNDZdLENPTU1BOlsxODhdLFBFUklPRDpb MTkwXSwnYCc6WzE5Ml0sJ1snOlsyMTldLCddJzpbMjIxXX0sX2ludGVyYWN0aXZl RWxlbWVudHM6WydpbnB1dCcsJ3NlbGVjdCcsJ3RleHRhcmVhJywnb2JqZWN0Jywn ZW1iZWQnXSxfdW5pbnRlcmVzdGluZ1R5cGVzOntjaGVja2JveDoxLHJhZGlvOjEs c3VibWl0OjF9LF9jb250cm9sS2V5czp7ODoxLDk6MSwxMzoxLDI3OjEsMzc6MSw2 MzIzNDoxLDM4OjEsNjMyMzI6MSwzOToxLDYzMjM1OjEsNDA6MSw2MzIzMzoxLDQ2 OjF9fSk7Y29weV9wcm9wZXJ0aWVzKEtleUV2ZW50Q29udHJvbGxlci5wcm90b3R5 cGUse21hcEtleTpmdW5jdGlvbihhKXtpZihhPj0wJiZhPD05KXtpZih0eXBlb2Yo YSkhPSdudW1iZXInKWE9YS5jaGFyQ29kZUF0KDApLTQ4O3JldHVybiBbNDgrYSw5 NithXTt9dmFyIGI9S2V5RXZlbnRDb250cm9sbGVyLmtleUNvZGVNYXBbYS50b1Vw cGVyQ2FzZSgpXTtpZihiKXJldHVybiBiO3JldHVybiBbYS50b1VwcGVyQ2FzZSgp LmNoYXJDb2RlQXQoMCldO30sb25rZXlldmVudDpmdW5jdGlvbihpLGMpe2M9JEUo Yyk7dmFyIGQ9bnVsbDt2YXIgZz10aGlzLmhhbmRsZXJzW2Mua2V5Q29kZV07dmFy IGIsZixhO2lmKGcpZm9yKHZhciBoPTA7aDxnLmxlbmd0aDtoKyspe2I9Z1toXS5j YWxsYmFjaztmPWdbaF0uZmlsdGVyO3RyeXtpZighZnx8ZihjLGkpKXthPWIoYyxp KTtpZihhPT09ZmFsc2UpcmV0dXJuIEV2ZW50LmtpbGwoYyk7fX1jYXRjaChlKXt9 fXJldHVybiB0cnVlO30scmVzZXRIYW5kbGVyczpmdW5jdGlvbigpe3RoaXMuaGFu ZGxlcnM9e307fX0pOwpfX2UoImlucHV0LXNlbGVjdGlvbiIsWyJkb20iLCJpbnB1 dC1tZXRob2RzIiwib2JqZWN0LWNvcmUtdXRpbHMiXSxmdW5jdGlvbihkLGYsZSxj KXt2YXIgYT1mKCdkb20nKTt2YXIgYj1mKCdpbnB1dC1tZXRob2RzJyk7Yy5nZXQ9 ZnVuY3Rpb24oaCl7aWYoIWRvY3VtZW50LnNlbGVjdGlvbilyZXR1cm4ge3N0YXJ0 Omguc2VsZWN0aW9uU3RhcnQsZW5kOmguc2VsZWN0aW9uRW5kfTt2YXIgaj1kb2N1 bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTtpZihqLnBhcmVudEVsZW1lbnQo KSE9PWgpcmV0dXJuIHtzdGFydDowLGVuZDowfTt2YXIgaT1oLnZhbHVlLmxlbmd0 aDtpZihhLmlzTm9kZU9mVHlwZShoLCdpbnB1dCcpKXtyZXR1cm4ge3N0YXJ0Oi1q Lm1vdmVTdGFydCgnY2hhcmFjdGVyJywtaSksZW5kOi1qLm1vdmVFbmQoJ2NoYXJh Y3RlcicsLWkpfTt9ZWxzZXt2YXIgaz1qLmR1cGxpY2F0ZSgpO2subW92ZVRvRWxl bWVudFRleHQoaCk7ay5zZXRFbmRQb2ludCgnU3RhcnRUb0VuZCcsaik7dmFyIGc9 aS1rLnRleHQubGVuZ3RoO2suc2V0RW5kUG9pbnQoJ1N0YXJ0VG9TdGFydCcsaik7 cmV0dXJuIHtzdGFydDppLWsudGV4dC5sZW5ndGgsZW5kOmd9O319O2Muc2V0PWZ1 bmN0aW9uKGosbCxpKXtpZih0eXBlb2YgaT09J3VuZGVmaW5lZCcpaT1sO2lmKGRv Y3VtZW50LnNlbGVjdGlvbil7aWYoai50YWdOYW1lPT0nVEVYVEFSRUEnKXt2YXIg Zz0oai52YWx1ZS5zbGljZSgwLGwpLm1hdGNoKC9cci9nKXx8W10pLmxlbmd0aDt2 YXIgaD0oai52YWx1ZS5zbGljZShsLGkpLm1hdGNoKC9cci9nKXx8W10pLmxlbmd0 aDtsLT1nO2ktPWcraDt9dmFyIGs9ai5jcmVhdGVUZXh0UmFuZ2UoKTtrLmNvbGxh cHNlKHRydWUpO2subW92ZVN0YXJ0KCdjaGFyYWN0ZXInLGwpO2subW92ZUVuZCgn Y2hhcmFjdGVyJyxpLWwpO2suc2VsZWN0KCk7fWVsc2V7ai5zZWxlY3Rpb25TdGFy dD1sO2ouc2VsZWN0aW9uRW5kPU1hdGgubWluKGksai52YWx1ZS5sZW5ndGgpO2Iu Zm9jdXMoaik7fX07Zignb2JqZWN0LWNvcmUtdXRpbHMnKS5hZGRfcHJvcGVydGll cygnSW5wdXQnLHtnZXRTZWxlY3Rpb246Yy5nZXQsc2V0U2VsZWN0aW9uOmMuc2V0 fSk7fSwzKTsKX19lKCJyZWN0IixbInZlY3RvciIsImNvcHlQcm9wZXJ0aWVzIl0s ZnVuY3Rpb24oZSxnLGYsZCl7dmFyIGI9ZygndmVjdG9yJyk7dmFyIGM9ZygnY29w eVByb3BlcnRpZXMnKTtmdW5jdGlvbiBhKGwsayxoLGosaSl7aWYoYXJndW1lbnRz Lmxlbmd0aD09PTEpe2lmKGwgaW5zdGFuY2VvZiBhKXJldHVybiBsO2lmKGwgaW5z dGFuY2VvZiBiKXJldHVybiBuZXcgYShsLnksbC54LGwueSxsLngsbC5kb21haW4p O3JldHVybiBhLmdldEVsZW1lbnRCb3VuZHMoJChsKSk7fWModGhpcyx7dDpsLHI6 ayxiOmgsbDpqLGRvbWFpbjppfHwncHVyZSd9KTt9YyhhLnByb3RvdHlwZSx7dzpm dW5jdGlvbigpe3JldHVybiB0aGlzLnItdGhpcy5sO30saDpmdW5jdGlvbigpe3Jl dHVybiB0aGlzLmItdGhpcy50O30sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4g JygoJyt0aGlzLmwrJywgJyt0aGlzLnQrJyksICgnK3RoaXMucisnLCAnK3RoaXMu YisnKSknO30sY29udGFpbnM6ZnVuY3Rpb24oaSl7aT1uZXcgYShpKS5jb252ZXJ0 VG8odGhpcy5kb21haW4pO3ZhciBoPXRoaXM7cmV0dXJuIChoLmw8PWkubCYmaC5y Pj1pLnImJmgudDw9aS50JiZoLmI+PWkuYik7fSxhZGQ6ZnVuY3Rpb24oaixrKXtp Zihhcmd1bWVudHMubGVuZ3RoPT0xKXtpZihqLmRvbWFpbiE9J3B1cmUnKWo9ai5j b252ZXJ0VG8odGhpcy5kb21haW4pO3JldHVybiB0aGlzLmFkZChqLngsai55KTt9 dmFyIGg9cGFyc2VGbG9hdChqKTt2YXIgaT1wYXJzZUZsb2F0KGspO3JldHVybiBu ZXcgYSh0aGlzLnQraSx0aGlzLnIraCx0aGlzLmIraSx0aGlzLmwraCx0aGlzLmRv bWFpbik7fSxzdWI6ZnVuY3Rpb24oaCxpKXtpZihhcmd1bWVudHMubGVuZ3RoPT0x KXtyZXR1cm4gdGhpcy5hZGQoaC5tdWwoLTEpKTt9ZWxzZSByZXR1cm4gdGhpcy5h ZGQoLWgsLWkpO30sYm91bmRXaXRoaW46ZnVuY3Rpb24oaCl7dmFyIGk9MCxqPTA7 aWYodGhpcy5sPGgubCl7aT1oLmwtdGhpcy5sO31lbHNlIGlmKHRoaXMucj5oLnIp aT1oLnItdGhpcy5yO2lmKHRoaXMudDxoLnQpe2o9aC50LXRoaXMudDt9ZWxzZSBp Zih0aGlzLmI+aC5iKWo9aC5iLXRoaXMuYjtyZXR1cm4gdGhpcy5hZGQoaSxqKTt9 LGdldENlbnRlcjpmdW5jdGlvbigpe3JldHVybiBuZXcgYih0aGlzLmwrdGhpcy53 KCkvMix0aGlzLnQrdGhpcy5oKCkvMix0aGlzLmRvbWFpbik7fSxnZXRQb3NpdGlv blZlY3RvcjpmdW5jdGlvbigpe3JldHVybiBuZXcgYih0aGlzLmwsdGhpcy50LHRo aXMuZG9tYWluKTt9LGdldERpbWVuc2lvblZlY3RvcjpmdW5jdGlvbigpe3JldHVy biBuZXcgYih0aGlzLncoKSx0aGlzLmgoKSwncHVyZScpO30sY29udmVydFRvOmZ1 bmN0aW9uKGgpe2lmKHRoaXMuZG9tYWluPT1oKXJldHVybiB0aGlzO2lmKGg9PSdw dXJlJylyZXR1cm4gbmV3IGEodGhpcy50LHRoaXMucix0aGlzLmIsdGhpcy5sLCdw dXJlJyk7aWYodGhpcy5kb21haW49PSdwdXJlJylyZXR1cm4gbmV3IGEoMCwwLDAs MCk7dmFyIGk9bmV3IGIodGhpcy5sLHRoaXMudCx0aGlzLmRvbWFpbikuY29udmVy dFRvKGgpO3JldHVybiBuZXcgYShpLnksaS54K3RoaXMudygpLGkueSt0aGlzLmgo KSxpLngsaCk7fX0pO2MoYSx7ZGVzZXJpYWxpemU6ZnVuY3Rpb24oaSl7dmFyIGg9 aS5zcGxpdCgnOicpO3JldHVybiBuZXcgYShoWzFdLGhbMl0saFszXSxoWzBdKTt9 LG5ld0Zyb21WZWN0b3JzOmZ1bmN0aW9uKGksaCl7cmV0dXJuIG5ldyBhKGkueSxp LngraC54LGkueStoLnksaS54LGkuZG9tYWluKTt9LGdldEVsZW1lbnRCb3VuZHM6 ZnVuY3Rpb24oaCl7cmV0dXJuIGEubmV3RnJvbVZlY3RvcnMoYi5nZXRFbGVtZW50 UG9zaXRpb24oaCksYi5nZXRFbGVtZW50RGltZW5zaW9ucyhoKSk7fSxnZXRWaWV3 cG9ydEJvdW5kczpmdW5jdGlvbigpe3JldHVybiBhLm5ld0Zyb21WZWN0b3JzKGIu Z2V0U2Nyb2xsUG9zaXRpb24oKSxiLmdldFZpZXdwb3J0RGltZW5zaW9ucygpKTt9 LG1pbmltdW1Cb3VuZGluZ0JveDpmdW5jdGlvbihrKXt2YXIgaD1uZXcgYShNYXRo Lm1pbigpLE1hdGgubWF4KCksTWF0aC5tYXgoKSxNYXRoLm1pbigpKTt2YXIgajtm b3IodmFyIGk9MDtpPGsubGVuZ3RoO2krKyl7aj1rW2ldO2gudD1NYXRoLm1pbiho LnQsai50KTtoLnI9TWF0aC5tYXgoaC5yLGoucik7aC5iPU1hdGgubWF4KGguYixq LmIpO2gubD1NYXRoLm1pbihoLmwsai5sKTt9cmV0dXJuIGg7fX0pO2UuUmVjdD1m LmV4cG9ydHM9YTt9LDMpOwp2YXIgQmFzZTY0PShmdW5jdGlvbigpe3ZhciBjPSdB QkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3 eHl6MDEyMzQ1Njc4OSsvJztmdW5jdGlvbiBkKGUpe2U9KGUuY2hhckNvZGVBdCgw KTw8MTYpfChlLmNoYXJDb2RlQXQoMSk8PDgpfGUuY2hhckNvZGVBdCgyKTtyZXR1 cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjLmNoYXJDb2RlQXQoZT4+PjE4KSxjLmNo YXJDb2RlQXQoKGU+Pj4xMikmNjMpLGMuY2hhckNvZGVBdCgoZT4+PjYpJjYzKSxj LmNoYXJDb2RlQXQoZSY2MykpO312YXIgYT0nPl9fXz80NTY3ODk6Ozw9X19fX19f XycrJ1wwXDFcMlwzXDRcNVw2XDdcYlx0XG5cMTNcZlxyXDE2XDE3XDIwXDIxXDIy XDIzXDI0XDI1XDI2XDI3XDMwXDMxJysnX19fX19fXDMyXDMzXDM0XDM1XDM2XDM3 ICEiIyQlJlwnKCkqKywtLi8wMTIzJztmdW5jdGlvbiBiKGUpe2U9KGEuY2hhckNv ZGVBdChlLmNoYXJDb2RlQXQoMCktNDMpPDwxOCl8KGEuY2hhckNvZGVBdChlLmNo YXJDb2RlQXQoMSktNDMpPDwxMil8KGEuY2hhckNvZGVBdChlLmNoYXJDb2RlQXQo MiktNDMpPDw2KXxhLmNoYXJDb2RlQXQoZS5jaGFyQ29kZUF0KDMpLTQzKTtyZXR1 cm4gU3RyaW5nLmZyb21DaGFyQ29kZShlPj4+MTYsKGU+Pj44KSYyNTUsZSYyNTUp O31yZXR1cm4ge2VuY29kZTpmdW5jdGlvbihmKXtmPXVuZXNjYXBlKGVuY29kZVVS SShmKSk7dmFyIGU9KGYubGVuZ3RoKzIpJTM7Zj0oZisnXDBcMCcuc2xpY2UoZSkp LnJlcGxhY2UoL1tcc1xTXXszfS9nLGQpO3JldHVybiBmLnNsaWNlKDAsZi5sZW5n dGgrZS0yKSsnPT0nLnNsaWNlKGUpO30sZGVjb2RlOmZ1bmN0aW9uKGcpe2c9Zy5y ZXBsYWNlKC9bXkEtWmEtejAtOStcL10vZywnJyk7dmFyIGY9KGcubGVuZ3RoKzMp JjM7Zz0oZysnQUFBJy5zbGljZShmKSkucmVwbGFjZSgvLi4uLi9nLGIpO2c9Zy5z bGljZSgwLGcubGVuZ3RoK2YtMyk7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25l bnQoZXNjYXBlKGcpKTt9Y2F0Y2goZSl7dGhyb3cgbmV3IEVycm9yKCdOb3QgdmFs aWQgVVRGLTgnKTt9fSxlbmNvZGVPYmplY3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIEJh c2U2NC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoZSkpO30sZGVjb2RlT2JqZWN0OmZ1 bmN0aW9uKGUpe3JldHVybiBKU09OLnBhcnNlKEJhc2U2NC5kZWNvZGUoZSkpO30s ZW5jb2RlTnVtczpmdW5jdGlvbihlKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29k ZS5hcHBseShTdHJpbmcsZS5tYXAoZnVuY3Rpb24oZil7cmV0dXJuIGMuY2hhckNv ZGVBdCgoZnwtKGY+NjMpKSYtKGY+MCkmNjMpO30pKTt9fTt9KSgpOwpmdW5jdGlv biBodG1sX2h5cGVybGluayhnLGgsaSxlKXtpZih0eXBlb2YgZz09PSd1bmRlZmlu ZWQnfHwhZy50b1N0cmluZylyZXR1cm4gJyc7aWYodHlwZW9mIGghPT0nZnVuY3Rp b24nKWg9aHRtbGl6ZTtpZih0eXBlb2YgaSE9PSdmdW5jdGlvbicpaT1odG1saXpl O3ZhciBnPWcudG9TdHJpbmcoKTt2YXIgZj1bXTt2YXIgYjt3aGlsZSgoYj1VUkxT Y3JhcGVyLm1hdGNoKGcpKSl7dmFyIGQ9Zy5pbmRleE9mKGIpO2lmKGQ+PTApZi5w dXNoKGgoZy5zdWJzdHJpbmcoMCxkKSkpO3ZhciBhPWkoYik7dmFyIGM9Yi5yZXBs YWNlKC8iL2csJyUyMicpO2lmKCEoL15bYS16XVthLXowLTlcLSsuXSs6XC9cLy9p LnRlc3QoYikpKWM9J2h0dHA6Ly8nK2M7Zi5wdXNoKCc8YSB0YXJnZXQ9Il9ibGFu ayIgcmVsPSJub2ZvbGxvdyIgaHJlZj0iJytjKyciJyk7aWYoZSlmLnB1c2goJyBv bm1vdXNlZG93bj0iVW50cnVzdGVkTGluay5ib290c3RyYXAodGhpcywgXCcnK0Vu di5saHNoKydcJywgZXZlbnQpIicpO2YucHVzaCgnPicrYSsnPC9hPicpO2c9Zy5z dWJzdHJpbmcoZCtiLmxlbmd0aCk7fWcmJmYucHVzaChoKGcpKTtyZXR1cm4gZi5q b2luKCcnKTt9ZnVuY3Rpb24gbmwyYnIoYSl7aWYodHlwZW9mKGEpPT0ndW5kZWZp bmVkJ3x8IWEudG9TdHJpbmcpcmV0dXJuICcnO3JldHVybiBhLnRvU3RyaW5nKCku cmVwbGFjZSgvXG4vZywnPGJyIC8+Jyk7fWZ1bmN0aW9uIGlzX2VtYWlsKGEpe3Jl dHVybiAvXihbXHchLiUrXC1dKStAKFtcd1wtXSkrKD86XC5bXHdcLV0rKSskLy50 ZXN0KGEpO30KaWYod2luZG93PT13aW5kb3cudG9wKSFmdW5jdGlvbigpe3ZhciBh PWZ1bmN0aW9uKCl7dmFyIGI9MDtyZXR1cm4gZnVuY3Rpb24oKXtpZighYil7Yj0x O3NldFRpbWVvdXQoZnVuY3Rpb24oKXtiPTA7dmFyIGM9VmVjdG9yMi5nZXRWaWV3 cG9ydERpbWVuc2lvbnMoKTtzZXRDb29raWUoJ3dkJyxjLngrJ3gnK2MueSk7aWYo d2luZG93LkFzeW5jU2lnbmFsJiZNYXRoLnJhbmRvbSgpPC4wMSluZXcgQXN5bmNT aWduYWwoJy9hamF4L2RpbWVuc2lvbl9jb250ZXh0LnBocCcseyd4JzpjLngsJ3kn OmMueX0pLnNlbmQoKTt9LDEwMCk7fX07fSgpO29ubG9hZFJlZ2lzdGVyKGEpO29u bG9hZFJlZ2lzdGVyKGZ1bmN0aW9uKCl7RXZlbnQubGlzdGVuKHdpbmRvdywncmVz aXplJyxhKTt9KTtvbmxvYWRSZWdpc3RlcihmdW5jdGlvbigpe0V2ZW50Lmxpc3Rl bih3aW5kb3csJ2ZvY3VzJyxhKTt9KTt9KCk7Cl9fZSgiRXJyb3JEaWFsb2ciLFsi RGlhbG9nIl0sZnVuY3Rpb24oZCxmLGUsYyl7dmFyIGE9ZigiRGlhbG9nIik7dmFy IGI9e3Nob3dBc3luY0Vycm9yOmZ1bmN0aW9uKGgpe3RyeXtyZXR1cm4gYi5zaG93 KGguZ2V0RXJyb3JTdW1tYXJ5KCksaC5nZXRFcnJvckRlc2NyaXB0aW9uKCkpO31j YXRjaChnKXthbGVydChoKTt9fSxzaG93OmZ1bmN0aW9uKGosaSxoLGcpe3JldHVy biAobmV3IGEoKSkuc2V0VGl0bGUoaikuc2V0Qm9keShpKS5zZXRCdXR0b25zKFth Lk9LXSkuc2V0U3RhY2thYmxlKHRydWUpLnNldE1vZGFsKHRydWUpLnNldEhhbmRs ZXIoaHx8YmFnb2Zob2xkaW5nKS5zZXRCdXR0b25zTWVzc2FnZShnfHwnJykuc2hv dygpO319O2UuZXhwb3J0cz1iO30pOwpfX2UoImVycm9yLWRpYWxvZyIsWyJFcnJv ckRpYWxvZyJdLGZ1bmN0aW9uKGIsYyl7dmFyIGE9YygnRXJyb3JEaWFsb2cnKTti LkVycm9yRGlhbG9nPWE7fSwzKTsKX19lKCJhcnJheS11dGlscyIsWyJBcnJheVV0 aWxzIiwiaGFzQXJyYXlOYXR1cmUiXSxmdW5jdGlvbihhLGIpe2EuJEE9YignQXJy YXlVdGlscycpLmNyZWF0ZUZyb207YS5oYXNBcnJheU5hdHVyZT1iKCdoYXNBcnJh eU5hdHVyZScpO30sMyk7Cl9fZSgiQ29udGV4dHVhbFRoaW5nIixbImRvbSJdLGZ1 bmN0aW9uKGUsZyxmLGQpe3ZhciBiPWcoImRvbSIpO3ZhciBjPVtdO3ZhciBhPXty ZWdpc3RlcjpmdW5jdGlvbihpLGgpe2EucmVtb3ZlKGkpO2MucHVzaCh7bm9kZTpp LGNvbnRleHQ6aH0pO30scmVtb3ZlOmZ1bmN0aW9uKGkpe2Zvcih2YXIgaD0wO2g8 Yy5sZW5ndGg7aCsrKWlmKGNbaF0ubm9kZT09PWkpe2Muc3BsaWNlKGgsMSk7aC0t O319LGdldENvbnRleHQ6ZnVuY3Rpb24oaSl7dmFyIGg9bnVsbDtjLmZvckVhY2go ZnVuY3Rpb24oail7aWYoYi5jb250YWlucyhqLm5vZGUsaSkpaD1qLmNvbnRleHQ7 fSk7cmV0dXJuIGg7fSxjb250YWluc0luY2x1ZGluZ0xheWVyczpmdW5jdGlvbihp LGgpe3doaWxlKGgpe2lmKGIuY29udGFpbnMoaSxoKSlyZXR1cm4gdHJ1ZTtoPWEu Z2V0Q29udGV4dChoKTt9cmV0dXJuIGZhbHNlO319O2YuZXhwb3J0cz1hO30pOwpf X2UoImNvbnRleHR1YWwtdGhpbmciLFsiQ29udGV4dHVhbFRoaW5nIl0sZnVuY3Rp b24oYSxiKXthLkNvbnRleHR1YWxUaGluZz1hLkNvbnRleHR1YWxUaGluZ3x8Yign Q29udGV4dHVhbFRoaW5nJyk7fSwzKTsKX19lKCJMYXllciIsWyJhcmJpdGVyIiwi Q2xhc3MiLCJjc3MtY29yZSIsImRvbSIsImRvbS1odG1sIiwiZ2V0T3ZlcmxheVpJ bmRleCJdLGZ1bmN0aW9uKGksayxqLGcpe3ZhciBhPWsoImFyYml0ZXIiKTt2YXIg Yz1rKCJDbGFzcyIpO3ZhciBiPWsoImNzcy1jb3JlIik7dmFyIGQ9aygiZG9tIik7 dmFyIGU9aygiZG9tLWh0bWwiKTt2YXIgaD1rKCJnZXRPdmVybGF5WkluZGV4Iik7 ZnVuY3Rpb24gZigpe31jLm1peGluKGYsJ0FyYml0ZXInLHtfcm9vdDpudWxsLF9z aG93bjpmYWxzZSxfaGlkZU9uVHJhbnNpdGlvbjp0cnVlLF90cmFuc2l0aW9uU3Vi c2NyaXB0aW9uOm51bGwsaW5pdDpmdW5jdGlvbihsKXt0aGlzLl9pbnNlcnRQYXJl bnQ9ZG9jdW1lbnQuYm9keTt0aGlzLnNldEhpZGVPblRyYW5zaXRpb24odGhpcy5f aGlkZU9uVHJhbnNpdGlvbik7aWYobCl7dmFyIG49ZC5pc05vZGUobCk7dmFyIG09 dHlwZW9mIGw9PT0nc3RyaW5nJ3x8ZS5pc0hUTUwobCk7aWYobSlsPWUobCkuZ2V0 Um9vdE5vZGUoKTt9dGhpcy5fcm9vdD10aGlzLl9idWlsZFdyYXBwZXIobCk7cmV0 dXJuIHRoaXM7fSxfYnVpbGRXcmFwcGVyOmZ1bmN0aW9uKGwpe3JldHVybiBsO30s c2V0SGlkZU9uVHJhbnNpdGlvbjpmdW5jdGlvbihsKXtpZihsKXtpZighdGhpcy5f dHJhbnNpdGlvblN1YnNjcmlwdGlvbil0aGlzLl90cmFuc2l0aW9uU3Vic2NyaXB0 aW9uPWEuc3Vic2NyaWJlKCdwYWdlX3RyYW5zaXRpb24nLHRoaXMuaGlkZS5zaGll bGQodGhpcyksYS5TVUJTQ1JJQkVfTkVXKTt9ZWxzZSBpZih0aGlzLl90cmFuc2l0 aW9uU3Vic2NyaXB0aW9uKXthLnVuc3Vic2NyaWJlKHRoaXMuX3RyYW5zaXRpb25T dWJzY3JpcHRpb24pO3RoaXMuX3RyYW5zaXRpb25TdWJzY3JpcHRpb249bnVsbDt9 dGhpcy5faGlkZU9uVHJhbnNpdGlvbj1sO3JldHVybiB0aGlzO30sc2V0UGFyZW50 OmZ1bmN0aW9uKGwpe2w9bHx8ZG9jdW1lbnQuYm9keTtpZihsIT10aGlzLl9pbnNl cnRQYXJlbnQpe3RoaXMuX2luc2VydFBhcmVudD1sO2lmKHRoaXMuX3Nob3duKXtk LmFwcGVuZENvbnRlbnQodGhpcy5faW5zZXJ0UGFyZW50LHRoaXMuX3Jvb3QpO3Ro aXMudXBkYXRlUG9zaXRpb24oKTt9fXJldHVybiB0aGlzO30sX3N0YWNrT25Ub3BP ZjpmdW5jdGlvbihsKXtpZihsKXt2YXIgbT1oKGwsdGhpcy5faW5zZXJ0UGFyZW50 KTtiLnNldFN0eWxlKHRoaXMuX3Jvb3QsJ3otaW5kZXgnLG0+MjAwP206JycpO319 LHNob3c6ZnVuY3Rpb24oKXtiLmFkZENsYXNzKHRoaXMuX3Jvb3QsJ2ludmlzaWJs ZV9lbGVtJyk7ZC5hcHBlbmRDb250ZW50KHRoaXMuX2luc2VydFBhcmVudCx0aGlz Ll9yb290KTtpZih0aGlzLnVwZGF0ZVBvc2l0aW9uKCkhPT1mYWxzZSl7dGhpcy5p bmZvcm0oJ3Nob3cnKTt0aGlzLl9zaG93bj10cnVlO31lbHNlIGQucmVtb3ZlKHRo aXMuX3Jvb3QpO2IucmVtb3ZlQ2xhc3ModGhpcy5fcm9vdCwnaW52aXNpYmxlX2Vs ZW0nKTtyZXR1cm4gdGhpczt9LGhpZGU6ZnVuY3Rpb24oKXtkLnJlbW92ZSh0aGlz Ll9yb290KTt0aGlzLmluZm9ybSgnaGlkZScpO3RoaXMuX3Nob3duPWZhbHNlO3Jl dHVybiB0aGlzO30sdXBkYXRlUG9zaXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdHJ1 ZTt9LGRlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmhpZGUoKTt0aGlzLmluZm9ybSgn ZGVzdHJveScpO3RoaXMuX3Jvb3Q9bnVsbDthLnVuc3Vic2NyaWJlKHRoaXMuX3Ry YW5zaXRpb25TdWJzY3JpcHRpb24pO3RoaXMuX3RyYW5zaXRpb25TdWJzY3JpcHRp b249bnVsbDt9fSk7ai5leHBvcnRzPWY7fSk7Cl9fZSgibGF5ZXIiLFsiTGF5ZXIi XSxmdW5jdGlvbihhLGIpe2EuTGF5ZXI9YignTGF5ZXInKTt9LDMpOwpmdW5jdGlv biBPdmVybGF5KCl7cmV0dXJuIHRoaXMucGFyZW50LmNvbnN0cnVjdCh0aGlzKTt9 Q2xhc3MuZXh0ZW5kKE92ZXJsYXksJ0xheWVyJyk7IWZ1bmN0aW9uKCl7dmFyIGE9 bnVsbDtmdW5jdGlvbiBiKGQsZSl7dmFyIGM7ZC5zdWJzY3JpYmUoJ3Nob3cnLGZ1 bmN0aW9uKCl7Yz1FdmVudC5saXN0ZW4oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50 LCdrZXlkb3duJyxmdW5jdGlvbihldmVudCl7aWYoZXZlbnQua2V5Q29kZT09S0VZ Uy5FU0MmJihkb2N1bWVudC5hY3RpdmVFbGVtZW50PT1kb2N1bWVudC5ib2R5fHxE T00uY29udGFpbnMoZSxkb2N1bWVudC5hY3RpdmVFbGVtZW50KSkpZC5oaWRlKCk7 fSk7fSk7ZC5zdWJzY3JpYmUoJ2hpZGUnLGZ1bmN0aW9uKCl7Yy5yZW1vdmUoKTtj PW51bGw7fSk7fWNvcHlfcHJvcGVydGllcyhPdmVybGF5LHtnZXRJbnN0YW5jZTpm dW5jdGlvbihjKXt2YXIgZD1QYXJlbnQuYnlDbGFzcyhjLCd1aU92ZXJsYXknKTty ZXR1cm4gZD9EYXRhU3RvcmUuZ2V0KGQsJ292ZXJsYXknKTpudWxsO30sQVJST1df T0ZGU0VUOjE1LEFSUk9XX0xFTkdUSDoxNixBUlJPV19DTEFTUzp7Ym90dG9tOid1 aU92ZXJsYXlBcnJvd0JvdHRvbScsdG9wOid1aU92ZXJsYXlBcnJvd1RvcCcscmln aHQ6J3VpT3ZlcmxheUFycm93UmlnaHQnLGxlZnQ6J3VpT3ZlcmxheUFycm93TGVm dCd9fSk7T3ZlcmxheS5wcm90b3R5cGU9e19zaG91bGRCdWlsZFdyYXBwZXI6dHJ1 ZSxfaGlkZU9uU3VibWl0OmZhbHNlLF9oaWRlT25TdWNjZXNzOnRydWUsX2ZhZGVP blNob3c6dHJ1ZSxfZmFkZU9uSGlkZTp0cnVlLF9oYXNGb290ZXI6ZmFsc2UsZGVz dHJveU9uSGlkZTp0cnVlLGluaXQ6ZnVuY3Rpb24oYyl7dGhpcy5wYXJlbnQuaW5p dChjKTt0aGlzLl9hcnJvdz1ET00uc2NyeSh0aGlzLl9yb290LCcudWlPdmVybGF5 QXJyb3cnKVswXXx8bnVsbDt0aGlzLl9vdmVybGF5PURPTS5zY3J5KHRoaXMuX3Jv b3QsJ2Rpdi51aU92ZXJsYXknKVswXXx8dGhpcy5fcm9vdDtDU1MuaGlkZSh0aGlz Ll9yb290KTtET00uYXBwZW5kQ29udGVudCh0aGlzLl9pbnNlcnRQYXJlbnQsdGhp cy5fcm9vdCk7RGF0YVN0b3JlLnNldCh0aGlzLl9vdmVybGF5LCdvdmVybGF5Jyx0 aGlzKTt2YXIgZD1EYXRhU3RvcmUuZ2V0KHRoaXMuX292ZXJsYXksJ3dpZHRoJyk7 ZCYmdGhpcy5zZXRXaWR0aChkKTt0aGlzLnNldEhpZGVPblN1Ym1pdChEYXRhU3Rv cmUuZ2V0KHRoaXMuX292ZXJsYXksJ2hpZGVvbnN1Ym1pdCcpPT0ndHJ1ZScpO3Ro aXMuc2V0SGlkZU9uU3VjY2VzcyhEYXRhU3RvcmUuZ2V0KHRoaXMuX292ZXJsYXks J2hpZGVvbnN1Y2Nlc3MnKSE9J2ZhbHNlJyk7dGhpcy5zZXRGYWRlT25TaG93KERh dGFTdG9yZS5nZXQodGhpcy5fb3ZlcmxheSwnZmFkZW9uc2hvdycpIT0nZmFsc2Un KTt0aGlzLnNldEZhZGVPbkhpZGUoRGF0YVN0b3JlLmdldCh0aGlzLl9vdmVybGF5 LCdmYWRlb25oaWRlJykhPSdmYWxzZScpO3RoaXMuc2V0SGlkZU9uQmx1cihEYXRh U3RvcmUuZ2V0KHRoaXMuX292ZXJsYXksJ2hpZGVvbmJsdXInKT09J3RydWUnKTt0 aGlzLnNldERlc3Ryb3lPbkhpZGUoRGF0YVN0b3JlLmdldCh0aGlzLl9vdmVybGF5 LCdkZXN0cm95b25oaWRlJykhPSdmYWxzZScpO3RoaXMuc2V0Rml4ZWQoRGF0YVN0 b3JlLmdldCh0aGlzLl9vdmVybGF5LCdmaXhlZCcpPT0ndHJ1ZScpO3RoaXMuX2hh c0Zvb3Rlcj1EYXRhU3RvcmUuZ2V0KHRoaXMuX292ZXJsYXksJ2hhc2Zvb3Rlcics ZmFsc2UpO0V2ZW50Lmxpc3Rlbih0aGlzLl9vdmVybGF5LHtjbGljazp0aGlzLmNs aWNrLmJpbmQodGhpcyksc3VibWl0OnRoaXMuc3VibWl0LmJpbmQodGhpcyksc3Vj Y2Vzczp0aGlzLl9vbnN1Y2Nlc3MuYmluZCh0aGlzKSxlcnJvcjp0aGlzLl9vbmVy cm9yLmJpbmQodGhpcyksbW91c2VlbnRlcjp0aGlzLl9vbk1vdXNlRW50ZXIuYmlu ZCh0aGlzKSxtb3VzZWxlYXZlOnRoaXMuX29uTW91c2VMZWF2ZS5iaW5kKHRoaXMp fSk7QXJiaXRlci5zdWJzY3JpYmUoJ092ZXJsYXkvc2hvdycsZnVuY3Rpb24oZSxm KXtpZihmLm92ZXJsYXkuZ2V0Q29udGV4dCl0aGlzLl9vbkxheWVyU2hvdyhmLm92 ZXJsYXkuZ2V0Q29udGV4dCgpKTt9LmJpbmQodGhpcykpO0FyYml0ZXIuc3Vic2Ny aWJlKCdPdmVybGF5L2hpZGUnLGZ1bmN0aW9uKGUsZil7aWYoZi5vdmVybGF5Lmdl dENvbnRleHQpdGhpcy5fb25MYXllckhpZGUoZi5vdmVybGF5LmdldENvbnRleHQo KSk7fS5iaW5kKHRoaXMpKTtiKHRoaXMsdGhpcy5fcm9vdCk7cmV0dXJuIHRoaXM7 fSxpbml0V2l0aG91dEJ1aWxkaW5nV3JhcHBlcjpmdW5jdGlvbigpe3RoaXMuX3No b3VsZEJ1aWxkV3JhcHBlcj1mYWxzZTtyZXR1cm4gdGhpcy5pbml0LmFwcGx5KHRo aXMsYXJndW1lbnRzKTt9LF9idWlsZFdyYXBwZXI6ZnVuY3Rpb24oYyl7Yz10aGlz LnBhcmVudC5fYnVpbGRXcmFwcGVyKGMpO2lmKCF0aGlzLl9zaG91bGRCdWlsZFdy YXBwZXIpcmV0dXJuIGM7dmFyIGQ9JE4oJ2Rpdicse2NsYXNzTmFtZTondWlPdmVy bGF5Q29udGVudCd9LGMpO3JldHVybiAkTignZGl2Jyx7Y2xhc3NOYW1lOid1aU92 ZXJsYXknfSxkKTt9LHNldEhpZGVPbkJsdXI6ZnVuY3Rpb24oYyl7aWYoIWMmJnRo aXMuX2hpZGVPbkJsdXJUb2tlbil7dGhpcy5fcmVtb3ZlSGlkZU9uQmx1ckxpc3Rl bmVyKCk7dGhpcy51bnN1YnNjcmliZSh0aGlzLl9oaWRlT25CbHVyVG9rZW4pO3Ro aXMuX2hpZGVPbkJsdXJUb2tlbj1udWxsO31lbHNlIGlmKGMmJiF0aGlzLl9oaWRl T25CbHVyVG9rZW4pe3ZhciBkPXRoaXM7dmFyIGU9ZnVuY3Rpb24oKXsoZnVuY3Rp b24oKXtkLl9oaWRlT25CbHVyTGlzdGVuZXI9RXZlbnQubGlzdGVuKGRvY3VtZW50 LmRvY3VtZW50RWxlbWVudCwnY2xpY2snLGZ1bmN0aW9uKGV2ZW50KXtpZighQ29u dGV4dHVhbFRoaW5nLmNvbnRhaW5zSW5jbHVkaW5nTGF5ZXJzKGQuX292ZXJsYXks ZXZlbnQuZ2V0VGFyZ2V0KCkpKWQuc2V0RmFkZU9uSGlkZShmYWxzZSkuaGlkZSgp O30pO30pLmRlZmVyKCk7fTt0aGlzLnN1YnNjcmliZSgnaGlkZScsdGhpcy5fcmVt b3ZlSGlkZU9uQmx1ckxpc3RlbmVyLmJpbmQodGhpcykpO3RoaXMuX2hpZGVPbkJs dXJUb2tlbj10aGlzLnN1YnNjcmliZSgnc2hvdycsZSk7dGhpcy5fc2hvd24mJmUo KTt9cmV0dXJuIHRoaXM7fSxfcmVtb3ZlSGlkZU9uQmx1ckxpc3RlbmVyOmZ1bmN0 aW9uKCl7dGhpcy5faGlkZU9uQmx1ckxpc3RlbmVyJiZ0aGlzLl9oaWRlT25CbHVy TGlzdGVuZXIucmVtb3ZlKCk7dGhpcy5faGlkZU9uQmx1ckxpc3RlbmVyPW51bGw7 fSxzZXREZXN0cm95T25IaWRlOmZ1bmN0aW9uKGMpe3RoaXMuZGVzdHJveU9uSGlk ZT1jO3JldHVybiB0aGlzO30sc2V0SGlkZU9uU3VibWl0OmZ1bmN0aW9uKGMpe3Ro aXMuX2hpZGVPblN1Ym1pdD1jO3JldHVybiB0aGlzO30sc2V0SGlkZU9uU3VjY2Vz czpmdW5jdGlvbihjKXt0aGlzLl9oaWRlT25TdWNjZXNzPWM7cmV0dXJuIHRoaXM7 fSxzZXRGYWRlT25TaG93OmZ1bmN0aW9uKGMpe3RoaXMuX2ZhZGVPblNob3c9Yzty ZXR1cm4gdGhpczt9LHNldEZhZGVPbkhpZGU6ZnVuY3Rpb24oYyl7dGhpcy5fZmFk ZU9uSGlkZT1jO3JldHVybiB0aGlzO30sc2V0V2lkdGg6ZnVuY3Rpb24oYyl7dGhp cy53aWR0aD1wYXJzZUludChjLDEwKTtyZXR1cm4gdGhpczt9LHNldEZpeGVkOmZ1 bmN0aW9uKGMpe3RoaXMuZml4ZWQ9YztyZXR1cm4gdGhpczt9LGdldE92ZXJsYXk6 ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb3ZlcmxheTt9LHNob3c6ZnVuY3Rpb24o KXtpZighdGhpcy5fc2hvd24pe0NTUy5zaG93KHRoaXMuX3Jvb3QpO2lmKHRoaXMu X2ZhZGVPblNob3chPT1mYWxzZSl7Q1NTLnNldFN0eWxlKHRoaXMuX292ZXJsYXks J29wYWNpdHknLDApO3RoaXMucGFyZW50LnNob3coKTthbmltYXRpb24odGhpcy5f b3ZlcmxheSkuZnJvbSgnb3BhY2l0eScsMCkudG8oJ29wYWNpdHknLDEpLmR1cmF0 aW9uKDEwMCkub25kb25lKENTUy5zZXRTdHlsZS5jdXJyeSh0aGlzLl9vdmVybGF5 LCdvcGFjaXR5JywnJykpLmdvKCk7fWVsc2UgdGhpcy5wYXJlbnQuc2hvdygpO0Fy Yml0ZXIuaW5mb3JtKCdsYXllcl9zaG93bicse3R5cGU6J092ZXJsYXknfSk7QXJi aXRlci5pbmZvcm0oJ092ZXJsYXkvc2hvdycse292ZXJsYXk6dGhpc30pO31yZXR1 cm4gdGhpczt9LHVwZGF0ZVBvc2l0aW9uOmZ1bmN0aW9uKCl7aWYodGhpcy53aWR0 aClDU1Muc2V0U3R5bGUodGhpcy5fb3ZlcmxheSwnd2lkdGgnLHRoaXMud2lkdGgr J3B4Jyk7cmV0dXJuIHRydWU7fSxoaWRlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX3No b3dufHx0aGlzLmluZm9ybSgnYmVmb3JlaGlkZScpPT09ZmFsc2UpcmV0dXJuIHRo aXM7dGhpcy5fc2hvd249ZmFsc2U7aWYodGhpcy5fZmFkZU9uSGlkZSE9PWZhbHNl KXthbmltYXRpb24odGhpcy5fb3ZlcmxheSkuZnJvbSgnb3BhY2l0eScsMSkudG8o J29wYWNpdHknLDApLmR1cmF0aW9uKDI1MCkub25kb25lKHRoaXMuX2ZpbmlzaEhp ZGUuYmluZCh0aGlzKSkuZ28oKTt9ZWxzZSB0aGlzLl9maW5pc2hIaWRlKCk7cmV0 dXJuIHRoaXM7fSxfZmluaXNoSGlkZTpmdW5jdGlvbigpe3RoaXMucGFyZW50Lmhp ZGUoKTtBcmJpdGVyLmluZm9ybSgnbGF5ZXJfaGlkZGVuJyx7dHlwZTonT3Zlcmxh eSd9KTtBcmJpdGVyLmluZm9ybSgnT3ZlcmxheS9oaWRlJyx7b3ZlcmxheTp0aGlz fSk7dGhpcy5kZXN0cm95T25IaWRlJiZ0aGlzLmRlc3Ryb3koKTt9LHJlbmRlckFy cm93OmZ1bmN0aW9uKGYsZCl7Zm9yKHZhciBlIGluIE92ZXJsYXkuQVJST1dfQ0xB U1MpQ1NTLmNvbmRpdGlvbkNsYXNzKHRoaXMuX292ZXJsYXksT3ZlcmxheS5BUlJP V19DTEFTU1tlXSxmPT1lKTtDU1MuY29uZGl0aW9uQ2xhc3ModGhpcy5fb3Zlcmxh eSwndWlPdmVybGF5V2l0aEZvb3RlckFycm93Qm90dG9tJyxmPT0nYm90dG9tJyYm dGhpcy5faGFzRm9vdGVyKTtpZihmPT0nbm9uZScpcmV0dXJuO2lmKCF0aGlzLl9h cnJvdyl7dGhpcy5fYXJyb3c9JE4oJ2knLHtjbGFzc05hbWU6J3VpT3ZlcmxheUFy cm93J30pO0RPTS5hcHBlbmRDb250ZW50KHRoaXMuX292ZXJsYXksdGhpcy5fYXJy b3cpO31DU1Muc2V0U3R5bGUodGhpcy5fYXJyb3csJ3RvcCcsJycpO0NTUy5zZXRT dHlsZSh0aGlzLl9hcnJvdywnbGVmdCcsJycpO0NTUy5zZXRTdHlsZSh0aGlzLl9h cnJvdywncmlnaHQnLCcnKTtDU1Muc2V0U3R5bGUodGhpcy5fYXJyb3csJ21hcmdp bicsJycpO3ZhciBoPWY9PSd0b3AnfHxmPT0nYm90dG9tJzt2YXIgZz1oPyhpbnRs X2xvY2FsZV9pc19ydGwoKT8ncmlnaHQnOidsZWZ0Jyk6J3RvcCc7ZD1kfHwwO0NT Uy5zZXRTdHlsZSh0aGlzLl9hcnJvdyxnLGQrJyUnKTt2YXIgYz1PdmVybGF5LkFS Uk9XX0xFTkdUSCtPdmVybGF5LkFSUk9XX09GRlNFVCoyO0NTUy5zZXRTdHlsZSh0 aGlzLl9hcnJvdywnbWFyZ2luLScrZywtKGMqZC8xMDAtT3ZlcmxheS5BUlJPV19P RkZTRVQpKydweCcpO30sZGVzdHJveTpmdW5jdGlvbigpe0RhdGFTdG9yZS5yZW1v dmUodGhpcy5fcm9vdCwnb3ZlcmxheScpO3RoaXMucGFyZW50LmRlc3Ryb3koKTt9 LGNsaWNrOmZ1bmN0aW9uKGQpe3ZhciBlPWQuZ2V0VGFyZ2V0KCk7dmFyIGM9UGFy ZW50LmJ5VGFnKGUsJ2lucHV0Jyl8fFBhcmVudC5ieVRhZyhlLCdidXR0b24nKXx8 UGFyZW50LmJ5VGFnKGUsJ2EnKTtpZihjKXthPWM7aWYoQ1NTLmhhc0NsYXNzKGMs J3VpT3ZlcmxheUNhbmNlbEJ1dHRvbicpKXtpZih0aGlzLmluZm9ybSgnY2FuY2Vs JykhPT1mYWxzZSl0aGlzLmhpZGUoKTtkLnByZXZlbnQoKTt9fX0sc3VibWl0OmZ1 bmN0aW9uKGMpe3ZhciBkPWMuZ2V0VGFyZ2V0KCk7aWYodGhpcy5pbmZvcm0oJ3N1 Ym1pdCcpPT09ZmFsc2Upe2Mua2lsbCgpO3JldHVybjt9dmFyIGU9KEZvcm0uZ2V0 QXR0cmlidXRlKGQsJ3JlbCcpPT09J2FzeW5jJyk7aWYoIWUpe3JldHVybiB0aGlz Ll9vbnN1Y2Nlc3MoYyk7fWVsc2UgaWYodGhpcy5faGlkZU9uU3VibWl0KXRoaXMu aGlkZSgpO30sX29uc3VjY2VzczpmdW5jdGlvbihjKXtpZih0aGlzLmluZm9ybSgn c3VjY2VzcycpIT09ZmFsc2UmJnRoaXMuX2hpZGVPblN1Y2Nlc3MpdGhpcy5oaWRl KCk7fSxfb25lcnJvcjpmdW5jdGlvbihjKXt2YXIgZD1jLmdldERhdGEoKTtpZih0 aGlzLmluZm9ybSgnZXJyb3InLHtyZXNwb25zZTpkLnJlc3BvbnNlfSk9PT1mYWxz ZSljLmtpbGwoKTt9LF9vbk1vdXNlRW50ZXI6ZnVuY3Rpb24oKXt0aGlzLl9maXJl TW91c2VMZWF2ZU9uTGF5ZXJIaWRlPWZhbHNlO2lmKCF0aGlzLl9sYXllck5vZGUp dGhpcy5pbmZvcm0oJ21vdXNlZW50ZXInKTt9LF9vbk1vdXNlTGVhdmU6ZnVuY3Rp b24oKXtpZighdGhpcy5fbGF5ZXJOb2RlKXRoaXMuaW5mb3JtKCdtb3VzZWxlYXZl Jyk7dGhpcy5fZmlyZU1vdXNlTGVhdmVPbkxheWVySGlkZT0hIXRoaXMuX2xheWVy Tm9kZTt9LF9vbkxheWVyU2hvdzpmdW5jdGlvbihjKXtpZihjJiZET00uY29udGFp bnModGhpcy5fcm9vdCxjKSl0aGlzLl9sYXllck5vZGU9Yzt9LF9vbkxheWVySGlk ZTpmdW5jdGlvbihjKXtpZihjJiZ0aGlzLl9sYXllck5vZGU9PT1jKXt0aGlzLl9s YXllck5vZGU9bnVsbDtpZih0aGlzLl9maXJlTW91c2VMZWF2ZU9uTGF5ZXJIaWRl KXRoaXMuX29uTW91c2VMZWF2ZS5iaW5kKHRoaXMpLmRlZmVyKCk7fX19O30oKTsK ZnVuY3Rpb24gQ29udGV4dHVhbERpYWxvZ1goKXt0aGlzLnBhcmVudC5jb25zdHJ1 Y3QodGhpcyk7cmV0dXJuIHRoaXM7fUNsYXNzLmV4dGVuZChDb250ZXh0dWFsRGlh bG9nWCwnT3ZlcmxheScpO2NvcHlfcHJvcGVydGllcyhDb250ZXh0dWFsRGlhbG9n WCx7QVJST1dfSU5TRVQ6MjIsVE9QX01BUkdJTjo4LEJPVFRPTV9NQVJHSU46MzAs SEFMT19XSURUSDowLFBPU0lUSU9OX1RPX0NMQVNTOnthYm92ZTondWlDb250ZXh0 dWFsRGlhbG9nQWJvdmUnLGJlbG93Oid1aUNvbnRleHR1YWxEaWFsb2dCZWxvdycs bGVmdDondWlDb250ZXh0dWFsRGlhbG9nTGVmdCcscmlnaHQ6J3VpQ29udGV4dHVh bERpYWxvZ1JpZ2h0J30sUklHSFRfQUxJR05FRF9DTEFTUzondWlDb250ZXh0dWFs RGlhbG9nUmlnaHRBbGlnbmVkJyxQT1NJVElPTl9UT19BUlJPVzp7YWJvdmU6J2Jv dHRvbScsYmVsb3c6J3RvcCcsbGVmdDoncmlnaHQnLHJpZ2h0OidsZWZ0J30sZ2V0 SW5zdGFuY2U6ZnVuY3Rpb24oYil7dmFyIGE9RGF0YVN0b3JlLmdldChiLCdDb250 ZXh0dWFsRGlhbG9nWCcpO2lmKCFhKXt2YXIgYz1QYXJlbnQuYnlDbGFzcyhiLCd1 aUNvbnRleHR1YWxEaWFsb2cnKTthPWMmJk92ZXJsYXkuZ2V0SW5zdGFuY2UoYyk7 fXJldHVybiBhO319KTtDb250ZXh0dWFsRGlhbG9nWC5wcm90b3R5cGU9e19zY3Jv bGxMaXN0ZW5lcjpudWxsLGluaXQ6ZnVuY3Rpb24oYyl7dGhpcy5wYXJlbnQuaW5p dChjKTt2YXIgYj1EYXRhU3RvcmUuZ2V0LmN1cnJ5KHRoaXMuX3Jvb3QpO3RoaXMu c2V0QWxpZ25IKGIoJ2FsaWduaCcsJ2xlZnQnKSk7dGhpcy5zZXRPZmZzZXRYKGIo J29mZnNldHgnLDApKTt0aGlzLnNldE9mZnNldFkoYignb2Zmc2V0eScsMCkpO3Ro aXMuc2V0UG9zaXRpb24oYigncG9zaXRpb24nLCdhYm92ZScpKTt2YXIgYT1iKCdj b250ZXh0Jyk7aWYoYSl7dGhpcy5zZXRDb250ZXh0KCQoYSkpO31lbHNle2E9Yign Y29udGV4dHNlbGVjdG9yJyk7aWYoYSl0aGlzLnNldENvbnRleHQoRE9NLmZpbmQo ZG9jdW1lbnQsYSkpO310aGlzLl9jb250ZW50PURPTS5zY3J5KHRoaXMuX3Jvb3Qs Jy51aUNvbnRleHR1YWxEaWFsb2dDb250ZW50JylbMF07dmFyIGU9bnVsbDt2YXIg ZD1udWxsO3RoaXMuc3Vic2NyaWJlKCdzaG93JyxmdW5jdGlvbigpe3ZhciBmPXRo aXMudXBkYXRlUG9zaXRpb24uc2hpZWxkKHRoaXMpO2U9RXZlbnQubGlzdGVuKHdp bmRvdywncmVzaXplJyxmKTtkPUFyYml0ZXIuc3Vic2NyaWJlKCdyZWZsb3cnLGYp O3RoaXMuX3NldHVwU2Nyb2xsTGlzdGVuZXIodGhpcy5fc2Nyb2xsUGFyZW50KTtD b250ZXh0dWFsVGhpbmcucmVnaXN0ZXIodGhpcy5fcm9vdCx0aGlzLmNvbnRleHQp O30uYmluZCh0aGlzKSk7dGhpcy5zdWJzY3JpYmUoJ2hpZGUnLGZ1bmN0aW9uKCl7 ZS5yZW1vdmUoKTtBcmJpdGVyLnVuc3Vic2NyaWJlKGQpO3RoaXMuX3RlYXJkb3du U2Nyb2xsTGlzdGVuZXIoKTtDb250ZXh0dWFsVGhpbmcucmVtb3ZlKHRoaXMuX3Jv b3QpO30uYmluZCh0aGlzKSk7QXJiaXRlci5zdWJzY3JpYmUoJ0hvdmVyY2FyZC9o aWRlJyxmdW5jdGlvbihmLGcpe2lmKEhvdmVyY2FyZC5jb250YWlucyh0aGlzLmdl dENvbnRleHQoKSkpdGhpcy5oaWRlKCk7fS5iaW5kKHRoaXMpKTtyZXR1cm4gdGhp czt9LF9idWlsZFdyYXBwZXI6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5wYXJlbnQu X2J1aWxkV3JhcHBlcihhKTtpZighdGhpcy5fc2hvdWxkQnVpbGRXcmFwcGVyKXJl dHVybiBiO0NTUy5hZGRDbGFzcyhiLCd1aUNvbnRleHR1YWxEaWFsb2cnKTtyZXR1 cm4gJE4oJ2Rpdicse2NsYXNzTmFtZTondWlDb250ZXh0dWFsRGlhbG9nUG9zaXRp b25lcid9LGIpO30sc2V0QWxpZ25IOmZ1bmN0aW9uKGEpe3RoaXMuYWxpZ25IPWE7 dGhpcy5fdXBkYXRlQWxpZ25tZW50Q2xhc3MoKTt0aGlzLl9zaG93biYmdGhpcy51 cGRhdGVQb3NpdGlvbigpO3RoaXMucG9zaXRpb24mJnRoaXMuX3VwZGF0ZUFycm93 KCk7cmV0dXJuIHRoaXM7fSxnZXRDb250ZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRo aXMuX2NvbnRlbnQ7fSxnZXRDb250ZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu Y29udGV4dDt9LHNldENvbnRleHQ6ZnVuY3Rpb24oYSl7YT0kKGEpO2lmKHRoaXMu Y29udGV4dCYmdGhpcy5jb250ZXh0IT1hKURhdGFTdG9yZS5yZW1vdmUodGhpcy5j b250ZXh0LCdDb250ZXh0dWFsRGlhbG9nWCcpO3RoaXMuY29udGV4dD1hO3ZhciBi PVBhcmVudC5ieUNsYXNzKGEsJ2ZiUGhvdG9Tbm93Ym94Jyk7dGhpcy5zZXRQYXJl bnQoYnx8ZG9jdW1lbnQuYm9keSk7aWYodGhpcy5fc2Nyb2xsTGlzdGVuZXImJnRo aXMuX3Njcm9sbFBhcmVudCE9PWIpe3RoaXMuX3RlYXJkb3duU2Nyb2xsTGlzdGVu ZXIoKTt0aGlzLl9zZXR1cFNjcm9sbExpc3RlbmVyKGIpO310aGlzLl9zY3JvbGxQ YXJlbnQ9Yjt0aGlzLl9zdGFja09uVG9wT2YodGhpcy5jb250ZXh0KTtEYXRhU3Rv cmUuc2V0KHRoaXMuY29udGV4dCwnQ29udGV4dHVhbERpYWxvZ1gnLHRoaXMpO3Jl dHVybiB0aGlzO30sbGlzdGVuOmZ1bmN0aW9uKGIsYSl7cmV0dXJuIEV2ZW50Lmxp c3Rlbih0aGlzLl9yb290LGIsYSk7fSxzZXRGaXhlZDpmdW5jdGlvbihhKXtDU1Mu Y29uZGl0aW9uQ2xhc3ModGhpcy5fcm9vdCwndWlDb250ZXh0dWFsRGlhbG9nRml4 ZWQnLGEpO3JldHVybiB0aGlzLnBhcmVudC5zZXRGaXhlZChhKTt9LHNldE9mZnNl dFg6ZnVuY3Rpb24oYSl7dGhpcy5vZmZzZXRYPXBhcnNlSW50KGEsMTApfHwwO3Ro aXMuX3Nob3duJiZ0aGlzLnVwZGF0ZVBvc2l0aW9uKCk7cmV0dXJuIHRoaXM7fSxz ZXRPZmZzZXRZOmZ1bmN0aW9uKGEpe3RoaXMub2Zmc2V0WT1wYXJzZUludChhLDEw KXx8MDt0aGlzLl9zaG93biYmdGhpcy51cGRhdGVQb3NpdGlvbigpO3JldHVybiB0 aGlzO30sc2V0UG9zaXRpb246ZnVuY3Rpb24oYil7dGhpcy5wb3NpdGlvbj1iO2Zv cih2YXIgYSBpbiBDb250ZXh0dWFsRGlhbG9nWC5QT1NJVElPTl9UT19DTEFTUylD U1MuY29uZGl0aW9uQ2xhc3ModGhpcy5fcm9vdCxDb250ZXh0dWFsRGlhbG9nWC5Q T1NJVElPTl9UT19DTEFTU1thXSxiPT1hKTt0aGlzLl91cGRhdGVBbGlnbm1lbnRD bGFzcygpO3RoaXMuX3Nob3duJiZ0aGlzLnVwZGF0ZVBvc2l0aW9uKCk7dGhpcy5f dXBkYXRlQXJyb3coKTtyZXR1cm4gdGhpczt9LHVwZGF0ZVBvc2l0aW9uOmZ1bmN0 aW9uKCl7aWYoIXRoaXMuY29udGV4dClyZXR1cm4gZmFsc2U7dGhpcy5wYXJlbnQu dXBkYXRlUG9zaXRpb24oKTt2YXIgYz10aGlzLmZpeGVkPyd2aWV3cG9ydCc6J2Rv Y3VtZW50Jzt2YXIgZz1WZWN0b3IyLmdldEVsZW1lbnRQb3NpdGlvbih0aGlzLmNv bnRleHQsYyk7dmFyIGg9dGhpcy5fc2Nyb2xsUGFyZW50O2lmKGgpZz1nLnN1YihW ZWN0b3IyLmdldEVsZW1lbnRQb3NpdGlvbihoLCdkb2N1bWVudCcpKS5hZGQoaC5z Y3JvbGxMZWZ0LGguc2Nyb2xsVG9wKTt2YXIgYT1WZWN0b3IyLmdldEVsZW1lbnRE aW1lbnNpb25zKHRoaXMuY29udGV4dCk7dmFyIGs9dGhpcy5wb3NpdGlvbj09J2Fi b3ZlJ3x8dGhpcy5wb3NpdGlvbj09J2JlbG93Jzt2YXIgZD1pbnRsX2xvY2FsZV9p c19ydGwoKTtpZigodGhpcy5wb3NpdGlvbj09J3JpZ2h0J3x8KGsmJnRoaXMuYWxp Z25IPT0ncmlnaHQnKSkhPWQpZz1nLmFkZChhLngsMCk7aWYodGhpcy5wb3NpdGlv bj09J2JlbG93JylnPWcuYWRkKDAsYS55KTt2YXIgZj1uZXcgVmVjdG9yMigwLDAp O3ZhciBiPXRoaXMud2lkdGgrMipDb250ZXh0dWFsRGlhbG9nWC5IQUxPX1dJRFRI O2lmKGsmJnRoaXMuYWxpZ25IPT0nY2VudGVyJyl7Zj1mLmFkZCgoYS54LWIpLzIs MCk7fWVsc2V7Zj1mLnN1YihrP0NvbnRleHR1YWxEaWFsb2dYLkhBTE9fV0lEVEg6 MCxrPzA6Q29udGV4dHVhbERpYWxvZ1guSEFMT19XSURUSCk7dmFyIGo9az9hLng6 YS55O3ZhciBlPTIqKENvbnRleHR1YWxEaWFsb2dYLkFSUk9XX0lOU0VUK0NvbnRl eHR1YWxEaWFsb2dYLkhBTE9fV0lEVEgpO2lmKGo8ZSl7dmFyIGk9ai8yLUNvbnRl eHR1YWxEaWFsb2dYLkFSUk9XX0lOU0VUO2Y9Zi5hZGQoaz9pOjAsaz8wOmkpO319 Zj1mLmFkZCh0aGlzLm9mZnNldFgsdGhpcy5vZmZzZXRZKTtpZihkKWY9Zi5tdWwo LTEsMSk7Zz1nLmFkZChmKTtpZih0aGlzLmZpeGVkKWc9bmV3IFZlY3RvcjIoZy54 LGcueSwnZG9jdW1lbnQnKTtnLnNldEVsZW1lbnRQb3NpdGlvbih0aGlzLl9yb290 KTt0aGlzLl9hZGp1c3RWZXJ0aWNhbFBvc2l0aW9uKCk7cmV0dXJuIHRydWU7fSxz Y3JvbGxUbzpmdW5jdGlvbigpe2lmKHRoaXMuY29udGV4dClCb290bG9hZGVyLmxv YWRDb21wb25lbnRzKCdkb20tc2Nyb2xsJyxmdW5jdGlvbigpe0RPTVNjcm9sbC5z Y3JvbGxUbyh0aGlzLmNvbnRleHQsdHJ1ZSx0cnVlKTt9LmJpbmQodGhpcykpO30s ZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuY29udGV4dCYmRGF0YVN0b3JlLnJlbW92 ZSh0aGlzLmNvbnRleHQsJ0NvbnRleHR1YWxEaWFsb2dYJyk7dGhpcy5wYXJlbnQu ZGVzdHJveSgpO30sX2FkanVzdFZlcnRpY2FsUG9zaXRpb246ZnVuY3Rpb24oKXtp Zih0aGlzLnBvc2l0aW9uIT0nbGVmdCcmJnRoaXMucG9zaXRpb24hPSdyaWdodCcp e0NTUy5zZXRTdHlsZSh0aGlzLl9vdmVybGF5LCd0b3AnLCcnKTtyZXR1cm47fXZh ciBjPVZlY3RvcjIuZ2V0RWxlbWVudFBvc2l0aW9uKHRoaXMuX3Jvb3QsJ3ZpZXdw b3J0JykueTt2YXIgYT1WZWN0b3IyLmdldEVsZW1lbnREaW1lbnNpb25zKHRoaXMu X292ZXJsYXkpLnk7dmFyIGU9VmVjdG9yMi5nZXRWaWV3cG9ydERpbWVuc2lvbnMo KS55O3ZhciBkPUNvbnRleHR1YWxEaWFsb2dYLlRPUF9NQVJHSU47dmFyIGI9TWF0 aC5taW4oTWF0aC5tYXgoMCxjK2ErQ29udGV4dHVhbERpYWxvZ1guQk9UVE9NX01B UkdJTi1lKSxNYXRoLm1heCgtZCxjLWQpLGEtMipDb250ZXh0dWFsRGlhbG9nWC5B UlJPV19JTlNFVC0yKkNvbnRleHR1YWxEaWFsb2dYLkhBTE9fV0lEVEgpO0NTUy5z ZXRTdHlsZSh0aGlzLl9vdmVybGF5LCd0b3AnLCgtMSpiKSsncHgnKTtDU1Muc2V0 U3R5bGUodGhpcy5fYXJyb3csJ3RvcCcsT3ZlcmxheS5BUlJPV19PRkZTRVQrJ3B4 Jyk7Q1NTLnNldFN0eWxlKHRoaXMuX2Fycm93LCdtYXJnaW5Ub3AnLGIrJ3B4Jyk7 fSxfdXBkYXRlQXJyb3c6ZnVuY3Rpb24oKXt2YXIgYT0wO2lmKHRoaXMucG9zaXRp b249PSdhYm92ZSd8fHRoaXMucG9zaXRpb249PSdiZWxvdycpc3dpdGNoKHRoaXMu YWxpZ25IKXtjYXNlICdjZW50ZXInOmE9NTA7YnJlYWs7Y2FzZSAncmlnaHQnOmE9 MTAwO2JyZWFrO310aGlzLnJlbmRlckFycm93KENvbnRleHR1YWxEaWFsb2dYLlBP U0lUSU9OX1RPX0FSUk9XW3RoaXMucG9zaXRpb25dLGEpO30sX3VwZGF0ZUFsaWdu bWVudENsYXNzOmZ1bmN0aW9uKCl7Q1NTLmNvbmRpdGlvbkNsYXNzKHRoaXMuX3Jv b3QsQ29udGV4dHVhbERpYWxvZ1guUklHSFRfQUxJR05FRF9DTEFTUywodGhpcy5w b3NpdGlvbj09J2Fib3ZlJ3x8dGhpcy5wb3NpdGlvbj09J2JlbG93JykmJnRoaXMu YWxpZ25IPT0ncmlnaHQnKTt9LF9zZXR1cFNjcm9sbExpc3RlbmVyOmZ1bmN0aW9u KGEpe3RoaXMuX3Njcm9sbExpc3RlbmVyPUV2ZW50Lmxpc3RlbihhfHx3aW5kb3cs J3Njcm9sbCcsdGhpcy5fYWRqdXN0VmVydGljYWxQb3NpdGlvbi5zaGllbGQodGhp cykpO30sX3RlYXJkb3duU2Nyb2xsTGlzdGVuZXI6ZnVuY3Rpb24oKXt0aGlzLl9z Y3JvbGxMaXN0ZW5lci5yZW1vdmUoKTt0aGlzLl9zY3JvbGxMaXN0ZW5lcj1udWxs O319OwpIb3ZlcmNhcmQ9d2luZG93LkhvdmVyY2FyZHx8e1JFU0VSVkVEX1dJRFRI OjI5NyxSRVNFUlZFRF9IRUlHSFQ6MjM3LGRpYWxvZ3M6e30sYWN0aXZlOnt9LGNv bnRleHRFbGVtOm51bGwsaG92ZXJFbGVtOm51bGwsc2hvd2luZ0RpYWxvZzpudWxs LGZldGNoRGVsYXk6MTUwLHNob3dEZWxheTo3MDAsbG9hZGluZ0RlbGF5OjEwMDAs aGlkZURlbGF5OjI1MCxmZXRjaFRpbWVyOm51bGwsc2hvd1RpbWVyOm51bGwsbG9h ZGluZ1RpbWVyOm51bGwsaGlkZVRpbWVyOm51bGwsaW5pdDpmdW5jdGlvbigpe2lm KHVhLmllKCk8NylyZXR1cm47RXZlbnQubGlzdGVuKGRvY3VtZW50LmRvY3VtZW50 RWxlbWVudCwnbW91c2VvdmVyJyx0aGlzLmhhbmRsZS5iaW5kKHRoaXMpKTtFdmVu dC5saXN0ZW4od2luZG93LCdzY3JvbGwnLGJpbmQodGhpcywnaGlkZScsdHJ1ZSkp O0FyYml0ZXIuc3Vic2NyaWJlKCdwYWdlX3RyYW5zaXRpb24nLGZ1bmN0aW9uKCl7 dGhpcy5hYm9ydCgpO3RoaXMuZGlydHlBbGwoKTt9LmJpbmQodGhpcyksQXJiaXRl ci5TVUJTQ1JJQkVfTkVXKTtBcmJpdGVyLnN1YnNjcmliZSgnbGF5ZXJfc2hvd24n LGZ1bmN0aW9uKGEsYil7Yi50eXBlIT0nSG92ZXJjYXJkJyYmYi50eXBlIT0nT3Zl cmxheScmJnRoaXMuYWJvcnQoKTt9LmJpbmQodGhpcyksQXJiaXRlci5TVUJTQ1JJ QkVfTkVXKTt0aGlzLmluaXQ9YmFnb2Zob2xkaW5nO30saGFuZGxlOmZ1bmN0aW9u KGV2ZW50KXt2YXIgYT1QYXJlbnQuYnlUYWcoZXZlbnQuZ2V0VGFyZ2V0KCksJ2En KTtpZihhJiZ0aGlzLnNldEFjdGl2ZShhKSl7dGhpcy5wcm9jZXNzKGEpO2V2ZW50 LnN0b3AoKTt9fSxzZXRBY3RpdmU6ZnVuY3Rpb24oYil7dGhpcy5ob3ZlckVsZW09 YjtpZighdGhpcy5pc0FjdGl2ZShiKSl7dmFyIGE7aWYoIWJ8fCEoYT10aGlzLmdl dEVuZHBvaW50KGIpKSl7dGhpcy5hY3RpdmUubW92ZVRva2VuJiZ0aGlzLmFjdGl2 ZS5tb3ZlVG9rZW4ucmVtb3ZlKCk7dGhpcy5hY3RpdmU9e307cmV0dXJuIGZhbHNl O31pZih0aGlzLmFjdGl2ZS5ub2RlIT1iKXt0aGlzLmFjdGl2ZS5tb3ZlVG9rZW4m JnRoaXMuYWN0aXZlLm1vdmVUb2tlbi5yZW1vdmUoKTt0aGlzLmFjdGl2ZT17bm9k ZTpiLGVuZHBvaW50OmEscG9zOm51bGx9O319cmV0dXJuIHRydWU7fSxpc0FjdGl2 ZTpmdW5jdGlvbihhKXtyZXR1cm4gYSYmdGhpcy5jb250ZXh0RWxlbSYmdGhpcy5h Y3RpdmUubm9kZT09YTt9LGdldEVuZHBvaW50OmZ1bmN0aW9uKGEpe3JldHVybiBh LmdldEF0dHJpYnV0ZSgnZGF0YS1ob3ZlcmNhcmQnKTt9LHByb2Nlc3M6ZnVuY3Rp b24oYil7dmFyIGQ9RXZlbnQubGlzdGVuKGIsJ21vdXNlb3V0JyxmdW5jdGlvbigp e2NsZWFyVGltZW91dCh0aGlzLmZldGNoVGltZXIpO2NsZWFyVGltZW91dCh0aGlz LnNob3dUaW1lcik7ZC5yZW1vdmUoKTt0aGlzLmhvdmVyRWxlbT1udWxsO3RoaXMu aGlkZSgpO30uYmluZCh0aGlzKSk7aWYoIXRoaXMuYWN0aXZlLm1vdmVUb2tlbil0 aGlzLmFjdGl2ZS5tb3ZlVG9rZW49RXZlbnQubGlzdGVuKGIsJ21vdXNlbW92ZScs ZnVuY3Rpb24oZXZlbnQpe3RoaXMuYWN0aXZlLnBvcz1WZWN0b3IyLmdldEV2ZW50 UG9zaXRpb24oZXZlbnQpO30uYmluZCh0aGlzKSk7Y2xlYXJUaW1lb3V0KHRoaXMu ZmV0Y2hUaW1lcik7Y2xlYXJUaW1lb3V0KHRoaXMuc2hvd1RpbWVyKTtjbGVhclRp bWVvdXQodGhpcy5oaWRlVGltZXIpO3ZhciBhPXRoaXMuZmV0Y2hEZWxheTt2YXIg Yz10aGlzLmNvbnRleHRFbGVtP3RoaXMuaGlkZURlbGF5OnRoaXMuc2hvd0RlbGF5 O2lmKGIuZ2V0QXR0cmlidXRlKCdkYXRhLWhvdmVyY2FyZC1pbnN0YW50JykpYT1j PTUwO3RoaXMuZmV0Y2hUaW1lcj1zZXRUaW1lb3V0KHRoaXMuZmV0Y2guYmluZCh0 aGlzLGIpLGEpO3RoaXMuc2hvd1RpbWVyPXNldFRpbWVvdXQodGhpcy5zaG93LmJp bmQodGhpcyxiKSxjKTt9LHNob3c6ZnVuY3Rpb24oYyxiKXtpZih0aGlzLmFjdGl2 ZS5ub2RlIT1jKXJldHVybjt2YXIgYT10aGlzLmRpYWxvZ3NbdGhpcy5nZXRFbmRw b2ludChjKV07aWYoYSl7dGhpcy5zaG93RGlhbG9nKGEpO31lbHNlIGlmKGIpe3Ro aXMuc2hvd0RpYWxvZyh0aGlzLl9nZXRMb2FkaW5nRGlhbG9nKCkpO31lbHNle3Zh ciBkPXRoaXMuY29udGV4dEVsZW0/dGhpcy5oaWRlRGVsYXk6dGhpcy5zaG93RGVs YXk7dGhpcy5sb2FkaW5nVGltZXI9c2V0VGltZW91dCh0aGlzLnNob3cuYmluZCh0 aGlzLGMsdHJ1ZSksdGhpcy5sb2FkaW5nRGVsYXktZCk7fX0saGlkZTpmdW5jdGlv bihhKXtpZighdGhpcy5jb250ZXh0RWxlbSlyZXR1cm47aWYoYSl7aWYodGhpcy5z aG93aW5nRGlhbG9nKXtBcmJpdGVyLmluZm9ybSgnbGF5ZXJfaGlkZGVuJyx7dHlw ZTonSG92ZXJjYXJkJ30pO0FyYml0ZXIuaW5mb3JtKCdIb3ZlcmNhcmQvaGlkZScs e25vZGU6dGhpcy5jb250ZXh0RWxlbX0pO3RoaXMuc2hvd2luZ0RpYWxvZy5oaWRl KCk7fXRoaXMuaG92ZXJFbGVtPW51bGw7dGhpcy5jb250ZXh0RWxlbT1udWxsO3Ro aXMuc2hvd2luZ0RpYWxvZz1udWxsO31lbHNlIHRoaXMuaGlkZVRpbWVyPXNldFRp bWVvdXQodGhpcy5oaWRlLmJpbmQodGhpcyx0cnVlKSx0aGlzLmhpZGVEZWxheSk7 fSxhYm9ydDpmdW5jdGlvbigpe3RoaXMuaGlkZSh0cnVlKTtjbGVhclRpbWVvdXQo dGhpcy5zaG93VGltZXIpO30sc2hvd0RpYWxvZzpmdW5jdGlvbihhKXt2YXIgYj10 aGlzLmFjdGl2ZS5ub2RlO3ZhciBlPXRoaXMuY29udGV4dEVsZW07dmFyIGM9ZSE9 YjtpZih0aGlzLmNvbnRleHRFbGVtKXt2YXIgZD1Db250ZXh0dWFsRGlhbG9nWC5n ZXRJbnN0YW5jZSh0aGlzLmNvbnRleHRFbGVtKTtkJiZkLmhpZGUoKTt9aWYoIURP TS5jb250YWlucyhkb2N1bWVudC5ib2R5LGIpKXt0aGlzLmhpZGUodHJ1ZSk7cmV0 dXJuO310aGlzLmNvbnRleHRFbGVtPWI7dGhpcy5zaG93aW5nRGlhbG9nPWE7dGhp cy5wb3NpdGlvbigpO2Euc2V0Q29udGV4dChiKS5zaG93KCk7aWYoYyl7KGZ1bmN0 aW9uKCl7bmV3IEFzeW5jU2lnbmFsKCcvYWpheC9ob3ZlcmNhcmQvc2hvd24ucGhw Jykuc2VuZCgpO3VzZXJfYWN0aW9uKCdoaW1wJyx0aGlzLmNvbnRleHRFbGVtLG51 bGwsJ0ZPUkNFJyx7ZnQ6e2V2dDozOX19KTt9LmJpbmQodGhpcykpLmRlZmVyKCk7 aWYoZSl7QXJiaXRlci5pbmZvcm0oJ0hvdmVyY2FyZC9oaWRlJyx7bm9kZTplfSk7 fWVsc2UgQXJiaXRlci5pbmZvcm0oJ2xheWVyX3Nob3duJyx7dHlwZTonSG92ZXJj YXJkJ30pO0FyYml0ZXIuaW5mb3JtKCdIb3ZlcmNhcmQvc2hvdycse25vZGU6Yn0p O319LHBvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGo9VmVjdG9yMi5nZXRWaWV3cG9y dERpbWVuc2lvbnMoKTt2YXIgYz1WZWN0b3IyLmdldEVsZW1lbnRQb3NpdGlvbih0 aGlzLmNvbnRleHRFbGVtLCd2aWV3cG9ydCcpO3ZhciBkPWMuY29udmVydFRvKCdk b2N1bWVudCcpO3ZhciBiPXRoaXMuZ2V0Qm91bmRzKHRoaXMuY29udGV4dEVsZW0p O3ZhciBpPSdhYm92ZSc7dmFyIGE9J2xlZnQnO3ZhciBnPXRoaXMuY2FsY09mZnNl dFkoZCxiLCdhYm92ZScpO2lmKGMueStnPD10aGlzLlJFU0VSVkVEX0hFSUdIVCl7 dmFyIGg9dGhpcy5jYWxjT2Zmc2V0WShkLGIsJ2JlbG93Jyk7aWYoYy55K2grdGhp cy5jb250ZXh0RWxlbS5vZmZzZXRIZWlnaHQrdGhpcy5SRVNFUlZFRF9IRUlHSFQ8 ai55KXtpPSdiZWxvdyc7Zz1oO319dmFyIGs9ai54O3dpbmRvdy5DaGF0U2lkZWJh ciYmKGstPUNoYXRTaWRlYmFyLmdldFZpc2libGVXaWR0aCgpKTt2YXIgZT10aGlz LmNhbGNPZmZzZXRYKGQsYiwnbGVmdCcpO2lmKGMueCtlK3RoaXMuUkVTRVJWRURf V0lEVEg+PWspe3ZhciBmPXRoaXMuY2FsY09mZnNldFgoZCxiLCdyaWdodCcpO2lm KGMueCtmK3RoaXMuY29udGV4dEVsZW0ub2Zmc2V0V2lkdGg+dGhpcy5SRVNFUlZF RF9XSURUSCl7YT0ncmlnaHQnO2U9Zjt9fXRoaXMuc2hvd2luZ0RpYWxvZy5zZXRQ b3NpdGlvbihpKS5zZXRBbGlnbkgoYSkuc2V0T2Zmc2V0WChlKS5zZXRPZmZzZXRZ KGcpO30sY2FsY09mZnNldFg6ZnVuY3Rpb24oYyxiLGEpe2lmKGE9PSdsZWZ0Jyly ZXR1cm4gYi5sLWMueDtyZXR1cm4gYi5yLShjLngrdGhpcy5jb250ZXh0RWxlbS5v ZmZzZXRXaWR0aCk7fSxjYWxjT2Zmc2V0WTpmdW5jdGlvbihiLGEsYyl7aWYoYz09 J2Fib3ZlJylyZXR1cm4gYS50LWIueTtyZXR1cm4gYS5iLShiLnkrdGhpcy5jb250 ZXh0RWxlbS5vZmZzZXRIZWlnaHQpO30sZ2V0Qm91bmRzOmZ1bmN0aW9uKGUpe3Zh ciBhPXRoaXMuYWN0aXZlLnBvczt2YXIgaD1lLmdldENsaWVudFJlY3RzKCk7aWYo IWF8fGgubGVuZ3RoPT09MClyZXR1cm4gUmVjdC5nZXRFbGVtZW50Qm91bmRzKGUp O3ZhciBiO3ZhciBjPWZhbHNlO2Zvcih2YXIgZD0wO2Q8aC5sZW5ndGg7ZCsrKXt2 YXIgZz1uZXcgUmVjdChNYXRoLnJvdW5kKGhbZF0udG9wKSxNYXRoLnJvdW5kKGhb ZF0ucmlnaHQpLE1hdGgucm91bmQoaFtkXS5ib3R0b20pLE1hdGgucm91bmQoaFtk XS5sZWZ0KSwndmlld3BvcnQnKS5jb252ZXJ0VG8oJ2RvY3VtZW50Jyk7dmFyIGY9 Zy5nZXRQb3NpdGlvblZlY3RvcigpO3ZhciBpPWYuYWRkKGcuZ2V0RGltZW5zaW9u VmVjdG9yKCkpO2lmKCFifHwoZi54PD1iLmwmJmYueT5iLnQpKXtpZihjKWJyZWFr O2I9bmV3IFJlY3QoZi55LGkueCxpLnksZi54LCdkb2N1bWVudCcpO31lbHNle2Iu dD1NYXRoLm1pbihiLnQsZi55KTtiLmI9TWF0aC5tYXgoYi5iLGkueSk7Yi5yPWku eDt9aWYoZy5jb250YWlucyhhKSljPXRydWU7fXJldHVybiBiO30sZmV0Y2g6ZnVu Y3Rpb24oYyl7aWYoYy5pZCYmdGhpcy5kaWFsb2dzW2MuaWRdIT1udWxsKXJldHVy bjt2YXIgYT10aGlzLmdldEVuZHBvaW50KGMpO2lmKHRoaXMuZGlhbG9nc1thXSE9 bnVsbClyZXR1cm47dGhpcy5zZXRGZXRjaEluUHJvZ3Jlc3MoYSk7dmFyIGI9ZnVu Y3Rpb24oKXt0aGlzLmRpcnR5KGEpO3RoaXMuYWJvcnQoKTt9LmJpbmQodGhpcyk7 bmV3IEFzeW5jUmVxdWVzdChhKS5zZXREYXRhKHtlbmRwb2ludDphfSkuc2V0TWV0 aG9kKCdHRVQnKS5zZXRSZWFkT25seSh0cnVlKS5zZXRFcnJvckhhbmRsZXIoYiku c2V0VHJhbnNwb3J0RXJyb3JIYW5kbGVyKGIpLnNlbmQoKTt9LHNldEZldGNoSW5Q cm9ncmVzczpmdW5jdGlvbihhKXt0aGlzLmRpYWxvZ3NbYV09ZmFsc2U7fSxfZ2V0 TG9hZGluZ0RpYWxvZzpmdW5jdGlvbigpe3ZhciBhPW5ldyBDb250ZXh0dWFsRGlh bG9nWCgpO2EuaW5pdCgkTignZGl2Jyx7Y2xhc3NOYW1lOidIb3ZlcmNhcmRMb2Fk aW5nJ30sIkNhcmdhbmRvLi4uIikpLnNldERlc3Ryb3lPbkhpZGUoZmFsc2UpLnNl dEZhZGVPblNob3coZmFsc2UpLnNldEZhZGVPbkhpZGUoZmFsc2UpO3RoaXMuX2lu aXREaWFsb2dTdWJzY3JpcHRpb25zKGEpO3RoaXMuX2dldExvYWRpbmdEaWFsb2c9 YmFnb2YoYSk7cmV0dXJuIGE7fSxzZXREaWFsb2c6ZnVuY3Rpb24oYixhKXt0aGlz LmRpYWxvZ3NbYl09YTt0aGlzLl9pbml0RGlhbG9nU3Vic2NyaXB0aW9ucyhhKTtp Zih0aGlzLmFjdGl2ZS5lbmRwb2ludD09YiYmdGhpcy5ob3ZlckVsZW09PXRoaXMu YWN0aXZlLm5vZGUpdGhpcy5zaG93RGlhbG9nKGEpO30sX2luaXREaWFsb2dTdWJz Y3JpcHRpb25zOmZ1bmN0aW9uKGEpe2Euc3Vic2NyaWJlKCdtb3VzZWVudGVyJyxm dW5jdGlvbigpe2NsZWFyVGltZW91dCh0aGlzLmhpZGVUaW1lcik7dGhpcy5ob3Zl ckVsZW09dGhpcy5hY3RpdmUubm9kZTt9LmJpbmQodGhpcykpO2Euc3Vic2NyaWJl KCdtb3VzZWxlYXZlJyxmdW5jdGlvbigpe3RoaXMuaGlkZShmYWxzZSk7dGhpcy5o b3ZlckVsZW09bnVsbDt9LmJpbmQodGhpcykpO30sY29udGFpbnM6ZnVuY3Rpb24o YSl7aWYodGhpcy5zaG93aW5nRGlhbG9nKXJldHVybiBET00uY29udGFpbnModGhp cy5zaG93aW5nRGlhbG9nLmdldE92ZXJsYXkoKSxhKTtyZXR1cm4gZmFsc2U7fSxk aXJ0eTpmdW5jdGlvbihiKXt2YXIgYT10aGlzLmRpYWxvZ3NbYl07aWYoYSl7YS5k ZXN0cm95KCk7ZGVsZXRlIHRoaXMuZGlhbG9nc1tiXTt9fSxkaXJ0eUFsbDpmdW5j dGlvbigpe2Zvcih2YXIgYiBpbiB0aGlzLmRpYWxvZ3Mpe3ZhciBhPXRoaXMuZGlh bG9nc1tiXTthJiZ0aGlzLmRpcnR5KGIpO319fTtvbmxvYWRSZWdpc3RlcihIb3Zl cmNhcmQuaW5pdC5iaW5kKEhvdmVyY2FyZCkpOwpfX2UoIkRvY3VtZW50VGl0bGUi LFsiYXJyYXktZXh0ZW5zaW9ucyIsImFyYml0ZXIiXSxmdW5jdGlvbihqLGwsayxp KXtsKCdhcnJheS1leHRlbnNpb25zJyk7dmFyIGE9bCgnYXJiaXRlcicpO3ZhciBt PWRvY3VtZW50LnRpdGxlO3ZhciBiPTE1MDA7dmFyIGg9W107dmFyIGc9MDt2YXIg ZT1udWxsO3ZhciBmPXRydWU7ZnVuY3Rpb24gZCgpe2lmKGgubGVuZ3RoPjApe2lm KGYpe2Muc2V0KGhbZ10udGl0bGUsdHJ1ZSk7Zz0rK2claC5sZW5ndGg7Zj1mYWxz ZTt9ZWxzZSBjLnJlc2V0KCk7fWVsc2V7Y2xlYXJJbnRlcnZhbChlKTtlPW51bGw7 Yy5yZXNldCgpO319dmFyIGM9e2dldDpmdW5jdGlvbigpe3JldHVybiBtO30sc2V0 OmZ1bmN0aW9uKG4sbyl7ZG9jdW1lbnQudGl0bGU9bjtpZighbyl7bT1uO2EuaW5m b3JtKCd1cGRhdGVfdGl0bGUnLG4pO319LHJlc2V0OmZ1bmN0aW9uKCl7Yy5zZXQo Yy5nZXQoKSx0cnVlKTtmPXRydWU7fSxibGluazpmdW5jdGlvbihvKXt2YXIgbj17 dGl0bGU6b307aC5wdXNoKG4pO2lmKGU9PT1udWxsKWU9c2V0SW50ZXJ2YWwoZCxi KTtyZXR1cm4ge3N0b3A6ZnVuY3Rpb24oKXt2YXIgcD1oLmluZGV4T2Yobik7aWYo cD49MCl7aC5zcGxpY2UocCwxKTtpZihnPnApe2ctLTt9ZWxzZSBpZihnPT1wJiZn PT1oLmxlbmd0aClnPTA7fX19O319O2ouRG9jdW1lbnRUaXRsZT1rLmV4cG9ydHM9 Yzt9LDMpOwpfX2UoIlBvbGxlciIsWyJBc3luY1JlcXVlc3QiLCJjb29raWUiLCJj b3B5UHJvcGVydGllcyIsIkVudiIsInV0aWwiXSxmdW5jdGlvbihoLGosaSxnKXt2 YXIgYT1qKCdBc3luY1JlcXVlc3QnKTt2YXIgYj1qKCdjb29raWUnKTt2YXIgZj1q KCdjb3B5UHJvcGVydGllcycpO3ZhciBjPWooJ0VudicpO3ZhciBlPWooJ3V0aWwn KTtmdW5jdGlvbiBkKG0sbCxrKXt0aGlzLl9jbGVhck9uUXVpY2tsaW5nRXZlbnQ9 IWs7dGhpcy5fcmVxdWVzdENhbGxiYWNrPWw7dGhpcy5zZXRUaW1lUGVyaW9kKG0p O31kLk1JTl9USU1FX1BFUklPRD0yMDAwO2YoZC5wcm90b3R5cGUse3N0b3A6ZnVu Y3Rpb24oKXtjbGVhclRpbWVvdXQodGhpcy5fdG9rZW4pO3RoaXMuX3Rva2VuPW51 bGw7dGhpcy5fY2FuY2VsUmVxdWVzdCgpO30sc2NoZWR1bGVSZXF1ZXN0OmZ1bmN0 aW9uKCl7dGhpcy5zdG9wKCk7aWYodGhpcy5fdGltZVBlcmlvZCl0aGlzLl90b2tl bj10aGlzLl9tYWtlUmVxdWVzdC5iaW5kKHRoaXMpLmRlZmVyKHRoaXMuX3RpbWVQ ZXJpb2QsdGhpcy5fY2xlYXJPblF1aWNrbGluZ0V2ZW50KTt9LHJlcXVlc3ROb3c6 ZnVuY3Rpb24oKXt0aGlzLnN0b3AoKTt0aGlzLl9tYWtlUmVxdWVzdCgpO30sX3Rp bWVQZXJpb2Q6bnVsbCxzZXRUaW1lUGVyaW9kOmZ1bmN0aW9uKGspe2s9a3x8bnVs bDtpZihrJiYoaXNOYU4oayl8fGs8ZC5NSU5fVElNRV9QRVJJT0QpKXJldHVybjtp ZihrJiZ0aGlzLl90aW1lUGVyaW9kPT1udWxsKXRoaXMuX3Rva2VuPXRoaXMuX21h a2VSZXF1ZXN0LmJpbmQodGhpcykuZGVmZXIoayx0aGlzLl9jbGVhck9uUXVpY2ts aW5nRXZlbnRzKTt0aGlzLl90aW1lUGVyaW9kPWs7fSxfbWFrZVJlcXVlc3Q6ZnVu Y3Rpb24oKXt0aGlzLl9jYW5jZWxSZXF1ZXN0KCk7aWYoIXRoaXMuX2lzTG9hZFVz ZXIoKSlyZXR1cm47dmFyIGw9bmV3IGEoKTt2YXIgaz10cnVlO2wuc2V0SW5pdGlh bEhhbmRsZXIoZnVuY3Rpb24oKXtyZXR1cm4gazt9KTt0aGlzLl9jYW5jZWxSZXF1 ZXN0PWZ1bmN0aW9uKCl7az1mYWxzZTt9O2wuc2V0RmluYWxseUhhbmRsZXIodGhp cy5zY2hlZHVsZVJlcXVlc3QuYmluZCh0aGlzKSk7bC5zZXRJbml0aWFsSGFuZGxl cj1iYWdvZmhvbGRpbmc7bC5zZXRGaW5hbGx5SGFuZGxlcj1iYWdvZmhvbGRpbmc7 dGhpcy5fcmVxdWVzdENhbGxiYWNrKGwpO2lmKGspbC5zZW5kKCk7fSxfaXNMb2Fk VXNlcjpmdW5jdGlvbigpe3JldHVybiBjLnVzZXI9PWdldENvb2tpZSgnY191c2Vy Jyk7fSxfY2FuY2VsUmVxdWVzdDpiYWdvZmhvbGRpbmcsZ2V0VGltZVBlcmlvZDpm dW5jdGlvbigpe3JldHVybiB0aGlzLl90aW1lUGVyaW9kO319KTtoLlBvbGxlcj1p LmV4cG9ydHM9ZDt9LDMpOwpmdW5jdGlvbiBYSFBUZW1wbGF0ZShhKXt0aGlzLl9t b2RlbD1hO31YSFBUZW1wbGF0ZS5wcm90b3R5cGU9e3JlbmRlcjpmdW5jdGlvbigp e2lmKEhUTUwuaXNIVE1MKHRoaXMuX21vZGVsKSl0aGlzLl9tb2RlbD1ET00uc2V0 Q29udGVudChkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksdGhpcy5f bW9kZWwpWzBdO3JldHVybiB0aGlzLl9tb2RlbC5jbG9uZU5vZGUodHJ1ZSk7fSxi dWlsZDpmdW5jdGlvbigpe3JldHVybiBuZXcgWEhQVGVtcGxhdGVJbnN0YW5jZSh0 aGlzLnJlbmRlcigpKTt9fTtjb3B5X3Byb3BlcnRpZXMoWEhQVGVtcGxhdGUse2dl dE5vZGU6ZnVuY3Rpb24oYixhKXtyZXR1cm4gWEhQVGVtcGxhdGUuZ2V0Tm9kZXMo YilbYV07fSxnZXROb2RlczpmdW5jdGlvbihkKXt2YXIgYz1EYXRhU3RvcmUuZ2V0 KGQsJ1hIUFRlbXBsYXRlOm5vZGVzJyk7aWYoIWMpe2M9e307dmFyIGU9RE9NLnNj cnkoZCwnW2RhdGEtanNpZF0nKTtlLnB1c2goZCk7dmFyIGE9ZS5sZW5ndGg7d2hp bGUoYS0tKXt2YXIgYj1lW2FdO2NbYi5nZXRBdHRyaWJ1dGUoJ2RhdGEtanNpZCcp XT1iO2IucmVtb3ZlQXR0cmlidXRlKCdkYXRhLWpzaWQnKTt9RGF0YVN0b3JlLnNl dChkLCdYSFBUZW1wbGF0ZTpub2RlcycsYyk7fXJldHVybiBjO319KTtmdW5jdGlv biBYSFBUZW1wbGF0ZUluc3RhbmNlKGEpe3RoaXMuX3Jvb3Q9YTt0aGlzLl9wb3B1 bGF0ZU5vZGVzKCk7fVhIUFRlbXBsYXRlSW5zdGFuY2UucHJvdG90eXBlPXtfcG9w dWxhdGVOb2RlczpmdW5jdGlvbigpe3RoaXMuX25vZGVzPXt9O3RoaXMuX2xlYXZl cz17fTt2YXIgZT10aGlzLl9yb290LmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJyk7 Zm9yKHZhciBhPTAsYz1lLmxlbmd0aDthPGM7YSsrKXt2YXIgZD1lW2FdO3ZhciBi PWQuZ2V0QXR0cmlidXRlKCdkYXRhLWpzaWQnKTtpZihiKXtkLnJlbW92ZUF0dHJp YnV0ZSgnZGF0YS1qc2lkJyk7dGhpcy5fbm9kZXNbYl09ZDt0aGlzLl9sZWF2ZXNb Yl09IWQuY2hpbGROb2Rlcy5sZW5ndGg7fX19LGdldFJvb3Q6ZnVuY3Rpb24oKXty ZXR1cm4gdGhpcy5fcm9vdDt9LGdldE5vZGU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRo aXMuX25vZGVzW2FdO30sc2V0Tm9kZVByb3BlcnR5OmZ1bmN0aW9uKGMsYSxiKXt0 aGlzLmdldE5vZGUoYylbYV09YjtyZXR1cm4gdGhpczt9LHNldE5vZGVDb250ZW50 OmZ1bmN0aW9uKGIsYSl7aWYoIXRoaXMuX2xlYXZlc1tiXSl0aHJvdyBuZXcgRXJy b3IoIkNhbid0IHNldENvbnRlbnQgb24gbm9uLWxlYWYgbm9kZTogIitiKTtET00u c2V0Q29udGVudCh0aGlzLmdldE5vZGUoYiksYSk7cmV0dXJuIHRoaXM7fX07Cl9f ZSgiY29uc3RydWN0b3ItY2FjaGUiLFsiSlNDQyJdLGZ1bmN0aW9uKGIsYyl7dmFy IGE9YygnSlNDQycpO2IuSlNDQz1hO30sMyk7Cl9fZSgib25rZXlwcmVzcy1mbGlw LWRpcmVjdGlvbiIsWyJldmVudC1leHRlbnNpb25zIiwiY3NzIiwiZG9tIiwiaW5w dXQtbWV0aG9kcyJdLGZ1bmN0aW9uKGQsZSl7ZSgnZXZlbnQtZXh0ZW5zaW9ucycp O3ZhciBhPWUoJ2NzcycpO3ZhciBiPWUoJ2RvbScpO3ZhciBjPWUoJ2lucHV0LW1l dGhvZHMnKTtFdmVudC5saXN0ZW4oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCdr ZXl1cCcsZnVuY3Rpb24oZXZlbnQpe3ZhciBoPWV2ZW50LmdldFRhcmdldCgpO2lm KCFiLmlzTm9kZU9mVHlwZShoLFsnaW5wdXQnLCd0ZXh0YXJlYSddKSlyZXR1cm47 aWYoYi5pc05vZGVPZlR5cGUoaCwnaW5wdXQnKSYmaC50eXBlPT0ncGFzc3dvcmQn KXJldHVybjtpZihoLmdldEF0dHJpYnV0ZSgnZGF0YS1wcmV2ZW50LWF1dG8tZmxp cCcpKXJldHVybjt2YXIgaz1jLmdldFZhbHVlKGgpO3ZhciBnPShoLnN0eWxlJiZo LnN0eWxlLmRpcmVjdGlvbik7aWYoIWcpe2Zvcih2YXIgaT0wO2k8ay5sZW5ndGg7 aSsrKXt2YXIgZj1rLmNoYXJDb2RlQXQoaSk7aWYoZj49NDgpe3ZhciBqPShmPj0x NDcwJiZmPD0xOTIwKTthLnNldFN0eWxlKGgsJ2RpcmVjdGlvbicsaj8ncnRsJzon bHRyJyk7cmV0dXJuO319fWVsc2UgaWYoay5sZW5ndGg9PT0wKWEuc2V0U3R5bGUo aCwnZGlyZWN0aW9uJywnJyk7fSk7fSwzKTsKb25sb2FkUmVnaXN0ZXIoZnVuY3Rp b24oKXtFdmVudC5saXN0ZW4oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCdzdWJt aXQnLGZ1bmN0aW9uKGIpe3ZhciBhPWIuZ2V0VGFyZ2V0KCkuZ2V0RWxlbWVudHNC eVRhZ05hbWUoJyonKTtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKylpZihhW2Nd LmdldEF0dHJpYnV0ZSgncGxhY2Vob2xkZXInKSYmSW5wdXQuaXNFbXB0eShhW2Nd KSlJbnB1dC5zZXRWYWx1ZShhW2NdLCcnKTt9KTt9KTsKb25sb2FkUmVnaXN0ZXIo ZnVuY3Rpb24oKXtFdmVudC5saXN0ZW4oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50 LCdzdWJtaXQnLGZ1bmN0aW9uKGIpe3ZhciBhPWIuZ2V0VGFyZ2V0KCkuZ2V0RWxl bWVudHNCeVRhZ05hbWUoJyonKTtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKylp ZihhW2NdLmdldEF0dHJpYnV0ZSgncmVxdWlyZWQnKSYmSW5wdXQuaXNFbXB0eShh W2NdKSl7YVtjXS5mb2N1cygpO3JldHVybiBmYWxzZTt9fSxFdmVudC5Qcmlvcml0 eS5VUkdFTlQpO30pOwpfX2UoIkxpdmUiLFsiYXJyYXktZXh0ZW5zaW9ucyIsImpz b24iLCJhcmJpdGVyIiwiQXN5bmNET00iLCJBcnJheVV0aWxzIiwiYXN5bmMtc2ln bmFsIiwiRGF0YVN0b3JlIiwiZG9tIiwicHJlc2VuY2UtYXJiaXRlci1tZXNzYWdl IiwidXRpbCIsImludm9rZUNhbGxiYWNrcyJdLGZ1bmN0aW9uKGssbixtLGope24o ImFycmF5LWV4dGVuc2lvbnMiKTtuKCJqc29uIik7dmFyIGE9bigiYXJiaXRlciIp O3ZhciBjPW4oIkFzeW5jRE9NIik7dmFyIGI9bigiQXJyYXlVdGlscyIpO3ZhciBk PW4oImFzeW5jLXNpZ25hbCIpO3ZhciBmPW4oIkRhdGFTdG9yZSIpO3ZhciBlPW4o ImRvbSIpO3ZhciBoPW4oInByZXNlbmNlLWFyYml0ZXItbWVzc2FnZSIpO3ZhciBp PW4oInV0aWwiKTt2YXIgbD1uKCJpbnZva2VDYWxsYmFja3MiKTt2YXIgZz17bG9n QWxsOmZhbHNlLHN0YXJ0dXA6ZnVuY3Rpb24oKXtnLnN0YXJ0dXA9YmFnb2Zob2xk aW5nO2Euc3Vic2NyaWJlKGguZ2V0QXJiaXRlck1lc3NhZ2VUeXBlKCdsaXZlJyks Zy5oYW5kbGVNZXNzYWdlLmJpbmQoZykpO30sbG9va3VwTGl2ZU5vZGU6ZnVuY3Rp b24ocCxvKXt2YXIgcT1lLnNjcnkoZG9jdW1lbnQuYm9keSwnLmxpdmVfJytwKydf JytvKTtxLmZvckVhY2goZnVuY3Rpb24ocyl7aWYoZi5nZXQocywnc2VxbnVtJyk9 PT11bmRlZmluZWQpe3ZhciByPUpTT04ucGFyc2Uocy5nZXRBdHRyaWJ1dGUoJ2Rh dGEtbGl2ZScpKTtmLnNldChzLCdzZXFudW0nLHIuc2VxKTt9fSk7cmV0dXJuIHE7 fSxoYW5kbGVNZXNzYWdlOmZ1bmN0aW9uKHQscCl7dmFyIHI9cC5vYmo7dmFyIHE9 ci5mYmlkO3ZhciBvPXIuYXNzb2M7dmFyIHM9dGhpcy5sb29rdXBMaXZlTm9kZShx LG8pO2lmKCFzKXJldHVybiBmYWxzZTtzLmZvckVhY2goZnVuY3Rpb24oeSl7aWYo ci5leHBzZXEpe3ZhciB3PWYuZ2V0KHksJ3NlcW51bScpO3ZhciB1PWYuZ2V0KHks J21lc3NhZ2VfYnVmZmVyJyk7aWYodT09PXVuZGVmaW5lZCl7dT17fTtmLnNldCh5 LCdtZXNzYWdlX2J1ZmZlcicsdSk7fXZhciB2PXtvYmo6cn07dVtyLmV4cHNlcV09 djtpZihyLmV4cHNlcSE9dyl7Zy5sb2coJ21pc21hdGNoJyxyLmZiaWQsci5leHBz ZXEsdyk7cmV0dXJuIGZhbHNlO313aGlsZSh0cnVlKXt3PWYuZ2V0KHksJ3NlcW51 bScpO3ZhciB4PXVbd107aWYoeCl7Zy5fYXBwbHlVcGRhdGVzKHgub2JqLnVwZGF0 ZXMseSk7Zy5sb2coJ3NlcW1hdGNoJyxyLmZiaWQsJ2V4cCcsci5leHBzZXEsJ2N1 cicsdyk7ZGVsZXRlIHVbd107fWVsc2UgYnJlYWs7fX1lbHNlIGcuX2FwcGx5VXBk YXRlcyhyLnVwZGF0ZXMseSk7fSk7fSxfYXBwbHlVcGRhdGVzOmZ1bmN0aW9uKHEs cCl7dHJ5e2lmKHR5cGVvZiBxWzBdPT0nc3RyaW5nJyl7cD17Z2V0UmVsYXRpdmVU bzpiYWdvZihwKX07bChiLmNyZWF0ZUZyb20ocSkscCk7fWVsc2UgYy5pbnZva2Uo cSxwKTt9Y2F0Y2gobyl7fX0sbG9nOmZ1bmN0aW9uKCl7aWYoZy5sb2dBbGwpe3Zh ciBvPWIuY3JlYXRlRnJvbShhcmd1bWVudHMpLmpvaW4oIjoiKTtuZXcgZCgnL2Nv bW1vbi9zY3JpYmVfZW5kcG9pbnQucGhwJyx7YzonbGl2ZV9zZXF1ZW5jZScsbTpv fSkuc2VuZCgpO319fTttLmV4cG9ydHM9Zzt9KTsKX19lKCJsaXZlLWpzIixbIkxp dmUiXSxmdW5jdGlvbihhLGIpe2EuTGl2ZT1iKCdMaXZlJyk7fSwzKTsKX19lKCJM aXZlVGltZXIiLFsiY3NzIiwiZG9tIiwidWEiXSxmdW5jdGlvbihkLGYsZSxjKXt2 YXIgYT1mKCJjc3MiKTt2YXIgYj1mKCJkb20iKTt2YXIgZz1mKCJ1YSIpO2UuZXhw b3J0cz1kLkxpdmVUaW1lcnx8e3Jlc3RhcnQ6ZnVuY3Rpb24oaCl7dGhpcy5zZXJ2 ZXJUaW1lPWg7dGhpcy5sb2NhbFN0YXJ0VGltZT1EYXRlLm5vdygpLzEwMDA7dGhp cy51cGRhdGVUaW1lU3RhbXBzKCk7fSx1cGRhdGVUaW1lU3RhbXBzOmZ1bmN0aW9u KCl7TGl2ZVRpbWVyLnRpbWVzdGFtcHM9Yi5zY3J5KGRvY3VtZW50LmJvZHksJ2Fi YnIubGl2ZXRpbWVzdGFtcCcpO0xpdmVUaW1lci5zdGFydExvb3AoMjAwMDApO30s YWRkVGltZVN0YW1wczpmdW5jdGlvbihoKXtpZighaHx8IUxpdmVUaW1lci50aW1l c3RhbXBzKXJldHVybjtpZihiLmlzTm9kZU9mVHlwZShoLCdhYmJyJykmJmEuaGFz Q2xhc3MoaCwnbGl2ZXRpbWVzdGFtcCcpKXtMaXZlVGltZXIudGltZXN0YW1wcy5w dXNoKGgpO31lbHNle3ZhciBqPWIuc2NyeShoLCdhYmJyLmxpdmV0aW1lc3RhbXAn KTtmb3IodmFyIGk9MDtpPGoubGVuZ3RoOysraSlMaXZlVGltZXIudGltZXN0YW1w cy5wdXNoKGpbaV0pO31MaXZlVGltZXIuc3RhcnRMb29wKDApO30sc3RhcnRMb29w OmZ1bmN0aW9uKGgpe3RoaXMuc3RvcCgpO3RoaXMudGltZW91dD1zZXRUaW1lb3V0 KGZ1bmN0aW9uKCl7TGl2ZVRpbWVyLmxvb3AoKTt9LGgpO30sc3RvcDpmdW5jdGlv bigpe2NsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO30sdXBkYXRlTm9kZTpmdW5j dGlvbihoLGkpe0xpdmVUaW1lci51cGRhdGVOb2RlPShnLmllKCk8Nyk/ZnVuY3Rp b24oaixrKXtqLm5leHRTaWJsaW5nLm5vZGVWYWx1ZT1rO306ZnVuY3Rpb24oaixr KXtqLmZpcnN0Q2hpbGQubm9kZVZhbHVlPWs7fTtMaXZlVGltZXIudXBkYXRlTm9k ZShoLGkpO30sbG9vcDpmdW5jdGlvbihrKXtpZihrKUxpdmVUaW1lci51cGRhdGVU aW1lU3RhbXBzKCk7dmFyIGo9TWF0aC5mbG9vcihEYXRlLm5vdygpLzEwMDAtTGl2 ZVRpbWVyLmxvY2FsU3RhcnRUaW1lKTt2YXIgaD0tMTtMaXZlVGltZXIudGltZXN0 YW1wcyYmTGl2ZVRpbWVyLnRpbWVzdGFtcHMuZWFjaChmdW5jdGlvbihuKXt2YXIg bT1uLmdldEF0dHJpYnV0ZSgnZGF0YS11dGltZScpO3ZhciBsPUxpdmVUaW1lci5y ZW5kZXJSZWxhdGl2ZVRpbWUoTGl2ZVRpbWVyLnNlcnZlclRpbWUraixtKTtpZihs LnRleHQpTGl2ZVRpbWVyLnVwZGF0ZU5vZGUobixsLnRleHQpO2lmKGwubmV4dCE9 LTEmJihsLm5leHQ8aHx8aD09LTEpKWg9bC5uZXh0O30pO2lmKGghPS0xKXt2YXIg aT1NYXRoLm1heCgyMDAwMCxoKjEwMDApO0xpdmVUaW1lci50aW1lb3V0PXNldFRp bWVvdXQoZnVuY3Rpb24oKXtMaXZlVGltZXIubG9vcCgpO30saSk7fX0scmVuZGVy UmVsYXRpdmVUaW1lOmZ1bmN0aW9uKGosayl7dmFyIGw9e3RleHQ6IiIsbmV4dDot MX07aWYoai1rPigxMiozNjAwKXx8KG5ldyBEYXRlKGoqMTAwMCkuZ2V0RGF5KCkh PW5ldyBEYXRlKGsqMTAwMCkuZ2V0RGF5KCkpKXJldHVybiBsO3ZhciBtPWotayxp PU1hdGguZmxvb3IobS82MCksaD1NYXRoLmZsb29yKGkvNjApO2lmKGk8MSl7bC50 ZXh0PSJoYWNlIHVub3Mgc2VndW5kb3MiO2wubmV4dD02MC1tJTYwO3JldHVybiBs O31pZihoPDEpe2lmKGk9PTEpe2wudGV4dD0iSGFjZSB1biBtaW51dG8gYXByb3hp bWFkYW1lbnRlIjt9ZWxzZSBsLnRleHQ9X3R4KCJIYWNlIHtudW1iZXJ9IG1pbnV0 b3MiLHtudW1iZXI6aX0pO2wubmV4dD02MC1tJTYwO3JldHVybiBsO31pZihoIT0x MSlsLm5leHQ9MzYwMC1tJTM2MDA7aWYoaD09MSl7bC50ZXh0PSJoYWNlIGFwcm94 aW1hZGFtZW50ZSB1bmEgaG9yYSI7cmV0dXJuIGw7fWwudGV4dD1fdHgoIkhhY2Ug e251bWJlcn0gaG9yYXMiLHtudW1iZXI6aH0pO3JldHVybiBsO319O30pOwpfX2Uo ImxpdmUtdGltZXIiLFsiTGl2ZVRpbWVyIl0sZnVuY3Rpb24oYSxiKXthLkxpdmVU aW1lcj1iKCdMaXZlVGltZXInKTt9LDMpOwpvbmxvYWRSZWdpc3RlcihmdW5jdGlv bigpe2FkZF9wcm9wZXJ0aWVzKCdfX2JlaGF2aW9ycycse30pO2lmKF9fYmVoYXZp b3JzLlRpbnlWaWV3cG9ydClyZXR1cm47X19iZWhhdmlvcnMuVGlueVZpZXdwb3J0 PXRydWU7dmFyIGM9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O3ZhciBhPURPTS5n ZXREb2N1bWVudFNjcm9sbEVsZW1lbnQoKTt2YXIgYj1kZWJvdW5jZShmdW5jdGlv bigpe3ZhciBkPWMuY2xpZW50SGVpZ2h0PDQwMHx8YS5jbGllbnRXaWR0aDxhLnNj cm9sbFdpZHRoO0NTUy5jb25kaXRpb25DbGFzcyhjLCd0aW55Vmlld3BvcnQnLGQp O0NTUy5jb25kaXRpb25DbGFzcyhjLCdjYW5IYXZlRml4ZWRFbGVtZW50cycsIWQp O30pO0V2ZW50Lmxpc3Rlbih3aW5kb3csJ3Jlc2l6ZScsYik7YigpO30pOwpfX2Uo IkNvbnRleHR1YWxMYXllciIsWyJldmVudC1leHRlbnNpb25zIiwiQ2xhc3MiLCJD b250ZXh0dWFsVGhpbmciLCJjc3MiLCJkb20iLCJMYXllciIsIkxvY2FsZSIsInJl Y3QiLCJ2ZWN0b3IiLCJjb3B5UHJvcGVydGllcyIsImRvbS1jb3JlIiwiZ2V0T3Zl cmxheVpJbmRleCJdLGZ1bmN0aW9uKHEscyxyLG4pe3MoImV2ZW50LWV4dGVuc2lv bnMiKTt2YXIgYz1zKCJDbGFzcyIpO3ZhciBlPXMoIkNvbnRleHR1YWxUaGluZyIp O3ZhciBiPXMoImNzcyIpO3ZhciBmPXMoImRvbSIpO3ZhciBnPXMoIkxheWVyIik7 dmFyIGg9cygiTG9jYWxlIik7dmFyIGk9cygicmVjdCIpO3ZhciBqPXMoInZlY3Rv ciIpO3ZhciBhPWYuJE47dmFyIG09cygiY29weVByb3BlcnRpZXMiKTt2YXIgbz1z KCJkb20tY29yZSIpLmdlO3ZhciBwPXMoImdldE92ZXJsYXlaSW5kZXgiKTtmdW5j dGlvbiBkKCl7cmV0dXJuIHRoaXMucGFyZW50LmNvbnN0cnVjdCh0aGlzKTt9Yy5l eHRlbmQoZCxnKTttKGQse09QUE9TSVRFOnthYm92ZTonYmVsb3cnLGJlbG93Oidh Ym92ZScsbGVmdDoncmlnaHQnLHJpZ2h0OidsZWZ0J319KTt2YXIgbD1mdW5jdGlv bigpe3ZhciB0PW8oJ2JsdWVCYXInKTt2YXIgdT10P3Qub2Zmc2V0SGVpZ2h0OjA7 bD1iYWdvZih1KTtyZXR1cm4gdTt9O2Z1bmN0aW9uIGsoKXtyZXR1cm4gZG9jdW1l bnQuYm9keS5vZmZzZXRXaWR0aC0od2luZG93LkNoYXRTaWRlYmFyJiZDaGF0U2lk ZWJhci5nZXRWaXNpYmxlV2lkdGgoKXx8MCk7fW0oZC5wcm90b3R5cGUse19jb250 ZW50V3JhcHBlcjpudWxsLF9jb250ZW50Om51bGwsX2NvbnRleHQ6bnVsbCxfcHJl ZmVycmVkUG9zaXRpb246J2Fib3ZlJyxfcHJlZmVycmVkQWxpZ25tZW50OidsZWZ0 JyxfcG9zaXRpb246J2Fib3ZlJyxfYWxpZ25tZW50OidsZWZ0Jyxfb2Zmc2V0WDow LF9vZmZzZXRZOjAsX2F1dG9GbGlwOnRydWUsaW5pdDpmdW5jdGlvbih0KXt0aGlz Ll9jb250ZW50PXQ7dGhpcy5wYXJlbnQuaW5pdCh0aGlzLl9jb250ZW50KTt0aGlz Ll91cGRhdGVXcmFwcGVyUG9zaXRpb24oKTtyZXR1cm4gdGhpczt9LF9idWlsZFdy YXBwZXI6ZnVuY3Rpb24odCl7dmFyIHU9dGhpcy5fZ2VuZXJhdGVQb3NpdGlvbkNs YXNzKHRoaXMuX3Bvc2l0aW9uLHRoaXMuX2FsaWdubWVudCk7dGhpcy5fY29udGVu dFdyYXBwZXI9YSgnZGl2Jyx7Y2xhc3NOYW1lOid1aUNvbnRleHR1YWxMYXllciAn K3V9LHQpO3JldHVybiBhKCdkaXYnLHtjbGFzc05hbWU6J3VpQ29udGV4dHVhbExh eWVyUG9zaXRpb25lcid9LHRoaXMuX2NvbnRlbnRXcmFwcGVyKTt9LHNldENvbnRl bnQ6ZnVuY3Rpb24odCl7dGhpcy5fY29udGVudD10O2Yuc2V0Q29udGVudCh0aGlz Ll9jb250ZW50V3JhcHBlcix0aGlzLl9jb250ZW50KTt0aGlzLl9zaG93biYmdGhp cy51cGRhdGVQb3NpdGlvbigpO3JldHVybiB0aGlzO30sc2V0Q29udGV4dDpmdW5j dGlvbih0KXt0aGlzLl9jb250ZXh0PXQ7dGhpcy5fY29udGV4dFNjcm9sbFBhcmVu dD1iLmdldFNjcm9sbFBhcmVudCh0KTtpZih0aGlzLl9zaG93bil7ZS5yZWdpc3Rl cih0aGlzLl9yb290LHRoaXMuX2NvbnRleHQpO3RoaXMudXBkYXRlUG9zaXRpb24o KTt9cmV0dXJuIHRoaXM7fSxzZXRQb3NpdGlvbjpmdW5jdGlvbih0KXt0aGlzLl9w cmVmZXJyZWRQb3NpdGlvbj10fHwnYWJvdmUnO3RoaXMuX3Nob3duJiZ0aGlzLnVw ZGF0ZVBvc2l0aW9uKCk7cmV0dXJuIHRoaXM7fSxzZXRBbGlnbm1lbnQ6ZnVuY3Rp b24odCl7dGhpcy5fcHJlZmVycmVkQWxpZ25tZW50PXR8fCdsZWZ0Jzt0aGlzLl9z aG93biYmdGhpcy51cGRhdGVQb3NpdGlvbigpO3JldHVybiB0aGlzO30sc2V0T2Zm c2V0WDpmdW5jdGlvbih0KXt0aGlzLl9vZmZzZXRYPXR8fDA7dGhpcy5fc2hvd24m JnRoaXMudXBkYXRlUG9zaXRpb24oKTtyZXR1cm4gdGhpczt9LHNldE9mZnNldFk6 ZnVuY3Rpb24odCl7dGhpcy5fb2Zmc2V0WT10fHwwO3RoaXMuX3Nob3duJiZ0aGlz LnVwZGF0ZVBvc2l0aW9uKCk7cmV0dXJuIHRoaXM7fSxzZXRBdXRvRmxpcDpmdW5j dGlvbih0KXt0aGlzLl9hdXRvRmxpcD0hIXQ7dGhpcy5fc2hvd24mJnRoaXMudXBk YXRlUG9zaXRpb24oKTtyZXR1cm4gdGhpczt9LHNob3c6ZnVuY3Rpb24oKXt0aGlz LnBhcmVudC5zaG93KCk7aWYodGhpcy5fc2hvd24pe2UucmVnaXN0ZXIodGhpcy5f cm9vdCx0aGlzLl9jb250ZXh0KTt0aGlzLl9yZXNpemVMaXN0ZW5lcj10aGlzLl9y ZXNpemVMaXN0ZW5lcnx8RXZlbnQubGlzdGVuKHdpbmRvdywncmVzaXplJyx0aGlz LnVwZGF0ZVBvc2l0aW9uLmJpbmQodGhpcykpO31yZXR1cm4gdGhpczt9LGhpZGU6 ZnVuY3Rpb24oKXtlLnJlbW92ZSh0aGlzLl9yb290KTt0aGlzLl9yZXNpemVMaXN0 ZW5lciYmdGhpcy5fcmVzaXplTGlzdGVuZXIucmVtb3ZlKCk7dGhpcy5fcmVzaXpl TGlzdGVuZXI9bnVsbDtyZXR1cm4gdGhpcy5wYXJlbnQuaGlkZSgpO30sdXBkYXRl UG9zaXRpb246ZnVuY3Rpb24oKXtpZighdGhpcy5fY29udGV4dClyZXR1cm4gZmFs c2U7aWYodGhpcy5fYXV0b0ZsaXApdGhpcy5fYWRqdXN0UG9zaXRpb24oKTtpZigh dGhpcy5fcG9zaXRpb24pcmV0dXJuIGZhbHNlO3RoaXMuX3VwZGF0ZVdyYXBwZXJQ b3NpdGlvbigpO3ZhciB2PWIuaXNGaXhlZCh0aGlzLl9jb250ZXh0KSYmdGhpcy5f Y29udGV4dFNjcm9sbFBhcmVudD09PXdpbmRvdztiLmNvbmRpdGlvbkNsYXNzKHRo aXMuX3Jvb3QsJ3VpQ29udGV4dHVhbExheWVyUG9zaXRpb25lckZpeGVkJyx2KTt2 YXIgdSx6YTtpZih2KXt1PSd2aWV3cG9ydCc7emE9bmV3IGooMCwwKTt9ZWxzZXt1 PSdkb2N1bWVudCc7dmFyIHk9dGhpcy5fcm9vdC5vZmZzZXRQYXJlbnQ7aWYoIXkp cmV0dXJuIGZhbHNlO3phPWouZ2V0RWxlbWVudFBvc2l0aW9uKHksdSk7aWYoeSE9 PWRvY3VtZW50LmJvZHkpemE9emEuc3ViKG5ldyBqKHkuc2Nyb2xsTGVmdCx5LnNj cm9sbFRvcCkpO312YXIgdD1qLmdldEVsZW1lbnRQb3NpdGlvbih0aGlzLl9jb250 ZXh0LHUpO3ZhciB4PXQueC16YS54O3ZhciB6Yj10LnktemEueTt2YXIgej10aGlz Ll9nZXRPZmZzZXRYKHRoaXMuX3Bvc2l0aW9uLHRoaXMuX2FsaWdubWVudCk7aWYo dGhpcy5fcG9zaXRpb249PSdiZWxvdycpemIrPXRoaXMuX2NvbnRleHQub2Zmc2V0 SGVpZ2h0O3ZhciB3PXRoaXMuX3Bvc2l0aW9uPT0nYWJvdmUnfHx0aGlzLl9wb3Np dGlvbj09J2JlbG93JztpZigodGhpcy5fcG9zaXRpb249PSdyaWdodCd8fCh3JiZ0 aGlzLl9hbGlnbm1lbnQ9PSdyaWdodCcpKSE9aW50bF9sb2NhbGVfaXNfcnRsKCkp eCs9dGhpcy5fY29udGV4dC5vZmZzZXRXaWR0aDtpZih3JiZ0aGlzLl9hbGlnbm1l bnQ9PSdjZW50ZXInKXorPSh0aGlzLl9jb250ZXh0Lm9mZnNldFdpZHRoLXRoaXMu X2NvbnRlbnQub2Zmc2V0V2lkdGgpLzI7Yi5zZXRTdHlsZSh0aGlzLl9yb290LCds ZWZ0JywoeCsoaW50bF9sb2NhbGVfaXNfcnRsKCk/LTE6MSkqeikrJ3B4Jyk7Yi5z ZXRTdHlsZSh0aGlzLl9yb290LCd0b3AnLCh6Yit0aGlzLl9nZXRPZmZzZXRZKHRo aXMuX3Bvc2l0aW9uLHRoaXMuX2FsaWdubWVudCkpKydweCcpO3RoaXMuX3N0YWNr T25Ub3BPZih0aGlzLl9jb250ZXh0KTtyZXR1cm4gdHJ1ZTt9LGRlc3Ryb3k6ZnVu Y3Rpb24oKXt0aGlzLnBhcmVudC5kZXN0cm95KCk7dGhpcy5fY29udGVudFdyYXBw ZXI9bnVsbDt0aGlzLl9jb250ZW50PW51bGw7cmV0dXJuIHRoaXM7fSxfdXBkYXRl V3JhcHBlclBvc2l0aW9uOmZ1bmN0aW9uKCl7aWYodGhpcy5fcG9zaXRpb249PSdh Ym92ZScpe2Iuc2V0U3R5bGUodGhpcy5fY29udGVudFdyYXBwZXIsJ2JvdHRvbScs JzAnKTt9ZWxzZSBiLnNldFN0eWxlKHRoaXMuX2NvbnRlbnRXcmFwcGVyLCdib3R0 b20nLCcnKTt2YXIgdD1pbnRsX2xvY2FsZV9pc19ydGwoKT8nbGVmdCc6J3JpZ2h0 Jzt2YXIgdT10aGlzLl9wb3NpdGlvbj09J2Fib3ZlJ3x8dGhpcy5fcG9zaXRpb249 PSdiZWxvdyc7aWYodGhpcy5fcG9zaXRpb249PSdsZWZ0J3x8KHUmJnRoaXMuX2Fs aWdubWVudD09J3JpZ2h0Jykpe2Iuc2V0U3R5bGUodGhpcy5fY29udGVudFdyYXBw ZXIsdCwnMCcpO31lbHNlIGIuc2V0U3R5bGUodGhpcy5fY29udGVudFdyYXBwZXIs dCwnJyk7dGhpcy5fYWRkUG9zaXRpb25DbGFzcyh0aGlzLl9wb3NpdGlvbix0aGlz Ll9hbGlnbm1lbnQpO30sX2FkanVzdFBvc2l0aW9uOmZ1bmN0aW9uKCl7dGhpcy5f cmVtb3ZlUG9zaXRpb25DbGFzcyh0aGlzLl9wb3NpdGlvbix0aGlzLl9hbGlnbm1l bnQpO3RoaXMuX3Bvc2l0aW9uPW51bGw7dmFyIHU9bygnZ2xvYmFsQ29udGFpbmVy Jyk7dmFyIHQ9KHUmJmYuY29udGFpbnModSx0aGlzLl9jb250ZXh0KSl8fHAodGhp cy5fY29udGV4dCk8MzAwO3ZhciB4PW5ldyBpKHQ/bCgpOjAsdD9rKCk6ZG9jdW1l bnQuYm9keS5vZmZzZXRXaWR0aCxqLmdldFZpZXdwb3J0RGltZW5zaW9ucygpLnks MCk7dmFyIHc9ZnVuY3Rpb24oeix5KXtpZih0aGlzLl9jYW5TZWVDb250ZXh0RWRn ZSh6KSl7dGhpcy5fcG9zaXRpb249ejtpZih0aGlzLl93aWxsRWxlbWVudEZpdCh4 LHoseSkpe3RoaXMuX2FsaWdubWVudD15O3JldHVybiB0cnVlO319cmV0dXJuIGZh bHNlO30uYmluZCh0aGlzKTtpZih3KHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9uLHRo aXMuX3ByZWZlcnJlZEFsaWdubWVudCkpcmV0dXJuO2lmKHcoZC5PUFBPU0lURVt0 aGlzLl9wcmVmZXJyZWRQb3NpdGlvbl0sdGhpcy5fcHJlZmVycmVkQWxpZ25tZW50 KSlyZXR1cm47aWYodGhpcy5fcHJlZmVycmVkUG9zaXRpb249PSdhYm92ZSd8fHRo aXMuX3ByZWZlcnJlZFBvc2l0aW9uPT0nYmVsb3cnKXt2YXIgdj10aGlzLl9wcmVm ZXJyZWRBbGlnbm1lbnQ9PSdsZWZ0Jz8ncmlnaHQnOidsZWZ0JztpZih3KHRoaXMu X3ByZWZlcnJlZFBvc2l0aW9uLHYpKXJldHVybjt9fSxfY2FuU2VlQ29udGV4dEVk Z2U6ZnVuY3Rpb24odil7dmFyIHc9dGhpcy5fY29udGV4dFNjcm9sbFBhcmVudDt2 YXIgeTtpZih3PT09d2luZG93KXt5PWwoKTt9ZWxzZSB5PWouZ2V0RWxlbWVudFBv c2l0aW9uKHcsJ3ZpZXdwb3J0JykueTt2YXIgdT1qLmdldEVsZW1lbnRQb3NpdGlv bih0aGlzLl9jb250ZXh0LCd2aWV3cG9ydCcpLnk7aWYodiE9J2JlbG93Jyl7cmV0 dXJuIHU+PXk7fWVsc2V7dmFyIHg7aWYodz09PXdpbmRvdyl7eD1qLmdldFZpZXdw b3J0RGltZW5zaW9ucygpLnk7fWVsc2UgeD15K3cub2Zmc2V0SGVpZ2h0O3ZhciB0 PXUrdGhpcy5fY29udGV4dC5vZmZzZXRIZWlnaHQ7cmV0dXJuIHQ8PXg7fX0sX3dp bGxFbGVtZW50Rml0OmZ1bmN0aW9uKHoseCx0KXt2YXIgdj1qLmdldEVsZW1lbnRQ b3NpdGlvbih0aGlzLl9jb250ZXh0LCd2aWV3cG9ydCcpO3ZhciB5PXYueSt0aGlz Ll9nZXRPZmZzZXRZKHgsdCk7aWYoeD09J2Fib3ZlJyl7eS09dGhpcy5fY29udGVu dC5vZmZzZXRIZWlnaHQ7fWVsc2UgaWYoeD09J2JlbG93Jyl5Kz10aGlzLl9jb250 ZXh0Lm9mZnNldEhlaWdodDt2YXIgdT15K3RoaXMuX2NvbnRlbnQub2Zmc2V0SGVp Z2h0O3ZhciB3PXYueCt0aGlzLl9nZXRPZmZzZXRYKHgsdCk7aWYoeD09J3JpZ2h0 Jyl7dys9dGhpcy5fY29udGV4dC5vZmZzZXRXaWR0aDt9ZWxzZSBpZih4PT0nbGVm dCcpe3ctPXRoaXMuX2NvbnRlbnQub2Zmc2V0V2lkdGg7fWVsc2UgaWYodD09J3Jp Z2h0Jyl3Kz10aGlzLl9jb250ZXh0Lm9mZnNldFdpZHRoLXRoaXMuX2NvbnRlbnQu b2Zmc2V0V2lkdGg7cmlnaHQ9dyt0aGlzLl9jb250ZW50Lm9mZnNldFdpZHRoO3Jl dHVybiB6LmNvbnRhaW5zKG5ldyBpKHkscmlnaHQsdSx3KSk7fSxfZ2V0T2Zmc2V0 WDpmdW5jdGlvbih1LHQpe2lmKHU9PSdsZWZ0J3x8dT09J3JpZ2h0Jyl7aWYodGhp cy5fcHJlZmVycmVkUG9zaXRpb24hPXUpcmV0dXJuIC10aGlzLl9vZmZzZXRYO31l bHNlIGlmKHRoaXMuX3ByZWZlcnJlZEFsaWdubWVudCE9dClyZXR1cm4gLXRoaXMu X29mZnNldFg7cmV0dXJuIHRoaXMuX29mZnNldFg7fSxfZ2V0T2Zmc2V0WTpmdW5j dGlvbih0KXtpZigodD09J2Fib3ZlJ3x8dD09J2JlbG93JykmJnRoaXMuX3ByZWZl cnJlZFBvc2l0aW9uIT10KXJldHVybiAtdGhpcy5fb2Zmc2V0WTtyZXR1cm4gdGhp cy5fb2Zmc2V0WTt9LF9nZW5lcmF0ZVBvc2l0aW9uQ2xhc3M6ZnVuY3Rpb24odSx0 KXtpZih1PT0nYWJvdmUnfHx1PT0nYmVsb3cnKXJldHVybiB1K3Q7cmV0dXJuIHU7 fSxfcmVtb3ZlUG9zaXRpb25DbGFzczpmdW5jdGlvbih1LHQpe2IucmVtb3ZlQ2xh c3ModGhpcy5fY29udGVudFdyYXBwZXIsdGhpcy5fZ2VuZXJhdGVQb3NpdGlvbkNs YXNzKHUsdCkpO30sX2FkZFBvc2l0aW9uQ2xhc3M6ZnVuY3Rpb24odSx0KXtiLmFk ZENsYXNzKHRoaXMuX2NvbnRlbnRXcmFwcGVyLHRoaXMuX2dlbmVyYXRlUG9zaXRp b25DbGFzcyh1LHQpKTt9fSk7ci5leHBvcnRzPWQ7fSk7Cl9fZSgiTWVudSIsWyJh cmJpdGVyIiwiY29weVByb3BlcnRpZXMiLCJjc3MiLCJEYXRhU3RvcmUiLCJkb20i LCJkb20taHRtbCIsImtleS1ldmVudC1jb25zdGFudHMiLCJvbmxvYWQiLCJwYXJl bnQiLCJldmVudC1leHRlbnNpb25zIl0sZnVuY3Rpb24odix4LHcsdSl7dmFyIGE9 eCgiYXJiaXRlciIpO3ZhciB0PXgoImNvcHlQcm9wZXJ0aWVzIik7dmFyIGI9eCgi Y3NzIik7dmFyIGQ9eCgiRGF0YVN0b3JlIik7dmFyIGM9eCgiZG9tIik7dmFyIGU9 eCgiZG9tLWh0bWwiKTt2YXIgZj14KCJrZXktZXZlbnQtY29uc3RhbnRzIik7dmFy IGg9eCgib25sb2FkIik7dmFyIGk9eCgicGFyZW50Iik7eCgiZXZlbnQtZXh0ZW5z aW9ucyIpO3ZhciBnPW51bGw7dmFyIHI9J21lbnU6bW91c2VvdmVyJzt2YXIgaj1u dWxsO2Z1bmN0aW9uIGsoeSl7cmV0dXJuIGkuYnlDbGFzcyh5LCd1aU1lbnUnKTt9 ZnVuY3Rpb24gbCh5KXtyZXR1cm4gaS5ieUNsYXNzKHksJ3VpTWVudUl0ZW0nKTt9 ZnVuY3Rpb24gbSh5KXtpZihkb2N1bWVudC5hY3RpdmVFbGVtZW50KXt2YXIgej1s KGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO3JldHVybiB5LmluZGV4T2Yoeik7fXJl dHVybiAtMTt9ZnVuY3Rpb24gbih5KXtyZXR1cm4gYy5maW5kKHksJ2EuaXRlbUFu Y2hvcicpO31mdW5jdGlvbiBvKHkpe3JldHVybiBiLmhhc0NsYXNzKHksJ2NoZWNr ZWQnKTt9ZnVuY3Rpb24gcCh5KXtyZXR1cm4gIWIuaGFzQ2xhc3MoeSwnZGlzYWJs ZWQnKTt9ZnVuY3Rpb24gcShldmVudCl7dmFyIHk9ZG9jdW1lbnQuYWN0aXZlRWxl bWVudDtpZigheXx8IWkuYnlDbGFzcyh5LCd1aU1lbnUnKXx8IWMuaXNOb2RlT2ZU eXBlKHksWydpbnB1dCcsJ3RleHRhcmVhJ10pKXt2YXIgej1sKGV2ZW50LmdldFRh cmdldCgpKTt6JiZnLmZvY3VzSXRlbSh6KTt9fWZ1bmN0aW9uIHMoeSl7Zy5pbmZv cm0oJ3NlbGVjdCcse21lbnU6ayh5KSxpdGVtOnl9KTt9aC5ydW5PbmxvYWQoZnVu Y3Rpb24oKXt2YXIgeT17fTt5LmNsaWNrPWZ1bmN0aW9uKGV2ZW50KXt2YXIgemI9 bChldmVudC5nZXRUYXJnZXQoKSk7aWYoemImJnAoemIpKXtzKHpiKTt2YXIgej1u KHpiKTt2YXIgemE9ei5ocmVmO3ZhciB6Yz16LmdldEF0dHJpYnV0ZSgncmVsJyk7 cmV0dXJuICh6YyYmemMhPT0naWdub3JlJyl8fCh6YSYmemEuY2hhckF0KHphLmxl bmd0aC0xKSE9PScjJyk7fX07eS5rZXlkb3duPWZ1bmN0aW9uKGV2ZW50KXt2YXIg emk9ZXZlbnQuZ2V0VGFyZ2V0KCk7aWYoZXZlbnQuZ2V0TW9kaWZpZXJzKCkuYW55 KXJldHVybjtpZighanx8Yy5pc05vZGVPZlR5cGUoemksWydpbnB1dCcsJ3RleHRh cmVhJ10pKXJldHVybjt2YXIgemU9RXZlbnQuZ2V0S2V5Q29kZShldmVudCk7dmFy IHpjO3N3aXRjaCh6ZSl7Y2FzZSBmLlVQOmNhc2UgZi5ET1dOOnZhciB6YT1nLmdl dEVuYWJsZWRJdGVtcyhqKTt6Yz1tKHphKTtnLmZvY3VzSXRlbSh6YVt6YysoemU9 PT1mLlVQPy0xOjEpXSk7cmV0dXJuIGZhbHNlO2Nhc2UgZi5TUEFDRTp2YXIgemg9 bCh6aSk7aWYoemgpe3MoemgpO2V2ZW50LnByZXZlbnQoKTt9YnJlYWs7ZGVmYXVs dDp2YXIgej1TdHJpbmcuZnJvbUNoYXJDb2RlKHplKS50b0xvd2VyQ2FzZSgpO3Zh ciB6ZD1nLmdldEVuYWJsZWRJdGVtcyhqKTt6Yz1tKHpkKTt2YXIgemI9emM7dmFy IHpmPXpkLmxlbmd0aDt3aGlsZSgofnpjJiYoemI9Kyt6YiV6ZikhPT16Yyl8fCgh fnpjJiYrK3piPHpmKSl7dmFyIHpnPWcuZ2V0SXRlbUxhYmVsKHpkW3piXSk7aWYo emcmJnpnLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpPT09eil7Zy5mb2N1c0l0ZW0o emRbemJdKTtyZXR1cm4gZmFsc2U7fX19fTtFdmVudC5saXN0ZW4oZG9jdW1lbnQu Ym9keSx5KTt9KTtnPXcuZXhwb3J0cz10KG5ldyBhKCkse2ZvY3VzSXRlbTpmdW5j dGlvbih5KXtpZih5JiZwKHkpKXt0aGlzLl9yZW1vdmVTZWxlY3RlZChrKHkpKTti LmFkZENsYXNzKHksJ3NlbGVjdGVkJyk7bih5KS5mb2N1cygpO319LGdldEVuYWJs ZWRJdGVtczpmdW5jdGlvbih5KXtyZXR1cm4gZy5nZXRJdGVtcyh5KS5maWx0ZXIo cCk7fSxnZXRDaGVja2VkSXRlbXM6ZnVuY3Rpb24oeSl7cmV0dXJuIGcuZ2V0SXRl bXMoeSkuZmlsdGVyKG8pO30sZ2V0SXRlbXM6ZnVuY3Rpb24oeSl7cmV0dXJuIGMu c2NyeSh5LCdsaS51aU1lbnVJdGVtJyk7fSxnZXRJdGVtTGFiZWw6ZnVuY3Rpb24o eSl7cmV0dXJuIHkuZ2V0QXR0cmlidXRlKCdkYXRhLWxhYmVsJywyKXx8Jyc7fSxp c0l0ZW1DaGVja2VkOmZ1bmN0aW9uKHkpe3JldHVybiBiLmhhc0NsYXNzKHksJ2No ZWNrZWQnKTt9LHJlZ2lzdGVyOmZ1bmN0aW9uKHkseil7eT1rKHkpO2lmKCFkLmdl dCh5LHIpKWQuc2V0KHkscixFdmVudC5saXN0ZW4oeSwnbW91c2VvdmVyJyxxKSk7 aWYoeiE9PWZhbHNlKWo9eTt9LHNldEl0ZW1FbmFibGVkOmZ1bmN0aW9uKHoseSl7 aWYoIXkmJiFjLnNjcnkoeiwnc3Bhbi5kaXNhYmxlZEFuY2hvcicpWzBdKWMuYXBw ZW5kQ29udGVudCh6LGMuJE4oJ3NwYW4nLHtjbGFzc05hbWU6Yy5maW5kKHosJ2En KS5jbGFzc05hbWUrJyBkaXNhYmxlZEFuY2hvcid9LGUobih6KS5pbm5lckhUTUwp KSk7Yi5jb25kaXRpb25DbGFzcyh6LCdkaXNhYmxlZCcsIXkpO30sdG9nZ2xlSXRl bTpmdW5jdGlvbih6KXt2YXIgeT0hZy5pc0l0ZW1DaGVja2VkKHopO2cuc2V0SXRl bUNoZWNrZWQoeix5KTt9LHNldEl0ZW1DaGVja2VkOmZ1bmN0aW9uKHoseSl7Yi5j b25kaXRpb25DbGFzcyh6LCdjaGVja2VkJyx5KTtuKHopLnNldEF0dHJpYnV0ZSgn YXJpYS1jaGVja2VkJyx5KTt9LHVucmVnaXN0ZXI6ZnVuY3Rpb24oeil7ej1rKHop O3ZhciB5PWQucmVtb3ZlKHoscik7eSYmeS5yZW1vdmUoKTtqPW51bGw7dGhpcy5f cmVtb3ZlU2VsZWN0ZWQoeik7fSxfcmVtb3ZlU2VsZWN0ZWQ6ZnVuY3Rpb24oeSl7 Zy5nZXRJdGVtcyh5KS5maWx0ZXIoZnVuY3Rpb24oeil7cmV0dXJuIGIuaGFzQ2xh c3Moeiwnc2VsZWN0ZWQnKTt9KS5lYWNoKGZ1bmN0aW9uKHope2IucmVtb3ZlQ2xh c3Moeiwnc2VsZWN0ZWQnKTt9KTt9fSk7fSk7CmZ1bmN0aW9uIE9uVmlzaWJsZShi LGMsZSxhLGQpe3RoaXMuZWxlbWVudD1iO3RoaXMuaGFuZGxlcj1jO3RoaXMuc3Ry aWN0PWU7dGhpcy5idWZmZXI9Y29hbGVzY2UoYSwzMDApO3RoaXMub3B0aW9ucz1k fHx7fTt0aGlzLmxhc3RZPVZlY3RvcjIuZ2V0U2Nyb2xsUG9zaXRpb24oKS55O3Ro aXMubGFzdFRpbWU9RGF0ZS5ub3coKTt0aGlzLnJlc2V0KCk7b25sZWF2ZVJlZ2lz dGVyKHRoaXMucmVtb3ZlLmJpbmQodGhpcykpO31jb3B5X3Byb3BlcnRpZXMoT25W aXNpYmxlLnByb3RvdHlwZSx7cmVzZXQ6ZnVuY3Rpb24oKXtpZih0aGlzLnNjcm9s bExpc3RlbmVyKXJldHVybjt2YXIgYT10aHJvdHRsZShmdW5jdGlvbigpe3ZhciBj PVZlY3RvcjIuZ2V0RWxlbWVudFBvc2l0aW9uKHRoaXMuZWxlbWVudCk7aWYoIWMp e3RoaXMucmVtb3ZlKCk7cmV0dXJuO310aGlzLnRhcmdldFk9Yy55O3ZhciBoPVZl Y3RvcjIuZ2V0U2Nyb2xsUG9zaXRpb24oKS55O3ZhciBmPVZlY3RvcjIuZ2V0Vmll d3BvcnREaW1lbnNpb25zKCkueTt2YXIgZz1oK2YrdGhpcy5idWZmZXI7aWYoZz50 aGlzLnRhcmdldFkpe3ZhciBlPSF0aGlzLnN0cmljdHx8KGgtdGhpcy5idWZmZXI8 KHRoaXMudGFyZ2V0WStWZWN0b3IyLmdldEVsZW1lbnREaW1lbnNpb25zKHRoaXMu ZWxlbWVudCkueSkpO2lmKGUpe3RoaXMucmVtb3ZlKCk7aWYodGhpcy5vcHRpb25z LmRldGVjdF9zcGVlZCl7dmFyIGI9KGgtdGhpcy5sYXN0WSk7dmFyIGQ9Yi8oRGF0 ZS5ub3coKS10aGlzLmxhc3RUaW1lKzEpO2lmKChkPmYvMTAwKXx8KGc+PVZlY3Rv cjIuZ2V0RG9jdW1lbnREaW1lbnNpb25zKCkueSYmYj4xMDAwKSlyZXR1cm4gdHJ1 ZTt9dGhpcy5oYW5kbGVyKCk7fX1pZih0aGlzLm9wdGlvbnMuZGV0ZWN0X3NwZWVk KXt0aGlzLmxhc3RZPWg7dGhpcy5sYXN0VGltZT1EYXRlLm5vdygpO31yZXR1cm4g dHJ1ZTt9LmJpbmQodGhpcyksMTAwKTt0aGlzLnNjcm9sbExpc3RlbmVyPUV2ZW50 Lmxpc3Rlbih3aW5kb3csJ3Njcm9sbCcsYSk7dGhpcy5yZXNpemVMaXN0ZW5lcj1F dmVudC5saXN0ZW4od2luZG93LCdyZXNpemUnLGEpO2EoKTt9LHJlbW92ZTpmdW5j dGlvbigpe2lmKHRoaXMuc2Nyb2xsTGlzdGVuZXIpe3RoaXMuc2Nyb2xsTGlzdGVu ZXIucmVtb3ZlKCk7dGhpcy5yZXNpemVMaXN0ZW5lci5yZW1vdmUoKTt0aGlzLnNj cm9sbExpc3RlbmVyPXRoaXMucmVzaXplTGlzdGVuZXI9bnVsbDt9fX0pOwp2YXIg UGhvdG9zQ29uc3Q9e1ZJRVdFUl9QRVJNQUxJTks6MCxWSUVXRVJfVEhFQVRFUjox LFZJRVdFUl9TTk9XQk9YOjIsQlVMS19FRElUT1I6MyxGTEFTSF9VUExPQURFUjo0 LGluQ2VudGVyU3RhZ2U6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PVBob3Rvc0NvbnN0 LlZJRVdFUl9USEVBVEVSfHxhPT1QaG90b3NDb25zdC5WSUVXRVJfU05PV0JPWDt9 LFNJWkVfTk9STUFMOiduJ307CmZ1bmN0aW9uIEFsYnVtU2Nyb2xsZXIoKXt9QWxi dW1TY3JvbGxlci5wcm90b3R5cGU9e2luaXQ6ZnVuY3Rpb24oZCxlKXt0aGlzLnBo b3RvR3JvdXBzPXt9O3RoaXMuc2Nyb2xsTGlzdGVuZXI9e307aWYoZC5sZW5ndGgp e3ZhciBiPWQuc2hpZnQoKSxmPWIsYT0wLGM9Yi5pZDt3aGlsZShmKXtpZighdGhp cy5waG90b0dyb3Vwc1tjXSl0aGlzLnBob3RvR3JvdXBzW2NdPVtdO3ZhciBnPURP TS5zY3J5KGYsJ2EudWlTY3JvbGxhYmxlVGh1bWInKTtpZihnLmxlbmd0aD4wKXRo aXMucGhvdG9Hcm91cHNbY10ucHVzaChnWzBdKTtmPXRoaXMuZ2V0TmV4dFBob3Rv Q2VsbChmKTtpZigrK2ElZT09MCl7dGhpcy5zY3JvbGxMaXN0ZW5lcltjXT1uZXcg T25WaXNpYmxlKGIsdGhpcy5zaG93UGFnZS5iaW5kKHRoaXMsYikpO2I9ZC5zaGlm dCgpO2lmKGIpYz1iLmlkO319aWYoYil0aGlzLnNjcm9sbExpc3RlbmVyW2NdPW5l dyBPblZpc2libGUoYix0aGlzLnNob3dQYWdlLmJpbmQodGhpcyxiKSk7fX0sc2hv d1BhZ2U6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5waG90b0dyb3Vwc1thLmlkXTtp ZihiKWZvcih2YXIgYz0wLGQ9Yi5sZW5ndGg7YzxkO2MrKylET00uZmluZChiW2Nd LCdpJykuc3R5bGUuYmFja2dyb3VuZEltYWdlPSd1cmwoJytiW2NdLmdldEF0dHJp YnV0ZSgnZGF0YS1zcmMnKSsnKSc7fSxnZXROZXh0UGhvdG9DZWxsOmZ1bmN0aW9u KGEpe3ZhciBiPW51bGw7aWYoYS5uZXh0U2libGluZyl7Yj1hLm5leHRTaWJsaW5n O31lbHNlIGlmKGEucGFyZW50Tm9kZS5uZXh0U2libGluZyliPWEucGFyZW50Tm9k ZS5uZXh0U2libGluZy5maXJzdENoaWxkO2lmKGImJmIuY2hpbGRFbGVtZW50Q291 bnQhPT0wKXJldHVybiBiO3JldHVybiBudWxsO319Owp2YXIgUGhvdG9JbmxpbmVD YXB0aW9uRWRpdG9yPWZ1bmN0aW9uKGEpe3RoaXMuaW5zdGFuY2VJZD1hO1Bob3Rv SW5saW5lQ2FwdGlvbkVkaXRvci5pbnN0YW5jZXNbYV09dGhpczt9O2NvcHlfcHJv cGVydGllcyhQaG90b0lubGluZUNhcHRpb25FZGl0b3Ise2luc3RhbmNlczp7fSxn ZXRJbnN0YW5jZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5pbnN0YW5jZXNbYV07 fX0pO1Bob3RvSW5saW5lQ2FwdGlvbkVkaXRvci5wcm90b3R5cGU9e2luaXQ6ZnVu Y3Rpb24oYSl7dGhpcy5lbGVtZW50PWE7RXZlbnQubGlzdGVuKGEsJ2NsaWNrJyx0 aGlzLmhhbmRsZUNsaWNrLmJpbmQodGhpcykpO3ZhciBiPURPTS5zY3J5KGEsJ2lu cHV0W25hbWU9ImNhcHRpb25faWQiXScpO2lmKGIubGVuZ3RoKWJbMF0udmFsdWU9 dGhpcy5pbnN0YW5jZUlkO3RoaXMuaW5wdXRTdHI9Jyc7dmFyIGM9RE9NLnNjcnko dGhpcy5lbGVtZW50LCd0ZXh0YXJlYS5mYlBob3RvQ2FwdGlvbklucHV0JylbMF07 aWYoYyl0aGlzLmlucHV0U3RyPUlucHV0LmdldFZhbHVlKGMpO30saGFuZGxlQ2xp Y2s6ZnVuY3Rpb24oZXZlbnQpe3ZhciBhPWV2ZW50LmdldFRhcmdldCgpO2lmKFBh cmVudC5ieUNsYXNzKGEsJ2VkaXRJY29uJyl8fFBhcmVudC5ieUNsYXNzKGEsJ25v Q2FwdGlvbicpKXt0aGlzLnRvZ2dsZUVkaXREZXNjcmlwdGlvbih0cnVlKTt9ZWxz ZSBpZihQYXJlbnQuYnlDbGFzcyhhLCdjYW5jZWxFZGl0Jykpe0lucHV0LnNldFZh bHVlKERPTS5maW5kKHRoaXMuZWxlbWVudCwndGV4dGFyZWEuZmJQaG90b0NhcHRp b25JbnB1dCcpLHRoaXMuaW5wdXRTdHIpO3RoaXMudG9nZ2xlRWRpdERlc2NyaXB0 aW9uKGZhbHNlKTt9fSxzZXRDYXB0aW9uOmZ1bmN0aW9uKGEpe0RPTS5zZXRDb250 ZW50KERPTS5maW5kKHRoaXMuZWxlbWVudCwnLmZiUGhvdG9DYXB0aW9uVGV4dCcp LGEpO3RoaXMudG9nZ2xlRWRpdERlc2NyaXB0aW9uKGZhbHNlKTt0aGlzLmlucHV0 U3RyPUlucHV0LmdldFZhbHVlKERPTS5maW5kKHRoaXMuZWxlbWVudCwndGV4dGFy ZWEuZmJQaG90b0NhcHRpb25JbnB1dCcpKTt9LGdldENhcHRpb246ZnVuY3Rpb24o KXtyZXR1cm4gRE9NLmdldFRleHQoRE9NLmZpbmQodGhpcy5lbGVtZW50LCcuZmJQ aG90b0NhcHRpb25UZXh0JykpO30sdG9nZ2xlRWRpdERlc2NyaXB0aW9uOmZ1bmN0 aW9uKGMpe2lmKCFjKURPTS5maW5kKHRoaXMuZWxlbWVudCwndGV4dGFyZWEuZmJQ aG90b0NhcHRpb25JbnB1dCcpLmJsdXIoKTtDU1MuY29uZGl0aW9uQ2xhc3ModGhp cy5lbGVtZW50LCdmYlBob3RvSW5saW5lQ2FwdGlvbkVkaXRvckVkaXRNb2RlJywh IWMpO2lmKGMpe3ZhciBiPURPTS5maW5kKHRoaXMuZWxlbWVudCwndGV4dGFyZWEu ZmJQaG90b0NhcHRpb25JbnB1dCcpO3ZhciBhPURPTUNvbnRyb2wuZ2V0SW5zdGFu Y2UoYik7YSYmYS51cGRhdGUoKTtiLmZvY3VzKCk7fWVsc2V7Q1NTLmNvbmRpdGlv bkNsYXNzKERPTS5maW5kKHRoaXMuZWxlbWVudCwnLm5vQ2FwdGlvbicpLCdoaWRk ZW5fZWxlbScsdGhpcy5nZXRDYXB0aW9uKCkubGVuZ3RoKTtDU1MuY29uZGl0aW9u Q2xhc3MoRE9NLmZpbmQodGhpcy5lbGVtZW50LCcud2l0aENhcHRpb24nKSwnaGlk ZGVuX2VsZW0nLCF0aGlzLmdldENhcHRpb24oKS5sZW5ndGgpO319fTsKZnVuY3Rp b24gUGhvdG9zVGFnZ2luZ1dhdGVyZmFsbChhKXtQaG90b3NUYWdnaW5nV2F0ZXJm YWxsLl9xdWV1ZU5hbWU9YXx8UGhvdG9zVGFnZ2luZ1dhdGVyZmFsbC5fcXVldWVO YW1lO31jb3B5X3Byb3BlcnRpZXMoUGhvdG9zVGFnZ2luZ1dhdGVyZmFsbCx7QkVH SU46ImJlZ2luIixUQUdfRkFDRToidGFnX2ZhY2UiLEFERF9OQU1FOiJhZGRfbmFt ZSIsVEFHX0NPTkZJUk1FRDoidGFnX2NvbmZpcm1lZCIsRklOSVNIOiJmaW5pc2gi LFRZUEVfTkFNRTondHlwZV9uYW1lJyxTRUxFQ1RfTkFNRTonc2VsZWN0X25hbWUn LF9xdWV1ZU5hbWU6bnVsbCxzZW5kU2lnbmFsOmZ1bmN0aW9uKGIsYSl7bmV3IEFz eW5jU2lnbmFsKCcvYWpheC9waG90b3MvdGFnX3dhdGVyZmFsbC5waHAnLHtkYXRh OkpTT04uc3RyaW5naWZ5KGIpfSkuc2V0SGFuZGxlcihhKS5zZW5kKCk7fX0pOwpm dW5jdGlvbiBUeXBlYWhlYWQoYixkLGEsYyl7dGhpcy5hcmdzPXtkYXRhOmIsdmll dzpkLGNvcmU6YX07RGF0YVN0b3JlLnNldChjLCdUeXBlYWhlYWQnLHRoaXMpO3Ro aXMuZWxlbWVudD1jO31UeXBlYWhlYWQuZ2V0SW5zdGFuY2U9ZnVuY3Rpb24oYSl7 dmFyIGI9UGFyZW50LmJ5Q2xhc3MoYSwndWlUeXBlYWhlYWQnKTtyZXR1cm4gYj9E YXRhU3RvcmUuZ2V0KGIsJ1R5cGVhaGVhZCcpOm51bGw7fTtDbGFzcy5taXhpbihU eXBlYWhlYWQsJ0FyYml0ZXInLHtpbml0OmZ1bmN0aW9uKGEpe3RoaXMuaW5pdD1i YWdvZmhvbGRpbmc7dGhpcy5nZXRDb3JlKCk7dGhpcy5wcm94eUV2ZW50cygpO3Ro aXMuaW5pdEJlaGF2aW9ycyhhfHxbXSk7dGhpcy5pbmZvcm0oJ2luaXQnLHRoaXMp O3RoaXMuZGF0YS5ib290c3RyYXAoKTt0aGlzLmNvcmUuZm9jdXMoKTt9LGdldERh dGE6ZnVuY3Rpb24oKXtpZighdGhpcy5kYXRhKXt2YXIgYT10aGlzLmFyZ3MuZGF0 YTt0aGlzLmRhdGE9YTt0aGlzLmRhdGEuaW5pdCgpO31yZXR1cm4gdGhpcy5kYXRh O30sZ2V0VmlldzpmdW5jdGlvbigpe2lmKCF0aGlzLnZpZXcpe3ZhciBhPXRoaXMu YXJncy52aWV3O3ZhciBiPWdlKGEubm9kZV9pZCk7aWYoIWIpe2I9JE4oJ2Rpdics e2NsYXNzTmFtZTondWlUeXBlYWhlYWRWaWV3J30pO0RPTS5hcHBlbmRDb250ZW50 KHRoaXMuZWxlbWVudCxiKTt9dGhpcy52aWV3PW5ldyB3aW5kb3dbYS5jdG9yXShi LGEub3B0aW9uc3x8e30pO3RoaXMudmlldy5pbml0KCk7fXJldHVybiB0aGlzLnZp ZXc7fSxnZXRDb3JlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuY29yZSl7dmFyIGE9dGhp cy5hcmdzLmNvcmU7dGhpcy5jb3JlPW5ldyB3aW5kb3dbYS5jdG9yXShhLm9wdGlv bnN8fHt9KTt0aGlzLmNvcmUuaW5pdCh0aGlzLmdldERhdGEoKSx0aGlzLmdldFZp ZXcoKSx0aGlzLmdldEVsZW1lbnQoKSk7fXJldHVybiB0aGlzLmNvcmU7fSxnZXRF bGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWxlbWVudDt9LHN3YXBEYXRh OmZ1bmN0aW9uKGIpe3ZhciBhPXRoaXMuY29yZTt0aGlzLmRhdGE9dGhpcy5hcmdz LmRhdGE9YjtiLmluaXQoKTtpZihhKXthLmRhdGE9YjthLmluaXREYXRhKCk7YS5y ZXNldCgpO31iLmJvb3RzdHJhcCgpO3JldHVybiBiO30scHJveHlFdmVudHM6ZnVu Y3Rpb24oKXtbdGhpcy5kYXRhLHRoaXMudmlldyx0aGlzLmNvcmVdLmVhY2goZnVu Y3Rpb24oYSl7YS5zdWJzY3JpYmUoYS5ldmVudHMsdGhpcy5pbmZvcm0uYmluZCh0 aGlzKSk7fSx0aGlzKTt9LGluaXRCZWhhdmlvcnM6ZnVuY3Rpb24oYSl7aWYod2lu ZG93LlR5cGVhaGVhZEJlaGF2aW9ycylhLmVhY2goZnVuY3Rpb24oYil7KFR5cGVh aGVhZEJlaGF2aW9yc1tiXXx8YmFnb2Zob2xkaW5nKSh0aGlzKTt9LHRoaXMpO319 KTsKdmFyIFR5cGVhaGVhZFV0aWw9KGZ1bmN0aW9uKCl7dmFyIGI9L1sgXSsvZzt2 YXIgYz0vW14gXSsvZzt2YXIgYT0vWy4sKyo/JHwje30oKVxeXC1cW1xdXFxcLyFA JScifj08Pl86O1x1MjAxMFx1MjAxMVx1MjAxMlx1MjAxM1x1MjAxNFx1MjAxNVx1 MzBmYl0vZzt2YXIgZD17fTt2YXIgcj17YToiXHUwNDMwIFx1MDBlMCBcdTAwZTEg XHUwMGUyIFx1MDBlMyBcdTAwZTQgXHUwMGU1IixiOiJcdTA0MzEiLGM6Ilx1MDQ0 NiBcdTAwZTcgXHUwMTBkIixkOiJcdTA0MzQgXHUwMGYwIFx1MDEwZiBcdTAxMTEi LGU6Ilx1MDQ0ZCBcdTA0MzUgXHUwMGU4IFx1MDBlOSBcdTAwZWEgXHUwMGViIFx1 MDExYiIsZjoiXHUwNDQ0IixnOiJcdTA0MzMgXHUwMTFmIixoOiJcdTA0NDUgXHUw MTI3IixpOiJcdTA0MzggXHUwMGVjIFx1MDBlZCBcdTAwZWUgXHUwMGVmIFx1MDEz MSIsajoiXHUwNDM5IixrOiJcdTA0M2EgXHUwMTM4IixsOiJcdTA0M2IgXHUwMTNl IFx1MDEzYSBcdTAxNDAgXHUwMTQyIixtOiJcdTA0M2MiLG46Ilx1MDQzZCBcdTAw ZjEgXHUwMTQ4IFx1MDE0OSBcdTAxNGIiLG86Ilx1MDQzZSBcdTAwZjggXHUwMGY2 IFx1MDBmNSBcdTAwZjQgXHUwMGYzIFx1MDBmMiIscDoiXHUwNDNmIixyOiJcdTA0 NDAgXHUwMTU5IFx1MDE1NSIsczoiXHUwNDQxIFx1MDE1ZiBcdTAxNjEgXHUwMTdm Iix0OiJcdTA0NDIgXHUwMTY1IFx1MDE2NyBcdTAwZmUiLHU6Ilx1MDQ0MyBcdTA0 NGUgXHUwMGZjIFx1MDBmYiBcdTAwZmEgXHUwMGY5IFx1MDE2ZiIsdjoiXHUwNDMy Iix5OiJcdTA0NGIgXHUwMGZmIFx1MDBmZCIsejoiXHUwNDM3IFx1MDE3ZSIsYWU6 Ilx1MDBlNiIsb2U6Ilx1MDE1MyIsdHM6Ilx1MDQ0NiIsY2g6Ilx1MDQ0NyIsaWo6 Ilx1MDEzMyIsc2g6Ilx1MDQ0OCIsc3M6Ilx1MDBkZiIseWE6Ilx1MDQ0ZiJ9O2Zv cih2YXIgbSBpbiByKXt2YXIgZj1yW21dLnNwbGl0KCcgJyk7Zm9yKHZhciBoPTA7 aDxmLmxlbmd0aDtoKyspZFtmW2hdXT1tO312YXIgcD17fTtmdW5jdGlvbiBlKHMp e3JldHVybiBzP3MucmVwbGFjZShhLCcgJyk6Jyc7fWZ1bmN0aW9uIGcodil7dj0o JycrdikudG9Mb3dlckNhc2UoKTt2YXIgdT0nJzt2YXIgcz0nJztmb3IodmFyIHQ9 di5sZW5ndGg7dC0tOyl7cz12LmNoYXJBdCh0KTt1PShkW3NdfHxzKSt1O31yZXR1 cm4gdS5yZXBsYWNlKGIsJyAnKTt9ZnVuY3Rpb24gcSh0KXt2YXIgdT1bXTt2YXIg cz1jLmV4ZWModCk7d2hpbGUocyl7cz1zWzBdO3UucHVzaChzKTtzPWMuZXhlYyh0 KTt9cmV0dXJuIHU7fWZ1bmN0aW9uIG8odix1KXt2PScnK3Y7aWYoIXAuaGFzT3du UHJvcGVydHkodikpe3ZhciB0PWcodik7dmFyIHM9ZSh0KTtwW3ZdPXt2YWx1ZTp2 LGZsYXRWYWx1ZTp0LHRva2VuczpxKHMpLGlzUHJlZml4UXVlcnk6cyYmc1tzLmxl bmd0aC0xXSE9JyAnfTt9aWYodSYmdHlwZW9mIHBbdl0uc29ydGVkVG9rZW5zPT0n dW5kZWZpbmVkJyl7cFt2XS5zb3J0ZWRUb2tlbnM9Y29weV9wcm9wZXJ0aWVzKFtd LHBbdl0udG9rZW5zKTtwW3ZdLnNvcnRlZFRva2Vucy5zb3J0KGZ1bmN0aW9uKHcs eCl7cmV0dXJuIHgubGVuZ3RoLXcubGVuZ3RoO30pO31yZXR1cm4gcFt2XTt9ZnVu Y3Rpb24gaih0LHosdil7dmFyIHk9byh6LHQ9PSdwcmVmaXgnKTt2YXIgemE9dD09 J3ByZWZpeCc/eS5zb3J0ZWRUb2tlbnM6eS50b2tlbnM7dmFyIHc9byh2KS50b2tl bnM7dmFyIHU9e307dmFyIHg9eS5pc1ByZWZpeFF1ZXJ5JiZ0PT0ncXVlcnknP3ph Lmxlbmd0aC0xOm51bGw7dmFyIHM9ZnVuY3Rpb24oemQsemMpe2Zvcih2YXIgemI9 MDt6Yjx3Lmxlbmd0aDsrK3piKXt2YXIgemU9d1t6Yl07aWYoIXVbemJdJiYoemU9 PXpkfHwoKHQ9PSdxdWVyeScmJnpjPT09eHx8dD09J3ByZWZpeCcpJiZ6ZS5pbmRl eE9mKHpkKT09PTApKSlyZXR1cm4gKHVbemJdPXRydWUpO31yZXR1cm4gZmFsc2U7 fTtyZXR1cm4gemEubGVuZ3RoJiZ6YS5ldmVyeShzKTt9dmFyIGk9ai5jdXJyeSgn ZXhhY3QnKTt2YXIgbD1qLmN1cnJ5KCdxdWVyeScpO3ZhciBrPWouY3VycnkoJ3By ZWZpeCcpO3ZhciBuPXtwYXJzZTpvLGlzRXhhY3RNYXRjaDppLGlzUXVlcnlNYXRj aDpsLGlzUHJlZml4TWF0Y2g6a307cmV0dXJuIG47fSkoKTsKZnVuY3Rpb24gRGF0 YVNvdXJjZShhKXt0aGlzLl9tYXhSZXN1bHRzPWEubWF4UmVzdWx0c3x8MTA7dGhp cy50b2tlbj1hLnRva2VuO3RoaXMucXVlcnlEYXRhPWEucXVlcnlEYXRhfHx7fTt0 aGlzLnF1ZXJ5RW5kcG9pbnQ9YS5xdWVyeUVuZHBvaW50fHwnJzt0aGlzLmJvb3Rz dHJhcERhdGE9YS5ib290c3RyYXBEYXRhfHx7fTt0aGlzLmJvb3RzdHJhcEVuZHBv aW50PWEuYm9vdHN0cmFwRW5kcG9pbnR8fCcnO3RoaXMuX2V4Y2x1c2lvbnM9YS5l eGNsdXNpb25zfHxbXTt0aGlzLl9pbmRleGVkRmllbGRzPWEuaW5kZXhlZEZpZWxk c3x8Wyd0ZXh0JywndG9rZW5zJ107dGhpcy5fYWx3YXlzUHJlZml4TWF0Y2g9YS5h bHdheXNQcmVmaXhNYXRjaHx8ZmFsc2U7dGhpcy5fbWluRXhhY3RNYXRjaExlbmd0 aD00O31DbGFzcy5taXhpbihEYXRhU291cmNlLCdBcmJpdGVyJyx7ZXZlbnRzOlsn YWN0aXZpdHknLCdib290c3RyYXAnLCdxdWVyeScsJ3Jlc3BvbmQnXSxpbml0OmZ1 bmN0aW9uKCl7dGhpcy5pbml0PWJhZ29maG9sZGluZzt0aGlzLl9maWVsZHM9T2Jq ZWN0LmZyb20odGhpcy5faW5kZXhlZEZpZWxkcyk7dGhpcy5fYWN0aXZlUXVlcmll cz0wO3RoaXMuZGlydHkoKTt9LGRpcnR5OmZ1bmN0aW9uKCl7dGhpcy52YWx1ZT0n Jzt0aGlzLl9ib290c3RyYXBwZWQ9ZmFsc2U7dGhpcy5fYm9vdHN0cmFwcGluZz1m YWxzZTt0aGlzLl9kYXRhPXt9O3RoaXMubG9jYWxDYWNoZT17fTt0aGlzLnF1ZXJ5 Q2FjaGU9e307dGhpcy5pbmZvcm0oJ2RpcnR5Jyx7fSk7fSxib290c3RyYXA6ZnVu Y3Rpb24oKXtpZih0aGlzLl9ib290c3RyYXBwZWQpcmV0dXJuO3RoaXMuYm9vdHN0 cmFwV2l0aG91dFRva2VuKCk7dGhpcy5fYm9vdHN0cmFwcGVkPXRydWU7dGhpcy5f Ym9vdHN0cmFwcGluZz10cnVlO3RoaXMuaW5mb3JtKCdib290c3RyYXAnLHtib290 c3RyYXBwaW5nOnRydWV9KTt9LGJvb3RzdHJhcFdpdGhvdXRUb2tlbjpmdW5jdGlv bigpe3RoaXMuZmV0Y2godGhpcy5ib290c3RyYXBFbmRwb2ludCx0aGlzLmJvb3Rz dHJhcERhdGEse2Jvb3RzdHJhcDp0cnVlLHRva2VuOnRoaXMudG9rZW59KTt9LGJv b3RzdHJhcFdpdGhUb2tlbjpmdW5jdGlvbigpe3ZhciBhPWNvcHlfcHJvcGVydGll cyh7fSx0aGlzLmJvb3RzdHJhcERhdGEpO2EudG9rZW49dGhpcy50b2tlbjt0aGlz LmZldGNoKHRoaXMuYm9vdHN0cmFwRW5kcG9pbnQsYSx7Ym9vdHN0cmFwOnRydWUs cmVwbGFjZUNhY2hlOnRydWV9KTt9LHF1ZXJ5OmZ1bmN0aW9uKGYsYyxhKXt0aGlz LmluZm9ybSgnYmVmb3JlUXVlcnknLHt2YWx1ZTpmfSk7dmFyIGU9dGhpcy5idWls ZFVpZHMoZixbXSxhKTt2YXIgZD10aGlzLnJlc3BvbmQoZixlKTt0aGlzLnZhbHVl PWY7dGhpcy5pbmZvcm0oJ3F1ZXJ5Jyx7dmFsdWU6ZixyZXN1bHRzOmR9KTt2YXIg Yj1UeXBlYWhlYWRVdGlsLnBhcnNlKGYpLmZsYXRWYWx1ZTtpZihjfHwhYnx8IXRo aXMucXVlcnlFbmRwb2ludHx8dGhpcy5nZXRRdWVyeUNhY2hlKCkuaGFzT3duUHJv cGVydHkoYil8fCF0aGlzLnNob3VsZEZldGNoTW9yZVJlc3VsdHMoZCkpcmV0dXJu IGZhbHNlO3RoaXMuaW5mb3JtKCdxdWVyeUVuZHBvaW50Jyx7dmFsdWU6Zn0pO3Ro aXMuZmV0Y2godGhpcy5xdWVyeUVuZHBvaW50LHRoaXMuZ2V0UXVlcnlEYXRhKGYs ZSkse3ZhbHVlOmYsZXhjbHVzaW9uczphfSk7cmV0dXJuIHRydWU7fSxzaG91bGRG ZXRjaE1vcmVSZXN1bHRzOmZ1bmN0aW9uKGEpe3JldHVybiBhLmxlbmd0aDx0aGlz Ll9tYXhSZXN1bHRzO30sZ2V0UXVlcnlEYXRhOmZ1bmN0aW9uKGMsYil7dmFyIGE9 Y29weV9wcm9wZXJ0aWVzKHt2YWx1ZTpjfSx0aGlzLnF1ZXJ5RGF0YXx8e30pO2I9 Ynx8W107aWYoYi5sZW5ndGgpYS5leGlzdGluZ19pZHM9Yi5qb2luKCcsJyk7aWYo dGhpcy5fYm9vdHN0cmFwcGluZylhLmJzcD10cnVlO3JldHVybiBhO30sc2V0UXVl cnlEYXRhOmZ1bmN0aW9uKGEsYil7aWYoYil0aGlzLnF1ZXJ5RGF0YT17fTtjb3B5 X3Byb3BlcnRpZXModGhpcy5xdWVyeURhdGEsYSk7cmV0dXJuIHRoaXM7fSxzZXRC b290c3RyYXBEYXRhOmZ1bmN0aW9uKGEsYil7aWYoYil0aGlzLmJvb3RzdHJhcERh dGE9e307Y29weV9wcm9wZXJ0aWVzKHRoaXMuYm9vdHN0cmFwRGF0YSxhKTtyZXR1 cm4gdGhpczt9LGdldEV4Y2x1c2lvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gJEEodGhp cy5fZXhjbHVzaW9ucyk7fSxzZXRFeGNsdXNpb25zOmZ1bmN0aW9uKGEpe3RoaXMu X2V4Y2x1c2lvbnM9YXx8W107fSxzZXRGaWx0ZXI6ZnVuY3Rpb24oYSl7dGhpcy5m aWx0ZXI9YTt9LHJlc3BvbmQ6ZnVuY3Rpb24oZCxjLGEpe3ZhciBiPXRoaXMuYnVp bGREYXRhKGMpO3RoaXMuaW5mb3JtKCdyZXNwb25kJyx7dmFsdWU6ZCxyZXN1bHRz OmIsaXNBc3luYzohIWF9KTtyZXR1cm4gYjt9LGFzeW5jRXJyb3JIYW5kbGVyOmJh Z29maG9sZGluZyxmZXRjaDpmdW5jdGlvbihjLGIsZCl7aWYoIWMpcmV0dXJuO3Zh ciBhPW5ldyBBc3luY1JlcXVlc3QoKS5zZXRVUkkoYykuc2V0RGF0YShiKS5zZXRN ZXRob2QoJ0dFVCcpLnNldFJlYWRPbmx5KHRydWUpLnNldEhhbmRsZXIoZnVuY3Rp b24oZSl7dGhpcy5mZXRjaEhhbmRsZXIoZSxkfHx7fSk7fS5iaW5kKHRoaXMpKTtp ZihjPT09dGhpcy5xdWVyeUVuZHBvaW50KWEuc2V0RmluYWxseUhhbmRsZXIoZnVu Y3Rpb24oKXt0aGlzLl9hY3RpdmVRdWVyaWVzLS07aWYoIXRoaXMuX2FjdGl2ZVF1 ZXJpZXMpdGhpcy5pbmZvcm0oJ2FjdGl2aXR5Jyx7YWN0aXZpdHk6ZmFsc2V9KTt9 LmJpbmQodGhpcykpO2Euc2V0RXJyb3JIYW5kbGVyKHRoaXMuYXN5bmNFcnJvckhh bmRsZXIpO3RoaXMuaW5mb3JtKCdiZWZvcmVGZXRjaCcse3JlcXVlc3Q6YSxmZXRj aF9jb250ZXh0OmR9KTthLnNlbmQoKTtpZihjPT09dGhpcy5xdWVyeUVuZHBvaW50 KXtpZighdGhpcy5fYWN0aXZlUXVlcmllcyl0aGlzLmluZm9ybSgnYWN0aXZpdHkn LHthY3Rpdml0eTp0cnVlfSk7dGhpcy5fYWN0aXZlUXVlcmllcysrO319LGZldGNo SGFuZGxlcjpmdW5jdGlvbihkLGIpe3ZhciBlPWIudmFsdWU7dmFyIGE9Yi5leGNs dXNpb25zO2lmKCFlJiZiLnJlcGxhY2VDYWNoZSl0aGlzLmxvY2FsQ2FjaGU9e307 dGhpcy5hZGRFbnRyaWVzKGQuZ2V0UGF5bG9hZCgpLmVudHJpZXMsZSk7dGhpcy5p bmZvcm0oJ2ZldGNoQ29tcGxldGUnLHtyZXNwb25zZTpkLHZhbHVlOmUsZmV0Y2hf Y29udGV4dDpifSk7dmFyIGM9KCFlJiZ0aGlzLnZhbHVlKT90aGlzLnZhbHVlOmU7 dGhpcy5yZXNwb25kKGMsdGhpcy5idWlsZFVpZHMoYyxbXSxhKSx0cnVlKTtpZigh ZSl7aWYodGhpcy5fYm9vdHN0cmFwcGluZyl7dGhpcy5fYm9vdHN0cmFwcGluZz1m YWxzZTt0aGlzLmluZm9ybSgnYm9vdHN0cmFwJyx7Ym9vdHN0cmFwcGluZzpmYWxz ZX0pO31pZihiLnRva2VuJiZkLmdldFBheWxvYWQoKS50b2tlbiE9PWIudG9rZW4p dGhpcy5ib290c3RyYXBXaXRoVG9rZW4oKTt9fSxhZGRFbnRyaWVzOmZ1bmN0aW9u KGIsZSl7dmFyIGM9dGhpcy5wcm9jZXNzRW50cmllcygkQShifHxbXSksZSk7dmFy IGE9dGhpcy5idWlsZFVpZHMoZSxjKTtpZihlKXt2YXIgZD10aGlzLmdldFF1ZXJ5 Q2FjaGUoKTtkW1R5cGVhaGVhZFV0aWwucGFyc2UoZSkuZmxhdFZhbHVlXT1hO31l bHNlIHRoaXMuZmlsbENhY2hlKGEpO30scHJvY2Vzc0VudHJpZXM6ZnVuY3Rpb24o YSxiKXtyZXR1cm4gYS5tYXAoZnVuY3Rpb24oZSxkKXt2YXIgZj0oZS51aWQ9ZS51 aWQrJycpO3ZhciBjPXRoaXMuZ2V0RW50cnkoZik7aWYoIWMpe2M9ZTtjLnF1ZXJ5 PWI7dGhpcy5zZXRFbnRyeShmLGMpO31lbHNlIGNvcHlfcHJvcGVydGllcyhjLGUp O2MuaW5kZXg9PT11bmRlZmluZWQmJihjLmluZGV4PWQpO3JldHVybiBmO30sdGhp cyk7fSxnZXRBbGxFbnRyaWVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RhdGF8 fHt9O30sZ2V0RW50cnk6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2RhdGFbYV18 fG51bGw7fSxzZXRFbnRyeTpmdW5jdGlvbihiLGEpe3RoaXMuX2RhdGFbYl09YTt9 LGZpbGxDYWNoZTpmdW5jdGlvbihiKXt2YXIgYT10aGlzLmxvY2FsQ2FjaGU7Yi5l YWNoKGZ1bmN0aW9uKGcpe3ZhciBkPXRoaXMuZ2V0RW50cnkoZyk7aWYoIWQpcmV0 dXJuO2QuYm9vdHN0cmFwcGVkPXRydWU7dmFyIGY9VHlwZWFoZWFkVXRpbC5wYXJz ZSh0aGlzLmdldFRleHRUb0luZGV4KGQpKS50b2tlbnM7Zm9yKHZhciBjPTAsZT1m Lmxlbmd0aDtjPGU7KytjKXt2YXIgaD1mW2NdO2lmKCFhLmhhc093blByb3BlcnR5 KGgpKWFbaF09e307YVtoXVtnXT10cnVlO319LHRoaXMpO30sZ2V0VGV4dFRvSW5k ZXg6ZnVuY3Rpb24oYyl7aWYoYy50ZXh0VG9JbmRleClyZXR1cm4gYy50ZXh0VG9J bmRleDt2YXIgZD1bXTtmb3IodmFyIGIgaW4gdGhpcy5fZmllbGRzKXt2YXIgYT1j W2JdO2lmKGEpZC5wdXNoKGEuam9pbj9hLmpvaW4oJyAnKTphKTt9cmV0dXJuIChj LnRleHRUb0luZGV4PWQuam9pbignICcpKTt9LG1lcmdlVWlkczpmdW5jdGlvbihh LGMsYixlKXt2YXIgZD1mdW5jdGlvbihmLGcpe3ZhciBoPXRoaXMuZ2V0RW50cnko Zik7dmFyIGk9dGhpcy5nZXRFbnRyeShnKTtpZihoLmV4dGVuZGVkX21hdGNoIT09 aS5leHRlbmRlZF9tYXRjaClyZXR1cm4gaC5leHRlbmRlZF9tYXRjaD8xOi0xO2lm KGguaW5kZXghPT1pLmluZGV4KXJldHVybiBoLmluZGV4LWkuaW5kZXg7aWYoaC50 ZXh0Lmxlbmd0aCE9PWkudGV4dC5sZW5ndGgpcmV0dXJuIGgudGV4dC5sZW5ndGgt aS50ZXh0Lmxlbmd0aDtyZXR1cm4gaC51aWQ8aS51aWQ7fS5iaW5kKHRoaXMpO3Ro aXMuX2NoZWNrRXh0ZW5kZWRNYXRjaChlLGEpO3JldHVybiBhLnNvcnQoZCkuY29u Y2F0KGMsYik7fSxfY2hlY2tFeHRlbmRlZE1hdGNoOmZ1bmN0aW9uKGUsZCl7dmFy IGI9dGhpcy5fYWx3YXlzUHJlZml4TWF0Y2g/VHlwZWFoZWFkVXRpbC5pc1ByZWZp eE1hdGNoOlR5cGVhaGVhZFV0aWwuaXNRdWVyeU1hdGNoO2Zvcih2YXIgYT0wO2E8 ZC5sZW5ndGg7KythKXt2YXIgYz10aGlzLmdldEVudHJ5KGRbYV0pO2MuZXh0ZW5k ZWRfbWF0Y2g9Yy50b2tlbnM/IWIoZSxjLnRleHQpOmZhbHNlO319LGJ1aWxkVWlk czpmdW5jdGlvbihoLGQsYSl7aWYoIWQpZD1bXTtpZighaClyZXR1cm4gZDtpZigh YSlhPVtdO3ZhciBiPXRoaXMuYnVpbGRDYWNoZVJlc3VsdHMoaCx0aGlzLmxvY2Fs Q2FjaGUpO3ZhciBmPXRoaXMuYnVpbGRRdWVyeVJlc3VsdHMoaCk7dmFyIGU9dGhp cy5tZXJnZVVpZHMoYixmLGQsaCk7dmFyIGc9T2JqZWN0LmZyb20oYS5jb25jYXQo dGhpcy5fZXhjbHVzaW9ucykpO3ZhciBjPWUuZmlsdGVyKGZ1bmN0aW9uKGkpe2lm KGcuaGFzT3duUHJvcGVydHkoaSl8fCF0aGlzLmdldEVudHJ5KGkpKXJldHVybiBm YWxzZTtpZih0aGlzLmZpbHRlciYmIXRoaXMuZmlsdGVyKHRoaXMuZ2V0RW50cnko aSkpKXJldHVybiBmYWxzZTtyZXR1cm4gKGdbaV09dHJ1ZSk7fSx0aGlzKTtyZXR1 cm4gdGhpcy51aWRzSW5jbHVkaW5nRXhhY3QoaCxjLGcpO30sdWlkc0luY2x1ZGlu Z0V4YWN0OmZ1bmN0aW9uKGcsZCxmKXt2YXIgZT1kLmxlbmd0aDtpZihnLmxlbmd0 aDx0aGlzLl9taW5FeGFjdE1hdGNoTGVuZ3RofHxlPD10aGlzLl9tYXhSZXN1bHRz KXJldHVybiBkO2Zvcih2YXIgYz0wO2M8ZTsrK2Mpe3ZhciBhPXRoaXMuZ2V0RW50 cnkoZFtjXSk7YS50ZXh0X2xvd2VyfHwoYS50ZXh0X2xvd2VyPWEudGV4dC50b0xv d2VyQ2FzZSgpKTtpZihhLnRleHRfbG93ZXI9PT1UeXBlYWhlYWRVdGlsLnBhcnNl KGcpLmZsYXRWYWx1ZSl7aWYoYz49dGhpcy5fbWF4UmVzdWx0cyl7dmFyIGI9ZC5z cGxpY2UoYywxKTtkLnNwbGljZSh0aGlzLl9tYXhSZXN1bHRzLTEsMCxiKTt9YnJl YWs7fX1yZXR1cm4gZDt9LGJ1aWxkRGF0YTpmdW5jdGlvbihkKXt2YXIgYz1bXTt2 YXIgYj1NYXRoLm1pbihkLmxlbmd0aCx0aGlzLl9tYXhSZXN1bHRzKTtmb3IodmFy IGE9MDthPGI7KythKWMucHVzaCh0aGlzLmdldEVudHJ5KGRbYV0pKTtyZXR1cm4g Yzt9LGZpbmRRdWVyeUNhY2hlOmZ1bmN0aW9uKGUpe3ZhciBiPTA7dmFyIGE9bnVs bDt2YXIgZD10aGlzLmdldFF1ZXJ5Q2FjaGUoKTtmb3IodmFyIGMgaW4gZClpZihl LmluZGV4T2YoYyk9PTAmJmMubGVuZ3RoPmIpe2I9Yy5sZW5ndGg7YT1jO31yZXR1 cm4gZFthXXx8W107fSxidWlsZFF1ZXJ5UmVzdWx0czpmdW5jdGlvbihjKXt2YXIg YT1UeXBlYWhlYWRVdGlsLnBhcnNlKGMpLmZsYXRWYWx1ZTt2YXIgYj10aGlzLmZp bmRRdWVyeUNhY2hlKGEpO2lmKHRoaXMuZ2V0UXVlcnlDYWNoZSgpLmhhc093blBy b3BlcnR5KGEpKXJldHVybiBiO3JldHVybiB0aGlzLmZpbHRlclF1ZXJ5UmVzdWx0 cyhjLGIpO30sZmlsdGVyUXVlcnlSZXN1bHRzOmZ1bmN0aW9uKGMsYil7dmFyIGE9 dGhpcy5fYWx3YXlzUHJlZml4TWF0Y2g/VHlwZWFoZWFkVXRpbC5pc1ByZWZpeE1h dGNoOlR5cGVhaGVhZFV0aWwuaXNRdWVyeU1hdGNoO3JldHVybiBiLmZpbHRlcihm dW5jdGlvbihkKXtyZXR1cm4gYShjLHRoaXMuZ2V0VGV4dFRvSW5kZXgodGhpcy5n ZXRFbnRyeShkKSkpO30sdGhpcyk7fSxidWlsZENhY2hlUmVzdWx0czpmdW5jdGlv bihyLGEpe3ZhciBrPVR5cGVhaGVhZFV0aWwucGFyc2Uocix0aGlzLl9hbHdheXNQ cmVmaXhNYXRjaCk7dmFyIGw9dGhpcy5fYWx3YXlzUHJlZml4TWF0Y2g/ay5zb3J0 ZWRUb2tlbnM6ay50b2tlbnM7dmFyIGg9bC5sZW5ndGg7dmFyIGk9ay5pc1ByZWZp eFF1ZXJ5P2gtMTpudWxsO3ZhciBlPXt9O3ZhciBqPXt9O3ZhciBvPXt9O3ZhciBm PVtdO3ZhciBjPWZhbHNlO3ZhciBxPXt9O3ZhciBwPTA7Zm9yKHZhciBkPTA7ZDxo OysrZCl7dmFyIG09bFtkXTtpZighcS5oYXNPd25Qcm9wZXJ0eShtKSl7cCsrO3Fb bV09dHJ1ZTt9ZWxzZSBjb250aW51ZTtmb3IodmFyIGcgaW4gYSlpZigoIWUuaGFz T3duUHJvcGVydHkoZykmJmc9PT1tKXx8KCh0aGlzLl9hbHdheXNQcmVmaXhNYXRj aHx8aT09PWQpJiZnLmluZGV4T2YobSk9PT0wKSl7aWYoZz09PW0pe2lmKGouaGFz T3duUHJvcGVydHkoZykpYz10cnVlO2VbZ109dHJ1ZTt9ZWxzZXtpZihlLmhhc093 blByb3BlcnR5KGcpfHxqLmhhc093blByb3BlcnR5KGcpKWM9dHJ1ZTtqW2ddPXRy dWU7fWZvcih2YXIgbiBpbiBhW2ddKWlmKGQ9PT0wfHwoby5oYXNPd25Qcm9wZXJ0 eShuKSYmb1tuXT09cC0xKSlvW25dPXA7fX1mb3IodmFyIGIgaW4gbylpZihvW2Jd PT1wKWYucHVzaChiKTtpZihjfHxwPGgpZj10aGlzLmZpbHRlclF1ZXJ5UmVzdWx0 cyhyLGYpO3JldHVybiBmO30sZ2V0UXVlcnlDYWNoZTpmdW5jdGlvbigpe3JldHVy biB0aGlzLnF1ZXJ5Q2FjaGU7fSxzZXRNYXhSZXN1bHRzOmZ1bmN0aW9uKGEpe3Ro aXMuX21heFJlc3VsdHM9YTt0aGlzLnZhbHVlJiZ0aGlzLnJlc3BvbmQodGhpcy52 YWx1ZSx0aGlzLmJ1aWxkVWlkcyh0aGlzLnZhbHVlKSk7fSx1cGRhdGVUb2tlbjpm dW5jdGlvbihhKXt0aGlzLnRva2VuPWE7dGhpcy5kaXJ0eSgpO3JldHVybiB0aGlz O319KTsKZnVuY3Rpb24gcGhvdG9zX3ZpZXdlcl92ZXJzaW9uKCl7aWYoQ1NTLmhh c0NsYXNzKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwndGhlYXRlck1vZGUnKSl7 cmV0dXJuIFBob3Rvc0NvbnN0LlZJRVdFUl9TTk9XQk9YO31lbHNlIHJldHVybiBQ aG90b3NDb25zdC5WSUVXRVJfUEVSTUFMSU5LO30KZnVuY3Rpb24gUGhvdG9UYWdn ZXIoYSl7dGhpcy52ZXJzaW9uPWE7UGhvdG9UYWdnZXIuaW5zdGFuY2VzW2FdPXRo aXM7fVBob3RvVGFnZ2VyLmluc3RhbmNlcz17fTtQaG90b1RhZ2dlci5BQ1RJVkFU RV9UQUdHSU5HPSdQaG90b1RhZ2dlci5BQ1RJVkFURV9UQUdHSU5HJztQaG90b1Rh Z2dlci5nZXRJbnN0YW5jZT1mdW5jdGlvbihhKXtyZXR1cm4gUGhvdG9UYWdnZXIu aW5zdGFuY2VzW2FdO307Y29weV9wcm9wZXJ0aWVzKFBob3RvVGFnZ2VyLnByb3Rv dHlwZSx7VEFHX0JPWF9TSVpFOjEwMCxkYXRhc291cmNlczp7fSxwaG90b0RhdGE6 e30sZWxlbU5hbWVzOnsxOnt0YWdnZXI6J2Rpdi50aGVhdGVyVGFnZ2VyJyxhZGRU YWdMaW5rOidkaXYuZmJQaG90b3NUaGVhdGVyQWN0aW9ucycsb3ZlcmxheUFjdGlv bnM6J2Rpdi5mYlBob3RvVGhlYXRlckJ1dHRvbnMnLHRhZ0FjdGlvbjonZmJQaG90 b3NUaGVhdGVyQWN0aW9uc1RhZycsaW1hZ2U6J2Rpdi5zdGFnZSBpbWcuc3BvdGxp Z2h0J30sMjp7dGFnZ2VyOidkaXYuc25vd2JveFRhZ2dlcicsYWRkVGFnTGluazon ZGl2LmZiUGhvdG9zUGhvdG9BY3Rpb25zJyxvdmVybGF5QWN0aW9uczonZGl2LmZi UGhvdG9zUGhvdG9CdXR0b25zJyx0YWdBY3Rpb246J2ZiUGhvdG9zUGhvdG9BY3Rp b25zVGFnJyxpbWFnZTonZGl2LnN0YWdlIGltZy5zcG90bGlnaHQnfX0sdXNlckFj dGlvbkRhdGE6e2FjdGlvbjondGFnZ2luZycsbmFtZXNwYWNlOidzbm93Ym94J30s aW5pdDpmdW5jdGlvbihhLGIpe3RoaXMuc2V0dXBVc2VyQWN0aW9uTG9nZ2luZygp O3RoaXMucm9vdD1hO3RoaXMudG9rZW5pemVyPWI7dGhpcy5fcW49bnVsbDt0aGlz LnR5cGVhaGVhZD1iLmdldFR5cGVhaGVhZCgpO3RoaXMuY2xpY2tTdGF0ZT1ET00u ZmluZCh0aGlzLnJvb3QsJ2Rpdi5zdGFnZUFjdGlvbnMnKTt0aGlzLnRhZ2dlcj1E T00uZmluZCh0aGlzLmNsaWNrU3RhdGUsdGhpcy5lbGVtTmFtZXNbdGhpcy52ZXJz aW9uXS50YWdnZXIpO3RoaXMuZmFjZUJveD1ET00uZmluZCh0aGlzLnRhZ2dlciwn ZGl2LmZhY2VCb3gnKTt0aGlzLm5ld1RhZ0JveD1ET00uZmluZCh0aGlzLmNsaWNr U3RhdGUsJ2Rpdi5uZXdUYWdCb3gnKTt0aGlzLmFkZFRhZ0xpbms9RE9NLmZpbmQo dGhpcy5yb290LHRoaXMuZWxlbU5hbWVzW3RoaXMudmVyc2lvbl0uYWRkVGFnTGlu ayk7dGhpcy5vdmVybGF5QWN0aW9ucz1ET00uZmluZCh0aGlzLnJvb3QsdGhpcy5l bGVtTmFtZXNbdGhpcy52ZXJzaW9uXS5vdmVybGF5QWN0aW9ucyk7dGhpcy5zZXR1 cEhhbmRsZXJzKCk7dGhpcy5oaWRlTmV3VGFnVGltZXI9bnVsbDt0aGlzLmZldGNo VGFnZ2luZ1N1Z2dlc3Rpb25zKHtvd25lcjp0aGlzLnBob3RvRGF0YS5vd25lcn0p O3RoaXMuc2V0RGF0YVNvdXJjZSh0aGlzLnR5cGVhaGVhZC5nZXREYXRhKCkpO3Jl dHVybiB0aGlzO30sc2V0dXBVc2VyQWN0aW9uTG9nZ2luZzpmdW5jdGlvbigpe3Ro aXMudWE9dXNlcl9hY3Rpb24odGhpcy51c2VyQWN0aW9uRGF0YS5hY3Rpb24pLnNl dF9uYW1lc3BhY2UodGhpcy51c2VyQWN0aW9uRGF0YS5uYW1lc3BhY2UpLnNldF91 YV9pZCgndGFnZ2luZycpLmFkZF9ldmVudCgnaW5pdCcpO30sbG9nVXNlckFjdGlv bkV2ZW50OmZ1bmN0aW9uKGEpe3RoaXMudWEuYWRkX2V2ZW50KGEpO30sZmV0Y2hU YWdnaW5nU3VnZ2VzdGlvbnM6ZnVuY3Rpb24oYil7dGhpcy5sb2dVc2VyQWN0aW9u RXZlbnQoJ3N1Z2dfZmV0Y2gnKTtuZXcgQXN5bmNSZXF1ZXN0KCkuc2V0VVJJKCcv YWpheC9waG90b3MvdGhlYXRlci90YWdzX2luaXQucGhwJykuc2V0RGF0YShiKS5z ZXRPcHRpb24oJ3JldHJpZXMnLDEpLnNldEhhbmRsZXIoZnVuY3Rpb24oYyl7dGhp cy50eXBlYWhlYWQuZ2V0VmlldygpLnNldFN1Z2dlc3Rpb25zKGMuZ2V0UGF5bG9h ZCgpLnRhZ2dlZXMpO3RoaXMubG9nVXNlckFjdGlvbkV2ZW50KCdzdWdnX2ZldGNo X2RvbmUnKTt9LmJpbmQodGhpcykpLnNlbmQoKTt2YXIgYT10aGlzLnR5cGVhaGVh ZC5zdWJzY3JpYmUoJ2Jvb3RzdHJhcCcsZnVuY3Rpb24oYyxkKXtpZihkJiYhZC5i b290c3RyYXBwaW5nKXt0aGlzLnVwZGF0ZVdpdGhTdWdnZXN0aW9ucygpO3RoaXMu dHlwZWFoZWFkLnVuc3Vic2NyaWJlKGEpO3RoaXMudHlwZWFoZWFkLnN1YnNjcmli ZSgnZm9jdXMnLHRoaXMudXBkYXRlV2l0aFN1Z2dlc3Rpb25zLmJpbmQodGhpcykp O3RoaXMudG9rZW5pemVyLnN1YnNjcmliZSgncmVtb3ZlVG9rZW4nLHRoaXMudXBk YXRlV2l0aFN1Z2dlc3Rpb25zLmJpbmQodGhpcykpO3RoaXMudG9rZW5pemVyLnN1 YnNjcmliZSgnYWRkVG9rZW4nLHRoaXMuYWRkU3VnZ2VzdGlvbi5iaW5kKHRoaXMp KTt0aGlzLnR5cGVhaGVhZC5zdWJzY3JpYmUoJ3Jlc3BvbmQnLGZ1bmN0aW9uKGUs Zil7aWYoZiYmIWYucmVzdWx0cy5sZW5ndGgpdGhpcy51cGRhdGVXaXRoU3VnZ2Vz dGlvbnMoKTt9LmJpbmQodGhpcykpO319LmJpbmQodGhpcykpO30sc2V0dXBIYW5k bGVyczpmdW5jdGlvbigpe3RoaXMuaGFuZGxlcnM9W0V2ZW50Lmxpc3Rlbih0aGlz LmNsaWNrU3RhdGUsJ2NsaWNrJyx0aGlzLmFkZFRhZy5iaW5kKHRoaXMpKSxFdmVu dC5saXN0ZW4od2luZG93LCdyZXNpemUnLHRoaXMuaGlkZVRhZ2dlci5iaW5kKHRo aXMpKSxFdmVudC5saXN0ZW4odGhpcy5hZGRUYWdMaW5rLCdjbGljaycsdGhpcy5j aGVja0FjdGlvbnMuYmluZCh0aGlzKSksRXZlbnQubGlzdGVuKHRoaXMub3Zlcmxh eUFjdGlvbnMsJ2NsaWNrJyx0aGlzLmNoZWNrQWN0aW9ucy5iaW5kKHRoaXMpKV07 aWYodGhpcy52ZXJzaW9uPT1QaG90b3NDb25zdC5WSUVXRVJfVEhFQVRFUil7dGhp cy5zdWJzY3JpcHRpb25zPVtBcmJpdGVyLnN1YnNjcmliZShQaG90b1RoZWF0ZXIu UEFHRSx0aGlzLnJlc3RhcnRUYWdnaW5nLmJpbmQodGhpcykpLEFyYml0ZXIuc3Vi c2NyaWJlKFBob3RvVGhlYXRlci5EQVRBX0NIQU5HRSx0aGlzLnNldFBob3RvRGF0 YS5iaW5kKHRoaXMpKSxBcmJpdGVyLnN1YnNjcmliZShQaG90b1RoZWF0ZXIuQ0xP U0UsdGhpcy5kZWFjdGl2YXRlVGFnZ2luZy5iaW5kKHRoaXMpKV07fWVsc2UgaWYo dGhpcy52ZXJzaW9uPT1QaG90b3NDb25zdC5WSUVXRVJfU05PV0JPWCl0aGlzLnN1 YnNjcmlwdGlvbnM9W0FyYml0ZXIuc3Vic2NyaWJlKFBob3RvU25vd2JveC5QQUdF LHRoaXMucmVzdGFydFRhZ2dpbmcuYmluZCh0aGlzKSksQXJiaXRlci5zdWJzY3Jp YmUoUGhvdG9Tbm93Ym94LkRBVEFfQ0hBTkdFLHRoaXMuc2V0UGhvdG9EYXRhLmJp bmQodGhpcykpLEFyYml0ZXIuc3Vic2NyaWJlKFBob3RvU25vd2JveC5DTE9TRSx0 aGlzLmRlYWN0aXZhdGVUYWdnaW5nLmJpbmQodGhpcykpXTt0aGlzLnRva2VuaXpl ci5zdWJzY3JpYmUoJ2FkZFRva2VuJyx0aGlzLnNhdmVUYWcuYmluZCh0aGlzKSk7 dGhpcy50b2tlbml6ZXIuc3Vic2NyaWJlKCdyZW1vdmVUb2tlbicsdGhpcy5yZW1v dmVUYWcuYmluZCh0aGlzKSk7dGhpcy50b2tlbml6ZXIuc3Vic2NyaWJlKCdtYXJr VGFnQXNTcGFtJyx0aGlzLm1hcmtUYWdBc1NwYW0uYmluZCh0aGlzKSk7fSxnZXRU YWdnaW5nU291cmNlOmZ1bmN0aW9uKCl7aWYodGhpcy52ZXJzaW9uPT1QaG90b3ND b25zdC5WSUVXRVJfU05PV0JPWCl7cmV0dXJuICdzbm93Ym94Jzt9ZWxzZSBpZih0 aGlzLnZlcnNpb249PVBob3Rvc0NvbnN0LlZJRVdFUl9USEVBVEVSKXtyZXR1cm4g J2NlbnRlcl9zdGFnZSc7fWVsc2UgcmV0dXJuIG51bGw7fSx1cGRhdGVXaXRoU3Vn Z2VzdGlvbnM6ZnVuY3Rpb24oYSxjKXt2YXIgZT10aGlzLnR5cGVhaGVhZC5nZXRE YXRhKCkuYnVpbGRVaWRzKCcgJyx0aGlzLnR5cGVhaGVhZC5nZXRWaWV3KCkuZ2V0 U3VnZ2VzdGlvbnMoKSx0aGlzLnR5cGVhaGVhZC5nZXRDb3JlKCkuZ2V0RXhjbHVz aW9ucygpKTtpZighZS5sZW5ndGgpcmV0dXJuO3ZhciBkPXRoaXMudHlwZWFoZWFk LmdldERhdGEoKS5yZXNwb25kKCcnLGUpO2Zvcih2YXIgYj0wO2I8ZC5sZW5ndGg7 YisrKWRbYl0uaW5kZXg9LTEwMDArYjt9LGFkZFN1Z2dlc3Rpb246ZnVuY3Rpb24o YSxiKXt2YXIgYz1iLmluZm8mJmIuaW5mby51aWQ7aWYoYyl0aGlzLnR5cGVhaGVh ZC5nZXRWaWV3KCkuYWRkU3VnZ2VzdGlvbihjKTt9LHNldFF1ZXVlTmFtZTpmdW5j dGlvbihhKXt0aGlzLl9xbj1hO3JldHVybiB0aGlzO30sX3NlbmRXYXRlcmZhbGxM b2dTaWduYWw6ZnVuY3Rpb24oYSl7UGhvdG9zVGFnZ2luZ1dhdGVyZmFsbC5zZW5k U2lnbmFsKHtxbjp0aGlzLl9xbixzb3VyY2U6dGhpcy5nZXRUYWdnaW5nU291cmNl KCksc3RlcDphLHBpZDp0aGlzLnBob3RvRGF0YS5waWR9KTt9LF9idW1wUXVldWVO YW1lOmZ1bmN0aW9uKCl7aWYodGhpcy5fcW4pdGhpcy5fcW4rPTE7fSxhY3RpdmF0 ZVRhZ2dpbmc6ZnVuY3Rpb24oKXt0aGlzLmxvZ1VzZXJBY3Rpb25FdmVudCgnYWN0 aXZhdGUnKTtBcmJpdGVyLmluZm9ybShQaG90b1RhZ2dlci5BQ1RJVkFURV9UQUdH SU5HKTtpZih0aGlzLmdldERhdGFTb3VyY2UoKSl7dGhpcy5kYXRhU291cmNlRmV0 Y2hlZCh0aGlzLmdldERhdGFTb3VyY2UoKSk7fWVsc2UgbmV3IEFzeW5jUmVxdWVz dCgnL2FqYXgvcGhvdG9zL3RoZWF0ZXIvZmV0Y2hfZGF0YXNvdXJjZS5waHAnKS5z ZXREYXRhKHtmYmlkOnRoaXMucGhvdG9EYXRhLmZiaWQsdmVyc2lvbjp0aGlzLnZl cnNpb259KS5zZW5kKCk7fSxyZXN0YXJ0VGFnZ2luZzpmdW5jdGlvbigpe3RoaXMu aGlkZU5ld1RhZygpO3RoaXMuaGlkZVRhZ2dlcigpO2lmKHRoaXMudGFnZ2luZ01v ZGU9PT10cnVlKXRoaXMuYWN0aXZhdGVUYWdnaW5nKCk7fSxnZXREYXRhU291cmNl OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YXNvdXJjZXNbdGhpcy5nZXREYXRh U291cmNlS2V5KCldO30sZ2V0RGF0YVNvdXJjZUtleTpmdW5jdGlvbigpe2lmKHRo aXMucGhvdG9EYXRhLm93bmVydHlwZT09J3VzZXInJiYhdGhpcy5waG90b0RhdGEu b2JqX2lkKXJldHVybiAnZnJpZW5kcyc7cmV0dXJuIHRoaXMucGhvdG9EYXRhLm9i al9pZHx8dGhpcy5waG90b0RhdGEub3duZXI7fSxzZXREYXRhU291cmNlOmZ1bmN0 aW9uKGEpe2lmKHRoaXMudHlwZWFoZWFkLmdldERhdGEoKSE9YSl0aGlzLnR5cGVh aGVhZC5zd2FwRGF0YShhKTt0aGlzLmRhdGFzb3VyY2VzW3RoaXMuZ2V0RGF0YVNv dXJjZUtleSgpXT1hO30sZGF0YVNvdXJjZUZldGNoZWQ6ZnVuY3Rpb24oYSl7dGhp cy50YWdnaW5nTW9kZT10cnVlO0NTUy5hZGRDbGFzcyh0aGlzLnJvb3QsJ3RhZ2dp bmdNb2RlJyk7dGhpcy5fYnVtcFF1ZXVlTmFtZSgpO3RoaXMuX3NlbmRXYXRlcmZh bGxMb2dTaWduYWwoUGhvdG9zVGFnZ2luZ1dhdGVyZmFsbC5CRUdJTik7dGhpcy5z ZXREYXRhU291cmNlKGEpO30sZGVhY3RpdmF0ZVRhZ2dpbmc6ZnVuY3Rpb24oKXt0 aGlzLmxvZ1VzZXJBY3Rpb25FdmVudCgnZGVhY3RpdmF0ZScpO2lmKHRoaXMudGFn Z2luZ01vZGU9PT10cnVlKXRoaXMuX3NlbmRXYXRlcmZhbGxMb2dTaWduYWwoUGhv dG9zVGFnZ2luZ1dhdGVyZmFsbC5GSU5JU0gpO3RoaXMudGFnZ2luZ01vZGU9ZmFs c2U7dGhpcy5oaWRlTmV3VGFnKCk7dGhpcy5oaWRlVGFnZ2VyKCk7Q1NTLnJlbW92 ZUNsYXNzKHRoaXMucm9vdCwndGFnZ2luZ01vZGUnKTt9LGNoZWNrQWN0aW9uczpm dW5jdGlvbihldmVudCl7dmFyIGE9ZXZlbnQuZ2V0VGFyZ2V0KCk7aWYoUGFyZW50 LmJ5Q2xhc3MoYSx0aGlzLmVsZW1OYW1lc1t0aGlzLnZlcnNpb25dLnRhZ0FjdGlv bikpdGhpcy50YWdnaW5nTW9kZT90aGlzLmRlYWN0aXZhdGVUYWdnaW5nKCk6dGhp cy5hY3RpdmF0ZVRhZ2dpbmcoKTt9LGhpZGVUYWdnZXI6ZnVuY3Rpb24oKXtDU1Mu aGlkZSh0aGlzLnRhZ2dlcik7fSxzaG93VGFnZ2VyOmZ1bmN0aW9uKCl7Q1NTLnNo b3codGhpcy50YWdnZXIpO3ZhciBhPURPTS5maW5kKHRoaXMudGFnZ2VyLCdpbnB1 dC50ZXh0SW5wdXQnKTtJbnB1dC5yZXNldChhKTthLmZvY3VzKCk7dGhpcy51cGRh dGVXaXRoU3VnZ2VzdGlvbnMoKTt0aGlzLmhpZGVOZXdUYWcoKTt9LHNob3dOZXdU YWc6ZnVuY3Rpb24oYSl7aWYoIXRoaXMubmV3VGFnQm94KXJldHVybjtET00uc2V0 Q29udGVudChET00uZmluZCh0aGlzLm5ld1RhZ0JveCwnZGl2LnRhZ05hbWUnKSwk Tignc3BhbicsbnVsbCxhKSk7Q1NTLnNob3codGhpcy5uZXdUYWdCb3gpO3RoaXMu aGlkZU5ld1RhZ1RpbWVyPXNldFRpbWVvdXQodGhpcy5oaWRlTmV3VGFnLmJpbmQo dGhpcyksMzAwMCk7fSxoaWRlTmV3VGFnOmZ1bmN0aW9uKCl7aWYoIXRoaXMubmV3 VGFnQm94KXJldHVybjtpZih0aGlzLmhpZGVOZXdUYWdUaW1lciE9PW51bGwpe2Ns ZWFyVGltZW91dCh0aGlzLmhpZGVOZXdUYWdUaW1lcik7dGhpcy5oaWRlTmV3VGFn VGltZXI9bnVsbDt9Q1NTLmhpZGUodGhpcy5uZXdUYWdCb3gpO30sZ2V0VGFnZ2Vy UG9zaXRpb25pbmdPcmlnaW46ZnVuY3Rpb24oKXtyZXR1cm4gVmVjdG9yMi5nZXRF bGVtZW50UG9zaXRpb24odGhpcy5jbGlja1N0YXRlLCdkb2N1bWVudCcpO30sYWRk VGFnOmZ1bmN0aW9uKGV2ZW50KXt2YXIgZD1ldmVudC5nZXRUYXJnZXQoKTtpZigh dGhpcy50YWdnaW5nTW9kZXx8UGFyZW50LmJ5Q2xhc3MoZCwnZmJQaG90b3NQaG90 b0J1dHRvbnMnKXx8UGFyZW50LmJ5Q2xhc3MoZCwncGhvdG9UYWdUeXBlYWhlYWQn KSlyZXR1cm47dmFyIGI9dGhpcy5nZXRQaG90b09uU3RhZ2UoKTt2YXIgYT1WZWN0 b3IyLmdldEV2ZW50UG9zaXRpb24oZXZlbnQpO3ZhciBjPXRoaXMuY2FsY1RhZ2dl clBvc2l0aW9uKGIsYSk7dGhpcy5jYWxjQ2xpY2tQb2ludChiLGEpO2lmKCFjKXt0 aGlzLmhpZGVUYWdnZXIoKTtyZXR1cm47fWMuc2V0RWxlbWVudFBvc2l0aW9uKHRo aXMudGFnZ2VyKTtpZih0aGlzLm5ld1RhZ0JveCljLnNldEVsZW1lbnRQb3NpdGlv bih0aGlzLm5ld1RhZ0JveCk7dGhpcy5zaG93VGFnZ2VyKCk7dGhpcy5fc2VuZFdh dGVyZmFsbExvZ1NpZ25hbChQaG90b3NUYWdnaW5nV2F0ZXJmYWxsLlRBR19GQUNF KTt9LGdldFBob3RvT25TdGFnZTpmdW5jdGlvbigpe3JldHVybiBET00uZmluZCh0 aGlzLnJvb3QsdGhpcy5lbGVtTmFtZXNbdGhpcy52ZXJzaW9uXS5pbWFnZSk7fSxj YWxjVGFnZ2VyUG9zaXRpb246ZnVuY3Rpb24oaCxiKXt2YXIgZT1WZWN0b3IyLmdl dEVsZW1lbnRQb3NpdGlvbihoKTt2YXIgZD1WZWN0b3IyLmdldEVsZW1lbnREaW1l bnNpb25zKGgpO3ZhciBhPW5ldyBWZWN0b3IyKHRoaXMuVEFHX0JPWF9TSVpFLzIs dGhpcy5UQUdfQk9YX1NJWkUvMik7dmFyIGc9Yi5zdWIoZSk7Zm9yKHZhciBjIGlu IGcpe2lmKGJbY108ZVtjXXx8YltjXT5lW2NdK2RbY10pcmV0dXJuIG51bGw7aWYo Z1tjXTwodGhpcy5UQUdfQk9YX1NJWkUvMikpe2FbY109Z1tjXTt9ZWxzZSBpZihk W2NdPGdbY10rKHRoaXMuVEFHX0JPWF9TSVpFLzIpKWFbY109dGhpcy5UQUdfQk9Y X1NJWkUtKGRbY10tZ1tjXSk7fXZhciBmPWIuc3ViKHRoaXMuZ2V0VGFnZ2VyUG9z aXRpb25pbmdPcmlnaW4oKSk7cmV0dXJuIGYuc3ViKGEueCxhLnkpO30sY2FsY0Ns aWNrUG9pbnQ6ZnVuY3Rpb24oZCxiKXt2YXIgYz1WZWN0b3IyLmdldEVsZW1lbnRE aW1lbnNpb25zKGQpO3ZhciBhPVZlY3RvcjIuZ2V0RWxlbWVudFBvc2l0aW9uKGQp O3ZhciBlPWIuc3ViKGEpO3RoaXMuY2xpY2tQb2ludD17eDplLngvYy54LHk6ZS55 L2MueX07fSxzYXZlVGFnOmZ1bmN0aW9uKGEsYyl7dmFyIGI9dGhpcy5nZXRUYWdn aW5nRGF0YSgnYWRkJyxjLmlzRnJlZWZvcm0oKT8nJzpjLmdldFZhbHVlKCksYy5n ZXRUZXh0KCkpO2IueD10aGlzLmNsaWNrUG9pbnQueCoxMDA7Yi55PXRoaXMuY2xp Y2tQb2ludC55KjEwMDt0aGlzLmxvZ1VzZXJBY3Rpb25FdmVudCgnc2F2ZScpO25l dyBBc3luY1JlcXVlc3QoKS5zZXRVUkkoJy9hamF4L3Bob3RvX3RhZ2dpbmdfYWph eC5waHAnKS5zZXRNZXRob2QoJ1BPU1QnKS5zZXREYXRhKGIpLnNldEFsbG93Q3Jv c3NQYWdlVHJhbnNpdGlvbih0cnVlKS5zZXRIYW5kbGVyKGZ1bmN0aW9uKGQpe3Ro aXMudGFnc0NoYW5nZUhhbmRsZXIoZCk7dGhpcy5sb2dVc2VyQWN0aW9uRXZlbnQo J3NhdmVfZG9uZScpO30uYmluZCh0aGlzKSkuc2V0RXJyb3JIYW5kbGVyKHRoaXMu Y2hlY2tFcnJvci5iaW5kKHRoaXMsYykpLnNlbmQoKTt0aGlzLnNob3dOZXdUYWco Yy5nZXRUZXh0KCkpO3RoaXMuaGlkZVRhZ2dlcigpO30sZ2V0VGFnZ2luZ0RhdGE6 ZnVuY3Rpb24oYSxjLGIpe3JldHVybiB7Y3NfdmVyOnRoaXMudmVyc2lvbixwaWQ6 dGhpcy5waG90b0RhdGEucGlkLGlkOnRoaXMucGhvdG9EYXRhLm93bmVyLHN1Ympl Y3Q6YyxuYW1lOmIsYWN0aW9uOmEsc291cmNlOnRoaXMuZ2V0VGFnZ2luZ1NvdXJj ZSgpLHFuOnRoaXMuX3FuLHBvc2l0aW9uOnRoaXMuZ2V0UG9zaXRpb24oKX07fSxn ZXRQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0UGhvdG9WaWV3ZXJP YmooKTtyZXR1cm4gYSYmYS5wb3NpdGlvbjt9LGdldFBob3RvVmlld2VyT2JqOmZ1 bmN0aW9uKCl7aWYodGhpcy52ZXJzaW9uPT1QaG90b3NDb25zdC5WSUVXRVJfVEhF QVRFUil7cmV0dXJuIHdpbmRvdy5QaG90b1RoZWF0ZXI7fWVsc2UgaWYodGhpcy52 ZXJzaW9uPT1QaG90b3NDb25zdC5WSUVXRVJfU05PV0JPWClyZXR1cm4gd2luZG93 LlBob3RvU25vd2JveDtyZXR1cm4gbnVsbDt9LHRhZ3NDaGFuZ2VIYW5kbGVyOmZ1 bmN0aW9uKGIpe3ZhciBhPXRoaXMuZ2V0UGhvdG9WaWV3ZXJPYmooKTtpZihhJiZh LmlzT3BlbilhLnNhdmVUYWdDb21wbGV0ZShiKTt9LGNoZWNrRXJyb3I6ZnVuY3Rp b24oYixhKXtpZihhLmdldFBheWxvYWQoKSYmYS5nZXRQYXlsb2FkKCkuY2xlYXJf dGFnKXtiLmFscmVhZHlfdW50YWdnZWQ9dHJ1ZTt0aGlzLnRva2VuaXplci5yZW1v dmVUb2tlbihiKTt9RXJyb3JEaWFsb2cuc2hvd0FzeW5jRXJyb3IoYSk7fSxyZW1v dmVUYWc6ZnVuY3Rpb24oYSxjKXtpZihjLmFscmVhZHlfdW50YWdnZWQpcmV0dXJu O3ZhciBiPSdyZW1vdmUnO2lmKERPTS5zY3J5KGMuZWxlbWVudCwnYS5wZW5kaW5n JylbMF0pYj0ncmV0cmFjdCc7aWYoYy5ibG9ja1VzZXIpYj0ncmVtb3ZlX2Jsb2Nr Jzt0aGlzLmxvZ1VzZXJBY3Rpb25FdmVudCgnc2F2ZScpO25ldyBBc3luY1JlcXVl c3QoKS5zZXRVUkkoJy9hamF4L3Bob3RvX3RhZ2dpbmdfYWpheC5waHAnKS5zZXRN ZXRob2QoJ1BPU1QnKS5zZXREYXRhKHRoaXMuZ2V0VGFnZ2luZ0RhdGEoYixjLmlz RnJlZWZvcm0oKT8nJzpjLmdldEluZm8oKS51aWQsYy5nZXRJbmZvKCkudGV4dCkp LnNldEhhbmRsZXIoZnVuY3Rpb24oZCl7dGhpcy50YWdzQ2hhbmdlSGFuZGxlcihk KTt0aGlzLmxvZ1VzZXJBY3Rpb25FdmVudCgnc2F2ZV9kb25lJyk7fS5iaW5kKHRo aXMpKS5zZXRBbGxvd0Nyb3NzUGFnZVRyYW5zaXRpb24odHJ1ZSkuc2VuZCgpO30s cmVtb3ZlVGFnQnlJRDpmdW5jdGlvbihiLGMpe3ZhciBkPXRoaXMudG9rZW5pemVy LnRva2Vucztmb3IodmFyIGE9MDthPGQubGVuZ3RoO2ErKylpZihkW2FdLmluZm8u dWlkPT1jKXJldHVybiB0aGlzLnJlbW92ZVRhZyhudWxsLGRbYV0pO30sc2V0UGhv dG9EYXRhOmZ1bmN0aW9uKGEsYil7dGhpcy5waG90b0RhdGE9YjtyZXR1cm4gdGhp czt9LG1hcmtUYWdBc1NwYW06ZnVuY3Rpb24oYSxiKXtuZXcgQXN5bmNSZXF1ZXN0 KCkuc2V0VVJJKCcvYWpheC9waG90b190YWdnaW5nX2FqYXgucGhwJykuc2V0TWV0 aG9kKCdQT1NUJykuc2V0RGF0YSh0aGlzLmdldFRhZ2dpbmdEYXRhKCdtYXJrX2Fz X3NwYW0nLGIsbnVsbCkpLnNlbmQoKTt9fSk7CmZ1bmN0aW9uIFBob3RvU2Vzc2lv bkxvZygpe31jb3B5X3Byb3BlcnRpZXMoUGhvdG9TZXNzaW9uTG9nLHtVTktOT1dO OjAsRVNDOjEsWDoyLE9VVFNJREU6MyxVTkxPQUQ6NCxOQVZJR0FURTo1LEFHR1JF R0FURTo2LExFQVZFOjcsU05PV0JPWDowLFBFUk1BTElOSzoxLEFHR1JFR0FUSU9O X0NPVU5UOjIwLHNldDpudWxsLHRpbWU6bnVsbCx2aWV3czowLGZiaWRMaXN0Oltd LGRldGFpbHM6e30sd2lkdGg6MCxoZWlnaHQ6MCxmaXJzdDpmYWxzZSxsYXN0OmZh bHNlLGxvZ0lkczpmYWxzZSx2ZXJzaW9uOm51bGwsaW5pdExvZ2dpbmc6ZnVuY3Rp b24oYil7dGhpcy5zZXQ9bnVsbDt0aGlzLnRpbWU9bmV3IERhdGUoKTt0aGlzLnZp ZXdzPTA7dGhpcy5maXJzdD10cnVlO3RoaXMubGFzdD1mYWxzZTt0aGlzLmxvZ0lk cz1mYWxzZTt0aGlzLnZlcnNpb249YjtpZihiPT09UGhvdG9TZXNzaW9uTG9nLlNO T1dCT1gpe3ZhciBhPVZlY3RvcjIuZ2V0Vmlld3BvcnREaW1lbnNpb25zKCk7dGhp cy53aWR0aD1hLng7dGhpcy5oZWlnaHQ9YS55O319LHNldExvZ0ZiaWRzOmZ1bmN0 aW9uKGEpe3RoaXMubG9nSWRzPWE7fSxzZXRQaG90b1NldDpmdW5jdGlvbihhKXt0 aGlzLnNldD1hO30sYWRkUGhvdG9WaWV3OmZ1bmN0aW9uKGEpe2lmKHRoaXMubG9n SWRzJiZ0aGlzLnZpZXdzPj10aGlzLkFHR1JFR0FUSU9OX0NPVU5UKXRoaXMubG9n UGhvdG9WaWV3cyh0aGlzLkFHR1JFR0FURSk7dGhpcy52aWV3cysrO2lmKGEpdGhp cy5mYmlkTGlzdC5wdXNoKFthLmZiaWQsYS5vd25lcixEYXRlLm5vdygpXSk7fSxh ZGREZXRhaWxEYXRhOmZ1bmN0aW9uKGIsYSl7aWYoIXRoaXMuZGV0YWlsc1tiXSl0 aGlzLmRldGFpbHNbYl09e3Q6YS5udW1fdGFncyxsOmEuaGFzX2xvY2F0aW9uLGM6 YS5oYXNfY2FwdGlvbixjbTphLmNvbW1lbnRfY291bnQsbGs6YS5saWtlX2NvdW50 LHc6YS53aWR0aCxoOmEuaGVpZ2h0fTt9LGxvZ1Bob3RvVmlld3M6ZnVuY3Rpb24o YSl7aWYoKCF0aGlzLnZpZXdzKXx8KCh0aGlzLnZlcnNpb249PT1QaG90b1Nlc3Np b25Mb2cuU05PV0JPWCkmJihhPT1QaG90b1Nlc3Npb25Mb2cuTEVBVkUpKSlyZXR1 cm47aWYoYSE9dGhpcy5BR0dSRUdBVEUpdGhpcy5sYXN0PXRydWU7dmFyIGI9e3Nl dDp0aGlzLnNldCx0aW1lOm5ldyBEYXRlKCktdGhpcy50aW1lLGZiaWRzOnRoaXMu bG9nSWRzP3RoaXMuZmJpZExpc3Q6W10sZGV0YWlsczp0aGlzLmxvZ0lkcz90aGlz LmRldGFpbHM6e30sZmlyc3Q6dGhpcy5maXJzdCxsYXN0OnRoaXMubGFzdCxjbG9z ZTphP2E6dGhpcy5VTktOT1dOLHZlcnNpb246dGhpcy52ZXJzaW9ufTtpZih0aGlz LnZlcnNpb249PT1QaG90b1Nlc3Npb25Mb2cuU05PV0JPWCl7dmFyIGM9VmVjdG9y Mi5nZXRWaWV3cG9ydERpbWVuc2lvbnMoKTtiLndpZHRoPWMueHx8dGhpcy53aWR0 aDtiLmhlaWdodD1jLnl8fHRoaXMuaGVpZ2h0O31uZXcgQXN5bmNSZXF1ZXN0KCku c2V0VVJJKCcvYWpheC9waG90b3MvbG9nZ2luZy9zZXNzaW9uX2xvZ2dpbmcucGhw Jykuc2V0QWxsb3dDcm9zc1BhZ2VUcmFuc2l0aW9uKHRydWUpLnNldE9wdGlvbign YXN5bmNocm9ub3VzJywoYSE9UGhvdG9TZXNzaW9uTG9nLlVOTE9BRCkpLnNldE9w dGlvbignc3VwcHJlc3NFcnJvckhhbmRsZXJXYXJuaW5nJyx0cnVlKS5zZXREYXRh KGIpLnNlbmQoKTt0aGlzLnZpZXdzPTA7dGhpcy5mYmlkTGlzdD1bXTt0aGlzLmRl dGFpbHM9e307dGhpcy5maXJzdD1mYWxzZTtpZih0aGlzLmxhc3Qpe3RoaXMuc2V0 PW51bGw7dGhpcy5sb2dJZHM9ZmFsc2U7fX19KTtvbnVubG9hZFJlZ2lzdGVyKGZ1 bmN0aW9uKCl7UGhvdG9TZXNzaW9uTG9nLmxvZ1Bob3RvVmlld3MoUGhvdG9TZXNz aW9uTG9nLlVOTE9BRCk7fSk7b25sZWF2ZVJlZ2lzdGVyKGZ1bmN0aW9uKCl7UGhv dG9TZXNzaW9uTG9nLmxvZ1Bob3RvVmlld3MoUGhvdG9TZXNzaW9uTG9nLkxFQVZF KTt9KTsKZnVuY3Rpb24gUGhvdG9zVXRpbHMoKXt9UGhvdG9zVXRpbHMuZ2V0TmVh cmVzdEJveD1mdW5jdGlvbihlLGwsayxqLGMsYSl7dmFyIGY9ZS5zdWIobCk7dmFy IGQ9ay5tYWduaXR1ZGUoKTt2YXIgZz1udWxsO2Zvcih2YXIgYiBpbiBhKXt2YXIg aD1hW2JdO3ZhciBpPW5ldyBSZWN0KGgudC8xMDAqay55KmosaC5yLzEwMCprLngq aixoLmIvMTAwKmsueSpqLGgubC8xMDAqay54KmopO3ZhciBtPWkuZ2V0Q2VudGVy KCkuc3ViKGYpO2lmKE1hdGguYWJzKG0ueCk8PWMmJk1hdGguYWJzKG0ueSk8PWMm Jm0ubWFnbml0dWRlKCk8PWQpe2Q9bS5tYWduaXR1ZGUoKTtnPWI7aWYoMD09PWQp YnJlYWs7fX1yZXR1cm4gZzt9OwpfX2UoIlVJUGFnZWxldCIsWyJqc29uIiwiZG9t IiwiYWpheHBpcGUiLCJBc3luY1JlcXVlc3QiLCJjb3B5UHJvcGVydGllcyJdLGZ1 bmN0aW9uKGcsaSxoLGYpe2koJ2pzb24nKTt2YXIgYz1pKCdkb20nKTt2YXIgYT1p KCdhamF4cGlwZScpO3ZhciBiPWkoJ0FzeW5jUmVxdWVzdCcpO3ZhciBlPWkoJ2Nv cHlQcm9wZXJ0aWVzJyk7ZnVuY3Rpb24gZChsLG0saixrKXt0aGlzLl9pZD1sfHxu dWxsO3RoaXMuX2VsZW1lbnQ9Z2UobHx8Yy4kTignZGl2JykpO3RoaXMuX3NyYz1t fHxudWxsO3RoaXMuX2NvbnRleHRfZGF0YT1qfHx7fTt0aGlzLl9kYXRhPWt8fHt9 O3RoaXMuX2hhbmRsZXI9YmFnb2Zob2xkaW5nO3RoaXMuX3JlcXVlc3Q9bnVsbDt0 aGlzLl91c2VfYWpheHBpcGU9ZmFsc2U7dGhpcy5faXNfYnVuZGxlPXRydWU7dGhp cy5fYWxsb3dfY3Jvc3NfcGFnZV90cmFuc2l0aW9uPWZhbHNlO3RoaXMuX2FwcGVu ZD1mYWxzZTtyZXR1cm4gdGhpczt9ZC5sb2FkRnJvbUVuZHBvaW50PWZ1bmN0aW9u KGwscCxqLG0pe209bXx8e307dmFyIGs9Jy9hamF4L3BhZ2VsZXQvZ2VuZXJpYy5w aHAvJztpZihtLmludGVybilrPScvaW50ZXJuJytrO3ZhciBvPShrK2wpLnJlcGxh Y2UoL1wvKy9nLCcvJyk7aWYobS5zdWJkb21haW4pbz1VUkkobykuc2V0U3ViZG9t YWluKG0uc3ViZG9tYWluKTt2YXIgbj1uZXcgZChwLG8saikuc2V0VXNlQWpheFBp cGUobS51c2VQaXBlKS5zZXRCdW5kbGVPcHRpb24obC5zdWJzdHJpbmcoMCw4KSE9 Jy9pbnRlcm4vJyYmbS5idW5kbGUhPT1mYWxzZSkuc2V0QXBwZW5kKG0uYXBwZW5k KS5zZXRKU05vbkJsb2NrKG0uanNOb25ibG9jaykuc2V0RGlzcGxheUNhbGxiYWNr KG0uZGlzcGxheUNhbGxiYWNrKS5zZXRDb25zdEhlaWdodChtLmNvbnN0SGVpZ2h0 KS5zZXRBbGxvd0Nyb3NzUGFnZVRyYW5zaXRpb24obS5jcm9zc1BhZ2UpO20uaGFu ZGxlciYmbi5zZXRIYW5kbGVyKG0uaGFuZGxlcik7bi5nbygpO3JldHVybiBuO307 ZShkLnByb3RvdHlwZSx7Z2V0RWxlbWVudDpmdW5jdGlvbihqKXtqPWp8fGZhbHNl O2lmKGopdGhpcy5fZWxlbWVudD1nZSh0aGlzLl9pZCk7cmV0dXJuIHRoaXMuX2Vs ZW1lbnQ7fSxzZXRIYW5kbGVyOmZ1bmN0aW9uKGope3RoaXMuX2hhbmRsZXI9ajty ZXR1cm4gdGhpczt9LGdvOmZ1bmN0aW9uKGssail7aWYoYXJndW1lbnRzLmxlbmd0 aD49Mnx8dHlwZW9mIGs9PSdzdHJpbmcnKXt0aGlzLl9zcmM9azt0aGlzLl9kYXRh PWp8fHt9O31lbHNlIGlmKGFyZ3VtZW50cy5sZW5ndGg9PTEpdGhpcy5fZGF0YT1r O3RoaXMucmVmcmVzaCgpO3JldHVybiB0aGlzO30sc2V0QWxsb3dDcm9zc1BhZ2VU cmFuc2l0aW9uOmZ1bmN0aW9uKGope3RoaXMuX2FsbG93X2Nyb3NzX3BhZ2VfdHJh bnNpdGlvbj1qO3JldHVybiB0aGlzO30sc2V0QnVuZGxlT3B0aW9uOmZ1bmN0aW9u KGope3RoaXMuX2lzX2J1bmRsZT1qO3JldHVybiB0aGlzO30scmVmcmVzaDpmdW5j dGlvbihsKXt2YXIgaz1mdW5jdGlvbihuKXt0aGlzLl9yZXF1ZXN0PW51bGw7aWYo bCYmdGhpcy5faWQpdGhpcy5fZWxlbWVudD1nZSh0aGlzLl9pZCk7dmFyIG09SFRN TChuLmdldFBheWxvYWQoKSk7aWYodGhpcy5fYXBwZW5kKXtjLmFwcGVuZENvbnRl bnQodGhpcy5fZWxlbWVudCxtKTt9ZWxzZSBjLnNldENvbnRlbnQodGhpcy5fZWxl bWVudCxtKTt0aGlzLl9oYW5kbGVyKCk7fS5iaW5kKHRoaXMpO2lmKHRoaXMuX3Vz ZV9hamF4cGlwZSl7dGhpcy5fcmVxdWVzdD1uZXcgYSgpO3RoaXMuX3JlcXVlc3Qu c2V0Q2FudmFzSWQodGhpcy5faWQpLnNldEFwcGVuZCh0aGlzLl9hcHBlbmQpLnNl dENvbnN0SGVpZ2h0KHRoaXMuX2NvbnN0SGVpZ2h0KS5zZXRKU05vbkJsb2NrKHRo aXMuX2pzTm9uYmxvY2spLnNldERpc3BsYXlDYWxsYmFjayh0aGlzLl9kaXNwbGF5 Q2FsbGJhY2spO31lbHNle3ZhciBqPXRoaXMuX2Rpc3BsYXlDYWxsYmFjazt0aGlz Ll9yZXF1ZXN0PW5ldyBiKCkuc2V0TWV0aG9kKCdHRVQnKS5zZXRSZWFkT25seSh0 cnVlKS5zZXRPcHRpb24oJ2J1bmRsZScsdGhpcy5faXNfYnVuZGxlKS5zZXRIYW5k bGVyKGZ1bmN0aW9uKG0pe2lmKGope2ooay5jdXJyeShtKSk7fWVsc2UgayhtKTt9 KTt9dGhpcy5fcmVxdWVzdC5zZXRVUkkodGhpcy5fc3JjKS5zZXRBbGxvd0Nyb3Nz UGFnZVRyYW5zaXRpb24odGhpcy5fYWxsb3dfY3Jvc3NfcGFnZV90cmFuc2l0aW9u KS5zZXREYXRhKHtkYXRhOkpTT04uc3RyaW5naWZ5KG1lcmdlKHRoaXMuX2NvbnRl eHRfZGF0YSx0aGlzLl9kYXRhKSl9KS5zZW5kKCk7cmV0dXJuIHRoaXM7fSxjYW5j ZWw6ZnVuY3Rpb24oKXtpZih0aGlzLl9yZXF1ZXN0KXRoaXMuX3JlcXVlc3QuYWJv cnQoKTt9LHNldFVzZUFqYXhQaXBlOmZ1bmN0aW9uKGope3RoaXMuX3VzZV9hamF4 cGlwZT0hIWo7cmV0dXJuIHRoaXM7fSxzZXRBcHBlbmQ6ZnVuY3Rpb24oail7dGhp cy5fYXBwZW5kPSEhajtyZXR1cm4gdGhpczt9LHNldEpTTm9uQmxvY2s6ZnVuY3Rp b24oail7dGhpcy5fanNOb25ibG9jaz0hIWo7cmV0dXJuIHRoaXM7fSxzZXREaXNw bGF5Q2FsbGJhY2s6ZnVuY3Rpb24oail7dGhpcy5fZGlzcGxheUNhbGxiYWNrPWo7 cmV0dXJuIHRoaXM7fSxzZXRDb25zdEhlaWdodDpmdW5jdGlvbihqKXt0aGlzLl9j b25zdEhlaWdodD0hIWo7cmV0dXJuIHRoaXM7fX0pO2cuVUlQYWdlbGV0PWguZXhw b3J0cz1kO30sMyk7CmZ1bmN0aW9uIFBob3RvU3RyZWFtQ2FjaGUoKXt9Y29weV9w cm9wZXJ0aWVzKFBob3RvU3RyZWFtQ2FjaGUse0VSUk9SOidlcnJvcicsSFRNTDon aHRtbCcsSU1BR0VfREFUQTonaW1hZ2UnLEVYVFJBOidleHRyYScsQlVGRkVSX1NJ WkU6MyxJTklUX0JVQ0tFVF9TSVpFOjQsRlVMTF9CVUNLRVRfU0laRToxMixFUlJP Ul9JRDotMX0pO2NvcHlfcHJvcGVydGllcyhQaG90b1N0cmVhbUNhY2hlLnByb3Rv dHlwZSx7aW5pdDpmdW5jdGlvbihhKXt0aGlzLnZlcnNpb249YTt0aGlzLmJ1ZmZl clNpemU9UGhvdG9TdHJlYW1DYWNoZS5CVUZGRVJfU0laRTt0aGlzLmluaXRCdWNr ZXRTaXplPVBob3RvU3RyZWFtQ2FjaGUuSU5JVF9CVUNLRVRfU0laRTt0aGlzLmZ1 bGxCdWNrZXRTaXplPVBob3RvU3RyZWFtQ2FjaGUuRlVMTF9CVUNLRVRfU0laRTt0 aGlzLmluaXRFcnJvcj1mYWxzZTt0aGlzLmlzQWN0aXZlPXRydWU7dGhpcy5sZWZ0 TG9jaz1mYWxzZTt0aGlzLnJpZ2h0TG9jaz1mYWxzZTt0aGlzLnJlc2V0KCk7fSxy ZXNldDpmdW5jdGlvbigpe3RoaXMuY2FjaGU9e2ltYWdlOnt9LGV4dHJhOnt9LGh0 bWw6e319O3RoaXMuZmJpZExpc3Q9W107dGhpcy5sb2FkZWQ9ZmFsc2U7dGhpcy5h bGxMb2FkZWQ9ZmFsc2U7dGhpcy5wZXJtYWxpbmtNYXA9e307dGhpcy5wb3NpdGlv bj0wO3RoaXMudG90YWxDb3VudD1udWxsO3RoaXMuZmlyc3RDdXJzb3I9bnVsbDt0 aGlzLmZpcnN0Q3Vyc29ySW5kZXg9bnVsbDt9LGRlc3Ryb3k6ZnVuY3Rpb24oKXt0 aGlzLnJlc2V0KCk7dGhpcy5pc0FjdGl2ZT1mYWxzZTt9LGlzTG9hZGVkOmZ1bmN0 aW9uKCl7cmV0dXJuIHRoaXMubG9hZGVkO30sY2FuUGFnZTpmdW5jdGlvbigpe2lm KHRoaXMudG90YWxDb3VudCE9PW51bGwpcmV0dXJuIHRoaXMudG90YWxDb3VudD4x O3JldHVybiB0aGlzLmdldExlbmd0aCgpPjE7fSxlcnJvckluQ3VycmVudDpmdW5j dGlvbigpe2lmKHRoaXMuaW5pdEVycm9yKXtyZXR1cm4gdHJ1ZTt9ZWxzZSBpZigh dGhpcy5pc0xvYWRlZCgpKXJldHVybiBmYWxzZTtyZXR1cm4gdGhpcy5jaGVja0Vy cm9yQXQodGhpcy5nZXRDdXJzb3IoKSk7fSxnZXRMZW5ndGg6ZnVuY3Rpb24oKXty ZXR1cm4gdGhpcy5mYmlkTGlzdC5sZW5ndGg7fSxnZXRQaG90b1NldDpmdW5jdGlv bigpe3JldHVybiB0aGlzLnBob3RvU2V0UXVlcnkuc2V0O30sZ2V0Q3VycmVudElt YWdlRGF0YTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEltYWdlRGF0YSh0aGlz LmdldEN1cnNvcigpKTt9LGdldEltYWdlRGF0YTpmdW5jdGlvbihhKXtyZXR1cm4g dGhpcy5nZXRDYWNoZUNvbnRlbnQoYSxQaG90b1N0cmVhbUNhY2hlLklNQUdFX0RB VEEpO30sZ2V0Q3VycmVudEh0bWw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRD YWNoZUNvbnRlbnQodGhpcy5nZXRDdXJzb3IoKSxQaG90b1N0cmVhbUNhY2hlLkhU TUwpO30sZ2V0Q3VycmVudEV4dHJhRGF0YTpmdW5jdGlvbigpe3JldHVybiB0aGlz LmdldENhY2hlQ29udGVudCh0aGlzLmdldEN1cnNvcigpLFBob3RvU3RyZWFtQ2Fj aGUuRVhUUkEpO30sZ2V0Q2FjaGVDb250ZW50OmZ1bmN0aW9uKGEsYil7aWYoIWF8 fGE9PT1QaG90b1N0cmVhbUNhY2hlLkVSUk9SX0lEKXJldHVybiBudWxsO3JldHVy biB0aGlzLmNhY2hlW2JdW2FdO30sZ2V0Q3Vyc29yUG9zOmZ1bmN0aW9uKCl7cmV0 dXJuIHRoaXMucG9zaXRpb247fSxnZXRDdXJzb3I6ZnVuY3Rpb24oKXtpZih0aGlz LnBvc2l0aW9uPj0wJiZ0aGlzLnBvc2l0aW9uPHRoaXMuZ2V0TGVuZ3RoKCkpcmV0 dXJuIHRoaXMuZmJpZExpc3RbdGhpcy5wb3NpdGlvbl07cmV0dXJuIG51bGw7fSxn ZXRDdXJzb3JGb3JVUkk6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucGVybWFsaW5r TWFwW2FdO30sY2FsY3VsYXRlUG9zaXRpb25Gb3JNb3ZlbWVudDpmdW5jdGlvbihh KXt2YXIgYj10aGlzLnBvc2l0aW9uK2E7aWYodGhpcy5hbGxMb2FkZWQpe3ZhciBj PXRoaXMuZ2V0TGVuZ3RoKCk7Yj0oYytiJWMpJWM7fXJldHVybiBiO30saXNWYWxp ZE1vdmVtZW50OmZ1bmN0aW9uKGEpe2lmKCF0aGlzLmlzTG9hZGVkKCl8fCF0aGlz LmNhblBhZ2UoKSlyZXR1cm4gZmFsc2U7dmFyIGI9dGhpcy5jYWxjdWxhdGVQb3Np dGlvbkZvck1vdmVtZW50KGEpO3JldHVybiB0aGlzLmdldEN1cnNvcigpPjB8fChi Pj0wJiZiPHRoaXMuZ2V0TGVuZ3RoKCkpO30sbW92ZUN1cnNvcjpmdW5jdGlvbihh KXtpZighdGhpcy5pc1ZhbGlkTW92ZW1lbnQoYSkpcmV0dXJuO3RoaXMucG9zaXRp b249dGhpcy5jYWxjdWxhdGVQb3NpdGlvbkZvck1vdmVtZW50KGEpO2lmKGEhPT0w KXRoaXMubG9hZE1vcmVJZk5lY2Nlc3NhcnkoYT4wKTt9LGNoZWNrRXJyb3JBdDpm dW5jdGlvbihhKXtpZighdGhpcy5pc0xvYWRlZCgpKXJldHVybiBmYWxzZTtpZihh PT09UGhvdG9TdHJlYW1DYWNoZS5FUlJPUl9JRClyZXR1cm4gdHJ1ZTtyZXR1cm4g ZmFsc2U7fSxnZXRSZWxhdGl2ZU1vdmVtZW50OmZ1bmN0aW9uKGEpe2Zvcih2YXIg Yj0wO2I8dGhpcy5nZXRMZW5ndGgoKTtiKyspaWYodGhpcy5mYmlkTGlzdFtiXT09 YSlyZXR1cm4gYi10aGlzLnBvc2l0aW9uO3JldHVybiBudWxsO30scHJlbG9hZElt YWdlczpmdW5jdGlvbigpe3ZhciBlLGM7dmFyIGY9dGhpcy5nZXRMZW5ndGgoKTt2 YXIgYj10aGlzLmNhY2hlLmltYWdlO3ZhciBhPVBob3RvU3RyZWFtQ2FjaGUuQlVG RkVSX1NJWkU7aWYoZj5hKjIpe2U9KHRoaXMucG9zaXRpb24rZi1hJWYpJWY7Yz0o dGhpcy5wb3NpdGlvbithKSVmO31lbHNle2U9MDtjPWYtMTt9d2hpbGUoZSE9Yyl7 dmFyIGQ9dGhpcy5mYmlkTGlzdFtlXTtpZihiW2RdJiYhYltkXS5yZXNvdXJjZSYm YltkXS51cmwpe2JbZF0ucmVzb3VyY2U9bmV3IEltYWdlKCk7YltkXS5yZXNvdXJj ZS5zcmM9YltkXS51cmw7fWU9KGUrMSklZjt9fSxsb2FkTW9yZUlmTmVjY2Vzc2Fy eTpmdW5jdGlvbihjKXtpZih0aGlzLmFsbExvYWRlZHx8KGMmJnRoaXMucmlnaHRM b2NrKXx8KCFjJiZ0aGlzLmxlZnRMb2NrKSlyZXR1cm47dmFyIGQ9Yz8xOi0xO3Zh ciBhPXRoaXMuZnVsbEJ1Y2tldFNpemUqZDt2YXIgYj10aGlzLnBvc2l0aW9uK3Ro aXMuYnVmZmVyU2l6ZSpkO2lmKGI8MCYmIXRoaXMuY2hlY2tFcnJvckF0KHRoaXMu Z2V0RW5kQ3Vyc29yKGZhbHNlKSkpe3RoaXMubGVmdExvY2s9dHJ1ZTt0aGlzLmZl dGNoKHRoaXMuZnVsbEJ1Y2tldFNpemUsZmFsc2UpO31lbHNlIGlmKGI+dGhpcy5n ZXRMZW5ndGgoKSYmIXRoaXMuY2hlY2tFcnJvckF0KHRoaXMuZ2V0RW5kQ3Vyc29y KHRydWUpKSl7dGhpcy5yaWdodExvY2s9dHJ1ZTt0aGlzLmZldGNoKHRoaXMuZnVs bEJ1Y2tldFNpemUsdHJ1ZSk7fX0sZ2V0RW5kQ3Vyc29yOmZ1bmN0aW9uKGEpe3Jl dHVybiBhP3RoaXMuZmJpZExpc3RbdGhpcy5nZXRMZW5ndGgoKS0xXTp0aGlzLmZi aWRMaXN0WzBdO30sY2FsY3VsYXRlUmVsYXRpdmVJbmRleDpmdW5jdGlvbihjLGEs ZCl7aWYoIXRoaXMudG90YWxDb3VudClyZXR1cm4gbnVsbDt2YXIgYj10aGlzLmZi aWRMaXN0LmluZGV4T2YoYSk7dmFyIGU9dGhpcy5mYmlkTGlzdC5pbmRleE9mKGQp O2lmKGI9PT0tMXx8ZT09PS0xKXJldHVybiBudWxsO3ZhciBmPWUtYjtyZXR1cm4g KGMrZit0aGlzLnRvdGFsQ291bnQpJXRoaXMudG90YWxDb3VudDt9LGZldGNoOmZ1 bmN0aW9uKGEsZCl7dmFyIGM9dGhpcy5nZXRFbmRDdXJzb3IoZCk7dmFyIGI9Y29w eV9wcm9wZXJ0aWVzKHtjdXJzb3I6Yyx2ZXJzaW9uOnRoaXMudmVyc2lvbixlbmQ6 dGhpcy5nZXRFbmRDdXJzb3IoIWQpLGZldGNoU2l6ZTpkP2E6LTEqYX0sdGhpcy5w aG90b1NldFF1ZXJ5KTtpZih0aGlzLnRvdGFsQ291bnQmJnRoaXMuZmlyc3RDdXJz b3JJbmRleCE9PW51bGwpe2IudG90YWw9dGhpcy50b3RhbENvdW50O2IuY3Vyc29y SW5kZXg9dGhpcy5jYWxjdWxhdGVSZWxhdGl2ZUluZGV4KHRoaXMuZmlyc3RDdXJz b3JJbmRleCx0aGlzLmZpcnN0Q3Vyc29yLGMpO31VSVBhZ2VsZXQubG9hZEZyb21F bmRwb2ludCgnUGhvdG9WaWV3ZXJQYWdlbGV0JyxudWxsLGIse3VzZVBpcGU6dHJ1 ZSxqc05vbmJsb2NrOnRydWUsY3Jvc3NQYWdlOnRydWV9KTt9LHN0b3JlVG9DYWNo ZTpmdW5jdGlvbihhKXt2YXIgYj17fTtpZighdGhpcy5pc0FjdGl2ZSlyZXR1cm4g YjtpZignZXJyb3InIGluIGEpe3RoaXMucHJvY2Vzc0Vycm9yUmVzdWx0KGEuZXJy b3IpO2IuZXJyb3I9dHJ1ZTtyZXR1cm4gYjt9aWYoJ2luaXQnIGluIGEpe3RoaXMu cHJvY2Vzc0luaXRSZXN1bHQoYS5pbml0KTtiLmluaXQ9e2xvZ2lkczphLmluaXQu bG9naWRzLGZiaWQ6YS5pbml0LmZiaWQsbG9nZ2VkaW46YS5pbml0LmxvZ2dlZGlu LGZyb21hZDphLmluaXQuZnJvbWFkfTt9aWYoJ2ltYWdlJyBpbiBhKXt0aGlzLnBy b2Nlc3NJbWFnZVJlc3VsdChhLmltYWdlKTtiLmltYWdlPXRydWU7fWlmKCdkYXRh JyBpbiBhKXt0aGlzLnByb2Nlc3NEYXRhUmVzdWx0KGEuZGF0YSk7Yi5kYXRhPXRy dWU7fXJldHVybiBiO30scHJvY2Vzc0luaXRSZXN1bHQ6ZnVuY3Rpb24oYSl7aWYo dGhpcy5sb2FkZWQpcmV0dXJuO3RoaXMubG9hZGVkPXRydWU7dGhpcy5waG90b1Nl dFF1ZXJ5PWEucXVlcnk7aWYoYS5idWZmZXJTaXplKXRoaXMuYnVmZmVyU2l6ZT1h LmJ1ZmZlclNpemU7aWYoYS5pbml0QnVja2V0U2l6ZSE9PXVuZGVmaW5lZCYmYS5p bml0QnVja2V0U2l6ZSE9PW51bGwpdGhpcy5pbml0QnVja2V0U2l6ZT1hLmluaXRC dWNrZXRTaXplO2lmKGEuZnVsbEJ1Y2tldFNpemUpdGhpcy5mdWxsQnVja2V0U2l6 ZT1hLmZ1bGxCdWNrZXRTaXplO3RoaXMuZmJpZExpc3QucHVzaChhLmZiaWQpO3Ro aXMuZmlyc3RDdXJzb3I9YS5mYmlkO2lmKCdpbml0SW5kZXgnIGluIGEmJid0b3Rh bENvdW50JyBpbiBhKXt0aGlzLmZpcnN0Q3Vyc29ySW5kZXg9YS5pbml0SW5kZXg7 dGhpcy50b3RhbENvdW50PWEudG90YWxDb3VudDt9dGhpcy5yaWdodExvY2s9dHJ1 ZTtpZih0aGlzLmluaXRCdWNrZXRTaXplKXRoaXMuZmV0Y2godGhpcy5pbml0QnVj a2V0U2l6ZSx0cnVlKTt9LHByb2Nlc3NJbWFnZVJlc3VsdDpmdW5jdGlvbihiKXtm b3IodmFyIGEgaW4gYil7dGhpcy5jYWNoZS5pbWFnZVthXT1iW2FdO2lmKGJbYV0u ZGltZW5zaW9ucyl0aGlzLmNhY2hlLmltYWdlW2FdLmRpbWVuc2lvbnM9VmVjdG9y Mi5kZXNlcmlhbGl6ZShiW2FdLmRpbWVuc2lvbnMpO3RoaXMucGVybWFsaW5rTWFw W1VSSShiW2FdLmluZm8ucGVybWFsaW5rKS5nZXRVbnF1YWxpZmllZFVSSSgpLnRv U3RyaW5nKCldPWE7fX0sYXR0YWNoVG9GYmlkc0xpc3Q6ZnVuY3Rpb24oZCxlLGEp e2lmKHRoaXMuYWxsTG9hZGVkKXJldHVybjtpZihlPT09LTEpe2Zvcih2YXIgYj1k Lmxlbmd0aC0xO2I+PTA7Yi0tKXt0aGlzLmZiaWRMaXN0LnVuc2hpZnQoZFtiXSk7 dGhpcy5wb3NpdGlvbisrO310aGlzLmxlZnRMb2NrPWZhbHNlO31lbHNle2Zvcih2 YXIgYz0wO2M8ZC5sZW5ndGg7YysrKXRoaXMuZmJpZExpc3QucHVzaChkW2NdKTt0 aGlzLnJpZ2h0TG9jaz1mYWxzZTt9aWYoYSl0aGlzLnNldEFsbExvYWRlZCgpO30s c2V0QWxsTG9hZGVkOmZ1bmN0aW9uKCl7dGhpcy5hbGxMb2FkZWQ9dHJ1ZTtpZih0 aGlzLmdldEN1cnNvcigpPT09bnVsbCl0aGlzLnBvc2l0aW9uPXRoaXMuY2FsY3Vs YXRlUG9zaXRpb25Gb3JNb3ZlbWVudCgwKTt9LHByb2Nlc3NEYXRhUmVzdWx0OmZ1 bmN0aW9uKGEpe2Zvcih2YXIgYiBpbiBhKXtpZighdGhpcy5jYWNoZS5odG1sW2Jd KXRoaXMuY2FjaGUuaHRtbFtiXT17fTtmb3IodmFyIGQgaW4gYVtiXS5odG1sKXt2 YXIgYz1IVE1MKGFbYl0uaHRtbFtkXSkuZ2V0Um9vdE5vZGUoKTt0aGlzLmNhY2hl Lmh0bWxbYl1bZF09JEEoYy5jaGlsZE5vZGVzKTt9aWYoISgnZXh0cmEnIGluIGFb Yl0pKXt0aGlzLmNhY2hlLmV4dHJhW2JdPW51bGw7Y29udGludWU7fXRoaXMuY2Fj aGUuZXh0cmFbYl09e3RhZ1JlY3RzOnt9fTtpZihhW2JdLmV4dHJhLnRhZ1JlY3Rz KWZvcih2YXIgZSBpbiBhW2JdLmV4dHJhLnRhZ1JlY3RzKWlmKGFbYl0uZXh0cmEu dGFnUmVjdHNbZV0pdGhpcy5jYWNoZS5leHRyYVtiXS50YWdSZWN0c1tlXT1SZWN0 LmRlc2VyaWFsaXplKGFbYl0uZXh0cmEudGFnUmVjdHNbZV0pO319LHByb2Nlc3NF cnJvclJlc3VsdDpmdW5jdGlvbihiKXtpZighdGhpcy5pc0xvYWRlZCgpKXt0aGlz LmluaXRFcnJvcj10cnVlO3JldHVybjt9dmFyIGM9Yi5zaWRlO3ZhciBhPVtQaG90 b1N0cmVhbUNhY2hlLkVSUk9SX0lEXTt0aGlzLmF0dGFjaFRvRmJpZHNMaXN0KGEs Yyk7fSxzZXRUb3RhbENvdW50OmZ1bmN0aW9uKGEpe3RoaXMudG90YWxDb3VudD1h O30sc2V0Rmlyc3RDdXJzb3JJbmRleDpmdW5jdGlvbihhKXt0aGlzLmZpcnN0Q3Vy c29ySW5kZXg9YTt9fSk7CmZ1bmN0aW9uIFBob3RvSW5saW5lRWRpdG9yKGEpe3Ro aXMudmVyc2lvbj1hO1Bob3RvSW5saW5lRWRpdG9yLmluc3RhbmNlc1thXT10aGlz O31QaG90b0lubGluZUVkaXRvci5DQU5DRUxfSU5MSU5FX0VESVRJTkc9J0NBTkNF TF9JTkxJTkVfRURJVElORyc7UGhvdG9JbmxpbmVFZGl0b3IuaW5zdGFuY2VzPXt9 O1Bob3RvSW5saW5lRWRpdG9yLmdldEluc3RhbmNlPWZ1bmN0aW9uKGEpe3JldHVy biBQaG90b0lubGluZUVkaXRvci5pbnN0YW5jZXNbYV07fTtjb3B5X3Byb3BlcnRp ZXMoUGhvdG9JbmxpbmVFZGl0b3IucHJvdG90eXBlLHtjYW5jZWw6ZnVuY3Rpb24o YSl7dmFyIGI9UGFyZW50LmJ5Q2xhc3MoYSwncGhvdG9VZmlDb250YWluZXInKTtp ZighYilyZXR1cm47dGhpcy5zZXRWaXNpYmxlKGIsJy5mYlBob3Rvc1Bob3RvQ2Fw dGlvbicsdHJ1ZSk7dGhpcy5zZXRWaXNpYmxlKGIsJy5mYlBob3RvVGFnTGlzdCcs dHJ1ZSk7dGhpcy5zZXRWaXNpYmxlKGIsJy5mYlBob3Rvc1Bob3RvRWRpdCcsdHJ1 ZSk7dGhpcy5zZXRWaXNpYmxlKGIsJy5mYlBob3Rvc1Bob3RvRGlzYWJsZWRFZGl0 JyxmYWxzZSk7dGhpcy5zZXRWaXNpYmxlKGIsJy5mYlBob3RvSW5saW5lRWRpdG9y JyxmYWxzZSk7QXJiaXRlci51bnN1YnNjcmliZSh0aGlzLmFyYml0ZXJUb2tlbik7 QXJiaXRlci5pbmZvcm0oUGhvdG9JbmxpbmVFZGl0b3IuQ0FOQ0VMX0lOTElORV9F RElUSU5HKTt9LHNldFZpc2libGU6ZnVuY3Rpb24oYyxhLGQpe3ZhciBiPURPTS5z Y3J5KGMsYSlbMF07YiYmQ1NTW2Q/J3Nob3cnOidoaWRlJ10oYik7fSxzdWJzY3Jp YmVDYW5jZWw6ZnVuY3Rpb24oYSl7dmFyIGI9W1Bob3RvU25vd2JveC5QQUdFLFBo b3RvU25vd2JveC5DTE9TRSxQaG90b1Nub3dib3guT1BFTixQaG90b1RhZ2dlci5B Q1RJVkFURV9UQUdHSU5HXTt0aGlzLmFyYml0ZXJUb2tlbj1BcmJpdGVyLnN1YnNj cmliZShiLHRoaXMuY2FuY2VsLmJpbmQodGhpcyxhKSxBcmJpdGVyLlNVQlNDUklC RV9ORVcpO319KTsKdmFyIFBob3RvU25vd2JveD13aW5kb3cuUGhvdG9Tbm93Ym94 fHx7U1RBVEVfRVJST1I6J2Vycm9yJyxTVEFURV9IVE1MOidodG1sJyxTVEFURV9J TUFHRV9QSVhFTFM6J2ltYWdlX3BpeGVscycsU1RBVEVfSU1BR0VfREFUQTonaW1h Z2UnLENMT1NFOidQaG90b1Nub3dib3guQ0xPU0UnLERBVEFfQ0hBTkdFOidQaG90 b1Nub3dib3guREFUQV9DSEFOR0UnLEdPOidQaG90b1Nub3dib3guR08nLE9QRU46 J1Bob3RvU25vd2JveC5PUEVOJyxQQUdFOidQaG90b1Nub3dib3guUEFHRScsUkVT RVRfSEVMUDonUGhvdG9Tbm93Ym94LlJFU0VUX0hFTFAnLExPQURJTkdfVElNRU9V VDoyMDAwLFNUQUdFX01BWDp7eDo5NjAseTo5NjB9LFNUQUdFX01JTjp7eDo3MjAs eTo0MDJ9LFNUQUdFX0NIUk9NRTp7eDoyMjUseToxMTd9LFRJTUVMSU5FX1NUUkVU Q0hfV0lEVEg6ODQzLFRJTUVMSU5FX1NUUkVUQ0hfTUlOOjQ4MCxXSURFX0FEUzo4 NTUsTUlOX1RBR19ESVNUQU5DRTo4MyxBRFNfUkVGUkVTSF9SQVRFOjMwMDAwLHN3 aXRjaFRpbWVyOm51bGwsaW1hZ2VSZWZyZXNoVGltZXI6bnVsbCxpbWFnZUxvYWRp bmdUaW1lcjpudWxsLGxhc3RQYWdlOjAsY3VycmVudE1pblNpemU6bnVsbCxleHRy YUNsYXNzOm51bGwsbm9ybWFsU2l6ZTpudWxsLHJlc2V0VXJpU3RhY2s6dHJ1ZSx0 aHVtYlNyYzpudWxsLHNob3VsZFN0cmV0Y2g6ZmFsc2UsdWE6bnVsbCxib290c3Ry YXA6ZnVuY3Rpb24oYixhKXt0aGlzLnJlc2V0VXJpU3RhY2s9dHJ1ZTtpZih0aGlz LmlzT3BlbilpZih0aGlzLm9wZW5FeHBsaWNpdGx5KXt0aGlzLmNsb3NlQ2xlYW51 cCgpO3RoaXMucmVzZXRVcmlTdGFjaz1mYWxzZTt9ZWxzZSByZXR1cm47dGhpcy51 YT11c2VyX2FjdGlvbignc25vd2JveCcsYSxudWxsKS5zZXRfbmFtZXNwYWNlKHRo aXMucGlwZUxvYWQ/J3Nub3dib3gnOidzbm93Ym94UCcpLnNldF91YV9pZCgnb3Bl bicpO3RoaXMucmV0dXJuaW5nVG9TdGFydD1mYWxzZTt0aGlzLmxvYWRpbmcmJkNT Uy5yZW1vdmVDbGFzcyh0aGlzLmxvYWRpbmcsJ2xvYWRpbmcnKTtpZihhKXtDU1Mu YWRkQ2xhc3MoKHRoaXMubG9hZGluZz1hKSwnbG9hZGluZycpO3RoaXMuZ2V0VGh1 bWJBbmRTaXplKGEpO31lbHNlIHRoaXMubG9hZGluZz1udWxsO0FyYml0ZXIuaW5m b3JtKFBob3RvU25vd2JveC5HTyxiLEFyYml0ZXIuQkVIQVZJT1JfU1RBVEUpO3Ro aXMubG9hZEZyYW1lSWZVbmluaXRpYWxpemVkKCk7fSxnZXRUaHVtYkFuZFNpemU6 ZnVuY3Rpb24oYil7dGhpcy5ub3JtYWxTaXplPW51bGw7dGhpcy50aHVtYlNyYz1u dWxsO3ZhciBlPVVSSShiLmdldEF0dHJpYnV0ZSgnYWpheGlmeScpKS5nZXRRdWVy eURhdGEoKTtpZighZS5zaXplKXJldHVybjt2YXIgYT1WZWN0b3IyLmRlc2VyaWFs aXplKGUuc2l6ZSk7aWYoIWEueHx8IWEueSlyZXR1cm47dGhpcy5ub3JtYWxTaXpl PWE7aWYoIUNTUy5oYXNDbGFzcyhiLCd1aU1lZGlhVGh1bWInKSYmIUNTUy5oYXND bGFzcyhiLCd1aVBob3RvVGh1bWInKSYmIUNTUy5oYXNDbGFzcyhiLCd1aVNjYWxl ZFRodW1iJykpcmV0dXJuO3ZhciBkPURPTS5zY3J5KGIsJ2ltZycpWzBdO3ZhciBj PURPTS5zY3J5KGIsJ2knKVswXTt2YXIgZj1QYXJlbnQuYnlBdHRyaWJ1dGUoYiwn ZGF0YS1zaXplJyk7dGhpcy5zaG91bGRTdHJldGNoPWYmJnRoaXMubm9ybWFsU2l6 ZSYmZCYmZi5nZXRBdHRyaWJ1dGUoJ2RhdGEtc2l6ZScpPT09IjIiJiZ0aGlzLm5v cm1hbFNpemUueD50aGlzLm5vcm1hbFNpemUueSYmdGhpcy5ub3JtYWxTaXplLng8 PVBob3RvU25vd2JveC5USU1FTElORV9TVFJFVENIX1dJRFRIJiZkLm9mZnNldFdp ZHRoPT09UGhvdG9Tbm93Ym94LlRJTUVMSU5FX1NUUkVUQ0hfV0lEVEg7aWYoZCl7 dGh1bWJTcmM9ZC5zcmM7fWVsc2UgaWYoYyl7dGh1bWJTcmM9Q1NTLmdldFN0eWxl KGMsJ2JhY2tncm91bmRJbWFnZScpLnJlcGxhY2UoLy4qdXJsXCgiPyhbXiJdKiki P1wpLiovLCckMScpO31lbHNlIHJldHVybjt0aGlzLnRodW1iU3JjPXRodW1iU3Jj O30sbG9hZEZyYW1lSWZVbmluaXRpYWxpemVkOmZ1bmN0aW9uKCl7aWYodGhpcy5y b290KXJldHVybjtuZXcgQXN5bmNSZXF1ZXN0KCcvYWpheC9waG90b3Mvc25vd2Jv eC9pbml0LnBocCcpLnNldEFsbG93Q3Jvc3NQYWdlVHJhbnNpdGlvbih0cnVlKS5z ZXRNZXRob2QoJ0dFVCcpLnNldFJlYWRPbmx5KHRydWUpLnNlbmQoKTt9LGluaXQ6 ZnVuY3Rpb24oYSxiKXt0aGlzLnBpcGVMb2FkPWI7dmFyIGM9Z2UoJ2ZiUGhvdG9T bm93Ym94Jyk7aWYoIWMpe2M9RE9NLmFwcGVuZENvbnRlbnQoZG9jdW1lbnQuYm9k eSxhKVswXTt0aGlzLmluaXRpYWxMb2FkPWZhbHNlO31pZih0aGlzLnJvb3Q9PWMp cmV0dXJuO3RoaXMuaW5pdGlhbGl6ZU5vZGVzKGMpO2lmKCF0aGlzLnN1YnNjcmlw dGlvbil7TGlua0NvbnRyb2xsZXIucmVnaXN0ZXJIYW5kbGVyKHRoaXMuaGFuZGxl TmF2aWdhdGVBd2F5LmJpbmQodGhpcykpO3RoaXMuc3Vic2NyaXB0aW9uPUFyYml0 ZXIuc3Vic2NyaWJlKFBob3RvU25vd2JveC5HTyxmdW5jdGlvbihkLGUpe3RoaXMu b3BlbkV4cGxpY2l0bHk9dHJ1ZTt0aGlzLmxvYWRpbmcmJkNTUy5yZW1vdmVDbGFz cyh0aGlzLmxvYWRpbmcsJ2xvYWRpbmcnKTt0aGlzLm9wZW4oZSk7fS5iaW5kKHRo aXMpKTt9dGhpcy50cmFuc2l0aW9uSGFuZGxlclJlZ2lzdGVyZWQ9ZmFsc2U7dGhp cy5yZXR1cm5pbmdUb1N0YXJ0PWZhbHNlO1BhZ2VUcmFuc2l0aW9ucy5yZWdpc3Rl ckhhbmRsZXIodGhpcy5vcGVuSGFuZGxlci5iaW5kKHRoaXMpKTt0aGlzLm9wZW5I YW5kbGVyUmVnaXN0ZXJlZD10cnVlO0FyYml0ZXIuc3Vic2NyaWJlKCdQaG90b1Rh Z0FwcHJvdmFsLkhJTElURV9UQUcnLHRoaXMub25IaWxpdGVUYWcuYmluZCh0aGlz KSk7QXJiaXRlci5zdWJzY3JpYmUoJ1Bob3RvVGFnQXBwcm92YWwuVVBEQVRFX1RB R19CT1gnLHRoaXMub25VcGRhdGVUYWdCb3guYmluZCh0aGlzKSk7fSxpbml0aWFs aXplTm9kZXM6ZnVuY3Rpb24oYSl7dGhpcy5yb290PWE7dGhpcy5jbG9zZVRoZWF0 ZXI9RE9NLmZpbmQoYSwnYS5jbG9zZVRoZWF0ZXInKTt0aGlzLmNvbnRhaW5lcj1E T00uZmluZChhLCdkaXYuY29udGFpbmVyJyk7dGhpcy5pbmZvV3JhcHBlcj1ET00u ZmluZChhLCdkaXYucGhvdG9JbmZvV3JhcHBlcicpO3RoaXMuc3RhZ2VXcmFwcGVy PURPTS5maW5kKGEsJ2Rpdi5zdGFnZVdyYXBwZXInKTt0aGlzLmVycm9yQm94PURP TS5maW5kKHRoaXMuc3RhZ2VXcmFwcGVyLCdkaXYuc3RhZ2VFcnJvcicpO3RoaXMu aW1hZ2U9RE9NLmZpbmQodGhpcy5zdGFnZVdyYXBwZXIsJ2ltZy5zcG90bGlnaHQn KTt0aGlzLnBpdm90QmFyPURPTS5maW5kKHRoaXMuc3RhZ2VXcmFwcGVyLCdkaXYu cGl2b3RXcmFwcGVyJyk7dGhpcy5zdGFnZT1ET00uZmluZCh0aGlzLnN0YWdlV3Jh cHBlciwnZGl2LnN0YWdlJyk7dGhpcy52aWRlb1N0YWdlPURPTS5maW5kKHRoaXMu c3RhZ2VXcmFwcGVyLCdkaXYudmlkZW9TdGFnZScpO3RoaXMuc3RhZ2VQYWdlcnM9 RE9NLmZpbmQoYSwnZGl2LnN0YWdlUGFnZXJzJyk7dGhpcy5zdGFnZUFjdGlvbnM9 RE9NLmZpbmQoYSwnZGl2LnN0YWdlQWN0aW9ucycpO3RoaXMuYnV0dG9uQWN0aW9u cz1ET00uZmluZCh0aGlzLnN0YWdlQWN0aW9ucywnZGl2LmZiUGhvdG9zUGhvdG9C dXR0b25zJyk7dGhpcy5hY3Rpb25MaXN0PSQoJ2ZiUGhvdG9Tbm93Ym94QWN0aW9u cycpO3RoaXMuc2lkZUFkVW5pdD0kKCdmYlBob3RvU25vd2JveEFkc1NpZGUnKTt0 aGlzLmJvdHRvbUFkVW5pdD0kKCdmYlBob3RvU25vd2JveEFkc0JvdHRvbScpO3Ro aXMuc2lkZUFkRGl2PURPTS5maW5kKGEsJ2Rpdi5mYlBob3RvU25vd2JveEFkc1Np ZGUnKTt0aGlzLmJvdHRvbUFkRGl2PURPTS5maW5kKGEsJ2Rpdi5mYlBob3RvU25v d2JveEFkc0JvdHRvbScpO30sZ2V0Um9vdDpmdW5jdGlvbigpe3JldHVybiB0aGlz LnJvb3Q7fSxvcGVuSGFuZGxlcjpmdW5jdGlvbihhKXtpZih0aGlzLmlzT3Blbnx8 YS5nZXRQYXRoKCkhPScvcGhvdG8ucGhwJ3x8dGhpcy5yZXR1cm5pbmdUb1N0YXJ0 fHxhLmdldFF1ZXJ5RGF0YSgpLmNsb3NlVGhlYXRlcnx8YS5nZXRRdWVyeURhdGEo KS5wZXJtUGFnZXx8YS5nZXRRdWVyeURhdGEoKS5tYWtlcHJvZmlsZSl7dGhpcy5v cGVuSGFuZGxlclJlZ2lzdGVyZWQ9ZmFsc2U7cmV0dXJuIGZhbHNlO310aGlzLm9w ZW4oYSk7dGhpcy5fdXJpU3RhY2sucHVzaChVUkkoYSkuZ2V0UXVhbGlmaWVkVVJJ KCkudG9TdHJpbmcoKSk7UGFnZVRyYW5zaXRpb25zLnRyYW5zaXRpb25Db21wbGV0 ZSgpO3JldHVybiB0cnVlO30sb3BlbjpmdW5jdGlvbihjKXt2YXIgYT1VUkkoYyku Z2V0UXVlcnlEYXRhKCk7dmFyIGI9YS5zcmM7aWYoYilkZWxldGUgYS5zcmM7aWYo dGhpcy5yZXNldFVyaVN0YWNrKXRoaXMuX3VyaVN0YWNrPVtdO2lmKCF0aGlzLmlu aXRpYWxMb2FkKXthLmZpcnN0TG9hZD10cnVlO3RoaXMuaW5pdGlhbExvYWQ9dHJ1 ZTt9dGhpcy5sb2FkUXVlcnk9YTt0aGlzLmlzT3Blbj10cnVlO3RoaXMucGFnZXJz U2hvd249ZmFsc2U7dGhpcy5yZWZyZXNoT25DbG9zZT1mYWxzZTt0aGlzLmhpbGl0 ZWRUYWc9bnVsbDt0aGlzLmxhc3RBZHNMb2FkPTA7dGhpcy5sb2FkaW5nU3RhdGVz PXtpbWFnZTpmYWxzZSxodG1sOmZhbHNlfTt0aGlzLnJlcGxhY2VVcmw9ZmFsc2U7 dGhpcy5zdHJlYW09bmV3IFBob3RvU3RyZWFtQ2FjaGUoKTt0aGlzLnN0cmVhbS5p bml0KFBob3Rvc0NvbnN0LlZJRVdFUl9TTk9XQk9YKTt0aGlzLmZldGNoSW5pdGlh bERhdGEoKTt0aGlzLnNldExvYWRpbmdTdGF0ZShQaG90b1Nub3dib3guU1RBVEVf SFRNTCx0cnVlKTtLZXlFdmVudENvbnRyb2xsZXIucmVnaXN0ZXJLZXkoJ0VTQ0FQ RScsdGhpcy5jbG9zZUxpc3RlbmVyLmJpbmQodGhpcykpO0Jvb3Rsb2FkZXIubG9h ZENvbXBvbmVudHMoWydmYi1waG90b3MtcGhvdG8tY3NzJywnZmItcGhvdG9zLXNu b3dib3gtY3NzJ10sZnVuY3Rpb24oKXt0aGlzLl9vcGVuKGMsYik7fS5iaW5kKHRo aXMpKTt9LF9vcGVuOmZ1bmN0aW9uKGQsYyl7dGhpcy5jcmVhdGVMb2FkZXIoYyk7 Q1NTLnNob3codGhpcy5yb290KTsoZnVuY3Rpb24oKXt2YXIgZT1WZWN0b3IyLmdl dFNjcm9sbFBvc2l0aW9uKCk7Q1NTLmFkZENsYXNzKGRvY3VtZW50LmRvY3VtZW50 RWxlbWVudCwndGhlYXRlck1vZGUnKTt2YXIgZj1ET01TY3JvbGwuZ2V0U2Nyb2xs YmFyU2l6ZSgpO2lmKGY9PT0wKXt0aGlzLmV4dHJhQ2xhc3M9J3plcm9TY3JvbGxi YXInO31lbHNlIGlmKGY9PT0yMCl7dGhpcy5leHRyYUNsYXNzPSdzY3JvbGxiYXIy MCc7fWVsc2UgdGhpcy5leHRyYUNsYXNzPSdkZWZhdWx0U2Nyb2xsYmFyJztDU1Mu YWRkQ2xhc3MoZG9jdW1lbnQuYm9keSx0aGlzLmV4dHJhQ2xhc3MpO0NTUy5hZGRD bGFzcyhkb2N1bWVudC5ib2R5LCdjaGF0Rml4Tm9PcCcpO0RPTVNjcm9sbC5zY3Jv bGxUbyhlLDApO30pLmRlZmVyKCk7dGhpcy51YSYmdGhpcy51YS5hZGRfZXZlbnQo J2ZyYW1lJyk7QXJiaXRlci5pbmZvcm0oJ2xheWVyX3Nob3duJyx7dHlwZTonUGhv dG9Tbm93Ym94J30pO0FyYml0ZXIuaW5mb3JtKFBob3RvU25vd2JveC5PUEVOKTtC b290bG9hZGVyLmxvYWRDb21wb25lbnRzKFsnSG92ZXJjYXJkJywnbGl2ZS1qcycs J3Bob3RvY3JvcDInLCdQaG90b1RhZycsJ1Bob3RvVGFnZ2VyJywnVGFnVG9rZW4n LCdUYWdUb2tlbml6ZXInLCd1aS11ZmktY3NzJ10pO3RoaXMuc3RhZ2VIYW5kbGVy cz1bRXZlbnQubGlzdGVuKHdpbmRvdywncmVzaXplJyx0aGlzLmFkanVzdEZvclJl c2l6ZS5iaW5kKHRoaXMpKSxFdmVudC5saXN0ZW4odGhpcy5yb290LCdjbGljaycs dGhpcy5jbG9zZUxpc3RlbmVyLmJpbmQodGhpcykpLEV2ZW50Lmxpc3Rlbih0aGlz LnN0YWdlV3JhcHBlciwnY2xpY2snLHRoaXMuYnV0dG9uTGlzdGVuZXIuYmluZCh0 aGlzKSksRXZlbnQubGlzdGVuKHRoaXMuYWN0aW9uTGlzdCwnY2xpY2snLHRoaXMu cm90YXRlTGlzdGVuZXIuYmluZCh0aGlzKSldO3ZhciBhPWdlKCdmYlBob3RvU25v d2JveEZlZWRiYWNrJyk7aWYoYSl0aGlzLnN0YWdlSGFuZGxlcnMucHVzaChFdmVu dC5saXN0ZW4oYSwnY2xpY2snLGZ1bmN0aW9uKGV2ZW50KXtpZihQYXJlbnQuYnlD bGFzcyhldmVudC5nZXRUYXJnZXQoKSwnbGlrZV9saW5rJykpQ1NTLnRvZ2dsZUNs YXNzKERPTS5maW5kKHRoaXMuYnV0dG9uQWN0aW9ucywnZGl2Lmxpa2VDb21tZW50 R3JvdXAnKSwndmlld2VyTGlrZXNUaGlzJyk7fS5iaW5kKHRoaXMpKSk7dmFyIGI9 Z2UoJ2ZiUGhvdG9Tbm93Ym94T25Qcm9maWxlJyk7aWYoYil0aGlzLnN0YWdlSGFu ZGxlcnMucHVzaChFdmVudC5saXN0ZW4oYiwnY2xpY2snLGZ1bmN0aW9uKGV2ZW50 KXtpZihQYXJlbnQuYnlDbGFzcyhldmVudC5nZXRUYXJnZXQoKSwnZmJQaG90b1Jl bW92ZUZyb21Qcm9maWxlTGluaycpKXRoaXMucmVmcmVzaE9uQ2xvc2U9dHJ1ZTt9 LmJpbmQodGhpcykpKTtpZih0aGlzLnJlc2V0VXJpU3RhY2spdGhpcy5zdGFydGlu Z1VSST1VUkkuZ2V0TW9zdFJlY2VudFVSSSgpLmFkZFF1ZXJ5RGF0YSh7Y2xvc2VU aGVhdGVyOjF9KS5nZXRVbnF1YWxpZmllZFVSSSgpO2lmKCFjKXRoaXMuc2V0TG9h ZGluZ1N0YXRlKFBob3RvU25vd2JveC5TVEFURV9JTUFHRV9EQVRBLHRydWUpO2lm KCF0aGlzLnRyYW5zaXRpb25IYW5kbGVyUmVnaXN0ZXJlZCl7UGFnZVRyYW5zaXRp b25zLnJlZ2lzdGVySGFuZGxlcih0aGlzLnRyYW5zaXRpb25IYW5kbGVyLmJpbmQo dGhpcykpO3RoaXMudHJhbnNpdGlvbkhhbmRsZXJSZWdpc3RlcmVkPXRydWU7fVBo b3RvU2Vzc2lvbkxvZy5pbml0TG9nZ2luZyhQaG90b1Nlc3Npb25Mb2cuU05PV0JP WCk7dWEuZmlyZWZveCgpJiZ0aGlzLnR1cm5GbGFzaEF1dG9wbGF5T2ZmLmRlZmVy KCk7KGZ1bmN0aW9uKCl7dGhpcy5hZGp1c3RGb3JSZXNpemUoKTtpZih1YS5pZSgp KXt0aGlzLmNvbnRhaW5lci5mb2N1cygpO31lbHNlIHRoaXMucm9vdC5mb2N1cygp O30pLmJpbmQodGhpcykuZGVmZXIoKTt9LGdldFN0cmVhbTpmdW5jdGlvbigpe3Jl dHVybiB0aGlzLnN0cmVhbTt9LGZldGNoSW5pdGlhbERhdGE6ZnVuY3Rpb24oKXt0 aGlzLnVhJiZ0aGlzLnVhLmFkZF9ldmVudCgnaW5pdF9kYXRhJyk7aWYodGhpcy5w aXBlTG9hZCl7VUlQYWdlbGV0LmxvYWRGcm9tRW5kcG9pbnQoJ1Bob3RvVmlld2Vy SW5pdFBhZ2VsZXQnLG51bGwsdGhpcy5sb2FkUXVlcnkse3VzZVBpcGU6dHJ1ZSxq c05vbmJsb2NrOnRydWUsY3Jvc3NQYWdlOnRydWV9KTt9ZWxzZSBuZXcgQXN5bmNS ZXF1ZXN0KCcvYWpheC9waG90b3Mvc25vd2JveC9sb2FkLnBocCcpLnNldEFsbG93 Q3Jvc3NQYWdlVHJhbnNpdGlvbih0cnVlKS5zZXREYXRhKHRoaXMubG9hZFF1ZXJ5 KS5zZXRIYW5kbGVyKHRoaXMuc3RvcmVGcm9tUmVzcG9uc2UuYmluZCh0aGlzKSku c2V0TWV0aG9kKCdHRVQnKS5zZXRSZWFkT25seSh0cnVlKS5zZW5kKCk7fSx0dXJu Rmxhc2hBdXRvcGxheU9mZjpmdW5jdGlvbigpe0RPTS5zY3J5KGRvY3VtZW50LCdk aXYuc3dmT2JqZWN0JykuZWFjaChmdW5jdGlvbihkKXt2YXIgYj1kLmdldEF0dHJp YnV0ZSgnZGF0YS1zd2ZpZCcpO2lmKGImJndpbmRvd1tiXSl7dmFyIGM9d2luZG93 W2JdO2MuYWRkUGFyYW0oJ2F1dG9zdGFydCcsJ2ZhbHNlJyk7Yy5hZGRQYXJhbSgn YXV0b3BsYXknLCdmYWxzZScpO2MuYWRkUGFyYW0oJ3BsYXknLCdmYWxzZScpO2Mu YWRkVmFyaWFibGUoJ3ZpZGVvX2F1dG9wbGF5JywnMCcpO2MuYWRkVmFyaWFibGUo J2F1dG9wbGF5JywnMCcpO2MuYWRkVmFyaWFibGUoJ3BsYXknLCcwJyk7dmFyIGE9 VVJJKGMuZ2V0QXR0cmlidXRlKCdzd2YnKSk7YS5hZGRRdWVyeURhdGEoe2F1dG9w bGF5OicwJ30pO2Euc2V0UGF0aChhLmdldFBhdGgoKS5yZXBsYWNlKCdhdXRvcGxh eT0xJywnYXV0b3BsYXk9MCcpKTtjLnNldEF0dHJpYnV0ZSgnc3dmJyxhLnRvU3Ry aW5nKCkpO2Mud3JpdGUoZCk7fX0pO30sY2xvc2VIYW5kbGVyOmZ1bmN0aW9uKCl7 aWYoIXRoaXMuaXNPcGVuKXJldHVybjtpZihVUkkuZ2V0TW9zdFJlY2VudFVSSSgp LmFkZFF1ZXJ5RGF0YSh7Y2xvc2VUaGVhdGVyOjF9KS5nZXRVbnF1YWxpZmllZFVS SSgpLnRvU3RyaW5nKCk9PXRoaXMuc3RhcnRpbmdVUkkudG9TdHJpbmcoKSl7dGhp cy5jbG9zZSgpO3JldHVybjt9dGhpcy5jbG9zZSgpO3RoaXMucmV0dXJuVG9TdGFy dGluZ1VSSSh0aGlzLnJlZnJlc2hPbkNsb3NlKTt9LHJldHVyblRvU3RhcnRpbmdV Ukk6ZnVuY3Rpb24oZCxiKXtpZighZClpZihiKXt0aGlzLnNxdWFzaE5leHRUcmFu c2l0aW9uKGdvVVJJLmN1cnJ5KGIpKTt9ZWxzZSB0aGlzLnNxdWFzaE5leHRUcmFu c2l0aW9uKCk7dGhpcy5yZXR1cm5pbmdUb1N0YXJ0PXRydWU7dmFyIGU9QXJiaXRl ci5zdWJzY3JpYmUoJ3BhZ2VfdHJhbnNpdGlvbicsZnVuY3Rpb24oKXt0aGlzLnJl dHVybmluZ1RvU3RhcnQ9ZmFsc2U7QXJiaXRlci51bnN1YnNjcmliZShlKTt9KTt2 YXIgYT1kfHxpc05hTih1YS5vcGVyYSgpKTt2YXIgZz10aGlzLl91cmlTdGFjay5s ZW5ndGg7aWYoYSYmZzx3aW5kb3cuaGlzdG9yeS5sZW5ndGgpe3dpbmRvdy5oaXN0 b3J5LmdvKC1nKTt9ZWxzZXt2YXIgZj1QaG90b1Nub3dib3guc3RhcnRpbmdVUkk7 dmFyIGM9bmV3IFVSSShmKS5yZW1vdmVRdWVyeURhdGEoJ2Nsb3NlVGhlYXRlcicp O2lmKGYuZ2V0UXVlcnlEYXRhKCkuc2s9PSdhcHByb3ZlJyYmZi5nZXRQYXRoKCk9 PScvcHJvZmlsZS5waHAnKXtjLnJlbW92ZVF1ZXJ5RGF0YSgnaGlnaGxpZ2h0Jyk7 Yy5yZW1vdmVRdWVyeURhdGEoJ25vdGlmX3QnKTt9Z29VUkkoYyk7fX0sc3F1YXNo TmV4dFRyYW5zaXRpb246ZnVuY3Rpb24oYSl7UGhvdG9Tbm93Ym94LnNxdWFzaE5l eHQ9dHJ1ZTtQYWdlVHJhbnNpdGlvbnMucmVnaXN0ZXJIYW5kbGVyKGZ1bmN0aW9u IF9zcXVhc2goKXtpZihQaG90b1Nub3dib3guc3F1YXNoTmV4dCl7UGhvdG9Tbm93 Ym94LnNxdWFzaE5leHQ9ZmFsc2U7aWYoYSlhLmRlZmVyKCk7UGFnZVRyYW5zaXRp b25zLnRyYW5zaXRpb25Db21wbGV0ZSgpO3JldHVybiB0cnVlO31yZXR1cm4gZmFs c2U7fSk7fSxoYW5kbGVOYXZpZ2F0ZUF3YXk6ZnVuY3Rpb24oYil7dmFyIGE9Y29t cHV0ZVJlbGF0aXZlVVJJKHdpbmRvdy5QYWdlVHJhbnNpdGlvbnMuX21vc3RfcmVj ZW50X3VyaS5nZXRRdWFsaWZpZWRVUkkoKSxiLmdldEF0dHJpYnV0ZSgnaHJlZicp KTtpZih0aGlzLmlzT3BlbiYmKGEgaW5zdGFuY2VvZiBVUkkpJiZhLmdldFVucXVh bGlmaWVkVVJJKCkudG9TdHJpbmcoKSE9dGhpcy5zdGFydGluZ1VSSS50b1N0cmlu ZygpJiZhLmdldFBhdGgoKSE9Jy9waG90by5waHAnKXtpZighdGhpcy5jbG9zaW5n QWN0aW9uKXRoaXMuY2xvc2luZ0FjdGlvbj1QaG90b1Nlc3Npb25Mb2cuTkFWSUdB VEU7dGhpcy5jbG9zZSgpO3RoaXMucmV0dXJuVG9TdGFydGluZ1VSSShmYWxzZSxh KTtyZXR1cm4gZmFsc2U7fXJldHVybiB0cnVlO30sY2xvc2VMaXN0ZW5lcjpmdW5j dGlvbihldmVudCl7aWYodGhpcy5pc09wZW4mJiEod2luZG93LkRpYWxvZyYmRGlh bG9nLmdldEN1cnJlbnQoKSkpe3ZhciBjPWV2ZW50LmdldFRhcmdldCgpO3ZhciBh PVBhcmVudC5ieUNsYXNzKGMsJ2Nsb3NlVGhlYXRlcicpO3ZhciBiPShhfHxjPT10 aGlzLnJvb3R8fGM9PXRoaXMuaW5mb1dyYXBwZXIpO2lmKGIpe2lmKGEpe3RoaXMu Y2xvc2luZ0FjdGlvbj1QaG90b1Nlc3Npb25Mb2cuWDt9ZWxzZSB0aGlzLmNsb3Np bmdBY3Rpb249UGhvdG9TZXNzaW9uTG9nLk9VVFNJREU7RXZlbnQua2lsbChldmVu dCk7dGhpcy5jbG9zZUhhbmRsZXIoKTt9ZWxzZSBpZihFdmVudC5nZXRLZXlDb2Rl KGV2ZW50KT09S0VZUy5FU0Mpe3RoaXMuY2xvc2luZ0FjdGlvbj1QaG90b1Nlc3Np b25Mb2cuRVNDO0V2ZW50LmtpbGwoZXZlbnQpO3RoaXMuY2xvc2VIYW5kbGVyKCk7 fX19LGNsb3NlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuaXNPcGVuKXJldHVybjtDU1Mu aGlkZSh0aGlzLnJvb3QpO3RoaXMub3BlbkV4cGxpY2l0bHk9ZmFsc2U7dGhpcy5j bG9zZUNsZWFudXAuYmluZCh0aGlzKS5kZWZlcigpO30sY2xvc2VDbGVhbnVwOmZ1 bmN0aW9uKCl7dmFyIGI9VmVjdG9yMi5nZXRTY3JvbGxQb3NpdGlvbigpO0NTUy5y ZW1vdmVDbGFzcyhkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsJ3RoZWF0ZXJNb2Rl Jyk7Q1NTLnJlbW92ZUNsYXNzKGRvY3VtZW50LmJvZHksdGhpcy5leHRyYUNsYXNz KTtDU1MucmVtb3ZlQ2xhc3MoZG9jdW1lbnQuYm9keSwnY2hhdEZpeE5vT3AnKTtD U1MucmVtb3ZlQ2xhc3ModGhpcy5yb290LCdkYXRhTG9hZGVkJyk7RE9NU2Nyb2xs LnNjcm9sbFRvKGIsMCk7S2V5RXZlbnRDb250cm9sbGVyLmdldEluc3RhbmNlKCku cmVzZXRIYW5kbGVycygpO1Bob3RvU2Vzc2lvbkxvZy5sb2dQaG90b1ZpZXdzKHRo aXMuY2xvc2luZ0FjdGlvbik7dGhpcy5kZXN0cm95KCk7Q1NTLmhpZGUodGhpcy5l cnJvckJveCk7Q1NTLmhpZGUodGhpcy5pbWFnZSk7dGhpcy5ub3JtYWxTaXplPW51 bGw7dGhpcy50aHVtYlNyYz1udWxsO3RoaXMuc2hvdWxkU3RyZXRjaD1mYWxzZTt0 aGlzLnJlc2V0VXJpU3RhY2s9dHJ1ZTtDU1MucmVtb3ZlQ2xhc3ModGhpcy5zdGFn ZVdyYXBwZXIsJ3Nob3dWaWRlbycpO0RPTS5lbXB0eSh0aGlzLnZpZGVvU3RhZ2Up O3RoaXMuY3VycmVudE1pblNpemU9bnVsbDt0aGlzLnBpblBhZ2Vycz1mYWxzZTtD U1MucmVtb3ZlQ2xhc3ModGhpcy5zdGFnZVBhZ2VycywncGFnaW5nUmVhZHknKTt0 aGlzLnJlY2FjaGVEYXRhKCk7RE9NLmVtcHR5KHRoaXMuc2lkZUFkVW5pdCk7RE9N LmVtcHR5KHRoaXMuYm90dG9tQWRVbml0KTt0aGlzLnN0cmVhbS5kZXN0cm95KCk7 dmFyIGE9dGhpcy5jbG9zaW5nQWN0aW9uPT09UGhvdG9TZXNzaW9uTG9nLk5BVklH QVRFO3RoaXMuY2xvc2luZ0FjdGlvbj1udWxsO2lmKCF0aGlzLm9wZW5IYW5kbGVy UmVnaXN0ZXJlZCl7UGFnZVRyYW5zaXRpb25zLnJlZ2lzdGVySGFuZGxlcih0aGlz Lm9wZW5IYW5kbGVyLmJpbmQodGhpcykpO3RoaXMub3BlbkhhbmRsZXJSZWdpc3Rl cmVkPXRydWU7fUFyYml0ZXIuaW5mb3JtKCdsYXllcl9oaWRkZW4nLHt0eXBlOidQ aG90b1Nub3dib3gnfSk7QXJiaXRlci5pbmZvcm0oUGhvdG9Tbm93Ym94LkNMT1NF LGEpO3RoaXMucm9vdC5zZXRBdHRyaWJ1dGUoJ2FyaWEtYnVzeScsJ3RydWUnKTt0 aGlzLmlzT3Blbj1mYWxzZTt9LGNyZWF0ZUxvYWRlcjpmdW5jdGlvbihiKXtpZih0 aGlzLnRodW1iU3JjIT09bnVsbCYmdGhpcy5ub3JtYWxTaXplIT09bnVsbCl7dmFy IGE9dGhpcy5nZXRNYXhJbWFnZVNpemUodGhpcy5ub3JtYWxTaXplKTt0aGlzLnVz ZUltYWdlKCROKCdpbWcnLHtjbGFzc05hbWU6J3Nwb3RsaWdodCcsYWx0OicnLHNy Yzp0aGlzLnRodW1iU3JjLHN0eWxlOnt3aWR0aDphLngrJ3B4JyxoZWlnaHQ6YS55 KydweCd9fSksYSxmYWxzZSk7fXRoaXMuc2V0TG9hZGluZ1N0YXRlKHRoaXMuU1RB VEVfSU1BR0VfUElYRUxTLHRydWUpO2lmKGIpKGZ1bmN0aW9uKCl7dmFyIGM9bmV3 IEltYWdlKCk7Yy5vbmxvYWQ9YXN5bmNfY2FsbGJhY2soZnVuY3Rpb24oKXtpZigh dGhpcy5zdHJlYW18fCF0aGlzLnN0cmVhbS5lcnJvckluQ3VycmVudCgpKXt0aGlz LnN3aXRjaEltYWdlKGIsdGhpcy5ub3JtYWxTaXplKTt0aGlzLnVhJiZ0aGlzLnVh LmFkZF9ldmVudCgnaW1hZ2UnKTt9fS5iaW5kKHRoaXMpLCdwaG90b190aGVhdGVy Jyk7Yy5zcmM9Yjt9KS5iaW5kKHRoaXMpLmRlZmVyKCk7Q1NTLmhpZGUodGhpcy5z dGFnZUFjdGlvbnMpO0NTUy5hZGRDbGFzcyh0aGlzLnN0YWdlUGFnZXJzLCdwYWdp bmdEaXNhYmxlZCcpO30saW5pdERhdGFGZXRjaGVkOmZ1bmN0aW9uKGEpe1Bob3Rv U2Vzc2lvbkxvZy5zZXRQaG90b1NldCh0aGlzLnN0cmVhbS5nZXRQaG90b1NldCgp KTtQaG90b1Nlc3Npb25Mb2cuc2V0TG9nRmJpZHMoYS5sb2dpZHMpO1Bob3RvU2Vz c2lvbkxvZy5hZGRQaG90b1ZpZXcodGhpcy5zdHJlYW0uZ2V0Q3VycmVudEltYWdl RGF0YSgpLmluZm8pO3RoaXMucG9zaXRpb249dGhpcy5zdHJlYW0uZ2V0Q3Vyc29y KCk7dmFyIGI9e2NsaWNrOnRoaXMucGFnZUxpc3RlbmVyLmJpbmQodGhpcyksbW91 c2VsZWF2ZTp0aGlzLm1vdXNlTGVhdmVMaXN0ZW5lci5iaW5kKHRoaXMpLG1vdXNl bW92ZTp0aGlzLm1vdXNlTW92ZUxpc3RlbmVyLmJpbmQodGhpcyl9O2lmKCF0aGlz LnBhZ2VIYW5kbGVycyl7dGhpcy5wYWdlSGFuZGxlcnM9dmFsdWVzKEV2ZW50Lmxp c3Rlbih0aGlzLnJvb3QsYikpO0tleUV2ZW50Q29udHJvbGxlci5yZWdpc3Rlcktl eSgnTEVGVCcsdGhpcy5wYWdlTGlzdGVuZXIuYmluZCh0aGlzKSk7S2V5RXZlbnRD b250cm9sbGVyLnJlZ2lzdGVyS2V5KCdSSUdIVCcsdGhpcy5wYWdlTGlzdGVuZXIu YmluZCh0aGlzKSk7fUNTUy5zaG93KHRoaXMuc3RhZ2VBY3Rpb25zKTt0aGlzLnJv b3Quc2V0QXR0cmlidXRlKCdhcmlhLWJ1c3knLCdmYWxzZScpO3RoaXMuaXNMb2dn ZWRJblZpZXdlcj1hLmxvZ2dlZGluO3RoaXMuZGlzYWJsZUFkcz0hdGhpcy5pc0xv Z2dlZEluVmlld2VyfHxhLmZyb21hZDt0aGlzLmxvYWRBZHMoKTt9LGFkanVzdEZv clJlc2l6ZTpmdW5jdGlvbigpe3RoaXMuY3VycmVudE1pblNpemU9bnVsbDt0aGlz LnBpblBhZ2Vycz1mYWxzZTt0aGlzLmFkanVzdFN0YWdlU2l6ZSgpO3RoaXMuYWRq dXN0Rm9yTmV3RGF0YSgpO30sZ2V0TWF4SW1hZ2VTaXplOmZ1bmN0aW9uKGMpe3Zh ciBmPVZlY3RvcjIuZ2V0Vmlld3BvcnREaW1lbnNpb25zKCk7dmFyIGU9Zi5zdWIo bmV3IFZlY3RvcjIoUGhvdG9Tbm93Ym94LlNUQUdFX0NIUk9NRS54LFBob3RvU25v d2JveC5TVEFHRV9DSFJPTUUueSkpO3ZhciBhPW5ldyBWZWN0b3IyKE1hdGgubWlu KGMueCxlLngsUGhvdG9Tbm93Ym94LlNUQUdFX01BWC54KSxNYXRoLm1pbihjLnks ZS55LFBob3RvU25vd2JveC5TVEFHRV9NQVgueSkpO2lmKGEueD09PTAmJmEueT09 PTApcmV0dXJuIG5ldyBWZWN0b3IyKDAsMCk7dmFyIGQ9Yy54L2MueTt2YXIgYj1h LngvYS55O2lmKGI8ZClyZXR1cm4gbmV3IFZlY3RvcjIoYS54LE1hdGgucm91bmQo YS54L2QpKTtyZXR1cm4gbmV3IFZlY3RvcjIoTWF0aC5yb3VuZChhLnkqZCksYS55 KTt9LGFkanVzdFN0YWdlU2l6ZTpmdW5jdGlvbihjKXt2YXIgYTt2YXIgYj10aGlz LnN0cmVhbSYmdGhpcy5zdHJlYW0uZ2V0Q3VycmVudEltYWdlRGF0YSgpO2lmKGMp e2E9Yzt9ZWxzZSBpZihiJiZiLmRpbWVuc2lvbnMpe2E9Yi5kaW1lbnNpb25zO31l bHNlIGlmKHRoaXMuaW1hZ2UmJnRoaXMuaW1hZ2Uuc3JjJiZpbWFnZV9oYXNfbG9h ZGVkKHRoaXMuaW1hZ2UpKXthPVZlY3RvcjIuZ2V0RWxlbWVudERpbWVuc2lvbnMo dGhpcy5pbWFnZSk7fWVsc2UgcmV0dXJuO2lmKHRoaXMuc2hvdWxkU3RyZXRjaCYm IXRoaXMuZ2V0VmlkZW9PblN0YWdlKCkmJmEueD5hLnkmJmEueDw9UGhvdG9Tbm93 Ym94LlRJTUVMSU5FX1NUUkVUQ0hfV0lEVEgmJmEueD49UGhvdG9Tbm93Ym94LlRJ TUVMSU5FX1NUUkVUQ0hfTUlOKXthLnk9TWF0aC5yb3VuZChhLnkqUGhvdG9Tbm93 Ym94LlRJTUVMSU5FX1NUUkVUQ0hfV0lEVEgvYS54KTthLng9UGhvdG9Tbm93Ym94 LlRJTUVMSU5FX1NUUkVUQ0hfV0lEVEg7Q1NTLnNldFN0eWxlKHRoaXMuaW1hZ2Us J2hlaWdodCcsYS55KydweCcpO0NTUy5zZXRTdHlsZSh0aGlzLmltYWdlLCd3aWR0 aCcsJ2F1dG8nKTt9dmFyIGQ9dGhpcy5nZXRNYXhJbWFnZVNpemUoYSk7aWYoIXRo aXMuY3VycmVudE1pblNpemUpe3RoaXMuY3VycmVudE1pblNpemU9bmV3IFZlY3Rv cjIoTWF0aC5tYXgoZC54LFBob3RvU25vd2JveC5TVEFHRV9NSU4ueCksTWF0aC5t YXgoZC55LFBob3RvU25vd2JveC5TVEFHRV9NSU4ueSkpO31lbHNlIHRoaXMuY3Vy cmVudE1pblNpemU9bmV3IFZlY3RvcjIoTWF0aC5tYXgoZC54LHRoaXMuY3VycmVu dE1pblNpemUueCksTWF0aC5tYXgoZC55LFBob3RvU25vd2JveC5TVEFHRV9NSU4u eSkpO0NTUy5zZXRTdHlsZSh0aGlzLmNvbnRhaW5lciwnd2lkdGgnLHRoaXMuY3Vy cmVudE1pblNpemUueCsncHgnKTtDU1Muc2V0U3R5bGUodGhpcy5zdGFnZVdyYXBw ZXIsJ2hlaWdodCcsdGhpcy5jdXJyZW50TWluU2l6ZS55KydweCcpO0NTUy5zZXRT dHlsZSh0aGlzLnN0YWdlLCdsaW5lSGVpZ2h0Jyx0aGlzLmN1cnJlbnRNaW5TaXpl LnkrJ3B4Jyk7Q1NTLnNldFN0eWxlKHRoaXMudmlkZW9TdGFnZSwnbGluZUhlaWdo dCcsdGhpcy5jdXJyZW50TWluU2l6ZS55KydweCcpO0NTUy5jb25kaXRpb25DbGFz cyh0aGlzLmNvbnRhaW5lciwnYWRzT25TaWRlJyx0aGlzLmN1cnJlbnRNaW5TaXpl Lng+PVBob3RvU25vd2JveC5XSURFX0FEUyk7dGhpcy5hZGp1c3RGb3JBZFVuaXQo KTtpZighdGhpcy5waW5QYWdlcnMpQ1NTLnNldFN0eWxlKHRoaXMuc3RhZ2VQYWdl cnMsJ2hlaWdodCcsdGhpcy5jdXJyZW50TWluU2l6ZS55LzIrJ3B4Jyk7dGhpcy5w aW5QYWdlcnM9dHJ1ZTt9LGFkanVzdEZvck5ld0RhdGE6ZnVuY3Rpb24oKXtpZigh dGhpcy5pbWFnZSlyZXR1cm47dmFyIGM9RE9NLnNjcnkodGhpcy5zdGFnZSwnZGl2 LnRhZ3NXcmFwcGVyJylbMF07dmFyIGE9VmVjdG9yMi5nZXRFbGVtZW50RGltZW5z aW9ucyh0aGlzLmltYWdlKTtpZihjKXtDU1Muc2V0U3R5bGUoYywnd2lkdGgnLGEu eCsncHgnKTtDU1Muc2V0U3R5bGUoYywnaGVpZ2h0JyxhLnkrJ3B4Jyk7aWYodWEu aWUoKTw9Nyl7dmFyIGI9RE9NLnNjcnkodGhpcy5yb290LCdkaXYudGFnQ29udGFp bmVyJylbMF07aWYoYilDU1MuY29uZGl0aW9uQ2xhc3MoYywnaWU3VmVydGljYWxG aXgnLFZlY3RvcjIuZ2V0RWxlbWVudERpbWVuc2lvbnMoYikueT5hLnkpO319fSxz ZXRMb2FkaW5nU3RhdGU6ZnVuY3Rpb24oYixhKXtzd2l0Y2goYil7Y2FzZSBQaG90 b1Nub3dib3guU1RBVEVfSU1BR0VfUElYRUxTOkNTUy5jb25kaXRpb25DbGFzcyh0 aGlzLnJvb3QsJ2ltYWdlUGl4ZWxzTG9hZGluZycsYSk7YnJlYWs7Y2FzZSBQaG90 b1Nub3dib3guU1RBVEVfSU1BR0VfREFUQTp0aGlzLmxvYWRpbmdTdGF0ZXNbYl09 YTtDU1MuY29uZGl0aW9uQ2xhc3ModGhpcy5yb290LCdpbWFnZUxvYWRpbmcnLGEp O2JyZWFrO2Nhc2UgUGhvdG9Tbm93Ym94LlNUQVRFX0hUTUw6dGhpcy5sb2FkaW5n U3RhdGVzW2JdPWE7Q1NTLmNvbmRpdGlvbkNsYXNzKHRoaXMucm9vdCwnZGF0YUxv YWRpbmcnLGEpO0NTUy5jb25kaXRpb25DbGFzcyh0aGlzLnJvb3QsJ2RhdGFMb2Fk ZWQnLCFhKTt0aGlzLmluZm9XcmFwcGVyLnNldEF0dHJpYnV0ZSgnYXJpYS1idXN5 JyxhPyd0cnVlJzonZmFsc2UnKTticmVhazt9fSxkZXN0cm95OmZ1bmN0aW9uKCl7 dGhpcy5zdGFnZUhhbmRsZXJzLmVhY2goZnVuY3Rpb24oYSl7YS5yZW1vdmUoKTt9 KTtpZih0aGlzLnBhZ2VIYW5kbGVycyl7dGhpcy5wYWdlSGFuZGxlcnMuZWFjaChm dW5jdGlvbihhKXthLnJlbW92ZSgpO30pO3RoaXMucGFnZUhhbmRsZXJzPW51bGw7 fX0sY2hlY2tTdGF0ZTpmdW5jdGlvbihiKXtpZihiIT1QaG90b1Nub3dib3guU1RB VEVfRVJST1ImJiF0aGlzLmxvYWRpbmdTdGF0ZXNbYl0pcmV0dXJuO3N3aXRjaChi KXtjYXNlIFBob3RvU25vd2JveC5TVEFURV9JTUFHRV9EQVRBOnZhciBhPXRoaXMu c3RyZWFtLmdldEN1cnJlbnRJbWFnZURhdGEoKTtpZihhKXtpZihhLnVybCl7dGhp cy5zd2l0Y2hJbWFnZShhLnVybCxudWxsLHRydWUpO31lbHNlIGlmKGEudmlkZW8p dGhpcy5zd2l0Y2hWaWRlbyhhLnZpZGVvLHRydWUpO3RoaXMuc2V0TG9hZGluZ1N0 YXRlKGIsZmFsc2UpO31icmVhaztjYXNlIFBob3RvU25vd2JveC5TVEFURV9IVE1M OmlmKHRoaXMuc3RyZWFtLmdldEN1cnJlbnRIdG1sKCkpe3RoaXMuc3dhcERhdGEo KTt0aGlzLnNldExvYWRpbmdTdGF0ZShiLGZhbHNlKTt9YnJlYWs7ZGVmYXVsdDpp Zih0aGlzLnN0cmVhbS5lcnJvckluQ3VycmVudCgpKXtDU1MuaGlkZSh0aGlzLmlt YWdlKTtDU1Muc2hvdyh0aGlzLmVycm9yQm94KTt9YnJlYWs7fX0sYnV0dG9uTGlz dGVuZXI6ZnVuY3Rpb24oZXZlbnQpe3ZhciBiPWV2ZW50LmdldFRhcmdldCgpO3Zh ciBhPURhdGUubm93KCk7aWYoUGFyZW50LmJ5Q2xhc3MoYiwnZmJQaG90b1RhZ0Fw cHJvdmFsQm94JykpcmV0dXJuO2lmKGEtdGhpcy5sYXN0UGFnZTwzNTApcmV0dXJu O2lmKFBhcmVudC5ieUNsYXNzKGIsJ2xpa2VCdXR0b24nKSl7RE9NLmZpbmQoJCgn ZmJQaG90b1Nub3dib3hGZWVkYmFjaycpLCdidXR0b24ubGlrZV9saW5rJykuY2xp Y2soKTt9ZWxzZSBpZihQYXJlbnQuYnlDbGFzcyhiLCdjb21tZW50QnV0dG9uJykp e0RPTS5maW5kKHRoaXMucm9vdCwnZGl2LmNvbW1lbnRCb3ggdGV4dGFyZWEnKS5m b2N1cygpO3RoaXMucm9vdC5zY3JvbGxUb3A9dGhpcy5yb290LnNjcm9sbEhlaWdo dDt9ZWxzZSBpZihQYXJlbnQuYnlDbGFzcyhiLCd0YWdBcHByb3ZlSWdub3JlJykp dGhpcy51cGRhdGVUYWdCb3goZXZlbnQsYik7fSxyb3RhdGVMaXN0ZW5lcjpmdW5j dGlvbihldmVudCl7dmFyIGE9ZXZlbnQuZ2V0VGFyZ2V0KCk7aWYoUGFyZW50LmJ5 Q2xhc3MoYSwncm90YXRlUmlnaHQnKSl7dGhpcy5yb3RhdGUoJ3JpZ2h0Jyk7fWVs c2UgaWYoUGFyZW50LmJ5Q2xhc3MoYSwncm90YXRlTGVmdCcpKXRoaXMucm90YXRl KCdsZWZ0Jyk7fSx1cGRhdGVUYWdCb3g6ZnVuY3Rpb24oYixhKXt0aGlzLnVuaGls aXRlQWxsVGFncygpO3ZhciBjPWdlKGIpO2lmKCFjKXJldHVybjtDU1MuYWRkQ2xh c3MoYywndGFnQm94Jyk7Q1NTLmFkZENsYXNzKGMsJ3RhZ0JveFBlbmRpbmdSZXNw b25zZScpO0NTUy5yZW1vdmVDbGFzcyhjLCd0YWdCb3hQZW5kaW5nJyk7Q1NTLmhp ZGUoRE9NLmZpbmQoYywnc3Bhbi50YWdGb3JtJykpO2lmKGEpe0NTUy5zaG93KERP TS5maW5kKGMsJ3NwYW4udGFnQXBwcm92ZWQnKSk7fWVsc2UgQ1NTLnNob3coRE9N LmZpbmQoYywnc3Bhbi50YWdJZ25vcmVkJykpO30scm90YXRlOmZ1bmN0aW9uKGMp e3ZhciBkPXRoaXMuc3RyZWFtLmdldEN1cnNvcigpO2lmKHRoaXMuZ2V0VmlkZW9P blN0YWdlKCkpe3ZhciBiPShjPT0nbGVmdCcpPzI3MDo5MDtCb290bG9hZGVyLmxv YWRDb21wb25lbnRzKFsndmlkZW8tcm90YXRlLXNub3dib3gnXSxuZXcgVmlkZW9S b3RhdGUoZCx0aGlzLmFjdGlvbkxpc3QpLm1vdGlvblJvdGF0ZShiKSk7cmV0dXJu O312YXIgYT17ZmJpZDpkLGNzX3ZlcjpQaG90b3NDb25zdC5WSUVXRVJfU05PV0JP WH07YVtjXT0xO3RoaXMuc2V0TG9hZGluZ1N0YXRlKFBob3RvU25vd2JveC5TVEFU RV9JTUFHRV9EQVRBLHRydWUpO3RoaXMuc2V0TG9hZGluZ1N0YXRlKHRoaXMuU1RB VEVfSU1BR0VfUElYRUxTLHRydWUpO0NTUy5oaWRlKHRoaXMuaW1hZ2UpO25ldyBB c3luY1JlcXVlc3QoJy9hamF4L3Bob3Rvcy9waG90by9yb3RhdGUvJykuc2V0QWxs b3dDcm9zc1BhZ2VUcmFuc2l0aW9uKHRydWUpLnNldERhdGEoYSkuc2V0RXJyb3JI YW5kbGVyKHRoaXMucm90YXRpb25FcnJvci5iaW5kKHRoaXMsZCkpLnNldEhhbmRs ZXIodGhpcy5yb3RhdGlvbkNvbXBsZXRlLmJpbmQodGhpcyxkKSkuc2V0TWV0aG9k KCdQT1NUJykuc2V0UmVhZE9ubHkoZmFsc2UpLnNlbmQoKTt9LHJvdGF0aW9uQ29t cGxldGU6ZnVuY3Rpb24oYSxiKXt0aGlzLnN0b3JlUmVzcG9uc2VGb3JSb3RhdGUo YSxiKTtpZihhPT10aGlzLnN0cmVhbS5nZXRDdXJzb3IoKSl7dGhpcy5zZXRMb2Fk aW5nU3RhdGUoUGhvdG9Tbm93Ym94LlNUQVRFX0lNQUdFX0RBVEEsZmFsc2UpO3Ro aXMuc3dpdGNoSW1hZ2UodGhpcy5zdHJlYW0uZ2V0Q3VycmVudEltYWdlRGF0YSgp LnVybCk7dGhpcy5zd2FwRGF0YSgpO310aGlzLnJlZnJlc2hPbkNsb3NlPXRydWU7 fSxzdG9yZVJlc3BvbnNlRm9yUm90YXRlOmZ1bmN0aW9uKGEsYyl7dGhpcy5zdG9y ZUZyb21SZXNwb25zZShjKTt2YXIgYj10aGlzLnN0cmVhbS5nZXRJbWFnZURhdGEo YSk7Yi51cmw9Yy5nZXRQYXlsb2FkKCkubmV3X3VybHNbUGhvdG9zQ29uc3QuU0la RV9OT1JNQUxdO2IuZGltZW5zaW9ucz1WZWN0b3IyLmRlc2VyaWFsaXplKGMuZ2V0 UGF5bG9hZCgpLmRpbWVuc2lvbnMpO30scm90YXRpb25FcnJvcjpmdW5jdGlvbihh LGIpe2lmKGE9PXRoaXMuc3RyZWFtLmdldEN1cnNvcigpKXt0aGlzLnNldExvYWRp bmdTdGF0ZShQaG90b1Nub3dib3guU1RBVEVfSU1BR0VfREFUQSxmYWxzZSk7dGhp cy5zd2l0Y2hJbWFnZSh0aGlzLnN0cmVhbS5nZXRDdXJyZW50SW1hZ2VEYXRhKCku dXJsKTtBc3luY1Jlc3BvbnNlLmRlZmF1bHRFcnJvckhhbmRsZXIoYik7fX0sc2F2 ZVRhZ0NvbXBsZXRlOmZ1bmN0aW9uKGEpe3RoaXMuc2F2ZVRhZ3NGcm9tUGF5bG9h ZChhLmdldFBheWxvYWQoKSk7fSxzYXZlVGFnc0Zyb21QYXlsb2FkOmZ1bmN0aW9u KGEpe3RoaXMucmVmcmVzaE9uQ2xvc2U9dHJ1ZTt0aGlzLnN0b3JlRnJvbURhdGEo YSk7aWYoJ2RhdGEnIGluIGEmJnRoaXMuc3RyZWFtLmdldEN1cnNvcigpIGluIGEu ZGF0YSl0aGlzLnN3YXBEYXRhKCk7fSxtb3VzZUxlYXZlTGlzdGVuZXI6ZnVuY3Rp b24oZXZlbnQpe3RoaXMudW5oaWxpdGVBbGxUYWdzKCk7dGhpcy5yZUhpbGl0ZVBl bmRpbmdUYWcoKTt9LG1vdXNlTW92ZUxpc3RlbmVyOmZ1bmN0aW9uKGV2ZW50KXt2 YXIgYj1ldmVudC5nZXRUYXJnZXQoKTt2YXIgYT0oUGFyZW50LmJ5Q2xhc3MoYiwn c3RhZ2VBY3Rpb25zJyl8fFBhcmVudC5ieUNsYXNzKGIsJ3N0YWdlV3JhcHBlcicp KTtpZighYSlDU1MuaGlkZSh0aGlzLnBpdm90QmFyKTtpZih0aGlzLmhhc1Bpdm90 RGF0YSgpJiYhdGhpcy5sb2FkaW5nU3RhdGVzLmh0bWwpQ1NTLnNob3codGhpcy5w aXZvdEJhcik7dGhpcy5oaWxpdGVUYWdzT25Nb3VzZU1vdmUoZXZlbnQpO30saGFz UGl2b3REYXRhOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5zdHJlYW0uZ2V0Q3VycmVu dEh0bWwoKTtyZXR1cm4gYSYmYS5mYlBob3RvU25vd2JveFBpdm90czt9LHVuaGls aXRlQWxsVGFnczpmdW5jdGlvbigpe0RPTS5zY3J5KHRoaXMuc3RhZ2UsJ2Rpdi50 YWdzV3JhcHBlciBkaXYuaG92ZXInKS5lYWNoKGZ1bmN0aW9uKGEpe0NTUy5yZW1v dmVDbGFzcyhhLCdob3ZlcicpO30pO3RoaXMuaGlsaXRlZFRhZz1udWxsO30sc3dp dGNoSGlsaXRlZFRhZ3M6ZnVuY3Rpb24oYixjKXtpZih0aGlzLnN3aXRjaFRpbWVy IT09bnVsbCl7Y2xlYXJUaW1lb3V0KHRoaXMuc3dpdGNoVGltZXIpO3RoaXMuc3dp dGNoVGltZXI9bnVsbDt9dGhpcy51bmhpbGl0ZUFsbFRhZ3MoKTt2YXIgYT1nZShi KTtpZihhKXt0aGlzLmhpbGl0ZWRUYWc9YjtDU1MuYWRkQ2xhc3MoYSwnaG92ZXIn KTtpZihDU1MuaGFzQ2xhc3MoYSwndGFnQm94UGVuZGluZycpJiYhQ1NTLmhhc0Ns YXNzKGEsJ3Nob3dQZW5kaW5nVGFnTmFtZScpJiZjPT09dHJ1ZSl7RE9NLnNjcnko dGhpcy5zdGFnZSwnZGl2LnRhZ3NXcmFwcGVyIGRpdi5zaG93UGVuZGluZ1RhZ05h bWUnKS5lYWNoKGZ1bmN0aW9uKGQpe0NTUy5yZW1vdmVDbGFzcyhkLCdzaG93UGVu ZGluZ1RhZ05hbWUnKTt9KTtDU1MuYWRkQ2xhc3MoYSwnc2hvd1BlbmRpbmdUYWdO YW1lJyk7fX19LHJlSGlsaXRlUGVuZGluZ1RhZzpmdW5jdGlvbigpe3ZhciBhPWdl KHRoaXMuaGlsaXRlZFRhZyk7aWYoYSYmQ1NTLmhhc0NsYXNzKGEsJ3Nob3dQZW5k aW5nVGFnTmFtZScpKXJldHVybjt2YXIgYj1ET00uc2NyeSh0aGlzLnN0YWdlLCdk aXYudGFnc1dyYXBwZXIgZGl2LnNob3dQZW5kaW5nVGFnTmFtZScpWzBdO2lmKGIp dGhpcy5zd2l0Y2hIaWxpdGVkVGFncyhiLmlkKTt9LGhpbGl0ZVRhZ3NPbk1vdXNl TW92ZTpmdW5jdGlvbihldmVudCl7aWYoIXRoaXMuc3RyZWFtLmdldEN1cnJlbnRF eHRyYURhdGEoKXx8dGhpcy5nZXRWaWRlb09uU3RhZ2UoKSlyZXR1cm47aWYodGhp cy5zd2l0Y2hUaW1lciE9PW51bGwpcmV0dXJuO3ZhciBtPWV2ZW50LmdldFRhcmdl dCgpO2lmKFBhcmVudC5ieUNsYXNzKG0sJ2ZiUGhvdG9Tbm93Ym94VGFnQXBwcm92 YWwnKSlyZXR1cm47dmFyIGk9UGFyZW50LmJ5Q2xhc3MobSwndGFnQm94UGVuZGlu ZycpO3ZhciBkPSh0aGlzLmhpbGl0ZWRUYWcmJkNTUy5oYXNDbGFzcygkKHRoaXMu aGlsaXRlZFRhZyksJ3RhZ0JveFBlbmRpbmcnKSk7dmFyIGw9KCghdGhpcy5oaWxp dGVkVGFnJiZpKXx8KCFkJiZpKSk7aWYobCl7dGhpcy5zd2l0Y2hIaWxpdGVkVGFn cyhpLmlkKTtyZXR1cm47fWlmKGkmJihpLmlkPT10aGlzLmhpbGl0ZWRUYWcpKXJl dHVybjt2YXIgYT0yNTA7dmFyIGg9VmVjdG9yMi5nZXRFdmVudFBvc2l0aW9uKGV2 ZW50KTt2YXIgZj1WZWN0b3IyLmdldEVsZW1lbnRQb3NpdGlvbih0aGlzLmltYWdl KTt2YXIgZT1WZWN0b3IyLmdldEVsZW1lbnREaW1lbnNpb25zKHRoaXMuaW1hZ2Up O3ZhciBqPXRoaXMuc3RyZWFtLmdldEN1cnJlbnRJbWFnZURhdGEoKS5kaW1lbnNp b25zO3ZhciBrPWUueC9qLng7dmFyIGc9UGhvdG9zVXRpbHMuZ2V0TmVhcmVzdEJv eChoLGYsaixrLFBob3RvU25vd2JveC5NSU5fVEFHX0RJU1RBTkNFKmssdGhpcy5z dHJlYW0uZ2V0Q3VycmVudEV4dHJhRGF0YSgpLnRhZ1JlY3RzKTtpZighZyl7aWYo IWQpe3RoaXMudW5oaWxpdGVBbGxUYWdzKCk7dGhpcy5yZUhpbGl0ZVBlbmRpbmdU YWcoKTt9cmV0dXJuO312YXIgYj1udWxsO2lmKGQpe3ZhciBjPXt9O2NbdGhpcy5o aWxpdGVkVGFnXT10aGlzLnN0cmVhbS5nZXRDdXJyZW50RXh0cmFEYXRhKCkudGFn UmVjdHNbdGhpcy5oaWxpdGVkVGFnXTtiPVBob3Rvc1V0aWxzLmdldE5lYXJlc3RC b3goaCxmLGosayxQaG90b1Nub3dib3guTUlOX1RBR19ESVNUQU5DRSprLGMpO31p ZihiIT09bnVsbCYmZClyZXR1cm47aWYodGhpcy5oaWxpdGVkVGFnIT1nKWlmKGQp e3RoaXMuc3dpdGNoVGltZXI9dGhpcy5zd2l0Y2hIaWxpdGVkVGFncy5iaW5kKHRo aXMsZykuZGVmZXIoYSk7fWVsc2UgdGhpcy5zd2l0Y2hIaWxpdGVkVGFncyhnKTt9 LGdldFZpZGVvT25TdGFnZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMuc3RyZWFtJiZ0 aGlzLnN0cmVhbS5nZXRDdXJyZW50SW1hZ2VEYXRhKCk7cmV0dXJuIGEmJmEudmlk ZW87fSxzaG91bGRHb0ZvcndhcmQ6ZnVuY3Rpb24oYSxjKXt2YXIgZD0oYT09S0VZ Uy5SSUdIVHx8UGFyZW50LmJ5Q2xhc3MoYywnbmV4dCcpKTtpZihkKXJldHVybiB0 cnVlO3ZhciBiPSh0aGlzLmdldFZpZGVvT25TdGFnZSgpfHxDU1MuaGFzQ2xhc3Mo dGhpcy5yb290LCd0YWdnaW5nTW9kZScpfHxQYXJlbnQuYnlDbGFzcyhjLCd0YWdC b3hQZW5kaW5nJyl8fFBhcmVudC5ieUNsYXNzKGMsJ3RhZ0JveFBlbmRpbmdSZXNw b25zZScpfHxQYXJlbnQuYnlDbGFzcyhjLCdmYlBob3RvVGFnQXBwcm92YWxCb3gn KSk7aWYoYilyZXR1cm4gZmFsc2U7cmV0dXJuIERPTS5pc05vZGUoYykmJlBhcmVu dC5ieUNsYXNzKGMsJ3N0YWdlJyk7fSxwYWdlTGlzdGVuZXI6ZnVuY3Rpb24oZXZl bnQpe3ZhciBhPUV2ZW50LmdldEtleUNvZGUoZXZlbnQpO3ZhciBiPWV2ZW50Lmdl dFRhcmdldCgpO2lmKGE9PUtFWVMuTEVGVHx8UGFyZW50LmJ5Q2xhc3MoYiwncHJl dicpKXt0aGlzLnBhZ2UoLTEpO3VzZXJfYWN0aW9uKCdhJyxiLGV2ZW50KTtyZXR1 cm47fWlmKHRoaXMuc2hvdWxkR29Gb3J3YXJkKGEsYikpe3RoaXMucGFnZSgxKTt1 c2VyX2FjdGlvbignYScsYixldmVudCk7fX0scGFnZTpmdW5jdGlvbihjLGIpe2lm KCF0aGlzLnN0cmVhbS5pc1ZhbGlkTW92ZW1lbnQoYykpcmV0dXJuO3RoaXMubGFz dFBhZ2U9RGF0ZS5ub3coKTt0aGlzLnVuaGlsaXRlQWxsVGFncygpO3ZhciBkPXRo aXMuZ2V0VmlkZW9PblN0YWdlKCk7aWYoZCl0aGlzLnN3aXRjaFZpZGVvKGQsZmFs c2UpO0FyYml0ZXIuaW5mb3JtKFBob3RvU25vd2JveC5QQUdFKTt0aGlzLnJlY2Fj aGVEYXRhKCk7dGhpcy5zdHJlYW0ubW92ZUN1cnNvcihjKTtDU1MuaGlkZSh0aGlz LmltYWdlKTtpZih0aGlzLnN0cmVhbS5lcnJvckluQ3VycmVudCgpKXt0aGlzLnNl dExvYWRpbmdTdGF0ZShQaG90b1Nub3dib3guU1RBVEVfSFRNTCx0cnVlKTtDU1Mu c2hvdyh0aGlzLmVycm9yQm94KTtyZXR1cm47fXZhciBhPXRoaXMuc3RyZWFtLmdl dEN1cnJlbnRJbWFnZURhdGEoKTtpZihhKXtpZihhLnVybCl7dGhpcy5zd2l0Y2hJ bWFnZShhLnVybCxudWxsLHRydWUpO31lbHNlIGlmKGEudmlkZW8pdGhpcy5zd2l0 Y2hWaWRlbyhhLnZpZGVvLHRydWUpO2lmKCFiKXt0aGlzLnJlcGxhY2VVcmw9dHJ1 ZTtnb1VSSShhLmluZm8ucGVybWFsaW5rKTt9fWVsc2V7dGhpcy5zZXRMb2FkaW5n U3RhdGUoUGhvdG9Tbm93Ym94LlNUQVRFX0lNQUdFX1BJWEVMUyx0cnVlKTt0aGlz LnNldExvYWRpbmdTdGF0ZShQaG90b1Nub3dib3guU1RBVEVfSU1BR0VfREFUQSx0 cnVlKTt9aWYodGhpcy5zdHJlYW0uZ2V0Q3VycmVudEh0bWwoKSl7dGhpcy5zd2Fw RGF0YSgpO31lbHNlIHRoaXMuc2V0TG9hZGluZ1N0YXRlKFBob3RvU25vd2JveC5T VEFURV9IVE1MLHRydWUpO3RoaXMuZGlzYWJsZUFkcz0hdGhpcy5pc0xvZ2dlZElu Vmlld2VyO3RoaXMubG9hZEFkcygpO30sbG9nSW1wcmVzc2lvbkRldGFpbHNGb3JQ aG90bzpmdW5jdGlvbigpe3ZhciBiPVtdLmNvbmNhdChET00uc2NyeSgkKCdmYlBo b3RvU25vd2JveFRhZ0xpc3QnKSwnaW5wdXQucGhvdG9JbXByZXNzaW9uRGV0YWls cycpLERPTS5zY3J5KCQoJ2ZiUGhvdG9Tbm93Ym94RmVlZGJhY2snKSwnaW5wdXQu cGhvdG9JbXByZXNzaW9uRGV0YWlscycpKTtpZihiLmxlbmd0aD09PTApcmV0dXJu O3ZhciBhPXt9O2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKWFbYltjXS5uYW1l XT1iW2NdLnZhbHVlO2lmKHRoaXMuZ2V0VmlkZW9PblN0YWdlKCkpe2Eud2lkdGg9 MDthLmhlaWdodD0wO31lbHNle2Eud2lkdGg9dGhpcy5zdHJlYW0uZ2V0Q3VycmVu dEltYWdlRGF0YSgpLmRpbWVuc2lvbnMueDthLmhlaWdodD10aGlzLnN0cmVhbS5n ZXRDdXJyZW50SW1hZ2VEYXRhKCkuZGltZW5zaW9ucy55O31QaG90b1Nlc3Npb25M b2cuYWRkRGV0YWlsRGF0YSh0aGlzLnN0cmVhbS5nZXRDdXJzb3IoKSxhKTt9LGxv YWRBZHM6ZnVuY3Rpb24oKXtpZih0aGlzLmRpc2FibGVBZHMpcmV0dXJuO3ZhciBh PURhdGUubm93KCk7aWYoYS10aGlzLmxhc3RBZHNMb2FkPlBob3RvU25vd2JveC5B RFNfUkVGUkVTSF9SQVRFKXtVSVBhZ2VsZXQubG9hZEZyb21FbmRwb2ludCgnV2Vi RWdvUGFuZScsJ2ZiUGhvdG9Tbm93Ym94QWRzU2lkZScse3BpZDozNCxkYXRhOlt0 aGlzLmxvYWRRdWVyeS5zZXRdfSx7Y3Jvc3NQYWdlOnRydWV9KTt0aGlzLmxhc3RB ZHNMb2FkPWE7fX0sYWRqdXN0Rm9yQWRVbml0OmZ1bmN0aW9uKCl7dmFyIGI9dGhp cy5zaWRlQWRVbml0LmNoaWxkTm9kZXM7dmFyIGE9dGhpcy5ib3R0b21BZFVuaXQu Y2hpbGROb2RlcztpZihDU1MuaGFzQ2xhc3ModGhpcy5jb250YWluZXIsJ2Fkc09u U2lkZScpKXtpZihhLmxlbmd0aD4wJiZiLmxlbmd0aD09PTApRE9NLnNldENvbnRl bnQodGhpcy5zaWRlQWRVbml0LCRBKGEpKTtET00uZW1wdHkodGhpcy5ib3R0b21B ZFVuaXQpO31lbHNlIGlmKGIubGVuZ3RoPjApe0RPTS5zZXRDb250ZW50KHRoaXMu Ym90dG9tQWRVbml0LCRBKGIpKTtET00uZW1wdHkodGhpcy5zaWRlQWRVbml0KTt9 Q1NTLmNvbmRpdGlvbkNsYXNzKHRoaXMuc2lkZUFkRGl2LCdmYlBob3RvU25vd2Jv eEFkc05vbmUnLGIubGVuZ3RoPT09MCk7Q1NTLmNvbmRpdGlvbkNsYXNzKHRoaXMu Ym90dG9tQWREaXYsJ2ZiUGhvdG9Tbm93Ym94QWRzTm9uZScsYS5sZW5ndGg9PT0w KTt9LHRyYW5zaXRpb25IYW5kbGVyOmZ1bmN0aW9uKGMpe2lmKGMuZ2V0UXVlcnlE YXRhKCkuY2xvc2VUaGVhdGVyfHxjLmdldFF1ZXJ5RGF0YSgpLnBlcm1QYWdlfHxj LmdldFF1ZXJ5RGF0YSgpLm1ha2Vwcm9maWxlfHx0aGlzLnJldHVybmluZ1RvU3Rh cnQpe2lmKHRoaXMuaXNPcGVuKXRoaXMuY2xvc2UoKTt0aGlzLnRyYW5zaXRpb25I YW5kbGVyUmVnaXN0ZXJlZD1mYWxzZTtyZXR1cm4gZmFsc2U7fWlmKHRoaXMucmVw bGFjZVVybCl7dGhpcy5yZXBsYWNlVXJsPWZhbHNlO3RoaXMuX3VyaVN0YWNrLnB1 c2goYy5nZXRRdWFsaWZpZWRVUkkoKS50b1N0cmluZygpKTtQYWdlVHJhbnNpdGlv bnMudHJhbnNpdGlvbkNvbXBsZXRlKCk7cmV0dXJuIHRydWU7fXZhciBkPXRoaXMu X3VyaVN0YWNrLmxlbmd0aDtpZihkPj0yJiZ0aGlzLl91cmlTdGFja1tkLTJdPT1j LmdldFF1YWxpZmllZFVSSSgpLnRvU3RyaW5nKCkpdGhpcy5fdXJpU3RhY2sucG9w KCk7dmFyIGE9dGhpcy5zdHJlYW0uZ2V0Q3Vyc29yRm9yVVJJKGMuZ2V0VW5xdWFs aWZpZWRVUkkoKS50b1N0cmluZygpKTtpZihhKXt2YXIgYj10aGlzLnN0cmVhbS5n ZXRSZWxhdGl2ZU1vdmVtZW50KGEpO3RoaXMucGFnZShiLHRydWUpO1BhZ2VUcmFu c2l0aW9ucy50cmFuc2l0aW9uQ29tcGxldGUoKTtyZXR1cm4gdHJ1ZTt9aWYodGhp cy5pc09wZW4pe3RoaXMuY2xvc2UoKTtQYWdlVHJhbnNpdGlvbnMudHJhbnNpdGlv bkNvbXBsZXRlKCk7cmV0dXJuIHRydWU7fXRoaXMudHJhbnNpdGlvbkhhbmRsZXJS ZWdpc3RlcmVkPWZhbHNlO3JldHVybiBmYWxzZTt9LHJlY2FjaGVEYXRhOmZ1bmN0 aW9uKCl7aWYoIXRoaXMubG9hZGluZ1N0YXRlcy5odG1sKXt2YXIgYT10aGlzLnN0 cmVhbS5nZXRDdXJyZW50SHRtbCgpO2Zvcih2YXIgYiBpbiBhKXthW2JdPSRBKCQo YikuY2hpbGROb2Rlcyk7RE9NLmVtcHR5KCQoYikpO319fSxyZWxvYWRJZlRpbWVv dXQ6ZnVuY3Rpb24oKXtpZighaW1hZ2VfaGFzX2xvYWRlZCh0aGlzLmltYWdlKSl7 dmFyIGE9dGhpcy5tYWtlTmV3SW1hZ2UodGhpcy5pbWFnZS5zcmMsdHJ1ZSk7RXZl bnQubGlzdGVuKGEsJ2xvYWQnLHRoaXMudXNlSW1hZ2UuYmluZCh0aGlzLGEsbnVs bCx0cnVlKSk7fX0sdXNlSW1hZ2U6ZnVuY3Rpb24oYyxhLGIpe2lmKGImJmltYWdl X2hhc19sb2FkZWQodGhpcy5pbWFnZSkpcmV0dXJuO0RPTS5yZXBsYWNlKHRoaXMu aW1hZ2UsYyk7dGhpcy5pbWFnZT1jO3RoaXMuYWRqdXN0U3RhZ2VTaXplKGEpO30s bWFrZU5ld0ltYWdlOmZ1bmN0aW9uKGMsYSl7aWYodGhpcy5pbWFnZUxvYWRpbmdU aW1lcil7Y2xlYXJUaW1lb3V0KHRoaXMuaW1hZ2VMb2FkaW5nVGltZXIpO3RoaXMu aW1hZ2VMb2FkaW5nVGltZXI9bnVsbDt9ZWxzZSBpZighYSl0aGlzLmltYWdlUmVm cmVzaFRpbWVyPXNldFRpbWVvdXQodGhpcy5yZWxvYWRJZlRpbWVvdXQuYmluZCh0 aGlzKSxQaG90b1Nub3dib3guTE9BRElOR19USU1FT1VUKTt2YXIgYj0kTignaW1n Jyx7Y2xhc3NOYW1lOidzcG90bGlnaHQnLGFsdDonJ30pO2Iuc2V0QXR0cmlidXRl KCdhcmlhLWRlc2NyaWJlZGJ5JywnZmJQaG90b3NTbm93Ym94Q2FwdGlvbicpO2Iu c2V0QXR0cmlidXRlKCdhcmlhLWJ1c3knLCd0cnVlJyk7RXZlbnQubGlzdGVuKGIs J2xvYWQnLGFzeW5jX2NhbGxiYWNrKGZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHRo aXMuaW1hZ2VSZWZyZXNoVGltZXIpO3RoaXMuaW1hZ2Uuc2V0QXR0cmlidXRlKCdh cmlhLWJ1c3knLCdmYWxzZScpO3RoaXMuc2V0TG9hZGluZ1N0YXRlKHRoaXMuU1RB VEVfSU1BR0VfUElYRUxTLGZhbHNlKTsoZnVuY3Rpb24oKXt0aGlzLmFkanVzdFN0 YWdlU2l6ZSgpO3RoaXMuYWRqdXN0Rm9yTmV3RGF0YSgpO30pLmJpbmQodGhpcyku ZGVmZXIoKTt9LmJpbmQodGhpcyksJ3Bob3RvX3RoZWF0ZXInKSk7Yi5zcmM9Yzty ZXR1cm4gYjt9LHN3aXRjaEltYWdlOmZ1bmN0aW9uKGQsYixjKXtDU1MuaGlkZSh0 aGlzLmltYWdlKTtDU1MuaGlkZSh0aGlzLmVycm9yQm94KTt0aGlzLnNldExvYWRp bmdTdGF0ZSh0aGlzLlNUQVRFX0lNQUdFX1BJWEVMUyx0cnVlKTt2YXIgYT10aGlz LnN0cmVhbSYmdGhpcy5zdHJlYW0uZ2V0Q3VycmVudEltYWdlRGF0YSgpO2lmKGEp UGhvdG9TZXNzaW9uTG9nLmFkZFBob3RvVmlldyhhLmluZm8pO3RoaXMudXNlSW1h Z2UodGhpcy5tYWtlTmV3SW1hZ2UoZCxmYWxzZSksYixmYWxzZSk7aWYoYyl0aGlz LnN0cmVhbS5wcmVsb2FkSW1hZ2VzKCk7fSxzd2l0Y2hWaWRlbzpmdW5jdGlvbihj LGEpe3ZhciBiPSdzd2ZfJytjO2lmKGEpe0NTUy5hZGRDbGFzcyh0aGlzLnN0YWdl V3JhcHBlciwnc2hvd1ZpZGVvJyk7dGhpcy52aWRlb1N0YWdlLmlkPWM7aWYod2lu ZG93W2JdJiYhZ2UoYikpd2luZG93W2JdLndyaXRlKGMpO3RoaXMuYWRqdXN0U3Rh Z2VTaXplRm9yVmlkZW8uYmluZCh0aGlzLGIpLmRlZmVyKCk7fWVsc2V7dGhpcy52 aWRlb1N0YWdlLmlkPSdmYlZpZGVvU3RhZ2UnO3dpbmRvd1tiXSYmd2luZG93W2Jd LmFkZFZhcmlhYmxlKCd2aWRlb19hdXRvcGxheScsMCk7dGhpcy52aWRlb0xvYWRU aW1lciYmY2xlYXJUaW1lb3V0KHRoaXMudmlkZW9Mb2FkVGltZXIpO0RPTS5lbXB0 eSh0aGlzLnZpZGVvU3RhZ2UpO0NTUy5yZW1vdmVDbGFzcyh0aGlzLnN0YWdlV3Jh cHBlciwnc2hvd1ZpZGVvJyk7fX0sY2hlY2tWaWRlb1N0YXR1czpmdW5jdGlvbihh KXtpZih0aGlzLnZpZGVvTG9hZFRpbWVyKWNsZWFyVGltZW91dCh0aGlzLnZpZGVv TG9hZFRpbWVyKTt2aWRlbz10aGlzLmdldFZpZGVvT25TdGFnZSgpO2lmKCF2aWRl byl7cmV0dXJuO31lbHNle2N1cnJlbnRTd2ZJRD0nc3dmXycrdmlkZW87aWYoYSE9 PWN1cnJlbnRTd2ZJRClyZXR1cm47dGhpcy5hZGp1c3RTdGFnZVNpemVGb3JWaWRl byhhKTt9fSxhZGp1c3RTdGFnZVNpemVGb3JWaWRlbzpmdW5jdGlvbihhKXt2YXIg Yj1nZShhKTtpZighYil7dGhpcy52aWRlb0xvYWRUaW1lcj1zZXRUaW1lb3V0KHRo aXMuY2hlY2tWaWRlb1N0YXR1cy5iaW5kKHRoaXMsYSksMjAwKTt9ZWxzZSB0aGlz LmFkanVzdFN0YWdlU2l6ZShuZXcgVmVjdG9yMihiLndpZHRoLGIuaGVpZ2h0KSk7 fSxzZXRFcnJvckJveENvbnRlbnQ6ZnVuY3Rpb24oYSl7RE9NLnNldENvbnRlbnQo dGhpcy5lcnJvckJveCxhKTt9LHN3YXBEYXRhOmZ1bmN0aW9uKCl7dmFyIGIsYz10 aGlzLnN0cmVhbS5nZXRDdXJyZW50SHRtbCgpO2lmKGMpe3RoaXMuc2V0TG9hZGlu Z1N0YXRlKFBob3RvU25vd2JveC5TVEFURV9IVE1MLGZhbHNlKTtmb3IodmFyIGQg aW4gYyl7Yj1nZShkKTtiJiZET00uc2V0Q29udGVudChiLGNbZF0pO312YXIgYT1E T00uc2NyeSgkKCdmYlBob3RvU25vd2JveENhcHRpb24nKSwnZGl2LmZiUGhvdG9J bmxpbmVDYXB0aW9uRWRpdG9yJyk7aWYoYS5sZW5ndGgpbmV3IFBob3RvSW5saW5l Q2FwdGlvbkVkaXRvcignc25vd2JveCcpLmluaXQoYVswXSk7QXJiaXRlci5pbmZv cm0oUGhvdG9Tbm93Ym94LkRBVEFfQ0hBTkdFLHRoaXMuc3RyZWFtLmdldEN1cnJl bnRJbWFnZURhdGEoKS5pbmZvLEFyYml0ZXIuQkVIQVZJT1JfU1RBVEUpO3RoaXMu cG9zaXRpb249dGhpcy5zdHJlYW0uZ2V0Q3Vyc29yKCk7fXRoaXMuYWRqdXN0Rm9y TmV3RGF0YSgpO3RoaXMubG9nSW1wcmVzc2lvbkRldGFpbHNGb3JQaG90bygpO30s dXBkYXRlVG90YWxDb3VudDpmdW5jdGlvbihjLGIsYSl7ZWxlbWVudD1nZSgnZmJQ aG90b1Nub3dib3hQb3NpdGlvbkFuZENvdW50Jyk7ZWxlbWVudCYmRE9NLnNldENv bnRlbnQoZWxlbWVudCxhKTt0aGlzLnN0cmVhbS5zZXRUb3RhbENvdW50KGMpO3Ro aXMuc3RyZWFtLnNldEZpcnN0Q3Vyc29ySW5kZXgoYik7fSxhZGRQaG90b0ZiaWRz OmZ1bmN0aW9uKGIsYyxhKXt2YXIgZD10aGlzLnN0cmVhbS5nZXRDdXJzb3IoKT09 PW51bGw7dGhpcy5zdHJlYW0uYXR0YWNoVG9GYmlkc0xpc3QoYixjLGEpO2lmKGEm JmQpdGhpcy5wYWdlKDAsdHJ1ZSk7aWYoIXRoaXMucGFnZXJzU2hvd24mJnRoaXMu c3RyZWFtLmNhblBhZ2UoKSl0aGlzLnNldFN0YWdlUGFnZXJzUmVhZHkoKTt9LHN0 b3JlRnJvbVJlc3BvbnNlOmZ1bmN0aW9uKGEpe3dpbmRvdy5BcmJpdGVyTW9uaXRv ciYmQXJiaXRlck1vbml0b3Iuc3RvcFR0aU1lYXN1cmVtZW50KCk7dGhpcy5zdG9y ZUZyb21EYXRhKGEuZ2V0UGF5bG9hZCgpKTt9LHN0b3JlRnJvbURhdGE6ZnVuY3Rp b24oYSl7aWYoIXRoaXMuaXNPcGVuKXJldHVybjt2YXIgYj10aGlzLnN0cmVhbS5z dG9yZVRvQ2FjaGUoYSk7aWYoJ2Vycm9yJyBpbiBiKXt0aGlzLmNoZWNrU3RhdGUo UGhvdG9Tbm93Ym94LlNUQVRFX0VSUk9SKTtyZXR1cm47fWlmKCdpbml0JyBpbiBi KXt0aGlzLmluaXREYXRhRmV0Y2hlZChiLmluaXQpO2lmKHRoaXMub3BlbkV4cGxp Y2l0bHkpe3RoaXMucmVwbGFjZVVybD10cnVlO2dvVVJJKHRoaXMuc3RyZWFtLmdl dEN1cnJlbnRJbWFnZURhdGEoKS5pbmZvLnBlcm1hbGluayk7fWlmKHRoaXMuc3Ry ZWFtLmNhblBhZ2UoKSl0aGlzLnNldFN0YWdlUGFnZXJzUmVhZHkoKTt0aGlzLnVh JiZ0aGlzLnVhLmFkZF9ldmVudCgndWZpJyk7fWlmKCdpbWFnZScgaW4gYil0aGlz LmNoZWNrU3RhdGUoUGhvdG9Tbm93Ym94LlNUQVRFX0lNQUdFX0RBVEEpO2lmKCdk YXRhJyBpbiBiKXRoaXMuY2hlY2tTdGF0ZShQaG90b1Nub3dib3guU1RBVEVfSFRN TCk7fSxzZXRTdGFnZVBhZ2Vyc1JlYWR5OmZ1bmN0aW9uKCl7Q1NTLnJlbW92ZUNs YXNzKHRoaXMuc3RhZ2VQYWdlcnMsJ3BhZ2luZ0Rpc2FibGVkJyk7Q