Content-Type: multipart/related; start=; boundary=----------wBRcxkVmIBvi9JFBgjE4oA Content-Location: http://en.wikinews.org/wiki/Works_valued_at_%E2%82%AC100_million_stolen_from_the_Mus%C3%A9e_d%27Art_Moderne_de_la_Ville_de_Paris?dpl_id=185330 Subject: =?utf-8?Q?Works=20valued=20at=20=E2=82=AC100=20million=20stolen=20from=20the=20Mus=C3=A9e=20d'Art=20Moderne=20de=20la=20Ville=20de=20Paris=20-=20Wikinews,=20the=20free=20news=20source?= MIME-Version: 1.0 ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline; filename*0*=utf-8''Works_valued_at_%E2%82%AC100_mill; filename*1*=ion_stolen_from_the_Mus%C3%A9e_d%27Art_M; filename*2*=oderne_de_la_Ville_de_Paris.htm Content-Type: text/html; charset=UTF-8; name*0*=utf-8''Works_valued_at_%E2%82%AC100_mill; name*1*=ion_stolen_from_the_Mus%C3%A9e_d%27Art_M; name*2*=oderne_de_la_Ville_de_Paris.htm Content-ID: Content-Location: http://en.wikinews.org/wiki/Works_valued_at_%E2%82%AC100_million_stolen_from_the_Mus%C3%A9e_d%27Art_Moderne_de_la_Ville_de_Paris?dpl_id=185330 Content-Transfer-Encoding: Quoted-Printable Works valued at =E2=82=AC100 million stolen from the Mus=C3=A9e d= 'Art Moderne de la Ville de Paris - Wikinews, the free news source</titl= e> <meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3DUTF-8"= /> <meta http-equiv=3D"Content-Style-Type" content=3D"text/css" /> <meta name=3D"generator" content=3D"MediaWiki 1.16wmf4" /> <link rel=3D"alternate" type=3D"application/x-wiki" title=3D"Edit This P= age" href=3D"/w/index.php?title=3DWorks_valued_at_%E2%82%AC100_million_s= tolen_from_the_Mus%C3%A9e_d%27Art_Moderne_de_la_Ville_de_Paris&actio= n=3Dedit" /> <link rel=3D"edit" title=3D"Edit This Page" href=3D"/w/index.php?title=3D= Works_valued_at_%E2%82%AC100_million_stolen_from_the_Mus%C3%A9e_d%27Art_= Moderne_de_la_Ville_de_Paris&action=3Dedit" /> <link rel=3D"stylesheet" type=3D"text/css" href=3D"http://bits.wikimedia= .org/w/extensions/UsabilityInitiative/css/combined.min.css?94" /> <link rel=3D"stylesheet" type=3D"text/css" href=3D"http://bits.wikimedia= .org/w/extensions/UsabilityInitiative/css/vector/jquery-ui-1.7.2.css?1.7= .2y" /> <link rel=3D"apple-touch-icon" href=3D"http://upload.wikimedia.org/wikip= edia/commons/4/43/Apple-touch-icon.png" /> <link rel=3D"shortcut icon" href=3D"/favicon.ico" /> <link rel=3D"search" type=3D"application/opensearchdescription+xml" href= =3D"/w/opensearch_desc.php" title=3D"Wikinews (en)" /> <link rel=3D"copyright" href=3D"http://creativecommons.org/licenses/by/2= .5/" /> <link rel=3D"alternate" type=3D"application/rss+xml" title=3D"Wikinews R= SS feed" href=3D"http://feeds.feedburner.com/WikinewsLatestNews" /> <link rel=3D"stylesheet" href=3D"http://bits.wikimedia.org/skins-1.5/vec= tor/main-ltr.css?281z67" type=3D"text/css" media=3D"screen" /> <link rel=3D"stylesheet" href=3D"http://bits.wikimedia.org/skins-1.5/com= mon/shared.css?281z67" type=3D"text/css" media=3D"screen" /> <link rel=3D"stylesheet" href=3D"http://bits.wikimedia.org/skins-1.5/com= mon/commonPrint.css?281z67" type=3D"text/css" media=3D"print" /> <link rel=3D"stylesheet" href=3D"/w/extensions/FlaggedRevs/flaggedrevs.c= ss?60" type=3D"text/css" media=3D"all" /> <link rel=3D"stylesheet" href=3D"/w/extensions/ReaderFeedback/readerfeed= back.css?1" type=3D"text/css" media=3D"all" /> <link rel=3D"stylesheet" href=3D"/w/index.php?title=3DMediaWiki:Common.c= ss&usemsgcache=3Dyes&ctype=3Dtext%2Fcss&smaxage=3D2678400&am= p;action=3Draw&maxage=3D2678400" type=3D"text/css" media=3D"all" /> <link rel=3D"stylesheet" href=3D"/w/index.php?title=3DMediaWiki:Print.cs= s&usemsgcache=3Dyes&ctype=3Dtext%2Fcss&smaxage=3D2678400&= ;action=3Draw&maxage=3D2678400" type=3D"text/css" media=3D"print" />= <link rel=3D"stylesheet" href=3D"/w/index.php?title=3DMediaWiki:Handheld= .css&usemsgcache=3Dyes&ctype=3Dtext%2Fcss&smaxage=3D2678400&= amp;action=3Draw&maxage=3D2678400" type=3D"text/css" media=3D"handhe= ld" /> <link rel=3D"stylesheet" href=3D"/w/index.php?title=3DMediaWiki:Vector.c= ss&usemsgcache=3Dyes&ctype=3Dtext%2Fcss&smaxage=3D2678400&am= p;action=3Draw&maxage=3D2678400" type=3D"text/css" media=3D"all" /> <link rel=3D"stylesheet" href=3D"/w/index.php?title=3D-&action=3Draw= &maxage=3D2678400&gen=3Dcss" type=3D"text/css" media=3D"all" /> <script type=3D"text/javascript"> var skin=3D"vector", stylepath=3D"http://bits.wikimedia.org/skins-1.5", wgUrlProtocols=3D"http\\:\\/\\/|https\\:\\/\\/|ftp\\:\\/\\/|irc\\:\\/\\/= |gopher\\:\\/\\/|telnet\\:\\/\\/|nntp\\:\\/\\/|worldwind\\:\\/\\/|mailto= \\:|news\\:|svn\\:\\/\\/", wgArticlePath=3D"/wiki/$1", wgScriptPath=3D"/w", wgScriptExtension=3D".php", wgScript=3D"/w/index.php", wgVariantArticlePath=3Dfalse, wgActionPaths=3D{}, wgServer=3D"http://en.wikinews.org", wgCanonicalNamespace=3D"", wgCanonicalSpecialPageName=3Dfalse, wgNamespaceNumber=3D0, wgPageName=3D"Works_valued_at_=E2=82=AC100_million_stolen_from_the_Mus=C3= =A9e_d\'Art_Moderne_de_la_Ville_de_Paris", wgTitle=3D"Works valued at =E2=82=AC100 million stolen from the Mus=C3=A9= e d\'Art Moderne de la Ville de Paris", wgAction=3D"view", wgArticleId=3D185330, wgIsArticle=3Dtrue, wgUserName=3Dnull, wgUserGroups=3Dnull, wgUserLanguage=3D"en", wgContentLanguage=3D"en", wgBreakFrames=3Dfalse, wgCurRevisionId=3D1025806, wgVersion=3D"1.16wmf4", wgEnableAPI=3Dtrue, wgEnableWriteAPI=3Dtrue, wgSeparatorTransformTable=3D["", ""], wgDigitTransformTable=3D["", ""], wgMainPageTitle=3D"Main Page", wgFormattedNamespaces=3D{"-2": "Media", "-1": "Special", "0": "", "1": "= Talk", "2": "User", "3": "User talk", "4": "Wikinews", "5": "Wikinews ta= lk", "6": "File", "7": "File talk", "8": "MediaWiki", "9": "MediaWiki ta= lk", "10": "Template", "11": "Template talk", "12": "Help", "13": "Help = talk", "14": "Category", "15": "Category talk", "90": "Thread", "91": "T= hread talk", "92": "Summary", "93": "Summary talk", "100": "Portal", "10= 1": "Portal talk", "102": "Comments", "103": "Comments talk"}, wgNamespaceIds=3D{"media": -2, "special": -1, "": 0, "talk": 1, "user": = 2, "user_talk": 3, "wikinews": 4, "wikinews_talk": 5, "file": 6, "file_t= alk": 7, "mediawiki": 8, "mediawiki_talk": 9, "template": 10, "template_= talk": 11, "help": 12, "help_talk": 13, "category": 14, "category_talk":= 15, "thread": 90, "thread_talk": 91, "summary": 92, "summary_talk": 93,= "portal": 100, "portal_talk": 101, "comments": 102, "comments_talk": 10= 3, "wn": 4, "cat": 14, "image": 6, "image_talk": 7}, wgSiteName=3D"Wikinews", wgCategories=3D["France", "May 20, 2010", "Published", "Crime and law", = "Paris", "Art", "Europe"], wgMWSuggestTemplate=3D"http://en.wikinews.org/w/api.php?action=3Dopensea= rch\x26search=3D{searchTerms}\x26namespace=3D{namespaces}\x26suggest", wgDBname=3D"enwikinews", wgSearchNamespaces=3D[0, 100], wgMWSuggestMessages=3D["with suggestions", "no suggestions"], wgRestrictionEdit=3D[], wgRestrictionMove=3D[], wgFlaggedRevsParams=3D{"tags": {"accuracy": 2}}, wgStableRevisionId=3D1025806, wgAjaxReview=3D{"sendingMsg": "Submitting...", "sentMsgOk": "Review comp= lete!", "sentMsgBad": "Review failed!", "actioncomplete": "Action comple= te", "actionfailed": "Action failed"}, wgTrackingToken=3D"f95cd7656d3eeaee32537ee09f1b0f46", wgClickTrackingIsThrottled=3Dtrue, wgFeedbackParams=3D{"tags": {"reliability": 3, "completeness": 2, "npov"= : 2, "presentation": 1}}, wgAjaxFeedback=3D{"sendingMsg": "Submitting =E2=80=A6", "sentMsg": "Than= k you!"}, wgNotice=3D"", wgNoticeLocal=3D""; </script><script src=3D"http://bits.wikimedia.org/skins-1.5/common/wikib= its.js?281z67" type=3D"text/javascript"></script> <script type=3D"text/javascript" src=3D"http://bits.wikimedia.org/skins-= 1.5/common/jquery.min.js?281z67"></script> <script src=3D"http://bits.wikimedia.org/skins-1.5/common/ajax.js?281z67= " type=3D"text/javascript"></script> <script src=3D"http://bits.wikimedia.org/skins-1.5/common/mwsuggest.js?2= 81z67" type=3D"text/javascript"></script> <script type=3D"text/javascript">var wgVectorPreferences =3D { "editwarning": { "enable": 1 } }; var wgVectorEnabledModules =3D { "collapsiblenav": false, "collapsibletabs": true, "editwarning": true, "footercleanup": false, "simplesearch": true };</script> <script src=3D"http://bits.wikimedia.org/w/extensions/UsabilityInitiativ= e/js/plugins.combined.min.js?281z67" type=3D"text/javascript"></script> <script src=3D"http://bits.wikimedia.org/w/extensions/UsabilityInitiativ= e/ClickTracking/ClickTracking.js?281z67" type=3D"text/javascript"></scri= pt> <script src=3D"http://bits.wikimedia.org/w/extensions/UsabilityInitiativ= e/Vector/Vector.combined.min.js?281z67" type=3D"text/javascript"></scrip= t> <script type=3D"text/javascript">mw.usability.addMessages({'vector-editw= arning-warning':'Leaving this page may cause you to lose any changes you= have made.\nIf you are logged in, you can disable this warning in the \= "Editing\" section of your preferences.','vector-simplesearch-search':'S= earch','vector-simplesearch-containing':'containing...'});</script> <script type=3D"text/javascript" src=3D"http://upload.wikimedia.org/cent= ralnotice/wikinews/en/centralnotice.js?281z67"></script> <!--[if lt IE 7]><style type=3D"text/css">body{behavior:url("/w/skins-1.= 5/vector/csshover.htc")}</style><![endif]--> <script src=3D"/w/index.php?title=3D-&action=3Draw&gen=3Djs&= useskin=3Dvector&281z67" type=3D"text/javascript"></script> <script type=3D"text/javascript" src=3D"/w/extensions/FlaggedRevs/flagge= drevs.js?60"></script><script type=3D"text/javascript" src=3D"/w/extensi= ons/ReaderFeedback/readerfeedback.js?1"></script> </head> <body class=3D"mediawiki ltr ns-0 ns-subject page-Works_valued_at_=E2=82= =AC100_million_stolen_from_the_Mus=C3=A9e_d_Art_Moderne_de_la_Ville_de_P= aris skin-vector"> <div id=3D"page-base" class=3D"noprint"></div> <div id=3D"head-base" class=3D"noprint"></div> <!-- content --> <div id=3D"content"> <a id=3D"top"></a> <div id=3D"mw-js-message" style=3D"display:none;"></div> <!-- sitenotice --> <div id=3D"siteNotice"><script type=3D'text/javascript'>if (wgNotice = !=3D '') document.writeln(wgNotice);</script><script type=3D"text/javasc= ript" language=3D"JavaScript"> /* <![CDATA[ */ document.writeln("\x3ccenter\x3eDon\'t forget, Wikinews is written by pe= ople like you! If you find a topic you want to see Wikinews cover, why n= ot \x3ca href=3D\"/wiki/Special:CreateAccount\" title=3D\"Special:Create= Account\"\x3ecreate an account\x3c/a\x3e and \x3ca href=3D\"/wiki/Wikine= ws:Writing_an_article\" title=3D\"Wikinews:Writing an article\"\x3ewrite= an article\x3c/a\x3e on it?\x3c/center\x3e\n"); /* ]]> */ </script></div> <!-- /sitenotice --> <!-- firstHeading --> <h1 id=3D"firstHeading" class=3D"firstHeading">Works valued at =E2=82= =AC100 million stolen from the Mus=C3=A9e d'Art Moderne de la Ville de P= aris</h1> <!-- /firstHeading --> <!-- bodyContent --> <div id=3D"bodyContent"> <!-- tagline --> <h3 id=3D"siteSub">From Wikinews, the free news source you can write= !</h3> <!-- /tagline --> <!-- subtitle --> <div id=3D"contentSub"></div> <!-- /subtitle --> <!-- jumpto --> <div id=3D"jump-to-nav"> Jump to:<a href=3D"#head">navigation</a>, <a href=3D"#p-search">search</a> </div> <!-- /jumpto --> <!-- bodytext --> <div class=3D"infobox" style=3D"margin-left: 5px; float: right; widt= h: 200px; background: #edf7ff; border: solid #666666 1px; padding: 0px; = font-size: x-small; clear:right;"> <div style=3D"text-decoration:none; background: #7ec9fd; padding: 2px; t= ext-align: center; style; font-size: 140%; border-bottom: solid 1px #666= 666;"><b><a href=3D"http://en.wikipedia.org/wiki/France" class=3D"extiw"= title=3D"w:France">France</a></b></div> <div style=3D"background: #bce1ff; padding: 2px; text-align: center; sty= le; font-size: normal;">Other stories from France</div> <div style=3D"padding: 2px;"> <ul> <li>20 May 2010: <a href=3D"/wiki/Works_valued_at_%E2%82%AC100_million_s= tolen_from_the_Mus%C3%A9e_d%27Art_Moderne_de_la_Ville_de_Paris" title=3D= "Works valued at =E2=82=AC100 million stolen from the Mus=C3=A9e d'Art M= oderne de la Ville de Paris">Works valued at =E2=82=AC100 million stolen= from the Mus=C3=A9e d'Art Moderne de la Ville de Paris</a></li> <li>18 May 2010: <a href=3D"/wiki/French_teacher_returns_home_after_bein= g_held_in_Iran_for_ten_months" title=3D"French teacher returns home afte= r being held in Iran for ten months">French teacher returns home after b= eing held in Iran for ten months</a></li> <li>13 May 2010: <a href=3D"/wiki/Madagascar%E2%80%99s_leader_Andry_Rajo= elina_%E2%80%98will_not_run_in_polls%E2%80%99" title=3D"Madagascar=E2=80= =99s leader Andry Rajoelina =E2=80=98will not run in polls=E2=80=99">Mad= agascar=E2=80=99s leader Andry Rajoelina =E2=80=98will not run in polls=E2= =80=99</a></li> <li>6 May 2010: <a href=3D"/wiki/Black_boxes_from_Air_France_Flight_447_= localized" title=3D"Black boxes from Air France Flight 447 localized">Bl= ack boxes from Air France Flight 447 localized</a></li> <li>31 March 2010: <a href=3D"/wiki/US_and_France_to_work_together_for_n= ew_Iran_sanctions" title=3D"US and France to work together for new Iran = sanctions">US and France to work together for new Iran sanctions</a></li= > </ul> </div> <div style=3D"text-align: right;"><small>...<a href=3D"/wiki/Portal:Fran= ce" title=3D"Portal:France">More articles here</a></small></div> <div style=3D"background: #bce1ff; padding: 2px; text-align: center; sty= le; font-size: normal;">Location of France</div> <div style=3D"padding: 2px;"> <p><a href=3D"/w/index.php?title=3DFile:LocationFrance.png&filetimes= tamp=3D20060606160525" class=3D"image" title=3D"A map showing the locati= on of France"><img alt=3D"A map showing the location of France" src=3D"h= ttp://upload.wikimedia.org/wikipedia/commons/thumb/4/47/LocationFrance.p= ng/196px-LocationFrance.png" width=3D"196" height=3D"90" /></a></p> </div> <center><a href=3D"/wiki/Portal:France" title=3D"Portal:France">To write= , edit, start or view other articles on France, see the France Portal</a= ></center> <div style=3D"float: center; text-align: center;"> <center><a href=3D"/wiki/Portal:France" title=3D"Portal:France"><img alt= =3D"Flag of France.svg" src=3D"http://upload.wikimedia.org/wikipedia/com= mons/thumb/c/c3/Flag_of_France.svg/60px-Flag_of_France.svg.png" width=3D= "60" height=3D"40" /></a></center> </div> </div> <p><b class=3D"published"><span id=3D"publishDate" class=3D"value-title"= title=3D"2010-05-20"></span>Thursday, May 20, 2010</b></p> <div class=3D"thumb tleft"> <div class=3D"thumbinner" style=3D"width:182px;"><a href=3D"/w/index.php= ?title=3DFile:PICASSO_Le_pigeon_aux_petits_pois_1911.jpg&filetimesta= mp=3D20100520185619" class=3D"image"><img alt=3D"" src=3D"http://upload.= wikimedia.org/wikinews/en/thumb/4/45/PICASSO_Le_pigeon_aux_petits_pois_1= 911.jpg/180px-PICASSO_Le_pigeon_aux_petits_pois_1911.jpg" width=3D"180" = height=3D"222" class=3D"thumbimage" /></a> <div class=3D"thumbcaption"> <div class=3D"magnify"><a href=3D"/w/index.php?title=3DFile:PICASSO_Le_p= igeon_aux_petits_pois_1911.jpg&filetimestamp=3D20100520185619" class= =3D"internal" title=3D"Enlarge"><img src=3D"http://bits.wikimedia.org/sk= ins-1.5/common/images/magnify-clip.png" width=3D"15" height=3D"11" alt=3D= "" /></a></div> <a href=3D"http://en.wikipedia.org/wiki/Pablo_Picasso" class=3D"extiw" t= itle=3D"w:Pablo Picasso">Picasso</a>'s <a href=3D"http://en.wikipedia.or= g/wiki/Le_pigeon_aux_petits_pois" class=3D"extiw" title=3D"w:Le pigeon a= ux petits pois"><i>Le pigeon aux petits pois</i></a> is amongst the pain= tings stolen from a Paris museum</div> </div> </div> <p>Five paintings, in total valued at almost =E2=82=AC100 million. = were stolen from the <a href=3D"http://en.wikipedia.org/wiki/Mus%C3%A9e_= d%27Art_Moderne_de_la_Ville_de_Paris" class=3D"extiw" title=3D"w:Mus=C3=A9= e d'Art Moderne de la Ville de Paris">Mus=C3=A9e d'Art Moderne de la Vil= le de Paris</a> overnight on Wednesday. The works were <i><a href=3D"htt= p://en.wikipedia.org/wiki/Le_pigeon_aux_petits_pois" class=3D"extiw" tit= le=3D"w:Le pigeon aux petits pois">Le pigeon aux petits pois</a></i> by = <a href=3D"http://en.wikipedia.org/wiki/Pablo_Picasso" class=3D"extiw" t= itle=3D"w:Pablo Picasso">Pablo Picasso</a>, <i><a href=3D"http://en.wiki= pedia.org/wiki/La_Pastorale" class=3D"extiw" title=3D"w:La Pastorale">La= Pastorale</a></i> by <a href=3D"http://en.wikipedia.org/wiki/Henri_Mati= sse" class=3D"extiw" title=3D"w:Henri Matisse">Henri Matisse</a>, <i><a = href=3D"http://en.wikipedia.org/wiki/L%27Olivier_Pr%C3%A8s_de_l%27Estaqu= e" class=3D"extiw" title=3D"w:L'Olivier Pr=C3=A8s de l'Estaque">L'Olivie= r Pr=C3=A8s de l'Estaque</a></i> by <a href=3D"http://en.wikipedia.org/w= iki/Georges_Braque" class=3D"extiw" title=3D"w:Georges Braque">Georges B= raque</a>, <i><a href=3D"http://en.wikipedia.org/wiki/La_Femme_a_l%27Eve= ntail" class=3D"extiw" title=3D"w:La Femme a l'Eventail">La Femme a l'Ev= entail</a></i> by <a href=3D"http://en.wikipedia.org/wiki/Amedeo_Modigli= ani" class=3D"extiw" title=3D"w:Amedeo Modigliani">Amedeo Modigliani</a>= and <i><a href=3D"http://en.wikipedia.org/wiki/Nature_Morte_aux_Chandel= iers" class=3D"extiw" title=3D"w:Nature Morte aux Chandeliers">Nature Mo= rte aux Chandeliers</a></i> by <a href=3D"http://en.wikipedia.org/wiki/F= ernand_L%C3%A9ger" class=3D"extiw" title=3D"w:Fernand L=C3=A9ger">Fernan= d L=C3=A9ger</a>.</p> <p>The museum itself has been closed and cordoned off by police investig= ating the theft. The thief is believed to have entered the museum by cli= mbing through a window and the museum is investigating how the theft too= k place despite the presence of guards and a complex security system.</p= > <p>Christophe Girard, deputy mayor of Paris with responsibility for cult= ure, told a press conference: "This is a serious crime to the heritage o= f humanity", adding that the perpetrator or perpetrators were "obviously= organised". It is thought that the paintings are too well known to be e= asily sold and there has been speculation that they will be used as "cur= rency" by criminal gangs, as opposed to having been "stolen for hire" on= behalf of a collector.</p> <p>An unnamed source told <i>The Daily Telegraph</i>: "It's an enormous = crime, one of the biggest in art history" while the mayor of Paris, Bert= rand Delanoe, called the theft "an intolerable attack on Paris's univers= al cultural heritage" and art historian Tim Marlow commented that the th= ief obviously "knew what he was taking".</p> <p>The theft was discovered at approximately 7a.m. local time (5a.m. UTC= ) by museum staff. The Paris prosecutor's office said that a single mask= ed man was captured on CCTV walking away with the works, which had been = removed from their frames with care rather than being sliced out. The pa= intings belong to the museum's permanent collection.</p> <p>Investigators are questioning museum staff after speculation that the= perpetrator may have had assistance from somebody on "the inside". The = investigation into the thefts is being led by the Brigade de R=C3=A9pres= sion du Banditisme, an elite French police unit.<br style=3D"clear:none;= " /></p> <center> <div align=3D"center" class=3D"noprint messagebox boilerplate plainlinks= " id=3D"commentrequest" style=3D"background-color:#FFFFFF; border:1px so= lid #CCCCCC; padding:2px;width:50%; text-size:smallest;"> <p>Have an opinion on this story? <a href=3D"/wiki/Comments:Works_valued= _at_%E2%82%AC100_million_stolen_from_the_Mus%C3%A9e_d%27Art_Moderne_de_l= a_Ville_de_Paris" title=3D"Comments:Works valued at =E2=82=AC100 million= stolen from the Mus=C3=A9e d'Art Moderne de la Ville de Paris">Post it!= </a></p> </div> </center> <h2><span class=3D"editsection">[<a href=3D"/w/index.php?title=3DWorks_v= alued_at_%E2%82%AC100_million_stolen_from_the_Mus%C3%A9e_d%27Art_Moderne= _de_la_Ville_de_Paris&action=3Dedit&section=3D1" title=3D"Edit s= ection: Sources">edit</a>]</span> <span class=3D"mw-headline" id=3D"Sour= ces">Sources</span></h2> <ul> <li>"<a href=3D"http://news.bbc.co.uk/1/hi/world/europe/10130840.stm" cl= ass=3D"external text" rel=3D"nofollow">Five masterpieces stolen from Par= is modern art museum</a>" =E2=80=93 <i><a href=3D"http://en.wikiped= ia.org/wiki/BBC_News" class=3D"extiw" title=3D"w:BBC News">BBC News</a><= /i>, May 20, 2010</li> <li>Lizzy Davies "<a href=3D"http://www.guardian.co.uk/artanddesign/2010= /may/20/picasso-matisse-stolen-paris-museum" class=3D"external text" rel= =3D"nofollow">Paris art museum theft the work of lone robber</a>" =E2=80= =93 <i><a href=3D"http://en.wikipedia.org/wiki/The_Guardian" class=3D= "extiw" title=3D"w:The Guardian">The Guardian</a></i>, May 20, 2010</li>= <li>Peter Allen; Stephen Adams "<a href=3D"http://www.telegraph.co.uk/ne= ws/worldnews/europe/france/7746362/The-100-million-modern-art-heist.html= " class=3D"external text" rel=3D"nofollow">The =C2=A3100 million modern = art heist</a>" =E2=80=93 <i><a href=3D"http://en.wikipedia.org/wiki= /The_Daily_Telegraph" class=3D"extiw" title=3D"w:The Daily Telegraph">Th= e Daily Telegraph</a></i>, May 20, 2010</li> <li>Doreen Carvajal "<a href=3D"http://www.nytimes.com/2010/05/21/world/= europe/21theft.html?src=3Dmv" class=3D"external text" rel=3D"nofollow">W= orks by Picasso and Matisse Stolen From Paris Museum</a>" =E2=80=93 = ;<i><a href=3D"http://en.wikipedia.org/wiki/The_New_York_Times" class=3D= "extiw" title=3D"w:The New York Times">The New York Times</a></i>, May 2= 0, 2010<br style=3D"clear:both" /></li> </ul> <table align=3D"center" style=3D"width:40%; background-color:#FFFFFF; bo= rder:1px solid #007F8F; -moz-border-radius: 9px;-webkit-border-radius: 9= px; border-radius: 9px; padding:1px;" id=3D"social_bookmarks" class=3D"n= oprint"> <tr> <td> <div class=3D"floatleft"><a href=3D"http://en.wikinews.org/wiki/Wikinews= :Social_bookmarks"><img alt=3D"Bookmark-new.svg" src=3D"http://upload.wi= kimedia.org/wikipedia/commons/thumb/f/fb/Bookmark-new.svg/25px-Bookmark-= new.svg.png" width=3D"25" height=3D"25" /></a></div> <div class=3D"plainlinks" align=3D"center"> <p><b>Share this:</b>  <span title=3D"Share on Facebook"><a href=3D= "http://www.facebook.com/sharer.php?u=3Dhttp://en.wikinews.org/wiki/Work= s_valued_at_%E2%82%AC100_million_stolen_from_the_Mus%C3%A9e_d%27Art_Mode= rne_de_la_Ville_de_Paris&t=3DWorks+valued+at+%E2%82%AC100+million+st= olen+from+the+Mus%C3%A9e+d%26%2339%3BArt+Moderne+de+la+Ville+de+Paris+-+= Wikinews" title=3D"Bookmark with Facebook"><img alt=3D"Bookmark with Fac= ebook" src=3D"http://upload.wikimedia.org/wikinews/en/5/55/Facebook.png"= width=3D"16" height=3D"16" /></a></span> <span title=3D"Share on Digg">= <a href=3D"http://digg.com/submit?url=3Dhttp://en.wikinews.org/wiki/Work= s_valued_at_%E2%82%AC100_million_stolen_from_the_Mus%C3%A9e_d%27Art_Mode= rne_de_la_Ville_de_Paris&title=3DWorks+valued+at+%E2%82%AC100+millio= n+stolen+from+the+Mus%C3%A9e+d%26%2339%3BArt+Moderne+de+la+Ville+de+Pari= s+-+Wikinews" title=3D"Share on Digg.com"><img alt=3D"Share on Digg.com"= src=3D"http://upload.wikimedia.org/wikinews/en/9/95/Digg-icon.png" widt= h=3D"16" height=3D"14" /></a></span> <span title=3D"Share on delicious">= <a href=3D"http://delicious.com/post?url=3Dhttp://en.wikinews.org/wiki/W= orks_valued_at_%E2%82%AC100_million_stolen_from_the_Mus%C3%A9e_d%27Art_M= oderne_de_la_Ville_de_Paris&title=3DWorks+valued+at+%E2%82%AC100+mil= lion+stolen+from+the+Mus%C3%A9e+d%26%2339%3BArt+Moderne+de+la+Ville+de+P= aris+-+Wikinews" title=3D"Share on delicious"><img alt=3D"Share on delic= ious" src=3D"http://upload.wikimedia.org/wikinews/en/8/87/Del.icio.us-ic= on.png" width=3D"18" height=3D"18" /></a></span> <span title=3D"Share on= reddit"><a href=3D"http://reddit.com/submit?url=3Dhttp://en.wikinews.or= g/wiki/Works_valued_at_%E2%82%AC100_million_stolen_from_the_Mus%C3%A9e_d= %27Art_Moderne_de_la_Ville_de_Paris&title=3DWorks+valued+at+%E2%82%A= C100+million+stolen+from+the+Mus%C3%A9e+d%26%2339%3BArt+Moderne+de+la+Vi= lle+de+Paris+-+Wikinews" title=3D"Share on reddit.com"><img alt=3D"Share= on reddit.com" src=3D"http://upload.wikimedia.org/wikinews/en/1/10/Redd= it.png" width=3D"18" height=3D"18" /></a></span> <span title=3D"Share on= StumbleUpon"><a href=3D"http://stumbleupon.com/submit?url=3Dhttp://en.w= ikinews.org/wiki/Works_valued_at_%E2%82%AC100_million_stolen_from_the_Mu= s%C3%A9e_d%27Art_Moderne_de_la_Ville_de_Paris&title=3DWorks+valued+a= t+%E2%82%AC100+million+stolen+from+the+Mus%C3%A9e+d%26%2339%3BArt+Modern= e+de+la+Ville+de+Paris+-+Wikinews" title=3D"Share on stumbleupon.com"><i= mg alt=3D"Share on stumbleupon.com" src=3D"http://upload.wikimedia.org/w= ikinews/en/6/64/Stumbleupon.png" width=3D"18" height=3D"16" /></a></span= > <span title=3D"Share on Yahoo! Buzz"><a href=3D"http://buzz.yahoo.com/= buzz?targetUrl=3Dhttp://en.wikinews.org/wiki/Works_valued_at_%E2%82%AC10= 0_million_stolen_from_the_Mus%C3%A9e_d%27Art_Moderne_de_la_Ville_de_Pari= s&headline=3DWorks+valued+at+%E2%82%AC100+million+stolen+from+the+Mu= s%C3%A9e+d%26%2339%3BArt+Moderne+de+la+Ville+de+Paris+-+Wikinews" title=3D= "Share on Yahoo! Buzz"><img alt=3D"Share on Yahoo! Buzz" src=3D"http://u= pload.wikimedia.org/wikinews/en/d/de/Yahoo_buzz.png" width=3D"16" height= =3D"16" /></a></span> <span title=3D"Share on Google Buzz"><a href=3D"ht= tp://www.google.com/buzz/post?url=3Dhttp://en.wikinews.org/wiki/Works_va= lued_at_%E2%82%AC100_million_stolen_from_the_Mus%C3%A9e_d%27Art_Moderne_= de_la_Ville_de_Paris" title=3D"Share on Google Buzz"><img alt=3D"Share o= n Google Buzz" src=3D"http://upload.wikimedia.org/wikinews/en/4/4e/Buzz_= icon.png" width=3D"16" height=3D"15" /></a></span> <span title=3D"Share = on Twitter"><a href=3D"http://twitter.com/?status=3DLook%20what%20I%20fo= und%20on%20Wikinews:%20http://en.wikinews.org/wiki/Works_valued_at_%E2%8= 2%AC100_million_stolen_from_the_Mus%C3%A9e_d%27Art_Moderne_de_la_Ville_d= e_Paris" title=3D"Share on twitter.com"><img alt=3D"Share on twitter.com= " src=3D"http://upload.wikimedia.org/wikinews/en/f/f7/Twitter.png" width= =3D"18" height=3D"18" /></a></span> <span title=3D"Review on NewsTrust">= <a href=3D"http://newstrust.net/submit?story%5Burl%5D=3Dhttp://en.wikine= ws.org/wiki/Works_valued_at_%E2%82%AC100_million_stolen_from_the_Mus%C3%= A9e_d%27Art_Moderne_de_la_Ville_de_Paris&story%5Btitle%5D=3DWorks+va= lued+at+%E2%82%AC100+million+stolen+from+the+Mus%C3%A9e+d%26%2339%3BArt+= Moderne+de+la+Ville+de+Paris&story%5Bauthorships_attributes%5D%5B%5D= %5Bname%5D=3DWikinews&story%5Breferred_by%5D=3Den.wikinews.org&p= opup=3Dtrue" title=3D"Review on NewsTrust"><img alt=3D"Review on NewsTru= st" src=3D"http://upload.wikimedia.org/wikinews/en/0/00/Newstrust.gif" w= idth=3D"16" height=3D"16" /></a></span></p> </div> </td> </tr> </table> <!-- = NewPP limit report Preprocessor node count: 37/1000000 Post-expand include size: 0/2048000 bytes Template argument size: 0/2048000 bytes Expensive parser function count: 0/500 --> <!-- Saved in stable version parser cache with key enwikinews:stable-pca= che:idhash:185330-0!1!0!default!!en!2 and timestamp 20100522141314 --><d= iv class=3D"printfooter"> Retrieved from "<a href=3D"http://en.wikinews.org/wiki/Works_valued_at_%= E2%82%AC100_million_stolen_from_the_Mus%C3%A9e_d%27Art_Moderne_de_la_Vil= le_de_Paris">http://en.wikinews.org/wiki/Works_valued_at_%E2%82%AC100_mi= llion_stolen_from_the_Mus%C3%A9e_d%27Art_Moderne_de_la_Ville_de_Paris</a= >"</div> <!-- /bodytext --> <!-- catlinks --> <div id=3D'catlinks' class=3D'catlinks'><div id=3D"mw-normal-catlink= s"><a href=3D"/wiki/Special:Categories" title=3D"Special:Categories">Cat= egories</a>: <span dir=3D'ltr'><a href=3D"/wiki/Category:France" title=3D= "Category:France">France</a></span> | <span dir=3D'ltr'><a href=3D"/wiki= /Category:May_20,_2010" title=3D"Category:May 20, 2010">May 20, 2010</a>= </span> | <span dir=3D'ltr'><a href=3D"/wiki/Category:Published" title=3D= "Category:Published">Published</a></span> | <span dir=3D'ltr'><a href=3D= "/wiki/Category:Crime_and_law" title=3D"Category:Crime and law">Crime an= d law</a></span> | <span dir=3D'ltr'><a href=3D"/wiki/Category:Paris" ti= tle=3D"Category:Paris">Paris</a></span> | <span dir=3D'ltr'><a href=3D"/= wiki/Category:Art" title=3D"Category:Art">Art</a></span> | <span dir=3D'= ltr'><a href=3D"/wiki/Category:Europe" title=3D"Category:Europe">Europe<= /a></span></div></div> <!-- /catlinks --> <!-- dataAfterContent --> <div id=3D'mw-data-after-content'> <form method=3D"post" action=3D"/w/index.php?title=3DSpecial:ReaderFeed= back&action=3Dsubmit" id=3D"mw-feedbackform"><fieldset class=3D"feed= back_reviewform noprint"><legend><strong>What do you think of this page?= </strong></legend> <p><i>Please take a moment to rate this page below. Your feedback is val= uable and helps us improve our website.</i> </p><span id=3D"mw-feedbackselects"><b><label for=3D"wpreliability">Reli= ability</label>:</b> <select name=3D"wpreliability" id=3D"wpreliabi= lity" onchange=3D"updateFeedbackForm()"><option class=3D"rfb-rating-opti= on-4" value=3D"4">Excellent</option> <option class=3D"rfb-rating-option-3" value=3D"3">High</option> <option class=3D"rfb-rating-option-2" value=3D"2">Fair</option> <option class=3D"rfb-rating-option-1" value=3D"1">Low</option> <option class=3D"rfb-rating-option-0" value=3D"0">Poor</option> <option value=3D"-1" selected=3D"selected">(unsure)</option> </select> <b><label for=3D"wpcompleteness">Completeness</label>:</b> <select = name=3D"wpcompleteness" id=3D"wpcompleteness" onchange=3D"updateFeedback= Form()"><option class=3D"rfb-rating-option-4" value=3D"4">Excellent</opt= ion> <option class=3D"rfb-rating-option-3" value=3D"3">High</option> <option class=3D"rfb-rating-option-2" value=3D"2">Fair</option> <option class=3D"rfb-rating-option-1" value=3D"1">Low</option> <option class=3D"rfb-rating-option-0" value=3D"0">Poor</option> <option value=3D"-1" selected=3D"selected">(unsure)</option> </select> <b><label for=3D"wpnpov">Neutrality</label>:</b> <select name=3D"wp= npov" id=3D"wpnpov" onchange=3D"updateFeedbackForm()"><option class=3D"r= fb-rating-option-4" value=3D"4">Excellent</option> <option class=3D"rfb-rating-option-3" value=3D"3">High</option> <option class=3D"rfb-rating-option-2" value=3D"2">Fair</option> <option class=3D"rfb-rating-option-1" value=3D"1">Low</option> <option class=3D"rfb-rating-option-0" value=3D"0">Poor</option> <option value=3D"-1" selected=3D"selected">(unsure)</option> </select> <b><label for=3D"wppresentation">Presentation</label>:</b> <select = name=3D"wppresentation" id=3D"wppresentation" onchange=3D"updateFeedback= Form()"><option class=3D"rfb-rating-option-4" value=3D"4">Excellent</opt= ion> <option class=3D"rfb-rating-option-3" value=3D"3">High</option> <option class=3D"rfb-rating-option-2" value=3D"2">Fair</option> <option class=3D"rfb-rating-option-1" value=3D"1">Low</option> <option class=3D"rfb-rating-option-0" value=3D"0">Poor</option> <option value=3D"-1" selected=3D"selected">(unsure)</option> </select> </span><input type=3D"submit" value=3D"Submit" id=3D"submitfeedback" acc= esskey=3D"b" title=3D"Submit feedback. [b]" /><input type=3D"hidden" val= ue=3D"Special:ReaderFeedback" name=3D"title" /> <input type=3D"hidden" value=3D"Works_valued_at_=E2=82=AC100_million_sto= len_from_the_Mus=C3=A9e_d'Art_Moderne_de_la_Ville_de_Paris" name=3D"targ= et" /> <input type=3D"hidden" value=3D"1025806" name=3D"oldid" /> <input type=3D"hidden" value=3D"b9b4ed9669703218a704516871866c46" name=3D= "validatedParams" /><input type=3D"hidden" value=3D"submit" name=3D"acti= on" /> <input type=3D"hidden" value=3D"+\" name=3D"wpEditToken" /> <input name=3D"commentary" size=3D"12" value=3D"" style=3D"display:none;= " /> </fieldset></form> </div> <!-- /dataAfterContent --> <div class=3D"visualClear"></div> </div> <!-- /bodyContent --> </div> <!-- /content --> <!-- header --> <div id=3D"head" class=3D"noprint"> = <!-- 0 --> <div id=3D"p-personal" class=3D""> <h5>Personal tools</h5> <ul> <li id=3D"pt-login"><a href=3D"/w/index.php?title=3DSpecial:UserLo= gin&returnto=3DWorks_valued_at_%E2%82%AC100_million_stolen_from_the_= Mus%C3%A9e_d%27Art_Moderne_de_la_Ville_de_Paris&returntoquery=3Ddpl_= id%3D185330" title=3D"You are encouraged to log in; however, it is not m= andatory [o]" accesskey=3D"o">Log in / create account</a></li> </ul> </div> <!-- /0 --> <div id=3D"left-navigation"> = <!-- 0 --> <div id=3D"p-namespaces" class=3D"vectorTabs"> <h5>Namespaces</h5> <ul> <li id=3D"ca-nstab-main" class=3D"selected"><a href=3D"/wiki/Works= _valued_at_%E2%82%AC100_million_stolen_from_the_Mus%C3%A9e_d%27Art_Moder= ne_de_la_Ville_de_Paris" title=3D"View the content page [c]" accesskey=3D= "c"><span>Article</span></a></li> <li id=3D"ca-talk"><a href=3D"/wiki/Talk:Works_valued_at_%E2%82%AC= 100_million_stolen_from_the_Mus%C3%A9e_d%27Art_Moderne_de_la_Ville_de_Pa= ris" title=3D"Discussion about the content page [t]" accesskey=3D"t"><s= pan>Discussion</span></a></li> </ul> </div> <!-- /0 --> <!-- 1 --> <div id=3D"p-variants" class=3D"vectorMenu emptyPortlet"> <h5><span>Variants</span><a href=3D"#"></a></h5> <div class=3D"menu"> <ul> </ul> </div> </div> <!-- /1 --> </div> <div id=3D"right-navigation"> = <!-- 0 --> <div id=3D"p-views" class=3D"vectorTabs"> <h5>Views</h5> <ul> <li id=3D"ca-view" class=3D"selected"><a href=3D"/wiki/Works_valued= _at_%E2%82%AC100_million_stolen_from_the_Mus%C3%A9e_d%27Art_Moderne_de_l= a_Ville_de_Paris" ><span>Read</span></a></li> <li id=3D"ca-edit"><a href=3D"/w/index.php?title=3DWorks_valued_at_= %E2%82%AC100_million_stolen_from_the_Mus%C3%A9e_d%27Art_Moderne_de_la_Vi= lle_de_Paris&action=3Dedit" title=3D"You can edit this page. Please= use the preview button before saving [e]" accesskey=3D"e"><span>Edit</s= pan></a></li> <li id=3D"ca-history" class=3D"collapsible "><a href=3D"/w/index.ph= p?title=3DWorks_valued_at_%E2%82%AC100_million_stolen_from_the_Mus%C3%A9= e_d%27Art_Moderne_de_la_Ville_de_Paris&action=3Dhistory" title=3D"P= ast revisions of this page [h]" accesskey=3D"h"><span>View history</span= ></a></li> </ul> </div> <!-- /0 --> <!-- 1 --> <div id=3D"p-cactions" class=3D"vectorMenu emptyPortlet"> <h5><span>Actions</span><a href=3D"#"></a></h5> <div class=3D"menu"> <ul> </ul> </div> </div> <!-- /1 --> <!-- 2 --> <div id=3D"p-search"> <h5><label for=3D"searchInput">Search</label></h5> <form action=3D"/w/index.php" id=3D"searchform"> <input type=3D'hidden' name=3D"title" value=3D"Special:Search"/> <div id=3D"simpleSearch"> <input id=3D"searchInput" name=3D"search" type=3D"text" title=3D"Sea= rch Wikinews [f]" accesskey=3D"f" value=3D"" /> <button id=3D"searchButton" type=3D'submit' name=3D'button' title=3D= "Search the pages for this text"> </button> </div> </form> </div> <!-- /2 --> </div> </div> <!-- /header --> <!-- panel --> <div id=3D"panel" class=3D"noprint"> <!-- logo --> <div id=3D"p-logo"><a style=3D"background-image: url(http://upload.= wikimedia.org/wikinews/en/b/bc/Wiki.png);" href=3D"/wiki/Main_Page" tit= le=3D"Visit the main page"></a></div> <!-- /logo --> = <!-- navigation --> <div class=3D"portal" id=3D'p-navigation'> <h5>Navigation</h5> <div class=3D"body"> <ul> <li id=3D"n-mainpage"><a href=3D"/wiki/Main_Page" title=3D"Visit th= e main page [z]" accesskey=3D"z">Main Page</a></li> <li id=3D"n-newsroom"><a href=3D"/wiki/Wikinews:Newsroom">Newsroom<= /a></li> <li id=3D"n-recentchanges"><a href=3D"/wiki/Special:RecentChanges" = title=3D"The list of recent changes in the wiki [r]" accesskey=3D"r">Rec= ent changes</a></li> <li id=3D"n-randompage"><a href=3D"/wiki/Special:Random" title=3D"L= oad a random page [x]" accesskey=3D"x">Random article</a></li> <li id=3D"n-Archives"><a href=3D"/wiki/Wikinews:Archives">Archives<= /a></li> <li id=3D"n-Free-use-media-upload"><a href=3D"http://commons.wikime= dia.org/wiki/Commons:Upload">Free use media upload</a></li> </ul> </div> </div> <!-- /navigation --> <!-- Wikinews --> <div class=3D"portal" id=3D'p-Wikinews'> <h5>Wikinews</h5> <div class=3D"body"> <ul> <li id=3D"n-help"><a href=3D"/wiki/Wikinews:Introduction" title=3D"= The place to find out">Help</a></li> <li id=3D"n-Write-an-article"><a href=3D"/wiki/Wikinews:Writing_an_= article">Write an article</a></li> <li id=3D"n-Watercooler"><a href=3D"/wiki/Wikinews:Water_cooler">Wa= ter cooler</a></li> <li id=3D"n-Styleguide"><a href=3D"/wiki/Wikinews:Style_guide">Styl= e guide</a></li> <li id=3D"n-livechat"><a href=3D"/wiki/Wikinews:IRC" title=3D"Talk = with other Wikinewsies via Internet Relay Chat.">Live chat</a></li> <li id=3D"n-World-News-Quiz"><a href=3D"/wiki/Wikinews:World_News_Q= uiz">World News Quiz</a></li> <li id=3D"n-Donate"><a href=3D"http://wikimediafoundation.org/wiki/= Fundraising#Donation_methods">Donate</a></li> <li id=3D"n-contact"><a href=3D"/wiki/Wikinews:Contact_us">Contact = us</a></li> </ul> </div> </div> <!-- /Wikinews --> <!-- SEARCH --> <!-- /SEARCH --> <!-- Regions --> <div class=3D"portal" id=3D'p-Regions'> <h5>Regions</h5> <div class=3D"body"> <ul> <li id=3D"n-Africa"><a href=3D"/wiki/Portal:Africa">Africa</a></li>= <li id=3D"n-Asia"><a href=3D"/wiki/Portal:Asia">Asia</a></li> <li id=3D"n-CentralAmerica"><a href=3D"/wiki/Portal:Central_America= ">Central America</a></li> <li id=3D"n-Europe"><a href=3D"/wiki/Portal:Europe">Europe</a></li>= <li id=3D"n-MiddleEast"><a href=3D"/wiki/Portal:Middle_East">Middle= East</a></li> <li id=3D"n-NorthAmerica"><a href=3D"/wiki/Portal:North_America">No= rth America</a></li> <li id=3D"n-Oceania"><a href=3D"/wiki/Portal:Oceania">Oceania</a></= li> <li id=3D"n-SouthAmerica"><a href=3D"/wiki/Portal:South_America">So= uth America</a></li> </ul> </div> </div> <!-- /Regions --> <!-- LANGUAGES --> <div class=3D"portal" id=3D"p-lang"> <h5>In other languages</h5> <div class=3D"body"> <ul> <li class=3D"interwiki-fr"><a href=3D"http://fr.wikinews.org/wiki/P= aris_:_cinq_tableaux_de_ma%C3%AEtre_vol%C3%A9s_au_mus%C3%A9e_d%27art_mod= erne">Fran=C3=A7ais</a></li> </ul> </div> </div> <!-- /LANGUAGES --> <!-- TOOLBOX --> <div class=3D"portal" id=3D"p-tb"> <h5>Toolbox</h5> <div class=3D"body"> <ul> <li id=3D"t-whatlinkshere"><a href=3D"/wiki/Special:WhatLinksHere/W= orks_valued_at_%E2%82%AC100_million_stolen_from_the_Mus%C3%A9e_d%27Art_M= oderne_de_la_Ville_de_Paris" title=3D"List of all wiki pages that link h= ere [j]" accesskey=3D"j">What links here</a></li> <li id=3D"t-recentchangeslinked"><a href=3D"/wiki/Special:RecentCh= angesLinked/Works_valued_at_%E2%82%AC100_million_stolen_from_the_Mus%C3%= A9e_d%27Art_Moderne_de_la_Ville_de_Paris" title=3D"Recent changes in pag= es linked from this page [k]" accesskey=3D"k">Related changes</a></li> <li id=3D"t-specialpages"><a h= ref=3D"/wiki/Special:SpecialPages" title=3D"List of all special pages [q= ]" accesskey=3D"q">Special pages</a></li> <li id=3D"t-print"><a href=3D"/w/index.php?title=3DWorks_valued= _at_%E2%82%AC100_million_stolen_from_the_Mus%C3%A9e_d%27Art_Moderne_de_l= a_Ville_de_Paris&dpl_id=3D185330&printable=3Dyes" rel=3D"alterna= te" title=3D"Printable version of this page [p]" accesskey=3D"p">Printab= le version</a></li> <li id=3D"t-permalink"><a href=3D"/w/index.php?title=3DWorks_value= d_at_%E2%82%AC100_million_stolen_from_the_Mus%C3%A9e_d%27Art_Moderne_de_= la_Ville_de_Paris&oldid=3D1025806" title=3D"Permanent link to this r= evision of the page">Permanent link</a></li> <li id=3D"t-rating"><a href=3D"/w/index.php?title=3DSpecial:RatingHi= story&target=3DWorks_valued_at_%E2%82%AC100_million_stolen_from_the_= Mus%C3%A9e_d%27Art_Moderne_de_la_Ville_de_Paris">Page rating</a></li> <= /ul> </div> </div> <!-- /TOOLBOX --> </div> <!-- /panel --> <!-- footer --> <div id=3D"footer"> <ul id=3D"footer-info"> <li id=3D"footer-info-lastmod"> This page was last modi= fied on 22 May 2010, at 14:12.</li> <li id=3D"footer-info-copyright"><div align=3D"ce= nter"><br />All text created after September 25, 2005 is available under= the terms of the <a href=3D"http://creativecommons.org/licenses/by/2.5/= " class=3D"external ">Creative Commons Attribution 2.5</a> License unles= s otherwise specified. <br />Contributions must be attributed to Wikinew= s. <br />Copyright terms on images may vary, please check individual ima= ge pages prior to duplication.<br /> Wikinews®, and the Wikinews log= o are registered trademarks of the Wikimedia Foundation, Inc. <div align=3D"center"> <!--Creative Commons License--><a rel=3D"license" href=3D"http://creativ= ecommons.org/licenses/by/2.5/"><img id=3D"license-logo" alt=3D"Creative = Commons License" border=3D"0" src=3D"http://upload.wikimedia.org/wikiped= ia/commons/d/d3/CCBY_yellow.png"/></a> <br /> <br /> Wikinews is not responsible for the content of external sites. </div> </div> <!-- metadata so that people who search for us in cc-content only engine= s (like advanced google search) ''should'' be able to find us --> <!--/Creative Commons License--><!-- <rdf:RDF xmlns=3D"http://web.resour= ce.org/cc/" xmlns:dc=3D"http://purl.org/dc/elements/1.1/" xmlns:rdf=3D"h= ttp://www.w3.org/1999/02/22-rdf-syntax-ns#"> <Work rdf:about=3D""> <license rdf:resource=3D"http://creativecommons.org/licenses/by/2.5/"= /> <dc:title>Wikinews, the free news source you can write!</dc:title> <dc:description>We are a group of volunteers whose mission is to build = a website with present up-to-date, relevant, newsworthy and entertaining= content without bias. All content is released under a free license. By making our content perp= etually available for free redistribution and use, we hope to contribute= to a global digital commons. Wikinews also aims to write stories from a neutral point of view. Wikinews needs you! We want to create a diverse community where citizens= from around the globe can collaborate to report the news on a wide vari= ety of current events.</dc:description> <dc:creator><Agent><dc:title>Wikinews Community</dc:title></Agent></dc:= creator> <dc:rights><Agent><dc:title>Wikinews Community</dc:title></Agent></dc:r= ights> <dc:type rdf:resource=3D"http://purl.org/dc/dcmitype/Text" /> </Work> <License rdf:about=3D"http://creativecommons.org/licenses/by/2.5/"><pe= rmits rdf:resource=3D"http://web.resource.org/cc/Reproduction"/><permits= rdf:resource=3D"http://web.resource.org/cc/Distribution"/><requires rdf= :resource=3D"http://web.resource.org/cc/Notice"/><requires rdf:resource=3D= "http://web.resource.org/cc/Attribution"/><permits rdf:resource=3D"http:= //web.resource.org/cc/DerivativeWorks"/></License></rdf:RDF> --></li> </ul> <ul id=3D"footer-places"> <li id=3D"footer-places-privacy"><a href=3D"http://wiki= mediafoundation.org/wiki/Privacy_policy" title=3D"wikimedia:Privacy poli= cy">Privacy policy</a></li> <li id=3D"footer-places-about"><a href=3D"/wiki/W= ikinews:About" title=3D"Wikinews:About">About Wikinews</a></li> <li id=3D"footer-places-disclaimer"><a href=3D"/w= iki/Wikinews:General_disclaimer" title=3D"Wikinews:General disclaimer">D= isclaimers</a></li> </ul> <ul id=3D"footer-icons" class=3D"noprint"> <li id=3D"footer-icon-poweredby"><a href=3D"http://www.mediawiki= .org/"><img src=3D"http://bits.wikimedia.org/skins-1.5/common/images/pow= eredby_mediawiki_88x31.png" height=3D"31" width=3D"88" alt=3D"Powered by= MediaWiki" /></a></li> <li id=3D"footer-icon-copyright"><a href=3D"http://wikimedia= foundation.org/"><img src=3D"/images/wikimedia-button.png" width=3D"88" = height=3D"31" alt=3D"Wikimedia Foundation"/></a></li> </ul> <div style=3D"clear:both"></div> </div> <!-- /footer --> <!-- fixalpha --> <script type=3D"text/javascript"> if ( window.isMSIE55 ) fixalpha(); <= /script> <!-- /fixalpha --> = <script type=3D"text/javascript">if (window.runOnloadHook) runOnloadHook= ();</script> <!-- Served by srv190 in 0.053 secs. --> </body> </html> ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline Content-Type: image/png Content-Location: http://bits.wikimedia.org/w/extensions/UsabilityInitiative/images/vector/collapsibleNav/portal-break.png?1 Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAAIwAAAABCAMAAAA7MLYKAAAAGXRFWHRTb2Z0d2Fy ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEtQTFRF29vb2tra4ODg6urq5OTk4uLi 6+vr7e3t7Ozs8PDw5+fn4+Pj4eHh3d3d39/f6Ojo5eXl6enp8fHx8/Pz8vLy7+/v 3Nzc2dnZ2NjYnErj7QAAAD1JREFUeNq0wQUBACAMALDj7hf6JyUFGxzEnYhC9GaN PG1xVffGDErk/iCigLl1XV2xM49lfAxEaSM+AQYA9HMKuv4liFQAAAAASUVORK5C YII= ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline Content-Type: image/png Content-Location: http://bits.wikimedia.org/w/extensions/UsabilityInitiative/images/vector/collapsibleNav/arrow-down.png?1 Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAGXRFWHRTb2Z0d2Fy ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA9QTFRFeXl53d3dmpqasbGx////GU0i EgAAAAV0Uk5T/////wD7tg5TAAAAK0lEQVQI12NwgQIG0hhCDAwMTCJAhqMCA4Mi WEoIJABiOCooQhULi5BqMgB2bh4svs8t+QAAAABJRU5ErkJggg== ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline Content-Type: image/png Content-Location: http://bits.wikimedia.org/w/extensions/UsabilityInitiative/images/vector/collapsibleNav/arrow-right.png?1 Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAGXRFWHRTb2Z0d2Fy ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAxQTFRF3d3deXl5////nZ2dQA6SoAAA AAN0Uk5T//8A18oNQQAAADNJREFUeNpiYEIDDMQKMKALMDOgCTDCRWACcBG4AEwE IcDITEAFuhnotmC4g4EEzwEEGAADqgHmQSPJKgAAAABJRU5ErkJggg== ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline; filename=combined.min.css Content-Type: text/css; charset=UTF-8; name=combined.min.css Content-Location: http://bits.wikimedia.org/w/extensions/UsabilityInitiative/css/combined.min.css?94 Content-Transfer-Encoding: 8bit .suggestions{ overflow:hidden; position:absolute; top:0px; left:0px; width:0px; border:none; z-index:99; padding:0; margin:-1px 0 0 0; } .suggestions-special{ position:relative; background-color:Window; font-size:0.8em; cursor:pointer; border:solid 1px #aaaaaa; padding:0; margin:0; margin-top:-2px; display:none; padding:0.25em 0.25em; line-height:1.25em; } .suggestions-results{ background-color:white; background-color:Window; font-size:0.8em; cursor:pointer; border:solid 1px #aaaaaa; padding:0; margin:0; } .suggestions-result{ color:black; color:WindowText; margin:0; width:100%; } .suggestions-result span{ line-height:1.5em; padding:0.25em 0.25em; } .suggestions-result-current{ background-color:#4C59A6; background-color:Highlight; color:white; color:HighlightText; } .suggestions-special .special-label{ font-size:0.8em; color:gray; } .suggestions-special .special-query{ color:black; font-style:italic; } .suggestions-special .special-hover{ background-color:silver; } .suggestions-result-current .special-label, .suggestions-result-current .special-query{ color:white; color:HighlightText; } #panel.collapsible-nav div.portal{ background-image:url(../images/vector/collapsibleNav/portal-break.png?1); background-position:left top; background-repeat:no-repeat; padding:0.25em 0 !important; margin:-11px 9px 10px 11px; } body.rtl #panel.collapsible-nav div.portal{ background-position:right top; margin:-11px 11px 10px 9px; } #panel.collapsible-nav div.portal h5{ color:#4D4D4D; font-weight:normal; background:url(../images/vector/collapsibleNav/arrow-down.png?1) 0 50% no-repeat; padding:4px 0 3px 1.5em; margin-bottom:0px; } body.rtl #panel.collapsible-nav div.portal h5{ background:url(../images/vector/collapsibleNav/arrow-down.png?1) 100% 50% no-repeat; padding:4px 1.5em 3px 0; } #panel.collapsible-nav div.collapsed h5{ color:#0645AD; background:url(../images/vector/collapsibleNav/arrow-right.png?1) 0 50% no-repeat; margin-bottom:0px; } body.rtl #panel.collapsible-nav div.collapsed h5{ background:url(../images/vector/collapsibleNav/arrow-left.png?1) 100% 50% no-repeat; } #panel.collapsible-nav div h5:hover{ cursor:pointer; text-decoration:none; } #panel.collapsible-nav div.collapsed h5:hover{ text-decoration:underline; } #panel.collapsible-nav div.portal div.body{ padding-top:0px; display:none; } #panel.collapsible-nav div.portal div.body ul li{ padding:0.25em 0; } #panel.collapsible-nav div.portal div.body{ background:none !important; } #panel.collapsible-nav #p-navigation{ background-image:none; margin-top:0px; } #panel.collapsible-nav #p-navigation div.body{ margin-left:0.5em; } body.rtl #panel.collapsible-nav #p-navigation div.body{ margin-left:0; margin-right:0.5em; } #panel.collapsible-nav #p-navigation h5{ display:none; } form#editform{ margin:0; padding:0; } #wpSummary,#wpSummaryLabel{ margin-bottom:1em; } .wikiEditor-ui textarea#wpTextbox1{ border:none; padding:0; width:100%; margin:-1px; line-height:1.5em; } .wikiEditor-ui .wikiEditor-ui-text > textarea#wpTextbox1{ margin:0; } .wikiEditor-ui{ float:left; position:relative; clear:both; width:100%; background-color:#E0EEf7; border:solid silver 1px; } body.rtl .wikiEditor-ui{ float:right; } .wikiEditor-ui .wikiEditor-ui-bottom{ } .wikiEditor-ui .wikiEditor-ui-text{ line-height:0; } .wikiEditor-ui .wikiEditor-ui-top{ position:relative; border-bottom:solid silver 1px; } .wikiEditor-ui .wikiEditor-ui-left{ float:left; width:100%; } body.rtl .wikiEditor-ui .wikiEditor-ui-left{ float:right; } .wikiEditor-ui .wikiEditor-ui-right{ float:right; background:#F3F3F3; overflow:hidden; } body.rtl .wikiEditor-ui .wikiEditor-ui-right{ float:left; } .wikiEditor-wikitext{ float:left; width:100%; } .wikiEditor-ui-controls{ float:left; width:100%; background-color:white; margin-top:-1px; border-bottom:solid 1px silver; } .wikiEditor-ui-tabs{ float:left; height:2.5em; margin-left:-1px; background-color:white; border-left:solid 1px silver; border-top:solid 1px silver; } .wikiEditor-ui-buttons{ float:right; height:2.5em; margin-right:-1px; background-color:white; padding-left:1em; border-top:solid 1px white; } .wikiEditor-ui-buttons button{ margin-left:0.5em; } .wikiEditor-ui-tabs div{ float:left; height:2.5em; background-color:#f3f3f3; border-right:solid 1px silver; border-bottom:solid 1px silver; } .wikiEditor-ui-tabs div.current{ border-bottom:solid 1px white; background-color:white; } .wikiEditor-ui-tabs div a{ display:inline-block; padding:0 0.75em; line-height:2.5em; color:#0645AD; } .wikiEditor-ui-tabs div.current a{ color:#333333; } .wikiEditor-ui-tabs div.current a:hover{ text-decoration:none; } .wikiEditor-view-wikitext{ line-height:1em; } .wikiEditor-ui-loading{ background:#f3f3f3; z-index:10; position:absolute; top:0; left:0; text-align:center; height:100%; width:100%; border:1px solid silver; margin:-1px; } .wikiEditor-ui-loading span{ display:block; height:24px; width:24px; background:url( ../images/wikiEditor/toolbar/loading.gif ) 0 0 no-repeat; text-indent:-9999px; margin:0 auto; } .wikiEditor-toolbar-dialog table{ margin-top:0.75em; } .wikiEditor-toolbar-dialog table td{ padding:0.5em; height:3em; overflow:visible; } div.suggestions{ z-index:1099; } .wikiEditor-toolbar-dialog .ui-dialog-titlebar-close:hover{ text-decoration:none; } .wikiEditor-toolbar-dialog .ui-dialog-content .status-invalid input{ border:2px solid red; padding:2px 1px; } .wikiEditor-toolbar-dialog .ui-dialog-titlebar{ padding:0.9em 1.4em 0.6em !important; } .wikiEditor-toolbar-dialog table td{ padding:0 !important; } .wikiEditor-toolbar-dialog .ui-dialog-buttonpane button{ -moz-border-radius:4px; -webkit-border-radius:4px; padding:0.2em 0.6em 0.15em !important; margin:0.5em 0 0.5em 0.4em !important; border:1px solid #a6a6a6 !important; background:#f2f2f2 url( ../images/wikiEditor/dialogs/button_off.png?1) repeat-x scroll 50% 100% !important; } .wikiEditor-toolbar-dialog .ui-dialog-buttonpane button:hover{ border-color:#6e7273; background:#e1e1e1 url( ../images/wikiEditor/dialogs/button_over.png?1) repeat-x scroll 50% 100% !important; } .wikiEditor-toolbar-dialog .ui-dialog-buttonpane button:active, .wikiEditor-toolbar-dialog .ui-dialog-buttonpane button:focus{ border-color:#707271; background:#bfbfbf url( ../images/wikiEditor/dialogs/button_down.png?1) repeat-x scroll 50% 100% !important; } .wikiEditor-toolbar-dialog .ui-dialog-buttonpane button.disabled{ color:#7f7f7f; border-color:#cccccc; background:#f2f2f2 url( ../images/wikiEditor/dialogs/button_disabled.png?1) repeat-x scroll 50% 100% !important; } .wikiEditor-toolbar-dialog .ui-dialog-buttonpane button::-moz-focus-inner{ border:0; } .wikiEditor-toolbar-dialog .ui-widget-header{ background:#f0f0f0 url( ../images/wikiEditor/dialogs/titlebar_fade.png?1) repeat-x scroll 50% 100% !important; } .wikiEditor-toolbar-dialog .ui-icon-closethick{ background:url( ../images/wikiEditor/dialogs/close_x.png?1) no-repeat 50% 50% !important; } .wikiEditor-toolbar-dialog .ui-dialog-buttonpane{ margin-top:0 !important; padding:0.3em 1.4em 0.5em 1.4em !important; } .wikiEditor-toolbar-dialog .ui-dialog-content fieldset{ border:none !important; margin:0 !important; padding:0 !important; } .wikiEditor-toolbar-dialog .ui-widget-header{ border-bottom:1px solid #6bc8f3 !important; } .wikiEditor-toolbar-dialog .ui-dialog-content input[type=text]{ -moz-box-sizing:border-box; -ms-box-sizing:border-box; -webkit-box-sizing:border-box; -khtml-box-sizing:border-box; } .wikiEditor-toolbar-dialog .ui-dialog-content input[type="radio"], .wikiEditor-toolbar-dialog .ui-dialog-content input[type="checkbox"]{ margin-left:0; } .wikiEditor-toolbar-dialog .ui-dialog-titlebar-close{ padding:0; } body.ltr .wikiEditor-toolbar-dialog .ui-dialog-titlebar-close{ right:0.9em; } .wikieditor-toolbar-field-wrapper{ padding:0 0 25px 0; } .wikieditor-toolbar-floated-field-wrapper{ float:left; margin-right:2em; } .wikieditor-toolbar-dialog-hint{ color:#999999; } .wikiEditor-toolbar-dialog, .wikiEditor-toolbar-dialog .ui-widget-content{ border:none !important; } #wikieditor-toolbar-table-dialog fieldset{ width:218px; padding:0; float:left; } body.rtl #wikieditor-toolbar-table-dialog fieldset{ float:right; } #wikieditor-toolbar-table-dialog .wikieditor-toolbar-table-preview-wrapper{ width:330px; padding:0; float:right; } body.rtl #wikieditor-toolbar-table-dialog .wikieditor-toolbar-table-preview-wrapper{ float:left; } body.rtl .wikiEditor-toolbar-dialog .wikieditor-toolbar-table-preview-wrapper table{ margin-left:1em; margin-right:0; } .wikieditor-toolbar-table-preview-content *{ cursor:default; } .wikiEditor-toolbar-dialog .wikieditor-toolbar-table-preview-wrapper table{ width:100% !important; } .wikiEditor-toolbar-dialog .wikieditor-toolbar-table-preview-content table td{ padding:10px 4px !important; height:auto !important; } .wikiEditor-toolbar-dialog .wikieditor-toolbar-table-preview-content table th{ padding:7px 3px !important; } .wikieditor-toolbar-table-dimension-fields .wikieditor-toolbar-field-wrapper{ float:left; margin-right:20px; vertical-align:bottom; } body.rtl .wikieditor-toolbar-table-dimension-fields .wikieditor-toolbar-field-wrapper{ float:right; margin-right:0px; margin-left:20px; } .wikiEditor-toolbar-dialog .ui-dialog-content{ padding:30px 20px 0 !important; } .wikieditor-toolbar-dialog-wrapper{ width:100%; } #wikieditor-toolbar-link-int-target-status{ float:right; } #wikieditor-toolbar-link-int-target, #wikieditor-toolbar-link-int-text{ width:100%; } #wikieditor-toolbar-tool-link-int-target-label{ float:left; line-height:1.7em; } #wikieditor-toolbar-link-int-target-status-loading{ line-height:1.7em; } #wikieditor-toolbar-link-int-target-status-exists, #wikieditor-toolbar-link-int-target-status-notexists, #wikieditor-toolbar-link-int-target-status-invalid, #wikieditor-toolbar-link-int-target-status-external{ padding-left:30px; background-position:0 50%; background-repeat:no-repeat; } #wikieditor-toolbar-link-int-target-status-exists{ background-image:url( ../images/wikiEditor/dialogs/insert-link-exists.png?1); } #wikieditor-toolbar-link-int-target-status-notexists{ background-image:url( ../images/wikiEditor/dialogs/insert-link-notexists.png?1); } #wikieditor-toolbar-link-int-target-status-invalid{ background-image:url( ../images/wikiEditor/dialogs/insert-link-invalid.png?1); } #wikieditor-toolbar-link-int-target-status-external{ background-image:url( ../images/wikiEditor/dialogs/insert-link-external.png?1); } #wikieditor-toolbar-reference-dialog label{ float:left; line-height:1.7em; } #wikieditor-toolbar-reference-text{ width:100%; } body.rtl .wikiEditor-toolbar-dialog .ui-dialog-buttonpane button{ float:left; margin:0.5em 0.4em 0.5em 0 !important; } body.rtl .wikiEditor-toolbar-dialog .ui-dialog-titlebar-close{ left:0.9em; right:auto; } body.rtl .wikiEditor-toolbar-dialog .ui-dialog-title{ float:right; } body.rtl #wikieditor-toolbar-link-int-target-status{ float:left; } body.rtl #wikieditor-toolbar-tool-link-int-target-label{ float:right; } body.rtl .wikieditor-toolbar-floated-field-wrapper{ float:right; margin-right:0; margin-left:2em; } body.rtl #wikieditor-toolbar-link-int-target-status-exists, body.rtl #wikieditor-toolbar-link-int-target-status-notexists, body.rtl #wikieditor-toolbar-link-int-target-status-invalid, body.rtl #wikieditor-toolbar-link-int-target-status-external{ padding-left:0; padding-right:30px; background-position:100% 50%; } body.rtl #wikieditor-toolbar-link-int-target-status-external{ background-image:url( ../images/wikiEditor/dialogs/insert-link-external-rtl.png?1); } .wikiEditor-template-dialog-fields label{ text-transform:capitalize; float:left; width:25%; line-height:2.25em; } .wikiEditor-template-dialog-fields textarea{ float:right; width:70%; line-height:1.5em; height:1.5em; } .wikiEditor-template-dialog-fields .wikiEditor-template-dialog-field-wrapper{ padding:0.75em 0.33em; border-bottom:dashed 1px silver; clear:both; } .wikiEditor-template-dialog-fields .wikiEditor-template-dialog-field-wrapper:first-child{ padding-top:0; } .wikiEditor-template-dialog-fields .wikiEditor-template-dialog-field-wrapper:last-child{ border-bottom:none; } .wikieditor-toolbar-table-dimension-fields:after, .wikieditor-toolbar-dialog-wrapper:after{ visibility:hidden; display:block; font-size:0; content:" "; clear:both; height:0; } .wikieditor-toolbar-table-dimension-fields, .wikieditor-toolbar-dialog-wrapper{ display:inline-table; } * html .wikieditor-toolbar-table-dimension-fields, * html .wikieditor-toolbar-dialog-wrapper{ height:1%; } .wikieditor-toolbar-table-dimension-fields, .wikieditor-toolbar-dialog-wrapper{ display:block; } .wikiEditor-toolbar-dialog .ui-dialog-buttonpane{ border-top:1px solid #cccccc !important; } .wikiEditor-toolbar-dialog .ui-dialog-content{ padding-bottom:1em !important; } .wikiEditor-dialog-editoptions{ margin-top:15px; } .wikiEditor-publish-dialog-copywarn{ margin-top:0.5em; } .wikiEditor-publish-dialog-summary{ margin-top:1.5em; } .wikiEditor-publish-dialog-options{ margin-top:1.5em; } .wikiEditor-ui-toc{ padding:0; overflow:auto; overflow-x:hidden; } .wikiEditor-ui-toc{ border-left:solid silver 1px; } body.rtl .wikiEditor-ui-toc{ border-right:solid silver 1px; border-left:none; } .wikiEditor-ui-toc ul{ padding:0; margin:0; list-style:none; list-style-image:none; list-style-position:outside; list-style-type:none; width:100%; } .tab-toc{ background-image:url(../images/wikiEditor/toolbar/base.png?1); background-position:left top; background-repeat:repeat-x; height:26px; padding:3px 0; line-height:26px; padding-left:1em; border-bottom:solid 1px silver; white-space:nowrap; overflow:hidden; } body.rtl .tab-toc{ background-position:right top; padding-right:2em; } .tab-toc a{ outline:none; } .wikiEditor-ui-toc li{ padding:0; margin:0; } .wikiEditor-ui-toc ul ul{ padding:0; margin:0; margin-bottom:0 !important; margin-top:0 !important; list-style:none; background-image:none; } .wikiEditor-ui-toc ul li div{ display:block; font-size:0.9em; cursor:pointer; color:#0645ad; } .wikiEditor-ui-toc ul li div{ padding:0.125em; padding-left:1em; } body.rtl .wikiEditor-ui-toc ul li div{ padding-right:1em; padding-left:0; } .wikiEditor-ui-toc ul ul li div{ padding-left:2em; } body.rtl .wikiEditor-ui-toc ul ul li div{ padding-right:2em; padding-left:0; } .wikiEditor-ui-toc ul ul ul li div{ padding-left:3em; } body.rtl .wikiEditor-ui-toc ul ul ul li div{ padding-right:3em; padding-left:0; } .wikiEditor-ui-toc ul ul ul ul li div{ padding-left:4em; } body.rtl .wikiEditor-ui-toc ul ul ul ul li div{ padding-right:4em; padding-left:0; } .wikiEditor-ui-toc ul ul ul ul ul li div{ padding-left:5em; } body.rtl .wikiEditor-ui-toc ul ul ul ul ul li div{ padding-right:5em; padding-left:0; } .wikiEditor-ui-toc ul ul ul ul ul ul li div{ padding-left:6em; } body.rtl wikiEditor-ui-toc ul ul ul ul ul ul li div{ padding-right:6em; padding-left:0; } .wikiEditor-ui-toc ul li div.current{ background-color:#FAFAFA; color:#333333; } .wikiEditor-ui-toc ul li div.section-0{ font-size:1em; padding-top:0.5em; padding-bottom:0.5em; border-bottom:solid 1px #DDDDDD; } .wikiEditor-ui-toc{ overflow-y:hidden; position:relative; } .wikiEditor-ui-toc ul{ overflow-y:auto; overflow-x:hidden; height:100%; margin-bottom:0 !important; } .wikiEditor-ui-toc ul ul{ float:none; height:auto; } #wikiEditor-ui-toc-collapse{ height:100%; width:18px; position:absolute; top:0; left:0; } .wikiEditor-ui-toc-collapse-open{ background:#f3f3f3 url(../images/wikiEditor/toc/close.png?1) 4px 50% no-repeat; border-left:1px solid #DDDDDD; } .wikiEditor-ui-toc-collapse-closed{ background:#f3f3f3 url(../images/wikiEditor/toc/open.png?1) 4px 50% no-repeat; } .wikiEditor-ui-toc-resize-vertical, .ui-resizable-w{ width:4px; position:absolute; top:0; left:0; height:100%; cursor:ew-resize; } .wikiEditor-ui .wikiEditor-ui-right{ overflow:visible; } .wikiEditor-ui-right .ui-resizable-w{ left:0px !important; z-index:0; } .wikiEditor-ui-right .wikiEditor-ui-toc-resize-grip{ width:5px; height:12px; padding:3px; position:absolute; top:7px; left:-12px !important; cursor:ew-resize; background:url(../images/wikiEditor/toc/grip.png?1) 50% 50% no-repeat; z-index:0; } body.rtl .wikiEditor-ui-right .wikiEditor-ui-toc-resize-grip{ right:2px !important; } .wikiEditor-ui-toolbar .tab-toc{ float:right; margin:3px 16px 3px 3px; line-height:26px; } .wikiEditor-ui-toc-expandControl{ position:absolute; z-index:2; top:0px; right:10px; height:26px; padding:3px 0; line-height:26px; padding-right:1em; white-space:nowrap; overflow:hidden; } body.rtl .wikiEditor-ui-toc-expandControl{ padding-left:1em; padding-right:0; left:10px; right:auto; } .wikiEditor-ui-text textarea{ resize:none; } .wikiEditor-ui-text textarea:focus{ outline:none; } .wikiEditor-ui-view-wikiText{ overflow:auto; width:100%; } .wikiEditor-ui-toolbar{ position:relative; width:100%; } .wikiEditor-ui-toolbar .sections{ float:left; width:100%; clear:both; height:0; } body.rtl .wikiEditor-ui-toolbar .sections{ float:right; } .wikiEditor-ui-toolbar .sections .section{ display:none; float:left; width:100%; border-top:solid 1px #DDDDDD; background-color:#E0EEf7; } .wikiEditor-ui-toolbar{ background-image:url(../images/wikiEditor/toolbar/base.png?1); background-position:left top; background-repeat:repeat-x; } /* .wikiEditor-ui-toolbar .toolbar{ background-image:url(../images/wikiEditor/toolbar/base.png?1); background-position:left top; } */ body.rtl .wikiEditor-ui-toolbar .sections .section{ float:right; } .wikiEditor-ui-toolbar .sections div .spinner{ display:none; } .wikiEditor-ui-toolbar .sections .loading .spinner{ display:block; background-image:url(../images/wikiEditor/toolbar/loading.gif?2); background-position:left center; background-repeat:no-repeat; padding-left:32px; margin-left:0.5em; height:32px; float:left; color:#666666; } body.rtl .wikiEditor-ui-toolbar .sections .loading .spinner{ background-position:right center; padding-left:0; padding-right:32px; margin-left:0; margin-right:0.5em; float:right; } .wikiEditor-ui-toolbar .tabs, .wikiEditor-ui-toolbar .section-main{ position:relative; float:left; height:26px; } body.rtl .wikiEditor-ui-toolbar .tabs, body.rtl .wikiEditor-ui-toolbar .section-main{ float:right; } .wikiEditor-ui-toolbar .group{ float:left; height:26px; padding-right:6px; border-right:solid 1px #DDDDDD; margin:3px; } body.rtl .wikiEditor-ui-toolbar .group{ float:right; padding-right:0; padding-left:6px; border-right:none; border-left:solid 1px #DDDDDD; } .wikiEditor-ui-toolbar .group-search{ float:right; padding:0 0 0 6px; border-right:none; border-left:1px solid #DDDDDD; } .wikiEditor-ui-toolbar .group-insert{ border-right:none; } body.rtl .wikiEditor-ui-toolbar .group-search{ float:left; padding:0 6px 0 0; border-left:none; border-right:1px solid #DDDDDD; } body.rtl .wikiEditor-ui-toolbar .group-insert{ border-left:none; } .wikiEditor-toolbar-spritedButton{ background:url(../images/wikiEditor/toolbar/button-sprite.png?1) 0 0 no-repeat; display:block; float:left; height:22px; text-indent:-9999px; width:22px; padding:2px; cursor:pointer; } .wikiEditor-ui-toolbar .tabs{ list-style:none; margin:3px; } .wikiEditor-ui-toolbar .tabs span.tab{ display:inline-block; float:left; line-height:26px; } .wikiEditor-ui-toolbar .tabs > span.tab{ display:block; } body.rtl .wikiEditor-ui-toolbar .tabs > span.tab{ float:right; } .wikiEditor-ui-toolbar .tabs span.tab a, .wikiEditor-ui-toolbar .tabs span.tab a:visited{ display:inline-block; float:left; padding-left:18px; padding-right:12px; height:26px; cursor:pointer; color:#0645ad; background-image:url(../images/wikiEditor/toolbar/arrow-right.png?1); background-position:left center; background-repeat:no-repeat; } body.rtl .wikiEditor-ui-toolbar .tabs span.tab a, body.rtl .wikiEditor-ui-toolbar .tabs span.tab a:visited{ padding-left:12px; padding-right:18px; background-image:url(../images/wikiEditor/toolbar/arrow-left.png?1); background-position:right center; } body.rtl .wikiEditor-ui-toolbar .tabs > span.tab > a, body.rtl .wikiEditor-ui-toolbar .tabs > pan.tab > a:visited{ float:right; } .wikiEditor-ui-toolbar .tabs span.tab a.current, .wikiEditor-ui-toolbar .tabs span.tab a.current:visited{ color:#333333; background-image:url(../images/wikiEditor/toolbar/arrow-down.png?1); } body.rtl .wikiEditor-ui-toolbar .tabs span.tab a.current, body.rtl .wikiEditor-ui-toolbar .tabs span.tab a.current:visited{ background-image:url(../images/wikiEditor/toolbar/arrow-down.png?1); } .wikiEditor-ui-toolbar .tabs span.tab a.current:hover{ text-decoration:none; } .wikiEditor-ui-toolbar .tabs span.tab a.loading{ background-image:url(../images/wikiEditor/toolbar/loading-small.gif?1) !important; } .wikiEditor-ui-toolbar .group .label{ float:left; border:0px; height:22px; line-height:22px; margin:2px; margin-left:5px; margin-right:8px; color:#777777; cursor:default; } body.rtl .wikiEditor-ui-toolbar .group > .label{ float:right; margin-left:8px; margin-right:5px; } .wikiEditor-ui-toolbar .group img.tool{ float:left; border:0px; height:22px; width:22px; padding:2px; cursor:pointer; } body.rtl .wikiEditor-ui-toolbar .group > img.tool{ float:right; } .wikiEditor-ui-toolbar .group .tool-select{ float:left; margin:2px; height:22px; cursor:pointer; border:solid 1px silver; padding:0; margin-right:0; cursor:pointer; background-color:#ffffff; } body.rtl .wikiEditor-ui-toolbar .group > .tool-select{ float:right; } .wikiEditor-ui-toolbar .group .tool-select .label{ background-image:url(../images/wikiEditor/toolbar/arrow-down.png?1); background-position:center right; background-repeat:no-repeat; padding:0; margin:0; padding-left:4px; padding-right:22px; margin-right:4px; cursor:pointer; text-decoration:none; color:#333333; } body.rtl .wikiEditor-ui-toolbar .group .tool-select .label{ background-position:center left; padding-right:4px; padding-left:22px; margin-left:4px; margin-right:0; } body.rtl .wikiEditor-ui-toolbar .group .tool-select .menu{ clear:both; } .wikiEditor-ui-toolbar .group .tool-select .menu .options{ position:absolute; display:none; margin-left:-1px; border:solid 1px silver; background-color:#ffffff; } body.rtl .wikiEditor-ui-toolbar .group .tool-select .menu{ margin-left:-1px; margin-right:-1px; } .wikiEditor-ui-toolbar .group .tool-select .options { margin-top:22px; } .wikiEditor-ui-toolbar .group .tool-select .options .option{ display:block; padding:0.5em; text-decoration:none; color:black; white-space:nowrap; } .wikiEditor-ui-toolbar .group .tool-select .options .option:hover{ background-color:#E0EEf7; } .wikiEditor-ui-toolbar .group .tool-select .options .option[rel=heading-2]{ font-size:150%; font-weight:normal; } .wikiEditor-ui-toolbar .group .tool-select .options .option[rel=heading-3]{ font-size:132%; font-weight:normal; } .wikiEditor-ui-toolbar .group .tool-select .options .option[rel=heading-4]{ font-size:116%; font-weight:normal; } .wikiEditor-ui-toolbar .group .tool-select .options .option[rel=heading-5]{ font-size:100%; font-weight:bold; } .wikiEditor-ui-toolbar .booklet .index{ float:left; width:20%; height:125px; overflow:auto; } body.rtl .wikiEditor-ui-toolbar .booklet .index{ float:right; } .wikiEditor-ui-toolbar .booklet .index div{ padding:4px; padding-left:6px; cursor:pointer; color:#0645ad; } body.rtl .wikiEditor-ui-toolbar .booklet .index div{ padding-left:4px; padding-right:6px; } .wikiEditor-ui-toolbar .booklet .index .current{ background-color:#FAFAFA; color:#333333; cursor:default; } .wikiEditor-ui-toolbar .booklet .pages{ float:right; width:80%; height:125px; overflow:auto; background-color:#FAFAFA; } body.rtl .wikiEditor-ui-toolbar .booklet .pages{ float:left; } .wikiEditor-ui-toolbar .page-table table{ padding-left:5px; padding-right:5px; background:none; } .wikiEditor-ui-toolbar .page-table th{ color:#999999; } .wikiEditor-ui-toolbar .page-table td{ color:black; border-top:solid 1px #EEEEEE; } .wikiEditor-ui-toolbar .page-table th, .wikiEditor-ui-toolbar .page-table td{ text-align:left; padding:5px; margin:0px; } body.rtl .wikiEditor-ui-toolbar .page-table th, body.rtl .wikiEditor-ui-toolbar .page-table td{ text-align:right; } .wikiEditor-ui-toolbar .section-help .page-table td.cell-syntax, .wikiEditor-ui-toolbar .section-help .page-table td.syntax{ font-family:monospace; } .wikiEditor-ui-toolbar .section-help .page-table td.syntax, .wikiEditor-ui-toolbar .section-help .page-table td.cell-syntax, .wikiEditor-ui-toolbar .section-help .page-table td.cell-result, .wikiEditor-ui-toolbar .section-help .page-table td.result{ width:40%; } .wikiEditor-ui-toolbar .section-help .page-table td.description, .wikiEditor-ui-toolbar .section-help .page-table td.description{ width:20%; } .wikiEditor-ui-toolbar .page-characters div span{ border:solid 1px #DDDDDD; padding:5px; padding-left:8px; padding-right:8px; margin-left:5px; margin-top:5px; height:1em; float:left; display:block; color:black; text-decoration:none; cursor:pointer; font-family:monospace; font-size:1.25em; } body.rtl .wikiEditor-ui-toolbar .page-characters > div > span, .wikiEditor-ui-toolbar .page-characters div[dir=rtl] span{ direction:rtl; float:right; margin-left:0; margin-right:5px; } .wikiEditor-ui-toolbar .page-characters div span:hover{ background-color:white; text-decoration:none; border-color:#a8d7f9; } .ui-widget table td.wikieditor-toolbar-table-preview-wrapper span{ padding:4px 6px 0px; display:block; } .ui-widget table .wikieditor-toolbar-table-preview-frame{ width:340px; background:#fff; padding:10px; overflow:hidden; display:block; position:relative; } .ui-widget table .wikieditor-toolbar-table-preview-content{ width:375px; display:block; } .ui-widget table .wikieditor-toolbar-table-preview{ width:340px; } .ui-widget table td.wikieditor-toolbar-table-preview-wrapper{ background:#e5e5e5; padding:10px; } .wikiEditor-preview-loading{ padding:1em; background-color:white; } .wikiEditor-preview-loading span{ color:#666666; } .wikiEditor-preview-spinner{ padding-right:1em; } .wikiEditor-preview-contents{ padding:1em; background-color:white; } ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline; filename=jquery-ui-1.7.2.css Content-Type: text/css; charset=UTF-8; name=jquery-ui-1.7.2.css Content-Location: http://bits.wikimedia.org/w/extensions/UsabilityInitiative/css/vector/jquery-ui-1.7.2.css?1.7.2y Content-Transfer-Encoding: Quoted-Printable /* * jQuery UI CSS Framework * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt= ) licenses. */ /* Layout helpers ----------------------------------*/ .ui-helper-hidden { display: none; } .ui-helper-hidden-accessible { position: absolute; left: -99999999px; } .ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-he= ight: 1.3; text-decoration: none; font-size: 100%; list-style: none; } .ui-helper-clearfix:after { content: "."; display: block; height: 0; cle= ar: both; visibility: hidden; } .ui-helper-clearfix { display: inline-block; } /* required comment for clearfix to work in Opera \*/ * html .ui-helper-clearfix { height:1%; } .ui-helper-clearfix { display:block; } /* end clearfix */ .ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: = absolute; opacity: 0; filter:Alpha(Opacity=3D0); } /* Interaction Cues ----------------------------------*/ .ui-state-disabled { cursor: default !important; } /* Icons ----------------------------------*/ /* states and images */ .ui-icon { display: block; text-indent: -99999px; overflow: hidden; back= ground-repeat: no-repeat; } /* Misc visuals ----------------------------------*/ /* Overlays */ .ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; h= eight: 100%; } /* * jQuery UI CSS Framework * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt= ) licenses. * To view and modify this theme, visit http://jqueryui.com/themeroller/?= ffDefault=3Dsans-serif&fwDefault=3Dnormal&fsDefault=3D1em&cornerRadius=3D= 0&bgColorHeader=3De2eef6&bgTextureHeader=3D04_highlight_hard.png&bgImgOp= acityHeader=3D100&borderColorHeader=3Dc0c0c0&fcHeader=3D333333&iconColor= Header=3D333333&bgColorContent=3Dffffff&bgTextureContent=3D01_flat.png&b= gImgOpacityContent=3D100&borderColorContent=3Dc0c0c0&fcContent=3D000000&= iconColorContent=3D000000&bgColorDefault=3De2eef6&bgTextureDefault=3D04_= highlight_hard.png&bgImgOpacityDefault=3D100&borderColorDefault=3Dc0c0c0= &fcDefault=3D333333&iconColorDefault=3D333333&bgColorHover=3Dffffff&bgTe= xtureHover=3D04_highlight_hard.png&bgImgOpacityHover=3D100&borderColorHo= ver=3Dc0c0c0&fcHover=3D333333&iconColorHover=3D333333&bgColorActive=3Dff= ffff&bgTextureActive=3D01_flat.png&bgImgOpacityActive=3D100&borderColorA= ctive=3Dc0c0c0&fcActive=3D333333&iconColorActive=3D333333&bgColorHighlig= ht=3Dfbf9ee&bgTextureHighlight=3D04_highlight_hard.png&bgImgOpacityHighl= ight=3D55&borderColorHighlight=3Dfcefa1&fcHighlight=3D363636&iconColorHi= ghlight=3D2e83ff&bgColorError=3Dfef1ec&bgTextureError=3D05_inset_soft.pn= g&bgImgOpacityError=3D95&borderColorError=3Dcd0a0a&fcError=3Dcd0a0a&icon= ColorError=3Dcd0a0a&bgColorOverlay=3D000000&bgTextureOverlay=3D01_flat.p= ng&bgImgOpacityOverlay=3D0&opacityOverlay=3D75&bgColorShadow=3D000000&bg= TextureShadow=3D01_flat.png&bgImgOpacityShadow=3D0&opacityShadow=3D30&th= icknessShadow=3D8px&offsetTopShadow=3D-8px&offsetLeftShadow=3D-8px&corne= rRadiusShadow=3D8px */ /* Component containers ----------------------------------*/ .ui-widget { font-family: sans-serif; font-size: 0.9em; } .ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget but= ton { font-family: sans-serif; font-size: 1em; } .ui-widget-content { border: 1px solid #c0c0c0; background: #ffffff url(= images/ui-bg_flat_100_ffffff_40x100.png) 50% 50% repeat-x; color: #00000= 0; } .ui-widget-content a { color: #000000; } .ui-widget-header { border-bottom: 1px solid #c0c0c0; line-height: 1em; = background: #e2eef6 url(images/ui-bg_highlight-hard_100_e2eef6_1x100.png= ) 50% 50% repeat-x; color: #333333; font-weight: bold; } .ui-widget-header a { color: #333333; } /* Interaction states ----------------------------------*/ .ui-state-default, .ui-widget-content .ui-state-default { border: 1px so= lid #c0c0c0; background: #e2eef6 url(images/ui-bg_highlight-hard_100_e2e= ef6_1x100.png) 50% 50% repeat-x; font-weight: normal; color: #333333; ou= tline: none; } .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visit= ed { color: #333333; text-decoration: none; outline: none; } .ui-state-hover, .ui-widget-content .ui-state-hover, .ui-state-focus, .u= i-widget-content .ui-state-focus { border: 1px solid #c0c0c0; background= : #ffffff url(images/ui-bg_highlight-hard_100_ffffff_1x100.png) 50% 50% = repeat-x; font-weight: normal; color: #333333; outline: none; } .ui-state-hover a, .ui-state-hover a:hover { color: #333333; text-decora= tion: none; outline: none; } .ui-state-active, .ui-widget-content .ui-state-active { border: 1px soli= d #c0c0c0; background: #ffffff url(images/ui-bg_flat_100_ffffff_40x100.p= ng) 50% 50% repeat-x; font-weight: normal; color: #333333; outline: none= ; } .ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited = { color: #333333; outline: none; text-decoration: none; } /* Interaction Cues ----------------------------------*/ .ui-state-highlight, .ui-widget-content .ui-state-highlight {border: 1px= solid #fcefa1; background: #fbf9ee url(images/ui-bg_highlight-hard_55_f= bf9ee_1x100.png) 50% top repeat-x; color: #363636; } .ui-state-highlight a, .ui-widget-content .ui-state-highlight a { color:= #363636; } .ui-state-error, .ui-widget-content .ui-state-error {border: 1px solid #= cd0a0a; background: #fef1ec url(images/ui-bg_inset-soft_95_fef1ec_1x100.= png) 50% bottom repeat-x; color: #cd0a0a; } .ui-state-error a, .ui-widget-content .ui-state-error a { color: #cd0a0a= ; } .ui-state-error-text, .ui-widget-content .ui-state-error-text { color: #= cd0a0a; } .ui-state-disabled, .ui-widget-content .ui-state-disabled { opacity: .35= ; filter:Alpha(Opacity=3D35); background-image: none; } .ui-priority-primary, .ui-widget-content .ui-priority-primary { font-wei= ght: bold; } .ui-priority-secondary, .ui-widget-content .ui-priority-secondary { opac= ity: .7; filter:Alpha(Opacity=3D70); font-weight: normal; } /* Icons ----------------------------------*/ /* states and images */ .ui-icon { width: 16px; height: 16px; background-image: url(images/ui-ic= ons_000000_256x240.png); } .ui-widget-content .ui-icon {background-image: url(images/ui-icons_00000= 0_256x240.png); } .ui-widget-header .ui-icon {background-image: url(images/ui-icons_333333= _256x240.png); } .ui-state-default .ui-icon { background-image: url(images/ui-icons_33333= 3_256x240.png); } .ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: ur= l(images/ui-icons_333333_256x240.png); } .ui-state-active .ui-icon {background-image: url(images/ui-icons_333333_= 256x240.png); } .ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83= ff_256x240.png); } .ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-imag= e: url(images/ui-icons_cd0a0a_256x240.png); } /* positioning */ .ui-icon-carat-1-n { background-position: 0 0; } .ui-icon-carat-1-ne { background-position: -16px 0; } .ui-icon-carat-1-e { background-position: -32px 0; } .ui-icon-carat-1-se { background-position: -48px 0; } .ui-icon-carat-1-s { background-position: -64px 0; } .ui-icon-carat-1-sw { background-position: -80px 0; } .ui-icon-carat-1-w { background-position: -96px 0; } .ui-icon-carat-1-nw { background-position: -112px 0; } .ui-icon-carat-2-n-s { background-position: -128px 0; } .ui-icon-carat-2-e-w { background-position: -144px 0; } .ui-icon-triangle-1-n { background-position: 0 -16px; } .ui-icon-triangle-1-ne { background-position: -16px -16px; } .ui-icon-triangle-1-e { background-position: -32px -16px; } .ui-icon-triangle-1-se { background-position: -48px -16px; } .ui-icon-triangle-1-s { background-position: -64px -16px; } .ui-icon-triangle-1-sw { background-position: -80px -16px; } .ui-icon-triangle-1-w { background-position: -96px -16px; } .ui-icon-triangle-1-nw { background-position: -112px -16px; } .ui-icon-triangle-2-n-s { background-position: -128px -16px; } .ui-icon-triangle-2-e-w { background-position: -144px -16px; } .ui-icon-arrow-1-n { background-position: 0 -32px; } .ui-icon-arrow-1-ne { background-position: -16px -32px; } .ui-icon-arrow-1-e { background-position: -32px -32px; } .ui-icon-arrow-1-se { background-position: -48px -32px; } .ui-icon-arrow-1-s { background-position: -64px -32px; } .ui-icon-arrow-1-sw { background-position: -80px -32px; } .ui-icon-arrow-1-w { background-position: -96px -32px; } .ui-icon-arrow-1-nw { background-position: -112px -32px; } .ui-icon-arrow-2-n-s { background-position: -128px -32px; } .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } .ui-icon-arrow-2-e-w { background-position: -160px -32px; } .ui-icon-arrow-2-se-nw { background-position: -176px -32px; } .ui-icon-arrowstop-1-n { background-position: -192px -32px; } .ui-icon-arrowstop-1-e { background-position: -208px -32px; } .ui-icon-arrowstop-1-s { background-position: -224px -32px; } .ui-icon-arrowstop-1-w { background-position: -240px -32px; } .ui-icon-arrowthick-1-n { background-position: 0 -48px; } .ui-icon-arrowthick-1-ne { background-position: -16px -48px; } .ui-icon-arrowthick-1-e { background-position: -32px -48px; } .ui-icon-arrowthick-1-se { background-position: -48px -48px; } .ui-icon-arrowthick-1-s { background-position: -64px -48px; } .ui-icon-arrowthick-1-sw { background-position: -80px -48px; } .ui-icon-arrowthick-1-w { background-position: -96px -48px; } .ui-icon-arrowthick-1-nw { background-position: -112px -48px; } .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } .ui-icon-arrowreturn-1-w { background-position: -64px -64px; } .ui-icon-arrowreturn-1-n { background-position: -80px -64px; } .ui-icon-arrowreturn-1-e { background-position: -96px -64px; } .ui-icon-arrowreturn-1-s { background-position: -112px -64px; } .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } .ui-icon-arrow-4 { background-position: 0 -80px; } .ui-icon-arrow-4-diag { background-position: -16px -80px; } .ui-icon-extlink { background-position: -32px -80px; } .ui-icon-newwin { background-position: -48px -80px; } .ui-icon-refresh { background-position: -64px -80px; } .ui-icon-shuffle { background-position: -80px -80px; } .ui-icon-transfer-e-w { background-position: -96px -80px; } .ui-icon-transferthick-e-w { background-position: -112px -80px; } .ui-icon-folder-collapsed { background-position: 0 -96px; } .ui-icon-folder-open { background-position: -16px -96px; } .ui-icon-document { background-position: -32px -96px; } .ui-icon-document-b { background-position: -48px -96px; } .ui-icon-note { background-position: -64px -96px; } .ui-icon-mail-closed { background-position: -80px -96px; } .ui-icon-mail-open { background-position: -96px -96px; } .ui-icon-suitcase { background-position: -112px -96px; } .ui-icon-comment { background-position: -128px -96px; } .ui-icon-person { background-position: -144px -96px; } .ui-icon-print { background-position: -160px -96px; } .ui-icon-trash { background-position: -176px -96px; } .ui-icon-locked { background-position: -192px -96px; } .ui-icon-unlocked { background-position: -208px -96px; } .ui-icon-bookmark { background-position: -224px -96px; } .ui-icon-tag { background-position: -240px -96px; } .ui-icon-home { background-position: 0 -112px; } .ui-icon-flag { background-position: -16px -112px; } .ui-icon-calendar { background-position: -32px -112px; } .ui-icon-cart { background-position: -48px -112px; } .ui-icon-pencil { background-position: -64px -112px; } .ui-icon-clock { background-position: -80px -112px; } .ui-icon-disk { background-position: -96px -112px; } .ui-icon-calculator { background-position: -112px -112px; } .ui-icon-zoomin { background-position: -128px -112px; } .ui-icon-zoomout { background-position: -144px -112px; } .ui-icon-search { background-position: -160px -112px; } .ui-icon-wrench { background-position: -176px -112px; } .ui-icon-gear { background-position: -192px -112px; } .ui-icon-heart { background-position: -208px -112px; } .ui-icon-star { background-position: -224px -112px; } .ui-icon-link { background-position: -240px -112px; } .ui-icon-cancel { background-position: 0 -128px; } .ui-icon-plus { background-position: -16px -128px; } .ui-icon-plusthick { background-position: -32px -128px; } .ui-icon-minus { background-position: -48px -128px; } .ui-icon-minusthick { background-position: -64px -128px; } .ui-icon-close { background-position: -80px -128px; } .ui-icon-closethick { background-position: -96px -128px; } .ui-icon-key { background-position: -112px -128px; } .ui-icon-lightbulb { background-position: -128px -128px; } .ui-icon-scissors { background-position: -144px -128px; } .ui-icon-clipboard { background-position: -160px -128px; } .ui-icon-copy { background-position: -176px -128px; } .ui-icon-contact { background-position: -192px -128px; } .ui-icon-image { background-position: -208px -128px; } .ui-icon-video { background-position: -224px -128px; } .ui-icon-script { background-position: -240px -128px; } .ui-icon-alert { background-position: 0 -144px; } .ui-icon-info { background-position: -16px -144px; } .ui-icon-notice { background-position: -32px -144px; } .ui-icon-help { background-position: -48px -144px; } .ui-icon-check { background-position: -64px -144px; } .ui-icon-bullet { background-position: -80px -144px; } .ui-icon-radio-off { background-position: -96px -144px; } .ui-icon-radio-on { background-position: -112px -144px; } .ui-icon-pin-w { background-position: -128px -144px; } .ui-icon-pin-s { background-position: -144px -144px; } .ui-icon-play { background-position: 0 -160px; } .ui-icon-pause { background-position: -16px -160px; } .ui-icon-seek-next { background-position: -32px -160px; } .ui-icon-seek-prev { background-position: -48px -160px; } .ui-icon-seek-end { background-position: -64px -160px; } .ui-icon-seek-first { background-position: -80px -160px; } .ui-icon-stop { background-position: -96px -160px; } .ui-icon-eject { background-position: -112px -160px; } .ui-icon-volume-off { background-position: -128px -160px; } .ui-icon-volume-on { background-position: -144px -160px; } .ui-icon-power { background-position: 0 -176px; } .ui-icon-signal-diag { background-position: -16px -176px; } .ui-icon-signal { background-position: -32px -176px; } .ui-icon-battery-0 { background-position: -48px -176px; } .ui-icon-battery-1 { background-position: -64px -176px; } .ui-icon-battery-2 { background-position: -80px -176px; } .ui-icon-battery-3 { background-position: -96px -176px; } .ui-icon-circle-plus { background-position: 0 -192px; } .ui-icon-circle-minus { background-position: -16px -192px; } .ui-icon-circle-close { background-position: -32px -192px; } .ui-icon-circle-triangle-e { background-position: -48px -192px; } .ui-icon-circle-triangle-s { background-position: -64px -192px; } .ui-icon-circle-triangle-w { background-position: -80px -192px; } .ui-icon-circle-triangle-n { background-position: -96px -192px; } .ui-icon-circle-arrow-e { background-position: -112px -192px; } .ui-icon-circle-arrow-s { background-position: -128px -192px; } .ui-icon-circle-arrow-w { background-position: -144px -192px; } .ui-icon-circle-arrow-n { background-position: -160px -192px; } .ui-icon-circle-zoomin { background-position: -176px -192px; } .ui-icon-circle-zoomout { background-position: -192px -192px; } .ui-icon-circle-check { background-position: -208px -192px; } .ui-icon-circlesmall-plus { background-position: 0 -208px; } .ui-icon-circlesmall-minus { background-position: -16px -208px; } .ui-icon-circlesmall-close { background-position: -32px -208px; } .ui-icon-squaresmall-plus { background-position: -48px -208px; } .ui-icon-squaresmall-minus { background-position: -64px -208px; } .ui-icon-squaresmall-close { background-position: -80px -208px; } .ui-icon-grip-dotted-vertical { background-position: 0 -224px; } .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } .ui-icon-grip-solid-vertical { background-position: -32px -224px; } .ui-icon-grip-solid-horizontal { background-position: -48px -224px; } .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } .ui-icon-grip-diagonal-se { background-position: -80px -224px; } /* Misc visuals ----------------------------------*/ /* Corner radius */ .ui-corner-tl { -moz-border-radius-topleft: 0; -webkit-border-top-left-r= adius: 0; } .ui-corner-tr { -moz-border-radius-topright: 0; -webkit-border-top-right= -radius: 0; } .ui-corner-bl { -moz-border-radius-bottomleft: 0; -webkit-border-bottom-= left-radius: 0; } .ui-corner-br { -moz-border-radius-bottomright: 0; -webkit-border-bottom= -right-radius: 0; } .ui-corner-top { -moz-border-radius-topleft: 0; -webkit-border-top-left-= radius: 0; -moz-border-radius-topright: 0; -webkit-border-top-right-radi= us: 0; } .ui-corner-bottom { -moz-border-radius-bottomleft: 0; -webkit-border-bot= tom-left-radius: 0; -moz-border-radius-bottomright: 0; -webkit-border-bo= ttom-right-radius: 0; } .ui-corner-right { -moz-border-radius-topright: 0; -webkit-border-top-r= ight-radius: 0; -moz-border-radius-bottomright: 0; -webkit-border-bottom= -right-radius: 0; } .ui-corner-left { -moz-border-radius-topleft: 0; -webkit-border-top-left= -radius: 0; -moz-border-radius-bottomleft: 0; -webkit-border-bottom-left= -radius: 0; } .ui-corner-all { -moz-border-radius: 0; -webkit-border-radius: 0; } /* Overlays */ .ui-widget-overlay { background: #000000 url(images/ui-bg_flat_0_000000_= 40x100.png) 50% 50% repeat-x; opacity: .75;filter:Alpha(Opacity=3D75); }= .ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #00= 0000 url(images/ui-bg_flat_0_000000_40x100.png) 50% 50% repeat-x; opacit= y: .30;filter:Alpha(Opacity=3D30); -moz-border-radius: 8px; -webkit-bord= er-radius: 8px; }/* Accordion ----------------------------------*/ .ui-accordion .ui-accordion-header { cursor: pointer; position: relative= ; margin-top: 1px; zoom: 1; } .ui-accordion .ui-accordion-li-fix { display: inline; } .ui-accordion .ui-accordion-header-active { border-bottom: 0 !important;= } .ui-accordion .ui-accordion-header a { display: block; font-size: 1em; p= adding: .5em .5em .5em 2.2em; } .ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: = .5em; top: 50%; margin-top: -8px; } .ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0;= margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; ove= rflow: auto; display: none; } .ui-accordion .ui-accordion-content-active { display: block; }/* Datepic= ker ----------------------------------*/ .ui-datepicker { width: 17em; padding: .2em .2em 0; } .ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0= ; } .ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next {= position:absolute; top: 2px; width: 1.8em; height: 1.8em; } .ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-= next-hover { top: 1px; } .ui-datepicker .ui-datepicker-prev { left:2px; } .ui-datepicker .ui-datepicker-next { right:2px; } .ui-datepicker .ui-datepicker-prev-hover { left:1px; } .ui-datepicker .ui-datepicker-next-hover { right:1px; } .ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-n= ext span { display: block; position: absolute; left: 50%; margin-left: -= 8px; top: 50%; margin-top: -8px; } .ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8e= m; text-align: center; } .ui-datepicker .ui-datepicker-title select { float:left; font-size:1em; = margin:1px 0; } .ui-datepicker select.ui-datepicker-month-year {width: 100%;} .ui-datepicker select.ui-datepicker-month, = .ui-datepicker select.ui-datepicker-year { width: 49%;} .ui-datepicker .ui-datepicker-title select.ui-datepicker-year { float: r= ight; } .ui-datepicker table {width: 100%; font-size: .9em; border-collapse: col= lapse; margin:0 0 .4em; } .ui-datepicker th { padding: .7em .3em; text-align: center; font-weight:= bold; border: 0; } .ui-datepicker td { border: 0; padding: 1px; } .ui-datepicker td span, .ui-datepicker td a { display: block; padding: .= 2em; text-align: right; text-decoration: none; } .ui-datepicker .ui-datepicker-buttonpane { background-image: none; margi= n: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-b= ottom: 0; } .ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: = .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:aut= o; overflow:visible; } .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { = float:left; } /* with multiple calendars */ .ui-datepicker.ui-datepicker-multi { width:auto; } .ui-datepicker-multi .ui-datepicker-group { float:left; } .ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 au= to .4em; } .ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } .ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } .ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { b= order-left-width:0; } .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {= border-left-width:0; } .ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } .ui-datepicker-row-break { clear:both; width:100%; } /* RTL support */ .ui-datepicker-rtl { direction: rtl; } .ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } .ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } .ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }= .ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }= .ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } .ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-curren= t { float:right; } .ui-datepicker-rtl .ui-datepicker-group { float:right; } .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { bor= der-right-width:0; border-left-width:1px; } .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { b= order-right-width:0; border-left-width:1px; } /* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ .ui-datepicker-cover { display: none; /*sorry for IE5*/ display/**/: block; /*sorry for IE5*/ position: absolute; /*must have*/ z-index: -1; /*must have*/ filter: mask(); /*must have*/ top: -4px; /*must have*/ left: -4px; /*must have*/ width: 200px; /*must have*/ height: 200px; /*must have*/ }/* Dialog ----------------------------------*/ .ui-dialog { position: relative; padding: 0; width: 300px; } .ui-dialog .ui-dialog-titlebar { padding: .75em; position: relative; } .ui-dialog .ui-dialog-title { float: left; margin: 0; } = .ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .75em;= top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px;= } .ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px;= } .ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titleb= ar-close:focus { padding: 0; } .ui-dialog .ui-dialog-content { border: 0; padding: .5em 1em; background= : none; overflow: auto; zoom: 1; } .ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0= 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em= .4em; } .ui-dialog .ui-dialog-buttonpane button { float: right; margin: .5em .4e= m .5em 0; cursor: pointer; padding: .2em .6em .3em .6em; line-height: 1.= 4em; width:auto; overflow:visible; } .ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bot= tom: 3px; } .ui-draggable .ui-dialog-titlebar { cursor: move; } /* Progressbar ----------------------------------*/ .ui-progressbar { height:2em; text-align: left; } .ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }/* Re= sizable ----------------------------------*/ .ui-resizable { position: relative;} .ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 9999= 9; display: block;} .ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-= resizable-handle { display: none; } .ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px;= left: 0px; } .ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5= px; left: 0px; } .ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0px; h= eight: 100%; } .ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0px; he= ight: 100%; } .ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: = 1px; bottom: 1px; } .ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5p= x; bottom: -5px; } .ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5p= x; top: -5px; } .ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5= px; top: -5px;}/* Slider ----------------------------------*/ .ui-slider { position: relative; text-align: left; } .ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.= 2em; height: 1.2em; cursor: default; } .ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size:= .7em; display: block; border: 0; } .ui-slider-horizontal { height: .8em; } .ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em= ; } .ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } .ui-slider-horizontal .ui-slider-range-min { left: 0; } .ui-slider-horizontal .ui-slider-range-max { right: 0; } .ui-slider-vertical { width: .8em; height: 100px; } .ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; mar= gin-bottom: -.6em; } .ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } .ui-slider-vertical .ui-slider-range-min { bottom: 0; } .ui-slider-vertical .ui-slider-range-max { top: 0; }/* Tabs ----------------------------------*/ .ui-tabs { padding: .2em; zoom: 1; } .ui-tabs .ui-tabs-nav { list-style: none; position: relative; padding: .= 2em .2em 0; } .ui-tabs .ui-tabs-nav li { position: relative; float: left; border-botto= m-width: 0 !important; margin: 0 .2em -1px 0; padding: 0; } .ui-tabs .ui-tabs-nav li a { float: left; text-decoration: none; padding= : .5em 1em; } .ui-tabs .ui-tabs-nav li.ui-tabs-selected { padding-bottom: 1px; border-= bottom-width: 0; } .ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui= -state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { curs= or: text; } .ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li= .ui-tabs-selected a { cursor: pointer; } /* first selector in group seem= s obsolete, but required to overcome bug in Opera applying cursor: text = overall if defined elsewhere... */ .ui-tabs .ui-tabs-panel { padding: 1em 1.4em; display: block; border-wid= th: 0; background: none; } .ui-tabs .ui-tabs-hide { display: none !important; } ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline; filename=favicon.ico Content-Type: image/x-icon; name=favicon.ico Content-Location: http://en.wikinews.org/favicon.ico Content-Transfer-Encoding: Base64 AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2oEmAPTm3P/z3c3/79fF/+/Y xv/z3c3/9Obc/9qBJgDagSYA2oEmANqBJgDagSYAAAAAAAAAAAAAAAAA8+bc//je 0f/84NT/9cin/+WhYP/zyan//uDU//zg1P/43tH/8+bc/wAAAAAAAAAAAAAAAAAA AAAAAAAA793P//ne0P//49j//+XZ/+ipbv/agSb/4ZdN/+28jv//5dn//+PY//ne 0P/v3c//AAAAAAAAAADagSYA8+bb//ne0P/028v//OXW//Xfzf/koV//24Im/96L N//twpn/9uHQ//zl1//028v/+d7Q//Pm3P8AAAAAAAAAAPje0f//5Nj//OXW/+3V vv/koVz/34kr/+OXRP/il0L/6Kdh//fawP/u1r7//OXX///k2f/43tH/2oEmAPTm 3P/84NT/+9vF//LVu//65tb/7sih/+uwbf/pqFn/5Z1D/+OUNf/noVT/9NOz//bh 0P//59r//ODU//Tm3P/z3c3/+tbB/9+QQf/tu4r///Dl//7w5v/24s7/8suc/+mm Tf/klSr/4Y8o/+eiVP/wxp3/+t3I//3g0f/z3c3/79XB/+iqcf/agSb/56dm//vs 4P/76dn/9dWu//DIkv/vypn/5502/+SVLf/qsG3/8c2q//HNrP/stYX/8NjH/+fB nv/gk0f/348+/9+MNP/34sz/7rt7/+yuWP/uu3T/8c6e//C/ev/0zZ7/+efV//Ta wv/kqW7/67OB/+/Yxv/pxKH/8b6T//XPrv/uv5D/9tWz/+utXP/pnzf/8L96//ba uP/2483//e7h///w5v/11bf/4ZVK//HAmP/z3c7/9Obc//zh1f//6dv/9eLS//nk 0v/wyp3/99aw//vq2//77eH//vHn//bn2P/66t7/8tS5/+SfWv/yyKf/9Obc/9qB JgD439H//+fa//zn2f/v3Mv/++ve///x5//77eH/++zf///x5//669//79zK//vl 1P/407f/9tzL/wAAAAAAAAAA8+bc//nf0f/03cz/++fY//Xj0v/56Nr/9+bY//bm 1//56Nr/9uLS//zm1//z2sb/+d7P//Pm3P/agSYAAAAAAAAAAADv3c//+d/R///o 2v//6tz/++fY//bj0//24tL/++fZ///q3P/94s//99nG/+/dzf8AAAAAAAAAAAAA AAAAAAAAAAAAAPPm3P/439L//OPV///n2v/649T/+ePT///n2v/849b/+ODS//Pm 3P8AAAAA897OAAAAAADhjygAAAAAANqBJgDagSYA4Y8oAPTm3P/z3s7/8NnH/+/Z x//z3s7/9Obc/wAAAAAAAAAAAAAAAAAAAAAAAAAA+B8AAOAHAADAAwAAgAEAAIAB AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAQAAgAEAAMADAADgBwAA+B8AAA== ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline Content-Type: image/png Content-Location: http://bits.wikimedia.org/skins-1.5/vector/images/page-base.png?1 Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAGXRFWHRTb2Z0d2Fy ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAANQTFRF9vb2AAsjqgAAAApJREFUCB1j YAAAAAIAAc/INeUAAAAASUVORK5CYII= ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline Content-Type: image/png Content-Location: http://bits.wikimedia.org/skins-1.5/vector/images/border.png?1 Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAGXRFWHRTb2Z0d2Fy ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAANQTFRFp9f5cVVvXwAAAApJREFUCB1j YAAAAAIAAc/INeUAAAAASUVORK5CYII= ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline Content-Type: image/png Content-Location: http://bits.wikimedia.org/skins-1.5/vector/images/page-fade.png?1 Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAAAEAAAAsCAMAAACT+SJTAAAAGXRFWHRTb2Z0d2Fy ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFdQTFRF+fn49/f2+/v89vf3/v79/v3+ /v/++fj4/fz89/f4+fr5/f79/Pv8+Pn59/b2+/v7/f38+Pj4+vr5+vr7/Pz8+fn5 9vb29/j4+vr6/v7+/f399/f3////vR8U6wAAADxJREFUeNotwgcOgCAURMEnKnaw Yr3/Od38kBm+zHObmoqBx8y07OIYiWxyyUrPITDRsHBKx2tKCgKJ9AOMswMINl/f OQAAAABJRU5ErkJggg== ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline Content-Type: image/png Content-Location: http://bits.wikimedia.org/skins-1.5/vector/images/tab-break.png?1 Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAAAEAAAAuCAMAAADeMYNYAAAAGXRFWHRTb2Z0d2Fy ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAGBQTFRFyuf7xeX6vuL6td76qtn5+vv7 9/n7rtr5/Pz84vH7sNv6weP60en7qNf56vX74PD77fb7zuj77/b8stz65/P78/j8 8ff83e/7uuD61ev79Pj75PL72Oz72+370+v7uN/6UiPZnwAAAD1JREFUeNpNwccB gCAABMFFMaMIZkz9d+k9naH+LbTUxMJKZGRg1pMGz8bNxcGDI4AY7cjY9SVn0pZK rfYfcHYCb27V9m8AAAAASUVORK5CYII= ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline Content-Type: image/png Content-Location: http://bits.wikimedia.org/skins-1.5/vector/images/tab-normal-fade.png?1 Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAAAEAAABkCAMAAABw8qpSAAAAGXRFWHRTb2Z0d2Fy ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFpQTFRF/P3++fv9+vz+6vT46vP49/r9 +Pv9p9f57PT6+/z+7PT59vr98/j77vb69Pn89Pn76vL48ff67fT68ff77vX6/v// 9fr86PL4+/3+7/b68vf7/f7+/v7/////unDFUAAAADpJREFUeNrFwoURg0AAALDg Li3SYvuvyR9LcInrZYvzcTzgrxIHUZDLNFa9QWs3+dh0Zl+lWiI1+iluKncJSLF7 CNkAAAAASUVORK5CYII= ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline Content-Type: image/png Content-Location: http://bits.wikimedia.org/skins-1.5/vector/images/tab-current-fade.png?1 Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAAAEAAABkAQMAAAB94sgjAAAAGXRFWHRTb2Z0d2Fy ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAANQTFRF////p8QbyAAAAAxJREFUCB1j YBgeAAAAyAABP2UdiQAAAABJRU5ErkJggg== ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline Content-Type: image/png Content-Location: http://bits.wikimedia.org/skins-1.5/vector/images/search-fade.png?1 Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAAAEAAAAQBAMAAAAlsQiEAAAAGXRFWHRTb2Z0d2Fy ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACpQTFRF9vf3/v/++fr5/Pv8+/v7/f38 +Pj4+fn59vb2+vr6/v7+/f399/f3////Hp8+5gAAACVJREFUCNdjaGBoYDjAkACE BQwKDBMYHBgMGAIYNgDhAoYLDBcAdIAIAfO0JnYAAAAASUVORK5CYII= ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline Content-Type: image/png Content-Location: http://bits.wikimedia.org/skins-1.5/vector/images/search-ltr.png?1 Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAAAwAAAANCAAAAAC4QtCeAAAAGXRFWHRTb2Z0d2Fy ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAP9bkSK1AAAAaklEQVQI12P4 ///u3NrauXf/AwHD//05YLAfxLmbl7/n48c9+Xn3gZxJYDGg/BQgpyznC4jzJacM mVOMrgxowMFPnw5CDIAZnbMLxAFaWl09txrEY/gPAe87gTwY5//PmTmr4Jz/f699 BgAmIHmp1XxJagAAAABJRU5ErkJggg== ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline Content-Type: image/png Content-Location: http://bits.wikimedia.org/skins-1.5/vector/images/portal-break.png?1 Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAAIwAAAABCAMAAAA7MLYKAAAAGXRFWHRTb2Z0d2Fy ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEtQTFRF29vb2tra4ODg6urq5OTk4uLi 6+vr7e3t7Ozs8PDw5+fn4+Pj4eHh3d3d39/f6Ojo5eXl6enp8fHx8/Pz8vLy7+/v 3Nzc2dnZ2NjYnErj7QAAAD1JREFUeNq0wQUBACAMALDj7hf6JyUFGxzEnYhC9GaN PG1xVffGDErk/iCigLl1XV2xM49lfAxEaSM+AQYA9HMKuv4liFQAAAAASUVORK5C YII= ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline Content-Type: image/png Content-Location: http://bits.wikimedia.org/skins-1.5/vector/images/bullet-icon.png?1 Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAAAUAAAANCAMAAABW4lS6AAAAGXRFWHRTb2Z0d2Fy ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAZQTFRFAFKM////QIUK9QAAAAJ0Uk5T /wDltzBKAAAAGklEQVR42mJgBAEGokgGBjBGBxBxsBqAAAMACHwALd5r8ygAAAAA SUVORK5CYII= ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline Content-Type: image/png Content-Location: http://bits.wikimedia.org/skins-1.5/vector/images/external-link-ltr-icon.png?2 Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAMAAAC67D+PAAAAGXRFWHRTb2Z0d2Fy ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAGBQTFRF////AGb/AGbMmcz/M5nMZpnM ////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7feQVwAAAAd0Uk5T//////// ABpLA0YAAAA6SURBVHjaJMtBDgBABARBs4P/P3kbfZCKEE3aAmUFLVu5fCQfGQ7n ciTV0GW9zp4Ds+B5SMcLfgEGADSKAPVZzedhAAAAAElFTkSuQmCC ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline Content-Type: image/png Content-Location: http://bits.wikimedia.org/skins-1.5/vector/images/lock-icon.png?2 Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAMAAAC67D+PAAAAGXRFWHRTb2Z0d2Fy ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADBQTFRF8+JXpJMI//GB5NNI9ONY6urq +Odc//i78N9U795T6dhN28tJ/+5jsbKwiIqF////GRZMogAAABB0Uk5T//////// ////////////AOAjXRkAAABCSURBVHjabMxLDgAhCANQdHQcP7T3v63UhashafKg CUbSAThpkteIqEvsQdUaN2Ks1lafOMz5vUz2w/I9h/fDFmAADPcEmtmwR7AAAAAA SUVORK5CYII= ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline Content-Type: image/png Content-Location: http://bits.wikimedia.org/skins-1.5/vector/images/user-icon.png?1 Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAAAoAAAALCAMAAABxsOwqAAAAGXRFWHRTb2Z0d2Fy ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAGBQTFRF78mOboqv0K93R2uZ4a1a5rp2 N2mnMmGd/Pr4k6zMMFySTXWr2Jg157Vn4Zst9unUl6a836ZMr7CwooVQPXGwpLnW 5KQ/vMne+O/gXXiV6+zt5Orx1t7n7/Dwgpm5////xZOJMQAAACB0Uk5T//////// /////////////////////////////////wBcXBvtAAAAY0lEQVR42hzKSQKAIAwE wWAMQUBBQdzN/38p0pepw4DI3vVzH0RADBCNpTOVYaZAxYefZaQyNZplqrXDeiTv 07EJ3C67uGR0F7yo9bAyYwSFrJ1iywoi19HW2gjPiy11fgIMAJ51Bh79zDO4AAAA AElFTkSuQmCC ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline; filename=main-ltr.css Content-Type: text/css; charset=UTF-8; name=main-ltr.css Content-Location: http://bits.wikimedia.org/skins-1.5/vector/main-ltr.css?281z67 Content-Transfer-Encoding: 8bit /* * main-rtl.css is automatically generated using CSSJanus, a python script for * creating RTL versions of otherwise LTR stylesheets. * * You may download the tool to rebuild this stylesheet * http://code.google.com/p/cssjanus/ * * An online version of this tool can be used at: * http://cssjanus.commoner.com/ * * The following command is used to generate the RTL version of this file * ./cssjanus.py --swap_ltr_rtl_in_url < main-ltr.css > main-rtl.css * * Any rules which should not be flipped should be prepended with @noflip in * a comment block. */ /* Framework */ html, body { height: 100%; margin: 0; padding: 0; font-family: sans-serif; font-size: 1em; } body { background-color: #f3f3f3; background-image: url(images/page-base.png?1); } /* Content */ #content { margin-left: 10em; padding: 1em; background-image: url(images/border.png?1); background-position: top left; background-repeat: repeat-y; background-color: white; } /* Head */ #page-base { height: 5em; background-color: white; background-image: url(images/page-fade.png?1); background-position: bottom left; background-repeat: repeat-x; } #head-base { margin-top: -5em; margin-left: 10em; height: 5em; background-image: url(images/border.png?1); background-position: bottom left; background-repeat: repeat-x; } #head { position: absolute; top: 0; right: 0; width: 100%; } #head h5 { margin: 0; padding: 0; } /* Hide empty portlets */ div.emptyPortlet { display: none; } /* Personal */ #p-personal { position: absolute; top: 0; margin-left: 10em; right: 0.75em; } #p-personal h5 { display: none; } #p-personal ul { list-style: none; margin: 0; padding: 0; } /* @noflip */ #p-personal li { line-height: 1.125em; float: left; } #p-personal li { margin-left: 0.75em; margin-top: 0.5em; font-size: 0.75em; } /* Navigation Containers */ #left-navigation { position: absolute; left: 10em; top: 2.5em; } #right-navigation { float: right; margin-top: 2.5em; } /* Navigation Labels */ div.vectorTabs h5, div.vectorMenu h5 span { display: none; } /* Namespaces and Views */ /* @noflip */ div.vectorTabs { float: left; } div.vectorTabs { background-image: url(images/tab-break.png?1); background-position: bottom left; background-repeat: no-repeat; padding-left: 1px; } /* @noflip */ div.vectorTabs ul { float: left; } div.vectorTabs ul { height: 100%; list-style: none; margin: 0; padding: 0; } /* @noflip */ div.vectorTabs ul li { float: left; } /* OVERRIDDEN BY COMPLIANT BROWSERS */ div.vectorTabs ul li { line-height: 1.125em; display: inline-block; height: 100%; margin: 0; padding: 0; background-color: #f3f3f3; background-image: url(images/tab-normal-fade.png?1); background-position: bottom left; background-repeat: repeat-x; white-space:nowrap; } /* IGNORED BY IE6 */ div.vectorTabs ul > li { display: block; } div.vectorTabs li.selected { background-image: url(images/tab-current-fade.png?1); } /* OVERRIDDEN BY COMPLIANT BROWSERS */ div.vectorTabs li a { display: inline-block; height: 2.5em; padding-left: 0.4em; padding-right: 0.4em; background-image: url(images/tab-break.png?1); background-position: bottom right; background-repeat: no-repeat; } div.vectorTabs li a, div.vectorTabs li a span { color: #0645ad; cursor: pointer; } div.vectorTabs li a span { font-size: 0.8em; } /* IGNORED BY IE6 */ div.vectorTabs li > a { display: block; } /* OVERRIDDEN BY COMPLIANT BROWSERS */ div.vectorTabs a span { display: inline-block; padding-top: 1.25em; } /* IGNORED BY IE6 */ /* @noflip */ div.vectorTabs a > span { float: left; display: block; } div.vectorTabs li.selected a, div.vectorTabs li.selected a span, div.vectorTabs li.selected a:visited div.vectorTabs li.selected a:visited span { color: #333333; text-decoration: none; } div.vectorTabs li.new a, div.vectorTabs li.new a span, div.vectorTabs li.new a:visited, div.vectorTabs li.new a:visited span { color: #a55858; } /* Variants and Actions */ /* @noflip */ div.vectorMenu { direction: ltr; float: left; background-image: url(images/arrow-down-icon.png?1); background-position: 100% 60%; background-repeat: no-repeat; cursor: pointer; } /* @noflip */ body.rtl div.vectorMenu { direction: rtl; } /* OVERRIDDEN BY COMPLIANT BROWSERS */ /* @noflip */ #head div.vectorMenu h5 { float: left; background-image: url(images/tab-break.png?1); background-repeat: no-repeat; } /* IGNORED BY IE6 */ #head div.vectorMenu > h5 { background-image: none; } #head div.vectorMenu h5 { background-position: bottom left; margin-left: -1px; } #head div.vectorMenu h4 { display: inline-block; float: left; font-size: 0.8em; padding-left: 0.5em; padding-top: 1.375em; font-weight: normal; border: none; } /* OVERRIDDEN BY COMPLIANT BROWSERS */ /* @noflip */ div.vectorMenu h5 a { display: inline-block; width: 24px; height: 2.5em; text-decoration: none; background-image: url(images/tab-break.png?1); background-repeat: no-repeat; } div.vectorMenu h5 a{ background-position: bottom right; } /* IGNORED BY IE6 */ div.vectorMenu h5 > a { display: block; } div.vectorMenu div.menu { position: relative; display: none; clear: both; text-align: left; } /* OVERRIDDEN BY COMPLIANT BROWSERS */ /* @noflip */ body.rtl div.vectorMenu div.menu { margin-left: 24px; } /* IGNORED BY IE6 */ /* @noflip */ body.rtl div.vectorMenu > div.menu { margin-left: auto; } /* Fixes old versions of FireFox */ /* @noflip */ body.rtl div.vectorMenu > div.menu, x:-moz-any-link { margin-left: 23px; } div.vectorMenu:hover div.menu { display: block; } div.vectorMenu ul { position: absolute; background-color: white; border: solid 1px silver; border-top-width: 0; list-style: none; list-style-image: none; list-style-type: none; padding: 0; margin: 0; margin-left: -1px; text-align: left; } /* Fixes old versions of FireFox */ div.vectorMenu ul, x:-moz-any-link { min-width: 5em; } /* Returns things back to normal in modern versions of FireFox */ div.vectorMenu ul, x:-moz-any-link, x:default { min-width: 0; } div.vectorMenu li { padding: 0; margin: 0; text-align: left; line-height: 1em; } /* OVERRIDDEN BY COMPLIANT BROWSERS */ div.vectorMenu li a { display: inline-block; padding: 0.5em; white-space: nowrap; } /* IGNORED BY IE6 */ div.vectorMenu li > a { display: block; } div.vectorMenu li a { color: #0645ad; cursor: pointer; font-size: 0.8em; } div.vectorMenu li.selected a, div.vectorMenu li.selected a:visited { color: #333333; text-decoration: none; } /* Search */ #p-search h5 { display: none; } /* @noflip */ #p-search { float: left; } #p-search { margin-right: 0.5em; margin-left: 0.5em; } #p-search form, #p-search input { margin: 0; margin-top: 0.4em; } #simpleSearch { margin-top: 0.5em; position: relative; border: solid 1px #AAAAAA; background-color: white; background-image: url(images/search-fade.png?1); background-position: top left; background-repeat: repeat-x; } #simpleSearch label { font-size: 0.8em; top: 0.25em; } #simpleSearch input#searchInput { margin: 0; border-width: 0; padding: 0.25em; line-height: 1em; font-size: 0.8em; width: 14em; background-color: transparent; } /* OVERRIDDEN BY COMPLIANT BROWSERS */ #simpleSearch button#searchButton { margin: 0; padding: 0; width: 1.75em; height: 1.5em; border: none; cursor: pointer; background-color: transparent; background-image: url(images/search-ltr.png?1); background-position: center center; background-repeat: no-repeat; } /* IGNORED BY IE6 */ #simpleSearch > button#searchButton { height: 100%; } .suggestions-special .special-label { font-size: 0.8em; color: gray; } .suggestions-special .special-query { color: black; font-style: italic; } .suggestions-special .special-hover { background-color: silver; } /* Panel */ #panel { position: absolute; top: 160px; padding-top: 1em; width: 10em; left: 0; } #panel div.portal { padding-bottom: 1.5em; } #panel div.portal h5 { font-weight: normal; color: #444444; padding: 0.25em; padding-top: 0; padding-left: 1.75em; cursor: default; border: none; font-size: 0.75em; } #panel div.portal div.body { margin: 0; padding-top: 0.5em; margin-left: 1.25em; background-image: url(images/portal-break.png?1); background-repeat: no-repeat; background-position: top left; } #panel div.portal div.body ul { list-style: none; list-style-image: none; list-style-type: none; padding: 0; margin: 0; } #panel div.portal div.body ul li { line-height: 1.125em; padding: 0; padding-bottom: 0.5em; margin: 0; overflow: hidden; font-size: 0.75em; } #panel div.portal div.body ul li a { color: #0645ad; } #panel div.portal div.body ul li a:visited { color: #0b0080; } /* Footer */ #footer { margin-left: 10em; margin-top: 0; padding: 0.75em; background-image: url(images/border.png?1); background-position: top left; background-repeat: repeat-x; } #footer ul { list-style: none; list-style-image: none; list-style-type: none; margin: 0; padding: 0; } #footer ul li { margin: 0; padding: 0; padding-top: 0.5em; padding-bottom: 0.5em; color: #333333; font-size: 0.7em; } #footer #footer-icons { float: right; } /* @noflip */ body.ltr #footer #footer-places { float: left; } #footer #footer-info li { line-height: 1.4em; } #footer #footer-icons li { float: left; margin-left: 0.5em; line-height: 2em; } #footer #footer-places li { float: left; margin-right: 1em; line-height: 2em; } /* Logo */ #p-logo { position: absolute; top: -160px; left: 0; width: 10em; height: 160px; } #p-logo a { display: block; width: 10em; height: 160px; background-repeat: no-repeat; background-position: center center; text-decoration: none; } /* * * The following code is highly modified from monobook. It would be nice if the * preftoc id was more human readable like preferences-toc for instance, * howerver this would require backporting the other skins. */ /* Preferences */ #preftoc { /* Tabs */ width: 100%; float: left; clear: both; margin: 0 !important; padding: 0 !important; background-image: url(images/preferences-break.png?1); background-position: bottom left; background-repeat: no-repeat; } #preftoc li { /* Tab */ float: left; margin: 0; padding: 0; padding-right: 1px; height: 2.25em; white-space: nowrap; list-style-type: none; list-style-image: none; background-image: url(images/preferences-break.png?1); background-position: bottom right; background-repeat: no-repeat; } /* IGNORED BY IE6 */ #preftoc li:first-child { margin-left: 1px; } #preftoc a, #preftoc a:active { display: inline-block; position: relative; color: #0645ad; padding: 0.5em; text-decoration: none; background-image: none; font-size: 0.9em; } #preftoc a:hover { text-decoration: underline; } #preftoc li.selected a { background-image: url(images/preferences-fade.png?1); background-position: bottom; background-repeat: repeat-x; color: #333333; text-decoration: none; } #preferences { float: left; width: 100%; margin: 0; margin-top: -2px; clear: both; border: solid 1px #cccccc; background-color: #f9f9f9; background-image: url(images/preferences-base.png?1); } #preferences fieldset.prefsection { border: none; padding: 0; margin: 1em; } #preferences fieldset.prefsection fieldset { border: none; border-top: solid 1px #cccccc; } #preferences legend { color: #666666; } #preferences fieldset.prefsection legend.mainLegend { display: none; } #preferences td { padding-left: 0.5em; padding-right: 0.5em; } #preferences td.htmlform-tip { font-size: x-small; padding: .2em 2em; color: #666666; } #preferences div.mw-prefs-buttons { padding: 1em; } #preferences div.mw-prefs-buttons input { margin-right: 0.25em; } /* * Styles for the user login and create account forms */ #userlogin, #userloginForm { border: solid 1px #cccccc; padding: 1.2em; margin: .5em; float: left; } #userlogin { min-width: 20em; max-width: 90%; width: 40em; } /* * * The following code is slightly modified from monobook * */ #content { line-height: 1.5em; } #bodyContent { font-size: 0.8em; } /* Links */ a { text-decoration: none; color: #0645ad; background: none; } a:visited { color: #0b0080; } a:active { color: #faa700; } a:hover { text-decoration: underline; } a.stub { color: #772233; } a.new, #p-personal a.new { color: #ba0000; } a.new:visited, #p-personal a.new:visited { color: #a55858; } /* Inline Elements */ img { border: none; vertical-align: middle; } hr { height: 1px; color: #aaa; background-color: #aaa; border: 0; margin: .2em 0 .2em 0; } /* Structural Elements */ h1, h2, h3, h4, h5, h6 { color: black; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; width: auto; } h1 { font-size: 188%; } h1 .editsection { font-size: 53%; } h2 { font-size: 150%; } h2 .editsection { font-size: 67%; } h3, h4, h5, h6 { border-bottom: none; font-weight: bold; } h3 { font-size: 132%; } h3 .editsection { font-size: 76%; font-weight: normal; } h4 { font-size: 116%; } h4 .editsection { font-size: 86%; font-weight: normal; } h5 { font-size: 100%; } h5 .editsection { font-weight: normal; } h6 { font-size: 80%; } h6 .editsection { font-size: 125%; font-weight: normal; } p { margin: .4em 0 .5em 0; line-height: 1.5em; } p img { margin: 0; } abbr, acronym, .explain { border-bottom: 1px dotted black; color: black; background: none; cursor: help; } q { font-family: Times, "Times New Roman", serif; font-style: italic; } /* Disabled for now blockquote { font-family: Times, "Times New Roman", serif; font-style: italic; }*/ pre, code, tt { font-family: monospace, sans-serif; } code { background-color: #f9f9f9; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #f9f9f9; line-height: 1.1em; } ul { line-height: 1.5em; list-style-type: square; margin: .3em 0 0 1.5em; padding: 0; list-style-image: url(images/bullet-icon.png?1); } ol { line-height: 1.5em; margin: .3em 0 0 3.2em; padding: 0; list-style-image: none; } li { margin-bottom: .1em; } dt { font-weight: bold; margin-bottom: .1em; } dl { margin-top: .2em; margin-bottom: .5em; } dd { line-height: 1.5em; margin-left: 2em; margin-bottom: .1em; } /* Tables */ table { font-size: 100%; color: black; /* we don't want the bottom borders of <h2>s to be visible through * floated tables */ background-color: white; } fieldset table { /* but keep table layouts in forms clean... */ background: none; } /* Forms */ fieldset { border: 1px solid #2f6fab; margin: 1em 0 1em 0; padding: 0 1em 1em; line-height: 1.5em; } fieldset.nested { margin: 0 0 0.5em 0; padding: 0 0.5em 0.5em; } legend { padding: .5em; font-size: 95%; } form { border: none; margin: 0; } textarea { width: 100%; padding: .1em; } select { vertical-align: top; } /* Table of Contents */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #f9f9f9; padding: 5px; font-size: 95%; } #toc h2, .toc h2 { display: inline; border: none; padding: 0; font-size: 100%; font-weight: bold; } #toc #toctitle, .toc #toctitle, #toc .toctitle, .toc .toctitle { text-align: center; } #toc ul, .toc ul { list-style-type: none; list-style-image: none; margin-left: 0; padding-left: 0; text-align: left; } #toc ul ul, .toc ul ul { margin: 0 0 0 2em; } #toc .toctoggle, .toc .toctoggle { font-size: 94%; } /* Images */ div.floatright, table.floatright { clear: right; float: right; position: relative; margin: 0 0 .5em .5em; border: 0; } div.floatright p { font-style: italic; } div.floatleft, table.floatleft { float: left; clear: left; position: relative; margin: 0 .5em .5em 0; border: 0; } div.floatleft p { font-style: italic; } /* Thumbnails */ div.thumb { margin-bottom: .5em; border-style: solid; border-color: white; width: auto; background-color: transparent; } div.thumbinner { border: 1px solid #ccc; padding: 3px !important; background-color: #f9f9f9; font-size: 94%; text-align: center; overflow: hidden; } html .thumbimage { border: 1px solid #ccc; } html .thumbcaption { border: none; text-align: left; line-height: 1.4em; padding: 3px !important; font-size: 94%; } div.magnify { float: right; border: none !important; background: none !important; } div.magnify a, div.magnify img { display: block; border: none !important; background: none !important; } div.tright { clear: right; float: right; border-width: .5em 0 .8em 1.4em; } div.tleft { float: left; clear: left; margin-right: .5em; border-width: .5em 1.4em .8em 0; } img.thumbborder { border: 1px solid #dddddd; } .hiddenStructure { display: none; } /* Warning */ .mw-warning { margin-left: 50px; margin-right: 50px; text-align: center; } /* User Message */ .usermessage { background-color: #ffce7b; border: 1px solid #ffa500; color: black; font-weight: bold; margin: 2em 0 1em; padding: .5em 1em; vertical-align: middle; } /* Site Notice */ #siteNotice { text-align: center; font-size: 0.8em; margin: 0; } #siteNotice div, #siteNotice p { margin: 0; padding: 0; margin-bottom: 0.9em; } /* Categories */ .catlinks { border: 1px solid #aaa; background-color: #f9f9f9; padding: 5px; margin-top: 1em; clear: both; } /* Sub-navigation */ #siteSub { display: none; } #jump-to-nav { display: none; } #contentSub, #contentSub2 { font-size: 84%; line-height: 1.2em; margin: 0 0 1.4em 1em; color: #7d7d7d; width: auto; } span.subpages { display: block; } /* Emulate Center */ .center { width: 100%; text-align: center; } *.center * { margin-left: auto; margin-right: auto; } /* Small for tables and similar */ .small, .small * { font-size: 94%; } table.small { font-size: 100%; } /* Edge Cases for Content */ h1, h2 { margin-bottom: .6em; } h3, h4, h5 { margin-bottom: .3em; } #firstHeading { padding-top: 0; margin-top: 0; padding-top: 0; margin-bottom: 0.1em; line-height: 1.2em; font-size: 1.6em; padding-bottom: 0; } #content a.external, #content a[href ^="gopher://"] { background: url(images/external-link-ltr-icon.png?2) center right no-repeat; padding: 0 13px 0 0; } #content a[href ^="https://"], .link-https { background: url(images/lock-icon.png?2) center right no-repeat; padding: 0 13px 0 0; } #content a[href ^="mailto:"], .link-mailto { background: url(images/mail-icon.png?2) center right no-repeat; padding: 0 13px 0 0; } #content a[href ^="news://"] { background: url(images/news-icon.png?2) center right no-repeat; padding: 0 13px 0 0; } #content a[href ^="ftp://"], .link-ftp { background: url(images/file-icon.png?2) center right no-repeat; padding: 0 13px 0 0; } #content a[href ^="irc://"], #content a.extiw[href ^="irc://"], .link-irc { background: url(images/talk-icon.png?2) center right no-repeat; padding: 0 13px 0 0; } #content a.external[href $=".ogg"], #content a.external[href $=".OGG"], #content a.external[href $=".mid"], #content a.external[href $=".MID"], #content a.external[href $=".midi"], #content a.external[href $=".MIDI"], #content a.external[href $=".mp3"], #content a.external[href $=".MP3"], #content a.external[href $=".wav"], #content a.external[href $=".WAV"], #content a.external[href $=".wma"], #content a.external[href $=".WMA"], .link-audio { background: url("images/audio-icon.png?2") center right no-repeat; padding: 0 13px 0 0; } #content a.external[href $=".ogm"], #content a.external[href $=".OGM"], #content a.external[href $=".avi"], #content a.external[href $=".AVI"], #content a.external[href $=".mpeg"], #content a.external[href $=".MPEG"], #content a.external[href $=".mpg"], #content a.external[href $=".MPG"], .link-video { background: url("images/video-icon.png?2") center right no-repeat; padding: 0 13px 0 0; } #content a.external[href $=".pdf"], #content a.external[href $=".PDF"], #content a.external[href *=".pdf#"], #content a.external[href *=".PDF#"], #content a.external[href *=".pdf?"], #content a.external[href *=".PDF?"], .link-document { background: url("images/document-icon.png?2") center right no-repeat; padding: 0 13px 0 0; } /* Interwiki Styling (Disabled) */ #content a.extiw, #content a.extiw:active { color: #36b; background: none; padding: 0; } #content a.external { color: #36b; } #content .printfooter { display: none; } /* Icon for Usernames */ #pt-userpage, #pt-anonuserpage, #pt-login { background: url(images/user-icon.png?1) left top no-repeat; padding-left: 15px !important; text-transform: none; } .toccolours { border: 1px solid #aaa; background-color: #f9f9f9; padding: 5px; font-size: 95%; } #bodyContent { position: relative; width: 100%; } #mw-js-message { font-size: 0.8em; } div#bodyContent { line-height: 1.5em; } /* Watch/Unwatch Icon Styling */ #ca-unwatch.icon, #ca-watch.icon { margin-right:1px; } #ca-unwatch.icon a, #ca-watch.icon a { margin: 0; padding: 0; outline: none; display: block; width: 26px; height: 2.5em; } #ca-unwatch.icon a { background-image: url(images/watch-icons.png?1); background-position: -43px 60%; } #ca-watch.icon a { background-image: url(images/watch-icons.png?1); background-position: 5px 60%; } #ca-unwatch.icon a:hover { background-image: url(images/watch-icons.png?1); background-position: -67px 60%; } #ca-watch.icon a:hover { background-image: url(images/watch-icons.png?1); background-position: -19px 60%; } #ca-unwatch.icon a.loading, #ca-watch.icon a.loading { background-image: url(images/watch-icon-loading.gif?1); background-position: center 60%; } #ca-unwatch.icon a span, #ca-watch.icon a span { display: none; } div.vectorTabs ul { background-image:url(images/tab-break.png?1); background-position:right bottom; background-repeat:no-repeat; } ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline; filename=shared.css Content-Type: text/css; charset=UTF-8; name=shared.css Content-Location: http://bits.wikimedia.org/skins-1.5/common/shared.css?281z67 Content-Transfer-Encoding: 8bit /** * CSS in this file is used by *all* skins (that have any CSS at all). Be * careful what you put in here, since what looks good in one skin may not in * another, but don't ignore the poor non-Monobook users either. */ /* Colored watchlist and recent changes numbers */ .mw-plusminus-pos { color: #006400; } /* dark green */ .mw-plusminus-neg { color: #8b0000; } /* dark red */ .mw-plusminus-null { color: #aaa; } /* gray */ /* Comment and username portions of RC entries */ span.comment { font-style: italic; } span.changedby { font-size: 95%; } /* Math */ .texvc { direction: ltr; unicode-bidi: embed; } img.tex { vertical-align: middle; } span.texhtml { font-family: serif; } /* add a bit of margin space between the preview and the toolbar */ /* this replaces the ugly <p><br /></p> we used to insert into the page source */ #wikiPreview.ontop { margin-bottom: 1em; } /* Stop floats from intruding into edit area in previews */ #editform, #toolbar, #wpTextbox1 { clear: both; } div#mw-js-message { margin: 1em 5%; padding: 0.5em 2.5%; border: solid 1px #ddd; background-color: #fcfcfc; } /* Edit section links */ .editsection { float: right; margin-left: 5px; } /** * File histories */ h2#filehistory { clear: both; } table.filehistory th, table.filehistory td { vertical-align:top; } table.filehistory th { text-align: left; } table.filehistory td.mw-imagepage-filesize, table.filehistory th.mw-imagepage-filesize { white-space:nowrap; } table.filehistory td.filehistory-selected { font-weight: bold; } /* * rev_deleted stuff */ li span.deleted, span.history-deleted { text-decoration: line-through; color: #888; font-style: italic; } /** * Patrol stuff */ .not-patrolled { background-color: #ffa; } .unpatrolled { font-weight: bold; color: red; } div.patrollink { font-size: 75%; text-align: right; } /** * Forms */ body.ltr td.mw-label { text-align: right; } body.ltr td.mw-input { text-align: left; } body.ltr td.mw-submit { text-align: left; } body.rtl td.mw-label { text-align: left; } body.rtl td.mw-input { text-align: right; } body.rtl td.mw-submit { text-align: right; } td.mw-label { vertical-align: top; } .prefsection td.mw-label { width: 20%; } .prefsection table { width: 100%; } td.mw-submit { white-space: nowrap; } table.mw-htmlform-nolabel td.mw-label { width: 0 !important; } input#wpSummary { width: 80%; } /** * Image captions */ body.rtl .thumbcaption { text-align:right; } body.rtl .magnify { float:left; } body.ltr .thumbcaption { text-align:left; } body.ltr .magnify { float:right; } /** * Hidden categories */ .mw-hidden-cats-hidden { display: none; } .catlinks-allhidden { display: none; } /* Convenience links to edit block, delete and protect reasons */ p.mw-ipb-conveniencelinks, p.mw-protect-editreasons, p.mw-filedelete-editreasons, p.mw-delete-editreasons, p.mw-revdel-editreasons { font-size: 90%; float: right; } /* Search results */ .searchresults { } .searchresults p { margin-left: 0.4em; margin-top: 1em; margin-bottom: 1.2em; } div.searchresult { font-size: 95%; width:38em; } .mw-search-results { margin-left: 0.4em; } .mw-search-results li { padding-bottom: 1em; list-style:none; list-style-image:none; } .mw-search-results li a { font-size: 108%; } .mw-search-result-data { color: green; font-size: 97%; } .mw-search-formheader { background-color: #f3f3f3; margin-top: 1em; border: 1px solid silver; } .mw-search-formheader div.search-types { float:left; padding-left: 0.25em; } .rtl .mw-search-formheader div.search-types { float: right; } .mw-search-formheader div.search-types ul { margin: 0 !important; padding: 0 !important; list-style: none !important; } .mw-search-formheader div.search-types ul li { float: left; margin: 0; padding: 0; } .mw-search-formheader div.search-types ul li a { display: block; padding: 0.5em; } .mw-search-formheader div.search-types ul li.current a { color: #333333; cursor: default; } .mw-search-formheader div.search-types ul li.current a:hover { text-decoration: none; } .mw-search-formheader div.results-info { float: right; padding: 0.5em; padding-right: 0.75em; } .mw-search-formheader div.results-info ul { margin: 0 !important; padding: 0 !important; list-style: none !important; } .mw-search-formheader div.results-info ul li { float: right; margin: 0; padding: 0; } fieldset#mw-searchoptions { margin: 0; padding-left: 0.75em !important; padding-right: 0.75em !important; padding-bottom: 0.5em !important; padding-top: 0.5em !important; border: none; background-color: #f9f9f9; border: 1px solid silver !important; border-top-width: 0 !important; } fieldset#mw-searchoptions legend { display: none; } fieldset#mw-searchoptions h4 { padding: 0; margin: 0; float: left; } .rtl fieldset#mw-searchoptions h4 { float: right; } fieldset#mw-searchoptions div#mw-search-togglebox { float: right; } .rtl fieldset#mw-searchoptions div#mw-search-togglebox { float: left; } fieldset#mw-searchoptions div#mw-search-togglebox label { margin-right: 0.25em; } fieldset#mw-searchoptions div#mw-search-togglebox input { margin-left: 0.25em; } fieldset#mw-searchoptions table { float: left; margin-right: 3em; } fieldset#mw-searchoptions table td { padding-right: 1em; } .rtl fieldset#mw-searchoptions table td { padding-left: 1em; padding-right: 0; } body.rtl fieldset#mw-searchoptions table { margin-right: 0; margin-left: 3em; float: right; } fieldset#mw-searchoptions div.divider { clear: both; border-bottom: 1px solid #DDDDDD; padding-top: 0.5em; margin-bottom: 0.5em; } td#mw-search-menu { padding-left:6em; font-size:85%; } div#mw-search-interwiki { float: right; width: 18em; border-style: solid; border-color: #AAAAAA; border-width: 1px; margin-top: 2ex; } .rtl div#mw-search-interwiki { float: left; } div#mw-search-interwiki li { font-size: 95%; } .mw-search-interwiki-more { float: right; font-size: 90%; } .rtl .mw-search-interwiki-more { float: left; } div#mw-search-interwiki-caption { text-align: center; font-weight: bold; font-size: 95%; } .mw-search-interwiki-project { font-size: 97%; text-align: left; padding-left: 0.2em; padding-right: 0.15em; padding-bottom: 0.2em; padding-top: 0.15em; background-color:#ececec; border-top:1px solid #BBBBBB; } .rtl .mw-search-interwiki-project { text-align: right; } span.searchalttitle { font-size: 95%; } div.searchdidyoumean { font-size: 127%; margin-top: 0.8em; /* Note that this color won't affect the link, as desired. */ color: #c00; } div.searchdidyoumean em { font-weight: bold; } .searchmatch { font-weight: bold; } table#mw-search-top-table { background-color: transparent; } /* * Advanced PowerSearch box */ td#mw-search-togglebox { text-align: right; } table#mw-search-powertable { width:100%; } form#powersearch { clear: both; } /* * UserRights stuff */ .mw-userrights-disabled { color: #888; } table.mw-userrights-groups * td,table.mw-userrights-groups * th { padding-right: 1.5em; } /* * OpenSearch ajax suggestions */ .os-suggest { overflow: auto; overflow-x: hidden; position: absolute; top: 0px; left: 0px; width: 0px; background-color: white; background-color: Window; border-style: solid; border-color: #AAAAAA; border-width: 1px; z-index:99; font-size:95%; } table.os-suggest-results { font-size: 95%; cursor: pointer; border: 0; border-collapse: collapse; width: 100%; } .os-suggest-result, .os-suggest-result-hl { white-space: nowrap; background-color: white; background-color: Window; color: black; color: WindowText; padding: 2px; } .os-suggest-result-hl, .os-suggest-result-hl-webkit { background-color: #4C59A6; color: white; } .os-suggest-result-hl { /* System colors are misimplemented in Safari 3.0 and earlier, making highlighted text illegible... */ background-color: Highlight; color: HighlightText; } .os-suggest-toggle { position: relative; left: 1ex; font-size: 65%; } .os-suggest-toggle-def { position: absolute; top: 0px; left: 0px; font-size: 65%; visibility: hidden; } /* Page history styling */ /* the auto-generated edit comments */ .autocomment { color: gray; } #pagehistory .history-user { margin-left: 0.4em; margin-right: 0.2em; } #pagehistory span.minor { font-weight: bold; } #pagehistory li { border: 1px solid white; } #pagehistory li.selected { background-color: #f9f9f9; border: 1px dashed #aaa; } /** Generic minor/bot/newpage styling */ .newpage, .minor, .bot { font-weight: bold; } /* Special:Contributions styling */ .mw-uctop { font-weight: bold; } /* Special:ListGroupRights styling */ table.mw-listgrouprights-table tr { vertical-align: top; } .listgrouprights-revoked { text-decoration: line-through; } /* Special:Statistics styling */ td.mw-statistics-numbers { text-align: right; } /* Special:SpecialPages styling */ h4.mw-specialpagesgroup { background-color: #dcdcdc; padding: 2px; margin: .3em 0em 0em 0em; } .mw-specialpagerestricted { font-weight: bold; } #shared-image-dup, #shared-image-conflict { font-style: italic; } /* Special:EmailUser styling */ table.mw-emailuser-table { width: 98%; } td#mw-emailuser-sender, td#mw-emailuser-recipient { font-weight: bold; } /* Special:Allpages styling */ table.allpageslist { background-color: transparent; } table.mw-allpages-table-form, table.mw-allpages-table-chunk { background-color: transparent; width: 100%; } td.mw-allpages-alphaindexline { text-align: right; } td.mw-allpages-nav, p.mw-allpages-nav { text-align: right; font-size: smaller; margin-bottom: 1em; } table.mw-allpages-table-form tr { vertical-align: top; } /* Special:Prefixindex styling */ table#mw-prefixindex-list-table, table#mw-prefixindex-nav-table { width: 98%; background-color: transparent; } td#mw-prefixindex-nav-form { font-size: smaller; margin-bottom: 1em; text-align: right; vertical-align: top; } /* * Recreating deleted page warning * Reupload file warning * Page protection warning * incl. log entries for these warnings */ div.mw-warning-with-logexcerpt { padding: 3px; margin-bottom: 3px; border: 2px solid #2F6FAB; clear: both; } div.mw-warning-with-logexcerpt ul li { font-size: 90%; } /* (show/hide) revision deletion links */ span.mw-revdelundel-link, strong.mw-revdelundel-link { font-size: 90%; } span.mw-revdelundel-hidden, input.mw-revdelundel-hidden { visibility: hidden; } td.mw-revdel-checkbox, th.mw-revdel-checkbox { padding-right: 10px; text-align: center; } /* feed links */ a.feedlink { background: url("images/feed-icon.png") center left no-repeat; padding-left: 16px; } /* Plainlinks - this can be used to switch * off special external link styling */ .plainlinks a { background: none !important; padding: 0 !important; } /* wikitable class for skinning normal tables */ table.wikitable { margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; } .wikitable th, .wikitable td { border: 1px #aaa solid; padding: 0.2em; } .wikitable th { background: #f2f2f2; text-align: center; } .wikitable caption { font-weight: bold; } /* hide initially collapsed collapsable tables */ table.collapsed tr.collapsable { display: none; } /* success and error messages */ .success { color: green; font-size: larger; } .error { color: red; font-size: larger; } .errorbox, .successbox { font-size: larger; border: 2px solid; padding: .5em 1em; float: left; margin-bottom: 2em; color: #000; } .errorbox { border-color: red; background-color: #fff2f2; } .successbox { border-color: green; background-color: #dfd; } .errorbox h2, .successbox h2 { font-size: 1em; font-weight: bold; display: inline; margin: 0 .5em 0 0; border: none; } .visualClear { clear: both; } #mw_trackbacks { border: solid 1px #bbbbff; background-color: #eeeeff; padding: 0.2em; } /* Table pager (e.g. Special:Imagelist) - remove underlines from the navigation link - collapse borders - set the borders to outsets (similar to Special:Allmessages) - remove line wrapping for all td and th, set background color - restore line wrapping for the last two table cells (description and size) */ .TablePager { min-width: 80%; } .TablePager_nav a { text-decoration: none; } .TablePager { border-collapse: collapse; } .TablePager, .TablePager td, .TablePager th { border: 1px solid #aaaaaa; padding: 0 0.15em 0 0.15em; } .TablePager th { background-color: #eeeeff } .TablePager td { background-color: #ffffff } .TablePager tr:hover td { background-color: #eeeeff } .imagelist td, .imagelist th { white-space: nowrap } .imagelist .TablePager_col_links { background-color: #eeeeff } .imagelist .TablePager_col_img_description { white-space: normal } .imagelist th.TablePager_sort { background-color: #ccccff } /* Allmessages table */ #mw-allmessagestable .allmessages-customised td.am_default { background-color: #fcffc4; } #mw-allmessagestable tr.allmessages-customised:hover td.am_default { background-color: #faff90; } #mw-allmessagestable td.am_actual { background-color: #e2ffe2; } #mw-allmessagestable tr.allmessages-customised:hover + tr.allmessages-customised td.am_actual { background-color: #b1ffb1; } /* filetoc */ ul#filetoc { text-align: center; border: 1px solid #aaaaaa; background-color: #f9f9f9; padding: 5px; font-size: 95%; margin-bottom: 0.5em; margin-left: 0; margin-right: 0; } #filetoc li { display: inline; list-style-type: none; padding-right: 2em; } /* Classes for EXIF data display */ table.mw_metadata { font-size: 0.8em; margin-left: 0.5em; margin-bottom: 0.5em; width: 300px; } table.mw_metadata caption { font-weight: bold; } table.mw_metadata th { font-weight: normal; } table.mw_metadata td { padding: 0.1em; } table.mw_metadata { border: none; border-collapse: collapse; } table.mw_metadata td, table.mw_metadata th { text-align: center; border: 1px solid #aaaaaa; padding-left: 0.1em; padding-right: 0.1em; } table.mw_metadata th { background-color: #f9f9f9; } table.mw_metadata td { background-color: #fcfcfc; } /* Galleries */ table.gallery { border: 1px solid #ccc; margin: 2px; padding: 2px; background-color: white; } table.gallery tr { vertical-align: top; } table.gallery td { vertical-align: top; background-color: #f9f9f9; border: solid 2px white; } table.gallery caption { font-weight: bold; } div.gallerybox { margin: 2px; } div.gallerybox div.thumb { text-align: center; border: 1px solid #ccc; margin: 2px; } div.gallerytext { overflow: hidden; font-size: 94%; padding: 2px 4px; } table.mw-enhanced-rc { background: none; border:0; border-spacing:0; } td.mw-enhanced-rc { white-space:nowrap; padding:0; vertical-align:top; font-family:monospace } #mw-addcategory-prompt { display: inline; margin-left: 1em; } #mw-addcategory-prompt input { margin-left: 0.5em; margin-right: 0.5em; } .mw-remove-category { padding: 8px; background-image: url(images/remove.png); background-position: center center; background-repeat: no-repeat; } .mw-ajax-addcategory { padding-left: 20px; background-image: url(images/add.png); background-position: left center; background-repeat: no-repeat; } .mw-ajax-loader { background-image: url(images/ajax-loader.gif); background-position: center center; background-repeat: no-repeat; padding: 16px; position: relative; top: -16px; } .mw-small-spinner { padding: 10px !important; margin-right: 0.6em; background-image: url(images/spinner.gif); background-position: center center; background-repeat: no-repeat; } /* Sort arrows added by SortableTables */ a.sortheader { margin: 0 0.3em; } ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline; filename=commonPrint.css Content-Type: text/css; charset=UTF-8; name=commonPrint.css Content-Location: http://bits.wikimedia.org/skins-1.5/common/commonPrint.css?281z67 Content-Transfer-Encoding: 8bit /* ** MediaWiki Print style sheet for CSS2-capable browsers. ** Copyright Gabriel Wicke, http://www.aulinx.de/ ** ** Derived from the plone (http://plone.org/) styles ** Copyright Alexander Limi */ /* Thanks to A List Apart (http://alistapart.com/) for useful extras */ a.stub, a.new{ color:#ba0000; text-decoration:none; } #toc { /*border:1px solid #2f6fab;*/ border:1px solid #aaaaaa; background-color:#f9f9f9; padding:5px; } .tocindent { margin-left: 2em; } .tocline { margin-bottom: 0px; } /* images */ div.floatright { float: right; clear: right; margin: 0; position:relative; border: 0.5em solid White; border-width: 0.5em 0 0.8em 1.4em; } div.floatright p { font-style: italic;} div.floatleft { float: left; margin: 0.3em 0.5em 0.5em 0; position:relative; border: 0.5em solid White; border-width: 0.5em 1.4em 0.8em 0; } div.floatleft p { font-style: italic; } /* thumbnails */ div.thumb { margin-bottom: 0.5em; border-style: solid; border-color: White; width: auto; overflow: hidden; } div.thumbinner { border:1px solid #cccccc; padding: 3px !important; background-color:#f9f9f9; font-size: 94%; text-align: center; } html .thumbimage { border:1px solid #cccccc; } html .thumbcaption { border: none; padding: 0.3em 0 0.1em 0; } div.magnify { display: none; } div.tright { float: right; clear: right; border-width: 0.5em 0 0.8em 1.4em; } div.tleft { float: left; margin-right:0.5em; border-width: 0.5em 1.4em 0.8em 0; } img.thumbborder { border: 1px solid #dddddd; } /* table standards */ table.rimage { float:right; width:1pt; position:relative; margin-left:1em; margin-bottom:1em; text-align:center; } body { background: White; /*font-size: 11pt !important;*/ color: Black; margin: 0; padding: 0; } .noprint, div#jump-to-nav, div.top, div#column-one, #colophon, .editsection, .toctoggle, .tochidden, div#f-poweredbyico, div#f-copyrightico, li#viewcount, li#about, li#disclaimer, li#privacy, #mw-hidden-catlinks { /* Hides all the elements irrelevant for printing */ display: none; } ul { list-style-type: square; } #content { background: none; border: none ! important; padding: 0 ! important; margin: 0 ! important; } #footer { background : white; color : black; border-top: 1px solid black; } h1, h2, h3, h4, h5, h6 { font-weight: bold; } p, .documentDescription { margin: 1em 0 ! important; line-height: 1.2em; } .tocindent p { margin: 0 0 0 0 ! important; } pre { border: 1pt dashed black; white-space: pre; font-size: 8pt; overflow: auto; padding: 1em 0; background : white; color : black; } table.listing, table.listing td { border: 1pt solid black; border-collapse: collapse; } a { color: Black !important; background: none !important; padding: 0 !important; } a:link, a:visited { color: #520; background: transparent; text-decoration: underline; } #content a.external.text:after, #content a.external.autonumber:after { /* Expand URLs for printing */ content: " (" attr(href) ") "; } #globalWrapper { width: 100% !important; min-width: 0 !important; } #content { background : white; color : black; } #column-content { margin: 0 !important; } #column-content #content { padding: 1em; margin: 0 !important; } /* MSIE/Win doesn't understand 'inherit' */ a, a.external, a.new, a.stub { color: black ! important; text-decoration: none ! important; } /* Continue ... */ a, a.external, a.new, a.stub { color: inherit ! important; text-decoration: inherit ! important; } img { border: none; } img.tex { vertical-align: middle; } span.texhtml { font-family: serif; } #siteNotice { display: none; } div.gallerybox { border: 1px solid #cccccc; background-color:#f9f9f9; width: 150px; } div.gallerytext { overflow: visible; } /* ** Diff rendering */ table.diff { background:white; } td.diff-otitle { background:#ffffff; } td.diff-ntitle { background:#ffffff; } td.diff-addedline { background:#ccffcc; font-size: smaller; border: solid 2px black; } td.diff-deletedline { background:#ffffaa; font-size: smaller; border: dotted 2px black; } td.diff-context { background:#eeeeee; font-size: smaller; } .diffchange { color: silver; font-weight: bold; text-decoration: underline; } ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline; filename=flaggedrevs.css Content-Type: text/css; charset=UTF-8; name=flaggedrevs.css Content-Location: http://en.wikinews.org/w/extensions/FlaggedRevs/flaggedrevs.css?60 Content-Transfer-Encoding: 8bit /* Every time you change this CSS please bump $wgFlaggedRevStyleVersion in FlaggedRevs.php */ /* Standard User Interface */ .flaggedrevs_basic, .flaggedrevs_quality, .flaggedrevs_pristine, .flaggedrevs_notice, .flaggedrevs_editnotice, .flaggedrevs_diffnotice, .flaggedrevs_warning, .flaggedrevs_preview { border: 1px solid #aaa; padding: 5px; font-weight: normal; line-height: 1.5em; margin: .5em 1em 0em 0em; text-align: center; clear: both; } .flaggedrevs_basic { background-color: #f0f8ff; } .flaggedrevs_quality { background-color: #f0fff0; } .flaggedrevs_pristine { background-color: #fffff0; } .flaggedrevs_notice { background-color: #f9f9f9; } .flaggedrevs_preview { background-color: #f9f9f9; color: #8b0000; } .flaggedrevs_warning { font-size: 85%; background-color: #fffff0; margin: 0em 1em 0em 0em; } .flaggedrevs_editnotice { font-size: 85%; background-color: #f9f9f9; } .flaggedrevs_diffnotice { font-size: 85%; background-color: #f9f9f9; } .flaggedrevs_notes { border: 1px solid #aaa; background-color: #f9f9f9; padding: 5px; font-size: 85%; margin-left: 50px; margin-right: 50px; text-align: center; } .fr-text-value { width: 100px; } .fr-checkbox { padding: 0px; width: 16px; height: 16px; position: relative; float: left; top: 0px; right: 0px; background-repeat: no-repeat; background-position: 0px 0px; background-image: url(../FlaggedRevs/img/boxC.png); } .fr-marker-20, .fr-marker-40, .fr-marker-60, .fr-marker-80, .fr-marker-100 { background-position: bottom left; background-repeat: no-repeat; padding-bottom: 3px; } .fr-marker-20 { background-image: url(../FlaggedRevs/img/bar_20.png); } .fr-marker-40 { background-image: url(../FlaggedRevs/img/bar_40.png); } .fr-marker-60 { background-image: url(../FlaggedRevs/img/bar_60.png); } .fr-marker-80 { background-image: url(../FlaggedRevs/img/bar_80.png); } .fr-marker-100 { background-image: url(../FlaggedRevs/img/bar_100.png); } /* Short User Interface */ .flaggedrevs_short { border: 0px; background-color: #f9f9f9; padding: 1px; font-size: 95%; font-weight: normal; margin: 0em 0em 0em 1em; float: right; text-align: left; max-width: 450px; line-height: 16px; } .rtl .flaggedrevs_short { float: left; margin: 0 1em 0 0; } .fr-text { height: 1em; line-height: 1em; margin: 0px 7px 0px 0px; padding: 0px; font-weight: bold; width: 80px; } .fr-value20, .fr-value40, .fr-value60, .fr-value80, .fr-value100 { height: 1em; line-height: 1em; width: 95px; float: left; background-repeat: no-repeat; background-position: 50% 50%; text-align: center; } .fr-value20 { background-image: url(../FlaggedRevs/img/fr-marker-20.png); } .fr-value40 { background-image: url(../FlaggedRevs/img/fr-marker-40.png); } .fr-value60 { background-image: url(../FlaggedRevs/img/fr-marker-60.png); } .fr-value80 { background-image: url(../FlaggedRevs/img/fr-marker-80.png); } .fr-value100 { background-image: url(../FlaggedRevs/img/fr-marker-100.png); } .flaggedrevs-box0, .flaggedrevs-box1, .flaggedrevs-box2, .flaggedrevs-box3 { border: 1px solid #aaa; text-align: center; font-size: 85%; clear: both; } .flaggedrevs-box0 { background-color: #f9f9f9; } .flaggedrevs-box1 { background-color: #f0f8ff; } .flaggedrevs-box2 { background-color: #f0fff0; } .flaggedrevs-box3 { background-color: #fffff0; } /* Both User Interfaces */ .flaggedrevs-color-0 { background-color: #f9f9f9; } .flaggedrevs-color-1 { background-color: #f0f8ff; } .flaggedrevs-color-2 { background-color: #f0fff0; } .flaggedrevs-color-3 { background-color: #fffff0; } .flaggedrevs-unreviewed { background-color: #fffff0; } .flaggedrevs-unreviewed2 { background-color: #faebd7; } .flaggedrevs_toggle { color: blue; white-space: nowrap; cursor:pointer; } .fr-icon-current, .fr-icon-stable, .fr-icon-quality, .fr-icon-locked, .fr-icon-unlocked { padding: 0px; margin: 0em .2em 0em 0em; width: 16px; height: 16px; float: left; background-repeat: no-repeat; background-position: center center; } .fr-icon-current { background-image: url(../FlaggedRevs/img/1.png); } .fr-icon-stable { background-image: url(../FlaggedRevs/img/2.png); } .fr-icon-quality { background-image: url(../FlaggedRevs/img/3.png); } .fr-icon-locked { background-image: url(../FlaggedRevs/img/lock-closed.png); } .fr-icon-unlocked { width: 23px; background-image: url(../FlaggedRevs/img/lock-open.png); } .fr-diff-ratings { font-size: 90%; line-height: 1em; } .fr-diff-to-stable { line-height: 1em; } .fr-hist-stable-user, .fr-hist-quality-user, .fr-hist-autoreviewed { font-weight: bold; } /* Site notices */ .fr-backlognotice { padding: 3px; margin: 5px; border: 1px solid #990000; background-color: #f5ecec; } .fr-watchlist-old-notice { padding: 3px; margin: 5px; border: 1px solid #990000; background-color: #FEECD7; } /* Special pages */ .fr-pending-long { background-color: #f5ecec; } .fr-pending-long2 { background-color: #f5dddd; } .fr-pending-long3 { background-color: #e2caca; } .fr-unreviewed-unwatched { background-color: #faebd7; } .fr-under-review { background-color: yellow; } /* Review form */ .flaggedrevs_reviewform { background-color: #f9f9f9; font-size: 90%; clear: both; } .fr-rating-controls, .fr-rating-controls-disabled { vertical-align: middle; line-height: 1em; } .fr-rating-controls-disabled { color: GrayText; } .fr-rating-options { margin-right: 1.5em; } .fr-rating-option-0 { background-color: #f5ecec; } .fr-rating-option-1 { background-color: #f0f8ff; } .fr-rating-option-2 { background-color: #f0fff0; } .fr-rating-option-3 { background-color: #fef0db; } .fr-rating-option-4 { background-color: #fffff0; } .fr-diff-patrollink { text-align: center; } .fr-notes-box { width: 95%; margin: 0em 1em 0em .5em; } .fr-comment-box { margin-top: .25em; } .fr-rating-dave { background-color: #E0ECF8; } .fr-rating-rave { background-color: #E0F8EC; } .fr-hiddenform { display: none; } ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline; filename=readerfeedback.css Content-Type: text/css; charset=UTF-8; name=readerfeedback.css Content-Location: http://en.wikinews.org/w/extensions/ReaderFeedback/readerfeedback.css?1 Content-Transfer-Encoding: 8bit /* Every time you change this CSS please bump $wgFeedbackStyleVersion in ReaderFeedback.php */ /* Review form */ .feedback_reviewform { background-color: #f9f9f9; font-size: 90%; clear: both; } .rfb-rating-option-0 { background-color: #f5ecec; } .rfb-rating-option-1 { background-color: #f0f8ff; } .rfb-rating-option-2 { background-color: #f0fff0; } .rfb-rating-option-3 { background-color: #fef0db; } .rfb-rating-option-4 { background-color: #fffff0; } /* Reader feedback form */ .rfb-reader_feedback_plot { background-color: #F8F8F8; } .rfb-reader_feedback_graph, .rfb-reader_feedback_ratings, .rfb-reader_feedback_users { width: 100%; overflow: auto; } .rfb-reader_feedback_users { background-color: #F0F0F0; max-height:410px; font-size: 90%; } .rfb-reader_feedback_table { margin: .5em .5em .5em .5em; background: #f9f9f9; border: 1px #AAA solid; border-collapse: collapse; font-size: 85%; } .rfb-reader_feedback_table th, .rfb-reader_feedback_table td { border: 1px #AAA solid; padding: 0.3em; } ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline; filename=index.css Content-Type: text/css; charset=UTF-8; name=index.css Content-Location: http://en.wikinews.org/w/index.php?title=MediaWiki:Common.css&usemsgcache=yes&ctype=text%2Fcss&smaxage=2678400&action=raw&maxage=2678400 Content-Transfer-Encoding: 8bit /* ==This is for all the skins== Remember no preview */ /* I copied some things over from [[Mediawiki:monobook.css]] that should be in here */ div.no-bullet-list ul { list-style-type: none; list-style-image: none; } div#siteNotice {text-align:center; } /*rss icon. see [[template talk:latest news]] */ *.rss { color: #FFFFFF; background-color: #FF5500; background-image: none !important; border-color: #FF5500; border-style: outset; text-decoration: none !important; padding-left: 0.2em; padding-right: 0.2em; border-width: 0.15em; font-size: 95%; line-height: 95%; font-family: verdana, sans-serif; font-weight: bold; } /*kill auto-underline in opera (hopefully) make cool hover effect. possibly change to :active for hover effect. [[user:bawolff|Bawolff]] ☺☻[[image:smile.png]] 04:59, 1 January 2006 (UTC). removed no underline, as Amgine didn't like it. [[user:bawolff|Bawolff]] ☺☻[[image:smile.png]] 05:04, 1 January 2006 (UTC) */ *.rss:hover {border-style:inset; } div.no-bullet-list ul { list-style-type: none; list-style-image: none; } /*Fix the space between the edit check boxes on editintros. See http://bugzilla.wikimedia.org/show_bug.cgi?id=9252 */ .editOptions p {display:inline;} /* /* Interlining in titles. To prevent title overlap. Not sure if should be in monobook.css as this is diff in diff skins. yell at me if this breaks anything in any of the skins. */ h1.firstHeading { line-height: 1em; } /* Highlight review link in RC (per wc. See if anyone notices) http://en.wikinews.org/w/index.php?title=Wikinews:Water_cooler/technical&oldid=835195#Highlighting_need_for_review_in_RC */ span.mw-fr-reviewlink {background-color: yellow;} /* ==Backgrounds== */ div#football-bg-1 { background-image: url('http://upload.wikimedia.org/wikinews/en/5/5a/Badge_right_top.png'); background-repeat: no-repeat; background-position: top left; background-attachment: fixed; } /************************/ /* ==Dynamic hidden boxes== Copied from [[w:Mediawiki:monobook.css]] (not common.css). rev: http://en.wikipedia.org/w/index.php?title=MediaWiki:Monobook.css&oldid=73496939 originally from german 'pedia apearently. note: proably under GFDL. Might make work better*/ div.Boxmerge, div.NavFrame { margin: 0px; padding: 2px; border: 1px solid #aaaaaa; text-align: center; border-collapse: collapse; font-size: 95%; } div.Boxmerge div.NavFrame { border-style: none; border-style: hidden; } div.NavFrame + div.NavFrame { border-top-style: none; border-top-style: hidden; } div.NavPic { background-color: #ffffff; margin: 0px; padding: 2px; float: left; } div.NavFrame div.NavHead { height: 1.6em; font-weight: bold; font-size: 100%; background-color: #efefef; position:relative; padding-right:2em; /*Possibly should be in ch. stop down arrow from running together w/title */ overflow:hidden; /*otherwise runs into text*/ } div.NavFrame p { font-size: 100%; } div.NavFrame div.NavContent { font-size: 100%; } div.NavFrame div.NavContent p { font-size: 100%; } div.NavEnd { margin: 0px; padding: 0px; line-height: 1px; clear: both; } a.NavToggle { position:absolute; top:0px; right:3px; font-weight:normal; font-size:smaller; } /* ===Ugly nav=== */ div.UglyNav div.Boxmerge, div.UglyNav div.NavFrame { margin: 0px; padding: 2px; border: none; text-align: left; border-collapse: inherit; font-size: 100%; } div.UglyNav div.NavPic { background-color: transparent; margin: 0px; padding: 2px; float: none; } div.UglyNav div.NavFrame div.NavHead { height: auto; font-weight: normal; font-size: medium; background-color: transparent; position:relative; } div.UglyNav div.NavFrame p { font-size: medium; } div.UglyNav div.NavFrame div.NavContent { font-size: medium; } div.UglyNav div.NavFrame div.NavContent p { font-size: medium; } /* Standard table formatting */ /* <pre><nowiki> */ /* wikitable/prettytable class for skinning normal tables */ table.wikitable, table.prettytable { margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaaaaa solid; border-collapse: collapse; } table.wikitable th, table.wikitable td, table.prettytable th, table.prettytable td { border: 1px #aaaaaa solid; padding: 0.2em; } table.wikitable td, table.prettytable td { background: #f9f9f9; } table.wikitable th, table.prettytable th { background: #f2f2f2; text-align: center; } table.wikitable caption, table.prettytable caption { margin-left: inherit; margin-right: inherit; } /************************* ** Score board styles ** ************************* Used to be at [[user:SportsBot/common.css]] */ table.sportsbotScoreboard { border: 1px solid #000; margin-bottom: 5px; } table.sportsbotScoreboard th { background-color: #7fa3b0; } table.sportsbotScoreboard td { width: 30px; text-align: center; } table.sportsbotScoreboard td.team { font-size: 90%; width: 150px !important; text-align: left !important; } /* == Standings table style == */ .standingstable { border: 1px solid #000000; font-size: 90%; } .standingssection { font-size: 125%; } .standingssubsection { vertical-align: middle; font-size: 110%; background-color: #b4b4b4; } .standingsheader { background-color: #c5c5c5; text-align:center; font-weight: bold; } .standingsrow { background-color: #f7f7f7; text-align:center; } .standingsrow2 { background-color: #e6e6e6; text-align:center; } .standingsrow .team, .standingsrow2 .team { width:200px; text-align:left; } .nounderlines a { text-decoration: none; } /* Article message box template styles */ table.ambox { width: 80%; margin: 0 auto; border-collapse: collapse; background: #f8fcff; border: 1px solid #aaa; border-left: 15px solid #39f; /* Default "notice" blue */ } table.ambox th, table.ambox td { /* The message body cell(s) */ padding: 0.25em 0.5em; /* 0.5em left/right */ } table.ambox td.ambox-image { /* The left image cell */ width: 52px; padding: 2px 0px 2px 0.5em; /* 0.5em left, 0px right */ text-align: center; } table.ambox td.ambox-imageright { /* The right image cell */ width: 52px; padding: 2px 0.5em 2px 0px; /* 0px left, 0.5em right */ text-align: center; } table.ambox-notice { border-left: 15px solid #39f; /* Blue */ /* border-right: 10px solid #39f; */ /* If you want two blue bars */ } table.ambox-serious { border-left: 15px solid #c00; /* Red */ } table.ambox-content { border-left: 15px solid #f63; /* Orange */ } table.ambox-style { border-left: 15px solid #fc3; /* Yellow */ } table.ambox-merge { border-left: 15px solid #95b; /* Purple */ } /* rounded corners class for block elements */ .roundedCorners { -moz-border-radius: 1em; -webkit-border-radius: 1em; border-radius: 1em; } .semiblanking { display: none; } /*See [[MediaWiki:NavigationTabs.js]]. copied from wikibooks*/ .navtabs .tabs li { list-style:none; } .navtabs .tabs a { text-decoration:none; text-transform:uppercase; outline-width:0px; font-size:x-small; font-weight:bold; color:black; } .navtabs .tabs .inactive { background:#bbb; padding:1ex; } .navtabs .tabs .selected { background:#999; padding:1.1ex; } .navtabs .tabs .inactive:hover { background:#f75; } .navtabs .contents { padding:1ex; border:3px solid #999; } /* hide the Comments_talk namespace */ body.ns-102 #ca-talk {display:none;} body.ns-103 #ca-edit {display:none;} body.ns-103 #ca-addsection {display:none;} body.ns-90 #ca-lqt_talk {display: none;} /*thread pseudo ns*/ /*Ticker2 (animated ticker)*/ ul.actualTicker li {list-style-type:none; list-style-image:none;}/*mostly for IE*/ ul.actualTicker li {display:inline;} ul.actualTicker span.tickerIntroduction {font-weight:bold;padding-right:0.5em;} div.isATicker, div#singleTickerForPage {display:none;} /*################### ##Tabber stuff. See code in mediawiki:common.js ################*/ /*===Wikinews specific==== */ /*horizTabBox*/ div.horizTabBox ul.tabbernav li a { background-color:#7ec9fd; margin-left: 15px; border-bottom: solid 1px #7ec9fd; padding-left:0.8em; padding-right:0.8em; -moz-border-radius:1em 1em 0 0; /* this should be replaced with images for browsers that don't support it somehow*/ /*webkit doesn't like too big radii or having it in the shorthand form. Make sure radi < 1.7em */ -webkit-border-top-left-radius:1em; -webkit-border-top-right-radius:1em; border-radius:1em 1em 0 0; } div.horizTabBox ul.tabbernav li.tabberactive a { background-color: #bce1ff; border-bottom: 3px solid #bce1ff; margin-left:10px; } div.horizTabBox .tabbertab { border:solid 2px #7ec9fd; padding:0; } div.horizTabBox ul.tabbernav li a:hover { color: #000; background: #bce1ff; border-bottom: 3px solid #bce1ff; } div.horizTabBox ul.tabbernav li.tabberactive a:hover { color: #000; } div.horizTabBox { width:50%; text-align:left; margin-left:auto; margin-right:auto; /*min-width:41em; max-width:47em; */ } /* IMPORTANT: keep width:80% above or it will suck on IE*/ /* pict box */ div.pictChanger ul.tabbernav {line-height: 2.4;} div.pictChanger ul.tabbernav li a {border: #CCC 1px solid} div.pictChanger {width:400px;} div.pictChanger div.tabbertab {text-align:left;} div.tabberNoBorder div.tabbertab, div.tabberNoBorder ul.tabbernav { border: none; } /* ===Generic defaults=== Copied from http://www.barelyfitz.com/projects/tabber/example.css used under mit license see http://www.barelyfitz.com/projects/tabber/ */ /* $Id: example.css,v 1.5 2006/03/27 02:44:36 pat Exp $ */ /*-------------------------------------------------- REQUIRED to hide the non-active tab content. But do not hide them in the print stylesheet! --------------------------------------------------*/ .tabberlive .tabbertabhide { display:none; } /*-------------------------------------------------- .tabber = before the tabber interface is set up .tabberlive = after the tabber interface is set up --------------------------------------------------*/ .tabber { } .tabberlive { margin-top:1em; } /*-------------------------------------------------- ul.tabbernav = the tab navigation list li.tabberactive = the active tab --------------------------------------------------*/ ul.tabbernav { margin:0; padding: 3px 0; border-bottom: 1px solid #CCC; font: bold 12px Verdana, sans-serif; } ul.tabbernav li { list-style: none; margin: 0; display: inline; } ul.tabbernav li a { padding: 3px 0.5em; margin-left: 3px; border: 1px solid #ccc; border-bottom: none; background: #f2f7ff; text-decoration: none; } ul.tabbernav li a:link { color: #448; } ul.tabbernav li a:visited { color: #667; } ul.tabbernav li a:hover { color: #000; background: #fff9f2; border-color: #CCC; } ul.tabbernav li.tabberactive a { background-color: #fff; border-bottom: 1px solid #fff; } ul.tabbernav li.tabberactive a:hover { color: #000; background: white; border-bottom: 1px solid white; } /*-------------------------------------------------- .tabbertab = the tab content Add style only after the tabber interface is set up (.tabberlive) --------------------------------------------------*/ .tabberlive .tabbertab { padding:5px; border:1px solid #CCC; border-top:0; /* If you don't want the tab size changing whenever a tab is changed you can set a fixed height */ /* height:200px; */ /* If you set a fix height set overflow to auto and you will get a scrollbar when necessary */ /* overflow:auto; */ } /* If desired, hide the heading since a heading is provided by the tab */ .tabberlive .tabbertab h2 { display:none; } .tabberlive .tabbertab h3 { display:none; } /* Example of using an ID to set different styles for the tabs on the page */ .tabberlive#tab1 { } .tabberlive#tab2 { } .tabberlive#tab2 .tabbertab { height:200px; overflow:auto; } /* Infobox templates */ .infobox { border: 1px solid #aaa; background-color: #f9f9f9; color: black; margin-bottom: 0.5em; margin-left: 1em; padding: 0.2em; float: right; clear: right; } .infobox td, .infobox th { vertical-align: middle; } .infobox caption { font-size: larger; margin-left: inherit; } .infobox.bordered { border-collapse: collapse; } .infobox.bordered td, .infobox.bordered th { border: 1px solid #aaa; } .infobox.bordered .borderless td, .infobox.bordered .borderless th { border: 0 solid #aaa; } .infobox.sisterproject { width: 20em; font-size: 90%; } .archive-box { border: 1px solid #aaf; background-color: #f2f2f9; color: #000; margin-bottom: 0.5em; margin-left: 1em; padding: 0.2em; float: right; clear: right; text-align: center; } /* [[Template:Lead 2.0]] */ .l_table { border: 0px; height: 100%; width: 100%; } .l_table tr { height: 100%; } .l_table td { width: 100%; } .l_box { } .l_image { vertical-align:top; padding-bottom: 5px; padding-right: 8px; float: left; } .l_title { font-size: 150%; font-style: bold; vertical-align: top; padding-bottom: 5px; } .l_title a:link { color: #000000; text-decoration: none; } .l_title a:visited { color: #000000; text-decoration: none; } .l_title a:hover { color: #000000; text-decoration: underline; } .l_title a:active { color: #000000; text-decoration: none; } .l_summary { vertical-align: top; font-size: 100%; } .l_tail { font-size: 90%; height:15px; } .l_img_type { /*float: left;*/ padding-bottom: 3px; } .l_edit { clear: left; float: right; } /*end lead stuff */ /* float in the title bar (Ex little FA icons in top-right corner) */ /*! important is to overide legacy inline stuff */ /*Vector.css overides this for vector! */ /*This assumes that the page body is not relatively positioned (aka in everything but vector)*/ .float_in_title { position: absolute; z-index: 100; right: 20px; top: 20px !important;} /* Temp for google News */ .GoogleNews { display:none; font-size: 50%; } /* Remove Search box from LQT */ .lqt-talkpage-search{ display: none; } /*Make js errors more noticeable (For EasyPeerReview) */ #mw-js-message.mw-js-message-mwapi-error { border: thick red solid ; font-size:larger} ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline; filename=index.css Content-Type: text/css; charset=UTF-8; name=index.css Content-Location: http://en.wikinews.org/w/index.php?title=MediaWiki:Print.css&usemsgcache=yes&ctype=text%2Fcss&smaxage=2678400&action=raw&maxage=2678400 Content-Transfer-Encoding: 8bit /* CSS placed here will affect the print output */ ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline; filename=index.css Content-Type: text/css; charset=UTF-8; name=index.css Content-Location: http://en.wikinews.org/w/index.php?title=MediaWiki:Handheld.css&usemsgcache=yes&ctype=text%2Fcss&smaxage=2678400&action=raw&maxage=2678400 Content-Transfer-Encoding: 8bit /* CSS placed here will affect handheld devices based on the skin configured in $wgHandheldStyle */ ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline; filename=index.css Content-Type: text/css; charset=UTF-8; name=index.css Content-Location: http://en.wikinews.org/w/index.php?title=MediaWiki:Vector.css&usemsgcache=yes&ctype=text%2Fcss&smaxage=2678400&action=raw&maxage=2678400 Content-Transfer-Encoding: 8bit /* CSS placed here will affect users of the Vector skin */ /*Please put any main page specific css in [[mediawiki:Common.css/Main Page]] */ .toccolours { border: 1px solid #aaa; background-color: #f9f9f9; padding: 5px; font-size: 95%; } /* Jacked from Monobook.css for galleries */ table.gallery { border: 1px solid #ccc; margin: 2px; padding: 2px; background-color: white; } table.gallery tr { vertical-align: top; } table.gallery td { vertical-align: top; background-color: #f9f9f9; border: solid 2px white; } /* Keep this temporarily so that cached pages will display right */ table.gallery td.galleryheader { text-align: center; font-weight: bold; } table.gallery caption { font-weight: bold; } div.gallerybox { margin: 2px; } div.gallerybox div.thumb { text-align: center; border: 1px solid #ccc; margin: 2px; } div.gallerytext { overflow: hidden; font-size: 94%; padding: 2px 4px; } /* End Galleries section */ #mw-js-message {font-size: 0.8em;} div#bodyContent {line-height: 1.5em;} pre, code, tt { font-size:larger; } /* float in the title bar (Ex little FA icons in top-right corner) */ /*! important is to overide legacy monobook stuff */ .float_in_title { position: absolute; z-index: 100; right: 20px; top: -50px !important;} ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline; filename=index.css Content-Type: text/css; charset=UTF-8; name=index.css Content-Location: http://en.wikinews.org/w/index.php?title=-&action=raw&maxage=2678400&gen=css Content-Transfer-Encoding: 8bit /* generated user stylesheet */ a.new, #quickbar a.new { color: #CC2200; } ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline; filename=wikibits.js Content-Type: application/x-javascript; charset=UTF-8; name=wikibits.js Content-Location: http://bits.wikimedia.org/skins-1.5/common/wikibits.js?281z67 Content-Transfer-Encoding: Base64 Ly8gTWVkaWFXaWtpIEphdmFTY3JpcHQgc3VwcG9ydCBmdW5jdGlvbnMKCnZhciBj bGllbnRQQyA9IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTsgLy8g R2V0IGNsaWVudCBpbmZvCnZhciBpc19nZWNrbyA9IC9nZWNrby8udGVzdCggY2xp ZW50UEMgKSAmJgoJIS9raHRtbHxzcG9vZmVyfG5ldHNjYXBlXC83XC4wLy50ZXN0 KGNsaWVudFBDKTsKdmFyIHdlYmtpdF9tYXRjaCA9IGNsaWVudFBDLm1hdGNoKC9h cHBsZXdlYmtpdFwvKFxkKykvKTsKaWYgKHdlYmtpdF9tYXRjaCkgewoJdmFyIGlz X3NhZmFyaSA9IGNsaWVudFBDLmluZGV4T2YoJ2FwcGxld2Via2l0JykgIT0gLTEg JiYKCQljbGllbnRQQy5pbmRleE9mKCdzcG9vZmVyJykgPT0gLTE7Cgl2YXIgaXNf c2FmYXJpX3dpbiA9IGlzX3NhZmFyaSAmJiBjbGllbnRQQy5pbmRleE9mKCd3aW5k b3dzJykgIT0gLTE7Cgl2YXIgd2Via2l0X3ZlcnNpb24gPSBwYXJzZUludCh3ZWJr aXRfbWF0Y2hbMV0pOwp9Ci8vIEZvciBhY2Nlc3NrZXlzOyBub3RlIHRoYXQgRkYz KyBpcyBpbmNsdWRlZCBoZXJlIQp2YXIgaXNfZmYyID0gL2ZpcmVmb3hcL1syLTld fG1pbmVmaWVsZFwvMy8udGVzdCggY2xpZW50UEMgKTsKdmFyIGZmMl9idWdzID0g L2ZpcmVmb3hcLzIvLnRlc3QoIGNsaWVudFBDICk7Ci8vIFRoZXNlIGFyZW4ndCB1 c2VkIGhlcmUsIGJ1dCBzb21lIGN1c3RvbSBzY3JpcHRzIHJlbHkgb24gdGhlbQp2 YXIgaXNfZmYyX3dpbiA9IGlzX2ZmMiAmJiBjbGllbnRQQy5pbmRleE9mKCd3aW5k b3dzJykgIT0gLTE7CnZhciBpc19mZjJfeDExID0gaXNfZmYyICYmIGNsaWVudFBD LmluZGV4T2YoJ3gxMScpICE9IC0xOwppZiAoY2xpZW50UEMuaW5kZXhPZignb3Bl cmEnKSAhPSAtMSkgewoJdmFyIGlzX29wZXJhID0gdHJ1ZTsKCXZhciBpc19vcGVy YV9wcmVzZXZlbiA9IHdpbmRvdy5vcGVyYSAmJiAhZG9jdW1lbnQuY2hpbGROb2Rl czsKCXZhciBpc19vcGVyYV9zZXZlbiA9IHdpbmRvdy5vcGVyYSAmJiBkb2N1bWVu dC5jaGlsZE5vZGVzOwoJdmFyIGlzX29wZXJhXzk1ID0gL29wZXJhXC8oOVwuWzUt OV18WzEtOV1bMC05XSkvLnRlc3QoIGNsaWVudFBDICk7Cgl2YXIgb3BlcmE2X2J1 Z3MgPSBpc19vcGVyYV9wcmVzZXZlbjsKCXZhciBvcGVyYTdfYnVncyA9IGlzX29w ZXJhX3NldmVuICYmICFpc19vcGVyYV85NTsKCXZhciBvcGVyYTk1X2J1Z3MgPSAv b3BlcmFcLyg5XC41KS8udGVzdCggY2xpZW50UEMgKTsKfQovLyBTdGFydCBhdCA0 IHRvIG1pbmltaXplIHRoZSBjaGFuY2Ugb2YgYnJlYWtpbmcgb24gSUUxMCA6KQp2 YXIgaWU2X2J1Z3MgPSAvbXNpZSBbNC02XS8udGVzdCggY2xpZW50UEMgKTsKCi8v IEdsb2JhbCBleHRlcm5hbCBvYmplY3RzIHVzZWQgYnkgdGhpcyBzY3JpcHQuCi8q ZXh0ZXJuIHRhLCBzdHlsZXBhdGgsIHNraW4gKi8KCi8vIGFkZCBhbnkgb25sb2Fk IGZ1bmN0aW9ucyBpbiB0aGlzIGhvb2sgKHBsZWFzZSBkb24ndCBoYXJkLWNvZGUg YW55IGV2ZW50cyBpbiB0aGUgeGh0bWwgc291cmNlKQp2YXIgZG9uZU9ubG9hZEhv b2s7CgppZiAoIXdpbmRvdy5vbmxvYWRGdW5jdHMpIHsKCXZhciBvbmxvYWRGdW5j dHMgPSBbXTsKfQoKZnVuY3Rpb24gYWRkT25sb2FkSG9vayggaG9va0Z1bmN0ICkg ewoJLy8gQWxsb3dzIGFkZC1vbiBzY3JpcHRzIHRvIGFkZCBvbmxvYWQgZnVuY3Rp b25zCglpZiggIWRvbmVPbmxvYWRIb29rICkgewoJCW9ubG9hZEZ1bmN0c1tvbmxv YWRGdW5jdHMubGVuZ3RoXSA9IGhvb2tGdW5jdDsKCX0gZWxzZSB7CgkJaG9va0Z1 bmN0KCk7ICAvLyBidWcgaW4gTVNJRSBzY3JpcHQgbG9hZGluZwoJfQp9CgpmdW5j dGlvbiBob29rRXZlbnQoIGhvb2tOYW1lLCBob29rRnVuY3QgKSB7CglhZGRIYW5k bGVyKCB3aW5kb3csIGhvb2tOYW1lLCBob29rRnVuY3QgKTsKfQoKZnVuY3Rpb24g aW1wb3J0U2NyaXB0KCBwYWdlICkgewoJLy8gVE9ETzogbWlnaHQgd2FudCB0byBp bnRyb2R1Y2UgYSB1dGlsaXR5IGZ1bmN0aW9uIHRvIG1hdGNoIHdmVXJsZW5jb2Rl KCkgaW4gUEhQCgl2YXIgdXJpID0gd2dTY3JpcHQgKyAnP3RpdGxlPScgKwoJCWVu Y29kZVVSSUNvbXBvbmVudChwYWdlLnJlcGxhY2UoLyAvZywnXycpKS5yZXBsYWNl KC8lMkYvaWcsJy8nKS5yZXBsYWNlKC8lM0EvaWcsJzonKSArCgkJJyZhY3Rpb249 cmF3JmN0eXBlPXRleHQvamF2YXNjcmlwdCc7CglyZXR1cm4gaW1wb3J0U2NyaXB0 VVJJKCB1cmkgKTsKfQoKdmFyIGxvYWRlZFNjcmlwdHMgPSB7fTsgLy8gaW5jbHVk ZWQtc2NyaXB0cyB0cmFja2VyCmZ1bmN0aW9uIGltcG9ydFNjcmlwdFVSSSggdXJs ICkgewoJaWYgKCBsb2FkZWRTY3JpcHRzW3VybF0gKSB7CgkJcmV0dXJuIG51bGw7 Cgl9Cglsb2FkZWRTY3JpcHRzW3VybF0gPSB0cnVlOwoJdmFyIHMgPSBkb2N1bWVu dC5jcmVhdGVFbGVtZW50KCAnc2NyaXB0JyApOwoJcy5zZXRBdHRyaWJ1dGUoICdz cmMnLCB1cmwgKTsKCXMuc2V0QXR0cmlidXRlKCAndHlwZScsICd0ZXh0L2phdmFz Y3JpcHQnICk7Cglkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcp WzBdLmFwcGVuZENoaWxkKCBzICk7CglyZXR1cm4gczsKfQoKZnVuY3Rpb24gaW1w b3J0U3R5bGVzaGVldCggcGFnZSApIHsKCXJldHVybiBpbXBvcnRTdHlsZXNoZWV0 VVJJKCB3Z1NjcmlwdCArICc/YWN0aW9uPXJhdyZjdHlwZT10ZXh0L2NzcyZ0aXRs ZT0nICsgZW5jb2RlVVJJQ29tcG9uZW50KCBwYWdlLnJlcGxhY2UoLyAvZywnXycp ICkgKTsKfQoKZnVuY3Rpb24gaW1wb3J0U3R5bGVzaGVldFVSSSggdXJsLCBtZWRp YSApIHsKCXZhciBsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2xpbmsnICk7 CglsLnR5cGUgPSAndGV4dC9jc3MnOwoJbC5yZWwgPSAnc3R5bGVzaGVldCc7Cgls LmhyZWYgPSB1cmw7CglpZiggbWVkaWEgKSB7CgkJbC5tZWRpYSA9IG1lZGlhOwoJ fQoJZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXS5hcHBl bmRDaGlsZCggbCApOwoJcmV0dXJuIGw7Cn0KCmZ1bmN0aW9uIGFwcGVuZENTUygg dGV4dCApIHsKCXZhciBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ3N0eWxl JyApOwoJcy50eXBlID0gJ3RleHQvY3NzJzsKCXMucmVsID0gJ3N0eWxlc2hlZXQn OwoJaWYgKCBzLnN0eWxlU2hlZXQgKSB7CgkJcy5zdHlsZVNoZWV0LmNzc1RleHQg PSB0ZXh0OyAvLyBJRQoJfSBlbHNlIHsKCQlzLmFwcGVuZENoaWxkKCBkb2N1bWVu dC5jcmVhdGVUZXh0Tm9kZSggdGV4dCArICcnICkgKTsgLy8gU2FmYXJpIHNvbWV0 aW1lcyBib3JrcyBvbiBudWxsCgl9Cglkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFn TmFtZSgnaGVhZCcpWzBdLmFwcGVuZENoaWxkKCBzICk7CglyZXR1cm4gczsKfQoK Ly8gU3BlY2lhbCBzdHlsZXNoZWV0IGxpbmtzIGZvciBNb25vYm9vayBvbmx5IChz ZWUgYnVnIDE0NzE3KQppZiAoIHR5cGVvZiBzdHlsZXBhdGggIT0gJ3VuZGVmaW5l ZCcgJiYgc2tpbiA9PSAnbW9ub2Jvb2snICkgewoJaWYgKCBvcGVyYTZfYnVncyAp IHsKCQlpbXBvcnRTdHlsZXNoZWV0VVJJKCBzdHlsZXBhdGggKyAnLycgKyBza2lu ICsgJy9PcGVyYTZGaXhlcy5jc3MnICk7Cgl9IGVsc2UgaWYgKCBvcGVyYTdfYnVn cyApIHsKCQlpbXBvcnRTdHlsZXNoZWV0VVJJKCBzdHlsZXBhdGggKyAnLycgKyBz a2luICsgJy9PcGVyYTdGaXhlcy5jc3MnICk7Cgl9IGVsc2UgaWYgKCBvcGVyYTk1 X2J1Z3MgKSB7CgkJaW1wb3J0U3R5bGVzaGVldFVSSSggc3R5bGVwYXRoICsgJy8n ICsgc2tpbiArICcvT3BlcmE5Rml4ZXMuY3NzJyApOwoJfSBlbHNlIGlmICggZmYy X2J1Z3MgKSB7CgkJaW1wb3J0U3R5bGVzaGVldFVSSSggc3R5bGVwYXRoICsgJy8n ICsgc2tpbiArICcvRkYyRml4ZXMuY3NzJyApOwoJfQp9CgoKaWYgKCB3Z0JyZWFr RnJhbWVzICkgewoJLy8gVW4tdHJhcCB1cyBmcm9tIGZyYW1lc2V0cwoJaWYgKCB3 aW5kb3cudG9wICE9IHdpbmRvdyApIHsKCQl3aW5kb3cudG9wLmxvY2F0aW9uID0g d2luZG93LmxvY2F0aW9uOwoJfQp9CgpmdW5jdGlvbiBzaG93VG9jVG9nZ2xlKCkg ewoJaWYgKCBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSApIHsKCQkvLyBVc2VzIERP TSBjYWxscyB0byBhdm9pZCBkb2N1bWVudC53cml0ZSArIFhIVE1MIGlzc3VlcwoK CQl2YXIgbGlua0hvbGRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAndG9j dGl0bGUnICk7CgkJdmFyIGV4aXN0aW5nTGluayA9IGRvY3VtZW50LmdldEVsZW1l bnRCeUlkKCAndG9nZ2xlbGluaycgKTsKCQlpZiAoICFsaW5rSG9sZGVyIHx8IGV4 aXN0aW5nTGluayApIHsKCQkJLy8gRG9uJ3QgYWRkIHRoZSB0b2dnbGUgbGluayB0 d2ljZQoJCQlyZXR1cm47CgkJfQoKCQl2YXIgb3V0ZXJTcGFuID0gZG9jdW1lbnQu Y3JlYXRlRWxlbWVudCggJ3NwYW4nICk7CgkJb3V0ZXJTcGFuLmNsYXNzTmFtZSA9 ICd0b2N0b2dnbGUnOwoKCQl2YXIgdG9nZ2xlTGluayA9IGRvY3VtZW50LmNyZWF0 ZUVsZW1lbnQoICdhJyApOwoJCXRvZ2dsZUxpbmsuaWQgPSAndG9nZ2xlbGluayc7 CgkJdG9nZ2xlTGluay5jbGFzc05hbWUgPSAnaW50ZXJuYWwnOwoJCXRvZ2dsZUxp bmsuaHJlZiA9ICdqYXZhc2NyaXB0OnRvZ2dsZVRvYygpJzsKCQl0b2dnbGVMaW5r LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSggdG9jSGlkZVRl eHQgKSApOwoKCQlvdXRlclNwYW4uYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0 ZVRleHROb2RlKCAnWycgKSApOwoJCW91dGVyU3Bhbi5hcHBlbmRDaGlsZCggdG9n Z2xlTGluayApOwoJCW91dGVyU3Bhbi5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3Jl YXRlVGV4dE5vZGUoICddJyApICk7CgoJCWxpbmtIb2xkZXIuYXBwZW5kQ2hpbGQo IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCAnICcgKSApOwoJCWxpbmtIb2xkZXIu YXBwZW5kQ2hpbGQoIG91dGVyU3BhbiApOwoKCQl2YXIgY29va2llUG9zID0gZG9j dW1lbnQuY29va2llLmluZGV4T2YoICJoaWRldG9jPSIgKTsKCQlpZiAoIGNvb2tp ZVBvcyA+IC0xICYmIGRvY3VtZW50LmNvb2tpZS5jaGFyQXQoIGNvb2tpZVBvcyAr IDggKSA9PSAxICkgewoJCQl0b2dnbGVUb2MoKTsKCQl9Cgl9Cn0KCmZ1bmN0aW9u IGNoYW5nZVRleHQoIGVsLCBuZXdUZXh0ICkgewoJLy8gU2FmYXJpIHdvcmsgYXJv dW5kCglpZiAoIGVsLmlubmVyVGV4dCApIHsKCQllbC5pbm5lclRleHQgPSBuZXdU ZXh0OwoJfSBlbHNlIGlmICggZWwuZmlyc3RDaGlsZCAmJiBlbC5maXJzdENoaWxk Lm5vZGVWYWx1ZSApIHsKCQllbC5maXJzdENoaWxkLm5vZGVWYWx1ZSA9IG5ld1Rl eHQ7Cgl9Cn0KCmZ1bmN0aW9uIHRvZ2dsZVRvYygpIHsKCXZhciB0b2NtYWluID0g ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICd0b2MnICk7Cgl2YXIgdG9jID0gZG9j dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvYycpLmdldEVsZW1lbnRzQnlUYWdOYW1l KCd1bCcpWzBdOwoJdmFyIHRvZ2dsZUxpbmsgPSBkb2N1bWVudC5nZXRFbGVtZW50 QnlJZCggJ3RvZ2dsZWxpbmsnICk7CgoJaWYgKCB0b2MgJiYgdG9nZ2xlTGluayAm JiB0b2Muc3R5bGUuZGlzcGxheSA9PSAnbm9uZScgKSB7CgkJY2hhbmdlVGV4dCgg dG9nZ2xlTGluaywgdG9jSGlkZVRleHQgKTsKCQl0b2Muc3R5bGUuZGlzcGxheSA9 ICdibG9jayc7CgkJZG9jdW1lbnQuY29va2llID0gImhpZGV0b2M9MCI7CgkJdG9j bWFpbi5jbGFzc05hbWUgPSAndG9jJzsKCX0gZWxzZSB7CgkJY2hhbmdlVGV4dCgg dG9nZ2xlTGluaywgdG9jU2hvd1RleHQgKTsKCQl0b2Muc3R5bGUuZGlzcGxheSA9 ICdub25lJzsKCQlkb2N1bWVudC5jb29raWUgPSAiaGlkZXRvYz0xIjsKCQl0b2Nt YWluLmNsYXNzTmFtZSA9ICd0b2MgdG9jaGlkZGVuJzsKCX0KfQoKdmFyIG13RWRp dEJ1dHRvbnMgPSBbXTsKdmFyIG13Q3VzdG9tRWRpdEJ1dHRvbnMgPSBbXTsgLy8g ZWcgdG8gYWRkIGluIE1lZGlhV2lraTpDb21tb24uanMKCmZ1bmN0aW9uIGVzY2Fw ZVF1b3RlcyggdGV4dCApIHsKCXZhciByZSA9IG5ldyBSZWdFeHAoICInIiwgImci ICk7Cgl0ZXh0ID0gdGV4dC5yZXBsYWNlKCByZSwgIlxcJyIgKTsKCXJlID0gbmV3 IFJlZ0V4cCggIlxcbiIsICJnIiApOwoJdGV4dCA9IHRleHQucmVwbGFjZSggcmUs ICJcXG4iICk7CglyZXR1cm4gZXNjYXBlUXVvdGVzSFRNTCggdGV4dCApOwp9Cgpm dW5jdGlvbiBlc2NhcGVRdW90ZXNIVE1MKCB0ZXh0ICkgewoJdmFyIHJlID0gbmV3 IFJlZ0V4cCggJyYnLCAiZyIgKTsKCXRleHQgPSB0ZXh0LnJlcGxhY2UoIHJlLCAi JmFtcDsiICk7CglyZSA9IG5ldyBSZWdFeHAoICciJywgImciICk7Cgl0ZXh0ID0g dGV4dC5yZXBsYWNlKCByZSwgIiZxdW90OyIgKTsKCXJlID0gbmV3IFJlZ0V4cCgg JzwnLCAiZyIgKTsKCXRleHQgPSB0ZXh0LnJlcGxhY2UoIHJlLCAiJmx0OyIgKTsK CXJlID0gbmV3IFJlZ0V4cCggJz4nLCAiZyIgKTsKCXRleHQgPSB0ZXh0LnJlcGxh Y2UoIHJlLCAiJmd0OyIgKTsKCXJldHVybiB0ZXh0Owp9CgovKioKICogU2V0IHRo ZSBhY2Nlc3NrZXkgcHJlZml4IGJhc2VkIG9uIGJyb3dzZXIgZGV0ZWN0aW9uLgog Ki8KdmFyIHRvb2x0aXBBY2Nlc3NLZXlQcmVmaXggPSAnYWx0LSc7CmlmICggaXNf b3BlcmEgKSB7Cgl0b29sdGlwQWNjZXNzS2V5UHJlZml4ID0gJ3NoaWZ0LWVzYy0n Owp9IGVsc2UgaWYgKCAhaXNfc2FmYXJpX3dpbiAmJiBpc19zYWZhcmkgJiYgd2Vi a2l0X3ZlcnNpb24gPiA1MjYgKSB7Cgl0b29sdGlwQWNjZXNzS2V5UHJlZml4ID0g J2N0cmwtYWx0LSc7Cn0gZWxzZSBpZiAoICFpc19zYWZhcmlfd2luICYmICggaXNf c2FmYXJpCgkJfHwgY2xpZW50UEMuaW5kZXhPZignbWFjJykgIT0gLTEKCQl8fCBj bGllbnRQQy5pbmRleE9mKCdrb25xdWVyb3InKSAhPSAtMSApICkgewoJdG9vbHRp cEFjY2Vzc0tleVByZWZpeCA9ICdjdHJsLSc7Cn0gZWxzZSBpZiAoIGlzX2ZmMiAp IHsKCXRvb2x0aXBBY2Nlc3NLZXlQcmVmaXggPSAnYWx0LXNoaWZ0LSc7Cn0KdmFy IHRvb2x0aXBBY2Nlc3NLZXlSZWdleHAgPSAvXFsoY3RybC0pPyhhbHQtKT8oc2hp ZnQtKT8oZXNjLSk/KC4pXF0kLzsKCi8qKgogKiBBZGQgdGhlIGFwcHJvcHJpYXRl IHByZWZpeCB0byB0aGUgYWNjZXNza2V5IHNob3duIGluIHRoZSB0b29sdGlwLgog KiBJZiB0aGUgbm9kZUxpc3QgcGFyYW1ldGVyIGlzIGdpdmVuLCBvbmx5IHRob3Nl IG5vZGVzIGFyZSB1cGRhdGVkOwogKiBvdGhlcndpc2UsIGFsbCB0aGUgbm9kZXMg dGhhdCB3aWxsIHByb2JhYmx5IGhhdmUgYWNjZXNza2V5cyBieQogKiBkZWZhdWx0 IGFyZSB1cGRhdGVkLgogKgogKiBAcGFyYW0gQXJyYXkgbm9kZUxpc3QgLS0gbGlz dCBvZiBlbGVtZW50cyB0byB1cGRhdGUKICovCmZ1bmN0aW9uIHVwZGF0ZVRvb2x0 aXBBY2Nlc3NLZXlzKCBub2RlTGlzdCApIHsKCWlmICggIW5vZGVMaXN0ICkgewoJ CS8vIFJhdGhlciB0aGFuIHNjYW4gYWxsIGxpbmtzIG9uIHRoZSB3aG9sZSBwYWdl LCB3ZSBjYW4ganVzdCBzY2FuIHRoZXNlCgkJLy8gY29udGFpbmVycyB3aGljaCBj b250YWluIHRoZSByZWxldmFudCBsaW5rcy4gVGhpcyBpcyByZWFsbHkganVzdCBh bgoJCS8vIG9wdGltaXphdGlvbiB0ZWNobmlxdWUuCgkJdmFyIGxpbmtDb250YWlu ZXJzID0gWwoJCQknY29sdW1uLW9uZScsIC8vIE1vbm9ib29rIGFuZCBNb2Rlcm4K CQkJJ2hlYWQnLCAncGFuZWwnLCAncC1sb2dvJyAvLyBWZWN0b3IKCQldOwoJCWZv ciAoIHZhciBpIGluIGxpbmtDb250YWluZXJzICkgewoJCQl2YXIgbGlua0NvbnRh aW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCBsaW5rQ29udGFpbmVyc1tp XSApOwoJCQlpZiAoIGxpbmtDb250YWluZXIgKSB7CgkJCQl1cGRhdGVUb29sdGlw QWNjZXNzS2V5cyggbGlua0NvbnRhaW5lci5nZXRFbGVtZW50c0J5VGFnTmFtZSgg J2EnICkgKTsKCQkJfQoJCX0KCQkvLyB0aGVzZSBhcmUgcmFyZSBlbm91Z2ggdGhh dCBubyBzdWNoIG9wdGltaXphdGlvbiBpcyBuZWVkZWQKCQl1cGRhdGVUb29sdGlw QWNjZXNzS2V5cyggZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoICdpbnB1 dCcgKSApOwoJCXVwZGF0ZVRvb2x0aXBBY2Nlc3NLZXlzKCBkb2N1bWVudC5nZXRF bGVtZW50c0J5VGFnTmFtZSggJ2xhYmVsJyApICk7CgkJcmV0dXJuOwoJfQoKCWZv ciAoIHZhciBpID0gMDsgaSA8IG5vZGVMaXN0Lmxlbmd0aDsgaSsrICkgewoJCXZh ciBlbGVtZW50ID0gbm9kZUxpc3RbaV07CgkJdmFyIHRpcCA9IGVsZW1lbnQuZ2V0 QXR0cmlidXRlKCAndGl0bGUnICk7CgkJaWYgKCB0aXAgJiYgdG9vbHRpcEFjY2Vz c0tleVJlZ2V4cC5leGVjKCB0aXAgKSApIHsKCQkJdGlwID0gdGlwLnJlcGxhY2Uo dG9vbHRpcEFjY2Vzc0tleVJlZ2V4cCwKCQkJCQkgICdbJyArIHRvb2x0aXBBY2Nl c3NLZXlQcmVmaXggKyAiJDVdIik7CgkJCWVsZW1lbnQuc2V0QXR0cmlidXRlKCAn dGl0bGUnLCB0aXAgKTsKCQl9Cgl9Cn0KCi8qKgogKiBBZGQgYSBsaW5rIHRvIG9u ZSBvZiB0aGUgcG9ydGxldCBtZW51cyBvbiB0aGUgcGFnZSwgaW5jbHVkaW5nOgog KgogKiBwLWNhY3Rpb25zOiBDb250ZW50IGFjdGlvbnMgKHNob3duIGFzIHRhYnMg YWJvdmUgdGhlIG1haW4gY29udGVudCBpbiBNb25vYm9vaykKICogcC1wZXJzb25h bDogUGVyc29uYWwgdG9vbHMgKHNob3duIGF0IHRoZSB0b3AgcmlnaHQgb2YgdGhl IHBhZ2UgaW4gTW9ub2Jvb2spCiAqIHAtbmF2aWdhdGlvbjogTmF2aWdhdGlvbgog KiBwLXRiOiBUb29sYm94CiAqCiAqIFRoaXMgZnVuY3Rpb24gZXhpc3RzIGZvciB0 aGUgY29udmVuaWVuY2Ugb2YgY3VzdG9tIEpTIGF1dGhvcnMuICBBbGwKICogYnV0 IHRoZSBmaXJzdCB0aHJlZSBwYXJhbWV0ZXJzIGFyZSBvcHRpb25hbCwgdGhvdWdo IHByb3ZpZGluZyBhdAogKiBsZWFzdCBhbiBpZCBhbmQgYSB0b29sdGlwIGlzIHJl Y29tbWVuZGVkLgogKgogKiBCeSBkZWZhdWx0IHRoZSBuZXcgbGluayB3aWxsIGJl IGFkZGVkIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QuICBUbwogKiBhZGQgdGhlIGxp bmsgYmVmb3JlIGEgZ2l2ZW4gZXhpc3RpbmcgaXRlbSwgcGFzcyB0aGUgRE9NIG5v ZGUgb2YKICogdGhhdCBpdGVtIChlYXNpbHkgb2J0YWluZWQgd2l0aCBkb2N1bWVu dC5nZXRFbGVtZW50QnlJZCgpKSBhcyB0aGUKICogbmV4dG5vZGUgcGFyYW1ldGVy OyB0byBhZGQgdGhlIGxpbmsgX2FmdGVyXyBhbiBleGlzdGluZyBpdGVtLCBwYXNz CiAqIHRoZSBub2RlJ3MgbmV4dFNpYmxpbmcgaW5zdGVhZC4KICoKICogQHBhcmFt IFN0cmluZyBwb3J0bGV0IC0tIGlkIG9mIHRoZSB0YXJnZXQgcG9ydGxldCAoInAt Y2FjdGlvbnMiLCAicC1wZXJzb25hbCIsICJwLW5hdmlnYXRpb24iIG9yICJwLXRi IikKICogQHBhcmFtIFN0cmluZyBocmVmIC0tIGxpbmsgVVJMCiAqIEBwYXJhbSBT dHJpbmcgdGV4dCAtLSBsaW5rIHRleHQgKHdpbGwgYmUgYXV0b21hdGljYWxseSBs b3dlcmNhc2VkIGJ5IENTUyBmb3IgcC1jYWN0aW9ucyBpbiBNb25vYm9vaykKICog QHBhcmFtIFN0cmluZyBpZCAtLSBpZCBvZiB0aGUgbmV3IGl0ZW0sIHNob3VsZCBi ZSB1bmlxdWUgYW5kIHByZWZlcmFibHkgaGF2ZSB0aGUgYXBwcm9wcmlhdGUgcHJl Zml4ICgiY2EtIiwgInB0LSIsICJuLSIgb3IgInQtIikKICogQHBhcmFtIFN0cmlu ZyB0b29sdGlwIC0tIHRleHQgdG8gc2hvdyB3aGVuIGhvdmVyaW5nIG92ZXIgdGhl IGxpbmssIHdpdGhvdXQgYWNjZXNza2V5IHN1ZmZpeAogKiBAcGFyYW0gU3RyaW5n IGFjY2Vzc2tleSAtLSBhY2Nlc3NrZXkgdG8gYWN0aXZhdGUgdGhpcyBsaW5rIChv bmUgY2hhcmFjdGVyLCB0cnkgdG8gYXZvaWQgY29uZmxpY3RzKQogKiBAcGFyYW0g Tm9kZSBuZXh0bm9kZSAtLSB0aGUgRE9NIG5vZGUgYmVmb3JlIHdoaWNoIHRoZSBu ZXcgaXRlbSBzaG91bGQgYmUgYWRkZWQsIHNob3VsZCBiZSBhbm90aGVyIGl0ZW0g aW4gdGhlIHNhbWUgbGlzdAogKgogKiBAcmV0dXJuIE5vZGUgLS0gdGhlIERPTSBu b2RlIG9mIHRoZSBuZXcgaXRlbSAoYW4gTEkgZWxlbWVudCkgb3IgbnVsbAogKi8K ZnVuY3Rpb24gYWRkUG9ydGxldExpbmsoIHBvcnRsZXQsIGhyZWYsIHRleHQsIGlk LCB0b29sdGlwLCBhY2Nlc3NrZXksIG5leHRub2RlICkgewoJdmFyIHJvb3QgPSBk b2N1bWVudC5nZXRFbGVtZW50QnlJZCggcG9ydGxldCApOwoJaWYgKCAhcm9vdCAp IHsKCQlyZXR1cm4gbnVsbDsKCX0KCXZhciBub2RlID0gcm9vdC5nZXRFbGVtZW50 c0J5VGFnTmFtZSggJ3VsJyApWzBdOwoJaWYgKCAhbm9kZSApIHsKCQlyZXR1cm4g bnVsbDsKCX0KCgkvLyB1bmhpZGUgcG9ydGxldCBpZiBpdCB3YXMgaGlkZGVuIGJl Zm9yZQoJcm9vdC5jbGFzc05hbWUgPSByb290LmNsYXNzTmFtZS5yZXBsYWNlKCAv KF58ICllbXB0eVBvcnRsZXQoIHwkKS8sICIkMiIgKTsKCgl2YXIgc3BhbiA9IGRv Y3VtZW50LmNyZWF0ZUVsZW1lbnQoICdzcGFuJyApOwoJc3Bhbi5hcHBlbmRDaGls ZCggZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIHRleHQgKSApOwoKCXZhciBsaW5r ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2EnICk7CglsaW5rLmFwcGVuZENo aWxkKCBzcGFuICk7CglsaW5rLmhyZWYgPSBocmVmOwoKCXZhciBpdGVtID0gZG9j dW1lbnQuY3JlYXRlRWxlbWVudCggJ2xpJyApOwoJaXRlbS5hcHBlbmRDaGlsZCgg bGluayApOwoJaWYgKCBpZCApIHsKCQlpdGVtLmlkID0gaWQ7Cgl9CgoJaWYgKCBh Y2Nlc3NrZXkgKSB7CgkJbGluay5zZXRBdHRyaWJ1dGUoICdhY2Nlc3NrZXknLCBh Y2Nlc3NrZXkgKTsKCQl0b29sdGlwICs9ICcgWycgKyBhY2Nlc3NrZXkgKyAnXSc7 Cgl9CglpZiAoIHRvb2x0aXAgKSB7CgkJbGluay5zZXRBdHRyaWJ1dGUoICd0aXRs ZScsIHRvb2x0aXAgKTsKCX0KCWlmICggYWNjZXNza2V5ICYmIHRvb2x0aXAgKSB7 CgkJdXBkYXRlVG9vbHRpcEFjY2Vzc0tleXMoIG5ldyBBcnJheSggbGluayApICk7 Cgl9CgoJaWYgKCBuZXh0bm9kZSAmJiBuZXh0bm9kZS5wYXJlbnROb2RlID09IG5v ZGUgKSB7CgkJbm9kZS5pbnNlcnRCZWZvcmUoIGl0ZW0sIG5leHRub2RlICk7Cgl9 IGVsc2UgewoJCW5vZGUuYXBwZW5kQ2hpbGQoIGl0ZW0gKTsgIC8vIElFIGNvbXBh dGliaWxpdHkgKD8pCgl9CgoJcmV0dXJuIGl0ZW07Cn0KCmZ1bmN0aW9uIGdldElu bmVyVGV4dCggZWwgKSB7CglpZiAoIHR5cGVvZiBlbCA9PSAnc3RyaW5nJyApIHsK CQlyZXR1cm4gZWw7Cgl9CglpZiAoIHR5cGVvZiBlbCA9PSAndW5kZWZpbmVkJyAp IHsKCQlyZXR1cm4gZWw7Cgl9CglpZiAoIGVsLnRleHRDb250ZW50ICkgewoJCXJl dHVybiBlbC50ZXh0Q29udGVudDsgLy8gbm90IG5lZWRlZCBidXQgaXQgaXMgZmFz dGVyCgl9CglpZiAoIGVsLmlubmVyVGV4dCApIHsKCQlyZXR1cm4gZWwuaW5uZXJU ZXh0OyAvLyBJRSBkb2Vzbid0IGhhdmUgdGV4dENvbnRlbnQKCX0KCXZhciBzdHIg PSAnJzsKCgl2YXIgY3MgPSBlbC5jaGlsZE5vZGVzOwoJdmFyIGwgPSBjcy5sZW5n dGg7Cglmb3IgKCB2YXIgaSA9IDA7IGkgPCBsOyBpKysgKSB7CgkJc3dpdGNoICgg Y3NbaV0ubm9kZVR5cGUgKSB7CgkJCWNhc2UgMTogLy8gRUxFTUVOVF9OT0RFCgkJ CQlzdHIgKz0gdHNfZ2V0SW5uZXJUZXh0KCBjc1tpXSApOwoJCQkJYnJlYWs7CgkJ CWNhc2UgMzoJLy8gVEVYVF9OT0RFCgkJCQlzdHIgKz0gY3NbaV0ubm9kZVZhbHVl OwoJCQkJYnJlYWs7CgkJfQoJfQoJcmV0dXJuIHN0cjsKfQoKLyogRHVtbXkgZm9y IGRlcHJlY2F0ZWQgZnVuY3Rpb24gKi8KZnVuY3Rpb24gYWtleXR0KCBkb0lkICkg ewp9Cgp2YXIgY2hlY2tib3hlczsKdmFyIGxhc3RDaGVja2JveDsKCmZ1bmN0aW9u IHNldHVwQ2hlY2tib3hTaGlmdENsaWNrKCkgewoJY2hlY2tib3hlcyA9IFtdOwoJ bGFzdENoZWNrYm94ID0gbnVsbDsKCXZhciBpbnB1dHMgPSBkb2N1bWVudC5nZXRF bGVtZW50c0J5VGFnTmFtZSggJ2lucHV0JyApOwoJYWRkQ2hlY2tib3hDbGlja0hh bmRsZXJzKCBpbnB1dHMgKTsKfQoKZnVuY3Rpb24gYWRkQ2hlY2tib3hDbGlja0hh bmRsZXJzKCBpbnB1dHMsIHN0YXJ0ICkgewoJaWYgKCAhc3RhcnQgKSB7CgkJc3Rh cnQgPSAwOwoJfQoKCXZhciBmaW5pc2ggPSBzdGFydCArIDI1MDsKCWlmICggZmlu aXNoID4gaW5wdXRzLmxlbmd0aCApIHsKCQlmaW5pc2ggPSBpbnB1dHMubGVuZ3Ro OwoJfQoKCWZvciAoIHZhciBpID0gc3RhcnQ7IGkgPCBmaW5pc2g7IGkrKyApIHsK CQl2YXIgY2IgPSBpbnB1dHNbaV07CgkJaWYgKCAhY2IudHlwZSB8fCBjYi50eXBl LnRvTG93ZXJDYXNlKCkgIT0gJ2NoZWNrYm94JyApIHsKCQkJY29udGludWU7CgkJ fQoJCXZhciBlbmQgPSBjaGVja2JveGVzLmxlbmd0aDsKCQljaGVja2JveGVzW2Vu ZF0gPSBjYjsKCQljYi5pbmRleCA9IGVuZDsKCQljYi5vbmNsaWNrID0gY2hlY2ti b3hDbGlja0hhbmRsZXI7Cgl9CgoJaWYgKCBmaW5pc2ggPCBpbnB1dHMubGVuZ3Ro ICkgewoJCXNldFRpbWVvdXQoIGZ1bmN0aW9uKCkgewoJCQlhZGRDaGVja2JveENs aWNrSGFuZGxlcnMoIGlucHV0cywgZmluaXNoICk7CgkJfSwgMjAwICk7Cgl9Cn0K CmZ1bmN0aW9uIGNoZWNrYm94Q2xpY2tIYW5kbGVyKCBlICkgewoJaWYgKCB0eXBl b2YgZSA9PSAndW5kZWZpbmVkJyApIHsKCQllID0gd2luZG93LmV2ZW50OwoJfQoJ aWYgKCAhZS5zaGlmdEtleSB8fCBsYXN0Q2hlY2tib3ggPT09IG51bGwgKSB7CgkJ bGFzdENoZWNrYm94ID0gdGhpcy5pbmRleDsKCQlyZXR1cm4gdHJ1ZTsKCX0KCXZh ciBlbmRTdGF0ZSA9IHRoaXMuY2hlY2tlZDsKCXZhciBzdGFydCwgZmluaXNoOwoJ aWYgKCB0aGlzLmluZGV4IDwgbGFzdENoZWNrYm94ICkgewoJCXN0YXJ0ID0gdGhp cy5pbmRleCArIDE7CgkJZmluaXNoID0gbGFzdENoZWNrYm94OwoJfSBlbHNlIHsK CQlzdGFydCA9IGxhc3RDaGVja2JveDsKCQlmaW5pc2ggPSB0aGlzLmluZGV4IC0g MTsKCX0KCWZvciAoIHZhciBpID0gc3RhcnQ7IGkgPD0gZmluaXNoOyArK2kgKSB7 CgkJY2hlY2tib3hlc1tpXS5jaGVja2VkID0gZW5kU3RhdGU7CgkJaWYoIGkgPiBz dGFydCAmJiB0eXBlb2YgY2hlY2tib3hlc1tpXS5vbmNoYW5nZSA9PSAnZnVuY3Rp b24nICkgewoJCQljaGVja2JveGVzW2ldLm9uY2hhbmdlKCk7IC8vIGZpcmUgdHJp Z2dlcnMKCQl9Cgl9CglsYXN0Q2hlY2tib3ggPSB0aGlzLmluZGV4OwoJcmV0dXJu IHRydWU7Cn0KCgovKgoJV3JpdHRlbiBieSBKb25hdGhhbiBTbm9vaywgaHR0cDov L3d3dy5zbm9vay5jYS9qb25hdGhhbgoJQWRkLW9ucyBieSBSb2JlcnQgTnltYW4s IGh0dHA6Ly93d3cucm9iZXJ0bnltYW4uY29tCglBdXRob3Igc2F5cyAiVGhlIGNy ZWRpdCBjb21tZW50IGlzIGFsbCBpdCB0YWtlcywgbm8gbGljZW5zZS4gR28gY3Jh enkgd2l0aCBpdCE6LSkiCglGcm9tIGh0dHA6Ly93d3cucm9iZXJ0bnltYW4uY29t LzIwMDUvMTEvMDcvdGhlLXVsdGltYXRlLWdldGVsZW1lbnRzYnljbGFzc25hbWUv CiovCmZ1bmN0aW9uIGdldEVsZW1lbnRzQnlDbGFzc05hbWUoIG9FbG0sIHN0clRh Z05hbWUsIG9DbGFzc05hbWVzICkgewoJdmFyIGFyclJldHVybkVsZW1lbnRzID0g bmV3IEFycmF5KCk7CglpZiAoIHR5cGVvZiggb0VsbS5nZXRFbGVtZW50c0J5Q2xh c3NOYW1lICkgPT0gJ2Z1bmN0aW9uJyApIHsKCQkvKiBVc2UgYSBuYXRpdmUgaW1w bGVtZW50YXRpb24gd2hlcmUgcG9zc2libGUgRkYzLCBTYWYzLjIsIE9wZXJhIDku NSAqLwoJCXZhciBhcnJOYXRpdmVSZXR1cm4gPSBvRWxtLmdldEVsZW1lbnRzQnlD bGFzc05hbWUoIG9DbGFzc05hbWVzICk7CgkJaWYgKCBzdHJUYWdOYW1lID09ICcq JyApIHsKCQkJcmV0dXJuIGFyck5hdGl2ZVJldHVybjsKCQl9CgkJZm9yICggdmFy IGggPSAwOyBoIDwgYXJyTmF0aXZlUmV0dXJuLmxlbmd0aDsgaCsrICkgewoJCQlp ZiggYXJyTmF0aXZlUmV0dXJuW2hdLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PSBz dHJUYWdOYW1lLnRvTG93ZXJDYXNlKCkgKSB7CgkJCQlhcnJSZXR1cm5FbGVtZW50 c1thcnJSZXR1cm5FbGVtZW50cy5sZW5ndGhdID0gYXJyTmF0aXZlUmV0dXJuW2hd OwoJCQl9CgkJfQoJCXJldHVybiBhcnJSZXR1cm5FbGVtZW50czsKCX0KCXZhciBh cnJFbGVtZW50cyA9ICggc3RyVGFnTmFtZSA9PSAnKicgJiYgb0VsbS5hbGwgKSA/ IG9FbG0uYWxsIDogb0VsbS5nZXRFbGVtZW50c0J5VGFnTmFtZSggc3RyVGFnTmFt ZSApOwoJdmFyIGFyclJlZ0V4cENsYXNzTmFtZXMgPSBuZXcgQXJyYXkoKTsKCWlm KCB0eXBlb2Ygb0NsYXNzTmFtZXMgPT0gJ29iamVjdCcgKSB7CgkJZm9yKCB2YXIg aSA9IDA7IGkgPCBvQ2xhc3NOYW1lcy5sZW5ndGg7IGkrKyApIHsKCQkJYXJyUmVn RXhwQ2xhc3NOYW1lc1thcnJSZWdFeHBDbGFzc05hbWVzLmxlbmd0aF0gPQoJCQkJ bmV3IFJlZ0V4cCgiKF58XFxzKSIgKyBvQ2xhc3NOYW1lc1tpXS5yZXBsYWNlKC9c LS9nLCAiXFwtIikgKyAiKFxcc3wkKSIpOwoJCX0KCX0gZWxzZSB7CgkJYXJyUmVn RXhwQ2xhc3NOYW1lc1thcnJSZWdFeHBDbGFzc05hbWVzLmxlbmd0aF0gPQoJCQlu ZXcgUmVnRXhwKCIoXnxcXHMpIiArIG9DbGFzc05hbWVzLnJlcGxhY2UoL1wtL2cs ICJcXC0iKSArICIoXFxzfCQpIik7Cgl9Cgl2YXIgb0VsZW1lbnQ7Cgl2YXIgYk1h dGNoZXNBbGw7Cglmb3IoIHZhciBqID0gMDsgaiA8IGFyckVsZW1lbnRzLmxlbmd0 aDsgaisrICkgewoJCW9FbGVtZW50ID0gYXJyRWxlbWVudHNbal07CgkJYk1hdGNo ZXNBbGwgPSB0cnVlOwoJCWZvciggdmFyIGsgPSAwOyBrIDwgYXJyUmVnRXhwQ2xh c3NOYW1lcy5sZW5ndGg7IGsrKyApIHsKCQkJaWYoICFhcnJSZWdFeHBDbGFzc05h bWVzW2tdLnRlc3QoIG9FbGVtZW50LmNsYXNzTmFtZSApICkgewoJCQkJYk1hdGNo ZXNBbGwgPSBmYWxzZTsKCQkJCWJyZWFrOwoJCQl9CgkJfQoJCWlmKCBiTWF0Y2hl c0FsbCApIHsKCQkJYXJyUmV0dXJuRWxlbWVudHNbYXJyUmV0dXJuRWxlbWVudHMu bGVuZ3RoXSA9IG9FbGVtZW50OwoJCX0KCX0KCXJldHVybiAoIGFyclJldHVybkVs ZW1lbnRzICk7Cn0KCmZ1bmN0aW9uIHJlZGlyZWN0VG9GcmFnbWVudCggZnJhZ21l bnQgKSB7Cgl2YXIgbWF0Y2ggPSBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9B cHBsZVdlYktpdFwvKFxkKykvKTsKCWlmICggbWF0Y2ggKSB7CgkJdmFyIHdlYktp dFZlcnNpb24gPSBwYXJzZUludCggbWF0Y2hbMV0gKTsKCQlpZiAoIHdlYktpdFZl cnNpb24gPCA0MjAgKSB7CgkJCS8vIFJlbGVhc2VkIFNhZmFyaSB3LyBXZWJLaXQg NDE4LjkuMSBtZXNzZXMgdXAgaG9ycmlibHkKCQkJLy8gTmlnaHRsaWVzIG9mIDQy MCsgYXJlIG9rCgkJCXJldHVybjsKCQl9Cgl9CglpZiAoIGlzX2dlY2tvICkgewoJ CS8vIE1vemlsbGEgbmVlZHMgdG8gd2FpdCB1bnRpbCBhZnRlciBsb2FkLCBvdGhl cndpc2UgdGhlIHdpbmRvdyBkb2Vzbid0IHNjcm9sbAoJCWFkZE9ubG9hZEhvb2so ZnVuY3Rpb24oKSB7CgkJCWlmICggd2luZG93LmxvY2F0aW9uLmhhc2ggPT0gJycg KSB7CgkJCQl3aW5kb3cubG9jYXRpb24uaGFzaCA9IGZyYWdtZW50OwoJCQl9CgkJ fSk7Cgl9IGVsc2UgewoJCWlmICggd2luZG93LmxvY2F0aW9uLmhhc2ggPT0gJycg KSB7CgkJCXdpbmRvdy5sb2NhdGlvbi5oYXNoID0gZnJhZ21lbnQ7CgkJfQoJfQp9 CgovKgogKiBUYWJsZSBzb3J0aW5nIHNjcmlwdCBiYXNlZCBvbiBvbmUgKGMpIDE5 OTctMjAwNiBTdHVhcnQgTGFuZ3JpZGdlIGFuZCBKb29zdAogKiBkZSBWYWxrOgog KiBodHRwOi8vd3d3Lmpvb3N0ZGV2YWxrLm5sL2NvZGUvc29ydGFibGUtdGFibGUv CiAqIGh0dHA6Ly93d3cua3J5b2dlbml4Lm9yZy9jb2RlL2Jyb3dzZXIvc29ydHRh YmxlLwogKgogKiBAdG9kbyBkb24ndCBicmVhayBvbiBjb2xzcGFucy9yb3dzcGFu cyAoYnVnIDgwMjgpCiAqIEB0b2RvIGxhbmd1YWdlLXNwZWNpZmljIGRpZ2l0IGdy b3VwaW5nL2RlY2ltYWxzIChidWcgODA2MykKICogQHRvZG8gc3VwcG9ydCBhbGwg YWNjZXB0ZWQgZGF0ZSBmb3JtYXRzIChidWcgODIyNikKICovCgp2YXIgdHNfaW1h Z2VfcGF0aCA9IHN0eWxlcGF0aCArICcvY29tbW9uL2ltYWdlcy8nOwp2YXIgdHNf aW1hZ2VfdXAgPSAnc29ydF91cC5naWYnOwp2YXIgdHNfaW1hZ2VfZG93biA9ICdz b3J0X2Rvd24uZ2lmJzsKdmFyIHRzX2ltYWdlX25vbmUgPSAnc29ydF9ub25lLmdp Zic7CnZhciB0c19ldXJvcGVhbmRhdGUgPSB3Z0NvbnRlbnRMYW5ndWFnZSAhPSAn ZW4nOyAvLyBUaGUgbm9uLUFtZXJpY2FuLWluY2xpbmVkIGNhbiBjaGFuZ2UgdG8g InRydWUiCnZhciB0c19hbHRlcm5hdGVfcm93X2NvbG9ycyA9IGZhbHNlOwp2YXIg dHNfbnVtYmVyX3RyYW5zZm9ybV90YWJsZSA9IG51bGw7CnZhciB0c19udW1iZXJf cmVnZXggPSBudWxsOwoKZnVuY3Rpb24gc29ydGFibGVzX2luaXQoKSB7Cgl2YXIg aWRudW0gPSAwOwoJLy8gRmluZCBhbGwgdGFibGVzIHdpdGggY2xhc3Mgc29ydGFi bGUgYW5kIG1ha2UgdGhlbSBzb3J0YWJsZQoJdmFyIHRhYmxlcyA9IGdldEVsZW1l bnRzQnlDbGFzc05hbWUoIGRvY3VtZW50LCAndGFibGUnLCAnc29ydGFibGUnICk7 Cglmb3IgKCB2YXIgdGkgPSAwOyB0aSA8IHRhYmxlcy5sZW5ndGggOyB0aSsrICkg ewoJCWlmICggIXRhYmxlc1t0aV0uaWQgKSB7CgkJCXRhYmxlc1t0aV0uc2V0QXR0 cmlidXRlKCAnaWQnLCAnc29ydGFibGVfdGFibGVfaWRfJyArIGlkbnVtICk7CgkJ CSsraWRudW07CgkJfQoJCXRzX21ha2VTb3J0YWJsZSggdGFibGVzW3RpXSApOwoJ fQp9CgpmdW5jdGlvbiB0c19tYWtlU29ydGFibGUoIHRhYmxlICkgewoJdmFyIGZp cnN0Um93OwoJaWYgKCB0YWJsZS5yb3dzICYmIHRhYmxlLnJvd3MubGVuZ3RoID4g MCApIHsKCQlpZiAoIHRhYmxlLnRIZWFkICYmIHRhYmxlLnRIZWFkLnJvd3MubGVu Z3RoID4gMCApIHsKCQkJZmlyc3RSb3cgPSB0YWJsZS50SGVhZC5yb3dzW3RhYmxl LnRIZWFkLnJvd3MubGVuZ3RoLTFdOwoJCX0gZWxzZSB7CgkJCWZpcnN0Um93ID0g dGFibGUucm93c1swXTsKCQl9Cgl9CglpZiAoICFmaXJzdFJvdyApIHsKCQlyZXR1 cm47Cgl9CgoJLy8gV2UgaGF2ZSBhIGZpcnN0IHJvdzogYXNzdW1lIGl0J3MgdGhl IGhlYWRlciwgYW5kIG1ha2UgaXRzIGNvbnRlbnRzIGNsaWNrYWJsZSBsaW5rcwoJ Zm9yICggdmFyIGkgPSAwOyBpIDwgZmlyc3RSb3cuY2VsbHMubGVuZ3RoOyBpKysg KSB7CgkJdmFyIGNlbGwgPSBmaXJzdFJvdy5jZWxsc1tpXTsKCQlpZiAoICgnICcg KyBjZWxsLmNsYXNzTmFtZSArICcgJykuaW5kZXhPZignIHVuc29ydGFibGUgJykg PT0gLTEgKSB7CgkJCWNlbGwuaW5uZXJIVE1MICs9ICc8YSBocmVmPSIjIiBjbGFz cz0ic29ydGhlYWRlciIgJwoJCQkJKyAnb25jbGljaz0idHNfcmVzb3J0VGFibGUo dGhpcyk7cmV0dXJuIGZhbHNlOyI+JwoJCQkJKyAnPHNwYW4gY2xhc3M9InNvcnRh cnJvdyI+JwoJCQkJKyAnPGltZyBzcmM9IicKCQkJCSsgdHNfaW1hZ2VfcGF0aAoJ CQkJKyB0c19pbWFnZV9ub25lCgkJCQkrICciIGFsdD0iJmRhcnI7Ii8+PC9zcGFu PjwvYT4nOwoJCX0KCX0KCWlmICggdHNfYWx0ZXJuYXRlX3Jvd19jb2xvcnMgKSB7 CgkJdHNfYWx0ZXJuYXRlKCB0YWJsZSApOwoJfQp9CgpmdW5jdGlvbiB0c19nZXRJ bm5lclRleHQoIGVsICkgewoJcmV0dXJuIGdldElubmVyVGV4dCggZWwgKTsKfQoK ZnVuY3Rpb24gdHNfcmVzb3J0VGFibGUoIGxuayApIHsKCS8vIGdldCB0aGUgc3Bh bgoJdmFyIHNwYW4gPSBsbmsuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NwYW4nKVsw XTsKCgl2YXIgdGQgPSBsbmsucGFyZW50Tm9kZTsKCXZhciB0ciA9IHRkLnBhcmVu dE5vZGU7Cgl2YXIgY29sdW1uID0gdGQuY2VsbEluZGV4OwoKCXZhciB0YWJsZSA9 IHRyLnBhcmVudE5vZGU7Cgl3aGlsZSAoIHRhYmxlICYmICEoIHRhYmxlLnRhZ05h bWUgJiYgdGFibGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09ICd0YWJsZScgKSAp IHsKCQl0YWJsZSA9IHRhYmxlLnBhcmVudE5vZGU7Cgl9CglpZiAoICF0YWJsZSAp IHsKCQlyZXR1cm47Cgl9CgoJaWYgKCB0YWJsZS5yb3dzLmxlbmd0aCA8PSAxICkg ewoJCXJldHVybjsKCX0KCgkvLyBHZW5lcmF0ZSB0aGUgbnVtYmVyIHRyYW5zZm9y bSB0YWJsZSBpZiBpdCdzIG5vdCBkb25lIGFscmVhZHkKCWlmICggdHNfbnVtYmVy X3RyYW5zZm9ybV90YWJsZSA9PT0gbnVsbCApIHsKCQl0c19pbml0VHJhbnNmb3Jt VGFibGUoKTsKCX0KCgkvLyBXb3JrIG91dCBhIHR5cGUgZm9yIHRoZSBjb2x1bW4K CS8vIFNraXAgdGhlIGZpcnN0IHJvdyBpZiB0aGF0J3Mgd2hlcmUgdGhlIGhlYWRp bmdzIGFyZQoJdmFyIHJvd1N0YXJ0ID0gKCB0YWJsZS50SGVhZCAmJiB0YWJsZS50 SGVhZC5yb3dzLmxlbmd0aCA+IDAgPyAwIDogMSApOwoKCXZhciBpdG0gPSAnJzsK CWZvciAoIHZhciBpID0gcm93U3RhcnQ7IGkgPCB0YWJsZS5yb3dzLmxlbmd0aDsg aSsrICkgewoJCWlmICggdGFibGUucm93c1tpXS5jZWxscy5sZW5ndGggPiBjb2x1 bW4gKSB7CgkJCWl0bSA9IHRzX2dldElubmVyVGV4dCh0YWJsZS5yb3dzW2ldLmNl bGxzW2NvbHVtbl0pOwoJCQlpdG0gPSBpdG0ucmVwbGFjZSgvXltcc1x4YTBdKy8s ICcnKS5yZXBsYWNlKC9bXHNceGEwXSskLywgJycpOwoJCQlpZiAoIGl0bSAhPSAn JyApIHsKCQkJCWJyZWFrOwoJCQl9CgkJfQoJfQoKCS8vIFRPRE86IGJ1ZyA4MjI2 LCBsb2NhbGlzZWQgZGF0ZSBmb3JtYXRzCgl2YXIgc29ydGZuID0gdHNfc29ydF9n ZW5lcmljOwoJdmFyIHByZXByb2Nlc3NvciA9IHRzX3RvTG93ZXJDYXNlOwoJaWYg KCAvXlxkXGRbXC8uIC1dW2EtekEtWl17M31bXC8uIC1dXGRcZFxkXGQkLy50ZXN0 KCBpdG0gKSApIHsKCQlwcmVwcm9jZXNzb3IgPSB0c19kYXRlVG9Tb3J0S2V5OwoJ fSBlbHNlIGlmICggL15cZFxkW1wvLi1dXGRcZFtcLy4tXVxkXGRcZFxkJC8udGVz dCggaXRtICkgKSB7CgkJcHJlcHJvY2Vzc29yID0gdHNfZGF0ZVRvU29ydEtleTsK CX0gZWxzZSBpZiAoIC9eXGRcZFtcLy4tXVxkXGRbXC8uLV1cZFxkJC8udGVzdCgg aXRtICkgKSB7CgkJcHJlcHJvY2Vzc29yID0gdHNfZGF0ZVRvU29ydEtleTsKCQkv LyAobWludXMgc2lnbikoW3BvdW5kIGRvbGxhciBldXJvIHllbiBjdXJyZW5jeV18 Y2VudHMpCgl9IGVsc2UgaWYgKCAvKF4oWy1cdTIyMTJdICopP1tcdTAwYTMkXHUy MGFjXHUwMGE0XHUwMGE1XXxcdTAwYTIkKS8udGVzdCggaXRtICkgKSB7CgkJcHJl cHJvY2Vzc29yID0gdHNfY3VycmVuY3lUb1NvcnRLZXk7Cgl9IGVsc2UgaWYgKCB0 c19udW1iZXJfcmVnZXgudGVzdCggaXRtICkgKSB7CgkJcHJlcHJvY2Vzc29yID0g dHNfcGFyc2VGbG9hdDsKCX0KCgl2YXIgcmV2ZXJzZSA9ICggc3Bhbi5nZXRBdHRy aWJ1dGUoICdzb3J0ZGlyJyApID09ICdkb3duJyApOwoKCXZhciBuZXdSb3dzID0g bmV3IEFycmF5KCk7Cgl2YXIgc3RhdGljUm93cyA9IG5ldyBBcnJheSgpOwoJZm9y ICggdmFyIGogPSByb3dTdGFydDsgaiA8IHRhYmxlLnJvd3MubGVuZ3RoOyBqKysg KSB7CgkJdmFyIHJvdyA9IHRhYmxlLnJvd3Nbal07CgkJaWYoICgnICcgKyByb3cu Y2xhc3NOYW1lICsgJyAnKS5pbmRleE9mKCcgdW5zb3J0YWJsZSAnKSA8IDAgKSB7 CgkJCXZhciBrZXlUZXh0ID0gdHNfZ2V0SW5uZXJUZXh0KCByb3cuY2VsbHNbY29s dW1uXSApOwoJCQlpZigga2V5VGV4dCA9PT0gdW5kZWZpbmVkICkgewoJCQkJa2V5 VGV4dCA9ICcnOyAKCQkJfQoJCQl2YXIgb2xkSW5kZXggPSAoIHJldmVyc2UgPyAt aiA6IGogKTsKCQkJdmFyIHByZXByb2Nlc3NlZCA9IHByZXByb2Nlc3Nvcigga2V5 VGV4dC5yZXBsYWNlKC9eW1xzXHhhMF0rLywgJycpLnJlcGxhY2UoL1tcc1x4YTBd KyQvLCAnJykgKTsKCgkJCW5ld1Jvd3NbbmV3Um93cy5sZW5ndGhdID0gbmV3IEFy cmF5KCByb3csIHByZXByb2Nlc3NlZCwgb2xkSW5kZXggKTsKCQl9IGVsc2UgewoJ CQlzdGF0aWNSb3dzW3N0YXRpY1Jvd3MubGVuZ3RoXSA9IG5ldyBBcnJheSggcm93 LCBmYWxzZSwgai1yb3dTdGFydCApOwoJCX0KCX0KCgluZXdSb3dzLnNvcnQoIHNv cnRmbiApOwoKCXZhciBhcnJvd0hUTUw7CglpZiAoIHJldmVyc2UgKSB7CgkJYXJy b3dIVE1MID0gJzxpbWcgc3JjPSInICsgdHNfaW1hZ2VfcGF0aCArIHRzX2ltYWdl X2Rvd24gKyAnIiBhbHQ9IiZkYXJyOyIvPic7CgkJbmV3Um93cy5yZXZlcnNlKCk7 CgkJc3Bhbi5zZXRBdHRyaWJ1dGUoICdzb3J0ZGlyJywgJ3VwJyApOwoJfSBlbHNl IHsKCQlhcnJvd0hUTUwgPSAnPGltZyBzcmM9IicgKyB0c19pbWFnZV9wYXRoICsg dHNfaW1hZ2VfdXAgKyAnIiBhbHQ9IiZ1YXJyOyIvPic7CgkJc3Bhbi5zZXRBdHRy aWJ1dGUoICdzb3J0ZGlyJywgJ2Rvd24nICk7Cgl9CgoJZm9yICggdmFyIGkgPSAw OyBpIDwgc3RhdGljUm93cy5sZW5ndGg7IGkrKyApIHsKCQl2YXIgcm93ID0gc3Rh dGljUm93c1tpXTsKCQluZXdSb3dzLnNwbGljZSggcm93WzJdLCAwLCByb3cgKTsK CX0KCgkvLyBXZSBhcHBlbmRDaGlsZCByb3dzIHRoYXQgYWxyZWFkeSBleGlzdCB0 byB0aGUgdGJvZHksIHNvIGl0IG1vdmVzIHRoZW0gcmF0aGVyIHRoYW4gY3JlYXRp bmcgbmV3IG9uZXMKCS8vIGRvbid0IGRvIHNvcnRib3R0b20gcm93cwoJZm9yICgg dmFyIGkgPSAwOyBpIDwgbmV3Um93cy5sZW5ndGg7IGkrKyApIHsKCQlpZiAoICgg JyAnICsgbmV3Um93c1tpXVswXS5jbGFzc05hbWUgKyAnICcpLmluZGV4T2YoJyBz b3J0Ym90dG9tICcpID09IC0xICkgewoJCQl0YWJsZS50Qm9kaWVzWzBdLmFwcGVu ZENoaWxkKCBuZXdSb3dzW2ldWzBdICk7CgkJfQoJfQoJLy8gZG8gc29ydGJvdHRv bSByb3dzIG9ubHkKCWZvciAoIHZhciBpID0gMDsgaSA8IG5ld1Jvd3MubGVuZ3Ro OyBpKysgKSB7CgkJaWYgKCAoICcgJyArIG5ld1Jvd3NbaV1bMF0uY2xhc3NOYW1l ICsgJyAnKS5pbmRleE9mKCcgc29ydGJvdHRvbSAnKSAhPSAtMSApIHsKCQkJdGFi bGUudEJvZGllc1swXS5hcHBlbmRDaGlsZCggbmV3Um93c1tpXVswXSApOwoJCX0K CX0KCgkvLyBEZWxldGUgYW55IG90aGVyIGFycm93cyB0aGVyZSBtYXkgYmUgc2hv d2luZwoJdmFyIHNwYW5zID0gZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSggdHIsICdz cGFuJywgJ3NvcnRhcnJvdycgKTsKCWZvciAoIHZhciBpID0gMDsgaSA8IHNwYW5z Lmxlbmd0aDsgaSsrICkgewoJCXNwYW5zW2ldLmlubmVySFRNTCA9ICc8aW1nIHNy Yz0iJyArIHRzX2ltYWdlX3BhdGggKyB0c19pbWFnZV9ub25lICsgJyIgYWx0PSIm ZGFycjsiLz4nOwoJfQoJc3Bhbi5pbm5lckhUTUwgPSBhcnJvd0hUTUw7CgoJaWYg KCB0c19hbHRlcm5hdGVfcm93X2NvbG9ycyApIHsKCQl0c19hbHRlcm5hdGUoIHRh YmxlICk7Cgl9Cn0KCmZ1bmN0aW9uIHRzX2luaXRUcmFuc2Zvcm1UYWJsZSgpIHsK CWlmICggdHlwZW9mIHdnU2VwYXJhdG9yVHJhbnNmb3JtVGFibGUgPT0gJ3VuZGVm aW5lZCcKCQkJfHwgKCB3Z1NlcGFyYXRvclRyYW5zZm9ybVRhYmxlWzBdID09ICcn ICYmIHdnRGlnaXRUcmFuc2Zvcm1UYWJsZVsyXSA9PSAnJyApICkKCXsKCQlkaWdp dENsYXNzID0gIlswLTksLl0iOwoJCXRzX251bWJlcl90cmFuc2Zvcm1fdGFibGUg PSBmYWxzZTsKCX0gZWxzZSB7CgkJdHNfbnVtYmVyX3RyYW5zZm9ybV90YWJsZSA9 IHt9OwoJCS8vIFVucGFjayB0aGUgdHJhbnNmb3JtIHRhYmxlCgkJLy8gU2VwYXJh dG9ycwoJCWFzY2lpID0gd2dTZXBhcmF0b3JUcmFuc2Zvcm1UYWJsZVswXS5zcGxp dCgiXHQiKTsKCQlsb2NhbGlzZWQgPSB3Z1NlcGFyYXRvclRyYW5zZm9ybVRhYmxl WzFdLnNwbGl0KCJcdCIpOwoJCWZvciAoIHZhciBpID0gMDsgaSA8IGFzY2lpLmxl bmd0aDsgaSsrICkgewoJCQl0c19udW1iZXJfdHJhbnNmb3JtX3RhYmxlW2xvY2Fs aXNlZFtpXV0gPSBhc2NpaVtpXTsKCQl9CgkJLy8gRGlnaXRzCgkJYXNjaWkgPSB3 Z0RpZ2l0VHJhbnNmb3JtVGFibGVbMF0uc3BsaXQoIlx0Iik7CgkJbG9jYWxpc2Vk ID0gd2dEaWdpdFRyYW5zZm9ybVRhYmxlWzFdLnNwbGl0KCJcdCIpOwoJCWZvciAo IHZhciBpID0gMDsgaSA8IGFzY2lpLmxlbmd0aDsgaSsrICkgewoJCQl0c19udW1i ZXJfdHJhbnNmb3JtX3RhYmxlW2xvY2FsaXNlZFtpXV0gPSBhc2NpaVtpXTsKCQl9 CgoJCS8vIENvbnN0cnVjdCByZWdleCBmb3IgbnVtYmVyIGlkZW50aWZpY2F0aW9u CgkJZGlnaXRzID0gWycwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2Jywg JzcnLCAnOCcsICc5JywgJywnLCAnXFwuJ107CgkJbWF4RGlnaXRMZW5ndGggPSAx OwoJCWZvciAoIHZhciBkaWdpdCBpbiB0c19udW1iZXJfdHJhbnNmb3JtX3RhYmxl ICkgewoJCQkvLyBFc2NhcGUgcmVnZXggbWV0YWNoYXJhY3RlcnMKCQkJZGlnaXRz LnB1c2goCgkJCQlkaWdpdC5yZXBsYWNlKCAvW1xcXFwkXCpcK1w/XC5cKFwpXHxc e1x9XFtcXVwtXS8sCgkJCQkJZnVuY3Rpb24oIHMgKSB7IHJldHVybiAnXFwnICsg czsgfSApCgkJCSk7CgkJCWlmICggZGlnaXQubGVuZ3RoID4gbWF4RGlnaXRMZW5n dGggKSB7CgkJCQltYXhEaWdpdExlbmd0aCA9IGRpZ2l0Lmxlbmd0aDsKCQkJfQoJ CX0KCQlpZiAoIG1heERpZ2l0TGVuZ3RoID4gMSApIHsKCQkJZGlnaXRDbGFzcyA9 ICdbJyArIGRpZ2l0cy5qb2luKCAnJywgZGlnaXRzICkgKyAnXSc7CgkJfSBlbHNl IHsKCQkJZGlnaXRDbGFzcyA9ICcoJyArIGRpZ2l0cy5qb2luKCAnfCcsIGRpZ2l0 cyApICsgJyknOwoJCX0KCX0KCgkvLyBXZSBhbGxvdyBhIHRyYWlsaW5nIHBlcmNl bnQgc2lnbiwgd2hpY2ggd2UganVzdCBzdHJpcC4gIFRoaXMgd29ya3MgZmluZQoJ Ly8gaWYgcGVyY2VudHMgYW5kIHJlZ3VsYXIgbnVtYmVycyBhcmVuJ3QgYmVpbmcg bWl4ZWQuCgl0c19udW1iZXJfcmVnZXggPSBuZXcgUmVnRXhwKAoJCSJeKCIgKwoJ CQkiWy0rXHUyMjEyXT9bMC05XVswLTksXSooXFwuWzAtOSxdKik/KEVbLStcdTIy MTJdP1swLTldWzAtOSxdKik/IiArIC8vIEZvcnRyYW4tc3R5bGUgc2NpZW50aWZp YwoJCQkifCIgKwoJCQkiWy0rXHUyMjEyXT8iICsgZGlnaXRDbGFzcyArICIrJT8i ICsgLy8gR2VuZXJpYyBsb2NhbGlzZWQKCQkiKSQiLCAiaSIKCSk7Cn0KCmZ1bmN0 aW9uIHRzX3RvTG93ZXJDYXNlKCBzICkgewoJcmV0dXJuIHMudG9Mb3dlckNhc2Uo KTsKfQoKZnVuY3Rpb24gdHNfZGF0ZVRvU29ydEtleSggZGF0ZSApIHsKCS8vIHky ayBub3RlczogdHdvIGRpZ2l0IHllYXJzIGxlc3MgdGhhbiA1MCBhcmUgdHJlYXRl ZCBhcyAyMFhYLCBncmVhdGVyIHRoYW4gNTAgYXJlIHRyZWF0ZWQgYXMgMTlYWAoJ aWYgKCBkYXRlLmxlbmd0aCA9PSAxMSApIHsKCQlzd2l0Y2ggKCBkYXRlLnN1YnN0 ciggMywgMyApLnRvTG93ZXJDYXNlKCkgKSB7CgkJCWNhc2UgJ2phbic6CgkJCQl2 YXIgbW9udGggPSAnMDEnOwoJCQkJYnJlYWs7CgkJCWNhc2UgJ2ZlYic6CgkJCQl2 YXIgbW9udGggPSAnMDInOwoJCQkJYnJlYWs7CgkJCWNhc2UgJ21hcic6CgkJCQl2 YXIgbW9udGggPSAnMDMnOwoJCQkJYnJlYWs7CgkJCWNhc2UgJ2Fwcic6CgkJCQl2 YXIgbW9udGggPSAnMDQnOwoJCQkJYnJlYWs7CgkJCWNhc2UgJ21heSc6CgkJCQl2 YXIgbW9udGggPSAnMDUnOwoJCQkJYnJlYWs7CgkJCWNhc2UgJ2p1bic6CgkJCQl2 YXIgbW9udGggPSAnMDYnOwoJCQkJYnJlYWs7CgkJCWNhc2UgJ2p1bCc6CgkJCQl2 YXIgbW9udGggPSAnMDcnOwoJCQkJYnJlYWs7CgkJCWNhc2UgJ2F1Zyc6CgkJCQl2 YXIgbW9udGggPSAnMDgnOwoJCQkJYnJlYWs7CgkJCWNhc2UgJ3NlcCc6CgkJCQl2 YXIgbW9udGggPSAnMDknOwoJCQkJYnJlYWs7CgkJCWNhc2UgJ29jdCc6CgkJCQl2 YXIgbW9udGggPSAnMTAnOwoJCQkJYnJlYWs7CgkJCWNhc2UgJ25vdic6CgkJCQl2 YXIgbW9udGggPSAnMTEnOwoJCQkJYnJlYWs7CgkJCWNhc2UgJ2RlYyc6CgkJCQl2 YXIgbW9udGggPSAnMTInOwoJCQkJYnJlYWs7CgkJCS8vIGRlZmF1bHQ6IHZhciBt b250aCA9ICcwMCc7CgkJfQoJCXJldHVybiBkYXRlLnN1YnN0ciggNywgNCApICsg bW9udGggKyBkYXRlLnN1YnN0ciggMCwgMiApOwoJfSBlbHNlIGlmICggZGF0ZS5s ZW5ndGggPT0gMTAgKSB7CgkJaWYgKCB0c19ldXJvcGVhbmRhdGUgPT0gZmFsc2Ug KSB7CgkJCXJldHVybiBkYXRlLnN1YnN0ciggNiwgNCApICsgZGF0ZS5zdWJzdHIo IDAsIDIgKSArIGRhdGUuc3Vic3RyKCAzLCAyICk7CgkJfSBlbHNlIHsKCQkJcmV0 dXJuIGRhdGUuc3Vic3RyKCA2LCA0ICkgKyBkYXRlLnN1YnN0ciggMywgMiApICsg ZGF0ZS5zdWJzdHIoIDAsIDIgKTsKCQl9Cgl9IGVsc2UgaWYgKCBkYXRlLmxlbmd0 aCA9PSA4ICkgewoJCXlyID0gZGF0ZS5zdWJzdHIoIDYsIDIgKTsKCQlpZiAoIHBh cnNlSW50KCB5ciApIDwgNTAgKSB7CgkJCXlyID0gJzIwJyArIHlyOwoJCX0gZWxz ZSB7CgkJCXlyID0gJzE5JyArIHlyOwoJCX0KCQlpZiAoIHRzX2V1cm9wZWFuZGF0 ZSA9PSB0cnVlICkgewoJCQlyZXR1cm4geXIgKyBkYXRlLnN1YnN0ciggMywgMiAp ICsgZGF0ZS5zdWJzdHIoIDAsIDIgKTsKCQl9IGVsc2UgewoJCQlyZXR1cm4geXIg KyBkYXRlLnN1YnN0ciggMCwgMiApICsgZGF0ZS5zdWJzdHIoIDMsIDIgKTsKCQl9 Cgl9CglyZXR1cm4gJzAwMDAwMDAwJzsKfQoKZnVuY3Rpb24gdHNfcGFyc2VGbG9h dCggcyApIHsKCWlmICggIXMgKSB7CgkJcmV0dXJuIDA7Cgl9CglpZiAoIHRzX251 bWJlcl90cmFuc2Zvcm1fdGFibGUgIT0gZmFsc2UgKSB7CgkJdmFyIG5ld051bSA9 ICcnLCBjOwoKCQlmb3IgKCB2YXIgcCA9IDA7IHAgPCBzLmxlbmd0aDsgcCsrICkg ewoJCQljID0gcy5jaGFyQXQoIHAgKTsKCQkJaWYgKCBjIGluIHRzX251bWJlcl90 cmFuc2Zvcm1fdGFibGUgKSB7CgkJCQluZXdOdW0gKz0gdHNfbnVtYmVyX3RyYW5z Zm9ybV90YWJsZVtjXTsKCQkJfSBlbHNlIHsKCQkJCW5ld051bSArPSBjOwoJCQl9 CgkJfQoJCXMgPSBuZXdOdW07Cgl9CgludW0gPSBwYXJzZUZsb2F0KCBzLnJlcGxh Y2UoL1ssIF0vZywgJycpLnJlcGxhY2UoIlx1MjIxMiIsICctJykgKTsKCXJldHVy biAoIGlzTmFOKCBudW0gKSA/IC1JbmZpbml0eSA6IG51bSApOwp9CgpmdW5jdGlv biB0c19jdXJyZW5jeVRvU29ydEtleSggcyApIHsKCXJldHVybiB0c19wYXJzZUZs b2F0KHMucmVwbGFjZSgvW14tXHUyMjEyMC05LixdL2csJycpKTsKfQoKZnVuY3Rp b24gdHNfc29ydF9nZW5lcmljKCBhLCBiICkgewoJcmV0dXJuIGFbMV0gPCBiWzFd ID8gLTEgOiBhWzFdID4gYlsxXSA/IDEgOiBhWzJdIC0gYlsyXTsKfQoKZnVuY3Rp b24gdHNfYWx0ZXJuYXRlKCB0YWJsZSApIHsKCS8vIFRha2Ugb2JqZWN0IHRhYmxl IGFuZCBnZXQgYWxsIGl0J3MgdGJvZGllcy4KCXZhciB0YWJsZUJvZGllcyA9IHRh YmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCAndGJvZHknICk7CgkvLyBMb29wIHRo cm91Z2ggdGhlc2UgdGJvZGllcwoJZm9yICggdmFyIGkgPSAwOyBpIDwgdGFibGVC b2RpZXMubGVuZ3RoOyBpKysgKSB7CgkJLy8gVGFrZSB0aGUgdGJvZHksIGFuZCBn ZXQgYWxsIGl0J3Mgcm93cwoJCXZhciB0YWJsZVJvd3MgPSB0YWJsZUJvZGllc1tp XS5nZXRFbGVtZW50c0J5VGFnTmFtZSggJ3RyJyApOwoJCS8vIExvb3AgdGhyb3Vn aCB0aGVzZSByb3dzCgkJLy8gU3RhcnQgYXQgMSBiZWNhdXNlIHdlIHdhbnQgdG8g bGVhdmUgdGhlIGhlYWRpbmcgcm93IHVudG91Y2hlZAoJCWZvciAoIHZhciBqID0g MDsgaiA8IHRhYmxlUm93cy5sZW5ndGg7IGorKyApIHsKCQkJLy8gQ2hlY2sgaWYg aiBpcyBldmVuLCBhbmQgYXBwbHkgY2xhc3NlcyBmb3IgYm90aCBwb3NzaWJsZSBy ZXN1bHRzCgkJCXZhciBvbGRDbGFzc2VzID0gdGFibGVSb3dzW2pdLmNsYXNzTmFt ZS5zcGxpdCgnICcpOwoJCQl2YXIgbmV3Q2xhc3NOYW1lID0gJyc7CgkJCWZvciAo IHZhciBrID0gMDsgayA8IG9sZENsYXNzZXMubGVuZ3RoOyBrKysgKSB7CgkJCQlp ZiAoIG9sZENsYXNzZXNba10gIT0gJycgJiYgb2xkQ2xhc3Nlc1trXSAhPSAnZXZl bicgJiYgb2xkQ2xhc3Nlc1trXSAhPSAnb2RkJyApIHsKCQkJCQluZXdDbGFzc05h bWUgKz0gb2xkQ2xhc3Nlc1trXSArICcgJzsKCQkJCX0KCQkJfQoJCQl0YWJsZVJv d3Nbal0uY2xhc3NOYW1lID0gbmV3Q2xhc3NOYW1lICsgKCBqICUgMiA9PSAwID8g J2V2ZW4nIDogJ29kZCcgKTsKCQl9Cgl9Cn0KCi8qCiAqIEVuZCBvZiB0YWJsZSBz b3J0aW5nIGNvZGUKICovCgoKLyoqCiAqIEFkZCBhIGN1dGUgbGl0dGxlIGJveCBh dCB0aGUgdG9wIG9mIHRoZSBzY3JlZW4gdG8gaW5mb3JtIHRoZSB1c2VyIG9mCiAq IHNvbWV0aGluZywgcmVwbGFjaW5nIGFueSBwcmVleGlzdGluZyBtZXNzYWdlLgog KgogKiBAcGFyYW0gU3RyaW5nIC1vci0gRG9tIE9iamVjdCBtZXNzYWdlIEhUTUwg dG8gYmUgcHV0IGluc2lkZSB0aGUgcmlnaHQgZGl2CiAqIEBwYXJhbSBTdHJpbmcg Y2xhc3NOYW1lICAgVXNlZCBpbiBhZGRpbmcgYSBjbGFzczsgc2hvdWxkIGJlIGRp ZmZlcmVudCBmb3IgZWFjaAogKiAgIGNhbGwgdG8gYWxsb3cgQ1NTL0pTIHRvIGhp ZGUgZGlmZmVyZW50IGJveGVzLiAgbnVsbCA9IG5vIGNsYXNzIHVzZWQuCiAqIEBy ZXR1cm4gQm9vbGVhbiAgICAgICBUcnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG9uIGZh aWx1cmUKICovCmZ1bmN0aW9uIGpzTXNnKCBtZXNzYWdlLCBjbGFzc05hbWUgKSB7 CglpZiAoICFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCApIHsKCQlyZXR1cm4gZmFs c2U7Cgl9CgkvLyBXZSBzcGVjaWFsLWNhc2Ugc2tpbiBzdHJ1Y3R1cmVzIHByb3Zp ZGVkIGJ5IHRoZSBzb2Z0d2FyZS4gIFNraW5zIHRoYXQKCS8vIGNob29zZSB0byBh YmFuZG9uIG9yIHNpZ25pZmljYW50bHkgbW9kaWZ5IG91ciBmb3JtYXR0aW5nIGNh biBqdXN0IGRlZmluZQoJLy8gYW4gbXctanMtbWVzc2FnZSBkaXYgdG8gc3RhcnQg d2l0aC4KCXZhciBtZXNzYWdlRGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo ICdtdy1qcy1tZXNzYWdlJyApOwoJaWYgKCAhbWVzc2FnZURpdiApIHsKCQltZXNz YWdlRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTsKCQlpZiAo IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnY29sdW1uLWNvbnRlbnQnICkKCQkm JiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ2NvbnRlbnQnICkgKSB7CgkJCS8v IE1vbm9Cb29rLCBwcmVzdW1hYmx5CgkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlk KCAnY29udGVudCcgKS5pbnNlcnRCZWZvcmUoCgkJCQltZXNzYWdlRGl2LAoJCQkJ ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICdjb250ZW50JyApLmZpcnN0Q2hpbGQK CQkJKTsKCQl9IGVsc2UgaWYgKCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ2Nv bnRlbnQnICkKCQkmJiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ2FydGljbGUn ICkgKSB7CgkJCS8vIE5vbi1Nb25vYm9vayBidXQgc3RpbGwgcmVjb2duaXphYmxl IChvbGQtc3R5bGUpCgkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnYXJ0aWNs ZScpLmluc2VydEJlZm9yZSgKCQkJCW1lc3NhZ2VEaXYsCgkJCQlkb2N1bWVudC5n ZXRFbGVtZW50QnlJZCggJ2FydGljbGUnICkuZmlyc3RDaGlsZAoJCQkpOwoJCX0g ZWxzZSB7CgkJCXJldHVybiBmYWxzZTsKCQl9Cgl9CgoJbWVzc2FnZURpdi5zZXRB dHRyaWJ1dGUoICdpZCcsICdtdy1qcy1tZXNzYWdlJyApOwoJbWVzc2FnZURpdi5z dHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKCWlmKCBjbGFzc05hbWUgKSB7CgkJbWVz c2FnZURpdi5zZXRBdHRyaWJ1dGUoICdjbGFzcycsICdtdy1qcy1tZXNzYWdlLScg KyBjbGFzc05hbWUgKTsKCX0KCglpZiAoIHR5cGVvZiBtZXNzYWdlID09PSAnb2Jq ZWN0JyApIHsKCQl3aGlsZSAoIG1lc3NhZ2VEaXYuaGFzQ2hpbGROb2RlcygpICkg eyAvLyBSZW1vdmUgb2xkIGNvbnRlbnQKCQkJbWVzc2FnZURpdi5yZW1vdmVDaGls ZCggbWVzc2FnZURpdi5maXJzdENoaWxkICk7CgkJfQoJCW1lc3NhZ2VEaXYuYXBw ZW5kQ2hpbGQoIG1lc3NhZ2UgKTsgLy8gQXBwZW5kIG5ldyBjb250ZW50Cgl9IGVs c2UgewoJCW1lc3NhZ2VEaXYuaW5uZXJIVE1MID0gbWVzc2FnZTsKCX0KCXJldHVy biB0cnVlOwp9CgovKioKICogSW5qZWN0IGEgY3V0ZSBsaXR0bGUgcHJvZ3Jlc3Mg c3Bpbm5lciBhZnRlciB0aGUgc3BlY2lmaWVkIGVsZW1lbnQKICoKICogQHBhcmFt IGVsZW1lbnQgRWxlbWVudCB0byBpbmplY3QgYWZ0ZXIKICogQHBhcmFtIGlkIElk ZW50aWZpZXIgc3RyaW5nIChmb3IgdXNlIHdpdGggcmVtb3ZlU3Bpbm5lcigpLCBi ZWxvdykKICovCmZ1bmN0aW9uIGluamVjdFNwaW5uZXIoIGVsZW1lbnQsIGlkICkg ewoJdmFyIHNwaW5uZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnaW1nJyAp OwoJc3Bpbm5lci5pZCA9ICdtdy1zcGlubmVyLScgKyBpZDsKCXNwaW5uZXIuc3Jj ID0gc3R5bGVwYXRoICsgJy9jb21tb24vaW1hZ2VzL3NwaW5uZXIuZ2lmJzsKCXNw aW5uZXIuYWx0ID0gc3Bpbm5lci50aXRsZSA9ICcuLi4nOwoJaWYoIGVsZW1lbnQu bmV4dFNpYmxpbmcgKSB7CgkJZWxlbWVudC5wYXJlbnROb2RlLmluc2VydEJlZm9y ZSggc3Bpbm5lciwgZWxlbWVudC5uZXh0U2libGluZyApOwoJfSBlbHNlIHsKCQll bGVtZW50LnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoIHNwaW5uZXIgKTsKCX0KfQoK LyoqCiAqIFJlbW92ZSBhIHByb2dyZXNzIHNwaW5uZXIgYWRkZWQgd2l0aCBpbmpl Y3RTcGlubmVyKCkKICoKICogQHBhcmFtIGlkIElkZW50aWZpZXIgc3RyaW5nCiAq LwpmdW5jdGlvbiByZW1vdmVTcGlubmVyKCBpZCApIHsKCXZhciBzcGlubmVyID0g ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICdtdy1zcGlubmVyLScgKyBpZCApOwoJ aWYoIHNwaW5uZXIgKSB7CgkJc3Bpbm5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxk KCBzcGlubmVyICk7Cgl9Cn0KCmZ1bmN0aW9uIHJ1bk9ubG9hZEhvb2soKSB7Cgkv LyBkb24ndCBydW4gYW55dGhpbmcgYmVsb3cgdGhpcyBmb3Igbm9uLWRvbSBicm93 c2VycwoJaWYgKCBkb25lT25sb2FkSG9vayB8fCAhKCBkb2N1bWVudC5nZXRFbGVt ZW50QnlJZCAmJiBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSApICkgewoJ CXJldHVybjsKCX0KCgkvLyBzZXQgdGhpcyBiZWZvcmUgcnVubmluZyBhbnkgaG9v a3MsIHNpbmNlIGFueSBlcnJvcnMgYmVsb3cKCS8vIG1pZ2h0IGNhdXNlIHRoZSBm dW5jdGlvbiB0byB0ZXJtaW5hdGUgcHJlbWF0dXJlbHkKCWRvbmVPbmxvYWRIb29r ID0gdHJ1ZTsKCgl1cGRhdGVUb29sdGlwQWNjZXNzS2V5cyggbnVsbCApOwoJc2V0 dXBDaGVja2JveFNoaWZ0Q2xpY2soKTsKCXNvcnRhYmxlc19pbml0KCk7CgoJLy8g UnVuIGFueSBhZGRlZC1vbiBmdW5jdGlvbnMKCWZvciAoIHZhciBpID0gMDsgaSA8 IG9ubG9hZEZ1bmN0cy5sZW5ndGg7IGkrKyApIHsKCQlvbmxvYWRGdW5jdHNbaV0o KTsKCX0KfQoKLyoqCiAqIEFkZCBhbiBldmVudCBoYW5kbGVyIHRvIGFuIGVsZW1l bnQKICoKICogQHBhcmFtIEVsZW1lbnQgZWxlbWVudCBFbGVtZW50IHRvIGFkZCBo YW5kbGVyIHRvCiAqIEBwYXJhbSBTdHJpbmcgYXR0YWNoIEV2ZW50IHRvIGF0dGFj aCB0bwogKiBAcGFyYW0gY2FsbGFibGUgaGFuZGxlciBFdmVudCBoYW5kbGVyIGNh bGxiYWNrCiAqLwpmdW5jdGlvbiBhZGRIYW5kbGVyKCBlbGVtZW50LCBhdHRhY2gs IGhhbmRsZXIgKSB7CglpZiggd2luZG93LmFkZEV2ZW50TGlzdGVuZXIgKSB7CgkJ ZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCBhdHRhY2gsIGhhbmRsZXIsIGZhbHNl ICk7Cgl9IGVsc2UgaWYoIHdpbmRvdy5hdHRhY2hFdmVudCApIHsKCQllbGVtZW50 LmF0dGFjaEV2ZW50KCAnb24nICsgYXR0YWNoLCBoYW5kbGVyICk7Cgl9Cn0KCi8q KgogKiBBZGQgYSBjbGljayBldmVudCBoYW5kbGVyIHRvIGFuIGVsZW1lbnQKICoK ICogQHBhcmFtIEVsZW1lbnQgZWxlbWVudCBFbGVtZW50IHRvIGFkZCBoYW5kbGVy IHRvCiAqIEBwYXJhbSBjYWxsYWJsZSBoYW5kbGVyIEV2ZW50IGhhbmRsZXIgY2Fs bGJhY2sKICovCmZ1bmN0aW9uIGFkZENsaWNrSGFuZGxlciggZWxlbWVudCwgaGFu ZGxlciApIHsKCWFkZEhhbmRsZXIoIGVsZW1lbnQsICdjbGljaycsIGhhbmRsZXIg KTsKfQoKLyoqCiAqIFJlbW92ZXMgYW4gZXZlbnQgaGFuZGxlciBmcm9tIGFuIGVs ZW1lbnQKICoKICogQHBhcmFtIEVsZW1lbnQgZWxlbWVudCBFbGVtZW50IHRvIHJl bW92ZSBoYW5kbGVyIGZyb20KICogQHBhcmFtIFN0cmluZyByZW1vdmUgRXZlbnQg dG8gcmVtb3ZlCiAqIEBwYXJhbSBjYWxsYWJsZSBoYW5kbGVyIEV2ZW50IGhhbmRs ZXIgY2FsbGJhY2sgdG8gcmVtb3ZlCiAqLwpmdW5jdGlvbiByZW1vdmVIYW5kbGVy KCBlbGVtZW50LCByZW1vdmUsIGhhbmRsZXIgKSB7CglpZiggd2luZG93LnJlbW92 ZUV2ZW50TGlzdGVuZXIgKSB7CgkJZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVy KCByZW1vdmUsIGhhbmRsZXIsIGZhbHNlICk7Cgl9IGVsc2UgaWYoIHdpbmRvdy5k ZXRhY2hFdmVudCApIHsKCQllbGVtZW50LmRldGFjaEV2ZW50KCAnb24nICsgcmVt b3ZlLCBoYW5kbGVyICk7Cgl9Cn0KLy8gbm90ZTogYWxsIHNraW5zIHNob3VsZCBj YWxsIHJ1bk9ubG9hZEhvb2soKSBhdCB0aGUgZW5kIG9mIGh0bWwgb3V0cHV0LAov LyAgICAgIHNvIHRoZSBiZWxvdyBzaG91bGQgYmUgcmVkdW5kYW50LiBJdCdzIHRo ZXJlIGp1c3QgaW4gY2FzZS4KaG9va0V2ZW50KCAnbG9hZCcsIHJ1bk9ubG9hZEhv b2sgKTsKCmlmICggaWU2X2J1Z3MgKSB7CglpbXBvcnRTY3JpcHRVUkkoIHN0eWxl cGF0aCArICcvY29tbW9uL0lFRml4ZXMuanMnICk7Cn0KCi8vIEZvciBmdXR1cmUg dXNlLgptdyA9IHt9OwoKCg== ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline; filename=jquery.min.js Content-Type: application/x-javascript; charset=UTF-8; name=jquery.min.js Content-Location: http://bits.wikimedia.org/skins-1.5/common/jquery.min.js?281z67 Content-Transfer-Encoding: Base64 CihmdW5jdGlvbigpe3Zhcgp3aW5kb3c9dGhpcyx1bmRlZmluZWQsX2pRdWVyeT13 aW5kb3cualF1ZXJ5LF8kPXdpbmRvdy4kLGpRdWVyeT13aW5kb3cualF1ZXJ5PXdp bmRvdy4kPWZ1bmN0aW9uKHNlbGVjdG9yLGNvbnRleHQpe3JldHVybiBuZXcgalF1 ZXJ5LmZuLmluaXQoc2VsZWN0b3IsY29udGV4dCk7fSxxdWlja0V4cHI9L15bXjxd Kig8KC58XHMpKz4pW14+XSokfF4jKFtcdy1dKykkLyxpc1NpbXBsZT0vXi5bXjoj XFtcLixdKiQvO2pRdWVyeS5mbj1qUXVlcnkucHJvdG90eXBlPXtpbml0OmZ1bmN0 aW9uKHNlbGVjdG9yLGNvbnRleHQpe3NlbGVjdG9yPXNlbGVjdG9yfHxkb2N1bWVu dDtpZihzZWxlY3Rvci5ub2RlVHlwZSl7dGhpc1swXT1zZWxlY3Rvcjt0aGlzLmxl bmd0aD0xO3RoaXMuY29udGV4dD1zZWxlY3RvcjtyZXR1cm4gdGhpczt9CmlmKHR5 cGVvZiBzZWxlY3Rvcj09PSJzdHJpbmciKXt2YXIgbWF0Y2g9cXVpY2tFeHByLmV4 ZWMoc2VsZWN0b3IpO2lmKG1hdGNoJiYobWF0Y2hbMV18fCFjb250ZXh0KSl7aWYo bWF0Y2hbMV0pCnNlbGVjdG9yPWpRdWVyeS5jbGVhbihbbWF0Y2hbMV1dLGNvbnRl eHQpO2Vsc2V7dmFyIGVsZW09ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobWF0Y2hb M10pO2lmKGVsZW0mJmVsZW0uaWQhPW1hdGNoWzNdKQpyZXR1cm4galF1ZXJ5KCku ZmluZChzZWxlY3Rvcik7dmFyIHJldD1qUXVlcnkoZWxlbXx8W10pO3JldC5jb250 ZXh0PWRvY3VtZW50O3JldC5zZWxlY3Rvcj1zZWxlY3RvcjtyZXR1cm4gcmV0O319 ZWxzZQpyZXR1cm4galF1ZXJ5KGNvbnRleHQpLmZpbmQoc2VsZWN0b3IpO31lbHNl IGlmKGpRdWVyeS5pc0Z1bmN0aW9uKHNlbGVjdG9yKSkKcmV0dXJuIGpRdWVyeShk b2N1bWVudCkucmVhZHkoc2VsZWN0b3IpO2lmKHNlbGVjdG9yLnNlbGVjdG9yJiZz ZWxlY3Rvci5jb250ZXh0KXt0aGlzLnNlbGVjdG9yPXNlbGVjdG9yLnNlbGVjdG9y O3RoaXMuY29udGV4dD1zZWxlY3Rvci5jb250ZXh0O30KcmV0dXJuIHRoaXMuc2V0 QXJyYXkoalF1ZXJ5LmlzQXJyYXkoc2VsZWN0b3IpP3NlbGVjdG9yOmpRdWVyeS5t YWtlQXJyYXkoc2VsZWN0b3IpKTt9LHNlbGVjdG9yOiIiLGpxdWVyeToiMS4zLjIi LHNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGg7fSxnZXQ6ZnVuY3Rp b24obnVtKXtyZXR1cm4gbnVtPT09dW5kZWZpbmVkP0FycmF5LnByb3RvdHlwZS5z bGljZS5jYWxsKHRoaXMpOnRoaXNbbnVtXTt9LHB1c2hTdGFjazpmdW5jdGlvbihl bGVtcyxuYW1lLHNlbGVjdG9yKXt2YXIgcmV0PWpRdWVyeShlbGVtcyk7cmV0LnBy ZXZPYmplY3Q9dGhpcztyZXQuY29udGV4dD10aGlzLmNvbnRleHQ7aWYobmFtZT09 PSJmaW5kIikKcmV0LnNlbGVjdG9yPXRoaXMuc2VsZWN0b3IrKHRoaXMuc2VsZWN0 b3I/IiAiOiIiKStzZWxlY3RvcjtlbHNlIGlmKG5hbWUpCnJldC5zZWxlY3Rvcj10 aGlzLnNlbGVjdG9yKyIuIituYW1lKyIoIitzZWxlY3RvcisiKSI7cmV0dXJuIHJl dDt9LHNldEFycmF5OmZ1bmN0aW9uKGVsZW1zKXt0aGlzLmxlbmd0aD0wO0FycmF5 LnByb3RvdHlwZS5wdXNoLmFwcGx5KHRoaXMsZWxlbXMpO3JldHVybiB0aGlzO30s ZWFjaDpmdW5jdGlvbihjYWxsYmFjayxhcmdzKXtyZXR1cm4galF1ZXJ5LmVhY2go dGhpcyxjYWxsYmFjayxhcmdzKTt9LGluZGV4OmZ1bmN0aW9uKGVsZW0pe3JldHVy biBqUXVlcnkuaW5BcnJheShlbGVtJiZlbGVtLmpxdWVyeT9lbGVtWzBdOmVsZW0s dGhpcyk7fSxhdHRyOmZ1bmN0aW9uKG5hbWUsdmFsdWUsdHlwZSl7dmFyIG9wdGlv bnM9bmFtZTtpZih0eXBlb2YgbmFtZT09PSJzdHJpbmciKQppZih2YWx1ZT09PXVu ZGVmaW5lZCkKcmV0dXJuIHRoaXNbMF0mJmpRdWVyeVt0eXBlfHwiYXR0ciJdKHRo aXNbMF0sbmFtZSk7ZWxzZXtvcHRpb25zPXt9O29wdGlvbnNbbmFtZV09dmFsdWU7 fQpyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGkpe2ZvcihuYW1lIGluIG9wdGlv bnMpCmpRdWVyeS5hdHRyKHR5cGU/dGhpcy5zdHlsZTp0aGlzLG5hbWUsalF1ZXJ5 LnByb3AodGhpcyxvcHRpb25zW25hbWVdLHR5cGUsaSxuYW1lKSk7fSk7fSxjc3M6 ZnVuY3Rpb24oa2V5LHZhbHVlKXtpZigoa2V5PT0nd2lkdGgnfHxrZXk9PSdoZWln aHQnKSYmcGFyc2VGbG9hdCh2YWx1ZSk8MCkKdmFsdWU9dW5kZWZpbmVkO3JldHVy biB0aGlzLmF0dHIoa2V5LHZhbHVlLCJjdXJDU1MiKTt9LHRleHQ6ZnVuY3Rpb24o dGV4dCl7aWYodHlwZW9mIHRleHQhPT0ib2JqZWN0IiYmdGV4dCE9bnVsbCkKcmV0 dXJuIHRoaXMuZW1wdHkoKS5hcHBlbmQoKHRoaXNbMF0mJnRoaXNbMF0ub3duZXJE b2N1bWVudHx8ZG9jdW1lbnQpLmNyZWF0ZVRleHROb2RlKHRleHQpKTt2YXIgcmV0 PSIiO2pRdWVyeS5lYWNoKHRleHR8fHRoaXMsZnVuY3Rpb24oKXtqUXVlcnkuZWFj aCh0aGlzLmNoaWxkTm9kZXMsZnVuY3Rpb24oKXtpZih0aGlzLm5vZGVUeXBlIT04 KQpyZXQrPXRoaXMubm9kZVR5cGUhPTE/dGhpcy5ub2RlVmFsdWU6alF1ZXJ5LmZu LnRleHQoW3RoaXNdKTt9KTt9KTtyZXR1cm4gcmV0O30sd3JhcEFsbDpmdW5jdGlv bihodG1sKXtpZih0aGlzWzBdKXt2YXIgd3JhcD1qUXVlcnkoaHRtbCx0aGlzWzBd Lm93bmVyRG9jdW1lbnQpLmNsb25lKCk7aWYodGhpc1swXS5wYXJlbnROb2RlKQp3 cmFwLmluc2VydEJlZm9yZSh0aGlzWzBdKTt3cmFwLm1hcChmdW5jdGlvbigpe3Zh ciBlbGVtPXRoaXM7d2hpbGUoZWxlbS5maXJzdENoaWxkKQplbGVtPWVsZW0uZmly c3RDaGlsZDtyZXR1cm4gZWxlbTt9KS5hcHBlbmQodGhpcyk7fQpyZXR1cm4gdGhp czt9LHdyYXBJbm5lcjpmdW5jdGlvbihodG1sKXtyZXR1cm4gdGhpcy5lYWNoKGZ1 bmN0aW9uKCl7alF1ZXJ5KHRoaXMpLmNvbnRlbnRzKCkud3JhcEFsbChodG1sKTt9 KTt9LHdyYXA6ZnVuY3Rpb24oaHRtbCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlv bigpe2pRdWVyeSh0aGlzKS53cmFwQWxsKGh0bWwpO30pO30sYXBwZW5kOmZ1bmN0 aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLHRydWUsZnVuY3Rp b24oZWxlbSl7aWYodGhpcy5ub2RlVHlwZT09MSkKdGhpcy5hcHBlbmRDaGlsZChl bGVtKTt9KTt9LHByZXBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5p cChhcmd1bWVudHMsdHJ1ZSxmdW5jdGlvbihlbGVtKXtpZih0aGlzLm5vZGVUeXBl PT0xKQp0aGlzLmluc2VydEJlZm9yZShlbGVtLHRoaXMuZmlyc3RDaGlsZCk7fSk7 fSxiZWZvcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVu dHMsZmFsc2UsZnVuY3Rpb24oZWxlbSl7dGhpcy5wYXJlbnROb2RlLmluc2VydEJl Zm9yZShlbGVtLHRoaXMpO30pO30sYWZ0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhp cy5kb21NYW5pcChhcmd1bWVudHMsZmFsc2UsZnVuY3Rpb24oZWxlbSl7dGhpcy5w YXJlbnROb2RlLmluc2VydEJlZm9yZShlbGVtLHRoaXMubmV4dFNpYmxpbmcpO30p O30sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJldk9iamVjdHx8alF1ZXJ5 KFtdKTt9LHB1c2g6W10ucHVzaCxzb3J0OltdLnNvcnQsc3BsaWNlOltdLnNwbGlj ZSxmaW5kOmZ1bmN0aW9uKHNlbGVjdG9yKXtpZih0aGlzLmxlbmd0aD09PTEpe3Zh ciByZXQ9dGhpcy5wdXNoU3RhY2soW10sImZpbmQiLHNlbGVjdG9yKTtyZXQubGVu Z3RoPTA7alF1ZXJ5LmZpbmQoc2VsZWN0b3IsdGhpc1swXSxyZXQpO3JldHVybiBy ZXQ7fWVsc2V7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGpRdWVyeS51bmlxdWUoalF1 ZXJ5Lm1hcCh0aGlzLGZ1bmN0aW9uKGVsZW0pe3JldHVybiBqUXVlcnkuZmluZChz ZWxlY3RvcixlbGVtKTt9KSksImZpbmQiLHNlbGVjdG9yKTt9fSxjbG9uZTpmdW5j dGlvbihldmVudHMpe3ZhciByZXQ9dGhpcy5tYXAoZnVuY3Rpb24oKXtpZighalF1 ZXJ5LnN1cHBvcnQubm9DbG9uZUV2ZW50JiYhalF1ZXJ5LmlzWE1MRG9jKHRoaXMp KXt2YXIgaHRtbD10aGlzLm91dGVySFRNTDtpZighaHRtbCl7dmFyIGRpdj10aGlz Lm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ZGl2LmFwcGVuZENo aWxkKHRoaXMuY2xvbmVOb2RlKHRydWUpKTtodG1sPWRpdi5pbm5lckhUTUw7fQpy ZXR1cm4galF1ZXJ5LmNsZWFuKFtodG1sLnJlcGxhY2UoLyBqUXVlcnlcZCs9Iig/ OlxkK3xudWxsKSIvZywiIikucmVwbGFjZSgvXlxzKi8sIiIpXSlbMF07fWVsc2UK cmV0dXJuIHRoaXMuY2xvbmVOb2RlKHRydWUpO30pO2lmKGV2ZW50cz09PXRydWUp e3ZhciBvcmlnPXRoaXMuZmluZCgiKiIpLmFuZFNlbGYoKSxpPTA7cmV0LmZpbmQo IioiKS5hbmRTZWxmKCkuZWFjaChmdW5jdGlvbigpe2lmKHRoaXMubm9kZU5hbWUh PT1vcmlnW2ldLm5vZGVOYW1lKQpyZXR1cm47dmFyIGV2ZW50cz1qUXVlcnkuZGF0 YShvcmlnW2ldLCJldmVudHMiKTtmb3IodmFyIHR5cGUgaW4gZXZlbnRzKXtmb3Io dmFyIGhhbmRsZXIgaW4gZXZlbnRzW3R5cGVdKXtqUXVlcnkuZXZlbnQuYWRkKHRo aXMsdHlwZSxldmVudHNbdHlwZV1baGFuZGxlcl0sZXZlbnRzW3R5cGVdW2hhbmRs ZXJdLmRhdGEpO319CmkrKzt9KTt9CnJldHVybiByZXQ7fSxmaWx0ZXI6ZnVuY3Rp b24oc2VsZWN0b3Ipe3JldHVybiB0aGlzLnB1c2hTdGFjayhqUXVlcnkuaXNGdW5j dGlvbihzZWxlY3RvcikmJmpRdWVyeS5ncmVwKHRoaXMsZnVuY3Rpb24oZWxlbSxp KXtyZXR1cm4gc2VsZWN0b3IuY2FsbChlbGVtLGkpO30pfHxqUXVlcnkubXVsdGlG aWx0ZXIoc2VsZWN0b3IsalF1ZXJ5LmdyZXAodGhpcyxmdW5jdGlvbihlbGVtKXty ZXR1cm4gZWxlbS5ub2RlVHlwZT09PTE7fSkpLCJmaWx0ZXIiLHNlbGVjdG9yKTt9 LGNsb3Nlc3Q6ZnVuY3Rpb24oc2VsZWN0b3Ipe3ZhciBwb3M9alF1ZXJ5LmV4cHIu bWF0Y2guUE9TLnRlc3Qoc2VsZWN0b3IpP2pRdWVyeShzZWxlY3Rvcik6bnVsbCxj bG9zZXI9MDtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgY3VyPXRoaXM7 d2hpbGUoY3VyJiZjdXIub3duZXJEb2N1bWVudCl7aWYocG9zP3Bvcy5pbmRleChj dXIpPi0xOmpRdWVyeShjdXIpLmlzKHNlbGVjdG9yKSl7alF1ZXJ5LmRhdGEoY3Vy LCJjbG9zZXN0IixjbG9zZXIpO3JldHVybiBjdXI7fQpjdXI9Y3VyLnBhcmVudE5v ZGU7Y2xvc2VyKys7fX0pO30sbm90OmZ1bmN0aW9uKHNlbGVjdG9yKXtpZih0eXBl b2Ygc2VsZWN0b3I9PT0ic3RyaW5nIikKaWYoaXNTaW1wbGUudGVzdChzZWxlY3Rv cikpCnJldHVybiB0aGlzLnB1c2hTdGFjayhqUXVlcnkubXVsdGlGaWx0ZXIoc2Vs ZWN0b3IsdGhpcyx0cnVlKSwibm90IixzZWxlY3Rvcik7ZWxzZQpzZWxlY3Rvcj1q UXVlcnkubXVsdGlGaWx0ZXIoc2VsZWN0b3IsdGhpcyk7dmFyIGlzQXJyYXlMaWtl PXNlbGVjdG9yLmxlbmd0aCYmc2VsZWN0b3Jbc2VsZWN0b3IubGVuZ3RoLTFdIT09 dW5kZWZpbmVkJiYhc2VsZWN0b3Iubm9kZVR5cGU7cmV0dXJuIHRoaXMuZmlsdGVy KGZ1bmN0aW9uKCl7cmV0dXJuIGlzQXJyYXlMaWtlP2pRdWVyeS5pbkFycmF5KHRo aXMsc2VsZWN0b3IpPDA6dGhpcyE9c2VsZWN0b3I7fSk7fSxhZGQ6ZnVuY3Rpb24o c2VsZWN0b3Ipe3JldHVybiB0aGlzLnB1c2hTdGFjayhqUXVlcnkudW5pcXVlKGpR dWVyeS5tZXJnZSh0aGlzLmdldCgpLHR5cGVvZiBzZWxlY3Rvcj09PSJzdHJpbmci P2pRdWVyeShzZWxlY3Rvcik6alF1ZXJ5Lm1ha2VBcnJheShzZWxlY3RvcikpKSk7 fSxpczpmdW5jdGlvbihzZWxlY3Rvcil7cmV0dXJuISFzZWxlY3RvciYmalF1ZXJ5 Lm11bHRpRmlsdGVyKHNlbGVjdG9yLHRoaXMpLmxlbmd0aD4wO30saGFzQ2xhc3M6 ZnVuY3Rpb24oc2VsZWN0b3Ipe3JldHVybiEhc2VsZWN0b3ImJnRoaXMuaXMoIi4i K3NlbGVjdG9yKTt9LHZhbDpmdW5jdGlvbih2YWx1ZSl7aWYodmFsdWU9PT11bmRl ZmluZWQpe3ZhciBlbGVtPXRoaXNbMF07aWYoZWxlbSl7aWYoalF1ZXJ5Lm5vZGVO YW1lKGVsZW0sJ29wdGlvbicpKQpyZXR1cm4oZWxlbS5hdHRyaWJ1dGVzLnZhbHVl fHx7fSkuc3BlY2lmaWVkP2VsZW0udmFsdWU6ZWxlbS50ZXh0O2lmKGpRdWVyeS5u b2RlTmFtZShlbGVtLCJzZWxlY3QiKSl7dmFyIGluZGV4PWVsZW0uc2VsZWN0ZWRJ bmRleCx2YWx1ZXM9W10sb3B0aW9ucz1lbGVtLm9wdGlvbnMsb25lPWVsZW0udHlw ZT09InNlbGVjdC1vbmUiO2lmKGluZGV4PDApCnJldHVybiBudWxsO2Zvcih2YXIg aT1vbmU/aW5kZXg6MCxtYXg9b25lP2luZGV4KzE6b3B0aW9ucy5sZW5ndGg7aTxt YXg7aSsrKXt2YXIgb3B0aW9uPW9wdGlvbnNbaV07aWYob3B0aW9uLnNlbGVjdGVk KXt2YWx1ZT1qUXVlcnkob3B0aW9uKS52YWwoKTtpZihvbmUpCnJldHVybiB2YWx1 ZTt2YWx1ZXMucHVzaCh2YWx1ZSk7fX0KcmV0dXJuIHZhbHVlczt9CnJldHVybihl bGVtLnZhbHVlfHwiIikucmVwbGFjZSgvXHIvZywiIik7fQpyZXR1cm4gdW5kZWZp bmVkO30KaWYodHlwZW9mIHZhbHVlPT09Im51bWJlciIpCnZhbHVlKz0nJztyZXR1 cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7aWYodGhpcy5ub2RlVHlwZSE9MSkKcmV0 dXJuO2lmKGpRdWVyeS5pc0FycmF5KHZhbHVlKSYmL3JhZGlvfGNoZWNrYm94Ly50 ZXN0KHRoaXMudHlwZSkpCnRoaXMuY2hlY2tlZD0oalF1ZXJ5LmluQXJyYXkodGhp cy52YWx1ZSx2YWx1ZSk+PTB8fGpRdWVyeS5pbkFycmF5KHRoaXMubmFtZSx2YWx1 ZSk+PTApO2Vsc2UgaWYoalF1ZXJ5Lm5vZGVOYW1lKHRoaXMsInNlbGVjdCIpKXt2 YXIgdmFsdWVzPWpRdWVyeS5tYWtlQXJyYXkodmFsdWUpO2pRdWVyeSgib3B0aW9u Iix0aGlzKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5zZWxlY3RlZD0oalF1ZXJ5Lmlu QXJyYXkodGhpcy52YWx1ZSx2YWx1ZXMpPj0wfHxqUXVlcnkuaW5BcnJheSh0aGlz LnRleHQsdmFsdWVzKT49MCk7fSk7aWYoIXZhbHVlcy5sZW5ndGgpCnRoaXMuc2Vs ZWN0ZWRJbmRleD0tMTt9ZWxzZQp0aGlzLnZhbHVlPXZhbHVlO30pO30saHRtbDpm dW5jdGlvbih2YWx1ZSl7cmV0dXJuIHZhbHVlPT09dW5kZWZpbmVkPyh0aGlzWzBd P3RoaXNbMF0uaW5uZXJIVE1MLnJlcGxhY2UoLyBqUXVlcnlcZCs9Iig/OlxkK3xu dWxsKSIvZywiIik6bnVsbCk6dGhpcy5lbXB0eSgpLmFwcGVuZCh2YWx1ZSk7fSxy ZXBsYWNlV2l0aDpmdW5jdGlvbih2YWx1ZSl7cmV0dXJuIHRoaXMuYWZ0ZXIodmFs dWUpLnJlbW92ZSgpO30sZXE6ZnVuY3Rpb24oaSl7cmV0dXJuIHRoaXMuc2xpY2Uo aSwraSsxKTt9LHNsaWNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHVzaFN0YWNr KEFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksInNs aWNlIixBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpLmpvaW4o IiwiKSk7fSxtYXA6ZnVuY3Rpb24oY2FsbGJhY2spe3JldHVybiB0aGlzLnB1c2hT dGFjayhqUXVlcnkubWFwKHRoaXMsZnVuY3Rpb24oZWxlbSxpKXtyZXR1cm4gY2Fs bGJhY2suY2FsbChlbGVtLGksZWxlbSk7fSkpO30sYW5kU2VsZjpmdW5jdGlvbigp e3JldHVybiB0aGlzLmFkZCh0aGlzLnByZXZPYmplY3QpO30sZG9tTWFuaXA6ZnVu Y3Rpb24oYXJncyx0YWJsZSxjYWxsYmFjayl7aWYodGhpc1swXSl7dmFyIGZyYWdt ZW50PSh0aGlzWzBdLm93bmVyRG9jdW1lbnR8fHRoaXNbMF0pLmNyZWF0ZURvY3Vt ZW50RnJhZ21lbnQoKSxzY3JpcHRzPWpRdWVyeS5jbGVhbihhcmdzLCh0aGlzWzBd Lm93bmVyRG9jdW1lbnR8fHRoaXNbMF0pLGZyYWdtZW50KSxmaXJzdD1mcmFnbWVu dC5maXJzdENoaWxkO2lmKGZpcnN0KQpmb3IodmFyIGk9MCxsPXRoaXMubGVuZ3Ro O2k8bDtpKyspCmNhbGxiYWNrLmNhbGwocm9vdCh0aGlzW2ldLGZpcnN0KSx0aGlz Lmxlbmd0aD4xfHxpPjA/ZnJhZ21lbnQuY2xvbmVOb2RlKHRydWUpOmZyYWdtZW50 KTtpZihzY3JpcHRzKQpqUXVlcnkuZWFjaChzY3JpcHRzLGV2YWxTY3JpcHQpO30K cmV0dXJuIHRoaXM7ZnVuY3Rpb24gcm9vdChlbGVtLGN1cil7cmV0dXJuIHRhYmxl JiZqUXVlcnkubm9kZU5hbWUoZWxlbSwidGFibGUiKSYmalF1ZXJ5Lm5vZGVOYW1l KGN1ciwidHIiKT8oZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKVsw XXx8ZWxlbS5hcHBlbmRDaGlsZChlbGVtLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxl bWVudCgidGJvZHkiKSkpOmVsZW07fX19O2pRdWVyeS5mbi5pbml0LnByb3RvdHlw ZT1qUXVlcnkuZm47ZnVuY3Rpb24gZXZhbFNjcmlwdChpLGVsZW0pe2lmKGVsZW0u c3JjKQpqUXVlcnkuYWpheCh7dXJsOmVsZW0uc3JjLGFzeW5jOmZhbHNlLGRhdGFU eXBlOiJzY3JpcHQifSk7ZWxzZQpqUXVlcnkuZ2xvYmFsRXZhbChlbGVtLnRleHR8 fGVsZW0udGV4dENvbnRlbnR8fGVsZW0uaW5uZXJIVE1MfHwiIik7aWYoZWxlbS5w YXJlbnROb2RlKQplbGVtLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWxlbSk7fQpm dW5jdGlvbiBub3coKXtyZXR1cm4rbmV3IERhdGU7fQpqUXVlcnkuZXh0ZW5kPWpR dWVyeS5mbi5leHRlbmQ9ZnVuY3Rpb24oKXt2YXIgdGFyZ2V0PWFyZ3VtZW50c1sw XXx8e30saT0xLGxlbmd0aD1hcmd1bWVudHMubGVuZ3RoLGRlZXA9ZmFsc2Usb3B0 aW9ucztpZih0eXBlb2YgdGFyZ2V0PT09ImJvb2xlYW4iKXtkZWVwPXRhcmdldDt0 YXJnZXQ9YXJndW1lbnRzWzFdfHx7fTtpPTI7fQppZih0eXBlb2YgdGFyZ2V0IT09 Im9iamVjdCImJiFqUXVlcnkuaXNGdW5jdGlvbih0YXJnZXQpKQp0YXJnZXQ9e307 aWYobGVuZ3RoPT1pKXt0YXJnZXQ9dGhpczstLWk7fQpmb3IoO2k8bGVuZ3RoO2kr KykKaWYoKG9wdGlvbnM9YXJndW1lbnRzW2ldKSE9bnVsbCkKZm9yKHZhciBuYW1l IGluIG9wdGlvbnMpe3ZhciBzcmM9dGFyZ2V0W25hbWVdLGNvcHk9b3B0aW9uc1tu YW1lXTtpZih0YXJnZXQ9PT1jb3B5KQpjb250aW51ZTtpZihkZWVwJiZjb3B5JiZ0 eXBlb2YgY29weT09PSJvYmplY3QiJiYhY29weS5ub2RlVHlwZSkKdGFyZ2V0W25h bWVdPWpRdWVyeS5leHRlbmQoZGVlcCxzcmN8fChjb3B5Lmxlbmd0aCE9bnVsbD9b XTp7fSksY29weSk7ZWxzZSBpZihjb3B5IT09dW5kZWZpbmVkKQp0YXJnZXRbbmFt ZV09Y29weTt9CnJldHVybiB0YXJnZXQ7fTt2YXIgZXhjbHVkZT0vei0/aW5kZXh8 Zm9udC0/d2VpZ2h0fG9wYWNpdHl8em9vbXxsaW5lLT9oZWlnaHQvaSxkZWZhdWx0 Vmlldz1kb2N1bWVudC5kZWZhdWx0Vmlld3x8e30sdG9TdHJpbmc9T2JqZWN0LnBy b3RvdHlwZS50b1N0cmluZztqUXVlcnkuZXh0ZW5kKHtub0NvbmZsaWN0OmZ1bmN0 aW9uKGRlZXApe3dpbmRvdy4kPV8kO2lmKGRlZXApCndpbmRvdy5qUXVlcnk9X2pR dWVyeTtyZXR1cm4galF1ZXJ5O30saXNGdW5jdGlvbjpmdW5jdGlvbihvYmope3Jl dHVybiB0b1N0cmluZy5jYWxsKG9iaik9PT0iW29iamVjdCBGdW5jdGlvbl0iO30s aXNBcnJheTpmdW5jdGlvbihvYmope3JldHVybiB0b1N0cmluZy5jYWxsKG9iaik9 PT0iW29iamVjdCBBcnJheV0iO30saXNYTUxEb2M6ZnVuY3Rpb24oZWxlbSl7cmV0 dXJuIGVsZW0ubm9kZVR5cGU9PT05JiZlbGVtLmRvY3VtZW50RWxlbWVudC5ub2Rl TmFtZSE9PSJIVE1MInx8ISFlbGVtLm93bmVyRG9jdW1lbnQmJmpRdWVyeS5pc1hN TERvYyhlbGVtLm93bmVyRG9jdW1lbnQpO30sZ2xvYmFsRXZhbDpmdW5jdGlvbihk YXRhKXtpZihkYXRhJiYvXFMvLnRlc3QoZGF0YSkpe3ZhciBoZWFkPWRvY3VtZW50 LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF18fGRvY3VtZW50LmRvY3Vt ZW50RWxlbWVudCxzY3JpcHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0 Iik7c2NyaXB0LnR5cGU9InRleHQvamF2YXNjcmlwdCI7aWYoalF1ZXJ5LnN1cHBv cnQuc2NyaXB0RXZhbCkKc2NyaXB0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0 ZVRleHROb2RlKGRhdGEpKTtlbHNlCnNjcmlwdC50ZXh0PWRhdGE7aGVhZC5pbnNl cnRCZWZvcmUoc2NyaXB0LGhlYWQuZmlyc3RDaGlsZCk7aGVhZC5yZW1vdmVDaGls ZChzY3JpcHQpO319LG5vZGVOYW1lOmZ1bmN0aW9uKGVsZW0sbmFtZSl7cmV0dXJu IGVsZW0ubm9kZU5hbWUmJmVsZW0ubm9kZU5hbWUudG9VcHBlckNhc2UoKT09bmFt ZS50b1VwcGVyQ2FzZSgpO30sZWFjaDpmdW5jdGlvbihvYmplY3QsY2FsbGJhY2ss YXJncyl7dmFyIG5hbWUsaT0wLGxlbmd0aD1vYmplY3QubGVuZ3RoO2lmKGFyZ3Mp e2lmKGxlbmd0aD09PXVuZGVmaW5lZCl7Zm9yKG5hbWUgaW4gb2JqZWN0KQppZihj YWxsYmFjay5hcHBseShvYmplY3RbbmFtZV0sYXJncyk9PT1mYWxzZSkKYnJlYWs7 fWVsc2UKZm9yKDtpPGxlbmd0aDspCmlmKGNhbGxiYWNrLmFwcGx5KG9iamVjdFtp KytdLGFyZ3MpPT09ZmFsc2UpCmJyZWFrO31lbHNle2lmKGxlbmd0aD09PXVuZGVm aW5lZCl7Zm9yKG5hbWUgaW4gb2JqZWN0KQppZihjYWxsYmFjay5jYWxsKG9iamVj dFtuYW1lXSxuYW1lLG9iamVjdFtuYW1lXSk9PT1mYWxzZSkKYnJlYWs7fWVsc2UK Zm9yKHZhciB2YWx1ZT1vYmplY3RbMF07aTxsZW5ndGgmJmNhbGxiYWNrLmNhbGwo dmFsdWUsaSx2YWx1ZSkhPT1mYWxzZTt2YWx1ZT1vYmplY3RbKytpXSl7fX0KcmV0 dXJuIG9iamVjdDt9LHByb3A6ZnVuY3Rpb24oZWxlbSx2YWx1ZSx0eXBlLGksbmFt ZSl7aWYoalF1ZXJ5LmlzRnVuY3Rpb24odmFsdWUpKQp2YWx1ZT12YWx1ZS5jYWxs KGVsZW0saSk7cmV0dXJuIHR5cGVvZiB2YWx1ZT09PSJudW1iZXIiJiZ0eXBlPT0i Y3VyQ1NTIiYmIWV4Y2x1ZGUudGVzdChuYW1lKT92YWx1ZSsicHgiOnZhbHVlO30s Y2xhc3NOYW1lOnthZGQ6ZnVuY3Rpb24oZWxlbSxjbGFzc05hbWVzKXtqUXVlcnku ZWFjaCgoY2xhc3NOYW1lc3x8IiIpLnNwbGl0KC9ccysvKSxmdW5jdGlvbihpLGNs YXNzTmFtZSl7aWYoZWxlbS5ub2RlVHlwZT09MSYmIWpRdWVyeS5jbGFzc05hbWUu aGFzKGVsZW0uY2xhc3NOYW1lLGNsYXNzTmFtZSkpCmVsZW0uY2xhc3NOYW1lKz0o ZWxlbS5jbGFzc05hbWU/IiAiOiIiKStjbGFzc05hbWU7fSk7fSxyZW1vdmU6ZnVu Y3Rpb24oZWxlbSxjbGFzc05hbWVzKXtpZihlbGVtLm5vZGVUeXBlPT0xKQplbGVt LmNsYXNzTmFtZT1jbGFzc05hbWVzIT09dW5kZWZpbmVkP2pRdWVyeS5ncmVwKGVs ZW0uY2xhc3NOYW1lLnNwbGl0KC9ccysvKSxmdW5jdGlvbihjbGFzc05hbWUpe3Jl dHVybiFqUXVlcnkuY2xhc3NOYW1lLmhhcyhjbGFzc05hbWVzLGNsYXNzTmFtZSk7 fSkuam9pbigiICIpOiIiO30saGFzOmZ1bmN0aW9uKGVsZW0sY2xhc3NOYW1lKXty ZXR1cm4gZWxlbSYmalF1ZXJ5LmluQXJyYXkoY2xhc3NOYW1lLChlbGVtLmNsYXNz TmFtZXx8ZWxlbSkudG9TdHJpbmcoKS5zcGxpdCgvXHMrLykpPi0xO319LHN3YXA6 ZnVuY3Rpb24oZWxlbSxvcHRpb25zLGNhbGxiYWNrKXt2YXIgb2xkPXt9O2Zvcih2 YXIgbmFtZSBpbiBvcHRpb25zKXtvbGRbbmFtZV09ZWxlbS5zdHlsZVtuYW1lXTtl bGVtLnN0eWxlW25hbWVdPW9wdGlvbnNbbmFtZV07fQpjYWxsYmFjay5jYWxsKGVs ZW0pO2Zvcih2YXIgbmFtZSBpbiBvcHRpb25zKQplbGVtLnN0eWxlW25hbWVdPW9s ZFtuYW1lXTt9LGNzczpmdW5jdGlvbihlbGVtLG5hbWUsZm9yY2UsZXh0cmEpe2lm KG5hbWU9PSJ3aWR0aCJ8fG5hbWU9PSJoZWlnaHQiKXt2YXIgdmFsLHByb3BzPXtw b3NpdGlvbjoiYWJzb2x1dGUiLHZpc2liaWxpdHk6ImhpZGRlbiIsZGlzcGxheToi YmxvY2sifSx3aGljaD1uYW1lPT0id2lkdGgiP1siTGVmdCIsIlJpZ2h0Il06WyJU b3AiLCJCb3R0b20iXTtmdW5jdGlvbiBnZXRXSCgpe3ZhbD1uYW1lPT0id2lkdGgi P2VsZW0ub2Zmc2V0V2lkdGg6ZWxlbS5vZmZzZXRIZWlnaHQ7aWYoZXh0cmE9PT0i Ym9yZGVyIikKcmV0dXJuO2pRdWVyeS5lYWNoKHdoaWNoLGZ1bmN0aW9uKCl7aWYo IWV4dHJhKQp2YWwtPXBhcnNlRmxvYXQoalF1ZXJ5LmN1ckNTUyhlbGVtLCJwYWRk aW5nIit0aGlzLHRydWUpKXx8MDtpZihleHRyYT09PSJtYXJnaW4iKQp2YWwrPXBh cnNlRmxvYXQoalF1ZXJ5LmN1ckNTUyhlbGVtLCJtYXJnaW4iK3RoaXMsdHJ1ZSkp fHwwO2Vsc2UKdmFsLT1wYXJzZUZsb2F0KGpRdWVyeS5jdXJDU1MoZWxlbSwiYm9y ZGVyIit0aGlzKyJXaWR0aCIsdHJ1ZSkpfHwwO30pO30KaWYoZWxlbS5vZmZzZXRX aWR0aCE9PTApCmdldFdIKCk7ZWxzZQpqUXVlcnkuc3dhcChlbGVtLHByb3BzLGdl dFdIKTtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLnJvdW5kKHZhbCkpO30KcmV0dXJu IGpRdWVyeS5jdXJDU1MoZWxlbSxuYW1lLGZvcmNlKTt9LGN1ckNTUzpmdW5jdGlv bihlbGVtLG5hbWUsZm9yY2Upe3ZhciByZXQsc3R5bGU9ZWxlbS5zdHlsZTtpZihu YW1lPT0ib3BhY2l0eSImJiFqUXVlcnkuc3VwcG9ydC5vcGFjaXR5KXtyZXQ9alF1 ZXJ5LmF0dHIoc3R5bGUsIm9wYWNpdHkiKTtyZXR1cm4gcmV0PT0iIj8iMSI6cmV0 O30KaWYobmFtZS5tYXRjaCgvZmxvYXQvaSkpCm5hbWU9c3R5bGVGbG9hdDtpZigh Zm9yY2UmJnN0eWxlJiZzdHlsZVtuYW1lXSkKcmV0PXN0eWxlW25hbWVdO2Vsc2Ug aWYoZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSl7aWYobmFtZS5tYXRjaCgv ZmxvYXQvaSkpCm5hbWU9ImZsb2F0IjtuYW1lPW5hbWUucmVwbGFjZSgvKFtBLVpd KS9nLCItJDEiKS50b0xvd2VyQ2FzZSgpO3RyeXt2YXIgY29tcHV0ZWRTdHlsZT1k ZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGVsZW0sbnVsbCk7fWNhdGNoKGUp e30KaWYoY29tcHV0ZWRTdHlsZSkKcmV0PWNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVy dHlWYWx1ZShuYW1lKTtpZihuYW1lPT0ib3BhY2l0eSImJnJldD09IiIpCnJldD0i MSI7fWVsc2UgaWYoZWxlbS5jdXJyZW50U3R5bGUpe3ZhciBjYW1lbENhc2U9bmFt ZS5yZXBsYWNlKC9cLShcdykvZyxmdW5jdGlvbihhbGwsbGV0dGVyKXtyZXR1cm4g bGV0dGVyLnRvVXBwZXJDYXNlKCk7fSk7cmV0PWVsZW0uY3VycmVudFN0eWxlW25h bWVdfHxlbGVtLmN1cnJlbnRTdHlsZVtjYW1lbENhc2VdO2lmKCEvXlxkKyhweCk/ JC9pLnRlc3QocmV0KSYmL15cZC8udGVzdChyZXQpKXt2YXIgbGVmdD1zdHlsZS5s ZWZ0LHJzTGVmdD1lbGVtLnJ1bnRpbWVTdHlsZS5sZWZ0O2VsZW0ucnVudGltZVN0 eWxlLmxlZnQ9ZWxlbS5jdXJyZW50U3R5bGUubGVmdDtzdHlsZS5sZWZ0PXJldHx8 MDtyZXQ9c3R5bGUucGl4ZWxMZWZ0KyJweCI7c3R5bGUubGVmdD1sZWZ0O2VsZW0u cnVudGltZVN0eWxlLmxlZnQ9cnNMZWZ0O319CnJldHVybiByZXQ7fSxjbGVhbjpm dW5jdGlvbihlbGVtcyxjb250ZXh0LGZyYWdtZW50KXtjb250ZXh0PWNvbnRleHR8 fGRvY3VtZW50O2lmKHR5cGVvZiBjb250ZXh0LmNyZWF0ZUVsZW1lbnQ9PT0idW5k ZWZpbmVkIikKY29udGV4dD1jb250ZXh0Lm93bmVyRG9jdW1lbnR8fGNvbnRleHRb MF0mJmNvbnRleHRbMF0ub3duZXJEb2N1bWVudHx8ZG9jdW1lbnQ7aWYoIWZyYWdt ZW50JiZlbGVtcy5sZW5ndGg9PT0xJiZ0eXBlb2YgZWxlbXNbMF09PT0ic3RyaW5n Iil7dmFyIG1hdGNoPS9ePChcdyspXHMqXC8/PiQvLmV4ZWMoZWxlbXNbMF0pO2lm KG1hdGNoKQpyZXR1cm5bY29udGV4dC5jcmVhdGVFbGVtZW50KG1hdGNoWzFdKV07 fQp2YXIgcmV0PVtdLHNjcmlwdHM9W10sZGl2PWNvbnRleHQuY3JlYXRlRWxlbWVu dCgiZGl2Iik7alF1ZXJ5LmVhY2goZWxlbXMsZnVuY3Rpb24oaSxlbGVtKXtpZih0 eXBlb2YgZWxlbT09PSJudW1iZXIiKQplbGVtKz0nJztpZighZWxlbSkKcmV0dXJu O2lmKHR5cGVvZiBlbGVtPT09InN0cmluZyIpe2VsZW09ZWxlbS5yZXBsYWNlKC8o PChcdyspW14+XSo/KVwvPi9nLGZ1bmN0aW9uKGFsbCxmcm9udCx0YWcpe3JldHVy biB0YWcubWF0Y2goL14oYWJicnxicnxjb2x8aW1nfGlucHV0fGxpbmt8bWV0YXxw YXJhbXxocnxhcmVhfGVtYmVkKSQvaSk/YWxsOmZyb250KyI+PC8iK3RhZysiPiI7 fSk7dmFyIHRhZ3M9ZWxlbS5yZXBsYWNlKC9eXHMrLywiIikuc3Vic3RyaW5nKDAs MTApLnRvTG93ZXJDYXNlKCk7dmFyIHdyYXA9IXRhZ3MuaW5kZXhPZigiPG9wdCIp JiZbMSwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsIjwvc2VsZWN0PiJd fHwhdGFncy5pbmRleE9mKCI8bGVnIikmJlsxLCI8ZmllbGRzZXQ+IiwiPC9maWVs ZHNldD4iXXx8dGFncy5tYXRjaCgvXjwodGhlYWR8dGJvZHl8dGZvb3R8Y29sZ3xj YXApLykmJlsxLCI8dGFibGU+IiwiPC90YWJsZT4iXXx8IXRhZ3MuaW5kZXhPZigi PHRyIikmJlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXXx8 KCF0YWdzLmluZGV4T2YoIjx0ZCIpfHwhdGFncy5pbmRleE9mKCI8dGgiKSkmJlsz LCI8dGFibGU+PHRib2R5Pjx0cj4iLCI8L3RyPjwvdGJvZHk+PC90YWJsZT4iXXx8 IXRhZ3MuaW5kZXhPZigiPGNvbCIpJiZbMiwiPHRhYmxlPjx0Ym9keT48L3Rib2R5 Pjxjb2xncm91cD4iLCI8L2NvbGdyb3VwPjwvdGFibGU+Il18fCFqUXVlcnkuc3Vw cG9ydC5odG1sU2VyaWFsaXplJiZbMSwiZGl2PGRpdj4iLCI8L2Rpdj4iXXx8WzAs IiIsIiJdO2Rpdi5pbm5lckhUTUw9d3JhcFsxXStlbGVtK3dyYXBbMl07d2hpbGUo d3JhcFswXS0tKQpkaXY9ZGl2Lmxhc3RDaGlsZDtpZighalF1ZXJ5LnN1cHBvcnQu dGJvZHkpe3ZhciBoYXNCb2R5PS88dGJvZHkvaS50ZXN0KGVsZW0pLHRib2R5PSF0 YWdzLmluZGV4T2YoIjx0YWJsZSIpJiYhaGFzQm9keT9kaXYuZmlyc3RDaGlsZCYm ZGl2LmZpcnN0Q2hpbGQuY2hpbGROb2Rlczp3cmFwWzFdPT0iPHRhYmxlPiImJiFo YXNCb2R5P2Rpdi5jaGlsZE5vZGVzOltdO2Zvcih2YXIgaj10Ym9keS5sZW5ndGgt MTtqPj0wOy0taikKaWYoalF1ZXJ5Lm5vZGVOYW1lKHRib2R5W2pdLCJ0Ym9keSIp JiYhdGJvZHlbal0uY2hpbGROb2Rlcy5sZW5ndGgpCnRib2R5W2pdLnBhcmVudE5v ZGUucmVtb3ZlQ2hpbGQodGJvZHlbal0pO30KaWYoIWpRdWVyeS5zdXBwb3J0Lmxl YWRpbmdXaGl0ZXNwYWNlJiYvXlxzLy50ZXN0KGVsZW0pKQpkaXYuaW5zZXJ0QmVm b3JlKGNvbnRleHQuY3JlYXRlVGV4dE5vZGUoZWxlbS5tYXRjaCgvXlxzKi8pWzBd KSxkaXYuZmlyc3RDaGlsZCk7ZWxlbT1qUXVlcnkubWFrZUFycmF5KGRpdi5jaGls ZE5vZGVzKTt9CmlmKGVsZW0ubm9kZVR5cGUpCnJldC5wdXNoKGVsZW0pO2Vsc2UK cmV0PWpRdWVyeS5tZXJnZShyZXQsZWxlbSk7fSk7aWYoZnJhZ21lbnQpe2Zvcih2 YXIgaT0wO3JldFtpXTtpKyspe2lmKGpRdWVyeS5ub2RlTmFtZShyZXRbaV0sInNj cmlwdCIpJiYoIXJldFtpXS50eXBlfHxyZXRbaV0udHlwZS50b0xvd2VyQ2FzZSgp PT09InRleHQvamF2YXNjcmlwdCIpKXtzY3JpcHRzLnB1c2gocmV0W2ldLnBhcmVu dE5vZGU/cmV0W2ldLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocmV0W2ldKTpyZXRb aV0pO31lbHNle2lmKHJldFtpXS5ub2RlVHlwZT09PTEpCnJldC5zcGxpY2UuYXBw bHkocmV0LFtpKzEsMF0uY29uY2F0KGpRdWVyeS5tYWtlQXJyYXkocmV0W2ldLmdl dEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKSkpKTtmcmFnbWVudC5hcHBlbmRD aGlsZChyZXRbaV0pO319CnJldHVybiBzY3JpcHRzO30KcmV0dXJuIHJldDt9LGF0 dHI6ZnVuY3Rpb24oZWxlbSxuYW1lLHZhbHVlKXtpZighZWxlbXx8ZWxlbS5ub2Rl VHlwZT09M3x8ZWxlbS5ub2RlVHlwZT09OCkKcmV0dXJuIHVuZGVmaW5lZDt2YXIg bm90eG1sPSFqUXVlcnkuaXNYTUxEb2MoZWxlbSksc2V0PXZhbHVlIT09dW5kZWZp bmVkO25hbWU9bm90eG1sJiZqUXVlcnkucHJvcHNbbmFtZV18fG5hbWU7aWYoZWxl bS50YWdOYW1lKXt2YXIgc3BlY2lhbD0vaHJlZnxzcmN8c3R5bGUvLnRlc3QobmFt ZSk7aWYobmFtZT09InNlbGVjdGVkIiYmZWxlbS5wYXJlbnROb2RlKQplbGVtLnBh cmVudE5vZGUuc2VsZWN0ZWRJbmRleDtpZihuYW1lIGluIGVsZW0mJm5vdHhtbCYm IXNwZWNpYWwpe2lmKHNldCl7aWYobmFtZT09InR5cGUiJiZqUXVlcnkubm9kZU5h bWUoZWxlbSwiaW5wdXQiKSYmZWxlbS5wYXJlbnROb2RlKQp0aHJvdyJ0eXBlIHBy b3BlcnR5IGNhbid0IGJlIGNoYW5nZWQiO2VsZW1bbmFtZV09dmFsdWU7fQppZihq UXVlcnkubm9kZU5hbWUoZWxlbSwiZm9ybSIpJiZlbGVtLmdldEF0dHJpYnV0ZU5v ZGUobmFtZSkpCnJldHVybiBlbGVtLmdldEF0dHJpYnV0ZU5vZGUobmFtZSkubm9k ZVZhbHVlO2lmKG5hbWU9PSJ0YWJJbmRleCIpe3ZhciBhdHRyaWJ1dGVOb2RlPWVs ZW0uZ2V0QXR0cmlidXRlTm9kZSgidGFiSW5kZXgiKTtyZXR1cm4gYXR0cmlidXRl Tm9kZSYmYXR0cmlidXRlTm9kZS5zcGVjaWZpZWQ/YXR0cmlidXRlTm9kZS52YWx1 ZTplbGVtLm5vZGVOYW1lLm1hdGNoKC8oYnV0dG9ufGlucHV0fG9iamVjdHxzZWxl Y3R8dGV4dGFyZWEpL2kpPzA6ZWxlbS5ub2RlTmFtZS5tYXRjaCgvXihhfGFyZWEp JC9pKSYmZWxlbS5ocmVmPzA6dW5kZWZpbmVkO30KcmV0dXJuIGVsZW1bbmFtZV07 fQppZighalF1ZXJ5LnN1cHBvcnQuc3R5bGUmJm5vdHhtbCYmbmFtZT09InN0eWxl IikKcmV0dXJuIGpRdWVyeS5hdHRyKGVsZW0uc3R5bGUsImNzc1RleHQiLHZhbHVl KTtpZihzZXQpCmVsZW0uc2V0QXR0cmlidXRlKG5hbWUsIiIrdmFsdWUpO3ZhciBh dHRyPSFqUXVlcnkuc3VwcG9ydC5ocmVmTm9ybWFsaXplZCYmbm90eG1sJiZzcGVj aWFsP2VsZW0uZ2V0QXR0cmlidXRlKG5hbWUsMik6ZWxlbS5nZXRBdHRyaWJ1dGUo bmFtZSk7cmV0dXJuIGF0dHI9PT1udWxsP3VuZGVmaW5lZDphdHRyO30KaWYoIWpR dWVyeS5zdXBwb3J0Lm9wYWNpdHkmJm5hbWU9PSJvcGFjaXR5Iil7aWYoc2V0KXtl bGVtLnpvb209MTtlbGVtLmZpbHRlcj0oZWxlbS5maWx0ZXJ8fCIiKS5yZXBsYWNl KC9hbHBoYVwoW14pXSpcKS8sIiIpKwoocGFyc2VJbnQodmFsdWUpKycnPT0iTmFO Ij8iIjoiYWxwaGEob3BhY2l0eT0iK3ZhbHVlKjEwMCsiKSIpO30KcmV0dXJuIGVs ZW0uZmlsdGVyJiZlbGVtLmZpbHRlci5pbmRleE9mKCJvcGFjaXR5PSIpPj0wPyhw YXJzZUZsb2F0KGVsZW0uZmlsdGVyLm1hdGNoKC9vcGFjaXR5PShbXildKikvKVsx XSkvMTAwKSsnJzoiIjt9Cm5hbWU9bmFtZS5yZXBsYWNlKC8tKFthLXpdKS9pZyxm dW5jdGlvbihhbGwsbGV0dGVyKXtyZXR1cm4gbGV0dGVyLnRvVXBwZXJDYXNlKCk7 fSk7aWYoc2V0JiZ2YWx1ZSE9J05hTnB4JyYmdmFsdWUhPSdudWxscHgnKQplbGVt W25hbWVdPXZhbHVlO3JldHVybiBlbGVtW25hbWVdO30sdHJpbTpmdW5jdGlvbih0 ZXh0KXtyZXR1cm4odGV4dHx8IiIpLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKTt9 LG1ha2VBcnJheTpmdW5jdGlvbihhcnJheSl7dmFyIHJldD1bXTtpZihhcnJheSE9 bnVsbCl7dmFyIGk9YXJyYXkubGVuZ3RoO2lmKGk9PW51bGx8fHR5cGVvZiBhcnJh eT09PSJzdHJpbmcifHxqUXVlcnkuaXNGdW5jdGlvbihhcnJheSl8fGFycmF5LnNl dEludGVydmFsKQpyZXRbMF09YXJyYXk7ZWxzZQp3aGlsZShpKQpyZXRbLS1pXT1h cnJheVtpXTt9CnJldHVybiByZXQ7fSxpbkFycmF5OmZ1bmN0aW9uKGVsZW0sYXJy YXkpe2Zvcih2YXIgaT0wLGxlbmd0aD1hcnJheS5sZW5ndGg7aTxsZW5ndGg7aSsr KQppZihhcnJheVtpXT09PWVsZW0pCnJldHVybiBpO3JldHVybi0xO30sbWVyZ2U6 ZnVuY3Rpb24oZmlyc3Qsc2Vjb25kKXt2YXIgaT0wLGVsZW0scG9zPWZpcnN0Lmxl bmd0aDtpZighalF1ZXJ5LnN1cHBvcnQuZ2V0QWxsKXt3aGlsZSgoZWxlbT1zZWNv bmRbaSsrXSkhPW51bGwpCmlmKGVsZW0ubm9kZVR5cGUhPTgpCmZpcnN0W3Bvcysr XT1lbGVtO31lbHNlCndoaWxlKChlbGVtPXNlY29uZFtpKytdKSE9bnVsbCkKZmly c3RbcG9zKytdPWVsZW07cmV0dXJuIGZpcnN0O30sdW5pcXVlOmZ1bmN0aW9uKGFy cmF5KXt2YXIgcmV0PVtdLGRvbmU9e307dHJ5e2Zvcih2YXIgaT0wLGxlbmd0aD1h cnJheS5sZW5ndGg7aTxsZW5ndGg7aSsrKXt2YXIgaWQ9alF1ZXJ5LmRhdGEoYXJy YXlbaV0pO2lmKCFkb25lW2lkXSl7ZG9uZVtpZF09dHJ1ZTtyZXQucHVzaChhcnJh eVtpXSk7fX19Y2F0Y2goZSl7cmV0PWFycmF5O30KcmV0dXJuIHJldDt9LGdyZXA6 ZnVuY3Rpb24oZWxlbXMsY2FsbGJhY2ssaW52KXt2YXIgcmV0PVtdO2Zvcih2YXIg aT0wLGxlbmd0aD1lbGVtcy5sZW5ndGg7aTxsZW5ndGg7aSsrKQppZighaW52IT0h Y2FsbGJhY2soZWxlbXNbaV0saSkpCnJldC5wdXNoKGVsZW1zW2ldKTtyZXR1cm4g cmV0O30sbWFwOmZ1bmN0aW9uKGVsZW1zLGNhbGxiYWNrKXt2YXIgcmV0PVtdO2Zv cih2YXIgaT0wLGxlbmd0aD1lbGVtcy5sZW5ndGg7aTxsZW5ndGg7aSsrKXt2YXIg dmFsdWU9Y2FsbGJhY2soZWxlbXNbaV0saSk7aWYodmFsdWUhPW51bGwpCnJldFty ZXQubGVuZ3RoXT12YWx1ZTt9CnJldHVybiByZXQuY29uY2F0LmFwcGx5KFtdLHJl dCk7fX0pO3ZhciB1c2VyQWdlbnQ9bmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2Vy Q2FzZSgpO2pRdWVyeS5icm93c2VyPXt2ZXJzaW9uOih1c2VyQWdlbnQubWF0Y2go Ly4rKD86cnZ8aXR8cmF8aWUpW1wvOiBdKFtcZC5dKykvKXx8WzAsJzAnXSlbMV0s c2FmYXJpOi93ZWJraXQvLnRlc3QodXNlckFnZW50KSxvcGVyYTovb3BlcmEvLnRl c3QodXNlckFnZW50KSxtc2llOi9tc2llLy50ZXN0KHVzZXJBZ2VudCkmJiEvb3Bl cmEvLnRlc3QodXNlckFnZW50KSxtb3ppbGxhOi9tb3ppbGxhLy50ZXN0KHVzZXJB Z2VudCkmJiEvKGNvbXBhdGlibGV8d2Via2l0KS8udGVzdCh1c2VyQWdlbnQpfTtq UXVlcnkuZWFjaCh7cGFyZW50OmZ1bmN0aW9uKGVsZW0pe3JldHVybiBlbGVtLnBh cmVudE5vZGU7fSxwYXJlbnRzOmZ1bmN0aW9uKGVsZW0pe3JldHVybiBqUXVlcnku ZGlyKGVsZW0sInBhcmVudE5vZGUiKTt9LG5leHQ6ZnVuY3Rpb24oZWxlbSl7cmV0 dXJuIGpRdWVyeS5udGgoZWxlbSwyLCJuZXh0U2libGluZyIpO30scHJldjpmdW5j dGlvbihlbGVtKXtyZXR1cm4galF1ZXJ5Lm50aChlbGVtLDIsInByZXZpb3VzU2li bGluZyIpO30sbmV4dEFsbDpmdW5jdGlvbihlbGVtKXtyZXR1cm4galF1ZXJ5LmRp cihlbGVtLCJuZXh0U2libGluZyIpO30scHJldkFsbDpmdW5jdGlvbihlbGVtKXty ZXR1cm4galF1ZXJ5LmRpcihlbGVtLCJwcmV2aW91c1NpYmxpbmciKTt9LHNpYmxp bmdzOmZ1bmN0aW9uKGVsZW0pe3JldHVybiBqUXVlcnkuc2libGluZyhlbGVtLnBh cmVudE5vZGUuZmlyc3RDaGlsZCxlbGVtKTt9LGNoaWxkcmVuOmZ1bmN0aW9uKGVs ZW0pe3JldHVybiBqUXVlcnkuc2libGluZyhlbGVtLmZpcnN0Q2hpbGQpO30sY29u dGVudHM6ZnVuY3Rpb24oZWxlbSl7cmV0dXJuIGpRdWVyeS5ub2RlTmFtZShlbGVt LCJpZnJhbWUiKT9lbGVtLmNvbnRlbnREb2N1bWVudHx8ZWxlbS5jb250ZW50V2lu ZG93LmRvY3VtZW50OmpRdWVyeS5tYWtlQXJyYXkoZWxlbS5jaGlsZE5vZGVzKTt9 fSxmdW5jdGlvbihuYW1lLGZuKXtqUXVlcnkuZm5bbmFtZV09ZnVuY3Rpb24oc2Vs ZWN0b3Ipe3ZhciByZXQ9alF1ZXJ5Lm1hcCh0aGlzLGZuKTtpZihzZWxlY3RvciYm dHlwZW9mIHNlbGVjdG9yPT0ic3RyaW5nIikKcmV0PWpRdWVyeS5tdWx0aUZpbHRl cihzZWxlY3RvcixyZXQpO3JldHVybiB0aGlzLnB1c2hTdGFjayhqUXVlcnkudW5p cXVlKHJldCksbmFtZSxzZWxlY3Rvcik7fTt9KTtqUXVlcnkuZWFjaCh7YXBwZW5k VG86ImFwcGVuZCIscHJlcGVuZFRvOiJwcmVwZW5kIixpbnNlcnRCZWZvcmU6ImJl Zm9yZSIsaW5zZXJ0QWZ0ZXI6ImFmdGVyIixyZXBsYWNlQWxsOiJyZXBsYWNlV2l0 aCJ9LGZ1bmN0aW9uKG5hbWUsb3JpZ2luYWwpe2pRdWVyeS5mbltuYW1lXT1mdW5j dGlvbihzZWxlY3Rvcil7dmFyIHJldD1bXSxpbnNlcnQ9alF1ZXJ5KHNlbGVjdG9y KTtmb3IodmFyIGk9MCxsPWluc2VydC5sZW5ndGg7aTxsO2krKyl7dmFyIGVsZW1z PShpPjA/dGhpcy5jbG9uZSh0cnVlKTp0aGlzKS5nZXQoKTtqUXVlcnkuZm5bb3Jp Z2luYWxdLmFwcGx5KGpRdWVyeShpbnNlcnRbaV0pLGVsZW1zKTtyZXQ9cmV0LmNv bmNhdChlbGVtcyk7fQpyZXR1cm4gdGhpcy5wdXNoU3RhY2socmV0LG5hbWUsc2Vs ZWN0b3IpO307fSk7alF1ZXJ5LmVhY2goe3JlbW92ZUF0dHI6ZnVuY3Rpb24obmFt ZSl7alF1ZXJ5LmF0dHIodGhpcyxuYW1lLCIiKTtpZih0aGlzLm5vZGVUeXBlPT0x KQp0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTt9LGFkZENsYXNzOmZ1bmN0aW9u KGNsYXNzTmFtZXMpe2pRdWVyeS5jbGFzc05hbWUuYWRkKHRoaXMsY2xhc3NOYW1l cyk7fSxyZW1vdmVDbGFzczpmdW5jdGlvbihjbGFzc05hbWVzKXtqUXVlcnkuY2xh c3NOYW1lLnJlbW92ZSh0aGlzLGNsYXNzTmFtZXMpO30sdG9nZ2xlQ2xhc3M6ZnVu Y3Rpb24oY2xhc3NOYW1lcyxzdGF0ZSl7aWYodHlwZW9mIHN0YXRlIT09ImJvb2xl YW4iKQpzdGF0ZT0halF1ZXJ5LmNsYXNzTmFtZS5oYXModGhpcyxjbGFzc05hbWVz KTtqUXVlcnkuY2xhc3NOYW1lW3N0YXRlPyJhZGQiOiJyZW1vdmUiXSh0aGlzLGNs YXNzTmFtZXMpO30scmVtb3ZlOmZ1bmN0aW9uKHNlbGVjdG9yKXtpZighc2VsZWN0 b3J8fGpRdWVyeS5maWx0ZXIoc2VsZWN0b3IsW3RoaXNdKS5sZW5ndGgpe2pRdWVy eSgiKiIsdGhpcykuYWRkKFt0aGlzXSkuZWFjaChmdW5jdGlvbigpe2pRdWVyeS5l dmVudC5yZW1vdmUodGhpcyk7alF1ZXJ5LnJlbW92ZURhdGEodGhpcyk7fSk7aWYo dGhpcy5wYXJlbnROb2RlKQp0aGlzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhp cyk7fX0sZW1wdHk6ZnVuY3Rpb24oKXtqUXVlcnkodGhpcykuY2hpbGRyZW4oKS5y ZW1vdmUoKTt3aGlsZSh0aGlzLmZpcnN0Q2hpbGQpCnRoaXMucmVtb3ZlQ2hpbGQo dGhpcy5maXJzdENoaWxkKTt9fSxmdW5jdGlvbihuYW1lLGZuKXtqUXVlcnkuZm5b bmFtZV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGZuLGFyZ3VtZW50cyk7 fTt9KTtmdW5jdGlvbiBudW0oZWxlbSxwcm9wKXtyZXR1cm4gZWxlbVswXSYmcGFy c2VJbnQoalF1ZXJ5LmN1ckNTUyhlbGVtWzBdLHByb3AsdHJ1ZSksMTApfHwwO30K dmFyIGV4cGFuZG89ImpRdWVyeSIrbm93KCksdXVpZD0wLHdpbmRvd0RhdGE9e307 alF1ZXJ5LmV4dGVuZCh7Y2FjaGU6e30sZGF0YTpmdW5jdGlvbihlbGVtLG5hbWUs ZGF0YSl7ZWxlbT1lbGVtPT13aW5kb3c/d2luZG93RGF0YTplbGVtO3ZhciBpZD1l bGVtW2V4cGFuZG9dO2lmKCFpZCkKaWQ9ZWxlbVtleHBhbmRvXT0rK3V1aWQ7aWYo bmFtZSYmIWpRdWVyeS5jYWNoZVtpZF0pCmpRdWVyeS5jYWNoZVtpZF09e307aWYo ZGF0YSE9PXVuZGVmaW5lZCkKalF1ZXJ5LmNhY2hlW2lkXVtuYW1lXT1kYXRhO3Jl dHVybiBuYW1lP2pRdWVyeS5jYWNoZVtpZF1bbmFtZV06aWQ7fSxyZW1vdmVEYXRh OmZ1bmN0aW9uKGVsZW0sbmFtZSl7ZWxlbT1lbGVtPT13aW5kb3c/d2luZG93RGF0 YTplbGVtO3ZhciBpZD1lbGVtW2V4cGFuZG9dO2lmKG5hbWUpe2lmKGpRdWVyeS5j YWNoZVtpZF0pe2RlbGV0ZSBqUXVlcnkuY2FjaGVbaWRdW25hbWVdO25hbWU9IiI7 Zm9yKG5hbWUgaW4galF1ZXJ5LmNhY2hlW2lkXSkKYnJlYWs7aWYoIW5hbWUpCmpR dWVyeS5yZW1vdmVEYXRhKGVsZW0pO319ZWxzZXt0cnl7ZGVsZXRlIGVsZW1bZXhw YW5kb107fWNhdGNoKGUpe2lmKGVsZW0ucmVtb3ZlQXR0cmlidXRlKQplbGVtLnJl bW92ZUF0dHJpYnV0ZShleHBhbmRvKTt9CmRlbGV0ZSBqUXVlcnkuY2FjaGVbaWRd O319LHF1ZXVlOmZ1bmN0aW9uKGVsZW0sdHlwZSxkYXRhKXtpZihlbGVtKXt0eXBl PSh0eXBlfHwiZngiKSsicXVldWUiO3ZhciBxPWpRdWVyeS5kYXRhKGVsZW0sdHlw ZSk7aWYoIXF8fGpRdWVyeS5pc0FycmF5KGRhdGEpKQpxPWpRdWVyeS5kYXRhKGVs ZW0sdHlwZSxqUXVlcnkubWFrZUFycmF5KGRhdGEpKTtlbHNlIGlmKGRhdGEpCnEu cHVzaChkYXRhKTt9CnJldHVybiBxO30sZGVxdWV1ZTpmdW5jdGlvbihlbGVtLHR5 cGUpe3ZhciBxdWV1ZT1qUXVlcnkucXVldWUoZWxlbSx0eXBlKSxmbj1xdWV1ZS5z aGlmdCgpO2lmKCF0eXBlfHx0eXBlPT09ImZ4IikKZm49cXVldWVbMF07aWYoZm4h PT11bmRlZmluZWQpCmZuLmNhbGwoZWxlbSk7fX0pO2pRdWVyeS5mbi5leHRlbmQo e2RhdGE6ZnVuY3Rpb24oa2V5LHZhbHVlKXt2YXIgcGFydHM9a2V5LnNwbGl0KCIu Iik7cGFydHNbMV09cGFydHNbMV0/Ii4iK3BhcnRzWzFdOiIiO2lmKHZhbHVlPT09 dW5kZWZpbmVkKXt2YXIgZGF0YT10aGlzLnRyaWdnZXJIYW5kbGVyKCJnZXREYXRh IitwYXJ0c1sxXSsiISIsW3BhcnRzWzBdXSk7aWYoZGF0YT09PXVuZGVmaW5lZCYm dGhpcy5sZW5ndGgpCmRhdGE9alF1ZXJ5LmRhdGEodGhpc1swXSxrZXkpO3JldHVy biBkYXRhPT09dW5kZWZpbmVkJiZwYXJ0c1sxXT90aGlzLmRhdGEocGFydHNbMF0p OmRhdGE7fWVsc2UKcmV0dXJuIHRoaXMudHJpZ2dlcigic2V0RGF0YSIrcGFydHNb MV0rIiEiLFtwYXJ0c1swXSx2YWx1ZV0pLmVhY2goZnVuY3Rpb24oKXtqUXVlcnku ZGF0YSh0aGlzLGtleSx2YWx1ZSk7fSk7fSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGtl eSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2pRdWVyeS5yZW1vdmVEYXRh KHRoaXMsa2V5KTt9KTt9LHF1ZXVlOmZ1bmN0aW9uKHR5cGUsZGF0YSl7aWYodHlw ZW9mIHR5cGUhPT0ic3RyaW5nIil7ZGF0YT10eXBlO3R5cGU9ImZ4Ijt9CmlmKGRh dGE9PT11bmRlZmluZWQpCnJldHVybiBqUXVlcnkucXVldWUodGhpc1swXSx0eXBl KTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHF1ZXVlPWpRdWVyeS5x dWV1ZSh0aGlzLHR5cGUsZGF0YSk7aWYodHlwZT09ImZ4IiYmcXVldWUubGVuZ3Ro PT0xKQpxdWV1ZVswXS5jYWxsKHRoaXMpO30pO30sZGVxdWV1ZTpmdW5jdGlvbih0 eXBlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7alF1ZXJ5LmRlcXVldWUo dGhpcyx0eXBlKTt9KTt9fSk7KGZ1bmN0aW9uKCl7dmFyIGNodW5rZXI9LygoPzpc KCg/OlwoW14oKV0rXCl8W14oKV0rKStcKXxcWyg/OlxbW15bXF1dKlxdfFsnIl1b XiciXSpbJyJdfFteW1xdJyJdKykrXF18XFwufFteID4rfiwoXFtcXF0rKSt8Wz4r fl0pKFxzKixccyopPy9nLGRvbmU9MCx0b1N0cmluZz1PYmplY3QucHJvdG90eXBl LnRvU3RyaW5nO3ZhciBTaXp6bGU9ZnVuY3Rpb24oc2VsZWN0b3IsY29udGV4dCxy ZXN1bHRzLHNlZWQpe3Jlc3VsdHM9cmVzdWx0c3x8W107Y29udGV4dD1jb250ZXh0 fHxkb2N1bWVudDtpZihjb250ZXh0Lm5vZGVUeXBlIT09MSYmY29udGV4dC5ub2Rl VHlwZSE9PTkpCnJldHVybltdO2lmKCFzZWxlY3Rvcnx8dHlwZW9mIHNlbGVjdG9y IT09InN0cmluZyIpe3JldHVybiByZXN1bHRzO30KdmFyIHBhcnRzPVtdLG0sc2V0 LGNoZWNrU2V0LGNoZWNrLG1vZGUsZXh0cmEscHJ1bmU9dHJ1ZTtjaHVua2VyLmxh c3RJbmRleD0wO3doaWxlKChtPWNodW5rZXIuZXhlYyhzZWxlY3RvcikpIT09bnVs bCl7cGFydHMucHVzaChtWzFdKTtpZihtWzJdKXtleHRyYT1SZWdFeHAucmlnaHRD b250ZXh0O2JyZWFrO319CmlmKHBhcnRzLmxlbmd0aD4xJiZvcmlnUE9TLmV4ZWMo c2VsZWN0b3IpKXtpZihwYXJ0cy5sZW5ndGg9PT0yJiZFeHByLnJlbGF0aXZlW3Bh cnRzWzBdXSl7c2V0PXBvc1Byb2Nlc3MocGFydHNbMF0rcGFydHNbMV0sY29udGV4 dCk7fWVsc2V7c2V0PUV4cHIucmVsYXRpdmVbcGFydHNbMF1dP1tjb250ZXh0XTpT aXp6bGUocGFydHMuc2hpZnQoKSxjb250ZXh0KTt3aGlsZShwYXJ0cy5sZW5ndGgp e3NlbGVjdG9yPXBhcnRzLnNoaWZ0KCk7aWYoRXhwci5yZWxhdGl2ZVtzZWxlY3Rv cl0pCnNlbGVjdG9yKz1wYXJ0cy5zaGlmdCgpO3NldD1wb3NQcm9jZXNzKHNlbGVj dG9yLHNldCk7fX19ZWxzZXt2YXIgcmV0PXNlZWQ/e2V4cHI6cGFydHMucG9wKCks c2V0Om1ha2VBcnJheShzZWVkKX06U2l6emxlLmZpbmQocGFydHMucG9wKCkscGFy dHMubGVuZ3RoPT09MSYmY29udGV4dC5wYXJlbnROb2RlP2NvbnRleHQucGFyZW50 Tm9kZTpjb250ZXh0LGlzWE1MKGNvbnRleHQpKTtzZXQ9U2l6emxlLmZpbHRlcihy ZXQuZXhwcixyZXQuc2V0KTtpZihwYXJ0cy5sZW5ndGg+MCl7Y2hlY2tTZXQ9bWFr ZUFycmF5KHNldCk7fWVsc2V7cHJ1bmU9ZmFsc2U7fQp3aGlsZShwYXJ0cy5sZW5n dGgpe3ZhciBjdXI9cGFydHMucG9wKCkscG9wPWN1cjtpZighRXhwci5yZWxhdGl2 ZVtjdXJdKXtjdXI9IiI7fWVsc2V7cG9wPXBhcnRzLnBvcCgpO30KaWYocG9wPT1u dWxsKXtwb3A9Y29udGV4dDt9CkV4cHIucmVsYXRpdmVbY3VyXShjaGVja1NldCxw b3AsaXNYTUwoY29udGV4dCkpO319CmlmKCFjaGVja1NldCl7Y2hlY2tTZXQ9c2V0 O30KaWYoIWNoZWNrU2V0KXt0aHJvdyJTeW50YXggZXJyb3IsIHVucmVjb2duaXpl ZCBleHByZXNzaW9uOiAiKyhjdXJ8fHNlbGVjdG9yKTt9CmlmKHRvU3RyaW5nLmNh bGwoY2hlY2tTZXQpPT09IltvYmplY3QgQXJyYXldIil7aWYoIXBydW5lKXtyZXN1 bHRzLnB1c2guYXBwbHkocmVzdWx0cyxjaGVja1NldCk7fWVsc2UgaWYoY29udGV4 dC5ub2RlVHlwZT09PTEpe2Zvcih2YXIgaT0wO2NoZWNrU2V0W2ldIT1udWxsO2kr Kyl7aWYoY2hlY2tTZXRbaV0mJihjaGVja1NldFtpXT09PXRydWV8fGNoZWNrU2V0 W2ldLm5vZGVUeXBlPT09MSYmY29udGFpbnMoY29udGV4dCxjaGVja1NldFtpXSkp KXtyZXN1bHRzLnB1c2goc2V0W2ldKTt9fX1lbHNle2Zvcih2YXIgaT0wO2NoZWNr U2V0W2ldIT1udWxsO2krKyl7aWYoY2hlY2tTZXRbaV0mJmNoZWNrU2V0W2ldLm5v ZGVUeXBlPT09MSl7cmVzdWx0cy5wdXNoKHNldFtpXSk7fX19fWVsc2V7bWFrZUFy cmF5KGNoZWNrU2V0LHJlc3VsdHMpO30KaWYoZXh0cmEpe1NpenpsZShleHRyYSxj b250ZXh0LHJlc3VsdHMsc2VlZCk7aWYoc29ydE9yZGVyKXtoYXNEdXBsaWNhdGU9 ZmFsc2U7cmVzdWx0cy5zb3J0KHNvcnRPcmRlcik7aWYoaGFzRHVwbGljYXRlKXtm b3IodmFyIGk9MTtpPHJlc3VsdHMubGVuZ3RoO2krKyl7aWYocmVzdWx0c1tpXT09 PXJlc3VsdHNbaS0xXSl7cmVzdWx0cy5zcGxpY2UoaS0tLDEpO319fX19CnJldHVy biByZXN1bHRzO307U2l6emxlLm1hdGNoZXM9ZnVuY3Rpb24oZXhwcixzZXQpe3Jl dHVybiBTaXp6bGUoZXhwcixudWxsLG51bGwsc2V0KTt9O1NpenpsZS5maW5kPWZ1 bmN0aW9uKGV4cHIsY29udGV4dCxpc1hNTCl7dmFyIHNldCxtYXRjaDtpZighZXhw cil7cmV0dXJuW107fQpmb3IodmFyIGk9MCxsPUV4cHIub3JkZXIubGVuZ3RoO2k8 bDtpKyspe3ZhciB0eXBlPUV4cHIub3JkZXJbaV0sbWF0Y2g7aWYoKG1hdGNoPUV4 cHIubWF0Y2hbdHlwZV0uZXhlYyhleHByKSkpe3ZhciBsZWZ0PVJlZ0V4cC5sZWZ0 Q29udGV4dDtpZihsZWZ0LnN1YnN0cihsZWZ0Lmxlbmd0aC0xKSE9PSJcXCIpe21h dGNoWzFdPShtYXRjaFsxXXx8IiIpLnJlcGxhY2UoL1xcL2csIiIpO3NldD1FeHBy LmZpbmRbdHlwZV0obWF0Y2gsY29udGV4dCxpc1hNTCk7aWYoc2V0IT1udWxsKXtl eHByPWV4cHIucmVwbGFjZShFeHByLm1hdGNoW3R5cGVdLCIiKTticmVhazt9fX19 CmlmKCFzZXQpe3NldD1jb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7 fQpyZXR1cm57c2V0OnNldCxleHByOmV4cHJ9O307U2l6emxlLmZpbHRlcj1mdW5j dGlvbihleHByLHNldCxpbnBsYWNlLG5vdCl7dmFyIG9sZD1leHByLHJlc3VsdD1b XSxjdXJMb29wPXNldCxtYXRjaCxhbnlGb3VuZCxpc1hNTEZpbHRlcj1zZXQmJnNl dFswXSYmaXNYTUwoc2V0WzBdKTt3aGlsZShleHByJiZzZXQubGVuZ3RoKXtmb3Io dmFyIHR5cGUgaW4gRXhwci5maWx0ZXIpe2lmKChtYXRjaD1FeHByLm1hdGNoW3R5 cGVdLmV4ZWMoZXhwcikpIT1udWxsKXt2YXIgZmlsdGVyPUV4cHIuZmlsdGVyW3R5 cGVdLGZvdW5kLGl0ZW07YW55Rm91bmQ9ZmFsc2U7aWYoY3VyTG9vcD09cmVzdWx0 KXtyZXN1bHQ9W107fQppZihFeHByLnByZUZpbHRlclt0eXBlXSl7bWF0Y2g9RXhw ci5wcmVGaWx0ZXJbdHlwZV0obWF0Y2gsY3VyTG9vcCxpbnBsYWNlLHJlc3VsdCxu b3QsaXNYTUxGaWx0ZXIpO2lmKCFtYXRjaCl7YW55Rm91bmQ9Zm91bmQ9dHJ1ZTt9 ZWxzZSBpZihtYXRjaD09PXRydWUpe2NvbnRpbnVlO319CmlmKG1hdGNoKXtmb3Io dmFyIGk9MDsoaXRlbT1jdXJMb29wW2ldKSE9bnVsbDtpKyspe2lmKGl0ZW0pe2Zv dW5kPWZpbHRlcihpdGVtLG1hdGNoLGksY3VyTG9vcCk7dmFyIHBhc3M9bm90XiEh Zm91bmQ7aWYoaW5wbGFjZSYmZm91bmQhPW51bGwpe2lmKHBhc3Mpe2FueUZvdW5k PXRydWU7fWVsc2V7Y3VyTG9vcFtpXT1mYWxzZTt9fWVsc2UgaWYocGFzcyl7cmVz dWx0LnB1c2goaXRlbSk7YW55Rm91bmQ9dHJ1ZTt9fX19CmlmKGZvdW5kIT09dW5k ZWZpbmVkKXtpZighaW5wbGFjZSl7Y3VyTG9vcD1yZXN1bHQ7fQpleHByPWV4cHIu cmVwbGFjZShFeHByLm1hdGNoW3R5cGVdLCIiKTtpZighYW55Rm91bmQpe3JldHVy bltdO30KYnJlYWs7fX19CmlmKGV4cHI9PW9sZCl7aWYoYW55Rm91bmQ9PW51bGwp e3Rocm93IlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246ICIr ZXhwcjt9ZWxzZXticmVhazt9fQpvbGQ9ZXhwcjt9CnJldHVybiBjdXJMb29wO307 dmFyIEV4cHI9U2l6emxlLnNlbGVjdG9ycz17b3JkZXI6WyJJRCIsIk5BTUUiLCJU QUciXSxtYXRjaDp7SUQ6LyMoKD86W1x3XHUwMGMwLVx1RkZGRl8tXXxcXC4pKykv LENMQVNTOi9cLigoPzpbXHdcdTAwYzAtXHVGRkZGXy1dfFxcLikrKS8sTkFNRTov XFtuYW1lPVsnIl0qKCg/Oltcd1x1MDBjMC1cdUZGRkZfLV18XFwuKSspWyciXSpc XS8sQVRUUjovXFtccyooKD86W1x3XHUwMGMwLVx1RkZGRl8tXXxcXC4pKylccyoo PzooXFM/PSlccyooWyciXSopKC4qPylcM3wpXHMqXF0vLFRBRzovXigoPzpbXHdc dTAwYzAtXHVGRkZGXCpfLV18XFwuKSspLyxDSElMRDovOihvbmx5fG50aHxsYXN0 fGZpcnN0KS1jaGlsZCg/OlwoKGV2ZW58b2RkfFtcZG4rLV0qKVwpKT8vLFBPUzov OihudGh8ZXF8Z3R8bHR8Zmlyc3R8bGFzdHxldmVufG9kZCkoPzpcKChcZCopXCkp Pyg/PVteLV18JCkvLFBTRVVETzovOigoPzpbXHdcdTAwYzAtXHVGRkZGXy1dfFxc LikrKSg/OlwoKFsnIl0qKSgoPzpcKFteXCldK1wpfFteXDJcKFwpXSopKylcMlwp KT8vfSxhdHRyTWFwOnsiY2xhc3MiOiJjbGFzc05hbWUiLCJmb3IiOiJodG1sRm9y In0sYXR0ckhhbmRsZTp7aHJlZjpmdW5jdGlvbihlbGVtKXtyZXR1cm4gZWxlbS5n ZXRBdHRyaWJ1dGUoImhyZWYiKTt9fSxyZWxhdGl2ZTp7IisiOmZ1bmN0aW9uKGNo ZWNrU2V0LHBhcnQsaXNYTUwpe3ZhciBpc1BhcnRTdHI9dHlwZW9mIHBhcnQ9PT0i c3RyaW5nIixpc1RhZz1pc1BhcnRTdHImJiEvXFcvLnRlc3QocGFydCksaXNQYXJ0 U3RyTm90VGFnPWlzUGFydFN0ciYmIWlzVGFnO2lmKGlzVGFnJiYhaXNYTUwpe3Bh cnQ9cGFydC50b1VwcGVyQ2FzZSgpO30KZm9yKHZhciBpPTAsbD1jaGVja1NldC5s ZW5ndGgsZWxlbTtpPGw7aSsrKXtpZigoZWxlbT1jaGVja1NldFtpXSkpe3doaWxl KChlbGVtPWVsZW0ucHJldmlvdXNTaWJsaW5nKSYmZWxlbS5ub2RlVHlwZSE9PTEp e30KY2hlY2tTZXRbaV09aXNQYXJ0U3RyTm90VGFnfHxlbGVtJiZlbGVtLm5vZGVO YW1lPT09cGFydD9lbGVtfHxmYWxzZTplbGVtPT09cGFydDt9fQppZihpc1BhcnRT dHJOb3RUYWcpe1NpenpsZS5maWx0ZXIocGFydCxjaGVja1NldCx0cnVlKTt9fSwi PiI6ZnVuY3Rpb24oY2hlY2tTZXQscGFydCxpc1hNTCl7dmFyIGlzUGFydFN0cj10 eXBlb2YgcGFydD09PSJzdHJpbmciO2lmKGlzUGFydFN0ciYmIS9cVy8udGVzdChw YXJ0KSl7cGFydD1pc1hNTD9wYXJ0OnBhcnQudG9VcHBlckNhc2UoKTtmb3IodmFy IGk9MCxsPWNoZWNrU2V0Lmxlbmd0aDtpPGw7aSsrKXt2YXIgZWxlbT1jaGVja1Nl dFtpXTtpZihlbGVtKXt2YXIgcGFyZW50PWVsZW0ucGFyZW50Tm9kZTtjaGVja1Nl dFtpXT1wYXJlbnQubm9kZU5hbWU9PT1wYXJ0P3BhcmVudDpmYWxzZTt9fX1lbHNl e2Zvcih2YXIgaT0wLGw9Y2hlY2tTZXQubGVuZ3RoO2k8bDtpKyspe3ZhciBlbGVt PWNoZWNrU2V0W2ldO2lmKGVsZW0pe2NoZWNrU2V0W2ldPWlzUGFydFN0cj9lbGVt LnBhcmVudE5vZGU6ZWxlbS5wYXJlbnROb2RlPT09cGFydDt9fQppZihpc1BhcnRT dHIpe1NpenpsZS5maWx0ZXIocGFydCxjaGVja1NldCx0cnVlKTt9fX0sIiI6ZnVu Y3Rpb24oY2hlY2tTZXQscGFydCxpc1hNTCl7dmFyIGRvbmVOYW1lPWRvbmUrKyxj aGVja0ZuPWRpckNoZWNrO2lmKCFwYXJ0Lm1hdGNoKC9cVy8pKXt2YXIgbm9kZUNo ZWNrPXBhcnQ9aXNYTUw/cGFydDpwYXJ0LnRvVXBwZXJDYXNlKCk7Y2hlY2tGbj1k aXJOb2RlQ2hlY2s7fQpjaGVja0ZuKCJwYXJlbnROb2RlIixwYXJ0LGRvbmVOYW1l LGNoZWNrU2V0LG5vZGVDaGVjayxpc1hNTCk7fSwifiI6ZnVuY3Rpb24oY2hlY2tT ZXQscGFydCxpc1hNTCl7dmFyIGRvbmVOYW1lPWRvbmUrKyxjaGVja0ZuPWRpckNo ZWNrO2lmKHR5cGVvZiBwYXJ0PT09InN0cmluZyImJiFwYXJ0Lm1hdGNoKC9cVy8p KXt2YXIgbm9kZUNoZWNrPXBhcnQ9aXNYTUw/cGFydDpwYXJ0LnRvVXBwZXJDYXNl KCk7Y2hlY2tGbj1kaXJOb2RlQ2hlY2s7fQpjaGVja0ZuKCJwcmV2aW91c1NpYmxp bmciLHBhcnQsZG9uZU5hbWUsY2hlY2tTZXQsbm9kZUNoZWNrLGlzWE1MKTt9fSxm aW5kOntJRDpmdW5jdGlvbihtYXRjaCxjb250ZXh0LGlzWE1MKXtpZih0eXBlb2Yg Y29udGV4dC5nZXRFbGVtZW50QnlJZCE9PSJ1bmRlZmluZWQiJiYhaXNYTUwpe3Zh ciBtPWNvbnRleHQuZ2V0RWxlbWVudEJ5SWQobWF0Y2hbMV0pO3JldHVybiBtP1tt XTpbXTt9fSxOQU1FOmZ1bmN0aW9uKG1hdGNoLGNvbnRleHQsaXNYTUwpe2lmKHR5 cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlOYW1lIT09InVuZGVmaW5lZCIpe3Zh ciByZXQ9W10scmVzdWx0cz1jb250ZXh0LmdldEVsZW1lbnRzQnlOYW1lKG1hdGNo WzFdKTtmb3IodmFyIGk9MCxsPXJlc3VsdHMubGVuZ3RoO2k8bDtpKyspe2lmKHJl c3VsdHNbaV0uZ2V0QXR0cmlidXRlKCJuYW1lIik9PT1tYXRjaFsxXSl7cmV0LnB1 c2gocmVzdWx0c1tpXSk7fX0KcmV0dXJuIHJldC5sZW5ndGg9PT0wP251bGw6cmV0 O319LFRBRzpmdW5jdGlvbihtYXRjaCxjb250ZXh0KXtyZXR1cm4gY29udGV4dC5n ZXRFbGVtZW50c0J5VGFnTmFtZShtYXRjaFsxXSk7fX0scHJlRmlsdGVyOntDTEFT UzpmdW5jdGlvbihtYXRjaCxjdXJMb29wLGlucGxhY2UscmVzdWx0LG5vdCxpc1hN TCl7bWF0Y2g9IiAiK21hdGNoWzFdLnJlcGxhY2UoL1xcL2csIiIpKyIgIjtpZihp c1hNTCl7cmV0dXJuIG1hdGNoO30KZm9yKHZhciBpPTAsZWxlbTsoZWxlbT1jdXJM b29wW2ldKSE9bnVsbDtpKyspe2lmKGVsZW0pe2lmKG5vdF4oZWxlbS5jbGFzc05h bWUmJigiICIrZWxlbS5jbGFzc05hbWUrIiAiKS5pbmRleE9mKG1hdGNoKT49MCkp e2lmKCFpbnBsYWNlKQpyZXN1bHQucHVzaChlbGVtKTt9ZWxzZSBpZihpbnBsYWNl KXtjdXJMb29wW2ldPWZhbHNlO319fQpyZXR1cm4gZmFsc2U7fSxJRDpmdW5jdGlv bihtYXRjaCl7cmV0dXJuIG1hdGNoWzFdLnJlcGxhY2UoL1xcL2csIiIpO30sVEFH OmZ1bmN0aW9uKG1hdGNoLGN1ckxvb3Ape2Zvcih2YXIgaT0wO2N1ckxvb3BbaV09 PT1mYWxzZTtpKyspe30KcmV0dXJuIGN1ckxvb3BbaV0mJmlzWE1MKGN1ckxvb3Bb aV0pP21hdGNoWzFdOm1hdGNoWzFdLnRvVXBwZXJDYXNlKCk7fSxDSElMRDpmdW5j dGlvbihtYXRjaCl7aWYobWF0Y2hbMV09PSJudGgiKXt2YXIgdGVzdD0vKC0/KShc ZCopbigoPzpcK3wtKT9cZCopLy5leGVjKG1hdGNoWzJdPT0iZXZlbiImJiIybiJ8 fG1hdGNoWzJdPT0ib2RkIiYmIjJuKzEifHwhL1xELy50ZXN0KG1hdGNoWzJdKSYm IjBuKyIrbWF0Y2hbMl18fG1hdGNoWzJdKTttYXRjaFsyXT0odGVzdFsxXSsodGVz dFsyXXx8MSkpLTA7bWF0Y2hbM109dGVzdFszXS0wO30KbWF0Y2hbMF09ZG9uZSsr O3JldHVybiBtYXRjaDt9LEFUVFI6ZnVuY3Rpb24obWF0Y2gsY3VyTG9vcCxpbnBs YWNlLHJlc3VsdCxub3QsaXNYTUwpe3ZhciBuYW1lPW1hdGNoWzFdLnJlcGxhY2Uo L1xcL2csIiIpO2lmKCFpc1hNTCYmRXhwci5hdHRyTWFwW25hbWVdKXttYXRjaFsx XT1FeHByLmF0dHJNYXBbbmFtZV07fQppZihtYXRjaFsyXT09PSJ+PSIpe21hdGNo WzRdPSIgIittYXRjaFs0XSsiICI7fQpyZXR1cm4gbWF0Y2g7fSxQU0VVRE86ZnVu Y3Rpb24obWF0Y2gsY3VyTG9vcCxpbnBsYWNlLHJlc3VsdCxub3Qpe2lmKG1hdGNo WzFdPT09Im5vdCIpe2lmKG1hdGNoWzNdLm1hdGNoKGNodW5rZXIpLmxlbmd0aD4x fHwvXlx3Ly50ZXN0KG1hdGNoWzNdKSl7bWF0Y2hbM109U2l6emxlKG1hdGNoWzNd LG51bGwsbnVsbCxjdXJMb29wKTt9ZWxzZXt2YXIgcmV0PVNpenpsZS5maWx0ZXIo bWF0Y2hbM10sY3VyTG9vcCxpbnBsYWNlLHRydWVebm90KTtpZighaW5wbGFjZSl7 cmVzdWx0LnB1c2guYXBwbHkocmVzdWx0LHJldCk7fQpyZXR1cm4gZmFsc2U7fX1l bHNlIGlmKEV4cHIubWF0Y2guUE9TLnRlc3QobWF0Y2hbMF0pfHxFeHByLm1hdGNo LkNISUxELnRlc3QobWF0Y2hbMF0pKXtyZXR1cm4gdHJ1ZTt9CnJldHVybiBtYXRj aDt9LFBPUzpmdW5jdGlvbihtYXRjaCl7bWF0Y2gudW5zaGlmdCh0cnVlKTtyZXR1 cm4gbWF0Y2g7fX0sZmlsdGVyczp7ZW5hYmxlZDpmdW5jdGlvbihlbGVtKXtyZXR1 cm4gZWxlbS5kaXNhYmxlZD09PWZhbHNlJiZlbGVtLnR5cGUhPT0iaGlkZGVuIjt9 LGRpc2FibGVkOmZ1bmN0aW9uKGVsZW0pe3JldHVybiBlbGVtLmRpc2FibGVkPT09 dHJ1ZTt9LGNoZWNrZWQ6ZnVuY3Rpb24oZWxlbSl7cmV0dXJuIGVsZW0uY2hlY2tl ZD09PXRydWU7fSxzZWxlY3RlZDpmdW5jdGlvbihlbGVtKXtlbGVtLnBhcmVudE5v ZGUuc2VsZWN0ZWRJbmRleDtyZXR1cm4gZWxlbS5zZWxlY3RlZD09PXRydWU7fSxw YXJlbnQ6ZnVuY3Rpb24oZWxlbSl7cmV0dXJuISFlbGVtLmZpcnN0Q2hpbGQ7fSxl bXB0eTpmdW5jdGlvbihlbGVtKXtyZXR1cm4hZWxlbS5maXJzdENoaWxkO30saGFz OmZ1bmN0aW9uKGVsZW0saSxtYXRjaCl7cmV0dXJuISFTaXp6bGUobWF0Y2hbM10s ZWxlbSkubGVuZ3RoO30saGVhZGVyOmZ1bmN0aW9uKGVsZW0pe3JldHVybi9oXGQv aS50ZXN0KGVsZW0ubm9kZU5hbWUpO30sdGV4dDpmdW5jdGlvbihlbGVtKXtyZXR1 cm4idGV4dCI9PT1lbGVtLnR5cGU7fSxyYWRpbzpmdW5jdGlvbihlbGVtKXtyZXR1 cm4icmFkaW8iPT09ZWxlbS50eXBlO30sY2hlY2tib3g6ZnVuY3Rpb24oZWxlbSl7 cmV0dXJuImNoZWNrYm94Ij09PWVsZW0udHlwZTt9LGZpbGU6ZnVuY3Rpb24oZWxl bSl7cmV0dXJuImZpbGUiPT09ZWxlbS50eXBlO30scGFzc3dvcmQ6ZnVuY3Rpb24o ZWxlbSl7cmV0dXJuInBhc3N3b3JkIj09PWVsZW0udHlwZTt9LHN1Ym1pdDpmdW5j dGlvbihlbGVtKXtyZXR1cm4ic3VibWl0Ij09PWVsZW0udHlwZTt9LGltYWdlOmZ1 bmN0aW9uKGVsZW0pe3JldHVybiJpbWFnZSI9PT1lbGVtLnR5cGU7fSxyZXNldDpm dW5jdGlvbihlbGVtKXtyZXR1cm4icmVzZXQiPT09ZWxlbS50eXBlO30sYnV0dG9u OmZ1bmN0aW9uKGVsZW0pe3JldHVybiJidXR0b24iPT09ZWxlbS50eXBlfHxlbGVt Lm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk9PT0iQlVUVE9OIjt9LGlucHV0OmZ1bmN0 aW9uKGVsZW0pe3JldHVybi9pbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uL2ku dGVzdChlbGVtLm5vZGVOYW1lKTt9fSxzZXRGaWx0ZXJzOntmaXJzdDpmdW5jdGlv bihlbGVtLGkpe3JldHVybiBpPT09MDt9LGxhc3Q6ZnVuY3Rpb24oZWxlbSxpLG1h dGNoLGFycmF5KXtyZXR1cm4gaT09PWFycmF5Lmxlbmd0aC0xO30sZXZlbjpmdW5j dGlvbihlbGVtLGkpe3JldHVybiBpJTI9PT0wO30sb2RkOmZ1bmN0aW9uKGVsZW0s aSl7cmV0dXJuIGklMj09PTE7fSxsdDpmdW5jdGlvbihlbGVtLGksbWF0Y2gpe3Jl dHVybiBpPG1hdGNoWzNdLTA7fSxndDpmdW5jdGlvbihlbGVtLGksbWF0Y2gpe3Jl dHVybiBpPm1hdGNoWzNdLTA7fSxudGg6ZnVuY3Rpb24oZWxlbSxpLG1hdGNoKXty ZXR1cm4gbWF0Y2hbM10tMD09aTt9LGVxOmZ1bmN0aW9uKGVsZW0saSxtYXRjaCl7 cmV0dXJuIG1hdGNoWzNdLTA9PWk7fX0sZmlsdGVyOntQU0VVRE86ZnVuY3Rpb24o ZWxlbSxtYXRjaCxpLGFycmF5KXt2YXIgbmFtZT1tYXRjaFsxXSxmaWx0ZXI9RXhw ci5maWx0ZXJzW25hbWVdO2lmKGZpbHRlcil7cmV0dXJuIGZpbHRlcihlbGVtLGks bWF0Y2gsYXJyYXkpO31lbHNlIGlmKG5hbWU9PT0iY29udGFpbnMiKXtyZXR1cm4o ZWxlbS50ZXh0Q29udGVudHx8ZWxlbS5pbm5lclRleHR8fCIiKS5pbmRleE9mKG1h dGNoWzNdKT49MDt9ZWxzZSBpZihuYW1lPT09Im5vdCIpe3ZhciBub3Q9bWF0Y2hb M107Zm9yKHZhciBpPTAsbD1ub3QubGVuZ3RoO2k8bDtpKyspe2lmKG5vdFtpXT09 PWVsZW0pe3JldHVybiBmYWxzZTt9fQpyZXR1cm4gdHJ1ZTt9fSxDSElMRDpmdW5j dGlvbihlbGVtLG1hdGNoKXt2YXIgdHlwZT1tYXRjaFsxXSxub2RlPWVsZW07c3dp dGNoKHR5cGUpe2Nhc2Unb25seSc6Y2FzZSdmaXJzdCc6d2hpbGUobm9kZT1ub2Rl LnByZXZpb3VzU2libGluZyl7aWYobm9kZS5ub2RlVHlwZT09PTEpcmV0dXJuIGZh bHNlO30KaWYodHlwZT09J2ZpcnN0JylyZXR1cm4gdHJ1ZTtub2RlPWVsZW07Y2Fz ZSdsYXN0Jzp3aGlsZShub2RlPW5vZGUubmV4dFNpYmxpbmcpe2lmKG5vZGUubm9k ZVR5cGU9PT0xKXJldHVybiBmYWxzZTt9CnJldHVybiB0cnVlO2Nhc2UnbnRoJzp2 YXIgZmlyc3Q9bWF0Y2hbMl0sbGFzdD1tYXRjaFszXTtpZihmaXJzdD09MSYmbGFz dD09MCl7cmV0dXJuIHRydWU7fQp2YXIgZG9uZU5hbWU9bWF0Y2hbMF0scGFyZW50 PWVsZW0ucGFyZW50Tm9kZTtpZihwYXJlbnQmJihwYXJlbnQuc2l6Y2FjaGUhPT1k b25lTmFtZXx8IWVsZW0ubm9kZUluZGV4KSl7dmFyIGNvdW50PTA7Zm9yKG5vZGU9 cGFyZW50LmZpcnN0Q2hpbGQ7bm9kZTtub2RlPW5vZGUubmV4dFNpYmxpbmcpe2lm KG5vZGUubm9kZVR5cGU9PT0xKXtub2RlLm5vZGVJbmRleD0rK2NvdW50O319CnBh cmVudC5zaXpjYWNoZT1kb25lTmFtZTt9CnZhciBkaWZmPWVsZW0ubm9kZUluZGV4 LWxhc3Q7aWYoZmlyc3Q9PTApe3JldHVybiBkaWZmPT0wO31lbHNle3JldHVybihk aWZmJWZpcnN0PT0wJiZkaWZmL2ZpcnN0Pj0wKTt9fX0sSUQ6ZnVuY3Rpb24oZWxl bSxtYXRjaCl7cmV0dXJuIGVsZW0ubm9kZVR5cGU9PT0xJiZlbGVtLmdldEF0dHJp YnV0ZSgiaWQiKT09PW1hdGNoO30sVEFHOmZ1bmN0aW9uKGVsZW0sbWF0Y2gpe3Jl dHVybihtYXRjaD09PSIqIiYmZWxlbS5ub2RlVHlwZT09PTEpfHxlbGVtLm5vZGVO YW1lPT09bWF0Y2g7fSxDTEFTUzpmdW5jdGlvbihlbGVtLG1hdGNoKXtyZXR1cm4o IiAiKyhlbGVtLmNsYXNzTmFtZXx8ZWxlbS5nZXRBdHRyaWJ1dGUoImNsYXNzIikp KyIgIikuaW5kZXhPZihtYXRjaCk+LTE7fSxBVFRSOmZ1bmN0aW9uKGVsZW0sbWF0 Y2gpe3ZhciBuYW1lPW1hdGNoWzFdLHJlc3VsdD1FeHByLmF0dHJIYW5kbGVbbmFt ZV0/RXhwci5hdHRySGFuZGxlW25hbWVdKGVsZW0pOmVsZW1bbmFtZV0hPW51bGw/ ZWxlbVtuYW1lXTplbGVtLmdldEF0dHJpYnV0ZShuYW1lKSx2YWx1ZT1yZXN1bHQr IiIsdHlwZT1tYXRjaFsyXSxjaGVjaz1tYXRjaFs0XTtyZXR1cm4gcmVzdWx0PT1u dWxsP3R5cGU9PT0iIT0iOnR5cGU9PT0iPSI/dmFsdWU9PT1jaGVjazp0eXBlPT09 Iio9Ij92YWx1ZS5pbmRleE9mKGNoZWNrKT49MDp0eXBlPT09In49Ij8oIiAiK3Zh bHVlKyIgIikuaW5kZXhPZihjaGVjayk+PTA6IWNoZWNrP3ZhbHVlJiZyZXN1bHQh PT1mYWxzZTp0eXBlPT09IiE9Ij92YWx1ZSE9Y2hlY2s6dHlwZT09PSJePSI/dmFs dWUuaW5kZXhPZihjaGVjayk9PT0wOnR5cGU9PT0iJD0iP3ZhbHVlLnN1YnN0cih2 YWx1ZS5sZW5ndGgtY2hlY2subGVuZ3RoKT09PWNoZWNrOnR5cGU9PT0ifD0iP3Zh bHVlPT09Y2hlY2t8fHZhbHVlLnN1YnN0cigwLGNoZWNrLmxlbmd0aCsxKT09PWNo ZWNrKyItIjpmYWxzZTt9LFBPUzpmdW5jdGlvbihlbGVtLG1hdGNoLGksYXJyYXkp e3ZhciBuYW1lPW1hdGNoWzJdLGZpbHRlcj1FeHByLnNldEZpbHRlcnNbbmFtZV07 aWYoZmlsdGVyKXtyZXR1cm4gZmlsdGVyKGVsZW0saSxtYXRjaCxhcnJheSk7fX19 fTt2YXIgb3JpZ1BPUz1FeHByLm1hdGNoLlBPUztmb3IodmFyIHR5cGUgaW4gRXhw ci5tYXRjaCl7RXhwci5tYXRjaFt0eXBlXT1SZWdFeHAoRXhwci5tYXRjaFt0eXBl XS5zb3VyY2UrLyg/IVteXFtdKlxdKSg/IVteXChdKlwpKS8uc291cmNlKTt9CnZh ciBtYWtlQXJyYXk9ZnVuY3Rpb24oYXJyYXkscmVzdWx0cyl7YXJyYXk9QXJyYXku cHJvdG90eXBlLnNsaWNlLmNhbGwoYXJyYXkpO2lmKHJlc3VsdHMpe3Jlc3VsdHMu cHVzaC5hcHBseShyZXN1bHRzLGFycmF5KTtyZXR1cm4gcmVzdWx0czt9CnJldHVy biBhcnJheTt9O3RyeXtBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChkb2N1bWVu dC5kb2N1bWVudEVsZW1lbnQuY2hpbGROb2Rlcyk7fWNhdGNoKGUpe21ha2VBcnJh eT1mdW5jdGlvbihhcnJheSxyZXN1bHRzKXt2YXIgcmV0PXJlc3VsdHN8fFtdO2lm KHRvU3RyaW5nLmNhbGwoYXJyYXkpPT09IltvYmplY3QgQXJyYXldIil7QXJyYXku cHJvdG90eXBlLnB1c2guYXBwbHkocmV0LGFycmF5KTt9ZWxzZXtpZih0eXBlb2Yg YXJyYXkubGVuZ3RoPT09Im51bWJlciIpe2Zvcih2YXIgaT0wLGw9YXJyYXkubGVu Z3RoO2k8bDtpKyspe3JldC5wdXNoKGFycmF5W2ldKTt9fWVsc2V7Zm9yKHZhciBp PTA7YXJyYXlbaV07aSsrKXtyZXQucHVzaChhcnJheVtpXSk7fX19CnJldHVybiBy ZXQ7fTt9CnZhciBzb3J0T3JkZXI7aWYoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50 LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKXtzb3J0T3JkZXI9ZnVuY3Rpb24oYSxi KXt2YXIgcmV0PWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikmND8tMTphPT09 Yj8wOjE7aWYocmV0PT09MCl7aGFzRHVwbGljYXRlPXRydWU7fQpyZXR1cm4gcmV0 O307fWVsc2UgaWYoInNvdXJjZUluZGV4ImluIGRvY3VtZW50LmRvY3VtZW50RWxl bWVudCl7c29ydE9yZGVyPWZ1bmN0aW9uKGEsYil7dmFyIHJldD1hLnNvdXJjZUlu ZGV4LWIuc291cmNlSW5kZXg7aWYocmV0PT09MCl7aGFzRHVwbGljYXRlPXRydWU7 fQpyZXR1cm4gcmV0O307fWVsc2UgaWYoZG9jdW1lbnQuY3JlYXRlUmFuZ2Upe3Nv cnRPcmRlcj1mdW5jdGlvbihhLGIpe3ZhciBhUmFuZ2U9YS5vd25lckRvY3VtZW50 LmNyZWF0ZVJhbmdlKCksYlJhbmdlPWIub3duZXJEb2N1bWVudC5jcmVhdGVSYW5n ZSgpO2FSYW5nZS5zZWxlY3ROb2RlKGEpO2FSYW5nZS5jb2xsYXBzZSh0cnVlKTti UmFuZ2Uuc2VsZWN0Tm9kZShiKTtiUmFuZ2UuY29sbGFwc2UodHJ1ZSk7dmFyIHJl dD1hUmFuZ2UuY29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlLlNUQVJUX1RPX0VO RCxiUmFuZ2UpO2lmKHJldD09PTApe2hhc0R1cGxpY2F0ZT10cnVlO30KcmV0dXJu IHJldDt9O30KKGZ1bmN0aW9uKCl7dmFyIGZvcm09ZG9jdW1lbnQuY3JlYXRlRWxl bWVudCgiZm9ybSIpLGlkPSJzY3JpcHQiKyhuZXcgRGF0ZSkuZ2V0VGltZSgpO2Zv cm0uaW5uZXJIVE1MPSI8aW5wdXQgbmFtZT0nIitpZCsiJy8+Ijt2YXIgcm9vdD1k b2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7cm9vdC5pbnNlcnRCZWZvcmUoZm9ybSxy b290LmZpcnN0Q2hpbGQpO2lmKCEhZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQp KXtFeHByLmZpbmQuSUQ9ZnVuY3Rpb24obWF0Y2gsY29udGV4dCxpc1hNTCl7aWYo dHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQhPT0idW5kZWZpbmVkIiYmIWlz WE1MKXt2YXIgbT1jb250ZXh0LmdldEVsZW1lbnRCeUlkKG1hdGNoWzFdKTtyZXR1 cm4gbT9tLmlkPT09bWF0Y2hbMV18fHR5cGVvZiBtLmdldEF0dHJpYnV0ZU5vZGUh PT0idW5kZWZpbmVkIiYmbS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpLm5vZGVWYWx1 ZT09PW1hdGNoWzFdP1ttXTp1bmRlZmluZWQ6W107fX07RXhwci5maWx0ZXIuSUQ9 ZnVuY3Rpb24oZWxlbSxtYXRjaCl7dmFyIG5vZGU9dHlwZW9mIGVsZW0uZ2V0QXR0 cmlidXRlTm9kZSE9PSJ1bmRlZmluZWQiJiZlbGVtLmdldEF0dHJpYnV0ZU5vZGUo ImlkIik7cmV0dXJuIGVsZW0ubm9kZVR5cGU9PT0xJiZub2RlJiZub2RlLm5vZGVW YWx1ZT09PW1hdGNoO307fQpyb290LnJlbW92ZUNoaWxkKGZvcm0pO30pKCk7KGZ1 bmN0aW9uKCl7dmFyIGRpdj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtk aXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgiIikpO2lmKGRp di5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpLmxlbmd0aD4wKXtFeHByLmZpbmQu VEFHPWZ1bmN0aW9uKG1hdGNoLGNvbnRleHQpe3ZhciByZXN1bHRzPWNvbnRleHQu Z2V0RWxlbWVudHNCeVRhZ05hbWUobWF0Y2hbMV0pO2lmKG1hdGNoWzFdPT09Iioi KXt2YXIgdG1wPVtdO2Zvcih2YXIgaT0wO3Jlc3VsdHNbaV07aSsrKXtpZihyZXN1 bHRzW2ldLm5vZGVUeXBlPT09MSl7dG1wLnB1c2gocmVzdWx0c1tpXSk7fX0KcmVz dWx0cz10bXA7fQpyZXR1cm4gcmVzdWx0czt9O30KZGl2LmlubmVySFRNTD0iPGEg aHJlZj0nIyc+PC9hPiI7aWYoZGl2LmZpcnN0Q2hpbGQmJnR5cGVvZiBkaXYuZmly c3RDaGlsZC5nZXRBdHRyaWJ1dGUhPT0idW5kZWZpbmVkIiYmZGl2LmZpcnN0Q2hp bGQuZ2V0QXR0cmlidXRlKCJocmVmIikhPT0iIyIpe0V4cHIuYXR0ckhhbmRsZS5o cmVmPWZ1bmN0aW9uKGVsZW0pe3JldHVybiBlbGVtLmdldEF0dHJpYnV0ZSgiaHJl ZiIsMik7fTt9fSkoKTtpZihkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKShmdW5j dGlvbigpe3ZhciBvbGRTaXp6bGU9U2l6emxlLGRpdj1kb2N1bWVudC5jcmVhdGVF bGVtZW50KCJkaXYiKTtkaXYuaW5uZXJIVE1MPSI8cCBjbGFzcz0nVEVTVCc+PC9w PiI7aWYoZGl2LnF1ZXJ5U2VsZWN0b3JBbGwmJmRpdi5xdWVyeVNlbGVjdG9yQWxs KCIuVEVTVCIpLmxlbmd0aD09PTApe3JldHVybjt9ClNpenpsZT1mdW5jdGlvbihx dWVyeSxjb250ZXh0LGV4dHJhLHNlZWQpe2NvbnRleHQ9Y29udGV4dHx8ZG9jdW1l bnQ7aWYoIXNlZWQmJmNvbnRleHQubm9kZVR5cGU9PT05JiYhaXNYTUwoY29udGV4 dCkpe3RyeXtyZXR1cm4gbWFrZUFycmF5KGNvbnRleHQucXVlcnlTZWxlY3RvckFs bChxdWVyeSksZXh0cmEpO31jYXRjaChlKXt9fQpyZXR1cm4gb2xkU2l6emxlKHF1 ZXJ5LGNvbnRleHQsZXh0cmEsc2VlZCk7fTtTaXp6bGUuZmluZD1vbGRTaXp6bGUu ZmluZDtTaXp6bGUuZmlsdGVyPW9sZFNpenpsZS5maWx0ZXI7U2l6emxlLnNlbGVj dG9ycz1vbGRTaXp6bGUuc2VsZWN0b3JzO1NpenpsZS5tYXRjaGVzPW9sZFNpenps ZS5tYXRjaGVzO30pKCk7aWYoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFt ZSYmZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05h bWUpKGZ1bmN0aW9uKCl7dmFyIGRpdj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJk aXYiKTtkaXYuaW5uZXJIVE1MPSI8ZGl2IGNsYXNzPSd0ZXN0IGUnPjwvZGl2Pjxk aXYgY2xhc3M9J3Rlc3QnPjwvZGl2PiI7aWYoZGl2LmdldEVsZW1lbnRzQnlDbGFz c05hbWUoImUiKS5sZW5ndGg9PT0wKQpyZXR1cm47ZGl2Lmxhc3RDaGlsZC5jbGFz c05hbWU9ImUiO2lmKGRpdi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJlIikubGVu Z3RoPT09MSkKcmV0dXJuO0V4cHIub3JkZXIuc3BsaWNlKDEsMCwiQ0xBU1MiKTtF eHByLmZpbmQuQ0xBU1M9ZnVuY3Rpb24obWF0Y2gsY29udGV4dCxpc1hNTCl7aWYo dHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSE9PSJ1bmRlZmlu ZWQiJiYhaXNYTUwpe3JldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05h bWUobWF0Y2hbMV0pO319O30pKCk7ZnVuY3Rpb24gZGlyTm9kZUNoZWNrKGRpcixj dXIsZG9uZU5hbWUsY2hlY2tTZXQsbm9kZUNoZWNrLGlzWE1MKXt2YXIgc2liRGly PWRpcj09InByZXZpb3VzU2libGluZyImJiFpc1hNTDtmb3IodmFyIGk9MCxsPWNo ZWNrU2V0Lmxlbmd0aDtpPGw7aSsrKXt2YXIgZWxlbT1jaGVja1NldFtpXTtpZihl bGVtKXtpZihzaWJEaXImJmVsZW0ubm9kZVR5cGU9PT0xKXtlbGVtLnNpemNhY2hl PWRvbmVOYW1lO2VsZW0uc2l6c2V0PWk7fQplbGVtPWVsZW1bZGlyXTt2YXIgbWF0 Y2g9ZmFsc2U7d2hpbGUoZWxlbSl7aWYoZWxlbS5zaXpjYWNoZT09PWRvbmVOYW1l KXttYXRjaD1jaGVja1NldFtlbGVtLnNpenNldF07YnJlYWs7fQppZihlbGVtLm5v ZGVUeXBlPT09MSYmIWlzWE1MKXtlbGVtLnNpemNhY2hlPWRvbmVOYW1lO2VsZW0u c2l6c2V0PWk7fQppZihlbGVtLm5vZGVOYW1lPT09Y3VyKXttYXRjaD1lbGVtO2Jy ZWFrO30KZWxlbT1lbGVtW2Rpcl07fQpjaGVja1NldFtpXT1tYXRjaDt9fX0KZnVu Y3Rpb24gZGlyQ2hlY2soZGlyLGN1cixkb25lTmFtZSxjaGVja1NldCxub2RlQ2hl Y2ssaXNYTUwpe3ZhciBzaWJEaXI9ZGlyPT0icHJldmlvdXNTaWJsaW5nIiYmIWlz WE1MO2Zvcih2YXIgaT0wLGw9Y2hlY2tTZXQubGVuZ3RoO2k8bDtpKyspe3ZhciBl bGVtPWNoZWNrU2V0W2ldO2lmKGVsZW0pe2lmKHNpYkRpciYmZWxlbS5ub2RlVHlw ZT09PTEpe2VsZW0uc2l6Y2FjaGU9ZG9uZU5hbWU7ZWxlbS5zaXpzZXQ9aTt9CmVs ZW09ZWxlbVtkaXJdO3ZhciBtYXRjaD1mYWxzZTt3aGlsZShlbGVtKXtpZihlbGVt LnNpemNhY2hlPT09ZG9uZU5hbWUpe21hdGNoPWNoZWNrU2V0W2VsZW0uc2l6c2V0 XTticmVhazt9CmlmKGVsZW0ubm9kZVR5cGU9PT0xKXtpZighaXNYTUwpe2VsZW0u c2l6Y2FjaGU9ZG9uZU5hbWU7ZWxlbS5zaXpzZXQ9aTt9CmlmKHR5cGVvZiBjdXIh PT0ic3RyaW5nIil7aWYoZWxlbT09PWN1cil7bWF0Y2g9dHJ1ZTticmVhazt9fWVs c2UgaWYoU2l6emxlLmZpbHRlcihjdXIsW2VsZW1dKS5sZW5ndGg+MCl7bWF0Y2g9 ZWxlbTticmVhazt9fQplbGVtPWVsZW1bZGlyXTt9CmNoZWNrU2V0W2ldPW1hdGNo O319fQp2YXIgY29udGFpbnM9ZG9jdW1lbnQuY29tcGFyZURvY3VtZW50UG9zaXRp b24/ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlv bihiKSYxNjt9OmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEhPT1iJiYoYS5jb250YWlu cz9hLmNvbnRhaW5zKGIpOnRydWUpO307dmFyIGlzWE1MPWZ1bmN0aW9uKGVsZW0p e3JldHVybiBlbGVtLm5vZGVUeXBlPT09OSYmZWxlbS5kb2N1bWVudEVsZW1lbnQu bm9kZU5hbWUhPT0iSFRNTCJ8fCEhZWxlbS5vd25lckRvY3VtZW50JiZpc1hNTChl bGVtLm93bmVyRG9jdW1lbnQpO307dmFyIHBvc1Byb2Nlc3M9ZnVuY3Rpb24oc2Vs ZWN0b3IsY29udGV4dCl7dmFyIHRtcFNldD1bXSxsYXRlcj0iIixtYXRjaCxyb290 PWNvbnRleHQubm9kZVR5cGU/W2NvbnRleHRdOmNvbnRleHQ7d2hpbGUoKG1hdGNo PUV4cHIubWF0Y2guUFNFVURPLmV4ZWMoc2VsZWN0b3IpKSl7bGF0ZXIrPW1hdGNo WzBdO3NlbGVjdG9yPXNlbGVjdG9yLnJlcGxhY2UoRXhwci5tYXRjaC5QU0VVRE8s IiIpO30Kc2VsZWN0b3I9RXhwci5yZWxhdGl2ZVtzZWxlY3Rvcl0/c2VsZWN0b3Ir IioiOnNlbGVjdG9yO2Zvcih2YXIgaT0wLGw9cm9vdC5sZW5ndGg7aTxsO2krKyl7 U2l6emxlKHNlbGVjdG9yLHJvb3RbaV0sdG1wU2V0KTt9CnJldHVybiBTaXp6bGUu ZmlsdGVyKGxhdGVyLHRtcFNldCk7fTtqUXVlcnkuZmluZD1TaXp6bGU7alF1ZXJ5 LmZpbHRlcj1TaXp6bGUuZmlsdGVyO2pRdWVyeS5leHByPVNpenpsZS5zZWxlY3Rv cnM7alF1ZXJ5LmV4cHJbIjoiXT1qUXVlcnkuZXhwci5maWx0ZXJzO1NpenpsZS5z ZWxlY3RvcnMuZmlsdGVycy5oaWRkZW49ZnVuY3Rpb24oZWxlbSl7cmV0dXJuIGVs ZW0ub2Zmc2V0V2lkdGg9PT0wfHxlbGVtLm9mZnNldEhlaWdodD09PTA7fTtTaXp6 bGUuc2VsZWN0b3JzLmZpbHRlcnMudmlzaWJsZT1mdW5jdGlvbihlbGVtKXtyZXR1 cm4gZWxlbS5vZmZzZXRXaWR0aD4wfHxlbGVtLm9mZnNldEhlaWdodD4wO307U2l6 emxlLnNlbGVjdG9ycy5maWx0ZXJzLmFuaW1hdGVkPWZ1bmN0aW9uKGVsZW0pe3Jl dHVybiBqUXVlcnkuZ3JlcChqUXVlcnkudGltZXJzLGZ1bmN0aW9uKGZuKXtyZXR1 cm4gZWxlbT09PWZuLmVsZW07fSkubGVuZ3RoO307alF1ZXJ5Lm11bHRpRmlsdGVy PWZ1bmN0aW9uKGV4cHIsZWxlbXMsbm90KXtpZihub3Qpe2V4cHI9Ijpub3QoIitl eHByKyIpIjt9CnJldHVybiBTaXp6bGUubWF0Y2hlcyhleHByLGVsZW1zKTt9O2pR dWVyeS5kaXI9ZnVuY3Rpb24oZWxlbSxkaXIpe3ZhciBtYXRjaGVkPVtdLGN1cj1l bGVtW2Rpcl07d2hpbGUoY3VyJiZjdXIhPWRvY3VtZW50KXtpZihjdXIubm9kZVR5 cGU9PTEpCm1hdGNoZWQucHVzaChjdXIpO2N1cj1jdXJbZGlyXTt9CnJldHVybiBt YXRjaGVkO307alF1ZXJ5Lm50aD1mdW5jdGlvbihjdXIscmVzdWx0LGRpcixlbGVt KXtyZXN1bHQ9cmVzdWx0fHwxO3ZhciBudW09MDtmb3IoO2N1cjtjdXI9Y3VyW2Rp cl0pCmlmKGN1ci5ub2RlVHlwZT09MSYmKytudW09PXJlc3VsdCkKYnJlYWs7cmV0 dXJuIGN1cjt9O2pRdWVyeS5zaWJsaW5nPWZ1bmN0aW9uKG4sZWxlbSl7dmFyIHI9 W107Zm9yKDtuO249bi5uZXh0U2libGluZyl7aWYobi5ub2RlVHlwZT09MSYmbiE9 ZWxlbSkKci5wdXNoKG4pO30KcmV0dXJuIHI7fTtyZXR1cm47d2luZG93LlNpenps ZT1TaXp6bGU7fSkoKTtqUXVlcnkuZXZlbnQ9e2FkZDpmdW5jdGlvbihlbGVtLHR5 cGVzLGhhbmRsZXIsZGF0YSl7aWYoZWxlbS5ub2RlVHlwZT09M3x8ZWxlbS5ub2Rl VHlwZT09OCkKcmV0dXJuO2lmKGVsZW0uc2V0SW50ZXJ2YWwmJmVsZW0hPXdpbmRv dykKZWxlbT13aW5kb3c7aWYoIWhhbmRsZXIuZ3VpZCkKaGFuZGxlci5ndWlkPXRo aXMuZ3VpZCsrO2lmKGRhdGEhPT11bmRlZmluZWQpe3ZhciBmbj1oYW5kbGVyO2hh bmRsZXI9dGhpcy5wcm94eShmbik7aGFuZGxlci5kYXRhPWRhdGE7fQp2YXIgZXZl bnRzPWpRdWVyeS5kYXRhKGVsZW0sImV2ZW50cyIpfHxqUXVlcnkuZGF0YShlbGVt LCJldmVudHMiLHt9KSxoYW5kbGU9alF1ZXJ5LmRhdGEoZWxlbSwiaGFuZGxlIil8 fGpRdWVyeS5kYXRhKGVsZW0sImhhbmRsZSIsZnVuY3Rpb24oKXtyZXR1cm4gdHlw ZW9mIGpRdWVyeSE9PSJ1bmRlZmluZWQiJiYhalF1ZXJ5LmV2ZW50LnRyaWdnZXJl ZD9qUXVlcnkuZXZlbnQuaGFuZGxlLmFwcGx5KGFyZ3VtZW50cy5jYWxsZWUuZWxl bSxhcmd1bWVudHMpOnVuZGVmaW5lZDt9KTtoYW5kbGUuZWxlbT1lbGVtO2pRdWVy eS5lYWNoKHR5cGVzLnNwbGl0KC9ccysvKSxmdW5jdGlvbihpbmRleCx0eXBlKXt2 YXIgbmFtZXNwYWNlcz10eXBlLnNwbGl0KCIuIik7dHlwZT1uYW1lc3BhY2VzLnNo aWZ0KCk7aGFuZGxlci50eXBlPW5hbWVzcGFjZXMuc2xpY2UoKS5zb3J0KCkuam9p bigiLiIpO3ZhciBoYW5kbGVycz1ldmVudHNbdHlwZV07aWYoalF1ZXJ5LmV2ZW50 LnNwZWNpYWxBbGxbdHlwZV0pCmpRdWVyeS5ldmVudC5zcGVjaWFsQWxsW3R5cGVd LnNldHVwLmNhbGwoZWxlbSxkYXRhLG5hbWVzcGFjZXMpO2lmKCFoYW5kbGVycyl7 aGFuZGxlcnM9ZXZlbnRzW3R5cGVdPXt9O2lmKCFqUXVlcnkuZXZlbnQuc3BlY2lh bFt0eXBlXXx8alF1ZXJ5LmV2ZW50LnNwZWNpYWxbdHlwZV0uc2V0dXAuY2FsbChl bGVtLGRhdGEsbmFtZXNwYWNlcyk9PT1mYWxzZSl7aWYoZWxlbS5hZGRFdmVudExp c3RlbmVyKQplbGVtLmFkZEV2ZW50TGlzdGVuZXIodHlwZSxoYW5kbGUsZmFsc2Up O2Vsc2UgaWYoZWxlbS5hdHRhY2hFdmVudCkKZWxlbS5hdHRhY2hFdmVudCgib24i K3R5cGUsaGFuZGxlKTt9fQpoYW5kbGVyc1toYW5kbGVyLmd1aWRdPWhhbmRsZXI7 alF1ZXJ5LmV2ZW50Lmdsb2JhbFt0eXBlXT10cnVlO30pO2VsZW09bnVsbDt9LGd1 aWQ6MSxnbG9iYWw6e30scmVtb3ZlOmZ1bmN0aW9uKGVsZW0sdHlwZXMsaGFuZGxl cil7aWYoZWxlbS5ub2RlVHlwZT09M3x8ZWxlbS5ub2RlVHlwZT09OCkKcmV0dXJu O3ZhciBldmVudHM9alF1ZXJ5LmRhdGEoZWxlbSwiZXZlbnRzIikscmV0LGluZGV4 O2lmKGV2ZW50cyl7aWYodHlwZXM9PT11bmRlZmluZWR8fCh0eXBlb2YgdHlwZXM9 PT0ic3RyaW5nIiYmdHlwZXMuY2hhckF0KDApPT0iLiIpKQpmb3IodmFyIHR5cGUg aW4gZXZlbnRzKQp0aGlzLnJlbW92ZShlbGVtLHR5cGUrKHR5cGVzfHwiIikpO2Vs c2V7aWYodHlwZXMudHlwZSl7aGFuZGxlcj10eXBlcy5oYW5kbGVyO3R5cGVzPXR5 cGVzLnR5cGU7fQpqUXVlcnkuZWFjaCh0eXBlcy5zcGxpdCgvXHMrLyksZnVuY3Rp b24oaW5kZXgsdHlwZSl7dmFyIG5hbWVzcGFjZXM9dHlwZS5zcGxpdCgiLiIpO3R5 cGU9bmFtZXNwYWNlcy5zaGlmdCgpO3ZhciBuYW1lc3BhY2U9UmVnRXhwKCIoXnxc XC4pIituYW1lc3BhY2VzLnNsaWNlKCkuc29ydCgpLmpvaW4oIi4qXFwuIikrIihc XC58JCkiKTtpZihldmVudHNbdHlwZV0pe2lmKGhhbmRsZXIpCmRlbGV0ZSBldmVu dHNbdHlwZV1baGFuZGxlci5ndWlkXTtlbHNlCmZvcih2YXIgaGFuZGxlIGluIGV2 ZW50c1t0eXBlXSkKaWYobmFtZXNwYWNlLnRlc3QoZXZlbnRzW3R5cGVdW2hhbmRs ZV0udHlwZSkpCmRlbGV0ZSBldmVudHNbdHlwZV1baGFuZGxlXTtpZihqUXVlcnku ZXZlbnQuc3BlY2lhbEFsbFt0eXBlXSkKalF1ZXJ5LmV2ZW50LnNwZWNpYWxBbGxb dHlwZV0udGVhcmRvd24uY2FsbChlbGVtLG5hbWVzcGFjZXMpO2ZvcihyZXQgaW4g ZXZlbnRzW3R5cGVdKWJyZWFrO2lmKCFyZXQpe2lmKCFqUXVlcnkuZXZlbnQuc3Bl Y2lhbFt0eXBlXXx8alF1ZXJ5LmV2ZW50LnNwZWNpYWxbdHlwZV0udGVhcmRvd24u Y2FsbChlbGVtLG5hbWVzcGFjZXMpPT09ZmFsc2Upe2lmKGVsZW0ucmVtb3ZlRXZl bnRMaXN0ZW5lcikKZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsalF1ZXJ5 LmRhdGEoZWxlbSwiaGFuZGxlIiksZmFsc2UpO2Vsc2UgaWYoZWxlbS5kZXRhY2hF dmVudCkKZWxlbS5kZXRhY2hFdmVudCgib24iK3R5cGUsalF1ZXJ5LmRhdGEoZWxl bSwiaGFuZGxlIikpO30KcmV0PW51bGw7ZGVsZXRlIGV2ZW50c1t0eXBlXTt9fX0p O30KZm9yKHJldCBpbiBldmVudHMpYnJlYWs7aWYoIXJldCl7dmFyIGhhbmRsZT1q UXVlcnkuZGF0YShlbGVtLCJoYW5kbGUiKTtpZihoYW5kbGUpaGFuZGxlLmVsZW09 bnVsbDtqUXVlcnkucmVtb3ZlRGF0YShlbGVtLCJldmVudHMiKTtqUXVlcnkucmVt b3ZlRGF0YShlbGVtLCJoYW5kbGUiKTt9fX0sdHJpZ2dlcjpmdW5jdGlvbihldmVu dCxkYXRhLGVsZW0sYnViYmxpbmcpe3ZhciB0eXBlPWV2ZW50LnR5cGV8fGV2ZW50 O2lmKCFidWJibGluZyl7ZXZlbnQ9dHlwZW9mIGV2ZW50PT09Im9iamVjdCI/ZXZl bnRbZXhwYW5kb10/ZXZlbnQ6alF1ZXJ5LmV4dGVuZChqUXVlcnkuRXZlbnQodHlw ZSksZXZlbnQpOmpRdWVyeS5FdmVudCh0eXBlKTtpZih0eXBlLmluZGV4T2YoIiEi KT49MCl7ZXZlbnQudHlwZT10eXBlPXR5cGUuc2xpY2UoMCwtMSk7ZXZlbnQuZXhj bHVzaXZlPXRydWU7fQppZighZWxlbSl7ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7 aWYodGhpcy5nbG9iYWxbdHlwZV0pCmpRdWVyeS5lYWNoKGpRdWVyeS5jYWNoZSxm dW5jdGlvbigpe2lmKHRoaXMuZXZlbnRzJiZ0aGlzLmV2ZW50c1t0eXBlXSkKalF1 ZXJ5LmV2ZW50LnRyaWdnZXIoZXZlbnQsZGF0YSx0aGlzLmhhbmRsZS5lbGVtKTt9 KTt9CmlmKCFlbGVtfHxlbGVtLm5vZGVUeXBlPT0zfHxlbGVtLm5vZGVUeXBlPT04 KQpyZXR1cm4gdW5kZWZpbmVkO2V2ZW50LnJlc3VsdD11bmRlZmluZWQ7ZXZlbnQu dGFyZ2V0PWVsZW07ZGF0YT1qUXVlcnkubWFrZUFycmF5KGRhdGEpO2RhdGEudW5z aGlmdChldmVudCk7fQpldmVudC5jdXJyZW50VGFyZ2V0PWVsZW07dmFyIGhhbmRs ZT1qUXVlcnkuZGF0YShlbGVtLCJoYW5kbGUiKTtpZihoYW5kbGUpCmhhbmRsZS5h cHBseShlbGVtLGRhdGEpO2lmKCghZWxlbVt0eXBlXXx8KGpRdWVyeS5ub2RlTmFt ZShlbGVtLCdhJykmJnR5cGU9PSJjbGljayIpKSYmZWxlbVsib24iK3R5cGVdJiZl bGVtWyJvbiIrdHlwZV0uYXBwbHkoZWxlbSxkYXRhKT09PWZhbHNlKQpldmVudC5y ZXN1bHQ9ZmFsc2U7aWYoIWJ1YmJsaW5nJiZlbGVtW3R5cGVdJiYhZXZlbnQuaXNE ZWZhdWx0UHJldmVudGVkKCkmJiEoalF1ZXJ5Lm5vZGVOYW1lKGVsZW0sJ2EnKSYm dHlwZT09ImNsaWNrIikpe3RoaXMudHJpZ2dlcmVkPXRydWU7dHJ5e2VsZW1bdHlw ZV0oKTt9Y2F0Y2goZSl7fX0KdGhpcy50cmlnZ2VyZWQ9ZmFsc2U7aWYoIWV2ZW50 LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpe3ZhciBwYXJlbnQ9ZWxlbS5wYXJlbnRO b2RlfHxlbGVtLm93bmVyRG9jdW1lbnQ7aWYocGFyZW50KQpqUXVlcnkuZXZlbnQu dHJpZ2dlcihldmVudCxkYXRhLHBhcmVudCx0cnVlKTt9fSxoYW5kbGU6ZnVuY3Rp b24oZXZlbnQpe3ZhciBhbGwsaGFuZGxlcnM7ZXZlbnQ9YXJndW1lbnRzWzBdPWpR dWVyeS5ldmVudC5maXgoZXZlbnR8fHdpbmRvdy5ldmVudCk7ZXZlbnQuY3VycmVu dFRhcmdldD10aGlzO3ZhciBuYW1lc3BhY2VzPWV2ZW50LnR5cGUuc3BsaXQoIi4i KTtldmVudC50eXBlPW5hbWVzcGFjZXMuc2hpZnQoKTthbGw9IW5hbWVzcGFjZXMu bGVuZ3RoJiYhZXZlbnQuZXhjbHVzaXZlO3ZhciBuYW1lc3BhY2U9UmVnRXhwKCIo XnxcXC4pIituYW1lc3BhY2VzLnNsaWNlKCkuc29ydCgpLmpvaW4oIi4qXFwuIikr IihcXC58JCkiKTtoYW5kbGVycz0oalF1ZXJ5LmRhdGEodGhpcywiZXZlbnRzIil8 fHt9KVtldmVudC50eXBlXTtmb3IodmFyIGogaW4gaGFuZGxlcnMpe3ZhciBoYW5k bGVyPWhhbmRsZXJzW2pdO2lmKGFsbHx8bmFtZXNwYWNlLnRlc3QoaGFuZGxlci50 eXBlKSl7ZXZlbnQuaGFuZGxlcj1oYW5kbGVyO2V2ZW50LmRhdGE9aGFuZGxlci5k YXRhO3ZhciByZXQ9aGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYocmV0 IT09dW5kZWZpbmVkKXtldmVudC5yZXN1bHQ9cmV0O2lmKHJldD09PWZhbHNlKXtl dmVudC5wcmV2ZW50RGVmYXVsdCgpO2V2ZW50LnN0b3BQcm9wYWdhdGlvbigpO319 CmlmKGV2ZW50LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkpCmJyZWFr O319fSxwcm9wczoiYWx0S2V5IGF0dHJDaGFuZ2UgYXR0ck5hbWUgYnViYmxlcyBi dXR0b24gY2FuY2VsYWJsZSBjaGFyQ29kZSBjbGllbnRYIGNsaWVudFkgY3RybEtl eSBjdXJyZW50VGFyZ2V0IGRhdGEgZGV0YWlsIGV2ZW50UGhhc2UgZnJvbUVsZW1l bnQgaGFuZGxlciBrZXlDb2RlIG1ldGFLZXkgbmV3VmFsdWUgb3JpZ2luYWxUYXJn ZXQgcGFnZVggcGFnZVkgcHJldlZhbHVlIHJlbGF0ZWROb2RlIHJlbGF0ZWRUYXJn ZXQgc2NyZWVuWCBzY3JlZW5ZIHNoaWZ0S2V5IHNyY0VsZW1lbnQgdGFyZ2V0IHRv RWxlbWVudCB2aWV3IHdoZWVsRGVsdGEgd2hpY2giLnNwbGl0KCIgIiksZml4OmZ1 bmN0aW9uKGV2ZW50KXtpZihldmVudFtleHBhbmRvXSkKcmV0dXJuIGV2ZW50O3Zh ciBvcmlnaW5hbEV2ZW50PWV2ZW50O2V2ZW50PWpRdWVyeS5FdmVudChvcmlnaW5h bEV2ZW50KTtmb3IodmFyIGk9dGhpcy5wcm9wcy5sZW5ndGgscHJvcDtpOyl7cHJv cD10aGlzLnByb3BzWy0taV07ZXZlbnRbcHJvcF09b3JpZ2luYWxFdmVudFtwcm9w XTt9CmlmKCFldmVudC50YXJnZXQpCmV2ZW50LnRhcmdldD1ldmVudC5zcmNFbGVt ZW50fHxkb2N1bWVudDtpZihldmVudC50YXJnZXQubm9kZVR5cGU9PTMpCmV2ZW50 LnRhcmdldD1ldmVudC50YXJnZXQucGFyZW50Tm9kZTtpZighZXZlbnQucmVsYXRl ZFRhcmdldCYmZXZlbnQuZnJvbUVsZW1lbnQpCmV2ZW50LnJlbGF0ZWRUYXJnZXQ9 ZXZlbnQuZnJvbUVsZW1lbnQ9PWV2ZW50LnRhcmdldD9ldmVudC50b0VsZW1lbnQ6 ZXZlbnQuZnJvbUVsZW1lbnQ7aWYoZXZlbnQucGFnZVg9PW51bGwmJmV2ZW50LmNs aWVudFghPW51bGwpe3ZhciBkb2M9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGJv ZHk9ZG9jdW1lbnQuYm9keTtldmVudC5wYWdlWD1ldmVudC5jbGllbnRYKyhkb2Mm JmRvYy5zY3JvbGxMZWZ0fHxib2R5JiZib2R5LnNjcm9sbExlZnR8fDApLShkb2Mu Y2xpZW50TGVmdHx8MCk7ZXZlbnQucGFnZVk9ZXZlbnQuY2xpZW50WSsoZG9jJiZk b2Muc2Nyb2xsVG9wfHxib2R5JiZib2R5LnNjcm9sbFRvcHx8MCktKGRvYy5jbGll bnRUb3B8fDApO30KaWYoIWV2ZW50LndoaWNoJiYoKGV2ZW50LmNoYXJDb2RlfHxl dmVudC5jaGFyQ29kZT09PTApP2V2ZW50LmNoYXJDb2RlOmV2ZW50LmtleUNvZGUp KQpldmVudC53aGljaD1ldmVudC5jaGFyQ29kZXx8ZXZlbnQua2V5Q29kZTtpZigh ZXZlbnQubWV0YUtleSYmZXZlbnQuY3RybEtleSkKZXZlbnQubWV0YUtleT1ldmVu dC5jdHJsS2V5O2lmKCFldmVudC53aGljaCYmZXZlbnQuYnV0dG9uKQpldmVudC53 aGljaD0oZXZlbnQuYnV0dG9uJjE/MTooZXZlbnQuYnV0dG9uJjI/MzooZXZlbnQu YnV0dG9uJjQ/MjowKSkpO3JldHVybiBldmVudDt9LHByb3h5OmZ1bmN0aW9uKGZu LHByb3h5KXtwcm94eT1wcm94eXx8ZnVuY3Rpb24oKXtyZXR1cm4gZm4uYXBwbHko dGhpcyxhcmd1bWVudHMpO307cHJveHkuZ3VpZD1mbi5ndWlkPWZuLmd1aWR8fHBy b3h5Lmd1aWR8fHRoaXMuZ3VpZCsrO3JldHVybiBwcm94eTt9LHNwZWNpYWw6e3Jl YWR5OntzZXR1cDpiaW5kUmVhZHksdGVhcmRvd246ZnVuY3Rpb24oKXt9fX0sc3Bl Y2lhbEFsbDp7bGl2ZTp7c2V0dXA6ZnVuY3Rpb24oc2VsZWN0b3IsbmFtZXNwYWNl cyl7alF1ZXJ5LmV2ZW50LmFkZCh0aGlzLG5hbWVzcGFjZXNbMF0sbGl2ZUhhbmRs ZXIpO30sdGVhcmRvd246ZnVuY3Rpb24obmFtZXNwYWNlcyl7aWYobmFtZXNwYWNl cy5sZW5ndGgpe3ZhciByZW1vdmU9MCxuYW1lPVJlZ0V4cCgiKF58XFwuKSIrbmFt ZXNwYWNlc1swXSsiKFxcLnwkKSIpO2pRdWVyeS5lYWNoKChqUXVlcnkuZGF0YSh0 aGlzLCJldmVudHMiKS5saXZlfHx7fSksZnVuY3Rpb24oKXtpZihuYW1lLnRlc3Qo dGhpcy50eXBlKSkKcmVtb3ZlKys7fSk7aWYocmVtb3ZlPDEpCmpRdWVyeS5ldmVu dC5yZW1vdmUodGhpcyxuYW1lc3BhY2VzWzBdLGxpdmVIYW5kbGVyKTt9fX19fTtq UXVlcnkuRXZlbnQ9ZnVuY3Rpb24oc3JjKXtpZighdGhpcy5wcmV2ZW50RGVmYXVs dCkKcmV0dXJuIG5ldyBqUXVlcnkuRXZlbnQoc3JjKTtpZihzcmMmJnNyYy50eXBl KXt0aGlzLm9yaWdpbmFsRXZlbnQ9c3JjO3RoaXMudHlwZT1zcmMudHlwZTt9ZWxz ZQp0aGlzLnR5cGU9c3JjO3RoaXMudGltZVN0YW1wPW5vdygpO3RoaXNbZXhwYW5k b109dHJ1ZTt9O2Z1bmN0aW9uIHJldHVybkZhbHNlKCl7cmV0dXJuIGZhbHNlO30K ZnVuY3Rpb24gcmV0dXJuVHJ1ZSgpe3JldHVybiB0cnVlO30KalF1ZXJ5LkV2ZW50 LnByb3RvdHlwZT17cHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt0aGlzLmlzRGVm YXVsdFByZXZlbnRlZD1yZXR1cm5UcnVlO3ZhciBlPXRoaXMub3JpZ2luYWxFdmVu dDtpZighZSkKcmV0dXJuO2lmKGUucHJldmVudERlZmF1bHQpCmUucHJldmVudERl ZmF1bHQoKTtlLnJldHVyblZhbHVlPWZhbHNlO30sc3RvcFByb3BhZ2F0aW9uOmZ1 bmN0aW9uKCl7dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1yZXR1cm5UcnVlO3Zh ciBlPXRoaXMub3JpZ2luYWxFdmVudDtpZighZSkKcmV0dXJuO2lmKGUuc3RvcFBy b3BhZ2F0aW9uKQplLnN0b3BQcm9wYWdhdGlvbigpO2UuY2FuY2VsQnViYmxlPXRy dWU7fSxzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt0aGlzLmlz SW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkPXJldHVyblRydWU7dGhpcy5zdG9w UHJvcGFnYXRpb24oKTt9LGlzRGVmYXVsdFByZXZlbnRlZDpyZXR1cm5GYWxzZSxp c1Byb3BhZ2F0aW9uU3RvcHBlZDpyZXR1cm5GYWxzZSxpc0ltbWVkaWF0ZVByb3Bh Z2F0aW9uU3RvcHBlZDpyZXR1cm5GYWxzZX07dmFyIHdpdGhpbkVsZW1lbnQ9ZnVu Y3Rpb24oZXZlbnQpe3ZhciBwYXJlbnQ9ZXZlbnQucmVsYXRlZFRhcmdldDt3aGls ZShwYXJlbnQmJnBhcmVudCE9dGhpcykKdHJ5e3BhcmVudD1wYXJlbnQucGFyZW50 Tm9kZTt9CmNhdGNoKGUpe3BhcmVudD10aGlzO30KaWYocGFyZW50IT10aGlzKXtl dmVudC50eXBlPWV2ZW50LmRhdGE7alF1ZXJ5LmV2ZW50LmhhbmRsZS5hcHBseSh0 aGlzLGFyZ3VtZW50cyk7fX07alF1ZXJ5LmVhY2goe21vdXNlb3ZlcjonbW91c2Vl bnRlcicsbW91c2VvdXQ6J21vdXNlbGVhdmUnfSxmdW5jdGlvbihvcmlnLGZpeCl7 alF1ZXJ5LmV2ZW50LnNwZWNpYWxbZml4XT17c2V0dXA6ZnVuY3Rpb24oKXtqUXVl cnkuZXZlbnQuYWRkKHRoaXMsb3JpZyx3aXRoaW5FbGVtZW50LGZpeCk7fSx0ZWFy ZG93bjpmdW5jdGlvbigpe2pRdWVyeS5ldmVudC5yZW1vdmUodGhpcyxvcmlnLHdp dGhpbkVsZW1lbnQpO319O30pO2pRdWVyeS5mbi5leHRlbmQoe2JpbmQ6ZnVuY3Rp b24odHlwZSxkYXRhLGZuKXtyZXR1cm4gdHlwZT09InVubG9hZCI/dGhpcy5vbmUo dHlwZSxkYXRhLGZuKTp0aGlzLmVhY2goZnVuY3Rpb24oKXtqUXVlcnkuZXZlbnQu YWRkKHRoaXMsdHlwZSxmbnx8ZGF0YSxmbiYmZGF0YSk7fSk7fSxvbmU6ZnVuY3Rp b24odHlwZSxkYXRhLGZuKXt2YXIgb25lPWpRdWVyeS5ldmVudC5wcm94eShmbnx8 ZGF0YSxmdW5jdGlvbihldmVudCl7alF1ZXJ5KHRoaXMpLnVuYmluZChldmVudCxv bmUpO3JldHVybihmbnx8ZGF0YSkuYXBwbHkodGhpcyxhcmd1bWVudHMpO30pO3Jl dHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtqUXVlcnkuZXZlbnQuYWRkKHRoaXMs dHlwZSxvbmUsZm4mJmRhdGEpO30pO30sdW5iaW5kOmZ1bmN0aW9uKHR5cGUsZm4p e3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtqUXVlcnkuZXZlbnQucmVtb3Zl KHRoaXMsdHlwZSxmbik7fSk7fSx0cmlnZ2VyOmZ1bmN0aW9uKHR5cGUsZGF0YSl7 cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2pRdWVyeS5ldmVudC50cmlnZ2Vy KHR5cGUsZGF0YSx0aGlzKTt9KTt9LHRyaWdnZXJIYW5kbGVyOmZ1bmN0aW9uKHR5 cGUsZGF0YSl7aWYodGhpc1swXSl7dmFyIGV2ZW50PWpRdWVyeS5FdmVudCh0eXBl KTtldmVudC5wcmV2ZW50RGVmYXVsdCgpO2V2ZW50LnN0b3BQcm9wYWdhdGlvbigp O2pRdWVyeS5ldmVudC50cmlnZ2VyKGV2ZW50LGRhdGEsdGhpc1swXSk7cmV0dXJu IGV2ZW50LnJlc3VsdDt9fSx0b2dnbGU6ZnVuY3Rpb24oZm4pe3ZhciBhcmdzPWFy Z3VtZW50cyxpPTE7d2hpbGUoaTxhcmdzLmxlbmd0aCkKalF1ZXJ5LmV2ZW50LnBy b3h5KGZuLGFyZ3NbaSsrXSk7cmV0dXJuIHRoaXMuY2xpY2soalF1ZXJ5LmV2ZW50 LnByb3h5KGZuLGZ1bmN0aW9uKGV2ZW50KXt0aGlzLmxhc3RUb2dnbGU9KHRoaXMu bGFzdFRvZ2dsZXx8MCklaTtldmVudC5wcmV2ZW50RGVmYXVsdCgpO3JldHVybiBh cmdzW3RoaXMubGFzdFRvZ2dsZSsrXS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fGZh bHNlO30pKTt9LGhvdmVyOmZ1bmN0aW9uKGZuT3Zlcixmbk91dCl7cmV0dXJuIHRo aXMubW91c2VlbnRlcihmbk92ZXIpLm1vdXNlbGVhdmUoZm5PdXQpO30scmVhZHk6 ZnVuY3Rpb24oZm4pe2JpbmRSZWFkeSgpO2lmKGpRdWVyeS5pc1JlYWR5KQpmbi5j YWxsKGRvY3VtZW50LGpRdWVyeSk7ZWxzZQpqUXVlcnkucmVhZHlMaXN0LnB1c2go Zm4pO3JldHVybiB0aGlzO30sbGl2ZTpmdW5jdGlvbih0eXBlLGZuKXt2YXIgcHJv eHk9alF1ZXJ5LmV2ZW50LnByb3h5KGZuKTtwcm94eS5ndWlkKz10aGlzLnNlbGVj dG9yK3R5cGU7alF1ZXJ5KGRvY3VtZW50KS5iaW5kKGxpdmVDb252ZXJ0KHR5cGUs dGhpcy5zZWxlY3RvciksdGhpcy5zZWxlY3Rvcixwcm94eSk7cmV0dXJuIHRoaXM7 fSxkaWU6ZnVuY3Rpb24odHlwZSxmbil7alF1ZXJ5KGRvY3VtZW50KS51bmJpbmQo bGl2ZUNvbnZlcnQodHlwZSx0aGlzLnNlbGVjdG9yKSxmbj97Z3VpZDpmbi5ndWlk K3RoaXMuc2VsZWN0b3IrdHlwZX06bnVsbCk7cmV0dXJuIHRoaXM7fX0pO2Z1bmN0 aW9uIGxpdmVIYW5kbGVyKGV2ZW50KXt2YXIgY2hlY2s9UmVnRXhwKCIoXnxcXC4p IitldmVudC50eXBlKyIoXFwufCQpIiksc3RvcD10cnVlLGVsZW1zPVtdO2pRdWVy eS5lYWNoKGpRdWVyeS5kYXRhKHRoaXMsImV2ZW50cyIpLmxpdmV8fFtdLGZ1bmN0 aW9uKGksZm4pe2lmKGNoZWNrLnRlc3QoZm4udHlwZSkpe3ZhciBlbGVtPWpRdWVy eShldmVudC50YXJnZXQpLmNsb3Nlc3QoZm4uZGF0YSlbMF07aWYoZWxlbSkKZWxl bXMucHVzaCh7ZWxlbTplbGVtLGZuOmZufSk7fX0pO2VsZW1zLnNvcnQoZnVuY3Rp b24oYSxiKXtyZXR1cm4galF1ZXJ5LmRhdGEoYS5lbGVtLCJjbG9zZXN0IiktalF1 ZXJ5LmRhdGEoYi5lbGVtLCJjbG9zZXN0Iik7fSk7alF1ZXJ5LmVhY2goZWxlbXMs ZnVuY3Rpb24oKXtpZih0aGlzLmZuLmNhbGwodGhpcy5lbGVtLGV2ZW50LHRoaXMu Zm4uZGF0YSk9PT1mYWxzZSkKcmV0dXJuKHN0b3A9ZmFsc2UpO30pO3JldHVybiBz dG9wO30KZnVuY3Rpb24gbGl2ZUNvbnZlcnQodHlwZSxzZWxlY3Rvcil7cmV0dXJu WyJsaXZlIix0eXBlLHNlbGVjdG9yLnJlcGxhY2UoL1wuL2csImAiKS5yZXBsYWNl KC8gL2csInwiKV0uam9pbigiLiIpO30KalF1ZXJ5LmV4dGVuZCh7aXNSZWFkeTpm YWxzZSxyZWFkeUxpc3Q6W10scmVhZHk6ZnVuY3Rpb24oKXtpZighalF1ZXJ5Lmlz UmVhZHkpe2pRdWVyeS5pc1JlYWR5PXRydWU7aWYoalF1ZXJ5LnJlYWR5TGlzdCl7 alF1ZXJ5LmVhY2goalF1ZXJ5LnJlYWR5TGlzdCxmdW5jdGlvbigpe3RoaXMuY2Fs bChkb2N1bWVudCxqUXVlcnkpO30pO2pRdWVyeS5yZWFkeUxpc3Q9bnVsbDt9CmpR dWVyeShkb2N1bWVudCkudHJpZ2dlckhhbmRsZXIoInJlYWR5Iik7fX19KTt2YXIg cmVhZHlCb3VuZD1mYWxzZTtmdW5jdGlvbiBiaW5kUmVhZHkoKXtpZihyZWFkeUJv dW5kKXJldHVybjtyZWFkeUJvdW5kPXRydWU7aWYoZG9jdW1lbnQuYWRkRXZlbnRM aXN0ZW5lcil7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExv YWRlZCIsZnVuY3Rpb24oKXtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJE T01Db250ZW50TG9hZGVkIixhcmd1bWVudHMuY2FsbGVlLGZhbHNlKTtqUXVlcnku cmVhZHkoKTt9LGZhbHNlKTt9ZWxzZSBpZihkb2N1bWVudC5hdHRhY2hFdmVudCl7 ZG9jdW1lbnQuYXR0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsZnVuY3Rp b24oKXtpZihkb2N1bWVudC5yZWFkeVN0YXRlPT09ImNvbXBsZXRlIil7ZG9jdW1l bnQuZGV0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsYXJndW1lbnRzLmNh bGxlZSk7alF1ZXJ5LnJlYWR5KCk7fX0pO2lmKGRvY3VtZW50LmRvY3VtZW50RWxl bWVudC5kb1Njcm9sbCYmd2luZG93PT13aW5kb3cudG9wKShmdW5jdGlvbigpe2lm KGpRdWVyeS5pc1JlYWR5KXJldHVybjt0cnl7ZG9jdW1lbnQuZG9jdW1lbnRFbGVt ZW50LmRvU2Nyb2xsKCJsZWZ0Iik7fWNhdGNoKGVycm9yKXtzZXRUaW1lb3V0KGFy Z3VtZW50cy5jYWxsZWUsMCk7cmV0dXJuO30KalF1ZXJ5LnJlYWR5KCk7fSkoKTt9 CmpRdWVyeS5ldmVudC5hZGQod2luZG93LCJsb2FkIixqUXVlcnkucmVhZHkpO30K alF1ZXJ5LmVhY2goKCJibHVyLGZvY3VzLGxvYWQscmVzaXplLHNjcm9sbCx1bmxv YWQsY2xpY2ssZGJsY2xpY2ssIisibW91c2Vkb3duLG1vdXNldXAsbW91c2Vtb3Zl LG1vdXNlb3Zlcixtb3VzZW91dCxtb3VzZWVudGVyLG1vdXNlbGVhdmUsIisiY2hh bmdlLHNlbGVjdCxzdWJtaXQsa2V5ZG93bixrZXlwcmVzcyxrZXl1cCxlcnJvciIp LnNwbGl0KCIsIiksZnVuY3Rpb24oaSxuYW1lKXtqUXVlcnkuZm5bbmFtZV09ZnVu Y3Rpb24oZm4pe3JldHVybiBmbj90aGlzLmJpbmQobmFtZSxmbik6dGhpcy50cmln Z2VyKG5hbWUpO307fSk7alF1ZXJ5KHdpbmRvdykuYmluZCgndW5sb2FkJyxmdW5j dGlvbigpe2Zvcih2YXIgaWQgaW4galF1ZXJ5LmNhY2hlKQppZihpZCE9MSYmalF1 ZXJ5LmNhY2hlW2lkXS5oYW5kbGUpCmpRdWVyeS5ldmVudC5yZW1vdmUoalF1ZXJ5 LmNhY2hlW2lkXS5oYW5kbGUuZWxlbSk7fSk7KGZ1bmN0aW9uKCl7alF1ZXJ5LnN1 cHBvcnQ9e307dmFyIHJvb3Q9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHNjcmlw dD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSxkaXY9ZG9jdW1lbnQu Y3JlYXRlRWxlbWVudCgiZGl2IiksaWQ9InNjcmlwdCIrKG5ldyBEYXRlKS5nZXRU aW1lKCk7ZGl2LnN0eWxlLmRpc3BsYXk9Im5vbmUiO2Rpdi5pbm5lckhUTUw9JyAg IDxsaW5rLz48dGFibGU+PC90YWJsZT48YSBocmVmPSIvYSIgc3R5bGU9ImNvbG9y OnJlZDtmbG9hdDpsZWZ0O29wYWNpdHk6LjU7Ij5hPC9hPjxzZWxlY3Q+PG9wdGlv bj50ZXh0PC9vcHRpb24+PC9zZWxlY3Q+PG9iamVjdD48cGFyYW0vPjwvb2JqZWN0 Pic7dmFyIGFsbD1kaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSxhPWRpdi5n ZXRFbGVtZW50c0J5VGFnTmFtZSgiYSIpWzBdO2lmKCFhbGx8fCFhbGwubGVuZ3Ro fHwhYSl7cmV0dXJuO30KalF1ZXJ5LnN1cHBvcnQ9e2xlYWRpbmdXaGl0ZXNwYWNl OmRpdi5maXJzdENoaWxkLm5vZGVUeXBlPT0zLHRib2R5OiFkaXYuZ2V0RWxlbWVu dHNCeVRhZ05hbWUoInRib2R5IikubGVuZ3RoLG9iamVjdEFsbDohIWRpdi5nZXRF bGVtZW50c0J5VGFnTmFtZSgib2JqZWN0IilbMF0uZ2V0RWxlbWVudHNCeVRhZ05h bWUoIioiKS5sZW5ndGgsaHRtbFNlcmlhbGl6ZTohIWRpdi5nZXRFbGVtZW50c0J5 VGFnTmFtZSgibGluayIpLmxlbmd0aCxzdHlsZTovcmVkLy50ZXN0KGEuZ2V0QXR0 cmlidXRlKCJzdHlsZSIpKSxocmVmTm9ybWFsaXplZDphLmdldEF0dHJpYnV0ZSgi aHJlZiIpPT09Ii9hIixvcGFjaXR5OmEuc3R5bGUub3BhY2l0eT09PSIwLjUiLGNz c0Zsb2F0OiEhYS5zdHlsZS5jc3NGbG9hdCxzY3JpcHRFdmFsOmZhbHNlLG5vQ2xv bmVFdmVudDp0cnVlLGJveE1vZGVsOm51bGx9O3NjcmlwdC50eXBlPSJ0ZXh0L2ph dmFzY3JpcHQiO3RyeXtzY3JpcHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRl VGV4dE5vZGUoIndpbmRvdy4iK2lkKyI9MTsiKSk7fWNhdGNoKGUpe30Kcm9vdC5p bnNlcnRCZWZvcmUoc2NyaXB0LHJvb3QuZmlyc3RDaGlsZCk7aWYod2luZG93W2lk XSl7alF1ZXJ5LnN1cHBvcnQuc2NyaXB0RXZhbD10cnVlO2RlbGV0ZSB3aW5kb3db aWRdO30Kcm9vdC5yZW1vdmVDaGlsZChzY3JpcHQpO2lmKGRpdi5hdHRhY2hFdmVu dCYmZGl2LmZpcmVFdmVudCl7ZGl2LmF0dGFjaEV2ZW50KCJvbmNsaWNrIixmdW5j dGlvbigpe2pRdWVyeS5zdXBwb3J0Lm5vQ2xvbmVFdmVudD1mYWxzZTtkaXYuZGV0 YWNoRXZlbnQoIm9uY2xpY2siLGFyZ3VtZW50cy5jYWxsZWUpO30pO2Rpdi5jbG9u ZU5vZGUodHJ1ZSkuZmlyZUV2ZW50KCJvbmNsaWNrIik7fQpqUXVlcnkoZnVuY3Rp b24oKXt2YXIgZGl2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2Rpdi5z dHlsZS53aWR0aD1kaXYuc3R5bGUucGFkZGluZ0xlZnQ9IjFweCI7ZG9jdW1lbnQu Ym9keS5hcHBlbmRDaGlsZChkaXYpO2pRdWVyeS5ib3hNb2RlbD1qUXVlcnkuc3Vw cG9ydC5ib3hNb2RlbD1kaXYub2Zmc2V0V2lkdGg9PT0yO2RvY3VtZW50LmJvZHku cmVtb3ZlQ2hpbGQoZGl2KS5zdHlsZS5kaXNwbGF5PSdub25lJzt9KTt9KSgpO3Zh ciBzdHlsZUZsb2F0PWpRdWVyeS5zdXBwb3J0LmNzc0Zsb2F0PyJjc3NGbG9hdCI6 InN0eWxlRmxvYXQiO2pRdWVyeS5wcm9wcz17ImZvciI6Imh0bWxGb3IiLCJjbGFz cyI6ImNsYXNzTmFtZSIsImZsb2F0IjpzdHlsZUZsb2F0LGNzc0Zsb2F0OnN0eWxl RmxvYXQsc3R5bGVGbG9hdDpzdHlsZUZsb2F0LHJlYWRvbmx5OiJyZWFkT25seSIs bWF4bGVuZ3RoOiJtYXhMZW5ndGgiLGNlbGxzcGFjaW5nOiJjZWxsU3BhY2luZyIs cm93c3Bhbjoicm93U3BhbiIsdGFiaW5kZXg6InRhYkluZGV4In07alF1ZXJ5LmZu LmV4dGVuZCh7X2xvYWQ6alF1ZXJ5LmZuLmxvYWQsbG9hZDpmdW5jdGlvbih1cmws cGFyYW1zLGNhbGxiYWNrKXtpZih0eXBlb2YgdXJsIT09InN0cmluZyIpCnJldHVy biB0aGlzLl9sb2FkKHVybCk7dmFyIG9mZj11cmwuaW5kZXhPZigiICIpO2lmKG9m Zj49MCl7dmFyIHNlbGVjdG9yPXVybC5zbGljZShvZmYsdXJsLmxlbmd0aCk7dXJs PXVybC5zbGljZSgwLG9mZik7fQp2YXIgdHlwZT0iR0VUIjtpZihwYXJhbXMpCmlm KGpRdWVyeS5pc0Z1bmN0aW9uKHBhcmFtcykpe2NhbGxiYWNrPXBhcmFtcztwYXJh bXM9bnVsbDt9ZWxzZSBpZih0eXBlb2YgcGFyYW1zPT09Im9iamVjdCIpe3BhcmFt cz1qUXVlcnkucGFyYW0ocGFyYW1zKTt0eXBlPSJQT1NUIjt9CnZhciBzZWxmPXRo aXM7alF1ZXJ5LmFqYXgoe3VybDp1cmwsdHlwZTp0eXBlLGRhdGFUeXBlOiJodG1s IixkYXRhOnBhcmFtcyxjb21wbGV0ZTpmdW5jdGlvbihyZXMsc3RhdHVzKXtpZihz dGF0dXM9PSJzdWNjZXNzInx8c3RhdHVzPT0ibm90bW9kaWZpZWQiKQpzZWxmLmh0 bWwoc2VsZWN0b3I/alF1ZXJ5KCI8ZGl2Lz4iKS5hcHBlbmQocmVzLnJlc3BvbnNl VGV4dC5yZXBsYWNlKC88c2NyaXB0KC58XHMpKj9cL3NjcmlwdD4vZywiIikpLmZp bmQoc2VsZWN0b3IpOnJlcy5yZXNwb25zZVRleHQpO2lmKGNhbGxiYWNrKQpzZWxm LmVhY2goY2FsbGJhY2ssW3Jlcy5yZXNwb25zZVRleHQsc3RhdHVzLHJlc10pO319 KTtyZXR1cm4gdGhpczt9LHNlcmlhbGl6ZTpmdW5jdGlvbigpe3JldHVybiBqUXVl cnkucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgpKTt9LHNlcmlhbGl6ZUFycmF5 OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIHRo aXMuZWxlbWVudHM/alF1ZXJ5Lm1ha2VBcnJheSh0aGlzLmVsZW1lbnRzKTp0aGlz O30pLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiB0aGlzLm5hbWUmJiF0aGlzLmRp c2FibGVkJiYodGhpcy5jaGVja2VkfHwvc2VsZWN0fHRleHRhcmVhL2kudGVzdCh0 aGlzLm5vZGVOYW1lKXx8L3RleHR8aGlkZGVufHBhc3N3b3JkfHNlYXJjaC9pLnRl c3QodGhpcy50eXBlKSk7fSkubWFwKGZ1bmN0aW9uKGksZWxlbSl7dmFyIHZhbD1q UXVlcnkodGhpcykudmFsKCk7cmV0dXJuIHZhbD09bnVsbD9udWxsOmpRdWVyeS5p c0FycmF5KHZhbCk/alF1ZXJ5Lm1hcCh2YWwsZnVuY3Rpb24odmFsLGkpe3JldHVy bntuYW1lOmVsZW0ubmFtZSx2YWx1ZTp2YWx9O30pOntuYW1lOmVsZW0ubmFtZSx2 YWx1ZTp2YWx9O30pLmdldCgpO319KTtqUXVlcnkuZWFjaCgiYWpheFN0YXJ0LGFq YXhTdG9wLGFqYXhDb21wbGV0ZSxhamF4RXJyb3IsYWpheFN1Y2Nlc3MsYWpheFNl bmQiLnNwbGl0KCIsIiksZnVuY3Rpb24oaSxvKXtqUXVlcnkuZm5bb109ZnVuY3Rp b24oZil7cmV0dXJuIHRoaXMuYmluZChvLGYpO307fSk7dmFyIGpzYz1ub3coKTtq UXVlcnkuZXh0ZW5kKHtnZXQ6ZnVuY3Rpb24odXJsLGRhdGEsY2FsbGJhY2ssdHlw ZSl7aWYoalF1ZXJ5LmlzRnVuY3Rpb24oZGF0YSkpe2NhbGxiYWNrPWRhdGE7ZGF0 YT1udWxsO30KcmV0dXJuIGpRdWVyeS5hamF4KHt0eXBlOiJHRVQiLHVybDp1cmws ZGF0YTpkYXRhLHN1Y2Nlc3M6Y2FsbGJhY2ssZGF0YVR5cGU6dHlwZX0pO30sZ2V0 U2NyaXB0OmZ1bmN0aW9uKHVybCxjYWxsYmFjayl7cmV0dXJuIGpRdWVyeS5nZXQo dXJsLG51bGwsY2FsbGJhY2ssInNjcmlwdCIpO30sZ2V0SlNPTjpmdW5jdGlvbih1 cmwsZGF0YSxjYWxsYmFjayl7cmV0dXJuIGpRdWVyeS5nZXQodXJsLGRhdGEsY2Fs bGJhY2ssImpzb24iKTt9LHBvc3Q6ZnVuY3Rpb24odXJsLGRhdGEsY2FsbGJhY2ss dHlwZSl7aWYoalF1ZXJ5LmlzRnVuY3Rpb24oZGF0YSkpe2NhbGxiYWNrPWRhdGE7 ZGF0YT17fTt9CnJldHVybiBqUXVlcnkuYWpheCh7dHlwZToiUE9TVCIsdXJsOnVy bCxkYXRhOmRhdGEsc3VjY2VzczpjYWxsYmFjayxkYXRhVHlwZTp0eXBlfSk7fSxh amF4U2V0dXA6ZnVuY3Rpb24oc2V0dGluZ3Mpe2pRdWVyeS5leHRlbmQoalF1ZXJ5 LmFqYXhTZXR0aW5ncyxzZXR0aW5ncyk7fSxhamF4U2V0dGluZ3M6e3VybDpsb2Nh dGlvbi5ocmVmLGdsb2JhbDp0cnVlLHR5cGU6IkdFVCIsY29udGVudFR5cGU6ImFw cGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIscHJvY2Vzc0RhdGE6dHJ1 ZSxhc3luYzp0cnVlLHhocjpmdW5jdGlvbigpe3JldHVybiB3aW5kb3cuQWN0aXZl WE9iamVjdD9uZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTEhUVFAiKTpu ZXcgWE1MSHR0cFJlcXVlc3QoKTt9LGFjY2VwdHM6e3htbDoiYXBwbGljYXRpb24v eG1sLCB0ZXh0L3htbCIsaHRtbDoidGV4dC9odG1sIixzY3JpcHQ6InRleHQvamF2 YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCIsanNvbjoiYXBwbGljYXRp b24vanNvbiwgdGV4dC9qYXZhc2NyaXB0Iix0ZXh0OiJ0ZXh0L3BsYWluIixfZGVm YXVsdDoiKi8qIn19LGxhc3RNb2RpZmllZDp7fSxhamF4OmZ1bmN0aW9uKHMpe3M9 alF1ZXJ5LmV4dGVuZCh0cnVlLHMsalF1ZXJ5LmV4dGVuZCh0cnVlLHt9LGpRdWVy eS5hamF4U2V0dGluZ3MscykpO3ZhciBqc29ucCxqc3JlPS89XD8oJnwkKS9nLHN0 YXR1cyxkYXRhLHR5cGU9cy50eXBlLnRvVXBwZXJDYXNlKCk7aWYocy5kYXRhJiZz LnByb2Nlc3NEYXRhJiZ0eXBlb2Ygcy5kYXRhIT09InN0cmluZyIpCnMuZGF0YT1q UXVlcnkucGFyYW0ocy5kYXRhKTtpZihzLmRhdGFUeXBlPT0ianNvbnAiKXtpZih0 eXBlPT0iR0VUIil7aWYoIXMudXJsLm1hdGNoKGpzcmUpKQpzLnVybCs9KHMudXJs Lm1hdGNoKC9cPy8pPyImIjoiPyIpKyhzLmpzb25wfHwiY2FsbGJhY2siKSsiPT8i O31lbHNlIGlmKCFzLmRhdGF8fCFzLmRhdGEubWF0Y2goanNyZSkpCnMuZGF0YT0o cy5kYXRhP3MuZGF0YSsiJiI6IiIpKyhzLmpzb25wfHwiY2FsbGJhY2siKSsiPT8i O3MuZGF0YVR5cGU9Impzb24iO30KaWYocy5kYXRhVHlwZT09Impzb24iJiYocy5k YXRhJiZzLmRhdGEubWF0Y2goanNyZSl8fHMudXJsLm1hdGNoKGpzcmUpKSl7anNv bnA9Impzb25wIitqc2MrKztpZihzLmRhdGEpCnMuZGF0YT0ocy5kYXRhKyIiKS5y ZXBsYWNlKGpzcmUsIj0iK2pzb25wKyIkMSIpO3MudXJsPXMudXJsLnJlcGxhY2Uo anNyZSwiPSIranNvbnArIiQxIik7cy5kYXRhVHlwZT0ic2NyaXB0Ijt3aW5kb3db anNvbnBdPWZ1bmN0aW9uKHRtcCl7ZGF0YT10bXA7c3VjY2VzcygpO2NvbXBsZXRl KCk7d2luZG93W2pzb25wXT11bmRlZmluZWQ7dHJ5e2RlbGV0ZSB3aW5kb3dbanNv bnBdO31jYXRjaChlKXt9CmlmKGhlYWQpCmhlYWQucmVtb3ZlQ2hpbGQoc2NyaXB0 KTt9O30KaWYocy5kYXRhVHlwZT09InNjcmlwdCImJnMuY2FjaGU9PW51bGwpCnMu Y2FjaGU9ZmFsc2U7aWYocy5jYWNoZT09PWZhbHNlJiZ0eXBlPT0iR0VUIil7dmFy IHRzPW5vdygpO3ZhciByZXQ9cy51cmwucmVwbGFjZSgvKFw/fCYpXz0uKj8oJnwk KS8sIiQxXz0iK3RzKyIkMiIpO3MudXJsPXJldCsoKHJldD09cy51cmwpPyhzLnVy bC5tYXRjaCgvXD8vKT8iJiI6Ij8iKSsiXz0iK3RzOiIiKTt9CmlmKHMuZGF0YSYm dHlwZT09IkdFVCIpe3MudXJsKz0ocy51cmwubWF0Y2goL1w/Lyk/IiYiOiI/Iikr cy5kYXRhO3MuZGF0YT1udWxsO30KaWYocy5nbG9iYWwmJiFqUXVlcnkuYWN0aXZl KyspCmpRdWVyeS5ldmVudC50cmlnZ2VyKCJhamF4U3RhcnQiKTt2YXIgcGFydHM9 L14oXHcrOik/XC9cLyhbXlwvPyNdKykvLmV4ZWMocy51cmwpO2lmKHMuZGF0YVR5 cGU9PSJzY3JpcHQiJiZ0eXBlPT0iR0VUIiYmcGFydHMmJihwYXJ0c1sxXSYmcGFy dHNbMV0hPWxvY2F0aW9uLnByb3RvY29sfHxwYXJ0c1syXSE9bG9jYXRpb24uaG9z dCkpe3ZhciBoZWFkPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFk IilbMF07dmFyIHNjcmlwdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQi KTtzY3JpcHQuc3JjPXMudXJsO2lmKHMuc2NyaXB0Q2hhcnNldCkKc2NyaXB0LmNo YXJzZXQ9cy5zY3JpcHRDaGFyc2V0O2lmKCFqc29ucCl7dmFyIGRvbmU9ZmFsc2U7 c2NyaXB0Lm9ubG9hZD1zY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9u KCl7aWYoIWRvbmUmJighdGhpcy5yZWFkeVN0YXRlfHx0aGlzLnJlYWR5U3RhdGU9 PSJsb2FkZWQifHx0aGlzLnJlYWR5U3RhdGU9PSJjb21wbGV0ZSIpKXtkb25lPXRy dWU7c3VjY2VzcygpO2NvbXBsZXRlKCk7c2NyaXB0Lm9ubG9hZD1zY3JpcHQub25y ZWFkeXN0YXRlY2hhbmdlPW51bGw7aGVhZC5yZW1vdmVDaGlsZChzY3JpcHQpO319 O30KaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpO3JldHVybiB1bmRlZmluZWQ7fQp2 YXIgcmVxdWVzdERvbmU9ZmFsc2U7dmFyIHhocj1zLnhocigpO2lmKHMudXNlcm5h bWUpCnhoci5vcGVuKHR5cGUscy51cmwscy5hc3luYyxzLnVzZXJuYW1lLHMucGFz c3dvcmQpO2Vsc2UKeGhyLm9wZW4odHlwZSxzLnVybCxzLmFzeW5jKTt0cnl7aWYo cy5kYXRhKQp4aHIuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIixzLmNv bnRlbnRUeXBlKTtpZihzLmlmTW9kaWZpZWQpCnhoci5zZXRSZXF1ZXN0SGVhZGVy KCJJZi1Nb2RpZmllZC1TaW5jZSIsalF1ZXJ5Lmxhc3RNb2RpZmllZFtzLnVybF18 fCJUaHUsIDAxIEphbiAxOTcwIDAwOjAwOjAwIEdNVCIpO3hoci5zZXRSZXF1ZXN0 SGVhZGVyKCJYLVJlcXVlc3RlZC1XaXRoIiwiWE1MSHR0cFJlcXVlc3QiKTt4aHIu c2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0IixzLmRhdGFUeXBlJiZzLmFjY2VwdHNb cy5kYXRhVHlwZV0/cy5hY2NlcHRzW3MuZGF0YVR5cGVdKyIsICovKiI6cy5hY2Nl cHRzLl9kZWZhdWx0KTt9Y2F0Y2goZSl7fQppZihzLmJlZm9yZVNlbmQmJnMuYmVm b3JlU2VuZCh4aHIscyk9PT1mYWxzZSl7aWYocy5nbG9iYWwmJiEtLWpRdWVyeS5h Y3RpdmUpCmpRdWVyeS5ldmVudC50cmlnZ2VyKCJhamF4U3RvcCIpO3hoci5hYm9y dCgpO3JldHVybiBmYWxzZTt9CmlmKHMuZ2xvYmFsKQpqUXVlcnkuZXZlbnQudHJp Z2dlcigiYWpheFNlbmQiLFt4aHIsc10pO3ZhciBvbnJlYWR5c3RhdGVjaGFuZ2U9 ZnVuY3Rpb24oaXNUaW1lb3V0KXtpZih4aHIucmVhZHlTdGF0ZT09MCl7aWYoaXZh bCl7Y2xlYXJJbnRlcnZhbChpdmFsKTtpdmFsPW51bGw7aWYocy5nbG9iYWwmJiEt LWpRdWVyeS5hY3RpdmUpCmpRdWVyeS5ldmVudC50cmlnZ2VyKCJhamF4U3RvcCIp O319ZWxzZSBpZighcmVxdWVzdERvbmUmJnhociYmKHhoci5yZWFkeVN0YXRlPT00 fHxpc1RpbWVvdXQ9PSJ0aW1lb3V0Iikpe3JlcXVlc3REb25lPXRydWU7aWYoaXZh bCl7Y2xlYXJJbnRlcnZhbChpdmFsKTtpdmFsPW51bGw7fQpzdGF0dXM9aXNUaW1l b3V0PT0idGltZW91dCI/InRpbWVvdXQiOiFqUXVlcnkuaHR0cFN1Y2Nlc3MoeGhy KT8iZXJyb3IiOnMuaWZNb2RpZmllZCYmalF1ZXJ5Lmh0dHBOb3RNb2RpZmllZCh4 aHIscy51cmwpPyJub3Rtb2RpZmllZCI6InN1Y2Nlc3MiO2lmKHN0YXR1cz09InN1 Y2Nlc3MiKXt0cnl7ZGF0YT1qUXVlcnkuaHR0cERhdGEoeGhyLHMuZGF0YVR5cGUs cyk7fWNhdGNoKGUpe3N0YXR1cz0icGFyc2VyZXJyb3IiO319CmlmKHN0YXR1cz09 InN1Y2Nlc3MiKXt2YXIgbW9kUmVzO3RyeXttb2RSZXM9eGhyLmdldFJlc3BvbnNl SGVhZGVyKCJMYXN0LU1vZGlmaWVkIik7fWNhdGNoKGUpe30KaWYocy5pZk1vZGlm aWVkJiZtb2RSZXMpCmpRdWVyeS5sYXN0TW9kaWZpZWRbcy51cmxdPW1vZFJlcztp ZighanNvbnApCnN1Y2Nlc3MoKTt9ZWxzZQpqUXVlcnkuaGFuZGxlRXJyb3Iocyx4 aHIsc3RhdHVzKTtjb21wbGV0ZSgpO2lmKGlzVGltZW91dCkKeGhyLmFib3J0KCk7 aWYocy5hc3luYykKeGhyPW51bGw7fX07aWYocy5hc3luYyl7dmFyIGl2YWw9c2V0 SW50ZXJ2YWwob25yZWFkeXN0YXRlY2hhbmdlLDEzKTtpZihzLnRpbWVvdXQ+MCkK c2V0VGltZW91dChmdW5jdGlvbigpe2lmKHhociYmIXJlcXVlc3REb25lKQpvbnJl YWR5c3RhdGVjaGFuZ2UoInRpbWVvdXQiKTt9LHMudGltZW91dCk7fQp0cnl7eGhy LnNlbmQocy5kYXRhKTt9Y2F0Y2goZSl7alF1ZXJ5LmhhbmRsZUVycm9yKHMseGhy LG51bGwsZSk7fQppZighcy5hc3luYykKb25yZWFkeXN0YXRlY2hhbmdlKCk7ZnVu Y3Rpb24gc3VjY2Vzcygpe2lmKHMuc3VjY2VzcykKcy5zdWNjZXNzKGRhdGEsc3Rh dHVzKTtpZihzLmdsb2JhbCkKalF1ZXJ5LmV2ZW50LnRyaWdnZXIoImFqYXhTdWNj ZXNzIixbeGhyLHNdKTt9CmZ1bmN0aW9uIGNvbXBsZXRlKCl7aWYocy5jb21wbGV0 ZSkKcy5jb21wbGV0ZSh4aHIsc3RhdHVzKTtpZihzLmdsb2JhbCkKalF1ZXJ5LmV2 ZW50LnRyaWdnZXIoImFqYXhDb21wbGV0ZSIsW3hocixzXSk7aWYocy5nbG9iYWwm JiEtLWpRdWVyeS5hY3RpdmUpCmpRdWVyeS5ldmVudC50cmlnZ2VyKCJhamF4U3Rv cCIpO30KcmV0dXJuIHhocjt9LGhhbmRsZUVycm9yOmZ1bmN0aW9uKHMseGhyLHN0 YXR1cyxlKXtpZihzLmVycm9yKXMuZXJyb3IoeGhyLHN0YXR1cyxlKTtpZihzLmds b2JhbCkKalF1ZXJ5LmV2ZW50LnRyaWdnZXIoImFqYXhFcnJvciIsW3hocixzLGVd KTt9LGFjdGl2ZTowLGh0dHBTdWNjZXNzOmZ1bmN0aW9uKHhocil7dHJ5e3JldHVy biF4aHIuc3RhdHVzJiZsb2NhdGlvbi5wcm90b2NvbD09ImZpbGU6Inx8KHhoci5z dGF0dXM+PTIwMCYmeGhyLnN0YXR1czwzMDApfHx4aHIuc3RhdHVzPT0zMDR8fHho ci5zdGF0dXM9PTEyMjM7fWNhdGNoKGUpe30KcmV0dXJuIGZhbHNlO30saHR0cE5v dE1vZGlmaWVkOmZ1bmN0aW9uKHhocix1cmwpe3RyeXt2YXIgeGhyUmVzPXhoci5n ZXRSZXNwb25zZUhlYWRlcigiTGFzdC1Nb2RpZmllZCIpO3JldHVybiB4aHIuc3Rh dHVzPT0zMDR8fHhoclJlcz09alF1ZXJ5Lmxhc3RNb2RpZmllZFt1cmxdO31jYXRj aChlKXt9CnJldHVybiBmYWxzZTt9LGh0dHBEYXRhOmZ1bmN0aW9uKHhocix0eXBl LHMpe3ZhciBjdD14aHIuZ2V0UmVzcG9uc2VIZWFkZXIoImNvbnRlbnQtdHlwZSIp LHhtbD10eXBlPT0ieG1sInx8IXR5cGUmJmN0JiZjdC5pbmRleE9mKCJ4bWwiKT49 MCxkYXRhPXhtbD94aHIucmVzcG9uc2VYTUw6eGhyLnJlc3BvbnNlVGV4dDtpZih4 bWwmJmRhdGEuZG9jdW1lbnRFbGVtZW50LnRhZ05hbWU9PSJwYXJzZXJlcnJvciIp CnRocm93InBhcnNlcmVycm9yIjtpZihzJiZzLmRhdGFGaWx0ZXIpCmRhdGE9cy5k YXRhRmlsdGVyKGRhdGEsdHlwZSk7aWYodHlwZW9mIGRhdGE9PT0ic3RyaW5nIil7 aWYodHlwZT09InNjcmlwdCIpCmpRdWVyeS5nbG9iYWxFdmFsKGRhdGEpO2lmKHR5 cGU9PSJqc29uIikKZGF0YT13aW5kb3dbImV2YWwiXSgiKCIrZGF0YSsiKSIpO30K cmV0dXJuIGRhdGE7fSxwYXJhbTpmdW5jdGlvbihhKXt2YXIgcz1bXTtmdW5jdGlv biBhZGQoa2V5LHZhbHVlKXtzW3MubGVuZ3RoXT1lbmNvZGVVUklDb21wb25lbnQo a2V5KSsnPScrZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKTt9O2lmKGpRdWVyeS5p c0FycmF5KGEpfHxhLmpxdWVyeSkKalF1ZXJ5LmVhY2goYSxmdW5jdGlvbigpe2Fk ZCh0aGlzLm5hbWUsdGhpcy52YWx1ZSk7fSk7ZWxzZQpmb3IodmFyIGogaW4gYSkK aWYoalF1ZXJ5LmlzQXJyYXkoYVtqXSkpCmpRdWVyeS5lYWNoKGFbal0sZnVuY3Rp b24oKXthZGQoaix0aGlzKTt9KTtlbHNlCmFkZChqLGpRdWVyeS5pc0Z1bmN0aW9u KGFbal0pP2Fbal0oKTphW2pdKTtyZXR1cm4gcy5qb2luKCImIikucmVwbGFjZSgv JTIwL2csIisiKTt9fSk7dmFyIGVsZW1kaXNwbGF5PXt9LHRpbWVySWQsZnhBdHRy cz1bWyJoZWlnaHQiLCJtYXJnaW5Ub3AiLCJtYXJnaW5Cb3R0b20iLCJwYWRkaW5n VG9wIiwicGFkZGluZ0JvdHRvbSJdLFsid2lkdGgiLCJtYXJnaW5MZWZ0IiwibWFy Z2luUmlnaHQiLCJwYWRkaW5nTGVmdCIsInBhZGRpbmdSaWdodCJdLFsib3BhY2l0 eSJdXTtmdW5jdGlvbiBnZW5GeCh0eXBlLG51bSl7dmFyIG9iaj17fTtqUXVlcnku ZWFjaChmeEF0dHJzLmNvbmNhdC5hcHBseShbXSxmeEF0dHJzLnNsaWNlKDAsbnVt KSksZnVuY3Rpb24oKXtvYmpbdGhpc109dHlwZTt9KTtyZXR1cm4gb2JqO30KalF1 ZXJ5LmZuLmV4dGVuZCh7c2hvdzpmdW5jdGlvbihzcGVlZCxjYWxsYmFjayl7aWYo c3BlZWQpe3JldHVybiB0aGlzLmFuaW1hdGUoZ2VuRngoInNob3ciLDMpLHNwZWVk LGNhbGxiYWNrKTt9ZWxzZXtmb3IodmFyIGk9MCxsPXRoaXMubGVuZ3RoO2k8bDtp Kyspe3ZhciBvbGQ9alF1ZXJ5LmRhdGEodGhpc1tpXSwib2xkZGlzcGxheSIpO3Ro aXNbaV0uc3R5bGUuZGlzcGxheT1vbGR8fCIiO2lmKGpRdWVyeS5jc3ModGhpc1tp XSwiZGlzcGxheSIpPT09Im5vbmUiKXt2YXIgdGFnTmFtZT10aGlzW2ldLnRhZ05h bWUsZGlzcGxheTtpZihlbGVtZGlzcGxheVt0YWdOYW1lXSl7ZGlzcGxheT1lbGVt ZGlzcGxheVt0YWdOYW1lXTt9ZWxzZXt2YXIgZWxlbT1qUXVlcnkoIjwiK3RhZ05h bWUrIiAvPiIpLmFwcGVuZFRvKCJib2R5Iik7ZGlzcGxheT1lbGVtLmNzcygiZGlz cGxheSIpO2lmKGRpc3BsYXk9PT0ibm9uZSIpCmRpc3BsYXk9ImJsb2NrIjtlbGVt LnJlbW92ZSgpO2VsZW1kaXNwbGF5W3RhZ05hbWVdPWRpc3BsYXk7fQpqUXVlcnku ZGF0YSh0aGlzW2ldLCJvbGRkaXNwbGF5IixkaXNwbGF5KTt9fQpmb3IodmFyIGk9 MCxsPXRoaXMubGVuZ3RoO2k8bDtpKyspe3RoaXNbaV0uc3R5bGUuZGlzcGxheT1q UXVlcnkuZGF0YSh0aGlzW2ldLCJvbGRkaXNwbGF5Iil8fCIiO30KcmV0dXJuIHRo aXM7fX0saGlkZTpmdW5jdGlvbihzcGVlZCxjYWxsYmFjayl7aWYoc3BlZWQpe3Jl dHVybiB0aGlzLmFuaW1hdGUoZ2VuRngoImhpZGUiLDMpLHNwZWVkLGNhbGxiYWNr KTt9ZWxzZXtmb3IodmFyIGk9MCxsPXRoaXMubGVuZ3RoO2k8bDtpKyspe3ZhciBv bGQ9alF1ZXJ5LmRhdGEodGhpc1tpXSwib2xkZGlzcGxheSIpO2lmKCFvbGQmJm9s ZCE9PSJub25lIikKalF1ZXJ5LmRhdGEodGhpc1tpXSwib2xkZGlzcGxheSIsalF1 ZXJ5LmNzcyh0aGlzW2ldLCJkaXNwbGF5IikpO30KZm9yKHZhciBpPTAsbD10aGlz Lmxlbmd0aDtpPGw7aSsrKXt0aGlzW2ldLnN0eWxlLmRpc3BsYXk9Im5vbmUiO30K cmV0dXJuIHRoaXM7fX0sX3RvZ2dsZTpqUXVlcnkuZm4udG9nZ2xlLHRvZ2dsZTpm dW5jdGlvbihmbixmbjIpe3ZhciBib29sPXR5cGVvZiBmbj09PSJib29sZWFuIjty ZXR1cm4galF1ZXJ5LmlzRnVuY3Rpb24oZm4pJiZqUXVlcnkuaXNGdW5jdGlvbihm bjIpP3RoaXMuX3RvZ2dsZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6Zm49PW51bGx8 fGJvb2w/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHN0YXRlPWJvb2w/Zm46alF1 ZXJ5KHRoaXMpLmlzKCI6aGlkZGVuIik7alF1ZXJ5KHRoaXMpW3N0YXRlPyJzaG93 IjoiaGlkZSJdKCk7fSk6dGhpcy5hbmltYXRlKGdlbkZ4KCJ0b2dnbGUiLDMpLGZu LGZuMik7fSxmYWRlVG86ZnVuY3Rpb24oc3BlZWQsdG8sY2FsbGJhY2spe3JldHVy biB0aGlzLmFuaW1hdGUoe29wYWNpdHk6dG99LHNwZWVkLGNhbGxiYWNrKTt9LGFu aW1hdGU6ZnVuY3Rpb24ocHJvcCxzcGVlZCxlYXNpbmcsY2FsbGJhY2spe3ZhciBv cHRhbGw9alF1ZXJ5LnNwZWVkKHNwZWVkLGVhc2luZyxjYWxsYmFjayk7cmV0dXJu IHRoaXNbb3B0YWxsLnF1ZXVlPT09ZmFsc2U/ImVhY2giOiJxdWV1ZSJdKGZ1bmN0 aW9uKCl7dmFyIG9wdD1qUXVlcnkuZXh0ZW5kKHt9LG9wdGFsbCkscCxoaWRkZW49 dGhpcy5ub2RlVHlwZT09MSYmalF1ZXJ5KHRoaXMpLmlzKCI6aGlkZGVuIiksc2Vs Zj10aGlzO2ZvcihwIGluIHByb3Ape2lmKHByb3BbcF09PSJoaWRlIiYmaGlkZGVu fHxwcm9wW3BdPT0ic2hvdyImJiFoaWRkZW4pCnJldHVybiBvcHQuY29tcGxldGUu Y2FsbCh0aGlzKTtpZigocD09ImhlaWdodCJ8fHA9PSJ3aWR0aCIpJiZ0aGlzLnN0 eWxlKXtvcHQuZGlzcGxheT1qUXVlcnkuY3NzKHRoaXMsImRpc3BsYXkiKTtvcHQu b3ZlcmZsb3c9dGhpcy5zdHlsZS5vdmVyZmxvdzt9fQppZihvcHQub3ZlcmZsb3ch PW51bGwpCnRoaXMuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiI7b3B0LmN1ckFuaW09 alF1ZXJ5LmV4dGVuZCh7fSxwcm9wKTtqUXVlcnkuZWFjaChwcm9wLGZ1bmN0aW9u KG5hbWUsdmFsKXt2YXIgZT1uZXcgalF1ZXJ5LmZ4KHNlbGYsb3B0LG5hbWUpO2lm KC90b2dnbGV8c2hvd3xoaWRlLy50ZXN0KHZhbCkpCmVbdmFsPT0idG9nZ2xlIj9o aWRkZW4/InNob3ciOiJoaWRlIjp2YWxdKHByb3ApO2Vsc2V7dmFyIHBhcnRzPXZh bC50b1N0cmluZygpLm1hdGNoKC9eKFsrLV09KT8oW1xkKy0uXSspKC4qKSQvKSxz dGFydD1lLmN1cih0cnVlKXx8MDtpZihwYXJ0cyl7dmFyIGVuZD1wYXJzZUZsb2F0 KHBhcnRzWzJdKSx1bml0PXBhcnRzWzNdfHwicHgiO2lmKHVuaXQhPSJweCIpe3Nl bGYuc3R5bGVbbmFtZV09KGVuZHx8MSkrdW5pdDtzdGFydD0oKGVuZHx8MSkvZS5j dXIodHJ1ZSkpKnN0YXJ0O3NlbGYuc3R5bGVbbmFtZV09c3RhcnQrdW5pdDt9Cmlm KHBhcnRzWzFdKQplbmQ9KChwYXJ0c1sxXT09Ii09Ij8tMToxKSplbmQpK3N0YXJ0 O2UuY3VzdG9tKHN0YXJ0LGVuZCx1bml0KTt9ZWxzZQplLmN1c3RvbShzdGFydCx2 YWwsIiIpO319KTtyZXR1cm4gdHJ1ZTt9KTt9LHN0b3A6ZnVuY3Rpb24oY2xlYXJR dWV1ZSxnb3RvRW5kKXt2YXIgdGltZXJzPWpRdWVyeS50aW1lcnM7aWYoY2xlYXJR dWV1ZSkKdGhpcy5xdWV1ZShbXSk7dGhpcy5lYWNoKGZ1bmN0aW9uKCl7Zm9yKHZh ciBpPXRpbWVycy5sZW5ndGgtMTtpPj0wO2ktLSkKaWYodGltZXJzW2ldLmVsZW09 PXRoaXMpe2lmKGdvdG9FbmQpCnRpbWVyc1tpXSh0cnVlKTt0aW1lcnMuc3BsaWNl KGksMSk7fX0pO2lmKCFnb3RvRW5kKQp0aGlzLmRlcXVldWUoKTtyZXR1cm4gdGhp czt9fSk7alF1ZXJ5LmVhY2goe3NsaWRlRG93bjpnZW5GeCgic2hvdyIsMSksc2xp ZGVVcDpnZW5GeCgiaGlkZSIsMSksc2xpZGVUb2dnbGU6Z2VuRngoInRvZ2dsZSIs MSksZmFkZUluOntvcGFjaXR5OiJzaG93In0sZmFkZU91dDp7b3BhY2l0eToiaGlk ZSJ9fSxmdW5jdGlvbihuYW1lLHByb3BzKXtqUXVlcnkuZm5bbmFtZV09ZnVuY3Rp b24oc3BlZWQsY2FsbGJhY2spe3JldHVybiB0aGlzLmFuaW1hdGUocHJvcHMsc3Bl ZWQsY2FsbGJhY2spO307fSk7alF1ZXJ5LmV4dGVuZCh7c3BlZWQ6ZnVuY3Rpb24o c3BlZWQsZWFzaW5nLGZuKXt2YXIgb3B0PXR5cGVvZiBzcGVlZD09PSJvYmplY3Qi P3NwZWVkOntjb21wbGV0ZTpmbnx8IWZuJiZlYXNpbmd8fGpRdWVyeS5pc0Z1bmN0 aW9uKHNwZWVkKSYmc3BlZWQsZHVyYXRpb246c3BlZWQsZWFzaW5nOmZuJiZlYXNp bmd8fGVhc2luZyYmIWpRdWVyeS5pc0Z1bmN0aW9uKGVhc2luZykmJmVhc2luZ307 b3B0LmR1cmF0aW9uPWpRdWVyeS5meC5vZmY/MDp0eXBlb2Ygb3B0LmR1cmF0aW9u PT09Im51bWJlciI/b3B0LmR1cmF0aW9uOmpRdWVyeS5meC5zcGVlZHNbb3B0LmR1 cmF0aW9uXXx8alF1ZXJ5LmZ4LnNwZWVkcy5fZGVmYXVsdDtvcHQub2xkPW9wdC5j b21wbGV0ZTtvcHQuY29tcGxldGU9ZnVuY3Rpb24oKXtpZihvcHQucXVldWUhPT1m YWxzZSkKalF1ZXJ5KHRoaXMpLmRlcXVldWUoKTtpZihqUXVlcnkuaXNGdW5jdGlv bihvcHQub2xkKSkKb3B0Lm9sZC5jYWxsKHRoaXMpO307cmV0dXJuIG9wdDt9LGVh c2luZzp7bGluZWFyOmZ1bmN0aW9uKHAsbixmaXJzdE51bSxkaWZmKXtyZXR1cm4g Zmlyc3ROdW0rZGlmZipwO30sc3dpbmc6ZnVuY3Rpb24ocCxuLGZpcnN0TnVtLGRp ZmYpe3JldHVybigoLU1hdGguY29zKHAqTWF0aC5QSSkvMikrMC41KSpkaWZmK2Zp cnN0TnVtO319LHRpbWVyczpbXSxmeDpmdW5jdGlvbihlbGVtLG9wdGlvbnMscHJv cCl7dGhpcy5vcHRpb25zPW9wdGlvbnM7dGhpcy5lbGVtPWVsZW07dGhpcy5wcm9w PXByb3A7aWYoIW9wdGlvbnMub3JpZykKb3B0aW9ucy5vcmlnPXt9O319KTtqUXVl cnkuZngucHJvdG90eXBlPXt1cGRhdGU6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlv bnMuc3RlcCkKdGhpcy5vcHRpb25zLnN0ZXAuY2FsbCh0aGlzLmVsZW0sdGhpcy5u b3csdGhpcyk7KGpRdWVyeS5meC5zdGVwW3RoaXMucHJvcF18fGpRdWVyeS5meC5z dGVwLl9kZWZhdWx0KSh0aGlzKTtpZigodGhpcy5wcm9wPT0iaGVpZ2h0Inx8dGhp cy5wcm9wPT0id2lkdGgiKSYmdGhpcy5lbGVtLnN0eWxlKQp0aGlzLmVsZW0uc3R5 bGUuZGlzcGxheT0iYmxvY2siO30sY3VyOmZ1bmN0aW9uKGZvcmNlKXtpZih0aGlz LmVsZW1bdGhpcy5wcm9wXSE9bnVsbCYmKCF0aGlzLmVsZW0uc3R5bGV8fHRoaXMu ZWxlbS5zdHlsZVt0aGlzLnByb3BdPT1udWxsKSkKcmV0dXJuIHRoaXMuZWxlbVt0 aGlzLnByb3BdO3ZhciByPXBhcnNlRmxvYXQoalF1ZXJ5LmNzcyh0aGlzLmVsZW0s dGhpcy5wcm9wLGZvcmNlKSk7cmV0dXJuIHImJnI+LTEwMDAwP3I6cGFyc2VGbG9h dChqUXVlcnkuY3VyQ1NTKHRoaXMuZWxlbSx0aGlzLnByb3ApKXx8MDt9LGN1c3Rv bTpmdW5jdGlvbihmcm9tLHRvLHVuaXQpe3RoaXMuc3RhcnRUaW1lPW5vdygpO3Ro aXMuc3RhcnQ9ZnJvbTt0aGlzLmVuZD10bzt0aGlzLnVuaXQ9dW5pdHx8dGhpcy51 bml0fHwicHgiO3RoaXMubm93PXRoaXMuc3RhcnQ7dGhpcy5wb3M9dGhpcy5zdGF0 ZT0wO3ZhciBzZWxmPXRoaXM7ZnVuY3Rpb24gdChnb3RvRW5kKXtyZXR1cm4gc2Vs Zi5zdGVwKGdvdG9FbmQpO30KdC5lbGVtPXRoaXMuZWxlbTtpZih0KCkmJmpRdWVy eS50aW1lcnMucHVzaCh0KSYmIXRpbWVySWQpe3RpbWVySWQ9c2V0SW50ZXJ2YWwo ZnVuY3Rpb24oKXt2YXIgdGltZXJzPWpRdWVyeS50aW1lcnM7Zm9yKHZhciBpPTA7 aTx0aW1lcnMubGVuZ3RoO2krKykKaWYoIXRpbWVyc1tpXSgpKQp0aW1lcnMuc3Bs aWNlKGktLSwxKTtpZighdGltZXJzLmxlbmd0aCl7Y2xlYXJJbnRlcnZhbCh0aW1l cklkKTt0aW1lcklkPXVuZGVmaW5lZDt9fSwxMyk7fX0sc2hvdzpmdW5jdGlvbigp e3RoaXMub3B0aW9ucy5vcmlnW3RoaXMucHJvcF09alF1ZXJ5LmF0dHIodGhpcy5l bGVtLnN0eWxlLHRoaXMucHJvcCk7dGhpcy5vcHRpb25zLnNob3c9dHJ1ZTt0aGlz LmN1c3RvbSh0aGlzLnByb3A9PSJ3aWR0aCJ8fHRoaXMucHJvcD09ImhlaWdodCI/ MTowLHRoaXMuY3VyKCkpO2pRdWVyeSh0aGlzLmVsZW0pLnNob3coKTt9LGhpZGU6 ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMub3JpZ1t0aGlzLnByb3BdPWpRdWVyeS5h dHRyKHRoaXMuZWxlbS5zdHlsZSx0aGlzLnByb3ApO3RoaXMub3B0aW9ucy5oaWRl PXRydWU7dGhpcy5jdXN0b20odGhpcy5jdXIoKSwwKTt9LHN0ZXA6ZnVuY3Rpb24o Z290b0VuZCl7dmFyIHQ9bm93KCk7aWYoZ290b0VuZHx8dD49dGhpcy5vcHRpb25z LmR1cmF0aW9uK3RoaXMuc3RhcnRUaW1lKXt0aGlzLm5vdz10aGlzLmVuZDt0aGlz LnBvcz10aGlzLnN0YXRlPTE7dGhpcy51cGRhdGUoKTt0aGlzLm9wdGlvbnMuY3Vy QW5pbVt0aGlzLnByb3BdPXRydWU7dmFyIGRvbmU9dHJ1ZTtmb3IodmFyIGkgaW4g dGhpcy5vcHRpb25zLmN1ckFuaW0pCmlmKHRoaXMub3B0aW9ucy5jdXJBbmltW2ld IT09dHJ1ZSkKZG9uZT1mYWxzZTtpZihkb25lKXtpZih0aGlzLm9wdGlvbnMuZGlz cGxheSE9bnVsbCl7dGhpcy5lbGVtLnN0eWxlLm92ZXJmbG93PXRoaXMub3B0aW9u cy5vdmVyZmxvdzt0aGlzLmVsZW0uc3R5bGUuZGlzcGxheT10aGlzLm9wdGlvbnMu ZGlzcGxheTtpZihqUXVlcnkuY3NzKHRoaXMuZWxlbSwiZGlzcGxheSIpPT0ibm9u ZSIpCnRoaXMuZWxlbS5zdHlsZS5kaXNwbGF5PSJibG9jayI7fQppZih0aGlzLm9w dGlvbnMuaGlkZSkKalF1ZXJ5KHRoaXMuZWxlbSkuaGlkZSgpO2lmKHRoaXMub3B0 aW9ucy5oaWRlfHx0aGlzLm9wdGlvbnMuc2hvdykKZm9yKHZhciBwIGluIHRoaXMu b3B0aW9ucy5jdXJBbmltKQpqUXVlcnkuYXR0cih0aGlzLmVsZW0uc3R5bGUscCx0 aGlzLm9wdGlvbnMub3JpZ1twXSk7dGhpcy5vcHRpb25zLmNvbXBsZXRlLmNhbGwo dGhpcy5lbGVtKTt9CnJldHVybiBmYWxzZTt9ZWxzZXt2YXIgbj10LXRoaXMuc3Rh cnRUaW1lO3RoaXMuc3RhdGU9bi90aGlzLm9wdGlvbnMuZHVyYXRpb247dGhpcy5w b3M9alF1ZXJ5LmVhc2luZ1t0aGlzLm9wdGlvbnMuZWFzaW5nfHwoalF1ZXJ5LmVh c2luZy5zd2luZz8ic3dpbmciOiJsaW5lYXIiKV0odGhpcy5zdGF0ZSxuLDAsMSx0 aGlzLm9wdGlvbnMuZHVyYXRpb24pO3RoaXMubm93PXRoaXMuc3RhcnQrKCh0aGlz LmVuZC10aGlzLnN0YXJ0KSp0aGlzLnBvcyk7dGhpcy51cGRhdGUoKTt9CnJldHVy biB0cnVlO319O2pRdWVyeS5leHRlbmQoalF1ZXJ5LmZ4LHtzcGVlZHM6e3Nsb3c6 NjAwLGZhc3Q6MjAwLF9kZWZhdWx0OjQwMH0sc3RlcDp7b3BhY2l0eTpmdW5jdGlv bihmeCl7alF1ZXJ5LmF0dHIoZnguZWxlbS5zdHlsZSwib3BhY2l0eSIsZngubm93 KTt9LF9kZWZhdWx0OmZ1bmN0aW9uKGZ4KXtpZihmeC5lbGVtLnN0eWxlJiZmeC5l bGVtLnN0eWxlW2Z4LnByb3BdIT1udWxsKQpmeC5lbGVtLnN0eWxlW2Z4LnByb3Bd PWZ4Lm5vdytmeC51bml0O2Vsc2UKZnguZWxlbVtmeC5wcm9wXT1meC5ub3c7fX19 KTtpZihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbImdldEJvdW5kaW5nQ2xpZW50 UmVjdCJdKQpqUXVlcnkuZm4ub2Zmc2V0PWZ1bmN0aW9uKCl7aWYoIXRoaXNbMF0p cmV0dXJue3RvcDowLGxlZnQ6MH07aWYodGhpc1swXT09PXRoaXNbMF0ub3duZXJE b2N1bWVudC5ib2R5KXJldHVybiBqUXVlcnkub2Zmc2V0LmJvZHlPZmZzZXQodGhp c1swXSk7dmFyIGJveD10aGlzWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGRv Yz10aGlzWzBdLm93bmVyRG9jdW1lbnQsYm9keT1kb2MuYm9keSxkb2NFbGVtPWRv Yy5kb2N1bWVudEVsZW1lbnQsY2xpZW50VG9wPWRvY0VsZW0uY2xpZW50VG9wfHxi b2R5LmNsaWVudFRvcHx8MCxjbGllbnRMZWZ0PWRvY0VsZW0uY2xpZW50TGVmdHx8 Ym9keS5jbGllbnRMZWZ0fHwwLHRvcD1ib3gudG9wKyhzZWxmLnBhZ2VZT2Zmc2V0 fHxqUXVlcnkuYm94TW9kZWwmJmRvY0VsZW0uc2Nyb2xsVG9wfHxib2R5LnNjcm9s bFRvcCktY2xpZW50VG9wLGxlZnQ9Ym94LmxlZnQrKHNlbGYucGFnZVhPZmZzZXR8 fGpRdWVyeS5ib3hNb2RlbCYmZG9jRWxlbS5zY3JvbGxMZWZ0fHxib2R5LnNjcm9s bExlZnQpLWNsaWVudExlZnQ7cmV0dXJue3RvcDp0b3AsbGVmdDpsZWZ0fTt9O2Vs c2UKalF1ZXJ5LmZuLm9mZnNldD1mdW5jdGlvbigpe2lmKCF0aGlzWzBdKXJldHVy bnt0b3A6MCxsZWZ0OjB9O2lmKHRoaXNbMF09PT10aGlzWzBdLm93bmVyRG9jdW1l bnQuYm9keSlyZXR1cm4galF1ZXJ5Lm9mZnNldC5ib2R5T2Zmc2V0KHRoaXNbMF0p O2pRdWVyeS5vZmZzZXQuaW5pdGlhbGl6ZWR8fGpRdWVyeS5vZmZzZXQuaW5pdGlh bGl6ZSgpO3ZhciBlbGVtPXRoaXNbMF0sb2Zmc2V0UGFyZW50PWVsZW0ub2Zmc2V0 UGFyZW50LHByZXZPZmZzZXRQYXJlbnQ9ZWxlbSxkb2M9ZWxlbS5vd25lckRvY3Vt ZW50LGNvbXB1dGVkU3R5bGUsZG9jRWxlbT1kb2MuZG9jdW1lbnRFbGVtZW50LGJv ZHk9ZG9jLmJvZHksZGVmYXVsdFZpZXc9ZG9jLmRlZmF1bHRWaWV3LHByZXZDb21w dXRlZFN0eWxlPWRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZWxlbSxudWxs KSx0b3A9ZWxlbS5vZmZzZXRUb3AsbGVmdD1lbGVtLm9mZnNldExlZnQ7d2hpbGUo KGVsZW09ZWxlbS5wYXJlbnROb2RlKSYmZWxlbSE9PWJvZHkmJmVsZW0hPT1kb2NF bGVtKXtjb21wdXRlZFN0eWxlPWRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUo ZWxlbSxudWxsKTt0b3AtPWVsZW0uc2Nyb2xsVG9wLGxlZnQtPWVsZW0uc2Nyb2xs TGVmdDtpZihlbGVtPT09b2Zmc2V0UGFyZW50KXt0b3ArPWVsZW0ub2Zmc2V0VG9w LGxlZnQrPWVsZW0ub2Zmc2V0TGVmdDtpZihqUXVlcnkub2Zmc2V0LmRvZXNOb3RB ZGRCb3JkZXImJiEoalF1ZXJ5Lm9mZnNldC5kb2VzQWRkQm9yZGVyRm9yVGFibGVB bmRDZWxscyYmL150KGFibGV8ZHxoKSQvaS50ZXN0KGVsZW0udGFnTmFtZSkpKQp0 b3ArPXBhcnNlSW50KGNvbXB1dGVkU3R5bGUuYm9yZGVyVG9wV2lkdGgsMTApfHww LGxlZnQrPXBhcnNlSW50KGNvbXB1dGVkU3R5bGUuYm9yZGVyTGVmdFdpZHRoLDEw KXx8MDtwcmV2T2Zmc2V0UGFyZW50PW9mZnNldFBhcmVudCxvZmZzZXRQYXJlbnQ9 ZWxlbS5vZmZzZXRQYXJlbnQ7fQppZihqUXVlcnkub2Zmc2V0LnN1YnRyYWN0c0Jv cmRlckZvck92ZXJmbG93Tm90VmlzaWJsZSYmY29tcHV0ZWRTdHlsZS5vdmVyZmxv dyE9PSJ2aXNpYmxlIikKdG9wKz1wYXJzZUludChjb21wdXRlZFN0eWxlLmJvcmRl clRvcFdpZHRoLDEwKXx8MCxsZWZ0Kz1wYXJzZUludChjb21wdXRlZFN0eWxlLmJv cmRlckxlZnRXaWR0aCwxMCl8fDA7cHJldkNvbXB1dGVkU3R5bGU9Y29tcHV0ZWRT dHlsZTt9CmlmKHByZXZDb21wdXRlZFN0eWxlLnBvc2l0aW9uPT09InJlbGF0aXZl Inx8cHJldkNvbXB1dGVkU3R5bGUucG9zaXRpb249PT0ic3RhdGljIikKdG9wKz1i b2R5Lm9mZnNldFRvcCxsZWZ0Kz1ib2R5Lm9mZnNldExlZnQ7aWYocHJldkNvbXB1 dGVkU3R5bGUucG9zaXRpb249PT0iZml4ZWQiKQp0b3ArPU1hdGgubWF4KGRvY0Vs ZW0uc2Nyb2xsVG9wLGJvZHkuc2Nyb2xsVG9wKSxsZWZ0Kz1NYXRoLm1heChkb2NF bGVtLnNjcm9sbExlZnQsYm9keS5zY3JvbGxMZWZ0KTtyZXR1cm57dG9wOnRvcCxs ZWZ0OmxlZnR9O307alF1ZXJ5Lm9mZnNldD17aW5pdGlhbGl6ZTpmdW5jdGlvbigp e2lmKHRoaXMuaW5pdGlhbGl6ZWQpcmV0dXJuO3ZhciBib2R5PWRvY3VtZW50LmJv ZHksY29udGFpbmVyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLGlubmVy RGl2LGNoZWNrRGl2LHRhYmxlLHRkLHJ1bGVzLHByb3AsYm9keU1hcmdpblRvcD1i b2R5LnN0eWxlLm1hcmdpblRvcCxodG1sPSc8ZGl2IHN0eWxlPSJwb3NpdGlvbjph YnNvbHV0ZTt0b3A6MDtsZWZ0OjA7bWFyZ2luOjA7Ym9yZGVyOjVweCBzb2xpZCAj MDAwO3BhZGRpbmc6MDt3aWR0aDoxcHg7aGVpZ2h0OjFweDsiPjxkaXY+PC9kaXY+ PC9kaXY+PHRhYmxlIHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0 OjA7bWFyZ2luOjA7Ym9yZGVyOjVweCBzb2xpZCAjMDAwO3BhZGRpbmc6MDt3aWR0 aDoxcHg7aGVpZ2h0OjFweDsiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0i MCI+PHRyPjx0ZD48L3RkPjwvdHI+PC90YWJsZT4nO3J1bGVzPXtwb3NpdGlvbjon YWJzb2x1dGUnLHRvcDowLGxlZnQ6MCxtYXJnaW46MCxib3JkZXI6MCx3aWR0aDon MXB4JyxoZWlnaHQ6JzFweCcsdmlzaWJpbGl0eTonaGlkZGVuJ307Zm9yKHByb3Ag aW4gcnVsZXMpY29udGFpbmVyLnN0eWxlW3Byb3BdPXJ1bGVzW3Byb3BdO2NvbnRh aW5lci5pbm5lckhUTUw9aHRtbDtib2R5Lmluc2VydEJlZm9yZShjb250YWluZXIs Ym9keS5maXJzdENoaWxkKTtpbm5lckRpdj1jb250YWluZXIuZmlyc3RDaGlsZCxj aGVja0Rpdj1pbm5lckRpdi5maXJzdENoaWxkLHRkPWlubmVyRGl2Lm5leHRTaWJs aW5nLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZDt0aGlzLmRvZXNOb3RBZGRCb3JkZXI9 KGNoZWNrRGl2Lm9mZnNldFRvcCE9PTUpO3RoaXMuZG9lc0FkZEJvcmRlckZvclRh YmxlQW5kQ2VsbHM9KHRkLm9mZnNldFRvcD09PTUpO2lubmVyRGl2LnN0eWxlLm92 ZXJmbG93PSdoaWRkZW4nLGlubmVyRGl2LnN0eWxlLnBvc2l0aW9uPSdyZWxhdGl2 ZSc7dGhpcy5zdWJ0cmFjdHNCb3JkZXJGb3JPdmVyZmxvd05vdFZpc2libGU9KGNo ZWNrRGl2Lm9mZnNldFRvcD09PS01KTtib2R5LnN0eWxlLm1hcmdpblRvcD0nMXB4 Jzt0aGlzLmRvZXNOb3RJbmNsdWRlTWFyZ2luSW5Cb2R5T2Zmc2V0PShib2R5Lm9m ZnNldFRvcD09PTApO2JvZHkuc3R5bGUubWFyZ2luVG9wPWJvZHlNYXJnaW5Ub3A7 Ym9keS5yZW1vdmVDaGlsZChjb250YWluZXIpO3RoaXMuaW5pdGlhbGl6ZWQ9dHJ1 ZTt9LGJvZHlPZmZzZXQ6ZnVuY3Rpb24oYm9keSl7alF1ZXJ5Lm9mZnNldC5pbml0 aWFsaXplZHx8alF1ZXJ5Lm9mZnNldC5pbml0aWFsaXplKCk7dmFyIHRvcD1ib2R5 Lm9mZnNldFRvcCxsZWZ0PWJvZHkub2Zmc2V0TGVmdDtpZihqUXVlcnkub2Zmc2V0 LmRvZXNOb3RJbmNsdWRlTWFyZ2luSW5Cb2R5T2Zmc2V0KQp0b3ArPXBhcnNlSW50 KGpRdWVyeS5jdXJDU1MoYm9keSwnbWFyZ2luVG9wJyx0cnVlKSwxMCl8fDAsbGVm dCs9cGFyc2VJbnQoalF1ZXJ5LmN1ckNTUyhib2R5LCdtYXJnaW5MZWZ0Jyx0cnVl KSwxMCl8fDA7cmV0dXJue3RvcDp0b3AsbGVmdDpsZWZ0fTt9fTtqUXVlcnkuZm4u ZXh0ZW5kKHtwb3NpdGlvbjpmdW5jdGlvbigpe3ZhciBsZWZ0PTAsdG9wPTAscmVz dWx0cztpZih0aGlzWzBdKXt2YXIgb2Zmc2V0UGFyZW50PXRoaXMub2Zmc2V0UGFy ZW50KCksb2Zmc2V0PXRoaXMub2Zmc2V0KCkscGFyZW50T2Zmc2V0PS9eYm9keXxo dG1sJC9pLnRlc3Qob2Zmc2V0UGFyZW50WzBdLnRhZ05hbWUpP3t0b3A6MCxsZWZ0 OjB9Om9mZnNldFBhcmVudC5vZmZzZXQoKTtvZmZzZXQudG9wLT1udW0odGhpcywn bWFyZ2luVG9wJyk7b2Zmc2V0LmxlZnQtPW51bSh0aGlzLCdtYXJnaW5MZWZ0Jyk7 cGFyZW50T2Zmc2V0LnRvcCs9bnVtKG9mZnNldFBhcmVudCwnYm9yZGVyVG9wV2lk dGgnKTtwYXJlbnRPZmZzZXQubGVmdCs9bnVtKG9mZnNldFBhcmVudCwnYm9yZGVy TGVmdFdpZHRoJyk7cmVzdWx0cz17dG9wOm9mZnNldC50b3AtcGFyZW50T2Zmc2V0 LnRvcCxsZWZ0Om9mZnNldC5sZWZ0LXBhcmVudE9mZnNldC5sZWZ0fTt9CnJldHVy biByZXN1bHRzO30sb2Zmc2V0UGFyZW50OmZ1bmN0aW9uKCl7dmFyIG9mZnNldFBh cmVudD10aGlzWzBdLm9mZnNldFBhcmVudHx8ZG9jdW1lbnQuYm9keTt3aGlsZShv ZmZzZXRQYXJlbnQmJighL15ib2R5fGh0bWwkL2kudGVzdChvZmZzZXRQYXJlbnQu dGFnTmFtZSkmJmpRdWVyeS5jc3Mob2Zmc2V0UGFyZW50LCdwb3NpdGlvbicpPT0n c3RhdGljJykpCm9mZnNldFBhcmVudD1vZmZzZXRQYXJlbnQub2Zmc2V0UGFyZW50 O3JldHVybiBqUXVlcnkob2Zmc2V0UGFyZW50KTt9fSk7alF1ZXJ5LmVhY2goWydM ZWZ0JywnVG9wJ10sZnVuY3Rpb24oaSxuYW1lKXt2YXIgbWV0aG9kPSdzY3JvbGwn K25hbWU7alF1ZXJ5LmZuW21ldGhvZF09ZnVuY3Rpb24odmFsKXtpZighdGhpc1sw XSlyZXR1cm4gbnVsbDtyZXR1cm4gdmFsIT09dW5kZWZpbmVkP3RoaXMuZWFjaChm dW5jdGlvbigpe3RoaXM9PXdpbmRvd3x8dGhpcz09ZG9jdW1lbnQ/d2luZG93LnNj cm9sbFRvKCFpP3ZhbDpqUXVlcnkod2luZG93KS5zY3JvbGxMZWZ0KCksaT92YWw6 alF1ZXJ5KHdpbmRvdykuc2Nyb2xsVG9wKCkpOnRoaXNbbWV0aG9kXT12YWw7fSk6 dGhpc1swXT09d2luZG93fHx0aGlzWzBdPT1kb2N1bWVudD9zZWxmW2k/J3BhZ2VZ T2Zmc2V0JzoncGFnZVhPZmZzZXQnXXx8alF1ZXJ5LmJveE1vZGVsJiZkb2N1bWVu dC5kb2N1bWVudEVsZW1lbnRbbWV0aG9kXXx8ZG9jdW1lbnQuYm9keVttZXRob2Rd OnRoaXNbMF1bbWV0aG9kXTt9O30pO2pRdWVyeS5lYWNoKFsiSGVpZ2h0IiwiV2lk dGgiXSxmdW5jdGlvbihpLG5hbWUpe3ZhciB0bD1pPyJMZWZ0IjoiVG9wIixicj1p PyJSaWdodCI6IkJvdHRvbSIsbG93ZXI9bmFtZS50b0xvd2VyQ2FzZSgpO2pRdWVy eS5mblsiaW5uZXIiK25hbWVdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbMF0/alF1 ZXJ5LmNzcyh0aGlzWzBdLGxvd2VyLGZhbHNlLCJwYWRkaW5nIik6bnVsbDt9O2pR dWVyeS5mblsib3V0ZXIiK25hbWVdPWZ1bmN0aW9uKG1hcmdpbil7cmV0dXJuIHRo aXNbMF0/alF1ZXJ5LmNzcyh0aGlzWzBdLGxvd2VyLGZhbHNlLG1hcmdpbj8ibWFy Z2luIjoiYm9yZGVyIik6bnVsbDt9O3ZhciB0eXBlPW5hbWUudG9Mb3dlckNhc2Uo KTtqUXVlcnkuZm5bdHlwZV09ZnVuY3Rpb24oc2l6ZSl7cmV0dXJuIHRoaXNbMF09 PXdpbmRvdz9kb2N1bWVudC5jb21wYXRNb2RlPT0iQ1NTMUNvbXBhdCImJmRvY3Vt ZW50LmRvY3VtZW50RWxlbWVudFsiY2xpZW50IituYW1lXXx8ZG9jdW1lbnQuYm9k eVsiY2xpZW50IituYW1lXTp0aGlzWzBdPT1kb2N1bWVudD9NYXRoLm1heChkb2N1 bWVudC5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIrbmFtZV0sZG9jdW1lbnQuYm9k eVsic2Nyb2xsIituYW1lXSxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbInNjcm9s bCIrbmFtZV0sZG9jdW1lbnQuYm9keVsib2Zmc2V0IituYW1lXSxkb2N1bWVudC5k b2N1bWVudEVsZW1lbnRbIm9mZnNldCIrbmFtZV0pOnNpemU9PT11bmRlZmluZWQ/ KHRoaXMubGVuZ3RoP2pRdWVyeS5jc3ModGhpc1swXSx0eXBlKTpudWxsKTp0aGlz LmNzcyh0eXBlLHR5cGVvZiBzaXplPT09InN0cmluZyI/c2l6ZTpzaXplKyJweCIp O307fSk7fSkoKTskaj1qUXVlcnkubm9Db25mbGljdCgpOw== ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline; filename=ajax.js Content-Type: application/x-javascript; charset=UTF-8; name=ajax.js Content-Location: http://bits.wikimedia.org/skins-1.5/common/ajax.js?281z67 Content-Transfer-Encoding: Base64 Ly8gcmVtb3RlIHNjcmlwdGluZyBsaWJyYXJ5Ci8vIChjKSBjb3B5cmlnaHQgMjAw NSBtb2Rlcm5tZXRob2QsIGluYwp2YXIgc2FqYXhfZGVidWdfbW9kZSA9IGZhbHNl Owp2YXIgc2FqYXhfcmVxdWVzdF90eXBlID0gIkdFVCI7CgovKioKKiBpZiBzYWph eF9kZWJ1Z19tb2RlIGlzIHRydWUsIHRoaXMgZnVuY3Rpb24gb3V0cHV0cyBnaXZl biB0aGUgbWVzc2FnZSBpbnRvIAoqIHRoZSBlbGVtZW50IHdpdGggaWQgPSBzYWph eF9kZWJ1ZzsgaWYgbm8gc3VjaCBlbGVtZW50IGV4aXN0cyBpbiB0aGUgZG9jdW1l bnQsIAoqIGl0IGlzIGluamVjdGVkLgoqLwpmdW5jdGlvbiBzYWpheF9kZWJ1Zyh0 ZXh0KSB7CglpZiAoIXNhamF4X2RlYnVnX21vZGUpIHJldHVybiBmYWxzZTsKCgl2 YXIgZT0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NhamF4X2RlYnVnJyk7CgoJ aWYgKCFlKSB7CgkJZT0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicCIpOwoJCWUu Y2xhc3NOYW1lPSAnc2FqYXhfZGVidWcnOwoJCWUuaWQ9ICdzYWpheF9kZWJ1Zyc7 CgoJCXZhciBiPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIp WzBdOwoKCQlpZiAoYi5maXJzdENoaWxkKSBiLmluc2VydEJlZm9yZShlLCBiLmZp cnN0Q2hpbGQpOwoJCWVsc2UgYi5hcHBlbmRDaGlsZChlKTsKCX0KCgl2YXIgbT0g ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CgltLmFwcGVuZENoaWxkKCBk b2N1bWVudC5jcmVhdGVUZXh0Tm9kZSggdGV4dCApICk7CgoJZS5hcHBlbmRDaGls ZCggbSApOwoKCXJldHVybiB0cnVlOwp9CgovKioKKiBjb21wYXRpYmlsaXR5IHdy YXBwZXIgZm9yIGNyZWF0aW5nIGEgbmV3IFhNTEh0dHBSZXF1ZXN0IG9iamVjdC4K Ki8KZnVuY3Rpb24gc2FqYXhfaW5pdF9vYmplY3QoKSB7CglzYWpheF9kZWJ1Zygi c2FqYXhfaW5pdF9vYmplY3QoKSBjYWxsZWQuLiIpCgl2YXIgQTsKCXRyeSB7CgkJ Ly8gVHJ5IHRoZSBuZXcgc3R5bGUgYmVmb3JlIEFjdGl2ZVggc28gd2UgZG9uJ3QK CQkvLyB1bm5lY2Vzc2FyaWx5IHRyaWdnZXIgd2FybmluZ3MgaW4gSUUgNyB3aGVu CgkJLy8gc2V0IHRvIHByb21wdCBhYm91dCBBY3RpdmVYIHVzYWdlCgkJQSA9IG5l dyBYTUxIdHRwUmVxdWVzdCgpOwoJfSBjYXRjaCAoZSkgewoJCXRyeSB7CgkJCUE9 bmV3IEFjdGl2ZVhPYmplY3QoIk1zeG1sMi5YTUxIVFRQIik7CgkJfSBjYXRjaCAo ZSkgewoJCQl0cnkgewoJCQkJQT1uZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0 LlhNTEhUVFAiKTsKCQkJfSBjYXRjaCAob2MpIHsKCQkJCUE9bnVsbDsKCQkJfQoJ CX0KCX0KCWlmICghQSkKCQlzYWpheF9kZWJ1ZygiQ291bGQgbm90IGNyZWF0ZSBj b25uZWN0aW9uIG9iamVjdC4iKTsKCglyZXR1cm4gQTsKfQoKLyoqCiogUGVyZm9y bSBhbiBhamF4IGNhbGwgdG8gbWVkaWF3aWtpLiBDYWxscyBhcmUgaGFuZGVsZWQg YnkgQWpheERpc3BhdGNoZXIucGhwCiogICBmdW5jX25hbWUgLSB0aGUgbmFtZSBv ZiB0aGUgZnVuY3Rpb24gdG8gY2FsbC4gTXVzdCBiZSByZWdpc3RlcmVkIGluICR3 Z0FqYXhFeHBvcnRMaXN0CiogICBhcmdzIC0gYW4gYXJyYXkgb2YgYXJndW1lbnRz IHRvIHRoYXQgZnVuY3Rpb24KKiAgIHRhcmdldCAtIHRoZSB0YXJnZXQgdGhhdCB3 aWxsIGhhbmRsZSB0aGUgcmVzdWx0IG9mIHRoZSBjYWxsLiBJZiB0aGlzIGlzIGEg ZnVuY3Rpb24sCiogICAgICAgICAgICBpZiB3aWxsIGJlIGNhbGxlZCB3aXRoIHRo ZSBYTUxIdHRwUmVxdWVzdCBhcyBhIHBhcmFtZXRlcjsgaWYgaXQncyBhbiBpbnB1 dAoqICAgICAgICAgICAgZWxlbWVudCwgaXRzIHZhbHVlIHdpbGwgYmUgc2V0IHRv IHRoZSByZXN1bHRUZXh0OyBpZiBpdCdzIGFub3RoZXIgdHlwZSBvZgoqICAgICAg ICAgICAgZWxlbWVudCwgaXRzIGlubmVySFRNTCB3aWxsIGJlIHNldCB0byB0aGUg cmVzdWx0VGV4dC4KKgoqIEV4YW1wbGU6CiogICAgc2FqYXhfZG9fY2FsbCgnZG9G b28nLCBbMSwgMiwgM10sIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzaG93Rm9v IikpOwoqCiogVGhpcyB3aWxsIGNhbGwgdGhlIGRvRm9vIGZ1bmN0aW9uIHZpYSBN ZWRpYVdpa2kncyBBamF4RGlzcGF0Y2hlciwgd2l0aAoqICgxLCAyLCAzKSBhcyB0 aGUgcGFyYW1ldGVyIGxpc3QsIGFuZCB3aWxsIHNob3cgdGhlIHJlc3VsdCBpbiB0 aGUgZWxlbWVudAoqIHdpdGggaWQgPSBzaG93Rm9vCiovCmZ1bmN0aW9uIHNhamF4 X2RvX2NhbGwoZnVuY19uYW1lLCBhcmdzLCB0YXJnZXQpIHsKCXZhciBpLCB4LCBu OwoJdmFyIHVyaTsKCXZhciBwb3N0X2RhdGE7Cgl1cmkgPSB3Z1NlcnZlciArCgkJ KCh3Z1NjcmlwdCA9PSBudWxsKSA/ICh3Z1NjcmlwdFBhdGggKyAiL2luZGV4LnBo cCIpIDogd2dTY3JpcHQpICsKCQkiP2FjdGlvbj1hamF4IjsKCWlmIChzYWpheF9y ZXF1ZXN0X3R5cGUgPT0gIkdFVCIpIHsKCQlpZiAodXJpLmluZGV4T2YoIj8iKSA9 PSAtMSkKCQkJdXJpID0gdXJpICsgIj9ycz0iICsgZW5jb2RlVVJJQ29tcG9uZW50 KGZ1bmNfbmFtZSk7CgkJZWxzZQoJCQl1cmkgPSB1cmkgKyAiJnJzPSIgKyBlbmNv ZGVVUklDb21wb25lbnQoZnVuY19uYW1lKTsKCQlmb3IgKGkgPSAwOyBpIDwgYXJn cy5sZW5ndGg7IGkrKykKCQkJdXJpID0gdXJpICsgIiZyc2FyZ3NbXT0iICsgZW5j b2RlVVJJQ29tcG9uZW50KGFyZ3NbaV0pOwoJCS8vdXJpID0gdXJpICsgIiZyc3Ju ZD0iICsgbmV3IERhdGUoKS5nZXRUaW1lKCk7CgkJcG9zdF9kYXRhID0gbnVsbDsK CX0gZWxzZSB7CgkJcG9zdF9kYXRhID0gInJzPSIgKyBlbmNvZGVVUklDb21wb25l bnQoZnVuY19uYW1lKTsKCQlmb3IgKGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkr KykKCQkJcG9zdF9kYXRhID0gcG9zdF9kYXRhICsgIiZyc2FyZ3NbXT0iICsgZW5j b2RlVVJJQ29tcG9uZW50KGFyZ3NbaV0pOwoJfQoJeCA9IHNhamF4X2luaXRfb2Jq ZWN0KCk7CglpZiAoIXgpIHsKCQlhbGVydCgiQUpBWCBub3Qgc3VwcG9ydGVkIik7 CgkJcmV0dXJuIGZhbHNlOwoJfQoKCXRyeSB7CgkJeC5vcGVuKHNhamF4X3JlcXVl c3RfdHlwZSwgdXJpLCB0cnVlKTsKCX0gY2F0Y2ggKGUpIHsKCQlpZiAod2luZG93 LmxvY2F0aW9uLmhvc3RuYW1lID09ICJsb2NhbGhvc3QiKSB7CgkJCWFsZXJ0KCJZ b3VyIGJyb3dzZXIgYmxvY2tzIFhNTEh0dHBSZXF1ZXN0IHRvICdsb2NhbGhvc3Qn LCB0cnkgdXNpbmcgYSByZWFsIGhvc3RuYW1lIGZvciBkZXZlbG9wbWVudC90ZXN0 aW5nLiIpOwoJCX0KCQl0aHJvdyBlOwoJfQoJaWYgKHNhamF4X3JlcXVlc3RfdHlw ZSA9PSAiUE9TVCIpIHsKCQl4LnNldFJlcXVlc3RIZWFkZXIoIk1ldGhvZCIsICJQ T1NUICIgKyB1cmkgKyAiIEhUVFAvMS4xIik7CgkJeC5zZXRSZXF1ZXN0SGVhZGVy KCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNv ZGVkIik7Cgl9Cgl4LnNldFJlcXVlc3RIZWFkZXIoIlByYWdtYSIsICJjYWNoZT15 ZXMiKTsKCXguc2V0UmVxdWVzdEhlYWRlcigiQ2FjaGUtQ29udHJvbCIsICJuby10 cmFuc2Zvcm0iKTsKCXgub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7 CgkJaWYgKHgucmVhZHlTdGF0ZSAhPSA0KQoJCQlyZXR1cm47CgoJCXNhamF4X2Rl YnVnKCJyZWNlaXZlZCAoIiArIHguc3RhdHVzICsgIiAiICsgeC5zdGF0dXNUZXh0 ICsgIikgIiArIHgucmVzcG9uc2VUZXh0KTsKCgkJLy9pZiAoeC5zdGF0dXMgIT0g MjAwKQoJCS8vCWFsZXJ0KCJFcnJvcjogIiArIHguc3RhdHVzICsgIiAiICsgeC5z dGF0dXNUZXh0ICsgIjogIiArIHgucmVzcG9uc2VUZXh0KTsKCQkvL2Vsc2UKCgkJ aWYgKCB0eXBlb2YoIHRhcmdldCApID09ICdmdW5jdGlvbicgKSB7CgkJCXRhcmdl dCggeCApOwoJCX0KCQllbHNlIGlmICggdHlwZW9mKCB0YXJnZXQgKSA9PSAnb2Jq ZWN0JyApIHsKCQkJaWYgKCB0YXJnZXQudGFnTmFtZSA9PSAnSU5QVVQnICkgewoJ CQkJaWYgKHguc3RhdHVzID09IDIwMCkgdGFyZ2V0LnZhbHVlPSB4LnJlc3BvbnNl VGV4dDsKCQkJCS8vZWxzZSBhbGVydCgiRXJyb3I6ICIgKyB4LnN0YXR1cyArICIg IiArIHguc3RhdHVzVGV4dCArICIgKCIgKyB4LnJlc3BvbnNlVGV4dCArICIpIik7 CgkJCX0KCQkJZWxzZSB7CgkJCQlpZiAoeC5zdGF0dXMgPT0gMjAwKSB0YXJnZXQu aW5uZXJIVE1MID0geC5yZXNwb25zZVRleHQ7CgkJCQllbHNlIHRhcmdldC5pbm5l ckhUTUw9ICI8ZGl2IGNsYXNzPSdlcnJvcic+RXJyb3I6ICIgKyB4LnN0YXR1cyAr ICIgIiArIHguc3RhdHVzVGV4dCArICIgKCIgKyB4LnJlc3BvbnNlVGV4dCArICIp PC9kaXY+IjsKCQkJfQoJCX0KCQllbHNlIHsKCQkJYWxlcnQoImJhZCB0YXJnZXQg Zm9yIHNhamF4X2RvX2NhbGw6IG5vdCBhIGZ1bmN0aW9uIG9yIG9iamVjdDogIiAr IHRhcmdldCk7CgkJfQoKCQlyZXR1cm47Cgl9CgoJc2FqYXhfZGVidWcoZnVuY19u YW1lICsgIiB1cmkgPSAiICsgdXJpICsgIiAvIHBvc3QgPSAiICsgcG9zdF9kYXRh KTsKCXguc2VuZChwb3N0X2RhdGEpOwoJc2FqYXhfZGVidWcoZnVuY19uYW1lICsg IiB3YWl0aW5nLi4iKTsKCWRlbGV0ZSB4OwoKCXJldHVybiB0cnVlOwp9CgovKioK ICogQHJldHVybiBib29sZWFuIHdoZXRoZXIgdGhlIGJyb3dzZXIgc3VwcG9ydHMg WE1MSHR0cFJlcXVlc3QKICovCmZ1bmN0aW9uIHdmU3VwcG9ydHNBamF4KCkgewoJ dmFyIHJlcXVlc3QgPSBzYWpheF9pbml0X29iamVjdCgpOwoJdmFyIHN1cHBvcnRz QWpheCA9IHJlcXVlc3QgPyB0cnVlIDogZmFsc2U7CglkZWxldGUgcmVxdWVzdDsK CXJldHVybiBzdXBwb3J0c0FqYXg7Cn0KCg== ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline; filename=mwsuggest.js Content-Type: application/x-javascript; charset=UTF-8; name=mwsuggest.js Content-Location: http://bits.wikimedia.org/skins-1.5/common/mwsuggest.js?281z67 Content-Transfer-Encoding: Base64 LyoKICogT3BlblNlYXJjaCBhamF4IHN1Z2dlc3Rpb24gZW5naW5lIGZvciBNZWRp YVdpa2kKICoKICogdXNlcyBjb3JlIE1lZGlhV2lraSBvcGVuIHNlYXJjaCBzdXBw b3J0IHRvIGZldGNoIHN1Z2dlc3Rpb25zCiAqIGFuZCBzaG93IHRoZW0gYmVsb3cg c2VhcmNoIGJveGVzIGFuZCBvdGhlciBpbnB1dHMKICoKICogYnkgUm9iZXJ0IFN0 b2puaWMgKEFwcmlsIDIwMDgpCiAqLwoKLy8gc2VhcmNoX2JveF9pZCAtPiBSZXN1 bHRzIG9iamVjdAp2YXIgb3NfbWFwID0ge307Ci8vIGNhY2hlZCBkYXRhLCB1cmwg LT4ganNvbl90ZXh0CnZhciBvc19jYWNoZSA9IHt9OwovLyBnbG9iYWwgdmFyaWFi bGVzIGZvciBzdWdnZXN0X2tleXByZXNzCnZhciBvc19jdXJfa2V5cHJlc3NlZCA9 IDA7CnZhciBvc19rZXlwcmVzc2VkX2NvdW50ID0gMDsKLy8gdHlwZTogVGltZXIK dmFyIG9zX3RpbWVyID0gbnVsbDsKLy8gdGllIG1vdXNlZG93bi91cCBldmVudHMK dmFyIG9zX21vdXNlX3ByZXNzZWQgPSBmYWxzZTsKdmFyIG9zX21vdXNlX251bSA9 IC0xOwovLyBpZiB0cnVlLCB0aGUgbGFzdCBjaGFuZ2Ugd2FzIG1hZGUgYnkgbW91 c2UgKGFuZCBub3Qga2V5Ym9hcmQpCnZhciBvc19tb3VzZV9tb3ZlZCA9IGZhbHNl OwovLyBkZWxheSBiZXR3ZWVuIGtleXByZXNzIGFuZCBzdWdnZXN0aW9uIChpbiBt cykKdmFyIG9zX3NlYXJjaF90aW1lb3V0ID0gMjUwOwovLyB0aGVzZSBwYWlycyBv ZiBpbnB1dHMvZm9ybXMgd2lsbCBiZSBhdXRvbG9hZGVkIGF0IHN0YXJ0dXAKdmFy IG9zX2F1dG9sb2FkX2lucHV0cyA9IG5ldyBBcnJheSgnc2VhcmNoSW5wdXQnLCAn c2VhcmNoSW5wdXQyJywgJ3Bvd2VyU2VhcmNoVGV4dCcsICdzZWFyY2hUZXh0Jyk7 CnZhciBvc19hdXRvbG9hZF9mb3JtcyA9IG5ldyBBcnJheSgnc2VhcmNoZm9ybScs ICdzZWFyY2hmb3JtMicsICdwb3dlcnNlYXJjaCcsICdzZWFyY2gnICk7Ci8vIGlm IHdlIHN0b3BwZWQgdGhlIHNlcnZpY2UKdmFyIG9zX2lzX3N0b3BwZWQgPSBmYWxz ZTsKLy8gbWF4IGxpbmVzIHRvIHNob3cgaW4gc3VnZ2VzdCB0YWJsZQp2YXIgb3Nf bWF4X2xpbmVzX3Blcl9zdWdnZXN0ID0gNzsKLy8gbnVtYmVyIG9mIHN0ZXBzIHRv IGFuaW1hdGUgZXhwYW5zaW9uL2NvbnRyYWN0aW9uIG9mIGNvbnRhaW5lciB3aWR0 aAp2YXIgb3NfYW5pbWF0aW9uX3N0ZXBzID0gNjsKLy8gbnVtIG9mIHBpeGVscyBv ZiBzbWFsbGVzdCBzdGVwCnZhciBvc19hbmltYXRpb25fbWluX3N0ZXAgPSAyOwov LyBkZWxheSBiZXR3ZWVuIHN0ZXBzIChpbiBtcykKdmFyIG9zX2FuaW1hdGlvbl9k ZWxheSA9IDMwOwovLyBtYXggd2lkdGggb2YgY29udGFpbmVyIGluIHBlcmNlbnQg b2Ygbm9ybWFsIHNpemUgKDEgPT0gMTAwJSkKdmFyIG9zX2NvbnRhaW5lcl9tYXhf d2lkdGggPSAyOwovLyBjdXJyZW50bHkgYWN0aXZlIGFuaW1hdGlvbiB0aW1lcgp2 YXIgb3NfYW5pbWF0aW9uX3RpbWVyID0gbnVsbDsKLyoqCiAqIDxkYXRhbGlzdD4g aXMgYSBuZXcgSFRNTDUgZWxlbWVudCB0aGF0IGFsbG93cyB5b3UgdG8gbWFudWFs bHkgc3VwcGx5CiAqIHN1Z2dlc3Rpb24gbGlzdHMgYW5kIGhhdmUgdGhlbSByZW5k ZXJlZCBhY2NvcmRpbmcgdG8gdGhlIHJpZ2h0IHBsYXRmb3JtCiAqIGNvbnZlbnRp b25zLiAgSG93ZXZlciwgdGhlIG9ubHkgc2hpcHBpbmcgYnJvd3NlciBhcyBvZiBl YXJseSAyMDEwIGlzIE9wZXJhLAogKiBhbmQgdGhhdCBoYXMgYSBmYXRhbCBwcm9i bGVtOiB0aGUgc3VnZ2VzdGlvbiBsYWdzIGJlaGluZCB3aGF0IHRoZSB1c2VyIHR5 cGVzCiAqIGJ5IG9uZSBrZXlwcmVzcy4gIChSZXBvcnRlZCBhcyBEU0stMjc2ODcw IHRvIE9wZXJhJ3Mgc2VjcmV0IGJ1ZyB0cmFja2VyLikKICogVGhlIGNvZGUgaGVy ZSBvdGhlcndpc2Ugc2VlbXMgdG8gd29yaywgdGhvdWdoLCBzbyB0aGlzIGNhbiBi ZSBmbGlwcGVkIG9uCiAqIChtYXliZSB3aXRoIGEgVUEgY2hlY2spIHdoZW4gc29t ZSBicm93c2VyIGhhcyBhIGJldHRlciBpbXBsZW1lbnRhdGlvbi4KICovCi8vIHZh ciBvc191c2VfZGF0YWxpc3QgPSAnbGlzdCcgaW4gZG9jdW1lbnQuY3JlYXRlRWxl bWVudCggJ2lucHV0JyApOwp2YXIgb3NfdXNlX2RhdGFsaXN0ID0gZmFsc2U7Cgov KiogVGltZW91dCB0aW1lciBjbGFzcyB0aGF0IHdpbGwgZmV0Y2ggdGhlIHJlc3Vs dHMgKi8KZnVuY3Rpb24gb3NfVGltZXIoIGlkLCByLCBxdWVyeSApIHsKCXRoaXMu aWQgPSBpZDsKCXRoaXMuciA9IHI7Cgl0aGlzLnF1ZXJ5ID0gcXVlcnk7Cn0KCi8q KiBQcm9wZXJ0eSBjbGFzcyBmb3Igc2luZ2xlIHNlYXJjaCBib3ggKi8KZnVuY3Rp b24gb3NfUmVzdWx0cyggbmFtZSwgZm9ybW5hbWUgKSB7Cgl0aGlzLnNlYXJjaGZv cm0gPSBmb3JtbmFtZTsgLy8gaWQgb2YgdGhlIHNlYXJjaGZvcm0KCXRoaXMuc2Vh cmNoYm94ID0gbmFtZTsgLy8gaWQgb2YgdGhlIHNlYXJjaGJveAoJdGhpcy5jb250 YWluZXIgPSBuYW1lICsgJ1N1Z2dlc3QnOyAvLyBkaXYgdGhhdCBob2xkcyByZXN1 bHRzCgl0aGlzLnJlc3VsdFRhYmxlID0gbmFtZSArICdSZXN1bHQnOyAvLyBpZCBi YXNlIGZvciB0aGUgcmVzdWx0IHRhYmxlICgrbnVtID0gdGFibGUgcm93KQoJdGhp cy5yZXN1bHRUZXh0ID0gbmFtZSArICdSZXN1bHRUZXh0JzsgLy8gaWQgYmFzZSBm b3IgdGhlIHNwYW5zIHdpdGhpbiByZXN1bHQgdGFibGVzICgrbnVtKQoJdGhpcy50 b2dnbGUgPSBuYW1lICsgJ1RvZ2dsZSc7IC8vIGRpdiB0aGF0IGhhcyB0aGUgdG9n Z2xlIChlbmFibGUvZGlzYWJsZSkgbGluawoJdGhpcy5xdWVyeSA9IG51bGw7IC8v IGxhc3QgcHJvY2Vzc2VkIHF1ZXJ5Cgl0aGlzLnJlc3VsdHMgPSBudWxsOyAgLy8g cGFyc2VkIHRpdGxlcwoJdGhpcy5yZXN1bHRDb3VudCA9IDA7IC8vIG51bWJlciBv ZiByZXN1bHRzCgl0aGlzLm9yaWdpbmFsID0gbnVsbDsgLy8gcXVlcnkgdGhhdCB1 c2VyIGVudGVyZWQKCXRoaXMuc2VsZWN0ZWQgPSAtMTsgLy8gd2hpY2ggcmVzdWx0 IGlzIHNlbGVjdGVkCgl0aGlzLmNvbnRhaW5lckNvdW50ID0gMDsgLy8gbnVtYmVy IG9mIHJlc3VsdHMgdmlzaWJsZSBpbiBjb250YWluZXIKCXRoaXMuY29udGFpbmVy Um93ID0gMDsgLy8gaGVpZ2h0IG9mIHJlc3VsdCBmaWVsZCBpbiB0aGUgY29udGFp bmVyCgl0aGlzLmNvbnRhaW5lclRvdGFsID0gMDsgLy8gdG90YWwgaGVpZ2h0IG9m IHRoZSBjb250YWluZXIgd2lsbCBhbGwgcmVzdWx0cwoJdGhpcy52aXNpYmxlID0g ZmFsc2U7IC8vIGlmIGNvbnRhaW5lciBpcyB2aXNpYmxlCgl0aGlzLnN0YXlIaWRk ZW4gPSBmYWxzZTsgLy8gZG9uJ3QgdHJ5IHRvIHNob3cgaWYgbG9zdCBmb2N1cwp9 CgovKiogVGltZXIgdXNlciB0byBhbmltYXRlIGV4cGFuc2lvbi9jb250cmFjdGlv biBvZiBjb250YWluZXIgd2lkdGggKi8KZnVuY3Rpb24gb3NfQW5pbWF0aW9uVGlt ZXIoIHIsIHRhcmdldCApIHsKCXRoaXMuciA9IHI7Cgl2YXIgY3VycmVudCA9IGRv Y3VtZW50LmdldEVsZW1lbnRCeUlkKHIuY29udGFpbmVyKS5vZmZzZXRXaWR0aDsK CXRoaXMuaW5jID0gTWF0aC5yb3VuZCggKCB0YXJnZXQgLSBjdXJyZW50ICkgLyBv c19hbmltYXRpb25fc3RlcHMgKTsKCWlmKCB0aGlzLmluYyA8IG9zX2FuaW1hdGlv bl9taW5fc3RlcCAmJiB0aGlzLmluYyA+PTAgKSB7CgkJdGhpcy5pbmMgPSBvc19h bmltYXRpb25fbWluX3N0ZXA7IC8vIG1pbmltYWwgYW5pbWF0aW9uIHN0ZXAKCX0K CWlmKCB0aGlzLmluYyA+IC1vc19hbmltYXRpb25fbWluX3N0ZXAgJiYgdGhpcy5p bmMgPCAwICkgewoJCXRoaXMuaW5jID0gLW9zX2FuaW1hdGlvbl9taW5fc3RlcDsK CX0KCXRoaXMudGFyZ2V0ID0gdGFyZ2V0Owp9CgovKioqKioqKioqKioqKioqKioq CiAqIEluaXRpYWxpemF0aW9uCiAqKioqKioqKioqKioqKioqKiovCgovKiogSW5p dGlhbGl6YXRpb24sIGNhbGwgdXBvbiBwYWdlIG9ubG9hZCAqLwpmdW5jdGlvbiBv c19NV1N1Z2dlc3RJbml0KCkgewoJZm9yKCBpID0gMDsgaSA8IG9zX2F1dG9sb2Fk X2lucHV0cy5sZW5ndGg7IGkrKyApIHsKCQl2YXIgaWQgPSBvc19hdXRvbG9hZF9p bnB1dHNbaV07CgkJdmFyIGZvcm0gPSBvc19hdXRvbG9hZF9mb3Jtc1tpXTsKCQll bGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIGlkICk7CgkJaWYoIGVs ZW1lbnQgIT0gbnVsbCApIHsKCQkJb3NfaW5pdEhhbmRsZXJzKCBpZCwgZm9ybSwg ZWxlbWVudCApOwoJCX0KCX0KfQoKLyoqIEluaXQgUmVzdWx0IG9iamVjdHMgYW5k IGV2ZW50IGhhbmRsZXJzICovCmZ1bmN0aW9uIG9zX2luaXRIYW5kbGVycyggbmFt ZSwgZm9ybW5hbWUsIGVsZW1lbnQgKSB7Cgl2YXIgciA9IG5ldyBvc19SZXN1bHRz KCBuYW1lLCBmb3JtbmFtZSApOwoJLy8gZXZlbnQgaGFuZGxlcgoJb3NfaG9va0V2 ZW50KCBlbGVtZW50LCAna2V5dXAnLCBmdW5jdGlvbiggZXZlbnQgKSB7IG9zX2V2 ZW50S2V5dXAoIGV2ZW50ICk7IH0gKTsKCW9zX2hvb2tFdmVudCggZWxlbWVudCwg J2tleWRvd24nLCBmdW5jdGlvbiggZXZlbnQgKSB7IG9zX2V2ZW50S2V5ZG93bigg ZXZlbnQgKTsgfSApOwoJb3NfaG9va0V2ZW50KCBlbGVtZW50LCAna2V5cHJlc3Mn LCBmdW5jdGlvbiggZXZlbnQgKSB7IG9zX2V2ZW50S2V5cHJlc3MoIGV2ZW50ICk7 IH0gKTsKCWlmICggIW9zX3VzZV9kYXRhbGlzdCApIHsKCQkvLyBUaGVzZSBhcmUg bmVlZGVkIGZvciB0aGUgZGl2IGhhY2sgdG8gaGlkZSBpdCBpZiB0aGUgdXNlciBi bHVycy4KCQlvc19ob29rRXZlbnQoIGVsZW1lbnQsICdibHVyJywgZnVuY3Rpb24o IGV2ZW50ICkgeyBvc19ldmVudEJsdXIoIGV2ZW50ICk7IH0gKTsKCQlvc19ob29r RXZlbnQoIGVsZW1lbnQsICdmb2N1cycsIGZ1bmN0aW9uKCBldmVudCApIHsgb3Nf ZXZlbnRGb2N1cyggZXZlbnQgKTsgfSApOwoJCS8vIFdlIGRvbid0IHdhbnQgYnJv d3NlciBhdXRvLXN1Z2dlc3Rpb25zIGludGVyZmVyaW5nIHdpdGggb3VyIGRpdiwg YnV0CgkJLy8gYXV0b2NvbXBsZXRlIG11c3QgYmUgb24gZm9yIGRhdGFsaXN0IHRv IHdvcmsgKGF0IGxlYXN0IGluIE9wZXJhCgkJLy8gMTAuMTApLgoJCWVsZW1lbnQu c2V0QXR0cmlidXRlKCAnYXV0b2NvbXBsZXRlJywgJ29mZicgKTsKCX0KCS8vIHN0 b3BwaW5nIGhhbmRsZXIKCW9zX2hvb2tFdmVudCggZG9jdW1lbnQuZ2V0RWxlbWVu dEJ5SWQoIGZvcm1uYW1lICksICdzdWJtaXQnLCBmdW5jdGlvbiggZXZlbnQgKSB7 IHJldHVybiBvc19ldmVudE9uc3VibWl0KCBldmVudCApOyB9ICk7Cglvc19tYXBb bmFtZV0gPSByOwoJLy8gdG9nZ2xlIGxpbmsKCWlmKCBkb2N1bWVudC5nZXRFbGVt ZW50QnlJZCggci50b2dnbGUgKSA9PSBudWxsICkgewoJCS8vIFRPRE86IGRpc2Fi bGUgdGhpcyB3aGlsZSB3ZSBmaWd1cmUgb3V0IGEgd2F5IGZvciB0aGlzIHRvIHdv cmsgaW4gYWxsIGJyb3dzZXJzCgkJLyogaWYoIG5hbWUgPT0gJ3NlYXJjaElucHV0 JyApIHsKCQkJLy8gc3BlY2lhbCBjYXNlOiBwbGFjZSBhYm92ZSB0aGUgbWFpbiBz ZWFyY2ggYm94CgkJCXZhciB0ID0gb3NfY3JlYXRlVG9nZ2xlKCByLCAnb3Mtc3Vn Z2VzdC10b2dnbGUnICk7CgkJCXZhciBzZWFyY2hCb2R5ID0gZG9jdW1lbnQuZ2V0 RWxlbWVudEJ5SWQoICdzZWFyY2hCb2R5JyApOwoJCQl2YXIgZmlyc3QgPSBzZWFy Y2hCb2R5LnBhcmVudE5vZGUuZmlyc3RDaGlsZC5uZXh0U2libGluZy5hcHBlbmRD aGlsZCh0KTsKCQl9IGVsc2UgewoJCQkvLyBkZWZhdWx0OiBwbGFjZSBiZWxvdyBz ZWFyY2ggYm94IHRvIHRoZSByaWdodAoJCQl2YXIgdCA9IG9zX2NyZWF0ZVRvZ2ds ZSggciwgJ29zLXN1Z2dlc3QtdG9nZ2xlLWRlZicgKTsKCQkJdmFyIHRvcCA9IGVs ZW1lbnQub2Zmc2V0VG9wICsgZWxlbWVudC5vZmZzZXRIZWlnaHQ7CgkJCXZhciBs ZWZ0ID0gZWxlbWVudC5vZmZzZXRMZWZ0ICsgZWxlbWVudC5vZmZzZXRXaWR0aDsK CQkJdC5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7CgkJCXQuc3R5bGUudG9w ID0gdG9wICsgJ3B4JzsKCQkJdC5zdHlsZS5sZWZ0ID0gbGVmdCArICdweCc7CgkJ CWVsZW1lbnQucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCggdCApOwoJCQkvLyBvbmx5 IG5vdyB3aWR0aCBnZXRzIGNhbGN1bGF0ZWQsIHNoaWZ0IHJpZ2h0CgkJCWxlZnQg LT0gdC5vZmZzZXRXaWR0aDsKCQkJdC5zdHlsZS5sZWZ0ID0gbGVmdCArICdweCc7 CgkJCXQuc3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJzsKCQl9ICovCgl9Cgp9 CgpmdW5jdGlvbiBvc19ob29rRXZlbnQoIGVsZW1lbnQsIGhvb2tOYW1lLCBob29r RnVuY3QgKSB7CglpZiAoIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lciApIHsKCQll bGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIGhvb2tOYW1lLCBob29rRnVuY3QsIGZh bHNlICk7Cgl9IGVsc2UgaWYgKCB3aW5kb3cuYXR0YWNoRXZlbnQgKSB7CgkJZWxl bWVudC5hdHRhY2hFdmVudCggJ29uJyArIGhvb2tOYW1lLCBob29rRnVuY3QgKTsK CX0KfQoKLyoqKioqKioqKioqKioqKioqKioqCiAqICBLZXlib2FyZCBldmVudHMK ICoqKioqKioqKioqKioqKioqKioqLwoKLyoqIEV2ZW50IGhhbmRsZXIgdGhhdCB3 aWxsIGZldGNoIHJlc3VsdHMgb24ga2V5dXAgKi8KZnVuY3Rpb24gb3NfZXZlbnRL ZXl1cCggZSApIHsKCXZhciB0YXJnID0gb3NfZ2V0VGFyZ2V0KCBlICk7Cgl2YXIg ciA9IG9zX21hcFt0YXJnLmlkXTsKCWlmKCByID09IG51bGwgKSB7CgkJcmV0dXJu OyAvLyBub3Qgb3VyIGV2ZW50Cgl9CgoJLy8gc29tZSBicm93c2VycyB3b24ndCBn ZW5lcmF0ZSBrZXlwcmVzc2VkIGZvciBhcnJvdyBrZXlzLCBjYXRjaCBpdAoJaWYo IG9zX2tleXByZXNzZWRfY291bnQgPT0gMCApIHsKCQlvc19wcm9jZXNzS2V5KCBy LCBvc19jdXJfa2V5cHJlc3NlZCwgdGFyZyApOwoJfQoJdmFyIHF1ZXJ5ID0gdGFy Zy52YWx1ZTsKCW9zX2ZldGNoUmVzdWx0cyggciwgcXVlcnksIG9zX3NlYXJjaF90 aW1lb3V0ICk7Cn0KCi8qKiBjYXRjaCBhcnJvd3MgdXAvZG93biBhbmQgZXNjYXBl IHRvIGhpZGUgdGhlIHN1Z2dlc3Rpb25zICovCmZ1bmN0aW9uIG9zX3Byb2Nlc3NL ZXkoIHIsIGtleXByZXNzZWQsIHRhcmcgKSB7CglpZiAoIGtleXByZXNzZWQgPT0g NDAgJiYgIXIudmlzaWJsZSAmJiBvc190aW1lciA9PSBudWxsICkgewoJCS8vIElm IHRoZSB1c2VyIGhpdHMgdGhlIGRvd24gYXJyb3csIGZldGNoIHJlc3VsdHMgaW1t ZWRpYXRlbHkgaWYgbm9uZQoJCS8vIGFyZSBhbHJlYWR5IGRpc3BsYXllZC4KCQly LnF1ZXJ5ID0gJyc7CgkJb3NfZmV0Y2hSZXN1bHRzKCByLCB0YXJnLnZhbHVlLCAw ICk7Cgl9CgkvLyBPdGhlcndpc2UsIGlmIHdlJ3JlIG5vdCB1c2luZyBkYXRhbGlz dCwgd2UgbmVlZCB0byBoYW5kbGUgc2Nyb2xsaW5nIGFuZAoJLy8gc28gb24uCglp ZiAoIG9zX3VzZV9kYXRhbGlzdCApIHsKCQlyZXR1cm47Cgl9CglpZiAoIGtleXBy ZXNzZWQgPT0gNDAgKSB7IC8vIEFycm93IERvd24KCQlpZiAoIHIudmlzaWJsZSAp IHsKCQkJb3NfY2hhbmdlSGlnaGxpZ2h0KCByLCByLnNlbGVjdGVkLCByLnNlbGVj dGVkICsgMSwgdHJ1ZSApOwoJCX0KCX0gZWxzZSBpZiAoIGtleXByZXNzZWQgPT0g MzggKSB7IC8vIEFycm93IFVwCgkJaWYgKCByLnZpc2libGUgKSB7CgkJCW9zX2No YW5nZUhpZ2hsaWdodCggciwgci5zZWxlY3RlZCwgci5zZWxlY3RlZCAtIDEsIHRy dWUgKTsKCQl9Cgl9IGVsc2UgaWYoIGtleXByZXNzZWQgPT0gMjcgKSB7IC8vIEVz Y2FwZQoJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCByLnNlYXJjaGJveCApLnZh bHVlID0gci5vcmlnaW5hbDsKCQlyLnF1ZXJ5ID0gci5vcmlnaW5hbDsKCQlvc19o aWRlUmVzdWx0cyggciApOwoJfSBlbHNlIGlmKCByLnF1ZXJ5ICE9IGRvY3VtZW50 LmdldEVsZW1lbnRCeUlkKCByLnNlYXJjaGJveCApLnZhbHVlICkgewoJCS8vIG9z X2hpZGVSZXN1bHRzKCByICk7IC8vIGRvbid0IHNob3cgb2xkIHN1Z2dlc3Rpb25z Cgl9Cn0KCi8qKiBXaGVuIGtleXMgaXMgaGVsZCBkb3duIHVzZSBhIHRpbWVyIHRv IG91dHB1dCByZWd1bGFyIGV2ZW50cyAqLwpmdW5jdGlvbiBvc19ldmVudEtleXBy ZXNzKCBlICkgewoJdmFyIHRhcmcgPSBvc19nZXRUYXJnZXQoIGUgKTsKCXZhciBy ID0gb3NfbWFwW3RhcmcuaWRdOwoJaWYoIHIgPT0gbnVsbCApIHsKCQlyZXR1cm47 IC8vIG5vdCBvdXIgZXZlbnQKCX0KCgl2YXIga2V5cHJlc3NlZCA9IG9zX2N1cl9r ZXlwcmVzc2VkOwoKCW9zX2tleXByZXNzZWRfY291bnQrKzsKCW9zX3Byb2Nlc3NL ZXkoIHIsIGtleXByZXNzZWQsIHRhcmcgKTsKfQoKLyoqIENhdGNoIHRoZSBrZXkg Y29kZSAoRmlyZWZveCBidWcpICovCmZ1bmN0aW9uIG9zX2V2ZW50S2V5ZG93bigg ZSApIHsKCWlmICggIWUgKSB7CgkJZSA9IHdpbmRvdy5ldmVudDsKCX0KCXZhciB0 YXJnID0gb3NfZ2V0VGFyZ2V0KCBlICk7Cgl2YXIgciA9IG9zX21hcFt0YXJnLmlk XTsKCWlmKCByID09IG51bGwgKSB7CgkJcmV0dXJuOyAvLyBub3Qgb3VyIGV2ZW50 Cgl9CgoJb3NfbW91c2VfbW92ZWQgPSBmYWxzZTsKCglvc19jdXJfa2V5cHJlc3Nl ZCA9ICggZS5rZXlDb2RlID09IHVuZGVmaW5lZCApID8gZS53aGljaCA6IGUua2V5 Q29kZTsKCW9zX2tleXByZXNzZWRfY291bnQgPSAwOwp9CgoKLyoqIFdoZW4gdGhl IGZvcm0gaXMgc3VibWl0dGVkIGhpZGUgZXZlcnl0aGluZywgY2FuY2VsIHVwZGF0 ZXMuLi4gKi8KZnVuY3Rpb24gb3NfZXZlbnRPbnN1Ym1pdCggZSApIHsKCXZhciB0 YXJnID0gb3NfZ2V0VGFyZ2V0KCBlICk7CgoJb3NfaXNfc3RvcHBlZCA9IHRydWU7 CgkvLyBraWxsIHRpbWVkIHJlcXVlc3RzCglpZiggb3NfdGltZXIgIT0gbnVsbCAm JiBvc190aW1lci5pZCAhPSBudWxsICkgewoJCWNsZWFyVGltZW91dCggb3NfdGlt ZXIuaWQgKTsKCQlvc190aW1lciA9IG51bGw7Cgl9CgkvLyBIaWRlIGFsbCBzdWdn ZXN0aW9ucwoJZm9yKCBpID0gMDsgaSA8IG9zX2F1dG9sb2FkX2lucHV0cy5sZW5n dGg7IGkrKyApIHsKCQl2YXIgciA9IG9zX21hcFtvc19hdXRvbG9hZF9pbnB1dHNb aV1dOwoJCWlmKCByICE9IG51bGwgKSB7CgkJCXZhciBiID0gZG9jdW1lbnQuZ2V0 RWxlbWVudEJ5SWQoIHIuc2VhcmNoZm9ybSApOwoJCQlpZiggYiAhPSBudWxsICYm IGIgPT0gdGFyZyApIHsKCQkJCS8vIHNldCBxdWVyeSB2YWx1ZSBzbyB0aGUgaGFu ZGxlciB3b24ndCB0cnkgdG8gZmV0Y2ggYWRkaXRpb25hbCByZXN1bHRzCgkJCQly LnF1ZXJ5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIHIuc2VhcmNoYm94ICku dmFsdWU7CgkJCX0KCQkJb3NfaGlkZVJlc3VsdHMoIHIgKTsKCQl9Cgl9CglyZXR1 cm4gdHJ1ZTsKfQoKCgovKiogSGlkZSByZXN1bHRzIGZyb20gdGhlIHVzZXIsIGVp dGhlciBtYWtpbmcgdGhlIGRpdiB2aXNpYmlsaXR5PWhpZGRlbiBvcgogKiBkZXRh Y2hpbmcgdGhlIGRhdGFsaXN0IGZyb20gdGhlIGlucHV0LiAqLwpmdW5jdGlvbiBv c19oaWRlUmVzdWx0cyggciApIHsKCWlmICggb3NfdXNlX2RhdGFsaXN0ICkgewoJ CWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCByLnNlYXJjaGJveCApLnNldEF0dHJp YnV0ZSggJ2xpc3QnLCAnJyApOwoJfSBlbHNlIHsKCQl2YXIgYyA9IGRvY3VtZW50 LmdldEVsZW1lbnRCeUlkKCByLmNvbnRhaW5lciApOwoJCWlmICggYyAhPSBudWxs ICkgewoJCQljLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJzsKCQl9Cgl9Cgly LnZpc2libGUgPSBmYWxzZTsKCXIuc2VsZWN0ZWQgPSAtMTsKfQoKZnVuY3Rpb24g b3NfZGVjb2RlVmFsdWUoIHZhbHVlICkgewoJaWYgKCBkZWNvZGVVUklDb21wb25l bnQgKSB7CgkJcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCggdmFsdWUgKTsKCX0K CWlmKCB1bmVzY2FwZSApIHsKCQlyZXR1cm4gdW5lc2NhcGUoIHZhbHVlICk7Cgl9 CglyZXR1cm4gbnVsbDsKfQoKZnVuY3Rpb24gb3NfZW5jb2RlUXVlcnkoIHZhbHVl ICkgewoJaWYgKCBlbmNvZGVVUklDb21wb25lbnQgKSB7CgkJcmV0dXJuIGVuY29k ZVVSSUNvbXBvbmVudCggdmFsdWUgKTsKCX0KCWlmKCBlc2NhcGUgKSB7CgkJcmV0 dXJuIGVzY2FwZSggdmFsdWUgKTsKCX0KCXJldHVybiBudWxsOwp9CgovKiogSGFu ZGxlcyBkYXRhIGZyb20gWE1MSHR0cFJlcXVlc3QsIGFuZCB1cGRhdGVzIHRoZSBz dWdnZXN0IHJlc3VsdHMgKi8KZnVuY3Rpb24gb3NfdXBkYXRlUmVzdWx0cyggciwg cXVlcnksIHRleHQsIGNhY2hlS2V5ICkgewoJb3NfY2FjaGVbY2FjaGVLZXldID0g dGV4dDsKCXIucXVlcnkgPSBxdWVyeTsKCXIub3JpZ2luYWwgPSBxdWVyeTsKCWlm KCB0ZXh0ID09ICcnICkgewoJCXIucmVzdWx0cyA9IG51bGw7CgkJci5yZXN1bHRD b3VudCA9IDA7CgkJb3NfaGlkZVJlc3VsdHMoIHIgKTsKCX0gZWxzZSB7CgkJdHJ5 IHsKCQkJdmFyIHAgPSBldmFsKCAnKCcgKyB0ZXh0ICsgJyknICk7IC8vIHNpbXBs ZSBqc29uIHBhcnNlLCBjb3VsZCBkbyBhIHNhZmVyIG9uZQoJCQlpZiggcC5sZW5n dGggPCAyIHx8IHBbMV0ubGVuZ3RoID09IDAgKSB7CgkJCQlyLnJlc3VsdHMgPSBu dWxsOwoJCQkJci5yZXN1bHRDb3VudCA9IDA7CgkJCQlvc19oaWRlUmVzdWx0cygg ciApOwoJCQkJcmV0dXJuOwoJCQl9CgkJCWlmICggb3NfdXNlX2RhdGFsaXN0ICkg ewoJCQkJb3Nfc2V0dXBEYXRhbGlzdCggciwgcFsxXSApOwoJCQl9IGVsc2UgewoJ CQkJb3Nfc2V0dXBEaXYoIHIsIHBbMV0gKTsKCQkJfQoJCX0gY2F0Y2goIGUgKSB7 CgkJCS8vIGJhZCByZXNwb25zZSBmcm9tIHNlcnZlciBvciBzdWNoCgkJCW9zX2hp ZGVSZXN1bHRzKCByICk7CgkJCW9zX2NhY2hlW2NhY2hlS2V5XSA9IG51bGw7CgkJ fQoJfQp9CgovKioKICogQ3JlYXRlIGFuZCBwb3B1bGF0ZSBhIDxkYXRhbGlzdD4u CiAqCiAqIEBwYXJhbSByICAgICAgIG9zX1Jlc3VsdCBvYmplY3QKICogQHBhcmFt IHJlc3VsdHMgQXJyYXkgb2YgdGhlIG5ldyByZXN1bHRzIHRvIHJlcGxhY2UgZXhp c3Rpbmcgb25lcwogKi8KZnVuY3Rpb24gb3Nfc2V0dXBEYXRhbGlzdCggciwgcmVz dWx0cyApIHsKCXZhciBzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIHIuc2Vh cmNoYm94ICk7Cgl2YXIgYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCByLmNv bnRhaW5lciApOwoJaWYgKCBjID09IG51bGwgKSB7CgkJYyA9IGRvY3VtZW50LmNy ZWF0ZUVsZW1lbnQoICdkYXRhbGlzdCcgKTsKCQljLnNldEF0dHJpYnV0ZSggJ2lk Jywgci5jb250YWluZXIgKTsKCQlkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKCBj ICk7Cgl9IGVsc2UgewoJCWMuaW5uZXJIVE1MID0gJyc7Cgl9CglzLnNldEF0dHJp YnV0ZSggJ2xpc3QnLCByLmNvbnRhaW5lciApOwoKCXIucmVzdWx0cyA9IG5ldyBB cnJheSgpOwoJci5yZXN1bHRDb3VudCA9IHJlc3VsdHMubGVuZ3RoOwoJci52aXNp YmxlID0gdHJ1ZTsKCWZvciAoIGkgPSAwOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkr KyApIHsKCQl2YXIgdGl0bGUgPSBvc19kZWNvZGVWYWx1ZSggcmVzdWx0c1tpXSAp OwoJCXZhciBvcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnb3B0aW9uJyAp OwoJCW9wdC52YWx1ZSA9IHRpdGxlOwoJCXIucmVzdWx0c1tpXSA9IHRpdGxlOwoJ CWMuYXBwZW5kQ2hpbGQoIG9wdCApOwoJfQp9CgovKiogRmV0Y2ggbmFtZXNwYWNl cyBmcm9tIGNoZWNrYm94ZXMgb3IgaGlkZGVuIGZpZWxkcyBpbiB0aGUgc2VhcmNo IGZvcm0sCiAgICBpZiBub25lIGRlZmluZWQgdXNlIHdnU2VhcmNoTmFtZXNwYWNl cyBnbG9iYWwgKi8KZnVuY3Rpb24gb3NfZ2V0TmFtZXNwYWNlcyggciApIHsKCXZh ciBuYW1lc3BhY2VzID0gJyc7Cgl2YXIgZWxlbWVudHMgPSBkb2N1bWVudC5mb3Jt c1tyLnNlYXJjaGZvcm1dLmVsZW1lbnRzOwoJZm9yKCBpID0gMDsgaSA8IGVsZW1l bnRzLmxlbmd0aDsgaSsrICkgewoJCXZhciBuYW1lID0gZWxlbWVudHNbaV0ubmFt ZTsKCQlpZiggdHlwZW9mIG5hbWUgIT0gJ3VuZGVmaW5lZCcgJiYgbmFtZS5sZW5n dGggPiAyICYmIG5hbWVbMF0gPT0gJ24nICYmCgkJCW5hbWVbMV0gPT0gJ3MnICYm ICgKCQkJCSggZWxlbWVudHNbaV0udHlwZSA9PSAnY2hlY2tib3gnICYmIGVsZW1l bnRzW2ldLmNoZWNrZWQgKSB8fAoJCQkJKCBlbGVtZW50c1tpXS50eXBlID09ICdo aWRkZW4nICYmIGVsZW1lbnRzW2ldLnZhbHVlID09ICcxJyApCgkJCSkKCQkpIHsK CQkJaWYoIG5hbWVzcGFjZXMgIT0gJycgKSB7CgkJCQluYW1lc3BhY2VzICs9ICd8 JzsKCQkJfQoJCQluYW1lc3BhY2VzICs9IG5hbWUuc3Vic3RyaW5nKCAyICk7CgkJ fQoJfQoJaWYoIG5hbWVzcGFjZXMgPT0gJycgKSB7CgkJbmFtZXNwYWNlcyA9IHdn U2VhcmNoTmFtZXNwYWNlcy5qb2luKCd8Jyk7Cgl9CglyZXR1cm4gbmFtZXNwYWNl czsKfQoKLyoqIFVwZGF0ZSByZXN1bHRzIGlmIHVzZXIgaGFzbid0IGFscmVhZHkg dHlwZWQgc29tZXRoaW5nIGVsc2UgKi8KZnVuY3Rpb24gb3NfdXBkYXRlSWZSZWxl dmFudCggciwgcXVlcnksIHRleHQsIGNhY2hlS2V5ICkgewoJdmFyIHQgPSBkb2N1 bWVudC5nZXRFbGVtZW50QnlJZCggci5zZWFyY2hib3ggKTsKCWlmKCB0ICE9IG51 bGwgJiYgdC52YWx1ZSA9PSBxdWVyeSApIHsgLy8gY2hlY2sgaWYgcmVzcG9uc2Ug aXMgc3RpbGwgcmVsZXZhbnQKCQlvc191cGRhdGVSZXN1bHRzKCByLCBxdWVyeSwg dGV4dCwgY2FjaGVLZXkgKTsKCX0KCXIucXVlcnkgPSBxdWVyeTsKfQoKLyoqIEZl dGNoIHJlc3VsdHMgYWZ0ZXIgc29tZSB0aW1lb3V0ICovCmZ1bmN0aW9uIG9zX2Rl bGF5ZWRGZXRjaCgpIHsKCWlmKCBvc190aW1lciA9PSBudWxsICkgewoJCXJldHVy bjsKCX0KCXZhciByID0gb3NfdGltZXIucjsKCXZhciBxdWVyeSA9IG9zX3RpbWVy LnF1ZXJ5OwoJb3NfdGltZXIgPSBudWxsOwoJdmFyIHBhdGggPSB3Z01XU3VnZ2Vz dFRlbXBsYXRlLnJlcGxhY2UoICJ7bmFtZXNwYWNlc30iLCBvc19nZXROYW1lc3Bh Y2VzKCByICkgKQoJCQkJCQkJCQkucmVwbGFjZSggIntkYm5hbWV9Iiwgd2dEQm5h bWUgKQoJCQkJCQkJCQkucmVwbGFjZSggIntzZWFyY2hUZXJtc30iLCBvc19lbmNv ZGVRdWVyeSggcXVlcnkgKSApOwoKCS8vIHRyeSB0byBnZXQgZnJvbSBjYWNoZSwg aWYgbm90IGZldGNoIHVzaW5nIGFqYXgKCXZhciBjYWNoZWQgPSBvc19jYWNoZVtw YXRoXTsKCWlmKCBjYWNoZWQgIT0gbnVsbCAmJiBjYWNoZWQgIT0gdW5kZWZpbmVk ICkgewoJCW9zX3VwZGF0ZUlmUmVsZXZhbnQoIHIsIHF1ZXJ5LCBjYWNoZWQsIHBh dGggKTsKCX0gZWxzZSB7CgkJdmFyIHhtbGh0dHAgPSBzYWpheF9pbml0X29iamVj dCgpOwoJCWlmKCB4bWxodHRwICkgewoJCQl0cnkgewoJCQkJeG1saHR0cC5vcGVu KCAnR0VUJywgcGF0aCwgdHJ1ZSApOwoJCQkJeG1saHR0cC5vbnJlYWR5c3RhdGVj aGFuZ2UgPSBmdW5jdGlvbigpIHsKCQkJCQlpZiAoIHhtbGh0dHAucmVhZHlTdGF0 ZSA9PSA0ICYmIHR5cGVvZiBvc191cGRhdGVJZlJlbGV2YW50ID09ICdmdW5jdGlv bicgKSB7CgkJCQkJCW9zX3VwZGF0ZUlmUmVsZXZhbnQoIHIsIHF1ZXJ5LCB4bWxo dHRwLnJlc3BvbnNlVGV4dCwgcGF0aCApOwoJCQkJCX0KCQkJCX07CgkJCQl4bWxo dHRwLnNlbmQoIG51bGwgKTsKCQkJfSBjYXRjaCAoIGUgKSB7CgkJCQlpZiAoIHdp bmRvdy5sb2NhdGlvbi5ob3N0bmFtZSA9PSAnbG9jYWxob3N0JyApIHsKCQkJCQlh bGVydCggIllvdXIgYnJvd3NlciBibG9ja3MgWE1MSHR0cFJlcXVlc3QgdG8gJ2xv Y2FsaG9zdCcsIHRyeSB1c2luZyBhIHJlYWwgaG9zdG5hbWUgZm9yIGRldmVsb3Bt ZW50L3Rlc3RpbmcuIiApOwoJCQkJfQoJCQkJdGhyb3cgZTsKCQkJfQoJCX0KCX0K fQoKLyoqIEluaXQgdGltZWQgdXBkYXRlIHZpYSBvc19kZWxheWVkVXBkYXRlKCkg Ki8KZnVuY3Rpb24gb3NfZmV0Y2hSZXN1bHRzKCByLCBxdWVyeSwgdGltZW91dCAp IHsKCWlmKCBxdWVyeSA9PSAnJyApIHsKCQlyLnF1ZXJ5ID0gJyc7CgkJb3NfaGlk ZVJlc3VsdHMoIHIgKTsKCQlyZXR1cm47Cgl9IGVsc2UgaWYoIHF1ZXJ5ID09IHIu cXVlcnkgKSB7CgkJcmV0dXJuOyAvLyBubyBjaGFuZ2UKCX0KCglvc19pc19zdG9w cGVkID0gZmFsc2U7IC8vIG1ha2Ugc3VyZSB3ZSdyZSBydW5uaW5nCgoJLy8gY2Fu Y2VsIGFueSBwZW5kaW5nIGZldGNoZXMKCWlmKCBvc190aW1lciAhPSBudWxsICYm IG9zX3RpbWVyLmlkICE9IG51bGwgKSB7CgkJY2xlYXJUaW1lb3V0KCBvc190aW1l ci5pZCApOwoJfQoJLy8gc2NoZWR1bGUgZGVsYXllZCBmZXRjaGluZyBvZiByZXN1 bHRzCglpZiggdGltZW91dCAhPSAwICkgewoJCW9zX3RpbWVyID0gbmV3IG9zX1Rp bWVyKCBzZXRUaW1lb3V0KCAib3NfZGVsYXllZEZldGNoKCkiLCB0aW1lb3V0ICks IHIsIHF1ZXJ5ICk7Cgl9IGVsc2UgewoJCW9zX3RpbWVyID0gbmV3IG9zX1RpbWVy KCBudWxsLCByLCBxdWVyeSApOwoJCW9zX2RlbGF5ZWRGZXRjaCgpOyAvLyBkbyBp dCBub3chCgl9Cn0KCi8qKiBGaW5kIGV2ZW50IHRhcmdldCAqLwpmdW5jdGlvbiBv c19nZXRUYXJnZXQoIGUgKSB7CglpZiAoICFlICkgewoJCWUgPSB3aW5kb3cuZXZl bnQ7Cgl9CglpZiAoIGUudGFyZ2V0ICkgewoJCXJldHVybiBlLnRhcmdldDsKCX0g ZWxzZSBpZiAoIGUuc3JjRWxlbWVudCApIHsKCQlyZXR1cm4gZS5zcmNFbGVtZW50 OwoJfSBlbHNlIHsKCQlyZXR1cm4gbnVsbDsKCX0KfQoKLyoqIENoZWNrIGlmIHgg aXMgYSB2YWxpZCBpbnRlZ2VyICovCmZ1bmN0aW9uIG9zX2lzTnVtYmVyKCB4ICkg ewoJaWYoIHggPT0gJycgfHwgaXNOYU4oIHggKSApIHsKCQlyZXR1cm4gZmFsc2U7 Cgl9Cglmb3IoIHZhciBpID0gMDsgaSA8IHgubGVuZ3RoOyBpKysgKSB7CgkJdmFy IGMgPSB4LmNoYXJBdCggaSApOwoJCWlmKCAhKCBjID49ICcwJyAmJiBjIDw9ICc5 JyApICkgewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJfQoJcmV0dXJuIHRydWU7Cn0K Ci8qKiBDYWxsIHRoaXMgdG8gZW5hYmxlIHN1Z2dlc3Rpb25zIG9uIGlucHV0IChp ZD1pbnB1dElkKSwgb24gYSBmb3JtIChuYW1lPWZvcm1OYW1lKSAqLwpmdW5jdGlv biBvc19lbmFibGVTdWdnZXN0aW9uc09uKCBpbnB1dElkLCBmb3JtTmFtZSApIHsK CW9zX2luaXRIYW5kbGVycyggaW5wdXRJZCwgZm9ybU5hbWUsIGRvY3VtZW50Lmdl dEVsZW1lbnRCeUlkKCBpbnB1dElkICkgKTsKfQoKLyoqIENhbGwgdGhpcyB0byBk aXNhYmxlIHN1Z2dlc3Rpb3Mgb24gaW5wdXQgYm94IChpZD1pbnB1dElkKSAqLwpm dW5jdGlvbiBvc19kaXNhYmxlU3VnZ2VzdGlvbnNPbiggaW5wdXRJZCApIHsKCXIg PSBvc19tYXBbaW5wdXRJZF07CglpZiggciAhPSBudWxsICkgewoJCS8vIGNhbmNl bC9oaWRlIHJlc3VsdHMKCQlvc190aW1lciA9IG51bGw7CgkJb3NfaGlkZVJlc3Vs dHMoIHIgKTsKCQkvLyB0dXJuIGF1dG9jb21wbGV0ZSBvbiAhCgkJZG9jdW1lbnQu Z2V0RWxlbWVudEJ5SWQoIGlucHV0SWQgKS5zZXRBdHRyaWJ1dGUoICdhdXRvY29t cGxldGUnLCAnb24nICk7CgkJLy8gcmVtb3ZlIGRlc2NyaXB0b3IKCQlvc19tYXBb aW5wdXRJZF0gPSBudWxsOwoJfQoKCS8vIFJlbW92ZSB0aGUgZWxlbWVudCBmcm9t IHRoZSBvc19hdXRvbG9hZF8qIGFycmF5cwoJdmFyIGluZGV4ID0gb3NfYXV0b2xv YWRfaW5wdXRzLmluZGV4T2YoIGlucHV0SWQgKTsKCWlmICggaW5kZXggPj0gMCAp IHsKCQlvc19hdXRvbG9hZF9pbnB1dHNbaW5kZXhdID0gb3NfYXV0b2xvYWRfZm9y bXNbaW5kZXhdID0gJyc7Cgl9Cn0KCi8qKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioKICogRGl2LW9ubHkgZnVuY3Rpb25zIChp cnJlbGV2YW50IGZvciBkYXRhbGlzdCkKICoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8KCi8qKiBFdmVudDogbG9zcyBvZiBm b2N1cyBvZiBpbnB1dCBib3ggKi8KZnVuY3Rpb24gb3NfZXZlbnRCbHVyKCBlICkg ewoJdmFyIHRhcmcgPSBvc19nZXRUYXJnZXQoIGUgKTsKCXZhciByID0gb3NfbWFw W3RhcmcuaWRdOwoJaWYoIHIgPT0gbnVsbCApIHsKCQlyZXR1cm47IC8vIG5vdCBv dXIgZXZlbnQKCX0KCWlmKCAhb3NfbW91c2VfcHJlc3NlZCApIHsKCQlvc19oaWRl UmVzdWx0cyggciApOwoJCS8vIGZvcmNlIGNhbnZhcyB0byBzdGF5IGhpZGRlbgoJ CXIuc3RheUhpZGRlbiA9IHRydWU7CgkJLy8gY2FuY2VsIGFueSBwZW5kaW5nIGZl dGNoZXMKCQlpZiggb3NfdGltZXIgIT0gbnVsbCAmJiBvc190aW1lci5pZCAhPSBu dWxsICkgewoJCQljbGVhclRpbWVvdXQoIG9zX3RpbWVyLmlkICk7CgkJfQoJCW9z X3RpbWVyID0gbnVsbDsKCX0KfQoKLyoqIEV2ZW50OiBmb2N1cyAoY2F0Y2ggb25s eSB3aGVuIHN0b3BwZWQpICovCmZ1bmN0aW9uIG9zX2V2ZW50Rm9jdXMoIGUgKSB7 Cgl2YXIgdGFyZyA9IG9zX2dldFRhcmdldCggZSApOwoJdmFyIHIgPSBvc19tYXBb dGFyZy5pZF07CglpZiggciA9PSBudWxsICkgewoJCXJldHVybjsgLy8gbm90IG91 ciBldmVudAoJfQoJci5zdGF5SGlkZGVuID0gZmFsc2U7Cn0KCi8qKgogKiBDcmVh dGUgYW5kIHBvcHVsYXRlIGEgPGRpdj4sIGZvciBub24tPGRhdGFsaXN0Pi1zdXBw b3J0aW5nIGJyb3dzZXJzLgogKgogKiBAcGFyYW0gciAgICAgICBvc19SZXN1bHQg b2JqZWN0CiAqIEBwYXJhbSByZXN1bHRzIEFycmF5IG9mIHRoZSBuZXcgcmVzdWx0 cyB0byByZXBsYWNlIGV4aXN0aW5nIG9uZXMKICovCmZ1bmN0aW9uIG9zX3NldHVw RGl2KCByLCByZXN1bHRzICkgewoJdmFyIGMgPSBkb2N1bWVudC5nZXRFbGVtZW50 QnlJZCggci5jb250YWluZXIgKTsKCWlmICggYyA9PSBudWxsICkgewoJCWMgPSBv c19jcmVhdGVDb250YWluZXIoIHIgKTsKCX0KCWMuaW5uZXJIVE1MID0gb3NfY3Jl YXRlUmVzdWx0VGFibGUoIHIsIHJlc3VsdHMgKTsKCS8vIGluaXQgY29udGFpbmVy IHRhYmxlIHNpemVzCgl2YXIgdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCBy LnJlc3VsdFRhYmxlICk7CglyLmNvbnRhaW5lclRvdGFsID0gdC5vZmZzZXRIZWln aHQ7CglyLmNvbnRhaW5lclJvdyA9IHQub2Zmc2V0SGVpZ2h0IC8gci5yZXN1bHRD b3VudDsKCW9zX2ZpdENvbnRhaW5lciggciApOwoJb3NfdHJpbVJlc3VsdFRleHQo IHIgKTsKCW9zX3Nob3dSZXN1bHRzKCByICk7Cn0KCi8qKiBDcmVhdGUgdGhlIHJl c3VsdCB0YWJsZSB0byBiZSBwbGFjZWQgaW4gdGhlIGNvbnRhaW5lciBkaXYgKi8K ZnVuY3Rpb24gb3NfY3JlYXRlUmVzdWx0VGFibGUoIHIsIHJlc3VsdHMgKSB7Cgl2 YXIgYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCByLmNvbnRhaW5lciApOwoJ dmFyIHdpZHRoID0gYy5vZmZzZXRXaWR0aCAtIG9zX29wZXJhV2lkdGhGaXgoIGMu b2Zmc2V0V2lkdGggKTsKCXZhciBodG1sID0gJzx0YWJsZSBjbGFzcz0ib3Mtc3Vn Z2VzdC1yZXN1bHRzIiBpZD0iJyArIHIucmVzdWx0VGFibGUgKyAnIiBzdHlsZT0i d2lkdGg6ICcgKyB3aWR0aCArICdweDsiPic7CglyLnJlc3VsdHMgPSBuZXcgQXJy YXkoKTsKCXIucmVzdWx0Q291bnQgPSByZXN1bHRzLmxlbmd0aDsKCWZvciggaSA9 IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrICkgewoJCXZhciB0aXRsZSA9IG9z X2RlY29kZVZhbHVlKCByZXN1bHRzW2ldICk7CgkJci5yZXN1bHRzW2ldID0gdGl0 bGU7CgkJaHRtbCArPSAnPHRyPjx0ZCBjbGFzcz0ib3Mtc3VnZ2VzdC1yZXN1bHQi IGlkPSInICsgci5yZXN1bHRUYWJsZSArIGkgKyAnIj48c3BhbiBpZD0iJyArIHIu cmVzdWx0VGV4dCArIGkgKyAnIj4nICsgdGl0bGUgKyAnPC9zcGFuPjwvdGQ+PC90 cj4nOwoJfQoJaHRtbCArPSAnPC90YWJsZT4nOwoJcmV0dXJuIGh0bWw7Cn0KCi8q KiBTaG93IHJlc3VsdHMgZGl2ICovCmZ1bmN0aW9uIG9zX3Nob3dSZXN1bHRzKCBy ICkgewoJaWYoIG9zX2lzX3N0b3BwZWQgKSB7CgkJcmV0dXJuOwoJfQoJaWYoIHIu c3RheUhpZGRlbiApIHsKCQlyZXR1cm47Cgl9Cglvc19maXRDb250YWluZXIoIHIg KTsKCXZhciBjID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIHIuY29udGFpbmVy ICk7CglyLnNlbGVjdGVkID0gLTE7CglpZiggYyAhPSBudWxsICkgewoJCWMuc2Ny b2xsVG9wID0gMDsKCQljLnN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7CgkJ ci52aXNpYmxlID0gdHJ1ZTsKCX0KfQoKZnVuY3Rpb24gb3Nfb3BlcmFXaWR0aEZp eCggeCApIHsKCS8vIEZvciBicm93c2VycyB0aGF0IGRvbid0IHVuZGVyc3RhbmQg b3ZlcmZsb3cteCwgZXN0aW1hdGUgc2Nyb2xsYmFyIHdpZHRoCglpZiggdHlwZW9m IGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3dYICE9ICdzdHJpbmcnICkgewoJ CXJldHVybiAzMDsKCX0KCXJldHVybiAwOwp9CgovKiogQnJvd2VyLWRlcGVuZGVu dCBmdW5jdGlvbnMgdG8gZmluZCB3aW5kb3cgaW5uZXIgc2l6ZSwgYW5kIHNjcm9s bCBzdGF0dXMgKi8KZnVuY3Rpb24gZl9jbGllbnRXaWR0aCgpIHsKCXJldHVybiBm X2ZpbHRlclJlc3VsdHMoCgkJd2luZG93LmlubmVyV2lkdGggPyB3aW5kb3cuaW5u ZXJXaWR0aCA6IDAsCgkJZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ID8gZG9jdW1l bnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoIDogMCwKCQlkb2N1bWVudC5i b2R5ID8gZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCA6IDAKCSk7Cn0KCmZ1bmN0 aW9uIGZfY2xpZW50SGVpZ2h0KCkgewoJcmV0dXJuIGZfZmlsdGVyUmVzdWx0cygK CQl3aW5kb3cuaW5uZXJIZWlnaHQgPyB3aW5kb3cuaW5uZXJIZWlnaHQgOiAwLAoJ CWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCA/IGRvY3VtZW50LmRvY3VtZW50RWxl bWVudC5jbGllbnRIZWlnaHQgOiAwLAoJCWRvY3VtZW50LmJvZHkgPyBkb2N1bWVu dC5ib2R5LmNsaWVudEhlaWdodCA6IDAKCSk7Cn0KCmZ1bmN0aW9uIGZfc2Nyb2xs TGVmdCgpIHsKCXJldHVybiBmX2ZpbHRlclJlc3VsdHMoCgkJd2luZG93LnBhZ2VY T2Zmc2V0ID8gd2luZG93LnBhZ2VYT2Zmc2V0IDogMCwKCQlkb2N1bWVudC5kb2N1 bWVudEVsZW1lbnQgPyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVm dCA6IDAsCgkJZG9jdW1lbnQuYm9keSA/IGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVm dCA6IDAKCSk7Cn0KCmZ1bmN0aW9uIGZfc2Nyb2xsVG9wKCkgewoJcmV0dXJuIGZf ZmlsdGVyUmVzdWx0cygKCQl3aW5kb3cucGFnZVlPZmZzZXQgPyB3aW5kb3cucGFn ZVlPZmZzZXQgOiAwLAoJCWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCA/IGRvY3Vt ZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgOiAwLAoJCWRvY3VtZW50LmJv ZHkgPyBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCA6IDAKCSk7Cn0KCmZ1bmN0aW9u IGZfZmlsdGVyUmVzdWx0cyggbl93aW4sIG5fZG9jZWwsIG5fYm9keSApIHsKCXZh ciBuX3Jlc3VsdCA9IG5fd2luID8gbl93aW4gOiAwOwoJaWYgKCBuX2RvY2VsICYm ICggIW5fcmVzdWx0IHx8ICggbl9yZXN1bHQgPiBuX2RvY2VsICkgKSApIHsKCQlu X3Jlc3VsdCA9IG5fZG9jZWw7Cgl9CglyZXR1cm4gbl9ib2R5ICYmICggIW5fcmVz dWx0IHx8ICggbl9yZXN1bHQgPiBuX2JvZHkgKSApID8gbl9ib2R5IDogbl9yZXN1 bHQ7Cn0KCi8qKiBHZXQgdGhlIGhlaWdodCBhdmFpbGFibGUgZm9yIHRoZSByZXN1 bHRzIGNvbnRhaW5lciAqLwpmdW5jdGlvbiBvc19hdmFpbGFibGVIZWlnaHQoIHIg KSB7Cgl2YXIgYWJzVG9wID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIHIuY29u dGFpbmVyICkuc3R5bGUudG9wOwoJdmFyIHB4ID0gYWJzVG9wLmxhc3RJbmRleE9m KCAncHgnICk7CglpZiggcHggPiAwICkgewoJCWFic1RvcCA9IGFic1RvcC5zdWJz dHJpbmcoIDAsIHB4ICk7Cgl9CglyZXR1cm4gZl9jbGllbnRIZWlnaHQoKSAtICgg YWJzVG9wIC0gZl9zY3JvbGxUb3AoKSApOwp9CgovKiogR2V0IGVsZW1lbnQgYWJz b2x1dGUgcG9zaXRpb24ge2xlZnQsdG9wfSAqLwpmdW5jdGlvbiBvc19nZXRFbGVt ZW50UG9zaXRpb24oIGVsZW1JRCApIHsKCXZhciBvZmZzZXRUcmFpbCA9IGRvY3Vt ZW50LmdldEVsZW1lbnRCeUlkKCBlbGVtSUQgKTsKCXZhciBvZmZzZXRMZWZ0ID0g MDsKCXZhciBvZmZzZXRUb3AgPSAwOwoJd2hpbGUgKCBvZmZzZXRUcmFpbCApIHsK CQlvZmZzZXRMZWZ0ICs9IG9mZnNldFRyYWlsLm9mZnNldExlZnQ7CgkJb2Zmc2V0 VG9wICs9IG9mZnNldFRyYWlsLm9mZnNldFRvcDsKCQlvZmZzZXRUcmFpbCA9IG9m ZnNldFRyYWlsLm9mZnNldFBhcmVudDsKCX0KCWlmICggbmF2aWdhdG9yLnVzZXJB Z2VudC5pbmRleE9mKCdNYWMnKSAhPSAtMSAmJiB0eXBlb2YgZG9jdW1lbnQuYm9k eS5sZWZ0TWFyZ2luICE9ICd1bmRlZmluZWQnICkgewoJCW9mZnNldExlZnQgKz0g ZG9jdW1lbnQuYm9keS5sZWZ0TWFyZ2luOwoJCW9mZnNldFRvcCArPSBkb2N1bWVu dC5ib2R5LnRvcE1hcmdpbjsKCX0KCXJldHVybiB7IGxlZnQ6b2Zmc2V0TGVmdCwg dG9wOm9mZnNldFRvcCB9Owp9CgovKiogQ3JlYXRlIHRoZSBjb250YWluZXIgZGl2 IHRoYXQgd2lsbCBob2xkIHRoZSBzdWdnZXN0ZWQgdGl0bGVzICovCmZ1bmN0aW9u IG9zX2NyZWF0ZUNvbnRhaW5lciggciApIHsKCXZhciBjID0gZG9jdW1lbnQuY3Jl YXRlRWxlbWVudCggJ2RpdicgKTsKCXZhciBzID0gZG9jdW1lbnQuZ2V0RWxlbWVu dEJ5SWQoIHIuc2VhcmNoYm94ICk7Cgl2YXIgcG9zID0gb3NfZ2V0RWxlbWVudFBv c2l0aW9uKCByLnNlYXJjaGJveCApOwoJdmFyIGxlZnQgPSBwb3MubGVmdDsKCXZh ciB0b3AgPSBwb3MudG9wICsgcy5vZmZzZXRIZWlnaHQ7CgljLmNsYXNzTmFtZSA9 ICdvcy1zdWdnZXN0JzsKCWMuc2V0QXR0cmlidXRlKCAnaWQnLCByLmNvbnRhaW5l ciApOwoJZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCggYyApOwoKCS8vIGR5bmFt aWNhbGx5IGdlbmVyYXRlZCBzdHlsZSBwYXJhbXMKCS8vIElFIHdvcmthcm91bmQs IGNhbm5vdCBleHBsaWNpdGVseSBzZXQgInN0eWxlIiBhdHRyaWJ1dGUKCWMgPSBk b2N1bWVudC5nZXRFbGVtZW50QnlJZCggci5jb250YWluZXIgKTsKCWMuc3R5bGUu dG9wID0gdG9wICsgJ3B4JzsKCWMuc3R5bGUubGVmdCA9IGxlZnQgKyAncHgnOwoJ Yy5zdHlsZS53aWR0aCA9IHMub2Zmc2V0V2lkdGggKyAncHgnOwoKCS8vIG1vdXNl IGV2ZW50IGhhbmRsZXJzCgljLm9ubW91c2VvdmVyID0gZnVuY3Rpb24oIGV2ZW50 ICkgeyBvc19ldmVudE1vdXNlb3Zlciggci5zZWFyY2hib3gsIGV2ZW50ICk7IH07 CgljLm9ubW91c2Vtb3ZlID0gZnVuY3Rpb24oIGV2ZW50ICkgeyBvc19ldmVudE1v dXNlbW92ZSggci5zZWFyY2hib3gsIGV2ZW50ICk7IH07CgljLm9ubW91c2Vkb3du ID0gZnVuY3Rpb24oIGV2ZW50ICkgeyByZXR1cm4gb3NfZXZlbnRNb3VzZWRvd24o IHIuc2VhcmNoYm94LCBldmVudCApOyB9OwoJYy5vbm1vdXNldXAgPSBmdW5jdGlv biggZXZlbnQgKSB7IG9zX2V2ZW50TW91c2V1cCggci5zZWFyY2hib3gsIGV2ZW50 ICk7IH07CglyZXR1cm4gYzsKfQoKLyoqIGNoYW5nZSBjb250YWluZXIgaGVpZ2h0 IHRvIGZpdCB0byBzY3JlZW4gKi8KZnVuY3Rpb24gb3NfZml0Q29udGFpbmVyKCBy ICkgewoJdmFyIGMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggci5jb250YWlu ZXIgKTsKCXZhciBoID0gb3NfYXZhaWxhYmxlSGVpZ2h0KCByICkgLSAyMDsKCXZh ciBpbmMgPSByLmNvbnRhaW5lclJvdzsKCWggPSBwYXJzZUludCggaCAvIGluYyAp ICogaW5jOwoJaWYoIGggPCAoIDIgKiBpbmMgKSAmJiByLnJlc3VsdENvdW50ID4g MSApIHsgLy8gbWluOiB0d28gcmVzdWx0cwoJCWggPSAyICogaW5jOwoJfQoJaWYo ICggaCAvIGluYyApID4gb3NfbWF4X2xpbmVzX3Blcl9zdWdnZXN0ICkgewoJCWgg PSBpbmMgKiBvc19tYXhfbGluZXNfcGVyX3N1Z2dlc3Q7Cgl9CglpZiggaCA8IHIu Y29udGFpbmVyVG90YWwgKSB7CgkJYy5zdHlsZS5oZWlnaHQgPSBoICsgJ3B4JzsK CQlyLmNvbnRhaW5lckNvdW50ID0gcGFyc2VJbnQoIE1hdGgucm91bmQoIGggLyBp bmMgKSApOwoJfSBlbHNlIHsKCQljLnN0eWxlLmhlaWdodCA9IHIuY29udGFpbmVy VG90YWwgKyAncHgnOwoJCXIuY29udGFpbmVyQ291bnQgPSByLnJlc3VsdENvdW50 OwoJfQp9CgovKiogSWYgc29tZSBlbnRyaWVzIGFyZSBsb25nZXIgdGhhbiB0aGUg Ym94LCByZXBsYWNlIHRleHQgd2l0aCAiLi4uIiAqLwpmdW5jdGlvbiBvc190cmlt UmVzdWx0VGV4dCggciApIHsKCS8vIGZpbmQgbWF4IHdpZHRoLCBmaXJzdCBzZWUg aWYgd2UgY291bGQgZXhwYW5kIHRoZSBjb250YWluZXIgdG8gZml0IGl0Cgl2YXIg bWF4VyA9IDA7Cglmb3IoIHZhciBpID0gMDsgaSA8IHIucmVzdWx0Q291bnQ7IGkr KyApIHsKCQl2YXIgZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCByLnJlc3Vs dFRleHQgKyBpICk7CgkJaWYoIGUub2Zmc2V0V2lkdGggPiBtYXhXICkgewoJCQlt YXhXID0gZS5vZmZzZXRXaWR0aDsKCQl9Cgl9Cgl2YXIgdyA9IGRvY3VtZW50Lmdl dEVsZW1lbnRCeUlkKCByLmNvbnRhaW5lciApLm9mZnNldFdpZHRoOwoJdmFyIGZp eCA9IDA7CglpZiggci5jb250YWluZXJDb3VudCA8IHIucmVzdWx0Q291bnQgKSB7 CgkJZml4ID0gMjA7IC8vIGdpdmUgMjBweCBmb3Igc2Nyb2xsYmFyCgl9IGVsc2Ug ewoJCWZpeCA9IG9zX29wZXJhV2lkdGhGaXgoIHcgKTsKCX0KCWlmKCBmaXggPCA0 ICkgewoJCWZpeCA9IDQ7IC8vIGJhc2ljIHBhZGRpbmcKCX0KCW1heFcgKz0gZml4 OwoKCS8vIHJlc2l6ZSBjb250YWluZXIgdG8gZml0IG1vcmUgZGF0YSBpZiBwZXJt aXR0ZWQKCXZhciBub3JtVyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCByLnNl YXJjaGJveCApLm9mZnNldFdpZHRoOwoJdmFyIHByb3AgPSBtYXhXIC8gbm9ybVc7 CglpZiggcHJvcCA+IG9zX2NvbnRhaW5lcl9tYXhfd2lkdGggKSB7CgkJcHJvcCA9 IG9zX2NvbnRhaW5lcl9tYXhfd2lkdGg7Cgl9IGVsc2UgaWYoIHByb3AgPCAxICkg ewoJCXByb3AgPSAxOwoJfQoJdmFyIG5ld1cgPSBNYXRoLnJvdW5kKCBub3JtVyAq IHByb3AgKTsKCWlmKCB3ICE9IG5ld1cgKSB7CgkJdyA9IG5ld1c7CgkJaWYoIG9z X2FuaW1hdGlvbl90aW1lciAhPSBudWxsICkgewoJCQljbGVhckludGVydmFsKCBv c19hbmltYXRpb25fdGltZXIuaWQgKTsKCQl9CgkJb3NfYW5pbWF0aW9uX3RpbWVy ID0gbmV3IG9zX0FuaW1hdGlvblRpbWVyKCByLCB3ICk7CgkJb3NfYW5pbWF0aW9u X3RpbWVyLmlkID0gc2V0SW50ZXJ2YWwoICJvc19hbmltYXRlQ2hhbmdlV2lkdGgo KSIsIG9zX2FuaW1hdGlvbl9kZWxheSApOwoJCXcgLT0gZml4OyAvLyB0aGlzIG11 Y2ggaXMgcmVzZXJ2ZWQKCX0KCgkvLyB0cmltIHJlc3VsdHMKCWlmKCB3IDwgMTAg KSB7CgkJcmV0dXJuOwoJfQoJZm9yKCB2YXIgaSA9IDA7IGkgPCByLnJlc3VsdENv dW50OyBpKysgKSB7CgkJdmFyIGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgg ci5yZXN1bHRUZXh0ICsgaSApOwoJCXZhciByZXBsYWNlID0gMTsKCQl2YXIgbGFz dFcgPSBlLm9mZnNldFdpZHRoICsgMTsKCQl2YXIgaXRlcmF0aW9uID0gMDsKCQl2 YXIgY2hhbmdlZFRleHQgPSBmYWxzZTsKCQl3aGlsZSggZS5vZmZzZXRXaWR0aCA+ IHcgJiYgKCBlLm9mZnNldFdpZHRoIDwgbGFzdFcgfHwgaXRlcmF0aW9uIDwgMiAp ICkgewoJCQljaGFuZ2VkVGV4dCA9IHRydWU7CgkJCWxhc3RXID0gZS5vZmZzZXRX aWR0aDsKCQkJdmFyIGwgPSBlLmlubmVySFRNTDsKCQkJZS5pbm5lckhUTUwgPSBs LnN1YnN0cmluZyggMCwgbC5sZW5ndGggLSByZXBsYWNlICkgKyAnLi4uJzsKCQkJ aXRlcmF0aW9uKys7CgkJCXJlcGxhY2UgPSA0OyAvLyBob3cgbWFueSBjaGFycyB0 byByZXBsYWNlCgkJfQoJCWlmKCBjaGFuZ2VkVGV4dCApIHsKCQkJLy8gc2hvdyBo aW50IGZvciB0cmltbWVkIHRpdGxlcwoJCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJ ZCggci5yZXN1bHRUYWJsZSArIGkgKS5zZXRBdHRyaWJ1dGUoICd0aXRsZScsIHIu cmVzdWx0c1tpXSApOwoJCX0KCX0KfQoKLyoqIEludm9rZWQgb24gdGltZXIgdG8g YW5pbWF0ZSBjaGFuZ2UgaW4gY29udGFpbmVyIHdpZHRoICovCmZ1bmN0aW9uIG9z X2FuaW1hdGVDaGFuZ2VXaWR0aCgpIHsKCXZhciByID0gb3NfYW5pbWF0aW9uX3Rp bWVyLnI7Cgl2YXIgYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCByLmNvbnRh aW5lciApOwoJdmFyIHcgPSBjLm9mZnNldFdpZHRoOwoJdmFyIG5vcm1XID0gZG9j dW1lbnQuZ2V0RWxlbWVudEJ5SWQoIHIuc2VhcmNoYm94ICkub2Zmc2V0V2lkdGg7 Cgl2YXIgbm9ybUwgPSBvc19nZXRFbGVtZW50UG9zaXRpb24oIHIuc2VhcmNoYm94 ICkubGVmdDsKCXZhciBpbmMgPSBvc19hbmltYXRpb25fdGltZXIuaW5jOwoJdmFy IHRhcmdldCA9IG9zX2FuaW1hdGlvbl90aW1lci50YXJnZXQ7Cgl2YXIgbncgPSB3 ICsgaW5jOwoJaWYoICggaW5jID4gMCAmJiBudyA+PSB0YXJnZXQgKSB8fCAoIGlu YyA8PSAwICYmIG53IDw9IHRhcmdldCApICkgewoJCS8vIGZpbmlzaGVkICEKCQlj LnN0eWxlLndpZHRoID0gdGFyZ2V0ICsgJ3B4JzsKCQljbGVhckludGVydmFsKCBv c19hbmltYXRpb25fdGltZXIuaWQgKTsKCQlvc19hbmltYXRpb25fdGltZXIgPSBu dWxsOwoJfSBlbHNlIHsKCQkvLyBpbi1wcm9ncmVzcwoJCWMuc3R5bGUud2lkdGgg PSBudyArICdweCc7CgkJaWYoIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kaXIg PT0gJ3J0bCcgKSB7CgkJCWMuc3R5bGUubGVmdCA9ICggbm9ybUwgKyBub3JtVyAr ICggdGFyZ2V0IC0gbncgKSAtIG9zX2FuaW1hdGlvbl90aW1lci50YXJnZXQgLSAx ICkgKyAncHgnOwoJCX0KCX0KfQoKLyoqIENoYW5nZSB0aGUgaGlnaGxpZ2h0ZWQg cm93IChpLmUuIHN1Z2dlc3Rpb24pLCBmcm9tIHBvc2l0aW9uIGN1ciB0byBuZXh0 ICovCmZ1bmN0aW9uIG9zX2NoYW5nZUhpZ2hsaWdodCggciwgY3VyLCBuZXh0LCB1 cGRhdGVTZWFyY2hCb3ggKSB7CglpZiAoIG5leHQgPj0gci5yZXN1bHRDb3VudCAp IHsKCQluZXh0ID0gci5yZXN1bHRDb3VudCAtIDE7Cgl9CglpZiAoIG5leHQgPCAt MSApIHsKCQluZXh0ID0gLTE7Cgl9CglyLnNlbGVjdGVkID0gbmV4dDsKCWlmICgg Y3VyID09IG5leHQgKSB7CgkJcmV0dXJuOyAvLyBub3RoaW5nIHRvIGRvLgoJfQoK CWlmKCBjdXIgPj0gMCApIHsKCQl2YXIgY3VyUm93ID0gZG9jdW1lbnQuZ2V0RWxl bWVudEJ5SWQoIHIucmVzdWx0VGFibGUgKyBjdXIgKTsKCQlpZiggY3VyUm93ICE9 IG51bGwgKSB7CgkJCWN1clJvdy5jbGFzc05hbWUgPSAnb3Mtc3VnZ2VzdC1yZXN1 bHQnOwoJCX0KCX0KCXZhciBuZXdUZXh0OwoJaWYoIG5leHQgPj0gMCApIHsKCQl2 YXIgbmV4dFJvdyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCByLnJlc3VsdFRh YmxlICsgbmV4dCApOwoJCWlmKCBuZXh0Um93ICE9IG51bGwgKSB7CgkJCW5leHRS b3cuY2xhc3NOYW1lID0gb3NfSGlnaGxpZ2h0Q2xhc3MoKTsKCQl9CgkJbmV3VGV4 dCA9IHIucmVzdWx0c1tuZXh0XTsKCX0gZWxzZSB7CgkJbmV3VGV4dCA9IHIub3Jp Z2luYWw7Cgl9CgoJLy8gYWRqdXN0IHRoZSBzY3JvbGxiYXIgaWYgYW55CglpZigg ci5jb250YWluZXJDb3VudCA8IHIucmVzdWx0Q291bnQgKSB7CgkJdmFyIGMgPSBk b2N1bWVudC5nZXRFbGVtZW50QnlJZCggci5jb250YWluZXIgKTsKCQl2YXIgdlN0 YXJ0ID0gYy5zY3JvbGxUb3AgLyByLmNvbnRhaW5lclJvdzsKCQl2YXIgdkVuZCA9 IHZTdGFydCArIHIuY29udGFpbmVyQ291bnQ7CgkJaWYoIG5leHQgPCB2U3RhcnQg KSB7CgkJCWMuc2Nyb2xsVG9wID0gbmV4dCAqIHIuY29udGFpbmVyUm93OwoJCX0g ZWxzZSBpZiggbmV4dCA+PSB2RW5kICkgewoJCQljLnNjcm9sbFRvcCA9ICggbmV4 dCAtIHIuY29udGFpbmVyQ291bnQgKyAxICkgKiByLmNvbnRhaW5lclJvdzsKCQl9 Cgl9CgoJLy8gdXBkYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgc2VhcmNoIGJveAoJ aWYoIHVwZGF0ZVNlYXJjaEJveCApIHsKCQlvc191cGRhdGVTZWFyY2hRdWVyeSgg ciwgbmV3VGV4dCApOwoJfQp9CgpmdW5jdGlvbiBvc19IaWdobGlnaHRDbGFzcygp IHsKCXZhciBtYXRjaCA9IG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FwcGxl V2ViS2l0XC8oXGQrKS8pOwoJaWYgKCBtYXRjaCApIHsKCQl2YXIgd2ViS2l0VmVy c2lvbiA9IHBhcnNlSW50KCBtYXRjaFsxXSApOwoJCWlmICggd2ViS2l0VmVyc2lv biA8IDUyMyApIHsKCQkJLy8gQ1NTIHN5c3RlbSBoaWdobGlnaHQgY29sb3JzIGJy b2tlbiBvbiBvbGQgU2FmYXJpCgkJCS8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn L3Nob3dfYnVnLmNnaT9pZD02MTI5CgkJCS8vIFNhZmFyaSAzLjAuNCwgMy4xIGtu b3duIG9rCgkJCXJldHVybiAnb3Mtc3VnZ2VzdC1yZXN1bHQtaGwtd2Via2l0JzsK CQl9Cgl9CglyZXR1cm4gJ29zLXN1Z2dlc3QtcmVzdWx0LWhsJzsKfQoKZnVuY3Rp b24gb3NfdXBkYXRlU2VhcmNoUXVlcnkoIHIsIG5ld1RleHQgKSB7Cglkb2N1bWVu dC5nZXRFbGVtZW50QnlJZCggci5zZWFyY2hib3ggKS52YWx1ZSA9IG5ld1RleHQ7 CglyLnF1ZXJ5ID0gbmV3VGV4dDsKfQoKCi8qKioqKioqKioqKioqKioqKioqKgog KiAgTW91c2UgZXZlbnRzCiAqKioqKioqKioqKioqKioqKioqKi8KCi8qKiBNb3Vz ZSBvdmVyIHRoZSBjb250YWluZXIgKi8KZnVuY3Rpb24gb3NfZXZlbnRNb3VzZW92 ZXIoIHNyY0lkLCBlICkgewoJdmFyIHRhcmcgPSBvc19nZXRUYXJnZXQoIGUgKTsK CXZhciByID0gb3NfbWFwW3NyY0lkXTsKCWlmKCByID09IG51bGwgfHwgIW9zX21v dXNlX21vdmVkICkgewoJCXJldHVybjsgLy8gbm90IG91ciBldmVudAoJfQoJdmFy IG51bSA9IG9zX2dldE51bWJlclN1ZmZpeCggdGFyZy5pZCApOwoJaWYoIG51bSA+ PSAwICkgewoJCW9zX2NoYW5nZUhpZ2hsaWdodCggciwgci5zZWxlY3RlZCwgbnVt LCBmYWxzZSApOwoJfQp9CgovKiBHZXQgcm93IHdoZXJlIHRoZSBldmVudCBvY2N1 cmVkIChmcm9tIGl0cyBpZCkgKi8KZnVuY3Rpb24gb3NfZ2V0TnVtYmVyU3VmZml4 KCBpZCApIHsKCXZhciBudW0gPSBpZC5zdWJzdHJpbmcoIGlkLmxlbmd0aCAtIDIg KTsKCWlmKCAhKCBudW0uY2hhckF0KCAwICkgPj0gJzAnICYmIG51bS5jaGFyQXQo IDAgKSA8PSAnOScgKSApIHsKCQludW0gPSBudW0uc3Vic3RyaW5nKCAxICk7Cgl9 CglpZiggb3NfaXNOdW1iZXIoIG51bSApICkgewoJCXJldHVybiBwYXJzZUludCgg bnVtICk7Cgl9IGVsc2UgewoJCXJldHVybiAtMTsKCX0KfQoKLyoqIFNhdmUgbW91 c2UgbW92ZSBhcyBsYXN0IGFjdGlvbiAqLwpmdW5jdGlvbiBvc19ldmVudE1vdXNl bW92ZSggc3JjSWQsIGUgKSB7Cglvc19tb3VzZV9tb3ZlZCA9IHRydWU7Cn0KCi8q KiBNb3VzZSBidXR0b24gaGVsZCBkb3duLCByZWdpc3RlciBwb3NzaWJsZSBjbGlj ayAqLwpmdW5jdGlvbiBvc19ldmVudE1vdXNlZG93biggc3JjSWQsIGUgKSB7Cgl2 YXIgdGFyZyA9IG9zX2dldFRhcmdldCggZSApOwoJdmFyIHIgPSBvc19tYXBbc3Jj SWRdOwoJaWYoIHIgPT0gbnVsbCApIHsKCQlyZXR1cm47IC8vIG5vdCBvdXIgZXZl bnQKCX0KCXZhciBudW0gPSBvc19nZXROdW1iZXJTdWZmaXgoIHRhcmcuaWQgKTsK Cglvc19tb3VzZV9wcmVzc2VkID0gdHJ1ZTsKCWlmKCBudW0gPj0gMCApIHsKCQlv c19tb3VzZV9udW0gPSBudW07CgkJLy8gb3NfdXBkYXRlU2VhcmNoUXVlcnkoIHIs IHIucmVzdWx0c1tudW1dICk7Cgl9CgkvLyBrZWVwIHRoZSBmb2N1cyBvbiB0aGUg c2VhcmNoIGZpZWxkCglkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggci5zZWFyY2hi b3ggKS5mb2N1cygpOwoKCXJldHVybiBmYWxzZTsgLy8gcHJldmVudHMgc2VsZWN0 aW9uCn0KCi8qKiBNb3VzZSBidXR0b24gcmVsZWFzZWQsIGNoZWNrIGZvciBjbGlj ayBvbiBzb21lIHJvdyAqLwpmdW5jdGlvbiBvc19ldmVudE1vdXNldXAoIHNyY0lk LCBlICkgewoJdmFyIHRhcmcgPSBvc19nZXRUYXJnZXQoIGUgKTsKCXZhciByID0g b3NfbWFwW3NyY0lkXTsKCWlmKCByID09IG51bGwgKSB7CgkJcmV0dXJuOyAvLyBu b3Qgb3VyIGV2ZW50Cgl9Cgl2YXIgbnVtID0gb3NfZ2V0TnVtYmVyU3VmZml4KCB0 YXJnLmlkICk7CgoJaWYoIG51bSA+PSAwICYmIG9zX21vdXNlX251bSA9PSBudW0g KSB7CgkJb3NfdXBkYXRlU2VhcmNoUXVlcnkoIHIsIHIucmVzdWx0c1tudW1dICk7 CgkJb3NfaGlkZVJlc3VsdHMoIHIgKTsKCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJ ZCggci5zZWFyY2hmb3JtICkuc3VibWl0KCk7Cgl9Cglvc19tb3VzZV9wcmVzc2Vk ID0gZmFsc2U7CgkvLyBrZWVwIHRoZSBmb2N1cyBvbiB0aGUgc2VhcmNoIGZpZWxk Cglkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggci5zZWFyY2hib3ggKS5mb2N1cygp Owp9CgovKiogVG9nZ2xlIHN0dWZmIHNlZW1zIHRvIGJlIGRlYWQgY29kZT8gKi8K Ci8qKiBSZXR1cm4gdGhlIHNwYW4gZWxlbWVudCB0aGF0IGNvbnRhaW5zIHRoZSB0 b2dnbGUgbGluayAqLwpmdW5jdGlvbiBvc19jcmVhdGVUb2dnbGUoIHIsIGNsYXNz TmFtZSApIHsKCXZhciB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ3NwYW4n ICk7Cgl0LmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsKCXQuc2V0QXR0cmlidXRlKCAn aWQnLCByLnRvZ2dsZSApOwoJdmFyIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVt ZW50KCAnYScgKTsKCWxpbmsuc2V0QXR0cmlidXRlKCAnaHJlZicsICdqYXZhc2Ny aXB0OnZvaWQoMCk7JyApOwoJbGluay5vbmNsaWNrID0gZnVuY3Rpb24oKSB7IG9z X3RvZ2dsZSggci5zZWFyY2hib3gsIHIuc2VhcmNoZm9ybSApOyB9OwoJdmFyIG1z ZyA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCB3Z01XU3VnZ2VzdE1lc3NhZ2Vz WzBdICk7CglsaW5rLmFwcGVuZENoaWxkKCBtc2cgKTsKCXQuYXBwZW5kQ2hpbGQo IGxpbmsgKTsKCXJldHVybiB0Owp9CgovKiogQ2FsbCB3aGVuIHVzZXIgY2xpY2tz IG9uIHNvbWUgb2YgdGhlIHRvZ2dsZSBsaW5rcyAqLwpmdW5jdGlvbiBvc190b2dn bGUoIGlucHV0SWQsIGZvcm1OYW1lICkgewoJciA9IG9zX21hcFtpbnB1dElkXTsK CXZhciBtc2cgPSAnJzsKCWlmKCByID09IG51bGwgKSB7CgkJb3NfZW5hYmxlU3Vn Z2VzdGlvbnNPbiggaW5wdXRJZCwgZm9ybU5hbWUgKTsKCQlyID0gb3NfbWFwW2lu cHV0SWRdOwoJCW1zZyA9IHdnTVdTdWdnZXN0TWVzc2FnZXNbMF07Cgl9IGVsc2V7 CgkJb3NfZGlzYWJsZVN1Z2dlc3Rpb25zT24oIGlucHV0SWQsIGZvcm1OYW1lICk7 CgkJbXNnID0gd2dNV1N1Z2dlc3RNZXNzYWdlc1sxXTsKCX0KCS8vIGNoYW5nZSBt ZXNzYWdlCgl2YXIgbGluayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCByLnRv Z2dsZSApLmZpcnN0Q2hpbGQ7CglsaW5rLnJlcGxhY2VDaGlsZCggZG9jdW1lbnQu Y3JlYXRlVGV4dE5vZGUoIG1zZyApLCBsaW5rLmZpcnN0Q2hpbGQgKTsKfQoKaG9v a0V2ZW50KCAnbG9hZCcsIG9zX01XU3VnZ2VzdEluaXQgKTsK ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline; filename=plugins.combined.min.js Content-Type: application/x-javascript; charset=UTF-8; name=plugins.combined.min.js Content-Location: http://bits.wikimedia.org/w/extensions/UsabilityInitiative/js/plugins.combined.min.js?281z67 Content-Transfer-Encoding: Base64 CmlmKHR5cGVvZiBtdz09J3VuZGVmaW5lZCcpe213PXt9O30KbXcudXNhYmlsaXR5 PXttZXNzYWdlczp7fX0KbXcudXNhYmlsaXR5LmxvYWQ9ZnVuY3Rpb24oZGVwcyxj YWxsYmFjayl7Y2FsbGJhY2soKTt9O213LnVzYWJpbGl0eS5hZGRNZXNzYWdlcz1m dW5jdGlvbihtZXNzYWdlcyl7Zm9yKHZhciBrZXkgaW4gbWVzc2FnZXMpe3RoaXMu bWVzc2FnZXNba2V5XT1tZXNzYWdlc1trZXldO319O213LnVzYWJpbGl0eS5nZXRN c2c9ZnVuY3Rpb24oa2V5LGFyZ3Mpe2lmKCEoa2V5IGluIHRoaXMubWVzc2FnZXMp KXtyZXR1cm4nWycra2V5KyddJzt9CnZhciBtc2c9dGhpcy5tZXNzYWdlc1trZXld O2lmKHR5cGVvZiBhcmdzPT0nb2JqZWN0J3x8dHlwZW9mIGFyZ3M9PSdhcnJheScp e2Zvcih2YXIgYXJnS2V5IGluIGFyZ3Mpe21zZz1tc2cucmVwbGFjZSgnXCQnKyhw YXJzZUludChhcmdLZXkpKzEpLGFyZ3NbYXJnS2V5XSk7fX1lbHNlIGlmKHR5cGVv ZiBhcmdzPT0nc3RyaW5nJ3x8dHlwZW9mIGFyZ3M9PSdudW1iZXInKXttc2c9bXNn LnJlcGxhY2UoJyQxJyxhcmdzKTt9CnJldHVybiBtc2c7fTs7alF1ZXJ5LnVpfHwo ZnVuY3Rpb24oJCl7dmFyIF9yZW1vdmU9JC5mbi5yZW1vdmUsaXNGRjI9JC5icm93 c2VyLm1vemlsbGEmJihwYXJzZUZsb2F0KCQuYnJvd3Nlci52ZXJzaW9uKTwxLjkp OyQudWk9e3ZlcnNpb246IjEuNy4xIixwbHVnaW46e2FkZDpmdW5jdGlvbihtb2R1 bGUsb3B0aW9uLHNldCl7dmFyIHByb3RvPSQudWlbbW9kdWxlXS5wcm90b3R5cGU7 Zm9yKHZhciBpIGluIHNldCl7cHJvdG8ucGx1Z2luc1tpXT1wcm90by5wbHVnaW5z W2ldfHxbXTtwcm90by5wbHVnaW5zW2ldLnB1c2goW29wdGlvbixzZXRbaV1dKTt9 fSxjYWxsOmZ1bmN0aW9uKGluc3RhbmNlLG5hbWUsYXJncyl7dmFyIHNldD1pbnN0 YW5jZS5wbHVnaW5zW25hbWVdO2lmKCFzZXR8fCFpbnN0YW5jZS5lbGVtZW50WzBd LnBhcmVudE5vZGUpe3JldHVybjt9CmZvcih2YXIgaT0wO2k8c2V0Lmxlbmd0aDtp Kyspe2lmKGluc3RhbmNlLm9wdGlvbnNbc2V0W2ldWzBdXSl7c2V0W2ldWzFdLmFw cGx5KGluc3RhbmNlLmVsZW1lbnQsYXJncyk7fX19fSxjb250YWluczpmdW5jdGlv bihhLGIpe3JldHVybiBkb2N1bWVudC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj9h LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGIpJjE2OmEhPT1iJiZhLmNvbnRhaW5z KGIpO30saGFzU2Nyb2xsOmZ1bmN0aW9uKGVsLGEpe2lmKCQoZWwpLmNzcygnb3Zl cmZsb3cnKT09J2hpZGRlbicpe3JldHVybiBmYWxzZTt9CnZhciBzY3JvbGw9KGEm JmE9PSdsZWZ0Jyk/J3Njcm9sbExlZnQnOidzY3JvbGxUb3AnLGhhcz1mYWxzZTtp ZihlbFtzY3JvbGxdPjApe3JldHVybiB0cnVlO30KZWxbc2Nyb2xsXT0xO2hhcz0o ZWxbc2Nyb2xsXT4wKTtlbFtzY3JvbGxdPTA7cmV0dXJuIGhhczt9LGlzT3ZlckF4 aXM6ZnVuY3Rpb24oeCxyZWZlcmVuY2Usc2l6ZSl7cmV0dXJuKHg+cmVmZXJlbmNl KSYmKHg8KHJlZmVyZW5jZStzaXplKSk7fSxpc092ZXI6ZnVuY3Rpb24oeSx4LHRv cCxsZWZ0LGhlaWdodCx3aWR0aCl7cmV0dXJuICQudWkuaXNPdmVyQXhpcyh5LHRv cCxoZWlnaHQpJiYkLnVpLmlzT3ZlckF4aXMoeCxsZWZ0LHdpZHRoKTt9LGtleUNv ZGU6e0JBQ0tTUEFDRTo4LENBUFNfTE9DSzoyMCxDT01NQToxODgsQ09OVFJPTDox NyxERUxFVEU6NDYsRE9XTjo0MCxFTkQ6MzUsRU5URVI6MTMsRVNDQVBFOjI3LEhP TUU6MzYsSU5TRVJUOjQ1LExFRlQ6MzcsTlVNUEFEX0FERDoxMDcsTlVNUEFEX0RF Q0lNQUw6MTEwLE5VTVBBRF9ESVZJREU6MTExLE5VTVBBRF9FTlRFUjoxMDgsTlVN UEFEX01VTFRJUExZOjEwNixOVU1QQURfU1VCVFJBQ1Q6MTA5LFBBR0VfRE9XTjoz NCxQQUdFX1VQOjMzLFBFUklPRDoxOTAsUklHSFQ6MzksU0hJRlQ6MTYsU1BBQ0U6 MzIsVEFCOjksVVA6Mzh9fTtpZihpc0ZGMil7dmFyIGF0dHI9JC5hdHRyLHJlbW92 ZUF0dHI9JC5mbi5yZW1vdmVBdHRyLGFyaWFOUz0iaHR0cDovL3d3dy53My5vcmcv MjAwNS8wNy9hYWEiLGFyaWFTdGF0ZT0vXmFyaWEtLyxhcmlhUm9sZT0vXndhaXJv bGU6LzskLmF0dHI9ZnVuY3Rpb24oZWxlbSxuYW1lLHZhbHVlKXt2YXIgc2V0PXZh bHVlIT09dW5kZWZpbmVkO3JldHVybihuYW1lPT0ncm9sZSc/KHNldD9hdHRyLmNh bGwodGhpcyxlbGVtLG5hbWUsIndhaXJvbGU6Iit2YWx1ZSk6KGF0dHIuYXBwbHko dGhpcyxhcmd1bWVudHMpfHwiIikucmVwbGFjZShhcmlhUm9sZSwiIikpOihhcmlh U3RhdGUudGVzdChuYW1lKT8oc2V0P2VsZW0uc2V0QXR0cmlidXRlTlMoYXJpYU5T LG5hbWUucmVwbGFjZShhcmlhU3RhdGUsImFhYToiKSx2YWx1ZSk6YXR0ci5jYWxs KHRoaXMsZWxlbSxuYW1lLnJlcGxhY2UoYXJpYVN0YXRlLCJhYWE6IikpKTphdHRy LmFwcGx5KHRoaXMsYXJndW1lbnRzKSkpO307JC5mbi5yZW1vdmVBdHRyPWZ1bmN0 aW9uKG5hbWUpe3JldHVybihhcmlhU3RhdGUudGVzdChuYW1lKT90aGlzLmVhY2go ZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGFyaWFOUyxuYW1lLnJl cGxhY2UoYXJpYVN0YXRlLCIiKSk7fSk6cmVtb3ZlQXR0ci5jYWxsKHRoaXMsbmFt ZSkpO307fQokLmZuLmV4dGVuZCh7cmVtb3ZlOmZ1bmN0aW9uKCl7JCgiKiIsdGhp cykuYWRkKHRoaXMpLmVhY2goZnVuY3Rpb24oKXskKHRoaXMpLnRyaWdnZXJIYW5k bGVyKCJyZW1vdmUiKTt9KTtyZXR1cm4gX3JlbW92ZS5hcHBseSh0aGlzLGFyZ3Vt ZW50cyk7fSxlbmFibGVTZWxlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5h dHRyKCd1bnNlbGVjdGFibGUnLCdvZmYnKS5jc3MoJ01velVzZXJTZWxlY3QnLCcn KS51bmJpbmQoJ3NlbGVjdHN0YXJ0LnVpJyk7fSxkaXNhYmxlU2VsZWN0aW9uOmZ1 bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXR0cigndW5zZWxlY3RhYmxlJywnb24nKS5j c3MoJ01velVzZXJTZWxlY3QnLCdub25lJykuYmluZCgnc2VsZWN0c3RhcnQudWkn LGZ1bmN0aW9uKCl7cmV0dXJuIGZhbHNlO30pO30sc2Nyb2xsUGFyZW50OmZ1bmN0 aW9uKCl7dmFyIHNjcm9sbFBhcmVudDtpZigoJC5icm93c2VyLm1zaWUmJigvKHN0 YXRpY3xyZWxhdGl2ZSkvKS50ZXN0KHRoaXMuY3NzKCdwb3NpdGlvbicpKSl8fCgv YWJzb2x1dGUvKS50ZXN0KHRoaXMuY3NzKCdwb3NpdGlvbicpKSl7c2Nyb2xsUGFy ZW50PXRoaXMucGFyZW50cygpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybigvKHJl bGF0aXZlfGFic29sdXRlfGZpeGVkKS8pLnRlc3QoJC5jdXJDU1ModGhpcywncG9z aXRpb24nLDEpKSYmKC8oYXV0b3xzY3JvbGwpLykudGVzdCgkLmN1ckNTUyh0aGlz LCdvdmVyZmxvdycsMSkrJC5jdXJDU1ModGhpcywnb3ZlcmZsb3cteScsMSkrJC5j dXJDU1ModGhpcywnb3ZlcmZsb3cteCcsMSkpO30pLmVxKDApO31lbHNle3Njcm9s bFBhcmVudD10aGlzLnBhcmVudHMoKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4o LyhhdXRvfHNjcm9sbCkvKS50ZXN0KCQuY3VyQ1NTKHRoaXMsJ292ZXJmbG93Jywx KSskLmN1ckNTUyh0aGlzLCdvdmVyZmxvdy15JywxKSskLmN1ckNTUyh0aGlzLCdv dmVyZmxvdy14JywxKSk7fSkuZXEoMCk7fQpyZXR1cm4oL2ZpeGVkLykudGVzdCh0 aGlzLmNzcygncG9zaXRpb24nKSl8fCFzY3JvbGxQYXJlbnQubGVuZ3RoPyQoZG9j dW1lbnQpOnNjcm9sbFBhcmVudDt9fSk7JC5leHRlbmQoJC5leHByWyc6J10se2Rh dGE6ZnVuY3Rpb24oZWxlbSxpLG1hdGNoKXtyZXR1cm4hISQuZGF0YShlbGVtLG1h dGNoWzNdKTt9LGZvY3VzYWJsZTpmdW5jdGlvbihlbGVtZW50KXt2YXIgbm9kZU5h bWU9ZWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLHRhYkluZGV4PSQuYXR0 cihlbGVtZW50LCd0YWJpbmRleCcpO3JldHVybigvaW5wdXR8c2VsZWN0fHRleHRh cmVhfGJ1dHRvbnxvYmplY3QvLnRlc3Qobm9kZU5hbWUpPyFlbGVtZW50LmRpc2Fi bGVkOidhJz09bm9kZU5hbWV8fCdhcmVhJz09bm9kZU5hbWU/ZWxlbWVudC5ocmVm fHwhaXNOYU4odGFiSW5kZXgpOiFpc05hTih0YWJJbmRleCkpJiYhJChlbGVtZW50 KVsnYXJlYSc9PW5vZGVOYW1lPydwYXJlbnRzJzonY2xvc2VzdCddKCc6aGlkZGVu JykubGVuZ3RoO30sdGFiYmFibGU6ZnVuY3Rpb24oZWxlbWVudCl7dmFyIHRhYklu ZGV4PSQuYXR0cihlbGVtZW50LCd0YWJpbmRleCcpO3JldHVybihpc05hTih0YWJJ bmRleCl8fHRhYkluZGV4Pj0wKSYmJChlbGVtZW50KS5pcygnOmZvY3VzYWJsZScp O319KTtmdW5jdGlvbiBnZXR0ZXIobmFtZXNwYWNlLHBsdWdpbixtZXRob2QsYXJn cyl7ZnVuY3Rpb24gZ2V0TWV0aG9kcyh0eXBlKXt2YXIgbWV0aG9kcz0kW25hbWVz cGFjZV1bcGx1Z2luXVt0eXBlXXx8W107cmV0dXJuKHR5cGVvZiBtZXRob2RzPT0n c3RyaW5nJz9tZXRob2RzLnNwbGl0KC8sP1xzKy8pOm1ldGhvZHMpO30KdmFyIG1l dGhvZHM9Z2V0TWV0aG9kcygnZ2V0dGVyJyk7aWYoYXJncy5sZW5ndGg9PTEmJnR5 cGVvZiBhcmdzWzBdPT0nc3RyaW5nJyl7bWV0aG9kcz1tZXRob2RzLmNvbmNhdChn ZXRNZXRob2RzKCdnZXR0ZXJTZXR0ZXInKSk7fQpyZXR1cm4oJC5pbkFycmF5KG1l dGhvZCxtZXRob2RzKSE9LTEpO30KJC53aWRnZXQ9ZnVuY3Rpb24obmFtZSxwcm90 b3R5cGUpe3ZhciBuYW1lc3BhY2U9bmFtZS5zcGxpdCgiLiIpWzBdO25hbWU9bmFt ZS5zcGxpdCgiLiIpWzFdOyQuZm5bbmFtZV09ZnVuY3Rpb24ob3B0aW9ucyl7dmFy IGlzTWV0aG9kQ2FsbD0odHlwZW9mIG9wdGlvbnM9PSdzdHJpbmcnKSxhcmdzPUFy cmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtpZihpc01ldGhv ZENhbGwmJm9wdGlvbnMuc3Vic3RyaW5nKDAsMSk9PSdfJyl7cmV0dXJuIHRoaXM7 fQppZihpc01ldGhvZENhbGwmJmdldHRlcihuYW1lc3BhY2UsbmFtZSxvcHRpb25z LGFyZ3MpKXt2YXIgaW5zdGFuY2U9JC5kYXRhKHRoaXNbMF0sbmFtZSk7cmV0dXJu KGluc3RhbmNlP2luc3RhbmNlW29wdGlvbnNdLmFwcGx5KGluc3RhbmNlLGFyZ3Mp OnVuZGVmaW5lZCk7fQpyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGlu c3RhbmNlPSQuZGF0YSh0aGlzLG5hbWUpOyghaW5zdGFuY2UmJiFpc01ldGhvZENh bGwmJiQuZGF0YSh0aGlzLG5hbWUsbmV3ICRbbmFtZXNwYWNlXVtuYW1lXSh0aGlz LG9wdGlvbnMpKS5faW5pdCgpKTsoaW5zdGFuY2UmJmlzTWV0aG9kQ2FsbCYmJC5p c0Z1bmN0aW9uKGluc3RhbmNlW29wdGlvbnNdKSYmaW5zdGFuY2Vbb3B0aW9uc10u YXBwbHkoaW5zdGFuY2UsYXJncykpO30pO307JFtuYW1lc3BhY2VdPSRbbmFtZXNw YWNlXXx8e307JFtuYW1lc3BhY2VdW25hbWVdPWZ1bmN0aW9uKGVsZW1lbnQsb3B0 aW9ucyl7dmFyIHNlbGY9dGhpczt0aGlzLm5hbWVzcGFjZT1uYW1lc3BhY2U7dGhp cy53aWRnZXROYW1lPW5hbWU7dGhpcy53aWRnZXRFdmVudFByZWZpeD0kW25hbWVz cGFjZV1bbmFtZV0uZXZlbnRQcmVmaXh8fG5hbWU7dGhpcy53aWRnZXRCYXNlQ2xh c3M9bmFtZXNwYWNlKyctJytuYW1lO3RoaXMub3B0aW9ucz0kLmV4dGVuZCh7fSwk LndpZGdldC5kZWZhdWx0cywkW25hbWVzcGFjZV1bbmFtZV0uZGVmYXVsdHMsJC5t ZXRhZGF0YSYmJC5tZXRhZGF0YS5nZXQoZWxlbWVudClbbmFtZV0sb3B0aW9ucyk7 dGhpcy5lbGVtZW50PSQoZWxlbWVudCkuYmluZCgnc2V0RGF0YS4nK25hbWUsZnVu Y3Rpb24oZXZlbnQsa2V5LHZhbHVlKXtpZihldmVudC50YXJnZXQ9PWVsZW1lbnQp e3JldHVybiBzZWxmLl9zZXREYXRhKGtleSx2YWx1ZSk7fX0pLmJpbmQoJ2dldERh dGEuJytuYW1lLGZ1bmN0aW9uKGV2ZW50LGtleSl7aWYoZXZlbnQudGFyZ2V0PT1l bGVtZW50KXtyZXR1cm4gc2VsZi5fZ2V0RGF0YShrZXkpO319KS5iaW5kKCdyZW1v dmUnLGZ1bmN0aW9uKCl7cmV0dXJuIHNlbGYuZGVzdHJveSgpO30pO307JFtuYW1l c3BhY2VdW25hbWVdLnByb3RvdHlwZT0kLmV4dGVuZCh7fSwkLndpZGdldC5wcm90 b3R5cGUscHJvdG90eXBlKTskW25hbWVzcGFjZV1bbmFtZV0uZ2V0dGVyU2V0dGVy PSdvcHRpb24nO307JC53aWRnZXQucHJvdG90eXBlPXtfaW5pdDpmdW5jdGlvbigp e30sZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5yZW1vdmVEYXRhKHRo aXMud2lkZ2V0TmFtZSkucmVtb3ZlQ2xhc3ModGhpcy53aWRnZXRCYXNlQ2xhc3Mr Jy1kaXNhYmxlZCcrJyAnK3RoaXMubmFtZXNwYWNlKyctc3RhdGUtZGlzYWJsZWQn KS5yZW1vdmVBdHRyKCdhcmlhLWRpc2FibGVkJyk7fSxvcHRpb246ZnVuY3Rpb24o a2V5LHZhbHVlKXt2YXIgb3B0aW9ucz1rZXksc2VsZj10aGlzO2lmKHR5cGVvZiBr ZXk9PSJzdHJpbmciKXtpZih2YWx1ZT09PXVuZGVmaW5lZCl7cmV0dXJuIHRoaXMu X2dldERhdGEoa2V5KTt9Cm9wdGlvbnM9e307b3B0aW9uc1trZXldPXZhbHVlO30K JC5lYWNoKG9wdGlvbnMsZnVuY3Rpb24oa2V5LHZhbHVlKXtzZWxmLl9zZXREYXRh KGtleSx2YWx1ZSk7fSk7fSxfZ2V0RGF0YTpmdW5jdGlvbihrZXkpe3JldHVybiB0 aGlzLm9wdGlvbnNba2V5XTt9LF9zZXREYXRhOmZ1bmN0aW9uKGtleSx2YWx1ZSl7 dGhpcy5vcHRpb25zW2tleV09dmFsdWU7aWYoa2V5PT0nZGlzYWJsZWQnKXt0aGlz LmVsZW1lbnQKW3ZhbHVlPydhZGRDbGFzcyc6J3JlbW92ZUNsYXNzJ10odGhpcy53 aWRnZXRCYXNlQ2xhc3MrJy1kaXNhYmxlZCcrJyAnKwp0aGlzLm5hbWVzcGFjZSsn LXN0YXRlLWRpc2FibGVkJykuYXR0cigiYXJpYS1kaXNhYmxlZCIsdmFsdWUpO319 LGVuYWJsZTpmdW5jdGlvbigpe3RoaXMuX3NldERhdGEoJ2Rpc2FibGVkJyxmYWxz ZSk7fSxkaXNhYmxlOmZ1bmN0aW9uKCl7dGhpcy5fc2V0RGF0YSgnZGlzYWJsZWQn LHRydWUpO30sX3RyaWdnZXI6ZnVuY3Rpb24odHlwZSxldmVudCxkYXRhKXt2YXIg Y2FsbGJhY2s9dGhpcy5vcHRpb25zW3R5cGVdLGV2ZW50TmFtZT0odHlwZT09dGhp cy53aWRnZXRFdmVudFByZWZpeD90eXBlOnRoaXMud2lkZ2V0RXZlbnRQcmVmaXgr dHlwZSk7ZXZlbnQ9JC5FdmVudChldmVudCk7ZXZlbnQudHlwZT1ldmVudE5hbWU7 aWYoZXZlbnQub3JpZ2luYWxFdmVudCl7Zm9yKHZhciBpPSQuZXZlbnQucHJvcHMu bGVuZ3RoLHByb3A7aTspe3Byb3A9JC5ldmVudC5wcm9wc1stLWldO2V2ZW50W3By b3BdPWV2ZW50Lm9yaWdpbmFsRXZlbnRbcHJvcF07fX0KdGhpcy5lbGVtZW50LnRy aWdnZXIoZXZlbnQsZGF0YSk7cmV0dXJuISgkLmlzRnVuY3Rpb24oY2FsbGJhY2sp JiZjYWxsYmFjay5jYWxsKHRoaXMuZWxlbWVudFswXSxldmVudCxkYXRhKT09PWZh bHNlfHxldmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSk7fX07JC53aWRnZXQuZGVm YXVsdHM9e2Rpc2FibGVkOmZhbHNlfTskLnVpLm1vdXNlPXtfbW91c2VJbml0OmZ1 bmN0aW9uKCl7dmFyIHNlbGY9dGhpczt0aGlzLmVsZW1lbnQuYmluZCgnbW91c2Vk b3duLicrdGhpcy53aWRnZXROYW1lLGZ1bmN0aW9uKGV2ZW50KXtyZXR1cm4gc2Vs Zi5fbW91c2VEb3duKGV2ZW50KTt9KS5iaW5kKCdjbGljay4nK3RoaXMud2lkZ2V0 TmFtZSxmdW5jdGlvbihldmVudCl7aWYoc2VsZi5fcHJldmVudENsaWNrRXZlbnQp e3NlbGYuX3ByZXZlbnRDbGlja0V2ZW50PWZhbHNlO2V2ZW50LnN0b3BJbW1lZGlh dGVQcm9wYWdhdGlvbigpO3JldHVybiBmYWxzZTt9fSk7aWYoJC5icm93c2VyLm1z aWUpe3RoaXMuX21vdXNlVW5zZWxlY3RhYmxlPXRoaXMuZWxlbWVudC5hdHRyKCd1 bnNlbGVjdGFibGUnKTt0aGlzLmVsZW1lbnQuYXR0cigndW5zZWxlY3RhYmxlJywn b24nKTt9CnRoaXMuc3RhcnRlZD1mYWxzZTt9LF9tb3VzZURlc3Ryb3k6ZnVuY3Rp b24oKXt0aGlzLmVsZW1lbnQudW5iaW5kKCcuJyt0aGlzLndpZGdldE5hbWUpOygk LmJyb3dzZXIubXNpZSYmdGhpcy5lbGVtZW50LmF0dHIoJ3Vuc2VsZWN0YWJsZScs dGhpcy5fbW91c2VVbnNlbGVjdGFibGUpKTt9LF9tb3VzZURvd246ZnVuY3Rpb24o ZXZlbnQpe2V2ZW50Lm9yaWdpbmFsRXZlbnQ9ZXZlbnQub3JpZ2luYWxFdmVudHx8 e307aWYoZXZlbnQub3JpZ2luYWxFdmVudC5tb3VzZUhhbmRsZWQpe3JldHVybjt9 Cih0aGlzLl9tb3VzZVN0YXJ0ZWQmJnRoaXMuX21vdXNlVXAoZXZlbnQpKTt0aGlz Ll9tb3VzZURvd25FdmVudD1ldmVudDt2YXIgc2VsZj10aGlzLGJ0bklzTGVmdD0o ZXZlbnQud2hpY2g9PTEpLGVsSXNDYW5jZWw9KHR5cGVvZiB0aGlzLm9wdGlvbnMu Y2FuY2VsPT0ic3RyaW5nIj8kKGV2ZW50LnRhcmdldCkucGFyZW50cygpLmFkZChl dmVudC50YXJnZXQpLmZpbHRlcih0aGlzLm9wdGlvbnMuY2FuY2VsKS5sZW5ndGg6 ZmFsc2UpO2lmKCFidG5Jc0xlZnR8fGVsSXNDYW5jZWx8fCF0aGlzLl9tb3VzZUNh cHR1cmUoZXZlbnQpKXtyZXR1cm4gdHJ1ZTt9CnRoaXMubW91c2VEZWxheU1ldD0h dGhpcy5vcHRpb25zLmRlbGF5O2lmKCF0aGlzLm1vdXNlRGVsYXlNZXQpe3RoaXMu X21vdXNlRGVsYXlUaW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7c2VsZi5tb3Vz ZURlbGF5TWV0PXRydWU7fSx0aGlzLm9wdGlvbnMuZGVsYXkpO30KaWYodGhpcy5f bW91c2VEaXN0YW5jZU1ldChldmVudCkmJnRoaXMuX21vdXNlRGVsYXlNZXQoZXZl bnQpKXt0aGlzLl9tb3VzZVN0YXJ0ZWQ9KHRoaXMuX21vdXNlU3RhcnQoZXZlbnQp IT09ZmFsc2UpO2lmKCF0aGlzLl9tb3VzZVN0YXJ0ZWQpe2V2ZW50LnByZXZlbnRE ZWZhdWx0KCk7cmV0dXJuIHRydWU7fX0KdGhpcy5fbW91c2VNb3ZlRGVsZWdhdGU9 ZnVuY3Rpb24oZXZlbnQpe3JldHVybiBzZWxmLl9tb3VzZU1vdmUoZXZlbnQpO307 dGhpcy5fbW91c2VVcERlbGVnYXRlPWZ1bmN0aW9uKGV2ZW50KXtyZXR1cm4gc2Vs Zi5fbW91c2VVcChldmVudCk7fTskKGRvY3VtZW50KS5iaW5kKCdtb3VzZW1vdmUu Jyt0aGlzLndpZGdldE5hbWUsdGhpcy5fbW91c2VNb3ZlRGVsZWdhdGUpLmJpbmQo J21vdXNldXAuJyt0aGlzLndpZGdldE5hbWUsdGhpcy5fbW91c2VVcERlbGVnYXRl KTsoJC5icm93c2VyLnNhZmFyaXx8ZXZlbnQucHJldmVudERlZmF1bHQoKSk7ZXZl bnQub3JpZ2luYWxFdmVudC5tb3VzZUhhbmRsZWQ9dHJ1ZTtyZXR1cm4gdHJ1ZTt9 LF9tb3VzZU1vdmU6ZnVuY3Rpb24oZXZlbnQpe2lmKCQuYnJvd3Nlci5tc2llJiYh ZXZlbnQuYnV0dG9uKXtyZXR1cm4gdGhpcy5fbW91c2VVcChldmVudCk7fQppZih0 aGlzLl9tb3VzZVN0YXJ0ZWQpe3RoaXMuX21vdXNlRHJhZyhldmVudCk7cmV0dXJu IGV2ZW50LnByZXZlbnREZWZhdWx0KCk7fQppZih0aGlzLl9tb3VzZURpc3RhbmNl TWV0KGV2ZW50KSYmdGhpcy5fbW91c2VEZWxheU1ldChldmVudCkpe3RoaXMuX21v dXNlU3RhcnRlZD0odGhpcy5fbW91c2VTdGFydCh0aGlzLl9tb3VzZURvd25FdmVu dCxldmVudCkhPT1mYWxzZSk7KHRoaXMuX21vdXNlU3RhcnRlZD90aGlzLl9tb3Vz ZURyYWcoZXZlbnQpOnRoaXMuX21vdXNlVXAoZXZlbnQpKTt9CnJldHVybiF0aGlz Ll9tb3VzZVN0YXJ0ZWQ7fSxfbW91c2VVcDpmdW5jdGlvbihldmVudCl7JChkb2N1 bWVudCkudW5iaW5kKCdtb3VzZW1vdmUuJyt0aGlzLndpZGdldE5hbWUsdGhpcy5f bW91c2VNb3ZlRGVsZWdhdGUpLnVuYmluZCgnbW91c2V1cC4nK3RoaXMud2lkZ2V0 TmFtZSx0aGlzLl9tb3VzZVVwRGVsZWdhdGUpO2lmKHRoaXMuX21vdXNlU3RhcnRl ZCl7dGhpcy5fbW91c2VTdGFydGVkPWZhbHNlO3RoaXMuX3ByZXZlbnRDbGlja0V2 ZW50PShldmVudC50YXJnZXQ9PXRoaXMuX21vdXNlRG93bkV2ZW50LnRhcmdldCk7 dGhpcy5fbW91c2VTdG9wKGV2ZW50KTt9CnJldHVybiBmYWxzZTt9LF9tb3VzZURp c3RhbmNlTWV0OmZ1bmN0aW9uKGV2ZW50KXtyZXR1cm4oTWF0aC5tYXgoTWF0aC5h YnModGhpcy5fbW91c2VEb3duRXZlbnQucGFnZVgtZXZlbnQucGFnZVgpLE1hdGgu YWJzKHRoaXMuX21vdXNlRG93bkV2ZW50LnBhZ2VZLWV2ZW50LnBhZ2VZKSk+PXRo aXMub3B0aW9ucy5kaXN0YW5jZSk7fSxfbW91c2VEZWxheU1ldDpmdW5jdGlvbihl dmVudCl7cmV0dXJuIHRoaXMubW91c2VEZWxheU1ldDt9LF9tb3VzZVN0YXJ0OmZ1 bmN0aW9uKGV2ZW50KXt9LF9tb3VzZURyYWc6ZnVuY3Rpb24oZXZlbnQpe30sX21v dXNlU3RvcDpmdW5jdGlvbihldmVudCl7fSxfbW91c2VDYXB0dXJlOmZ1bmN0aW9u KGV2ZW50KXtyZXR1cm4gdHJ1ZTt9fTskLnVpLm1vdXNlLmRlZmF1bHRzPXtjYW5j ZWw6bnVsbCxkaXN0YW5jZToxLGRlbGF5OjB9O30pKGpRdWVyeSk7KGZ1bmN0aW9u KCQpeyQuZXh0ZW5kKCQudWkse2RhdGVwaWNrZXI6e3ZlcnNpb246IjEuNy4xIn19 KTt2YXIgUFJPUF9OQU1FPSdkYXRlcGlja2VyJztmdW5jdGlvbiBEYXRlcGlja2Vy KCl7dGhpcy5kZWJ1Zz1mYWxzZTt0aGlzLl9jdXJJbnN0PW51bGw7dGhpcy5fa2V5 RXZlbnQ9ZmFsc2U7dGhpcy5fZGlzYWJsZWRJbnB1dHM9W107dGhpcy5fZGF0ZXBp Y2tlclNob3dpbmc9ZmFsc2U7dGhpcy5faW5EaWFsb2c9ZmFsc2U7dGhpcy5fbWFp bkRpdklkPSd1aS1kYXRlcGlja2VyLWRpdic7dGhpcy5faW5saW5lQ2xhc3M9J3Vp LWRhdGVwaWNrZXItaW5saW5lJzt0aGlzLl9hcHBlbmRDbGFzcz0ndWktZGF0ZXBp Y2tlci1hcHBlbmQnO3RoaXMuX3RyaWdnZXJDbGFzcz0ndWktZGF0ZXBpY2tlci10 cmlnZ2VyJzt0aGlzLl9kaWFsb2dDbGFzcz0ndWktZGF0ZXBpY2tlci1kaWFsb2cn O3RoaXMuX2Rpc2FibGVDbGFzcz0ndWktZGF0ZXBpY2tlci1kaXNhYmxlZCc7dGhp cy5fdW5zZWxlY3RhYmxlQ2xhc3M9J3VpLWRhdGVwaWNrZXItdW5zZWxlY3RhYmxl Jzt0aGlzLl9jdXJyZW50Q2xhc3M9J3VpLWRhdGVwaWNrZXItY3VycmVudC1kYXkn O3RoaXMuX2RheU92ZXJDbGFzcz0ndWktZGF0ZXBpY2tlci1kYXlzLWNlbGwtb3Zl cic7dGhpcy5yZWdpb25hbD1bXTt0aGlzLnJlZ2lvbmFsWycnXT17Y2xvc2VUZXh0 OidEb25lJyxwcmV2VGV4dDonUHJldicsbmV4dFRleHQ6J05leHQnLGN1cnJlbnRU ZXh0OidUb2RheScsbW9udGhOYW1lczpbJ0phbnVhcnknLCdGZWJydWFyeScsJ01h cmNoJywnQXByaWwnLCdNYXknLCdKdW5lJywnSnVseScsJ0F1Z3VzdCcsJ1NlcHRl bWJlcicsJ09jdG9iZXInLCdOb3ZlbWJlcicsJ0RlY2VtYmVyJ10sbW9udGhOYW1l c1Nob3J0OlsnSmFuJywnRmViJywnTWFyJywnQXByJywnTWF5JywnSnVuJywnSnVs JywnQXVnJywnU2VwJywnT2N0JywnTm92JywnRGVjJ10sZGF5TmFtZXM6WydTdW5k YXknLCdNb25kYXknLCdUdWVzZGF5JywnV2VkbmVzZGF5JywnVGh1cnNkYXknLCdG cmlkYXknLCdTYXR1cmRheSddLGRheU5hbWVzU2hvcnQ6WydTdW4nLCdNb24nLCdU dWUnLCdXZWQnLCdUaHUnLCdGcmknLCdTYXQnXSxkYXlOYW1lc01pbjpbJ1N1Jywn TW8nLCdUdScsJ1dlJywnVGgnLCdGcicsJ1NhJ10sZGF0ZUZvcm1hdDonbW0vZGQv eXknLGZpcnN0RGF5OjAsaXNSVEw6ZmFsc2V9O3RoaXMuX2RlZmF1bHRzPXtzaG93 T246J2ZvY3VzJyxzaG93QW5pbTonc2hvdycsc2hvd09wdGlvbnM6e30sZGVmYXVs dERhdGU6bnVsbCxhcHBlbmRUZXh0OicnLGJ1dHRvblRleHQ6Jy4uLicsYnV0dG9u SW1hZ2U6JycsYnV0dG9uSW1hZ2VPbmx5OmZhbHNlLGhpZGVJZk5vUHJldk5leHQ6 ZmFsc2UsbmF2aWdhdGlvbkFzRGF0ZUZvcm1hdDpmYWxzZSxnb3RvQ3VycmVudDpm YWxzZSxjaGFuZ2VNb250aDpmYWxzZSxjaGFuZ2VZZWFyOmZhbHNlLHNob3dNb250 aEFmdGVyWWVhcjpmYWxzZSx5ZWFyUmFuZ2U6Jy0xMDorMTAnLHNob3dPdGhlck1v bnRoczpmYWxzZSxjYWxjdWxhdGVXZWVrOnRoaXMuaXNvODYwMVdlZWssc2hvcnRZ ZWFyQ3V0b2ZmOicrMTAnLG1pbkRhdGU6bnVsbCxtYXhEYXRlOm51bGwsZHVyYXRp b246J25vcm1hbCcsYmVmb3JlU2hvd0RheTpudWxsLGJlZm9yZVNob3c6bnVsbCxv blNlbGVjdDpudWxsLG9uQ2hhbmdlTW9udGhZZWFyOm51bGwsb25DbG9zZTpudWxs LG51bWJlck9mTW9udGhzOjEsc2hvd0N1cnJlbnRBdFBvczowLHN0ZXBNb250aHM6 MSxzdGVwQmlnTW9udGhzOjEyLGFsdEZpZWxkOicnLGFsdEZvcm1hdDonJyxjb25z dHJhaW5JbnB1dDp0cnVlLHNob3dCdXR0b25QYW5lbDpmYWxzZX07JC5leHRlbmQo dGhpcy5fZGVmYXVsdHMsdGhpcy5yZWdpb25hbFsnJ10pO3RoaXMuZHBEaXY9JCgn PGRpdiBpZD0iJyt0aGlzLl9tYWluRGl2SWQrJyIgY2xhc3M9InVpLWRhdGVwaWNr ZXIgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWhlbHBlci1jbGVhcmZp eCB1aS1jb3JuZXItYWxsIHVpLWhlbHBlci1oaWRkZW4tYWNjZXNzaWJsZSI+PC9k aXY+Jyk7fQokLmV4dGVuZChEYXRlcGlja2VyLnByb3RvdHlwZSx7bWFya2VyQ2xh c3NOYW1lOidoYXNEYXRlcGlja2VyJyxsb2c6ZnVuY3Rpb24oKXtpZih0aGlzLmRl YnVnKQpjb25zb2xlLmxvZy5hcHBseSgnJyxhcmd1bWVudHMpO30sc2V0RGVmYXVs dHM6ZnVuY3Rpb24oc2V0dGluZ3Mpe2V4dGVuZFJlbW92ZSh0aGlzLl9kZWZhdWx0 cyxzZXR0aW5nc3x8e30pO3JldHVybiB0aGlzO30sX2F0dGFjaERhdGVwaWNrZXI6 ZnVuY3Rpb24odGFyZ2V0LHNldHRpbmdzKXt2YXIgaW5saW5lU2V0dGluZ3M9bnVs bDtmb3IodmFyIGF0dHJOYW1lIGluIHRoaXMuX2RlZmF1bHRzKXt2YXIgYXR0clZh bHVlPXRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGU6JythdHRyTmFtZSk7aWYoYXR0 clZhbHVlKXtpbmxpbmVTZXR0aW5ncz1pbmxpbmVTZXR0aW5nc3x8e307dHJ5e2lu bGluZVNldHRpbmdzW2F0dHJOYW1lXT1ldmFsKGF0dHJWYWx1ZSk7fWNhdGNoKGVy cil7aW5saW5lU2V0dGluZ3NbYXR0ck5hbWVdPWF0dHJWYWx1ZTt9fX0KdmFyIG5v ZGVOYW1lPXRhcmdldC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3ZhciBpbmxpbmU9 KG5vZGVOYW1lPT0nZGl2J3x8bm9kZU5hbWU9PSdzcGFuJyk7aWYoIXRhcmdldC5p ZCkKdGFyZ2V0LmlkPSdkcCcrKCsrdGhpcy51dWlkKTt2YXIgaW5zdD10aGlzLl9u ZXdJbnN0KCQodGFyZ2V0KSxpbmxpbmUpO2luc3Quc2V0dGluZ3M9JC5leHRlbmQo e30sc2V0dGluZ3N8fHt9LGlubGluZVNldHRpbmdzfHx7fSk7aWYobm9kZU5hbWU9 PSdpbnB1dCcpe3RoaXMuX2Nvbm5lY3REYXRlcGlja2VyKHRhcmdldCxpbnN0KTt9 ZWxzZSBpZihpbmxpbmUpe3RoaXMuX2lubGluZURhdGVwaWNrZXIodGFyZ2V0LGlu c3QpO319LF9uZXdJbnN0OmZ1bmN0aW9uKHRhcmdldCxpbmxpbmUpe3ZhciBpZD10 YXJnZXRbMF0uaWQucmVwbGFjZSgvKFs6XFtcXVwuXSkvZywnXFxcXCQxJyk7cmV0 dXJue2lkOmlkLGlucHV0OnRhcmdldCxzZWxlY3RlZERheTowLHNlbGVjdGVkTW9u dGg6MCxzZWxlY3RlZFllYXI6MCxkcmF3TW9udGg6MCxkcmF3WWVhcjowLGlubGlu ZTppbmxpbmUsZHBEaXY6KCFpbmxpbmU/dGhpcy5kcERpdjokKCc8ZGl2IGNsYXNz PSInK3RoaXMuX2lubGluZUNsYXNzKycgdWktZGF0ZXBpY2tlciB1aS13aWRnZXQg dWktd2lkZ2V0LWNvbnRlbnQgdWktaGVscGVyLWNsZWFyZml4IHVpLWNvcm5lci1h bGwiPjwvZGl2PicpKX07fSxfY29ubmVjdERhdGVwaWNrZXI6ZnVuY3Rpb24odGFy Z2V0LGluc3Qpe3ZhciBpbnB1dD0kKHRhcmdldCk7aW5zdC50cmlnZ2VyPSQoW10p O2lmKGlucHV0Lmhhc0NsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKSkKcmV0dXJu O3ZhciBhcHBlbmRUZXh0PXRoaXMuX2dldChpbnN0LCdhcHBlbmRUZXh0Jyk7dmFy IGlzUlRMPXRoaXMuX2dldChpbnN0LCdpc1JUTCcpO2lmKGFwcGVuZFRleHQpCmlu cHV0W2lzUlRMPydiZWZvcmUnOidhZnRlciddKCc8c3BhbiBjbGFzcz0iJyt0aGlz Ll9hcHBlbmRDbGFzcysnIj4nK2FwcGVuZFRleHQrJzwvc3Bhbj4nKTt2YXIgc2hv d09uPXRoaXMuX2dldChpbnN0LCdzaG93T24nKTtpZihzaG93T249PSdmb2N1cyd8 fHNob3dPbj09J2JvdGgnKQppbnB1dC5mb2N1cyh0aGlzLl9zaG93RGF0ZXBpY2tl cik7aWYoc2hvd09uPT0nYnV0dG9uJ3x8c2hvd09uPT0nYm90aCcpe3ZhciBidXR0 b25UZXh0PXRoaXMuX2dldChpbnN0LCdidXR0b25UZXh0Jyk7dmFyIGJ1dHRvbklt YWdlPXRoaXMuX2dldChpbnN0LCdidXR0b25JbWFnZScpO2luc3QudHJpZ2dlcj0k KHRoaXMuX2dldChpbnN0LCdidXR0b25JbWFnZU9ubHknKT8kKCc8aW1nLz4nKS5h ZGRDbGFzcyh0aGlzLl90cmlnZ2VyQ2xhc3MpLmF0dHIoe3NyYzpidXR0b25JbWFn ZSxhbHQ6YnV0dG9uVGV4dCx0aXRsZTpidXR0b25UZXh0fSk6JCgnPGJ1dHRvbiB0 eXBlPSJidXR0b24iPjwvYnV0dG9uPicpLmFkZENsYXNzKHRoaXMuX3RyaWdnZXJD bGFzcykuaHRtbChidXR0b25JbWFnZT09Jyc/YnV0dG9uVGV4dDokKCc8aW1nLz4n KS5hdHRyKHtzcmM6YnV0dG9uSW1hZ2UsYWx0OmJ1dHRvblRleHQsdGl0bGU6YnV0 dG9uVGV4dH0pKSk7aW5wdXRbaXNSVEw/J2JlZm9yZSc6J2FmdGVyJ10oaW5zdC50 cmlnZ2VyKTtpbnN0LnRyaWdnZXIuY2xpY2soZnVuY3Rpb24oKXtpZigkLmRhdGVw aWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nJiYkLmRhdGVwaWNrZXIuX2xhc3RJbnB1 dD09dGFyZ2V0KQokLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCk7ZWxzZQok LmRhdGVwaWNrZXIuX3Nob3dEYXRlcGlja2VyKHRhcmdldCk7cmV0dXJuIGZhbHNl O30pO30KaW5wdXQuYWRkQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpLmtleWRv d24odGhpcy5fZG9LZXlEb3duKS5rZXlwcmVzcyh0aGlzLl9kb0tleVByZXNzKS5i aW5kKCJzZXREYXRhLmRhdGVwaWNrZXIiLGZ1bmN0aW9uKGV2ZW50LGtleSx2YWx1 ZSl7aW5zdC5zZXR0aW5nc1trZXldPXZhbHVlO30pLmJpbmQoImdldERhdGEuZGF0 ZXBpY2tlciIsZnVuY3Rpb24oZXZlbnQsa2V5KXtyZXR1cm4gdGhpcy5fZ2V0KGlu c3Qsa2V5KTt9KTskLmRhdGEodGFyZ2V0LFBST1BfTkFNRSxpbnN0KTt9LF9pbmxp bmVEYXRlcGlja2VyOmZ1bmN0aW9uKHRhcmdldCxpbnN0KXt2YXIgZGl2U3Bhbj0k KHRhcmdldCk7aWYoZGl2U3Bhbi5oYXNDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFt ZSkpCnJldHVybjtkaXZTcGFuLmFkZENsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1l KS5hcHBlbmQoaW5zdC5kcERpdikuYmluZCgic2V0RGF0YS5kYXRlcGlja2VyIixm dW5jdGlvbihldmVudCxrZXksdmFsdWUpe2luc3Quc2V0dGluZ3Nba2V5XT12YWx1 ZTt9KS5iaW5kKCJnZXREYXRhLmRhdGVwaWNrZXIiLGZ1bmN0aW9uKGV2ZW50LGtl eSl7cmV0dXJuIHRoaXMuX2dldChpbnN0LGtleSk7fSk7JC5kYXRhKHRhcmdldCxQ Uk9QX05BTUUsaW5zdCk7dGhpcy5fc2V0RGF0ZShpbnN0LHRoaXMuX2dldERlZmF1 bHREYXRlKGluc3QpKTt0aGlzLl91cGRhdGVEYXRlcGlja2VyKGluc3QpO3RoaXMu X3VwZGF0ZUFsdGVybmF0ZShpbnN0KTt9LF9kaWFsb2dEYXRlcGlja2VyOmZ1bmN0 aW9uKGlucHV0LGRhdGVUZXh0LG9uU2VsZWN0LHNldHRpbmdzLHBvcyl7dmFyIGlu c3Q9dGhpcy5fZGlhbG9nSW5zdDtpZighaW5zdCl7dmFyIGlkPSdkcCcrKCsrdGhp cy51dWlkKTt0aGlzLl9kaWFsb2dJbnB1dD0kKCc8aW5wdXQgdHlwZT0idGV4dCIg aWQ9IicraWQrJyIgc2l6ZT0iMSIgc3R5bGU9InBvc2l0aW9uOiBhYnNvbHV0ZTsg dG9wOiAtMTAwcHg7Ii8+Jyk7dGhpcy5fZGlhbG9nSW5wdXQua2V5ZG93bih0aGlz Ll9kb0tleURvd24pOyQoJ2JvZHknKS5hcHBlbmQodGhpcy5fZGlhbG9nSW5wdXQp O2luc3Q9dGhpcy5fZGlhbG9nSW5zdD10aGlzLl9uZXdJbnN0KHRoaXMuX2RpYWxv Z0lucHV0LGZhbHNlKTtpbnN0LnNldHRpbmdzPXt9OyQuZGF0YSh0aGlzLl9kaWFs b2dJbnB1dFswXSxQUk9QX05BTUUsaW5zdCk7fQpleHRlbmRSZW1vdmUoaW5zdC5z ZXR0aW5ncyxzZXR0aW5nc3x8e30pO3RoaXMuX2RpYWxvZ0lucHV0LnZhbChkYXRl VGV4dCk7dGhpcy5fcG9zPShwb3M/KHBvcy5sZW5ndGg/cG9zOltwb3MucGFnZVgs cG9zLnBhZ2VZXSk6bnVsbCk7aWYoIXRoaXMuX3Bvcyl7dmFyIGJyb3dzZXJXaWR0 aD13aW5kb3cuaW5uZXJXaWR0aHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNs aWVudFdpZHRofHxkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoO3ZhciBicm93c2Vy SGVpZ2h0PXdpbmRvdy5pbm5lckhlaWdodHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVt ZW50LmNsaWVudEhlaWdodHx8ZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQ7dmFy IHNjcm9sbFg9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnR8fGRv Y3VtZW50LmJvZHkuc2Nyb2xsTGVmdDt2YXIgc2Nyb2xsWT1kb2N1bWVudC5kb2N1 bWVudEVsZW1lbnQuc2Nyb2xsVG9wfHxkb2N1bWVudC5ib2R5LnNjcm9sbFRvcDt0 aGlzLl9wb3M9Wyhicm93c2VyV2lkdGgvMiktMTAwK3Njcm9sbFgsKGJyb3dzZXJI ZWlnaHQvMiktMTUwK3Njcm9sbFldO30KdGhpcy5fZGlhbG9nSW5wdXQuY3NzKCds ZWZ0Jyx0aGlzLl9wb3NbMF0rJ3B4JykuY3NzKCd0b3AnLHRoaXMuX3Bvc1sxXSsn cHgnKTtpbnN0LnNldHRpbmdzLm9uU2VsZWN0PW9uU2VsZWN0O3RoaXMuX2luRGlh bG9nPXRydWU7dGhpcy5kcERpdi5hZGRDbGFzcyh0aGlzLl9kaWFsb2dDbGFzcyk7 dGhpcy5fc2hvd0RhdGVwaWNrZXIodGhpcy5fZGlhbG9nSW5wdXRbMF0pO2lmKCQu YmxvY2tVSSkKJC5ibG9ja1VJKHRoaXMuZHBEaXYpOyQuZGF0YSh0aGlzLl9kaWFs b2dJbnB1dFswXSxQUk9QX05BTUUsaW5zdCk7cmV0dXJuIHRoaXM7fSxfZGVzdHJv eURhdGVwaWNrZXI6ZnVuY3Rpb24odGFyZ2V0KXt2YXIgJHRhcmdldD0kKHRhcmdl dCk7dmFyIGluc3Q9JC5kYXRhKHRhcmdldCxQUk9QX05BTUUpO2lmKCEkdGFyZ2V0 Lmhhc0NsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKSl7cmV0dXJuO30KdmFyIG5v ZGVOYW1lPXRhcmdldC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOyQucmVtb3ZlRGF0 YSh0YXJnZXQsUFJPUF9OQU1FKTtpZihub2RlTmFtZT09J2lucHV0Jyl7aW5zdC50 cmlnZ2VyLnJlbW92ZSgpOyR0YXJnZXQuc2libGluZ3MoJy4nK3RoaXMuX2FwcGVu ZENsYXNzKS5yZW1vdmUoKS5lbmQoKS5yZW1vdmVDbGFzcyh0aGlzLm1hcmtlckNs YXNzTmFtZSkudW5iaW5kKCdmb2N1cycsdGhpcy5fc2hvd0RhdGVwaWNrZXIpLnVu YmluZCgna2V5ZG93bicsdGhpcy5fZG9LZXlEb3duKS51bmJpbmQoJ2tleXByZXNz Jyx0aGlzLl9kb0tleVByZXNzKTt9ZWxzZSBpZihub2RlTmFtZT09J2Rpdid8fG5v ZGVOYW1lPT0nc3BhbicpCiR0YXJnZXQucmVtb3ZlQ2xhc3ModGhpcy5tYXJrZXJD bGFzc05hbWUpLmVtcHR5KCk7fSxfZW5hYmxlRGF0ZXBpY2tlcjpmdW5jdGlvbih0 YXJnZXQpe3ZhciAkdGFyZ2V0PSQodGFyZ2V0KTt2YXIgaW5zdD0kLmRhdGEodGFy Z2V0LFBST1BfTkFNRSk7aWYoISR0YXJnZXQuaGFzQ2xhc3ModGhpcy5tYXJrZXJD bGFzc05hbWUpKXtyZXR1cm47fQp2YXIgbm9kZU5hbWU9dGFyZ2V0Lm5vZGVOYW1l LnRvTG93ZXJDYXNlKCk7aWYobm9kZU5hbWU9PSdpbnB1dCcpe3RhcmdldC5kaXNh YmxlZD1mYWxzZTtpbnN0LnRyaWdnZXIuZmlsdGVyKCJidXR0b24iKS5lYWNoKGZ1 bmN0aW9uKCl7dGhpcy5kaXNhYmxlZD1mYWxzZTt9KS5lbmQoKS5maWx0ZXIoImlt ZyIpLmNzcyh7b3BhY2l0eTonMS4wJyxjdXJzb3I6Jyd9KTt9CmVsc2UgaWYobm9k ZU5hbWU9PSdkaXYnfHxub2RlTmFtZT09J3NwYW4nKXt2YXIgaW5saW5lPSR0YXJn ZXQuY2hpbGRyZW4oJy4nK3RoaXMuX2lubGluZUNsYXNzKTtpbmxpbmUuY2hpbGRy ZW4oKS5yZW1vdmVDbGFzcygndWktc3RhdGUtZGlzYWJsZWQnKTt9CnRoaXMuX2Rp c2FibGVkSW5wdXRzPSQubWFwKHRoaXMuX2Rpc2FibGVkSW5wdXRzLGZ1bmN0aW9u KHZhbHVlKXtyZXR1cm4odmFsdWU9PXRhcmdldD9udWxsOnZhbHVlKTt9KTt9LF9k aXNhYmxlRGF0ZXBpY2tlcjpmdW5jdGlvbih0YXJnZXQpe3ZhciAkdGFyZ2V0PSQo dGFyZ2V0KTt2YXIgaW5zdD0kLmRhdGEodGFyZ2V0LFBST1BfTkFNRSk7aWYoISR0 YXJnZXQuaGFzQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpKXtyZXR1cm47fQp2 YXIgbm9kZU5hbWU9dGFyZ2V0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7aWYobm9k ZU5hbWU9PSdpbnB1dCcpe3RhcmdldC5kaXNhYmxlZD10cnVlO2luc3QudHJpZ2dl ci5maWx0ZXIoImJ1dHRvbiIpLmVhY2goZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVk PXRydWU7fSkuZW5kKCkuZmlsdGVyKCJpbWciKS5jc3Moe29wYWNpdHk6JzAuNScs Y3Vyc29yOidkZWZhdWx0J30pO30KZWxzZSBpZihub2RlTmFtZT09J2Rpdid8fG5v ZGVOYW1lPT0nc3Bhbicpe3ZhciBpbmxpbmU9JHRhcmdldC5jaGlsZHJlbignLicr dGhpcy5faW5saW5lQ2xhc3MpO2lubGluZS5jaGlsZHJlbigpLmFkZENsYXNzKCd1 aS1zdGF0ZS1kaXNhYmxlZCcpO30KdGhpcy5fZGlzYWJsZWRJbnB1dHM9JC5tYXAo dGhpcy5fZGlzYWJsZWRJbnB1dHMsZnVuY3Rpb24odmFsdWUpe3JldHVybih2YWx1 ZT09dGFyZ2V0P251bGw6dmFsdWUpO30pO3RoaXMuX2Rpc2FibGVkSW5wdXRzW3Ro aXMuX2Rpc2FibGVkSW5wdXRzLmxlbmd0aF09dGFyZ2V0O30sX2lzRGlzYWJsZWRE YXRlcGlja2VyOmZ1bmN0aW9uKHRhcmdldCl7aWYoIXRhcmdldCl7cmV0dXJuIGZh bHNlO30KZm9yKHZhciBpPTA7aTx0aGlzLl9kaXNhYmxlZElucHV0cy5sZW5ndGg7 aSsrKXtpZih0aGlzLl9kaXNhYmxlZElucHV0c1tpXT09dGFyZ2V0KQpyZXR1cm4g dHJ1ZTt9CnJldHVybiBmYWxzZTt9LF9nZXRJbnN0OmZ1bmN0aW9uKHRhcmdldCl7 dHJ5e3JldHVybiAkLmRhdGEodGFyZ2V0LFBST1BfTkFNRSk7fQpjYXRjaChlcnIp e3Rocm93J01pc3NpbmcgaW5zdGFuY2UgZGF0YSBmb3IgdGhpcyBkYXRlcGlja2Vy Jzt9fSxfb3B0aW9uRGF0ZXBpY2tlcjpmdW5jdGlvbih0YXJnZXQsbmFtZSx2YWx1 ZSl7dmFyIHNldHRpbmdzPW5hbWV8fHt9O2lmKHR5cGVvZiBuYW1lPT0nc3RyaW5n Jyl7c2V0dGluZ3M9e307c2V0dGluZ3NbbmFtZV09dmFsdWU7fQp2YXIgaW5zdD10 aGlzLl9nZXRJbnN0KHRhcmdldCk7aWYoaW5zdCl7aWYodGhpcy5fY3VySW5zdD09 aW5zdCl7dGhpcy5faGlkZURhdGVwaWNrZXIobnVsbCk7fQpleHRlbmRSZW1vdmUo aW5zdC5zZXR0aW5ncyxzZXR0aW5ncyk7dmFyIGRhdGU9bmV3IERhdGUoKTtleHRl bmRSZW1vdmUoaW5zdCx7cmFuZ2VTdGFydDpudWxsLGVuZERheTpudWxsLGVuZE1v bnRoOm51bGwsZW5kWWVhcjpudWxsLHNlbGVjdGVkRGF5OmRhdGUuZ2V0RGF0ZSgp LHNlbGVjdGVkTW9udGg6ZGF0ZS5nZXRNb250aCgpLHNlbGVjdGVkWWVhcjpkYXRl LmdldEZ1bGxZZWFyKCksY3VycmVudERheTpkYXRlLmdldERhdGUoKSxjdXJyZW50 TW9udGg6ZGF0ZS5nZXRNb250aCgpLGN1cnJlbnRZZWFyOmRhdGUuZ2V0RnVsbFll YXIoKSxkcmF3TW9udGg6ZGF0ZS5nZXRNb250aCgpLGRyYXdZZWFyOmRhdGUuZ2V0 RnVsbFllYXIoKX0pO3RoaXMuX3VwZGF0ZURhdGVwaWNrZXIoaW5zdCk7fX0sX2No YW5nZURhdGVwaWNrZXI6ZnVuY3Rpb24odGFyZ2V0LG5hbWUsdmFsdWUpe3RoaXMu X29wdGlvbkRhdGVwaWNrZXIodGFyZ2V0LG5hbWUsdmFsdWUpO30sX3JlZnJlc2hE YXRlcGlja2VyOmZ1bmN0aW9uKHRhcmdldCl7dmFyIGluc3Q9dGhpcy5fZ2V0SW5z dCh0YXJnZXQpO2lmKGluc3Qpe3RoaXMuX3VwZGF0ZURhdGVwaWNrZXIoaW5zdCk7 fX0sX3NldERhdGVEYXRlcGlja2VyOmZ1bmN0aW9uKHRhcmdldCxkYXRlLGVuZERh dGUpe3ZhciBpbnN0PXRoaXMuX2dldEluc3QodGFyZ2V0KTtpZihpbnN0KXt0aGlz Ll9zZXREYXRlKGluc3QsZGF0ZSxlbmREYXRlKTt0aGlzLl91cGRhdGVEYXRlcGlj a2VyKGluc3QpO3RoaXMuX3VwZGF0ZUFsdGVybmF0ZShpbnN0KTt9fSxfZ2V0RGF0 ZURhdGVwaWNrZXI6ZnVuY3Rpb24odGFyZ2V0KXt2YXIgaW5zdD10aGlzLl9nZXRJ bnN0KHRhcmdldCk7aWYoaW5zdCYmIWluc3QuaW5saW5lKQp0aGlzLl9zZXREYXRl RnJvbUZpZWxkKGluc3QpO3JldHVybihpbnN0P3RoaXMuX2dldERhdGUoaW5zdCk6 bnVsbCk7fSxfZG9LZXlEb3duOmZ1bmN0aW9uKGV2ZW50KXt2YXIgaW5zdD0kLmRh dGVwaWNrZXIuX2dldEluc3QoZXZlbnQudGFyZ2V0KTt2YXIgaGFuZGxlZD10cnVl O3ZhciBpc1JUTD1pbnN0LmRwRGl2LmlzKCcudWktZGF0ZXBpY2tlci1ydGwnKTtp bnN0Ll9rZXlFdmVudD10cnVlO2lmKCQuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNo b3dpbmcpCnN3aXRjaChldmVudC5rZXlDb2RlKXtjYXNlIDk6JC5kYXRlcGlja2Vy Ll9oaWRlRGF0ZXBpY2tlcihudWxsLCcnKTticmVhaztjYXNlIDEzOnZhciBzZWw9 JCgndGQuJyskLmRhdGVwaWNrZXIuX2RheU92ZXJDbGFzcysnLCB0ZC4nKyQuZGF0 ZXBpY2tlci5fY3VycmVudENsYXNzLGluc3QuZHBEaXYpO2lmKHNlbFswXSkKJC5k YXRlcGlja2VyLl9zZWxlY3REYXkoZXZlbnQudGFyZ2V0LGluc3Quc2VsZWN0ZWRN b250aCxpbnN0LnNlbGVjdGVkWWVhcixzZWxbMF0pO2Vsc2UKJC5kYXRlcGlja2Vy Ll9oaWRlRGF0ZXBpY2tlcihudWxsLCQuZGF0ZXBpY2tlci5fZ2V0KGluc3QsJ2R1 cmF0aW9uJykpO3JldHVybiBmYWxzZTticmVhaztjYXNlIDI3OiQuZGF0ZXBpY2tl ci5faGlkZURhdGVwaWNrZXIobnVsbCwkLmRhdGVwaWNrZXIuX2dldChpbnN0LCdk dXJhdGlvbicpKTticmVhaztjYXNlIDMzOiQuZGF0ZXBpY2tlci5fYWRqdXN0RGF0 ZShldmVudC50YXJnZXQsKGV2ZW50LmN0cmxLZXk/LSQuZGF0ZXBpY2tlci5fZ2V0 KGluc3QsJ3N0ZXBCaWdNb250aHMnKTotJC5kYXRlcGlja2VyLl9nZXQoaW5zdCwn c3RlcE1vbnRocycpKSwnTScpO2JyZWFrO2Nhc2UgMzQ6JC5kYXRlcGlja2VyLl9h ZGp1c3REYXRlKGV2ZW50LnRhcmdldCwoZXZlbnQuY3RybEtleT8rJC5kYXRlcGlj a2VyLl9nZXQoaW5zdCwnc3RlcEJpZ01vbnRocycpOiskLmRhdGVwaWNrZXIuX2dl dChpbnN0LCdzdGVwTW9udGhzJykpLCdNJyk7YnJlYWs7Y2FzZSAzNTppZihldmVu dC5jdHJsS2V5fHxldmVudC5tZXRhS2V5KSQuZGF0ZXBpY2tlci5fY2xlYXJEYXRl KGV2ZW50LnRhcmdldCk7aGFuZGxlZD1ldmVudC5jdHJsS2V5fHxldmVudC5tZXRh S2V5O2JyZWFrO2Nhc2UgMzY6aWYoZXZlbnQuY3RybEtleXx8ZXZlbnQubWV0YUtl eSkkLmRhdGVwaWNrZXIuX2dvdG9Ub2RheShldmVudC50YXJnZXQpO2hhbmRsZWQ9 ZXZlbnQuY3RybEtleXx8ZXZlbnQubWV0YUtleTticmVhaztjYXNlIDM3OmlmKGV2 ZW50LmN0cmxLZXl8fGV2ZW50Lm1ldGFLZXkpJC5kYXRlcGlja2VyLl9hZGp1c3RE YXRlKGV2ZW50LnRhcmdldCwoaXNSVEw/KzE6LTEpLCdEJyk7aGFuZGxlZD1ldmVu dC5jdHJsS2V5fHxldmVudC5tZXRhS2V5O2lmKGV2ZW50Lm9yaWdpbmFsRXZlbnQu YWx0S2V5KSQuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZShldmVudC50YXJnZXQsKGV2 ZW50LmN0cmxLZXk/LSQuZGF0ZXBpY2tlci5fZ2V0KGluc3QsJ3N0ZXBCaWdNb250 aHMnKTotJC5kYXRlcGlja2VyLl9nZXQoaW5zdCwnc3RlcE1vbnRocycpKSwnTScp O2JyZWFrO2Nhc2UgMzg6aWYoZXZlbnQuY3RybEtleXx8ZXZlbnQubWV0YUtleSkk LmRhdGVwaWNrZXIuX2FkanVzdERhdGUoZXZlbnQudGFyZ2V0LC03LCdEJyk7aGFu ZGxlZD1ldmVudC5jdHJsS2V5fHxldmVudC5tZXRhS2V5O2JyZWFrO2Nhc2UgMzk6 aWYoZXZlbnQuY3RybEtleXx8ZXZlbnQubWV0YUtleSkkLmRhdGVwaWNrZXIuX2Fk anVzdERhdGUoZXZlbnQudGFyZ2V0LChpc1JUTD8tMTorMSksJ0QnKTtoYW5kbGVk PWV2ZW50LmN0cmxLZXl8fGV2ZW50Lm1ldGFLZXk7aWYoZXZlbnQub3JpZ2luYWxF dmVudC5hbHRLZXkpJC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKGV2ZW50LnRhcmdl dCwoZXZlbnQuY3RybEtleT8rJC5kYXRlcGlja2VyLl9nZXQoaW5zdCwnc3RlcEJp Z01vbnRocycpOiskLmRhdGVwaWNrZXIuX2dldChpbnN0LCdzdGVwTW9udGhzJykp LCdNJyk7YnJlYWs7Y2FzZSA0MDppZihldmVudC5jdHJsS2V5fHxldmVudC5tZXRh S2V5KSQuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZShldmVudC50YXJnZXQsKzcsJ0Qn KTtoYW5kbGVkPWV2ZW50LmN0cmxLZXl8fGV2ZW50Lm1ldGFLZXk7YnJlYWs7ZGVm YXVsdDpoYW5kbGVkPWZhbHNlO30KZWxzZSBpZihldmVudC5rZXlDb2RlPT0zNiYm ZXZlbnQuY3RybEtleSkKJC5kYXRlcGlja2VyLl9zaG93RGF0ZXBpY2tlcih0aGlz KTtlbHNle2hhbmRsZWQ9ZmFsc2U7fQppZihoYW5kbGVkKXtldmVudC5wcmV2ZW50 RGVmYXVsdCgpO2V2ZW50LnN0b3BQcm9wYWdhdGlvbigpO319LF9kb0tleVByZXNz OmZ1bmN0aW9uKGV2ZW50KXt2YXIgaW5zdD0kLmRhdGVwaWNrZXIuX2dldEluc3Qo ZXZlbnQudGFyZ2V0KTtpZigkLmRhdGVwaWNrZXIuX2dldChpbnN0LCdjb25zdHJh aW5JbnB1dCcpKXt2YXIgY2hhcnM9JC5kYXRlcGlja2VyLl9wb3NzaWJsZUNoYXJz KCQuZGF0ZXBpY2tlci5fZ2V0KGluc3QsJ2RhdGVGb3JtYXQnKSk7dmFyIGNocj1T dHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlPT11bmRlZmluZWQ/ZXZl bnQua2V5Q29kZTpldmVudC5jaGFyQ29kZSk7cmV0dXJuIGV2ZW50LmN0cmxLZXl8 fChjaHI8JyAnfHwhY2hhcnN8fGNoYXJzLmluZGV4T2YoY2hyKT4tMSk7fX0sX3No b3dEYXRlcGlja2VyOmZ1bmN0aW9uKGlucHV0KXtpbnB1dD1pbnB1dC50YXJnZXR8 fGlucHV0O2lmKGlucHV0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkhPSdpbnB1dCcp CmlucHV0PSQoJ2lucHV0JyxpbnB1dC5wYXJlbnROb2RlKVswXTtpZigkLmRhdGVw aWNrZXIuX2lzRGlzYWJsZWREYXRlcGlja2VyKGlucHV0KXx8JC5kYXRlcGlja2Vy Ll9sYXN0SW5wdXQ9PWlucHV0KQpyZXR1cm47dmFyIGluc3Q9JC5kYXRlcGlja2Vy Ll9nZXRJbnN0KGlucHV0KTt2YXIgYmVmb3JlU2hvdz0kLmRhdGVwaWNrZXIuX2dl dChpbnN0LCdiZWZvcmVTaG93Jyk7ZXh0ZW5kUmVtb3ZlKGluc3Quc2V0dGluZ3Ms KGJlZm9yZVNob3c/YmVmb3JlU2hvdy5hcHBseShpbnB1dCxbaW5wdXQsaW5zdF0p Ont9KSk7JC5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcihudWxsLCcnKTskLmRh dGVwaWNrZXIuX2xhc3RJbnB1dD1pbnB1dDskLmRhdGVwaWNrZXIuX3NldERhdGVG cm9tRmllbGQoaW5zdCk7aWYoJC5kYXRlcGlja2VyLl9pbkRpYWxvZykKaW5wdXQu dmFsdWU9Jyc7aWYoISQuZGF0ZXBpY2tlci5fcG9zKXskLmRhdGVwaWNrZXIuX3Bv cz0kLmRhdGVwaWNrZXIuX2ZpbmRQb3MoaW5wdXQpOyQuZGF0ZXBpY2tlci5fcG9z WzFdKz1pbnB1dC5vZmZzZXRIZWlnaHQ7fQp2YXIgaXNGaXhlZD1mYWxzZTskKGlu cHV0KS5wYXJlbnRzKCkuZWFjaChmdW5jdGlvbigpe2lzRml4ZWR8PSQodGhpcyku Y3NzKCdwb3NpdGlvbicpPT0nZml4ZWQnO3JldHVybiFpc0ZpeGVkO30pO2lmKGlz Rml4ZWQmJiQuYnJvd3Nlci5vcGVyYSl7JC5kYXRlcGlja2VyLl9wb3NbMF0tPWRv Y3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0OyQuZGF0ZXBpY2tlci5f cG9zWzFdLT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wO30KdmFy IG9mZnNldD17bGVmdDokLmRhdGVwaWNrZXIuX3Bvc1swXSx0b3A6JC5kYXRlcGlj a2VyLl9wb3NbMV19OyQuZGF0ZXBpY2tlci5fcG9zPW51bGw7aW5zdC5yYW5nZVN0 YXJ0PW51bGw7aW5zdC5kcERpdi5jc3Moe3Bvc2l0aW9uOidhYnNvbHV0ZScsZGlz cGxheTonYmxvY2snLHRvcDonLTEwMDBweCd9KTskLmRhdGVwaWNrZXIuX3VwZGF0 ZURhdGVwaWNrZXIoaW5zdCk7b2Zmc2V0PSQuZGF0ZXBpY2tlci5fY2hlY2tPZmZz ZXQoaW5zdCxvZmZzZXQsaXNGaXhlZCk7aW5zdC5kcERpdi5jc3Moe3Bvc2l0aW9u OigkLmRhdGVwaWNrZXIuX2luRGlhbG9nJiYkLmJsb2NrVUk/J3N0YXRpYyc6KGlz Rml4ZWQ/J2ZpeGVkJzonYWJzb2x1dGUnKSksZGlzcGxheTonbm9uZScsbGVmdDpv ZmZzZXQubGVmdCsncHgnLHRvcDpvZmZzZXQudG9wKydweCd9KTtpZighaW5zdC5p bmxpbmUpe3ZhciBzaG93QW5pbT0kLmRhdGVwaWNrZXIuX2dldChpbnN0LCdzaG93 QW5pbScpfHwnc2hvdyc7dmFyIGR1cmF0aW9uPSQuZGF0ZXBpY2tlci5fZ2V0KGlu c3QsJ2R1cmF0aW9uJyk7dmFyIHBvc3RQcm9jZXNzPWZ1bmN0aW9uKCl7JC5kYXRl cGlja2VyLl9kYXRlcGlja2VyU2hvd2luZz10cnVlO2lmKCQuYnJvd3Nlci5tc2ll JiZwYXJzZUludCgkLmJyb3dzZXIudmVyc2lvbiwxMCk8NykKJCgnaWZyYW1lLnVp LWRhdGVwaWNrZXItY292ZXInKS5jc3Moe3dpZHRoOmluc3QuZHBEaXYud2lkdGgo KSs0LGhlaWdodDppbnN0LmRwRGl2LmhlaWdodCgpKzR9KTt9O2lmKCQuZWZmZWN0 cyYmJC5lZmZlY3RzW3Nob3dBbmltXSkKaW5zdC5kcERpdi5zaG93KHNob3dBbmlt LCQuZGF0ZXBpY2tlci5fZ2V0KGluc3QsJ3Nob3dPcHRpb25zJyksZHVyYXRpb24s cG9zdFByb2Nlc3MpO2Vsc2UKaW5zdC5kcERpdltzaG93QW5pbV0oZHVyYXRpb24s cG9zdFByb2Nlc3MpO2lmKGR1cmF0aW9uPT0nJykKcG9zdFByb2Nlc3MoKTtpZihp bnN0LmlucHV0WzBdLnR5cGUhPSdoaWRkZW4nKQppbnN0LmlucHV0WzBdLmZvY3Vz KCk7JC5kYXRlcGlja2VyLl9jdXJJbnN0PWluc3Q7fX0sX3VwZGF0ZURhdGVwaWNr ZXI6ZnVuY3Rpb24oaW5zdCl7dmFyIGRpbXM9e3dpZHRoOmluc3QuZHBEaXYud2lk dGgoKSs0LGhlaWdodDppbnN0LmRwRGl2LmhlaWdodCgpKzR9O3ZhciBzZWxmPXRo aXM7aW5zdC5kcERpdi5lbXB0eSgpLmFwcGVuZCh0aGlzLl9nZW5lcmF0ZUhUTUwo aW5zdCkpLmZpbmQoJ2lmcmFtZS51aS1kYXRlcGlja2VyLWNvdmVyJykuY3NzKHt3 aWR0aDpkaW1zLndpZHRoLGhlaWdodDpkaW1zLmhlaWdodH0pLmVuZCgpLmZpbmQo J2J1dHRvbiwgLnVpLWRhdGVwaWNrZXItcHJldiwgLnVpLWRhdGVwaWNrZXItbmV4 dCwgLnVpLWRhdGVwaWNrZXItY2FsZW5kYXIgdGQgYScpLmJpbmQoJ21vdXNlb3V0 JyxmdW5jdGlvbigpeyQodGhpcykucmVtb3ZlQ2xhc3MoJ3VpLXN0YXRlLWhvdmVy Jyk7aWYodGhpcy5jbGFzc05hbWUuaW5kZXhPZigndWktZGF0ZXBpY2tlci1wcmV2 JykhPS0xKSQodGhpcykucmVtb3ZlQ2xhc3MoJ3VpLWRhdGVwaWNrZXItcHJldi1o b3ZlcicpO2lmKHRoaXMuY2xhc3NOYW1lLmluZGV4T2YoJ3VpLWRhdGVwaWNrZXIt bmV4dCcpIT0tMSkkKHRoaXMpLnJlbW92ZUNsYXNzKCd1aS1kYXRlcGlja2VyLW5l eHQtaG92ZXInKTt9KS5iaW5kKCdtb3VzZW92ZXInLGZ1bmN0aW9uKCl7aWYoIXNl bGYuX2lzRGlzYWJsZWREYXRlcGlja2VyKGluc3QuaW5saW5lP2luc3QuZHBEaXYu cGFyZW50KClbMF06aW5zdC5pbnB1dFswXSkpeyQodGhpcykucGFyZW50cygnLnVp LWRhdGVwaWNrZXItY2FsZW5kYXInKS5maW5kKCdhJykucmVtb3ZlQ2xhc3MoJ3Vp LXN0YXRlLWhvdmVyJyk7JCh0aGlzKS5hZGRDbGFzcygndWktc3RhdGUtaG92ZXIn KTtpZih0aGlzLmNsYXNzTmFtZS5pbmRleE9mKCd1aS1kYXRlcGlja2VyLXByZXYn KSE9LTEpJCh0aGlzKS5hZGRDbGFzcygndWktZGF0ZXBpY2tlci1wcmV2LWhvdmVy Jyk7aWYodGhpcy5jbGFzc05hbWUuaW5kZXhPZigndWktZGF0ZXBpY2tlci1uZXh0 JykhPS0xKSQodGhpcykuYWRkQ2xhc3MoJ3VpLWRhdGVwaWNrZXItbmV4dC1ob3Zl cicpO319KS5lbmQoKS5maW5kKCcuJyt0aGlzLl9kYXlPdmVyQ2xhc3MrJyBhJyku dHJpZ2dlcignbW91c2VvdmVyJykuZW5kKCk7dmFyIG51bU1vbnRocz10aGlzLl9n ZXROdW1iZXJPZk1vbnRocyhpbnN0KTt2YXIgY29scz1udW1Nb250aHNbMV07dmFy IHdpZHRoPTE3O2lmKGNvbHM+MSl7aW5zdC5kcERpdi5hZGRDbGFzcygndWktZGF0 ZXBpY2tlci1tdWx0aS0nK2NvbHMpLmNzcygnd2lkdGgnLCh3aWR0aCpjb2xzKSsn ZW0nKTt9ZWxzZXtpbnN0LmRwRGl2LnJlbW92ZUNsYXNzKCd1aS1kYXRlcGlja2Vy LW11bHRpLTIgdWktZGF0ZXBpY2tlci1tdWx0aS0zIHVpLWRhdGVwaWNrZXItbXVs dGktNCcpLndpZHRoKCcnKTt9Cmluc3QuZHBEaXZbKG51bU1vbnRoc1swXSE9MXx8 bnVtTW9udGhzWzFdIT0xPydhZGQnOidyZW1vdmUnKSsnQ2xhc3MnXSgndWktZGF0 ZXBpY2tlci1tdWx0aScpO2luc3QuZHBEaXZbKHRoaXMuX2dldChpbnN0LCdpc1JU TCcpPydhZGQnOidyZW1vdmUnKSsnQ2xhc3MnXSgndWktZGF0ZXBpY2tlci1ydGwn KTtpZihpbnN0LmlucHV0JiZpbnN0LmlucHV0WzBdLnR5cGUhPSdoaWRkZW4nJiZp bnN0PT0kLmRhdGVwaWNrZXIuX2N1ckluc3QpCiQoaW5zdC5pbnB1dFswXSkuZm9j dXMoKTt9LF9jaGVja09mZnNldDpmdW5jdGlvbihpbnN0LG9mZnNldCxpc0ZpeGVk KXt2YXIgZHBXaWR0aD1pbnN0LmRwRGl2Lm91dGVyV2lkdGgoKTt2YXIgZHBIZWln aHQ9aW5zdC5kcERpdi5vdXRlckhlaWdodCgpO3ZhciBpbnB1dFdpZHRoPWluc3Qu aW5wdXQ/aW5zdC5pbnB1dC5vdXRlcldpZHRoKCk6MDt2YXIgaW5wdXRIZWlnaHQ9 aW5zdC5pbnB1dD9pbnN0LmlucHV0Lm91dGVySGVpZ2h0KCk6MDt2YXIgdmlld1dp ZHRoPSh3aW5kb3cuaW5uZXJXaWR0aHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50 LmNsaWVudFdpZHRofHxkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoKSskKGRvY3Vt ZW50KS5zY3JvbGxMZWZ0KCk7dmFyIHZpZXdIZWlnaHQ9KHdpbmRvdy5pbm5lckhl aWdodHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodHx8ZG9j dW1lbnQuYm9keS5jbGllbnRIZWlnaHQpKyQoZG9jdW1lbnQpLnNjcm9sbFRvcCgp O29mZnNldC5sZWZ0LT0odGhpcy5fZ2V0KGluc3QsJ2lzUlRMJyk/KGRwV2lkdGgt aW5wdXRXaWR0aCk6MCk7b2Zmc2V0LmxlZnQtPShpc0ZpeGVkJiZvZmZzZXQubGVm dD09aW5zdC5pbnB1dC5vZmZzZXQoKS5sZWZ0KT8kKGRvY3VtZW50KS5zY3JvbGxM ZWZ0KCk6MDtvZmZzZXQudG9wLT0oaXNGaXhlZCYmb2Zmc2V0LnRvcD09KGluc3Qu aW5wdXQub2Zmc2V0KCkudG9wK2lucHV0SGVpZ2h0KSk/JChkb2N1bWVudCkuc2Ny b2xsVG9wKCk6MDtvZmZzZXQubGVmdC09KG9mZnNldC5sZWZ0K2RwV2lkdGg+dmll d1dpZHRoJiZ2aWV3V2lkdGg+ZHBXaWR0aCk/TWF0aC5hYnMob2Zmc2V0LmxlZnQr ZHBXaWR0aC12aWV3V2lkdGgpOjA7b2Zmc2V0LnRvcC09KG9mZnNldC50b3ArZHBI ZWlnaHQ+dmlld0hlaWdodCYmdmlld0hlaWdodD5kcEhlaWdodCk/TWF0aC5hYnMo b2Zmc2V0LnRvcCtkcEhlaWdodCtpbnB1dEhlaWdodCoyLXZpZXdIZWlnaHQpOjA7 cmV0dXJuIG9mZnNldDt9LF9maW5kUG9zOmZ1bmN0aW9uKG9iail7d2hpbGUob2Jq JiYob2JqLnR5cGU9PSdoaWRkZW4nfHxvYmoubm9kZVR5cGUhPTEpKXtvYmo9b2Jq Lm5leHRTaWJsaW5nO30KdmFyIHBvc2l0aW9uPSQob2JqKS5vZmZzZXQoKTtyZXR1 cm5bcG9zaXRpb24ubGVmdCxwb3NpdGlvbi50b3BdO30sX2hpZGVEYXRlcGlja2Vy OmZ1bmN0aW9uKGlucHV0LGR1cmF0aW9uKXt2YXIgaW5zdD10aGlzLl9jdXJJbnN0 O2lmKCFpbnN0fHwoaW5wdXQmJmluc3QhPSQuZGF0YShpbnB1dCxQUk9QX05BTUUp KSkKcmV0dXJuO2lmKGluc3Quc3RheU9wZW4pCnRoaXMuX3NlbGVjdERhdGUoJyMn K2luc3QuaWQsdGhpcy5fZm9ybWF0RGF0ZShpbnN0LGluc3QuY3VycmVudERheSxp bnN0LmN1cnJlbnRNb250aCxpbnN0LmN1cnJlbnRZZWFyKSk7aW5zdC5zdGF5T3Bl bj1mYWxzZTtpZih0aGlzLl9kYXRlcGlja2VyU2hvd2luZyl7ZHVyYXRpb249KGR1 cmF0aW9uIT1udWxsP2R1cmF0aW9uOnRoaXMuX2dldChpbnN0LCdkdXJhdGlvbicp KTt2YXIgc2hvd0FuaW09dGhpcy5fZ2V0KGluc3QsJ3Nob3dBbmltJyk7dmFyIHBv c3RQcm9jZXNzPWZ1bmN0aW9uKCl7JC5kYXRlcGlja2VyLl90aWR5RGlhbG9nKGlu c3QpO307aWYoZHVyYXRpb24hPScnJiYkLmVmZmVjdHMmJiQuZWZmZWN0c1tzaG93 QW5pbV0pCmluc3QuZHBEaXYuaGlkZShzaG93QW5pbSwkLmRhdGVwaWNrZXIuX2dl dChpbnN0LCdzaG93T3B0aW9ucycpLGR1cmF0aW9uLHBvc3RQcm9jZXNzKTtlbHNl Cmluc3QuZHBEaXZbKGR1cmF0aW9uPT0nJz8naGlkZSc6KHNob3dBbmltPT0nc2xp ZGVEb3duJz8nc2xpZGVVcCc6KHNob3dBbmltPT0nZmFkZUluJz8nZmFkZU91dCc6 J2hpZGUnKSkpXShkdXJhdGlvbixwb3N0UHJvY2Vzcyk7aWYoZHVyYXRpb249PScn KQp0aGlzLl90aWR5RGlhbG9nKGluc3QpO3ZhciBvbkNsb3NlPXRoaXMuX2dldChp bnN0LCdvbkNsb3NlJyk7aWYob25DbG9zZSkKb25DbG9zZS5hcHBseSgoaW5zdC5p bnB1dD9pbnN0LmlucHV0WzBdOm51bGwpLFsoaW5zdC5pbnB1dD9pbnN0LmlucHV0 LnZhbCgpOicnKSxpbnN0XSk7dGhpcy5fZGF0ZXBpY2tlclNob3dpbmc9ZmFsc2U7 dGhpcy5fbGFzdElucHV0PW51bGw7aWYodGhpcy5faW5EaWFsb2cpe3RoaXMuX2Rp YWxvZ0lucHV0LmNzcyh7cG9zaXRpb246J2Fic29sdXRlJyxsZWZ0OicwJyx0b3A6 Jy0xMDBweCd9KTtpZigkLmJsb2NrVUkpeyQudW5ibG9ja1VJKCk7JCgnYm9keScp LmFwcGVuZCh0aGlzLmRwRGl2KTt9fQp0aGlzLl9pbkRpYWxvZz1mYWxzZTt9CnRo aXMuX2N1ckluc3Q9bnVsbDt9LF90aWR5RGlhbG9nOmZ1bmN0aW9uKGluc3Qpe2lu c3QuZHBEaXYucmVtb3ZlQ2xhc3ModGhpcy5fZGlhbG9nQ2xhc3MpLnVuYmluZCgn LnVpLWRhdGVwaWNrZXItY2FsZW5kYXInKTt9LF9jaGVja0V4dGVybmFsQ2xpY2s6 ZnVuY3Rpb24oZXZlbnQpe2lmKCEkLmRhdGVwaWNrZXIuX2N1ckluc3QpCnJldHVy bjt2YXIgJHRhcmdldD0kKGV2ZW50LnRhcmdldCk7aWYoKCR0YXJnZXQucGFyZW50 cygnIycrJC5kYXRlcGlja2VyLl9tYWluRGl2SWQpLmxlbmd0aD09MCkmJiEkdGFy Z2V0Lmhhc0NsYXNzKCQuZGF0ZXBpY2tlci5tYXJrZXJDbGFzc05hbWUpJiYhJHRh cmdldC5oYXNDbGFzcygkLmRhdGVwaWNrZXIuX3RyaWdnZXJDbGFzcykmJiQuZGF0 ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcmJiEoJC5kYXRlcGlja2VyLl9pbkRp YWxvZyYmJC5ibG9ja1VJKSkKJC5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcihu dWxsLCcnKTt9LF9hZGp1c3REYXRlOmZ1bmN0aW9uKGlkLG9mZnNldCxwZXJpb2Qp e3ZhciB0YXJnZXQ9JChpZCk7dmFyIGluc3Q9dGhpcy5fZ2V0SW5zdCh0YXJnZXRb MF0pO2lmKHRoaXMuX2lzRGlzYWJsZWREYXRlcGlja2VyKHRhcmdldFswXSkpe3Jl dHVybjt9CnRoaXMuX2FkanVzdEluc3REYXRlKGluc3Qsb2Zmc2V0KwoocGVyaW9k PT0nTSc/dGhpcy5fZ2V0KGluc3QsJ3Nob3dDdXJyZW50QXRQb3MnKTowKSxwZXJp b2QpO3RoaXMuX3VwZGF0ZURhdGVwaWNrZXIoaW5zdCk7fSxfZ290b1RvZGF5OmZ1 bmN0aW9uKGlkKXt2YXIgdGFyZ2V0PSQoaWQpO3ZhciBpbnN0PXRoaXMuX2dldElu c3QodGFyZ2V0WzBdKTtpZih0aGlzLl9nZXQoaW5zdCwnZ290b0N1cnJlbnQnKSYm aW5zdC5jdXJyZW50RGF5KXtpbnN0LnNlbGVjdGVkRGF5PWluc3QuY3VycmVudERh eTtpbnN0LmRyYXdNb250aD1pbnN0LnNlbGVjdGVkTW9udGg9aW5zdC5jdXJyZW50 TW9udGg7aW5zdC5kcmF3WWVhcj1pbnN0LnNlbGVjdGVkWWVhcj1pbnN0LmN1cnJl bnRZZWFyO30KZWxzZXt2YXIgZGF0ZT1uZXcgRGF0ZSgpO2luc3Quc2VsZWN0ZWRE YXk9ZGF0ZS5nZXREYXRlKCk7aW5zdC5kcmF3TW9udGg9aW5zdC5zZWxlY3RlZE1v bnRoPWRhdGUuZ2V0TW9udGgoKTtpbnN0LmRyYXdZZWFyPWluc3Quc2VsZWN0ZWRZ ZWFyPWRhdGUuZ2V0RnVsbFllYXIoKTt9CnRoaXMuX25vdGlmeUNoYW5nZShpbnN0 KTt0aGlzLl9hZGp1c3REYXRlKHRhcmdldCk7fSxfc2VsZWN0TW9udGhZZWFyOmZ1 bmN0aW9uKGlkLHNlbGVjdCxwZXJpb2Qpe3ZhciB0YXJnZXQ9JChpZCk7dmFyIGlu c3Q9dGhpcy5fZ2V0SW5zdCh0YXJnZXRbMF0pO2luc3QuX3NlbGVjdGluZ01vbnRo WWVhcj1mYWxzZTtpbnN0WydzZWxlY3RlZCcrKHBlcmlvZD09J00nPydNb250aCc6 J1llYXInKV09aW5zdFsnZHJhdycrKHBlcmlvZD09J00nPydNb250aCc6J1llYXIn KV09cGFyc2VJbnQoc2VsZWN0Lm9wdGlvbnNbc2VsZWN0LnNlbGVjdGVkSW5kZXhd LnZhbHVlLDEwKTt0aGlzLl9ub3RpZnlDaGFuZ2UoaW5zdCk7dGhpcy5fYWRqdXN0 RGF0ZSh0YXJnZXQpO30sX2NsaWNrTW9udGhZZWFyOmZ1bmN0aW9uKGlkKXt2YXIg dGFyZ2V0PSQoaWQpO3ZhciBpbnN0PXRoaXMuX2dldEluc3QodGFyZ2V0WzBdKTtp ZihpbnN0LmlucHV0JiZpbnN0Ll9zZWxlY3RpbmdNb250aFllYXImJiEkLmJyb3dz ZXIubXNpZSkKaW5zdC5pbnB1dFswXS5mb2N1cygpO2luc3QuX3NlbGVjdGluZ01v bnRoWWVhcj0haW5zdC5fc2VsZWN0aW5nTW9udGhZZWFyO30sX3NlbGVjdERheTpm dW5jdGlvbihpZCxtb250aCx5ZWFyLHRkKXt2YXIgdGFyZ2V0PSQoaWQpO2lmKCQo dGQpLmhhc0NsYXNzKHRoaXMuX3Vuc2VsZWN0YWJsZUNsYXNzKXx8dGhpcy5faXNE aXNhYmxlZERhdGVwaWNrZXIodGFyZ2V0WzBdKSl7cmV0dXJuO30KdmFyIGluc3Q9 dGhpcy5fZ2V0SW5zdCh0YXJnZXRbMF0pO2luc3Quc2VsZWN0ZWREYXk9aW5zdC5j dXJyZW50RGF5PSQoJ2EnLHRkKS5odG1sKCk7aW5zdC5zZWxlY3RlZE1vbnRoPWlu c3QuY3VycmVudE1vbnRoPW1vbnRoO2luc3Quc2VsZWN0ZWRZZWFyPWluc3QuY3Vy cmVudFllYXI9eWVhcjtpZihpbnN0LnN0YXlPcGVuKXtpbnN0LmVuZERheT1pbnN0 LmVuZE1vbnRoPWluc3QuZW5kWWVhcj1udWxsO30KdGhpcy5fc2VsZWN0RGF0ZShp ZCx0aGlzLl9mb3JtYXREYXRlKGluc3QsaW5zdC5jdXJyZW50RGF5LGluc3QuY3Vy cmVudE1vbnRoLGluc3QuY3VycmVudFllYXIpKTtpZihpbnN0LnN0YXlPcGVuKXtp bnN0LnJhbmdlU3RhcnQ9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERh dGUoaW5zdC5jdXJyZW50WWVhcixpbnN0LmN1cnJlbnRNb250aCxpbnN0LmN1cnJl bnREYXkpKTt0aGlzLl91cGRhdGVEYXRlcGlja2VyKGluc3QpO319LF9jbGVhckRh dGU6ZnVuY3Rpb24oaWQpe3ZhciB0YXJnZXQ9JChpZCk7dmFyIGluc3Q9dGhpcy5f Z2V0SW5zdCh0YXJnZXRbMF0pO2luc3Quc3RheU9wZW49ZmFsc2U7aW5zdC5lbmRE YXk9aW5zdC5lbmRNb250aD1pbnN0LmVuZFllYXI9aW5zdC5yYW5nZVN0YXJ0PW51 bGw7dGhpcy5fc2VsZWN0RGF0ZSh0YXJnZXQsJycpO30sX3NlbGVjdERhdGU6ZnVu Y3Rpb24oaWQsZGF0ZVN0cil7dmFyIHRhcmdldD0kKGlkKTt2YXIgaW5zdD10aGlz Ll9nZXRJbnN0KHRhcmdldFswXSk7ZGF0ZVN0cj0oZGF0ZVN0ciE9bnVsbD9kYXRl U3RyOnRoaXMuX2Zvcm1hdERhdGUoaW5zdCkpO2lmKGluc3QuaW5wdXQpCmluc3Qu aW5wdXQudmFsKGRhdGVTdHIpO3RoaXMuX3VwZGF0ZUFsdGVybmF0ZShpbnN0KTt2 YXIgb25TZWxlY3Q9dGhpcy5fZ2V0KGluc3QsJ29uU2VsZWN0Jyk7aWYob25TZWxl Y3QpCm9uU2VsZWN0LmFwcGx5KChpbnN0LmlucHV0P2luc3QuaW5wdXRbMF06bnVs bCksW2RhdGVTdHIsaW5zdF0pO2Vsc2UgaWYoaW5zdC5pbnB1dCkKaW5zdC5pbnB1 dC50cmlnZ2VyKCdjaGFuZ2UnKTtpZihpbnN0LmlubGluZSkKdGhpcy5fdXBkYXRl RGF0ZXBpY2tlcihpbnN0KTtlbHNlIGlmKCFpbnN0LnN0YXlPcGVuKXt0aGlzLl9o aWRlRGF0ZXBpY2tlcihudWxsLHRoaXMuX2dldChpbnN0LCdkdXJhdGlvbicpKTt0 aGlzLl9sYXN0SW5wdXQ9aW5zdC5pbnB1dFswXTtpZih0eXBlb2YoaW5zdC5pbnB1 dFswXSkhPSdvYmplY3QnKQppbnN0LmlucHV0WzBdLmZvY3VzKCk7dGhpcy5fbGFz dElucHV0PW51bGw7fX0sX3VwZGF0ZUFsdGVybmF0ZTpmdW5jdGlvbihpbnN0KXt2 YXIgYWx0RmllbGQ9dGhpcy5fZ2V0KGluc3QsJ2FsdEZpZWxkJyk7aWYoYWx0Rmll bGQpe3ZhciBhbHRGb3JtYXQ9dGhpcy5fZ2V0KGluc3QsJ2FsdEZvcm1hdCcpfHx0 aGlzLl9nZXQoaW5zdCwnZGF0ZUZvcm1hdCcpO3ZhciBkYXRlPXRoaXMuX2dldERh dGUoaW5zdCk7ZGF0ZVN0cj10aGlzLmZvcm1hdERhdGUoYWx0Rm9ybWF0LGRhdGUs dGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKGluc3QpKTskKGFsdEZpZWxkKS5lYWNoKGZ1 bmN0aW9uKCl7JCh0aGlzKS52YWwoZGF0ZVN0cik7fSk7fX0sbm9XZWVrZW5kczpm dW5jdGlvbihkYXRlKXt2YXIgZGF5PWRhdGUuZ2V0RGF5KCk7cmV0dXJuWyhkYXk+ MCYmZGF5PDYpLCcnXTt9LGlzbzg2MDFXZWVrOmZ1bmN0aW9uKGRhdGUpe3ZhciBj aGVja0RhdGU9bmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLGRhdGUuZ2V0TW9u dGgoKSxkYXRlLmdldERhdGUoKSk7dmFyIGZpcnN0TW9uPW5ldyBEYXRlKGNoZWNr RGF0ZS5nZXRGdWxsWWVhcigpLDEtMSw0KTt2YXIgZmlyc3REYXk9Zmlyc3RNb24u Z2V0RGF5KCl8fDc7Zmlyc3RNb24uc2V0RGF0ZShmaXJzdE1vbi5nZXREYXRlKCkr MS1maXJzdERheSk7aWYoZmlyc3REYXk8NCYmY2hlY2tEYXRlPGZpcnN0TW9uKXtj aGVja0RhdGUuc2V0RGF0ZShjaGVja0RhdGUuZ2V0RGF0ZSgpLTMpO3JldHVybiAk LmRhdGVwaWNrZXIuaXNvODYwMVdlZWsoY2hlY2tEYXRlKTt9ZWxzZSBpZihjaGVj a0RhdGU+bmV3IERhdGUoY2hlY2tEYXRlLmdldEZ1bGxZZWFyKCksMTItMSwyOCkp e2ZpcnN0RGF5PW5ldyBEYXRlKGNoZWNrRGF0ZS5nZXRGdWxsWWVhcigpKzEsMS0x LDQpLmdldERheSgpfHw3O2lmKGZpcnN0RGF5PjQmJihjaGVja0RhdGUuZ2V0RGF5 KCl8fDcpPGZpcnN0RGF5LTMpe3JldHVybiAxO319CnJldHVybiBNYXRoLmZsb29y KCgoY2hlY2tEYXRlLWZpcnN0TW9uKS84NjQwMDAwMCkvNykrMTt9LHBhcnNlRGF0 ZTpmdW5jdGlvbihmb3JtYXQsdmFsdWUsc2V0dGluZ3Mpe2lmKGZvcm1hdD09bnVs bHx8dmFsdWU9PW51bGwpCnRocm93J0ludmFsaWQgYXJndW1lbnRzJzt2YWx1ZT0o dHlwZW9mIHZhbHVlPT0nb2JqZWN0Jz92YWx1ZS50b1N0cmluZygpOnZhbHVlKycn KTtpZih2YWx1ZT09JycpCnJldHVybiBudWxsO3ZhciBzaG9ydFllYXJDdXRvZmY9 KHNldHRpbmdzP3NldHRpbmdzLnNob3J0WWVhckN1dG9mZjpudWxsKXx8dGhpcy5f ZGVmYXVsdHMuc2hvcnRZZWFyQ3V0b2ZmO3ZhciBkYXlOYW1lc1Nob3J0PShzZXR0 aW5ncz9zZXR0aW5ncy5kYXlOYW1lc1Nob3J0Om51bGwpfHx0aGlzLl9kZWZhdWx0 cy5kYXlOYW1lc1Nob3J0O3ZhciBkYXlOYW1lcz0oc2V0dGluZ3M/c2V0dGluZ3Mu ZGF5TmFtZXM6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLmRheU5hbWVzO3ZhciBtb250 aE5hbWVzU2hvcnQ9KHNldHRpbmdzP3NldHRpbmdzLm1vbnRoTmFtZXNTaG9ydDpu dWxsKXx8dGhpcy5fZGVmYXVsdHMubW9udGhOYW1lc1Nob3J0O3ZhciBtb250aE5h bWVzPShzZXR0aW5ncz9zZXR0aW5ncy5tb250aE5hbWVzOm51bGwpfHx0aGlzLl9k ZWZhdWx0cy5tb250aE5hbWVzO3ZhciB5ZWFyPS0xO3ZhciBtb250aD0tMTt2YXIg ZGF5PS0xO3ZhciBkb3k9LTE7dmFyIGxpdGVyYWw9ZmFsc2U7dmFyIGxvb2tBaGVh ZD1mdW5jdGlvbihtYXRjaCl7dmFyIG1hdGNoZXM9KGlGb3JtYXQrMTxmb3JtYXQu bGVuZ3RoJiZmb3JtYXQuY2hhckF0KGlGb3JtYXQrMSk9PW1hdGNoKTtpZihtYXRj aGVzKQppRm9ybWF0Kys7cmV0dXJuIG1hdGNoZXM7fTt2YXIgZ2V0TnVtYmVyPWZ1 bmN0aW9uKG1hdGNoKXtsb29rQWhlYWQobWF0Y2gpO3ZhciBvcmlnU2l6ZT0obWF0 Y2g9PSdAJz8xNDoobWF0Y2g9PSd5Jz80OihtYXRjaD09J28nPzM6MikpKTt2YXIg c2l6ZT1vcmlnU2l6ZTt2YXIgbnVtPTA7d2hpbGUoc2l6ZT4wJiZpVmFsdWU8dmFs dWUubGVuZ3RoJiZ2YWx1ZS5jaGFyQXQoaVZhbHVlKT49JzAnJiZ2YWx1ZS5jaGFy QXQoaVZhbHVlKTw9JzknKXtudW09bnVtKjEwK3BhcnNlSW50KHZhbHVlLmNoYXJB dChpVmFsdWUrKyksMTApO3NpemUtLTt9CmlmKHNpemU9PW9yaWdTaXplKQp0aHJv dydNaXNzaW5nIG51bWJlciBhdCBwb3NpdGlvbiAnK2lWYWx1ZTtyZXR1cm4gbnVt O307dmFyIGdldE5hbWU9ZnVuY3Rpb24obWF0Y2gsc2hvcnROYW1lcyxsb25nTmFt ZXMpe3ZhciBuYW1lcz0obG9va0FoZWFkKG1hdGNoKT9sb25nTmFtZXM6c2hvcnRO YW1lcyk7dmFyIHNpemU9MDtmb3IodmFyIGo9MDtqPG5hbWVzLmxlbmd0aDtqKysp CnNpemU9TWF0aC5tYXgoc2l6ZSxuYW1lc1tqXS5sZW5ndGgpO3ZhciBuYW1lPScn O3ZhciBpSW5pdD1pVmFsdWU7d2hpbGUoc2l6ZT4wJiZpVmFsdWU8dmFsdWUubGVu Z3RoKXtuYW1lKz12YWx1ZS5jaGFyQXQoaVZhbHVlKyspO2Zvcih2YXIgaT0wO2k8 bmFtZXMubGVuZ3RoO2krKykKaWYobmFtZT09bmFtZXNbaV0pCnJldHVybiBpKzE7 c2l6ZS0tO30KdGhyb3cnVW5rbm93biBuYW1lIGF0IHBvc2l0aW9uICcraUluaXQ7 fTt2YXIgY2hlY2tMaXRlcmFsPWZ1bmN0aW9uKCl7aWYodmFsdWUuY2hhckF0KGlW YWx1ZSkhPWZvcm1hdC5jaGFyQXQoaUZvcm1hdCkpCnRocm93J1VuZXhwZWN0ZWQg bGl0ZXJhbCBhdCBwb3NpdGlvbiAnK2lWYWx1ZTtpVmFsdWUrKzt9O3ZhciBpVmFs dWU9MDtmb3IodmFyIGlGb3JtYXQ9MDtpRm9ybWF0PGZvcm1hdC5sZW5ndGg7aUZv cm1hdCsrKXtpZihsaXRlcmFsKQppZihmb3JtYXQuY2hhckF0KGlGb3JtYXQpPT0i JyImJiFsb29rQWhlYWQoIiciKSkKbGl0ZXJhbD1mYWxzZTtlbHNlCmNoZWNrTGl0 ZXJhbCgpO2Vsc2UKc3dpdGNoKGZvcm1hdC5jaGFyQXQoaUZvcm1hdCkpe2Nhc2Un ZCc6ZGF5PWdldE51bWJlcignZCcpO2JyZWFrO2Nhc2UnRCc6Z2V0TmFtZSgnRCcs ZGF5TmFtZXNTaG9ydCxkYXlOYW1lcyk7YnJlYWs7Y2FzZSdvJzpkb3k9Z2V0TnVt YmVyKCdvJyk7YnJlYWs7Y2FzZSdtJzptb250aD1nZXROdW1iZXIoJ20nKTticmVh aztjYXNlJ00nOm1vbnRoPWdldE5hbWUoJ00nLG1vbnRoTmFtZXNTaG9ydCxtb250 aE5hbWVzKTticmVhaztjYXNlJ3knOnllYXI9Z2V0TnVtYmVyKCd5Jyk7YnJlYWs7 Y2FzZSdAJzp2YXIgZGF0ZT1uZXcgRGF0ZShnZXROdW1iZXIoJ0AnKSk7eWVhcj1k YXRlLmdldEZ1bGxZZWFyKCk7bW9udGg9ZGF0ZS5nZXRNb250aCgpKzE7ZGF5PWRh dGUuZ2V0RGF0ZSgpO2JyZWFrO2Nhc2UiJyI6aWYobG9va0FoZWFkKCInIikpCmNo ZWNrTGl0ZXJhbCgpO2Vsc2UKbGl0ZXJhbD10cnVlO2JyZWFrO2RlZmF1bHQ6Y2hl Y2tMaXRlcmFsKCk7fX0KaWYoeWVhcj09LTEpCnllYXI9bmV3IERhdGUoKS5nZXRG dWxsWWVhcigpO2Vsc2UgaWYoeWVhcjwxMDApCnllYXIrPW5ldyBEYXRlKCkuZ2V0 RnVsbFllYXIoKS1uZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCklMTAwKwooeWVhcjw9 c2hvcnRZZWFyQ3V0b2ZmPzA6LTEwMCk7aWYoZG95Pi0xKXttb250aD0xO2RheT1k b3k7ZG97dmFyIGRpbT10aGlzLl9nZXREYXlzSW5Nb250aCh5ZWFyLG1vbnRoLTEp O2lmKGRheTw9ZGltKQpicmVhazttb250aCsrO2RheS09ZGltO313aGlsZSh0cnVl KTt9CnZhciBkYXRlPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRl KHllYXIsbW9udGgtMSxkYXkpKTtpZihkYXRlLmdldEZ1bGxZZWFyKCkhPXllYXJ8 fGRhdGUuZ2V0TW9udGgoKSsxIT1tb250aHx8ZGF0ZS5nZXREYXRlKCkhPWRheSkK dGhyb3cnSW52YWxpZCBkYXRlJztyZXR1cm4gZGF0ZTt9LEFUT006J3l5LW1tLWRk JyxDT09LSUU6J0QsIGRkIE0geXknLElTT184NjAxOid5eS1tbS1kZCcsUkZDXzgy MjonRCwgZCBNIHknLFJGQ184NTA6J0RELCBkZC1NLXknLFJGQ18xMDM2OidELCBk IE0geScsUkZDXzExMjM6J0QsIGQgTSB5eScsUkZDXzI4MjI6J0QsIGQgTSB5eScs UlNTOidELCBkIE0geScsVElNRVNUQU1QOidAJyxXM0M6J3l5LW1tLWRkJyxmb3Jt YXREYXRlOmZ1bmN0aW9uKGZvcm1hdCxkYXRlLHNldHRpbmdzKXtpZighZGF0ZSkK cmV0dXJuJyc7dmFyIGRheU5hbWVzU2hvcnQ9KHNldHRpbmdzP3NldHRpbmdzLmRh eU5hbWVzU2hvcnQ6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLmRheU5hbWVzU2hvcnQ7 dmFyIGRheU5hbWVzPShzZXR0aW5ncz9zZXR0aW5ncy5kYXlOYW1lczpudWxsKXx8 dGhpcy5fZGVmYXVsdHMuZGF5TmFtZXM7dmFyIG1vbnRoTmFtZXNTaG9ydD0oc2V0 dGluZ3M/c2V0dGluZ3MubW9udGhOYW1lc1Nob3J0Om51bGwpfHx0aGlzLl9kZWZh dWx0cy5tb250aE5hbWVzU2hvcnQ7dmFyIG1vbnRoTmFtZXM9KHNldHRpbmdzP3Nl dHRpbmdzLm1vbnRoTmFtZXM6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLm1vbnRoTmFt ZXM7dmFyIGxvb2tBaGVhZD1mdW5jdGlvbihtYXRjaCl7dmFyIG1hdGNoZXM9KGlG b3JtYXQrMTxmb3JtYXQubGVuZ3RoJiZmb3JtYXQuY2hhckF0KGlGb3JtYXQrMSk9 PW1hdGNoKTtpZihtYXRjaGVzKQppRm9ybWF0Kys7cmV0dXJuIG1hdGNoZXM7fTt2 YXIgZm9ybWF0TnVtYmVyPWZ1bmN0aW9uKG1hdGNoLHZhbHVlLGxlbil7dmFyIG51 bT0nJyt2YWx1ZTtpZihsb29rQWhlYWQobWF0Y2gpKQp3aGlsZShudW0ubGVuZ3Ro PGxlbikKbnVtPScwJytudW07cmV0dXJuIG51bTt9O3ZhciBmb3JtYXROYW1lPWZ1 bmN0aW9uKG1hdGNoLHZhbHVlLHNob3J0TmFtZXMsbG9uZ05hbWVzKXtyZXR1cm4o bG9va0FoZWFkKG1hdGNoKT9sb25nTmFtZXNbdmFsdWVdOnNob3J0TmFtZXNbdmFs dWVdKTt9O3ZhciBvdXRwdXQ9Jyc7dmFyIGxpdGVyYWw9ZmFsc2U7aWYoZGF0ZSkK Zm9yKHZhciBpRm9ybWF0PTA7aUZvcm1hdDxmb3JtYXQubGVuZ3RoO2lGb3JtYXQr Kyl7aWYobGl0ZXJhbCkKaWYoZm9ybWF0LmNoYXJBdChpRm9ybWF0KT09IiciJiYh bG9va0FoZWFkKCInIikpCmxpdGVyYWw9ZmFsc2U7ZWxzZQpvdXRwdXQrPWZvcm1h dC5jaGFyQXQoaUZvcm1hdCk7ZWxzZQpzd2l0Y2goZm9ybWF0LmNoYXJBdChpRm9y bWF0KSl7Y2FzZSdkJzpvdXRwdXQrPWZvcm1hdE51bWJlcignZCcsZGF0ZS5nZXRE YXRlKCksMik7YnJlYWs7Y2FzZSdEJzpvdXRwdXQrPWZvcm1hdE5hbWUoJ0QnLGRh dGUuZ2V0RGF5KCksZGF5TmFtZXNTaG9ydCxkYXlOYW1lcyk7YnJlYWs7Y2FzZSdv Jzp2YXIgZG95PWRhdGUuZ2V0RGF0ZSgpO2Zvcih2YXIgbT1kYXRlLmdldE1vbnRo KCktMTttPj0wO20tLSkKZG95Kz10aGlzLl9nZXREYXlzSW5Nb250aChkYXRlLmdl dEZ1bGxZZWFyKCksbSk7b3V0cHV0Kz1mb3JtYXROdW1iZXIoJ28nLGRveSwzKTti cmVhaztjYXNlJ20nOm91dHB1dCs9Zm9ybWF0TnVtYmVyKCdtJyxkYXRlLmdldE1v bnRoKCkrMSwyKTticmVhaztjYXNlJ00nOm91dHB1dCs9Zm9ybWF0TmFtZSgnTScs ZGF0ZS5nZXRNb250aCgpLG1vbnRoTmFtZXNTaG9ydCxtb250aE5hbWVzKTticmVh aztjYXNlJ3knOm91dHB1dCs9KGxvb2tBaGVhZCgneScpP2RhdGUuZ2V0RnVsbFll YXIoKTooZGF0ZS5nZXRZZWFyKCklMTAwPDEwPycwJzonJykrZGF0ZS5nZXRZZWFy KCklMTAwKTticmVhaztjYXNlJ0AnOm91dHB1dCs9ZGF0ZS5nZXRUaW1lKCk7YnJl YWs7Y2FzZSInIjppZihsb29rQWhlYWQoIiciKSkKb3V0cHV0Kz0iJyI7ZWxzZQps aXRlcmFsPXRydWU7YnJlYWs7ZGVmYXVsdDpvdXRwdXQrPWZvcm1hdC5jaGFyQXQo aUZvcm1hdCk7fX0KcmV0dXJuIG91dHB1dDt9LF9wb3NzaWJsZUNoYXJzOmZ1bmN0 aW9uKGZvcm1hdCl7dmFyIGNoYXJzPScnO3ZhciBsaXRlcmFsPWZhbHNlO2Zvcih2 YXIgaUZvcm1hdD0wO2lGb3JtYXQ8Zm9ybWF0Lmxlbmd0aDtpRm9ybWF0KyspCmlm KGxpdGVyYWwpCmlmKGZvcm1hdC5jaGFyQXQoaUZvcm1hdCk9PSInIiYmIWxvb2tB aGVhZCgiJyIpKQpsaXRlcmFsPWZhbHNlO2Vsc2UKY2hhcnMrPWZvcm1hdC5jaGFy QXQoaUZvcm1hdCk7ZWxzZQpzd2l0Y2goZm9ybWF0LmNoYXJBdChpRm9ybWF0KSl7 Y2FzZSdkJzpjYXNlJ20nOmNhc2UneSc6Y2FzZSdAJzpjaGFycys9JzAxMjM0NTY3 ODknO2JyZWFrO2Nhc2UnRCc6Y2FzZSdNJzpyZXR1cm4gbnVsbDtjYXNlIiciOmlm KGxvb2tBaGVhZCgiJyIpKQpjaGFycys9IiciO2Vsc2UKbGl0ZXJhbD10cnVlO2Jy ZWFrO2RlZmF1bHQ6Y2hhcnMrPWZvcm1hdC5jaGFyQXQoaUZvcm1hdCk7fQpyZXR1 cm4gY2hhcnM7fSxfZ2V0OmZ1bmN0aW9uKGluc3QsbmFtZSl7cmV0dXJuIGluc3Qu c2V0dGluZ3NbbmFtZV0hPT11bmRlZmluZWQ/aW5zdC5zZXR0aW5nc1tuYW1lXTp0 aGlzLl9kZWZhdWx0c1tuYW1lXTt9LF9zZXREYXRlRnJvbUZpZWxkOmZ1bmN0aW9u KGluc3Qpe3ZhciBkYXRlRm9ybWF0PXRoaXMuX2dldChpbnN0LCdkYXRlRm9ybWF0 Jyk7dmFyIGRhdGVzPWluc3QuaW5wdXQ/aW5zdC5pbnB1dC52YWwoKTpudWxsO2lu c3QuZW5kRGF5PWluc3QuZW5kTW9udGg9aW5zdC5lbmRZZWFyPW51bGw7dmFyIGRh dGU9ZGVmYXVsdERhdGU9dGhpcy5fZ2V0RGVmYXVsdERhdGUoaW5zdCk7dmFyIHNl dHRpbmdzPXRoaXMuX2dldEZvcm1hdENvbmZpZyhpbnN0KTt0cnl7ZGF0ZT10aGlz LnBhcnNlRGF0ZShkYXRlRm9ybWF0LGRhdGVzLHNldHRpbmdzKXx8ZGVmYXVsdERh dGU7fWNhdGNoKGV2ZW50KXt0aGlzLmxvZyhldmVudCk7ZGF0ZT1kZWZhdWx0RGF0 ZTt9Cmluc3Quc2VsZWN0ZWREYXk9ZGF0ZS5nZXREYXRlKCk7aW5zdC5kcmF3TW9u dGg9aW5zdC5zZWxlY3RlZE1vbnRoPWRhdGUuZ2V0TW9udGgoKTtpbnN0LmRyYXdZ ZWFyPWluc3Quc2VsZWN0ZWRZZWFyPWRhdGUuZ2V0RnVsbFllYXIoKTtpbnN0LmN1 cnJlbnREYXk9KGRhdGVzP2RhdGUuZ2V0RGF0ZSgpOjApO2luc3QuY3VycmVudE1v bnRoPShkYXRlcz9kYXRlLmdldE1vbnRoKCk6MCk7aW5zdC5jdXJyZW50WWVhcj0o ZGF0ZXM/ZGF0ZS5nZXRGdWxsWWVhcigpOjApO3RoaXMuX2FkanVzdEluc3REYXRl KGluc3QpO30sX2dldERlZmF1bHREYXRlOmZ1bmN0aW9uKGluc3Qpe3ZhciBkYXRl PXRoaXMuX2RldGVybWluZURhdGUodGhpcy5fZ2V0KGluc3QsJ2RlZmF1bHREYXRl JyksbmV3IERhdGUoKSk7dmFyIG1pbkRhdGU9dGhpcy5fZ2V0TWluTWF4RGF0ZShp bnN0LCdtaW4nLHRydWUpO3ZhciBtYXhEYXRlPXRoaXMuX2dldE1pbk1heERhdGUo aW5zdCwnbWF4Jyk7ZGF0ZT0obWluRGF0ZSYmZGF0ZTxtaW5EYXRlP21pbkRhdGU6 ZGF0ZSk7ZGF0ZT0obWF4RGF0ZSYmZGF0ZT5tYXhEYXRlP21heERhdGU6ZGF0ZSk7 cmV0dXJuIGRhdGU7fSxfZGV0ZXJtaW5lRGF0ZTpmdW5jdGlvbihkYXRlLGRlZmF1 bHREYXRlKXt2YXIgb2Zmc2V0TnVtZXJpYz1mdW5jdGlvbihvZmZzZXQpe3ZhciBk YXRlPW5ldyBEYXRlKCk7ZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpK29mZnNl dCk7cmV0dXJuIGRhdGU7fTt2YXIgb2Zmc2V0U3RyaW5nPWZ1bmN0aW9uKG9mZnNl dCxnZXREYXlzSW5Nb250aCl7dmFyIGRhdGU9bmV3IERhdGUoKTt2YXIgeWVhcj1k YXRlLmdldEZ1bGxZZWFyKCk7dmFyIG1vbnRoPWRhdGUuZ2V0TW9udGgoKTt2YXIg ZGF5PWRhdGUuZ2V0RGF0ZSgpO3ZhciBwYXR0ZXJuPS8oWystXT9bMC05XSspXHMq KGR8RHx3fFd8bXxNfHl8WSk/L2c7dmFyIG1hdGNoZXM9cGF0dGVybi5leGVjKG9m ZnNldCk7d2hpbGUobWF0Y2hlcyl7c3dpdGNoKG1hdGNoZXNbMl18fCdkJyl7Y2Fz ZSdkJzpjYXNlJ0QnOmRheSs9cGFyc2VJbnQobWF0Y2hlc1sxXSwxMCk7YnJlYWs7 Y2FzZSd3JzpjYXNlJ1cnOmRheSs9cGFyc2VJbnQobWF0Y2hlc1sxXSwxMCkqNzti cmVhaztjYXNlJ20nOmNhc2UnTSc6bW9udGgrPXBhcnNlSW50KG1hdGNoZXNbMV0s MTApO2RheT1NYXRoLm1pbihkYXksZ2V0RGF5c0luTW9udGgoeWVhcixtb250aCkp O2JyZWFrO2Nhc2UneSc6Y2FzZSdZJzp5ZWFyKz1wYXJzZUludChtYXRjaGVzWzFd LDEwKTtkYXk9TWF0aC5taW4oZGF5LGdldERheXNJbk1vbnRoKHllYXIsbW9udGgp KTticmVhazt9Cm1hdGNoZXM9cGF0dGVybi5leGVjKG9mZnNldCk7fQpyZXR1cm4g bmV3IERhdGUoeWVhcixtb250aCxkYXkpO307ZGF0ZT0oZGF0ZT09bnVsbD9kZWZh dWx0RGF0ZToodHlwZW9mIGRhdGU9PSdzdHJpbmcnP29mZnNldFN0cmluZyhkYXRl LHRoaXMuX2dldERheXNJbk1vbnRoKToodHlwZW9mIGRhdGU9PSdudW1iZXInPyhp c05hTihkYXRlKT9kZWZhdWx0RGF0ZTpvZmZzZXROdW1lcmljKGRhdGUpKTpkYXRl KSkpO2RhdGU9KGRhdGUmJmRhdGUudG9TdHJpbmcoKT09J0ludmFsaWQgRGF0ZSc/ ZGVmYXVsdERhdGU6ZGF0ZSk7aWYoZGF0ZSl7ZGF0ZS5zZXRIb3VycygwKTtkYXRl LnNldE1pbnV0ZXMoMCk7ZGF0ZS5zZXRTZWNvbmRzKDApO2RhdGUuc2V0TWlsbGlz ZWNvbmRzKDApO30KcmV0dXJuIHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KGRh dGUpO30sX2RheWxpZ2h0U2F2aW5nQWRqdXN0OmZ1bmN0aW9uKGRhdGUpe2lmKCFk YXRlKXJldHVybiBudWxsO2RhdGUuc2V0SG91cnMoZGF0ZS5nZXRIb3VycygpPjEy P2RhdGUuZ2V0SG91cnMoKSsyOjApO3JldHVybiBkYXRlO30sX3NldERhdGU6ZnVu Y3Rpb24oaW5zdCxkYXRlLGVuZERhdGUpe3ZhciBjbGVhcj0hKGRhdGUpO3ZhciBv cmlnTW9udGg9aW5zdC5zZWxlY3RlZE1vbnRoO3ZhciBvcmlnWWVhcj1pbnN0LnNl bGVjdGVkWWVhcjtkYXRlPXRoaXMuX2RldGVybWluZURhdGUoZGF0ZSxuZXcgRGF0 ZSgpKTtpbnN0LnNlbGVjdGVkRGF5PWluc3QuY3VycmVudERheT1kYXRlLmdldERh dGUoKTtpbnN0LmRyYXdNb250aD1pbnN0LnNlbGVjdGVkTW9udGg9aW5zdC5jdXJy ZW50TW9udGg9ZGF0ZS5nZXRNb250aCgpO2luc3QuZHJhd1llYXI9aW5zdC5zZWxl Y3RlZFllYXI9aW5zdC5jdXJyZW50WWVhcj1kYXRlLmdldEZ1bGxZZWFyKCk7aWYo b3JpZ01vbnRoIT1pbnN0LnNlbGVjdGVkTW9udGh8fG9yaWdZZWFyIT1pbnN0LnNl bGVjdGVkWWVhcikKdGhpcy5fbm90aWZ5Q2hhbmdlKGluc3QpO3RoaXMuX2FkanVz dEluc3REYXRlKGluc3QpO2lmKGluc3QuaW5wdXQpe2luc3QuaW5wdXQudmFsKGNs ZWFyPycnOnRoaXMuX2Zvcm1hdERhdGUoaW5zdCkpO319LF9nZXREYXRlOmZ1bmN0 aW9uKGluc3Qpe3ZhciBzdGFydERhdGU9KCFpbnN0LmN1cnJlbnRZZWFyfHwoaW5z dC5pbnB1dCYmaW5zdC5pbnB1dC52YWwoKT09JycpP251bGw6dGhpcy5fZGF5bGln aHRTYXZpbmdBZGp1c3QobmV3IERhdGUoaW5zdC5jdXJyZW50WWVhcixpbnN0LmN1 cnJlbnRNb250aCxpbnN0LmN1cnJlbnREYXkpKSk7cmV0dXJuIHN0YXJ0RGF0ZTt9 LF9nZW5lcmF0ZUhUTUw6ZnVuY3Rpb24oaW5zdCl7dmFyIHRvZGF5PW5ldyBEYXRl KCk7dG9kYXk9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUodG9k YXkuZ2V0RnVsbFllYXIoKSx0b2RheS5nZXRNb250aCgpLHRvZGF5LmdldERhdGUo KSkpO3ZhciBpc1JUTD10aGlzLl9nZXQoaW5zdCwnaXNSVEwnKTt2YXIgc2hvd0J1 dHRvblBhbmVsPXRoaXMuX2dldChpbnN0LCdzaG93QnV0dG9uUGFuZWwnKTt2YXIg aGlkZUlmTm9QcmV2TmV4dD10aGlzLl9nZXQoaW5zdCwnaGlkZUlmTm9QcmV2TmV4 dCcpO3ZhciBuYXZpZ2F0aW9uQXNEYXRlRm9ybWF0PXRoaXMuX2dldChpbnN0LCdu YXZpZ2F0aW9uQXNEYXRlRm9ybWF0Jyk7dmFyIG51bU1vbnRocz10aGlzLl9nZXRO dW1iZXJPZk1vbnRocyhpbnN0KTt2YXIgc2hvd0N1cnJlbnRBdFBvcz10aGlzLl9n ZXQoaW5zdCwnc2hvd0N1cnJlbnRBdFBvcycpO3ZhciBzdGVwTW9udGhzPXRoaXMu X2dldChpbnN0LCdzdGVwTW9udGhzJyk7dmFyIHN0ZXBCaWdNb250aHM9dGhpcy5f Z2V0KGluc3QsJ3N0ZXBCaWdNb250aHMnKTt2YXIgaXNNdWx0aU1vbnRoPShudW1N b250aHNbMF0hPTF8fG51bU1vbnRoc1sxXSE9MSk7dmFyIGN1cnJlbnREYXRlPXRo aXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KCghaW5zdC5jdXJyZW50RGF5P25ldyBE YXRlKDk5OTksOSw5KTpuZXcgRGF0ZShpbnN0LmN1cnJlbnRZZWFyLGluc3QuY3Vy cmVudE1vbnRoLGluc3QuY3VycmVudERheSkpKTt2YXIgbWluRGF0ZT10aGlzLl9n ZXRNaW5NYXhEYXRlKGluc3QsJ21pbicsdHJ1ZSk7dmFyIG1heERhdGU9dGhpcy5f Z2V0TWluTWF4RGF0ZShpbnN0LCdtYXgnKTt2YXIgZHJhd01vbnRoPWluc3QuZHJh d01vbnRoLXNob3dDdXJyZW50QXRQb3M7dmFyIGRyYXdZZWFyPWluc3QuZHJhd1ll YXI7aWYoZHJhd01vbnRoPDApe2RyYXdNb250aCs9MTI7ZHJhd1llYXItLTt9Cmlm KG1heERhdGUpe3ZhciBtYXhEcmF3PXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0 KG5ldyBEYXRlKG1heERhdGUuZ2V0RnVsbFllYXIoKSxtYXhEYXRlLmdldE1vbnRo KCktbnVtTW9udGhzWzFdKzEsbWF4RGF0ZS5nZXREYXRlKCkpKTttYXhEcmF3PSht aW5EYXRlJiZtYXhEcmF3PG1pbkRhdGU/bWluRGF0ZTptYXhEcmF3KTt3aGlsZSh0 aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShkcmF3WWVhcixkcmF3 TW9udGgsMSkpPm1heERyYXcpe2RyYXdNb250aC0tO2lmKGRyYXdNb250aDwwKXtk cmF3TW9udGg9MTE7ZHJhd1llYXItLTt9fX0KaW5zdC5kcmF3TW9udGg9ZHJhd01v bnRoO2luc3QuZHJhd1llYXI9ZHJhd1llYXI7dmFyIHByZXZUZXh0PXRoaXMuX2dl dChpbnN0LCdwcmV2VGV4dCcpO3ByZXZUZXh0PSghbmF2aWdhdGlvbkFzRGF0ZUZv cm1hdD9wcmV2VGV4dDp0aGlzLmZvcm1hdERhdGUocHJldlRleHQsdGhpcy5fZGF5 bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoZHJhd1llYXIsZHJhd01vbnRoLXN0 ZXBNb250aHMsMSkpLHRoaXMuX2dldEZvcm1hdENvbmZpZyhpbnN0KSkpO3ZhciBw cmV2PSh0aGlzLl9jYW5BZGp1c3RNb250aChpbnN0LC0xLGRyYXdZZWFyLGRyYXdN b250aCk/JzxhIGNsYXNzPSJ1aS1kYXRlcGlja2VyLXByZXYgdWktY29ybmVyLWFs bCIgb25jbGljaz0iRFBfalF1ZXJ5LmRhdGVwaWNrZXIuX2FkanVzdERhdGUoXCcj JytpbnN0LmlkKydcJywgLScrc3RlcE1vbnRocysnLCBcJ01cJyk7IicrJyB0aXRs ZT0iJytwcmV2VGV4dCsnIj48c3BhbiBjbGFzcz0idWktaWNvbiB1aS1pY29uLWNp cmNsZS10cmlhbmdsZS0nKyhpc1JUTD8nZSc6J3cnKSsnIj4nK3ByZXZUZXh0Kyc8 L3NwYW4+PC9hPic6KGhpZGVJZk5vUHJldk5leHQ/Jyc6JzxhIGNsYXNzPSJ1aS1k YXRlcGlja2VyLXByZXYgdWktY29ybmVyLWFsbCB1aS1zdGF0ZS1kaXNhYmxlZCIg dGl0bGU9IicrcHJldlRleHQrJyI+PHNwYW4gY2xhc3M9InVpLWljb24gdWktaWNv bi1jaXJjbGUtdHJpYW5nbGUtJysoaXNSVEw/J2UnOid3JykrJyI+JytwcmV2VGV4 dCsnPC9zcGFuPjwvYT4nKSk7dmFyIG5leHRUZXh0PXRoaXMuX2dldChpbnN0LCdu ZXh0VGV4dCcpO25leHRUZXh0PSghbmF2aWdhdGlvbkFzRGF0ZUZvcm1hdD9uZXh0 VGV4dDp0aGlzLmZvcm1hdERhdGUobmV4dFRleHQsdGhpcy5fZGF5bGlnaHRTYXZp bmdBZGp1c3QobmV3IERhdGUoZHJhd1llYXIsZHJhd01vbnRoK3N0ZXBNb250aHMs MSkpLHRoaXMuX2dldEZvcm1hdENvbmZpZyhpbnN0KSkpO3ZhciBuZXh0PSh0aGlz Ll9jYW5BZGp1c3RNb250aChpbnN0LCsxLGRyYXdZZWFyLGRyYXdNb250aCk/Jzxh IGNsYXNzPSJ1aS1kYXRlcGlja2VyLW5leHQgdWktY29ybmVyLWFsbCIgb25jbGlj az0iRFBfalF1ZXJ5LmRhdGVwaWNrZXIuX2FkanVzdERhdGUoXCcjJytpbnN0Lmlk KydcJywgKycrc3RlcE1vbnRocysnLCBcJ01cJyk7IicrJyB0aXRsZT0iJytuZXh0 VGV4dCsnIj48c3BhbiBjbGFzcz0idWktaWNvbiB1aS1pY29uLWNpcmNsZS10cmlh bmdsZS0nKyhpc1JUTD8ndyc6J2UnKSsnIj4nK25leHRUZXh0Kyc8L3NwYW4+PC9h Pic6KGhpZGVJZk5vUHJldk5leHQ/Jyc6JzxhIGNsYXNzPSJ1aS1kYXRlcGlja2Vy LW5leHQgdWktY29ybmVyLWFsbCB1aS1zdGF0ZS1kaXNhYmxlZCIgdGl0bGU9Iicr bmV4dFRleHQrJyI+PHNwYW4gY2xhc3M9InVpLWljb24gdWktaWNvbi1jaXJjbGUt dHJpYW5nbGUtJysoaXNSVEw/J3cnOidlJykrJyI+JytuZXh0VGV4dCsnPC9zcGFu PjwvYT4nKSk7dmFyIGN1cnJlbnRUZXh0PXRoaXMuX2dldChpbnN0LCdjdXJyZW50 VGV4dCcpO3ZhciBnb3RvRGF0ZT0odGhpcy5fZ2V0KGluc3QsJ2dvdG9DdXJyZW50 JykmJmluc3QuY3VycmVudERheT9jdXJyZW50RGF0ZTp0b2RheSk7Y3VycmVudFRl eHQ9KCFuYXZpZ2F0aW9uQXNEYXRlRm9ybWF0P2N1cnJlbnRUZXh0OnRoaXMuZm9y bWF0RGF0ZShjdXJyZW50VGV4dCxnb3RvRGF0ZSx0aGlzLl9nZXRGb3JtYXRDb25m aWcoaW5zdCkpKTt2YXIgY29udHJvbHM9KCFpbnN0LmlubGluZT8nPGJ1dHRvbiB0 eXBlPSJidXR0b24iIGNsYXNzPSJ1aS1kYXRlcGlja2VyLWNsb3NlIHVpLXN0YXRl LWRlZmF1bHQgdWktcHJpb3JpdHktcHJpbWFyeSB1aS1jb3JuZXItYWxsIiBvbmNs aWNrPSJEUF9qUXVlcnkuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKTsiPicr dGhpcy5fZ2V0KGluc3QsJ2Nsb3NlVGV4dCcpKyc8L2J1dHRvbj4nOicnKTt2YXIg YnV0dG9uUGFuZWw9KHNob3dCdXR0b25QYW5lbCk/JzxkaXYgY2xhc3M9InVpLWRh dGVwaWNrZXItYnV0dG9ucGFuZSB1aS13aWRnZXQtY29udGVudCI+JysoaXNSVEw/ Y29udHJvbHM6JycpKwoodGhpcy5faXNJblJhbmdlKGluc3QsZ290b0RhdGUpPyc8 YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9InVpLWRhdGVwaWNrZXItY3VycmVu dCB1aS1zdGF0ZS1kZWZhdWx0IHVpLXByaW9yaXR5LXNlY29uZGFyeSB1aS1jb3Ju ZXItYWxsIiBvbmNsaWNrPSJEUF9qUXVlcnkuZGF0ZXBpY2tlci5fZ290b1RvZGF5 KFwnIycraW5zdC5pZCsnXCcpOyInKyc+JytjdXJyZW50VGV4dCsnPC9idXR0b24+ JzonJykrKGlzUlRMPycnOmNvbnRyb2xzKSsnPC9kaXY+JzonJzt2YXIgZmlyc3RE YXk9cGFyc2VJbnQodGhpcy5fZ2V0KGluc3QsJ2ZpcnN0RGF5JyksMTApO2ZpcnN0 RGF5PShpc05hTihmaXJzdERheSk/MDpmaXJzdERheSk7dmFyIGRheU5hbWVzPXRo aXMuX2dldChpbnN0LCdkYXlOYW1lcycpO3ZhciBkYXlOYW1lc1Nob3J0PXRoaXMu X2dldChpbnN0LCdkYXlOYW1lc1Nob3J0Jyk7dmFyIGRheU5hbWVzTWluPXRoaXMu X2dldChpbnN0LCdkYXlOYW1lc01pbicpO3ZhciBtb250aE5hbWVzPXRoaXMuX2dl dChpbnN0LCdtb250aE5hbWVzJyk7dmFyIG1vbnRoTmFtZXNTaG9ydD10aGlzLl9n ZXQoaW5zdCwnbW9udGhOYW1lc1Nob3J0Jyk7dmFyIGJlZm9yZVNob3dEYXk9dGhp cy5fZ2V0KGluc3QsJ2JlZm9yZVNob3dEYXknKTt2YXIgc2hvd090aGVyTW9udGhz PXRoaXMuX2dldChpbnN0LCdzaG93T3RoZXJNb250aHMnKTt2YXIgY2FsY3VsYXRl V2Vlaz10aGlzLl9nZXQoaW5zdCwnY2FsY3VsYXRlV2VlaycpfHx0aGlzLmlzbzg2 MDFXZWVrO3ZhciBlbmREYXRlPWluc3QuZW5kRGF5P3RoaXMuX2RheWxpZ2h0U2F2 aW5nQWRqdXN0KG5ldyBEYXRlKGluc3QuZW5kWWVhcixpbnN0LmVuZE1vbnRoLGlu c3QuZW5kRGF5KSk6Y3VycmVudERhdGU7dmFyIGRlZmF1bHREYXRlPXRoaXMuX2dl dERlZmF1bHREYXRlKGluc3QpO3ZhciBodG1sPScnO2Zvcih2YXIgcm93PTA7cm93 PG51bU1vbnRoc1swXTtyb3crKyl7dmFyIGdyb3VwPScnO2Zvcih2YXIgY29sPTA7 Y29sPG51bU1vbnRoc1sxXTtjb2wrKyl7dmFyIHNlbGVjdGVkRGF0ZT10aGlzLl9k YXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShkcmF3WWVhcixkcmF3TW9udGgs aW5zdC5zZWxlY3RlZERheSkpO3ZhciBjb3JuZXJDbGFzcz0nIHVpLWNvcm5lci1h bGwnO3ZhciBjYWxlbmRlcj0nJztpZihpc011bHRpTW9udGgpe2NhbGVuZGVyKz0n PGRpdiBjbGFzcz0idWktZGF0ZXBpY2tlci1ncm91cCB1aS1kYXRlcGlja2VyLWdy b3VwLSc7c3dpdGNoKGNvbCl7Y2FzZSAwOmNhbGVuZGVyKz0nZmlyc3QnO2Nvcm5l ckNsYXNzPScgdWktY29ybmVyLScrKGlzUlRMPydyaWdodCc6J2xlZnQnKTticmVh aztjYXNlIG51bU1vbnRoc1sxXS0xOmNhbGVuZGVyKz0nbGFzdCc7Y29ybmVyQ2xh c3M9JyB1aS1jb3JuZXItJysoaXNSVEw/J2xlZnQnOidyaWdodCcpO2JyZWFrO2Rl ZmF1bHQ6Y2FsZW5kZXIrPSdtaWRkbGUnO2Nvcm5lckNsYXNzPScnO2JyZWFrO30K Y2FsZW5kZXIrPSciPic7fQpjYWxlbmRlcis9JzxkaXYgY2xhc3M9InVpLWRhdGVw aWNrZXItaGVhZGVyIHVpLXdpZGdldC1oZWFkZXIgdWktaGVscGVyLWNsZWFyZml4 Jytjb3JuZXJDbGFzcysnIj4nKwooL2FsbHxsZWZ0Ly50ZXN0KGNvcm5lckNsYXNz KSYmcm93PT0wPyhpc1JUTD9uZXh0OnByZXYpOicnKSsKKC9hbGx8cmlnaHQvLnRl c3QoY29ybmVyQ2xhc3MpJiZyb3c9PTA/KGlzUlRMP3ByZXY6bmV4dCk6JycpKwp0 aGlzLl9nZW5lcmF0ZU1vbnRoWWVhckhlYWRlcihpbnN0LGRyYXdNb250aCxkcmF3 WWVhcixtaW5EYXRlLG1heERhdGUsc2VsZWN0ZWREYXRlLHJvdz4wfHxjb2w+MCxt b250aE5hbWVzLG1vbnRoTmFtZXNTaG9ydCkrJzwvZGl2Pjx0YWJsZSBjbGFzcz0i dWktZGF0ZXBpY2tlci1jYWxlbmRhciI+PHRoZWFkPicrJzx0cj4nO3ZhciB0aGVh ZD0nJztmb3IodmFyIGRvdz0wO2Rvdzw3O2RvdysrKXt2YXIgZGF5PShkb3crZmly c3REYXkpJTc7dGhlYWQrPSc8dGgnKygoZG93K2ZpcnN0RGF5KzYpJTc+PTU/JyBj bGFzcz0idWktZGF0ZXBpY2tlci13ZWVrLWVuZCInOicnKSsnPicrJzxzcGFuIHRp dGxlPSInK2RheU5hbWVzW2RheV0rJyI+JytkYXlOYW1lc01pbltkYXldKyc8L3Nw YW4+PC90aD4nO30KY2FsZW5kZXIrPXRoZWFkKyc8L3RyPjwvdGhlYWQ+PHRib2R5 Pic7dmFyIGRheXNJbk1vbnRoPXRoaXMuX2dldERheXNJbk1vbnRoKGRyYXdZZWFy LGRyYXdNb250aCk7aWYoZHJhd1llYXI9PWluc3Quc2VsZWN0ZWRZZWFyJiZkcmF3 TW9udGg9PWluc3Quc2VsZWN0ZWRNb250aCkKaW5zdC5zZWxlY3RlZERheT1NYXRo Lm1pbihpbnN0LnNlbGVjdGVkRGF5LGRheXNJbk1vbnRoKTt2YXIgbGVhZERheXM9 KHRoaXMuX2dldEZpcnN0RGF5T2ZNb250aChkcmF3WWVhcixkcmF3TW9udGgpLWZp cnN0RGF5KzcpJTc7dmFyIG51bVJvd3M9KGlzTXVsdGlNb250aD82Ok1hdGguY2Vp bCgobGVhZERheXMrZGF5c0luTW9udGgpLzcpKTt2YXIgcHJpbnREYXRlPXRoaXMu X2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGRyYXdZZWFyLGRyYXdNb250 aCwxLWxlYWREYXlzKSk7Zm9yKHZhciBkUm93PTA7ZFJvdzxudW1Sb3dzO2RSb3cr Kyl7Y2FsZW5kZXIrPSc8dHI+Jzt2YXIgdGJvZHk9Jyc7Zm9yKHZhciBkb3c9MDtk b3c8Nztkb3crKyl7dmFyIGRheVNldHRpbmdzPShiZWZvcmVTaG93RGF5P2JlZm9y ZVNob3dEYXkuYXBwbHkoKGluc3QuaW5wdXQ/aW5zdC5pbnB1dFswXTpudWxsKSxb cHJpbnREYXRlXSk6W3RydWUsJyddKTt2YXIgb3RoZXJNb250aD0ocHJpbnREYXRl LmdldE1vbnRoKCkhPWRyYXdNb250aCk7dmFyIHVuc2VsZWN0YWJsZT1vdGhlck1v bnRofHwhZGF5U2V0dGluZ3NbMF18fChtaW5EYXRlJiZwcmludERhdGU8bWluRGF0 ZSl8fChtYXhEYXRlJiZwcmludERhdGU+bWF4RGF0ZSk7dGJvZHkrPSc8dGQgY2xh c3M9IicrCigoZG93K2ZpcnN0RGF5KzYpJTc+PTU/JyB1aS1kYXRlcGlja2VyLXdl ZWstZW5kJzonJykrCihvdGhlck1vbnRoPycgdWktZGF0ZXBpY2tlci1vdGhlci1t b250aCc6JycpKwooKHByaW50RGF0ZS5nZXRUaW1lKCk9PXNlbGVjdGVkRGF0ZS5n ZXRUaW1lKCkmJmRyYXdNb250aD09aW5zdC5zZWxlY3RlZE1vbnRoJiZpbnN0Ll9r ZXlFdmVudCl8fChkZWZhdWx0RGF0ZS5nZXRUaW1lKCk9PXByaW50RGF0ZS5nZXRU aW1lKCkmJmRlZmF1bHREYXRlLmdldFRpbWUoKT09c2VsZWN0ZWREYXRlLmdldFRp bWUoKSk/JyAnK3RoaXMuX2RheU92ZXJDbGFzczonJykrCih1bnNlbGVjdGFibGU/ JyAnK3RoaXMuX3Vuc2VsZWN0YWJsZUNsYXNzKycgdWktc3RhdGUtZGlzYWJsZWQn OicnKSsKKG90aGVyTW9udGgmJiFzaG93T3RoZXJNb250aHM/Jyc6JyAnK2RheVNl dHRpbmdzWzFdKwoocHJpbnREYXRlLmdldFRpbWUoKT49Y3VycmVudERhdGUuZ2V0 VGltZSgpJiZwcmludERhdGUuZ2V0VGltZSgpPD1lbmREYXRlLmdldFRpbWUoKT8n ICcrdGhpcy5fY3VycmVudENsYXNzOicnKSsKKHByaW50RGF0ZS5nZXRUaW1lKCk9 PXRvZGF5LmdldFRpbWUoKT8nIHVpLWRhdGVwaWNrZXItdG9kYXknOicnKSkrJyIn KwooKCFvdGhlck1vbnRofHxzaG93T3RoZXJNb250aHMpJiZkYXlTZXR0aW5nc1sy XT8nIHRpdGxlPSInK2RheVNldHRpbmdzWzJdKyciJzonJykrCih1bnNlbGVjdGFi bGU/Jyc6JyBvbmNsaWNrPSJEUF9qUXVlcnkuZGF0ZXBpY2tlci5fc2VsZWN0RGF5 KFwnIycrCmluc3QuaWQrJ1wnLCcrZHJhd01vbnRoKycsJytkcmF3WWVhcisnLCB0 aGlzKTtyZXR1cm4gZmFsc2U7IicpKyc+JysKKG90aGVyTW9udGg/KHNob3dPdGhl ck1vbnRocz9wcmludERhdGUuZ2V0RGF0ZSgpOicmI3hhMDsnKToodW5zZWxlY3Rh YmxlPyc8c3BhbiBjbGFzcz0idWktc3RhdGUtZGVmYXVsdCI+JytwcmludERhdGUu Z2V0RGF0ZSgpKyc8L3NwYW4+JzonPGEgY2xhc3M9InVpLXN0YXRlLWRlZmF1bHQn KwoocHJpbnREYXRlLmdldFRpbWUoKT09dG9kYXkuZ2V0VGltZSgpPycgdWktc3Rh dGUtaGlnaGxpZ2h0JzonJykrCihwcmludERhdGUuZ2V0VGltZSgpPj1jdXJyZW50 RGF0ZS5nZXRUaW1lKCkmJnByaW50RGF0ZS5nZXRUaW1lKCk8PWVuZERhdGUuZ2V0 VGltZSgpPycgdWktc3RhdGUtYWN0aXZlJzonJykrJyIgaHJlZj0iIyI+Jytwcmlu dERhdGUuZ2V0RGF0ZSgpKyc8L2E+JykpKyc8L3RkPic7cHJpbnREYXRlLnNldERh dGUocHJpbnREYXRlLmdldERhdGUoKSsxKTtwcmludERhdGU9dGhpcy5fZGF5bGln aHRTYXZpbmdBZGp1c3QocHJpbnREYXRlKTt9CmNhbGVuZGVyKz10Ym9keSsnPC90 cj4nO30KZHJhd01vbnRoKys7aWYoZHJhd01vbnRoPjExKXtkcmF3TW9udGg9MDtk cmF3WWVhcisrO30KY2FsZW5kZXIrPSc8L3Rib2R5PjwvdGFibGU+JysoaXNNdWx0 aU1vbnRoPyc8L2Rpdj4nKwooKG51bU1vbnRoc1swXT4wJiZjb2w9PW51bU1vbnRo c1sxXS0xKT8nPGRpdiBjbGFzcz0idWktZGF0ZXBpY2tlci1yb3ctYnJlYWsiPjwv ZGl2Pic6JycpOicnKTtncm91cCs9Y2FsZW5kZXI7fQpodG1sKz1ncm91cDt9Cmh0 bWwrPWJ1dHRvblBhbmVsKygkLmJyb3dzZXIubXNpZSYmcGFyc2VJbnQoJC5icm93 c2VyLnZlcnNpb24sMTApPDcmJiFpbnN0LmlubGluZT8nPGlmcmFtZSBzcmM9Imph dmFzY3JpcHQ6ZmFsc2U7IiBjbGFzcz0idWktZGF0ZXBpY2tlci1jb3ZlciIgZnJh bWVib3JkZXI9IjAiPjwvaWZyYW1lPic6JycpO2luc3QuX2tleUV2ZW50PWZhbHNl O3JldHVybiBodG1sO30sX2dlbmVyYXRlTW9udGhZZWFySGVhZGVyOmZ1bmN0aW9u KGluc3QsZHJhd01vbnRoLGRyYXdZZWFyLG1pbkRhdGUsbWF4RGF0ZSxzZWxlY3Rl ZERhdGUsc2Vjb25kYXJ5LG1vbnRoTmFtZXMsbW9udGhOYW1lc1Nob3J0KXttaW5E YXRlPShpbnN0LnJhbmdlU3RhcnQmJm1pbkRhdGUmJnNlbGVjdGVkRGF0ZTxtaW5E YXRlP3NlbGVjdGVkRGF0ZTptaW5EYXRlKTt2YXIgY2hhbmdlTW9udGg9dGhpcy5f Z2V0KGluc3QsJ2NoYW5nZU1vbnRoJyk7dmFyIGNoYW5nZVllYXI9dGhpcy5fZ2V0 KGluc3QsJ2NoYW5nZVllYXInKTt2YXIgc2hvd01vbnRoQWZ0ZXJZZWFyPXRoaXMu X2dldChpbnN0LCdzaG93TW9udGhBZnRlclllYXInKTt2YXIgaHRtbD0nPGRpdiBj bGFzcz0idWktZGF0ZXBpY2tlci10aXRsZSI+Jzt2YXIgbW9udGhIdG1sPScnO2lm KHNlY29uZGFyeXx8IWNoYW5nZU1vbnRoKQptb250aEh0bWwrPSc8c3BhbiBjbGFz cz0idWktZGF0ZXBpY2tlci1tb250aCI+Jyttb250aE5hbWVzW2RyYXdNb250aF0r Jzwvc3Bhbj4gJztlbHNle3ZhciBpbk1pblllYXI9KG1pbkRhdGUmJm1pbkRhdGUu Z2V0RnVsbFllYXIoKT09ZHJhd1llYXIpO3ZhciBpbk1heFllYXI9KG1heERhdGUm Jm1heERhdGUuZ2V0RnVsbFllYXIoKT09ZHJhd1llYXIpO21vbnRoSHRtbCs9Jzxz ZWxlY3QgY2xhc3M9InVpLWRhdGVwaWNrZXItbW9udGgiICcrJ29uY2hhbmdlPSJE UF9qUXVlcnkuZGF0ZXBpY2tlci5fc2VsZWN0TW9udGhZZWFyKFwnIycraW5zdC5p ZCsnXCcsIHRoaXMsIFwnTVwnKTsiICcrJ29uY2xpY2s9IkRQX2pRdWVyeS5kYXRl cGlja2VyLl9jbGlja01vbnRoWWVhcihcJyMnK2luc3QuaWQrJ1wnKTsiJysnPic7 Zm9yKHZhciBtb250aD0wO21vbnRoPDEyO21vbnRoKyspe2lmKCghaW5NaW5ZZWFy fHxtb250aD49bWluRGF0ZS5nZXRNb250aCgpKSYmKCFpbk1heFllYXJ8fG1vbnRo PD1tYXhEYXRlLmdldE1vbnRoKCkpKQptb250aEh0bWwrPSc8b3B0aW9uIHZhbHVl PSInK21vbnRoKyciJysKKG1vbnRoPT1kcmF3TW9udGg/JyBzZWxlY3RlZD0ic2Vs ZWN0ZWQiJzonJykrJz4nK21vbnRoTmFtZXNTaG9ydFttb250aF0rJzwvb3B0aW9u Pic7fQptb250aEh0bWwrPSc8L3NlbGVjdD4nO30KaWYoIXNob3dNb250aEFmdGVy WWVhcikKaHRtbCs9bW9udGhIdG1sKygoc2Vjb25kYXJ5fHxjaGFuZ2VNb250aHx8 Y2hhbmdlWWVhcikmJighKGNoYW5nZU1vbnRoJiZjaGFuZ2VZZWFyKSk/JyYjeGEw Oyc6JycpO2lmKHNlY29uZGFyeXx8IWNoYW5nZVllYXIpCmh0bWwrPSc8c3BhbiBj bGFzcz0idWktZGF0ZXBpY2tlci15ZWFyIj4nK2RyYXdZZWFyKyc8L3NwYW4+Jztl bHNle3ZhciB5ZWFycz10aGlzLl9nZXQoaW5zdCwneWVhclJhbmdlJykuc3BsaXQo JzonKTt2YXIgeWVhcj0wO3ZhciBlbmRZZWFyPTA7aWYoeWVhcnMubGVuZ3RoIT0y KXt5ZWFyPWRyYXdZZWFyLTEwO2VuZFllYXI9ZHJhd1llYXIrMTA7fWVsc2UgaWYo eWVhcnNbMF0uY2hhckF0KDApPT0nKyd8fHllYXJzWzBdLmNoYXJBdCgwKT09Jy0n KXt5ZWFyPWRyYXdZZWFyK3BhcnNlSW50KHllYXJzWzBdLDEwKTtlbmRZZWFyPWRy YXdZZWFyK3BhcnNlSW50KHllYXJzWzFdLDEwKTt9ZWxzZXt5ZWFyPXBhcnNlSW50 KHllYXJzWzBdLDEwKTtlbmRZZWFyPXBhcnNlSW50KHllYXJzWzFdLDEwKTt9Cnll YXI9KG1pbkRhdGU/TWF0aC5tYXgoeWVhcixtaW5EYXRlLmdldEZ1bGxZZWFyKCkp OnllYXIpO2VuZFllYXI9KG1heERhdGU/TWF0aC5taW4oZW5kWWVhcixtYXhEYXRl LmdldEZ1bGxZZWFyKCkpOmVuZFllYXIpO2h0bWwrPSc8c2VsZWN0IGNsYXNzPSJ1 aS1kYXRlcGlja2VyLXllYXIiICcrJ29uY2hhbmdlPSJEUF9qUXVlcnkuZGF0ZXBp Y2tlci5fc2VsZWN0TW9udGhZZWFyKFwnIycraW5zdC5pZCsnXCcsIHRoaXMsIFwn WVwnKTsiICcrJ29uY2xpY2s9IkRQX2pRdWVyeS5kYXRlcGlja2VyLl9jbGlja01v bnRoWWVhcihcJyMnK2luc3QuaWQrJ1wnKTsiJysnPic7Zm9yKDt5ZWFyPD1lbmRZ ZWFyO3llYXIrKyl7aHRtbCs9JzxvcHRpb24gdmFsdWU9IicreWVhcisnIicrCih5 ZWFyPT1kcmF3WWVhcj8nIHNlbGVjdGVkPSJzZWxlY3RlZCInOicnKSsnPicreWVh cisnPC9vcHRpb24+Jzt9Cmh0bWwrPSc8L3NlbGVjdD4nO30KaWYoc2hvd01vbnRo QWZ0ZXJZZWFyKQpodG1sKz0oc2Vjb25kYXJ5fHxjaGFuZ2VNb250aHx8Y2hhbmdl WWVhcj8nJiN4YTA7JzonJykrbW9udGhIdG1sO2h0bWwrPSc8L2Rpdj4nO3JldHVy biBodG1sO30sX2FkanVzdEluc3REYXRlOmZ1bmN0aW9uKGluc3Qsb2Zmc2V0LHBl cmlvZCl7dmFyIHllYXI9aW5zdC5kcmF3WWVhcisocGVyaW9kPT0nWSc/b2Zmc2V0 OjApO3ZhciBtb250aD1pbnN0LmRyYXdNb250aCsocGVyaW9kPT0nTSc/b2Zmc2V0 OjApO3ZhciBkYXk9TWF0aC5taW4oaW5zdC5zZWxlY3RlZERheSx0aGlzLl9nZXRE YXlzSW5Nb250aCh5ZWFyLG1vbnRoKSkrCihwZXJpb2Q9PSdEJz9vZmZzZXQ6MCk7 dmFyIGRhdGU9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoeWVh cixtb250aCxkYXkpKTt2YXIgbWluRGF0ZT10aGlzLl9nZXRNaW5NYXhEYXRlKGlu c3QsJ21pbicsdHJ1ZSk7dmFyIG1heERhdGU9dGhpcy5fZ2V0TWluTWF4RGF0ZShp bnN0LCdtYXgnKTtkYXRlPShtaW5EYXRlJiZkYXRlPG1pbkRhdGU/bWluRGF0ZTpk YXRlKTtkYXRlPShtYXhEYXRlJiZkYXRlPm1heERhdGU/bWF4RGF0ZTpkYXRlKTtp bnN0LnNlbGVjdGVkRGF5PWRhdGUuZ2V0RGF0ZSgpO2luc3QuZHJhd01vbnRoPWlu c3Quc2VsZWN0ZWRNb250aD1kYXRlLmdldE1vbnRoKCk7aW5zdC5kcmF3WWVhcj1p bnN0LnNlbGVjdGVkWWVhcj1kYXRlLmdldEZ1bGxZZWFyKCk7aWYocGVyaW9kPT0n TSd8fHBlcmlvZD09J1knKQp0aGlzLl9ub3RpZnlDaGFuZ2UoaW5zdCk7fSxfbm90 aWZ5Q2hhbmdlOmZ1bmN0aW9uKGluc3Qpe3ZhciBvbkNoYW5nZT10aGlzLl9nZXQo aW5zdCwnb25DaGFuZ2VNb250aFllYXInKTtpZihvbkNoYW5nZSkKb25DaGFuZ2Uu YXBwbHkoKGluc3QuaW5wdXQ/aW5zdC5pbnB1dFswXTpudWxsKSxbaW5zdC5zZWxl Y3RlZFllYXIsaW5zdC5zZWxlY3RlZE1vbnRoKzEsaW5zdF0pO30sX2dldE51bWJl ck9mTW9udGhzOmZ1bmN0aW9uKGluc3Qpe3ZhciBudW1Nb250aHM9dGhpcy5fZ2V0 KGluc3QsJ251bWJlck9mTW9udGhzJyk7cmV0dXJuKG51bU1vbnRocz09bnVsbD9b MSwxXToodHlwZW9mIG51bU1vbnRocz09J251bWJlcic/WzEsbnVtTW9udGhzXTpu dW1Nb250aHMpKTt9LF9nZXRNaW5NYXhEYXRlOmZ1bmN0aW9uKGluc3QsbWluTWF4 LGNoZWNrUmFuZ2Upe3ZhciBkYXRlPXRoaXMuX2RldGVybWluZURhdGUodGhpcy5f Z2V0KGluc3QsbWluTWF4KydEYXRlJyksbnVsbCk7cmV0dXJuKCFjaGVja1Jhbmdl fHwhaW5zdC5yYW5nZVN0YXJ0P2RhdGU6KCFkYXRlfHxpbnN0LnJhbmdlU3RhcnQ+ ZGF0ZT9pbnN0LnJhbmdlU3RhcnQ6ZGF0ZSkpO30sX2dldERheXNJbk1vbnRoOmZ1 bmN0aW9uKHllYXIsbW9udGgpe3JldHVybiAzMi1uZXcgRGF0ZSh5ZWFyLG1vbnRo LDMyKS5nZXREYXRlKCk7fSxfZ2V0Rmlyc3REYXlPZk1vbnRoOmZ1bmN0aW9uKHll YXIsbW9udGgpe3JldHVybiBuZXcgRGF0ZSh5ZWFyLG1vbnRoLDEpLmdldERheSgp O30sX2NhbkFkanVzdE1vbnRoOmZ1bmN0aW9uKGluc3Qsb2Zmc2V0LGN1clllYXIs Y3VyTW9udGgpe3ZhciBudW1Nb250aHM9dGhpcy5fZ2V0TnVtYmVyT2ZNb250aHMo aW5zdCk7dmFyIGRhdGU9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERh dGUoY3VyWWVhcixjdXJNb250aCsob2Zmc2V0PDA/b2Zmc2V0Om51bU1vbnRoc1sx XSksMSkpO2lmKG9mZnNldDwwKQpkYXRlLnNldERhdGUodGhpcy5fZ2V0RGF5c0lu TW9udGgoZGF0ZS5nZXRGdWxsWWVhcigpLGRhdGUuZ2V0TW9udGgoKSkpO3JldHVy biB0aGlzLl9pc0luUmFuZ2UoaW5zdCxkYXRlKTt9LF9pc0luUmFuZ2U6ZnVuY3Rp b24oaW5zdCxkYXRlKXt2YXIgbmV3TWluRGF0ZT0oIWluc3QucmFuZ2VTdGFydD9u dWxsOnRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGluc3Quc2Vs ZWN0ZWRZZWFyLGluc3Quc2VsZWN0ZWRNb250aCxpbnN0LnNlbGVjdGVkRGF5KSkp O25ld01pbkRhdGU9KG5ld01pbkRhdGUmJmluc3QucmFuZ2VTdGFydDxuZXdNaW5E YXRlP2luc3QucmFuZ2VTdGFydDpuZXdNaW5EYXRlKTt2YXIgbWluRGF0ZT1uZXdN aW5EYXRlfHx0aGlzLl9nZXRNaW5NYXhEYXRlKGluc3QsJ21pbicpO3ZhciBtYXhE YXRlPXRoaXMuX2dldE1pbk1heERhdGUoaW5zdCwnbWF4Jyk7cmV0dXJuKCghbWlu RGF0ZXx8ZGF0ZT49bWluRGF0ZSkmJighbWF4RGF0ZXx8ZGF0ZTw9bWF4RGF0ZSkp O30sX2dldEZvcm1hdENvbmZpZzpmdW5jdGlvbihpbnN0KXt2YXIgc2hvcnRZZWFy Q3V0b2ZmPXRoaXMuX2dldChpbnN0LCdzaG9ydFllYXJDdXRvZmYnKTtzaG9ydFll YXJDdXRvZmY9KHR5cGVvZiBzaG9ydFllYXJDdXRvZmYhPSdzdHJpbmcnP3Nob3J0 WWVhckN1dG9mZjpuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCklMTAwK3BhcnNlSW50 KHNob3J0WWVhckN1dG9mZiwxMCkpO3JldHVybntzaG9ydFllYXJDdXRvZmY6c2hv cnRZZWFyQ3V0b2ZmLGRheU5hbWVzU2hvcnQ6dGhpcy5fZ2V0KGluc3QsJ2RheU5h bWVzU2hvcnQnKSxkYXlOYW1lczp0aGlzLl9nZXQoaW5zdCwnZGF5TmFtZXMnKSxt b250aE5hbWVzU2hvcnQ6dGhpcy5fZ2V0KGluc3QsJ21vbnRoTmFtZXNTaG9ydCcp LG1vbnRoTmFtZXM6dGhpcy5fZ2V0KGluc3QsJ21vbnRoTmFtZXMnKX07fSxfZm9y bWF0RGF0ZTpmdW5jdGlvbihpbnN0LGRheSxtb250aCx5ZWFyKXtpZighZGF5KXtp bnN0LmN1cnJlbnREYXk9aW5zdC5zZWxlY3RlZERheTtpbnN0LmN1cnJlbnRNb250 aD1pbnN0LnNlbGVjdGVkTW9udGg7aW5zdC5jdXJyZW50WWVhcj1pbnN0LnNlbGVj dGVkWWVhcjt9CnZhciBkYXRlPShkYXk/KHR5cGVvZiBkYXk9PSdvYmplY3QnP2Rh eTp0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZSh5ZWFyLG1vbnRo LGRheSkpKTp0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShpbnN0 LmN1cnJlbnRZZWFyLGluc3QuY3VycmVudE1vbnRoLGluc3QuY3VycmVudERheSkp KTtyZXR1cm4gdGhpcy5mb3JtYXREYXRlKHRoaXMuX2dldChpbnN0LCdkYXRlRm9y bWF0JyksZGF0ZSx0aGlzLl9nZXRGb3JtYXRDb25maWcoaW5zdCkpO319KTtmdW5j dGlvbiBleHRlbmRSZW1vdmUodGFyZ2V0LHByb3BzKXskLmV4dGVuZCh0YXJnZXQs cHJvcHMpO2Zvcih2YXIgbmFtZSBpbiBwcm9wcykKaWYocHJvcHNbbmFtZV09PW51 bGx8fHByb3BzW25hbWVdPT11bmRlZmluZWQpCnRhcmdldFtuYW1lXT1wcm9wc1tu YW1lXTtyZXR1cm4gdGFyZ2V0O307ZnVuY3Rpb24gaXNBcnJheShhKXtyZXR1cm4o YSYmKCgkLmJyb3dzZXIuc2FmYXJpJiZ0eXBlb2YgYT09J29iamVjdCcmJmEubGVu Z3RoKXx8KGEuY29uc3RydWN0b3ImJmEuY29uc3RydWN0b3IudG9TdHJpbmcoKS5t YXRjaCgvXEFycmF5XChcKS8pKSkpO307JC5mbi5kYXRlcGlja2VyPWZ1bmN0aW9u KG9wdGlvbnMpe2lmKCEkLmRhdGVwaWNrZXIuaW5pdGlhbGl6ZWQpeyQoZG9jdW1l bnQpLm1vdXNlZG93bigkLmRhdGVwaWNrZXIuX2NoZWNrRXh0ZXJuYWxDbGljayku ZmluZCgnYm9keScpLmFwcGVuZCgkLmRhdGVwaWNrZXIuZHBEaXYpOyQuZGF0ZXBp Y2tlci5pbml0aWFsaXplZD10cnVlO30KdmFyIG90aGVyQXJncz1BcnJheS5wcm90 b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7aWYodHlwZW9mIG9wdGlvbnM9 PSdzdHJpbmcnJiYob3B0aW9ucz09J2lzRGlzYWJsZWQnfHxvcHRpb25zPT0nZ2V0 RGF0ZScpKQpyZXR1cm4gJC5kYXRlcGlja2VyWydfJytvcHRpb25zKydEYXRlcGlj a2VyJ10uYXBwbHkoJC5kYXRlcGlja2VyLFt0aGlzWzBdXS5jb25jYXQob3RoZXJB cmdzKSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3R5cGVvZiBvcHRpb25z PT0nc3RyaW5nJz8kLmRhdGVwaWNrZXJbJ18nK29wdGlvbnMrJ0RhdGVwaWNrZXIn XS5hcHBseSgkLmRhdGVwaWNrZXIsW3RoaXNdLmNvbmNhdChvdGhlckFyZ3MpKTok LmRhdGVwaWNrZXIuX2F0dGFjaERhdGVwaWNrZXIodGhpcyxvcHRpb25zKTt9KTt9 OyQuZGF0ZXBpY2tlcj1uZXcgRGF0ZXBpY2tlcigpOyQuZGF0ZXBpY2tlci5pbml0 aWFsaXplZD1mYWxzZTskLmRhdGVwaWNrZXIudXVpZD1uZXcgRGF0ZSgpLmdldFRp bWUoKTskLmRhdGVwaWNrZXIudmVyc2lvbj0iMS43LjEiO3dpbmRvdy5EUF9qUXVl cnk9JDt9KShqUXVlcnkpOyhmdW5jdGlvbigkKXt2YXIgc2V0RGF0YVN3aXRjaD17 ZHJhZ1N0YXJ0OiJzdGFydC5kcmFnZ2FibGUiLGRyYWc6ImRyYWcuZHJhZ2dhYmxl IixkcmFnU3RvcDoic3RvcC5kcmFnZ2FibGUiLG1heEhlaWdodDoibWF4SGVpZ2h0 LnJlc2l6YWJsZSIsbWluSGVpZ2h0OiJtaW5IZWlnaHQucmVzaXphYmxlIixtYXhX aWR0aDoibWF4V2lkdGgucmVzaXphYmxlIixtaW5XaWR0aDoibWluV2lkdGgucmVz aXphYmxlIixyZXNpemVTdGFydDoic3RhcnQucmVzaXphYmxlIixyZXNpemU6ImRy YWcucmVzaXphYmxlIixyZXNpemVTdG9wOiJzdG9wLnJlc2l6YWJsZSJ9LHVpRGlh bG9nQ2xhc3Nlcz0ndWktZGlhbG9nICcrJ3VpLXdpZGdldCAnKyd1aS13aWRnZXQt Y29udGVudCAnKyd1aS1jb3JuZXItYWxsICc7JC53aWRnZXQoInVpLmRpYWxvZyIs e19pbml0OmZ1bmN0aW9uKCl7dGhpcy5vcmlnaW5hbFRpdGxlPXRoaXMuZWxlbWVu dC5hdHRyKCd0aXRsZScpO3ZhciBzZWxmPXRoaXMsb3B0aW9ucz10aGlzLm9wdGlv bnMsdGl0bGU9b3B0aW9ucy50aXRsZXx8dGhpcy5vcmlnaW5hbFRpdGxlfHwnJm5i c3A7Jyx0aXRsZUlkPSQudWkuZGlhbG9nLmdldFRpdGxlSWQodGhpcy5lbGVtZW50 KSx1aURpYWxvZz0odGhpcy51aURpYWxvZz0kKCc8ZGl2Lz4nKSkuYXBwZW5kVG8o ZG9jdW1lbnQuYm9keSkuaGlkZSgpLmFkZENsYXNzKHVpRGlhbG9nQ2xhc3Nlcytv cHRpb25zLmRpYWxvZ0NsYXNzKS5jc3Moe3Bvc2l0aW9uOidhYnNvbHV0ZScsb3Zl cmZsb3c6J2hpZGRlbicsekluZGV4Om9wdGlvbnMuekluZGV4fSkuYXR0cigndGFi SW5kZXgnLC0xKS5jc3MoJ291dGxpbmUnLDApLmtleWRvd24oZnVuY3Rpb24oZXZl bnQpeyhvcHRpb25zLmNsb3NlT25Fc2NhcGUmJmV2ZW50LmtleUNvZGUmJmV2ZW50 LmtleUNvZGU9PSQudWkua2V5Q29kZS5FU0NBUEUmJnNlbGYuY2xvc2UoZXZlbnQp KTt9KS5hdHRyKHtyb2xlOidkaWFsb2cnLCdhcmlhLWxhYmVsbGVkYnknOnRpdGxl SWR9KS5tb3VzZWRvd24oZnVuY3Rpb24oZXZlbnQpe3NlbGYubW92ZVRvVG9wKGZh bHNlLGV2ZW50KTt9KSx1aURpYWxvZ0NvbnRlbnQ9dGhpcy5lbGVtZW50LnNob3co KS5yZW1vdmVBdHRyKCd0aXRsZScpLmFkZENsYXNzKCd1aS1kaWFsb2ctY29udGVu dCAnKyd1aS13aWRnZXQtY29udGVudCcpLmFwcGVuZFRvKHVpRGlhbG9nKSx1aURp YWxvZ1RpdGxlYmFyPSh0aGlzLnVpRGlhbG9nVGl0bGViYXI9JCgnPGRpdj48L2Rp dj4nKSkuYWRkQ2xhc3MoJ3VpLWRpYWxvZy10aXRsZWJhciAnKyd1aS13aWRnZXQt aGVhZGVyICcrJ3VpLWNvcm5lci1hbGwgJysndWktaGVscGVyLWNsZWFyZml4Jyku cHJlcGVuZFRvKHVpRGlhbG9nKSx1aURpYWxvZ1RpdGxlYmFyQ2xvc2U9JCgnPGEg aHJlZj0iIyIvPicpLmFkZENsYXNzKCd1aS1kaWFsb2ctdGl0bGViYXItY2xvc2Ug JysndWktY29ybmVyLWFsbCcpLmF0dHIoJ3JvbGUnLCdidXR0b24nKS5ob3Zlcihm dW5jdGlvbigpe3VpRGlhbG9nVGl0bGViYXJDbG9zZS5hZGRDbGFzcygndWktc3Rh dGUtaG92ZXInKTt9LGZ1bmN0aW9uKCl7dWlEaWFsb2dUaXRsZWJhckNsb3NlLnJl bW92ZUNsYXNzKCd1aS1zdGF0ZS1ob3ZlcicpO30pLmZvY3VzKGZ1bmN0aW9uKCl7 dWlEaWFsb2dUaXRsZWJhckNsb3NlLmFkZENsYXNzKCd1aS1zdGF0ZS1mb2N1cycp O30pLmJsdXIoZnVuY3Rpb24oKXt1aURpYWxvZ1RpdGxlYmFyQ2xvc2UucmVtb3Zl Q2xhc3MoJ3VpLXN0YXRlLWZvY3VzJyk7fSkubW91c2Vkb3duKGZ1bmN0aW9uKGV2 KXtldi5zdG9wUHJvcGFnYXRpb24oKTt9KS5jbGljayhmdW5jdGlvbihldmVudCl7 c2VsZi5jbG9zZShldmVudCk7cmV0dXJuIGZhbHNlO30pLmFwcGVuZFRvKHVpRGlh bG9nVGl0bGViYXIpLHVpRGlhbG9nVGl0bGViYXJDbG9zZVRleHQ9KHRoaXMudWlE aWFsb2dUaXRsZWJhckNsb3NlVGV4dD0kKCc8c3Bhbi8+JykpLmFkZENsYXNzKCd1 aS1pY29uICcrJ3VpLWljb24tY2xvc2V0aGljaycpLnRleHQob3B0aW9ucy5jbG9z ZVRleHQpLmFwcGVuZFRvKHVpRGlhbG9nVGl0bGViYXJDbG9zZSksdWlEaWFsb2dU aXRsZT0kKCc8c3Bhbi8+JykuYWRkQ2xhc3MoJ3VpLWRpYWxvZy10aXRsZScpLmF0 dHIoJ2lkJyx0aXRsZUlkKS5odG1sKHRpdGxlKS5wcmVwZW5kVG8odWlEaWFsb2dU aXRsZWJhcik7dWlEaWFsb2dUaXRsZWJhci5maW5kKCIqIikuYWRkKHVpRGlhbG9n VGl0bGViYXIpLmRpc2FibGVTZWxlY3Rpb24oKTsob3B0aW9ucy5kcmFnZ2FibGUm JiQuZm4uZHJhZ2dhYmxlJiZ0aGlzLl9tYWtlRHJhZ2dhYmxlKCkpOyhvcHRpb25z LnJlc2l6YWJsZSYmJC5mbi5yZXNpemFibGUmJnRoaXMuX21ha2VSZXNpemFibGUo KSk7dGhpcy5fY3JlYXRlQnV0dG9ucyhvcHRpb25zLmJ1dHRvbnMpO3RoaXMuX2lz T3Blbj1mYWxzZTsob3B0aW9ucy5iZ2lmcmFtZSYmJC5mbi5iZ2lmcmFtZSYmdWlE aWFsb2cuYmdpZnJhbWUoKSk7KG9wdGlvbnMuYXV0b09wZW4mJnRoaXMub3Blbigp KTt9LGRlc3Ryb3k6ZnVuY3Rpb24oKXsodGhpcy5vdmVybGF5JiZ0aGlzLm92ZXJs YXkuZGVzdHJveSgpKTt0aGlzLnVpRGlhbG9nLmhpZGUoKTt0aGlzLmVsZW1lbnQu dW5iaW5kKCcuZGlhbG9nJykucmVtb3ZlRGF0YSgnZGlhbG9nJykucmVtb3ZlQ2xh c3MoJ3VpLWRpYWxvZy1jb250ZW50IHVpLXdpZGdldC1jb250ZW50JykuaGlkZSgp LmFwcGVuZFRvKCdib2R5Jyk7dGhpcy51aURpYWxvZy5yZW1vdmUoKTsodGhpcy5v cmlnaW5hbFRpdGxlJiZ0aGlzLmVsZW1lbnQuYXR0cigndGl0bGUnLHRoaXMub3Jp Z2luYWxUaXRsZSkpO30sY2xvc2U6ZnVuY3Rpb24oZXZlbnQpe3ZhciBzZWxmPXRo aXM7aWYoZmFsc2U9PT1zZWxmLl90cmlnZ2VyKCdiZWZvcmVjbG9zZScsZXZlbnQp KXtyZXR1cm47fQooc2VsZi5vdmVybGF5JiZzZWxmLm92ZXJsYXkuZGVzdHJveSgp KTtzZWxmLnVpRGlhbG9nLnVuYmluZCgna2V5cHJlc3MudWktZGlhbG9nJyk7KHNl bGYub3B0aW9ucy5oaWRlP3NlbGYudWlEaWFsb2cuaGlkZShzZWxmLm9wdGlvbnMu aGlkZSxmdW5jdGlvbigpe3NlbGYuX3RyaWdnZXIoJ2Nsb3NlJyxldmVudCk7fSk6 c2VsZi51aURpYWxvZy5oaWRlKCkmJnNlbGYuX3RyaWdnZXIoJ2Nsb3NlJyxldmVu dCkpOyQudWkuZGlhbG9nLm92ZXJsYXkucmVzaXplKCk7c2VsZi5faXNPcGVuPWZh bHNlO30saXNPcGVuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzT3Blbjt9LG1v dmVUb1RvcDpmdW5jdGlvbihmb3JjZSxldmVudCl7aWYoKHRoaXMub3B0aW9ucy5t b2RhbCYmIWZvcmNlKXx8KCF0aGlzLm9wdGlvbnMuc3RhY2smJiF0aGlzLm9wdGlv bnMubW9kYWwpKXtyZXR1cm4gdGhpcy5fdHJpZ2dlcignZm9jdXMnLGV2ZW50KTt9 CmlmKHRoaXMub3B0aW9ucy56SW5kZXg+JC51aS5kaWFsb2cubWF4Wil7JC51aS5k aWFsb2cubWF4Wj10aGlzLm9wdGlvbnMuekluZGV4O30KKHRoaXMub3ZlcmxheSYm dGhpcy5vdmVybGF5LiRlbC5jc3MoJ3otaW5kZXgnLCQudWkuZGlhbG9nLm92ZXJs YXkubWF4Wj0rKyQudWkuZGlhbG9nLm1heFopKTt2YXIgc2F2ZVNjcm9sbD17c2Ny b2xsVG9wOnRoaXMuZWxlbWVudC5hdHRyKCdzY3JvbGxUb3AnKSxzY3JvbGxMZWZ0 OnRoaXMuZWxlbWVudC5hdHRyKCdzY3JvbGxMZWZ0Jyl9O3RoaXMudWlEaWFsb2cu Y3NzKCd6LWluZGV4JywrKyQudWkuZGlhbG9nLm1heFopO3RoaXMuZWxlbWVudC5h dHRyKHNhdmVTY3JvbGwpO3RoaXMuX3RyaWdnZXIoJ2ZvY3VzJyxldmVudCk7fSxv cGVuOmZ1bmN0aW9uKCl7aWYodGhpcy5faXNPcGVuKXtyZXR1cm47fQp2YXIgb3B0 aW9ucz10aGlzLm9wdGlvbnMsdWlEaWFsb2c9dGhpcy51aURpYWxvZzt0aGlzLm92 ZXJsYXk9b3B0aW9ucy5tb2RhbD9uZXcgJC51aS5kaWFsb2cub3ZlcmxheSh0aGlz KTpudWxsOyh1aURpYWxvZy5uZXh0KCkubGVuZ3RoJiZ1aURpYWxvZy5hcHBlbmRU bygnYm9keScpKTt0aGlzLl9zaXplKCk7dGhpcy5fcG9zaXRpb24ob3B0aW9ucy5w b3NpdGlvbik7dWlEaWFsb2cuc2hvdyhvcHRpb25zLnNob3cpO3RoaXMubW92ZVRv VG9wKHRydWUpOyhvcHRpb25zLm1vZGFsJiZ1aURpYWxvZy5iaW5kKCdrZXlwcmVz cy51aS1kaWFsb2cnLGZ1bmN0aW9uKGV2ZW50KXtpZihldmVudC5rZXlDb2RlIT0k LnVpLmtleUNvZGUuVEFCKXtyZXR1cm47fQp2YXIgdGFiYmFibGVzPSQoJzp0YWJi YWJsZScsdGhpcyksZmlyc3Q9dGFiYmFibGVzLmZpbHRlcignOmZpcnN0JylbMF0s bGFzdD10YWJiYWJsZXMuZmlsdGVyKCc6bGFzdCcpWzBdO2lmKGV2ZW50LnRhcmdl dD09bGFzdCYmIWV2ZW50LnNoaWZ0S2V5KXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7 Zmlyc3QuZm9jdXMoKTt9LDEpO31lbHNlIGlmKGV2ZW50LnRhcmdldD09Zmlyc3Qm JmV2ZW50LnNoaWZ0S2V5KXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bGFzdC5mb2N1 cygpO30sMSk7fX0pKTskKFtdKS5hZGQodWlEaWFsb2cuZmluZCgnLnVpLWRpYWxv Zy1jb250ZW50IDp0YWJiYWJsZTpmaXJzdCcpKS5hZGQodWlEaWFsb2cuZmluZCgn LnVpLWRpYWxvZy1idXR0b25wYW5lIDp0YWJiYWJsZTpmaXJzdCcpKS5hZGQodWlE aWFsb2cpLmZpbHRlcignOmZpcnN0JykuZm9jdXMoKTt0aGlzLl90cmlnZ2VyKCdv cGVuJyk7dGhpcy5faXNPcGVuPXRydWU7fSxfY3JlYXRlQnV0dG9uczpmdW5jdGlv bihidXR0b25zKXt2YXIgc2VsZj10aGlzLGhhc0J1dHRvbnM9ZmFsc2UsdWlEaWFs b2dCdXR0b25QYW5lPSQoJzxkaXY+PC9kaXY+JykuYWRkQ2xhc3MoJ3VpLWRpYWxv Zy1idXR0b25wYW5lICcrJ3VpLXdpZGdldC1jb250ZW50ICcrJ3VpLWhlbHBlci1j bGVhcmZpeCcpO3RoaXMudWlEaWFsb2cuZmluZCgnLnVpLWRpYWxvZy1idXR0b25w YW5lJykucmVtb3ZlKCk7KHR5cGVvZiBidXR0b25zPT0nb2JqZWN0JyYmYnV0dG9u cyE9PW51bGwmJiQuZWFjaChidXR0b25zLGZ1bmN0aW9uKCl7cmV0dXJuIShoYXNC dXR0b25zPXRydWUpO30pKTtpZihoYXNCdXR0b25zKXskLmVhY2goYnV0dG9ucyxm dW5jdGlvbihuYW1lLGZuKXskKCc8YnV0dG9uIHR5cGU9ImJ1dHRvbiI+PC9idXR0 b24+JykuYWRkQ2xhc3MoJ3VpLXN0YXRlLWRlZmF1bHQgJysndWktY29ybmVyLWFs bCcpLnRleHQobmFtZSkuY2xpY2soZnVuY3Rpb24oKXtmbi5hcHBseShzZWxmLmVs ZW1lbnRbMF0sYXJndW1lbnRzKTt9KS5ob3ZlcihmdW5jdGlvbigpeyQodGhpcyku YWRkQ2xhc3MoJ3VpLXN0YXRlLWhvdmVyJyk7fSxmdW5jdGlvbigpeyQodGhpcyku cmVtb3ZlQ2xhc3MoJ3VpLXN0YXRlLWhvdmVyJyk7fSkuZm9jdXMoZnVuY3Rpb24o KXskKHRoaXMpLmFkZENsYXNzKCd1aS1zdGF0ZS1mb2N1cycpO30pLmJsdXIoZnVu Y3Rpb24oKXskKHRoaXMpLnJlbW92ZUNsYXNzKCd1aS1zdGF0ZS1mb2N1cycpO30p LmFwcGVuZFRvKHVpRGlhbG9nQnV0dG9uUGFuZSk7fSk7dWlEaWFsb2dCdXR0b25Q YW5lLmFwcGVuZFRvKHRoaXMudWlEaWFsb2cpO319LF9tYWtlRHJhZ2dhYmxlOmZ1 bmN0aW9uKCl7dmFyIHNlbGY9dGhpcyxvcHRpb25zPXRoaXMub3B0aW9ucyxoZWln aHRCZWZvcmVEcmFnO3RoaXMudWlEaWFsb2cuZHJhZ2dhYmxlKHtjYW5jZWw6Jy51 aS1kaWFsb2ctY29udGVudCcsaGFuZGxlOicudWktZGlhbG9nLXRpdGxlYmFyJyxj b250YWlubWVudDonZG9jdW1lbnQnLHN0YXJ0OmZ1bmN0aW9uKCl7aGVpZ2h0QmVm b3JlRHJhZz1vcHRpb25zLmhlaWdodDskKHRoaXMpLmhlaWdodCgkKHRoaXMpLmhl aWdodCgpKS5hZGRDbGFzcygidWktZGlhbG9nLWRyYWdnaW5nIik7KG9wdGlvbnMu ZHJhZ1N0YXJ0JiZvcHRpb25zLmRyYWdTdGFydC5hcHBseShzZWxmLmVsZW1lbnRb MF0sYXJndW1lbnRzKSk7fSxkcmFnOmZ1bmN0aW9uKCl7KG9wdGlvbnMuZHJhZyYm b3B0aW9ucy5kcmFnLmFwcGx5KHNlbGYuZWxlbWVudFswXSxhcmd1bWVudHMpKTt9 LHN0b3A6ZnVuY3Rpb24oKXskKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1kaWFsb2ct ZHJhZ2dpbmciKS5oZWlnaHQoaGVpZ2h0QmVmb3JlRHJhZyk7KG9wdGlvbnMuZHJh Z1N0b3AmJm9wdGlvbnMuZHJhZ1N0b3AuYXBwbHkoc2VsZi5lbGVtZW50WzBdLGFy Z3VtZW50cykpOyQudWkuZGlhbG9nLm92ZXJsYXkucmVzaXplKCk7fX0pO30sX21h a2VSZXNpemFibGU6ZnVuY3Rpb24oaGFuZGxlcyl7aGFuZGxlcz0oaGFuZGxlcz09 PXVuZGVmaW5lZD90aGlzLm9wdGlvbnMucmVzaXphYmxlOmhhbmRsZXMpO3ZhciBz ZWxmPXRoaXMsb3B0aW9ucz10aGlzLm9wdGlvbnMscmVzaXplSGFuZGxlcz10eXBl b2YgaGFuZGxlcz09J3N0cmluZyc/aGFuZGxlczonbixlLHMsdyxzZSxzdyxuZSxu dyc7dGhpcy51aURpYWxvZy5yZXNpemFibGUoe2NhbmNlbDonLnVpLWRpYWxvZy1j b250ZW50JyxhbHNvUmVzaXplOnRoaXMuZWxlbWVudCxtYXhXaWR0aDpvcHRpb25z Lm1heFdpZHRoLG1heEhlaWdodDpvcHRpb25zLm1heEhlaWdodCxtaW5XaWR0aDpv cHRpb25zLm1pbldpZHRoLG1pbkhlaWdodDpvcHRpb25zLm1pbkhlaWdodCxzdGFy dDpmdW5jdGlvbigpeyQodGhpcykuYWRkQ2xhc3MoInVpLWRpYWxvZy1yZXNpemlu ZyIpOyhvcHRpb25zLnJlc2l6ZVN0YXJ0JiZvcHRpb25zLnJlc2l6ZVN0YXJ0LmFw cGx5KHNlbGYuZWxlbWVudFswXSxhcmd1bWVudHMpKTt9LHJlc2l6ZTpmdW5jdGlv bigpeyhvcHRpb25zLnJlc2l6ZSYmb3B0aW9ucy5yZXNpemUuYXBwbHkoc2VsZi5l bGVtZW50WzBdLGFyZ3VtZW50cykpO30saGFuZGxlczpyZXNpemVIYW5kbGVzLHN0 b3A6ZnVuY3Rpb24oKXskKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1kaWFsb2ctcmVz aXppbmciKTtvcHRpb25zLmhlaWdodD0kKHRoaXMpLmhlaWdodCgpO29wdGlvbnMu d2lkdGg9JCh0aGlzKS53aWR0aCgpOyhvcHRpb25zLnJlc2l6ZVN0b3AmJm9wdGlv bnMucmVzaXplU3RvcC5hcHBseShzZWxmLmVsZW1lbnRbMF0sYXJndW1lbnRzKSk7 JC51aS5kaWFsb2cub3ZlcmxheS5yZXNpemUoKTt9fSkuZmluZCgnLnVpLXJlc2l6 YWJsZS1zZScpLmFkZENsYXNzKCd1aS1pY29uIHVpLWljb24tZ3JpcC1kaWFnb25h bC1zZScpO30sX3Bvc2l0aW9uOmZ1bmN0aW9uKHBvcyl7dmFyIHduZD0kKHdpbmRv dyksZG9jPSQoZG9jdW1lbnQpLHBUb3A9ZG9jLnNjcm9sbFRvcCgpLHBMZWZ0PWRv Yy5zY3JvbGxMZWZ0KCksbWluVG9wPXBUb3A7aWYoJC5pbkFycmF5KHBvcyxbJ2Nl bnRlcicsJ3RvcCcsJ3JpZ2h0JywnYm90dG9tJywnbGVmdCddKT49MCl7cG9zPVtw b3M9PSdyaWdodCd8fHBvcz09J2xlZnQnP3BvczonY2VudGVyJyxwb3M9PSd0b3An fHxwb3M9PSdib3R0b20nP3BvczonbWlkZGxlJ107fQppZihwb3MuY29uc3RydWN0 b3IhPUFycmF5KXtwb3M9WydjZW50ZXInLCdtaWRkbGUnXTt9CmlmKHBvc1swXS5j b25zdHJ1Y3Rvcj09TnVtYmVyKXtwTGVmdCs9cG9zWzBdO31lbHNle3N3aXRjaChw b3NbMF0pe2Nhc2UnbGVmdCc6cExlZnQrPTA7YnJlYWs7Y2FzZSdyaWdodCc6cExl ZnQrPXduZC53aWR0aCgpLXRoaXMudWlEaWFsb2cub3V0ZXJXaWR0aCgpO2JyZWFr O2RlZmF1bHQ6Y2FzZSdjZW50ZXInOnBMZWZ0Kz0od25kLndpZHRoKCktdGhpcy51 aURpYWxvZy5vdXRlcldpZHRoKCkpLzI7fX0KaWYocG9zWzFdLmNvbnN0cnVjdG9y PT1OdW1iZXIpe3BUb3ArPXBvc1sxXTt9ZWxzZXtzd2l0Y2gocG9zWzFdKXtjYXNl J3RvcCc6cFRvcCs9MDticmVhaztjYXNlJ2JvdHRvbSc6cFRvcCs9d25kLmhlaWdo dCgpLXRoaXMudWlEaWFsb2cub3V0ZXJIZWlnaHQoKTticmVhaztkZWZhdWx0OmNh c2UnbWlkZGxlJzpwVG9wKz0od25kLmhlaWdodCgpLXRoaXMudWlEaWFsb2cub3V0 ZXJIZWlnaHQoKSkvMjt9fQpwVG9wPU1hdGgubWF4KHBUb3AsbWluVG9wKTt0aGlz LnVpRGlhbG9nLmNzcyh7dG9wOnBUb3AsbGVmdDpwTGVmdH0pO30sX3NldERhdGE6 ZnVuY3Rpb24oa2V5LHZhbHVlKXsoc2V0RGF0YVN3aXRjaFtrZXldJiZ0aGlzLnVp RGlhbG9nLmRhdGEoc2V0RGF0YVN3aXRjaFtrZXldLHZhbHVlKSk7c3dpdGNoKGtl eSl7Y2FzZSJidXR0b25zIjp0aGlzLl9jcmVhdGVCdXR0b25zKHZhbHVlKTticmVh aztjYXNlImNsb3NlVGV4dCI6dGhpcy51aURpYWxvZ1RpdGxlYmFyQ2xvc2VUZXh0 LnRleHQodmFsdWUpO2JyZWFrO2Nhc2UiZGlhbG9nQ2xhc3MiOnRoaXMudWlEaWFs b2cucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmRpYWxvZ0NsYXNzKS5hZGRDbGFz cyh1aURpYWxvZ0NsYXNzZXMrdmFsdWUpO2JyZWFrO2Nhc2UiZHJhZ2dhYmxlIjoo dmFsdWU/dGhpcy5fbWFrZURyYWdnYWJsZSgpOnRoaXMudWlEaWFsb2cuZHJhZ2dh YmxlKCdkZXN0cm95JykpO2JyZWFrO2Nhc2UiaGVpZ2h0Ijp0aGlzLnVpRGlhbG9n LmhlaWdodCh2YWx1ZSk7YnJlYWs7Y2FzZSJwb3NpdGlvbiI6dGhpcy5fcG9zaXRp b24odmFsdWUpO2JyZWFrO2Nhc2UicmVzaXphYmxlIjp2YXIgdWlEaWFsb2c9dGhp cy51aURpYWxvZyxpc1Jlc2l6YWJsZT10aGlzLnVpRGlhbG9nLmlzKCc6ZGF0YShy ZXNpemFibGUpJyk7KGlzUmVzaXphYmxlJiYhdmFsdWUmJnVpRGlhbG9nLnJlc2l6 YWJsZSgnZGVzdHJveScpKTsoaXNSZXNpemFibGUmJnR5cGVvZiB2YWx1ZT09J3N0 cmluZycmJnVpRGlhbG9nLnJlc2l6YWJsZSgnb3B0aW9uJywnaGFuZGxlcycsdmFs dWUpKTsoaXNSZXNpemFibGV8fHRoaXMuX21ha2VSZXNpemFibGUodmFsdWUpKTti cmVhaztjYXNlInRpdGxlIjokKCIudWktZGlhbG9nLXRpdGxlIix0aGlzLnVpRGlh bG9nVGl0bGViYXIpLmh0bWwodmFsdWV8fCcmbmJzcDsnKTticmVhaztjYXNlIndp ZHRoIjp0aGlzLnVpRGlhbG9nLndpZHRoKHZhbHVlKTticmVhazt9CiQud2lkZ2V0 LnByb3RvdHlwZS5fc2V0RGF0YS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7fSxfc2l6 ZTpmdW5jdGlvbigpe3ZhciBvcHRpb25zPXRoaXMub3B0aW9uczt0aGlzLmVsZW1l bnQuY3NzKHtoZWlnaHQ6MCxtaW5IZWlnaHQ6MCx3aWR0aDonYXV0byd9KTt2YXIg bm9uQ29udGVudEhlaWdodD10aGlzLnVpRGlhbG9nLmNzcyh7aGVpZ2h0OidhdXRv Jyx3aWR0aDpvcHRpb25zLndpZHRofSkuaGVpZ2h0KCk7dGhpcy5lbGVtZW50LmNz cyh7bWluSGVpZ2h0Ok1hdGgubWF4KG9wdGlvbnMubWluSGVpZ2h0LW5vbkNvbnRl bnRIZWlnaHQsMCksaGVpZ2h0Om9wdGlvbnMuaGVpZ2h0PT0nYXV0byc/J2F1dG8n Ok1hdGgubWF4KG9wdGlvbnMuaGVpZ2h0LW5vbkNvbnRlbnRIZWlnaHQsMCl9KTt9 fSk7JC5leHRlbmQoJC51aS5kaWFsb2cse3ZlcnNpb246IjEuNy4xIixkZWZhdWx0 czp7YXV0b09wZW46dHJ1ZSxiZ2lmcmFtZTpmYWxzZSxidXR0b25zOnt9LGNsb3Nl T25Fc2NhcGU6dHJ1ZSxjbG9zZVRleHQ6J2Nsb3NlJyxkaWFsb2dDbGFzczonJyxk cmFnZ2FibGU6dHJ1ZSxoaWRlOm51bGwsaGVpZ2h0OidhdXRvJyxtYXhIZWlnaHQ6 ZmFsc2UsbWF4V2lkdGg6ZmFsc2UsbWluSGVpZ2h0OjE1MCxtaW5XaWR0aDoxNTAs bW9kYWw6ZmFsc2UscG9zaXRpb246J2NlbnRlcicscmVzaXphYmxlOnRydWUsc2hv dzpudWxsLHN0YWNrOnRydWUsdGl0bGU6Jycsd2lkdGg6MzAwLHpJbmRleDoxMDAw fSxnZXR0ZXI6J2lzT3BlbicsdXVpZDowLG1heFo6MCxnZXRUaXRsZUlkOmZ1bmN0 aW9uKCRlbCl7cmV0dXJuJ3VpLWRpYWxvZy10aXRsZS0nKygkZWwuYXR0cignaWQn KXx8Kyt0aGlzLnV1aWQpO30sb3ZlcmxheTpmdW5jdGlvbihkaWFsb2cpe3RoaXMu JGVsPSQudWkuZGlhbG9nLm92ZXJsYXkuY3JlYXRlKGRpYWxvZyk7fX0pOyQuZXh0 ZW5kKCQudWkuZGlhbG9nLm92ZXJsYXkse2luc3RhbmNlczpbXSxtYXhaOjAsZXZl bnRzOiQubWFwKCdmb2N1cyxtb3VzZWRvd24sbW91c2V1cCxrZXlkb3duLGtleXBy ZXNzLGNsaWNrJy5zcGxpdCgnLCcpLGZ1bmN0aW9uKGV2ZW50KXtyZXR1cm4gZXZl bnQrJy5kaWFsb2ctb3ZlcmxheSc7fSkuam9pbignICcpLGNyZWF0ZTpmdW5jdGlv bihkaWFsb2cpe2lmKHRoaXMuaW5zdGFuY2VzLmxlbmd0aD09PTApe3NldFRpbWVv dXQoZnVuY3Rpb24oKXskKGRvY3VtZW50KS5iaW5kKCQudWkuZGlhbG9nLm92ZXJs YXkuZXZlbnRzLGZ1bmN0aW9uKGV2ZW50KXt2YXIgZGlhbG9nWj0kKGV2ZW50LnRh cmdldCkucGFyZW50cygnLnVpLWRpYWxvZycpLmNzcygnekluZGV4Jyl8fDA7cmV0 dXJuKGRpYWxvZ1o+JC51aS5kaWFsb2cub3ZlcmxheS5tYXhaKTt9KTt9LDEpOyQo ZG9jdW1lbnQpLmJpbmQoJ2tleWRvd24uZGlhbG9nLW92ZXJsYXknLGZ1bmN0aW9u KGV2ZW50KXsoZGlhbG9nLm9wdGlvbnMuY2xvc2VPbkVzY2FwZSYmZXZlbnQua2V5 Q29kZSYmZXZlbnQua2V5Q29kZT09JC51aS5rZXlDb2RlLkVTQ0FQRSYmZGlhbG9n LmNsb3NlKGV2ZW50KSk7fSk7JCh3aW5kb3cpLmJpbmQoJ3Jlc2l6ZS5kaWFsb2ct b3ZlcmxheScsJC51aS5kaWFsb2cub3ZlcmxheS5yZXNpemUpO30KdmFyICRlbD0k KCc8ZGl2PjwvZGl2PicpLmFwcGVuZFRvKGRvY3VtZW50LmJvZHkpLmFkZENsYXNz KCd1aS13aWRnZXQtb3ZlcmxheScpLmNzcyh7d2lkdGg6dGhpcy53aWR0aCgpLGhl aWdodDp0aGlzLmhlaWdodCgpfSk7KGRpYWxvZy5vcHRpb25zLmJnaWZyYW1lJiYk LmZuLmJnaWZyYW1lJiYkZWwuYmdpZnJhbWUoKSk7dGhpcy5pbnN0YW5jZXMucHVz aCgkZWwpO3JldHVybiAkZWw7fSxkZXN0cm95OmZ1bmN0aW9uKCRlbCl7dGhpcy5p bnN0YW5jZXMuc3BsaWNlKCQuaW5BcnJheSh0aGlzLmluc3RhbmNlcywkZWwpLDEp O2lmKHRoaXMuaW5zdGFuY2VzLmxlbmd0aD09PTApeyQoW2RvY3VtZW50LHdpbmRv d10pLnVuYmluZCgnLmRpYWxvZy1vdmVybGF5Jyk7fQokZWwucmVtb3ZlKCk7fSxo ZWlnaHQ6ZnVuY3Rpb24oKXtpZigkLmJyb3dzZXIubXNpZSYmJC5icm93c2VyLnZl cnNpb248Nyl7dmFyIHNjcm9sbEhlaWdodD1NYXRoLm1heChkb2N1bWVudC5kb2N1 bWVudEVsZW1lbnQuc2Nyb2xsSGVpZ2h0LGRvY3VtZW50LmJvZHkuc2Nyb2xsSGVp Z2h0KTt2YXIgb2Zmc2V0SGVpZ2h0PU1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50 RWxlbWVudC5vZmZzZXRIZWlnaHQsZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQp O2lmKHNjcm9sbEhlaWdodDxvZmZzZXRIZWlnaHQpe3JldHVybiAkKHdpbmRvdyku aGVpZ2h0KCkrJ3B4Jzt9ZWxzZXtyZXR1cm4gc2Nyb2xsSGVpZ2h0KydweCc7fX1l bHNle3JldHVybiAkKGRvY3VtZW50KS5oZWlnaHQoKSsncHgnO319LHdpZHRoOmZ1 bmN0aW9uKCl7aWYoJC5icm93c2VyLm1zaWUmJiQuYnJvd3Nlci52ZXJzaW9uPDcp e3ZhciBzY3JvbGxXaWR0aD1NYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1l bnQuc2Nyb2xsV2lkdGgsZG9jdW1lbnQuYm9keS5zY3JvbGxXaWR0aCk7dmFyIG9m ZnNldFdpZHRoPU1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vZmZz ZXRXaWR0aCxkb2N1bWVudC5ib2R5Lm9mZnNldFdpZHRoKTtpZihzY3JvbGxXaWR0 aDxvZmZzZXRXaWR0aCl7cmV0dXJuICQod2luZG93KS53aWR0aCgpKydweCc7fWVs c2V7cmV0dXJuIHNjcm9sbFdpZHRoKydweCc7fX1lbHNle3JldHVybiAkKGRvY3Vt ZW50KS53aWR0aCgpKydweCc7fX0scmVzaXplOmZ1bmN0aW9uKCl7dmFyICRvdmVy bGF5cz0kKFtdKTskLmVhY2goJC51aS5kaWFsb2cub3ZlcmxheS5pbnN0YW5jZXMs ZnVuY3Rpb24oKXskb3ZlcmxheXM9JG92ZXJsYXlzLmFkZCh0aGlzKTt9KTskb3Zl cmxheXMuY3NzKHt3aWR0aDowLGhlaWdodDowfSkuY3NzKHt3aWR0aDokLnVpLmRp YWxvZy5vdmVybGF5LndpZHRoKCksaGVpZ2h0OiQudWkuZGlhbG9nLm92ZXJsYXku aGVpZ2h0KCl9KTt9fSk7JC5leHRlbmQoJC51aS5kaWFsb2cub3ZlcmxheS5wcm90 b3R5cGUse2Rlc3Ryb3k6ZnVuY3Rpb24oKXskLnVpLmRpYWxvZy5vdmVybGF5LmRl c3Ryb3kodGhpcy4kZWwpO319KTt9KShqUXVlcnkpOyhmdW5jdGlvbigkKXskLndp ZGdldCgidWkuZHJhZ2dhYmxlIiwkLmV4dGVuZCh7fSwkLnVpLm1vdXNlLHtfaW5p dDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5oZWxwZXI9PSdvcmlnaW5hbCcm JiEoL14oPzpyfGF8ZikvKS50ZXN0KHRoaXMuZWxlbWVudC5jc3MoInBvc2l0aW9u IikpKQp0aGlzLmVsZW1lbnRbMF0uc3R5bGUucG9zaXRpb249J3JlbGF0aXZlJzso dGhpcy5vcHRpb25zLmFkZENsYXNzZXMmJnRoaXMuZWxlbWVudC5hZGRDbGFzcygi dWktZHJhZ2dhYmxlIikpOyh0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJnRoaXMuZWxl bWVudC5hZGRDbGFzcygidWktZHJhZ2dhYmxlLWRpc2FibGVkIikpO3RoaXMuX21v dXNlSW5pdCgpO30sZGVzdHJveTpmdW5jdGlvbigpe2lmKCF0aGlzLmVsZW1lbnQu ZGF0YSgnZHJhZ2dhYmxlJykpcmV0dXJuO3RoaXMuZWxlbWVudC5yZW1vdmVEYXRh KCJkcmFnZ2FibGUiKS51bmJpbmQoIi5kcmFnZ2FibGUiKS5yZW1vdmVDbGFzcygi dWktZHJhZ2dhYmxlIgorIiB1aS1kcmFnZ2FibGUtZHJhZ2dpbmciCisiIHVpLWRy YWdnYWJsZS1kaXNhYmxlZCIpO3RoaXMuX21vdXNlRGVzdHJveSgpO30sX21vdXNl Q2FwdHVyZTpmdW5jdGlvbihldmVudCl7dmFyIG89dGhpcy5vcHRpb25zO2lmKHRo aXMuaGVscGVyfHxvLmRpc2FibGVkfHwkKGV2ZW50LnRhcmdldCkuaXMoJy51aS1y ZXNpemFibGUtaGFuZGxlJykpCnJldHVybiBmYWxzZTt0aGlzLmhhbmRsZT10aGlz Ll9nZXRIYW5kbGUoZXZlbnQpO2lmKCF0aGlzLmhhbmRsZSkKcmV0dXJuIGZhbHNl O3JldHVybiB0cnVlO30sX21vdXNlU3RhcnQ6ZnVuY3Rpb24oZXZlbnQpe3ZhciBv PXRoaXMub3B0aW9uczt0aGlzLmhlbHBlcj10aGlzLl9jcmVhdGVIZWxwZXIoZXZl bnQpO3RoaXMuX2NhY2hlSGVscGVyUHJvcG9ydGlvbnMoKTtpZigkLnVpLmRkbWFu YWdlcikKJC51aS5kZG1hbmFnZXIuY3VycmVudD10aGlzO3RoaXMuX2NhY2hlTWFy Z2lucygpO3RoaXMuY3NzUG9zaXRpb249dGhpcy5oZWxwZXIuY3NzKCJwb3NpdGlv biIpO3RoaXMuc2Nyb2xsUGFyZW50PXRoaXMuaGVscGVyLnNjcm9sbFBhcmVudCgp O3RoaXMub2Zmc2V0PXRoaXMuZWxlbWVudC5vZmZzZXQoKTt0aGlzLm9mZnNldD17 dG9wOnRoaXMub2Zmc2V0LnRvcC10aGlzLm1hcmdpbnMudG9wLGxlZnQ6dGhpcy5v ZmZzZXQubGVmdC10aGlzLm1hcmdpbnMubGVmdH07JC5leHRlbmQodGhpcy5vZmZz ZXQse2NsaWNrOntsZWZ0OmV2ZW50LnBhZ2VYLXRoaXMub2Zmc2V0LmxlZnQsdG9w OmV2ZW50LnBhZ2VZLXRoaXMub2Zmc2V0LnRvcH0scGFyZW50OnRoaXMuX2dldFBh cmVudE9mZnNldCgpLHJlbGF0aXZlOnRoaXMuX2dldFJlbGF0aXZlT2Zmc2V0KCl9 KTt0aGlzLm9yaWdpbmFsUG9zaXRpb249dGhpcy5fZ2VuZXJhdGVQb3NpdGlvbihl dmVudCk7dGhpcy5vcmlnaW5hbFBhZ2VYPWV2ZW50LnBhZ2VYO3RoaXMub3JpZ2lu YWxQYWdlWT1ldmVudC5wYWdlWTtpZihvLmN1cnNvckF0KQp0aGlzLl9hZGp1c3RP ZmZzZXRGcm9tSGVscGVyKG8uY3Vyc29yQXQpO2lmKG8uY29udGFpbm1lbnQpCnRo aXMuX3NldENvbnRhaW5tZW50KCk7dGhpcy5fdHJpZ2dlcigic3RhcnQiLGV2ZW50 KTt0aGlzLl9jYWNoZUhlbHBlclByb3BvcnRpb25zKCk7aWYoJC51aS5kZG1hbmFn ZXImJiFvLmRyb3BCZWhhdmlvdXIpCiQudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZz ZXRzKHRoaXMsZXZlbnQpO3RoaXMuaGVscGVyLmFkZENsYXNzKCJ1aS1kcmFnZ2Fi bGUtZHJhZ2dpbmciKTt0aGlzLl9tb3VzZURyYWcoZXZlbnQsdHJ1ZSk7cmV0dXJu IHRydWU7fSxfbW91c2VEcmFnOmZ1bmN0aW9uKGV2ZW50LG5vUHJvcGFnYXRpb24p e3RoaXMucG9zaXRpb249dGhpcy5fZ2VuZXJhdGVQb3NpdGlvbihldmVudCk7dGhp cy5wb3NpdGlvbkFicz10aGlzLl9jb252ZXJ0UG9zaXRpb25UbygiYWJzb2x1dGUi KTtpZighbm9Qcm9wYWdhdGlvbil7dmFyIHVpPXRoaXMuX3VpSGFzaCgpO3RoaXMu X3RyaWdnZXIoJ2RyYWcnLGV2ZW50LHVpKTt0aGlzLnBvc2l0aW9uPXVpLnBvc2l0 aW9uO30KaWYoIXRoaXMub3B0aW9ucy5heGlzfHx0aGlzLm9wdGlvbnMuYXhpcyE9 InkiKXRoaXMuaGVscGVyWzBdLnN0eWxlLmxlZnQ9dGhpcy5wb3NpdGlvbi5sZWZ0 KydweCc7aWYoIXRoaXMub3B0aW9ucy5heGlzfHx0aGlzLm9wdGlvbnMuYXhpcyE9 IngiKXRoaXMuaGVscGVyWzBdLnN0eWxlLnRvcD10aGlzLnBvc2l0aW9uLnRvcCsn cHgnO2lmKCQudWkuZGRtYW5hZ2VyKSQudWkuZGRtYW5hZ2VyLmRyYWcodGhpcyxl dmVudCk7cmV0dXJuIGZhbHNlO30sX21vdXNlU3RvcDpmdW5jdGlvbihldmVudCl7 dmFyIGRyb3BwZWQ9ZmFsc2U7aWYoJC51aS5kZG1hbmFnZXImJiF0aGlzLm9wdGlv bnMuZHJvcEJlaGF2aW91cikKZHJvcHBlZD0kLnVpLmRkbWFuYWdlci5kcm9wKHRo aXMsZXZlbnQpO2lmKHRoaXMuZHJvcHBlZCl7ZHJvcHBlZD10aGlzLmRyb3BwZWQ7 dGhpcy5kcm9wcGVkPWZhbHNlO30KaWYoKHRoaXMub3B0aW9ucy5yZXZlcnQ9PSJp bnZhbGlkIiYmIWRyb3BwZWQpfHwodGhpcy5vcHRpb25zLnJldmVydD09InZhbGlk IiYmZHJvcHBlZCl8fHRoaXMub3B0aW9ucy5yZXZlcnQ9PT10cnVlfHwoJC5pc0Z1 bmN0aW9uKHRoaXMub3B0aW9ucy5yZXZlcnQpJiZ0aGlzLm9wdGlvbnMucmV2ZXJ0 LmNhbGwodGhpcy5lbGVtZW50LGRyb3BwZWQpKSl7dmFyIHNlbGY9dGhpczskKHRo aXMuaGVscGVyKS5hbmltYXRlKHRoaXMub3JpZ2luYWxQb3NpdGlvbixwYXJzZUlu dCh0aGlzLm9wdGlvbnMucmV2ZXJ0RHVyYXRpb24sMTApLGZ1bmN0aW9uKCl7c2Vs Zi5fdHJpZ2dlcigic3RvcCIsZXZlbnQpO3NlbGYuX2NsZWFyKCk7fSk7fWVsc2V7 dGhpcy5fdHJpZ2dlcigic3RvcCIsZXZlbnQpO3RoaXMuX2NsZWFyKCk7fQpyZXR1 cm4gZmFsc2U7fSxfZ2V0SGFuZGxlOmZ1bmN0aW9uKGV2ZW50KXt2YXIgaGFuZGxl PSF0aGlzLm9wdGlvbnMuaGFuZGxlfHwhJCh0aGlzLm9wdGlvbnMuaGFuZGxlLHRo aXMuZWxlbWVudCkubGVuZ3RoP3RydWU6ZmFsc2U7JCh0aGlzLm9wdGlvbnMuaGFu ZGxlLHRoaXMuZWxlbWVudCkuZmluZCgiKiIpLmFuZFNlbGYoKS5lYWNoKGZ1bmN0 aW9uKCl7aWYodGhpcz09ZXZlbnQudGFyZ2V0KWhhbmRsZT10cnVlO30pO3JldHVy biBoYW5kbGU7fSxfY3JlYXRlSGVscGVyOmZ1bmN0aW9uKGV2ZW50KXt2YXIgbz10 aGlzLm9wdGlvbnM7dmFyIGhlbHBlcj0kLmlzRnVuY3Rpb24oby5oZWxwZXIpPyQo by5oZWxwZXIuYXBwbHkodGhpcy5lbGVtZW50WzBdLFtldmVudF0pKTooby5oZWxw ZXI9PSdjbG9uZSc/dGhpcy5lbGVtZW50LmNsb25lKCk6dGhpcy5lbGVtZW50KTtp ZighaGVscGVyLnBhcmVudHMoJ2JvZHknKS5sZW5ndGgpCmhlbHBlci5hcHBlbmRU bygoby5hcHBlbmRUbz09J3BhcmVudCc/dGhpcy5lbGVtZW50WzBdLnBhcmVudE5v ZGU6by5hcHBlbmRUbykpO2lmKGhlbHBlclswXSE9dGhpcy5lbGVtZW50WzBdJiYh KC8oZml4ZWR8YWJzb2x1dGUpLykudGVzdChoZWxwZXIuY3NzKCJwb3NpdGlvbiIp KSkKaGVscGVyLmNzcygicG9zaXRpb24iLCJhYnNvbHV0ZSIpO3JldHVybiBoZWxw ZXI7fSxfYWRqdXN0T2Zmc2V0RnJvbUhlbHBlcjpmdW5jdGlvbihvYmope2lmKG9i ai5sZWZ0IT11bmRlZmluZWQpdGhpcy5vZmZzZXQuY2xpY2subGVmdD1vYmoubGVm dCt0aGlzLm1hcmdpbnMubGVmdDtpZihvYmoucmlnaHQhPXVuZGVmaW5lZCl0aGlz Lm9mZnNldC5jbGljay5sZWZ0PXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgt b2JqLnJpZ2h0K3RoaXMubWFyZ2lucy5sZWZ0O2lmKG9iai50b3AhPXVuZGVmaW5l ZCl0aGlzLm9mZnNldC5jbGljay50b3A9b2JqLnRvcCt0aGlzLm1hcmdpbnMudG9w O2lmKG9iai5ib3R0b20hPXVuZGVmaW5lZCl0aGlzLm9mZnNldC5jbGljay50b3A9 dGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQtb2JqLmJvdHRvbSt0aGlzLm1h cmdpbnMudG9wO30sX2dldFBhcmVudE9mZnNldDpmdW5jdGlvbigpe3RoaXMub2Zm c2V0UGFyZW50PXRoaXMuaGVscGVyLm9mZnNldFBhcmVudCgpO3ZhciBwbz10aGlz Lm9mZnNldFBhcmVudC5vZmZzZXQoKTtpZih0aGlzLmNzc1Bvc2l0aW9uPT0nYWJz b2x1dGUnJiZ0aGlzLnNjcm9sbFBhcmVudFswXSE9ZG9jdW1lbnQmJiQudWkuY29u dGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sdGhpcy5vZmZzZXRQYXJlbnRbMF0p KXtwby5sZWZ0Kz10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCk7cG8udG9w Kz10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxUb3AoKTt9CmlmKCh0aGlzLm9mZnNl dFBhcmVudFswXT09ZG9jdW1lbnQuYm9keSl8fCh0aGlzLm9mZnNldFBhcmVudFsw XS50YWdOYW1lJiZ0aGlzLm9mZnNldFBhcmVudFswXS50YWdOYW1lLnRvTG93ZXJD YXNlKCk9PSdodG1sJyYmJC5icm93c2VyLm1zaWUpKQpwbz17dG9wOjAsbGVmdDow fTtyZXR1cm57dG9wOnBvLnRvcCsocGFyc2VJbnQodGhpcy5vZmZzZXRQYXJlbnQu Y3NzKCJib3JkZXJUb3BXaWR0aCIpLDEwKXx8MCksbGVmdDpwby5sZWZ0KyhwYXJz ZUludCh0aGlzLm9mZnNldFBhcmVudC5jc3MoImJvcmRlckxlZnRXaWR0aCIpLDEw KXx8MCl9O30sX2dldFJlbGF0aXZlT2Zmc2V0OmZ1bmN0aW9uKCl7aWYodGhpcy5j c3NQb3NpdGlvbj09InJlbGF0aXZlIil7dmFyIHA9dGhpcy5lbGVtZW50LnBvc2l0 aW9uKCk7cmV0dXJue3RvcDpwLnRvcC0ocGFyc2VJbnQodGhpcy5oZWxwZXIuY3Nz KCJ0b3AiKSwxMCl8fDApK3RoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpLGxl ZnQ6cC5sZWZ0LShwYXJzZUludCh0aGlzLmhlbHBlci5jc3MoImxlZnQiKSwxMCl8 fDApK3RoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKX07fWVsc2V7cmV0dXJu e3RvcDowLGxlZnQ6MH07fX0sX2NhY2hlTWFyZ2luczpmdW5jdGlvbigpe3RoaXMu bWFyZ2lucz17bGVmdDoocGFyc2VJbnQodGhpcy5lbGVtZW50LmNzcygibWFyZ2lu TGVmdCIpLDEwKXx8MCksdG9wOihwYXJzZUludCh0aGlzLmVsZW1lbnQuY3NzKCJt YXJnaW5Ub3AiKSwxMCl8fDApfTt9LF9jYWNoZUhlbHBlclByb3BvcnRpb25zOmZ1 bmN0aW9uKCl7dGhpcy5oZWxwZXJQcm9wb3J0aW9ucz17d2lkdGg6dGhpcy5oZWxw ZXIub3V0ZXJXaWR0aCgpLGhlaWdodDp0aGlzLmhlbHBlci5vdXRlckhlaWdodCgp fTt9LF9zZXRDb250YWlubWVudDpmdW5jdGlvbigpe3ZhciBvPXRoaXMub3B0aW9u cztpZihvLmNvbnRhaW5tZW50PT0ncGFyZW50JylvLmNvbnRhaW5tZW50PXRoaXMu aGVscGVyWzBdLnBhcmVudE5vZGU7aWYoby5jb250YWlubWVudD09J2RvY3VtZW50 J3x8by5jb250YWlubWVudD09J3dpbmRvdycpdGhpcy5jb250YWlubWVudD1bMC10 aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0LXRoaXMub2Zmc2V0LnBhcmVudC5sZWZ0 LDAtdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wLXRoaXMub2Zmc2V0LnBhcmVudC50 b3AsJChvLmNvbnRhaW5tZW50PT0nZG9jdW1lbnQnP2RvY3VtZW50OndpbmRvdyku d2lkdGgoKS10aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLXRoaXMubWFyZ2lu cy5sZWZ0LCgkKG8uY29udGFpbm1lbnQ9PSdkb2N1bWVudCc/ZG9jdW1lbnQ6d2lu ZG93KS5oZWlnaHQoKXx8ZG9jdW1lbnQuYm9keS5wYXJlbnROb2RlLnNjcm9sbEhl aWdodCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQtdGhpcy5tYXJnaW5z LnRvcF07aWYoISgvXihkb2N1bWVudHx3aW5kb3d8cGFyZW50KSQvKS50ZXN0KG8u Y29udGFpbm1lbnQpJiZvLmNvbnRhaW5tZW50LmNvbnN0cnVjdG9yIT1BcnJheSl7 dmFyIGNlPSQoby5jb250YWlubWVudClbMF07aWYoIWNlKXJldHVybjt2YXIgY289 JChvLmNvbnRhaW5tZW50KS5vZmZzZXQoKTt2YXIgb3Zlcj0oJChjZSkuY3NzKCJv dmVyZmxvdyIpIT0naGlkZGVuJyk7dGhpcy5jb250YWlubWVudD1bY28ubGVmdCso cGFyc2VJbnQoJChjZSkuY3NzKCJib3JkZXJMZWZ0V2lkdGgiKSwxMCl8fDApKyhw YXJzZUludCgkKGNlKS5jc3MoInBhZGRpbmdMZWZ0IiksMTApfHwwKS10aGlzLm1h cmdpbnMubGVmdCxjby50b3ArKHBhcnNlSW50KCQoY2UpLmNzcygiYm9yZGVyVG9w V2lkdGgiKSwxMCl8fDApKyhwYXJzZUludCgkKGNlKS5jc3MoInBhZGRpbmdUb3Ai KSwxMCl8fDApLXRoaXMubWFyZ2lucy50b3AsY28ubGVmdCsob3Zlcj9NYXRoLm1h eChjZS5zY3JvbGxXaWR0aCxjZS5vZmZzZXRXaWR0aCk6Y2Uub2Zmc2V0V2lkdGgp LShwYXJzZUludCgkKGNlKS5jc3MoImJvcmRlckxlZnRXaWR0aCIpLDEwKXx8MCkt KHBhcnNlSW50KCQoY2UpLmNzcygicGFkZGluZ1JpZ2h0IiksMTApfHwwKS10aGlz LmhlbHBlclByb3BvcnRpb25zLndpZHRoLXRoaXMubWFyZ2lucy5sZWZ0LGNvLnRv cCsob3Zlcj9NYXRoLm1heChjZS5zY3JvbGxIZWlnaHQsY2Uub2Zmc2V0SGVpZ2h0 KTpjZS5vZmZzZXRIZWlnaHQpLShwYXJzZUludCgkKGNlKS5jc3MoImJvcmRlclRv cFdpZHRoIiksMTApfHwwKS0ocGFyc2VJbnQoJChjZSkuY3NzKCJwYWRkaW5nQm90 dG9tIiksMTApfHwwKS10aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC10aGlz Lm1hcmdpbnMudG9wXTt9ZWxzZSBpZihvLmNvbnRhaW5tZW50LmNvbnN0cnVjdG9y PT1BcnJheSl7dGhpcy5jb250YWlubWVudD1vLmNvbnRhaW5tZW50O319LF9jb252 ZXJ0UG9zaXRpb25UbzpmdW5jdGlvbihkLHBvcyl7aWYoIXBvcylwb3M9dGhpcy5w b3NpdGlvbjt2YXIgbW9kPWQ9PSJhYnNvbHV0ZSI/MTotMTt2YXIgbz10aGlzLm9w dGlvbnMsc2Nyb2xsPXRoaXMuY3NzUG9zaXRpb249PSdhYnNvbHV0ZScmJiEodGhp cy5zY3JvbGxQYXJlbnRbMF0hPWRvY3VtZW50JiYkLnVpLmNvbnRhaW5zKHRoaXMu c2Nyb2xsUGFyZW50WzBdLHRoaXMub2Zmc2V0UGFyZW50WzBdKSk/dGhpcy5vZmZz ZXRQYXJlbnQ6dGhpcy5zY3JvbGxQYXJlbnQsc2Nyb2xsSXNSb290Tm9kZT0oLyho dG1sfGJvZHkpL2kpLnRlc3Qoc2Nyb2xsWzBdLnRhZ05hbWUpO3JldHVybnt0b3A6 KHBvcy50b3AKK3RoaXMub2Zmc2V0LnJlbGF0aXZlLnRvcCptb2QKK3RoaXMub2Zm c2V0LnBhcmVudC50b3AqbW9kCi0oJC5icm93c2VyLnNhZmFyaSYmdGhpcy5jc3NQ b3NpdGlvbj09J2ZpeGVkJz8wOih0aGlzLmNzc1Bvc2l0aW9uPT0nZml4ZWQnPy10 aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxUb3AoKTooc2Nyb2xsSXNSb290Tm9kZT8w OnNjcm9sbC5zY3JvbGxUb3AoKSkpKm1vZCkpLGxlZnQ6KHBvcy5sZWZ0Cit0aGlz Lm9mZnNldC5yZWxhdGl2ZS5sZWZ0Km1vZAordGhpcy5vZmZzZXQucGFyZW50Lmxl ZnQqbW9kCi0oJC5icm93c2VyLnNhZmFyaSYmdGhpcy5jc3NQb3NpdGlvbj09J2Zp eGVkJz8wOih0aGlzLmNzc1Bvc2l0aW9uPT0nZml4ZWQnPy10aGlzLnNjcm9sbFBh cmVudC5zY3JvbGxMZWZ0KCk6c2Nyb2xsSXNSb290Tm9kZT8wOnNjcm9sbC5zY3Jv bGxMZWZ0KCkpKm1vZCkpfTt9LF9nZW5lcmF0ZVBvc2l0aW9uOmZ1bmN0aW9uKGV2 ZW50KXt2YXIgbz10aGlzLm9wdGlvbnMsc2Nyb2xsPXRoaXMuY3NzUG9zaXRpb249 PSdhYnNvbHV0ZScmJiEodGhpcy5zY3JvbGxQYXJlbnRbMF0hPWRvY3VtZW50JiYk LnVpLmNvbnRhaW5zKHRoaXMuc2Nyb2xsUGFyZW50WzBdLHRoaXMub2Zmc2V0UGFy ZW50WzBdKSk/dGhpcy5vZmZzZXRQYXJlbnQ6dGhpcy5zY3JvbGxQYXJlbnQsc2Ny b2xsSXNSb290Tm9kZT0oLyhodG1sfGJvZHkpL2kpLnRlc3Qoc2Nyb2xsWzBdLnRh Z05hbWUpO2lmKHRoaXMuY3NzUG9zaXRpb249PSdyZWxhdGl2ZScmJiEodGhpcy5z Y3JvbGxQYXJlbnRbMF0hPWRvY3VtZW50JiZ0aGlzLnNjcm9sbFBhcmVudFswXSE9 dGhpcy5vZmZzZXRQYXJlbnRbMF0pKXt0aGlzLm9mZnNldC5yZWxhdGl2ZT10aGlz Ll9nZXRSZWxhdGl2ZU9mZnNldCgpO30KdmFyIHBhZ2VYPWV2ZW50LnBhZ2VYO3Zh ciBwYWdlWT1ldmVudC5wYWdlWTtpZih0aGlzLm9yaWdpbmFsUG9zaXRpb24pe2lm KHRoaXMuY29udGFpbm1lbnQpe2lmKGV2ZW50LnBhZ2VYLXRoaXMub2Zmc2V0LmNs aWNrLmxlZnQ8dGhpcy5jb250YWlubWVudFswXSlwYWdlWD10aGlzLmNvbnRhaW5t ZW50WzBdK3RoaXMub2Zmc2V0LmNsaWNrLmxlZnQ7aWYoZXZlbnQucGFnZVktdGhp cy5vZmZzZXQuY2xpY2sudG9wPHRoaXMuY29udGFpbm1lbnRbMV0pcGFnZVk9dGhp cy5jb250YWlubWVudFsxXSt0aGlzLm9mZnNldC5jbGljay50b3A7aWYoZXZlbnQu cGFnZVgtdGhpcy5vZmZzZXQuY2xpY2subGVmdD50aGlzLmNvbnRhaW5tZW50WzJd KXBhZ2VYPXRoaXMuY29udGFpbm1lbnRbMl0rdGhpcy5vZmZzZXQuY2xpY2subGVm dDtpZihldmVudC5wYWdlWS10aGlzLm9mZnNldC5jbGljay50b3A+dGhpcy5jb250 YWlubWVudFszXSlwYWdlWT10aGlzLmNvbnRhaW5tZW50WzNdK3RoaXMub2Zmc2V0 LmNsaWNrLnRvcDt9CmlmKG8uZ3JpZCl7dmFyIHRvcD10aGlzLm9yaWdpbmFsUGFn ZVkrTWF0aC5yb3VuZCgocGFnZVktdGhpcy5vcmlnaW5hbFBhZ2VZKS9vLmdyaWRb MV0pKm8uZ3JpZFsxXTtwYWdlWT10aGlzLmNvbnRhaW5tZW50PyghKHRvcC10aGlz Lm9mZnNldC5jbGljay50b3A8dGhpcy5jb250YWlubWVudFsxXXx8dG9wLXRoaXMu b2Zmc2V0LmNsaWNrLnRvcD50aGlzLmNvbnRhaW5tZW50WzNdKT90b3A6KCEodG9w LXRoaXMub2Zmc2V0LmNsaWNrLnRvcDx0aGlzLmNvbnRhaW5tZW50WzFdKT90b3At by5ncmlkWzFdOnRvcCtvLmdyaWRbMV0pKTp0b3A7dmFyIGxlZnQ9dGhpcy5vcmln aW5hbFBhZ2VYK01hdGgucm91bmQoKHBhZ2VYLXRoaXMub3JpZ2luYWxQYWdlWCkv by5ncmlkWzBdKSpvLmdyaWRbMF07cGFnZVg9dGhpcy5jb250YWlubWVudD8oIShs ZWZ0LXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ8dGhpcy5jb250YWlubWVudFswXXx8 bGVmdC10aGlzLm9mZnNldC5jbGljay5sZWZ0PnRoaXMuY29udGFpbm1lbnRbMl0p P2xlZnQ6KCEobGVmdC10aGlzLm9mZnNldC5jbGljay5sZWZ0PHRoaXMuY29udGFp bm1lbnRbMF0pP2xlZnQtby5ncmlkWzBdOmxlZnQrby5ncmlkWzBdKSk6bGVmdDt9 fQpyZXR1cm57dG9wOihwYWdlWQotdGhpcy5vZmZzZXQuY2xpY2sudG9wCi10aGlz Lm9mZnNldC5yZWxhdGl2ZS50b3AKLXRoaXMub2Zmc2V0LnBhcmVudC50b3AKKygk LmJyb3dzZXIuc2FmYXJpJiZ0aGlzLmNzc1Bvc2l0aW9uPT0nZml4ZWQnPzA6KHRo aXMuY3NzUG9zaXRpb249PSdmaXhlZCc/LXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9s bFRvcCgpOihzY3JvbGxJc1Jvb3ROb2RlPzA6c2Nyb2xsLnNjcm9sbFRvcCgpKSkp KSxsZWZ0OihwYWdlWAotdGhpcy5vZmZzZXQuY2xpY2subGVmdAotdGhpcy5vZmZz ZXQucmVsYXRpdmUubGVmdAotdGhpcy5vZmZzZXQucGFyZW50LmxlZnQKKygkLmJy b3dzZXIuc2FmYXJpJiZ0aGlzLmNzc1Bvc2l0aW9uPT0nZml4ZWQnPzA6KHRoaXMu Y3NzUG9zaXRpb249PSdmaXhlZCc/LXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExl ZnQoKTpzY3JvbGxJc1Jvb3ROb2RlPzA6c2Nyb2xsLnNjcm9sbExlZnQoKSkpKX07 fSxfY2xlYXI6ZnVuY3Rpb24oKXt0aGlzLmhlbHBlci5yZW1vdmVDbGFzcygidWkt ZHJhZ2dhYmxlLWRyYWdnaW5nIik7aWYodGhpcy5oZWxwZXJbMF0hPXRoaXMuZWxl bWVudFswXSYmIXRoaXMuY2FuY2VsSGVscGVyUmVtb3ZhbCl0aGlzLmhlbHBlci5y ZW1vdmUoKTt0aGlzLmhlbHBlcj1udWxsO3RoaXMuY2FuY2VsSGVscGVyUmVtb3Zh bD1mYWxzZTt9LF90cmlnZ2VyOmZ1bmN0aW9uKHR5cGUsZXZlbnQsdWkpe3VpPXVp fHx0aGlzLl91aUhhc2goKTskLnVpLnBsdWdpbi5jYWxsKHRoaXMsdHlwZSxbZXZl bnQsdWldKTtpZih0eXBlPT0iZHJhZyIpdGhpcy5wb3NpdGlvbkFicz10aGlzLl9j b252ZXJ0UG9zaXRpb25UbygiYWJzb2x1dGUiKTtyZXR1cm4gJC53aWRnZXQucHJv dG90eXBlLl90cmlnZ2VyLmNhbGwodGhpcyx0eXBlLGV2ZW50LHVpKTt9LHBsdWdp bnM6e30sX3VpSGFzaDpmdW5jdGlvbihldmVudCl7cmV0dXJue2hlbHBlcjp0aGlz LmhlbHBlcixwb3NpdGlvbjp0aGlzLnBvc2l0aW9uLGFic29sdXRlUG9zaXRpb246 dGhpcy5wb3NpdGlvbkFicyxvZmZzZXQ6dGhpcy5wb3NpdGlvbkFic307fX0pKTsk LmV4dGVuZCgkLnVpLmRyYWdnYWJsZSx7dmVyc2lvbjoiMS43LjEiLGV2ZW50UHJl Zml4OiJkcmFnIixkZWZhdWx0czp7YWRkQ2xhc3Nlczp0cnVlLGFwcGVuZFRvOiJw YXJlbnQiLGF4aXM6ZmFsc2UsY2FuY2VsOiI6aW5wdXQsb3B0aW9uIixjb25uZWN0 VG9Tb3J0YWJsZTpmYWxzZSxjb250YWlubWVudDpmYWxzZSxjdXJzb3I6ImF1dG8i LGN1cnNvckF0OmZhbHNlLGRlbGF5OjAsZGlzdGFuY2U6MSxncmlkOmZhbHNlLGhh bmRsZTpmYWxzZSxoZWxwZXI6Im9yaWdpbmFsIixpZnJhbWVGaXg6ZmFsc2Usb3Bh Y2l0eTpmYWxzZSxyZWZyZXNoUG9zaXRpb25zOmZhbHNlLHJldmVydDpmYWxzZSxy ZXZlcnREdXJhdGlvbjo1MDAsc2NvcGU6ImRlZmF1bHQiLHNjcm9sbDp0cnVlLHNj cm9sbFNlbnNpdGl2aXR5OjIwLHNjcm9sbFNwZWVkOjIwLHNuYXA6ZmFsc2Usc25h cE1vZGU6ImJvdGgiLHNuYXBUb2xlcmFuY2U6MjAsc3RhY2s6ZmFsc2UsekluZGV4 OmZhbHNlfX0pOyQudWkucGx1Z2luLmFkZCgiZHJhZ2dhYmxlIiwiY29ubmVjdFRv U29ydGFibGUiLHtzdGFydDpmdW5jdGlvbihldmVudCx1aSl7dmFyIGluc3Q9JCh0 aGlzKS5kYXRhKCJkcmFnZ2FibGUiKSxvPWluc3Qub3B0aW9ucyx1aVNvcnRhYmxl PSQuZXh0ZW5kKHt9LHVpLHtpdGVtOmluc3QuZWxlbWVudH0pO2luc3Quc29ydGFi bGVzPVtdOyQoby5jb25uZWN0VG9Tb3J0YWJsZSkuZWFjaChmdW5jdGlvbigpe3Zh ciBzb3J0YWJsZT0kLmRhdGEodGhpcywnc29ydGFibGUnKTtpZihzb3J0YWJsZSYm IXNvcnRhYmxlLm9wdGlvbnMuZGlzYWJsZWQpe2luc3Quc29ydGFibGVzLnB1c2go e2luc3RhbmNlOnNvcnRhYmxlLHNob3VsZFJldmVydDpzb3J0YWJsZS5vcHRpb25z LnJldmVydH0pO3NvcnRhYmxlLl9yZWZyZXNoSXRlbXMoKTtzb3J0YWJsZS5fdHJp Z2dlcigiYWN0aXZhdGUiLGV2ZW50LHVpU29ydGFibGUpO319KTt9LHN0b3A6ZnVu Y3Rpb24oZXZlbnQsdWkpe3ZhciBpbnN0PSQodGhpcykuZGF0YSgiZHJhZ2dhYmxl IiksdWlTb3J0YWJsZT0kLmV4dGVuZCh7fSx1aSx7aXRlbTppbnN0LmVsZW1lbnR9 KTskLmVhY2goaW5zdC5zb3J0YWJsZXMsZnVuY3Rpb24oKXtpZih0aGlzLmluc3Rh bmNlLmlzT3Zlcil7dGhpcy5pbnN0YW5jZS5pc092ZXI9MDtpbnN0LmNhbmNlbEhl bHBlclJlbW92YWw9dHJ1ZTt0aGlzLmluc3RhbmNlLmNhbmNlbEhlbHBlclJlbW92 YWw9ZmFsc2U7aWYodGhpcy5zaG91bGRSZXZlcnQpdGhpcy5pbnN0YW5jZS5vcHRp b25zLnJldmVydD10cnVlO3RoaXMuaW5zdGFuY2UuX21vdXNlU3RvcChldmVudCk7 dGhpcy5pbnN0YW5jZS5vcHRpb25zLmhlbHBlcj10aGlzLmluc3RhbmNlLm9wdGlv bnMuX2hlbHBlcjtpZihpbnN0Lm9wdGlvbnMuaGVscGVyPT0nb3JpZ2luYWwnKQp0 aGlzLmluc3RhbmNlLmN1cnJlbnRJdGVtLmNzcyh7dG9wOidhdXRvJyxsZWZ0Oidh dXRvJ30pO31lbHNle3RoaXMuaW5zdGFuY2UuY2FuY2VsSGVscGVyUmVtb3ZhbD1m YWxzZTt0aGlzLmluc3RhbmNlLl90cmlnZ2VyKCJkZWFjdGl2YXRlIixldmVudCx1 aVNvcnRhYmxlKTt9fSk7fSxkcmFnOmZ1bmN0aW9uKGV2ZW50LHVpKXt2YXIgaW5z dD0kKHRoaXMpLmRhdGEoImRyYWdnYWJsZSIpLHNlbGY9dGhpczt2YXIgY2hlY2tQ b3M9ZnVuY3Rpb24obyl7dmFyIGR5Q2xpY2s9dGhpcy5vZmZzZXQuY2xpY2sudG9w LGR4Q2xpY2s9dGhpcy5vZmZzZXQuY2xpY2subGVmdDt2YXIgaGVscGVyVG9wPXRo aXMucG9zaXRpb25BYnMudG9wLGhlbHBlckxlZnQ9dGhpcy5wb3NpdGlvbkFicy5s ZWZ0O3ZhciBpdGVtSGVpZ2h0PW8uaGVpZ2h0LGl0ZW1XaWR0aD1vLndpZHRoO3Zh ciBpdGVtVG9wPW8udG9wLGl0ZW1MZWZ0PW8ubGVmdDtyZXR1cm4gJC51aS5pc092 ZXIoaGVscGVyVG9wK2R5Q2xpY2ssaGVscGVyTGVmdCtkeENsaWNrLGl0ZW1Ub3As aXRlbUxlZnQsaXRlbUhlaWdodCxpdGVtV2lkdGgpO307JC5lYWNoKGluc3Quc29y dGFibGVzLGZ1bmN0aW9uKGkpe3RoaXMuaW5zdGFuY2UucG9zaXRpb25BYnM9aW5z dC5wb3NpdGlvbkFiczt0aGlzLmluc3RhbmNlLmhlbHBlclByb3BvcnRpb25zPWlu c3QuaGVscGVyUHJvcG9ydGlvbnM7dGhpcy5pbnN0YW5jZS5vZmZzZXQuY2xpY2s9 aW5zdC5vZmZzZXQuY2xpY2s7aWYodGhpcy5pbnN0YW5jZS5faW50ZXJzZWN0c1dp dGgodGhpcy5pbnN0YW5jZS5jb250YWluZXJDYWNoZSkpe2lmKCF0aGlzLmluc3Rh bmNlLmlzT3Zlcil7dGhpcy5pbnN0YW5jZS5pc092ZXI9MTt0aGlzLmluc3RhbmNl LmN1cnJlbnRJdGVtPSQoc2VsZikuY2xvbmUoKS5hcHBlbmRUbyh0aGlzLmluc3Rh bmNlLmVsZW1lbnQpLmRhdGEoInNvcnRhYmxlLWl0ZW0iLHRydWUpO3RoaXMuaW5z dGFuY2Uub3B0aW9ucy5faGVscGVyPXRoaXMuaW5zdGFuY2Uub3B0aW9ucy5oZWxw ZXI7dGhpcy5pbnN0YW5jZS5vcHRpb25zLmhlbHBlcj1mdW5jdGlvbigpe3JldHVy biB1aS5oZWxwZXJbMF07fTtldmVudC50YXJnZXQ9dGhpcy5pbnN0YW5jZS5jdXJy ZW50SXRlbVswXTt0aGlzLmluc3RhbmNlLl9tb3VzZUNhcHR1cmUoZXZlbnQsdHJ1 ZSk7dGhpcy5pbnN0YW5jZS5fbW91c2VTdGFydChldmVudCx0cnVlLHRydWUpO3Ro aXMuaW5zdGFuY2Uub2Zmc2V0LmNsaWNrLnRvcD1pbnN0Lm9mZnNldC5jbGljay50 b3A7dGhpcy5pbnN0YW5jZS5vZmZzZXQuY2xpY2subGVmdD1pbnN0Lm9mZnNldC5j bGljay5sZWZ0O3RoaXMuaW5zdGFuY2Uub2Zmc2V0LnBhcmVudC5sZWZ0LT1pbnN0 Lm9mZnNldC5wYXJlbnQubGVmdC10aGlzLmluc3RhbmNlLm9mZnNldC5wYXJlbnQu bGVmdDt0aGlzLmluc3RhbmNlLm9mZnNldC5wYXJlbnQudG9wLT1pbnN0Lm9mZnNl dC5wYXJlbnQudG9wLXRoaXMuaW5zdGFuY2Uub2Zmc2V0LnBhcmVudC50b3A7aW5z dC5fdHJpZ2dlcigidG9Tb3J0YWJsZSIsZXZlbnQpO2luc3QuZHJvcHBlZD10aGlz Lmluc3RhbmNlLmVsZW1lbnQ7aW5zdC5jdXJyZW50SXRlbT1pbnN0LmVsZW1lbnQ7 dGhpcy5pbnN0YW5jZS5mcm9tT3V0c2lkZT1pbnN0O30KaWYodGhpcy5pbnN0YW5j ZS5jdXJyZW50SXRlbSl0aGlzLmluc3RhbmNlLl9tb3VzZURyYWcoZXZlbnQpO31l bHNle2lmKHRoaXMuaW5zdGFuY2UuaXNPdmVyKXt0aGlzLmluc3RhbmNlLmlzT3Zl cj0wO3RoaXMuaW5zdGFuY2UuY2FuY2VsSGVscGVyUmVtb3ZhbD10cnVlO3RoaXMu aW5zdGFuY2Uub3B0aW9ucy5yZXZlcnQ9ZmFsc2U7dGhpcy5pbnN0YW5jZS5fdHJp Z2dlcignb3V0JyxldmVudCx0aGlzLmluc3RhbmNlLl91aUhhc2godGhpcy5pbnN0 YW5jZSkpO3RoaXMuaW5zdGFuY2UuX21vdXNlU3RvcChldmVudCx0cnVlKTt0aGlz Lmluc3RhbmNlLm9wdGlvbnMuaGVscGVyPXRoaXMuaW5zdGFuY2Uub3B0aW9ucy5f aGVscGVyO3RoaXMuaW5zdGFuY2UuY3VycmVudEl0ZW0ucmVtb3ZlKCk7aWYodGhp cy5pbnN0YW5jZS5wbGFjZWhvbGRlcil0aGlzLmluc3RhbmNlLnBsYWNlaG9sZGVy LnJlbW92ZSgpO2luc3QuX3RyaWdnZXIoImZyb21Tb3J0YWJsZSIsZXZlbnQpO2lu c3QuZHJvcHBlZD1mYWxzZTt9fTt9KTt9fSk7JC51aS5wbHVnaW4uYWRkKCJkcmFn Z2FibGUiLCJjdXJzb3IiLHtzdGFydDpmdW5jdGlvbihldmVudCx1aSl7dmFyIHQ9 JCgnYm9keScpLG89JCh0aGlzKS5kYXRhKCdkcmFnZ2FibGUnKS5vcHRpb25zO2lm KHQuY3NzKCJjdXJzb3IiKSlvLl9jdXJzb3I9dC5jc3MoImN1cnNvciIpO3QuY3Nz KCJjdXJzb3IiLG8uY3Vyc29yKTt9LHN0b3A6ZnVuY3Rpb24oZXZlbnQsdWkpe3Zh ciBvPSQodGhpcykuZGF0YSgnZHJhZ2dhYmxlJykub3B0aW9ucztpZihvLl9jdXJz b3IpJCgnYm9keScpLmNzcygiY3Vyc29yIixvLl9jdXJzb3IpO319KTskLnVpLnBs dWdpbi5hZGQoImRyYWdnYWJsZSIsImlmcmFtZUZpeCIse3N0YXJ0OmZ1bmN0aW9u KGV2ZW50LHVpKXt2YXIgbz0kKHRoaXMpLmRhdGEoJ2RyYWdnYWJsZScpLm9wdGlv bnM7JChvLmlmcmFtZUZpeD09PXRydWU/ImlmcmFtZSI6by5pZnJhbWVGaXgpLmVh Y2goZnVuY3Rpb24oKXskKCc8ZGl2IGNsYXNzPSJ1aS1kcmFnZ2FibGUtaWZyYW1l Rml4IiBzdHlsZT0iYmFja2dyb3VuZDogI2ZmZjsiPjwvZGl2PicpLmNzcyh7d2lk dGg6dGhpcy5vZmZzZXRXaWR0aCsicHgiLGhlaWdodDp0aGlzLm9mZnNldEhlaWdo dCsicHgiLHBvc2l0aW9uOiJhYnNvbHV0ZSIsb3BhY2l0eToiMC4wMDEiLHpJbmRl eDoxMDAwfSkuY3NzKCQodGhpcykub2Zmc2V0KCkpLmFwcGVuZFRvKCJib2R5Iik7 fSk7fSxzdG9wOmZ1bmN0aW9uKGV2ZW50LHVpKXskKCJkaXYudWktZHJhZ2dhYmxl LWlmcmFtZUZpeCIpLmVhY2goZnVuY3Rpb24oKXt0aGlzLnBhcmVudE5vZGUucmVt b3ZlQ2hpbGQodGhpcyk7fSk7fX0pOyQudWkucGx1Z2luLmFkZCgiZHJhZ2dhYmxl Iiwib3BhY2l0eSIse3N0YXJ0OmZ1bmN0aW9uKGV2ZW50LHVpKXt2YXIgdD0kKHVp LmhlbHBlciksbz0kKHRoaXMpLmRhdGEoJ2RyYWdnYWJsZScpLm9wdGlvbnM7aWYo dC5jc3MoIm9wYWNpdHkiKSlvLl9vcGFjaXR5PXQuY3NzKCJvcGFjaXR5Iik7dC5j c3MoJ29wYWNpdHknLG8ub3BhY2l0eSk7fSxzdG9wOmZ1bmN0aW9uKGV2ZW50LHVp KXt2YXIgbz0kKHRoaXMpLmRhdGEoJ2RyYWdnYWJsZScpLm9wdGlvbnM7aWYoby5f b3BhY2l0eSkkKHVpLmhlbHBlcikuY3NzKCdvcGFjaXR5JyxvLl9vcGFjaXR5KTt9 fSk7JC51aS5wbHVnaW4uYWRkKCJkcmFnZ2FibGUiLCJzY3JvbGwiLHtzdGFydDpm dW5jdGlvbihldmVudCx1aSl7dmFyIGk9JCh0aGlzKS5kYXRhKCJkcmFnZ2FibGUi KTtpZihpLnNjcm9sbFBhcmVudFswXSE9ZG9jdW1lbnQmJmkuc2Nyb2xsUGFyZW50 WzBdLnRhZ05hbWUhPSdIVE1MJylpLm92ZXJmbG93T2Zmc2V0PWkuc2Nyb2xsUGFy ZW50Lm9mZnNldCgpO30sZHJhZzpmdW5jdGlvbihldmVudCx1aSl7dmFyIGk9JCh0 aGlzKS5kYXRhKCJkcmFnZ2FibGUiKSxvPWkub3B0aW9ucyxzY3JvbGxlZD1mYWxz ZTtpZihpLnNjcm9sbFBhcmVudFswXSE9ZG9jdW1lbnQmJmkuc2Nyb2xsUGFyZW50 WzBdLnRhZ05hbWUhPSdIVE1MJyl7aWYoIW8uYXhpc3x8by5heGlzIT0neCcpe2lm KChpLm92ZXJmbG93T2Zmc2V0LnRvcCtpLnNjcm9sbFBhcmVudFswXS5vZmZzZXRI ZWlnaHQpLWV2ZW50LnBhZ2VZPG8uc2Nyb2xsU2Vuc2l0aXZpdHkpCmkuc2Nyb2xs UGFyZW50WzBdLnNjcm9sbFRvcD1zY3JvbGxlZD1pLnNjcm9sbFBhcmVudFswXS5z Y3JvbGxUb3Arby5zY3JvbGxTcGVlZDtlbHNlIGlmKGV2ZW50LnBhZ2VZLWkub3Zl cmZsb3dPZmZzZXQudG9wPG8uc2Nyb2xsU2Vuc2l0aXZpdHkpCmkuc2Nyb2xsUGFy ZW50WzBdLnNjcm9sbFRvcD1zY3JvbGxlZD1pLnNjcm9sbFBhcmVudFswXS5zY3Jv bGxUb3Atby5zY3JvbGxTcGVlZDt9CmlmKCFvLmF4aXN8fG8uYXhpcyE9J3knKXtp ZigoaS5vdmVyZmxvd09mZnNldC5sZWZ0K2kuc2Nyb2xsUGFyZW50WzBdLm9mZnNl dFdpZHRoKS1ldmVudC5wYWdlWDxvLnNjcm9sbFNlbnNpdGl2aXR5KQppLnNjcm9s bFBhcmVudFswXS5zY3JvbGxMZWZ0PXNjcm9sbGVkPWkuc2Nyb2xsUGFyZW50WzBd LnNjcm9sbExlZnQrby5zY3JvbGxTcGVlZDtlbHNlIGlmKGV2ZW50LnBhZ2VYLWku b3ZlcmZsb3dPZmZzZXQubGVmdDxvLnNjcm9sbFNlbnNpdGl2aXR5KQppLnNjcm9s bFBhcmVudFswXS5zY3JvbGxMZWZ0PXNjcm9sbGVkPWkuc2Nyb2xsUGFyZW50WzBd LnNjcm9sbExlZnQtby5zY3JvbGxTcGVlZDt9fWVsc2V7aWYoIW8uYXhpc3x8by5h eGlzIT0neCcpe2lmKGV2ZW50LnBhZ2VZLSQoZG9jdW1lbnQpLnNjcm9sbFRvcCgp PG8uc2Nyb2xsU2Vuc2l0aXZpdHkpCnNjcm9sbGVkPSQoZG9jdW1lbnQpLnNjcm9s bFRvcCgkKGRvY3VtZW50KS5zY3JvbGxUb3AoKS1vLnNjcm9sbFNwZWVkKTtlbHNl IGlmKCQod2luZG93KS5oZWlnaHQoKS0oZXZlbnQucGFnZVktJChkb2N1bWVudCku c2Nyb2xsVG9wKCkpPG8uc2Nyb2xsU2Vuc2l0aXZpdHkpCnNjcm9sbGVkPSQoZG9j dW1lbnQpLnNjcm9sbFRvcCgkKGRvY3VtZW50KS5zY3JvbGxUb3AoKStvLnNjcm9s bFNwZWVkKTt9CmlmKCFvLmF4aXN8fG8uYXhpcyE9J3knKXtpZihldmVudC5wYWdl WC0kKGRvY3VtZW50KS5zY3JvbGxMZWZ0KCk8by5zY3JvbGxTZW5zaXRpdml0eSkK c2Nyb2xsZWQ9JChkb2N1bWVudCkuc2Nyb2xsTGVmdCgkKGRvY3VtZW50KS5zY3Jv bGxMZWZ0KCktby5zY3JvbGxTcGVlZCk7ZWxzZSBpZigkKHdpbmRvdykud2lkdGgo KS0oZXZlbnQucGFnZVgtJChkb2N1bWVudCkuc2Nyb2xsTGVmdCgpKTxvLnNjcm9s bFNlbnNpdGl2aXR5KQpzY3JvbGxlZD0kKGRvY3VtZW50KS5zY3JvbGxMZWZ0KCQo ZG9jdW1lbnQpLnNjcm9sbExlZnQoKStvLnNjcm9sbFNwZWVkKTt9fQppZihzY3Jv bGxlZCE9PWZhbHNlJiYkLnVpLmRkbWFuYWdlciYmIW8uZHJvcEJlaGF2aW91cikK JC51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHMoaSxldmVudCk7fX0pOyQudWku cGx1Z2luLmFkZCgiZHJhZ2dhYmxlIiwic25hcCIse3N0YXJ0OmZ1bmN0aW9uKGV2 ZW50LHVpKXt2YXIgaT0kKHRoaXMpLmRhdGEoImRyYWdnYWJsZSIpLG89aS5vcHRp b25zO2kuc25hcEVsZW1lbnRzPVtdOyQoby5zbmFwLmNvbnN0cnVjdG9yIT1TdHJp bmc/KG8uc25hcC5pdGVtc3x8JzpkYXRhKGRyYWdnYWJsZSknKTpvLnNuYXApLmVh Y2goZnVuY3Rpb24oKXt2YXIgJHQ9JCh0aGlzKTt2YXIgJG89JHQub2Zmc2V0KCk7 aWYodGhpcyE9aS5lbGVtZW50WzBdKWkuc25hcEVsZW1lbnRzLnB1c2goe2l0ZW06 dGhpcyx3aWR0aDokdC5vdXRlcldpZHRoKCksaGVpZ2h0OiR0Lm91dGVySGVpZ2h0 KCksdG9wOiRvLnRvcCxsZWZ0OiRvLmxlZnR9KTt9KTt9LGRyYWc6ZnVuY3Rpb24o ZXZlbnQsdWkpe3ZhciBpbnN0PSQodGhpcykuZGF0YSgiZHJhZ2dhYmxlIiksbz1p bnN0Lm9wdGlvbnM7dmFyIGQ9by5zbmFwVG9sZXJhbmNlO3ZhciB4MT11aS5vZmZz ZXQubGVmdCx4Mj14MStpbnN0LmhlbHBlclByb3BvcnRpb25zLndpZHRoLHkxPXVp Lm9mZnNldC50b3AseTI9eTEraW5zdC5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQ7 Zm9yKHZhciBpPWluc3Quc25hcEVsZW1lbnRzLmxlbmd0aC0xO2k+PTA7aS0tKXt2 YXIgbD1pbnN0LnNuYXBFbGVtZW50c1tpXS5sZWZ0LHI9bCtpbnN0LnNuYXBFbGVt ZW50c1tpXS53aWR0aCx0PWluc3Quc25hcEVsZW1lbnRzW2ldLnRvcCxiPXQraW5z dC5zbmFwRWxlbWVudHNbaV0uaGVpZ2h0O2lmKCEoKGwtZDx4MSYmeDE8citkJiZ0 LWQ8eTEmJnkxPGIrZCl8fChsLWQ8eDEmJngxPHIrZCYmdC1kPHkyJiZ5MjxiK2Qp fHwobC1kPHgyJiZ4MjxyK2QmJnQtZDx5MSYmeTE8YitkKXx8KGwtZDx4MiYmeDI8 citkJiZ0LWQ8eTImJnkyPGIrZCkpKXtpZihpbnN0LnNuYXBFbGVtZW50c1tpXS5z bmFwcGluZykoaW5zdC5vcHRpb25zLnNuYXAucmVsZWFzZSYmaW5zdC5vcHRpb25z LnNuYXAucmVsZWFzZS5jYWxsKGluc3QuZWxlbWVudCxldmVudCwkLmV4dGVuZChp bnN0Ll91aUhhc2goKSx7c25hcEl0ZW06aW5zdC5zbmFwRWxlbWVudHNbaV0uaXRl bX0pKSk7aW5zdC5zbmFwRWxlbWVudHNbaV0uc25hcHBpbmc9ZmFsc2U7Y29udGlu dWU7fQppZihvLnNuYXBNb2RlIT0naW5uZXInKXt2YXIgdHM9TWF0aC5hYnModC15 Mik8PWQ7dmFyIGJzPU1hdGguYWJzKGIteTEpPD1kO3ZhciBscz1NYXRoLmFicyhs LXgyKTw9ZDt2YXIgcnM9TWF0aC5hYnMoci14MSk8PWQ7aWYodHMpdWkucG9zaXRp b24udG9wPWluc3QuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2ZSIse3RvcDp0 LWluc3QuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LGxlZnQ6MH0pLnRvcC1pbnN0 Lm1hcmdpbnMudG9wO2lmKGJzKXVpLnBvc2l0aW9uLnRvcD1pbnN0Ll9jb252ZXJ0 UG9zaXRpb25UbygicmVsYXRpdmUiLHt0b3A6YixsZWZ0OjB9KS50b3AtaW5zdC5t YXJnaW5zLnRvcDtpZihscyl1aS5wb3NpdGlvbi5sZWZ0PWluc3QuX2NvbnZlcnRQ b3NpdGlvblRvKCJyZWxhdGl2ZSIse3RvcDowLGxlZnQ6bC1pbnN0LmhlbHBlclBy b3BvcnRpb25zLndpZHRofSkubGVmdC1pbnN0Lm1hcmdpbnMubGVmdDtpZihycyl1 aS5wb3NpdGlvbi5sZWZ0PWluc3QuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2 ZSIse3RvcDowLGxlZnQ6cn0pLmxlZnQtaW5zdC5tYXJnaW5zLmxlZnQ7fQp2YXIg Zmlyc3Q9KHRzfHxic3x8bHN8fHJzKTtpZihvLnNuYXBNb2RlIT0nb3V0ZXInKXt2 YXIgdHM9TWF0aC5hYnModC15MSk8PWQ7dmFyIGJzPU1hdGguYWJzKGIteTIpPD1k O3ZhciBscz1NYXRoLmFicyhsLXgxKTw9ZDt2YXIgcnM9TWF0aC5hYnMoci14Mik8 PWQ7aWYodHMpdWkucG9zaXRpb24udG9wPWluc3QuX2NvbnZlcnRQb3NpdGlvblRv KCJyZWxhdGl2ZSIse3RvcDp0LGxlZnQ6MH0pLnRvcC1pbnN0Lm1hcmdpbnMudG9w O2lmKGJzKXVpLnBvc2l0aW9uLnRvcD1pbnN0Ll9jb252ZXJ0UG9zaXRpb25Ubygi cmVsYXRpdmUiLHt0b3A6Yi1pbnN0LmhlbHBlclByb3BvcnRpb25zLmhlaWdodCxs ZWZ0OjB9KS50b3AtaW5zdC5tYXJnaW5zLnRvcDtpZihscyl1aS5wb3NpdGlvbi5s ZWZ0PWluc3QuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2ZSIse3RvcDowLGxl ZnQ6bH0pLmxlZnQtaW5zdC5tYXJnaW5zLmxlZnQ7aWYocnMpdWkucG9zaXRpb24u bGVmdD1pbnN0Ll9jb252ZXJ0UG9zaXRpb25UbygicmVsYXRpdmUiLHt0b3A6MCxs ZWZ0OnItaW5zdC5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aH0pLmxlZnQtaW5zdC5t YXJnaW5zLmxlZnQ7fQppZighaW5zdC5zbmFwRWxlbWVudHNbaV0uc25hcHBpbmcm Jih0c3x8YnN8fGxzfHxyc3x8Zmlyc3QpKQooaW5zdC5vcHRpb25zLnNuYXAuc25h cCYmaW5zdC5vcHRpb25zLnNuYXAuc25hcC5jYWxsKGluc3QuZWxlbWVudCxldmVu dCwkLmV4dGVuZChpbnN0Ll91aUhhc2goKSx7c25hcEl0ZW06aW5zdC5zbmFwRWxl bWVudHNbaV0uaXRlbX0pKSk7aW5zdC5zbmFwRWxlbWVudHNbaV0uc25hcHBpbmc9 KHRzfHxic3x8bHN8fHJzfHxmaXJzdCk7fTt9fSk7JC51aS5wbHVnaW4uYWRkKCJk cmFnZ2FibGUiLCJzdGFjayIse3N0YXJ0OmZ1bmN0aW9uKGV2ZW50LHVpKXt2YXIg bz0kKHRoaXMpLmRhdGEoImRyYWdnYWJsZSIpLm9wdGlvbnM7dmFyIGdyb3VwPSQu bWFrZUFycmF5KCQoby5zdGFjay5ncm91cCkpLnNvcnQoZnVuY3Rpb24oYSxiKXty ZXR1cm4ocGFyc2VJbnQoJChhKS5jc3MoInpJbmRleCIpLDEwKXx8by5zdGFjay5t aW4pLShwYXJzZUludCgkKGIpLmNzcygiekluZGV4IiksMTApfHxvLnN0YWNrLm1p bik7fSk7JChncm91cCkuZWFjaChmdW5jdGlvbihpKXt0aGlzLnN0eWxlLnpJbmRl eD1vLnN0YWNrLm1pbitpO30pO3RoaXNbMF0uc3R5bGUuekluZGV4PW8uc3RhY2su bWluK2dyb3VwLmxlbmd0aDt9fSk7JC51aS5wbHVnaW4uYWRkKCJkcmFnZ2FibGUi LCJ6SW5kZXgiLHtzdGFydDpmdW5jdGlvbihldmVudCx1aSl7dmFyIHQ9JCh1aS5o ZWxwZXIpLG89JCh0aGlzKS5kYXRhKCJkcmFnZ2FibGUiKS5vcHRpb25zO2lmKHQu Y3NzKCJ6SW5kZXgiKSlvLl96SW5kZXg9dC5jc3MoInpJbmRleCIpO3QuY3NzKCd6 SW5kZXgnLG8uekluZGV4KTt9LHN0b3A6ZnVuY3Rpb24oZXZlbnQsdWkpe3ZhciBv PSQodGhpcykuZGF0YSgiZHJhZ2dhYmxlIikub3B0aW9ucztpZihvLl96SW5kZXgp JCh1aS5oZWxwZXIpLmNzcygnekluZGV4JyxvLl96SW5kZXgpO319KTt9KShqUXVl cnkpOyhmdW5jdGlvbigkKXskLndpZGdldCgidWkucmVzaXphYmxlIiwkLmV4dGVu ZCh7fSwkLnVpLm1vdXNlLHtfaW5pdDpmdW5jdGlvbigpe3ZhciBzZWxmPXRoaXMs bz10aGlzLm9wdGlvbnM7dGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1yZXNpemFi bGUiKTskLmV4dGVuZCh0aGlzLHtfYXNwZWN0UmF0aW86ISEoby5hc3BlY3RSYXRp byksYXNwZWN0UmF0aW86by5hc3BlY3RSYXRpbyxvcmlnaW5hbEVsZW1lbnQ6dGhp cy5lbGVtZW50LF9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzOltdLF9oZWxw ZXI6by5oZWxwZXJ8fG8uZ2hvc3R8fG8uYW5pbWF0ZT9vLmhlbHBlcnx8J3VpLXJl c2l6YWJsZS1oZWxwZXInOm51bGx9KTtpZih0aGlzLmVsZW1lbnRbMF0ubm9kZU5h bWUubWF0Y2goL2NhbnZhc3x0ZXh0YXJlYXxpbnB1dHxzZWxlY3R8YnV0dG9ufGlt Zy9pKSl7aWYoL3JlbGF0aXZlLy50ZXN0KHRoaXMuZWxlbWVudC5jc3MoJ3Bvc2l0 aW9uJykpJiYkLmJyb3dzZXIub3BlcmEpCnRoaXMuZWxlbWVudC5jc3Moe3Bvc2l0 aW9uOidyZWxhdGl2ZScsdG9wOidhdXRvJyxsZWZ0OidhdXRvJ30pO3RoaXMuZWxl bWVudC53cmFwKCQoJzxkaXYgY2xhc3M9InVpLXdyYXBwZXIiIHN0eWxlPSJvdmVy ZmxvdzogaGlkZGVuOyI+PC9kaXY+JykuY3NzKHtwb3NpdGlvbjp0aGlzLmVsZW1l bnQuY3NzKCdwb3NpdGlvbicpLHdpZHRoOnRoaXMuZWxlbWVudC5vdXRlcldpZHRo KCksaGVpZ2h0OnRoaXMuZWxlbWVudC5vdXRlckhlaWdodCgpLHRvcDp0aGlzLmVs ZW1lbnQuY3NzKCd0b3AnKSxsZWZ0OnRoaXMuZWxlbWVudC5jc3MoJ2xlZnQnKX0p KTt0aGlzLmVsZW1lbnQ9dGhpcy5lbGVtZW50LnBhcmVudCgpLmRhdGEoInJlc2l6 YWJsZSIsdGhpcy5lbGVtZW50LmRhdGEoJ3Jlc2l6YWJsZScpKTt0aGlzLmVsZW1l bnRJc1dyYXBwZXI9dHJ1ZTt0aGlzLmVsZW1lbnQuY3NzKHttYXJnaW5MZWZ0OnRo aXMub3JpZ2luYWxFbGVtZW50LmNzcygibWFyZ2luTGVmdCIpLG1hcmdpblRvcDp0 aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoIm1hcmdpblRvcCIpLG1hcmdpblJpZ2h0 OnRoaXMub3JpZ2luYWxFbGVtZW50LmNzcygibWFyZ2luUmlnaHQiKSxtYXJnaW5C b3R0b206dGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKCJtYXJnaW5Cb3R0b20iKX0p O3RoaXMub3JpZ2luYWxFbGVtZW50LmNzcyh7bWFyZ2luTGVmdDowLG1hcmdpblRv cDowLG1hcmdpblJpZ2h0OjAsbWFyZ2luQm90dG9tOjB9KTt0aGlzLm9yaWdpbmFs UmVzaXplU3R5bGU9dGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKCdyZXNpemUnKTt0 aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoJ3Jlc2l6ZScsJ25vbmUnKTt0aGlzLl9w cm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzLnB1c2godGhpcy5vcmlnaW5hbEVs ZW1lbnQuY3NzKHtwb3NpdGlvbjonc3RhdGljJyx6b29tOjEsZGlzcGxheTonYmxv Y2snfSkpO3RoaXMub3JpZ2luYWxFbGVtZW50LmNzcyh7bWFyZ2luOnRoaXMub3Jp Z2luYWxFbGVtZW50LmNzcygnbWFyZ2luJyl9KTt0aGlzLl9wcm9wb3J0aW9uYWxs eVJlc2l6ZSgpO30KdGhpcy5oYW5kbGVzPW8uaGFuZGxlc3x8KCEkKCcudWktcmVz aXphYmxlLWhhbmRsZScsdGhpcy5lbGVtZW50KS5sZW5ndGg/ImUscyxzZSI6e246 Jy51aS1yZXNpemFibGUtbicsZTonLnVpLXJlc2l6YWJsZS1lJyxzOicudWktcmVz aXphYmxlLXMnLHc6Jy51aS1yZXNpemFibGUtdycsc2U6Jy51aS1yZXNpemFibGUt c2UnLHN3OicudWktcmVzaXphYmxlLXN3JyxuZTonLnVpLXJlc2l6YWJsZS1uZScs bnc6Jy51aS1yZXNpemFibGUtbncnfSk7aWYodGhpcy5oYW5kbGVzLmNvbnN0cnVj dG9yPT1TdHJpbmcpe2lmKHRoaXMuaGFuZGxlcz09J2FsbCcpdGhpcy5oYW5kbGVz PSduLGUscyx3LHNlLHN3LG5lLG53Jzt2YXIgbj10aGlzLmhhbmRsZXMuc3BsaXQo IiwiKTt0aGlzLmhhbmRsZXM9e307Zm9yKHZhciBpPTA7aTxuLmxlbmd0aDtpKysp e3ZhciBoYW5kbGU9JC50cmltKG5baV0pLGhuYW1lPSd1aS1yZXNpemFibGUtJyto YW5kbGU7dmFyIGF4aXM9JCgnPGRpdiBjbGFzcz0idWktcmVzaXphYmxlLWhhbmRs ZSAnK2huYW1lKyciPjwvZGl2PicpO2lmKC9zd3xzZXxuZXxudy8udGVzdChoYW5k bGUpKWF4aXMuY3NzKHt6SW5kZXg6KytvLnpJbmRleH0pO2lmKCdzZSc9PWhhbmRs ZSl7YXhpcy5hZGRDbGFzcygndWktaWNvbiB1aS1pY29uLWdyaXBzbWFsbC1kaWFn b25hbC1zZScpO307dGhpcy5oYW5kbGVzW2hhbmRsZV09Jy51aS1yZXNpemFibGUt JytoYW5kbGU7dGhpcy5lbGVtZW50LmFwcGVuZChheGlzKTt9fQp0aGlzLl9yZW5k ZXJBeGlzPWZ1bmN0aW9uKHRhcmdldCl7dGFyZ2V0PXRhcmdldHx8dGhpcy5lbGVt ZW50O2Zvcih2YXIgaSBpbiB0aGlzLmhhbmRsZXMpe2lmKHRoaXMuaGFuZGxlc1tp XS5jb25zdHJ1Y3Rvcj09U3RyaW5nKQp0aGlzLmhhbmRsZXNbaV09JCh0aGlzLmhh bmRsZXNbaV0sdGhpcy5lbGVtZW50KS5zaG93KCk7aWYodGhpcy5lbGVtZW50SXNX cmFwcGVyJiZ0aGlzLm9yaWdpbmFsRWxlbWVudFswXS5ub2RlTmFtZS5tYXRjaCgv dGV4dGFyZWF8aW5wdXR8c2VsZWN0fGJ1dHRvbi9pKSl7dmFyIGF4aXM9JCh0aGlz LmhhbmRsZXNbaV0sdGhpcy5lbGVtZW50KSxwYWRXcmFwcGVyPTA7cGFkV3JhcHBl cj0vc3d8bmV8bnd8c2V8bnxzLy50ZXN0KGkpP2F4aXMub3V0ZXJIZWlnaHQoKTph eGlzLm91dGVyV2lkdGgoKTt2YXIgcGFkUG9zPVsncGFkZGluZycsL25lfG53fG4v LnRlc3QoaSk/J1RvcCc6L3NlfHN3fHMvLnRlc3QoaSk/J0JvdHRvbSc6L15lJC8u dGVzdChpKT8nUmlnaHQnOidMZWZ0J10uam9pbigiIik7dGFyZ2V0LmNzcyhwYWRQ b3MscGFkV3JhcHBlcik7dGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemUoKTt9Cmlm KCEkKHRoaXMuaGFuZGxlc1tpXSkubGVuZ3RoKQpjb250aW51ZTt9fTt0aGlzLl9y ZW5kZXJBeGlzKHRoaXMuZWxlbWVudCk7dGhpcy5faGFuZGxlcz0kKCcudWktcmVz aXphYmxlLWhhbmRsZScsdGhpcy5lbGVtZW50KS5kaXNhYmxlU2VsZWN0aW9uKCk7 dGhpcy5faGFuZGxlcy5tb3VzZW92ZXIoZnVuY3Rpb24oKXtpZighc2VsZi5yZXNp emluZyl7aWYodGhpcy5jbGFzc05hbWUpCnZhciBheGlzPXRoaXMuY2xhc3NOYW1l Lm1hdGNoKC91aS1yZXNpemFibGUtKHNlfHN3fG5lfG53fG58ZXxzfHcpL2kpO3Nl bGYuYXhpcz1heGlzJiZheGlzWzFdP2F4aXNbMV06J3NlJzt9fSk7aWYoby5hdXRv SGlkZSl7dGhpcy5faGFuZGxlcy5oaWRlKCk7JCh0aGlzLmVsZW1lbnQpLmFkZENs YXNzKCJ1aS1yZXNpemFibGUtYXV0b2hpZGUiKS5ob3ZlcihmdW5jdGlvbigpeyQo dGhpcykucmVtb3ZlQ2xhc3MoInVpLXJlc2l6YWJsZS1hdXRvaGlkZSIpO3NlbGYu X2hhbmRsZXMuc2hvdygpO30sZnVuY3Rpb24oKXtpZighc2VsZi5yZXNpemluZyl7 JCh0aGlzKS5hZGRDbGFzcygidWktcmVzaXphYmxlLWF1dG9oaWRlIik7c2VsZi5f aGFuZGxlcy5oaWRlKCk7fX0pO30KdGhpcy5fbW91c2VJbml0KCk7fSxkZXN0cm95 OmZ1bmN0aW9uKCl7dGhpcy5fbW91c2VEZXN0cm95KCk7dmFyIF9kZXN0cm95PWZ1 bmN0aW9uKGV4cCl7JChleHApLnJlbW92ZUNsYXNzKCJ1aS1yZXNpemFibGUgdWkt cmVzaXphYmxlLWRpc2FibGVkIHVpLXJlc2l6YWJsZS1yZXNpemluZyIpLnJlbW92 ZURhdGEoInJlc2l6YWJsZSIpLnVuYmluZCgiLnJlc2l6YWJsZSIpLmZpbmQoJy51 aS1yZXNpemFibGUtaGFuZGxlJykucmVtb3ZlKCk7fTtpZih0aGlzLmVsZW1lbnRJ c1dyYXBwZXIpe19kZXN0cm95KHRoaXMuZWxlbWVudCk7dmFyIHdyYXBwZXI9dGhp cy5lbGVtZW50O3dyYXBwZXIucGFyZW50KCkuYXBwZW5kKHRoaXMub3JpZ2luYWxF bGVtZW50LmNzcyh7cG9zaXRpb246d3JhcHBlci5jc3MoJ3Bvc2l0aW9uJyksd2lk dGg6d3JhcHBlci5vdXRlcldpZHRoKCksaGVpZ2h0OndyYXBwZXIub3V0ZXJIZWln aHQoKSx0b3A6d3JhcHBlci5jc3MoJ3RvcCcpLGxlZnQ6d3JhcHBlci5jc3MoJ2xl ZnQnKX0pKS5lbmQoKS5yZW1vdmUoKTt9CnRoaXMub3JpZ2luYWxFbGVtZW50LmNz cygncmVzaXplJyx0aGlzLm9yaWdpbmFsUmVzaXplU3R5bGUpO19kZXN0cm95KHRo aXMub3JpZ2luYWxFbGVtZW50KTt9LF9tb3VzZUNhcHR1cmU6ZnVuY3Rpb24oZXZl bnQpe3ZhciBoYW5kbGU9ZmFsc2U7Zm9yKHZhciBpIGluIHRoaXMuaGFuZGxlcyl7 aWYoJCh0aGlzLmhhbmRsZXNbaV0pWzBdPT1ldmVudC50YXJnZXQpaGFuZGxlPXRy dWU7fQpyZXR1cm4gdGhpcy5vcHRpb25zLmRpc2FibGVkfHwhIWhhbmRsZTt9LF9t b3VzZVN0YXJ0OmZ1bmN0aW9uKGV2ZW50KXt2YXIgbz10aGlzLm9wdGlvbnMsaW5p UG9zPXRoaXMuZWxlbWVudC5wb3NpdGlvbigpLGVsPXRoaXMuZWxlbWVudDt0aGlz LnJlc2l6aW5nPXRydWU7dGhpcy5kb2N1bWVudFNjcm9sbD17dG9wOiQoZG9jdW1l bnQpLnNjcm9sbFRvcCgpLGxlZnQ6JChkb2N1bWVudCkuc2Nyb2xsTGVmdCgpfTtp ZihlbC5pcygnLnVpLWRyYWdnYWJsZScpfHwoL2Fic29sdXRlLykudGVzdChlbC5j c3MoJ3Bvc2l0aW9uJykpKXtlbC5jc3Moe3Bvc2l0aW9uOidhYnNvbHV0ZScsdG9w OmluaVBvcy50b3AsbGVmdDppbmlQb3MubGVmdH0pO30KaWYoJC5icm93c2VyLm9w ZXJhJiYoL3JlbGF0aXZlLykudGVzdChlbC5jc3MoJ3Bvc2l0aW9uJykpKQplbC5j c3Moe3Bvc2l0aW9uOidyZWxhdGl2ZScsdG9wOidhdXRvJyxsZWZ0OidhdXRvJ30p O3RoaXMuX3JlbmRlclByb3h5KCk7dmFyIGN1cmxlZnQ9bnVtKHRoaXMuaGVscGVy LmNzcygnbGVmdCcpKSxjdXJ0b3A9bnVtKHRoaXMuaGVscGVyLmNzcygndG9wJykp O2lmKG8uY29udGFpbm1lbnQpe2N1cmxlZnQrPSQoby5jb250YWlubWVudCkuc2Ny b2xsTGVmdCgpfHwwO2N1cnRvcCs9JChvLmNvbnRhaW5tZW50KS5zY3JvbGxUb3Ao KXx8MDt9CnRoaXMub2Zmc2V0PXRoaXMuaGVscGVyLm9mZnNldCgpO3RoaXMucG9z aXRpb249e2xlZnQ6Y3VybGVmdCx0b3A6Y3VydG9wfTt0aGlzLnNpemU9dGhpcy5f aGVscGVyP3t3aWR0aDplbC5vdXRlcldpZHRoKCksaGVpZ2h0OmVsLm91dGVySGVp Z2h0KCl9Ont3aWR0aDplbC53aWR0aCgpLGhlaWdodDplbC5oZWlnaHQoKX07dGhp cy5vcmlnaW5hbFNpemU9dGhpcy5faGVscGVyP3t3aWR0aDplbC5vdXRlcldpZHRo KCksaGVpZ2h0OmVsLm91dGVySGVpZ2h0KCl9Ont3aWR0aDplbC53aWR0aCgpLGhl aWdodDplbC5oZWlnaHQoKX07dGhpcy5vcmlnaW5hbFBvc2l0aW9uPXtsZWZ0OmN1 cmxlZnQsdG9wOmN1cnRvcH07dGhpcy5zaXplRGlmZj17d2lkdGg6ZWwub3V0ZXJX aWR0aCgpLWVsLndpZHRoKCksaGVpZ2h0OmVsLm91dGVySGVpZ2h0KCktZWwuaGVp Z2h0KCl9O3RoaXMub3JpZ2luYWxNb3VzZVBvc2l0aW9uPXtsZWZ0OmV2ZW50LnBh Z2VYLHRvcDpldmVudC5wYWdlWX07dGhpcy5hc3BlY3RSYXRpbz0odHlwZW9mIG8u YXNwZWN0UmF0aW89PSdudW1iZXInKT9vLmFzcGVjdFJhdGlvOigodGhpcy5vcmln aW5hbFNpemUud2lkdGgvdGhpcy5vcmlnaW5hbFNpemUuaGVpZ2h0KXx8MSk7dmFy IGN1cnNvcj0kKCcudWktcmVzaXphYmxlLScrdGhpcy5heGlzKS5jc3MoJ2N1cnNv cicpOyQoJ2JvZHknKS5jc3MoJ2N1cnNvcicsY3Vyc29yPT0nYXV0byc/dGhpcy5h eGlzKyctcmVzaXplJzpjdXJzb3IpO2VsLmFkZENsYXNzKCJ1aS1yZXNpemFibGUt cmVzaXppbmciKTt0aGlzLl9wcm9wYWdhdGUoInN0YXJ0IixldmVudCk7cmV0dXJu IHRydWU7fSxfbW91c2VEcmFnOmZ1bmN0aW9uKGV2ZW50KXt2YXIgZWw9dGhpcy5o ZWxwZXIsbz10aGlzLm9wdGlvbnMscHJvcHM9e30sc2VsZj10aGlzLHNtcD10aGlz Lm9yaWdpbmFsTW91c2VQb3NpdGlvbixhPXRoaXMuYXhpczt2YXIgZHg9KGV2ZW50 LnBhZ2VYLXNtcC5sZWZ0KXx8MCxkeT0oZXZlbnQucGFnZVktc21wLnRvcCl8fDA7 dmFyIHRyaWdnZXI9dGhpcy5fY2hhbmdlW2FdO2lmKCF0cmlnZ2VyKXJldHVybiBm YWxzZTt2YXIgZGF0YT10cmlnZ2VyLmFwcGx5KHRoaXMsW2V2ZW50LGR4LGR5XSks aWU2PSQuYnJvd3Nlci5tc2llJiYkLmJyb3dzZXIudmVyc2lvbjw3LGNzZGlmPXRo aXMuc2l6ZURpZmY7aWYodGhpcy5fYXNwZWN0UmF0aW98fGV2ZW50LnNoaWZ0S2V5 KQpkYXRhPXRoaXMuX3VwZGF0ZVJhdGlvKGRhdGEsZXZlbnQpO2RhdGE9dGhpcy5f cmVzcGVjdFNpemUoZGF0YSxldmVudCk7dGhpcy5fcHJvcGFnYXRlKCJyZXNpemUi LGV2ZW50KTtlbC5jc3Moe3RvcDp0aGlzLnBvc2l0aW9uLnRvcCsicHgiLGxlZnQ6 dGhpcy5wb3NpdGlvbi5sZWZ0KyJweCIsd2lkdGg6dGhpcy5zaXplLndpZHRoKyJw eCIsaGVpZ2h0OnRoaXMuc2l6ZS5oZWlnaHQrInB4In0pO2lmKCF0aGlzLl9oZWxw ZXImJnRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHMubGVuZ3RoKQp0 aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZSgpO3RoaXMuX3VwZGF0ZUNhY2hlKGRh dGEpO3RoaXMuX3RyaWdnZXIoJ3Jlc2l6ZScsZXZlbnQsdGhpcy51aSgpKTtyZXR1 cm4gZmFsc2U7fSxfbW91c2VTdG9wOmZ1bmN0aW9uKGV2ZW50KXt0aGlzLnJlc2l6 aW5nPWZhbHNlO3ZhciBvPXRoaXMub3B0aW9ucyxzZWxmPXRoaXM7aWYodGhpcy5f aGVscGVyKXt2YXIgcHI9dGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50 cyxpc3RhPXByLmxlbmd0aCYmKC90ZXh0YXJlYS9pKS50ZXN0KHByWzBdLm5vZGVO YW1lKSxzb2Zmc2V0aD1pc3RhJiYkLnVpLmhhc1Njcm9sbChwclswXSwnbGVmdCcp PzA6c2VsZi5zaXplRGlmZi5oZWlnaHQsc29mZnNldHc9aXN0YT8wOnNlbGYuc2l6 ZURpZmYud2lkdGg7dmFyIHM9e3dpZHRoOihzZWxmLnNpemUud2lkdGgtc29mZnNl dHcpLGhlaWdodDooc2VsZi5zaXplLmhlaWdodC1zb2Zmc2V0aCl9LGxlZnQ9KHBh cnNlSW50KHNlbGYuZWxlbWVudC5jc3MoJ2xlZnQnKSwxMCkrKHNlbGYucG9zaXRp b24ubGVmdC1zZWxmLm9yaWdpbmFsUG9zaXRpb24ubGVmdCkpfHxudWxsLHRvcD0o cGFyc2VJbnQoc2VsZi5lbGVtZW50LmNzcygndG9wJyksMTApKyhzZWxmLnBvc2l0 aW9uLnRvcC1zZWxmLm9yaWdpbmFsUG9zaXRpb24udG9wKSl8fG51bGw7aWYoIW8u YW5pbWF0ZSkKdGhpcy5lbGVtZW50LmNzcygkLmV4dGVuZChzLHt0b3A6dG9wLGxl ZnQ6bGVmdH0pKTtzZWxmLmhlbHBlci5oZWlnaHQoc2VsZi5zaXplLmhlaWdodCk7 c2VsZi5oZWxwZXIud2lkdGgoc2VsZi5zaXplLndpZHRoKTtpZih0aGlzLl9oZWxw ZXImJiFvLmFuaW1hdGUpdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemUoKTt9CiQo J2JvZHknKS5jc3MoJ2N1cnNvcicsJ2F1dG8nKTt0aGlzLmVsZW1lbnQucmVtb3Zl Q2xhc3MoInVpLXJlc2l6YWJsZS1yZXNpemluZyIpO3RoaXMuX3Byb3BhZ2F0ZSgi c3RvcCIsZXZlbnQpO2lmKHRoaXMuX2hlbHBlcil0aGlzLmhlbHBlci5yZW1vdmUo KTtyZXR1cm4gZmFsc2U7fSxfdXBkYXRlQ2FjaGU6ZnVuY3Rpb24oZGF0YSl7dmFy IG89dGhpcy5vcHRpb25zO3RoaXMub2Zmc2V0PXRoaXMuaGVscGVyLm9mZnNldCgp O2lmKGlzTnVtYmVyKGRhdGEubGVmdCkpdGhpcy5wb3NpdGlvbi5sZWZ0PWRhdGEu bGVmdDtpZihpc051bWJlcihkYXRhLnRvcCkpdGhpcy5wb3NpdGlvbi50b3A9ZGF0 YS50b3A7aWYoaXNOdW1iZXIoZGF0YS5oZWlnaHQpKXRoaXMuc2l6ZS5oZWlnaHQ9 ZGF0YS5oZWlnaHQ7aWYoaXNOdW1iZXIoZGF0YS53aWR0aCkpdGhpcy5zaXplLndp ZHRoPWRhdGEud2lkdGg7fSxfdXBkYXRlUmF0aW86ZnVuY3Rpb24oZGF0YSxldmVu dCl7dmFyIG89dGhpcy5vcHRpb25zLGNwb3M9dGhpcy5wb3NpdGlvbixjc2l6ZT10 aGlzLnNpemUsYT10aGlzLmF4aXM7aWYoZGF0YS5oZWlnaHQpZGF0YS53aWR0aD0o Y3NpemUuaGVpZ2h0KnRoaXMuYXNwZWN0UmF0aW8pO2Vsc2UgaWYoZGF0YS53aWR0 aClkYXRhLmhlaWdodD0oY3NpemUud2lkdGgvdGhpcy5hc3BlY3RSYXRpbyk7aWYo YT09J3N3Jyl7ZGF0YS5sZWZ0PWNwb3MubGVmdCsoY3NpemUud2lkdGgtZGF0YS53 aWR0aCk7ZGF0YS50b3A9bnVsbDt9CmlmKGE9PSdudycpe2RhdGEudG9wPWNwb3Mu dG9wKyhjc2l6ZS5oZWlnaHQtZGF0YS5oZWlnaHQpO2RhdGEubGVmdD1jcG9zLmxl ZnQrKGNzaXplLndpZHRoLWRhdGEud2lkdGgpO30KcmV0dXJuIGRhdGE7fSxfcmVz cGVjdFNpemU6ZnVuY3Rpb24oZGF0YSxldmVudCl7dmFyIGVsPXRoaXMuaGVscGVy LG89dGhpcy5vcHRpb25zLHBSYXRpbz10aGlzLl9hc3BlY3RSYXRpb3x8ZXZlbnQu c2hpZnRLZXksYT10aGlzLmF4aXMsaXNtYXh3PWlzTnVtYmVyKGRhdGEud2lkdGgp JiZvLm1heFdpZHRoJiYoby5tYXhXaWR0aDxkYXRhLndpZHRoKSxpc21heGg9aXNO dW1iZXIoZGF0YS5oZWlnaHQpJiZvLm1heEhlaWdodCYmKG8ubWF4SGVpZ2h0PGRh dGEuaGVpZ2h0KSxpc21pbnc9aXNOdW1iZXIoZGF0YS53aWR0aCkmJm8ubWluV2lk dGgmJihvLm1pbldpZHRoPmRhdGEud2lkdGgpLGlzbWluaD1pc051bWJlcihkYXRh LmhlaWdodCkmJm8ubWluSGVpZ2h0JiYoby5taW5IZWlnaHQ+ZGF0YS5oZWlnaHQp O2lmKGlzbWludylkYXRhLndpZHRoPW8ubWluV2lkdGg7aWYoaXNtaW5oKWRhdGEu aGVpZ2h0PW8ubWluSGVpZ2h0O2lmKGlzbWF4dylkYXRhLndpZHRoPW8ubWF4V2lk dGg7aWYoaXNtYXhoKWRhdGEuaGVpZ2h0PW8ubWF4SGVpZ2h0O3ZhciBkdz10aGlz Lm9yaWdpbmFsUG9zaXRpb24ubGVmdCt0aGlzLm9yaWdpbmFsU2l6ZS53aWR0aCxk aD10aGlzLnBvc2l0aW9uLnRvcCt0aGlzLnNpemUuaGVpZ2h0O3ZhciBjdz0vc3d8 bnd8dy8udGVzdChhKSxjaD0vbnd8bmV8bi8udGVzdChhKTtpZihpc21pbncmJmN3 KWRhdGEubGVmdD1kdy1vLm1pbldpZHRoO2lmKGlzbWF4dyYmY3cpZGF0YS5sZWZ0 PWR3LW8ubWF4V2lkdGg7aWYoaXNtaW5oJiZjaClkYXRhLnRvcD1kaC1vLm1pbkhl aWdodDtpZihpc21heGgmJmNoKWRhdGEudG9wPWRoLW8ubWF4SGVpZ2h0O3ZhciBp c05vdHdoPSFkYXRhLndpZHRoJiYhZGF0YS5oZWlnaHQ7aWYoaXNOb3R3aCYmIWRh dGEubGVmdCYmZGF0YS50b3ApZGF0YS50b3A9bnVsbDtlbHNlIGlmKGlzTm90d2gm JiFkYXRhLnRvcCYmZGF0YS5sZWZ0KWRhdGEubGVmdD1udWxsO3JldHVybiBkYXRh O30sX3Byb3BvcnRpb25hbGx5UmVzaXplOmZ1bmN0aW9uKCl7dmFyIG89dGhpcy5v cHRpb25zO2lmKCF0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzLmxl bmd0aClyZXR1cm47dmFyIGVsZW1lbnQ9dGhpcy5oZWxwZXJ8fHRoaXMuZWxlbWVu dDtmb3IodmFyIGk9MDtpPHRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVu dHMubGVuZ3RoO2krKyl7dmFyIHByZWw9dGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNp emVFbGVtZW50c1tpXTtpZighdGhpcy5ib3JkZXJEaWYpe3ZhciBiPVtwcmVsLmNz cygnYm9yZGVyVG9wV2lkdGgnKSxwcmVsLmNzcygnYm9yZGVyUmlnaHRXaWR0aCcp LHByZWwuY3NzKCdib3JkZXJCb3R0b21XaWR0aCcpLHByZWwuY3NzKCdib3JkZXJM ZWZ0V2lkdGgnKV0scD1bcHJlbC5jc3MoJ3BhZGRpbmdUb3AnKSxwcmVsLmNzcygn cGFkZGluZ1JpZ2h0JykscHJlbC5jc3MoJ3BhZGRpbmdCb3R0b20nKSxwcmVsLmNz cygncGFkZGluZ0xlZnQnKV07dGhpcy5ib3JkZXJEaWY9JC5tYXAoYixmdW5jdGlv bih2LGkpe3ZhciBib3JkZXI9cGFyc2VJbnQodiwxMCl8fDAscGFkZGluZz1wYXJz ZUludChwW2ldLDEwKXx8MDtyZXR1cm4gYm9yZGVyK3BhZGRpbmc7fSk7fQppZigk LmJyb3dzZXIubXNpZSYmISghKCQoZWxlbWVudCkuaXMoJzpoaWRkZW4nKXx8JChl bGVtZW50KS5wYXJlbnRzKCc6aGlkZGVuJykubGVuZ3RoKSkpCmNvbnRpbnVlO3By ZWwuY3NzKHtoZWlnaHQ6KGVsZW1lbnQuaGVpZ2h0KCktdGhpcy5ib3JkZXJEaWZb MF0tdGhpcy5ib3JkZXJEaWZbMl0pfHwwLHdpZHRoOihlbGVtZW50LndpZHRoKCkt dGhpcy5ib3JkZXJEaWZbMV0tdGhpcy5ib3JkZXJEaWZbM10pfHwwfSk7fTt9LF9y ZW5kZXJQcm94eTpmdW5jdGlvbigpe3ZhciBlbD10aGlzLmVsZW1lbnQsbz10aGlz Lm9wdGlvbnM7dGhpcy5lbGVtZW50T2Zmc2V0PWVsLm9mZnNldCgpO2lmKHRoaXMu X2hlbHBlcil7dGhpcy5oZWxwZXI9dGhpcy5oZWxwZXJ8fCQoJzxkaXYgc3R5bGU9 Im92ZXJmbG93OmhpZGRlbjsiPjwvZGl2PicpO3ZhciBpZTY9JC5icm93c2VyLm1z aWUmJiQuYnJvd3Nlci52ZXJzaW9uPDcsaWU2b2Zmc2V0PShpZTY/MTowKSxweHlv ZmZzZXQ9KGllNj8yOi0xKTt0aGlzLmhlbHBlci5hZGRDbGFzcyh0aGlzLl9oZWxw ZXIpLmNzcyh7d2lkdGg6dGhpcy5lbGVtZW50Lm91dGVyV2lkdGgoKStweHlvZmZz ZXQsaGVpZ2h0OnRoaXMuZWxlbWVudC5vdXRlckhlaWdodCgpK3B4eW9mZnNldCxw b3NpdGlvbjonYWJzb2x1dGUnLGxlZnQ6dGhpcy5lbGVtZW50T2Zmc2V0LmxlZnQt aWU2b2Zmc2V0KydweCcsdG9wOnRoaXMuZWxlbWVudE9mZnNldC50b3AtaWU2b2Zm c2V0KydweCcsekluZGV4Oisrby56SW5kZXh9KTt0aGlzLmhlbHBlci5hcHBlbmRU bygiYm9keSIpLmRpc2FibGVTZWxlY3Rpb24oKTt9ZWxzZXt0aGlzLmhlbHBlcj10 aGlzLmVsZW1lbnQ7fX0sX2NoYW5nZTp7ZTpmdW5jdGlvbihldmVudCxkeCxkeSl7 cmV0dXJue3dpZHRoOnRoaXMub3JpZ2luYWxTaXplLndpZHRoK2R4fTt9LHc6ZnVu Y3Rpb24oZXZlbnQsZHgsZHkpe3ZhciBvPXRoaXMub3B0aW9ucyxjcz10aGlzLm9y aWdpbmFsU2l6ZSxzcD10aGlzLm9yaWdpbmFsUG9zaXRpb247cmV0dXJue2xlZnQ6 c3AubGVmdCtkeCx3aWR0aDpjcy53aWR0aC1keH07fSxuOmZ1bmN0aW9uKGV2ZW50 LGR4LGR5KXt2YXIgbz10aGlzLm9wdGlvbnMsY3M9dGhpcy5vcmlnaW5hbFNpemUs c3A9dGhpcy5vcmlnaW5hbFBvc2l0aW9uO3JldHVybnt0b3A6c3AudG9wK2R5LGhl aWdodDpjcy5oZWlnaHQtZHl9O30sczpmdW5jdGlvbihldmVudCxkeCxkeSl7cmV0 dXJue2hlaWdodDp0aGlzLm9yaWdpbmFsU2l6ZS5oZWlnaHQrZHl9O30sc2U6ZnVu Y3Rpb24oZXZlbnQsZHgsZHkpe3JldHVybiAkLmV4dGVuZCh0aGlzLl9jaGFuZ2Uu cy5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fY2hhbmdlLmUuYXBwbHkodGhp cyxbZXZlbnQsZHgsZHldKSk7fSxzdzpmdW5jdGlvbihldmVudCxkeCxkeSl7cmV0 dXJuICQuZXh0ZW5kKHRoaXMuX2NoYW5nZS5zLmFwcGx5KHRoaXMsYXJndW1lbnRz KSx0aGlzLl9jaGFuZ2Uudy5hcHBseSh0aGlzLFtldmVudCxkeCxkeV0pKTt9LG5l OmZ1bmN0aW9uKGV2ZW50LGR4LGR5KXtyZXR1cm4gJC5leHRlbmQodGhpcy5fY2hh bmdlLm4uYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX2NoYW5nZS5lLmFwcGx5 KHRoaXMsW2V2ZW50LGR4LGR5XSkpO30sbnc6ZnVuY3Rpb24oZXZlbnQsZHgsZHkp e3JldHVybiAkLmV4dGVuZCh0aGlzLl9jaGFuZ2Uubi5hcHBseSh0aGlzLGFyZ3Vt ZW50cyksdGhpcy5fY2hhbmdlLncuYXBwbHkodGhpcyxbZXZlbnQsZHgsZHldKSk7 fX0sX3Byb3BhZ2F0ZTpmdW5jdGlvbihuLGV2ZW50KXskLnVpLnBsdWdpbi5jYWxs KHRoaXMsbixbZXZlbnQsdGhpcy51aSgpXSk7KG4hPSJyZXNpemUiJiZ0aGlzLl90 cmlnZ2VyKG4sZXZlbnQsdGhpcy51aSgpKSk7fSxwbHVnaW5zOnt9LHVpOmZ1bmN0 aW9uKCl7cmV0dXJue29yaWdpbmFsRWxlbWVudDp0aGlzLm9yaWdpbmFsRWxlbWVu dCxlbGVtZW50OnRoaXMuZWxlbWVudCxoZWxwZXI6dGhpcy5oZWxwZXIscG9zaXRp b246dGhpcy5wb3NpdGlvbixzaXplOnRoaXMuc2l6ZSxvcmlnaW5hbFNpemU6dGhp cy5vcmlnaW5hbFNpemUsb3JpZ2luYWxQb3NpdGlvbjp0aGlzLm9yaWdpbmFsUG9z aXRpb259O319KSk7JC5leHRlbmQoJC51aS5yZXNpemFibGUse3ZlcnNpb246IjEu Ny4xIixldmVudFByZWZpeDoicmVzaXplIixkZWZhdWx0czp7YWxzb1Jlc2l6ZTpm YWxzZSxhbmltYXRlOmZhbHNlLGFuaW1hdGVEdXJhdGlvbjoic2xvdyIsYW5pbWF0 ZUVhc2luZzoic3dpbmciLGFzcGVjdFJhdGlvOmZhbHNlLGF1dG9IaWRlOmZhbHNl LGNhbmNlbDoiOmlucHV0LG9wdGlvbiIsY29udGFpbm1lbnQ6ZmFsc2UsZGVsYXk6 MCxkaXN0YW5jZToxLGdob3N0OmZhbHNlLGdyaWQ6ZmFsc2UsaGFuZGxlczoiZSxz LHNlIixoZWxwZXI6ZmFsc2UsbWF4SGVpZ2h0Om51bGwsbWF4V2lkdGg6bnVsbCxt aW5IZWlnaHQ6MTAsbWluV2lkdGg6MTAsekluZGV4OjEwMDB9fSk7JC51aS5wbHVn aW4uYWRkKCJyZXNpemFibGUiLCJhbHNvUmVzaXplIix7c3RhcnQ6ZnVuY3Rpb24o ZXZlbnQsdWkpe3ZhciBzZWxmPSQodGhpcykuZGF0YSgicmVzaXphYmxlIiksbz1z ZWxmLm9wdGlvbnM7X3N0b3JlPWZ1bmN0aW9uKGV4cCl7JChleHApLmVhY2goZnVu Y3Rpb24oKXskKHRoaXMpLmRhdGEoInJlc2l6YWJsZS1hbHNvcmVzaXplIix7d2lk dGg6cGFyc2VJbnQoJCh0aGlzKS53aWR0aCgpLDEwKSxoZWlnaHQ6cGFyc2VJbnQo JCh0aGlzKS5oZWlnaHQoKSwxMCksbGVmdDpwYXJzZUludCgkKHRoaXMpLmNzcygn bGVmdCcpLDEwKSx0b3A6cGFyc2VJbnQoJCh0aGlzKS5jc3MoJ3RvcCcpLDEwKX0p O30pO307aWYodHlwZW9mKG8uYWxzb1Jlc2l6ZSk9PSdvYmplY3QnJiYhby5hbHNv UmVzaXplLnBhcmVudE5vZGUpe2lmKG8uYWxzb1Jlc2l6ZS5sZW5ndGgpe28uYWxz b1Jlc2l6ZT1vLmFsc29SZXNpemVbMF07X3N0b3JlKG8uYWxzb1Jlc2l6ZSk7fQpl bHNleyQuZWFjaChvLmFsc29SZXNpemUsZnVuY3Rpb24oZXhwLGMpe19zdG9yZShl eHApO30pO319ZWxzZXtfc3RvcmUoby5hbHNvUmVzaXplKTt9fSxyZXNpemU6ZnVu Y3Rpb24oZXZlbnQsdWkpe3ZhciBzZWxmPSQodGhpcykuZGF0YSgicmVzaXphYmxl Iiksbz1zZWxmLm9wdGlvbnMsb3M9c2VsZi5vcmlnaW5hbFNpemUsb3A9c2VsZi5v cmlnaW5hbFBvc2l0aW9uO3ZhciBkZWx0YT17aGVpZ2h0OihzZWxmLnNpemUuaGVp Z2h0LW9zLmhlaWdodCl8fDAsd2lkdGg6KHNlbGYuc2l6ZS53aWR0aC1vcy53aWR0 aCl8fDAsdG9wOihzZWxmLnBvc2l0aW9uLnRvcC1vcC50b3ApfHwwLGxlZnQ6KHNl bGYucG9zaXRpb24ubGVmdC1vcC5sZWZ0KXx8MH0sX2Fsc29SZXNpemU9ZnVuY3Rp b24oZXhwLGMpeyQoZXhwKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGVsPSQodGhpcyks c3RhcnQ9JCh0aGlzKS5kYXRhKCJyZXNpemFibGUtYWxzb3Jlc2l6ZSIpLHN0eWxl PXt9LGNzcz1jJiZjLmxlbmd0aD9jOlsnd2lkdGgnLCdoZWlnaHQnLCd0b3AnLCds ZWZ0J107JC5lYWNoKGNzc3x8Wyd3aWR0aCcsJ2hlaWdodCcsJ3RvcCcsJ2xlZnQn XSxmdW5jdGlvbihpLHByb3Ape3ZhciBzdW09KHN0YXJ0W3Byb3BdfHwwKSsoZGVs dGFbcHJvcF18fDApO2lmKHN1bSYmc3VtPj0wKQpzdHlsZVtwcm9wXT1zdW18fG51 bGw7fSk7aWYoL3JlbGF0aXZlLy50ZXN0KGVsLmNzcygncG9zaXRpb24nKSkmJiQu YnJvd3Nlci5vcGVyYSl7c2VsZi5fcmV2ZXJ0VG9SZWxhdGl2ZVBvc2l0aW9uPXRy dWU7ZWwuY3NzKHtwb3NpdGlvbjonYWJzb2x1dGUnLHRvcDonYXV0bycsbGVmdDon YXV0byd9KTt9CmVsLmNzcyhzdHlsZSk7fSk7fTtpZih0eXBlb2Yoby5hbHNvUmVz aXplKT09J29iamVjdCcmJiFvLmFsc29SZXNpemUubm9kZVR5cGUpeyQuZWFjaChv LmFsc29SZXNpemUsZnVuY3Rpb24oZXhwLGMpe19hbHNvUmVzaXplKGV4cCxjKTt9 KTt9ZWxzZXtfYWxzb1Jlc2l6ZShvLmFsc29SZXNpemUpO319LHN0b3A6ZnVuY3Rp b24oZXZlbnQsdWkpe3ZhciBzZWxmPSQodGhpcykuZGF0YSgicmVzaXphYmxlIik7 aWYoc2VsZi5fcmV2ZXJ0VG9SZWxhdGl2ZVBvc2l0aW9uJiYkLmJyb3dzZXIub3Bl cmEpe3NlbGYuX3JldmVydFRvUmVsYXRpdmVQb3NpdGlvbj1mYWxzZTtlbC5jc3Mo e3Bvc2l0aW9uOidyZWxhdGl2ZSd9KTt9CiQodGhpcykucmVtb3ZlRGF0YSgicmVz aXphYmxlLWFsc29yZXNpemUtc3RhcnQiKTt9fSk7JC51aS5wbHVnaW4uYWRkKCJy ZXNpemFibGUiLCJhbmltYXRlIix7c3RvcDpmdW5jdGlvbihldmVudCx1aSl7dmFy IHNlbGY9JCh0aGlzKS5kYXRhKCJyZXNpemFibGUiKSxvPXNlbGYub3B0aW9uczt2 YXIgcHI9c2VsZi5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cyxpc3RhPXBy Lmxlbmd0aCYmKC90ZXh0YXJlYS9pKS50ZXN0KHByWzBdLm5vZGVOYW1lKSxzb2Zm c2V0aD1pc3RhJiYkLnVpLmhhc1Njcm9sbChwclswXSwnbGVmdCcpPzA6c2VsZi5z aXplRGlmZi5oZWlnaHQsc29mZnNldHc9aXN0YT8wOnNlbGYuc2l6ZURpZmYud2lk dGg7dmFyIHN0eWxlPXt3aWR0aDooc2VsZi5zaXplLndpZHRoLXNvZmZzZXR3KSxo ZWlnaHQ6KHNlbGYuc2l6ZS5oZWlnaHQtc29mZnNldGgpfSxsZWZ0PShwYXJzZUlu dChzZWxmLmVsZW1lbnQuY3NzKCdsZWZ0JyksMTApKyhzZWxmLnBvc2l0aW9uLmxl ZnQtc2VsZi5vcmlnaW5hbFBvc2l0aW9uLmxlZnQpKXx8bnVsbCx0b3A9KHBhcnNl SW50KHNlbGYuZWxlbWVudC5jc3MoJ3RvcCcpLDEwKSsoc2VsZi5wb3NpdGlvbi50 b3Atc2VsZi5vcmlnaW5hbFBvc2l0aW9uLnRvcCkpfHxudWxsO3NlbGYuZWxlbWVu dC5hbmltYXRlKCQuZXh0ZW5kKHN0eWxlLHRvcCYmbGVmdD97dG9wOnRvcCxsZWZ0 OmxlZnR9Ont9KSx7ZHVyYXRpb246by5hbmltYXRlRHVyYXRpb24sZWFzaW5nOm8u YW5pbWF0ZUVhc2luZyxzdGVwOmZ1bmN0aW9uKCl7dmFyIGRhdGE9e3dpZHRoOnBh cnNlSW50KHNlbGYuZWxlbWVudC5jc3MoJ3dpZHRoJyksMTApLGhlaWdodDpwYXJz ZUludChzZWxmLmVsZW1lbnQuY3NzKCdoZWlnaHQnKSwxMCksdG9wOnBhcnNlSW50 KHNlbGYuZWxlbWVudC5jc3MoJ3RvcCcpLDEwKSxsZWZ0OnBhcnNlSW50KHNlbGYu ZWxlbWVudC5jc3MoJ2xlZnQnKSwxMCl9O2lmKHByJiZwci5sZW5ndGgpJChwclsw XSkuY3NzKHt3aWR0aDpkYXRhLndpZHRoLGhlaWdodDpkYXRhLmhlaWdodH0pO3Nl bGYuX3VwZGF0ZUNhY2hlKGRhdGEpO3NlbGYuX3Byb3BhZ2F0ZSgicmVzaXplIixl dmVudCk7fX0pO319KTskLnVpLnBsdWdpbi5hZGQoInJlc2l6YWJsZSIsImNvbnRh aW5tZW50Iix7c3RhcnQ6ZnVuY3Rpb24oZXZlbnQsdWkpe3ZhciBzZWxmPSQodGhp cykuZGF0YSgicmVzaXphYmxlIiksbz1zZWxmLm9wdGlvbnMsZWw9c2VsZi5lbGVt ZW50O3ZhciBvYz1vLmNvbnRhaW5tZW50LGNlPShvYyBpbnN0YW5jZW9mICQpP29j LmdldCgwKTooL3BhcmVudC8udGVzdChvYykpP2VsLnBhcmVudCgpLmdldCgwKTpv YztpZighY2UpcmV0dXJuO3NlbGYuY29udGFpbmVyRWxlbWVudD0kKGNlKTtpZigv ZG9jdW1lbnQvLnRlc3Qob2MpfHxvYz09ZG9jdW1lbnQpe3NlbGYuY29udGFpbmVy T2Zmc2V0PXtsZWZ0OjAsdG9wOjB9O3NlbGYuY29udGFpbmVyUG9zaXRpb249e2xl ZnQ6MCx0b3A6MH07c2VsZi5wYXJlbnREYXRhPXtlbGVtZW50OiQoZG9jdW1lbnQp LGxlZnQ6MCx0b3A6MCx3aWR0aDokKGRvY3VtZW50KS53aWR0aCgpLGhlaWdodDok KGRvY3VtZW50KS5oZWlnaHQoKXx8ZG9jdW1lbnQuYm9keS5wYXJlbnROb2RlLnNj cm9sbEhlaWdodH07fQplbHNle3ZhciBlbGVtZW50PSQoY2UpLHA9W107JChbIlRv cCIsIlJpZ2h0IiwiTGVmdCIsIkJvdHRvbSJdKS5lYWNoKGZ1bmN0aW9uKGksbmFt ZSl7cFtpXT1udW0oZWxlbWVudC5jc3MoInBhZGRpbmciK25hbWUpKTt9KTtzZWxm LmNvbnRhaW5lck9mZnNldD1lbGVtZW50Lm9mZnNldCgpO3NlbGYuY29udGFpbmVy UG9zaXRpb249ZWxlbWVudC5wb3NpdGlvbigpO3NlbGYuY29udGFpbmVyU2l6ZT17 aGVpZ2h0OihlbGVtZW50LmlubmVySGVpZ2h0KCktcFszXSksd2lkdGg6KGVsZW1l bnQuaW5uZXJXaWR0aCgpLXBbMV0pfTt2YXIgY289c2VsZi5jb250YWluZXJPZmZz ZXQsY2g9c2VsZi5jb250YWluZXJTaXplLmhlaWdodCxjdz1zZWxmLmNvbnRhaW5l clNpemUud2lkdGgsd2lkdGg9KCQudWkuaGFzU2Nyb2xsKGNlLCJsZWZ0Iik/Y2Uu c2Nyb2xsV2lkdGg6Y3cpLGhlaWdodD0oJC51aS5oYXNTY3JvbGwoY2UpP2NlLnNj cm9sbEhlaWdodDpjaCk7c2VsZi5wYXJlbnREYXRhPXtlbGVtZW50OmNlLGxlZnQ6 Y28ubGVmdCx0b3A6Y28udG9wLHdpZHRoOndpZHRoLGhlaWdodDpoZWlnaHR9O319 LHJlc2l6ZTpmdW5jdGlvbihldmVudCx1aSl7dmFyIHNlbGY9JCh0aGlzKS5kYXRh KCJyZXNpemFibGUiKSxvPXNlbGYub3B0aW9ucyxwcz1zZWxmLmNvbnRhaW5lclNp emUsY289c2VsZi5jb250YWluZXJPZmZzZXQsY3M9c2VsZi5zaXplLGNwPXNlbGYu cG9zaXRpb24scFJhdGlvPXNlbGYuX2FzcGVjdFJhdGlvfHxldmVudC5zaGlmdEtl eSxjb3A9e3RvcDowLGxlZnQ6MH0sY2U9c2VsZi5jb250YWluZXJFbGVtZW50O2lm KGNlWzBdIT1kb2N1bWVudCYmKC9zdGF0aWMvKS50ZXN0KGNlLmNzcygncG9zaXRp b24nKSkpY29wPWNvO2lmKGNwLmxlZnQ8KHNlbGYuX2hlbHBlcj9jby5sZWZ0OjAp KXtzZWxmLnNpemUud2lkdGg9c2VsZi5zaXplLndpZHRoKyhzZWxmLl9oZWxwZXI/ KHNlbGYucG9zaXRpb24ubGVmdC1jby5sZWZ0KTooc2VsZi5wb3NpdGlvbi5sZWZ0 LWNvcC5sZWZ0KSk7aWYocFJhdGlvKXNlbGYuc2l6ZS5oZWlnaHQ9c2VsZi5zaXpl LndpZHRoL28uYXNwZWN0UmF0aW87c2VsZi5wb3NpdGlvbi5sZWZ0PW8uaGVscGVy P2NvLmxlZnQ6MDt9CmlmKGNwLnRvcDwoc2VsZi5faGVscGVyP2NvLnRvcDowKSl7 c2VsZi5zaXplLmhlaWdodD1zZWxmLnNpemUuaGVpZ2h0KyhzZWxmLl9oZWxwZXI/ KHNlbGYucG9zaXRpb24udG9wLWNvLnRvcCk6c2VsZi5wb3NpdGlvbi50b3ApO2lm KHBSYXRpbylzZWxmLnNpemUud2lkdGg9c2VsZi5zaXplLmhlaWdodCpvLmFzcGVj dFJhdGlvO3NlbGYucG9zaXRpb24udG9wPXNlbGYuX2hlbHBlcj9jby50b3A6MDt9 CnNlbGYub2Zmc2V0LmxlZnQ9c2VsZi5wYXJlbnREYXRhLmxlZnQrc2VsZi5wb3Np dGlvbi5sZWZ0O3NlbGYub2Zmc2V0LnRvcD1zZWxmLnBhcmVudERhdGEudG9wK3Nl bGYucG9zaXRpb24udG9wO3ZhciB3b3NldD1NYXRoLmFicygoc2VsZi5faGVscGVy P3NlbGYub2Zmc2V0LmxlZnQtY29wLmxlZnQ6KHNlbGYub2Zmc2V0LmxlZnQtY29w LmxlZnQpKStzZWxmLnNpemVEaWZmLndpZHRoKSxob3NldD1NYXRoLmFicygoc2Vs Zi5faGVscGVyP3NlbGYub2Zmc2V0LnRvcC1jb3AudG9wOihzZWxmLm9mZnNldC50 b3AtY28udG9wKSkrc2VsZi5zaXplRGlmZi5oZWlnaHQpO3ZhciBpc1BhcmVudD1z ZWxmLmNvbnRhaW5lckVsZW1lbnQuZ2V0KDApPT1zZWxmLmVsZW1lbnQucGFyZW50 KCkuZ2V0KDApLGlzT2Zmc2V0UmVsYXRpdmU9L3JlbGF0aXZlfGFic29sdXRlLy50 ZXN0KHNlbGYuY29udGFpbmVyRWxlbWVudC5jc3MoJ3Bvc2l0aW9uJykpO2lmKGlz UGFyZW50JiZpc09mZnNldFJlbGF0aXZlKXdvc2V0LT1zZWxmLnBhcmVudERhdGEu bGVmdDtpZih3b3NldCtzZWxmLnNpemUud2lkdGg+PXNlbGYucGFyZW50RGF0YS53 aWR0aCl7c2VsZi5zaXplLndpZHRoPXNlbGYucGFyZW50RGF0YS53aWR0aC13b3Nl dDtpZihwUmF0aW8pc2VsZi5zaXplLmhlaWdodD1zZWxmLnNpemUud2lkdGgvc2Vs Zi5hc3BlY3RSYXRpbzt9CmlmKGhvc2V0K3NlbGYuc2l6ZS5oZWlnaHQ+PXNlbGYu cGFyZW50RGF0YS5oZWlnaHQpe3NlbGYuc2l6ZS5oZWlnaHQ9c2VsZi5wYXJlbnRE YXRhLmhlaWdodC1ob3NldDtpZihwUmF0aW8pc2VsZi5zaXplLndpZHRoPXNlbGYu c2l6ZS5oZWlnaHQqc2VsZi5hc3BlY3RSYXRpbzt9fSxzdG9wOmZ1bmN0aW9uKGV2 ZW50LHVpKXt2YXIgc2VsZj0kKHRoaXMpLmRhdGEoInJlc2l6YWJsZSIpLG89c2Vs Zi5vcHRpb25zLGNwPXNlbGYucG9zaXRpb24sY289c2VsZi5jb250YWluZXJPZmZz ZXQsY29wPXNlbGYuY29udGFpbmVyUG9zaXRpb24sY2U9c2VsZi5jb250YWluZXJF bGVtZW50O3ZhciBoZWxwZXI9JChzZWxmLmhlbHBlciksaG89aGVscGVyLm9mZnNl dCgpLHc9aGVscGVyLm91dGVyV2lkdGgoKS1zZWxmLnNpemVEaWZmLndpZHRoLGg9 aGVscGVyLm91dGVySGVpZ2h0KCktc2VsZi5zaXplRGlmZi5oZWlnaHQ7aWYoc2Vs Zi5faGVscGVyJiYhby5hbmltYXRlJiYoL3JlbGF0aXZlLykudGVzdChjZS5jc3Mo J3Bvc2l0aW9uJykpKQokKHRoaXMpLmNzcyh7bGVmdDpoby5sZWZ0LWNvcC5sZWZ0 LWNvLmxlZnQsd2lkdGg6dyxoZWlnaHQ6aH0pO2lmKHNlbGYuX2hlbHBlciYmIW8u YW5pbWF0ZSYmKC9zdGF0aWMvKS50ZXN0KGNlLmNzcygncG9zaXRpb24nKSkpCiQo dGhpcykuY3NzKHtsZWZ0OmhvLmxlZnQtY29wLmxlZnQtY28ubGVmdCx3aWR0aDp3 LGhlaWdodDpofSk7fX0pOyQudWkucGx1Z2luLmFkZCgicmVzaXphYmxlIiwiZ2hv c3QiLHtzdGFydDpmdW5jdGlvbihldmVudCx1aSl7dmFyIHNlbGY9JCh0aGlzKS5k YXRhKCJyZXNpemFibGUiKSxvPXNlbGYub3B0aW9ucyxjcz1zZWxmLnNpemU7c2Vs Zi5naG9zdD1zZWxmLm9yaWdpbmFsRWxlbWVudC5jbG9uZSgpO3NlbGYuZ2hvc3Qu Y3NzKHtvcGFjaXR5Oi4yNSxkaXNwbGF5OidibG9jaycscG9zaXRpb246J3JlbGF0 aXZlJyxoZWlnaHQ6Y3MuaGVpZ2h0LHdpZHRoOmNzLndpZHRoLG1hcmdpbjowLGxl ZnQ6MCx0b3A6MH0pLmFkZENsYXNzKCd1aS1yZXNpemFibGUtZ2hvc3QnKS5hZGRD bGFzcyh0eXBlb2Ygby5naG9zdD09J3N0cmluZyc/by5naG9zdDonJyk7c2VsZi5n aG9zdC5hcHBlbmRUbyhzZWxmLmhlbHBlcik7fSxyZXNpemU6ZnVuY3Rpb24oZXZl bnQsdWkpe3ZhciBzZWxmPSQodGhpcykuZGF0YSgicmVzaXphYmxlIiksbz1zZWxm Lm9wdGlvbnM7aWYoc2VsZi5naG9zdClzZWxmLmdob3N0LmNzcyh7cG9zaXRpb246 J3JlbGF0aXZlJyxoZWlnaHQ6c2VsZi5zaXplLmhlaWdodCx3aWR0aDpzZWxmLnNp emUud2lkdGh9KTt9LHN0b3A6ZnVuY3Rpb24oZXZlbnQsdWkpe3ZhciBzZWxmPSQo dGhpcykuZGF0YSgicmVzaXphYmxlIiksbz1zZWxmLm9wdGlvbnM7aWYoc2VsZi5n aG9zdCYmc2VsZi5oZWxwZXIpc2VsZi5oZWxwZXIuZ2V0KDApLnJlbW92ZUNoaWxk KHNlbGYuZ2hvc3QuZ2V0KDApKTt9fSk7JC51aS5wbHVnaW4uYWRkKCJyZXNpemFi bGUiLCJncmlkIix7cmVzaXplOmZ1bmN0aW9uKGV2ZW50LHVpKXt2YXIgc2VsZj0k KHRoaXMpLmRhdGEoInJlc2l6YWJsZSIpLG89c2VsZi5vcHRpb25zLGNzPXNlbGYu c2l6ZSxvcz1zZWxmLm9yaWdpbmFsU2l6ZSxvcD1zZWxmLm9yaWdpbmFsUG9zaXRp b24sYT1zZWxmLmF4aXMscmF0aW89by5fYXNwZWN0UmF0aW98fGV2ZW50LnNoaWZ0 S2V5O28uZ3JpZD10eXBlb2Ygby5ncmlkPT0ibnVtYmVyIj9bby5ncmlkLG8uZ3Jp ZF06by5ncmlkO3ZhciBveD1NYXRoLnJvdW5kKChjcy53aWR0aC1vcy53aWR0aCkv KG8uZ3JpZFswXXx8MSkpKihvLmdyaWRbMF18fDEpLG95PU1hdGgucm91bmQoKGNz LmhlaWdodC1vcy5oZWlnaHQpLyhvLmdyaWRbMV18fDEpKSooby5ncmlkWzFdfHwx KTtpZigvXihzZXxzfGUpJC8udGVzdChhKSl7c2VsZi5zaXplLndpZHRoPW9zLndp ZHRoK294O3NlbGYuc2l6ZS5oZWlnaHQ9b3MuaGVpZ2h0K295O30KZWxzZSBpZigv XihuZSkkLy50ZXN0KGEpKXtzZWxmLnNpemUud2lkdGg9b3Mud2lkdGgrb3g7c2Vs Zi5zaXplLmhlaWdodD1vcy5oZWlnaHQrb3k7c2VsZi5wb3NpdGlvbi50b3A9b3Au dG9wLW95O30KZWxzZSBpZigvXihzdykkLy50ZXN0KGEpKXtzZWxmLnNpemUud2lk dGg9b3Mud2lkdGgrb3g7c2VsZi5zaXplLmhlaWdodD1vcy5oZWlnaHQrb3k7c2Vs Zi5wb3NpdGlvbi5sZWZ0PW9wLmxlZnQtb3g7fQplbHNle3NlbGYuc2l6ZS53aWR0 aD1vcy53aWR0aCtveDtzZWxmLnNpemUuaGVpZ2h0PW9zLmhlaWdodCtveTtzZWxm LnBvc2l0aW9uLnRvcD1vcC50b3Atb3k7c2VsZi5wb3NpdGlvbi5sZWZ0PW9wLmxl ZnQtb3g7fX19KTt2YXIgbnVtPWZ1bmN0aW9uKHYpe3JldHVybiBwYXJzZUludCh2 LDEwKXx8MDt9O3ZhciBpc051bWJlcj1mdW5jdGlvbih2YWx1ZSl7cmV0dXJuIWlz TmFOKHBhcnNlSW50KHZhbHVlLDEwKSk7fTt9KShqUXVlcnkpOyhmdW5jdGlvbigk KXskLndpZGdldCgidWkudGFicyIse19pbml0OmZ1bmN0aW9uKCl7aWYodGhpcy5v cHRpb25zLmRlc2VsZWN0YWJsZSE9PXVuZGVmaW5lZCl7dGhpcy5vcHRpb25zLmNv bGxhcHNpYmxlPXRoaXMub3B0aW9ucy5kZXNlbGVjdGFibGU7fQp0aGlzLl90YWJp ZnkodHJ1ZSk7fSxfc2V0RGF0YTpmdW5jdGlvbihrZXksdmFsdWUpe2lmKGtleT09 J3NlbGVjdGVkJyl7aWYodGhpcy5vcHRpb25zLmNvbGxhcHNpYmxlJiZ2YWx1ZT09 dGhpcy5vcHRpb25zLnNlbGVjdGVkKXtyZXR1cm47fQp0aGlzLnNlbGVjdCh2YWx1 ZSk7fQplbHNle3RoaXMub3B0aW9uc1trZXldPXZhbHVlO2lmKGtleT09J2Rlc2Vs ZWN0YWJsZScpe3RoaXMub3B0aW9ucy5jb2xsYXBzaWJsZT12YWx1ZTt9CnRoaXMu X3RhYmlmeSgpO319LF90YWJJZDpmdW5jdGlvbihhKXtyZXR1cm4gYS50aXRsZSYm YS50aXRsZS5yZXBsYWNlKC9ccy9nLCdfJykucmVwbGFjZSgvW15BLVphLXowLTlc LV86XC5dL2csJycpfHx0aGlzLm9wdGlvbnMuaWRQcmVmaXgrJC5kYXRhKGEpO30s X3Nhbml0aXplU2VsZWN0b3I6ZnVuY3Rpb24oaGFzaCl7cmV0dXJuIGhhc2gucmVw bGFjZSgvOi9nLCdcXDonKTt9LF9jb29raWU6ZnVuY3Rpb24oKXt2YXIgY29va2ll PXRoaXMuY29va2llfHwodGhpcy5jb29raWU9dGhpcy5vcHRpb25zLmNvb2tpZS5u YW1lfHwndWktdGFicy0nKyQuZGF0YSh0aGlzLmxpc3RbMF0pKTtyZXR1cm4gJC5j b29raWUuYXBwbHkobnVsbCxbY29va2llXS5jb25jYXQoJC5tYWtlQXJyYXkoYXJn dW1lbnRzKSkpO30sX3VpOmZ1bmN0aW9uKHRhYixwYW5lbCl7cmV0dXJue3RhYjp0 YWIscGFuZWw6cGFuZWwsaW5kZXg6dGhpcy5hbmNob3JzLmluZGV4KHRhYil9O30s X2NsZWFudXA6ZnVuY3Rpb24oKXt0aGlzLmxpcy5maWx0ZXIoJy51aS1zdGF0ZS1w cm9jZXNzaW5nJykucmVtb3ZlQ2xhc3MoJ3VpLXN0YXRlLXByb2Nlc3NpbmcnKS5m aW5kKCdzcGFuOmRhdGEobGFiZWwudGFicyknKS5lYWNoKGZ1bmN0aW9uKCl7dmFy IGVsPSQodGhpcyk7ZWwuaHRtbChlbC5kYXRhKCdsYWJlbC50YWJzJykpLnJlbW92 ZURhdGEoJ2xhYmVsLnRhYnMnKTt9KTt9LF90YWJpZnk6ZnVuY3Rpb24oaW5pdCl7 dGhpcy5saXN0PXRoaXMuZWxlbWVudC5jaGlsZHJlbigndWw6Zmlyc3QnKTt0aGlz Lmxpcz0kKCdsaTpoYXMoYVtocmVmXSknLHRoaXMubGlzdCk7dGhpcy5hbmNob3Jz PXRoaXMubGlzLm1hcChmdW5jdGlvbigpe3JldHVybiAkKCdhJyx0aGlzKVswXTt9 KTt0aGlzLnBhbmVscz0kKFtdKTt2YXIgc2VsZj10aGlzLG89dGhpcy5vcHRpb25z O3ZhciBmcmFnbWVudElkPS9eIy4rLzt0aGlzLmFuY2hvcnMuZWFjaChmdW5jdGlv bihpLGEpe3ZhciBocmVmPSQoYSkuYXR0cignaHJlZicpO3ZhciBocmVmQmFzZT1o cmVmLnNwbGl0KCcjJylbMF0sYmFzZUVsO2lmKGhyZWZCYXNlJiYoaHJlZkJhc2U9 PT1sb2NhdGlvbi50b1N0cmluZygpLnNwbGl0KCcjJylbMF18fChiYXNlRWw9JCgn YmFzZScpWzBdKSYmaHJlZkJhc2U9PT1iYXNlRWwuaHJlZikpe2hyZWY9YS5oYXNo O2EuaHJlZj1ocmVmO30KaWYoZnJhZ21lbnRJZC50ZXN0KGhyZWYpKXtzZWxmLnBh bmVscz1zZWxmLnBhbmVscy5hZGQoc2VsZi5fc2FuaXRpemVTZWxlY3RvcihocmVm KSk7fQplbHNlIGlmKGhyZWYhPScjJyl7JC5kYXRhKGEsJ2hyZWYudGFicycsaHJl Zik7JC5kYXRhKGEsJ2xvYWQudGFicycsaHJlZi5yZXBsYWNlKC8jLiokLywnJykp O3ZhciBpZD1zZWxmLl90YWJJZChhKTthLmhyZWY9JyMnK2lkO3ZhciAkcGFuZWw9 JCgnIycraWQpO2lmKCEkcGFuZWwubGVuZ3RoKXskcGFuZWw9JChvLnBhbmVsVGVt cGxhdGUpLmF0dHIoJ2lkJyxpZCkuYWRkQ2xhc3MoJ3VpLXRhYnMtcGFuZWwgdWkt d2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWJvdHRvbScpLmluc2VydEFmdGVyKHNl bGYucGFuZWxzW2ktMV18fHNlbGYubGlzdCk7JHBhbmVsLmRhdGEoJ2Rlc3Ryb3ku dGFicycsdHJ1ZSk7fQpzZWxmLnBhbmVscz1zZWxmLnBhbmVscy5hZGQoJHBhbmVs KTt9CmVsc2V7by5kaXNhYmxlZC5wdXNoKGkpO319KTtpZihpbml0KXt0aGlzLmVs ZW1lbnQuYWRkQ2xhc3MoJ3VpLXRhYnMgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250 ZW50IHVpLWNvcm5lci1hbGwnKTt0aGlzLmxpc3QuYWRkQ2xhc3MoJ3VpLXRhYnMt bmF2IHVpLWhlbHBlci1yZXNldCB1aS1oZWxwZXItY2xlYXJmaXggdWktd2lkZ2V0 LWhlYWRlciB1aS1jb3JuZXItYWxsJyk7dGhpcy5saXMuYWRkQ2xhc3MoJ3VpLXN0 YXRlLWRlZmF1bHQgdWktY29ybmVyLXRvcCcpO3RoaXMucGFuZWxzLmFkZENsYXNz KCd1aS10YWJzLXBhbmVsIHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1ib3R0 b20nKTtpZihvLnNlbGVjdGVkPT09dW5kZWZpbmVkKXtpZihsb2NhdGlvbi5oYXNo KXt0aGlzLmFuY2hvcnMuZWFjaChmdW5jdGlvbihpLGEpe2lmKGEuaGFzaD09bG9j YXRpb24uaGFzaCl7by5zZWxlY3RlZD1pO3JldHVybiBmYWxzZTt9fSk7fQppZih0 eXBlb2Ygby5zZWxlY3RlZCE9J251bWJlcicmJm8uY29va2llKXtvLnNlbGVjdGVk PXBhcnNlSW50KHNlbGYuX2Nvb2tpZSgpLDEwKTt9CmlmKHR5cGVvZiBvLnNlbGVj dGVkIT0nbnVtYmVyJyYmdGhpcy5saXMuZmlsdGVyKCcudWktdGFicy1zZWxlY3Rl ZCcpLmxlbmd0aCl7by5zZWxlY3RlZD10aGlzLmxpcy5pbmRleCh0aGlzLmxpcy5m aWx0ZXIoJy51aS10YWJzLXNlbGVjdGVkJykpO30Kby5zZWxlY3RlZD1vLnNlbGVj dGVkfHwwO30KZWxzZSBpZihvLnNlbGVjdGVkPT09bnVsbCl7by5zZWxlY3RlZD0t MTt9Cm8uc2VsZWN0ZWQ9KChvLnNlbGVjdGVkPj0wJiZ0aGlzLmFuY2hvcnNbby5z ZWxlY3RlZF0pfHxvLnNlbGVjdGVkPDApP28uc2VsZWN0ZWQ6MDtvLmRpc2FibGVk PSQudW5pcXVlKG8uZGlzYWJsZWQuY29uY2F0KCQubWFwKHRoaXMubGlzLmZpbHRl cignLnVpLXN0YXRlLWRpc2FibGVkJyksZnVuY3Rpb24obixpKXtyZXR1cm4gc2Vs Zi5saXMuaW5kZXgobik7fSkpKS5zb3J0KCk7aWYoJC5pbkFycmF5KG8uc2VsZWN0 ZWQsby5kaXNhYmxlZCkhPS0xKXtvLmRpc2FibGVkLnNwbGljZSgkLmluQXJyYXko by5zZWxlY3RlZCxvLmRpc2FibGVkKSwxKTt9CnRoaXMucGFuZWxzLmFkZENsYXNz KCd1aS10YWJzLWhpZGUnKTt0aGlzLmxpcy5yZW1vdmVDbGFzcygndWktdGFicy1z ZWxlY3RlZCB1aS1zdGF0ZS1hY3RpdmUnKTtpZihvLnNlbGVjdGVkPj0wJiZ0aGlz LmFuY2hvcnMubGVuZ3RoKXt0aGlzLnBhbmVscy5lcShvLnNlbGVjdGVkKS5yZW1v dmVDbGFzcygndWktdGFicy1oaWRlJyk7dGhpcy5saXMuZXEoby5zZWxlY3RlZCku YWRkQ2xhc3MoJ3VpLXRhYnMtc2VsZWN0ZWQgdWktc3RhdGUtYWN0aXZlJyk7c2Vs Zi5lbGVtZW50LnF1ZXVlKCJ0YWJzIixmdW5jdGlvbigpe3NlbGYuX3RyaWdnZXIo J3Nob3cnLG51bGwsc2VsZi5fdWkoc2VsZi5hbmNob3JzW28uc2VsZWN0ZWRdLHNl bGYucGFuZWxzW28uc2VsZWN0ZWRdKSk7fSk7dGhpcy5sb2FkKG8uc2VsZWN0ZWQp O30KJCh3aW5kb3cpLmJpbmQoJ3VubG9hZCcsZnVuY3Rpb24oKXtzZWxmLmxpcy5h ZGQoc2VsZi5hbmNob3JzKS51bmJpbmQoJy50YWJzJyk7c2VsZi5saXM9c2VsZi5h bmNob3JzPXNlbGYucGFuZWxzPW51bGw7fSk7fQplbHNle28uc2VsZWN0ZWQ9dGhp cy5saXMuaW5kZXgodGhpcy5saXMuZmlsdGVyKCcudWktdGFicy1zZWxlY3RlZCcp KTt9CnRoaXMuZWxlbWVudFtvLmNvbGxhcHNpYmxlPydhZGRDbGFzcyc6J3JlbW92 ZUNsYXNzJ10oJ3VpLXRhYnMtY29sbGFwc2libGUnKTtpZihvLmNvb2tpZSl7dGhp cy5fY29va2llKG8uc2VsZWN0ZWQsby5jb29raWUpO30KZm9yKHZhciBpPTAsbGk7 KGxpPXRoaXMubGlzW2ldKTtpKyspeyQobGkpWyQuaW5BcnJheShpLG8uZGlzYWJs ZWQpIT0tMSYmISQobGkpLmhhc0NsYXNzKCd1aS10YWJzLXNlbGVjdGVkJyk/J2Fk ZENsYXNzJzoncmVtb3ZlQ2xhc3MnXSgndWktc3RhdGUtZGlzYWJsZWQnKTt9Cmlm KG8uY2FjaGU9PT1mYWxzZSl7dGhpcy5hbmNob3JzLnJlbW92ZURhdGEoJ2NhY2hl LnRhYnMnKTt9CnRoaXMubGlzLmFkZCh0aGlzLmFuY2hvcnMpLnVuYmluZCgnLnRh YnMnKTtpZihvLmV2ZW50IT0nbW91c2VvdmVyJyl7dmFyIGFkZFN0YXRlPWZ1bmN0 aW9uKHN0YXRlLGVsKXtpZihlbC5pcygnOm5vdCgudWktc3RhdGUtZGlzYWJsZWQp Jykpe2VsLmFkZENsYXNzKCd1aS1zdGF0ZS0nK3N0YXRlKTt9fTt2YXIgcmVtb3Zl U3RhdGU9ZnVuY3Rpb24oc3RhdGUsZWwpe2VsLnJlbW92ZUNsYXNzKCd1aS1zdGF0 ZS0nK3N0YXRlKTt9O3RoaXMubGlzLmJpbmQoJ21vdXNlb3Zlci50YWJzJyxmdW5j dGlvbigpe2FkZFN0YXRlKCdob3ZlcicsJCh0aGlzKSk7fSk7dGhpcy5saXMuYmlu ZCgnbW91c2VvdXQudGFicycsZnVuY3Rpb24oKXtyZW1vdmVTdGF0ZSgnaG92ZXIn LCQodGhpcykpO30pO3RoaXMuYW5jaG9ycy5iaW5kKCdmb2N1cy50YWJzJyxmdW5j dGlvbigpe2FkZFN0YXRlKCdmb2N1cycsJCh0aGlzKS5jbG9zZXN0KCdsaScpKTt9 KTt0aGlzLmFuY2hvcnMuYmluZCgnYmx1ci50YWJzJyxmdW5jdGlvbigpe3JlbW92 ZVN0YXRlKCdmb2N1cycsJCh0aGlzKS5jbG9zZXN0KCdsaScpKTt9KTt9CnZhciBo aWRlRngsc2hvd0Z4O2lmKG8uZngpe2lmKCQuaXNBcnJheShvLmZ4KSl7aGlkZUZ4 PW8uZnhbMF07c2hvd0Z4PW8uZnhbMV07fQplbHNle2hpZGVGeD1zaG93Rng9by5m eDt9fQpmdW5jdGlvbiByZXNldFN0eWxlKCRlbCxmeCl7JGVsLmNzcyh7ZGlzcGxh eTonJ30pO2lmKCQuYnJvd3Nlci5tc2llJiZmeC5vcGFjaXR5KXskZWxbMF0uc3R5 bGUucmVtb3ZlQXR0cmlidXRlKCdmaWx0ZXInKTt9fQp2YXIgc2hvd1RhYj1zaG93 Rng/ZnVuY3Rpb24oY2xpY2tlZCwkc2hvdyl7JChjbGlja2VkKS5jbG9zZXN0KCds aScpLnJlbW92ZUNsYXNzKCd1aS1zdGF0ZS1kZWZhdWx0JykuYWRkQ2xhc3MoJ3Vp LXRhYnMtc2VsZWN0ZWQgdWktc3RhdGUtYWN0aXZlJyk7JHNob3cuaGlkZSgpLnJl bW92ZUNsYXNzKCd1aS10YWJzLWhpZGUnKS5hbmltYXRlKHNob3dGeCxzaG93Rngu ZHVyYXRpb258fCdub3JtYWwnLGZ1bmN0aW9uKCl7cmVzZXRTdHlsZSgkc2hvdyxz aG93RngpO3NlbGYuX3RyaWdnZXIoJ3Nob3cnLG51bGwsc2VsZi5fdWkoY2xpY2tl ZCwkc2hvd1swXSkpO30pO306ZnVuY3Rpb24oY2xpY2tlZCwkc2hvdyl7JChjbGlj a2VkKS5jbG9zZXN0KCdsaScpLnJlbW92ZUNsYXNzKCd1aS1zdGF0ZS1kZWZhdWx0 JykuYWRkQ2xhc3MoJ3VpLXRhYnMtc2VsZWN0ZWQgdWktc3RhdGUtYWN0aXZlJyk7 JHNob3cucmVtb3ZlQ2xhc3MoJ3VpLXRhYnMtaGlkZScpO3NlbGYuX3RyaWdnZXIo J3Nob3cnLG51bGwsc2VsZi5fdWkoY2xpY2tlZCwkc2hvd1swXSkpO307dmFyIGhp ZGVUYWI9aGlkZUZ4P2Z1bmN0aW9uKGNsaWNrZWQsJGhpZGUpeyRoaWRlLmFuaW1h dGUoaGlkZUZ4LGhpZGVGeC5kdXJhdGlvbnx8J25vcm1hbCcsZnVuY3Rpb24oKXtz ZWxmLmxpcy5yZW1vdmVDbGFzcygndWktdGFicy1zZWxlY3RlZCB1aS1zdGF0ZS1h Y3RpdmUnKS5hZGRDbGFzcygndWktc3RhdGUtZGVmYXVsdCcpOyRoaWRlLmFkZENs YXNzKCd1aS10YWJzLWhpZGUnKTtyZXNldFN0eWxlKCRoaWRlLGhpZGVGeCk7c2Vs Zi5lbGVtZW50LmRlcXVldWUoInRhYnMiKTt9KTt9OmZ1bmN0aW9uKGNsaWNrZWQs JGhpZGUsJHNob3cpe3NlbGYubGlzLnJlbW92ZUNsYXNzKCd1aS10YWJzLXNlbGVj dGVkIHVpLXN0YXRlLWFjdGl2ZScpLmFkZENsYXNzKCd1aS1zdGF0ZS1kZWZhdWx0 Jyk7JGhpZGUuYWRkQ2xhc3MoJ3VpLXRhYnMtaGlkZScpO3NlbGYuZWxlbWVudC5k ZXF1ZXVlKCJ0YWJzIik7fTt0aGlzLmFuY2hvcnMuYmluZChvLmV2ZW50KycudGFi cycsZnVuY3Rpb24oKXt2YXIgZWw9dGhpcywkbGk9JCh0aGlzKS5jbG9zZXN0KCds aScpLCRoaWRlPXNlbGYucGFuZWxzLmZpbHRlcignOm5vdCgudWktdGFicy1oaWRl KScpLCRzaG93PSQoc2VsZi5fc2FuaXRpemVTZWxlY3Rvcih0aGlzLmhhc2gpKTtp ZigoJGxpLmhhc0NsYXNzKCd1aS10YWJzLXNlbGVjdGVkJykmJiFvLmNvbGxhcHNp YmxlKXx8JGxpLmhhc0NsYXNzKCd1aS1zdGF0ZS1kaXNhYmxlZCcpfHwkbGkuaGFz Q2xhc3MoJ3VpLXN0YXRlLXByb2Nlc3NpbmcnKXx8c2VsZi5fdHJpZ2dlcignc2Vs ZWN0JyxudWxsLHNlbGYuX3VpKHRoaXMsJHNob3dbMF0pKT09PWZhbHNlKXt0aGlz LmJsdXIoKTtyZXR1cm4gZmFsc2U7fQpvLnNlbGVjdGVkPXNlbGYuYW5jaG9ycy5p bmRleCh0aGlzKTtzZWxmLmFib3J0KCk7aWYoby5jb2xsYXBzaWJsZSl7aWYoJGxp Lmhhc0NsYXNzKCd1aS10YWJzLXNlbGVjdGVkJykpe28uc2VsZWN0ZWQ9LTE7aWYo by5jb29raWUpe3NlbGYuX2Nvb2tpZShvLnNlbGVjdGVkLG8uY29va2llKTt9CnNl bGYuZWxlbWVudC5xdWV1ZSgidGFicyIsZnVuY3Rpb24oKXtoaWRlVGFiKGVsLCRo aWRlKTt9KS5kZXF1ZXVlKCJ0YWJzIik7dGhpcy5ibHVyKCk7cmV0dXJuIGZhbHNl O30KZWxzZSBpZighJGhpZGUubGVuZ3RoKXtpZihvLmNvb2tpZSl7c2VsZi5fY29v a2llKG8uc2VsZWN0ZWQsby5jb29raWUpO30Kc2VsZi5lbGVtZW50LnF1ZXVlKCJ0 YWJzIixmdW5jdGlvbigpe3Nob3dUYWIoZWwsJHNob3cpO30pO3NlbGYubG9hZChz ZWxmLmFuY2hvcnMuaW5kZXgodGhpcykpO3RoaXMuYmx1cigpO3JldHVybiBmYWxz ZTt9fQppZihvLmNvb2tpZSl7c2VsZi5fY29va2llKG8uc2VsZWN0ZWQsby5jb29r aWUpO30KaWYoJHNob3cubGVuZ3RoKXtpZigkaGlkZS5sZW5ndGgpe3NlbGYuZWxl bWVudC5xdWV1ZSgidGFicyIsZnVuY3Rpb24oKXtoaWRlVGFiKGVsLCRoaWRlKTt9 KTt9CnNlbGYuZWxlbWVudC5xdWV1ZSgidGFicyIsZnVuY3Rpb24oKXtzaG93VGFi KGVsLCRzaG93KTt9KTtzZWxmLmxvYWQoc2VsZi5hbmNob3JzLmluZGV4KHRoaXMp KTt9CmVsc2V7dGhyb3cnalF1ZXJ5IFVJIFRhYnM6IE1pc21hdGNoaW5nIGZyYWdt ZW50IGlkZW50aWZpZXIuJzt9CmlmKCQuYnJvd3Nlci5tc2llKXt0aGlzLmJsdXIo KTt9fSk7dGhpcy5hbmNob3JzLmJpbmQoJ2NsaWNrLnRhYnMnLGZ1bmN0aW9uKCl7 cmV0dXJuIGZhbHNlO30pO30sZGVzdHJveTpmdW5jdGlvbigpe3ZhciBvPXRoaXMu b3B0aW9uczt0aGlzLmFib3J0KCk7dGhpcy5lbGVtZW50LnVuYmluZCgnLnRhYnMn KS5yZW1vdmVDbGFzcygndWktdGFicyB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRl bnQgdWktY29ybmVyLWFsbCB1aS10YWJzLWNvbGxhcHNpYmxlJykucmVtb3ZlRGF0 YSgndGFicycpO3RoaXMubGlzdC5yZW1vdmVDbGFzcygndWktdGFicy1uYXYgdWkt aGVscGVyLXJlc2V0IHVpLWhlbHBlci1jbGVhcmZpeCB1aS13aWRnZXQtaGVhZGVy IHVpLWNvcm5lci1hbGwnKTt0aGlzLmFuY2hvcnMuZWFjaChmdW5jdGlvbigpe3Zh ciBocmVmPSQuZGF0YSh0aGlzLCdocmVmLnRhYnMnKTtpZihocmVmKXt0aGlzLmhy ZWY9aHJlZjt9CnZhciAkdGhpcz0kKHRoaXMpLnVuYmluZCgnLnRhYnMnKTskLmVh Y2goWydocmVmJywnbG9hZCcsJ2NhY2hlJ10sZnVuY3Rpb24oaSxwcmVmaXgpeyR0 aGlzLnJlbW92ZURhdGEocHJlZml4KycudGFicycpO30pO30pO3RoaXMubGlzLnVu YmluZCgnLnRhYnMnKS5hZGQodGhpcy5wYW5lbHMpLmVhY2goZnVuY3Rpb24oKXtp ZigkLmRhdGEodGhpcywnZGVzdHJveS50YWJzJykpeyQodGhpcykucmVtb3ZlKCk7 fQplbHNleyQodGhpcykucmVtb3ZlQ2xhc3MoWyd1aS1zdGF0ZS1kZWZhdWx0Jywn dWktY29ybmVyLXRvcCcsJ3VpLXRhYnMtc2VsZWN0ZWQnLCd1aS1zdGF0ZS1hY3Rp dmUnLCd1aS1zdGF0ZS1ob3ZlcicsJ3VpLXN0YXRlLWZvY3VzJywndWktc3RhdGUt ZGlzYWJsZWQnLCd1aS10YWJzLXBhbmVsJywndWktd2lkZ2V0LWNvbnRlbnQnLCd1 aS1jb3JuZXItYm90dG9tJywndWktdGFicy1oaWRlJ10uam9pbignICcpKTt9fSk7 aWYoby5jb29raWUpe3RoaXMuX2Nvb2tpZShudWxsLG8uY29va2llKTt9fSxhZGQ6 ZnVuY3Rpb24odXJsLGxhYmVsLGluZGV4KXtpZihpbmRleD09PXVuZGVmaW5lZCl7 aW5kZXg9dGhpcy5hbmNob3JzLmxlbmd0aDt9CnZhciBzZWxmPXRoaXMsbz10aGlz Lm9wdGlvbnMsJGxpPSQoby50YWJUZW1wbGF0ZS5yZXBsYWNlKC8jXHtocmVmXH0v Zyx1cmwpLnJlcGxhY2UoLyNce2xhYmVsXH0vZyxsYWJlbCkpLGlkPSF1cmwuaW5k ZXhPZignIycpP3VybC5yZXBsYWNlKCcjJywnJyk6dGhpcy5fdGFiSWQoJCgnYScs JGxpKVswXSk7JGxpLmFkZENsYXNzKCd1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5l ci10b3AnKS5kYXRhKCdkZXN0cm95LnRhYnMnLHRydWUpO3ZhciAkcGFuZWw9JCgn IycraWQpO2lmKCEkcGFuZWwubGVuZ3RoKXskcGFuZWw9JChvLnBhbmVsVGVtcGxh dGUpLmF0dHIoJ2lkJyxpZCkuZGF0YSgnZGVzdHJveS50YWJzJyx0cnVlKTt9CiRw YW5lbC5hZGRDbGFzcygndWktdGFicy1wYW5lbCB1aS13aWRnZXQtY29udGVudCB1 aS1jb3JuZXItYm90dG9tIHVpLXRhYnMtaGlkZScpO2lmKGluZGV4Pj10aGlzLmxp cy5sZW5ndGgpeyRsaS5hcHBlbmRUbyh0aGlzLmxpc3QpOyRwYW5lbC5hcHBlbmRU byh0aGlzLmxpc3RbMF0ucGFyZW50Tm9kZSk7fQplbHNleyRsaS5pbnNlcnRCZWZv cmUodGhpcy5saXNbaW5kZXhdKTskcGFuZWwuaW5zZXJ0QmVmb3JlKHRoaXMucGFu ZWxzW2luZGV4XSk7fQpvLmRpc2FibGVkPSQubWFwKG8uZGlzYWJsZWQsZnVuY3Rp b24obixpKXtyZXR1cm4gbj49aW5kZXg/KytuOm47fSk7dGhpcy5fdGFiaWZ5KCk7 aWYodGhpcy5hbmNob3JzLmxlbmd0aD09MSl7JGxpLmFkZENsYXNzKCd1aS10YWJz LXNlbGVjdGVkIHVpLXN0YXRlLWFjdGl2ZScpOyRwYW5lbC5yZW1vdmVDbGFzcygn dWktdGFicy1oaWRlJyk7dGhpcy5lbGVtZW50LnF1ZXVlKCJ0YWJzIixmdW5jdGlv bigpe3NlbGYuX3RyaWdnZXIoJ3Nob3cnLG51bGwsc2VsZi5fdWkoc2VsZi5hbmNo b3JzWzBdLHNlbGYucGFuZWxzWzBdKSk7fSk7dGhpcy5sb2FkKDApO30KdGhpcy5f dHJpZ2dlcignYWRkJyxudWxsLHRoaXMuX3VpKHRoaXMuYW5jaG9yc1tpbmRleF0s dGhpcy5wYW5lbHNbaW5kZXhdKSk7fSxyZW1vdmU6ZnVuY3Rpb24oaW5kZXgpe3Zh ciBvPXRoaXMub3B0aW9ucywkbGk9dGhpcy5saXMuZXEoaW5kZXgpLnJlbW92ZSgp LCRwYW5lbD10aGlzLnBhbmVscy5lcShpbmRleCkucmVtb3ZlKCk7aWYoJGxpLmhh c0NsYXNzKCd1aS10YWJzLXNlbGVjdGVkJykmJnRoaXMuYW5jaG9ycy5sZW5ndGg+ MSl7dGhpcy5zZWxlY3QoaW5kZXgrKGluZGV4KzE8dGhpcy5hbmNob3JzLmxlbmd0 aD8xOi0xKSk7fQpvLmRpc2FibGVkPSQubWFwKCQuZ3JlcChvLmRpc2FibGVkLGZ1 bmN0aW9uKG4saSl7cmV0dXJuIG4hPWluZGV4O30pLGZ1bmN0aW9uKG4saSl7cmV0 dXJuIG4+PWluZGV4Py0tbjpuO30pO3RoaXMuX3RhYmlmeSgpO3RoaXMuX3RyaWdn ZXIoJ3JlbW92ZScsbnVsbCx0aGlzLl91aSgkbGkuZmluZCgnYScpWzBdLCRwYW5l bFswXSkpO30sZW5hYmxlOmZ1bmN0aW9uKGluZGV4KXt2YXIgbz10aGlzLm9wdGlv bnM7aWYoJC5pbkFycmF5KGluZGV4LG8uZGlzYWJsZWQpPT0tMSl7cmV0dXJuO30K dGhpcy5saXMuZXEoaW5kZXgpLnJlbW92ZUNsYXNzKCd1aS1zdGF0ZS1kaXNhYmxl ZCcpO28uZGlzYWJsZWQ9JC5ncmVwKG8uZGlzYWJsZWQsZnVuY3Rpb24obixpKXty ZXR1cm4gbiE9aW5kZXg7fSk7dGhpcy5fdHJpZ2dlcignZW5hYmxlJyxudWxsLHRo aXMuX3VpKHRoaXMuYW5jaG9yc1tpbmRleF0sdGhpcy5wYW5lbHNbaW5kZXhdKSk7 fSxkaXNhYmxlOmZ1bmN0aW9uKGluZGV4KXt2YXIgc2VsZj10aGlzLG89dGhpcy5v cHRpb25zO2lmKGluZGV4IT1vLnNlbGVjdGVkKXt0aGlzLmxpcy5lcShpbmRleCku YWRkQ2xhc3MoJ3VpLXN0YXRlLWRpc2FibGVkJyk7by5kaXNhYmxlZC5wdXNoKGlu ZGV4KTtvLmRpc2FibGVkLnNvcnQoKTt0aGlzLl90cmlnZ2VyKCdkaXNhYmxlJyxu dWxsLHRoaXMuX3VpKHRoaXMuYW5jaG9yc1tpbmRleF0sdGhpcy5wYW5lbHNbaW5k ZXhdKSk7fX0sc2VsZWN0OmZ1bmN0aW9uKGluZGV4KXtpZih0eXBlb2YgaW5kZXg9 PSdzdHJpbmcnKXtpbmRleD10aGlzLmFuY2hvcnMuaW5kZXgodGhpcy5hbmNob3Jz LmZpbHRlcignW2hyZWYkPScraW5kZXgrJ10nKSk7fQplbHNlIGlmKGluZGV4PT09 bnVsbCl7aW5kZXg9LTE7fQppZihpbmRleD09LTEmJnRoaXMub3B0aW9ucy5jb2xs YXBzaWJsZSl7aW5kZXg9dGhpcy5vcHRpb25zLnNlbGVjdGVkO30KdGhpcy5hbmNo b3JzLmVxKGluZGV4KS50cmlnZ2VyKHRoaXMub3B0aW9ucy5ldmVudCsnLnRhYnMn KTt9LGxvYWQ6ZnVuY3Rpb24oaW5kZXgpe3ZhciBzZWxmPXRoaXMsbz10aGlzLm9w dGlvbnMsYT10aGlzLmFuY2hvcnMuZXEoaW5kZXgpWzBdLHVybD0kLmRhdGEoYSwn bG9hZC50YWJzJyk7dGhpcy5hYm9ydCgpO2lmKCF1cmx8fHRoaXMuZWxlbWVudC5x dWV1ZSgidGFicyIpLmxlbmd0aCE9PTAmJiQuZGF0YShhLCdjYWNoZS50YWJzJykp e3RoaXMuZWxlbWVudC5kZXF1ZXVlKCJ0YWJzIik7cmV0dXJuO30KdGhpcy5saXMu ZXEoaW5kZXgpLmFkZENsYXNzKCd1aS1zdGF0ZS1wcm9jZXNzaW5nJyk7aWYoby5z cGlubmVyKXt2YXIgc3Bhbj0kKCdzcGFuJyxhKTtzcGFuLmRhdGEoJ2xhYmVsLnRh YnMnLHNwYW4uaHRtbCgpKS5odG1sKG8uc3Bpbm5lcik7fQp0aGlzLnhocj0kLmFq YXgoJC5leHRlbmQoe30sby5hamF4T3B0aW9ucyx7dXJsOnVybCxzdWNjZXNzOmZ1 bmN0aW9uKHIscyl7JChzZWxmLl9zYW5pdGl6ZVNlbGVjdG9yKGEuaGFzaCkpLmh0 bWwocik7c2VsZi5fY2xlYW51cCgpO2lmKG8uY2FjaGUpeyQuZGF0YShhLCdjYWNo ZS50YWJzJyx0cnVlKTt9CnNlbGYuX3RyaWdnZXIoJ2xvYWQnLG51bGwsc2VsZi5f dWkoc2VsZi5hbmNob3JzW2luZGV4XSxzZWxmLnBhbmVsc1tpbmRleF0pKTt0cnl7 by5hamF4T3B0aW9ucy5zdWNjZXNzKHIscyk7fQpjYXRjaChlKXt9CnNlbGYuZWxl bWVudC5kZXF1ZXVlKCJ0YWJzIik7fX0pKTt9LGFib3J0OmZ1bmN0aW9uKCl7dGhp cy5lbGVtZW50LnF1ZXVlKFtdKTt0aGlzLnBhbmVscy5zdG9wKGZhbHNlLHRydWUp O2lmKHRoaXMueGhyKXt0aGlzLnhoci5hYm9ydCgpO2RlbGV0ZSB0aGlzLnhocjt9 CnRoaXMuX2NsZWFudXAoKTt9LHVybDpmdW5jdGlvbihpbmRleCx1cmwpe3RoaXMu YW5jaG9ycy5lcShpbmRleCkucmVtb3ZlRGF0YSgnY2FjaGUudGFicycpLmRhdGEo J2xvYWQudGFicycsdXJsKTt9LGxlbmd0aDpmdW5jdGlvbigpe3JldHVybiB0aGlz LmFuY2hvcnMubGVuZ3RoO319KTskLmV4dGVuZCgkLnVpLnRhYnMse3ZlcnNpb246 JzEuNy4xJyxnZXR0ZXI6J2xlbmd0aCcsZGVmYXVsdHM6e2FqYXhPcHRpb25zOm51 bGwsY2FjaGU6ZmFsc2UsY29va2llOm51bGwsY29sbGFwc2libGU6ZmFsc2UsZGlz YWJsZWQ6W10sZXZlbnQ6J2NsaWNrJyxmeDpudWxsLGlkUHJlZml4Oid1aS10YWJz LScscGFuZWxUZW1wbGF0ZTonPGRpdj48L2Rpdj4nLHNwaW5uZXI6JzxlbT5Mb2Fk aW5nJiM4MjMwOzwvZW0+Jyx0YWJUZW1wbGF0ZTonPGxpPjxhIGhyZWY9IiN7aHJl Zn0iPjxzcGFuPiN7bGFiZWx9PC9zcGFuPjwvYT48L2xpPid9fSk7JC5leHRlbmQo JC51aS50YWJzLnByb3RvdHlwZSx7cm90YXRpb246bnVsbCxyb3RhdGU6ZnVuY3Rp b24obXMsY29udGludWluZyl7dmFyIHNlbGY9dGhpcyxvPXRoaXMub3B0aW9uczt2 YXIgcm90YXRlPXNlbGYuX3JvdGF0ZXx8KHNlbGYuX3JvdGF0ZT1mdW5jdGlvbihl KXtjbGVhclRpbWVvdXQoc2VsZi5yb3RhdGlvbik7c2VsZi5yb3RhdGlvbj1zZXRU aW1lb3V0KGZ1bmN0aW9uKCl7dmFyIHQ9by5zZWxlY3RlZDtzZWxmLnNlbGVjdCgr K3Q8c2VsZi5hbmNob3JzLmxlbmd0aD90OjApO30sbXMpO2lmKGUpe2Uuc3RvcFBy b3BhZ2F0aW9uKCk7fX0pO3ZhciBzdG9wPXNlbGYuX3Vucm90YXRlfHwoc2VsZi5f dW5yb3RhdGU9IWNvbnRpbnVpbmc/ZnVuY3Rpb24oZSl7aWYoZS5jbGllbnRYKXtz ZWxmLnJvdGF0ZShudWxsKTt9fTpmdW5jdGlvbihlKXt0PW8uc2VsZWN0ZWQ7cm90 YXRlKCk7fSk7aWYobXMpe3RoaXMuZWxlbWVudC5iaW5kKCd0YWJzc2hvdycscm90 YXRlKTt0aGlzLmFuY2hvcnMuYmluZChvLmV2ZW50KycudGFicycsc3RvcCk7cm90 YXRlKCk7fQplbHNle2NsZWFyVGltZW91dChzZWxmLnJvdGF0aW9uKTt0aGlzLmVs ZW1lbnQudW5iaW5kKCd0YWJzc2hvdycscm90YXRlKTt0aGlzLmFuY2hvcnMudW5i aW5kKG8uZXZlbnQrJy50YWJzJyxzdG9wKTtkZWxldGUgdGhpcy5fcm90YXRlO2Rl bGV0ZSB0aGlzLl91bnJvdGF0ZTt9fX0pO30pKGpRdWVyeSk7KGZ1bmN0aW9uKCQp eyQud2hpbGVBc3luYz1mdW5jdGlvbihvcHRzKQp7dmFyIGRlbGF5PU1hdGguYWJz KG9wdHMuZGVsYXkpfHwxMCxidWxrPWlzTmFOKG9wdHMuYnVsayk/NTAwOk1hdGgu YWJzKG9wdHMuYnVsayksdGVzdD1vcHRzLnRlc3R8fGZ1bmN0aW9uKCl7cmV0dXJu IHRydWU7fSxsb29wPW9wdHMubG9vcHx8ZnVuY3Rpb24oKXt9LGVuZD1vcHRzLmVu ZHx8ZnVuY3Rpb24oKXt9OyhmdW5jdGlvbigpe3ZhciB0PWZhbHNlLGJlZ2luPW5l dyBEYXRlKCk7d2hpbGUodD10ZXN0KCkpCntsb29wKCk7aWYoYnVsaz09PTB8fChu ZXcgRGF0ZSgpLWJlZ2luKT5idWxrKQp7YnJlYWs7fX0KaWYodCkKe3NldFRpbWVv dXQoYXJndW1lbnRzLmNhbGxlZSxkZWxheSk7fQplbHNlCntlbmQoKTt9fSkoKTt9 CiQuZWFjaEFzeW5jPWZ1bmN0aW9uKGFycmF5LG9wdHMpCnt2YXIgaT0wLGw9YXJy YXkubGVuZ3RoLGxvb3A9b3B0cy5sb29wfHxmdW5jdGlvbigpe307JC53aGlsZUFz eW5jKCQuZXh0ZW5kKG9wdHMse3Rlc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gaTxsO30s bG9vcDpmdW5jdGlvbigpCnt2YXIgdmFsPWFycmF5W2ldO3JldHVybiBsb29wLmNh bGwodmFsLGkrKyx2YWwpO319KSk7fQokLmZuLmVhY2hBc3luYz1mdW5jdGlvbihv cHRzKQp7JC5lYWNoQXN5bmModGhpcyxvcHRzKTtyZXR1cm4gdGhpczt9fSkoalF1 ZXJ5KTsoZnVuY3Rpb24oJCl7dmFyIGNhY2hlPXt9OyQuZm4uYXV0b0VsbGlwc2lz PWZ1bmN0aW9uKG9wdGlvbnMpe29wdGlvbnM9JC5leHRlbmQoeydwb3NpdGlvbic6 J2NlbnRlcicsJ3Rvb2x0aXAnOmZhbHNlLCdyZXN0b3JlVGV4dCc6ZmFsc2UsJ2hh c1NwYW4nOmZhbHNlfSxvcHRpb25zKTskKHRoaXMpLmVhY2goZnVuY3Rpb24oKXt2 YXIgJHRoaXM9JCh0aGlzKTtpZihvcHRpb25zLnJlc3RvcmVUZXh0KXtpZighJHRo aXMuZGF0YSgnYXV0b0VsbGlwc2lzLm9yaWdpbmFsVGV4dCcpKXskdGhpcy5kYXRh KCdhdXRvRWxsaXBzaXMub3JpZ2luYWxUZXh0JywkdGhpcy50ZXh0KCkpO31lbHNl eyR0aGlzLnRleHQoJHRoaXMuZGF0YSgnYXV0b0VsbGlwc2lzLm9yaWdpbmFsVGV4 dCcpKTt9fQp2YXIgdGV4dD0kdGhpcy50ZXh0KCk7dmFyIHc9JHRoaXMud2lkdGgo KTt2YXIgJHRleHQ7aWYob3B0aW9ucy5oYXNTcGFuKXskdGV4dD0kdGhpcy5jaGls ZHJlbignc3BhbicpO31lbHNleyR0ZXh0PSQoJzxzcGFuIC8+JykuY3NzKCd3aGl0 ZVNwYWNlJywnbm93cmFwJyk7JHRoaXMuZW1wdHkoKS5hcHBlbmQoJHRleHQpO30K aWYoISh0ZXh0IGluIGNhY2hlKSl7Y2FjaGVbdGV4dF09e307fQppZih3IGluIGNh Y2hlW3RleHRdKXskdGV4dC50ZXh0KGNhY2hlW3RleHRdW3ddKTtpZihvcHRpb25z LnRvb2x0aXApCiR0ZXh0LmF0dHIoJ3RpdGxlJyx0ZXh0KTtyZXR1cm47fQokdGV4 dC50ZXh0KHRleHQpO2lmKCR0ZXh0LndpZHRoKCk+dyl7c3dpdGNoKG9wdGlvbnMu cG9zaXRpb24pe2Nhc2UncmlnaHQnOnZhciBsPTAscj10ZXh0Lmxlbmd0aDtkb3t2 YXIgbT1NYXRoLmNlaWwoKGwrcikvMik7JHRleHQudGV4dCh0ZXh0LnN1YnN0cigw LG0pKycuLi4nKTtpZigkdGV4dC53aWR0aCgpPncpe3I9bS0xO31lbHNle2w9bTt9 fXdoaWxlKGw8cik7JHRleHQudGV4dCh0ZXh0LnN1YnN0cigwLGwpKycuLi4nKTti cmVhaztjYXNlJ2NlbnRlcic6dmFyIGk9W01hdGgucm91bmQodGV4dC5sZW5ndGgv MiksTWF0aC5yb3VuZCh0ZXh0Lmxlbmd0aC8yKV07dmFyIHNpZGU9MTt3aGlsZSgk dGV4dC5vdXRlcldpZHRoKCk+dyYmaVswXT4wKXskdGV4dC50ZXh0KHRleHQuc3Vi c3RyKDAsaVswXSkrJy4uLicrdGV4dC5zdWJzdHIoaVsxXSkpO2lmKHNpZGU9PTAp e2lbMF0tLTtzaWRlPTE7fWVsc2V7aVsxXSsrO3NpZGU9MDt9fQpicmVhaztjYXNl J2xlZnQnOnZhciByPTA7d2hpbGUoJHRleHQub3V0ZXJXaWR0aCgpPncmJnI8dGV4 dC5sZW5ndGgpeyR0ZXh0LnRleHQoJy4uLicrdGV4dC5zdWJzdHIocikpO3IrKzt9 CmJyZWFrO319CmlmKG9wdGlvbnMudG9vbHRpcCkKJHRleHQuYXR0cigndGl0bGUn LHRleHQpO2NhY2hlW3RleHRdW3ddPSR0ZXh0LnRleHQoKTt9KTt9O30pKGpRdWVy eSk7KGZ1bmN0aW9uKCQpeyQuYnJvd3NlclRlc3Q9ZnVuY3Rpb24oYSx6KXt2YXIg dT0ndW5rbm93bicseD0nWCcsbT1mdW5jdGlvbihyLGgpe2Zvcih2YXIgaT0wO2k8 aC5sZW5ndGg7aT1pKzEpe3I9ci5yZXBsYWNlKGhbaV1bMF0saFtpXVsxXSk7fQpy ZXR1cm4gcjt9LGM9ZnVuY3Rpb24oaSxhLGIsYyl7dmFyIHI9e25hbWU6bSgoYS5l eGVjKGkpfHxbdSx1XSlbMV0sYil9O3Jbci5uYW1lXT10cnVlO3IudmVyc2lvbj0o Yy5leGVjKGkpfHxbeCx4LHgseF0pWzNdO2lmKHIubmFtZS5tYXRjaCgvc2FmYXJp LykmJnIudmVyc2lvbj40MDApe3IudmVyc2lvbj0nMi4wJzt9CmlmKHIubmFtZT09 PSdwcmVzdG8nKXtyLnZlcnNpb249KCQuYnJvd3Nlci52ZXJzaW9uPjkuMjcpPydm dXRoYXJrJzonbGluZWFyX2InO30KaWYoci5uYW1lPT09J29wZXJhJyYmJC5icm93 c2VyLnZlcnNpb24+PTkuOCl7ci52ZXJzaW9uPWkubWF0Y2goL3ZlcnNpb25cLyhb MC05XC5dKikvaSlbMV18fDEwO30Kci52ZXJzaW9uTnVtYmVyPXBhcnNlRmxvYXQo ci52ZXJzaW9uLDEwKXx8MDtyLnZlcnNpb25YPShyLnZlcnNpb24hPT14KT8oci52 ZXJzaW9uKycnKS5zdWJzdHIoMCwxKTp4O3IuY2xhc3NOYW1lPXIubmFtZStyLnZl cnNpb25YO3JldHVybiByO307YT0oYS5tYXRjaCgvT3BlcmF8TmF2aWdhdG9yfE1p bmVmaWVsZHxLSFRNTHxDaHJvbWUvKT9tKGEsW1svKEZpcmVmb3h8TVNJRXxLSFRN TCxcc2xpa2Vcc0dlY2tvfEtvbnF1ZXJvcikvLCcnXSxbJ0Nocm9tZSBTYWZhcmkn LCdDaHJvbWUnXSxbJ0tIVE1MJywnS29ucXVlcm9yJ10sWydNaW5lZmllbGQnLCdG aXJlZm94J10sWydOYXZpZ2F0b3InLCdOZXRzY2FwZSddXSk6YSkudG9Mb3dlckNh c2UoKTskLmJyb3dzZXI9JC5leHRlbmQoKCF6KT8kLmJyb3dzZXI6e30sYyhhLC8o Y2FtaW5vfGNocm9tZXxmaXJlZm94fG5ldHNjYXBlfGtvbnF1ZXJvcnxseW54fG1z aWV8b3BlcmF8c2FmYXJpfGlwb2R8aXBob25lfGJsYWNrYmVycnkpLyxbXSwvKGNh bWlub3xjaHJvbWV8ZmlyZWZveHxuZXRzY2FwZXxuZXRzY2FwZTZ8b3BlcmF8dmVy c2lvbnxrb25xdWVyb3J8bHlueHxtc2llfHNhZmFyaSkoXC98XHMpKFthLXowLTlc LlwrXSo/KShcO3xkZXZ8cmVsfFxzfCQpLykpOyQubGF5b3V0PWMoYSwvKGdlY2tv fGtvbnF1ZXJvcnxtc2llfG9wZXJhfHdlYmtpdCkvLFtbJ2tvbnF1ZXJvcicsJ2to dG1sJ10sWydtc2llJywndHJpZGVudCddLFsnb3BlcmEnLCdwcmVzdG8nXV0sLyhh cHBsZXdlYmtpdHxydnxrb25xdWVyb3J8bXNpZSkoXDp8XC98XHMpKFthLXowLTlc Ll0qPykoXDt8XCl8XHMpLyk7JC5vcz17bmFtZTooLyh3aW58bWFjfGxpbnV4fHN1 bm9zfHNvbGFyaXN8aXBob25lKS8uZXhlYyhuYXZpZ2F0b3IucGxhdGZvcm0udG9M b3dlckNhc2UoKSl8fFt1XSlbMF0ucmVwbGFjZSgnc3Vub3MnLCdzb2xhcmlzJyl9 O2lmKCF6KXskKCdodG1sJykuYWRkQ2xhc3MoWyQub3MubmFtZSwkLmJyb3dzZXIu bmFtZSwkLmJyb3dzZXIuY2xhc3NOYW1lLCQubGF5b3V0Lm5hbWUsJC5sYXlvdXQu Y2xhc3NOYW1lXS5qb2luKCcgJykpO319OyQuYnJvd3NlclRlc3QobmF2aWdhdG9y LnVzZXJBZ2VudCk7fSkoalF1ZXJ5KTsoZnVuY3Rpb24oJCl7JC5mbi5jb2xsYXBz aWJsZVRhYnM9ZnVuY3Rpb24oJCRvcHRpb25zKXtpZighdGhpcy5sZW5ndGgpcmV0 dXJuIHRoaXM7dmFyICRzZXR0aW5ncz0kLmV4dGVuZCh7fSwkLmNvbGxhcHNpYmxl VGFicy5kZWZhdWx0cywkJG9wdGlvbnMpO3RoaXMuZWFjaChmdW5jdGlvbigpe3Zh ciAkdGhpcz0kKHRoaXMpOyQuY29sbGFwc2libGVUYWJzLmluc3RhbmNlcz0oJC5j b2xsYXBzaWJsZVRhYnMuaW5zdGFuY2VzLmxlbmd0aD09MD8kdGhpczokLmNvbGxh cHNpYmxlVGFicy5pbnN0YW5jZXMuYWRkKCR0aGlzKSk7JHRoaXMuZGF0YSgnY29s bGFwc2libGVUYWJzU2V0dGluZ3MnLCRzZXR0aW5ncyk7JHRoaXMuY2hpbGRyZW4o JHNldHRpbmdzLmNvbGxhcHNpYmxlKS5lYWNoKGZ1bmN0aW9uKCl7JC5jb2xsYXBz aWJsZVRhYnMuYWRkRGF0YSgkKHRoaXMpKTt9KTt9KTtpZighJC5jb2xsYXBzaWJs ZVRhYnMuYm91bmRFdmVudCl7JCh3aW5kb3cpLmRlbGF5ZWRCaW5kKCc1MDAnLCdy ZXNpemUnLGZ1bmN0aW9uKCl7JC5jb2xsYXBzaWJsZVRhYnMuaGFuZGxlUmVzaXpl KCk7fSk7fQokLmNvbGxhcHNpYmxlVGFicy5oYW5kbGVSZXNpemUoKTtyZXR1cm4g dGhpczt9OyQuY29sbGFwc2libGVUYWJzPXtpbnN0YW5jZXM6W10sYm91bmRFdmVu dDpudWxsLGRlZmF1bHRzOntleHBhbmRlZENvbnRhaW5lcjonI3Atdmlld3MgdWwn LGNvbGxhcHNlZENvbnRhaW5lcjonI3AtY2FjdGlvbnMgdWwnLGNvbGxhcHNpYmxl OidsaS5jb2xsYXBzaWJsZScsc2hpZnRpbmc6ZmFsc2UsZXhwYW5kQ29uZGl0aW9u OmZ1bmN0aW9uKGVsZVdpZHRoKXtyZXR1cm4oJCgnI2xlZnQtbmF2aWdhdGlvbicp LnBvc2l0aW9uKCkubGVmdCskKCcjbGVmdC1uYXZpZ2F0aW9uJykud2lkdGgoKSk8 KCQoJyNyaWdodC1uYXZpZ2F0aW9uJykucG9zaXRpb24oKS5sZWZ0LWVsZVdpZHRo KTt9LGNvbGxhcHNlQ29uZGl0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuKCQoJyNsZWZ0 LW5hdmlnYXRpb24nKS5wb3NpdGlvbigpLmxlZnQrJCgnI2xlZnQtbmF2aWdhdGlv bicpLndpZHRoKCkpPiQoJyNyaWdodC1uYXZpZ2F0aW9uJykucG9zaXRpb24oKS5s ZWZ0O319LGFkZERhdGE6ZnVuY3Rpb24oJGNvbGxhcHNpYmxlKXt2YXIgJHNldHRp bmdzPSRjb2xsYXBzaWJsZS5wYXJlbnQoKS5kYXRhKCdjb2xsYXBzaWJsZVRhYnNT ZXR0aW5ncycpOyRjb2xsYXBzaWJsZS5kYXRhKCdjb2xsYXBzaWJsZVRhYnNTZXR0 aW5ncycseydleHBhbmRlZENvbnRhaW5lcic6JHNldHRpbmdzLmV4cGFuZGVkQ29u dGFpbmVyLCdjb2xsYXBzZWRDb250YWluZXInOiRzZXR0aW5ncy5jb2xsYXBzZWRD b250YWluZXIsJ2V4cGFuZGVkV2lkdGgnOiRjb2xsYXBzaWJsZS53aWR0aCgpLCdw cmV2RWxlbWVudCc6JGNvbGxhcHNpYmxlLnByZXYoKX0pO30sZ2V0U2V0dGluZ3M6 ZnVuY3Rpb24oJGNvbGxhcHNpYmxlKXt2YXIgJHNldHRpbmdzPSRjb2xsYXBzaWJs ZS5kYXRhKCdjb2xsYXBzaWJsZVRhYnNTZXR0aW5ncycpO2lmKHR5cGVvZiAkc2V0 dGluZ3M9PSd1bmRlZmluZWQnKXskLmNvbGxhcHNpYmxlVGFicy5hZGREYXRhKCRj b2xsYXBzaWJsZSk7JHNldHRpbmdzPSRjb2xsYXBzaWJsZS5kYXRhKCdjb2xsYXBz aWJsZVRhYnNTZXR0aW5ncycpO30KcmV0dXJuICRzZXR0aW5nczt9LGhhbmRsZVJl c2l6ZTpmdW5jdGlvbihlKXskLmNvbGxhcHNpYmxlVGFicy5pbnN0YW5jZXMuZWFj aChmdW5jdGlvbigpe3ZhciAkdGhpcz0kKHRoaXMpLGRhdGE9JC5jb2xsYXBzaWJs ZVRhYnMuZ2V0U2V0dGluZ3MoJHRoaXMpO2lmKGRhdGEuc2hpZnRpbmcpcmV0dXJu O2lmKCR0aGlzLmNoaWxkcmVuKGRhdGEuY29sbGFwc2libGUpLmxlbmd0aD4wJiZk YXRhLmNvbGxhcHNlQ29uZGl0aW9uKCkpeyR0aGlzLnRyaWdnZXIoImJlZm9yZVRh YkNvbGxhcHNlIik7JC5jb2xsYXBzaWJsZVRhYnMubW92ZVRvQ29sbGFwc2VkKCR0 aGlzLmNoaWxkcmVuKGRhdGEuY29sbGFwc2libGUrJzpsYXN0JykpO30KaWYoJChk YXRhLmNvbGxhcHNlZENvbnRhaW5lcisnICcrZGF0YS5jb2xsYXBzaWJsZSkubGVu Z3RoPjAmJmRhdGEuZXhwYW5kQ29uZGl0aW9uKCQuY29sbGFwc2libGVUYWJzLmdl dFNldHRpbmdzKCQoZGF0YS5jb2xsYXBzZWRDb250YWluZXIpLmNoaWxkcmVuKGRh dGEuY29sbGFwc2libGUrIjpmaXJzdCIpKS5leHBhbmRlZFdpZHRoKSl7JHRoaXMu dHJpZ2dlcigiYmVmb3JlVGFiRXhwYW5kIik7JC5jb2xsYXBzaWJsZVRhYnMubW92 ZVRvRXhwYW5kZWQoZGF0YS5jb2xsYXBzZWRDb250YWluZXIrIiAiK2RhdGEuY29s bGFwc2libGUrJzpmaXJzdCcpO319KTt9LG1vdmVUb0NvbGxhcHNlZDpmdW5jdGlv bihlbGUpe3ZhciAkbW92aW5nPSQoZWxlKTt2YXIgZGF0YT0kLmNvbGxhcHNpYmxl VGFicy5nZXRTZXR0aW5ncygkbW92aW5nKTt2YXIgZGF0YUV4cD0kLmNvbGxhcHNp YmxlVGFicy5nZXRTZXR0aW5ncyhkYXRhLmV4cGFuZGVkQ29udGFpbmVyKTtkYXRh RXhwLnNoaWZ0aW5nPXRydWU7JG1vdmluZy5yZW1vdmUoKS5wcmVwZW5kVG8oZGF0 YS5jb2xsYXBzZWRDb250YWluZXIpLmRhdGEoJ2NvbGxhcHNpYmxlVGFic1NldHRp bmdzJyxkYXRhKTtkYXRhRXhwLnNoaWZ0aW5nPWZhbHNlOyQuY29sbGFwc2libGVU YWJzLmhhbmRsZVJlc2l6ZSgpO30sbW92ZVRvRXhwYW5kZWQ6ZnVuY3Rpb24oZWxl KXt2YXIgJG1vdmluZz0kKGVsZSk7dmFyIGRhdGE9JC5jb2xsYXBzaWJsZVRhYnMu Z2V0U2V0dGluZ3MoJG1vdmluZyk7dmFyIGRhdGFFeHA9JC5jb2xsYXBzaWJsZVRh YnMuZ2V0U2V0dGluZ3MoZGF0YS5leHBhbmRlZENvbnRhaW5lcik7ZGF0YUV4cC5z aGlmdGluZz10cnVlOyRtb3ZpbmcucmVtb3ZlKCkuaW5zZXJ0QWZ0ZXIoZGF0YS5w cmV2RWxlbWVudCkuZGF0YSgnY29sbGFwc2libGVUYWJzU2V0dGluZ3MnLGRhdGEp O2RhdGFFeHAuc2hpZnRpbmc9ZmFsc2U7JC5jb2xsYXBzaWJsZVRhYnMuaGFuZGxl UmVzaXplKCk7fX07fSkoalF1ZXJ5KTsoZnVuY3Rpb24oalF1ZXJ5KXtqUXVlcnku ZWFjaChbJ2JhY2tncm91bmRDb2xvcicsJ2JvcmRlckJvdHRvbUNvbG9yJywnYm9y ZGVyTGVmdENvbG9yJywnYm9yZGVyUmlnaHRDb2xvcicsJ2JvcmRlclRvcENvbG9y JywnY29sb3InLCdvdXRsaW5lQ29sb3InXSxmdW5jdGlvbihpLGF0dHIpe2pRdWVy eS5meC5zdGVwW2F0dHJdPWZ1bmN0aW9uKGZ4KXtpZihmeC5zdGF0ZT09MCl7Zngu c3RhcnQ9Z2V0Q29sb3IoZnguZWxlbSxhdHRyKTtmeC5lbmQ9Z2V0UkdCKGZ4LmVu ZCk7fQpmeC5lbGVtLnN0eWxlW2F0dHJdPSJyZ2IoIitbTWF0aC5tYXgoTWF0aC5t aW4ocGFyc2VJbnQoKGZ4LnBvcyooZnguZW5kWzBdLWZ4LnN0YXJ0WzBdKSkrZngu c3RhcnRbMF0pLDI1NSksMCksTWF0aC5tYXgoTWF0aC5taW4ocGFyc2VJbnQoKGZ4 LnBvcyooZnguZW5kWzFdLWZ4LnN0YXJ0WzFdKSkrZnguc3RhcnRbMV0pLDI1NSks MCksTWF0aC5tYXgoTWF0aC5taW4ocGFyc2VJbnQoKGZ4LnBvcyooZnguZW5kWzJd LWZ4LnN0YXJ0WzJdKSkrZnguc3RhcnRbMl0pLDI1NSksMCldLmpvaW4oIiwiKSsi KSI7fX0pO2Z1bmN0aW9uIGdldFJHQihjb2xvcil7dmFyIHJlc3VsdDtpZihjb2xv ciYmY29sb3IuY29uc3RydWN0b3I9PUFycmF5JiZjb2xvci5sZW5ndGg9PTMpCnJl dHVybiBjb2xvcjtpZihyZXN1bHQ9L3JnYlwoXHMqKFswLTldezEsM30pXHMqLFxz KihbMC05XXsxLDN9KVxzKixccyooWzAtOV17MSwzfSlccypcKS8uZXhlYyhjb2xv cikpCnJldHVybltwYXJzZUludChyZXN1bHRbMV0pLHBhcnNlSW50KHJlc3VsdFsy XSkscGFyc2VJbnQocmVzdWx0WzNdKV07aWYocmVzdWx0PS9yZ2JcKFxzKihbMC05 XSsoPzpcLlswLTldKyk/KVwlXHMqLFxzKihbMC05XSsoPzpcLlswLTldKyk/KVwl XHMqLFxzKihbMC05XSsoPzpcLlswLTldKyk/KVwlXHMqXCkvLmV4ZWMoY29sb3Ip KQpyZXR1cm5bcGFyc2VGbG9hdChyZXN1bHRbMV0pKjIuNTUscGFyc2VGbG9hdChy ZXN1bHRbMl0pKjIuNTUscGFyc2VGbG9hdChyZXN1bHRbM10pKjIuNTVdO2lmKHJl c3VsdD0vIyhbYS1mQS1GMC05XXsyfSkoW2EtZkEtRjAtOV17Mn0pKFthLWZBLUYw LTldezJ9KS8uZXhlYyhjb2xvcikpCnJldHVybltwYXJzZUludChyZXN1bHRbMV0s MTYpLHBhcnNlSW50KHJlc3VsdFsyXSwxNikscGFyc2VJbnQocmVzdWx0WzNdLDE2 KV07aWYocmVzdWx0PS8jKFthLWZBLUYwLTldKShbYS1mQS1GMC05XSkoW2EtZkEt RjAtOV0pLy5leGVjKGNvbG9yKSkKcmV0dXJuW3BhcnNlSW50KHJlc3VsdFsxXSty ZXN1bHRbMV0sMTYpLHBhcnNlSW50KHJlc3VsdFsyXStyZXN1bHRbMl0sMTYpLHBh cnNlSW50KHJlc3VsdFszXStyZXN1bHRbM10sMTYpXTtyZXR1cm4gY29sb3JzW2pR dWVyeS50cmltKGNvbG9yKS50b0xvd2VyQ2FzZSgpXTt9CmZ1bmN0aW9uIGdldENv bG9yKGVsZW0sYXR0cil7dmFyIGNvbG9yO2Rve2NvbG9yPWpRdWVyeS5jdXJDU1Mo ZWxlbSxhdHRyKTtpZihjb2xvciE9JycmJmNvbG9yIT0ndHJhbnNwYXJlbnQnfHxq UXVlcnkubm9kZU5hbWUoZWxlbSwiYm9keSIpKQpicmVhazthdHRyPSJiYWNrZ3Jv dW5kQ29sb3IiO313aGlsZShlbGVtPWVsZW0ucGFyZW50Tm9kZSk7cmV0dXJuIGdl dFJHQihjb2xvcik7fTt2YXIgY29sb3JzPXthcXVhOlswLDI1NSwyNTVdLGF6dXJl OlsyNDAsMjU1LDI1NV0sYmVpZ2U6WzI0NSwyNDUsMjIwXSxibGFjazpbMCwwLDBd LGJsdWU6WzAsMCwyNTVdLGJyb3duOlsxNjUsNDIsNDJdLGN5YW46WzAsMjU1LDI1 NV0sZGFya2JsdWU6WzAsMCwxMzldLGRhcmtjeWFuOlswLDEzOSwxMzldLGRhcmtn cmV5OlsxNjksMTY5LDE2OV0sZGFya2dyZWVuOlswLDEwMCwwXSxkYXJra2hha2k6 WzE4OSwxODMsMTA3XSxkYXJrbWFnZW50YTpbMTM5LDAsMTM5XSxkYXJrb2xpdmVn cmVlbjpbODUsMTA3LDQ3XSxkYXJrb3JhbmdlOlsyNTUsMTQwLDBdLGRhcmtvcmNo aWQ6WzE1Myw1MCwyMDRdLGRhcmtyZWQ6WzEzOSwwLDBdLGRhcmtzYWxtb246WzIz MywxNTAsMTIyXSxkYXJrdmlvbGV0OlsxNDgsMCwyMTFdLGZ1Y2hzaWE6WzI1NSww LDI1NV0sZ29sZDpbMjU1LDIxNSwwXSxncmVlbjpbMCwxMjgsMF0saW5kaWdvOls3 NSwwLDEzMF0sa2hha2k6WzI0MCwyMzAsMTQwXSxsaWdodGJsdWU6WzE3MywyMTYs MjMwXSxsaWdodGN5YW46WzIyNCwyNTUsMjU1XSxsaWdodGdyZWVuOlsxNDQsMjM4 LDE0NF0sbGlnaHRncmV5OlsyMTEsMjExLDIxMV0sbGlnaHRwaW5rOlsyNTUsMTgy LDE5M10sbGlnaHR5ZWxsb3c6WzI1NSwyNTUsMjI0XSxsaW1lOlswLDI1NSwwXSxt YWdlbnRhOlsyNTUsMCwyNTVdLG1hcm9vbjpbMTI4LDAsMF0sbmF2eTpbMCwwLDEy OF0sb2xpdmU6WzEyOCwxMjgsMF0sb3JhbmdlOlsyNTUsMTY1LDBdLHBpbms6WzI1 NSwxOTIsMjAzXSxwdXJwbGU6WzEyOCwwLDEyOF0sdmlvbGV0OlsxMjgsMCwxMjhd LHJlZDpbMjU1LDAsMF0sc2lsdmVyOlsxOTIsMTkyLDE5Ml0sd2hpdGU6WzI1NSwy NTUsMjU1XSx5ZWxsb3c6WzI1NSwyNTUsMF19O30pKGpRdWVyeSk7alF1ZXJ5LmNv b2tpZT1mdW5jdGlvbihuYW1lLHZhbHVlLG9wdGlvbnMpe2lmKHR5cGVvZiB2YWx1 ZSE9J3VuZGVmaW5lZCcpe29wdGlvbnM9b3B0aW9uc3x8e307aWYodmFsdWU9PT1u dWxsKXt2YWx1ZT0nJztvcHRpb25zLmV4cGlyZXM9LTE7fQp2YXIgZXhwaXJlcz0n JztpZihvcHRpb25zLmV4cGlyZXMmJih0eXBlb2Ygb3B0aW9ucy5leHBpcmVzPT0n bnVtYmVyJ3x8b3B0aW9ucy5leHBpcmVzLnRvVVRDU3RyaW5nKSl7dmFyIGRhdGU7 aWYodHlwZW9mIG9wdGlvbnMuZXhwaXJlcz09J251bWJlcicpe2RhdGU9bmV3IERh dGUoKTtkYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkrKG9wdGlvbnMuZXhwaXJl cyoyNCo2MCo2MCoxMDAwKSk7fWVsc2V7ZGF0ZT1vcHRpb25zLmV4cGlyZXM7fQpl eHBpcmVzPSc7IGV4cGlyZXM9JytkYXRlLnRvVVRDU3RyaW5nKCk7fQp2YXIgcGF0 aD1vcHRpb25zLnBhdGg/JzsgcGF0aD0nKyhvcHRpb25zLnBhdGgpOicnO3ZhciBk b21haW49b3B0aW9ucy5kb21haW4/JzsgZG9tYWluPScrKG9wdGlvbnMuZG9tYWlu KTonJzt2YXIgc2VjdXJlPW9wdGlvbnMuc2VjdXJlPyc7IHNlY3VyZSc6Jyc7ZG9j dW1lbnQuY29va2llPVtuYW1lLCc9JyxlbmNvZGVVUklDb21wb25lbnQodmFsdWUp LGV4cGlyZXMscGF0aCxkb21haW4sc2VjdXJlXS5qb2luKCcnKTt9ZWxzZXt2YXIg Y29va2llVmFsdWU9bnVsbDtpZihkb2N1bWVudC5jb29raWUmJmRvY3VtZW50LmNv b2tpZSE9Jycpe3ZhciBjb29raWVzPWRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycp O2Zvcih2YXIgaT0wO2k8Y29va2llcy5sZW5ndGg7aSsrKXt2YXIgY29va2llPWpR dWVyeS50cmltKGNvb2tpZXNbaV0pO2lmKGNvb2tpZS5zdWJzdHJpbmcoMCxuYW1l Lmxlbmd0aCsxKT09KG5hbWUrJz0nKSl7Y29va2llVmFsdWU9ZGVjb2RlVVJJQ29t cG9uZW50KGNvb2tpZS5zdWJzdHJpbmcobmFtZS5sZW5ndGgrMSkpO2JyZWFrO319 fQpyZXR1cm4gY29va2llVmFsdWU7fX07KGZ1bmN0aW9uKCQpe2Z1bmN0aW9uIGVu Y29kZUV2ZW50KGV2ZW50KXtyZXR1cm4gZXZlbnQucmVwbGFjZSgvLS9nLCctLScp LnJlcGxhY2UoLyAvZywnLScpO30KJC5mbi5leHRlbmQoe2RlbGF5ZWRCaW5kOmZ1 bmN0aW9uKHRpbWVvdXQsZXZlbnQsZGF0YSxjYWxsYmFjayl7dmFyIGVuY0V2ZW50 PWVuY29kZUV2ZW50KGV2ZW50KTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7 dmFyIHRoYXQ9dGhpcztpZighKCQodGhpcykuZGF0YSgnX2RlbGF5ZWRCaW5kQm91 bmQtJytlbmNFdmVudCsnLScrdGltZW91dCkpKXskKHRoaXMpLmRhdGEoJ19kZWxh eWVkQmluZEJvdW5kLScrZW5jRXZlbnQrJy0nK3RpbWVvdXQsdHJ1ZSk7JCh0aGlz KS5iaW5kKGV2ZW50LGZ1bmN0aW9uKCl7dmFyIHRpbWVySUQ9JCh0aGlzKS5kYXRh KCdfZGVsYXllZEJpbmRUaW1lcklELScrZW5jRXZlbnQrJy0nK3RpbWVvdXQpO2lm KHR5cGVvZiB0aW1lcklEIT0ndW5kZWZpbmVkJykKY2xlYXJUaW1lb3V0KHRpbWVy SUQpO3RpbWVySUQ9c2V0VGltZW91dChmdW5jdGlvbigpeyQodGhhdCkudHJpZ2dl cignX2RlbGF5ZWRCaW5kLScrZW5jRXZlbnQrJy0nK3RpbWVvdXQpO30sdGltZW91 dCk7JCh0aGlzKS5kYXRhKCdfZGVsYXllZEJpbmRUaW1lcklELScrZW5jRXZlbnQr Jy0nK3RpbWVvdXQsdGltZXJJRCk7fSk7fQokKHRoaXMpLmJpbmQoJ19kZWxheWVk QmluZC0nK2VuY0V2ZW50KyctJyt0aW1lb3V0LGRhdGEsY2FsbGJhY2spO30pO30s ZGVsYXllZEJpbmRDYW5jZWw6ZnVuY3Rpb24odGltZW91dCxldmVudCl7dmFyIGVu Y0V2ZW50PWVuY29kZUV2ZW50KGV2ZW50KTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0 aW9uKCl7dmFyIHRpbWVySUQ9JCh0aGlzKS5kYXRhKCdfZGVsYXllZEJpbmRUaW1l cklELScrZW5jRXZlbnQrJy0nK3RpbWVvdXQpO2lmKHR5cGVvZiB0aW1lcklEIT0n dW5kZWZpbmVkJykKY2xlYXJUaW1lb3V0KHRpbWVySUQpO30pO30sZGVsYXllZEJp bmRVbmJpbmQ6ZnVuY3Rpb24odGltZW91dCxldmVudCxjYWxsYmFjayl7dmFyIGVu Y0V2ZW50PWVuY29kZUV2ZW50KGV2ZW50KTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0 aW9uKCl7JCh0aGlzKS51bmJpbmQoJ19kZWxheWVkQmluZC0nK2VuY0V2ZW50Kyct Jyt0aW1lb3V0LGNhbGxiYWNrKTt9KTt9fSk7fSkoalF1ZXJ5KTsoZnVuY3Rpb24o JCl7JC5zdWdnZXN0aW9ucz17Y2FuY2VsOmZ1bmN0aW9uKGNvbnRleHQpe2lmKGNv bnRleHQuZGF0YS50aW1lcklEIT1udWxsKXtjbGVhclRpbWVvdXQoY29udGV4dC5k YXRhLnRpbWVySUQpO30KaWYodHlwZW9mIGNvbnRleHQuY29uZmlnLmNhbmNlbD09 J2Z1bmN0aW9uJyl7Y29udGV4dC5jb25maWcuY2FuY2VsLmNhbGwoY29udGV4dC5k YXRhLiR0ZXh0Ym94KTt9fSxyZXN0b3JlOmZ1bmN0aW9uKGNvbnRleHQpe2NvbnRl eHQuZGF0YS4kdGV4dGJveC52YWwoY29udGV4dC5kYXRhLnByZXZUZXh0KTt9LHVw ZGF0ZTpmdW5jdGlvbihjb250ZXh0LGRlbGF5ZWQpe2Z1bmN0aW9uIG1heWJlRmV0 Y2goKXtpZihjb250ZXh0LmRhdGEuJHRleHRib3gudmFsKCkhPT1jb250ZXh0LmRh dGEucHJldlRleHQpe2NvbnRleHQuZGF0YS5wcmV2VGV4dD1jb250ZXh0LmRhdGEu JHRleHRib3gudmFsKCk7aWYodHlwZW9mIGNvbnRleHQuY29uZmlnLmZldGNoPT0n ZnVuY3Rpb24nKXtjb250ZXh0LmNvbmZpZy5mZXRjaC5jYWxsKGNvbnRleHQuZGF0 YS4kdGV4dGJveCxjb250ZXh0LmRhdGEuJHRleHRib3gudmFsKCkpO319fQppZihj b250ZXh0LmRhdGEudGltZXJJRCE9bnVsbCl7Y2xlYXJUaW1lb3V0KGNvbnRleHQu ZGF0YS50aW1lcklEKTt9CmlmKGRlbGF5ZWQpe2NvbnRleHQuZGF0YS50aW1lcklE PXNldFRpbWVvdXQobWF5YmVGZXRjaCxjb250ZXh0LmNvbmZpZy5kZWxheSk7fWVs c2V7bWF5YmVGZXRjaCgpO30KJC5zdWdnZXN0aW9ucy5zcGVjaWFsKGNvbnRleHQp O30sc3BlY2lhbDpmdW5jdGlvbihjb250ZXh0KXtpZih0eXBlb2YgY29udGV4dC5j b25maWcuc3BlY2lhbC5yZW5kZXI9PSdmdW5jdGlvbicpe3NldFRpbWVvdXQoZnVu Y3Rpb24oKXskc3BlY2lhbD1jb250ZXh0LmRhdGEuJGNvbnRhaW5lci5maW5kKCcu c3VnZ2VzdGlvbnMtc3BlY2lhbCcpO2NvbnRleHQuY29uZmlnLnNwZWNpYWwucmVu ZGVyLmNhbGwoJHNwZWNpYWwsY29udGV4dC5kYXRhLiR0ZXh0Ym94LnZhbCgpKTt9 LDEpO319LGNvbmZpZ3VyZTpmdW5jdGlvbihjb250ZXh0LHByb3BlcnR5LHZhbHVl KXtzd2l0Y2gocHJvcGVydHkpe2Nhc2UnZmV0Y2gnOmNhc2UnY2FuY2VsJzpjYXNl J3NwZWNpYWwnOmNhc2UncmVzdWx0JzpjYXNlJyRyZWdpb24nOmNvbnRleHQuY29u ZmlnW3Byb3BlcnR5XT12YWx1ZTticmVhaztjYXNlJ3N1Z2dlc3Rpb25zJzpjb250 ZXh0LmNvbmZpZ1twcm9wZXJ0eV09dmFsdWU7aWYodHlwZW9mIGNvbnRleHQuZGF0 YSE9PSd1bmRlZmluZWQnKXtpZihjb250ZXh0LmRhdGEuJHRleHRib3gudmFsKCku bGVuZ3RoPT0wKXtjb250ZXh0LmRhdGEuJGNvbnRhaW5lci5oaWRlKCk7fWVsc2V7 Y29udGV4dC5kYXRhLiRjb250YWluZXIuc2hvdygpO3ZhciBuZXdDU1M9eyd0b3An OmNvbnRleHQuY29uZmlnLiRyZWdpb24ub2Zmc2V0KCkudG9wK2NvbnRleHQuY29u ZmlnLiRyZWdpb24ub3V0ZXJIZWlnaHQoKSwnYm90dG9tJzonYXV0bycsJ3dpZHRo Jzpjb250ZXh0LmNvbmZpZy4kcmVnaW9uLm91dGVyV2lkdGgoKSwnaGVpZ2h0Jzon YXV0byd9CmlmKGNvbnRleHQuY29uZmlnLnBvc2l0aW9uRnJvbUxlZnQpe25ld0NT U1snbGVmdCddPWNvbnRleHQuY29uZmlnLiRyZWdpb24ub2Zmc2V0KCkubGVmdDtu ZXdDU1NbJ3JpZ2h0J109J2F1dG8nO31lbHNle25ld0NTU1snbGVmdCddPSdhdXRv JztuZXdDU1NbJ3JpZ2h0J109JCgnYm9keScpLndpZHRoKCktKGNvbnRleHQuY29u ZmlnLiRyZWdpb24ub2Zmc2V0KCkubGVmdCtjb250ZXh0LmNvbmZpZy4kcmVnaW9u Lm91dGVyV2lkdGgoKSk7fQpjb250ZXh0LmRhdGEuJGNvbnRhaW5lci5jc3MobmV3 Q1NTKTt2YXIgJHJlc3VsdHM9Y29udGV4dC5kYXRhLiRjb250YWluZXIuY2hpbGRy ZW4oJy5zdWdnZXN0aW9ucy1yZXN1bHRzJyk7JHJlc3VsdHMuZW1wdHkoKTt2YXIg ZXhwV2lkdGg9LTE7dmFyICRhdXRvRWxsaXBzZU1lPSQoW10pO2Zvcih2YXIgaT0w O2k8Y29udGV4dC5jb25maWcuc3VnZ2VzdGlvbnMubGVuZ3RoO2krKyl7dmFyICRy ZXN1bHQ9JCgnPGRpdiAvPicpLmFkZENsYXNzKCdzdWdnZXN0aW9ucy1yZXN1bHQn KS5hdHRyKCdyZWwnLGkpLmRhdGEoJ3RleHQnLGNvbnRleHQuY29uZmlnLnN1Z2dl c3Rpb25zW2ldKS5tb3VzZW92ZXIoZnVuY3Rpb24oZSl7JC5zdWdnZXN0aW9ucy5o aWdobGlnaHQoY29udGV4dCwkKHRoaXMpLmNsb3Nlc3QoJy5zdWdnZXN0aW9ucy1y ZXN1bHRzIGRpdicpLGZhbHNlKTt9KS5hcHBlbmRUbygkcmVzdWx0cyk7aWYodHlw ZW9mIGNvbnRleHQuY29uZmlnLnJlc3VsdC5yZW5kZXI9PSdmdW5jdGlvbicpe2Nv bnRleHQuY29uZmlnLnJlc3VsdC5yZW5kZXIuY2FsbCgkcmVzdWx0LGNvbnRleHQu Y29uZmlnLnN1Z2dlc3Rpb25zW2ldKTt9ZWxzZXskcmVzdWx0LmFwcGVuZCgkKCc8 c3BhbiAvPicpLmNzcygnd2hpdGVTcGFjZScsJ25vd3JhcCcpLnRleHQoY29udGV4 dC5jb25maWcuc3VnZ2VzdGlvbnNbaV0pKTt2YXIgJHNwYW49JHJlc3VsdC5jaGls ZHJlbignc3BhbicpO2lmKCRzcGFuLm91dGVyV2lkdGgoKT4kcmVzdWx0LndpZHRo KCkmJiRzcGFuLm91dGVyV2lkdGgoKT5leHBXaWR0aCl7ZXhwV2lkdGg9JHNwYW4u b3V0ZXJXaWR0aCgpO30KJGF1dG9FbGxpcHNlTWU9JGF1dG9FbGxpcHNlTWUuYWRk KCRyZXN1bHQpO319CmlmKGV4cFdpZHRoPmNvbnRleHQuZGF0YS4kY29udGFpbmVy LndpZHRoKCkpe3ZhciBtYXhXaWR0aD1jb250ZXh0LmNvbmZpZy5tYXhFeHBhbmRG YWN0b3IqY29udGV4dC5kYXRhLiR0ZXh0Ym94LndpZHRoKCk7Y29udGV4dC5kYXRh LiRjb250YWluZXIud2lkdGgoTWF0aC5taW4oZXhwV2lkdGgsbWF4V2lkdGgpKTt9 CiRhdXRvRWxsaXBzZU1lLmF1dG9FbGxpcHNpcyh7aGFzU3Bhbjp0cnVlLHRvb2x0 aXA6dHJ1ZX0pO319CmJyZWFrO2Nhc2UnbWF4Um93cyc6Y29udGV4dC5jb25maWdb cHJvcGVydHldPU1hdGgubWF4KDEsTWF0aC5taW4oMTAwLHZhbHVlKSk7YnJlYWs7 Y2FzZSdkZWxheSc6Y29udGV4dC5jb25maWdbcHJvcGVydHldPU1hdGgubWF4KDAs TWF0aC5taW4oMTIwMCx2YWx1ZSkpO2JyZWFrO2Nhc2UnbWF4RXhwYW5kRmFjdG9y Jzpjb250ZXh0LmNvbmZpZ1twcm9wZXJ0eV09TWF0aC5tYXgoMSx2YWx1ZSk7YnJl YWs7Y2FzZSdzdWJtaXRPbkNsaWNrJzpjYXNlJ3Bvc2l0aW9uRnJvbUxlZnQnOmNv bnRleHQuY29uZmlnW3Byb3BlcnR5XT12YWx1ZT90cnVlOmZhbHNlO2JyZWFrO319 LGhpZ2hsaWdodDpmdW5jdGlvbihjb250ZXh0LHJlc3VsdCx1cGRhdGVUZXh0Ym94 KXt2YXIgc2VsZWN0ZWQ9Y29udGV4dC5kYXRhLiRjb250YWluZXIuZmluZCgnLnN1 Z2dlc3Rpb25zLXJlc3VsdC1jdXJyZW50Jyk7aWYoIXJlc3VsdC5nZXR8fHNlbGVj dGVkLmdldCgwKSE9cmVzdWx0LmdldCgwKSl7aWYocmVzdWx0PT0ncHJldicpe2lm KHNlbGVjdGVkLmlzKCcuc3VnZ2VzdGlvbnMtc3BlY2lhbCcpKXtyZXN1bHQ9Y29u dGV4dC5kYXRhLiRjb250YWluZXIuZmluZCgnLnN1Z2dlc3Rpb25zLXJlc3VsdHMg ZGl2Omxhc3QnKX1lbHNle3Jlc3VsdD1zZWxlY3RlZC5wcmV2KCk7aWYoc2VsZWN0 ZWQubGVuZ3RoPT0wKXtpZihjb250ZXh0LmRhdGEuJGNvbnRhaW5lci5maW5kKCcu c3VnZ2VzdGlvbnMtc3BlY2lhbCcpLmh0bWwoKSE9IiIpe3Jlc3VsdD1jb250ZXh0 LmRhdGEuJGNvbnRhaW5lci5maW5kKCcuc3VnZ2VzdGlvbnMtc3BlY2lhbCcpO31l bHNle3Jlc3VsdD1jb250ZXh0LmRhdGEuJGNvbnRhaW5lci5maW5kKCcuc3VnZ2Vz dGlvbnMtcmVzdWx0cyBkaXY6bGFzdCcpO319fX1lbHNlIGlmKHJlc3VsdD09J25l eHQnKXtpZihzZWxlY3RlZC5sZW5ndGg9PTApe3Jlc3VsdD1jb250ZXh0LmRhdGEu JGNvbnRhaW5lci5maW5kKCcuc3VnZ2VzdGlvbnMtcmVzdWx0cyBkaXY6Zmlyc3Qn KTtpZihyZXN1bHQubGVuZ3RoPT0wJiZjb250ZXh0LmRhdGEuJGNvbnRhaW5lci5m aW5kKCcuc3VnZ2VzdGlvbnMtc3BlY2lhbCcpLmh0bWwoKSE9IiIpe3Jlc3VsdD1j b250ZXh0LmRhdGEuJGNvbnRhaW5lci5maW5kKCcuc3VnZ2VzdGlvbnMtc3BlY2lh bCcpO319ZWxzZXtyZXN1bHQ9c2VsZWN0ZWQubmV4dCgpO2lmKHNlbGVjdGVkLmlz KCcuc3VnZ2VzdGlvbnMtc3BlY2lhbCcpKXtyZXN1bHQ9JChbXSk7fWVsc2UgaWYo cmVzdWx0Lmxlbmd0aD09MCYmY29udGV4dC5kYXRhLiRjb250YWluZXIuZmluZCgn LnN1Z2dlc3Rpb25zLXNwZWNpYWwnKS5odG1sKCkhPSIiKXtyZXN1bHQ9Y29udGV4 dC5kYXRhLiRjb250YWluZXIuZmluZCgnLnN1Z2dlc3Rpb25zLXNwZWNpYWwnKTt9 fX0Kc2VsZWN0ZWQucmVtb3ZlQ2xhc3MoJ3N1Z2dlc3Rpb25zLXJlc3VsdC1jdXJy ZW50Jyk7cmVzdWx0LmFkZENsYXNzKCdzdWdnZXN0aW9ucy1yZXN1bHQtY3VycmVu dCcpO30KaWYodXBkYXRlVGV4dGJveCl7aWYocmVzdWx0Lmxlbmd0aD09MCl7JC5z dWdnZXN0aW9ucy5yZXN0b3JlKGNvbnRleHQpO31lbHNle2NvbnRleHQuZGF0YS4k dGV4dGJveC52YWwocmVzdWx0LmRhdGEoJ3RleHQnKSk7Y29udGV4dC5kYXRhLiR0 ZXh0Ym94LmNoYW5nZSgpO30KY29udGV4dC5kYXRhLiR0ZXh0Ym94LnRyaWdnZXIo J2NoYW5nZScpO30KJC5zdWdnZXN0aW9ucy5zcGVjaWFsKGNvbnRleHQpO30sa2V5 cHJlc3M6ZnVuY3Rpb24oZSxjb250ZXh0LGtleSl7dmFyIHdhc1Zpc2libGU9Y29u dGV4dC5kYXRhLiRjb250YWluZXIuaXMoJzp2aXNpYmxlJyk7dmFyIHByZXZlbnRE ZWZhdWx0PWZhbHNlO3N3aXRjaChrZXkpe2Nhc2UgNDA6aWYod2FzVmlzaWJsZSl7 JC5zdWdnZXN0aW9ucy5oaWdobGlnaHQoY29udGV4dCwnbmV4dCcsZmFsc2UpO31l bHNleyQuc3VnZ2VzdGlvbnMudXBkYXRlKGNvbnRleHQsZmFsc2UpO30KcHJldmVu dERlZmF1bHQ9dHJ1ZTticmVhaztjYXNlIDM4OmlmKHdhc1Zpc2libGUpeyQuc3Vn Z2VzdGlvbnMuaGlnaGxpZ2h0KGNvbnRleHQsJ3ByZXYnLGZhbHNlKTt9CnByZXZl bnREZWZhdWx0PXdhc1Zpc2libGU7YnJlYWs7Y2FzZSAyNzpjb250ZXh0LmRhdGEu JGNvbnRhaW5lci5oaWRlKCk7JC5zdWdnZXN0aW9ucy5yZXN0b3JlKGNvbnRleHQp OyQuc3VnZ2VzdGlvbnMuY2FuY2VsKGNvbnRleHQpO2NvbnRleHQuZGF0YS4kdGV4 dGJveC50cmlnZ2VyKCdjaGFuZ2UnKTtwcmV2ZW50RGVmYXVsdD13YXNWaXNpYmxl O2JyZWFrO2Nhc2UgMTM6Y29udGV4dC5kYXRhLiRjb250YWluZXIuaGlkZSgpO3By ZXZlbnREZWZhdWx0PXdhc1Zpc2libGU7c2VsZWN0ZWQ9Y29udGV4dC5kYXRhLiRj b250YWluZXIuZmluZCgnLnN1Z2dlc3Rpb25zLXJlc3VsdC1jdXJyZW50Jyk7aWYo c2VsZWN0ZWQuc2l6ZSgpPT0wKXskLnN1Z2dlc3Rpb25zLmNhbmNlbChjb250ZXh0 KTtjb250ZXh0LmNvbmZpZy4kcmVnaW9uLmNsb3Nlc3QoJ2Zvcm0nKS5zdWJtaXQo KTt9ZWxzZSBpZihzZWxlY3RlZC5pcygnLnN1Z2dlc3Rpb25zLXNwZWNpYWwnKSl7 aWYodHlwZW9mIGNvbnRleHQuY29uZmlnLnNwZWNpYWwuc2VsZWN0PT0nZnVuY3Rp b24nKXtjb250ZXh0LmNvbmZpZy5zcGVjaWFsLnNlbGVjdC5jYWxsKHNlbGVjdGVk LGNvbnRleHQuZGF0YS4kdGV4dGJveCk7fX1lbHNle2lmKHR5cGVvZiBjb250ZXh0 LmNvbmZpZy5yZXN1bHQuc2VsZWN0PT0nZnVuY3Rpb24nKXskLnN1Z2dlc3Rpb25z LmhpZ2hsaWdodChjb250ZXh0LHNlbGVjdGVkLHRydWUpO2NvbnRleHQuY29uZmln LnJlc3VsdC5zZWxlY3QuY2FsbChzZWxlY3RlZCxjb250ZXh0LmRhdGEuJHRleHRi b3gpO31lbHNleyQuc3VnZ2VzdGlvbnMuaGlnaGxpZ2h0KGNvbnRleHQsc2VsZWN0 ZWQsdHJ1ZSk7fX0KYnJlYWs7ZGVmYXVsdDokLnN1Z2dlc3Rpb25zLnVwZGF0ZShj b250ZXh0LHRydWUpO2JyZWFrO30KaWYocHJldmVudERlZmF1bHQpe2UucHJldmVu dERlZmF1bHQoKTtlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO319fTskLmZu LnN1Z2dlc3Rpb25zPWZ1bmN0aW9uKCl7dmFyIHJldHVyblZhbHVlPW51bGw7dmFy IGFyZ3M9YXJndW1lbnRzOyQodGhpcykuZWFjaChmdW5jdGlvbigpe3ZhciBjb250 ZXh0PSQodGhpcykuZGF0YSgnc3VnZ2VzdGlvbnMtY29udGV4dCcpO2lmKHR5cGVv ZiBjb250ZXh0PT0ndW5kZWZpbmVkJ3x8Y29udGV4dD09bnVsbCl7Y29udGV4dD17 Y29uZmlnOnsnZmV0Y2gnOmZ1bmN0aW9uKCl7fSwnY2FuY2VsJzpmdW5jdGlvbigp e30sJ3NwZWNpYWwnOnt9LCdyZXN1bHQnOnt9LCckcmVnaW9uJzokKHRoaXMpLCdz dWdnZXN0aW9ucyc6W10sJ21heFJvd3MnOjcsJ2RlbGF5JzoxMjAsJ3N1Ym1pdE9u Q2xpY2snOmZhbHNlLCdtYXhFeHBhbmRGYWN0b3InOjMsJ3Bvc2l0aW9uRnJvbUxl ZnQnOnRydWV9fTt9CmlmKGFyZ3MubGVuZ3RoPjApe2lmKHR5cGVvZiBhcmdzWzBd PT0nb2JqZWN0Jyl7Zm9yKHZhciBrZXkgaW4gYXJnc1swXSl7JC5zdWdnZXN0aW9u cy5jb25maWd1cmUoY29udGV4dCxrZXksYXJnc1swXVtrZXldKTt9fWVsc2UgaWYo dHlwZW9mIGFyZ3NbMF09PSdzdHJpbmcnKXtpZihhcmdzLmxlbmd0aD4xKXskLnN1 Z2dlc3Rpb25zLmNvbmZpZ3VyZShjb250ZXh0LGFyZ3NbMF0sYXJnc1sxXSk7fWVs c2UgaWYocmV0dXJuVmFsdWU9PW51bGwpe3JldHVyblZhbHVlPShhcmdzWzBdaW4g Y29udGV4dC5jb25maWc/dW5kZWZpbmVkOmNvbnRleHQuY29uZmlnW2FyZ3NbMF1d KTt9fX0KaWYodHlwZW9mIGNvbnRleHQuZGF0YT09J3VuZGVmaW5lZCcpe2NvbnRl eHQuZGF0YT17J3RpbWVySUQnOm51bGwsJ3ByZXZUZXh0JzpudWxsLCd2aXNpYmxl UmVzdWx0cyc6MCwnbW91c2VEb3duT24nOiQoW10pLCckdGV4dGJveCc6JCh0aGlz KX07dmFyIG5ld0NTUz17J3RvcCc6TWF0aC5yb3VuZChjb250ZXh0LmRhdGEuJHRl eHRib3gub2Zmc2V0KCkudG9wK2NvbnRleHQuZGF0YS4kdGV4dGJveC5vdXRlckhl aWdodCgpKSwnd2lkdGgnOmNvbnRleHQuZGF0YS4kdGV4dGJveC5vdXRlcldpZHRo KCksJ2Rpc3BsYXknOidub25lJ30KaWYoY29udGV4dC5jb25maWcucG9zaXRpb25G cm9tTGVmdCl7bmV3Q1NTWydsZWZ0J109Y29udGV4dC5jb25maWcuJHJlZ2lvbi5v ZmZzZXQoKS5sZWZ0O25ld0NTU1sncmlnaHQnXT0nYXV0byc7fWVsc2V7bmV3Q1NT WydsZWZ0J109J2F1dG8nO25ld0NTU1sncmlnaHQnXT0kKCdib2R5Jykud2lkdGgo KS0oY29udGV4dC5jb25maWcuJHJlZ2lvbi5vZmZzZXQoKS5sZWZ0K2NvbnRleHQu Y29uZmlnLiRyZWdpb24ub3V0ZXJXaWR0aCgpKTt9CmNvbnRleHQuZGF0YS4kY29u dGFpbmVyPSQoJzxkaXYgLz4nKS5jc3MobmV3Q1NTKS5hZGRDbGFzcygnc3VnZ2Vz dGlvbnMnKS5hcHBlbmQoJCgnPGRpdiAvPicpLmFkZENsYXNzKCdzdWdnZXN0aW9u cy1yZXN1bHRzJykubW91c2Vkb3duKGZ1bmN0aW9uKGUpe2NvbnRleHQuZGF0YS5t b3VzZURvd25Pbj0kKGUudGFyZ2V0KS5jbG9zZXN0KCcuc3VnZ2VzdGlvbnMtcmVz dWx0cyBkaXYnKTt9KS5tb3VzZXVwKGZ1bmN0aW9uKGUpe3ZhciAkcmVzdWx0PSQo ZS50YXJnZXQpLmNsb3Nlc3QoJy5zdWdnZXN0aW9ucy1yZXN1bHRzIGRpdicpO3Zh ciAkb3RoZXI9Y29udGV4dC5kYXRhLm1vdXNlRG93bk9uO2NvbnRleHQuZGF0YS5t b3VzZURvd25Pbj0kKFtdKTtpZigkcmVzdWx0LmdldCgwKSE9JG90aGVyLmdldCgw KSl7cmV0dXJuO30KJC5zdWdnZXN0aW9ucy5oaWdobGlnaHQoY29udGV4dCwkcmVz dWx0LHRydWUpO2NvbnRleHQuZGF0YS4kY29udGFpbmVyLmhpZGUoKTtpZih0eXBl b2YgY29udGV4dC5jb25maWcucmVzdWx0LnNlbGVjdD09J2Z1bmN0aW9uJyl7Y29u dGV4dC5jb25maWcucmVzdWx0LnNlbGVjdC5jYWxsKCRyZXN1bHQsY29udGV4dC5k YXRhLiR0ZXh0Ym94KTt9CmNvbnRleHQuZGF0YS4kdGV4dGJveC5mb2N1cygpO30p KS5hcHBlbmQoJCgnPGRpdiAvPicpLmFkZENsYXNzKCdzdWdnZXN0aW9ucy1zcGVj aWFsJykubW91c2Vkb3duKGZ1bmN0aW9uKGUpe2NvbnRleHQuZGF0YS5tb3VzZURv d25Pbj0kKGUudGFyZ2V0KS5jbG9zZXN0KCcuc3VnZ2VzdGlvbnMtc3BlY2lhbCcp O30pLm1vdXNldXAoZnVuY3Rpb24oZSl7dmFyICRzcGVjaWFsPSQoZS50YXJnZXQp LmNsb3Nlc3QoJy5zdWdnZXN0aW9ucy1zcGVjaWFsJyk7dmFyICRvdGhlcj1jb250 ZXh0LmRhdGEubW91c2VEb3duT247Y29udGV4dC5kYXRhLm1vdXNlRG93bk9uPSQo W10pO2lmKCRzcGVjaWFsLmdldCgwKSE9JG90aGVyLmdldCgwKSl7cmV0dXJuO30K Y29udGV4dC5kYXRhLiRjb250YWluZXIuaGlkZSgpO2lmKHR5cGVvZiBjb250ZXh0 LmNvbmZpZy5zcGVjaWFsLnNlbGVjdD09J2Z1bmN0aW9uJyl7Y29udGV4dC5jb25m aWcuc3BlY2lhbC5zZWxlY3QuY2FsbCgkc3BlY2lhbCxjb250ZXh0LmRhdGEuJHRl eHRib3gpO30KY29udGV4dC5kYXRhLiR0ZXh0Ym94LmZvY3VzKCk7fSkubW91c2Vv dmVyKGZ1bmN0aW9uKGUpeyQuc3VnZ2VzdGlvbnMuaGlnaGxpZ2h0KGNvbnRleHQs JChlLnRhcmdldCkuY2xvc2VzdCgnLnN1Z2dlc3Rpb25zLXNwZWNpYWwnKSxmYWxz ZSk7fSkpLmFwcGVuZFRvKCQoJ2JvZHknKSk7JCh0aGlzKS5hdHRyKCdhdXRvY29t cGxldGUnLCdvZmYnKS5rZXlkb3duKGZ1bmN0aW9uKGUpe2NvbnRleHQuZGF0YS5r ZXlwcmVzc2VkPShlLmtleUNvZGU9PXVuZGVmaW5lZCk/ZS53aGljaDplLmtleUNv ZGU7Y29udGV4dC5kYXRhLmtleXByZXNzZWRDb3VudD0wO3N3aXRjaChjb250ZXh0 LmRhdGEua2V5cHJlc3NlZCl7Y2FzZSA0MDplLnByZXZlbnREZWZhdWx0KCk7ZS5z dG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTticmVhaztjYXNlIDM4OmNhc2UgMjc6 Y2FzZSAxMzppZihjb250ZXh0LmRhdGEuJGNvbnRhaW5lci5pcygnOnZpc2libGUn KSl7ZS5wcmV2ZW50RGVmYXVsdCgpO2Uuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9u KCk7fX19KS5rZXlwcmVzcyhmdW5jdGlvbihlKXtjb250ZXh0LmRhdGEua2V5cHJl c3NlZENvdW50Kys7JC5zdWdnZXN0aW9ucy5rZXlwcmVzcyhlLGNvbnRleHQsY29u dGV4dC5kYXRhLmtleXByZXNzZWQpO30pLmtleXVwKGZ1bmN0aW9uKGUpe2lmKGNv bnRleHQuZGF0YS5rZXlwcmVzc2VkQ291bnQ9PTApeyQuc3VnZ2VzdGlvbnMua2V5 cHJlc3MoZSxjb250ZXh0LGNvbnRleHQuZGF0YS5rZXlwcmVzc2VkKTt9fSkuYmx1 cihmdW5jdGlvbigpe2lmKGNvbnRleHQuZGF0YS5tb3VzZURvd25Pbi5sZW5ndGg+ MCl7cmV0dXJuO30KY29udGV4dC5kYXRhLiRjb250YWluZXIuaGlkZSgpOyQuc3Vn Z2VzdGlvbnMuY2FuY2VsKGNvbnRleHQpO30pO30KJCh0aGlzKS5kYXRhKCdzdWdn ZXN0aW9ucy1jb250ZXh0Jyxjb250ZXh0KTt9KTtyZXR1cm4gcmV0dXJuVmFsdWUh PT1udWxsP3JldHVyblZhbHVlOiQodGhpcyk7fTt9KShqUXVlcnkpOyhmdW5jdGlv bigkKXskLmZuLnRleHRTZWxlY3Rpb249ZnVuY3Rpb24oY29tbWFuZCxvcHRpb25z KXt2YXIgZm49e2dldENvbnRlbnRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFs KCk7fSxnZXRTZWxlY3Rpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldCgwKTt2 YXIgcmV0dmFsPScnO2lmKCQoZSkuaXMoJzpoaWRkZW4nKSl7fWVsc2UgaWYoZG9j dW1lbnQuc2VsZWN0aW9uJiZkb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2Up e2UuZm9jdXMoKTt2YXIgcmFuZ2U9ZG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJh bmdlKCk7cmV0dmFsPXJhbmdlLnRleHQ7fWVsc2UgaWYoZS5zZWxlY3Rpb25TdGFy dHx8ZS5zZWxlY3Rpb25TdGFydD09JzAnKXtyZXR2YWw9ZS52YWx1ZS5zdWJzdHJp bmcoZS5zZWxlY3Rpb25TdGFydCxlLnNlbGVjdGlvbkVuZCk7fQpyZXR1cm4gcmV0 dmFsO30sZW5jYXBzdWxhdGVTZWxlY3Rpb246ZnVuY3Rpb24ob3B0aW9ucyl7cmV0 dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2Z1bmN0aW9uIGNoZWNrU2VsZWN0ZWRU ZXh0KCl7aWYoIXNlbFRleHQpe3NlbFRleHQ9b3B0aW9ucy5wZXJpO2lzU2FtcGxl PXRydWU7fWVsc2UgaWYob3B0aW9ucy5yZXBsYWNlKXtzZWxUZXh0PW9wdGlvbnMu cGVyaTt9ZWxzZSBpZihzZWxUZXh0LmNoYXJBdChzZWxUZXh0Lmxlbmd0aC0xKT09 JyAnKXtzZWxUZXh0PXNlbFRleHQuc3Vic3RyaW5nKDAsc2VsVGV4dC5sZW5ndGgt MSk7b3B0aW9ucy5wb3N0Kz0nICc7fX0KdmFyIGlzU2FtcGxlPWZhbHNlO2lmKHRo aXMuc3R5bGUuZGlzcGxheT09J25vbmUnKXt9ZWxzZSBpZih0aGlzLnNlbGVjdGlv blN0YXJ0fHx0aGlzLnNlbGVjdGlvblN0YXJ0PT0nMCcpeyQodGhpcykuZm9jdXMo KTt2YXIgc2VsVGV4dD0kKHRoaXMpLnRleHRTZWxlY3Rpb24oJ2dldFNlbGVjdGlv bicpO3ZhciBzdGFydFBvcz10aGlzLnNlbGVjdGlvblN0YXJ0O3ZhciBlbmRQb3M9 dGhpcy5zZWxlY3Rpb25FbmQ7dmFyIHNjcm9sbFRvcD10aGlzLnNjcm9sbFRvcDtj aGVja1NlbGVjdGVkVGV4dCgpO2lmKG9wdGlvbnMub3dubGluZSl7aWYoc3RhcnRQ b3MhPTAmJnRoaXMudmFsdWUuY2hhckF0KHN0YXJ0UG9zLTEpIT0iXG4iKXtvcHRp b25zLnByZT0iXG4iK29wdGlvbnMucHJlO30KaWYodGhpcy52YWx1ZS5jaGFyQXQo ZW5kUG9zKSE9IlxuIil7b3B0aW9ucy5wb3N0Kz0iXG4iO319CnRoaXMudmFsdWU9 dGhpcy52YWx1ZS5zdWJzdHJpbmcoMCxzdGFydFBvcykrb3B0aW9ucy5wcmUrc2Vs VGV4dCtvcHRpb25zLnBvc3QrCnRoaXMudmFsdWUuc3Vic3RyaW5nKGVuZFBvcyx0 aGlzLnZhbHVlLmxlbmd0aCk7dGhpcy5zY3JvbGxUb3A9c2Nyb2xsVG9wO2lmKHdp bmRvdy5vcGVyYSl7b3B0aW9ucy5wcmU9b3B0aW9ucy5wcmUucmVwbGFjZSgvXHI/ XG4vZywiXHJcbiIpO3NlbFRleHQ9c2VsVGV4dC5yZXBsYWNlKC9ccj9cbi9nLCJc clxuIik7b3B0aW9ucy5wb3N0PW9wdGlvbnMucG9zdC5yZXBsYWNlKC9ccj9cbi9n LCJcclxuIik7fQppZihpc1NhbXBsZSl7dGhpcy5zZWxlY3Rpb25TdGFydD1zdGFy dFBvcytvcHRpb25zLnByZS5sZW5ndGg7dGhpcy5zZWxlY3Rpb25FbmQ9c3RhcnRQ b3Mrb3B0aW9ucy5wcmUubGVuZ3RoK3NlbFRleHQubGVuZ3RoO31lbHNle3RoaXMu c2VsZWN0aW9uU3RhcnQ9c3RhcnRQb3Mrb3B0aW9ucy5wcmUubGVuZ3RoK3NlbFRl eHQubGVuZ3RoKwpvcHRpb25zLnBvc3QubGVuZ3RoO3RoaXMuc2VsZWN0aW9uRW5k PXRoaXMuc2VsZWN0aW9uU3RhcnQ7fX1lbHNlIGlmKGRvY3VtZW50LnNlbGVjdGlv biYmZG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKXskKHRoaXMpLmZvY3Vz KCk7Y29udGV4dC5mbi5yZXN0b3JlU3R1ZmZGb3JJRSgpO3ZhciBzZWxUZXh0PSQo dGhpcykudGV4dFNlbGVjdGlvbignZ2V0U2VsZWN0aW9uJyk7dmFyIHNjcm9sbFRv cD10aGlzLnNjcm9sbFRvcDt2YXIgcmFuZ2U9ZG9jdW1lbnQuc2VsZWN0aW9uLmNy ZWF0ZVJhbmdlKCk7aWYob3B0aW9ucy5vd25saW5lJiZyYW5nZS5tb3ZlU3RhcnQp e3ZhciByYW5nZTI9ZG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCk7cmFu Z2UyLmNvbGxhcHNlKCk7cmFuZ2UyLm1vdmVTdGFydCgnY2hhcmFjdGVyJywtMSk7 aWYocmFuZ2UyLnRleHQhPSJcciImJnJhbmdlMi50ZXh0IT0iXG4iJiZyYW5nZTIu dGV4dCE9IiIpe29wdGlvbnMucHJlPSJcbiIrb3B0aW9ucy5wcmU7fQp2YXIgcmFu Z2UzPWRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpO3JhbmdlMy5jb2xs YXBzZShmYWxzZSk7cmFuZ2UzLm1vdmVFbmQoJ2NoYXJhY3RlcicsMSk7aWYocmFu Z2UzLnRleHQhPSJcciImJnJhbmdlMy50ZXh0IT0iXG4iJiZyYW5nZTMudGV4dCE9 IiIpe29wdGlvbnMucG9zdCs9IlxuIjt9fQpjaGVja1NlbGVjdGVkVGV4dCgpO3Jh bmdlLnRleHQ9b3B0aW9ucy5wcmUrc2VsVGV4dCtvcHRpb25zLnBvc3Q7aWYoaXNT YW1wbGUmJnJhbmdlLm1vdmVTdGFydCl7cmFuZ2UubW92ZVN0YXJ0KCdjaGFyYWN0 ZXInLC1vcHRpb25zLnBvc3QubGVuZ3RoLXNlbFRleHQubGVuZ3RoKTtyYW5nZS5t b3ZlRW5kKCdjaGFyYWN0ZXInLC1vcHRpb25zLnBvc3QubGVuZ3RoKTt9CnJhbmdl LnNlbGVjdCgpO3RoaXMuc2Nyb2xsVG9wPXNjcm9sbFRvcDt9CiQodGhpcykudHJp Z2dlcignZW5jYXBzdWxhdGVTZWxlY3Rpb24nLFtvcHRpb25zLnByZSxvcHRpb25z LnBlcmksb3B0aW9ucy5wb3N0LG9wdGlvbnMub3dubGluZSxvcHRpb25zLnJlcGxh Y2VdKTt9KTt9LGdldENhcmV0UG9zaXRpb246ZnVuY3Rpb24ob3B0aW9ucyl7ZnVu Y3Rpb24gZ2V0Q2FyZXQoZSl7dmFyIGNhcmV0UG9zPTAsZW5kUG9zPTA7aWYoJC5i cm93c2VyLm1zaWUpe3ZhciBwcmVGaW5pc2hlZD1mYWxzZTt2YXIgcGVyaUZpbmlz aGVkPWZhbHNlO3ZhciBwb3N0RmluaXNoZWQ9ZmFsc2U7dmFyIHByZVRleHQscmF3 UHJlVGV4dCxwZXJpVGV4dDt2YXIgcmF3UGVyaVRleHQscG9zdFRleHQscmF3UG9z dFRleHQ7dmFyIHBlcmlSYW5nZT1kb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFu Z2UoKS5kdXBsaWNhdGUoKTt2YXIgcHJlUmFuZ2U9ZG9jdW1lbnQuYm9keS5jcmVh dGVUZXh0UmFuZ2UoKTtwcmVSYW5nZS5tb3ZlVG9FbGVtZW50VGV4dChlKTtwcmVS YW5nZS5zZXRFbmRQb2ludCgiRW5kVG9TdGFydCIscGVyaVJhbmdlKTt2YXIgcG9z dFJhbmdlPWRvY3VtZW50LmJvZHkuY3JlYXRlVGV4dFJhbmdlKCk7cG9zdFJhbmdl Lm1vdmVUb0VsZW1lbnRUZXh0KGUpO3Bvc3RSYW5nZS5zZXRFbmRQb2ludCgiU3Rh cnRUb0VuZCIscGVyaVJhbmdlKTtwcmVUZXh0PXJhd1ByZVRleHQ9cHJlUmFuZ2Uu dGV4dDtwZXJpVGV4dD1yYXdQZXJpVGV4dD1wZXJpUmFuZ2UudGV4dDtwb3N0VGV4 dD1yYXdQb3N0VGV4dD1wb3N0UmFuZ2UudGV4dDtkb3tpZighcHJlRmluaXNoZWQp e2lmKHByZVJhbmdlLmNvbXBhcmVFbmRQb2ludHMoIlN0YXJ0VG9FbmQiLHByZVJh bmdlKT09MCl7cHJlRmluaXNoZWQ9dHJ1ZTt9ZWxzZXtwcmVSYW5nZS5tb3ZlRW5k KCJjaGFyYWN0ZXIiLC0xKQppZihwcmVSYW5nZS50ZXh0PT1wcmVUZXh0KXtyYXdQ cmVUZXh0Kz0iXHJcbiI7fWVsc2V7cHJlRmluaXNoZWQ9dHJ1ZTt9fX0KaWYoIXBl cmlGaW5pc2hlZCl7aWYocGVyaVJhbmdlLmNvbXBhcmVFbmRQb2ludHMoIlN0YXJ0 VG9FbmQiLHBlcmlSYW5nZSk9PTApe3BlcmlGaW5pc2hlZD10cnVlO31lbHNle3Bl cmlSYW5nZS5tb3ZlRW5kKCJjaGFyYWN0ZXIiLC0xKQppZihwZXJpUmFuZ2UudGV4 dD09cGVyaVRleHQpe3Jhd1BlcmlUZXh0Kz0iXHJcbiI7fWVsc2V7cGVyaUZpbmlz aGVkPXRydWU7fX19CmlmKCFwb3N0RmluaXNoZWQpe2lmKHBvc3RSYW5nZS5jb21w YXJlRW5kUG9pbnRzKCJTdGFydFRvRW5kIixwb3N0UmFuZ2UpPT0wKXtwb3N0Rmlu aXNoZWQ9dHJ1ZTt9ZWxzZXtwb3N0UmFuZ2UubW92ZUVuZCgiY2hhcmFjdGVyIiwt MSkKaWYocG9zdFJhbmdlLnRleHQ9PXBvc3RUZXh0KXtyYXdQb3N0VGV4dCs9Ilxy XG4iO31lbHNle3Bvc3RGaW5pc2hlZD10cnVlO319fX13aGlsZSgoIXByZUZpbmlz aGVkfHwhcGVyaUZpbmlzaGVkfHwhcG9zdEZpbmlzaGVkKSk7Y2FyZXRQb3M9cmF3 UHJlVGV4dC5yZXBsYWNlKC9cclxuL2csIlxuIikubGVuZ3RoO2VuZFBvcz1jYXJl dFBvcytyYXdQZXJpVGV4dC5yZXBsYWNlKC9cclxuL2csIlxuIikubGVuZ3RoO31l bHNlIGlmKGUuc2VsZWN0aW9uU3RhcnR8fGUuc2VsZWN0aW9uU3RhcnQ9PScwJyl7 Y2FyZXRQb3M9ZS5zZWxlY3Rpb25TdGFydDtlbmRQb3M9ZS5zZWxlY3Rpb25FbmQ7 fQpyZXR1cm4gb3B0aW9ucy5zdGFydEFuZEVuZD9bY2FyZXRQb3MsZW5kUG9zXTpj YXJldFBvczt9CnJldHVybiBnZXRDYXJldCh0aGlzLmdldCgwKSk7fSxzZXRTZWxl Y3Rpb246ZnVuY3Rpb24ob3B0aW9ucyl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlv bigpe2lmKCQodGhpcykuaXMoJzpoaWRkZW4nKSl7fWVsc2UgaWYodGhpcy5zZWxl Y3Rpb25TdGFydHx8dGhpcy5zZWxlY3Rpb25TdGFydD09JzAnKXtpZihvcHRpb25z LnN0YXJ0PnRoaXMuc2VsZWN0aW9uRW5kKXt0aGlzLnNlbGVjdGlvbkVuZD1vcHRp b25zLmVuZDt0aGlzLnNlbGVjdGlvblN0YXJ0PW9wdGlvbnMuc3RhcnQ7fWVsc2V7 dGhpcy5zZWxlY3Rpb25TdGFydD1vcHRpb25zLnN0YXJ0O3RoaXMuc2VsZWN0aW9u RW5kPW9wdGlvbnMuZW5kO319ZWxzZSBpZihkb2N1bWVudC5ib2R5LmNyZWF0ZVRl eHRSYW5nZSl7dmFyIHNlbGVjdGlvbj1kb2N1bWVudC5ib2R5LmNyZWF0ZVRleHRS YW5nZSgpO3NlbGVjdGlvbi5tb3ZlVG9FbGVtZW50VGV4dCh0aGlzKTt2YXIgbGVu Z3RoPXRoaXMudmFsdWUubGVuZ3RoO3ZhciBuZXdMaW5lcz10aGlzLnZhbHVlLm1h dGNoKC9cbi9nKTtpZihuZXdMaW5lcylsZW5ndGg9bGVuZ3RoLW5ld0xpbmVzLmxl bmd0aDtzZWxlY3Rpb24ubW92ZVN0YXJ0KCdjaGFyYWN0ZXInLG9wdGlvbnMuc3Rh cnQpO3NlbGVjdGlvbi5tb3ZlRW5kKCdjaGFyYWN0ZXInLC1sZW5ndGgrb3B0aW9u cy5lbmQpO3NlbGVjdGlvbi5zZWxlY3QoKTt9fSk7fSxzY3JvbGxUb0NhcmV0UG9z aXRpb246ZnVuY3Rpb24ob3B0aW9ucyl7ZnVuY3Rpb24gZ2V0TGluZUxlbmd0aChl KXtyZXR1cm4gTWF0aC5mbG9vcihlLnNjcm9sbFdpZHRoLygkLm9zLm5hbWU9PSds aW51eCc/Nzo4KSk7fQpmdW5jdGlvbiBnZXRDYXJldFNjcm9sbFBvc2l0aW9uKGUp e3ZhciB0ZXh0PWUudmFsdWUucmVwbGFjZSgvXHIvZywiIik7dmFyIGNhcmV0PSQo ZSkudGV4dFNlbGVjdGlvbignZ2V0Q2FyZXRQb3NpdGlvbicpO3ZhciBsaW5lTGVu Z3RoPWdldExpbmVMZW5ndGgoZSk7dmFyIHJvdz0wO3ZhciBjaGFySW5MaW5lPTA7 dmFyIGxhc3RTcGFjZUluTGluZT0wO2ZvcihpPTA7aTxjYXJldDtpKyspe2NoYXJJ bkxpbmUrKztpZih0ZXh0LmNoYXJBdChpKT09IiAiKXtsYXN0U3BhY2VJbkxpbmU9 Y2hhckluTGluZTt9ZWxzZSBpZih0ZXh0LmNoYXJBdChpKT09IlxuIil7bGFzdFNw YWNlSW5MaW5lPTA7Y2hhckluTGluZT0wO3JvdysrO30KaWYoY2hhckluTGluZT5s aW5lTGVuZ3RoKXtpZihsYXN0U3BhY2VJbkxpbmU+MCl7Y2hhckluTGluZT1jaGFy SW5MaW5lLWxhc3RTcGFjZUluTGluZTtsYXN0U3BhY2VJbkxpbmU9MDtyb3crKzt9 fX0KdmFyIG5leHRTcGFjZT0wO2ZvcihqPWNhcmV0O2o8Y2FyZXQrbGluZUxlbmd0 aDtqKyspe2lmKHRleHQuY2hhckF0KGopPT0iICJ8fHRleHQuY2hhckF0KGopPT0i XG4ifHxjYXJldD09dGV4dC5sZW5ndGgpe25leHRTcGFjZT1qO2JyZWFrO319Cmlm KG5leHRTcGFjZT5saW5lTGVuZ3RoJiZjYXJldDw9bGluZUxlbmd0aCl7Y2hhcklu TGluZT1jYXJldC1sYXN0U3BhY2VJbkxpbmU7cm93Kys7fQpyZXR1cm4oJC5vcy5u YW1lPT0nbWFjJz8xMzooJC5vcy5uYW1lPT0nbGludXgnPzE1OjE2KSkqcm93O30K cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2lmKCQodGhpcykuaXMoJzpoaWRk ZW4nKSl7fWVsc2UgaWYodGhpcy5zZWxlY3Rpb25TdGFydHx8dGhpcy5zZWxlY3Rp b25TdGFydD09JzAnKXt2YXIgc2Nyb2xsPWdldENhcmV0U2Nyb2xsUG9zaXRpb24o dGhpcyk7aWYob3B0aW9ucy5mb3JjZXx8c2Nyb2xsPCQodGhpcykuc2Nyb2xsVG9w KCl8fHNjcm9sbD4kKHRoaXMpLnNjcm9sbFRvcCgpKyQodGhpcykuaGVpZ2h0KCkp CiQodGhpcykuc2Nyb2xsVG9wKHNjcm9sbCk7fWVsc2UgaWYoZG9jdW1lbnQuc2Vs ZWN0aW9uJiZkb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2Upe3ZhciByYW5n ZT1kb2N1bWVudC5ib2R5LmNyZWF0ZVRleHRSYW5nZSgpO3ZhciBzYXZlZFJhbmdl PWRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpO3ZhciBwb3M9JCh0aGlz KS50ZXh0U2VsZWN0aW9uKCdnZXRDYXJldFBvc2l0aW9uJyk7dmFyIG9sZFNjcm9s bFRvcD10aGlzLnNjcm9sbFRvcDtyYW5nZS5tb3ZlVG9FbGVtZW50VGV4dCh0aGlz KTtyYW5nZS5jb2xsYXBzZSgpO3JhbmdlLm1vdmUoJ2NoYXJhY3RlcicscG9zKzEp O3JhbmdlLnNlbGVjdCgpO2lmKHRoaXMuc2Nyb2xsVG9wIT1vbGRTY3JvbGxUb3Ap CnRoaXMuc2Nyb2xsVG9wKz1yYW5nZS5vZmZzZXRUb3A7ZWxzZSBpZihvcHRpb25z LmZvcmNlKXtyYW5nZS5tb3ZlKCdjaGFyYWN0ZXInLC0xKTtyYW5nZS5zZWxlY3Qo KTt9CnNhdmVkUmFuZ2Uuc2VsZWN0KCk7fQokKHRoaXMpLnRyaWdnZXIoJ3Njcm9s bFRvUG9zaXRpb24nKTt9KTt9fTtzd2l0Y2goY29tbWFuZCl7Y2FzZSdlbmNhcHN1 bGF0ZVNlbGVjdGlvbic6b3B0aW9ucz0kLmV4dGVuZCh7J3ByZSc6JycsJ3Blcmkn OicnLCdwb3N0JzonJywnb3dubGluZSc6ZmFsc2UsJ3JlcGxhY2UnOmZhbHNlfSxv cHRpb25zKTticmVhaztjYXNlJ2dldENhcmV0UG9zaXRpb24nOm9wdGlvbnM9JC5l eHRlbmQoeydzdGFydEFuZEVuZCc6ZmFsc2V9LG9wdGlvbnMpO2JyZWFrO2Nhc2Un c2V0U2VsZWN0aW9uJzpvcHRpb25zPSQuZXh0ZW5kKHsnc3RhcnQnOnVuZGVmaW5l ZCwnZW5kJzp1bmRlZmluZWQsJ3N0YXJ0Q29udGFpbmVyJzp1bmRlZmluZWQsJ2Vu ZENvbnRhaW5lcic6dW5kZWZpbmVkfSxvcHRpb25zKTtpZihvcHRpb25zLmVuZD09 PXVuZGVmaW5lZCkKb3B0aW9ucy5lbmQ9b3B0aW9ucy5zdGFydDtpZihvcHRpb25z LmVuZENvbnRhaW5lcj09dW5kZWZpbmVkKQpvcHRpb25zLmVuZENvbnRhaW5lcj1v cHRpb25zLnN0YXJ0Q29udGFpbmVyO2JyZWFrO2Nhc2Unc2Nyb2xsVG9DYXJldFBv c2l0aW9uJzpvcHRpb25zPSQuZXh0ZW5kKHsnZm9yY2UnOmZhbHNlfSxvcHRpb25z KTticmVhazt9CnZhciBjb250ZXh0PSQodGhpcykuZGF0YSgnd2lraUVkaXRvci1j b250ZXh0Jyk7dmFyIGhhc0lmcmFtZT1jb250ZXh0IT09dW5kZWZpbmVkJiZjb250 ZXh0LiRpZnJhbWUhPT11bmRlZmluZWQ7dmFyIG5lZWRTYXZlPWZhbHNlO2lmKGhh c0lmcmFtZSYmY29udGV4dC5zYXZlZFNlbGVjdGlvbiE9PW51bGwpe2NvbnRleHQu Zm4ucmVzdG9yZVNlbGVjdGlvbigpO25lZWRTYXZlPXRydWU7fQpyZXR2YWw9KGhh c0lmcmFtZT9jb250ZXh0LmZuOmZuKVtjb21tYW5kXS5jYWxsKHRoaXMsb3B0aW9u cyk7aWYoaGFzSWZyYW1lJiZuZWVkU2F2ZSl7Y29udGV4dC5mbi5zYXZlU2VsZWN0 aW9uKCk7fQpyZXR1cm4gcmV0dmFsO307fSkoalF1ZXJ5KTsoZnVuY3Rpb24oJCl7 JC53aWtpRWRpdG9yPXsnbW9kdWxlcyc6e30sJ2luc3RhbmNlcyc6W10sJ2Jyb3dz ZXJzJzp7J2x0cic6eydtc2llJzpbWyc+PScsN11dLCdmaXJlZm94JzpbWyc+PScs Ml1dLCdvcGVyYSc6W1snPj0nLDkuNl1dLCdzYWZhcmknOltbJz49JywzXV0sJ2No cm9tZSc6W1snPj0nLDNdXSwnYmxhY2tiZXJyeSc6ZmFsc2UsJ2lwb2QnOmZhbHNl LCdpcGhvbmUnOmZhbHNlfSwncnRsJzp7J21zaWUnOltbJz49Jyw4XV0sJ2ZpcmVm b3gnOltbJz49JywyXV0sJ29wZXJhJzpbWyc+PScsOS42XV0sJ3NhZmFyaSc6W1sn Pj0nLDNdXSwnY2hyb21lJzpbWyc+PScsM11dLCdibGFja2JlcnJ5JzpmYWxzZSwn aXBvZCc6ZmFsc2UsJ2lwaG9uZSc6ZmFsc2V9fSwnaW1nUGF0aCc6d2dTY3JpcHRQ YXRoKycvZXh0ZW5zaW9ucy9Vc2FiaWxpdHlJbml0aWF0aXZlL2ltYWdlcy93aWtp RWRpdG9yLycsJ2lzU3VwcG9ydGVkJzpmdW5jdGlvbihtb2R1bGUpe2lmKG1vZHVs ZSYmdHlwZW9mIG1vZHVsZS5uYW1lIT0ndW5kZWZpbmVkJyYmKG1vZHVsZS5uYW1l PT0ndG9jJ3x8bW9kdWxlLm5hbWU9PSdoaWdobGlnaHQnKSYmdHlwZW9mIHdnUmVh bGx5R2l2ZU1lVE9DPT0ndW5kZWZpbmVkJyl7cmV0dXJuIG1vZHVsZS5zdXBwb3J0 ZWQ9ZmFsc2U7fQp2YXIgbW9kPW1vZHVsZSYmJ2Jyb3dzZXJzJ2luIG1vZHVsZT9t b2R1bGU6JC53aWtpRWRpdG9yO2lmKHR5cGVvZiBtb2Quc3VwcG9ydGVkIT09J3Vu ZGVmaW5lZCcpe3JldHVybiBtb2Quc3VwcG9ydGVkO30KaWYoISgkLmJyb3dzZXIu bmFtZSBpbiBtb2QuYnJvd3NlcnNbJCgnYm9keScpLmlzKCcucnRsJyk/J3J0bCc6 J2x0ciddKSl7cmV0dXJuIG1vZC5zdXBwb3J0ZWQ9dHJ1ZTt9CnZhciBicm93c2Vy PW1vZC5icm93c2Vyc1skKCdib2R5JykuaXMoJy5ydGwnKT8ncnRsJzonbHRyJ11b JC5icm93c2VyLm5hbWVdO2lmKHR5cGVvZiBicm93c2VyIT0nb2JqZWN0Jyl7cmV0 dXJuIG1vZC5zdXBwb3J0ZWQ9ZmFsc2U7fQpmb3IodmFyIGNvbmRpdGlvbiBpbiBi cm93c2VyKXt2YXIgb3A9YnJvd3Nlcltjb25kaXRpb25dWzBdO3ZhciB2YWw9YnJv d3Nlcltjb25kaXRpb25dWzFdO2lmKHZhbD09PWZhbHNlKXtyZXR1cm4gbW9kLnN1 cHBvcnRlZD1mYWxzZTt9ZWxzZSBpZih0eXBlb2YgdmFsPT0nc3RyaW5nJyl7aWYo IShldmFsKCckLmJyb3dzZXIudmVyc2lvbicrb3ArJyInK3ZhbCsnIicpKSl7cmV0 dXJuIG1vZC5zdXBwb3J0ZWQ9ZmFsc2U7fX1lbHNlIGlmKHR5cGVvZiB2YWw9PSdu dW1iZXInKXtpZighKGV2YWwoJyQuYnJvd3Nlci52ZXJzaW9uTnVtYmVyJytvcCt2 YWwpKSl7cmV0dXJuIG1vZC5zdXBwb3J0ZWQ9ZmFsc2U7fX19CnJldHVybiBtb2Qu c3VwcG9ydGVkPXRydWU7fSwnaXNSZXF1aXJlZCc6ZnVuY3Rpb24obW9kdWxlLHJl cXVpcmVtZW50KXtpZih0eXBlb2YgbW9kdWxlWydyZXEnXSE9PSd1bmRlZmluZWQn KXtmb3IocmVxIGluIG1vZHVsZVsncmVxJ10pe2lmKG1vZHVsZVsncmVxJ11bcmVx XT09cmVxdWlyZW1lbnQpe3JldHVybiB0cnVlO319fQpyZXR1cm4gZmFsc2U7fSwn YXV0b01zZyc6ZnVuY3Rpb24ob2JqZWN0LHByb3BlcnR5KXtpZih0eXBlb2YgcHJv cGVydHk9PSdvYmplY3QnKXtmb3IodmFyIGkgaW4gcHJvcGVydHkpe2lmKHByb3Bl cnR5W2ldaW4gb2JqZWN0fHxwcm9wZXJ0eVtpXSsnTXNnJ2luIG9iamVjdCl7cHJv cGVydHk9cHJvcGVydHlbaV07YnJlYWs7fX19CmlmKHByb3BlcnR5IGluIG9iamVj dCl7cmV0dXJuIG9iamVjdFtwcm9wZXJ0eV07fWVsc2UgaWYocHJvcGVydHkrJ01z ZydpbiBvYmplY3Qpe2lmKHR5cGVvZiBvYmplY3RbcHJvcGVydHkrJ01zZyddPT0n b2JqZWN0Jyl7cmV0dXJuIG13LnVzYWJpbGl0eS5nZXRNc2cuYXBwbHkobXcudXNh YmlsaXR5LG9iamVjdFtwcm9wZXJ0eSsnTXNnJ10pO31lbHNle3JldHVybiBtdy51 c2FiaWxpdHkuZ2V0TXNnKG9iamVjdFtwcm9wZXJ0eSsnTXNnJ10pO319ZWxzZXty ZXR1cm4nJzt9fSwnYXV0b0xhbmcnOmZ1bmN0aW9uKG9iamVjdCxsYW5nKXtyZXR1 cm4gb2JqZWN0W2xhbmd8fHdnVXNlckxhbmd1YWdlXXx8b2JqZWN0WydkZWZhdWx0 J118fG9iamVjdDt9LCdhdXRvSWNvbic6ZnVuY3Rpb24oaWNvbixwYXRoLGxhbmcp e3ZhciBzcmM9JC53aWtpRWRpdG9yLmF1dG9MYW5nKGljb24sbGFuZyk7cGF0aD1w YXRofHwkLndpa2lFZGl0b3IuaW1nUGF0aDtpZihzcmMuc3Vic3RyKDAsNykhPSdo dHRwOi8vJyYmc3JjLnN1YnN0cigwLDgpIT0naHR0cHM6Ly8nJiZzcmNbMF0hPScv Jyl7c3JjPXBhdGgrc3JjO30KcmV0dXJuIHNyYysnPycrd2dXaWtpRWRpdG9ySWNv blZlcnNpb247fX07JC5mbi53aWtpRWRpdG9yPWZ1bmN0aW9uKCl7aWYoISRqLndp a2lFZGl0b3IuaXNTdXBwb3J0ZWQoKSl7cmV0dXJuICQodGhpcyk7fQp2YXIgY29u dGV4dD0kKHRoaXMpLmRhdGEoJ3dpa2lFZGl0b3ItY29udGV4dCcpO2lmKCFjb250 ZXh0fHx0eXBlb2YgY29udGV4dD09J3VuZGVmaW5lZCcpe2NvbnRleHQ9eyckdGV4 dGFyZWEnOiQodGhpcyksJ3ZpZXdzJzp7fSwnbW9kdWxlcyc6e30sJ2RhdGEnOnt9 LCdpbnN0YW5jZSc6JC53aWtpRWRpdG9yLmluc3RhbmNlcy5wdXNoKCQodGhpcykp LTEsJ29mZnNldHMnOm51bGwsJ2h0bWxUb1RleHRNYXAnOnt9LCdvbGRIVE1MJzpu dWxsLCdvbGREZWxheWVkSFRNTCc6bnVsbCwnb2xkRGVsYXllZFNlbCc6bnVsbCwn c2F2ZWRTZWxlY3Rpb24nOm51bGwsJ2hpc3RvcnknOltdLCdoaXN0b3J5UG9zaXRp b24nOi0xLCdvbGREZWxheWVkSGlzdG9yeVBvc2l0aW9uJzotMX07Y29udGV4dC5h cGk9eydhZGRNb2R1bGUnOmZ1bmN0aW9uKGNvbnRleHQsZGF0YSl7dmFyIG1vZHVs ZXM9e307aWYodHlwZW9mIGRhdGE9PSdzdHJpbmcnKXttb2R1bGVzW2RhdGFdPXt9 O31lbHNlIGlmKHR5cGVvZiBkYXRhPT0nb2JqZWN0Jyl7bW9kdWxlcz1kYXRhO30K Zm9yKHZhciBtb2R1bGUgaW4gbW9kdWxlcyl7aWYodHlwZW9mIG1vZHVsZT09J3N0 cmluZycmJiQud2lraUVkaXRvci5pc1N1cHBvcnRlZCgkLndpa2lFZGl0b3IubW9k dWxlc1ttb2R1bGVdKSl7aWYoJ2FwaSdpbiAkLndpa2lFZGl0b3IubW9kdWxlc1tt b2R1bGVdKXtmb3IodmFyIGNhbGwgaW4gJC53aWtpRWRpdG9yLm1vZHVsZXNbbW9k dWxlXS5hcGkpe2lmKCEoY2FsbCBpbiBjb250ZXh0LmFwaSkpe2NvbnRleHQuYXBp W2NhbGxdPSQud2lraUVkaXRvci5tb2R1bGVzW21vZHVsZV0uYXBpW2NhbGxdO319 fQppZignZm4naW4gJC53aWtpRWRpdG9yLm1vZHVsZXNbbW9kdWxlXSYmJ2NyZWF0 ZSdpbiAkLndpa2lFZGl0b3IubW9kdWxlc1ttb2R1bGVdLmZuKXtjb250ZXh0Lm1v ZHVsZXNbbW9kdWxlXT17fTskLndpa2lFZGl0b3IubW9kdWxlc1ttb2R1bGVdLmZu LmNyZWF0ZShjb250ZXh0LG1vZHVsZXNbbW9kdWxlXSk7fX19fX07Y29udGV4dC5l dnQ9eydrZXlkb3duJzpmdW5jdGlvbihldmVudCl7c3dpdGNoKGV2ZW50LndoaWNo KXtjYXNlIDk6aWYoZXZlbnQuY3RybEtleXx8ZXZlbnQuYWx0S2V5fHxldmVudC5z aGlmdEtleSl7cmV0dXJuIHRydWU7fWVsc2V7dmFyICR0YWJpbmRleExpc3Q9JGoo J1t0YWJpbmRleF06dmlzaWJsZScpLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4g YS50YWJJbmRleC1iLnRhYkluZGV4O30pO2Zvcih2YXIgaT0wO2k8JHRhYmluZGV4 TGlzdC5sZW5ndGg7aSsrKXtpZigkdGFiaW5kZXhMaXN0LmVxKGkpLmF0dHIoJ2lk Jyk9PWNvbnRleHQuJGlmcmFtZS5hdHRyKCdpZCcpKXskdGFiaW5kZXhMaXN0Lmdl dChpKzEpLmZvY3VzKCk7YnJlYWs7fX0KcmV0dXJuIGZhbHNlO30KYnJlYWs7Y2Fz ZSA4NjppZihldmVudC5jdHJsS2V5JiYkLmJyb3dzZXIubXNpZSl7Y29udGV4dC5l dnQucGFzdGUoZXZlbnQpO30KYnJlYWs7fQpyZXR1cm4gdHJ1ZTt9LCdjaGFuZ2Un OmZ1bmN0aW9uKGV2ZW50KXtldmVudC5kYXRhLnNjb3BlPSdkaXZpc2lvbic7dmFy IG5ld0hUTUw9Y29udGV4dC4kY29udGVudC5odG1sKCk7aWYoY29udGV4dC5vbGRI VE1MIT1uZXdIVE1MKXtjb250ZXh0LmZuLnB1cmdlT2Zmc2V0cygpO2NvbnRleHQu b2xkSFRNTD1uZXdIVE1MO2V2ZW50LmRhdGEuc2NvcGU9J3JlYWxjaGFuZ2UnO30K aWYoY29udGV4dC4kY29udGVudC5jaGlsZHJlbigpLmxlbmd0aD09MCl7Y29udGV4 dC4kY29udGVudC5hcHBlbmQoJzxwPjwvcD4nKTt9CnJldHVybiB0cnVlO30sJ2Rl bGF5ZWRDaGFuZ2UnOmZ1bmN0aW9uKGV2ZW50KXtldmVudC5kYXRhLnNjb3BlPSdk aXZpc2lvbic7dmFyIG5ld0hUTUw9Y29udGV4dC4kY29udGVudC5odG1sKCk7aWYo Y29udGV4dC5vbGREZWxheWVkSFRNTCE9bmV3SFRNTCl7Y29udGV4dC5vbGREZWxh eWVkSFRNTD1uZXdIVE1MO2V2ZW50LmRhdGEuc2NvcGU9J3JlYWxjaGFuZ2UnO3Zh ciBjdXJzb3JQb3M9Y29udGV4dC5mbi5nZXRDYXJldFBvc2l0aW9uKCk7dmFyIHQ9 Y29udGV4dC5mbi5nZXRPZmZzZXQoY3Vyc29yUG9zWzBdKTtpZih0JiZ0Lm5vZGUu bm9kZU5hbWU9PScjdGV4dCcmJnQubm9kZS5wYXJlbnROb2RlLm5vZGVOYW1lLnRv TG93ZXJDYXNlKCk9PSdib2R5Jyl7JCh0Lm5vZGUpLndyYXAoIjxwPjwvcD4iKTtj b250ZXh0LmZuLnB1cmdlT2Zmc2V0cygpO2NvbnRleHQuZm4uc2V0U2VsZWN0aW9u KHtzdGFydDpjdXJzb3JQb3NbMF0sZW5kOmN1cnNvclBvc1sxXX0pO319CmNvbnRl eHQuZm4udXBkYXRlSGlzdG9yeShldmVudC5kYXRhLnNjb3BlPT0ncmVhbGNoYW5n ZScpO3JldHVybiB0cnVlO30sJ2N1dCc6ZnVuY3Rpb24oZXZlbnQpe3NldFRpbWVv dXQoZnVuY3Rpb24oKXtjb250ZXh0LiRjb250ZW50LmZpbmQoJ2JyJykuZWFjaChm dW5jdGlvbigpe2lmKCQodGhpcykucGFyZW50KCkuaXMoJ2JvZHknKSl7JCh0aGlz KS53cmFwKCQoJzxwPjwvcD4nKSk7fX0pO30sMTAwKTtyZXR1cm4gdHJ1ZTt9LCdw YXN0ZSc6ZnVuY3Rpb24oZXZlbnQpe3ZhciBjdXJzb3JQb3M9Y29udGV4dC5mbi5n ZXRDYXJldFBvc2l0aW9uKCk7dmFyIG9sZExlbmd0aD1jb250ZXh0LmZuLmdldENv bnRlbnRzKCkubGVuZ3RoLShjdXJzb3JQb3NbMV0tY3Vyc29yUG9zWzBdKTtjb250 ZXh0LiRjb250ZW50LmZpbmQoJzpub3QoLndpa2lFZGl0b3IpJykuYWRkQ2xhc3Mo J3dpa2lFZGl0b3InKTtpZigkLmxheW91dC5uYW1lIT09J3dlYmtpdCcpe2NvbnRl eHQuJGNvbnRlbnQuYWRkQ2xhc3MoJ3Bhc3RpbmcnKTt9CnNldFRpbWVvdXQoZnVu Y3Rpb24oKXtjb250ZXh0LiRjb250ZW50LmZpbmQoJ3NjcmlwdCxzdHlsZSxpbWcs aW5wdXQsc2VsZWN0LHRleHRhcmVhLGhyLGJ1dHRvbixsaW5rLG1ldGEnKS5yZW1v dmUoKTtjb250ZXh0LiRjb250ZW50LmZpbmQoJyonKS5lYWNoKGZ1bmN0aW9uKCl7 aWYoJCh0aGlzKS5jaGlsZHJlbigpLmxlbmd0aD09MCYmdGhpcy5jaGlsZE5vZGVz Lmxlbmd0aD4wKXskKHRoaXMpLnRleHQoJCh0aGlzKS50ZXh0KCkpO319KTtjb250 ZXh0LiRjb250ZW50LmZpbmQoJ3A6bm90KC53aWtpRWRpdG9yKSBwOm5vdCgud2lr aUVkaXRvciknKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIG91dGVyUGFyZW50PSQodGhp cykucGFyZW50KCk7b3V0ZXJQYXJlbnQucmVwbGFjZVdpdGgob3V0ZXJQYXJlbnQu Y2hpbGROb2Rlcyk7fSk7Y29udGV4dC4kY29udGVudC5maW5kKCdzcGFuLkFwcGxl LXN0eWxlLXNwYW4nKS5lYWNoKGZ1bmN0aW9uKCl7JCh0aGlzKS5yZXBsYWNlV2l0 aCh0aGlzLmNoaWxkTm9kZXMpO30pO3ZhciBwYXN0ZUNvbnRlbnQ9Y29udGV4dC5m bi5nZXRPZmZzZXQoY3Vyc29yUG9zWzBdKS5ub2RlO3ZhciByZW1vdmVOZXh0QlI9 ZmFsc2U7d2hpbGUocGFzdGVDb250ZW50IT1udWxsJiYhJChwYXN0ZUNvbnRlbnQp Lmhhc0NsYXNzKCd3aWtpRWRpdG9yJykpe3ZhciBjdXJyZW50Tm9kZT1wYXN0ZUNv bnRlbnQ7cGFzdGVDb250ZW50PXBhc3RlQ29udGVudC5uZXh0U2libGluZztpZihj dXJyZW50Tm9kZS5ub2RlTmFtZT09JyN0ZXh0JyYmY3VycmVudE5vZGUubm9kZVZh bHVlPT1jdXJyZW50Tm9kZS53aG9sZVRleHQpe3ZhciBwV3JhcHBlcj0kKCc8cCAv PicpLmFkZENsYXNzKCd3aWtpRWRpdG9yJyk7JChjdXJyZW50Tm9kZSkud3JhcChw V3JhcHBlcik7JChjdXJyZW50Tm9kZSkuYWRkQ2xhc3MoJ3dpa2lFZGl0b3InKTty ZW1vdmVOZXh0QlI9dHJ1ZTt9ZWxzZSBpZihjdXJyZW50Tm9kZS5ub2RlTmFtZT09 J0JSJyYmcmVtb3ZlTmV4dEJSKXskKGN1cnJlbnROb2RlKS5yZW1vdmUoKTtyZW1v dmVOZXh0QlI9ZmFsc2U7fWVsc2V7cmVtb3ZlTmV4dEJSPWZhbHNlO319CnZhciAk c2VsZWN0aW9uPWNvbnRleHQuJGNvbnRlbnQuZmluZCgnOm5vdCgud2lraUVkaXRv ciknKTt3aGlsZSgkc2VsZWN0aW9uLmxlbmd0aCYmJHNlbGVjdGlvbi5sZW5ndGg+ MCl7dmFyICRjdXJyZW50RWxlbWVudD0kc2VsZWN0aW9uLmVxKDApO3doaWxlKCEk Y3VycmVudEVsZW1lbnQucGFyZW50KCkuaXMoJ2JvZHknKSYmISRjdXJyZW50RWxl bWVudC5wYXJlbnQoKS5pcygnLndpa2lFZGl0b3InKSl7JGN1cnJlbnRFbGVtZW50 PSRjdXJyZW50RWxlbWVudC5wYXJlbnQoKTt9CnZhciAkbmV3RWxlbWVudDtpZigk Y3VycmVudEVsZW1lbnQuaXMoJ3AnKXx8JGN1cnJlbnRFbGVtZW50LmlzKCdkaXYn KXx8JGN1cnJlbnRFbGVtZW50LmlzKCdwcmUnKSl7JG5ld0VsZW1lbnQ9JCgnPHAg Lz4nKTt9ZWxzZXskbmV3RWxlbWVudD0kKCc8c3BhbiAvPicpLmFkZENsYXNzKCd3 aWtpRWRpdG9yJyk7fQp2YXIgcGllY2VzPSQudHJpbSgkY3VycmVudEVsZW1lbnQu dGV4dCgpKS5zcGxpdCgnXG4nKTt2YXIgbmV3RWxlbWVudEhUTUw9Jyc7Zm9yKHZh ciBpPTA7aTxwaWVjZXMubGVuZ3RoO2krKyl7aWYocGllY2VzW2ldKXtuZXdFbGVt ZW50SFRNTCs9JC50cmltKHBpZWNlc1tpXSk7fWVsc2V7bmV3RWxlbWVudEhUTUwr PSc8c3Bhbj48YnIgY2xhc3M9Indpa2lFZGl0b3IiIC8+PC9zcGFuPic7fX0KJG5l d0VsZW1lbnQuaHRtbChuZXdFbGVtZW50SFRNTCkuYWRkQ2xhc3MoJ3dpa2lFZGl0 b3InKS5pbnNlcnRBZnRlcigkY3VycmVudEVsZW1lbnQpOyRjdXJyZW50RWxlbWVu dC5yZW1vdmUoKTskc2VsZWN0aW9uPWNvbnRleHQuJGNvbnRlbnQuZmluZCgnOm5v dCgud2lraUVkaXRvciknKTt9CmNvbnRleHQuJGNvbnRlbnQuZmluZCgnLndpa2lF ZGl0b3InKS5yZW1vdmVDbGFzcygnd2lraUVkaXRvcicpO2lmKCQubGF5b3V0Lm5h bWUhPT0nd2Via2l0Jyl7Y29udGV4dC4kY29udGVudC5yZW1vdmVDbGFzcygncGFz dGluZycpO30KY29udGV4dC5mbi5wdXJnZU9mZnNldHMoKTt2YXIgbmV3TGVuZ3Ro PWNvbnRleHQuZm4uZ2V0Q29udGVudHMoKS5sZW5ndGg7dmFyIHJlc3RvcmVUbz1j dXJzb3JQb3NbMF0rbmV3TGVuZ3RoLW9sZExlbmd0aDtjb250ZXh0LmZuLnNldFNl bGVjdGlvbih7c3RhcnQ6cmVzdG9yZVRvLGVuZDpyZXN0b3JlVG99KTt9LDApO3Jl dHVybiB0cnVlO30sJ3JlYWR5JzpmdW5jdGlvbihldmVudCl7Y29udGV4dC5oaXN0 b3J5LnB1c2goeydodG1sJzpjb250ZXh0LiRjb250ZW50Lmh0bWwoKSwnc2VsJzpj b250ZXh0LmZuLmdldENhcmV0UG9zaXRpb24oKX0pO3JldHVybiB0cnVlO319O2Nv bnRleHQuZm49eyd0cmlnZ2VyJzpmdW5jdGlvbihuYW1lLGV2ZW50KXtpZih0eXBl b2YgZXZlbnQ9PSd1bmRlZmluZWQnKXtldmVudD17J3R5cGUnOidjdXN0b20nfTt9 CmlmKHR5cGVvZiBldmVudC5kYXRhPT0ndW5kZWZpbmVkJyl7ZXZlbnQuZGF0YT17 fTt9CmlmKG5hbWUgaW4gY29udGV4dC5ldnQpe2lmKCFjb250ZXh0LmV2dFtuYW1l XShldmVudCkpe3JldHVybiBmYWxzZTt9fQp2YXIgcmV0dXJuRnJvbU1vZHVsZXM9 bnVsbDtmb3IodmFyIG1vZHVsZSBpbiBjb250ZXh0Lm1vZHVsZXMpe2lmKG1vZHVs ZSBpbiAkLndpa2lFZGl0b3IubW9kdWxlcyYmJ2V2dCdpbiAkLndpa2lFZGl0b3Iu bW9kdWxlc1ttb2R1bGVdJiZuYW1lIGluICQud2lraUVkaXRvci5tb2R1bGVzW21v ZHVsZV0uZXZ0KXt2YXIgcmV0PSQud2lraUVkaXRvci5tb2R1bGVzW21vZHVsZV0u ZXZ0W25hbWVdKGNvbnRleHQsZXZlbnQpO2lmKHJldCE9bnVsbCl7aWYocmV0dXJu RnJvbU1vZHVsZXM9PW51bGwpe3JldHVybkZyb21Nb2R1bGVzPXJldDt9ZWxzZXty ZXR1cm5Gcm9tTW9kdWxlcz1yZXR1cm5Gcm9tTW9kdWxlcyYmcmV0O319fX0KaWYo cmV0dXJuRnJvbU1vZHVsZXMhPW51bGwpe3JldHVybiByZXR1cm5Gcm9tTW9kdWxl czt9ZWxzZXtyZXR1cm4gdHJ1ZTt9fSwnYWRkQnV0dG9uJzpmdW5jdGlvbihvcHRp b25zKXtjb250ZXh0LiRjb250cm9scy5zaG93KCk7Y29udGV4dC4kYnV0dG9ucy5z aG93KCk7cmV0dXJuICQoJzxidXR0b24gLz4nKS50ZXh0KCQud2lraUVkaXRvci5h dXRvTXNnKG9wdGlvbnMsJ2NhcHRpb24nKSkuY2xpY2sob3B0aW9ucy5hY3Rpb24p LmFwcGVuZFRvKGNvbnRleHQuJGJ1dHRvbnMpO30sJ2FkZFZpZXcnOmZ1bmN0aW9u KG9wdGlvbnMpe2Z1bmN0aW9uIGFkZFRhYihvcHRpb25zKXtjb250ZXh0LiRjb250 cm9scy5zaG93KCk7Y29udGV4dC4kdGFicy5zaG93KCk7cmV0dXJuICQoJzxkaXY+ PC9kaXY+JykuYXR0cigncmVsJywnd2lraUVkaXRvci11aS12aWV3LScrb3B0aW9u cy5uYW1lKS5hZGRDbGFzcyhjb250ZXh0LnZpZXc9PW9wdGlvbnMubmFtZT8nY3Vy cmVudCc6bnVsbCkuYXBwZW5kKCQoJzxhPjwvYT4nKS5hdHRyKCdocmVmJywnIycp Lm1vdXNlZG93bihmdW5jdGlvbigpe3JldHVybiBmYWxzZTt9KS5jbGljayhmdW5j dGlvbihldmVudCl7Y29udGV4dC4kdWkuZmluZCgnLndpa2lFZGl0b3ItdWktdmll dycpLmhpZGUoKTtjb250ZXh0LiR1aS5maW5kKCcuJyskKHRoaXMpLnBhcmVudCgp LmF0dHIoJ3JlbCcpKS5zaG93KCk7Y29udGV4dC4kdGFicy5maW5kKCdkaXYnKS5y ZW1vdmVDbGFzcygnY3VycmVudCcpOyQodGhpcykucGFyZW50KCkuYWRkQ2xhc3Mo J2N1cnJlbnQnKTskKHRoaXMpLmJsdXIoKTtpZignaW5pdCdpbiBvcHRpb25zJiZ0 eXBlb2Ygb3B0aW9ucy5pbml0PT0nZnVuY3Rpb24nKXtvcHRpb25zLmluaXQoY29u dGV4dCk7fQpldmVudC5wcmV2ZW50RGVmYXVsdCgpO3JldHVybiBmYWxzZTt9KS50 ZXh0KCQud2lraUVkaXRvci5hdXRvTXNnKG9wdGlvbnMsJ3RpdGxlJykpKS5hcHBl bmRUbyhjb250ZXh0LiR0YWJzKTt9CmlmKCFjb250ZXh0LiR0YWJzLmNoaWxkcmVu KCkuc2l6ZSgpKXthZGRUYWIoeyduYW1lJzond2lraXRleHQnLCd0aXRsZU1zZyc6 J3dpa2llZGl0b3Itd2lraXRleHQtdGFiJ30pO30KYWRkVGFiKG9wdGlvbnMpO3Jl dHVybiAkKCc8ZGl2PjwvZGl2PicpLmFkZENsYXNzKCd3aWtpRWRpdG9yLXVpLXZp ZXcgd2lraUVkaXRvci11aS12aWV3LScrb3B0aW9ucy5uYW1lKS5oaWRlKCkuYXBw ZW5kVG8oY29udGV4dC4kdWkpO30sJ2hpZ2hsaWdodExpbmUnOmZ1bmN0aW9uKCRl bGVtZW50LG1vZGUpe2lmKCEkZWxlbWVudC5pcygncCcpKXskZWxlbWVudD0kZWxl bWVudC5jbG9zZXN0KCdwJyk7fQokZWxlbWVudC5jc3MoJ2JhY2tncm91bmRDb2xv cicsJyNBQUNDRkYnKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7JGVsZW1lbnQuYW5p bWF0ZSh7J2JhY2tncm91bmRDb2xvcic6J3doaXRlJ30sJ3Nsb3cnKTt9LDEwMCk7 c2V0VGltZW91dChmdW5jdGlvbigpeyRlbGVtZW50LmNzcygnYmFja2dyb3VuZENv bG9yJywnd2hpdGUnKTt9LDEwMDApO30sJ2h0bWxUb1RleHQnOmZ1bmN0aW9uKGh0 bWwpe2lmKGh0bWwgaW4gY29udGV4dC5odG1sVG9UZXh0TWFwKXtyZXR1cm4gY29u dGV4dC5odG1sVG9UZXh0TWFwW2h0bWxdO30KdmFyIG9yaWdIVE1MPWh0bWw7aHRt bD1odG1sLnJlcGxhY2UoL1xyP1xuL2csIiIpLnJlcGxhY2UoLyZuYnNwOy9nLCIg IikucmVwbGFjZSgvXDxiclteXD5dKlw+XDxcL3BcPi9naSwnPC9wPicpLnJlcGxh Y2UoL1w8XC9wXD5ccypcPHBbXlw+XSpcPi9naSwiXG4iKS5yZXBsYWNlKC9cPGJy W15cPl0qXD4vZ2ksIlxuIikucmVwbGFjZSgvXDxcL3BcPihcbiopXDxwW15cPl0q XD4vZ2ksIiQxXG4iKS5yZXBsYWNlKC9cPHBbXlw+XSpcPjxwW15cPl0qXD4vZ2ks JzxwPicpLnJlcGxhY2UoL1w8XC9wXD48XC9wXD4vZ2ksJzwvcD4nKTt2YXIgbGVh ZGluZz1odG1sLm1hdGNoKC9eXHMqLylbMF07dmFyIHRyYWlsaW5nPWh0bWwubWF0 Y2goL1xzKiQvKVswXTtodG1sPWh0bWwuc3Vic3RyKGxlYWRpbmcubGVuZ3RoLGh0 bWwubGVuZ3RoLWxlYWRpbmcubGVuZ3RoLXRyYWlsaW5nLmxlbmd0aCk7dmFyICRw cmU9JCgnPHByZT4nK2h0bWwrJzwvcHJlPicpOyRwcmUuZmluZCgnLndpa2lFZGl0 b3Itbm9pbmNsdWRlJykuZWFjaChmdW5jdGlvbigpeyQodGhpcykucmVtb3ZlKCk7 fSk7JHByZS5maW5kKCcud2lraUVkaXRvci10YWInKS5lYWNoKGZ1bmN0aW9uKCl7 JCh0aGlzKS50ZXh0KCJcdCIpO30pOyRwcmUuZmluZCgnYnInKS5lYWNoKGZ1bmN0 aW9uKCl7JCh0aGlzKS5yZXBsYWNlV2l0aCgiXG4iKTt9KTskcHJlLmZpbmQoJ3An KS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHRleHQ9JCh0aGlzKS50ZXh0KCk7dmFyIHQ9 bmV3IGNvbnRleHQuZm4ucmF3VHJhdmVyc2VyKHRoaXMuZmlyc3RDaGlsZCx0aGlz LCRwcmUuZ2V0KDApLHRydWUpLnByZXYoKTt3aGlsZSh0JiZ0Lm5vZGUubm9kZU5h bWUhPScjdGV4dCcmJnQubm9kZS5ub2RlTmFtZSE9J0JSJyYmdC5ub2RlLm5vZGVO YW1lIT0nUCcpe3Q9dC5wcmV2KCk7fQppZih0KXt0ZXh0PSJcbiIrdGV4dDt9CnQ9 bmV3IGNvbnRleHQuZm4ucmF3VHJhdmVyc2VyKHRoaXMubGFzdENoaWxkLHRoaXMs JHByZS5nZXQoMCksdHJ1ZSkubmV4dCgpO3doaWxlKHQmJnQubm9kZS5ub2RlTmFt ZSE9JyN0ZXh0JyYmdC5ub2RlLm5vZGVOYW1lIT0nQlInJiZ0Lm5vZGUubm9kZU5h bWUhPSdQJyl7dD10Lm5leHQoKTt9CmlmKHQmJiF0LmluUCYmdC5ub2RlLm5vZGVO YW1lPT0nI3RleHQnJiZ0Lm5vZGUubm9kZVZhbHVlLmNoYXJBdCgwKSE9J1xuJyYm dC5ub2RlLm5vZGVWYWx1ZS5jaGFyQXQoMCkhPSdccicpe3RleHQrPSJcbiI7fQok KHRoaXMpLnRleHQodGV4dCk7fSk7dmFyIHJldHZhbDtpZigkLmJyb3dzZXIubXNp ZSl7cmV0dmFsPSQoJzxwcmU+JyskcHJlLmh0bWwoKSsnPC9wcmU+JykudGV4dCgp LnJlcGxhY2UoL1xyL2csJ1xuJyk7fWVsc2V7cmV0dmFsPSRwcmUudGV4dCgpO30K cmV0dXJuIGNvbnRleHQuaHRtbFRvVGV4dE1hcFtvcmlnSFRNTF09bGVhZGluZyty ZXR2YWwrdHJhaWxpbmc7fSwnYmVmb3JlU2VsZWN0aW9uJzpmdW5jdGlvbihjbGFz c25hbWUsc3RyaWN0KXtpZih0eXBlb2YgY2xhc3NuYW1lPT0ndW5kZWZpbmVkJyl7 Y2xhc3NuYW1lPScnO30KdmFyIGU9bnVsbCxvZmZzZXQ9bnVsbDtpZihjb250ZXh0 LiRpZnJhbWVbMF0uY29udGVudFdpbmRvdy5nZXRTZWxlY3Rpb24pe3ZhciBzZWxl Y3Rpb249Y29udGV4dC4kaWZyYW1lWzBdLmNvbnRlbnRXaW5kb3cuZ2V0U2VsZWN0 aW9uKCk7aWYoc2VsZWN0aW9uLmJhc2VOb2RlIT09bnVsbCl7ZT1zZWxlY3Rpb24u Z2V0UmFuZ2VBdCgwKS5zdGFydENvbnRhaW5lcjtvZmZzZXQ9c2VsZWN0aW9uLmdl dFJhbmdlQXQoMCkuc3RhcnRPZmZzZXQ7fWVsc2V7cmV0dXJuIG51bGw7fQp2YXIg Ym9keT1jb250ZXh0LiRpZnJhbWVbMF0uY29udGVudFdpbmRvdy5kb2N1bWVudC5i b2R5O2lmKCQuYnJvd3Nlci5vcGVyYSYmZT09Ym9keSYmb2Zmc2V0PT0xKXtyZXR1 cm4gbnVsbDt9fQppZighZSYmY29udGV4dC4kaWZyYW1lWzBdLmNvbnRlbnRXaW5k b3cuZG9jdW1lbnQuc2VsZWN0aW9uKXt2YXIgcmFuZ2U9Y29udGV4dC4kaWZyYW1l WzBdLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdl KCk7dmFyIHJhbmdlMj1jb250ZXh0LiRpZnJhbWVbMF0uY29udGVudFdpbmRvdy5k b2N1bWVudC5ib2R5LmNyZWF0ZVRleHRSYW5nZSgpO3RyeXtyYW5nZTIuc2V0RW5k UG9pbnQoJ0VuZFRvU3RhcnQnLHJhbmdlKTt9Y2F0Y2goZXgpe3JldHVybiBudWxs O30KdmFyIHNlZWtQb3M9Y29udGV4dC5mbi5odG1sVG9UZXh0KHJhbmdlMi5odG1s VGV4dCkubGVuZ3RoO3ZhciBvZmZzZXQ9Y29udGV4dC5mbi5nZXRPZmZzZXQoc2Vl a1Bvcyk7ZT1vZmZzZXQ/b2Zmc2V0Lm5vZGU6bnVsbDtvZmZzZXQ9b2Zmc2V0P29m ZnNldC5vZmZzZXQ6bnVsbDtpZighZSl7cmV0dXJuIG51bGw7fX0KaWYoZS5ub2Rl TmFtZSE9JyN0ZXh0Jyl7dmFyIG5ld0U9ZS5maXJzdENoaWxkO2Zvcih2YXIgaT0w O2k8b2Zmc2V0LTEmJm5ld0U7aSsrKXtuZXdFPW5ld0UubmV4dFNpYmxpbmc7fQp3 aGlsZShuZXdFJiZuZXdFLmxhc3RDaGlsZCl7bmV3RT1uZXdFLmxhc3RDaGlsZDt9 CmU9bmV3RXx8ZTt9CnZhciBjbGFzc1N0cj0nICcrY2xhc3NuYW1lKycgJzt3aGls ZShlKXtpZighc3RyaWN0JiYoIWNsYXNzbmFtZXx8KCcgJytlLmNsYXNzTmFtZSsn ICcpLmluZGV4T2YoY2xhc3NTdHIpIT0tMSkpe3JldHVybiAkKGUpO30KdmFyIG5l eHQ9ZS5wcmV2aW91c1NpYmxpbmc7d2hpbGUobmV4dCYmbmV4dC5sYXN0Q2hpbGQp e25leHQ9bmV4dC5sYXN0Q2hpbGQ7fQplPW5leHR8fGUucGFyZW50Tm9kZTtzdHJp Y3Q9ZmFsc2U7fQpyZXR1cm4gJChbXSk7fSwncmF3VHJhdmVyc2VyJzpmdW5jdGlv bihub2RlLGluUCxhbmNlc3Rvcixza2lwTm9pbmNsdWRlKXt0aGlzLm5vZGU9bm9k ZTt0aGlzLmluUD1pblA7dGhpcy5hbmNlc3Rvcj1hbmNlc3Rvcjt0aGlzLnNraXBO b2luY2x1ZGU9c2tpcE5vaW5jbHVkZTt0aGlzLm5leHQ9ZnVuY3Rpb24oKXt2YXIg cD10aGlzLm5vZGU7dmFyIG5leHRJblA9dGhpcy5pblA7d2hpbGUocCYmIXAubmV4 dFNpYmxpbmcpe3A9cC5wYXJlbnROb2RlO2lmKHA9PXRoaXMuYW5jZXN0b3Ipe3A9 bnVsbDt9CmlmKHAmJnAubm9kZU5hbWU9PSJQIil7bmV4dEluUD1udWxsO319CnA9 cD9wLm5leHRTaWJsaW5nOm51bGw7aWYocCYmcC5ub2RlTmFtZT09IlAiKXtuZXh0 SW5QPXA7fQpkb3tpZih0aGlzLnNraXBOb2luY2x1ZGUpe3doaWxlKHAmJignICcr cC5jbGFzc05hbWUrJyAnKS5pbmRleE9mKCcgd2lraUVkaXRvci1ub2luY2x1ZGUg JykhPS0xKXtwPXAubmV4dFNpYmxpbmc7fX0KaWYocCYmcC5maXJzdENoaWxkKXtw PXAuZmlyc3RDaGlsZDtpZihwLm5vZGVOYW1lPT0iUCIpe25leHRJblA9cDt9fX13 aGlsZShwJiZwLmZpcnN0Q2hpbGQpO3JldHVybiBwP3snbm9kZSc6cCwnaW5QJzpu ZXh0SW5QLCdhbmNlc3Rvcic6dGhpcy5hbmNlc3Rvciwnc2tpcE5vaW5jbHVkZSc6 dGhpcy5za2lwTm9pbmNsdWRlLCduZXh0Jzp0aGlzLm5leHQsJ3ByZXYnOnRoaXMu cHJldn06bnVsbDt9O3RoaXMucHJldj1mdW5jdGlvbigpe3ZhciBwPXRoaXMubm9k ZTt2YXIgcHJldkluUD10aGlzLmluUDt3aGlsZShwJiYhcC5wcmV2aW91c1NpYmxp bmcpe3A9cC5wYXJlbnROb2RlO2lmKHA9PXRoaXMuYW5jZXN0b3Ipe3A9bnVsbDt9 CmlmKHAmJnAubm9kZU5hbWU9PSJQIil7cHJldkluUD1udWxsO319CnA9cD9wLnBy ZXZpb3VzU2libGluZzpudWxsO2lmKHAmJnAubm9kZU5hbWU9PSJQIil7cHJldklu UD1wO30KZG97aWYodGhpcy5za2lwTm9pbmNsdWRlKXt3aGlsZShwJiYoJyAnK3Au Y2xhc3NOYW1lKycgJykuaW5kZXhPZignIHdpa2lFZGl0b3Itbm9pbmNsdWRlICcp IT0tMSl7cD1wLnByZXZpb3VzU2libGluZzt9fQppZihwJiZwLmxhc3RDaGlsZCl7 cD1wLmxhc3RDaGlsZDtpZihwLm5vZGVOYW1lPT0iUCIpe3ByZXZJblA9cDt9fX13 aGlsZShwJiZwLmxhc3RDaGlsZCk7cmV0dXJuIHA/eydub2RlJzpwLCdpblAnOnBy ZXZJblAsJ2FuY2VzdG9yJzp0aGlzLmFuY2VzdG9yLCdza2lwTm9pbmNsdWRlJzp0 aGlzLnNraXBOb2luY2x1ZGUsJ25leHQnOnRoaXMubmV4dCwncHJldic6dGhpcy5w cmV2fTpudWxsO307fSwndHJhdmVyc2VyJzpmdW5jdGlvbihzdGFydCl7dmFyIHN0 YXJ0Tm9kZT1zdGFydC5qcXVlcnk/c3RhcnQuZ2V0KDApOnN0YXJ0O3ZhciBub2Rl PXN0YXJ0Tm9kZTt2YXIgaW5QPW5vZGUubm9kZU5hbWU9PSJQIj9ub2RlOm51bGw7 ZG97d2hpbGUobm9kZSYmKCcgJytub2RlLmNsYXNzTmFtZSsnICcpLmluZGV4T2Yo JyB3aWtpRWRpdG9yLW5vaW5jbHVkZSAnKSE9LTEpe25vZGU9bm9kZS5uZXh0U2li bGluZzt9CmlmKG5vZGUmJm5vZGUuZmlyc3RDaGlsZCl7bm9kZT1ub2RlLmZpcnN0 Q2hpbGQ7aWYobm9kZS5ub2RlTmFtZT09IlAiKXtpblA9bm9kZTt9fX13aGlsZShu b2RlJiZub2RlLmZpcnN0Q2hpbGQpO3JldHVybiBuZXcgY29udGV4dC5mbi5yYXdU cmF2ZXJzZXIobm9kZSxpblAsc3RhcnROb2RlLHRydWUpO30sJ2dldE9mZnNldCc6 ZnVuY3Rpb24ob2Zmc2V0KXtpZighY29udGV4dC5vZmZzZXRzKXtjb250ZXh0LmZu LnJlZnJlc2hPZmZzZXRzKCk7fQppZihvZmZzZXQgaW4gY29udGV4dC5vZmZzZXRz KXtyZXR1cm4gY29udGV4dC5vZmZzZXRzW29mZnNldF07fQp2YXIgbG93ZXJCb3Vu ZD0tMTtmb3IodmFyIG8gaW4gY29udGV4dC5vZmZzZXRzKXt2YXIgcmVhbE89cGFy c2VJbnQobyk7aWYocmVhbE88b2Zmc2V0JiZyZWFsTz5sb3dlckJvdW5kKXtsb3dl ckJvdW5kPXJlYWxPO319CmlmKCEobG93ZXJCb3VuZCBpbiBjb250ZXh0Lm9mZnNl dHMpKXtyZXR1cm4gbnVsbDt9CnZhciBiYXNlPWNvbnRleHQub2Zmc2V0c1tsb3dl ckJvdW5kXTtyZXR1cm4gY29udGV4dC5vZmZzZXRzW29mZnNldF09eydub2RlJzpi YXNlLm5vZGUsJ29mZnNldCc6YmFzZS5vZmZzZXQrb2Zmc2V0LWxvd2VyQm91bmQs J2xlbmd0aCc6YmFzZS5sZW5ndGgsJ2xhc3RUZXh0Tm9kZSc6YmFzZS5sYXN0VGV4 dE5vZGV9O30sJ3B1cmdlT2Zmc2V0cyc6ZnVuY3Rpb24oKXtjb250ZXh0Lm9mZnNl dHM9bnVsbDt9LCdyZWZyZXNoT2Zmc2V0cyc6ZnVuY3Rpb24oKXtjb250ZXh0Lm9m ZnNldHM9W107dmFyIHQ9Y29udGV4dC5mbi50cmF2ZXJzZXIoY29udGV4dC4kY29u dGVudCk7dmFyIHBvcz0wLGxhc3RUZXh0Tm9kZT1udWxsO3doaWxlKHQpe2lmKHQu bm9kZS5ub2RlTmFtZSE9JyN0ZXh0JyYmdC5ub2RlLm5vZGVOYW1lIT0nQlInKXt0 PXQubmV4dCgpO2NvbnRpbnVlO30KdmFyIG5leHRQb3M9dC5ub2RlLm5vZGVOYW1l PT0nI3RleHQnP3Bvcyt0Lm5vZGUubm9kZVZhbHVlLmxlbmd0aDpwb3MrMTt2YXIg bmV4dFQ9dC5uZXh0KCk7dmFyIGxlYXZpbmdQPXQubm9kZS5ub2RlTmFtZT09JyN0 ZXh0JyYmdC5pblAmJm5leHRUJiYoIW5leHRULmluUHx8bmV4dFQuaW5QIT10Lmlu UCk7Y29udGV4dC5vZmZzZXRzW3Bvc109eydub2RlJzp0Lm5vZGUsJ29mZnNldCc6 MCwnbGVuZ3RoJzpuZXh0UG9zLXBvcysobGVhdmluZ1A/MTowKSwnbGFzdFRleHRO b2RlJzpsYXN0VGV4dE5vZGV9O2lmKGxlYXZpbmdQKXtjb250ZXh0Lm9mZnNldHNb bmV4dFBvc109eydub2RlJzp0Lm5vZGUsJ29mZnNldCc6bmV4dFBvcy1wb3MsJ2xl bmd0aCc6bmV4dFBvcy1wb3MrMSwnbGFzdFRleHROb2RlJzpsYXN0VGV4dE5vZGV9 O30KcG9zPW5leHRQb3MrKGxlYXZpbmdQPzE6MCk7aWYodC5ub2RlLm5vZGVOYW1l PT0nI3RleHQnKXtsYXN0VGV4dE5vZGU9dC5ub2RlO30KdD1uZXh0VDt9fSwnc2F2 ZVNlbGVjdGlvbic6ZnVuY3Rpb24oKXtpZighJC5icm93c2VyLm1zaWUpe3JldHVy bjt9CmlmKHR5cGVvZiBjb250ZXh0LiRpZnJhbWUhPSd1bmRlZmluZWQnKXtjb250 ZXh0LiRpZnJhbWVbMF0uY29udGVudFdpbmRvdy5mb2N1cygpO2NvbnRleHQuc2F2 ZWRTZWxlY3Rpb249Y29udGV4dC4kaWZyYW1lWzBdLmNvbnRlbnRXaW5kb3cuZG9j dW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCk7fWVsc2V7Y29udGV4dC4kdGV4 dGFyZWEuZm9jdXMoKTtjb250ZXh0LnNhdmVkU2VsZWN0aW9uPWRvY3VtZW50LnNl bGVjdGlvbi5jcmVhdGVSYW5nZSgpO319LCdyZXN0b3JlU2VsZWN0aW9uJzpmdW5j dGlvbigpe2lmKCEkLmJyb3dzZXIubXNpZXx8Y29udGV4dC5zYXZlZFNlbGVjdGlv bj09PW51bGwpe3JldHVybjt9CmlmKHR5cGVvZiBjb250ZXh0LiRpZnJhbWUhPSd1 bmRlZmluZWQnKXtjb250ZXh0LiRpZnJhbWVbMF0uY29udGVudFdpbmRvdy5mb2N1 cygpO31lbHNle2NvbnRleHQuJHRleHRhcmVhLmZvY3VzKCk7fQpjb250ZXh0LnNh dmVkU2VsZWN0aW9uLnNlbGVjdCgpO2NvbnRleHQuc2F2ZWRTZWxlY3Rpb249bnVs bDt9LCd1cGRhdGVIaXN0b3J5JzpmdW5jdGlvbihodG1sQ2hhbmdlKXt2YXIgbmV3 SFRNTD1jb250ZXh0LiRjb250ZW50Lmh0bWwoKTt2YXIgbmV3U2VsPWNvbnRleHQu Zm4uZ2V0Q2FyZXRQb3NpdGlvbigpO2lmKGNvbnRleHQuaGlzdG9yeS5sZW5ndGg9 PTB8fChodG1sQ2hhbmdlJiZjb250ZXh0Lm9sZERlbGF5ZWRIaXN0b3J5UG9zaXRp b249PWNvbnRleHQuaGlzdG9yeVBvc2l0aW9uKSl7Y29udGV4dC5vbGREZWxheWVk U2VsPW5ld1NlbDtpZihjb250ZXh0Lmhpc3RvcnlQb3NpdGlvbjwtMSl7Y29udGV4 dC5oaXN0b3J5LnNwbGljZShjb250ZXh0Lmhpc3RvcnkubGVuZ3RoK2NvbnRleHQu aGlzdG9yeVBvc2l0aW9uKzEpO2NvbnRleHQuaGlzdG9yeVBvc2l0aW9uPS0xO30K Y29udGV4dC5oaXN0b3J5LnB1c2goeydodG1sJzpuZXdIVE1MLCdzZWwnOm5ld1Nl bH0pO3doaWxlKGNvbnRleHQuaGlzdG9yeS5sZW5ndGg+MTApe2NvbnRleHQuaGlz dG9yeS5zaGlmdCgpO319ZWxzZSBpZihjb250ZXh0Lm9sZERlbGF5ZWRTZWwhPW5l d1NlbCl7Y29udGV4dC5vbGREZWxheWVkU2VsPW5ld1NlbDtjb250ZXh0Lmhpc3Rv cnlbY29udGV4dC5oaXN0b3J5Lmxlbmd0aCtjb250ZXh0Lmhpc3RvcnlQb3NpdGlv bl0uc2VsPW5ld1NlbDt9CmNvbnRleHQub2xkRGVsYXllZEhpc3RvcnlQb3NpdGlv bj1jb250ZXh0Lmhpc3RvcnlQb3NpdGlvbjt9LCdzZXR1cElmcmFtZSc6ZnVuY3Rp b24oKXtjb250ZXh0LiRpZnJhbWU9JCgnPGlmcmFtZT48L2lmcmFtZT4nKS5hdHRy KHsnZnJhbWVCb3JkZXInOjAsJ2JvcmRlcic6MCwndGFiaW5kZXgnOjEsJ3NyYyc6 d2dTY3JpcHRQYXRoKycvZXh0ZW5zaW9ucy9Vc2FiaWxpdHlJbml0aWF0aXZlL2pz L3BsdWdpbnMvanF1ZXJ5Lndpa2lFZGl0b3IuaHRtbD8nKydpbnN0YW5jZT0nK2Nv bnRleHQuaW5zdGFuY2UrJyZ0cz0nKyhuZXcgRGF0ZSgpKS5nZXRUaW1lKCkrJyZp cz1jb250ZW50JywnaWQnOid3aWtpRWRpdG9yLWlmcmFtZS0nK2NvbnRleHQuaW5z dGFuY2V9KS5jc3MoeydiYWNrZ3JvdW5kQ29sb3InOid3aGl0ZScsJ3dpZHRoJzon MTAwJScsJ2hlaWdodCc6Y29udGV4dC4kdGV4dGFyZWEuaGVpZ2h0KCksJ2Rpc3Bs YXknOidub25lJywnb3ZlcmZsb3cteSc6J3Njcm9sbCcsJ292ZXJmbG93LXgnOido aWRkZW4nfSkuaW5zZXJ0QWZ0ZXIoY29udGV4dC4kdGV4dGFyZWEpLmxvYWQoZnVu Y3Rpb24oKXtpZighdGhpcy5pc1NlY29uZFJ1bil7Y29udGV4dC4kaWZyYW1lWzBd LmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQuZGVzaWduTW9kZT0nb24nO2lmKCQuYnJv d3Nlci5tc2llKXt0aGlzLmlzU2Vjb25kUnVuPXRydWU7cmV0dXJuO319CmNvbnRl eHQuJGNvbnRlbnQ9JChjb250ZXh0LiRpZnJhbWVbMF0uY29udGVudFdpbmRvdy5k b2N1bWVudC5ib2R5KTtmb3IobW9kdWxlIGluIGNvbnRleHQubW9kdWxlcyl7Y29u dGV4dC4kY29udGVudC5hZGRDbGFzcygnd2lraUVkaXRvci0nK21vZHVsZSk7fQp2 YXIgaHRtbD1jb250ZXh0LiR0ZXh0YXJlYS52YWwoKS5yZXBsYWNlKC8mZXNjOy9n LCcmZXNjO2VzYzsnKS5yZXBsYWNlKC9cPHBcPi9nLCcmZXNjOyZsdDtwJmd0Oycp LnJlcGxhY2UoL1w8XC9wXD4vZywnJmVzYzsmbHQ7L3AmZ3Q7JykucmVwbGFjZSgv XDxzcGFuIGNsYXNzPSJ3aWtpRWRpdG9yLXRhYiJcPlw8XC9zcGFuXD4vZywnJmVz YzsmbHQ7c3BhbiZuYnNwO2NsYXNzPSZxdW90O3dpa2lFZGl0b3ItdGFiJnF1b3Q7 Jmd0OyZsdDsvc3BhbiZndDsnKS5yZXBsYWNlKC8mbmJzcDsvZywnJmVzYzsmYW1w O25ic3A7Jyk7aWYoJC5icm93c2VyLm1zaWUpe2h0bWw9aHRtbC5yZXBsYWNlKC9c dC9nLCc8c3BhbiBjbGFzcz0id2lraUVkaXRvci10YWIiPjwvc3Bhbj4nKTtpZigk LmJyb3dzZXIudmVyc2lvbk51bWJlcjw9Nyl7aHRtbD1odG1sLnJlcGxhY2UoLyAv ZywiJm5ic3A7Iik7fWVsc2V7aHRtbD1odG1sLnJlcGxhY2UoLyhefFxuKSAvZywi JDEmbmJzcDsiKTt9fQpodG1sPSQoJzxkaXYgLz4nKS50ZXh0KCc8cD4nK2h0bWwu cmVwbGFjZSgvXHI/XG4vZywnPC9wPjxwPicpKyc8L3A+JykuaHRtbCgpLnJlcGxh Y2UoLyZhbXA7bmJzcDsvZywnJm5ic3A7JykucmVwbGFjZSgvJmx0O3AmZ3Q7L2cs JzxwPicpLnJlcGxhY2UoLyZsdDtcL3AmZ3Q7L2csJzwvcD4nKS5yZXBsYWNlKC8m bHQ7c3BhbiggfCZuYnNwOyljbGFzcz0oInwmcXVvdDspd2lraUVkaXRvci10YWIo InwmcXVvdDspJmd0OyZsdDtcL3NwYW4mZ3Q7L2csJzxzcGFuIGNsYXNzPSJ3aWtp RWRpdG9yLXRhYiI+PC9zcGFuPicpLnJlcGxhY2UoLzxwPjxcL3A+L2csJzxwPjxi cj48L3A+JykucmVwbGFjZSgvJmFtcDtlc2M7JmFtcDthbXA7bmJzcDsvZywnJmFt cDtuYnNwOycpLnJlcGxhY2UoLyZhbXA7ZXNjOyZhbXA7bHQ7cCZhbXA7Z3Q7L2cs JyZsdDtwJmd0OycpLnJlcGxhY2UoLyZhbXA7ZXNjOyZhbXA7bHQ7XC9wJmFtcDtn dDsvZywnJmx0Oy9wJmd0OycpLnJlcGxhY2UoLyZhbXA7ZXNjOyZhbXA7bHQ7c3Bh biZhbXA7bmJzcDtjbGFzcz0mYW1wO3F1b3Q7d2lraUVkaXRvci10YWImYW1wO3F1 b3Q7JmFtcDtndDsmYW1wO2x0O1wvc3BhbiZhbXA7Z3Q7L2csJyZsdDtzcGFuIGNs YXNzPSJ3aWtpRWRpdG9yLXRhYiImZ3Q7Jmx0O1wvc3BhbiZndDsnKS5yZXBsYWNl KC8mYW1wO2VzYztlc2M7L2csJyZhbXA7ZXNjOycpO2NvbnRleHQuJGNvbnRlbnQu aHRtbChodG1sKTtpZigkKCdib2R5JykuaXMoJy5ydGwnKSl7Y29udGV4dC4kY29u dGVudC5hZGRDbGFzcygncnRsJykuYXR0cignZGlyJywncnRsJyk7fQpjb250ZXh0 LiR0ZXh0YXJlYS5hdHRyKCdkaXNhYmxlZCcsdHJ1ZSk7Y29udGV4dC4kdGV4dGFy ZWEuaGlkZSgpO2NvbnRleHQuJGlmcmFtZS5zaG93KCk7Y29udGV4dC5mbi50cmln Z2VyKCdyZWFkeScpO2NvbnRleHQub2xkSFRNTD1jb250ZXh0Lm9sZERlbGF5ZWRI VE1MPWNvbnRleHQuJGNvbnRlbnQuaHRtbCgpOyQoY29udGV4dC4kaWZyYW1lWzBd LmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQpLmJpbmQoJ2tleWRvd24nLGZ1bmN0aW9u KGV2ZW50KXtldmVudC5qUXVlcnlOb2RlPWNvbnRleHQuZm4uZ2V0RWxlbWVudEF0 Q3Vyc29yKCk7cmV0dXJuIGNvbnRleHQuZm4udHJpZ2dlcigna2V5ZG93bicsZXZl bnQpO30pLmJpbmQoJ2tleXVwJyxmdW5jdGlvbihldmVudCl7ZXZlbnQualF1ZXJ5 Tm9kZT1jb250ZXh0LmZuLmdldEVsZW1lbnRBdEN1cnNvcigpO3JldHVybiBjb250 ZXh0LmZuLnRyaWdnZXIoJ2tleXVwJyxldmVudCk7fSkuYmluZCgna2V5cHJlc3Mn LGZ1bmN0aW9uKGV2ZW50KXtldmVudC5qUXVlcnlOb2RlPWNvbnRleHQuZm4uZ2V0 RWxlbWVudEF0Q3Vyc29yKCk7cmV0dXJuIGNvbnRleHQuZm4udHJpZ2dlcigna2V5 cHJlc3MnLGV2ZW50KTt9KS5iaW5kKCdwYXN0ZScsZnVuY3Rpb24oZXZlbnQpe3Jl dHVybiBjb250ZXh0LmZuLnRyaWdnZXIoJ3Bhc3RlJyxldmVudCk7fSkuYmluZCgn Y3V0JyxmdW5jdGlvbihldmVudCl7cmV0dXJuIGNvbnRleHQuZm4udHJpZ2dlcign Y3V0JyxldmVudCk7fSkuYmluZCgna2V5dXAgcGFzdGUgbW91c2V1cCBjdXQgZW5j YXBzdWxhdGVTZWxlY3Rpb24nLGZ1bmN0aW9uKGV2ZW50KXtyZXR1cm4gY29udGV4 dC5mbi50cmlnZ2VyKCdjaGFuZ2UnLGV2ZW50KTt9KS5kZWxheWVkQmluZCgyNTAs J2tleXVwIHBhc3RlIG1vdXNldXAgY3V0IGVuY2Fwc3VsYXRlU2VsZWN0aW9uJyxm dW5jdGlvbihldmVudCl7Y29udGV4dC5mbi50cmlnZ2VyKCdkZWxheWVkQ2hhbmdl JyxldmVudCk7fSk7fSk7Y29udGV4dC4kdGV4dGFyZWEuY2xvc2VzdCgnZm9ybScp LnN1Ym1pdChmdW5jdGlvbigpe2NvbnRleHQuJHRleHRhcmVhLmF0dHIoJ2Rpc2Fi bGVkJyxmYWxzZSk7Y29udGV4dC4kdGV4dGFyZWEudmFsKGNvbnRleHQuJHRleHRh cmVhLnRleHRTZWxlY3Rpb24oJ2dldENvbnRlbnRzJykpO30pO2NvbnRleHQuZmFs bGJhY2tXaW5kb3dPbkJlZm9yZVVubG9hZD13aW5kb3cub25iZWZvcmV1bmxvYWQ7 d2luZG93Lm9uYmVmb3JldW5sb2FkPWZ1bmN0aW9uKCl7Y29udGV4dC4kdGV4dGFy ZWEudmFsKGNvbnRleHQuJHRleHRhcmVhLnRleHRTZWxlY3Rpb24oJ2dldENvbnRl bnRzJykpO2lmKGNvbnRleHQuZmFsbGJhY2tXaW5kb3dPbkJlZm9yZVVubG9hZCl7 cmV0dXJuIGNvbnRleHQuZmFsbGJhY2tXaW5kb3dPbkJlZm9yZVVubG9hZCgpO319 O30sJ2dldEVsZW1lbnRBdEN1cnNvcic6ZnVuY3Rpb24oKXtpZihjb250ZXh0LiRp ZnJhbWVbMF0uY29udGVudFdpbmRvdy5nZXRTZWxlY3Rpb24pe3ZhciBzZWxlY3Rp b249Y29udGV4dC4kaWZyYW1lWzBdLmNvbnRlbnRXaW5kb3cuZ2V0U2VsZWN0aW9u KCk7aWYoc2VsZWN0aW9uLnJhbmdlQ291bnQ9PTApe3JldHVybiAkKFtdKTt9CnZh ciBzYz1zZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKS5zdGFydENvbnRhaW5lcjtpZihz Yy5ub2RlTmFtZT09IiN0ZXh0IilzYz1zYy5wYXJlbnROb2RlO3JldHVybiAkKHNj KTt9ZWxzZSBpZihjb250ZXh0LiRpZnJhbWVbMF0uY29udGVudFdpbmRvdy5kb2N1 bWVudC5zZWxlY3Rpb24pe3ZhciBzZWxlY3Rpb249Y29udGV4dC4kaWZyYW1lWzBd LmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCk7 cmV0dXJuICQoc2VsZWN0aW9uLnBhcmVudEVsZW1lbnQoKSk7fX0sJ2dldENvbnRl bnRzJzpmdW5jdGlvbigpe3ZhciBodG1sO2lmKCQuYnJvd3Nlci5tc2llKXt2YXIg JGM9JChjb250ZXh0LiRjb250ZW50LmdldCgwKS5jbG9uZU5vZGUodHJ1ZSkpOyRj LmZpbmQoJ3AnKS5lYWNoKGZ1bmN0aW9uKCl7aWYoJCh0aGlzKS5odG1sKCk9PScn KXskKHRoaXMpLnJlcGxhY2VXaXRoKCc8cD48L3A+Jyk7fX0pO2h0bWw9JGMuaHRt bCgpO31lbHNle2h0bWw9Y29udGV4dC4kY29udGVudC5odG1sKCk7fQpyZXR1cm4g Y29udGV4dC5mbi5odG1sVG9UZXh0KGh0bWwpO30sJ2dldFNlbGVjdGlvbic6ZnVu Y3Rpb24oKXt2YXIgcmV0dmFsO2lmKGNvbnRleHQuJGlmcmFtZVswXS5jb250ZW50 V2luZG93LmdldFNlbGVjdGlvbil7cmV0dmFsPWNvbnRleHQuJGlmcmFtZVswXS5j b250ZW50V2luZG93LmdldFNlbGVjdGlvbigpO2lmKCQuYnJvd3Nlci5vcGVyYSl7 aWYocmV0dmFsLnJhbmdlQ291bnQ+MCl7cmV0dmFsPWNvbnRleHQuZm4uaHRtbFRv VGV4dCgkKCc8cHJlIC8+JykuYXBwZW5kKHJldHZhbC5nZXRSYW5nZUF0KDApLmNs b25lQ29udGVudHMoKSkuaHRtbCgpKTt9ZWxzZXtyZXR2YWw9Jyc7fX19ZWxzZSBp Zihjb250ZXh0LiRpZnJhbWVbMF0uY29udGVudFdpbmRvdy5kb2N1bWVudC5zZWxl Y3Rpb24pe3JldHZhbD1jb250ZXh0LiRpZnJhbWVbMF0uY29udGVudFdpbmRvdy5k b2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTt9CmlmKHR5cGVvZiByZXR2 YWwudGV4dCE9J3VuZGVmaW5lZCcpe3JldHZhbD1jb250ZXh0LmZuLmh0bWxUb1Rl eHQocmV0dmFsLmh0bWxUZXh0KTt9ZWxzZSBpZih0eXBlb2YgcmV0dmFsLnRvU3Ry aW5nIT0ndW5kZWZpbmVkJyl7cmV0dmFsPXJldHZhbC50b1N0cmluZygpO30KcmV0 dXJuIHJldHZhbDt9LCdlbmNhcHN1bGF0ZVNlbGVjdGlvbic6ZnVuY3Rpb24ob3B0 aW9ucyl7dmFyIHNlbFRleHQ9JCh0aGlzKS50ZXh0U2VsZWN0aW9uKCdnZXRTZWxl Y3Rpb24nKTt2YXIgc2VsVGV4dEFycjt2YXIgY29sbGFwc2VUb0VuZD1mYWxzZTt2 YXIgc2VsZWN0QWZ0ZXI9ZmFsc2U7dmFyIHNldFNlbGVjdGlvblRvPW51bGw7dmFy IHByZT1vcHRpb25zLnByZSxwb3N0PW9wdGlvbnMucG9zdDtpZighc2VsVGV4dCl7 c2VsVGV4dD1vcHRpb25zLnBlcmk7c2VsZWN0QWZ0ZXI9dHJ1ZTt9ZWxzZSBpZihv cHRpb25zLnBlcmk9PXNlbFRleHQucmVwbGFjZSgvXHMrJC8sJycpKXtzZWxUZXh0 PXNlbFRleHQucmVwbGFjZSgvXHMrJC8sJycpO2NvbGxhcHNlVG9FbmQ9dHJ1ZTtz ZWxlY3RBZnRlcj10cnVlO31lbHNlIGlmKG9wdGlvbnMucmVwbGFjZSl7c2VsVGV4 dD1vcHRpb25zLnBlcmk7fWVsc2UgaWYoc2VsVGV4dC5jaGFyQXQoc2VsVGV4dC5s ZW5ndGgtMSk9PScgJyl7c2VsVGV4dD1zZWxUZXh0LnN1YnN0cmluZygwLHNlbFRl eHQubGVuZ3RoLTEpO3Bvc3QrPScgJzt9CmlmKG9wdGlvbnMuc3BsaXRsaW5lcyl7 c2VsVGV4dEFycj1zZWxUZXh0LnNwbGl0KC9cbi8pO30KaWYoY29udGV4dC4kaWZy YW1lWzBdLmNvbnRlbnRXaW5kb3cuZ2V0U2VsZWN0aW9uKXt2YXIgcmFuZ2U9Y29u dGV4dC4kaWZyYW1lWzBdLmNvbnRlbnRXaW5kb3cuZ2V0U2VsZWN0aW9uKCkuZ2V0 UmFuZ2VBdCgwKTtpZihjb2xsYXBzZVRvRW5kKXtpZihyYW5nZS5lbmRDb250YWlu ZXIubm9kZU5hbWU9PSdCUicpe3JhbmdlLnNldEVuZEJlZm9yZShyYW5nZS5lbmRD b250YWluZXIpO30KcmFuZ2UuY29sbGFwc2UoZmFsc2UpO30KaWYob3B0aW9ucy5v d25saW5lKXt2YXIgYXRTdGFydD1mYWxzZSxhdEVuZD1mYWxzZTt2YXIgYm9keT1j b250ZXh0LiRjb250ZW50LmdldCgwKTtpZihyYW5nZS5zdGFydE9mZnNldD09MCl7 YXRTdGFydD10cnVlO31lbHNlIGlmKHJhbmdlLnN0YXJ0Q29udGFpbmVyPT1ib2R5 KXt2YXIgbj1ib2R5LmZpcnN0Q2hpbGQ7Zm9yKHZhciBpPTA7aTxyYW5nZS5zdGFy dE9mZnNldC0xJiZuO2krKyl7bj1uLm5leHRTaWJsaW5nO30KaWYobiYmbi5ub2Rl TmFtZT09J0JSJyl7YXRTdGFydD10cnVlO31lbHNle2F0RW5kPXRydWU7fX0KaWYo KHJhbmdlLmVuZE9mZnNldD09MCYmcmFuZ2UuZW5kQ29udGFpbmVyLm5vZGVWYWx1 ZT09bnVsbCl8fChyYW5nZS5lbmRDb250YWluZXIubm9kZU5hbWU9PScjdGV4dCcm JnJhbmdlLmVuZE9mZnNldD09cmFuZ2UuZW5kQ29udGFpbmVyLm5vZGVWYWx1ZS5s ZW5ndGgpfHwocmFuZ2UuZW5kQ29udGFpbmVyLm5vZGVOYW1lPT0nUCcmJnJhbmdl LmVuZENvbnRhaW5lci5ub2RlVmFsdWU9PW51bGwpKXthdEVuZD10cnVlO30KaWYo IWF0U3RhcnQpe3ByZT0iXG4iK29wdGlvbnMucHJlO30KaWYoIWF0RW5kKXtwb3N0 Kz0iXG4iO319CnZhciBpbnNlcnRUZXh0PSIiO2lmKG9wdGlvbnMuc3BsaXRsaW5l cyl7Zm9yKHZhciBqPTA7ajxzZWxUZXh0QXJyLmxlbmd0aDtqKyspe2luc2VydFRl eHQ9aW5zZXJ0VGV4dCtwcmUrc2VsVGV4dEFycltqXStwb3N0O2lmKGohPXNlbFRl eHRBcnIubGVuZ3RoLTEpe2luc2VydFRleHQrPSJcbiI7fX19ZWxzZXtpbnNlcnRU ZXh0PXByZStzZWxUZXh0K3Bvc3Q7fQp2YXIgaW5zZXJ0TGluZXM9aW5zZXJ0VGV4 dC5zcGxpdCgiXG4iKTtyYW5nZS5leHRyYWN0Q29udGVudHMoKTt2YXIgZmlyc3RO b2RlPW51bGwsbGFzdE5vZGU9bnVsbDt2YXIgc2VsU0M9bnVsbCxzZWxFQz1udWxs LHNlbFNPPW51bGwsc2VsRU89bnVsbCxvZmZzZXQ9MDtmb3IodmFyIGk9aW5zZXJ0 TGluZXMubGVuZ3RoLTE7aT49MDtpLS0pe2ZpcnN0Tm9kZT1jb250ZXh0LiRpZnJh bWVbMF0uY29udGVudFdpbmRvdy5kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShpbnNl cnRMaW5lc1tpXSk7cmFuZ2UuaW5zZXJ0Tm9kZShmaXJzdE5vZGUpO2xhc3ROb2Rl PWxhc3ROb2RlfHxmaXJzdE5vZGU7dmFyIG5ld09mZnNldD1vZmZzZXQraW5zZXJ0 TGluZXNbaV0ubGVuZ3RoO2lmKCFzZWxFQyYmcG9zdC5sZW5ndGg8PW5ld09mZnNl dCl7c2VsRUM9Zmlyc3ROb2RlO3NlbEVPPXNlbEVDLm5vZGVWYWx1ZS5sZW5ndGgt KHBvc3QubGVuZ3RoLW9mZnNldCk7fQppZihzZWxFQyYmIXNlbFNDJiZwcmUubGVu Z3RoPj1pbnNlcnRUZXh0Lmxlbmd0aC1uZXdPZmZzZXQpe3NlbFNDPWZpcnN0Tm9k ZTtzZWxTTz1wcmUubGVuZ3RoLShpbnNlcnRUZXh0Lmxlbmd0aC1uZXdPZmZzZXQp O30Kb2Zmc2V0PW5ld09mZnNldDtpZihpPjApe2ZpcnN0Tm9kZT1jb250ZXh0LiRp ZnJhbWVbMF0uY29udGVudFdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdi cicpO3JhbmdlLmluc2VydE5vZGUoZmlyc3ROb2RlKTtuZXdPZmZzZXQ9b2Zmc2V0 KzE7aWYoIXNlbEVDJiZwb3N0Lmxlbmd0aDw9bmV3T2Zmc2V0KXtzZWxFQz1maXJz dE5vZGU7c2VsRU89MS0ocG9zdC5sZW5ndGgtb2Zmc2V0KTt9CmlmKHNlbEVDJiYh c2VsU0MmJnByZS5sZW5ndGg+PWluc2VydFRleHQubGVuZ3RoLW5ld09mZnNldCl7 c2VsU0M9Zmlyc3ROb2RlO3NlbFNPPXByZS5sZW5ndGgtKGluc2VydFRleHQubGVu Z3RoLW5ld09mZnNldCk7fQpvZmZzZXQ9bmV3T2Zmc2V0O319CmlmKGZpcnN0Tm9k ZSl7Y29udGV4dC5mbi5zY3JvbGxUb1RvcCgkKGZpcnN0Tm9kZS5wYXJlbnROb2Rl KSk7fQppZihzZWxlY3RBZnRlcil7c2V0U2VsZWN0aW9uVG89e3N0YXJ0Q29udGFp bmVyOnNlbFNDLGVuZENvbnRhaW5lcjpzZWxFQyxzdGFydDpzZWxTTyxlbmQ6c2Vs RU99O31lbHNlIGlmKGxhc3ROb2RlKXtzZXRTZWxlY3Rpb25Ubz17c3RhcnRDb250 YWluZXI6bGFzdE5vZGUsZW5kQ29udGFpbmVyOmxhc3ROb2RlLHN0YXJ0Omxhc3RO b2RlLm5vZGVWYWx1ZS5sZW5ndGgsZW5kOmxhc3ROb2RlLm5vZGVWYWx1ZS5sZW5n dGh9O319ZWxzZSBpZihjb250ZXh0LiRpZnJhbWVbMF0uY29udGVudFdpbmRvdy5k b2N1bWVudC5zZWxlY3Rpb24pe2NvbnRleHQuJGlmcmFtZVswXS5jb250ZW50V2lu ZG93LmZvY3VzKCk7dmFyIHJhbmdlPWNvbnRleHQuJGlmcmFtZVswXS5jb250ZW50 V2luZG93LmRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpO2lmKG9wdGlv bnMub3dubGluZSYmcmFuZ2UubW92ZVN0YXJ0KXt2YXIgcmFuZ2UyPWNvbnRleHQu JGlmcmFtZVswXS5jb250ZW50V2luZG93LmRvY3VtZW50LnNlbGVjdGlvbi5jcmVh dGVSYW5nZSgpO3JhbmdlMi5jb2xsYXBzZSgpO3JhbmdlMi5tb3ZlU3RhcnQoJ2No YXJhY3RlcicsLTEpO2lmKHJhbmdlMi50ZXh0IT0iXHIiJiZyYW5nZTIudGV4dCE9 IlxuIiYmcmFuZ2UyLnRleHQhPSIiKXtwcmU9IlxuIitwcmU7fQp2YXIgcmFuZ2Uz PWNvbnRleHQuJGlmcmFtZVswXS5jb250ZW50V2luZG93LmRvY3VtZW50LnNlbGVj dGlvbi5jcmVhdGVSYW5nZSgpO3JhbmdlMy5jb2xsYXBzZShmYWxzZSk7cmFuZ2Uz Lm1vdmVFbmQoJ2NoYXJhY3RlcicsMSk7aWYocmFuZ2UzLnRleHQhPSJcciImJnJh bmdlMy50ZXh0IT0iXG4iJiZyYW5nZTMudGV4dCE9IiIpe3Bvc3QrPSJcbiI7fX0K aWYoY29sbGFwc2VUb0VuZCl7cmFuZ2UuY29sbGFwc2UoZmFsc2UpO30KdmFyIGlu c2VydFRleHQ9IiI7aWYob3B0aW9ucy5zcGxpdGxpbmVzKXtmb3IodmFyIGo9MDtq PHNlbFRleHRBcnIubGVuZ3RoO2orKyl7aW5zZXJ0VGV4dD1pbnNlcnRUZXh0K3By ZStzZWxUZXh0QXJyW2pdK3Bvc3Q7aWYoaiE9c2VsVGV4dEFyci5sZW5ndGgtMSl7 aW5zZXJ0VGV4dCs9IlxuIjt9fX1lbHNle2luc2VydFRleHQ9cHJlK3NlbFRleHQr cG9zdDt9CnJhbmdlLnBhc3RlSFRNTChpbnNlcnRUZXh0LnJlcGxhY2UoL1w8L2cs JyZsdDsnKS5yZXBsYWNlKC8+L2csJyZndDsnKS5yZXBsYWNlKC9ccj9cbi9nLCc8 YnIgLz4nKSk7aWYoc2VsZWN0QWZ0ZXIpe3JhbmdlLm1vdmVTdGFydCgnY2hhcmFj dGVyJywtcG9zdC5sZW5ndGgtc2VsVGV4dC5sZW5ndGgpO3JhbmdlLm1vdmVFbmQo J2NoYXJhY3RlcicsLXBvc3QubGVuZ3RoKTtyYW5nZS5zZWxlY3QoKTt9fQppZihz ZXRTZWxlY3Rpb25Ubyl7Y29udGV4dC5mbi5zZXRTZWxlY3Rpb24oc2V0U2VsZWN0 aW9uVG8pO30KJChjb250ZXh0LiRpZnJhbWVbMF0uY29udGVudFdpbmRvdy5kb2N1 bWVudCkudHJpZ2dlcignZW5jYXBzdWxhdGVTZWxlY3Rpb24nLFtwcmUsb3B0aW9u cy5wZXJpLHBvc3Qsb3B0aW9ucy5vd25saW5lLG9wdGlvbnMucmVwbGFjZV0pO3Jl dHVybiBjb250ZXh0LiR0ZXh0YXJlYTt9LCdnZXRDYXJldFBvc2l0aW9uJzpmdW5j dGlvbihvcHRpb25zKXt2YXIgc3RhcnRQb3M9bnVsbCxlbmRQb3M9bnVsbDtpZihj b250ZXh0LiRpZnJhbWVbMF0uY29udGVudFdpbmRvdy5nZXRTZWxlY3Rpb24pe3Zh ciBzZWxlY3Rpb249Y29udGV4dC4kaWZyYW1lWzBdLmNvbnRlbnRXaW5kb3cuZ2V0 U2VsZWN0aW9uKCk7aWYoc2VsZWN0aW9uLnJhbmdlQ291bnQ9PTApe3JldHVyblsw LDBdO30KdmFyIHNjPXNlbGVjdGlvbi5nZXRSYW5nZUF0KDApLnN0YXJ0Q29udGFp bmVyLGVjPXNlbGVjdGlvbi5nZXRSYW5nZUF0KDApLmVuZENvbnRhaW5lcjt2YXIg c289c2VsZWN0aW9uLmdldFJhbmdlQXQoMCkuc3RhcnRPZmZzZXQsZW89c2VsZWN0 aW9uLmdldFJhbmdlQXQoMCkuZW5kT2Zmc2V0O2lmKHNjLm5vZGVOYW1lPT0nQk9E WScpe3ZhciBuPXNjLmZpcnN0Q2hpbGQ7Zm9yKHZhciBpPTA7aTxzby0xJiZuO2kr Kyl7bj1uLm5leHRTaWJsaW5nO30Kc2M9bjtzbz0wO30KaWYoZWMubm9kZU5hbWU9 PSdCT0RZJyl7dmFyIG49ZWMuZmlyc3RDaGlsZDtmb3IodmFyIGk9MDtpPGVvLTEm Jm47aSsrKXtuPW4ubmV4dFNpYmxpbmc7fQplYz1uO2VvPTA7fQp3aGlsZShzYy5m aXJzdENoaWxkKXtzYz1zYy5maXJzdENoaWxkO30Kd2hpbGUoZWMuZmlyc3RDaGls ZCl7ZWM9ZWMuZmlyc3RDaGlsZDt9CmNvbnRleHQuZm4uZ2V0T2Zmc2V0KDApO3Zh ciBvO2ZvcihvIGluIGNvbnRleHQub2Zmc2V0cyl7aWYoc3RhcnRQb3M9PT1udWxs JiZjb250ZXh0Lm9mZnNldHNbb10ubm9kZT09c2Mpe3N0YXJ0UG9zPX5+bytzby1j b250ZXh0Lm9mZnNldHNbb10ub2Zmc2V0O30KaWYoc3RhcnRQb3MhPT1udWxsJiZj b250ZXh0Lm9mZnNldHNbb10ubm9kZT09ZWMpe2VuZFBvcz1+fm8rZW8tY29udGV4 dC5vZmZzZXRzW29dLm9mZnNldDticmVhazt9fX1lbHNlIGlmKGNvbnRleHQuJGlm cmFtZVswXS5jb250ZW50V2luZG93LmRvY3VtZW50LnNlbGVjdGlvbil7dmFyIGQ9 Y29udGV4dC4kaWZyYW1lWzBdLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7dmFyIHBv c3RGaW5pc2hlZD1mYWxzZTt2YXIgcGVyaUZpbmlzaGVkPWZhbHNlO3ZhciBwb3N0 RmluaXNoZWQ9ZmFsc2U7dmFyIHByZVRleHQscmF3UHJlVGV4dCxwZXJpVGV4dDt2 YXIgcmF3UGVyaVRleHQscG9zdFRleHQscmF3UG9zdFRleHQ7dHJ5e3ZhciBwZXJp UmFuZ2U9ZC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKS5kdXBsaWNhdGUoKTt2YXIg cHJlUmFuZ2U9ZC5ib2R5LmNyZWF0ZVRleHRSYW5nZSgpO3ByZVJhbmdlLnNldEVu ZFBvaW50KCJFbmRUb1N0YXJ0IixwZXJpUmFuZ2UpO3ZhciBwb3N0UmFuZ2U9ZC5i b2R5LmNyZWF0ZVRleHRSYW5nZSgpO3Bvc3RSYW5nZS5zZXRFbmRQb2ludCgiU3Rh cnRUb0VuZCIscGVyaVJhbmdlKTtwcmVUZXh0PXJhd1ByZVRleHQ9cHJlUmFuZ2Uu dGV4dDtwZXJpVGV4dD1yYXdQZXJpVGV4dD1wZXJpUmFuZ2UudGV4dDtwb3N0VGV4 dD1yYXdQb3N0VGV4dD1wb3N0UmFuZ2UudGV4dDtkb3tpZighcG9zdEZpbmlzaGVk KXtpZihwcmVSYW5nZS5jb21wYXJlRW5kUG9pbnRzKCJTdGFydFRvRW5kIixwcmVS YW5nZSk9PTApe3Bvc3RGaW5pc2hlZD10cnVlO31lbHNle3ByZVJhbmdlLm1vdmVF bmQoImNoYXJhY3RlciIsLTEpCmlmKHByZVJhbmdlLnRleHQ9PXByZVRleHQpe3Jh d1ByZVRleHQrPSJcclxuIjt9ZWxzZXtwb3N0RmluaXNoZWQ9dHJ1ZTt9fX0KaWYo IXBlcmlGaW5pc2hlZCl7aWYocGVyaVJhbmdlLmNvbXBhcmVFbmRQb2ludHMoIlN0 YXJ0VG9FbmQiLHBlcmlSYW5nZSk9PTApe3BlcmlGaW5pc2hlZD10cnVlO31lbHNl e3BlcmlSYW5nZS5tb3ZlRW5kKCJjaGFyYWN0ZXIiLC0xKQppZihwZXJpUmFuZ2Uu dGV4dD09cGVyaVRleHQpe3Jhd1BlcmlUZXh0Kz0iXHJcbiI7fWVsc2V7cGVyaUZp bmlzaGVkPXRydWU7fX19CmlmKCFwb3N0RmluaXNoZWQpe2lmKHBvc3RSYW5nZS5j b21wYXJlRW5kUG9pbnRzKCJTdGFydFRvRW5kIixwb3N0UmFuZ2UpPT0wKXtwb3N0 RmluaXNoZWQ9dHJ1ZTt9ZWxzZXtwb3N0UmFuZ2UubW92ZUVuZCgiY2hhcmFjdGVy IiwtMSkKaWYocG9zdFJhbmdlLnRleHQ9PXBvc3RUZXh0KXtyYXdQb3N0VGV4dCs9 IlxyXG4iO31lbHNle3Bvc3RGaW5pc2hlZD10cnVlO319fX13aGlsZSgoIXBvc3RG aW5pc2hlZHx8IXBlcmlGaW5pc2hlZHx8IXBvc3RGaW5pc2hlZCkpO3N0YXJ0UG9z PXJhd1ByZVRleHQucmVwbGFjZSgvXHJcbi9nLCJcbiIpLmxlbmd0aDtlbmRQb3M9 c3RhcnRQb3MrcmF3UGVyaVRleHQucmVwbGFjZSgvXHJcbi9nLCJcbiIpLmxlbmd0 aDt9Y2F0Y2goZSl7c3RhcnRQb3M9ZW5kUG9zPTA7fX0KcmV0dXJuW3N0YXJ0UG9z LGVuZFBvc107fSwnc2V0U2VsZWN0aW9uJzpmdW5jdGlvbihvcHRpb25zKXt2YXIg c2M9b3B0aW9ucy5zdGFydENvbnRhaW5lcixlYz1vcHRpb25zLmVuZENvbnRhaW5l cjtzYz1zYyYmc2MuanF1ZXJ5P3NjWzBdOnNjO2VjPWVjJiZlYy5qcXVlcnk/ZWNb MF06ZWM7aWYoY29udGV4dC4kaWZyYW1lWzBdLmNvbnRlbnRXaW5kb3cuZ2V0U2Vs ZWN0aW9uKXt2YXIgc3RhcnQ9b3B0aW9ucy5zdGFydCxlbmQ9b3B0aW9ucy5lbmQ7 aWYoIXNjfHwhZWMpe3ZhciBzPWNvbnRleHQuZm4uZ2V0T2Zmc2V0KHN0YXJ0KTt2 YXIgZT1jb250ZXh0LmZuLmdldE9mZnNldChlbmQpO3NjPXM/cy5ub2RlOm51bGw7 ZWM9ZT9lLm5vZGU6bnVsbDtzdGFydD1zP3Mub2Zmc2V0Om51bGw7ZW5kPWU/ZS5v ZmZzZXQ6bnVsbDtpZihzYy5ub2RlTmFtZT09JyN0ZXh0JyYmc3RhcnQ+c2Mubm9k ZVZhbHVlLmxlbmd0aCl7c3RhcnQ9c2Mubm9kZVZhbHVlLmxlbmd0aC0xO30KaWYo ZWMubm9kZU5hbWU9PScjdGV4dCcmJmVuZD5lYy5ub2RlVmFsdWUubGVuZ3RoKXtl bmQ9ZWMubm9kZVZhbHVlLmxlbmd0aC0xO319CmlmKCFzY3x8IWVjKXtyZXR1cm4g Y29udGV4dC4kdGV4dGFyZWE7fQp2YXIgc2VsPWNvbnRleHQuJGlmcmFtZVswXS5j b250ZW50V2luZG93LmdldFNlbGVjdGlvbigpO3doaWxlKHNjLmZpcnN0Q2hpbGQm JnNjLm5vZGVOYW1lIT0nI3RleHQnKXtzYz1zYy5maXJzdENoaWxkO30Kd2hpbGUo ZWMuZmlyc3RDaGlsZCYmZWMubm9kZU5hbWUhPScjdGV4dCcpe2VjPWVjLmZpcnN0 Q2hpbGQ7fQp2YXIgcmFuZ2U9Y29udGV4dC4kaWZyYW1lWzBdLmNvbnRlbnRXaW5k b3cuZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtyYW5nZS5zZXRTdGFydChzYyxzdGFy dCk7cmFuZ2Uuc2V0RW5kKGVjLGVuZCk7c2VsLnJlbW92ZUFsbFJhbmdlcygpO3Nl bC5hZGRSYW5nZShyYW5nZSk7Y29udGV4dC4kaWZyYW1lWzBdLmNvbnRlbnRXaW5k b3cuZm9jdXMoKTt9ZWxzZSBpZihjb250ZXh0LiRpZnJhbWVbMF0uY29udGVudFdp bmRvdy5kb2N1bWVudC5ib2R5LmNyZWF0ZVRleHRSYW5nZSl7dmFyIHJhbmdlPWNv bnRleHQuJGlmcmFtZVswXS5jb250ZW50V2luZG93LmRvY3VtZW50LmJvZHkuY3Jl YXRlVGV4dFJhbmdlKCk7aWYoc2Mpe3JhbmdlLm1vdmVUb0VsZW1lbnRUZXh0KHNj KTt9CnJhbmdlLmNvbGxhcHNlKCk7cmFuZ2UubW92ZUVuZCgnY2hhcmFjdGVyJyxv cHRpb25zLnN0YXJ0KTt2YXIgcmFuZ2UyPWNvbnRleHQuJGlmcmFtZVswXS5jb250 ZW50V2luZG93LmRvY3VtZW50LmJvZHkuY3JlYXRlVGV4dFJhbmdlKCk7aWYoZWMp e3JhbmdlMi5tb3ZlVG9FbGVtZW50VGV4dChlYyk7fQpyYW5nZTIuY29sbGFwc2Uo KTtyYW5nZTIubW92ZUVuZCgnY2hhcmFjdGVyJyxvcHRpb25zLmVuZCk7dmFyIG1h dGNoZXMsY291bnRlZD0wO3doaWxlKG1hdGNoZXM9cmFuZ2UuaHRtbFRleHQubWF0 Y2goL1w8XC9wXD4oXDxiclteXD5dKlw+KStcPHBcPi9naSkpe2lmKG1hdGNoZXMu bGVuZ3RoPD1jb3VudGVkKQpicmVhaztyYW5nZS5tb3ZlRW5kKCdjaGFyYWN0ZXIn LG1hdGNoZXMubGVuZ3RoKTtjb3VudGVkKz1tYXRjaGVzLmxlbmd0aDt9CnJhbmdl Mi5tb3ZlRW5kKCdjaGFyYWN0ZXInLGNvdW50ZWQpO3doaWxlKG1hdGNoZXM9cmFu Z2UyLmh0bWxUZXh0Lm1hdGNoKC9cPFwvcFw+KFw8YnJbXlw+XSpcPikrXDxwXD4v Z2kpKXtpZihtYXRjaGVzLmxlbmd0aDw9Y291bnRlZCkKYnJlYWs7cmFuZ2UyLm1v dmVFbmQoJ2NoYXJhY3RlcicsbWF0Y2hlcy5sZW5ndGgpO2NvdW50ZWQrPW1hdGNo ZXMubGVuZ3RoO30KcmFuZ2UyLnNldEVuZFBvaW50KCdTdGFydFRvRW5kJyxyYW5n ZSk7cmFuZ2UyLnNlbGVjdCgpO30KcmV0dXJuIGNvbnRleHQuJHRleHRhcmVhO30s J3Njcm9sbFRvQ2FyZXRQb3NpdGlvbic6ZnVuY3Rpb24ob3B0aW9ucyl7Y29udGV4 dC5mbi5zY3JvbGxUb1RvcChjb250ZXh0LmZuLmdldEVsZW1lbnRBdEN1cnNvcigp LHRydWUpO30sJ3Njcm9sbFRvVG9wJzpmdW5jdGlvbigkZWxlbWVudCxmb3JjZSl7 dmFyIGh0bWw9Y29udGV4dC4kY29udGVudC5jbG9zZXN0KCdodG1sJyksYm9keT1j b250ZXh0LiRjb250ZW50LmNsb3Nlc3QoJ2JvZHknKSxwYXJlbnRIdG1sPSQoJ2h0 bWwnKSxwYXJlbnRCb2R5PSQoJ2JvZHknKTt2YXIgeT0kZWxlbWVudC5vZmZzZXQo KS50b3A7aWYoISQuYnJvd3Nlci5tc2llJiYhJGVsZW1lbnQuaXMoJ2JvZHknKSl7 eT1wYXJlbnRIdG1sLnNjcm9sbFRvcCgpPjA/eStodG1sLnNjcm9sbFRvcCgpLXBh cmVudEh0bWwuc2Nyb2xsVG9wKCk6eTt5PXBhcmVudEJvZHkuc2Nyb2xsVG9wKCk+ MD95K2JvZHkuc2Nyb2xsVG9wKCktcGFyZW50Qm9keS5zY3JvbGxUb3AoKTp5O30K dmFyIHRvcEJvdW5kPWh0bWwuc2Nyb2xsVG9wKCk+Ym9keS5zY3JvbGxUb3AoKT9o dG1sLnNjcm9sbFRvcCgpOmJvZHkuc2Nyb2xsVG9wKCksYm90dG9tQm91bmQ9dG9w Qm91bmQrY29udGV4dC4kaWZyYW1lLmhlaWdodCgpO2lmKGZvcmNlfHx5PHRvcEJv dW5kfHx5PmJvdHRvbUJvdW5kKXtodG1sLnNjcm9sbFRvcCh5KTtib2R5LnNjcm9s bFRvcCh5KTt9CiRlbGVtZW50LnRyaWdnZXIoJ3Njcm9sbFRvVG9wJyk7fSwnc2F2 ZVN0dWZmRm9ySUUnOmZ1bmN0aW9uKCl7aWYoISQuYnJvd3Nlci5tc2llfHxjb250 ZXh0LiRpZnJhbWUpCnJldHVybjt2YXIgSUhhdGVJRT17J3Njcm9sbFRvcCc6Y29u dGV4dC4kdGV4dGFyZWEuc2Nyb2xsVG9wKCksJ3Bvcyc6Y29udGV4dC4kdGV4dGFy ZWEudGV4dFNlbGVjdGlvbignZ2V0Q2FyZXRQb3NpdGlvbicse3N0YXJ0QW5kRW5k OnRydWV9KX07Y29udGV4dC4kdGV4dGFyZWEuZGF0YSgnSUhhdGVJRScsSUhhdGVJ RSk7fSwncmVzdG9yZVN0dWZmRm9ySUUnOmZ1bmN0aW9uKCl7aWYoISQuYnJvd3Nl ci5tc2llfHxjb250ZXh0LiRpZnJhbWUpCnJldHVybjt2YXIgSUhhdGVJRT1jb250 ZXh0LiR0ZXh0YXJlYS5kYXRhKCdJSGF0ZUlFJyk7aWYoIUlIYXRlSUUpCnJldHVy bjtjb250ZXh0LiR0ZXh0YXJlYS5zY3JvbGxUb3AoSUhhdGVJRS5zY3JvbGxUb3Ap O2NvbnRleHQuJHRleHRhcmVhLnRleHRTZWxlY3Rpb24oJ3NldFNlbGVjdGlvbics e3N0YXJ0OklIYXRlSUUucG9zWzBdLGVuZDpJSGF0ZUlFLnBvc1sxXX0pO2NvbnRl eHQuJHRleHRhcmVhLmRhdGEoJ0lIYXRlSUUnLG51bGwpO319O2NvbnRleHQuJHRl eHRhcmVhLndyYXBBbGwoJCgnPGRpdj48L2Rpdj4nKS5hZGRDbGFzcygnd2lraUVk aXRvci11aScpKS53cmFwQWxsKCQoJzxkaXY+PC9kaXY+JykuYWRkQ2xhc3MoJ3dp a2lFZGl0b3ItdWktdmlldyB3aWtpRWRpdG9yLXVpLXZpZXctd2lraXRleHQnKSku d3JhcEFsbCgkKCc8ZGl2PjwvZGl2PicpLmFkZENsYXNzKCd3aWtpRWRpdG9yLXVp LWxlZnQnKSkud3JhcEFsbCgkKCc8ZGl2PjwvZGl2PicpLmFkZENsYXNzKCd3aWtp RWRpdG9yLXVpLWJvdHRvbScpKS53cmFwQWxsKCQoJzxkaXY+PC9kaXY+JykuYWRk Q2xhc3MoJ3dpa2lFZGl0b3ItdWktdGV4dCcpKTtjb250ZXh0LiR1aT1jb250ZXh0 LiR0ZXh0YXJlYS5wYXJlbnQoKS5wYXJlbnQoKS5wYXJlbnQoKS5wYXJlbnQoKS5w YXJlbnQoKTtjb250ZXh0LiR3aWtpdGV4dD1jb250ZXh0LiR0ZXh0YXJlYS5wYXJl bnQoKS5wYXJlbnQoKS5wYXJlbnQoKS5wYXJlbnQoKTtjb250ZXh0LiR3aWtpdGV4 dC5iZWZvcmUoJCgnPGRpdj48L2Rpdj4nKS5hZGRDbGFzcygnd2lraUVkaXRvci11 aS1jb250cm9scycpLmFwcGVuZCgkKCc8ZGl2PjwvZGl2PicpLmFkZENsYXNzKCd3 aWtpRWRpdG9yLXVpLXRhYnMnKS5oaWRlKCkpLmFwcGVuZCgkKCc8ZGl2PjwvZGl2 PicpLmFkZENsYXNzKCd3aWtpRWRpdG9yLXVpLWJ1dHRvbnMnKSkpLmJlZm9yZSgk KCc8ZGl2IHN0eWxlPSJjbGVhcjpib3RoOyI+PC9kaXY+JykpO2NvbnRleHQuJGNv bnRyb2xzPWNvbnRleHQuJHVpLmZpbmQoJy53aWtpRWRpdG9yLXVpLWJ1dHRvbnMn KS5oaWRlKCk7Y29udGV4dC4kYnV0dG9ucz1jb250ZXh0LiR1aS5maW5kKCcud2lr aUVkaXRvci11aS1idXR0b25zJyk7Y29udGV4dC4kdGFicz1jb250ZXh0LiR1aS5m aW5kKCcud2lraUVkaXRvci11aS10YWJzJyk7Y29udGV4dC4kdWkuYWZ0ZXIoJCgn PGRpdiBzdHlsZT0iY2xlYXI6Ym90aDsiPjwvZGl2PicpKTtjb250ZXh0LiR3aWtp dGV4dC5hcHBlbmQoJCgnPGRpdj48L2Rpdj4nKS5hZGRDbGFzcygnd2lraUVkaXRv ci11aS1yaWdodCcpKTtjb250ZXh0LiR3aWtpdGV4dC5maW5kKCcud2lraUVkaXRv ci11aS1sZWZ0JykucHJlcGVuZCgkKCc8ZGl2PjwvZGl2PicpLmFkZENsYXNzKCd3 aWtpRWRpdG9yLXVpLXRvcCcpKTtjb250ZXh0LnZpZXc9J3dpa2l0ZXh0JzskKHdp bmRvdykucmVzaXplKGZ1bmN0aW9uKGV2ZW50KXtjb250ZXh0LmZuLnRyaWdnZXIo J3Jlc2l6ZScsZXZlbnQpO30pO30KdmFyIGFyZ3M9JC5tYWtlQXJyYXkoYXJndW1l bnRzKTtpZih0eXBlb2YgY29udGV4dC4kaWZyYW1lPT09J3VuZGVmaW5lZCcmJmFy Z3NbMF09PSdhZGRNb2R1bGUnJiZ0eXBlb2YgYXJnc1sxXSE9J3VuZGVmaW5lZCcp e3ZhciBtb2R1bGVzPWFyZ3NbMV07aWYodHlwZW9mIG1vZHVsZXMhPSJvYmplY3Qi KXttb2R1bGVzPXt9O21vZHVsZXNbYXJnc1sxXV09Jyc7fQpmb3IobW9kdWxlIGlu IG1vZHVsZXMpe2lmKG1vZHVsZSBpbiAkLndpa2lFZGl0b3IubW9kdWxlcyYmJC53 aWtpRWRpdG9yLmlzU3VwcG9ydGVkKCQud2lraUVkaXRvci5tb2R1bGVzW21vZHVs ZV0pJiYkLndpa2lFZGl0b3IuaXNSZXF1aXJlZCgkLndpa2lFZGl0b3IubW9kdWxl c1ttb2R1bGVdLCdpZnJhbWUnKSl7Y29udGV4dC5mbi5zZXR1cElmcmFtZSgpO2Jy ZWFrO319fQppZihhcmdzLmxlbmd0aD4wKXt2YXIgY2FsbD1hcmdzLnNoaWZ0KCk7 aWYoY2FsbCBpbiBjb250ZXh0LmFwaSl7Y29udGV4dC5hcGlbY2FsbF0oY29udGV4 dCx0eXBlb2YgYXJnc1swXT09J3VuZGVmaW5lZCc/e306YXJnc1swXSk7fX0KcmV0 dXJuICQodGhpcykuZGF0YSgnd2lraUVkaXRvci1jb250ZXh0Jyxjb250ZXh0KTt9 O30pKGpRdWVyeSk7UmVnRXhwLmVzY2FwZT1mdW5jdGlvbihzKXtyZXR1cm4gcy5y ZXBsYWNlKC8oWy4qKz9eJHt9KCl8XC9cXFtcXV0pL2csJ1xcJDEnKTt9OyhmdW5j dGlvbigkKXskLndpa2lFZGl0b3IubW9kdWxlcy5kaWFsb2dzPXsnYnJvd3NlcnMn OnsnbHRyJzp7J21zaWUnOltbJz49Jyw3XV0sJ2ZpcmVmb3gnOltbJz49JywyXSxb JyE9JywnMi4wJ10sWychPScsJzIuMC4wLjEnXSxbJyE9JywnMi4wLjAuMiddLFsn IT0nLCcyLjAuMC4zJ10sWychPScsJzIuMC4wLjQnXV0sJ29wZXJhJzpbWyc+PScs OS42XV0sJ3NhZmFyaSc6W1snPj0nLDNdXSwnY2hyb21lJzpbWyc+PScsM11dfSwn cnRsJzp7J21zaWUnOltbJz49Jyw3XV0sJ2ZpcmVmb3gnOltbJz49JywyXSxbJyE9 JywnMi4wJ10sWychPScsJzIuMC4wLjEnXSxbJyE9JywnMi4wLjAuMiddLFsnIT0n LCcyLjAuMC4zJ10sWychPScsJzIuMC4wLjQnXV0sJ29wZXJhJzpbWyc+PScsOS42 XV0sJ3NhZmFyaSc6W1snPj0nLDNdXSwnY2hyb21lJzpbWyc+PScsM11dfX0sYXBp OnthZGREaWFsb2c6ZnVuY3Rpb24oY29udGV4dCxkYXRhKXskLndpa2lFZGl0b3Iu bW9kdWxlcy5kaWFsb2dzLmZuLmNyZWF0ZShjb250ZXh0LGRhdGEpfSxvcGVuRGlh bG9nOmZ1bmN0aW9uKGNvbnRleHQsbW9kdWxlKXtpZihtb2R1bGUgaW4gJC53aWtp RWRpdG9yLm1vZHVsZXMuZGlhbG9ncy5tb2R1bGVzKXt2YXIgbW9kPSQud2lraUVk aXRvci5tb2R1bGVzLmRpYWxvZ3MubW9kdWxlc1ttb2R1bGVdO3ZhciAkZGlhbG9n PSQoJyMnK21vZC5pZCk7aWYoJGRpYWxvZy5sZW5ndGg9PTApeyQud2lraUVkaXRv ci5tb2R1bGVzLmRpYWxvZ3MuZm4ucmVhbGx5Q3JlYXRlKGNvbnRleHQsbW9kKTsk ZGlhbG9nPSQoJyMnK21vZC5pZCk7fQokZGlhbG9nLmRpYWxvZygnb3BlbicpO319 LGNsb3NlRGlhbG9nOmZ1bmN0aW9uKGNvbnRleHQsbW9kdWxlKXtpZihtb2R1bGUg aW4gJC53aWtpRWRpdG9yLm1vZHVsZXMuZGlhbG9ncy5tb2R1bGVzKXskKCcjJysk Lndpa2lFZGl0b3IubW9kdWxlcy5kaWFsb2dzLm1vZHVsZXNbbW9kdWxlXS5pZCku ZGlhbG9nKCdjbG9zZScpO319fSxmbjp7Y3JlYXRlOmZ1bmN0aW9uKGNvbnRleHQs Y29uZmlnKXtmb3IobW9kIGluIGNvbmZpZyl7dmFyIG1vZHVsZT1jb25maWdbbW9k XTt2YXIgZmlsdGVyZWQ9ZmFsc2U7aWYodHlwZW9mIG1vZHVsZS5maWx0ZXJzIT0n dW5kZWZpbmVkJyl7Zm9yKHZhciBpPTA7aTxtb2R1bGUuZmlsdGVycy5sZW5ndGg7 aSsrKXtpZigkKG1vZHVsZS5maWx0ZXJzW2ldKS5sZW5ndGg9PTApe2ZpbHRlcmVk PXRydWU7YnJlYWs7fX19CmlmKCFmaWx0ZXJlZCYmJC53aWtpRWRpdG9yLmlzU3Vw cG9ydGVkKG1vZHVsZSkmJiQoJyMnK21vZHVsZS5pZCkuc2l6ZSgpPT0wKXskLndp a2lFZGl0b3IubW9kdWxlcy5kaWFsb2dzLm1vZHVsZXNbbW9kXT1tb2R1bGU7aWYo dHlwZW9mIGNvbnRleHQuJGlmcmFtZT09J3VuZGVmaW5lZCcmJiQud2lraUVkaXRv ci5pc1JlcXVpcmVkKG1vZHVsZSwnaWZyYW1lJykpe2NvbnRleHQuZm4uc2V0dXBJ ZnJhbWUoKTt9CmNvbnRleHQuJHRleHRhcmVhLnRyaWdnZXIoJ3dpa2lFZGl0b3It ZGlhbG9ncy1zZXR1cC0nK21vZCk7fX19LHJlYWxseUNyZWF0ZTpmdW5jdGlvbihj b250ZXh0LG1vZHVsZSl7bXcudXNhYmlsaXR5LmxvYWQoWyckai51aScsJyRqLnVp LmRpYWxvZycsJyRqLnVpLmRyYWdnYWJsZScsJyRqLnVpLnJlc2l6YWJsZSddLGZ1 bmN0aW9uKCl7dmFyIGNvbmZpZ3VyYXRpb249bW9kdWxlLmRpYWxvZztjb25maWd1 cmF0aW9uLmJnaWZyYW1lPXRydWU7Y29uZmlndXJhdGlvbi5hdXRvT3Blbj1mYWxz ZTtjb25maWd1cmF0aW9uLm1vZGFsPXRydWU7Y29uZmlndXJhdGlvbi50aXRsZT0k Lndpa2lFZGl0b3IuYXV0b01zZyhtb2R1bGUsJ3RpdGxlJyk7Y29uZmlndXJhdGlv bi5uZXdCdXR0b25zPXt9O2Zvcihtc2cgaW4gY29uZmlndXJhdGlvbi5idXR0b25z KQpjb25maWd1cmF0aW9uLm5ld0J1dHRvbnNbbXcudXNhYmlsaXR5LmdldE1zZyht c2cpXT1jb25maWd1cmF0aW9uLmJ1dHRvbnNbbXNnXTtjb25maWd1cmF0aW9uLmJ1 dHRvbnM9Y29uZmlndXJhdGlvbi5uZXdCdXR0b25zO3ZhciBkaWFsb2dEaXY9JCgn PGRpdiAvPicpLmF0dHIoJ2lkJyxtb2R1bGUuaWQpLmh0bWwobW9kdWxlLmh0bWwp LmRhdGEoJ2NvbnRleHQnLGNvbnRleHQpLmFwcGVuZFRvKCQoJ2JvZHknKSkuZWFj aChtb2R1bGUuaW5pdCkuZGlhbG9nKGNvbmZpZ3VyYXRpb24pOyQud2lraUVkaXRv ci5tb2R1bGVzLmRpYWxvZ3MuZm4uc2V0VGFiaW5kZXhlcyhkaWFsb2dEaXYuY2xv c2VzdCgnLnVpLWRpYWxvZycpLmZpbmQoJ2J1dHRvbicpLm5vdCgnW3RhYmluZGV4 XScpKTtpZighKCdyZXNpemVtZSdpbiBtb2R1bGUpfHxtb2R1bGUucmVzaXplbWUp e2RpYWxvZ0Rpdi5iaW5kKCdkaWFsb2dvcGVuJywkLndpa2lFZGl0b3IubW9kdWxl cy5kaWFsb2dzLmZuLnJlc2l6ZSkuZmluZCgnLnVpLXRhYnMnKS5iaW5kKCd0YWJz c2hvdycsZnVuY3Rpb24oKXskKHRoaXMpLmNsb3Nlc3QoJy51aS1kaWFsb2ctY29u dGVudCcpLmVhY2goJC53aWtpRWRpdG9yLm1vZHVsZXMuZGlhbG9ncy5mbi5yZXNp emUpO30pO30KZGlhbG9nRGl2LmJpbmQoJ2RpYWxvZ2Nsb3NlJyxmdW5jdGlvbigp e2NvbnRleHQuZm4ucmVzdG9yZVNlbGVjdGlvbigpO30pO2NvbnRleHQuJHRleHRh cmVhLnRyaWdnZXIoJ3dpa2lFZGl0b3ItZGlhbG9ncy1sb2FkZWQtJyttb2QpO30p O30scmVzaXplOmZ1bmN0aW9uKCl7dmFyIHdyYXBwZXI9JCh0aGlzKS5jbG9zZXN0 KCcudWktZGlhbG9nJyk7dmFyIG9sZFdpZHRoPXdyYXBwZXIud2lkdGgoKTt2YXIg b2xkSGlkZGVuPSQodGhpcykuZmluZCgnKicpLm5vdCgnOnZpc2libGUnKTtvbGRI aWRkZW4uZWFjaChmdW5jdGlvbigpeyQodGhpcykuZGF0YSgnb2xkc3R5bGUnLCQo dGhpcykuYXR0cignc3R5bGUnKSk7fSk7b2xkSGlkZGVuLnNob3coKTt2YXIgb2xk V1M9JCh0aGlzKS5jc3MoJ3doaXRlLXNwYWNlJyk7JCh0aGlzKS5jc3MoJ3doaXRl LXNwYWNlJywnbm93cmFwJyk7aWYod3JhcHBlci53aWR0aCgpPD0kKHRoaXMpLmdl dCgwKS5zY3JvbGxXaWR0aCl7dmFyIHRoaXNXaWR0aD0kKHRoaXMpLmRhdGEoJ3Ro aXNXaWR0aCcpPyQodGhpcykuZGF0YSgndGhpc1dpZHRoJyk6MDt0aGlzV2lkdGg9 TWF0aC5tYXgoJCh0aGlzKS5nZXQoMCkuc2Nyb2xsV2lkdGgsdGhpc1dpZHRoKTsk KHRoaXMpLndpZHRoKHRoaXNXaWR0aCk7JCh0aGlzKS5kYXRhKCd0aGlzV2lkdGgn LHRoaXNXaWR0aCk7dmFyIHdyYXBwZXJXaWR0aD0kKHRoaXMpLmRhdGEoJ3dyYXBw ZXJXaWR0aCcpPyQodGhpcykuZGF0YSgnd3JhcHBlcldpZHRoJyk6MDt3cmFwcGVy V2lkdGg9TWF0aC5tYXgod3JhcHBlci5nZXQoMCkuc2Nyb2xsV2lkdGgsd3JhcHBl cldpZHRoKTt3cmFwcGVyLndpZHRoKHdyYXBwZXJXaWR0aCk7JCh0aGlzKS5kYXRh KCd3cmFwcGVyV2lkdGgnLHdyYXBwZXJXaWR0aCk7JCh0aGlzKS5kaWFsb2coeyd3 aWR0aCc6d3JhcHBlci53aWR0aCgpfSk7d3JhcHBlci5jc3MoJ2xlZnQnLHBhcnNl SW50KHdyYXBwZXIuY3NzKCdsZWZ0JykpLSh3cmFwcGVyLndpZHRoKCktb2xkV2lk dGgpLzIpO30KJCh0aGlzKS5jc3MoJ3doaXRlLXNwYWNlJyxvbGRXUyk7b2xkSGlk ZGVuLmVhY2goZnVuY3Rpb24oKXskKHRoaXMpLmF0dHIoJ3N0eWxlJywkKHRoaXMp LmRhdGEoJ29sZHN0eWxlJykpO30pO30sc2V0VGFiaW5kZXhlczpmdW5jdGlvbigk ZWxlbWVudHMpe3ZhciBtYXhUST0wOyRqKCdbdGFiaW5kZXhdJykuZWFjaChmdW5j dGlvbigpe3ZhciB0aT1wYXJzZUludCgkaih0aGlzKS5hdHRyKCd0YWJpbmRleCcp KTtpZih0aT5tYXhUSSkKbWF4VEk9dGk7fSk7dmFyIHRhYkluZGV4PW1heFRJKzE7 JGVsZW1lbnRzLmVhY2goZnVuY3Rpb24oKXskaih0aGlzKS5hdHRyKCd0YWJpbmRl eCcsdGFiSW5kZXgrKyk7fSk7fX0sbW9kdWxlczp7fSxxdWlja0RpYWxvZzpmdW5j dGlvbihib2R5LHNldHRpbmdzKXskKCc8ZGl2IC8+JykudGV4dChib2R5KS5hcHBl bmRUbygkKCdib2R5JykpLmRpYWxvZygkLmV4dGVuZCh7YmdpZnJhbWU6dHJ1ZSxt b2RhbDp0cnVlfSxzZXR0aW5ncykpLmRpYWxvZygnb3BlbicpO319O30pKGpRdWVy eSk7KGZ1bmN0aW9uKCQpeyQud2lraUVkaXRvci5tb2R1bGVzLmhpZ2hsaWdodD17 J3JlcSc6WydpZnJhbWUnXSwnbmFtZSc6J2hpZ2hsaWdodCcsJ2NmZyc6eydzdHls ZVZlcnNpb24nOjN9LCdldnQnOnsnZGVsYXllZENoYW5nZSc6ZnVuY3Rpb24oY29u dGV4dCxldmVudCl7aWYoZXZlbnQuZGF0YS5zY29wZT09J3JlYWxjaGFuZ2UnKXsk Lndpa2lFZGl0b3IubW9kdWxlcy5oaWdobGlnaHQuZm4uc2Nhbihjb250ZXh0KTsk Lndpa2lFZGl0b3IubW9kdWxlcy5oaWdobGlnaHQuZm4ubWFyayhjb250ZXh0LGV2 ZW50LmRhdGEuc2NvcGUpO319LCdyZWFkeSc6ZnVuY3Rpb24oY29udGV4dCxldmVu dCl7JC53aWtpRWRpdG9yLm1vZHVsZXMuaGlnaGxpZ2h0LmZuLnNjYW4oY29udGV4 dCk7JC53aWtpRWRpdG9yLm1vZHVsZXMuaGlnaGxpZ2h0LmZuLm1hcmsoY29udGV4 dCwncmVhZHknKTt9fSwnZm4nOnsnY3JlYXRlJzpmdW5jdGlvbihjb250ZXh0LGNv bmZpZyl7Y29udGV4dC5tb2R1bGVzLmhpZ2hsaWdodC5tYXJrZXJzU3RyPScnO30s J3NjYW4nOmZ1bmN0aW9uKGNvbnRleHQsZGl2aXNpb24pe3ZhciB0b2tlbkFycmF5 PWNvbnRleHQubW9kdWxlcy5oaWdobGlnaHQudG9rZW5BcnJheT1bXTt2YXIgdGV4 dD1jb250ZXh0LmZuLmdldENvbnRlbnRzKCk7Zm9yKHZhciBtb2R1bGUgaW4gY29u dGV4dC5tb2R1bGVzKXtpZihtb2R1bGUgaW4gJC53aWtpRWRpdG9yLm1vZHVsZXMm JidleHAnaW4gJC53aWtpRWRpdG9yLm1vZHVsZXNbbW9kdWxlXSl7Zm9yKHZhciBl eHAgaW4gJC53aWtpRWRpdG9yLm1vZHVsZXNbbW9kdWxlXS5leHApe3ZhciByZWdl eD0kLndpa2lFZGl0b3IubW9kdWxlc1ttb2R1bGVdLmV4cFtleHBdLnJlZ2V4O3Zh ciBsYWJlbD0kLndpa2lFZGl0b3IubW9kdWxlc1ttb2R1bGVdLmV4cFtleHBdLmxh YmVsO3ZhciBtYXJrQWZ0ZXI9JC53aWtpRWRpdG9yLm1vZHVsZXNbbW9kdWxlXS5l eHBbZXhwXS5tYXJrQWZ0ZXJ8fGZhbHNlO3ZhciBvZmZzZXQ9MCxsZWZ0LHJpZ2h0 LG1hdGNoO3doaWxlKChtYXRjaD10ZXh0LnN1YnN0cihvZmZzZXQpLm1hdGNoKHJl Z2V4KSkhPW51bGwpe3JpZ2h0PShsZWZ0PW9mZnNldCttYXRjaC5pbmRleCkrbWF0 Y2hbMF0ubGVuZ3RoO3Rva2VuQXJyYXlbdG9rZW5BcnJheS5sZW5ndGhdPXsnb2Zm c2V0JzptYXJrQWZ0ZXI/cmlnaHQ6bGVmdCwnbGFiZWwnOmxhYmVsLCd0b2tlblN0 YXJ0JzpsZWZ0LCdtYXRjaCc6bWF0Y2h9O29mZnNldD1yaWdodDt9fX19CnRva2Vu QXJyYXkuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBhLnRva2VuU3RhcnQtYi50 b2tlblN0YXJ0O30pO2NvbnRleHQuZm4udHJpZ2dlcignc2NhbicpO30sJ21hcmsn OmZ1bmN0aW9uKGNvbnRleHQsZGl2aXNpb24sdG9rZW5zKXt2YXIgbWFya2Vycz1b XTtpZihjb250ZXh0Lm1vZHVsZXMuaGlnaGxpZ2h0Lm1hcmtlcnMmJmRpdmlzaW9u IT0nJyl7Zm9yKHZhciBpPTA7aTxjb250ZXh0Lm1vZHVsZXMuaGlnaGxpZ2h0Lm1h cmtlcnMubGVuZ3RoO2krKyl7aWYoY29udGV4dC5tb2R1bGVzLmhpZ2hsaWdodC5t YXJrZXJzW2ldLnNraXBEaXZpc2lvbj09ZGl2aXNpb24pe21hcmtlcnMucHVzaChj b250ZXh0Lm1vZHVsZXMuaGlnaGxpZ2h0Lm1hcmtlcnNbaV0pO319fQpjb250ZXh0 Lm1vZHVsZXMuaGlnaGxpZ2h0Lm1hcmtlcnM9bWFya2Vycztjb250ZXh0LmZuLnRy aWdnZXIoJ21hcmsnKTttYXJrZXJzLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4g YS5zdGFydC1iLnN0YXJ0fHxhLmVuZC1iLmVuZDt9KTt2YXIgbWFya2Vyc1N0cj0n Jztmb3IodmFyIGk9MDtpPG1hcmtlcnMubGVuZ3RoO2krKyl7bWFya2Vyc1N0cis9 bWFya2Vyc1tpXS5zdGFydCsnLCcrbWFya2Vyc1tpXS5lbmQrJywnK21hcmtlcnNb aV0udHlwZSsnLCc7fQppZihjb250ZXh0Lm1vZHVsZXMuaGlnaGxpZ2h0Lm1hcmtl cnNTdHI9PW1hcmtlcnNTdHIpe3JldHVybjt9CmNvbnRleHQubW9kdWxlcy5oaWdo bGlnaHQubWFya2Vyc1N0cj1tYXJrZXJzU3RyO3ZhciB2aXNpdGVkPVtdLHY9MDtm b3IodmFyIGk9MDtpPG1hcmtlcnMubGVuZ3RoO2krKyl7aWYodHlwZW9mIG1hcmtl cnNbaV0uc2tpcERpdmlzaW9uIT09J3VuZGVmaW5lZCcmJihkaXZpc2lvbj09bWFy a2Vyc1tpXS5za2lwRGl2aXNpb24pKXtjb250aW51ZTt9CnZhciBzdGFydD1tYXJr ZXJzW2ldLnN0YXJ0O3ZhciBzPWNvbnRleHQuZm4uZ2V0T2Zmc2V0KHN0YXJ0KTtp Zighcyl7Y29udGludWU7fQp2YXIgc3RhcnROb2RlPXMubm9kZTt3aGlsZShzdGFy dE5vZGUubm9kZU5hbWU9PSdCUid8fHMub2Zmc2V0PT1zdGFydE5vZGUubm9kZVZh bHVlLmxlbmd0aCl7c3RhcnQrKztzPWNvbnRleHQuZm4uZ2V0T2Zmc2V0KHN0YXJ0 KTtzdGFydE5vZGU9cy5ub2RlO30KaWYocy5vZmZzZXQ+MCYmcy5ub2RlLm5vZGVO YW1lPT0nI3RleHQnKXt2YXIgbmV3U3RhcnROb2RlPXN0YXJ0Tm9kZS5zcGxpdFRl eHQocy5vZmZzZXQ8cy5ub2RlLm5vZGVWYWx1ZS5sZW5ndGg/cy5vZmZzZXQ6cy5u b2RlLm5vZGVWYWx1ZS5sZW5ndGgtMSk7dmFyIG9sZFN0YXJ0Tm9kZT1zdGFydE5v ZGU7c3RhcnROb2RlPW5ld1N0YXJ0Tm9kZTt2YXIgc3VidHJhY3RlZD1zLm9mZnNl dDt2YXIgb2xkTGVuZ3RoPXMubGVuZ3RoO3ZhciBqLG87Zm9yKGo9c3RhcnQtc3Vi dHJhY3RlZDtqPHN0YXJ0O2orKyl7aWYoaiBpbiBjb250ZXh0Lm9mZnNldHMpe289 Y29udGV4dC5vZmZzZXRzW2pdO28ubm9kZT1vbGRTdGFydE5vZGU7by5sZW5ndGg9 c3VidHJhY3RlZDt9fQpmb3Ioaj1zdGFydDtqPHN0YXJ0LXN1YnRyYWN0ZWQrb2xk TGVuZ3RoO2orKyl7aWYoaiBpbiBjb250ZXh0Lm9mZnNldHMpe289Y29udGV4dC5v ZmZzZXRzW2pdO28ubm9kZT1uZXdTdGFydE5vZGU7by5vZmZzZXQtPXN1YnRyYWN0 ZWQ7by5sZW5ndGgtPXN1YnRyYWN0ZWQ7by5sYXN0VGV4dE5vZGU9b2xkU3RhcnRO b2RlO319fQp2YXIgZW5kPW1hcmtlcnNbaV0uZW5kO3ZhciBlPWNvbnRleHQuZm4u Z2V0T2Zmc2V0KGVuZC0xKTtpZighZSl7Y29udGludWU7fQp2YXIgZW5kTm9kZT1l Lm5vZGU7aWYoZS5vZmZzZXQrMTxlLmxlbmd0aC0xJiZlbmROb2RlLm5vZGVOYW1l PT0nI3RleHQnKXt2YXIgb2xkRW5kTm9kZT1lbmROb2RlO3ZhciBuZXdFbmROb2Rl PWVuZE5vZGUuc3BsaXRUZXh0KGUub2Zmc2V0KzEpO3ZhciBzdWJ0cmFjdGVkPWUu b2Zmc2V0KzE7dmFyIG9sZExlbmd0aD1lLmxlbmd0aDt2YXIgaixvO2ZvcihqPWVu ZC1zdWJ0cmFjdGVkO2o8ZW5kO2orKyl7aWYoaiBpbiBjb250ZXh0Lm9mZnNldHMp e289Y29udGV4dC5vZmZzZXRzW2pdO28ubm9kZT1vbGRFbmROb2RlO28ubGVuZ3Ro PXN1YnRyYWN0ZWQ7fX0KY29udGV4dC5vZmZzZXRzW2VuZF09eydub2RlJzpuZXdF bmROb2RlLCdvZmZzZXQnOjAsJ2xlbmd0aCc6b2xkTGVuZ3RoLXN1YnRyYWN0ZWQs J2xhc3RUZXh0Tm9kZSc6b2xkRW5kTm9kZX07Zm9yKGo9ZW5kKzE7ajxlbmQtc3Vi dHJhY3RlZCtvbGRMZW5ndGg7aisrKXtpZihqIGluIGNvbnRleHQub2Zmc2V0cyl7 bz1jb250ZXh0Lm9mZnNldHNbal07by5ub2RlPW5ld0VuZE5vZGU7by5vZmZzZXQt PXN1YnRyYWN0ZWQ7by5sZW5ndGgtPXN1YnRyYWN0ZWQ7by5sYXN0VGV4dE5vZGU9 b2xkRW5kTm9kZTt9fX0KaWYoZW5kTm9kZS5ub2RlTmFtZT09J0JSJyl7ZW5kTm9k ZT1lLmxhc3RUZXh0Tm9kZTt9CmlmKHN0YXJ0Tm9kZS5wYXJlbnROb2RlIT1lbmRO b2RlLnBhcmVudE5vZGUpe3ZhciBzdGFydFA9JChzdGFydE5vZGUpLmNsb3Nlc3Qo J3AnKS5nZXQoMCk7dmFyIHQ9bmV3IGNvbnRleHQuZm4ucmF3VHJhdmVyc2VyKHN0 YXJ0Tm9kZSxzdGFydFAsY29udGV4dC4kY29udGVudC5nZXQoMCksZmFsc2UpO3Zh ciBhZnRlclN0YXJ0PXN0YXJ0Tm9kZS5uZXh0U2libGluZzt2YXIgbGFzdFA9c3Rh cnRQO3ZhciBuZXh0VD10Lm5leHQoKTt3aGlsZShuZXh0VCYmdC5ub2RlIT1lbmRO b2RlKXt0PW5leHRUO25leHRUPXQubmV4dCgpO2lmKHQubm9kZS5wYXJlbnROb2Rl IT1zdGFydE5vZGUucGFyZW50Tm9kZSl7dmFyIG9sZFBhcmVudD10Lm5vZGUucGFy ZW50Tm9kZTtpZihhZnRlclN0YXJ0KXtpZihsYXN0UCE9dC5pblApe3N0YXJ0Tm9k ZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShzdGFydE5vZGUub3duZXJEb2N1bWVu dC5jcmVhdGVFbGVtZW50KCdicicpLGFmdGVyU3RhcnQpO30KaWYoIShvbGRQYXJl bnQuY2hpbGROb2Rlcy5sZW5ndGg9PTEmJm9sZFBhcmVudC5maXJzdENoaWxkLm5v ZGVOYW1lPT0nQlInKSl7d2hpbGUob2xkUGFyZW50LmZpcnN0Q2hpbGQpe3N0YXJ0 Tm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShvbGRQYXJlbnQuZmlyc3RDaGls ZCxhZnRlclN0YXJ0KTt9fX1lbHNle2lmKGxhc3RQIT10LmluUCl7c3RhcnROb2Rl LnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoc3RhcnROb2RlLm93bmVyRG9jdW1lbnQu Y3JlYXRlRWxlbWVudCgnYnInKSk7fQppZighKG9sZFBhcmVudC5jaGlsZE5vZGVz Lmxlbmd0aD09MSYmb2xkUGFyZW50LmZpcnN0Q2hpbGQubm9kZU5hbWU9PSdCUicp KXt3aGlsZShvbGRQYXJlbnQuZmlyc3RDaGlsZCl7c3RhcnROb2RlLnBhcmVudE5v ZGUuYXBwZW5kQ2hpbGQob2xkUGFyZW50LmZpcnN0Q2hpbGQpO319fQpvbGRQYXJl bnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvbGRQYXJlbnQpO30KbGFzdFA9dC5p blA7fX0KdmFyIGNhMT1zdGFydE5vZGUsY2EyPWVuZE5vZGU7aWYoY2ExJiZjYTIm JmNhMS5wYXJlbnROb2RlKXt2YXIgYW5jaG9yPW1hcmtlcnNbaV0uZ2V0QW5jaG9y KGNhMSxjYTIpO2lmKCFhbmNob3Ipe3ZhciBjb21tb25BbmNlc3Rvcj1jYTEucGFy ZW50Tm9kZTtpZihtYXJrZXJzW2ldLmFuY2hvcj09J3dyYXAnKXt2YXIgbmV3Tm9k ZT1jYTEub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7dmFyIG5l eHROb2RlPWNhMi5uZXh0U2libGluZzt2YXIgbj1jYTE7d2hpbGUobiE9bmV4dE5v ZGUpe3ZhciBucz1uLm5leHRTaWJsaW5nO25ld05vZGUuYXBwZW5kQ2hpbGQobik7 bj1uczt9CmlmKG5leHROb2RlKXtjb21tb25BbmNlc3Rvci5pbnNlcnRCZWZvcmUo bmV3Tm9kZSxuZXh0Tm9kZSk7fWVsc2V7Y29tbW9uQW5jZXN0b3IuYXBwZW5kQ2hp bGQobmV3Tm9kZSk7fQphbmNob3I9bmV3Tm9kZTt9ZWxzZSBpZihtYXJrZXJzW2ld LmFuY2hvcj09J3RhZycpe2FuY2hvcj1jb21tb25BbmNlc3Rvcjt9CiQoYW5jaG9y KS5kYXRhKCdtYXJrZXInLG1hcmtlcnNbaV0pLmFkZENsYXNzKCd3aWtpRWRpdG9y LWhpZ2hsaWdodCcpO21hcmtlcnNbaV0uYWZ0ZXJXcmFwKGFuY2hvcixtYXJrZXJz W2ldKTt9ZWxzZXskKGFuY2hvcikuZGF0YSgnbWFya2VyJyxtYXJrZXJzW2ldKTtp Zih0eXBlb2YgbWFya2Vyc1tpXS5vblNraXA9PSdmdW5jdGlvbicpe21hcmtlcnNb aV0ub25Ta2lwKGFuY2hvcik7fX0KdmlzaXRlZFt2KytdPWFuY2hvcjt9fQp2YXIg aj0wO2NvbnRleHQuJGNvbnRlbnQuZmluZCgnLndpa2lFZGl0b3ItaGlnaGxpZ2h0 JykuZWFjaChmdW5jdGlvbigpe2lmKHZpc2l0ZWRbal09PXRoaXMpe2orKztyZXR1 cm4gdHJ1ZTt9CnZhciBtYXJrZXI9JCh0aGlzKS5kYXRhKCdtYXJrZXInKTtpZiht YXJrZXImJnR5cGVvZiBtYXJrZXIuc2tpcERpdmlzaW9uIT0ndW5kZWZpbmVkJyYm KGRpdmlzaW9uPT1tYXJrZXIuc2tpcERpdmlzaW9uKSl7cmV0dXJuIHRydWU7fQpp ZihtYXJrZXImJnR5cGVvZiBtYXJrZXIuYmVmb3JlVW53cmFwPT0nZnVuY3Rpb24n KQptYXJrZXIuYmVmb3JlVW53cmFwKHRoaXMpO2lmKChtYXJrZXImJm1hcmtlci5h bmNob3I9PSd0YWcnKXx8JCh0aGlzKS5pcygncCcpKXskKHRoaXMpLnJlbW92ZUF0 dHIoJ2NsYXNzJyk7fWVsc2V7JCh0aGlzKS5yZXBsYWNlV2l0aCh0aGlzLmNoaWxk Tm9kZXMpO30KY29udGV4dC5mbi5wdXJnZU9mZnNldHMoKTt9KTt9fX07fSkoalF1 ZXJ5KTsoZnVuY3Rpb24oJCl7JC53aWtpRWRpdG9yLm1vZHVsZXMucHJldmlldz17 J2Jyb3dzZXJzJzp7J2x0cic6eydtc2llJzpbWyc+PScsN11dLCdmaXJlZm94Jzpb Wyc+PScsM11dLCdvcGVyYSc6W1snPj0nLDkuNl1dLCdzYWZhcmknOltbJz49Jyw0 XV19LCdydGwnOnsnbXNpZSc6W1snPj0nLDhdXSwnZmlyZWZveCc6W1snPj0nLDNd XSwnb3BlcmEnOltbJz49Jyw5LjZdXSwnc2FmYXJpJzpbWyc+PScsNF1dfX0sZm46 e2NyZWF0ZTpmdW5jdGlvbihjb250ZXh0LGNvbmZpZyl7aWYoJ2luaXRpYWxpemVk J2luIGNvbnRleHQubW9kdWxlcy5wcmV2aWV3KXtyZXR1cm47fQpjb250ZXh0Lm1v ZHVsZXMucHJldmlldz17J2luaXRpYWxpemVkJzp0cnVlLCdwcmV2aWV3VGV4dCc6 bnVsbCwnY2hhbmdlc1RleHQnOm51bGx9O2NvbnRleHQubW9kdWxlcy5wcmV2aWV3 LiRwcmV2aWV3PWNvbnRleHQuZm4uYWRkVmlldyh7J25hbWUnOidwcmV2aWV3Jywn dGl0bGVNc2cnOid3aWtpZWRpdG9yLXByZXZpZXctdGFiJywnaW5pdCc6ZnVuY3Rp b24oY29udGV4dCl7dmFyIHdpa2l0ZXh0PWNvbnRleHQuZm4uZ2V0Q29udGVudHMo KTtpZihjb250ZXh0Lm1vZHVsZXMucHJldmlldy5wcmV2aWV3VGV4dD09d2lraXRl eHQpe3JldHVybjt9CmNvbnRleHQubW9kdWxlcy5wcmV2aWV3LiRwcmV2aWV3LmZp bmQoJy53aWtpRWRpdG9yLXByZXZpZXctY29udGVudHMnKS5lbXB0eSgpO2NvbnRl eHQubW9kdWxlcy5wcmV2aWV3LiRwcmV2aWV3LmZpbmQoJy53aWtpRWRpdG9yLXBy ZXZpZXctbG9hZGluZycpLnNob3coKTskLnBvc3Qod2dTY3JpcHRQYXRoKycvYXBp LnBocCcseydhY3Rpb24nOidwYXJzZScsJ3RpdGxlJzp3Z1BhZ2VOYW1lLCd0ZXh0 Jzp3aWtpdGV4dCwncHJvcCc6J3RleHQnLCdwc3QnOicnLCdmb3JtYXQnOidqc29u J30sZnVuY3Rpb24oZGF0YSl7aWYodHlwZW9mIGRhdGEucGFyc2U9PSd1bmRlZmlu ZWQnfHx0eXBlb2YgZGF0YS5wYXJzZS50ZXh0PT0ndW5kZWZpbmVkJ3x8dHlwZW9m IGRhdGEucGFyc2UudGV4dFsnKiddPT0ndW5kZWZpbmVkJyl7cmV0dXJuO30KY29u dGV4dC5tb2R1bGVzLnByZXZpZXcucHJldmlld1RleHQ9d2lraXRleHQ7Y29udGV4 dC5tb2R1bGVzLnByZXZpZXcuJHByZXZpZXcuZmluZCgnLndpa2lFZGl0b3ItcHJl dmlldy1sb2FkaW5nJykuaGlkZSgpO2NvbnRleHQubW9kdWxlcy5wcmV2aWV3LiRw cmV2aWV3LmZpbmQoJy53aWtpRWRpdG9yLXByZXZpZXctY29udGVudHMnKS5odG1s KGRhdGEucGFyc2UudGV4dFsnKiddKS5maW5kKCdhOm5vdChbaHJlZl49I10pJyku Y2xpY2soZnVuY3Rpb24oKXtyZXR1cm4gZmFsc2U7fSk7fSwnanNvbicpO319KTtj b250ZXh0LiRjaGFuZ2VzVGFiPWNvbnRleHQuZm4uYWRkVmlldyh7J25hbWUnOidj aGFuZ2VzJywndGl0bGVNc2cnOid3aWtpZWRpdG9yLXByZXZpZXctY2hhbmdlcy10 YWInLCdpbml0JzpmdW5jdGlvbihjb250ZXh0KXt2YXIgd2lraXRleHQ9Y29udGV4 dC5mbi5nZXRDb250ZW50cygpO2lmKGNvbnRleHQubW9kdWxlcy5wcmV2aWV3LmNo YW5nZXNUZXh0PT13aWtpdGV4dCl7cmV0dXJuO30KY29udGV4dC4kY2hhbmdlc1Rh Yi5maW5kKCd0YWJsZS5kaWZmIHRib2R5JykuZW1wdHkoKTtjb250ZXh0LiRjaGFu Z2VzVGFiLmZpbmQoJy53aWtpRWRpdG9yLXByZXZpZXctbG9hZGluZycpLnNob3co KTt2YXIgcG9zdGRhdGE9eydhY3Rpb24nOidwYXJzZScsJ29ubHlwc3QnOicnLCd0 ZXh0Jzp3aWtpdGV4dCwnZm9ybWF0JzonanNvbid9OyQucG9zdCh3Z1NjcmlwdFBh dGgrJy9hcGkucGhwJyxwb3N0ZGF0YSxmdW5jdGlvbihkYXRhKXt0cnl7dmFyIHBv c3RkYXRhMj17J2FjdGlvbic6J3F1ZXJ5JywnaW5kZXhwYWdlaWRzJzonJywncHJv cCc6J3JldmlzaW9ucycsJ3RpdGxlcyc6d2dQYWdlTmFtZSwncnZkaWZmdG90ZXh0 JzpkYXRhLnBhcnNlLnRleHRbJyonXSwncnZwcm9wJzonJywnZm9ybWF0JzonanNv bid9O3ZhciBzZWN0aW9uPSQoJ1tuYW1lPXdwU2VjdGlvbl0nKS52YWwoKTtpZihz ZWN0aW9uIT0nJykKcG9zdGRhdGFbJ3J2c2VjdGlvbiddPXNlY3Rpb247JC5wb3N0 KHdnU2NyaXB0UGF0aCsnL2FwaS5waHAnLHBvc3RkYXRhMixmdW5jdGlvbihkYXRh KXtpZigkKCdsaW5rW2hyZWY9JytzdHlsZXBhdGgrJy9jb21tb24vZGlmZi5jc3Nd Jykuc2l6ZSgpPT0wKXskKCdoZWFkJykuYXBwZW5kKCQoJzxsaW5rIC8+JykuYXR0 cih7J3JlbCc6J3N0eWxlc2hlZXQnLCd0eXBlJzondGV4dC9jc3MnLCdocmVmJzpz dHlsZXBhdGgrJy9jb21tb24vZGlmZi5jc3MnfSkpO30KdHJ5e3ZhciBkaWZmPWRh dGEucXVlcnkucGFnZXNbZGF0YS5xdWVyeS5wYWdlaWRzWzBdXS5yZXZpc2lvbnNb MF0uZGlmZlsnKiddO2NvbnRleHQuJGNoYW5nZXNUYWIuZmluZCgndGFibGUuZGlm ZiB0Ym9keScpLmh0bWwoZGlmZik7Y29udGV4dC4kY2hhbmdlc1RhYi5maW5kKCcu d2lraUVkaXRvci1wcmV2aWV3LWxvYWRpbmcnKS5oaWRlKCk7Y29udGV4dC5tb2R1 bGVzLnByZXZpZXcuY2hhbmdlc1RleHQ9d2lraXRleHQ7fWNhdGNoKGUpe319LCdq c29uJyk7fWNhdGNoKGUpe319LCdqc29uJyk7fX0pO3ZhciBsb2FkaW5nTXNnPW13 LnVzYWJpbGl0eS5nZXRNc2coJ3dpa2llZGl0b3ItcHJldmlldy1sb2FkaW5nJyk7 Y29udGV4dC5tb2R1bGVzLnByZXZpZXcuJHByZXZpZXcuYWRkKGNvbnRleHQuJGNo YW5nZXNUYWIpLmFwcGVuZCgkKCc8ZGl2IC8+JykuYWRkQ2xhc3MoJ3dpa2lFZGl0 b3ItcHJldmlldy1sb2FkaW5nJykuYXBwZW5kKCQoJzxpbWcgLz4nKS5hZGRDbGFz cygnd2lraUVkaXRvci1wcmV2aWV3LXNwaW5uZXInKS5hdHRyKHsnc3JjJzokLndp a2lFZGl0b3IuaW1nUGF0aCsnZGlhbG9ncy9sb2FkaW5nLmdpZicsJ3ZhbGlnbic6 J2Fic21pZGRsZScsJ2FsdCc6bG9hZGluZ01zZywndGl0bGUnOmxvYWRpbmdNc2d9 KSkuYXBwZW5kKCQoJzxzcGFuPjwvc3Bhbj4nKS50ZXh0KGxvYWRpbmdNc2cpKSku YXBwZW5kKCQoJzxkaXYgLz4nKS5hZGRDbGFzcygnd2lraUVkaXRvci1wcmV2aWV3 LWNvbnRlbnRzJykpO2NvbnRleHQuJGNoYW5nZXNUYWIuZmluZCgnLndpa2lFZGl0 b3ItcHJldmlldy1jb250ZW50cycpLmh0bWwoJzx0YWJsZSBjbGFzcz0iZGlmZiI+ PGNvbCBjbGFzcz0iZGlmZi1tYXJrZXIiIC8+PGNvbCBjbGFzcz0iZGlmZi1jb250 ZW50IiAvPicrJzxjb2wgY2xhc3M9ImRpZmYtbWFya2VyIiAvPjxjb2wgY2xhc3M9 ImRpZmYtY29udGVudCIgLz48dGJvZHkgLz48L3RhYmxlPicpO319fTt9KShqUXVl cnkpOyhmdW5jdGlvbigkKXskLndpa2lFZGl0b3IubW9kdWxlcy5wdWJsaXNoPXsn YnJvd3NlcnMnOnsnbHRyJzp7J21zaWUnOltbJz49Jyw3XV0sJ2ZpcmVmb3gnOltb Jz49JywzXV0sJ29wZXJhJzpbWyc+PScsOS42XV0sJ3NhZmFyaSc6W1snPj0nLDRd XX0sJ3J0bCc6eydtc2llJzpbWyc+PScsOF1dLCdmaXJlZm94JzpbWyc+PScsM11d LCdvcGVyYSc6W1snPj0nLDkuNl1dLCdzYWZhcmknOltbJz49Jyw0XV19fSxmbjp7 Y3JlYXRlOmZ1bmN0aW9uKGNvbnRleHQsY29uZmlnKXt2YXIgZGlhbG9nSUQ9J3dp a2lFZGl0b3ItJytjb250ZXh0Lmluc3RhbmNlKyctZGlhbG9nJzskLndpa2lFZGl0 b3IubW9kdWxlcy5kaWFsb2dzLmZuLmNyZWF0ZShjb250ZXh0LHtwcmV2aWV3c2F2 ZTp7aWQ6ZGlhbG9nSUQsdGl0bGVNc2c6J3dpa2llZGl0b3ItcHVibGlzaC1kaWFs b2ctdGl0bGUnLGh0bWw6J1wKICAgICAgPGRpdiBjbGFzcz0id2lraUVkaXRvci1w dWJsaXNoLWRpYWxvZy1jb3B5d2FybiI+PC9kaXY+XAogICAgICA8ZGl2IGNsYXNz PSJ3aWtpRWRpdG9yLXB1Ymxpc2gtZGlhbG9nLWVkaXRvcHRpb25zIj5cCiAgICAg ICA8Zm9ybSBpZD0id2lraWVkaXRvci0nK2NvbnRleHQuaW5zdGFuY2UrJy1wdWJs aXNoLWRpYWxvZy1mb3JtIj5cCiAgICAgICAgPGRpdiBjbGFzcz0id2lraUVkaXRv ci1wdWJsaXNoLWRpYWxvZy1zdW1tYXJ5Ij5cCiAgICAgICAgIDxsYWJlbCBmb3I9 Indpa2lFZGl0b3ItJytjb250ZXh0Lmluc3RhbmNlKyctZGlhbG9nLXN1bW1hcnki XAogICAgICAgICAgcmVsPSJ3aWtpZWRpdG9yLXB1Ymxpc2gtZGlhbG9nLXN1bW1h cnkiPjwvbGFiZWw+XAogICAgICAgICA8YnIgLz5cCiAgICAgICAgIDxpbnB1dCB0 eXBlPSJ0ZXh0IiBpZD0id2lraUVkaXRvci0nK2NvbnRleHQuaW5zdGFuY2UrJy1k aWFsb2ctc3VtbWFyeSJcCiAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMCU7IiAv PlwKICAgICAgICA8L2Rpdj5cCiAgICAgICAgPGRpdiBjbGFzcz0id2lraUVkaXRv ci1wdWJsaXNoLWRpYWxvZy1vcHRpb25zIj5cCiAgICAgICAgIDxpbnB1dCB0eXBl PSJjaGVja2JveCJcCiAgICAgICAgICBpZD0id2lraUVkaXRvci0nK2NvbnRleHQu aW5zdGFuY2UrJy1kaWFsb2ctbWlub3IiIC8+XAogICAgICAgICA8bGFiZWwgZm9y PSJ3aWtpRWRpdG9yLScrY29udGV4dC5pbnN0YW5jZSsnLWRpYWxvZy1taW5vciJc CiAgICAgICAgICByZWw9Indpa2llZGl0b3ItcHVibGlzaC1kaWFsb2ctbWlub3Ii PjwvbGFiZWw+XAogICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giXAogICAg ICAgICAgaWQ9Indpa2lFZGl0b3ItJytjb250ZXh0Lmluc3RhbmNlKyctZGlhbG9n LXdhdGNoIiAvPlwKICAgICAgICAgPGxhYmVsIGZvcj0id2lraUVkaXRvci0nK2Nv bnRleHQuaW5zdGFuY2UrJy1kaWFsb2ctd2F0Y2giXAogICAgICAgICAgcmVsPSJ3 aWtpZWRpdG9yLXB1Ymxpc2gtZGlhbG9nLXdhdGNoIj48L2xhYmVsPlwKICAgICAg ICA8L2Rpdj5cCiAgICAgICA8L2Zvcm0+XAogICAgICA8L2Rpdj4nLGluaXQ6ZnVu Y3Rpb24oKXskKHRoaXMpLmZpbmQoJ1tyZWxdJykuZWFjaChmdW5jdGlvbigpeyQo dGhpcykudGV4dChtdy51c2FiaWxpdHkuZ2V0TXNnKCQodGhpcykuYXR0cigncmVs JykpKTt9KTt2YXIgY29weVdhcm5IVE1MPSQoJyNlZGl0cGFnZS1jb3B5d2FybiBw JykuaHRtbCgpO3ZhciBjb3B5V2FyblN0YXRlbWVudHM9Y29weVdhcm5IVE1MLnNw bGl0KCcuICcpO3ZhciBuZXdDb3B5V2FybkhUTUw9Jzx1bD4nO2Zvcih2YXIgaT0w O2k8Y29weVdhcm5TdGF0ZW1lbnRzLmxlbmd0aDtpKyspe2lmKGNvcHlXYXJuU3Rh dGVtZW50c1tpXSE9Jycpe3ZhciBjb3B5V2FyblN0YXRlbWVudD0kai50cmltKGNv cHlXYXJuU3RhdGVtZW50c1tpXSkucmVwbGFjZSgvXC4qJC8sJycpO25ld0NvcHlX YXJuSFRNTCs9JzxsaT4nK2NvcHlXYXJuU3RhdGVtZW50KycuPC9saT4nO319Cm5l d0NvcHlXYXJuSFRNTCs9JzwvdWw+JzskKHRoaXMpLmZpbmQoJy53aWtpRWRpdG9y LXB1Ymxpc2gtZGlhbG9nLWNvcHl3YXJuJykuaHRtbChjb3B5V2FyblN0YXRlbWVu dHMubGVuZ3RoPjE/bmV3Q29weVdhcm5IVE1MOmNvcHlXYXJuSFRNTCk7aWYoJCgn I3dwTWlub3JlZGl0Jykuc2l6ZSgpPT0wKQokKCcjd2lraUVkaXRvci0nK2NvbnRl eHQuaW5zdGFuY2UrJy1kaWFsb2ctbWlub3InKS5oaWRlKCk7ZWxzZSBpZigkKCcj d3BNaW5vcmVkaXQnKS5pcygnOmNoZWNrZWQnKSkKJCgnI3dpa2lFZGl0b3ItJytj b250ZXh0Lmluc3RhbmNlKyctZGlhbG9nLW1pbm9yJykuYXR0cignY2hlY2tlZCcs J2NoZWNrZWQnKTtpZigkKCcjd3BXYXRjaHRoaXMnKS5zaXplKCk9PTApCiQoJyN3 aWtpRWRpdG9yLScrY29udGV4dC5pbnN0YW5jZSsnLWRpYWxvZy13YXRjaCcpLmhp ZGUoKTtlbHNlIGlmKCQoJyN3cFdhdGNodGhpcycpLmlzKCc6Y2hlY2tlZCcpKQok KCcjd2lraUVkaXRvci0nK2NvbnRleHQuaW5zdGFuY2UrJy1kaWFsb2ctd2F0Y2gn KS5hdHRyKCdjaGVja2VkJywnY2hlY2tlZCcpOyQodGhpcykuZmluZCgnZm9ybScp LnN1Ym1pdChmdW5jdGlvbihlKXskKHRoaXMpLmNsb3Nlc3QoJy51aS1kaWFsb2cn KS5maW5kKCdidXR0b246Zmlyc3QnKS5jbGljaygpO2UucHJldmVudERlZmF1bHQo KTt9KTt9LGRpYWxvZzp7YnV0dG9uczp7J3dpa2llZGl0b3ItcHVibGlzaC1kaWFs b2ctcHVibGlzaCc6ZnVuY3Rpb24oKXt2YXIgbWlub3JDaGVja2VkPSQoJyN3aWtp RWRpdG9yLScrY29udGV4dC5pbnN0YW5jZSsnLWRpYWxvZy1taW5vcicpLmlzKCc6 Y2hlY2tlZCcpPydjaGVja2VkJzonJzt2YXIgd2F0Y2hDaGVja2VkPSQoJyN3aWtp RWRpdG9yLScrY29udGV4dC5pbnN0YW5jZSsnLWRpYWxvZy13YXRjaCcpLmlzKCc6 Y2hlY2tlZCcpPydjaGVja2VkJzonJzskKCcjd3BNaW5vcmVkaXQnKS5hdHRyKCdj aGVja2VkJyxtaW5vckNoZWNrZWQpOyQoJyN3cFdhdGNodGhpcycpLmF0dHIoJ2No ZWNrZWQnLHdhdGNoQ2hlY2tlZCk7JCgnI3dwU3VtbWFyeScpLnZhbCgkaignI3dp a2lFZGl0b3ItJytjb250ZXh0Lmluc3RhbmNlKyctZGlhbG9nLXN1bW1hcnknKS52 YWwoKSk7JCgnI2VkaXRmb3JtJykuc3VibWl0KCk7fSwnd2lraWVkaXRvci1wdWJs aXNoLWRpYWxvZy1nb2JhY2snOmZ1bmN0aW9uKCl7JCh0aGlzKS5kaWFsb2coJ2Ns b3NlJyk7fX0sb3BlbjpmdW5jdGlvbigpeyQoJyN3aWtpRWRpdG9yLScrY29udGV4 dC5pbnN0YW5jZSsnLWRpYWxvZy1zdW1tYXJ5JykuZm9jdXMoKTt9LHdpZHRoOjUw MH0scmVzaXplbWU6ZmFsc2V9fSk7Y29udGV4dC5mbi5hZGRCdXR0b24oeydjYXB0 aW9uTXNnJzond2lraWVkaXRvci1wdWJsaXNoLWJ1dHRvbi1wdWJsaXNoJywnYWN0 aW9uJzpmdW5jdGlvbigpeyQoJyMnK2RpYWxvZ0lEKS5kaWFsb2coJ29wZW4nKTty ZXR1cm4gZmFsc2U7fX0pO2NvbnRleHQuZm4uYWRkQnV0dG9uKHsnY2FwdGlvbk1z Zyc6J3dpa2llZGl0b3ItcHVibGlzaC1idXR0b24tY2FuY2VsJywnYWN0aW9uJzpm dW5jdGlvbigpe319KTt9fX07fSkoalF1ZXJ5KTsoZnVuY3Rpb24oJCl7JC53aWtp RWRpdG9yLm1vZHVsZXMudGVtcGxhdGVFZGl0b3I9eyduYW1lTWFwcGluZ3MnOnsi aW5mb2JveCBza3lzY3JhcGVyIjoiYnVpbGRpbmdfbmFtZSIsImluZm9ib3ggc2V0 dGxlbWVudCI6Im9mZmljaWFsX25hbWUifSwnYnJvd3NlcnMnOnsnbHRyJzp7J21z aWUnOltbJz49Jyw4XV0sJ2ZpcmVmb3gnOltbJz49JywzXV0sJ29wZXJhJzpbWyc+ PScsMTBdXSwnc2FmYXJpJzpbWyc+PScsNF1dfSwncnRsJzp7J21zaWUnOmZhbHNl LCdmaXJlZm94JzpbWyc+PScsM11dLCdvcGVyYSc6W1snPj0nLDEwXV0sJ3NhZmFy aSc6W1snPj0nLDRdXX19LCdyZXEnOlsnaWZyYW1lJ10sZXZ0OnttYXJrOmZ1bmN0 aW9uKGNvbnRleHQsZXZlbnQpe2lmKGNvbnRleHQubW9kdWxlcy5oaWdobGlnaHQu Y3VycmVudFNjb3BlPT0ncmVhbGNoYW5nZScpe3JldHVybjt9CnZhciBtYXJrZXJz PWNvbnRleHQubW9kdWxlcy5oaWdobGlnaHQubWFya2Vyczt2YXIgdG9rZW5BcnJh eT1jb250ZXh0Lm1vZHVsZXMuaGlnaGxpZ2h0LnRva2VuQXJyYXk7dmFyIGxldmVs PTA7dmFyIHRva2VuSW5kZXg9MDt3aGlsZSh0b2tlbkluZGV4PHRva2VuQXJyYXku bGVuZ3RoKXt3aGlsZSh0b2tlbkluZGV4PHRva2VuQXJyYXkubGVuZ3RoJiZ0b2tl bkFycmF5W3Rva2VuSW5kZXhdLmxhYmVsIT0nVEVNUExBVEVfQkVHSU4nKXt0b2tl bkluZGV4Kys7fQppZih0b2tlbkluZGV4PHRva2VuQXJyYXkubGVuZ3RoKXt2YXIg YmVnaW5JbmRleD10b2tlbkluZGV4O3ZhciBlbmRJbmRleD0tMTt2YXIgb3BlblRl bXBsYXRlcz0xO3ZhciB0ZW1wbGF0ZXNNYXRjaGVkPWZhbHNlO3doaWxlKHRva2Vu SW5kZXg8dG9rZW5BcnJheS5sZW5ndGgtMSYmZW5kSW5kZXg9PS0xKXt0b2tlbklu ZGV4Kys7aWYodG9rZW5BcnJheVt0b2tlbkluZGV4XS5sYWJlbD09J1RFTVBMQVRF X0JFR0lOJyl7b3BlblRlbXBsYXRlcysrO31lbHNlIGlmKHRva2VuQXJyYXlbdG9r ZW5JbmRleF0ubGFiZWw9PSdURU1QTEFURV9FTkQnKXtvcGVuVGVtcGxhdGVzLS07 aWYob3BlblRlbXBsYXRlcz09MCl7ZW5kSW5kZXg9dG9rZW5JbmRleDt9fX0KaWYo ZW5kSW5kZXghPS0xKXttYXJrZXJzLnB1c2goe3N0YXJ0OnRva2VuQXJyYXlbYmVn aW5JbmRleF0ub2Zmc2V0LGVuZDp0b2tlbkFycmF5W2VuZEluZGV4XS5vZmZzZXQs dHlwZTondGVtcGxhdGUnLGFuY2hvcjond3JhcCcsYWZ0ZXJXcmFwOmZ1bmN0aW9u KG5vZGUpe3ZhciBtb2RlbD0kLndpa2lFZGl0b3IubW9kdWxlcy50ZW1wbGF0ZUVk aXRvci5mbi51cGRhdGVNb2RlbCgkKG5vZGUpKTtpZihtb2RlbC5pc0NvbGxhcHNp YmxlKCkpeyQud2lraUVkaXRvci5tb2R1bGVzLnRlbXBsYXRlRWRpdG9yLmZuLndy YXBUZW1wbGF0ZSgkKG5vZGUpKTskLndpa2lFZGl0b3IubW9kdWxlcy50ZW1wbGF0 ZUVkaXRvci5mbi5iaW5kVGVtcGxhdGVFdmVudHMoJChub2RlKSk7fWVsc2V7JChu b2RlKS5hZGRDbGFzcygnd2lraUVkaXRvci10ZW1wbGF0ZS10ZXh0Jyk7fX0sYmVm b3JlVW53cmFwOmZ1bmN0aW9uKG5vZGUpe2lmKCQobm9kZSkucGFyZW50KCkuaGFz Q2xhc3MoJ3dpa2lFZGl0b3ItdGVtcGxhdGUnKSl7JC53aWtpRWRpdG9yLm1vZHVs ZXMudGVtcGxhdGVFZGl0b3IuZm4udW53cmFwVGVtcGxhdGUoJChub2RlKSk7fX0s b25Ta2lwOmZ1bmN0aW9uKG5vZGUpe2lmKCQobm9kZSkuaHRtbCgpPT0kKG5vZGUp LmRhdGEoJ29sZEhUTUwnKSl7cmV0dXJuO30KdmFyIG1vZGVsPSQud2lraUVkaXRv ci5tb2R1bGVzLnRlbXBsYXRlRWRpdG9yLmZuLnVwZGF0ZU1vZGVsKCQobm9kZSkp O2lmKCQobm9kZSkucGFyZW50KCkuaGFzQ2xhc3MoJ3dpa2lFZGl0b3ItdGVtcGxh dGUnKSl7dmFyICRsYWJlbD0kKG5vZGUpLnBhcmVudCgpLmZpbmQoJy53aWtpRWRp dG9yLXRlbXBsYXRlLWxhYmVsJyk7dmFyIGRpc3BsYXlOYW1lPSQud2lraUVkaXRv ci5tb2R1bGVzLnRlbXBsYXRlRWRpdG9yLmZuLmdldFRlbXBsYXRlRGlzcGxheU5h bWUobW9kZWwpO2lmKCRsYWJlbC50ZXh0KCkhPWRpc3BsYXlOYW1lKXskbGFiZWwu dGV4dChkaXNwbGF5TmFtZSk7fX0KaWYoJChub2RlKS5wYXJlbnQoKS5oYXNDbGFz cygnd2lraUVkaXRvci10ZW1wbGF0ZScpJiYhbW9kZWwuaXNDb2xsYXBzaWJsZSgp KXskLndpa2lFZGl0b3IubW9kdWxlcy50ZW1wbGF0ZUVkaXRvci5mbi51bndyYXBU ZW1wbGF0ZSgkKG5vZGUpKTt9ZWxzZSBpZighJChub2RlKS5wYXJlbnQoKS5oYXND bGFzcygnd2lraUVkaXRvci10ZW1wbGF0ZScpJiZtb2RlbC5pc0NvbGxhcHNpYmxl KCkpeyQud2lraUVkaXRvci5tb2R1bGVzLnRlbXBsYXRlRWRpdG9yLmZuLndyYXBU ZW1wbGF0ZSgkKG5vZGUpKTskLndpa2lFZGl0b3IubW9kdWxlcy50ZW1wbGF0ZUVk aXRvci5mbi5iaW5kVGVtcGxhdGVFdmVudHMoJChub2RlKSk7fX0sZ2V0QW5jaG9y OmZ1bmN0aW9uKGNhMSxjYTIpe3JldHVybiAkKGNhMS5wYXJlbnROb2RlKS5pcygn c3Bhbi53aWtpRWRpdG9yLXRlbXBsYXRlLXRleHQnKT9jYTEucGFyZW50Tm9kZTpu dWxsO30sY29udGV4dDpjb250ZXh0LHNraXBEaXZpc2lvbjoncmVhbGNoYW5nZSd9 KTt9ZWxzZXt0b2tlbkFycmF5W2JlZ2luSW5kZXhdLmxhYmVsPSdURU1QTEFURV9G QUxTRV9CRUdJTic7dG9rZW5JbmRleD1iZWdpbkluZGV4O319fX0sa2V5ZG93bjpm dW5jdGlvbihjb250ZXh0LGV2ZW50KXtpZihjb250ZXh0LiRpZnJhbWUuZGF0YSgn aWdub3JlS2V5cHJlc3MnKSl7Y29udGV4dC4kaWZyYW1lLmRhdGEoJ2lnbm9yZUtl eXByZXNzJyxmYWxzZSk7fQp2YXIgJGV2dEVsZW09ZXZlbnQualF1ZXJ5Tm9kZTtp ZigkZXZ0RWxlbS5oYXNDbGFzcygnd2lraUVkaXRvci10ZW1wbGF0ZS1sYWJlbCcp KXtpZihldmVudC5jdHJsS2V5fHxldmVudC5tZXRhS2V5KXJldHVybiB0cnVlO3N3 aXRjaChldmVudC53aGljaCl7Y2FzZSAxMzokZXZ0RWxlbS5jbGljaygpO2V2ZW50 LnByZXZlbnREZWZhdWx0KCk7cmV0dXJuIGZhbHNlO2Nhc2UgMzI6JGV2dEVsZW0u cGFyZW50KCkuc2libGluZ3MoJy53aWtpRWRpdG9yLXRlbXBsYXRlLWV4cGFuZCcp LmNsaWNrKCk7ZXZlbnQucHJldmVudERlZmF1bHQoKTtyZXR1cm4gZmFsc2U7Y2Fz ZSAzNzpjYXNlIDM4OmNhc2UgMzk6Y2FzZSA0MDpyZXR1cm4gdHJ1ZTtkZWZhdWx0 OmNvbnRleHQuJGlmcmFtZS5kYXRhKCdpZ25vcmVLZXlwcmVzcycsdHJ1ZSk7ZXZl bnQucHJldmVudERlZmF1bHQoKTtyZXR1cm4gZmFsc2U7fX1lbHNlIGlmKCRldnRF bGVtLmhhc0NsYXNzKCd3aWtpRWRpdG9yLXRlbXBsYXRlLXRleHQnKSl7c3dpdGNo KGV2ZW50LndoaWNoKXtjYXNlIDEzOmNvbnRleHQuJGlmcmFtZS5kYXRhKCdpZ25v cmVLZXlwcmVzcycsdHJ1ZSk7Y29udGV4dC5mbi5lbmNhcHN1bGF0ZVNlbGVjdGlv bih7J3ByZSc6J1xuJywncGVyaSc6JycsJ3Bvc3QnOicnfSk7ZXZlbnQucHJldmVu dERlZmF1bHQoKTtyZXR1cm4gZmFsc2U7ZGVmYXVsdDpyZXR1cm4gdHJ1ZTt9fX0s a2V5dXA6ZnVuY3Rpb24oY29udGV4dCxldmVudCl7aWYoY29udGV4dC4kaWZyYW1l LmRhdGEoJ2lnbm9yZUtleXByZXNzJykpe2NvbnRleHQuJGlmcmFtZS5kYXRhKCdp Z25vcmVLZXlwcmVzcycsZmFsc2UpO30KcmV0dXJuIHRydWU7fSxrZXlwcmVzczpm dW5jdGlvbihjb250ZXh0LGV2ZW50KXtyZXR1cm4oY29udGV4dC4kaWZyYW1lLmRh dGEoJ2lnbm9yZUtleXByZXNzJyk/ZmFsc2U6dHJ1ZSk7fX0sZXhwOlt7J3JlZ2V4 Jzove3svLCdsYWJlbCc6IlRFTVBMQVRFX0JFR0lOIn0seydyZWdleCc6L319Lywn bGFiZWwnOiJURU1QTEFURV9FTkQiLCdtYXJrQWZ0ZXInOnRydWV9XSxjZmc6e30s Zm46e2NyZWF0ZTpmdW5jdGlvbihjb250ZXh0LGNvbmZpZyl7Y29udGV4dC5tb2R1 bGVzLnRlbXBsYXRlRWRpdG9yPXt9O30sd3JhcFRlbXBsYXRlOmZ1bmN0aW9uKCR3 cmFwcGVyKXt2YXIgbW9kZWw9JHdyYXBwZXIuZGF0YSgnbW9kZWwnKTt2YXIgY29u dGV4dD0kd3JhcHBlci5kYXRhKCdtYXJrZXInKS5jb250ZXh0O3ZhciAkdGVtcGxh dGU9JHdyYXBwZXIud3JhcCgnPHNwYW4gY2xhc3M9Indpa2lFZGl0b3ItdGVtcGxh dGUiPjwvc3Bhbj4nKS5hZGRDbGFzcygnd2lraUVkaXRvci10ZW1wbGF0ZS10ZXh0 IHdpa2lFZGl0b3ItdGVtcGxhdGUtdGV4dC1zaHJ1bmtlbicpLnBhcmVudCgpLmFk ZENsYXNzKCd3aWtpRWRpdG9yLXRlbXBsYXRlLWNvbGxhcHNlZCcpLnByZXBlbmQo JzxzcGFuIGNsYXNzPSJ3aWtpRWRpdG9yLXRlbXBsYXRlLWV4cGFuZCB3aWtpRWRp dG9yLW5vaW5jbHVkZSI+PC9zcGFuPicrJzxzcGFuIGNsYXNzPSJ3aWtpRWRpdG9y LXRlbXBsYXRlLW5hbWUgd2lraUVkaXRvci1ub2luY2x1ZGUiPicrJzxzcGFuIGNs YXNzPSJ3aWtpRWRpdG9yLXRlbXBsYXRlLWxhYmVsIHdpa2lFZGl0b3Itbm9pbmNs dWRlIj4nKwokLndpa2lFZGl0b3IubW9kdWxlcy50ZW1wbGF0ZUVkaXRvci5mbi5n ZXRUZW1wbGF0ZURpc3BsYXlOYW1lKG1vZGVsKSsnPC9zcGFuPicrJzxzcGFuIGNs YXNzPSJ3aWtpRWRpdG9yLXRlbXBsYXRlLWRpYWxvZyB3aWtpRWRpdG9yLW5vaW5j bHVkZSI+PC9zcGFuPicrJzwvc3Bhbj4nKTt9LHVud3JhcFRlbXBsYXRlOmZ1bmN0 aW9uKCR3cmFwcGVyKXskd3JhcHBlci5wYXJlbnQoKS5yZXBsYWNlV2l0aCgkd3Jh cHBlcik7fSxiaW5kVGVtcGxhdGVFdmVudHM6ZnVuY3Rpb24oJHdyYXBwZXIpe3Zh ciAkdGVtcGxhdGU9JHdyYXBwZXIucGFyZW50KCcud2lraUVkaXRvci10ZW1wbGF0 ZScpO2lmKHR5cGVvZihvcGVyYSk9PSJ1bmRlZmluZWQiKXskdGVtcGxhdGUucGFy ZW50KCkuYXR0cignY29udGVudEVkaXRhYmxlJywnZmFsc2UnKTt9CiR0ZW1wbGF0 ZS5jbGljayhmdW5jdGlvbihldmVudCl7ZXZlbnQucHJldmVudERlZmF1bHQoKTty ZXR1cm4gZmFsc2U7fSkKJHRlbXBsYXRlLmZpbmQoJy53aWtpRWRpdG9yLXRlbXBs YXRlLW5hbWUnKS5jbGljayhmdW5jdGlvbihldmVudCl7JC53aWtpRWRpdG9yLm1v ZHVsZXMudGVtcGxhdGVFZGl0b3IuZm4uY3JlYXRlRGlhbG9nKCR3cmFwcGVyKTtl dmVudC5zdG9wUHJvcGFnYXRpb24oKTtyZXR1cm4gZmFsc2U7fSkubW91c2Vkb3du KGZ1bmN0aW9uKGV2ZW50KXtldmVudC5zdG9wUHJvcGFnYXRpb24oKTtyZXR1cm4g ZmFsc2U7fSk7JHRlbXBsYXRlLmZpbmQoJy53aWtpRWRpdG9yLXRlbXBsYXRlLWV4 cGFuZCcpLmNsaWNrKGZ1bmN0aW9uKGV2ZW50KXskLndpa2lFZGl0b3IubW9kdWxl cy50ZW1wbGF0ZUVkaXRvci5mbi50b2dnbGVXaWtpVGV4dEVkaXRvcigkd3JhcHBl cik7ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7cmV0dXJuIGZhbHNlO30pLm1vdXNl ZG93bihmdW5jdGlvbihldmVudCl7ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7cmV0 dXJuIGZhbHNlO30pO30sdG9nZ2xlV2lraVRleHRFZGl0b3I6ZnVuY3Rpb24oJHdy YXBwZXIpe3ZhciBjb250ZXh0PSR3cmFwcGVyLmRhdGEoJ21hcmtlcicpLmNvbnRl eHQ7dmFyICR0ZW1wbGF0ZT0kd3JhcHBlci5wYXJlbnQoJy53aWtpRWRpdG9yLXRl bXBsYXRlJyk7Y29udGV4dC5mbi5wdXJnZU9mZnNldHMoKTskdGVtcGxhdGUudG9n Z2xlQ2xhc3MoJ3dpa2lFZGl0b3ItdGVtcGxhdGUtZXhwYW5kZWQnKS50b2dnbGVD bGFzcygnd2lraUVkaXRvci10ZW1wbGF0ZS1jb2xsYXBzZWQnKTt2YXIgJHRlbXBs YXRlVGV4dD0kdGVtcGxhdGUuZmluZCgnLndpa2lFZGl0b3ItdGVtcGxhdGUtdGV4 dCcpOyR0ZW1wbGF0ZVRleHQudG9nZ2xlQ2xhc3MoJ3dpa2lFZGl0b3ItdGVtcGxh dGUtdGV4dC1zaHJ1bmtlbicpOyR0ZW1wbGF0ZVRleHQudG9nZ2xlQ2xhc3MoJ3dp a2lFZGl0b3ItdGVtcGxhdGUtdGV4dC12aXNpYmxlJyk7aWYoJHRlbXBsYXRlVGV4 dC5oYXNDbGFzcygnd2lraUVkaXRvci10ZW1wbGF0ZS10ZXh0LXNocnVua2VuJykp e2lmKCR0ZW1wbGF0ZVRleHQuaHRtbCgpIT0kdGVtcGxhdGVUZXh0LmRhdGEoJ29s ZEhUTUwnKSl7dmFyIHRlbXBsYXRlTW9kZWw9JC53aWtpRWRpdG9yLm1vZHVsZXMu dGVtcGxhdGVFZGl0b3IuZm4udXBkYXRlTW9kZWwoJHRlbXBsYXRlVGV4dCk7dmFy ICR0TGFiZWw9JHRlbXBsYXRlLmZpbmQoJy53aWtpRWRpdG9yLXRlbXBsYXRlLWxh YmVsJyk7JHRMYWJlbC50ZXh0KCQud2lraUVkaXRvci5tb2R1bGVzLnRlbXBsYXRl RWRpdG9yLmZuLmdldFRlbXBsYXRlRGlzcGxheU5hbWUodGVtcGxhdGVNb2RlbCkp O319fSxjcmVhdGVEaWFsb2c6ZnVuY3Rpb24oJHdyYXBwZXIpe3ZhciBjb250ZXh0 PSR3cmFwcGVyLmRhdGEoJ21hcmtlcicpLmNvbnRleHQ7dmFyICR0ZW1wbGF0ZT0k d3JhcHBlci5wYXJlbnQoJy53aWtpRWRpdG9yLXRlbXBsYXRlJyk7dmFyIGRpYWxv Zz17J3RpdGxlTXNnJzond2lraWVkaXRvci10ZW1wbGF0ZS1lZGl0b3ItZGlhbG9n LXRpdGxlJywnaWQnOid3aWtpRWRpdG9yLXRlbXBsYXRlLWRpYWxvZycsJ2h0bWwn OidcCiAgICA8ZmllbGRzZXQ+XAogICAgIDxkaXYgY2xhc3M9Indpa2lFZGl0b3It dGVtcGxhdGUtZGlhbG9nLXRpdGxlIiAvPlwKICAgICA8ZGl2IGNsYXNzPSJ3aWtp RWRpdG9yLXRlbXBsYXRlLWRpYWxvZy1maWVsZHMiIC8+XAogICAgPC9maWVsZHNl dD4nLGluaXQ6ZnVuY3Rpb24oKXskKHRoaXMpLmZpbmQoJ1tyZWxdJykuZWFjaChm dW5jdGlvbigpeyQodGhpcykudGV4dChtdy51c2FiaWxpdHkuZ2V0TXNnKCQodGhp cykuYXR0cigncmVsJykpKTt9KTt9LGRpYWxvZzp7d2lkdGg6NjAwLGhlaWdodDo0 MDAsZGlhbG9nQ2xhc3M6J3dpa2lFZGl0b3ItdG9vbGJhci1kaWFsb2cnLGJ1dHRv bnM6eyd3aWtpZWRpdG9yLXRlbXBsYXRlLWVkaXRvci1kaWFsb2ctc3VibWl0Jzpm dW5jdGlvbigpe3ZhciAkdGVtcGxhdGVEaXY9JCh0aGlzKS5kYXRhKCd0ZW1wbGF0 ZURpdicpO2NvbnRleHQuZm4uaGlnaGxpZ2h0TGluZSgkdGVtcGxhdGVEaXYpO3Zh ciAkdGVtcGxhdGVUZXh0PSR0ZW1wbGF0ZURpdi5jaGlsZHJlbignLndpa2lFZGl0 b3ItdGVtcGxhdGUtdGV4dCcpO3ZhciB0ZW1wbGF0ZU1vZGVsPSR0ZW1wbGF0ZVRl eHQuZGF0YSgnbW9kZWwnKTskKHRoaXMpLmZpbmQoJy53aWtpRWRpdG9yLXRlbXBs YXRlLWRpYWxvZy1maWVsZC13cmFwcGVyIHRleHRhcmVhJykuZWFjaChmdW5jdGlv bigpe3RlbXBsYXRlTW9kZWwuc2V0VmFsdWUoJCh0aGlzKS5kYXRhKCduYW1lJyks JCh0aGlzKS52YWwoKSk7fSk7JC53aWtpRWRpdG9yLm1vZHVsZXMudGVtcGxhdGVF ZGl0b3IuZm4udXBkYXRlTW9kZWwoJHRlbXBsYXRlVGV4dCx0ZW1wbGF0ZU1vZGVs KTskKHRoaXMpLmRpYWxvZygnY2xvc2UnKTt9LCd3aWtpZWRpdG9yLXRlbXBsYXRl LWVkaXRvci1kaWFsb2ctY2FuY2VsJzpmdW5jdGlvbigpeyQodGhpcykuZGlhbG9n KCdjbG9zZScpO319LG9wZW46ZnVuY3Rpb24oKXt2YXIgJHRlbXBsYXRlRGl2PSQo dGhpcykuZGF0YSgndGVtcGxhdGVEaXYnKTt2YXIgJHRlbXBsYXRlVGV4dD0kdGVt cGxhdGVEaXYuY2hpbGRyZW4oJy53aWtpRWRpdG9yLXRlbXBsYXRlLXRleHQnKTt2 YXIgdGVtcGxhdGVNb2RlbD0kdGVtcGxhdGVUZXh0LmRhdGEoJ21vZGVsJyk7aWYo JHRlbXBsYXRlVGV4dC5odG1sKCkhPSR0ZW1wbGF0ZVRleHQuZGF0YSgnb2xkSFRN TCcpKXt0ZW1wbGF0ZU1vZGVsPSQud2lraUVkaXRvci5tb2R1bGVzLnRlbXBsYXRl RWRpdG9yLmZuLnVwZGF0ZU1vZGVsKCR0ZW1wbGF0ZVRleHQpO30KdmFyIHBhcmFt cz10ZW1wbGF0ZU1vZGVsLmdldEFsbEluaXRpYWxQYXJhbXMoKTt2YXIgJGZpZWxk cz0kKHRoaXMpLmZpbmQoJy53aWtpRWRpdG9yLXRlbXBsYXRlLWRpYWxvZy1maWVs ZHMnKTt2YXIgJHJvd3M9JGZpZWxkcy5maW5kKCcud2lraUVkaXRvci10ZW1wbGF0 ZS1kaWFsb2ctZmllbGQtd3JhcHBlcicpO2Zvcih2YXIgcGFyYW1JbmRleCBpbiBw YXJhbXMpe3ZhciBwYXJhbT1wYXJhbXNbcGFyYW1JbmRleF07aWYodHlwZW9mIHBh cmFtLm5hbWU9PSd1bmRlZmluZWQnKXtjb250aW51ZTt9CnZhciBwYXJhbVRleHQ9 dHlwZW9mIHBhcmFtPT0nc3RyaW5nJz9wYXJhbS5uYW1lLnJlcGxhY2UoL1tcX1wt XS9nLCcgJyk6cGFyYW0ubmFtZTt2YXIgcGFyYW1WYWw9dGVtcGxhdGVNb2RlbC5n ZXRWYWx1ZShwYXJhbS5uYW1lKTtpZigkcm93cy5sZW5ndGg+MCl7dmFyICRyb3c9 JHJvd3MuZXEoMCk7JHJvdy5jaGlsZHJlbignbGFiZWwnKS50ZXh0KHBhcmFtVGV4 dCk7JHJvdy5jaGlsZHJlbigndGV4dGFyZWEnKS5kYXRhKCduYW1lJyxwYXJhbS5u YW1lKS52YWwocGFyYW1WYWwpLmVhY2goZnVuY3Rpb24oKXskKHRoaXMpLmNzcygn aGVpZ2h0JywkKHRoaXMpLnZhbCgpLmxlbmd0aD4yND8nNC41ZW0nOicxLjVlbScp O30pCiRyb3dzPSRyb3dzLm5vdCgkcm93KTt9ZWxzZXt2YXIgJHBhcmFtUm93PSQo JzxkaXYgLz4nKS5hZGRDbGFzcygnd2lraUVkaXRvci10ZW1wbGF0ZS1kaWFsb2ct ZmllbGQtd3JhcHBlcicpOyQoJzxsYWJlbCAvPicpLnRleHQocGFyYW1UZXh0KS5h cHBlbmRUbygkcGFyYW1Sb3cpOyQoJzx0ZXh0YXJlYSAvPicpLmRhdGEoJ25hbWUn LHBhcmFtLm5hbWUpLnZhbChwYXJhbVZhbCkuZWFjaChmdW5jdGlvbigpeyQodGhp cykuY3NzKCdoZWlnaHQnLCQodGhpcykudmFsKCkubGVuZ3RoPjI0Pyc0LjVlbSc6 JzEuNWVtJyk7fSkuZGF0YSgnZXhwYW5kZWQnLGZhbHNlKS5iaW5kKCdjdXQgcGFz dGUga2V5cHJlc3MgY2xpY2sgY2hhbmdlJyxmdW5jdGlvbihlKXtpZihlLmtleUNv ZGU9PSc5JylyZXR1cm4gdHJ1ZTt2YXIgJHRoaXM9JCh0aGlzKTtzZXRUaW1lb3V0 KGZ1bmN0aW9uKCl7dmFyIGV4cGFuZGVkPSR0aGlzLmRhdGEoJ2V4cGFuZGVkJyk7 aWYoJHRoaXMudmFsKCkuaW5kZXhPZignXG4nKSE9LTF8fCR0aGlzLnZhbCgpLmxl bmd0aD4yNCl7aWYoIWV4cGFuZGVkKXskdGhpcy5hbmltYXRlKHsnaGVpZ2h0Jzon NC41ZW0nfSwnZmFzdCcpOyR0aGlzLmRhdGEoJ2V4cGFuZGVkJyx0cnVlKTt9fWVs c2V7aWYoZXhwYW5kZWQpeyR0aGlzLmFuaW1hdGUoeydoZWlnaHQnOicxLjVlbSd9 LCdmYXN0Jyk7JHRoaXMuZGF0YSgnZXhwYW5kZWQnLGZhbHNlKTt9fX0sMCk7fSku YXBwZW5kVG8oJHBhcmFtUm93KTskcGFyYW1Sb3cuYXBwZW5kKCc8ZGl2IHN0eWxl PSJjbGVhcjpib3RoIj48L2Rpdj4nKS5hcHBlbmRUbygkZmllbGRzKTt9fQokcm93 cy5yZW1vdmUoKTskZmllbGRzLmZpbmQoJ2xhYmVsJykuYXV0b0VsbGlwc2lzKCk7 JCh0aGlzKS5wYXJlbnQoJy51aS1kaWFsb2cnKS5maW5kKCcudWktZGlhbG9nLXRp dGxlYmFyLWNsb3NlJykucmVtb3ZlQ2xhc3MoJ3VpLXN0YXRlLWZvY3VzJyk7dmFy ICRuZWVkVGFiaW5kZXg9JCh0aGlzKS5jbG9zZXN0KCcudWktZGlhbG9nJykuZmlu ZCgnYnV0dG9uLCB0ZXh0YXJlYScpO2lmKCRuZWVkVGFiaW5kZXgubm90KCdbdGFi aW5kZXhdJykubGVuZ3RoKXskbmVlZFRhYmluZGV4LnJlbW92ZUF0dHIoJ3RhYmlu ZGV4Jyk7JC53aWtpRWRpdG9yLm1vZHVsZXMuZGlhbG9ncy5mbi5zZXRUYWJpbmRl eGVzKCRuZWVkVGFiaW5kZXgpO319fX07Y29udGV4dC4kdGV4dGFyZWEud2lraUVk aXRvcignYWRkRGlhbG9nJyx7J3RlbXBsYXRlRWRpdG9yJzpkaWFsb2d9KTskKCcj JytkaWFsb2cuaWQpLmRhdGEoJ3RlbXBsYXRlRGl2JywkdGVtcGxhdGUpLmRpYWxv Zygnb3BlbicpO30sdXBkYXRlTW9kZWw6ZnVuY3Rpb24oJHRlbXBsYXRlVGV4dCxt b2RlbCl7dmFyIGNvbnRleHQ9JHRlbXBsYXRlVGV4dC5kYXRhKCdtYXJrZXInKS5j b250ZXh0O3ZhciB0ZXh0O2lmKHR5cGVvZiBtb2RlbD09J3VuZGVmaW5lZCcpe3Rl eHQ9Y29udGV4dC5mbi5odG1sVG9UZXh0KCR0ZW1wbGF0ZVRleHQuaHRtbCgpKTt9 ZWxzZXt0ZXh0PW1vZGVsLmdldFRleHQoKTt9CiR0ZW1wbGF0ZVRleHQudGV4dCh0 ZXh0KTskdGVtcGxhdGVUZXh0Lmh0bWwoJHRlbXBsYXRlVGV4dC5odG1sKCkucmVw bGFjZSgvXG4vZywnPGJyIC8+JykpOyR0ZW1wbGF0ZVRleHQuZGF0YSgnb2xkSFRN TCcsJHRlbXBsYXRlVGV4dC5odG1sKCkpO2lmKHR5cGVvZiBtb2RlbD09J3VuZGVm aW5lZCcpe21vZGVsPW5ldyAkLndpa2lFZGl0b3IubW9kdWxlcy50ZW1wbGF0ZUVk aXRvci5mbi5tb2RlbCh0ZXh0KTskdGVtcGxhdGVUZXh0LmRhdGEoJ21vZGVsJyxt b2RlbCk7fQpyZXR1cm4gbW9kZWw7fSxnZXRUZW1wbGF0ZURpc3BsYXlOYW1lOmZ1 bmN0aW9uKG1vZGVsKXt2YXIgdE5hbWU9bW9kZWwuZ2V0TmFtZSgpO2lmKG1vZGVs LmdldFZhbHVlKCduYW1lJykhPScnKXtyZXR1cm4gdE5hbWUrJzogJyttb2RlbC5n ZXRWYWx1ZSgnbmFtZScpO31lbHNlIGlmKG1vZGVsLmdldFZhbHVlKCdOYW1lJykh PScnKXtyZXR1cm4gdE5hbWUrJzogJyttb2RlbC5nZXRWYWx1ZSgnTmFtZScpO31l bHNlIGlmKHROYW1lLnRvTG93ZXJDYXNlKClpbiAkLndpa2lFZGl0b3IubW9kdWxl cy50ZW1wbGF0ZUVkaXRvci5uYW1lTWFwcGluZ3Mpe3JldHVybiB0TmFtZSsnOiAn K21vZGVsLmdldFZhbHVlKCQud2lraUVkaXRvci5tb2R1bGVzLnRlbXBsYXRlRWRp dG9yLm5hbWVNYXBwaW5nc1t0TmFtZS50b0xvd2VyQ2FzZSgpXSk7fQpyZXR1cm4g dE5hbWU7fSxtb2RlbDpmdW5jdGlvbih3aWtpdGV4dCl7dmFyIGNvbGxhcHNpYmxl PXRydWU7ZnVuY3Rpb24gUGFyYW0obmFtZSx2YWx1ZSxudW1iZXIsbmFtZUluZGV4 LGVxdWFsc0luZGV4LHZhbHVlSW5kZXgpe3RoaXMubmFtZT1uYW1lO3RoaXMudmFs dWU9dmFsdWU7dGhpcy5udW1iZXI9bnVtYmVyO3RoaXMubmFtZUluZGV4PW5hbWVJ bmRleDt0aGlzLmVxdWFsc0luZGV4PWVxdWFsc0luZGV4O3RoaXMudmFsdWVJbmRl eD12YWx1ZUluZGV4O30KZnVuY3Rpb24gUmFuZ2UoYmVnaW4sZW5kKXt0aGlzLmJl Z2luPWJlZ2luO3RoaXMuZW5kPWVuZDt9CmZ1bmN0aW9uIGdldFNldFZhbHVlKG5h bWUsdmFsdWUsb3JpZ2luYWwpe3ZhciB2YWx1ZVJhbmdlO3ZhciByYW5nZUluZGV4 O3ZhciByZXRWYWw7aWYoaXNOYU4obmFtZSkpe2lmKHR5cGVvZiBwYXJhbXNCeU5h bWVbbmFtZV09PSd1bmRlZmluZWQnKXtyZXR1cm4iIjt9CnJhbmdlSW5kZXg9cGFy YW1zQnlOYW1lW25hbWVdO31lbHNle3JhbmdlSW5kZXg9cGFyc2VJbnQobmFtZSk7 fQppZih0eXBlb2YgcGFyYW1zW3JhbmdlSW5kZXhdPT0ndW5kZWZpbmVkJyl7cmV0 dXJuIiI7fQp2YWx1ZVJhbmdlPXJhbmdlc1twYXJhbXNbcmFuZ2VJbmRleF0udmFs dWVJbmRleF07aWYodHlwZW9mIHZhbHVlUmFuZ2UubmV3VmFsPT0ndW5kZWZpbmVk J3x8b3JpZ2luYWwpe3JldFZhbD13aWtpdGV4dC5zdWJzdHJpbmcodmFsdWVSYW5n ZS5iZWdpbix2YWx1ZVJhbmdlLmVuZCk7fWVsc2V7cmV0VmFsPXZhbHVlUmFuZ2Uu bmV3VmFsO30KaWYodmFsdWUhPW51bGwpe3Jhbmdlc1twYXJhbXNbcmFuZ2VJbmRl eF0udmFsdWVJbmRleF0ubmV3VmFsPXZhbHVlO30KcmV0dXJuIHJldFZhbDt9O3Ro aXMuZ2V0TmFtZT1mdW5jdGlvbigpe2lmKHR5cGVvZiByYW5nZXNbdGVtcGxhdGVO YW1lSW5kZXhdLm5ld1ZhbD09J3VuZGVmaW5lZCcpe3JldHVybiB3aWtpdGV4dC5z dWJzdHJpbmcocmFuZ2VzW3RlbXBsYXRlTmFtZUluZGV4XS5iZWdpbixyYW5nZXNb dGVtcGxhdGVOYW1lSW5kZXhdLmVuZCk7fWVsc2V7cmV0dXJuIHJhbmdlc1t0ZW1w bGF0ZU5hbWVJbmRleF0ubmV3VmFsO319O3RoaXMuc2V0TmFtZT1mdW5jdGlvbihu YW1lKXtyYW5nZXNbdGVtcGxhdGVOYW1lSW5kZXhdLm5ld1ZhbD1uYW1lO307dGhp cy5zZXRWYWx1ZT1mdW5jdGlvbihuYW1lLHZhbHVlKXtyZXR1cm4gZ2V0U2V0VmFs dWUobmFtZSx2YWx1ZSxmYWxzZSk7fTt0aGlzLmdldFZhbHVlPWZ1bmN0aW9uKG5h bWUpe3JldHVybiBnZXRTZXRWYWx1ZShuYW1lLG51bGwsZmFsc2UpO307dGhpcy5n ZXRPcmlnaW5hbFZhbHVlPWZ1bmN0aW9uKG5hbWUpe3JldHVybiBnZXRTZXRWYWx1 ZShuYW1lLG51bGwsdHJ1ZSk7fTt0aGlzLmdldEFsbFBhcmFtTmFtZXM9ZnVuY3Rp b24oKXtyZXR1cm4gcGFyYW1zQnlOYW1lO307dGhpcy5nZXRBbGxJbml0aWFsUGFy YW1zPWZ1bmN0aW9uKCl7cmV0dXJuIHBhcmFtczt9CnRoaXMuZ2V0T3JpZ2luYWxU ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHdpa2l0ZXh0O307dGhpcy5nZXRUZXh0PWZ1 bmN0aW9uKCl7bmV3VGV4dD0iIjtmb3IoaT0wO2k8cmFuZ2VzLmxlbmd0aDtpKysp e2lmKHR5cGVvZiByYW5nZXNbaV0ubmV3VmFsPT0ndW5kZWZpbmVkJyl7bmV3VGV4 dCs9d2lraXRleHQuc3Vic3RyaW5nKHJhbmdlc1tpXS5iZWdpbixyYW5nZXNbaV0u ZW5kKTt9ZWxzZXtuZXdUZXh0Kz1yYW5nZXNbaV0ubmV3VmFsO319CnJldHVybiBu ZXdUZXh0O307dGhpcy5pc0NvbGxhcHNpYmxlPWZ1bmN0aW9uKCl7cmV0dXJuIGNv bGxhcHNpYmxlO30KdGhpcy51cGRhdGVSYW5nZXM9ZnVuY3Rpb24oKXt2YXIgYWRq dXN0bWVudD0wO2Zvcih2YXIgaT0wO2k8cmFuZ2VzLmxlbmd0aDtpKyspe3Jhbmdl c1tpXS5iZWdpbis9YWRqdXN0bWVudDtpZih0eXBlb2YgcmFuZ2VzW2ldLmFkanVz dCE9J3VuZGVmaW5lZCcpe2FkanVzdG1lbnQrPXJhbmdlc1tpXS5hZGp1c3QoKTtk ZWxldGUgcmFuZ2VzW2ldLmFkanVzdDt9CnJhbmdlc1tpXS5lbmQrPWFkanVzdG1l bnQ7fX07aWYod2lraXRleHQubWF0Y2goL1xzKnt7XHMqW15cc3xdKjovKSl7Y29s bGFwc2libGU9ZmFsc2U7fQp2YXIgc2FuYXRpemVkU3RyPXdpa2l0ZXh0LnJlcGxh Y2UoL3t7LywiICAiKTtlbmRCcmFjZXM9c2FuYXRpemVkU3RyLm1hdGNoKC99fVxz KiQvKTtpZihlbmRCcmFjZXMpe3NhbmF0aXplZFN0cj1zYW5hdGl6ZWRTdHIuc3Vi c3RyaW5nKDAsZW5kQnJhY2VzLmluZGV4KSsiICAiKwpzYW5hdGl6ZWRTdHIuc3Vi c3RyaW5nKGVuZEJyYWNlcy5pbmRleCsyKTt9CndoaWxlKHNhbmF0aXplZFN0ci5p bmRleE9mKCc8IScpIT0tMSl7c3RhcnRJbmRleD1zYW5hdGl6ZWRTdHIuaW5kZXhP ZignPCEnKTtlbmRJbmRleD1zYW5hdGl6ZWRTdHIuaW5kZXhPZignLS0+JykrMztp ZihlbmRJbmRleDwzKXticmVhazt9CnNhbmF0aXplZFNlZ21lbnQ9c2FuYXRpemVk U3RyLnN1YnN0cmluZyhzdGFydEluZGV4LGVuZEluZGV4KS5yZXBsYWNlKC9cUy9n LCcgJyk7c2FuYXRpemVkU3RyPXNhbmF0aXplZFN0ci5zdWJzdHJpbmcoMCxzdGFy dEluZGV4KStzYW5hdGl6ZWRTZWdtZW50K3NhbmF0aXplZFN0ci5zdWJzdHJpbmco ZW5kSW5kZXgpO30Kd2hpbGUoc2FuYXRpemVkU3RyLmluZGV4T2YoJ3t7JykhPS0x KXtzdGFydEluZGV4PXNhbmF0aXplZFN0ci5pbmRleE9mKCd7eycpKzE7b3BlbkJy YWNlcz0yO2VuZEluZGV4PXN0YXJ0SW5kZXg7d2hpbGUoKG9wZW5CcmFjZXM+MCkm JihlbmRJbmRleDxzYW5hdGl6ZWRTdHIubGVuZ3RoKSl7dmFyIGJyYWNlPXNhbmF0 aXplZFN0clsrK2VuZEluZGV4XTtvcGVuQnJhY2VzKz1icmFjZT09J30nPy0xOmJy YWNlPT0neyc/MTowO30Kc2FuYXRpemVkU2VnbWVudD1zYW5hdGl6ZWRTdHIuc3Vi c3RyaW5nKHN0YXJ0SW5kZXgsZW5kSW5kZXgpLnJlcGxhY2UoL1t7fXw9XS9nLCdY Jyk7c2FuYXRpemVkU3RyPXNhbmF0aXplZFN0ci5zdWJzdHJpbmcoMCxzdGFydElu ZGV4KStzYW5hdGl6ZWRTZWdtZW50K3NhbmF0aXplZFN0ci5zdWJzdHJpbmcoZW5k SW5kZXgpO30Kd2hpbGUoc2FuYXRpemVkU3RyLmluZGV4T2YoJ1tbJykhPS0xKXtz dGFydEluZGV4PXNhbmF0aXplZFN0ci5pbmRleE9mKCdbWycpKzE7b3BlbkJyYWNl cz0yO2VuZEluZGV4PXN0YXJ0SW5kZXg7d2hpbGUoKG9wZW5CcmFjZXM+MCkmJihl bmRJbmRleDxzYW5hdGl6ZWRTdHIubGVuZ3RoKSl7dmFyIGJyYWNlPXNhbmF0aXpl ZFN0clsrK2VuZEluZGV4XTtvcGVuQnJhY2VzKz1icmFjZT09J10nPy0xOmJyYWNl PT0nWyc/MTowO30Kc2FuYXRpemVkU2VnbWVudD1zYW5hdGl6ZWRTdHIuc3Vic3Ry aW5nKHN0YXJ0SW5kZXgsZW5kSW5kZXgpLnJlcGxhY2UoL1tcW1xdfD1dL2csJ1gn KTtzYW5hdGl6ZWRTdHI9c2FuYXRpemVkU3RyLnN1YnN0cmluZygwLHN0YXJ0SW5k ZXgpK3NhbmF0aXplZFNlZ21lbnQrc2FuYXRpemVkU3RyLnN1YnN0cmluZyhlbmRJ bmRleCk7fQp2YXIgcmFuZ2VzPVtdO3ZhciBwYXJhbXM9W107dmFyIHRlbXBsYXRl TmFtZUluZGV4PTA7dmFyIGRvbmVQYXJzaW5nPWZhbHNlO29sZERpdmlkZXI9MDtk aXZpZGVyPXNhbmF0aXplZFN0ci5pbmRleE9mKCd8JyxvbGREaXZpZGVyKTtpZihk aXZpZGVyPT0tMSl7ZGl2aWRlcj1zYW5hdGl6ZWRTdHIubGVuZ3RoO2RvbmVQYXJz aW5nPXRydWU7Y29sbGFwc2libGU9ZmFsc2U7fQpuYW1lTWF0Y2g9c2FuYXRpemVk U3RyLnN1YnN0cmluZygwLGRpdmlkZXIpLm1hdGNoKC9bXlxzXS8pO2lmKG5hbWVN YXRjaCE9bnVsbCl7cmFuZ2VzLnB1c2gobmV3IFJhbmdlKDAsbmFtZU1hdGNoLmlu ZGV4KSk7bmFtZUVuZE1hdGNoPXNhbmF0aXplZFN0ci5zdWJzdHJpbmcoMCxkaXZp ZGVyKS5tYXRjaCgvW15cc11ccyokLyk7dGVtcGxhdGVOYW1lSW5kZXg9cmFuZ2Vz LnB1c2gobmV3IFJhbmdlKG5hbWVNYXRjaC5pbmRleCxuYW1lRW5kTWF0Y2guaW5k ZXgrMSkpO3RlbXBsYXRlTmFtZUluZGV4LS07cmFuZ2VzW3RlbXBsYXRlTmFtZUlu ZGV4XS5vbGQ9d2lraXRleHQuc3Vic3RyaW5nKHJhbmdlc1t0ZW1wbGF0ZU5hbWVJ bmRleF0uYmVnaW4scmFuZ2VzW3RlbXBsYXRlTmFtZUluZGV4XS5lbmQpO31lbHNl e3Jhbmdlcy5wdXNoKG5ldyBSYW5nZSgwLDApKTtyYW5nZXNbdGVtcGxhdGVOYW1l SW5kZXhdLm9sZD0iIjt9CnBhcmFtcy5wdXNoKHJhbmdlc1t0ZW1wbGF0ZU5hbWVJ bmRleF0ub2xkKTt2YXIgY3VycmVudFBhcmFtTnVtYmVyPTA7dmFyIHZhbHVlRW5k SW5kZXg9cmFuZ2VzW3RlbXBsYXRlTmFtZUluZGV4XS5lbmQ7dmFyIHBhcmFtc0J5 TmFtZT1bXTt3aGlsZSghZG9uZVBhcnNpbmcpe2N1cnJlbnRQYXJhbU51bWJlcisr O29sZERpdmlkZXI9ZGl2aWRlcjtkaXZpZGVyPXNhbmF0aXplZFN0ci5pbmRleE9m KCd8JyxvbGREaXZpZGVyKzEpO2lmKGRpdmlkZXI9PS0xKXtkaXZpZGVyPXNhbmF0 aXplZFN0ci5sZW5ndGg7ZG9uZVBhcnNpbmc9dHJ1ZTt9CmN1cnJlbnRGaWVsZD1z YW5hdGl6ZWRTdHIuc3Vic3RyaW5nKG9sZERpdmlkZXIrMSxkaXZpZGVyKTtpZihj dXJyZW50RmllbGQuaW5kZXhPZignPScpPT0tMSl7dmFsdWVCZWdpbkluZGV4PW9s ZERpdmlkZXIrMTt2YWx1ZUVuZEluZGV4PW9sZERpdmlkZXIrMTt2YWx1ZUJlZ2lu PWN1cnJlbnRGaWVsZC5tYXRjaCgvXFMrLyk7aWYodmFsdWVCZWdpbiE9bnVsbCl7 dmFsdWVCZWdpbkluZGV4PXZhbHVlQmVnaW4uaW5kZXgrb2xkRGl2aWRlcisxO3Zh bHVlRW5kPWN1cnJlbnRGaWVsZC5tYXRjaCgvW15cc11ccyokLyk7aWYodmFsdWVF bmQ9PW51bGwpe2NvbnRpbnVlO30KdmFsdWVFbmRJbmRleD12YWx1ZUVuZC5pbmRl eCtvbGREaXZpZGVyKzI7fQpyYW5nZXMucHVzaChuZXcgUmFuZ2UocmFuZ2VzW3Jh bmdlcy5sZW5ndGgtMV0uZW5kLHZhbHVlQmVnaW5JbmRleCkpO25hbWVJbmRleD1y YW5nZXMucHVzaChuZXcgUmFuZ2UodmFsdWVCZWdpbkluZGV4LHZhbHVlQmVnaW5J bmRleCkpLTE7ZXF1YWxzSW5kZXg9cmFuZ2VzLnB1c2gobmV3IFJhbmdlKHZhbHVl QmVnaW5JbmRleCx2YWx1ZUJlZ2luSW5kZXgpKS0xO3ZhbHVlSW5kZXg9cmFuZ2Vz LnB1c2gobmV3IFJhbmdlKHZhbHVlQmVnaW5JbmRleCx2YWx1ZUVuZEluZGV4KSkt MTtwYXJhbXMucHVzaChuZXcgUGFyYW0oY3VycmVudFBhcmFtTnVtYmVyLHdpa2l0 ZXh0LnN1YnN0cmluZyhyYW5nZXNbdmFsdWVJbmRleF0uYmVnaW4scmFuZ2VzW3Zh bHVlSW5kZXhdLmVuZCksY3VycmVudFBhcmFtTnVtYmVyLG5hbWVJbmRleCxlcXVh bHNJbmRleCx2YWx1ZUluZGV4KSk7cGFyYW1zQnlOYW1lW2N1cnJlbnRQYXJhbU51 bWJlcl09Y3VycmVudFBhcmFtTnVtYmVyO31lbHNle2N1cnJlbnROYW1lPWN1cnJl bnRGaWVsZC5zdWJzdHJpbmcoMCxjdXJyZW50RmllbGQuaW5kZXhPZignPScpKTtu YW1lQmVnaW49Y3VycmVudE5hbWUubWF0Y2goL1xTKy8pO2lmKG5hbWVCZWdpbj09 bnVsbCl7Y3VycmVudFBhcmFtTnVtYmVyLS07Y29udGludWU7fQpuYW1lQmVnaW5J bmRleD1uYW1lQmVnaW4uaW5kZXgrb2xkRGl2aWRlcisxO25hbWVFbmQ9Y3VycmVu dE5hbWUubWF0Y2goL1teXHNdXHMqJC8pO2lmKG5hbWVFbmQ9PW51bGwpe2NvbnRp bnVlO30KbmFtZUVuZEluZGV4PW5hbWVFbmQuaW5kZXgrb2xkRGl2aWRlcisyO3Jh bmdlcy5wdXNoKG5ldyBSYW5nZShyYW5nZXNbcmFuZ2VzLmxlbmd0aC0xXS5lbmQs bmFtZUJlZ2luSW5kZXgpKTtuYW1lSW5kZXg9cmFuZ2VzLnB1c2gobmV3IFJhbmdl KG5hbWVCZWdpbkluZGV4LG5hbWVFbmRJbmRleCkpLTE7Y3VycmVudFZhbHVlPWN1 cnJlbnRGaWVsZC5zdWJzdHJpbmcoY3VycmVudEZpZWxkLmluZGV4T2YoJz0nKSsx KTtvbGREaXZpZGVyKz1jdXJyZW50RmllbGQuaW5kZXhPZignPScpKzE7dmFsdWVC ZWdpbkluZGV4PW9sZERpdmlkZXIrMTt2YWx1ZUVuZEluZGV4PW9sZERpdmlkZXIr MTt2YWx1ZUJlZ2luPWN1cnJlbnRWYWx1ZS5tYXRjaCgvXFMrLyk7aWYodmFsdWVC ZWdpbiE9bnVsbCl7dmFsdWVCZWdpbkluZGV4PXZhbHVlQmVnaW4uaW5kZXgrb2xk RGl2aWRlcisxO3ZhbHVlRW5kPWN1cnJlbnRWYWx1ZS5tYXRjaCgvW15cc11ccyok Lyk7aWYodmFsdWVFbmQ9PW51bGwpe2NvbnRpbnVlO30KdmFsdWVFbmRJbmRleD12 YWx1ZUVuZC5pbmRleCtvbGREaXZpZGVyKzI7fQplcXVhbHNJbmRleD1yYW5nZXMu cHVzaChuZXcgUmFuZ2UocmFuZ2VzW3Jhbmdlcy5sZW5ndGgtMV0uZW5kLHZhbHVl QmVnaW5JbmRleCkpLTE7dmFsdWVJbmRleD1yYW5nZXMucHVzaChuZXcgUmFuZ2Uo dmFsdWVCZWdpbkluZGV4LHZhbHVlRW5kSW5kZXgpKS0xO3BhcmFtcy5wdXNoKG5l dyBQYXJhbSh3aWtpdGV4dC5zdWJzdHJpbmcobmFtZUJlZ2luSW5kZXgsbmFtZUVu ZEluZGV4KSx3aWtpdGV4dC5zdWJzdHJpbmcodmFsdWVCZWdpbkluZGV4LHZhbHVl RW5kSW5kZXgpLGN1cnJlbnRQYXJhbU51bWJlcixuYW1lSW5kZXgsZXF1YWxzSW5k ZXgsdmFsdWVJbmRleCkpO3BhcmFtc0J5TmFtZVt3aWtpdGV4dC5zdWJzdHJpbmco bmFtZUJlZ2luSW5kZXgsbmFtZUVuZEluZGV4KV09Y3VycmVudFBhcmFtTnVtYmVy O319CnJhbmdlcy5wdXNoKG5ldyBSYW5nZSh2YWx1ZUVuZEluZGV4LHdpa2l0ZXh0 Lmxlbmd0aCkpO3RoaXMucmFuZ2VzPXJhbmdlczt0aGlzLndpa2l0ZXh0PXdpa2l0 ZXh0O3RoaXMucGFyYW1zPXBhcmFtczt0aGlzLnBhcmFtc0J5TmFtZT1wYXJhbXNC eU5hbWU7dGhpcy50ZW1wbGF0ZU5hbWVJbmRleD10ZW1wbGF0ZU5hbWVJbmRleDt9 fX07fSkoalF1ZXJ5KTsoZnVuY3Rpb24oJCl7JC53aWtpRWRpdG9yLm1vZHVsZXMu dG9jPXsnYnJvd3NlcnMnOnsnbHRyJzp7J21zaWUnOltbJz49Jyw3XV0sJ2ZpcmVm b3gnOltbJz49JywzXV0sJ29wZXJhJzpbWyc+PScsMTBdXSwnc2FmYXJpJzpbWyc+ PScsNF1dLCdjaHJvbWUnOltbJz49Jyw0XV19LCdydGwnOnsnbXNpZSc6W1snPj0n LDhdXSwnZmlyZWZveCc6W1snPj0nLDNdXSwnb3BlcmEnOltbJz49JywxMF1dLCdz YWZhcmknOltbJz49Jyw0XV0sJ2Nocm9tZSc6W1snPj0nLDRdXX19LCdyZXEnOlsn aWZyYW1lJ10sJ25hbWUnOid0b2MnLGNmZzp7ZGVmYXVsdFdpZHRoOicxNjZweCcs bWluaW11bVdpZHRoOic3MHB4Jyx0ZXh0TWluaW11bVdpZHRoOic0NTBweCcsZmxl eFByb3BlcnR5OidtYXJnaW5SaWdodCcscnRsOmZhbHNlfSxhcGk6e30sZXZ0Ontj aGFuZ2U6ZnVuY3Rpb24oY29udGV4dCxldmVudCl7JC53aWtpRWRpdG9yLm1vZHVs ZXMudG9jLmZuLnVwZGF0ZShjb250ZXh0KTt9LHJlYWR5OmZ1bmN0aW9uKGNvbnRl eHQsZXZlbnQpeyQud2lraUVkaXRvci5tb2R1bGVzLnRvYy5mbi5idWlsZChjb250 ZXh0KTtjb250ZXh0LiRjb250ZW50LnBhcmVudCgpLmJsdXIoZnVuY3Rpb24oKXt2 YXIgY29udGV4dD1ldmVudC5kYXRhLmNvbnRleHQ7JC53aWtpRWRpdG9yLm1vZHVs ZXMudG9jLmZuLnVuaGlnaGxpZ2h0KGNvbnRleHQpO30pOyQud2lraUVkaXRvci5t b2R1bGVzLnRvYy5ldnQucmVzaXplKGNvbnRleHQpO30scmVzaXplOmZ1bmN0aW9u KGNvbnRleHQsZXZlbnQpe3ZhciBhdmFpbGFibGVXaWR0aD1jb250ZXh0LiR3aWtp dGV4dC53aWR0aCgpLXBhcnNlRmxvYXQoJC53aWtpRWRpdG9yLm1vZHVsZXMudG9j LmNmZy50ZXh0TWluaW11bVdpZHRoKSx0b3RhbE1pbldpZHRoPXBhcnNlRmxvYXQo JC53aWtpRWRpdG9yLm1vZHVsZXMudG9jLmNmZy5taW5pbXVtV2lkdGgpKwpwYXJz ZUZsb2F0KCQud2lraUVkaXRvci5tb2R1bGVzLnRvYy5jZmcudGV4dE1pbmltdW1X aWR0aCk7Y29udGV4dC4kdWkuZmluZCgnLndpa2lFZGl0b3ItdWktcmlnaHQnKS5y ZXNpemFibGUoJ29wdGlvbicsJ21heFdpZHRoJyxhdmFpbGFibGVXaWR0aCk7aWYo Y29udGV4dC5tb2R1bGVzLnRvYy4kdG9jLmRhdGEoJ3Bvc2l0aW9uTW9kZScpIT0n ZGlzYWJsZWQnJiZjb250ZXh0LiR3aWtpdGV4dC53aWR0aCgpPHRvdGFsTWluV2lk dGgpeyQud2lraUVkaXRvci5tb2R1bGVzLnRvYy5mbi5kaXNhYmxlKGNvbnRleHQp O31lbHNlIGlmKGNvbnRleHQubW9kdWxlcy50b2MuJHRvYy5kYXRhKCdwb3NpdGlv bk1vZGUnKT09J2Rpc2FibGVkJyYmY29udGV4dC4kd2lraXRleHQud2lkdGgoKT50 b3RhbE1pbldpZHRoKXskLndpa2lFZGl0b3IubW9kdWxlcy50b2MuZm4uZW5hYmxl KGNvbnRleHQpO31lbHNlIGlmKGNvbnRleHQubW9kdWxlcy50b2MuJHRvYy5kYXRh KCdwb3NpdGlvbk1vZGUnKT09J3JlZ3VsYXInJiZjb250ZXh0LiR1aS5maW5kKCcu d2lraUVkaXRvci11aS1yaWdodCcpLndpZHRoKCk+YXZhaWxhYmxlV2lkdGgpeyQu d2lraUVkaXRvci5tb2R1bGVzLnRvYy5mbi5zd2l0Y2hMYXlvdXQoY29udGV4dCk7 fWVsc2UgaWYoY29udGV4dC5tb2R1bGVzLnRvYy4kdG9jLmRhdGEoJ3Bvc2l0aW9u TW9kZScpPT0nZ29vZnknJiZjb250ZXh0Lm1vZHVsZXMudG9jLiR0b2MuZGF0YSgn cHJldmlvdXNXaWR0aCcpPGNvbnRleHQuJHdpa2l0ZXh0LndpZHRoKCkpeyQud2lr aUVkaXRvci5tb2R1bGVzLnRvYy5mbi5zd2l0Y2hMYXlvdXQoY29udGV4dCk7fQpp Zihjb250ZXh0Lm1vZHVsZXMudG9jLiR0b2MuZGF0YSgncG9zaXRpb25Nb2RlJyk9 PSdnb29meScpe2NvbnRleHQubW9kdWxlcy50b2MuJHRvYy5maW5kKCdkaXYnKS5h dXRvRWxsaXBzaXMoeydwb3NpdGlvbic6J3JpZ2h0JywndG9vbHRpcCc6dHJ1ZSwn cmVzdG9yZVRleHQnOnRydWV9KTt9CmlmKCFjb250ZXh0Lm1vZHVsZXMudG9jLiR0 b2MuZGF0YSgnY29sbGFwc2VkJykpe2NvbnRleHQubW9kdWxlcy50b2MuJHRvYy5o ZWlnaHQoY29udGV4dC4kdWkuZmluZCgnLndpa2lFZGl0b3ItdWktbGVmdCcpLmhl aWdodCgpLQpjb250ZXh0LiR1aS5maW5kKCcudGFiLXRvYycpLm91dGVySGVpZ2h0 KCkpO30KY29udGV4dC5tb2R1bGVzLnRvYy4kdG9jLmRhdGEoJ3ByZXZpb3VzV2lk dGgnLGNvbnRleHQuJHdpa2l0ZXh0LndpZHRoKCkpO30sbWFyazpmdW5jdGlvbihj b250ZXh0LGV2ZW50KXt2YXIgaGFzaD0nJzt2YXIgbWFya2Vycz1jb250ZXh0Lm1v ZHVsZXMuaGlnaGxpZ2h0Lm1hcmtlcnM7dmFyIHRva2VuQXJyYXk9Y29udGV4dC5t b2R1bGVzLmhpZ2hsaWdodC50b2tlbkFycmF5O3ZhciBvdXRsaW5lPWNvbnRleHQu ZGF0YS5vdXRsaW5lPVtdO3ZhciBoPTA7Zm9yKHZhciBpPTA7aTx0b2tlbkFycmF5 Lmxlbmd0aDtpKyspe2lmKHRva2VuQXJyYXlbaV0ubGFiZWwhPSdUT0NfSEVBREVS Jyl7Y29udGludWU7fQpoKys7bWFya2Vycy5wdXNoKHtpbmRleDpoLHN0YXJ0OnRv a2VuQXJyYXlbaV0udG9rZW5TdGFydCxlbmQ6dG9rZW5BcnJheVtpXS5vZmZzZXQs dHlwZTondG9jJyxhbmNob3I6J3RhZycsYWZ0ZXJXcmFwOmZ1bmN0aW9uKG5vZGUp e3ZhciBtYXJrZXI9JChub2RlKS5kYXRhKCdtYXJrZXInKTskKG5vZGUpLmFkZENs YXNzKCd3aWtpRWRpdG9yLXRvYy1oZWFkZXInKS5hZGRDbGFzcygnd2lraUVkaXRv ci10b2Mtc2VjdGlvbi0nK21hcmtlci5pbmRleCkuZGF0YSgnc2VjdGlvbicsbWFy a2VyLmluZGV4KTt9LGJlZm9yZVVud3JhcDpmdW5jdGlvbihub2RlKXskKG5vZGUp LnJlbW92ZUNsYXNzKCd3aWtpRWRpdG9yLXRvYy1oZWFkZXInKS5yZW1vdmVDbGFz cygnd2lraUVkaXRvci10b2Mtc2VjdGlvbi0nKyQobm9kZSkuZGF0YSgnc2VjdGlv bicpKTt9LG9uU2tpcDpmdW5jdGlvbihub2RlKXt2YXIgbWFya2VyPSQobm9kZSku ZGF0YSgnbWFya2VyJyk7aWYoJChub2RlKS5kYXRhKCdzZWN0aW9uJykhPW1hcmtl ci5pbmRleCl7JChub2RlKS5yZW1vdmVDbGFzcygnd2lraUVkaXRvci10b2Mtc2Vj dGlvbi0nKyQobm9kZSkuZGF0YSgnc2VjdGlvbicpKS5hZGRDbGFzcygnd2lraUVk aXRvci10b2Mtc2VjdGlvbi0nK21hcmtlci5pbmRleCkuZGF0YSgnc2VjdGlvbics bWFya2VyLmluZGV4KTt9fSxnZXRBbmNob3I6ZnVuY3Rpb24oY2ExLGNhMil7cmV0 dXJuICQoY2ExLnBhcmVudE5vZGUpLmlzKCcud2lraUVkaXRvci10b2MtaGVhZGVy Jyk/Y2ExLnBhcmVudE5vZGU6bnVsbDt9fSk7aGFzaCs9dG9rZW5BcnJheVtpXS5t YXRjaFsyXSsnXG4nO291dGxpbmUucHVzaCh7J3RleHQnOnRva2VuQXJyYXlbaV0u bWF0Y2hbMl0sJ2xldmVsJzp0b2tlbkFycmF5W2ldLm1hdGNoWzFdLmxlbmd0aCwn aW5kZXgnOmh9KTt9CmlmKHR5cGVvZiBjb250ZXh0Lm1vZHVsZXMudG9jLmxhc3RI YXNoPT0ndW5kZWZpbmVkJ3x8Y29udGV4dC5tb2R1bGVzLnRvYy5sYXN0SGFzaCE9 PWhhc2gpeyQud2lraUVkaXRvci5tb2R1bGVzLnRvYy5mbi5idWlsZChjb250ZXh0 KTskLndpa2lFZGl0b3IubW9kdWxlcy50b2MuZm4udXBkYXRlKGNvbnRleHQpO2Nv bnRleHQubW9kdWxlcy50b2MubGFzdEhhc2g9aGFzaDt9fX0sZXhwOlt7J3JlZ2V4 JzovXig9ezEsNn0pKFteXHJcbl0rPylcMVxzKiQvbSwnbGFiZWwnOidUT0NfSEVB REVSJywnbWFya0FmdGVyJzp0cnVlfV0sZm46e2NyZWF0ZTpmdW5jdGlvbihjb250 ZXh0LGNvbmZpZyl7aWYoJyR0b2MnaW4gY29udGV4dC5tb2R1bGVzLnRvYyl7cmV0 dXJuO30KJC53aWtpRWRpdG9yLm1vZHVsZXMudG9jLmNmZy5ydGw9Y29uZmlnLnJ0 bDskLndpa2lFZGl0b3IubW9kdWxlcy50b2MuY2ZnLmZsZXhQcm9wZXJ0eT1jb25m aWcucnRsPydtYXJnaW5MZWZ0JzonbWFyZ2luUmlnaHQnO3ZhciBoZWlnaHQ9Y29u dGV4dC4kdWkuZmluZCgnLndpa2lFZGl0b3ItdWktbGVmdCcpLmhlaWdodCgpO2Nv bnRleHQubW9kdWxlcy50b2MuJHRvYz0kKCc8ZGl2IC8+JykuYWRkQ2xhc3MoJ3dp a2lFZGl0b3ItdWktdG9jJykuZGF0YSgnY29udGV4dCcsY29udGV4dCkuZGF0YSgn cG9zaXRpb25Nb2RlJywncmVndWxhcicpLmRhdGEoJ2NvbGxhcHNlZCcsZmFsc2Up O2NvbnRleHQuJHVpLmZpbmQoJy53aWtpRWRpdG9yLXVpLXJpZ2h0JykuYXBwZW5k KGNvbnRleHQubW9kdWxlcy50b2MuJHRvYyk7Y29udGV4dC5tb2R1bGVzLnRvYy4k dG9jLmhlaWdodChjb250ZXh0LiR1aS5maW5kKCcud2lraUVkaXRvci11aS1sZWZ0 JykuaGVpZ2h0KCkpOyQud2lraUVkaXRvci5tb2R1bGVzLnRvYy5mbi5yZWRyYXco Y29udGV4dCwkLndpa2lFZGl0b3IubW9kdWxlcy50b2MuY2ZnLmRlZmF1bHRXaWR0 aCk7fSxyZWRyYXc6ZnVuY3Rpb24oY29udGV4dCxmaXhlZFdpZHRoKXt2YXIgZml4 ZWRXaWR0aD1wYXJzZUZsb2F0KGZpeGVkV2lkdGgpO2lmKGNvbnRleHQubW9kdWxl cy50b2MuJHRvYy5kYXRhKCdwb3NpdGlvbk1vZGUnKT09J3JlZ3VsYXInKXtjb250 ZXh0LiR1aS5maW5kKCcud2lraUVkaXRvci11aS1yaWdodCcpLmNzcygnd2lkdGgn LGZpeGVkV2lkdGgrJ3B4Jyk7Y29udGV4dC4kdWkuZmluZCgnLndpa2lFZGl0b3It dWktbGVmdCcpLmNzcygkLndpa2lFZGl0b3IubW9kdWxlcy50b2MuY2ZnLmZsZXhQ cm9wZXJ0eSwoLTEqZml4ZWRXaWR0aCkrJ3B4JykuY2hpbGRyZW4oKS5jc3MoJC53 aWtpRWRpdG9yLm1vZHVsZXMudG9jLmNmZy5mbGV4UHJvcGVydHksZml4ZWRXaWR0 aCsncHgnKTt9ZWxzZSBpZihjb250ZXh0Lm1vZHVsZXMudG9jLiR0b2MuZGF0YSgn cG9zaXRpb25Nb2RlJyk9PSdnb29meScpe2NvbnRleHQuJHVpLmZpbmQoJy53aWtp RWRpdG9yLXVpLWxlZnQnKS5jc3MoJ3dpZHRoJyxmaXhlZFdpZHRoKTtjb250ZXh0 LiR1aS5maW5kKCcud2lraUVkaXRvci11aS1yaWdodCcpLmNzcygkLndpa2lFZGl0 b3IubW9kdWxlcy50b2MuY2ZnLnJ0bD8ncmlnaHQnOidsZWZ0JyxmaXhlZFdpZHRo KTtjb250ZXh0LiR3aWtpdGV4dC5jc3MoJ2hlaWdodCcsY29udGV4dC4kdWkuZmlu ZCgnLndpa2lFZGl0b3ItdWktcmlnaHQnKS5oZWlnaHQoKSk7fX0sc3dpdGNoTGF5 b3V0OmZ1bmN0aW9uKGNvbnRleHQpe3ZhciB3aWR0aCxoZWlnaHQ9Y29udGV4dC4k dWkuZmluZCgnLndpa2lFZGl0b3ItdWktcmlnaHQnKS5oZWlnaHQoKTtpZihjb250 ZXh0Lm1vZHVsZXMudG9jLiR0b2MuZGF0YSgncG9zaXRpb25Nb2RlJyk9PSdyZWd1 bGFyJyYmIWNvbnRleHQubW9kdWxlcy50b2MuJHRvYy5kYXRhKCdjb2xsYXBzZWQn KSl7Y29udGV4dC5tb2R1bGVzLnRvYy4kdG9jLmRhdGEoJ3Bvc2l0aW9uTW9kZScs J2dvb2Z5Jyk7Y29udGV4dC5tb2R1bGVzLnRvYy4kdG9jLmRhdGEoJ3Bvc2l0aW9u TW9kZUNoYW5nZUF0Jyxjb250ZXh0LiR1aS5maW5kKCcud2lraUVkaXRvci11aS1y aWdodCcpLndpZHRoKCkpO3dpZHRoPSQud2lraUVkaXRvci5tb2R1bGVzLnRvYy5j ZmcudGV4dE1pbmltdW1XaWR0aDtjb250ZXh0LiR1aS5maW5kKCcud2lraUVkaXRv ci11aS1sZWZ0JykuY3NzKCQud2lraUVkaXRvci5tb2R1bGVzLnRvYy5jZmcuZmxl eFByb3BlcnR5LCcnKS5jc3Moeydwb3NpdGlvbic6J2Fic29sdXRlJywnZmxvYXQn Oidub25lJywnbGVmdCc6JC53aWtpRWRpdG9yLm1vZHVsZXMudG9jLmNmZy5ydGw/ J2F1dG8nOjAsJ3JpZ2h0JzokLndpa2lFZGl0b3IubW9kdWxlcy50b2MuY2ZnLnJ0 bD8wOidhdXRvJ30pLmNoaWxkcmVuKCkuY3NzKCQud2lraUVkaXRvci5tb2R1bGVz LnRvYy5jZmcuZmxleFByb3BlcnR5LCcnKTtjb250ZXh0LiR1aS5maW5kKCcud2lr aUVkaXRvci11aS1yaWdodCcpLmNzcyh7J3dpZHRoJzonYXV0bycsJ3Bvc2l0aW9u JzonYWJzb2x1dGUnLCdmbG9hdCc6J25vbmUnLCdyaWdodCc6JC53aWtpRWRpdG9y Lm1vZHVsZXMudG9jLmNmZy5ydGw/J2F1dG8nOjAsJ2xlZnQnOiQud2lraUVkaXRv ci5tb2R1bGVzLnRvYy5jZmcucnRsPzA6J2F1dG8nfSk7Y29udGV4dC4kd2lraXRl eHQuY3NzKCdwb3NpdGlvbicsJ3JlbGF0aXZlJyk7fWVsc2UgaWYoY29udGV4dC5t b2R1bGVzLnRvYy4kdG9jLmRhdGEoJ3Bvc2l0aW9uTW9kZScpPT0nZ29vZnknKXtj b250ZXh0Lm1vZHVsZXMudG9jLiR0b2MuZGF0YSgncG9zaXRpb25Nb2RlJywncmVn dWxhcicpO3dpZHRoPWNvbnRleHQuJHdpa2l0ZXh0LndpZHRoKCktY29udGV4dC4k dWkuZmluZCgnLndpa2lFZGl0b3ItdWktbGVmdCcpLndpZHRoKCk7aWYod2lkdGg+ Y29udGV4dC5tb2R1bGVzLnRvYy4kdG9jLmRhdGEoJ3Bvc2l0aW9uTW9kZUNoYW5n ZUF0Jykpe3dpZHRoPWNvbnRleHQubW9kdWxlcy50b2MuJHRvYy5kYXRhKCdwb3Np dGlvbk1vZGVDaGFuZ2VBdCcpO30KY29udGV4dC4kd2lraXRleHQuY3NzKHsncG9z aXRpb24nOicnLCdoZWlnaHQnOicnfSk7Y29udGV4dC4kdWkuZmluZCgnLndpa2lF ZGl0b3ItdWktcmlnaHQnKS5jc3MoJC53aWtpRWRpdG9yLm1vZHVsZXMudG9jLmNm Zy5mbGV4UHJvcGVydHksJycpLmNzcyh7J3Bvc2l0aW9uJzonJywnbGVmdCc6Jycs J3JpZ2h0JzonJywnZmxvYXQnOicnLCd0b3AnOicnLCdoZWlnaHQnOicnfSk7Y29u dGV4dC4kdWkuZmluZCgnLndpa2lFZGl0b3ItdWktbGVmdCcpLmNzcyh7J3dpZHRo JzonJywncG9zaXRpb24nOicnLCdsZWZ0JzonJywnZmxvYXQnOicnLCdyaWdodCc6 Jyd9KTt9CiQud2lraUVkaXRvci5tb2R1bGVzLnRvYy5mbi5yZWRyYXcoY29udGV4 dCx3aWR0aCk7fSxkaXNhYmxlOmZ1bmN0aW9uKGNvbnRleHQpe2lmKGNvbnRleHQu bW9kdWxlcy50b2MuJHRvYy5kYXRhKCdjb2xsYXBzZWQnKSl7Y29udGV4dC4kdWku ZmluZCgnLndpa2lFZGl0b3ItdWktdG9jLWV4cGFuZENvbnRyb2wnKS5oaWRlKCk7 fWVsc2V7aWYoY29udGV4dC5tb2R1bGVzLnRvYy4kdG9jLmRhdGEoJ3Bvc2l0aW9u TW9kZScpPT0nZ29vZnknKXskLndpa2lFZGl0b3IubW9kdWxlcy50b2MuZm4uc3dp dGNoTGF5b3V0KGNvbnRleHQpO30KY29udGV4dC4kdWkuZmluZCgnLndpa2lFZGl0 b3ItdWktcmlnaHQnKS5oaWRlKCk7Y29udGV4dC4kdWkuZmluZCgnLndpa2lFZGl0 b3ItdWktbGVmdCcpLmNzcygkLndpa2lFZGl0b3IubW9kdWxlcy50b2MuY2ZnLmZs ZXhQcm9wZXJ0eSwnJykuY2hpbGRyZW4oKS5jc3MoJC53aWtpRWRpdG9yLm1vZHVs ZXMudG9jLmNmZy5mbGV4UHJvcGVydHksJycpO30KY29udGV4dC5tb2R1bGVzLnRv Yy4kdG9jLmRhdGEoJ3Bvc2l0aW9uTW9kZScsJ2Rpc2FibGVkJyk7fSxlbmFibGU6 ZnVuY3Rpb24oY29udGV4dCl7Y29udGV4dC5tb2R1bGVzLnRvYy4kdG9jLmRhdGEo J3Bvc2l0aW9uTW9kZScsJ3JlZ3VsYXInKTtpZihjb250ZXh0Lm1vZHVsZXMudG9j LiR0b2MuZGF0YSgnY29sbGFwc2VkJykpe2NvbnRleHQuJHVpLmZpbmQoJy53aWtp RWRpdG9yLXVpLXRvYy1leHBhbmRDb250cm9sJykuc2hvdygpO31lbHNle2NvbnRl eHQuJHVpLmZpbmQoJy53aWtpRWRpdG9yLXVpLXJpZ2h0Jykuc2hvdygpOyQud2lr aUVkaXRvci5tb2R1bGVzLnRvYy5mbi5yZWRyYXcoY29udGV4dCwkLndpa2lFZGl0 b3IubW9kdWxlcy50b2MuY2ZnLm1pbmltdW1XaWR0aCk7Y29udGV4dC5tb2R1bGVz LnRvYy4kdG9jLmZpbmQoJ2RpdicpLmF1dG9FbGxpcHNpcyh7J3Bvc2l0aW9uJzon cmlnaHQnLCd0b29sdGlwJzp0cnVlLCdyZXN0b3JlVGV4dCc6dHJ1ZX0pO319LHVu aGlnaGxpZ2h0OmZ1bmN0aW9uKGNvbnRleHQpe2lmKGNvbnRleHQpe2NvbnRleHQu bW9kdWxlcy50b2MuJHRvYy5maW5kKCdkaXYnKS5yZW1vdmVDbGFzcygnY3VycmVu dCcpO319LHVwZGF0ZTpmdW5jdGlvbihjb250ZXh0KXt2YXIgZGl2PWNvbnRleHQu Zm4uYmVmb3JlU2VsZWN0aW9uKCd3aWtpRWRpdG9yLXRvYy1oZWFkZXInKTtpZihk aXY9PT1udWxsKXtyZXR1cm47fQokLndpa2lFZGl0b3IubW9kdWxlcy50b2MuZm4u dW5oaWdobGlnaHQoY29udGV4dCk7dmFyIHNlY3Rpb249ZGl2LmRhdGEoJ3NlY3Rp b24nKXx8MDtpZihjb250ZXh0LmRhdGEub3V0bGluZS5sZW5ndGg+MCl7dmFyIHNl Y3Rpb25MaW5rPWNvbnRleHQubW9kdWxlcy50b2MuJHRvYy5maW5kKCdkaXYuc2Vj dGlvbi0nK3NlY3Rpb24pO3NlY3Rpb25MaW5rLmFkZENsYXNzKCdjdXJyZW50Jyk7 dmFyIHJlbFRvcD1zZWN0aW9uTGluay5vZmZzZXQoKS50b3AtY29udGV4dC5tb2R1 bGVzLnRvYy4kdG9jLm9mZnNldCgpLnRvcDt2YXIgc2Nyb2xsVG9wPWNvbnRleHQu bW9kdWxlcy50b2MuJHRvYy5zY3JvbGxUb3AoKTt2YXIgZGl2SGVpZ2h0PWNvbnRl eHQubW9kdWxlcy50b2MuJHRvYy5oZWlnaHQoKTt2YXIgc2VjdGlvbkhlaWdodD1z ZWN0aW9uTGluay5oZWlnaHQoKTtpZihyZWxUb3A8MCkKY29udGV4dC5tb2R1bGVz LnRvYy4kdG9jLnNjcm9sbFRvcChzY3JvbGxUb3ArcmVsVG9wKTtlbHNlIGlmKHJl bFRvcCtzZWN0aW9uSGVpZ2h0PmRpdkhlaWdodCkKY29udGV4dC5tb2R1bGVzLnRv Yy4kdG9jLnNjcm9sbFRvcChzY3JvbGxUb3ArcmVsVG9wK3NlY3Rpb25IZWlnaHQt ZGl2SGVpZ2h0KTt9fSxjb2xsYXBzZTpmdW5jdGlvbihldmVudCl7dmFyICR0aGlz PSQodGhpcyksY29udGV4dD0kdGhpcy5kYXRhKCdjb250ZXh0Jyk7aWYoY29udGV4 dC5tb2R1bGVzLnRvYy4kdG9jLmRhdGEoJ3Bvc2l0aW9uTW9kZScpPT0nZ29vZnkn KXskLndpa2lFZGl0b3IubW9kdWxlcy50b2MuZm4uc3dpdGNoTGF5b3V0KGNvbnRl eHQpO30KdmFyIHBUPSR0aGlzLnBhcmVudCgpLnBvc2l0aW9uKCkudG9wLTE7Y29u dGV4dC5tb2R1bGVzLnRvYy4kdG9jLmRhdGEoJ2NvbGxhcHNlZCcsdHJ1ZSk7dmFy IGxlZnRQYXJhbT17fSxsZWZ0Q2hpbGRQYXJhbT17fTtsZWZ0UGFyYW1bJC53aWtp RWRpdG9yLm1vZHVsZXMudG9jLmNmZy5mbGV4UHJvcGVydHldPSctMXB4JztsZWZ0 Q2hpbGRQYXJhbVskLndpa2lFZGl0b3IubW9kdWxlcy50b2MuY2ZnLmZsZXhQcm9w ZXJ0eV09JzFweCc7Y29udGV4dC4kdWkuZmluZCgnLndpa2lFZGl0b3ItdWktbGVm dCcpLmFuaW1hdGUobGVmdFBhcmFtLCdmYXN0JyxmdW5jdGlvbigpeyQodGhpcyku Y3NzKCQud2lraUVkaXRvci5tb2R1bGVzLnRvYy5jZmcuZmxleFByb3BlcnR5LDAp O30pLmNoaWxkcmVuKCkuYW5pbWF0ZShsZWZ0Q2hpbGRQYXJhbSwnZmFzdCcsZnVu Y3Rpb24oKXskKHRoaXMpLmNzcygkLndpa2lFZGl0b3IubW9kdWxlcy50b2MuY2Zn LmZsZXhQcm9wZXJ0eSwwKTt9KTtjb250ZXh0LiR1aS5maW5kKCcud2lraUVkaXRv ci11aS1yaWdodCcpLmNzcyh7J21hcmdpblRvcCc6JzFweCcsJ3Bvc2l0aW9uJzon YWJzb2x1dGUnLCdsZWZ0JzokLndpa2lFZGl0b3IubW9kdWxlcy50b2MuY2ZnLnJ0 bD8wOidhdXRvJywncmlnaHQnOiQud2lraUVkaXRvci5tb2R1bGVzLnRvYy5jZmcu cnRsPydhdXRvJzowLCd0b3AnOnBUfSkuZmFkZU91dCgnZmFzdCcsZnVuY3Rpb24o KXskKHRoaXMpLmhpZGUoKS5jc3MoeydtYXJnaW5Ub3AnOicwJywnd2lkdGgnOicx cHgnfSk7Y29udGV4dC4kdWkuZmluZCgnLndpa2lFZGl0b3ItdWktdG9jLWV4cGFu ZENvbnRyb2wnKS5mYWRlSW4oJ2Zhc3QnKTtjb250ZXh0LmZuLnRyaWdnZXIoJ3Rv Y0NvbGxhcHNlJyk7Y29udGV4dC5mbi50cmlnZ2VyKCdyZXNpemUnKTt9KTskLmNv b2tpZSgnd2lraUVkaXRvci0nK2NvbnRleHQuaW5zdGFuY2UrJy10b2Mtd2lkdGgn LDApO3JldHVybiBmYWxzZTt9LGV4cGFuZDpmdW5jdGlvbihldmVudCl7dmFyICR0 aGlzPSQodGhpcyksY29udGV4dD0kdGhpcy5kYXRhKCdjb250ZXh0Jyksb3Blbldp ZHRoPXBhcnNlRmxvYXQoY29udGV4dC5tb2R1bGVzLnRvYy4kdG9jLmRhdGEoJ29w ZW5XaWR0aCcpKSxhdmFpbGFibGVTcGFjZT1jb250ZXh0LiR3aWtpdGV4dC53aWR0 aCgpLXBhcnNlRmxvYXQoJC53aWtpRWRpdG9yLm1vZHVsZXMudG9jLmNmZy50ZXh0 TWluaW11bVdpZHRoKTtpZihhdmFpbGFibGVTcGFjZTwkLndpa2lFZGl0b3IubW9k dWxlcy50b2MuY2ZnLnRleHRNaW5tdW1XaWR0aClyZXR1cm4gZmFsc2U7Y29udGV4 dC5tb2R1bGVzLnRvYy4kdG9jLmRhdGEoJ2NvbGxhcHNlZCcsZmFsc2UpO2lmKGF2 YWlsYWJsZVNwYWNlPG9wZW5XaWR0aClvcGVuV2lkdGg9YXZhaWxhYmxlU3BhY2U7 Y29udGV4dC4kdWkuZmluZCgnLndpa2lFZGl0b3ItdWktdG9jLWV4cGFuZENvbnRy b2wnKS5oaWRlKCk7dmFyIGxlZnRQYXJhbT17fSxsZWZ0Q2hpbGRQYXJhbT17fTts ZWZ0UGFyYW1bJC53aWtpRWRpdG9yLm1vZHVsZXMudG9jLmNmZy5mbGV4UHJvcGVy dHldPXBhcnNlRmxvYXQob3BlbldpZHRoKSotMTtsZWZ0Q2hpbGRQYXJhbVskLndp a2lFZGl0b3IubW9kdWxlcy50b2MuY2ZnLmZsZXhQcm9wZXJ0eV09b3BlbldpZHRo O2NvbnRleHQuJHVpLmZpbmQoJy53aWtpRWRpdG9yLXVpLWxlZnQnKS5hbmltYXRl KGxlZnRQYXJhbSwnZmFzdCcpLmNoaWxkcmVuKCkuYW5pbWF0ZShsZWZ0Q2hpbGRQ YXJhbSwnZmFzdCcpO2NvbnRleHQuJHVpLmZpbmQoJy53aWtpRWRpdG9yLXVpLXJp Z2h0Jykuc2hvdygpLmNzcygnbWFyZ2luVG9wJywnMXB4JykuYW5pbWF0ZSh7J3dp ZHRoJzpvcGVuV2lkdGh9LCdmYXN0JyxmdW5jdGlvbigpe2NvbnRleHQuJGNvbnRl bnQudHJpZ2dlcignbW91c2V1cCcpOyQodGhpcykuY3NzKHsnbWFyZ2luVG9wJzon MCcsJ3Bvc2l0aW9uJzoncmVsYXRpdmUnLCdyaWdodCc6J2F1dG8nLCdsZWZ0Jzon YXV0bycsJ3RvcCc6J2F1dG8nfSk7Y29udGV4dC5mbi50cmlnZ2VyKCd0b2NFeHBh bmQnKTtjb250ZXh0LmZuLnRyaWdnZXIoJ3Jlc2l6ZScpO30pOyQuY29va2llKCd3 aWtpRWRpdG9yLScrY29udGV4dC5pbnN0YW5jZSsnLXRvYy13aWR0aCcsY29udGV4 dC5tb2R1bGVzLnRvYy4kdG9jLmRhdGEoJ29wZW5XaWR0aCcpKTtyZXR1cm4gZmFs c2U7fSxidWlsZDpmdW5jdGlvbihjb250ZXh0KXtmdW5jdGlvbiBidWlsZFN0cnVj dHVyZShvdXRsaW5lLG9mZnNldCxsZXZlbCl7aWYob2Zmc2V0PT11bmRlZmluZWQp b2Zmc2V0PTA7aWYobGV2ZWw9PXVuZGVmaW5lZClsZXZlbD0xO3ZhciBzZWN0aW9u cz1bXTtmb3IodmFyIGk9b2Zmc2V0O2k8b3V0bGluZS5sZW5ndGg7aSsrKXtpZihv dXRsaW5lW2ldLm5MZXZlbD09bGV2ZWwpe3ZhciBzdWI9YnVpbGRTdHJ1Y3R1cmUo b3V0bGluZSxpKzEsbGV2ZWwrMSk7aWYoc3ViLmxlbmd0aCl7b3V0bGluZVtpXS5z ZWN0aW9ucz1zdWI7fQpzZWN0aW9uc1tzZWN0aW9ucy5sZW5ndGhdPW91dGxpbmVb aV07fWVsc2UgaWYob3V0bGluZVtpXS5uTGV2ZWw8bGV2ZWwpe2JyZWFrO319CnJl dHVybiBzZWN0aW9uczt9CmZ1bmN0aW9uIGJ1aWxkTGlzdChzdHJ1Y3R1cmUpe3Zh ciBsaXN0PSQoJzx1bCAvPicpO2ZvcihpIGluIHN0cnVjdHVyZSl7dmFyIGRpdj0k KCc8ZGl2IC8+JykuYWRkQ2xhc3MoJ3NlY3Rpb24tJytzdHJ1Y3R1cmVbaV0uaW5k ZXgpLmRhdGEoJ2luZGV4JyxzdHJ1Y3R1cmVbaV0uaW5kZXgpLm1vdXNlZG93bihm dW5jdGlvbigpe3JldHVybiBmYWxzZTt9KS5jbGljayhmdW5jdGlvbihldmVudCl7 dmFyIHdyYXBwZXI9Y29udGV4dC4kY29udGVudC5maW5kKCcud2lraUVkaXRvci10 b2Mtc2VjdGlvbi0nKyQodGhpcykuZGF0YSgnaW5kZXgnKSk7aWYod3JhcHBlci5z aXplKCk9PTApCndyYXBwZXI9Y29udGV4dC4kY29udGVudDtjb250ZXh0LmZuLnNj cm9sbFRvVG9wKHdyYXBwZXIsdHJ1ZSk7Y29udGV4dC4kdGV4dGFyZWEudGV4dFNl bGVjdGlvbignc2V0U2VsZWN0aW9uJyx7J3N0YXJ0JzowLCdzdGFydENvbnRhaW5l cic6d3JhcHBlcn0pO2NvbnRleHQuZm4uaGlnaGxpZ2h0TGluZSgkKHdyYXBwZXIp KTskLndpa2lFZGl0b3IubW9kdWxlcy50b2MuZm4udW5oaWdobGlnaHQoY29udGV4 dCk7JCh0aGlzKS5hZGRDbGFzcygnY3VycmVudCcpO2lmKHR5cGVvZiAkLnRyYWNr QWN0aW9uIT0ndW5kZWZpbmVkJykKJC50cmFja0FjdGlvbignbnRvYy5oZWFkaW5n Jyk7ZXZlbnQucHJldmVudERlZmF1bHQoKTt9KS50ZXh0KHN0cnVjdHVyZVtpXS50 ZXh0KTtpZihzdHJ1Y3R1cmVbaV0udGV4dD09JycpCmRpdi5odG1sKCcmbmJzcDsn KTt2YXIgaXRlbT0kKCc8bGkgLz4nKS5hcHBlbmQoZGl2KTtpZihzdHJ1Y3R1cmVb aV0uc2VjdGlvbnMhPT11bmRlZmluZWQpe2l0ZW0uYXBwZW5kKGJ1aWxkTGlzdChz dHJ1Y3R1cmVbaV0uc2VjdGlvbnMpKTt9Cmxpc3QuYXBwZW5kKGl0ZW0pO30KcmV0 dXJuIGxpc3Q7fQpmdW5jdGlvbiBidWlsZENvbGxhcHNlQ29udHJvbHMoKXt2YXIg JGNvbGxhcHNlQ29udHJvbD0kKCc8ZGl2IC8+JyksJGV4cGFuZENvbnRyb2w9JCgn PGRpdiAvPicpOyRjb2xsYXBzZUNvbnRyb2wuYWRkQ2xhc3MoJ3RhYicpLmFkZENs YXNzKCd0YWItdG9jJykuYXBwZW5kKCc8YSBocmVmPSIjIiAvPicpLm1vdXNlZG93 bihmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCk7cmV0dXJuIGZhbHNlO30p LmJpbmQoJ2NsaWNrLndpa2lFZGl0b3ItdG9jJyxmdW5jdGlvbihlKXtjb250ZXh0 Lm1vZHVsZXMudG9jLiR0b2MudHJpZ2dlcignY29sbGFwc2Uud2lraUVkaXRvci10 b2MnKTtlLnByZXZlbnREZWZhdWx0KCk7cmV0dXJuIGZhbHNlO30pLmZpbmQoJ2En KS50ZXh0KG13LnVzYWJpbGl0eS5nZXRNc2coJ3dpa2llZGl0b3ItdG9jLWhpZGUn KSk7JGV4cGFuZENvbnRyb2wuYWRkQ2xhc3MoJ3dpa2lFZGl0b3ItdWktdG9jLWV4 cGFuZENvbnRyb2wnKS5hcHBlbmQoJzxhIGhyZWY9IiMiIC8+JykubW91c2Vkb3du KGZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKTtyZXR1cm4gZmFsc2U7fSku YmluZCgnY2xpY2sud2lraUVkaXRvci10b2MnLGZ1bmN0aW9uKGUpe2NvbnRleHQu bW9kdWxlcy50b2MuJHRvYy50cmlnZ2VyKCdleHBhbmQud2lraUVkaXRvci10b2Mn KTtlLnByZXZlbnREZWZhdWx0KCk7cmV0dXJuIGZhbHNlO30pLmhpZGUoKS5maW5k KCdhJykudGV4dChtdy51c2FiaWxpdHkuZ2V0TXNnKCd3aWtpZWRpdG9yLXRvYy1z aG93JykpOyRjb2xsYXBzZUNvbnRyb2wuaW5zZXJ0QmVmb3JlKGNvbnRleHQubW9k dWxlcy50b2MuJHRvYyk7Y29udGV4dC4kdWkuZmluZCgnLndpa2lFZGl0b3ItdWkt bGVmdCAud2lraUVkaXRvci11aS10b3AnKS5hcHBlbmQoJGV4cGFuZENvbnRyb2wp O30KZnVuY3Rpb24gYnVpbGRSZXNpemVDb250cm9scygpe2NvbnRleHQuJHVpLmRh dGEoJ3Jlc2l6YWJsZURvbmUnLHRydWUpLmZpbmQoJy53aWtpRWRpdG9yLXVpLXJp Z2h0JykuZGF0YSgnd2lraUVkaXRvci11aS1sZWZ0Jyxjb250ZXh0LiR1aS5maW5k KCcud2lraUVkaXRvci11aS1sZWZ0JykpLnJlc2l6YWJsZSh7aGFuZGxlczondyxl JyxwcmV2ZW50UG9zaXRpb25MZWZ0Q2hhbmdlOnRydWUsbWluV2lkdGg6cGFyc2VG bG9hdCgkLndpa2lFZGl0b3IubW9kdWxlcy50b2MuY2ZnLm1pbmltdW1XaWR0aCks c3RhcnQ6ZnVuY3Rpb24oZSx1aSl7dmFyICR0aGlzPSQodGhpcyk7JCgnPGRpdiAv PicpLmFkZENsYXNzKCd3aWtpRWRpdG9yLXVpLXJlc2l6ZS1tYXNrJykuY3NzKHsn cG9zaXRpb24nOidhYnNvbHV0ZScsJ3otaW5kZXgnOjIsJ2xlZnQnOjAsJ3RvcCc6 MCwnYm90dG9tJzowLCdyaWdodCc6MH0pLmFwcGVuZFRvKGNvbnRleHQuJHVpLmZp bmQoJy53aWtpRWRpdG9yLXVpLWxlZnQnKSk7JHRoaXMucmVzaXphYmxlKCdvcHRp b24nLCdtYXhXaWR0aCcsJHRoaXMucGFyZW50KCkud2lkdGgoKS0KcGFyc2VGbG9h dCgkLndpa2lFZGl0b3IubW9kdWxlcy50b2MuY2ZnLnRleHRNaW5pbXVtV2lkdGgp KTtpZihjb250ZXh0Lm1vZHVsZXMudG9jLiR0b2MuZGF0YSgncG9zaXRpb25Nb2Rl Jyk9PSdnb29meScpeyQud2lraUVkaXRvci5tb2R1bGVzLnRvYy5mbi5zd2l0Y2hM YXlvdXQoY29udGV4dCk7fX0scmVzaXplOmZ1bmN0aW9uKGUsdWkpeyQodGhpcyku Y3NzKHsnd2lkdGgnOnVpLnNpemUud2lkdGgsJ3RvcCc6J2F1dG8nLCdoZWlnaHQn OidhdXRvJ30pLmRhdGEoJ3dpa2lFZGl0b3ItdWktbGVmdCcpLmNzcygkLndpa2lF ZGl0b3IubW9kdWxlcy50b2MuY2ZnLmZsZXhQcm9wZXJ0eSwoLTEqdWkuc2l6ZS53 aWR0aCkpLmNoaWxkcmVuKCkuY3NzKCQud2lraUVkaXRvci5tb2R1bGVzLnRvYy5j ZmcuZmxleFByb3BlcnR5LHVpLnNpemUud2lkdGgpO2NvbnRleHQuZm4udHJpZ2dl cigncmVzaXplJyk7fSxzdG9wOmZ1bmN0aW9uKGUsdWkpe2NvbnRleHQuJHVpLmZp bmQoJy53aWtpRWRpdG9yLXVpLXJlc2l6ZS1tYXNrJykucmVtb3ZlKCk7Y29udGV4 dC4kY29udGVudC50cmlnZ2VyKCdtb3VzZXVwJyk7aWYodWkuc2l6ZS53aWR0aDw9 cGFyc2VGbG9hdCgkLndpa2lFZGl0b3IubW9kdWxlcy50b2MuY2ZnLm1pbmltdW1X aWR0aCkpe2NvbnRleHQubW9kdWxlcy50b2MuJHRvYy50cmlnZ2VyKCdjb2xsYXBz ZS53aWtpRWRpdG9yLXRvYycpO31lbHNle2NvbnRleHQubW9kdWxlcy50b2MuJHRv Yy5maW5kKCdkaXYnKS5hdXRvRWxsaXBzaXMoeydwb3NpdGlvbic6J3JpZ2h0Jywn dG9vbHRpcCc6dHJ1ZSwncmVzdG9yZVRleHQnOnRydWV9KTtjb250ZXh0Lm1vZHVs ZXMudG9jLiR0b2MuZGF0YSgnb3BlbldpZHRoJyx1aS5zaXplLndpZHRoKTskLmNv b2tpZSgnd2lraUVkaXRvci0nK2NvbnRleHQuaW5zdGFuY2UrJy10b2Mtd2lkdGgn LHVpLnNpemUud2lkdGgpO30KY29udGV4dC5mbi50cmlnZ2VyKCdyZXNpemUnKTt9 fSk7dmFyIGhhbmRsZT0kLndpa2lFZGl0b3IubW9kdWxlcy50b2MuY2ZnLnJ0bD8n dyc6J2UnO2NvbnRleHQuJHVpLmZpbmQoJy51aS1yZXNpemFibGUtJytoYW5kbGUp LnJlbW92ZUNsYXNzKCd1aS1yZXNpemFibGUtJytoYW5kbGUpLmFkZENsYXNzKCd1 aS1yZXNpemFibGUtJysoaGFuZGxlPT0ndyc/J2UnOid3JykpLmFkZENsYXNzKCd3 aWtpRWRpdG9yLXVpLXRvYy1yZXNpemUtZ3JpcCcpO2NvbnRleHQubW9kdWxlcy50 b2MuJHRvYy5iaW5kKCdjb2xsYXBzZS53aWtpRWRpdG9yLXRvYycsJC53aWtpRWRp dG9yLm1vZHVsZXMudG9jLmZuLmNvbGxhcHNlKS5iaW5kKCdleHBhbmQud2lraUVk aXRvci10b2MnLCQud2lraUVkaXRvci5tb2R1bGVzLnRvYy5mbi5leHBhbmQpO2Nv bnRleHQubW9kdWxlcy50b2MuJHRvYy5kYXRhKCdvcGVuV2lkdGgnLCQud2lraUVk aXRvci5tb2R1bGVzLnRvYy5jZmcuZGVmYXVsdFdpZHRoKTtpZigkLmNvb2tpZSgn d2lraUVkaXRvci0nK2NvbnRleHQuaW5zdGFuY2UrJy10b2Mtd2lkdGgnKT09MCl7 Y29udGV4dC5tb2R1bGVzLnRvYy4kdG9jLnRyaWdnZXIoJ2NvbGxhcHNlLndpa2lF ZGl0b3ItdG9jJyx7ZGF0YTpjb250ZXh0fSk7fWVsc2UgaWYoJC5jb29raWUoJ3dp a2lFZGl0b3ItJytjb250ZXh0Lmluc3RhbmNlKyctdG9jLXdpZHRoJyk+MCl7dmFy IGluaXRpYWxXaWR0aD0kLmNvb2tpZSgnd2lraUVkaXRvci0nK2NvbnRleHQuaW5z dGFuY2UrJy10b2Mtd2lkdGgnKTtpZihpbml0aWFsV2lkdGg8cGFyc2VGbG9hdCgk Lndpa2lFZGl0b3IubW9kdWxlcy50b2MuY2ZnLm1pbmltdW1XaWR0aCkpCmluaXRp YWxXaWR0aD1wYXJzZUZsb2F0KCQud2lraUVkaXRvci5tb2R1bGVzLnRvYy5jZmcu bWluaW11bVdpZHRoKSsxO2NvbnRleHQubW9kdWxlcy50b2MuJHRvYy5kYXRhKCdv cGVuV2lkdGgnLGluaXRpYWxXaWR0aCsncHgnKTskLndpa2lFZGl0b3IubW9kdWxl cy50b2MuZm4ucmVkcmF3KGNvbnRleHQsaW5pdGlhbFdpZHRoKTt9fQppZihjb250 ZXh0LmRhdGEub3V0bGluZSl7dmFyIG91dGxpbmU9Y29udGV4dC5kYXRhLm91dGxp bmU7dmFyIGxhc3RMZXZlbD0wO3ZhciBuTGV2ZWw9MDtmb3IodmFyIGk9MDtpPG91 dGxpbmUubGVuZ3RoO2krKyl7aWYob3V0bGluZVtpXS5sZXZlbD5sYXN0TGV2ZWwp e25MZXZlbCsrO30KZWxzZSBpZihvdXRsaW5lW2ldLmxldmVsPGxhc3RMZXZlbCl7 bkxldmVsLT1NYXRoLm1heCgxLGxhc3RMZXZlbC1vdXRsaW5lW2ldLmxldmVsKTt9 CmlmKG5MZXZlbDw9MCl7bkxldmVsPTE7fQpvdXRsaW5lW2ldLm5MZXZlbD1uTGV2 ZWw7bGFzdExldmVsPW91dGxpbmVbaV0ubGV2ZWw7fQp2YXIgc3RydWN0dXJlPWJ1 aWxkU3RydWN0dXJlKG91dGxpbmUpO2lmKCQoJ2lucHV0W25hbWU9d3BTZWN0aW9u XScpLnZhbCgpPT0nJyl7c3RydWN0dXJlLnVuc2hpZnQoeyd0ZXh0Jzp3Z1BhZ2VO YW1lLnJlcGxhY2UoL18vZywnICcpLCdsZXZlbCc6MSwnaW5kZXgnOjB9KTt9CmNv bnRleHQubW9kdWxlcy50b2MuJHRvYy5odG1sKGJ1aWxkTGlzdChzdHJ1Y3R1cmUp KTtpZih3Z05hdmlnYWJsZVRPQ1Jlc2l6YWJsZSYmIWNvbnRleHQuJHVpLmRhdGEo J3Jlc2l6YWJsZURvbmUnKSl7YnVpbGRSZXNpemVDb250cm9scygpO2J1aWxkQ29s bGFwc2VDb250cm9scygpO30KY29udGV4dC5tb2R1bGVzLnRvYy4kdG9jLmZpbmQo J2RpdicpLmF1dG9FbGxpcHNpcyh7J3Bvc2l0aW9uJzoncmlnaHQnLCd0b29sdGlw Jzp0cnVlLCdyZXN0b3JlVGV4dCc6dHJ1ZX0pO319fX07JC51aS5wbHVnaW4uYWRk KCJyZXNpemFibGUiLCJwcmV2ZW50UG9zaXRpb25MZWZ0Q2hhbmdlIix7cmVzaXpl OmZ1bmN0aW9uKGV2ZW50LHVpKXskKHRoaXMpLmRhdGEoInJlc2l6YWJsZSIpLnBv c2l0aW9uLmxlZnQ9MDt9fSk7fSkoalF1ZXJ5KTsoZnVuY3Rpb24oJCl7JC53aWtp RWRpdG9yLm1vZHVsZXMudG9vbGJhcj17YXBpOnthZGRUb1Rvb2xiYXI6ZnVuY3Rp b24oY29udGV4dCxkYXRhKXtmb3IodHlwZSBpbiBkYXRhKXtzd2l0Y2godHlwZSl7 Y2FzZSdzZWN0aW9ucyc6dmFyICRzZWN0aW9ucz1jb250ZXh0Lm1vZHVsZXMudG9v bGJhci4kdG9vbGJhci5maW5kKCdkaXYuc2VjdGlvbnMnKTt2YXIgJHRhYnM9Y29u dGV4dC5tb2R1bGVzLnRvb2xiYXIuJHRvb2xiYXIuZmluZCgnZGl2LnRhYnMnKTtm b3Ioc2VjdGlvbiBpbiBkYXRhW3R5cGVdKXtpZihzZWN0aW9uPT0nbWFpbicpe2Nv bnRleHQubW9kdWxlcy50b29sYmFyLiR0b29sYmFyLnByZXBlbmQoJC53aWtpRWRp dG9yLm1vZHVsZXMudG9vbGJhci5mbi5idWlsZFNlY3Rpb24oY29udGV4dCxzZWN0 aW9uLGRhdGFbdHlwZV1bc2VjdGlvbl0pKTtjb250aW51ZTt9CiRzZWN0aW9ucy5h cHBlbmQoJC53aWtpRWRpdG9yLm1vZHVsZXMudG9vbGJhci5mbi5idWlsZFNlY3Rp b24oY29udGV4dCxzZWN0aW9uLGRhdGFbdHlwZV1bc2VjdGlvbl0pKTskdGFicy5h cHBlbmQoJC53aWtpRWRpdG9yLm1vZHVsZXMudG9vbGJhci5mbi5idWlsZFRhYihj b250ZXh0LHNlY3Rpb24sZGF0YVt0eXBlXVtzZWN0aW9uXSkpOyRzZWN0aW9uPSRz ZWN0aW9ucy5maW5kKCcuc2VjdGlvbjp2aXNpYmxlJyk7aWYoJHNlY3Rpb24uc2l6 ZSgpKXskc2VjdGlvbnMuYW5pbWF0ZSh7J2hlaWdodCc6JHNlY3Rpb24ub3V0ZXJI ZWlnaHQoKX0sJ2Zhc3QnKTt9fQpicmVhaztjYXNlJ2dyb3Vwcyc6aWYoISgnc2Vj dGlvbidpbiBkYXRhKSl7Y29udGludWU7fQp2YXIgJHNlY3Rpb249Y29udGV4dC5t b2R1bGVzLnRvb2xiYXIuJHRvb2xiYXIuZmluZCgnZGl2W3JlbD0nK2RhdGEuc2Vj dGlvbisnXS5zZWN0aW9uJyk7Zm9yKGdyb3VwIGluIGRhdGFbdHlwZV0peyRzZWN0 aW9uLmFwcGVuZCgkLndpa2lFZGl0b3IubW9kdWxlcy50b29sYmFyLmZuLmJ1aWxk R3JvdXAoY29udGV4dCxncm91cCxkYXRhW3R5cGVdW2dyb3VwXSkpO30KYnJlYWs7 Y2FzZSd0b29scyc6aWYoISgnc2VjdGlvbidpbiBkYXRhJiYnZ3JvdXAnaW4gZGF0 YSkpe2NvbnRpbnVlO30KdmFyICRncm91cD1jb250ZXh0Lm1vZHVsZXMudG9vbGJh ci4kdG9vbGJhci5maW5kKCdkaXZbcmVsPScrZGF0YS5zZWN0aW9uKyddLnNlY3Rp b24gJysnZGl2W3JlbD0nK2RhdGEuZ3JvdXArJ10uZ3JvdXAnKTtmb3IodG9vbCBp biBkYXRhW3R5cGVdKXskZ3JvdXAuYXBwZW5kKCQud2lraUVkaXRvci5tb2R1bGVz LnRvb2xiYXIuZm4uYnVpbGRUb29sKGNvbnRleHQsdG9vbCxkYXRhW3R5cGVdW3Rv b2xdKSk7fQppZigkZ3JvdXAuY2hpbGRyZW4oKS5sZW5ndGgpeyRncm91cC5zaG93 KCk7fQpicmVhaztjYXNlJ3BhZ2VzJzppZighKCdzZWN0aW9uJ2luIGRhdGEpKXtj b250aW51ZTt9CnZhciAkcGFnZXM9Y29udGV4dC5tb2R1bGVzLnRvb2xiYXIuJHRv b2xiYXIuZmluZCgnZGl2W3JlbD0nK2RhdGEuc2VjdGlvbisnXS5zZWN0aW9uIC5w YWdlcycpO3ZhciAkaW5kZXg9Y29udGV4dC5tb2R1bGVzLnRvb2xiYXIuJHRvb2xi YXIuZmluZCgnZGl2W3JlbD0nK2RhdGEuc2VjdGlvbisnXS5zZWN0aW9uIC5pbmRl eCcpO2ZvcihwYWdlIGluIGRhdGFbdHlwZV0peyRwYWdlcy5hcHBlbmQoJC53aWtp RWRpdG9yLm1vZHVsZXMudG9vbGJhci5mbi5idWlsZFBhZ2UoY29udGV4dCxwYWdl LGRhdGFbdHlwZV1bcGFnZV0pKTskaW5kZXguYXBwZW5kKCQud2lraUVkaXRvci5t b2R1bGVzLnRvb2xiYXIuZm4uYnVpbGRCb29rbWFyayhjb250ZXh0LHBhZ2UsZGF0 YVt0eXBlXVtwYWdlXSkpO30KJC53aWtpRWRpdG9yLm1vZHVsZXMudG9vbGJhci5m bi51cGRhdGVCb29rbGV0U2VsZWN0aW9uKGNvbnRleHQscGFnZSwkcGFnZXMsJGlu ZGV4KTticmVhaztjYXNlJ3Jvd3MnOmlmKCEoJ3NlY3Rpb24naW4gZGF0YSYmJ3Bh Z2UnaW4gZGF0YSkpe2NvbnRpbnVlO30KdmFyICR0YWJsZT1jb250ZXh0Lm1vZHVs ZXMudG9vbGJhci4kdG9vbGJhci5maW5kKCdkaXZbcmVsPScrZGF0YS5zZWN0aW9u KyddLnNlY3Rpb24gJysnZGl2W3JlbD0nK2RhdGEucGFnZSsnXS5wYWdlIHRhYmxl Jyk7Zm9yKHJvdyBpbiBkYXRhW3R5cGVdKXskdGFibGUuYXBwZW5kKCQud2lraUVk aXRvci5tb2R1bGVzLnRvb2xiYXIuZm4uYnVpbGRSb3coY29udGV4dCxkYXRhW3R5 cGVdW3Jvd10pKTt9CmJyZWFrO2Nhc2UnY2hhcmFjdGVycyc6aWYoISgnc2VjdGlv bidpbiBkYXRhJiYncGFnZSdpbiBkYXRhKSl7Y29udGludWU7fQokY2hhcmFjdGVy cz1jb250ZXh0Lm1vZHVsZXMudG9vbGJhci4kdG9vbGJhci5maW5kKCdkaXZbcmVs PScrZGF0YS5zZWN0aW9uKyddLnNlY3Rpb24gJysnZGl2W3JlbD0nK2RhdGEucGFn ZSsnXS5wYWdlIGRpdicpO3ZhciBhY3Rpb25zPSRjaGFyYWN0ZXJzLmRhdGEoJ2Fj dGlvbnMnKTtmb3IoY2hhcmFjdGVyIGluIGRhdGFbdHlwZV0peyRjaGFyYWN0ZXJz LmFwcGVuZCgkKCQud2lraUVkaXRvci5tb2R1bGVzLnRvb2xiYXIuZm4uYnVpbGRD aGFyYWN0ZXIoZGF0YVt0eXBlXVtjaGFyYWN0ZXJdLGFjdGlvbnMpKS5tb3VzZWRv d24oZnVuY3Rpb24oZSl7Y29udGV4dC5mbi5zYXZlU3R1ZmZGb3JJRSgpO2UucHJl dmVudERlZmF1bHQoKTtyZXR1cm4gZmFsc2U7fSkuY2xpY2soZnVuY3Rpb24oZSl7 JC53aWtpRWRpdG9yLm1vZHVsZXMudG9vbGJhci5mbi5kb0FjdGlvbigkKHRoaXMp LnBhcmVudCgpLmRhdGEoJ2NvbnRleHQnKSwkKHRoaXMpLnBhcmVudCgpLmRhdGEo J2FjdGlvbnMnKVskKHRoaXMpLmF0dHIoJ3JlbCcpXSk7ZS5wcmV2ZW50RGVmYXVs dCgpO3JldHVybiBmYWxzZTt9KSk7fQpicmVhaztkZWZhdWx0OmJyZWFrO319fSxy ZW1vdmVGcm9tVG9vbGJhcjpmdW5jdGlvbihjb250ZXh0LGRhdGEpe2lmKHR5cGVv ZiBkYXRhLnNlY3Rpb249PSdzdHJpbmcnKXt2YXIgdGFiPSdkaXYudGFicyBzcGFu W3JlbD0nK2RhdGEuc2VjdGlvbisnXS50YWInO3ZhciB0YXJnZXQ9J2RpdltyZWw9 JytkYXRhLnNlY3Rpb24rJ10uc2VjdGlvbic7dmFyIGdyb3VwPW51bGw7aWYodHlw ZW9mIGRhdGEuZ3JvdXA9PSdzdHJpbmcnKXt0YXJnZXQrPScgZGl2W3JlbD0nK2Rh dGEuZ3JvdXArJ10uZ3JvdXAnO2lmKHR5cGVvZiBkYXRhLnRvb2w9PSdzdHJpbmcn KXtncm91cD10YXJnZXQ7dGFyZ2V0Kz0nIGRpdltyZWw9JytkYXRhLnRvb2wrJ10u dG9vbCc7fX1lbHNlIGlmKHR5cGVvZiBkYXRhLnBhZ2U9PSdzdHJpbmcnKXt2YXIg aW5kZXg9dGFyZ2V0KycgZGl2LmluZGV4IGRpdltyZWw9JytkYXRhLnBhZ2UrJ10n O3RhcmdldCs9JyBkaXYucGFnZXMgZGl2W3JlbD0nK2RhdGEucGFnZSsnXS5wYWdl JztpZih0eXBlb2YgZGF0YS5jaGFyYWN0ZXI9PSdzdHJpbmcnKXt0YXJnZXQrPScg YVtyZWw9JytkYXRhLmNoYXJhY3RlcisnXSc7fWVsc2UgaWYodHlwZW9mIGRhdGEu cm93PT0nbnVtYmVyJyl7dGFyZ2V0Kz0nIHRhYmxlIHRyOm5vdCg6aGFzKHRoKSk6 ZXEoJytkYXRhLnJvdysnKSc7fWVsc2V7Y29udGV4dC5tb2R1bGVzLnRvb2xiYXIu JHRvb2xiYXIuZmluZChpbmRleCkucmVtb3ZlKCk7JC53aWtpRWRpdG9yLm1vZHVs ZXMudG9vbGJhci5mbi51cGRhdGVCb29rbGV0U2VsZWN0aW9uKGNvbnRleHQsbnVs bCxjb250ZXh0Lm1vZHVsZXMudG9vbGJhci4kdG9vbGJhci5maW5kKHRhcmdldCks Y29udGV4dC5tb2R1bGVzLnRvb2xiYXIuJHRvb2xiYXIuZmluZChpbmRleCkpO319 ZWxzZXtjb250ZXh0Lm1vZHVsZXMudG9vbGJhci4kdG9vbGJhci5maW5kKHRhYiku cmVtb3ZlKCk7fQpjb250ZXh0Lm1vZHVsZXMudG9vbGJhci4kdG9vbGJhci5maW5k KHRhcmdldCkucmVtb3ZlKCk7aWYoZ3JvdXApeyRncm91cD1jb250ZXh0Lm1vZHVs ZXMudG9vbGJhci4kdG9vbGJhci5maW5kKGdyb3VwKTtpZigkZ3JvdXAuY2hpbGRy ZW4oKS5sZW5ndGg9PTApeyRncm91cC5oaWRlKCk7fX19fX0sZXZ0OntyZXNpemU6 ZnVuY3Rpb24oY29udGV4dCxldmVudCl7Y29udGV4dC4kdWkuZmluZCgnLnNlY3Rp b25zJykuaGVpZ2h0KGNvbnRleHQuJHVpLmZpbmQoJy5zZWN0aW9ucyAuc2VjdGlv bi12aXNpYmxlJykub3V0ZXJIZWlnaHQoKSk7fSx0b2NDb2xsYXBzZTpmdW5jdGlv bihjb250ZXh0LGV2ZW50KXskLndpa2lFZGl0b3IubW9kdWxlcy50b29sYmFyLmV2 dC5yZXNpemUoY29udGV4dCxldmVudCk7fSx0b2NFeHBhbmQ6ZnVuY3Rpb24oY29u dGV4dCxldmVudCl7JC53aWtpRWRpdG9yLm1vZHVsZXMudG9vbGJhci5ldnQucmVz aXplKGNvbnRleHQsZXZlbnQpO319LGZuOntjcmVhdGU6ZnVuY3Rpb24oY29udGV4 dCxjb25maWcpe2lmKCckdG9vbGJhcidpbiBjb250ZXh0Lm1vZHVsZXMudG9vbGJh cil7cmV0dXJuO30KY29udGV4dC5tb2R1bGVzLnRvb2xiYXIuJHRvb2xiYXI9JCgn PGRpdiAvPicpLmFkZENsYXNzKCd3aWtpRWRpdG9yLXVpLXRvb2xiYXInKS5hdHRy KCdpZCcsJ3dpa2lFZGl0b3ItdWktdG9vbGJhcicpOyQud2lraUVkaXRvci5tb2R1 bGVzLnRvb2xiYXIuZm4uYnVpbGQoY29udGV4dCxjb25maWcpO2NvbnRleHQuJHVp LmZpbmQoJy53aWtpRWRpdG9yLXVpLXRvcCcpLmFwcGVuZChjb250ZXh0Lm1vZHVs ZXMudG9vbGJhci4kdG9vbGJhcik7fSxkb0FjdGlvbjpmdW5jdGlvbihjb250ZXh0 LGFjdGlvbixzb3VyY2Upe2lmKCQudHJhY2tBY3Rpb24hPXVuZGVmaW5lZCYmc291 cmNlLmNsb3Nlc3QoJy53aWtpRWRpdG9yLXVpLXRvb2xiYXInKS5zaXplKCkpe3Zh ciByZWxzPVtdO3ZhciBzdGVwPXNvdXJjZTt2YXIgaT0wO3doaWxlKCFzdGVwLmhh c0NsYXNzKCd3aWtpRWRpdG9yLXVpLXRvb2xiYXInKSl7aWYoaT4yNSl7YnJlYWs7 fQppKys7dmFyIHJlbD1zdGVwLmF0dHIoJ3JlbCcpO2lmKHJlbCl7cmVscy5wdXNo KHN0ZXAuYXR0cigncmVsJykpO30Kc3RlcD1zdGVwLnBhcmVudCgpO30KcmVscy5y ZXZlcnNlKCk7dmFyIGlkPXJlbHMuam9pbignLicpOyQudHJhY2tBY3Rpb24oaWQp O30Kc3dpdGNoKGFjdGlvbi50eXBlKXtjYXNlJ3JlcGxhY2UnOmNhc2UnZW5jYXBz dWxhdGUnOnZhciBwYXJ0cz17J3ByZSc6JC53aWtpRWRpdG9yLmF1dG9Nc2coYWN0 aW9uLm9wdGlvbnMsJ3ByZScpLCdwZXJpJzokLndpa2lFZGl0b3IuYXV0b01zZyhh Y3Rpb24ub3B0aW9ucywncGVyaScpLCdwb3N0JzokLndpa2lFZGl0b3IuYXV0b01z ZyhhY3Rpb24ub3B0aW9ucywncG9zdCcpfTtpZigncmVnZXgnaW4gYWN0aW9uLm9w dGlvbnMmJidyZWdleFJlcGxhY2UnaW4gYWN0aW9uLm9wdGlvbnMpe3ZhciBzZWxl Y3Rpb249Y29udGV4dC4kdGV4dGFyZWEudGV4dFNlbGVjdGlvbignZ2V0U2VsZWN0 aW9uJyk7aWYoc2VsZWN0aW9uIT0nJyYmc2VsZWN0aW9uLm1hdGNoKGFjdGlvbi5v cHRpb25zLnJlZ2V4KSl7cGFydHMucGVyaT1zZWxlY3Rpb24ucmVwbGFjZShhY3Rp b24ub3B0aW9ucy5yZWdleCxhY3Rpb24ub3B0aW9ucy5yZWdleFJlcGxhY2UpO3Bh cnRzLnByZT1wYXJ0cy5wb3N0PScnO319CmNvbnRleHQuJHRleHRhcmVhLnRleHRT ZWxlY3Rpb24oJ2VuY2Fwc3VsYXRlU2VsZWN0aW9uJywkLmV4dGVuZCh7fSxhY3Rp b24ub3B0aW9ucyxwYXJ0cyx7J3JlcGxhY2UnOmFjdGlvbi50eXBlPT0ncmVwbGFj ZSd9KSk7aWYodHlwZW9mIGNvbnRleHQuJGlmcmFtZSE9PSd1bmRlZmluZWQnKXtj b250ZXh0LiRpZnJhbWVbMF0uY29udGVudFdpbmRvdy5mb2N1cygpO30KYnJlYWs7 Y2FzZSdjYWxsYmFjayc6aWYodHlwZW9mIGFjdGlvbi5leGVjdXRlPT0nZnVuY3Rp b24nKXthY3Rpb24uZXhlY3V0ZShjb250ZXh0KTt9CmJyZWFrO2Nhc2UnZGlhbG9n Jzpjb250ZXh0LmZuLnNhdmVTZWxlY3Rpb24oKTtjb250ZXh0LiR0ZXh0YXJlYS53 aWtpRWRpdG9yKCdvcGVuRGlhbG9nJyxhY3Rpb24ubW9kdWxlKTticmVhaztkZWZh dWx0OmJyZWFrO319LGJ1aWxkR3JvdXA6ZnVuY3Rpb24oY29udGV4dCxpZCxncm91 cCl7dmFyICRncm91cD0kKCc8ZGl2IC8+JykuYXR0cih7J2NsYXNzJzonZ3JvdXAg Z3JvdXAtJytpZCwncmVsJzppZH0pO3ZhciBsYWJlbD0kLndpa2lFZGl0b3IuYXV0 b01zZyhncm91cCwnbGFiZWwnKTtpZihsYWJlbCl7JGdyb3VwLmFwcGVuZCgnPGRp diBjbGFzcz0ibGFiZWwiPicrbGFiZWwrJzwvZGl2PicpfQp2YXIgZW1wdHk9dHJ1 ZTtpZigndG9vbHMnaW4gZ3JvdXApe2Zvcih0b29sIGluIGdyb3VwLnRvb2xzKXt2 YXIgdG9vbD0kLndpa2lFZGl0b3IubW9kdWxlcy50b29sYmFyLmZuLmJ1aWxkVG9v bChjb250ZXh0LHRvb2wsZ3JvdXAudG9vbHNbdG9vbF0pO2lmKHRvb2wpe2VtcHR5 PWVtcHR5JiZ0b29sLmNzcygnZGlzcGxheScpPT0nbm9uZSc7JGdyb3VwLmFwcGVu ZCh0b29sKTt9fX0KaWYoZW1wdHkpeyRncm91cC5oaWRlKCk7fQpyZXR1cm4gJGdy b3VwO30sYnVpbGRUb29sOmZ1bmN0aW9uKGNvbnRleHQsaWQsdG9vbCl7aWYoJ2Zp bHRlcnMnaW4gdG9vbCl7Zm9yKGZpbHRlciBpbiB0b29sLmZpbHRlcnMpe2lmKCQo dG9vbC5maWx0ZXJzW2ZpbHRlcl0pLnNpemUoKT09MCl7cmV0dXJuIG51bGw7fX19 CnZhciBsYWJlbD0kLndpa2lFZGl0b3IuYXV0b01zZyh0b29sLCdsYWJlbCcpO3N3 aXRjaCh0b29sLnR5cGUpe2Nhc2UnYnV0dG9uJzp2YXIgc3JjPSQud2lraUVkaXRv ci5hdXRvSWNvbih0b29sLmljb24sJC53aWtpRWRpdG9yLmltZ1BhdGgrJ3Rvb2xi YXIvJyk7dmFyICRidXR0b247aWYoJ29mZnNldCdpbiB0b29sKXt2YXIgb2Zmc2V0 PSQud2lraUVkaXRvci5hdXRvTGFuZyh0b29sLm9mZnNldCk7JGJ1dHRvbj0kKCc8 c3BhbiAvPicpLmF0dHIoeydhbHQnOmxhYmVsLCd0aXRsZSc6bGFiZWwsJ3JlbCc6 aWQsJ2NsYXNzJzond2lraUVkaXRvci10b29sYmFyLXNwcml0ZWRCdXR0b24nfSku dGV4dChsYWJlbCkuY3NzKCdiYWNrZ3JvdW5kUG9zaXRpb24nLG9mZnNldFswXSsn cHggJytvZmZzZXRbMV0rJ3B4Jyk7fWVsc2V7JGJ1dHRvbj0kKCc8aW1nIC8+Jyku YXR0cih7J3NyYyc6c3JjLCd3aWR0aCc6MjIsJ2hlaWdodCc6MjIsJ2FsdCc6bGFi ZWwsJ3RpdGxlJzpsYWJlbCwncmVsJzppZCwnY2xhc3MnOid0b29sIHRvb2wtYnV0 dG9uJ30pO30KaWYoJ2FjdGlvbidpbiB0b29sKXskYnV0dG9uLmRhdGEoJ2FjdGlv bicsdG9vbC5hY3Rpb24pLmRhdGEoJ2NvbnRleHQnLGNvbnRleHQpLm1vdXNlZG93 bihmdW5jdGlvbihlKXtjb250ZXh0LmZuLnNhdmVTdHVmZkZvcklFKCk7ZS5wcmV2 ZW50RGVmYXVsdCgpO3JldHVybiBmYWxzZTt9KS5jbGljayhmdW5jdGlvbihlKXsk Lndpa2lFZGl0b3IubW9kdWxlcy50b29sYmFyLmZuLmRvQWN0aW9uKCQodGhpcyku ZGF0YSgnY29udGV4dCcpLCQodGhpcykuZGF0YSgnYWN0aW9uJyksJCh0aGlzKSk7 ZS5wcmV2ZW50RGVmYXVsdCgpO3JldHVybiBmYWxzZTt9KTtpZih0b29sLmFjdGlv bi50eXBlPT0nZGlhbG9nJyYmISh0b29sLmFjdGlvbi5tb2R1bGUgaW4gJC53aWtp RWRpdG9yLm1vZHVsZXMuZGlhbG9ncy5tb2R1bGVzKSl7JGJ1dHRvbi5oaWRlKCk7 Y29udGV4dC4kdGV4dGFyZWEuYmluZCgnd2lraUVkaXRvci1kaWFsb2dzLXNldHVw LScrdG9vbC5hY3Rpb24ubW9kdWxlLHtidXR0b246JGJ1dHRvbn0sZnVuY3Rpb24o ZXZlbnQpe2V2ZW50LmRhdGEuYnV0dG9uLnNob3coKS5wYXJlbnQoKS5zaG93KCk7 fSk7fX0KcmV0dXJuICRidXR0b247Y2FzZSdzZWxlY3QnOnZhciAkc2VsZWN0PSQo JzxkaXYgLz4nKS5hdHRyKHsncmVsJzppZCwnY2xhc3MnOid0b29sIHRvb2wtc2Vs ZWN0J30pO3ZhciAkb3B0aW9ucz0kKCc8ZGl2IC8+JykuYWRkQ2xhc3MoJ29wdGlv bnMnKTtpZignbGlzdCdpbiB0b29sKXtmb3Iob3B0aW9uIGluIHRvb2wubGlzdCl7 dmFyIG9wdGlvbkxhYmVsPSQud2lraUVkaXRvci5hdXRvTXNnKHRvb2wubGlzdFtv cHRpb25dLCdsYWJlbCcpOyRvcHRpb25zLmFwcGVuZCgkKCc8YSAvPicpLmRhdGEo J2FjdGlvbicsdG9vbC5saXN0W29wdGlvbl0uYWN0aW9uKS5kYXRhKCdjb250ZXh0 Jyxjb250ZXh0KS5tb3VzZWRvd24oZnVuY3Rpb24oZSl7Y29udGV4dC5mbi5zYXZl U3R1ZmZGb3JJRSgpO2UucHJldmVudERlZmF1bHQoKTtyZXR1cm4gZmFsc2U7fSku Y2xpY2soZnVuY3Rpb24oZSl7JC53aWtpRWRpdG9yLm1vZHVsZXMudG9vbGJhci5m bi5kb0FjdGlvbigkKHRoaXMpLmRhdGEoJ2NvbnRleHQnKSwkKHRoaXMpLmRhdGEo J2FjdGlvbicpLCQodGhpcykpO2lmKCQodGhpcykucGFyZW50KCkuaXMoJzp2aXNp YmxlJykpeyQodGhpcykucGFyZW50KCkuYW5pbWF0ZSh7J29wYWNpdHknOid0b2dn bGUnfSwnZmFzdCcpO30KZS5wcmV2ZW50RGVmYXVsdCgpO3JldHVybiBmYWxzZTt9 KS50ZXh0KG9wdGlvbkxhYmVsKS5hZGRDbGFzcygnb3B0aW9uJykuYXR0cih7J3Jl bCc6b3B0aW9uLCdocmVmJzonIyd9KSk7fX0KJHNlbGVjdC5hcHBlbmQoJCgnPGRp diAvPicpLmFkZENsYXNzKCdtZW51JykuYXBwZW5kKCRvcHRpb25zKSk7JHNlbGVj dC5hcHBlbmQoJCgnPGEgLz4nKS5hZGRDbGFzcygnbGFiZWwnKS50ZXh0KGxhYmVs KS5kYXRhKCdvcHRpb25zJywkb3B0aW9ucykuYXR0cignaHJlZicsJyMnKS5tb3Vz ZWRvd24oZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpO3JldHVybiBmYWxz ZTt9KS5jbGljayhmdW5jdGlvbihlKXskKHRoaXMpLmRhdGEoJ29wdGlvbnMnKS5h bmltYXRlKHsnb3BhY2l0eSc6J3RvZ2dsZSd9LCdmYXN0Jyk7ZS5wcmV2ZW50RGVm YXVsdCgpO3JldHVybiBmYWxzZTt9KSk7cmV0dXJuICRzZWxlY3Q7ZGVmYXVsdDpy ZXR1cm4gbnVsbDt9fSxidWlsZEJvb2ttYXJrOmZ1bmN0aW9uKGNvbnRleHQsaWQs cGFnZSl7dmFyIGxhYmVsPSQud2lraUVkaXRvci5hdXRvTXNnKHBhZ2UsJ2xhYmVs Jyk7cmV0dXJuICQoJzxkaXYgLz4nKS50ZXh0KGxhYmVsKS5hdHRyKCdyZWwnLGlk KS5kYXRhKCdjb250ZXh0Jyxjb250ZXh0KS5tb3VzZWRvd24oZnVuY3Rpb24oZSl7 ZS5wcmV2ZW50RGVmYXVsdCgpO3JldHVybiBmYWxzZTt9KS5jbGljayhmdW5jdGlv bihldmVudCl7JCh0aGlzKS5wYXJlbnQoKS5wYXJlbnQoKS5maW5kKCcucGFnZScp LmhpZGUoKTskKHRoaXMpLnBhcmVudCgpLnBhcmVudCgpLmZpbmQoJy5wYWdlLScr JCh0aGlzKS5hdHRyKCdyZWwnKSkuc2hvdygpOyQodGhpcykuc2libGluZ3MoKS5y ZW1vdmVDbGFzcygnY3VycmVudCcpOyQodGhpcykuYWRkQ2xhc3MoJ2N1cnJlbnQn KTt2YXIgc2VjdGlvbj0kKHRoaXMpLnBhcmVudCgpLnBhcmVudCgpLmF0dHIoJ3Jl bCcpOyQuY29va2llKCd3aWtpRWRpdG9yLScrJCh0aGlzKS5kYXRhKCdjb250ZXh0 JykuaW5zdGFuY2UrJy1ib29rbGV0LScrc2VjdGlvbisnLXBhZ2UnLCQodGhpcyku YXR0cigncmVsJykpO2lmKCQudHJhY2tBY3Rpb24hPXVuZGVmaW5lZCl7JC50cmFj a0FjdGlvbihzZWN0aW9uKycuJyskKHRoaXMpLmF0dHIoJ3JlbCcpKTt9CmV2ZW50 LnByZXZlbnREZWZhdWx0KCk7cmV0dXJuIGZhbHNlO30pfSxidWlsZFBhZ2U6ZnVu Y3Rpb24oY29udGV4dCxpZCxwYWdlKXt2YXIgJHBhZ2U9JCgnPGRpdiAvPicpLmF0 dHIoeydjbGFzcyc6J3BhZ2UgcGFnZS0nK2lkLCdyZWwnOmlkfSk7c3dpdGNoKHBh Z2UubGF5b3V0KXtjYXNlJ3RhYmxlJzokcGFnZS5hZGRDbGFzcygncGFnZS10YWJs ZScpO3ZhciBodG1sPSc8dGFibGUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0w ICcrJ2JvcmRlcj0wIHdpZHRoPSIxMDAlIiBjbGFzcz0idGFibGUgdGFibGUtIicr aWQrJyI+JztpZignaGVhZGluZ3MnaW4gcGFnZSl7aHRtbCs9JC53aWtpRWRpdG9y Lm1vZHVsZXMudG9vbGJhci5mbi5idWlsZEhlYWRpbmcoY29udGV4dCxwYWdlLmhl YWRpbmdzKX0KaWYoJ3Jvd3MnaW4gcGFnZSl7Zm9yKHJvdyBpbiBwYWdlLnJvd3Mp e2h0bWwrPSQud2lraUVkaXRvci5tb2R1bGVzLnRvb2xiYXIuZm4uYnVpbGRSb3co Y29udGV4dCxwYWdlLnJvd3Nbcm93XSl9fQokcGFnZS5odG1sKGh0bWwpO2JyZWFr O2Nhc2UnY2hhcmFjdGVycyc6JHBhZ2UuYWRkQ2xhc3MoJ3BhZ2UtY2hhcmFjdGVy cycpOyRjaGFyYWN0ZXJzPSQoJzxkaXYgLz4nKS5kYXRhKCdjb250ZXh0Jyxjb250 ZXh0KS5kYXRhKCdhY3Rpb25zJyx7fSk7dmFyIGFjdGlvbnM9JGNoYXJhY3RlcnMu ZGF0YSgnYWN0aW9ucycpO2lmKCdsYW5ndWFnZSdpbiBwYWdlKXskY2hhcmFjdGVy cy5hdHRyKCdsYW5nJyxwYWdlLmxhbmd1YWdlKTt9CmlmKCdkaXJlY3Rpb24naW4g cGFnZSl7JGNoYXJhY3RlcnMuYXR0cignZGlyJyxwYWdlLmRpcmVjdGlvbik7fQpp ZignY2hhcmFjdGVycydpbiBwYWdlKXt2YXIgaHRtbD0nJztmb3IoY2hhcmFjdGVy IGluIHBhZ2UuY2hhcmFjdGVycyl7aHRtbCs9JC53aWtpRWRpdG9yLm1vZHVsZXMu dG9vbGJhci5mbi5idWlsZENoYXJhY3RlcihwYWdlLmNoYXJhY3RlcnNbY2hhcmFj dGVyXSxhY3Rpb25zKTt9CiRjaGFyYWN0ZXJzLmh0bWwoaHRtbCkuY2hpbGRyZW4o KS5tb3VzZWRvd24oZnVuY3Rpb24oZSl7Y29udGV4dC5mbi5zYXZlU3R1ZmZGb3JJ RSgpO2UucHJldmVudERlZmF1bHQoKTtyZXR1cm4gZmFsc2U7fSkuY2xpY2soZnVu Y3Rpb24oZSl7JC53aWtpRWRpdG9yLm1vZHVsZXMudG9vbGJhci5mbi5kb0FjdGlv bigkKHRoaXMpLnBhcmVudCgpLmRhdGEoJ2NvbnRleHQnKSwkKHRoaXMpLnBhcmVu dCgpLmRhdGEoJ2FjdGlvbnMnKVskKHRoaXMpLmF0dHIoJ3JlbCcpXSwkKHRoaXMp KTtlLnByZXZlbnREZWZhdWx0KCk7cmV0dXJuIGZhbHNlO30pO30KJHBhZ2UuYXBw ZW5kKCRjaGFyYWN0ZXJzKTticmVhazt9CnJldHVybiAkcGFnZTt9LGJ1aWxkSGVh ZGluZzpmdW5jdGlvbihjb250ZXh0LGhlYWRpbmdzKXt2YXIgaHRtbD0nPHRyPic7 Zm9yKGhlYWRpbmcgaW4gaGVhZGluZ3Mpe2h0bWwrPSc8dGg+JyskLndpa2lFZGl0 b3IuYXV0b01zZyhoZWFkaW5nc1toZWFkaW5nXSxbJ2h0bWwnLCd0ZXh0J10pKyc8 L3RoPic7fQpyZXR1cm4gaHRtbDt9LGJ1aWxkUm93OmZ1bmN0aW9uKGNvbnRleHQs cm93KXt2YXIgaHRtbD0nPHRyPic7Zm9yKGNlbGwgaW4gcm93KXtodG1sKz0nPHRk IGNsYXNzPSJjZWxsIGNlbGwtJytjZWxsKyciIHZhbGlnbj0idG9wIj48c3Bhbj4n KwokLndpa2lFZGl0b3IuYXV0b01zZyhyb3dbY2VsbF0sWydodG1sJywndGV4dCdd KSsnPC9zcGFuPjwvdGQ+Jzt9Cmh0bWwrPSc8L3RyPic7cmV0dXJuIGh0bWw7fSxi dWlsZENoYXJhY3RlcjpmdW5jdGlvbihjaGFyYWN0ZXIsYWN0aW9ucyl7aWYodHlw ZW9mIGNoYXJhY3Rlcj09J3N0cmluZycpe2NoYXJhY3Rlcj17J2xhYmVsJzpjaGFy YWN0ZXIsJ2FjdGlvbic6eyd0eXBlJzonZW5jYXBzdWxhdGUnLCdvcHRpb25zJzp7 J3ByZSc6Y2hhcmFjdGVyfX19O31lbHNlIGlmKDAgaW4gY2hhcmFjdGVyJiYxIGlu IGNoYXJhY3Rlcil7Y2hhcmFjdGVyPXsnbGFiZWwnOmNoYXJhY3RlclswXSwnYWN0 aW9uJzp7J3R5cGUnOidlbmNhcHN1bGF0ZScsJ29wdGlvbnMnOnsncHJlJzpjaGFy YWN0ZXJbMV19fX07fQppZignYWN0aW9uJ2luIGNoYXJhY3RlciYmJ2xhYmVsJ2lu IGNoYXJhY3Rlcil7YWN0aW9uc1tjaGFyYWN0ZXIubGFiZWxdPWNoYXJhY3Rlci5h Y3Rpb247cmV0dXJuJzxzcGFuIHJlbD0iJytjaGFyYWN0ZXIubGFiZWwrJyI+Jytj aGFyYWN0ZXIubGFiZWwrJzwvc3Bhbj4nO319LGJ1aWxkVGFiOmZ1bmN0aW9uKGNv bnRleHQsaWQsc2VjdGlvbil7dmFyIHNlbGVjdGVkPSQuY29va2llKCd3aWtpRWRp dG9yLScrY29udGV4dC5pbnN0YW5jZSsnLXRvb2xiYXItc2VjdGlvbicpO3JldHVy biAkKCc8c3BhbiAvPicpLmF0dHIoeydjbGFzcyc6J3RhYiB0YWItJytpZCwncmVs JzppZH0pLmFwcGVuZCgkKCc8YSAvPicpLmFkZENsYXNzKHNlbGVjdGVkPT1pZD8n Y3VycmVudCc6bnVsbCkuYXR0cignaHJlZicsJyMnKS50ZXh0KCQud2lraUVkaXRv ci5hdXRvTXNnKHNlY3Rpb24sJ2xhYmVsJykpLmRhdGEoJ2NvbnRleHQnLGNvbnRl eHQpLm1vdXNldXAoZnVuY3Rpb24oZSl7JCh0aGlzKS5ibHVyKCk7fSkubW91c2Vk b3duKGZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKTtyZXR1cm4gZmFsc2U7 fSkuY2xpY2soZnVuY3Rpb24oZSl7dmFyICRzZWN0aW9ucz0kKHRoaXMpLmRhdGEo J2NvbnRleHQnKS4kdWkuZmluZCgnLnNlY3Rpb25zJyk7dmFyICRzZWN0aW9uPSQo dGhpcykuZGF0YSgnY29udGV4dCcpLiR1aS5maW5kKCcuc2VjdGlvbi0nKyQodGhp cykucGFyZW50KCkuYXR0cigncmVsJykpO3ZhciBzaG93PSRzZWN0aW9uLmNzcygn ZGlzcGxheScpPT0nbm9uZSc7JHByZXZpb3VzU2VjdGlvbnM9JHNlY3Rpb24ucGFy ZW50KCkuZmluZCgnLnNlY3Rpb24tdmlzaWJsZScpOyRwcmV2aW91c1NlY3Rpb25z LmNzcygncG9zaXRpb24nLCdhYnNvbHV0ZScpOyRwcmV2aW91c1NlY3Rpb25zLnJl bW92ZUNsYXNzKCdzZWN0aW9uLXZpc2libGUnKTskcHJldmlvdXNTZWN0aW9ucy5m YWRlT3V0KCdmYXN0JyxmdW5jdGlvbigpeyQodGhpcykuY3NzKCdwb3NpdGlvbics J3JlbGF0aXZlJyk7fSk7JCh0aGlzKS5wYXJlbnQoKS5wYXJlbnQoKS5maW5kKCdh JykucmVtb3ZlQ2xhc3MoJ2N1cnJlbnQnKTskc2VjdGlvbnMuY3NzKCdvdmVyZmxv dycsJ2hpZGRlbicpO2Z1bmN0aW9uIGFuaW1hdGUoJHRoaXMpeyRzZWN0aW9ucy5j c3MoJ2Rpc3BsYXknLCdibG9jaycpLmFuaW1hdGUoeydoZWlnaHQnOiRzZWN0aW9u Lm91dGVySGVpZ2h0KCl9LCRzZWN0aW9uLm91dGVySGVpZ2h0KCkqMixmdW5jdGlv bigpeyR0aGlzLmNzcygnb3ZlcmZsb3cnLCd2aXNpYmxlJykuY3NzKCdoZWlnaHQn LCdhdXRvJyk7Y29udGV4dC5mbi50cmlnZ2VyKCdyZXNpemUnKTt9KTt9CmlmKHNo b3cpeyRzZWN0aW9uLmFkZENsYXNzKCdzZWN0aW9uLXZpc2libGUnKTskc2VjdGlv bi5mYWRlSW4oJ2Zhc3QnKTtpZigkc2VjdGlvbi5oYXNDbGFzcygnbG9hZGluZycp KXskdGhpcz0kKHRoaXMpOyR0aGlzLmFkZENsYXNzKCdjdXJyZW50IGxvYWRpbmcn KTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7JHNlY3Rpb24udHJpZ2dlcignbG9hZFNl Y3Rpb24nKTthbmltYXRlKCQodGhpcykpOyR0aGlzLnJlbW92ZUNsYXNzKCdsb2Fk aW5nJyk7fSwxMDAwKTt9ZWxzZXthbmltYXRlKCQodGhpcykpOyQodGhpcykuYWRk Q2xhc3MoJ2N1cnJlbnQnKTt9fWVsc2V7JHNlY3Rpb25zLmNzcygnaGVpZ2h0Jywk c2VjdGlvbi5vdXRlckhlaWdodCgpKS5hbmltYXRlKHsnaGVpZ2h0JzonaGlkZSd9 LCRzZWN0aW9uLm91dGVySGVpZ2h0KCkqMixmdW5jdGlvbigpeyQodGhpcykuY3Nz KHsnb3ZlcmZsb3cnOid2aXNpYmxlJywnaGVpZ2h0JzowfSk7Y29udGV4dC5mbi50 cmlnZ2VyKCdyZXNpemUnKTt9KTt9CmlmKCQudHJhY2tBY3Rpb24hPXVuZGVmaW5l ZCl7JC50cmFja0FjdGlvbigkc2VjdGlvbi5hdHRyKCdyZWwnKSsnLicrKHNob3c/ J3Nob3cnOidoaWRlJykpO30KJC5jb29raWUoJ3dpa2lFZGl0b3ItJyskKHRoaXMp LmRhdGEoJ2NvbnRleHQnKS5pbnN0YW5jZSsnLXRvb2xiYXItc2VjdGlvbicsc2hv dz8kc2VjdGlvbi5hdHRyKCdyZWwnKTpudWxsKTtlLnByZXZlbnREZWZhdWx0KCk7 cmV0dXJuIGZhbHNlO30pKTt9LGJ1aWxkU2VjdGlvbjpmdW5jdGlvbihjb250ZXh0 LGlkLHNlY3Rpb24pe3ZhciAkc2VjdGlvbj0kKCc8ZGl2IC8+JykuYXR0cih7J2Ns YXNzJzpzZWN0aW9uLnR5cGUrJyBzZWN0aW9uIHNlY3Rpb24tJytpZCwncmVsJzpp ZH0pO3ZhciBzZWxlY3RlZD0kLmNvb2tpZSgnd2lraUVkaXRvci0nK2NvbnRleHQu aW5zdGFuY2UrJy10b29sYmFyLXNlY3Rpb24nKTt2YXIgc2hvdz1zZWxlY3RlZD09 aWQ7aWYodHlwZW9mIHNlY3Rpb24uZGVmZXJMb2FkIT0ndW5kZWZpbmVkJyYmc2Vj dGlvbi5kZWZlckxvYWQmJmlkIT09J21haW4nJiYhc2hvdyl7JHNlY3Rpb24uYWRk Q2xhc3MoJ2xvYWRpbmcnKS5hcHBlbmQoJCgnPGRpdiAvPicpLmFkZENsYXNzKCdz cGlubmVyJykpOyRzZWN0aW9uLmJpbmQoJ2xvYWRTZWN0aW9uJyxmdW5jdGlvbigp eyQud2lraUVkaXRvci5tb2R1bGVzLnRvb2xiYXIuZm4ucmVhbGx5QnVpbGRTZWN0 aW9uKGNvbnRleHQsc2VjdGlvbiwkc2VjdGlvbik7JHNlY3Rpb24ucmVtb3ZlQ2xh c3MoJ2xvYWRpbmcnKTt9KTt9ZWxzZXskLndpa2lFZGl0b3IubW9kdWxlcy50b29s YmFyLmZuLnJlYWxseUJ1aWxkU2VjdGlvbihjb250ZXh0LHNlY3Rpb24sJHNlY3Rp b24pO30KaWYoaWQhPT0nbWFpbicpeyRzZWN0aW9uLmNzcygnZGlzcGxheScsc2hv dz8nYmxvY2snOidub25lJyk7aWYoc2hvdykKJHNlY3Rpb24uYWRkQ2xhc3MoJ3Nl Y3Rpb24tdmlzaWJsZScpO30KcmV0dXJuICRzZWN0aW9uO30scmVhbGx5QnVpbGRT ZWN0aW9uOmZ1bmN0aW9uKGNvbnRleHQsc2VjdGlvbiwkc2VjdGlvbil7Y29udGV4 dC4kdGV4dGFyZWEudHJpZ2dlcignd2lraUVkaXRvci10b29sYmFyLWJ1aWxkU2Vj dGlvbi0nKyRzZWN0aW9uLmF0dHIoJ3JlbCcpLFtzZWN0aW9uXSk7c3dpdGNoKHNl Y3Rpb24udHlwZSl7Y2FzZSd0b29sYmFyJzppZignZ3JvdXBzJ2luIHNlY3Rpb24p e2Zvcihncm91cCBpbiBzZWN0aW9uLmdyb3Vwcyl7JHNlY3Rpb24uYXBwZW5kKCQu d2lraUVkaXRvci5tb2R1bGVzLnRvb2xiYXIuZm4uYnVpbGRHcm91cChjb250ZXh0 LGdyb3VwLHNlY3Rpb24uZ3JvdXBzW2dyb3VwXSkpO319CmJyZWFrO2Nhc2UnYm9v a2xldCc6dmFyICRwYWdlcz0kKCc8ZGl2IC8+JykuYWRkQ2xhc3MoJ3BhZ2VzJyk7 dmFyICRpbmRleD0kKCc8ZGl2IC8+JykuYWRkQ2xhc3MoJ2luZGV4Jyk7aWYoJ3Bh Z2VzJ2luIHNlY3Rpb24pe2ZvcihwYWdlIGluIHNlY3Rpb24ucGFnZXMpeyRwYWdl cy5hcHBlbmQoJC53aWtpRWRpdG9yLm1vZHVsZXMudG9vbGJhci5mbi5idWlsZFBh Z2UoY29udGV4dCxwYWdlLHNlY3Rpb24ucGFnZXNbcGFnZV0pKTskaW5kZXguYXBw ZW5kKCQud2lraUVkaXRvci5tb2R1bGVzLnRvb2xiYXIuZm4uYnVpbGRCb29rbWFy ayhjb250ZXh0LHBhZ2Usc2VjdGlvbi5wYWdlc1twYWdlXSkpO319CiRzZWN0aW9u LmFwcGVuZCgkaW5kZXgpLmFwcGVuZCgkcGFnZXMpOyQud2lraUVkaXRvci5tb2R1 bGVzLnRvb2xiYXIuZm4udXBkYXRlQm9va2xldFNlbGVjdGlvbihjb250ZXh0LHBh Z2UsJHBhZ2VzLCRpbmRleCk7YnJlYWs7fX0sdXBkYXRlQm9va2xldFNlbGVjdGlv bjpmdW5jdGlvbihjb250ZXh0LGlkLCRwYWdlcywkaW5kZXgpe3ZhciBjb29raWU9 J3dpa2lFZGl0b3ItJytjb250ZXh0Lmluc3RhbmNlKyctYm9va2xldC0nK2lkKyct cGFnZSc7dmFyIHNlbGVjdGVkPSQuY29va2llKGNvb2tpZSk7dmFyICRzZWxlY3Rl ZEluZGV4PSRpbmRleC5maW5kKCcqW3JlbD0nK3NlbGVjdGVkKyddJyk7aWYoJHNl bGVjdGVkSW5kZXguc2l6ZSgpPT0wKXtzZWxlY3RlZD0kaW5kZXguY2hpbGRyZW4o KS5lcSgwKS5hdHRyKCdyZWwnKTskLmNvb2tpZShjb29raWUsc2VsZWN0ZWQpO30K JHBhZ2VzLmNoaWxkcmVuKCkuaGlkZSgpOyRwYWdlcy5maW5kKCcqW3JlbD0nK3Nl bGVjdGVkKyddJykuc2hvdygpOyRpbmRleC5jaGlsZHJlbigpLnJlbW92ZUNsYXNz KCdjdXJyZW50Jyk7JHNlbGVjdGVkSW5kZXguYWRkQ2xhc3MoJ2N1cnJlbnQnKTt9 LGJ1aWxkOmZ1bmN0aW9uKGNvbnRleHQsY29uZmlnKXt2YXIgJHRhYnM9JCgnPGRp diAvPicpLmFkZENsYXNzKCd0YWJzJykuYXBwZW5kVG8oY29udGV4dC5tb2R1bGVz LnRvb2xiYXIuJHRvb2xiYXIpO3ZhciAkc2VjdGlvbnM9JCgnPGRpdiAvPicpLmFk ZENsYXNzKCdzZWN0aW9ucycpLmFwcGVuZFRvKGNvbnRleHQubW9kdWxlcy50b29s YmFyLiR0b29sYmFyKTtjb250ZXh0Lm1vZHVsZXMudG9vbGJhci4kdG9vbGJhci5h cHBlbmQoJCgnPGRpdiAvPicpLmNzcygnY2xlYXInLCdib3RoJykpO3ZhciBzZWN0 aW9uUXVldWU9W107Zm9yKHNlY3Rpb24gaW4gY29uZmlnKXtpZihzZWN0aW9uPT0n bWFpbicpe2NvbnRleHQubW9kdWxlcy50b29sYmFyLiR0b29sYmFyLnByZXBlbmQo JC53aWtpRWRpdG9yLm1vZHVsZXMudG9vbGJhci5mbi5idWlsZFNlY3Rpb24oY29u dGV4dCxzZWN0aW9uLGNvbmZpZ1tzZWN0aW9uXSkpO31lbHNle3NlY3Rpb25RdWV1 ZS5wdXNoKHsnJHNlY3Rpb25zJzokc2VjdGlvbnMsJ2NvbnRleHQnOmNvbnRleHQs J2lkJzpzZWN0aW9uLCdjb25maWcnOmNvbmZpZ1tzZWN0aW9uXX0pOyR0YWJzLmFw cGVuZCgkLndpa2lFZGl0b3IubW9kdWxlcy50b29sYmFyLmZuLmJ1aWxkVGFiKGNv bnRleHQsc2VjdGlvbixjb25maWdbc2VjdGlvbl0pKTt9fQokLmVhY2hBc3luYyhz ZWN0aW9uUXVldWUseydidWxrJzowLCdlbmQnOmZ1bmN0aW9uKCl7dmFyIG9sZFZh bHVlPSQoJ2JvZHknKS5jc3MoJ3Bvc2l0aW9uJyk7JCgnYm9keScpLmNzcygncG9z aXRpb24nLCdzdGF0aWMnKTskKCdib2R5JykuY3NzKCdwb3NpdGlvbicsb2xkVmFs dWUpO30sJ2xvb3AnOmZ1bmN0aW9uKGkscyl7cy4kc2VjdGlvbnMuYXBwZW5kKCQu d2lraUVkaXRvci5tb2R1bGVzLnRvb2xiYXIuZm4uYnVpbGRTZWN0aW9uKHMuY29u dGV4dCxzLmlkLHMuY29uZmlnKSk7dmFyICRzZWN0aW9uPXMuJHNlY3Rpb25zLmZp bmQoJy5zZWN0aW9uOnZpc2libGUnKTtpZigkc2VjdGlvbi5zaXplKCkpeyRzZWN0 aW9ucy5hbmltYXRlKHsnaGVpZ2h0Jzokc2VjdGlvbi5vdXRlckhlaWdodCgpfSwk c2VjdGlvbi5vdXRlckhlaWdodCgpKjIsZnVuY3Rpb24oKXtjb250ZXh0LmZuLnRy aWdnZXIoJ3Jlc2l6ZScpO30pO319fSk7fX19O30pKGpRdWVyeSk7 ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline; filename=ClickTracking.js Content-Type: application/x-javascript; charset=UTF-8; name=ClickTracking.js Content-Location: http://bits.wikimedia.org/w/extensions/UsabilityInitiative/ClickTracking/ClickTracking.js?281z67 Content-Transfer-Encoding: Base64 KCBmdW5jdGlvbiggJCApIHsKCWlmICggIXdnQ2xpY2tUcmFja2luZ0lzVGhyb3R0 bGVkICkgewoJCS8vIENyZWF0ZSAndHJhY2sgYWN0aW9uJyBmdW5jdGlvbiB0byBj YWxsIHRoZSBjbGlja3RyYWNraW5nIEFQSSBhbmQgc2VuZCB0aGUgSUQKCQkkLnRy YWNrQWN0aW9uID0gZnVuY3Rpb24oIGlkICkgewoJCQkkai5wb3N0KAoJCQkJCXdn U2NyaXB0UGF0aCArICcvYXBpLnBocCcsIHsgJ2FjdGlvbic6ICdjbGlja3RyYWNr aW5nJywgJ2V2ZW50aWQnOiBpZCwgJ3Rva2VuJzogd2dUcmFja2luZ1Rva2VuIH0K CQkJKTsKCQl9OwoJCS8vIEFkZCBjbGljayB0cmFja2luZyBob29rcyB0byB0aGUg c2lkZWJhcgoJCSRqKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJCSQo ICcjcC1sb2dvIGEsICNwLW5hdmlnYXRpb24gYSwgI3AtaW50ZXJhY3Rpb24gYSwg I3AtdGIgYScgKS5lYWNoKCBmdW5jdGlvbigpIHsKCQkJCXZhciBocmVmID0gJCh0 aGlzKS5hdHRyKCAnaHJlZicgKTsKCQkJCS8vIE9ubHkgbW9kaWZ5IGxvY2FsIGFu ZCBzYW1lLXNjaGVtYSBVUkxzCgkJCQlpZiAoIGhyZWZbMF0gPT0gJy8nIHx8IGhy ZWYubWF0Y2goIC9eaHR0cHM/OlwvXC8vICkgKSB7CgkJCQkJdmFyIGlkID0gJ2xl ZnRuYXYtJyArIHNraW4gKyAnLScgKyAoICQodGhpcykuYXR0ciggJ2lkJyApIHx8 ICQodGhpcykucGFyZW50KCkuYXR0ciggJ2lkJyApICk7CgkJCQkJaHJlZiA9IHdn U2NyaXB0UGF0aCArICcvYXBpLnBocD9hY3Rpb249Y2xpY2t0cmFja2luZycgKwoJ CQkJCQknJmV2ZW50aWQ9JyArIGlkICsgJyZ0b2tlbj0nICsgd2dUcmFja2luZ1Rv a2VuICsgJyZyZWRpcmVjdHRvPScgKyBlc2NhcGUoIGhyZWYgKTsKCQkJCQkkKHRo aXMpLmF0dHIoICdocmVmJywgaHJlZiApOwoJCQkJfQoJCQl9ICk7CgkJfSApOwoJ fQp9ICkoIGpRdWVyeSApOwo= ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline; filename=Vector.combined.min.js Content-Type: application/x-javascript; charset=UTF-8; name=Vector.combined.min.js Content-Location: http://bits.wikimedia.org/w/extensions/UsabilityInitiative/Vector/Vector.combined.min.js?281z67 Content-Transfer-Encoding: Base64 CiRqKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpe2lmKCF3Z1ZlY3RvckVuYWJs ZWRNb2R1bGVzLmNvbGxhcHNpYmxlbmF2KXtyZXR1cm4gdHJ1ZTt9CiRqKCcjcGFu ZWwnKS5hZGRDbGFzcygnY29sbGFwc2libGUtbmF2Jyk7JGooJyNwYW5lbCA+IGRp di5wb3J0YWw6Zmlyc3QnKS5hZGRDbGFzcygnZXhwYW5kZWQnKS5maW5kKCdkaXYu Ym9keScpLnNob3coKTskaignI3BhbmVsID4gZGl2LnBvcnRhbDpub3QoOmZpcnN0 KScpLmVhY2goZnVuY3Rpb24oaSl7dmFyIHN0YXRlPSRqLmNvb2tpZSgndmVjdG9y LW5hdi0nKyRqKHRoaXMpLmF0dHIoJ2lkJykpO2lmKHN0YXRlPT0ndHJ1ZSd8fChz dGF0ZT09bnVsbCYmaTwxKSl7JGoodGhpcykuYWRkQ2xhc3MoJ2V4cGFuZGVkJyku ZmluZCgnZGl2LmJvZHknKS5zaG93KCk7fWVsc2V7JGoodGhpcykuYWRkQ2xhc3Mo J2NvbGxhcHNlZCcpO319KTtmdW5jdGlvbiB0b2dnbGUoJGVsZW1lbnQpeyRqLmNv b2tpZSgndmVjdG9yLW5hdi0nKyRlbGVtZW50LnBhcmVudCgpLmF0dHIoJ2lkJyks JGVsZW1lbnQucGFyZW50KCkuaXMoJy5jb2xsYXBzZWQnKSk7JGVsZW1lbnQucGFy ZW50KCkudG9nZ2xlQ2xhc3MoJ2V4cGFuZGVkJykudG9nZ2xlQ2xhc3MoJ2NvbGxh cHNlZCcpLmZpbmQoJ2Rpdi5ib2R5Jykuc2xpZGVUb2dnbGUoJ2Zhc3QnKTt9CnZh ciAkaGVhZGluZ3M9JGooJyNwYW5lbCA+IGRpdi5wb3J0YWwgPiBoNScpO3ZhciBt YXhUST0wOyRqKCdbdGFiaW5kZXhdJykuZWFjaChmdW5jdGlvbigpe3ZhciB0aT1w YXJzZUludCgkaih0aGlzKS5hdHRyKCd0YWJpbmRleCcpKTtpZih0aT5tYXhUSSkK bWF4VEk9dGk7fSk7dmFyIHRhYkluZGV4PW1heFRJKzE7JGooJyNzZWFyY2hJbnB1 dCcpLmF0dHIoJ3RhYmluZGV4Jyx0YWJJbmRleCsrKTskaGVhZGluZ3MuZWFjaChm dW5jdGlvbigpeyRqKHRoaXMpLmF0dHIoJ3RhYmluZGV4Jyx0YWJJbmRleCsrKTt9 KTskaGVhZGluZ3Mua2V5ZG93bihmdW5jdGlvbihldmVudCl7aWYoZXZlbnQud2hp Y2g9PTEzfHxldmVudC53aGljaD09MzIpe3RvZ2dsZSgkaih0aGlzKSk7fX0pLm1v dXNlZG93bihmdW5jdGlvbigpe3RvZ2dsZSgkaih0aGlzKSk7JGoodGhpcykuYmx1 cigpO3JldHVybiBmYWxzZTt9KTt9KTskaihkb2N1bWVudCkucmVhZHkoZnVuY3Rp b24oKXtpZighd2dWZWN0b3JFbmFibGVkTW9kdWxlcy5jb2xsYXBzaWJsZXRhYnMp e3JldHVybiB0cnVlO30KdmFyIHJ0bD0kaignYm9keScpLmlzKCcucnRsJyk7JGou Y29sbGFwc2libGVUYWJzLm1vdmVUb0NvbGxhcHNlZD1mdW5jdGlvbihlbGUpe3Zh ciAkbW92aW5nPSRqKGVsZSk7JGouY29sbGFwc2libGVUYWJzLmdldFNldHRpbmdz KCRqKCRqLmNvbGxhcHNpYmxlVGFicy5nZXRTZXR0aW5ncygkbW92aW5nKS5leHBh bmRlZENvbnRhaW5lcikpLnNoaWZ0aW5nPXRydWU7dmFyIGRhdGE9JGouY29sbGFw c2libGVUYWJzLmdldFNldHRpbmdzKCRtb3ZpbmcpO3ZhciB0YXJnZXQ9ZGF0YS5j b2xsYXBzZWRDb250YWluZXI7JG1vdmluZy5jc3MoInBvc2l0aW9uIiwicmVsYXRp dmUiKS5jc3MoKHJ0bD8nbGVmdCc6J3JpZ2h0JyksMCkuYW5pbWF0ZSh7d2lkdGg6 JzFweCd9LCJub3JtYWwiLGZ1bmN0aW9uKCl7JGoodGhpcykuaGlkZSgpOyRqKCc8 c3BhbiBjbGFzcz0icGxhY2Vob2xkZXIiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij48 L3NwYW4+JykuaW5zZXJ0QWZ0ZXIodGhpcyk7JGoodGhpcykucmVtb3ZlKCkucHJl cGVuZFRvKHRhcmdldCkuZGF0YSgnY29sbGFwc2libGVUYWJzU2V0dGluZ3MnLGRh dGEpOyRqKHRoaXMpLmF0dHIoJ3N0eWxlJywnZGlzcGxheTpsaXN0LWl0ZW07Jyk7 JGouY29sbGFwc2libGVUYWJzLmdldFNldHRpbmdzKCRqKCRqLmNvbGxhcHNpYmxl VGFicy5nZXRTZXR0aW5ncygkaihlbGUpKS5leHBhbmRlZENvbnRhaW5lcikpLnNo aWZ0aW5nPWZhbHNlOyRqLmNvbGxhcHNpYmxlVGFicy5oYW5kbGVSZXNpemUoKTt9 KTt9OyRqLmNvbGxhcHNpYmxlVGFicy5tb3ZlVG9FeHBhbmRlZD1mdW5jdGlvbihl bGUpe3ZhciAkbW92aW5nPSRqKGVsZSk7JGouY29sbGFwc2libGVUYWJzLmdldFNl dHRpbmdzKCRqKCRqLmNvbGxhcHNpYmxlVGFicy5nZXRTZXR0aW5ncygkbW92aW5n KS5leHBhbmRlZENvbnRhaW5lcikpLnNoaWZ0aW5nPXRydWU7dmFyIGRhdGE9JGou Y29sbGFwc2libGVUYWJzLmdldFNldHRpbmdzKCRtb3ZpbmcpO3ZhciAkdGFyZ2V0 PSRqKGRhdGEuZXhwYW5kZWRDb250YWluZXIpLmZpbmQoJ3NwYW4ucGxhY2Vob2xk ZXI6Zmlyc3QnKTt2YXIgZXhwYW5kZWRXaWR0aD1kYXRhLmV4cGFuZGVkV2lkdGg7 JG1vdmluZy5jc3MoInBvc2l0aW9uIiwicmVsYXRpdmUiKS5jc3MoKHJ0bD8ncmln aHQnOidsZWZ0JyksMCkuY3NzKCd3aWR0aCcsJzFweCcpOyR0YXJnZXQucmVwbGFj ZVdpdGgoJG1vdmluZy5yZW1vdmUoKS5jc3MoJ3dpZHRoJywnMXB4JykuZGF0YSgn Y29sbGFwc2libGVUYWJzU2V0dGluZ3MnLGRhdGEpLmFuaW1hdGUoe3dpZHRoOmV4 cGFuZGVkV2lkdGgrInB4In0sIm5vcm1hbCIsZnVuY3Rpb24oKXskaih0aGlzKS5h dHRyKCdzdHlsZScsJ2Rpc3BsYXk6YmxvY2s7Jyk7JGouY29sbGFwc2libGVUYWJz LmdldFNldHRpbmdzKCRqKCRqLmNvbGxhcHNpYmxlVGFicy5nZXRTZXR0aW5ncygk bW92aW5nKS5leHBhbmRlZENvbnRhaW5lcikpLnNoaWZ0aW5nPWZhbHNlOyRqLmNv bGxhcHNpYmxlVGFicy5oYW5kbGVSZXNpemUoKTt9KSk7fTskaignI3Atdmlld3Mg dWwnKS5iaW5kKCJiZWZvcmVUYWJDb2xsYXBzZSIsZnVuY3Rpb24oKXtpZigkaign I3AtY2FjdGlvbnMnKS5jc3MoJ2Rpc3BsYXknKT09J25vbmUnKQokaigiI3AtY2Fj dGlvbnMiKS5hZGRDbGFzcygiZmlsbGVkUG9ydGxldCIpLnJlbW92ZUNsYXNzKCJl bXB0eVBvcnRsZXQiKS5maW5kKCdoNScpLmNzcygnd2lkdGgnLCcxcHgnKS5hbmlt YXRlKHsnd2lkdGgnOicyNnB4J30sMzkwKTt9KS5iaW5kKCJiZWZvcmVUYWJFeHBh bmQiLGZ1bmN0aW9uKCl7aWYoJGooJyNwLWNhY3Rpb25zIGxpJykubGVuZ3RoPT0x KQokaigiI3AtY2FjdGlvbnMgaDUiKS5hbmltYXRlKHsnd2lkdGgnOicxcHgnfSwz NzAsZnVuY3Rpb24oKXskaih0aGlzKS5hdHRyKCdzdHlsZScsJycpLnBhcmVudCgp LmFkZENsYXNzKCJlbXB0eVBvcnRsZXQiKS5yZW1vdmVDbGFzcygiZmlsbGVkUG9y dGxldCIpO30pO30pLmNvbGxhcHNpYmxlVGFicyh7ZXhwYW5kQ29uZGl0aW9uOmZ1 bmN0aW9uKGVsZVdpZHRoKXtpZihydGwpe3JldHVybigkaignI3JpZ2h0LW5hdmln YXRpb24nKS5wb3NpdGlvbigpLmxlZnQrJGooJyNyaWdodC1uYXZpZ2F0aW9uJyku d2lkdGgoKSsxKTwoJGooJyNsZWZ0LW5hdmlnYXRpb24nKS5wb3NpdGlvbigpLmxl ZnQtZWxlV2lkdGgpO31lbHNle3JldHVybigkaignI2xlZnQtbmF2aWdhdGlvbicp LnBvc2l0aW9uKCkubGVmdCskaignI2xlZnQtbmF2aWdhdGlvbicpLndpZHRoKCkr MSk8KCRqKCcjcmlnaHQtbmF2aWdhdGlvbicpLnBvc2l0aW9uKCkubGVmdC1lbGVX aWR0aCk7fX0sY29sbGFwc2VDb25kaXRpb246ZnVuY3Rpb24oKXtpZihydGwpe3Jl dHVybigkaignI3JpZ2h0LW5hdmlnYXRpb24nKS5wb3NpdGlvbigpLmxlZnQrJGoo JyNyaWdodC1uYXZpZ2F0aW9uJykud2lkdGgoKSk+JGooJyNsZWZ0LW5hdmlnYXRp b24nKS5wb3NpdGlvbigpLmxlZnQ7fWVsc2V7cmV0dXJuKCRqKCcjbGVmdC1uYXZp Z2F0aW9uJykucG9zaXRpb24oKS5sZWZ0KyRqKCcjbGVmdC1uYXZpZ2F0aW9uJyku d2lkdGgoKSk+JGooJyNyaWdodC1uYXZpZ2F0aW9uJykucG9zaXRpb24oKS5sZWZ0 O319fSk7fSk7JGooZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7aWYoIXdnVmVj dG9yRW5hYmxlZE1vZHVsZXMuZWRpdHdhcm5pbmd8fCRqKCcjd3BUZXh0Ym94MScp LnNpemUoKT09MCl7cmV0dXJuIHRydWU7fQokaignI3dwVGV4dGJveDEsICN3cFN1 bW1hcnknKS5lYWNoKGZ1bmN0aW9uKCl7JGoodGhpcykuZGF0YSgnb3JpZ3RleHQn LCRqKHRoaXMpLnZhbCgpKTt9KTtmYWxsYmFja1dpbmRvd09uQmVmb3JlVW5sb2Fk PXdpbmRvdy5vbmJlZm9yZXVubG9hZDt3aW5kb3cub25iZWZvcmV1bmxvYWQ9ZnVu Y3Rpb24oKXt2YXIgZmFsbGJhY2tSZXN1bHQ9dW5kZWZpbmVkO2lmKGZhbGxiYWNr V2luZG93T25CZWZvcmVVbmxvYWQpe2ZhbGxiYWNrUmVzdWx0PWZhbGxiYWNrV2lu ZG93T25CZWZvcmVVbmxvYWQoKTt9CmlmKGZhbGxiYWNrUmVzdWx0IT09dW5kZWZp bmVkKXtyZXR1cm4gZmFsbGJhY2tSZXN1bHQ7fQppZih3Z0FjdGlvbj09J3N1Ym1p dCd8fCRqKCcjd3BUZXh0Ym94MScpLmRhdGEoJ29yaWd0ZXh0JykhPSRqKCcjd3BU ZXh0Ym94MScpLnZhbCgpfHwkaignI3dwU3VtbWFyeScpLmRhdGEoJ29yaWd0ZXh0 JykhPSRqKCcjd3BTdW1tYXJ5JykudmFsKCkpe3JldHVybiBtdy51c2FiaWxpdHku Z2V0TXNnKCd2ZWN0b3ItZWRpdHdhcm5pbmctd2FybmluZycpO319CiRqKCdmb3Jt Jykuc3VibWl0KGZ1bmN0aW9uKCl7d2luZG93Lm9uYmVmb3JldW5sb2FkPWZhbGxi YWNrV2luZG93T25CZWZvcmVVbmxvYWQ7fSk7fSk7dmFyIGZhbGxiYWNrV2luZG93 T25CZWZvcmVVbmxvYWQ9bnVsbDskaihkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24o KXtpZighd2dWZWN0b3JFbmFibGVkTW9kdWxlcy5mb290ZXJjbGVhbnVwKXtyZXR1 cm4gdHJ1ZTt9CiRqKCcjZWRpdHBhZ2UtY29weXdhcm4nKS5hZGQoJy5lZGl0T3B0 aW9ucycpLndyYXBBbGwoJzxkaXYgaWQ9ImVkaXRwYWdlLWJvdHRvbSI+PC9kaXY+ Jyk7JGooJyN3cFN1bW1hcnknKS5kYXRhKCdoaW50JywkaignI3dwU3VtbWFyeUxh YmVsIHNwYW4gc21hbGwnKS5yZW1vdmUoKS50ZXh0KCkucmVwbGFjZSgvXCl8XCgv ZywnJykpLmNoYW5nZShmdW5jdGlvbigpe2lmKCRqKHRoaXMpLnZhbCgpLmxlbmd0 aD09MCl7JGoodGhpcykuYWRkQ2xhc3MoJ2lubGluZS1oaW50JykudmFsKCRqKHRo aXMpLmRhdGEoJ2hpbnQnKSk7fWVsc2V7JGoodGhpcykucmVtb3ZlQ2xhc3MoJ2lu bGluZS1oaW50Jyk7fX0pLmZvY3VzKGZ1bmN0aW9uKCl7aWYoJGoodGhpcykudmFs KCk9PSRqKHRoaXMpLmRhdGEoJ2hpbnQnKSl7JGoodGhpcykucmVtb3ZlQ2xhc3Mo J2lubGluZS1oaW50JykudmFsKCIiKTt9fSkuYmx1cihmdW5jdGlvbigpeyRqKHRo aXMpLnRyaWdnZXIoJ2NoYW5nZScpO30pLnRyaWdnZXIoJ2NoYW5nZScpOyRqKCcj d3BTdW1tYXJ5JykuYWRkKCcuZWRpdENoZWNrYm94ZXMnKS53cmFwQWxsKCc8ZGl2 IGlkPSJlZGl0cGFnZS1zdW1tYXJ5LWZpZWxkcyI+PC9kaXY+Jyk7JGooJyNlZGl0 cGFnZS1zcGVjaWFsY2hhcnMnKS5yZW1vdmUoKTt2YXIgdHJhbnNjbHVzaW9uQ291 bnQ9JGooJy50ZW1wbGF0ZXNVc2VkIHVsIGxpJykuc2l6ZSgpOyRqKCcudGVtcGxh dGVzVXNlZCB1bCcpLndyYXAoJzxkaXYgaWQ9InRyYW5zY2x1c2lvbnMtbGlzdCIg Y2xhc3M9ImNvbGxhcHNpYmxlLWxpc3QgY29sbGFwc2VkIj48L2Rpdj4nKS5wYXJl bnQoKS5wcmVwZW5kKCc8bGFiZWw+VGhpcyBwYWdlIGNvbnRhaW5zIDxhIGhyZWY9 Imh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvdHJhbnNjbHVzaW9uIj50cmFu c2NsdXNpb25zPC9hPiBvZiA8c3Ryb25nPicKK3RyYW5zY2x1c2lvbkNvdW50Cisn PC9zdHJvbmc+IG90aGVyIHBhZ2VzLjwvbGFiZWw+Jyk7JGooJy5tdy10ZW1wbGF0 ZXNVc2VkRXhwbGFuYXRpb24nKS5yZW1vdmUoKTskaignLmNvbGxhcHNpYmxlLWxp c3QgbGFiZWwnKS5jbGljayhmdW5jdGlvbigpeyRqKHRoaXMpLnBhcmVudCgpLnRv Z2dsZUNsYXNzKCdleHBhbmRlZCcpLnRvZ2dsZUNsYXNzKCdjb2xsYXBzZWQnKS5m aW5kKCd1bCcpLnNsaWRlVG9nZ2xlKCdmYXN0Jyk7cmV0dXJuIGZhbHNlO30pLnRy aWdnZXIoJ2NsaWNrJyk7JGooJyN3cFByZXZpZXcsICN3cERpZmYsIC5lZGl0SGVs cCwgI2VkaXRwYWdlLXNwZWNpYWxjaGFycycpLnJlbW92ZSgpOyRqKCcjbXctZWRp dGZvcm0tY2FuY2VsJykucmVtb3ZlKCkuYXBwZW5kVG8oJy5lZGl0QnV0dG9ucycp O30pO2lmKHdnVmVjdG9yRW5hYmxlZE1vZHVsZXMuc2ltcGxlc2VhcmNoJiZza2lu PT0ndmVjdG9yJyYmdHlwZW9mIG9zX2F1dG9sb2FkX2lucHV0cyE9PSd1bmRlZmlu ZWQnJiZvc19hdXRvbG9hZF9mb3JtcyE9PSd1bmRlZmluZWQnKXtvc19hdXRvbG9h ZF9pbnB1dHM9W107b3NfYXV0b2xvYWRfZm9ybXM9W107fQokaihkb2N1bWVudCku cmVhZHkoZnVuY3Rpb24oKXtpZighd2dWZWN0b3JFbmFibGVkTW9kdWxlcy5zaW1w bGVzZWFyY2h8fHNraW4hPSd2ZWN0b3InKXtyZXR1cm4gdHJ1ZTt9CiRqKCdkaXYj c2ltcGxlU2VhcmNoID4gaW5wdXQjc2VhcmNoSW5wdXQnKS5lYWNoKGZ1bmN0aW9u KCl7JGooJzxsYWJlbCAvPicpLnRleHQobXcudXNhYmlsaXR5LmdldE1zZygndmVj dG9yLXNpbXBsZXNlYXJjaC1zZWFyY2gnKSkuY3NzKHsnZGlzcGxheSc6J25vbmUn LCdwb3NpdGlvbic6J2Fic29sdXRlJywnYm90dG9tJzowLCdwYWRkaW5nJzonMC4y NWVtJywnY29sb3InOicjOTk5OTk5JywnY3Vyc29yJzondGV4dCd9KS5jc3MoKCRq KCdib2R5JykuaXMoJy5ydGwnKT8ncmlnaHQnOidsZWZ0JyksMCkuY2xpY2soZnVu Y3Rpb24oKXskaih0aGlzKS5wYXJlbnQoKS5maW5kKCdpbnB1dCNzZWFyY2hJbnB1 dCcpLmZvY3VzKCk7fSkuYXBwZW5kVG8oJGoodGhpcykucGFyZW50KCkpO2lmKCRq KHRoaXMpLnZhbCgpPT0nJyl7JGoodGhpcykucGFyZW50KCkuZmluZCgnbGFiZWwn KS5mYWRlSW4oMTAwKTt9fSkuZm9jdXMoZnVuY3Rpb24oKXskaih0aGlzKS5wYXJl bnQoKS5maW5kKCdsYWJlbCcpLmZhZGVPdXQoMTAwKTt9KS5ibHVyKGZ1bmN0aW9u KCl7aWYoJGoodGhpcykudmFsKCk9PScnKXskaih0aGlzKS5wYXJlbnQoKS5maW5k KCdsYWJlbCcpLmZhZGVJbigxMDApO319KTskaignI3NlYXJjaElucHV0LCAjc2Vh cmNoSW5wdXQyLCAjcG93ZXJTZWFyY2hUZXh0LCAjc2VhcmNoVGV4dCcpLnN1Z2dl c3Rpb25zKHtmZXRjaDpmdW5jdGlvbihxdWVyeSl7dmFyICR0aGlzPSRqKHRoaXMp O3ZhciByZXF1ZXN0PSRqLmFqYXgoe3VybDp3Z1NjcmlwdFBhdGgrJy9hcGkucGhw JyxkYXRhOnsnYWN0aW9uJzonb3BlbnNlYXJjaCcsJ3NlYXJjaCc6cXVlcnksJ25h bWVzcGFjZSc6MCwnc3VnZ2VzdCc6Jyd9LGRhdGFUeXBlOidqc29uJyxzdWNjZXNz OmZ1bmN0aW9uKGRhdGEpeyR0aGlzLnN1Z2dlc3Rpb25zKCdzdWdnZXN0aW9ucycs ZGF0YVsxXSk7fX0pOyRqKHRoaXMpLmRhdGEoJ3JlcXVlc3QnLHJlcXVlc3QpO30s Y2FuY2VsOmZ1bmN0aW9uKCl7dmFyIHJlcXVlc3Q9JGoodGhpcykuZGF0YSgncmVx dWVzdCcpO2lmKHJlcXVlc3QmJnR5cGVvZiByZXF1ZXN0LmFib3J0PT0nZnVuY3Rp b24nKXtyZXF1ZXN0LmFib3J0KCk7JGoodGhpcykucmVtb3ZlRGF0YSgncmVxdWVz dCcpO319LHJlc3VsdDp7c2VsZWN0OmZ1bmN0aW9uKCR0ZXh0Ym94KXskdGV4dGJv eC5jbG9zZXN0KCdmb3JtJykuc3VibWl0KCk7fX0sZGVsYXk6MTIwLHBvc2l0aW9u RnJvbUxlZnQ6JGooJ2JvZHknKS5pcygnLnJ0bCcpfSk7JGooJyNzZWFyY2hJbnB1 dCcpLnN1Z2dlc3Rpb25zKHtyZXN1bHQ6e3NlbGVjdDpmdW5jdGlvbigkdGV4dGJv eCl7JHRleHRib3guY2xvc2VzdCgnZm9ybScpLnN1Ym1pdCgpO319LHNwZWNpYWw6 e3JlbmRlcjpmdW5jdGlvbihxdWVyeSl7aWYoJGoodGhpcykuY2hpbGRyZW4oKS5z aXplKCk9PTApeyRqKHRoaXMpLnNob3coKQokbGFiZWw9JGooJzxkaXYgLz4nKS5h ZGRDbGFzcygnc3BlY2lhbC1sYWJlbCcpLnRleHQobXcudXNhYmlsaXR5LmdldE1z ZygndmVjdG9yLXNpbXBsZXNlYXJjaC1jb250YWluaW5nJykpLmFwcGVuZFRvKCRq KHRoaXMpKTskcXVlcnk9JGooJzxkaXYgLz4nKS5hZGRDbGFzcygnc3BlY2lhbC1x dWVyeScpLnRleHQocXVlcnkpLmFwcGVuZFRvKCRqKHRoaXMpKTskcXVlcnkuYXV0 b0VsbGlwc2lzKCk7fWVsc2V7JGoodGhpcykuZmluZCgnLnNwZWNpYWwtcXVlcnkn KS5lbXB0eSgpLnRleHQocXVlcnkpLmF1dG9FbGxpcHNpcygpO319LHNlbGVjdDpm dW5jdGlvbigkdGV4dGJveCl7JHRleHRib3guY2xvc2VzdCgnZm9ybScpLmFwcGVu ZCgkaignPGlucHV0IC8+JykuYXR0cih7J3R5cGUnOidoaWRkZW4nLCduYW1lJzon ZnVsbHRleHQnLCd2YWx1ZSc6MX0pKTskdGV4dGJveC5jbG9zZXN0KCdmb3JtJyku c3VibWl0KCk7fX0sJHJlZ2lvbjokaignI3NpbXBsZVNlYXJjaCcpfSk7fSk7 ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline; filename=centralnotice.js Content-Type: text/javascript; charset=utf-8; name=centralnotice.js Content-Location: http://upload.wikimedia.org/centralnotice/wikinews/en/centralnotice.js?281z67 Content-Transfer-Encoding: 8bit function toggleNotice() { var notice = document.getElementById('centralNotice'); if (!wgNoticeToggleState) { notice.className = notice.className.replace('collapsed', 'expanded'); toggleNoticeCookie('0'); } else { notice.className = notice.className.replace('expanded', 'collapsed'); toggleNoticeCookie('1'); } wgNoticeToggleState = !wgNoticeToggleState; } function toggleNoticeStyle(elems, display) { if(elems) for(var i=0;i<elems.length;i++) elems[i].style.display = display; } function toggleNoticeCookie(state) { var e = new Date(); e.setTime( e.getTime() + (7*24*60*60*1000) ); // one week var work='hidesnmessage='+state+'; expires=' + e.toGMTString() + '; path=/'; document.cookie = work; } function pickTemplate(templates, weights) { var weightedTemplates = new Array(); var currentTemplate = 0; var totalWeight = 0; if (templates.length == 0) return ''; while (currentTemplate < templates.length) { totalWeight += weights[currentTemplate]; for (i=0; i<weights[currentTemplate]; i++) { weightedTemplates[weightedTemplates.length] = templates[currentTemplate]; } currentTemplate++; } if (totalWeight == 0) return ''; var randomnumber=Math.floor(Math.random()*totalWeight); return weightedTemplates[randomnumber]; } var wgNoticeToggleState = (document.cookie.indexOf('hidesnmessage=1')==-1); document.writeln("\x3cstyle type=\"text/css\"\x3e\n#centralNotice .siteNoticeSmall{display:none;}\n#centralNotice .siteNoticeSmallAnon{display:none;}\n#centralNotice .siteNoticeSmallUser{display:none;}\n#centralNotice.collapsed .siteNoticeBig{display:none;}\n#centralNotice.collapsed .siteNoticeSmall{display:block;}\n#centralNotice.collapsed .siteNoticeSmallUser{display:block;}\n#centralNotice.collapsed .siteNoticeSmallAnon{display:block;}\n#centralNotice.anonnotice .siteNoticeSmallUser{display:none !important;}\n#centralNotice.usernotice .siteNoticeSmallAnon{display:none !important;}\n\x3c/style\x3e"); wgNotice=pickTemplate([],[]); if (wgNotice != '') wgNotice='<div id="centralNotice" class="' + (wgNoticeToggleState ? 'expanded' : 'collapsed') + ' ' + (wgUserName ? 'usernotice' : 'anonnotice' ) + '">' + wgNotice+'</div>'; ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline; filename=index.js Content-Type: text/javascript; charset=UTF-8; name=index.js Content-Location: http://en.wikinews.org/w/index.php?title=-&action=raw&gen=js&useskin=vector&281z67 Content-Transfer-Encoding: 8bit /* generated javascript */ var skin = 'vector'; var stylepath = 'http://bits.wikimedia.org/skins-1.5'; /* MediaWiki:Common.js */ /* Any JavaScript here will be loaded for all users on every page load. Some other stuff is located at [[mediawiki:monobook.js]] */ /* If you don't know what you are doing, please test/ask for advice before hitting save */ /*Please document this page at [[Wikinews:Javascript]]*/ //The jslint stuff just covers the editintro for wikipedians for now. /*global wgPageName, addOnloadHook, wgNamespaceNumber, getElementsByClassName */ /*jslint white: true, browser: true, undef: true, nomen: true, eqeqeq: true, bitwise: true, regexp: true, newcap: true, immed: true, indent: 1 */ /*members April, August, December, February, January, July, June, March, May, November, October, September, UTC, dateFunc, dateRegex, getElementById, getElementsByTagName, getTime, href, indexOf, length, oldNews, parseDate, referrer, replace, title */ /*Avoid importScript() as it seems to slow down page-load time*/ // Adding functions to import external scripts importedScripts = {}; // object keeping track of included scripts, so a script ain't included twice function importScript( page ) { page = encodeURIComponent(page.replace(/ /g, '_' )); if (importedScripts[page]) return; else importedScripts[page] = true; var scriptElem = document.createElement( 'script' ); scriptElem.setAttribute( 'type' , 'text/javascript' ); //increment the scrver to force hard refresh scriptElem.setAttribute( 'src' , wgScript + '?title=' + page + '&action=raw&ctype=text/javascript' + '&scrver=7'); document.getElementsByTagName( 'head' )[0].appendChild( scriptElem ); } function importStylesheet( page ) { page = encodeURIComponent(page.replace(/ /g, '_' )); if (importedScripts[page]) return; else importedScripts[page] = true; if (document.createStyleSheet) { document.createStyleSheet(wgScript + '?title=' + page + "&action=raw&ctype=text/css"); } else { var styleElem = document.createElement('style'); styleElem.setAttribute('type', 'text/css'); styleElem.appendChild(document.createTextNode('@import "' + wgScript + '?title=' + page + '&action=raw&ctype=text/css";')); document.getElementsByTagName('head')[0].appendChild(styleElem); } } // for backwards compatibility var addLoadEvent = addOnloadHook; // Provides an easy way to disable load dependent features function delLoadEvent(func) { for (var i = 0; i < onloadFuncts.length; i++) { if (onloadFuncts[i] == func) onloadFuncts.splice(i, 1); } } // hasClass() // Description: Uses regular expressions and caching for better performance. // Maintainers: w:User:Mike Dillon, w:User:R. Koot, w:User:SG var hasClass = (function () { var reCache = {}; return function (element, className) { return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))).test(element.className); }; })(); // name of project var wgProject = wgServer.replace("http://", ""); /* ==RSS Feed insert. Only latest news and category. Should we add others? == */ /* Handled in php - [[bugzilla:15080]]. document.write('<link type="application/rss+xml" href="http://feeds.feedburner.com/WikinewsLatestNews" rel="alternate" title="Lastest News (RSS)" \/>'); */ //Zach's Awesome category thingy takes a cat (?cat=foo) and intersects it with published to make an rss feed. Also can take ?lang=bar for other lang if (wgNamespaceNumber === 14 ) { document.write('<link type="application/rss+xml" href="http://toolserver.org/~zach/cgi-bin/rss.cgi?cat=' + encodeURIComponent(wgTitle.replace(' ', "_")) + '" rel="alternate" title="Lastest ' + wgTitle.replace('"', "").replace('&', "&") + ' News (RSS)" \/>'); } addOnloadHook(function () { if (wgNamespaceNumber === 100 && document.getElementById("rssFeedLink")) { //portal with cat of same name var link = document.createElement('link'); link.type = 'application/rss+xml'; link.href = 'http://toolserver.org/~zach/cgi-bin/rss.cgi?cat=' + encodeURIComponent(wgTitle.replace(' ', "_")); link.rel = "alternate"; link.title = 'Lastest ' + wgTitle + ' News (RSS)' document.getElementsByTagName('head')[0].appendChild(link); } }); /* ==Dynamic Navigation== */ // Makes some dynamic nav boxes auto-close. See [[user:Bawolff/onebox-select.js]] & [[Template:Dynamic navigation noncentered]] // *Tested in MSIE 6, Opera 9.01, and firefox (1.5.0.11 and 2.0.0.something(I think its a 2 at the end) // *Adapted from the dynamic nav box script which is from somewhere on wikipedia // set up the words in your language var NavigationBarHide = '[ ↑ ]'; var NavigationBarShow = '[ ↓ ]'; var ONCE_NavigationBarHide = '[ ↑ ]'; var ONCE_NavigationBarShow = '[ ↓ ]'; // set up max count of Navigation Bars on page, if there are more, all will be hidden // NavigationBarShowDefault = 0; // all bars will be hidden // NavigationBarShowDefault = 1; // on pages with more than 1 bar all bars will be hidden var NavigationBarShowDefault = 1; var ONCE_NavigationBarShowDefault = 0; // shows and hides content and picture (if available) of navigation bars // Parameters: // indexNavigationBar: the index of navigation bar to be toggled function ONCE_toggleNavigationBar(ONCE_indexNavigationBar) { var ONCE_NavToggle = document.getElementById("NavToggleOnce" + ONCE_indexNavigationBar); var ONCE_NavFrame = document.getElementById("NavFrameOnce" + ONCE_indexNavigationBar); if (!ONCE_NavFrame || !ONCE_NavToggle) { return false; } // if shown now if (ONCE_NavToggle.firstChild.data == ONCE_NavigationBarHide) { for (var ONCE_NavChild = ONCE_NavFrame.firstChild; ONCE_NavChild != null; ONCE_NavChild = ONCE_NavChild.nextSibling) { if (hasClass(ONCE_NavChild, 'NavPic') || hasClass(ONCE_NavChild, 'NavContent')) { ONCE_NavChild.style.display = 'none'; } } ONCE_NavToggle.firstChild.data = ONCE_NavigationBarShow; // if hidden now } else if (ONCE_NavToggle.firstChild.data == ONCE_NavigationBarShow) { //Start hiding all open boxes. things with f is loops to close everything for (f = 1; f < 50; f++) { //prevent indef loop var ONCE_f_NavToggle = document.getElementById("NavToggleOnce" + f); var ONCE_f_NavFrame = document.getElementById("NavFrameOnce" + f); if (!ONCE_f_NavFrame || !ONCE_f_NavToggle) { break; } for (var ONCE_f_NavChild = ONCE_f_NavFrame.firstChild; ONCE_f_NavChild != null; ONCE_f_NavChild = ONCE_f_NavChild.nextSibling) { if (hasClass(ONCE_f_NavChild, 'NavPic') || hasClass(ONCE_f_NavChild, 'NavContent')) { ONCE_f_NavChild.style.display = 'none'; } } ONCE_f_NavToggle.firstChild.data = ONCE_NavigationBarShow; } // open selected one for (var ONCE_NavChild = ONCE_NavFrame.firstChild; ONCE_NavChild != null; ONCE_NavChild = ONCE_NavChild.nextSibling) { if (hasClass(ONCE_NavChild, 'NavPic') || hasClass(ONCE_NavChild, 'NavContent')) { ONCE_NavChild.style.display = 'block'; } } ONCE_NavToggle.firstChild.data = ONCE_NavigationBarHide; } } // shows and hides content and picture (if available) of navigation bars // Parameters: // indexNavigationBar: the index of navigation bar to be toggled function toggleNavigationBar(indexNavigationBar) { var NavToggle = document.getElementById("NavToggle" + indexNavigationBar); var NavFrame = document.getElementById("NavFrame" + indexNavigationBar); if (!NavFrame || !NavToggle) { return false; } if (NavToggle.firstChild.data == NavigationBarHide) { // if shown now for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) { if (hasClass(NavChild, 'NavPic') || hasClass(NavChild, 'NavContent')) { NavChild.style.display = 'none'; } } NavToggle.firstChild.data = NavigationBarShow; } else if (NavToggle.firstChild.data == NavigationBarShow) { // if hidden now for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) { if (hasClass(NavChild, 'NavPic') || hasClass(NavChild, 'NavContent')) { NavChild.style.display = 'block'; } } NavToggle.firstChild.data = NavigationBarHide; } } // adds show/hide-button to navigation bars function createNavigationBarToggleButton() { var indexNavigationBar = 0, ONCE_indexNavigationBar = 0; var NavFrames = document.getElementsByTagName("div"); // iterate over all < div >-elements for (var i=0; NavFrame = NavFrames[i]; i++) { // if found a once navigation bar if (hasClass(NavFrame, 'NavFrame') && hasClass(NavFrame, 'NavOnce')) { ONCE_indexNavigationBar++; var ONCE_NavToggle = document.createElement("a"); ONCE_NavToggle.className = 'NavToggle'; ONCE_NavToggle.setAttribute('id', 'NavToggleOnce' + ONCE_indexNavigationBar); ONCE_NavToggle.setAttribute('href', 'javascript:ONCE_toggleNavigationBar(' + ONCE_indexNavigationBar + ');'); var ONCE_NavToggleText = document.createTextNode(ONCE_NavigationBarHide); ONCE_NavToggle.appendChild(ONCE_NavToggleText); // Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked) for (var j=0; j < NavFrame.childNodes.length; j++) { if (hasClass(NavFrame.childNodes[j], "NavHead")) { NavFrame.childNodes[j].appendChild(ONCE_NavToggle); } } NavFrame.setAttribute('id', 'NavFrameOnce' + ONCE_indexNavigationBar); } else if (hasClass(NavFrame, "NavFrame")) { // if found a navigation bar indexNavigationBar++; var NavToggle = document.createElement("a"); NavToggle.className = 'NavToggle'; NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar); NavToggle.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');'); var NavToggleText = document.createTextNode(NavigationBarHide); NavToggle.appendChild(NavToggleText); // Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked) for (var j=0; j < NavFrame.childNodes.length; j++) { if (hasClass(NavFrame.childNodes[j], "NavHead")) { NavFrame.childNodes[j].appendChild(NavToggle); } } NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar); } } // if more Navigation Bars found than Default: hide all if (NavigationBarShowDefault < indexNavigationBar) { for (var i=1; i<=indexNavigationBar; i++) { toggleNavigationBar(i); } } if (ONCE_NavigationBarShowDefault < ONCE_indexNavigationBar) { for (var i=1; i<=ONCE_indexNavigationBar; i++) { ONCE_toggleNavigationBar(i); } } } addLoadEvent(createNavigationBarToggleButton); // END Dynamic Navigation Bars // ============================================================ /* == custom edit buttons == */ if (mwCustomEditButtons) { mwCustomEditButtons[mwCustomEditButtons.length] = { "imageFile": "http://upload.wikimedia.org/wikipedia/commons/7/7f/Button_link_to_Wikipedia.png", "speedTip": "wikipedia link", "tagOpen": "[[w:", "tagClose": "|]]", "sampleText": "article title" }; mwCustomEditButtons[mwCustomEditButtons.length] = { "imageFile": "http://upload.wikimedia.org/wikipedia/commons/4/47/Button_redir.png", "speedTip": "Redirect", "tagOpen": "#REDIRECT[[", "tagClose": "]]", "sampleText": "Redirected to" }; } /* == Comment tabs == */ importScript("MediaWiki:Comments.js"); /* ==CGI:IRC login form== */ // See [[mediawiki:Irc.js]]. If this does something stupid, blame [[user:Bawolff]] //load irc login box if on page addLoadEvent(function () { if (document.getElementById("cgiircbox")) { var url = "http://en.wikinews.org/w/index.php?title=Mediawiki:Irc.js&action=raw&ctype=text/javascript&dontcountme=s"; var scriptElem = document.createElement( 'script' ); scriptElem.setAttribute( 'src' , url ); scriptElem.setAttribute( 'type' , 'text/javascript' ); document.getElementsByTagName( 'head' )[0].appendChild( scriptElem ); } }); /* ==Tabber code== */ /* This was originally from http://www.barelyfitz.com/projects/tabber/ This has been modified very slightly for wikinews by [[user:Bawolff]] (you can use any of my modifications under the same license as the original author specified) Please note, only the tabber code is under the MIT license. (the rest is probably either cc-by, GPL, or some combination thereof. its not really clear) Note i'm slowly modifying to use hasClass() as it is supposedly more efficient ================================================== $Id: tabber.js,v 1.9 2006/04/27 20:51:51 pat Exp $ tabber.js by Patrick Fitzgerald pat@barelyfitz.com Documentation can be found at the following URL: http://www.barelyfitz.com/projects/tabber/ License (http://www.opensource.org/licenses/mit-license.php) Copyright (c) 2006 Patrick Fitzgerald, modifed by Bawolff Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ==================================================*/ function tabberObj(argsObj) { var arg; /* name of an argument to override */ /* Element for the main tabber div. If you supply this in argsObj, then the init() method will be called. */ this.div = null; /* Class of the main tabber div */ this.classMain = "tabber"; /* Rename classMain to classMainLive after tabifying (so a different style can be applied) */ this.classMainLive = "tabberlive"; /* Class of each DIV that contains a tab */ this.classTab = "tabbertab"; /* Class to indicate which tab should be active on startup */ this.classTabDefault = "tabbertabdefault"; /* Class for the navigation UL */ this.classNav = "tabbernav"; /* add space between tabs to force line break. use class UseTabBreaks*/ this.spaceTabs = false; /* When a tab is to be hidden, instead of setting display='none', we set the class of the div to classTabHide. In your screen stylesheet you should set classTabHide to display:none. In your print stylesheet you should set display:block to ensure that all the information is printed. */ this.classTabHide = "tabbertabhide"; /* Class to set the navigation LI when the tab is active, so you can use a different style on the active tab. */ this.classNavActive = "tabberactive"; /* Elements that might contain the title for the tab, only used if a title is not specified in the TITLE attribute of DIV classTab. */ this.titleElements = ['h2','h3','h4','h5','h6']; /* Should we strip out the HTML from the innerHTML of the title elements? This should usually be true. */ this.titleElementsStripHTML = true; /* If the user specified the tab names using a TITLE attribute on the DIV, then the browser will display a tooltip whenever the mouse is over the DIV. To prevent this tooltip, we can remove the TITLE attribute after getting the tab name. */ this.removeTitle = true; /* If you want to add an id to each link set this to true */ this.addLinkId = false; /* If addIds==true, then you can set a format for the ids. <tabberid> will be replaced with the id of the main tabber div. <tabnumberzero> will be replaced with the tab number (tab numbers starting at zero) <tabnumberone> will be replaced with the tab number (tab numbers starting at one) <tabtitle> will be replaced by the tab title (with all non-alphanumeric characters removed) */ this.linkIdFormat = '<tabberid>nav<tabnumberone>'; /* You can override the defaults listed above by passing in an object: var mytab = new tabber({property:value,property:value}); */ for (arg in argsObj) { this[arg] = argsObj[arg]; } /* Create regular expressions for the class names; Note: if you change the class names after a new object is created you must also change these regular expressions. */ this.REclassMain = new RegExp('\\b' + this.classMain + '\\b', 'gi'); this.REclassMainLive = new RegExp('\\b' + this.classMainLive + '\\b', 'gi'); this.REclassTab = new RegExp('\\b' + this.classTab + '\\b', 'gi'); this.REclassTabDefault = new RegExp('\\b' + this.classTabDefault + '\\b', 'gi'); this.REclassTabHide = new RegExp('\\b' + this.classTabHide + '\\b', 'gi'); /* Array of objects holding info about each tab */ this.tabs = new Array(); /* If the main tabber div was specified, call init() now */ if (this.div) { this.init(this.div); /* We don't need the main div anymore, and to prevent a memory leak in IE, we must remove the circular reference between the div and the tabber object. */ this.div = null; } } /*-------------------------------------------------- Methods for tabberObj --------------------------------------------------*/ tabberObj.prototype.init = function(e) { /* Set up the tabber interface. e = element (the main containing div) Example: init(document.getElementById('mytabberdiv')) */ var childNodes, /* child nodes of the tabber div */ i, i2, /* loop indices */ t, /* object to store info about a single tab */ defaultTab=0, /* which tab to select by default */ DOM_ul, /* tabbernav list */ DOM_li, /* tabbernav list item */ DOM_a, /* tabbernav link */ aId, /* A unique id for DOM_a */ headingElement; /* searching for text to use in the tab */ /* Verify that the browser supports DOM scripting */ if (!document.getElementsByTagName) { return false; } /* If the main DIV has an ID then save it. */ if (e.id) { this.id = e.id; } /* Clear the tabs array (but it should normally be empty) */ this.tabs.length = 0; /* Loop through an array of all the child nodes within our tabber element. */ childNodes = e.childNodes; for(i=0; i < childNodes.length; i++) { /* Find the nodes where class="tabbertab" */ if(childNodes[i].className && hasClass(childNodes[i], this.classTab)) { /* Create a new object to save info about this tab */ t = new Object(); /* Save a pointer to the div for this tab */ t.div = childNodes[i]; /* Add the new object to the array of tabs */ this.tabs[this.tabs.length] = t; /* If the class name contains classTabDefault, then select this tab by default. */ if (childNodes[i].className.match(this.REclassTabDefault)) { defaultTab = this.tabs.length-1; } } } /* Create a new UL list to hold the tab headings */ DOM_ul = document.createElement("ul"); DOM_ul.className = this.classNav; /* Loop through each tab we found */ for (i=0; i < this.tabs.length; i++) { t = this.tabs[i]; /* Get the label to use for this tab: From the title attribute on the DIV, Or from one of the this.titleElements[] elements, Or use an automatically generated number. */ t.headingText = t.div.title; /* Remove the title attribute to prevent a tooltip from appearing */ if (this.removeTitle) { t.div.title = ''; } if (!t.headingText) { /* Title was not defined in the title of the DIV, So try to get the title from an element within the DIV. Go through the list of elements in this.titleElements (typically heading elements ['h2','h3','h4']) */ for (i2=0; i2<this.titleElements.length; i2++) { headingElement = t.div.getElementsByTagName(this.titleElements[i2])[0]; if (headingElement) { t.headingText = headingElement.innerHTML; if (this.titleElementsStripHTML) { t.headingText.replace(/<br>/gi," "); t.headingText = t.headingText.replace(/<[^>]+>/g,""); } break; } } } if (!t.headingText) { /* Title was not found (or is blank) so automatically generate a number for the tab. */ t.headingText = i + 1; } /* Create a list element for the tab */ DOM_li = document.createElement("li"); /* Save a reference to this list item so we can later change it to the "active" class */ t.li = DOM_li; /* Create a link to activate the tab */ DOM_a = document.createElement("a"); DOM_a.appendChild(document.createTextNode(t.headingText)); DOM_a.href = "javascript:void(null);"; DOM_a.title = t.headingText; DOM_a.onclick = this.navClick; /* Add some properties to the link so we can identify which tab was clicked. Later the navClick method will need this. */ DOM_a.tabber = this; DOM_a.tabberIndex = i; /* Do we need to add an id to DOM_a? */ if (this.addLinkId && this.linkIdFormat) { /* Determine the id name */ aId = this.linkIdFormat; aId = aId.replace(/<tabberid>/gi, this.id); aId = aId.replace(/<tabnumberzero>/gi, i); aId = aId.replace(/<tabnumberone>/gi, i+1); aId = aId.replace(/<tabtitle>/gi, t.headingText.replace(/[^a-zA-Z0-9\-]/gi, '')); DOM_a.id = aId; } /* Add the link to the list element */ DOM_li.appendChild(DOM_a); /* Add the list element to the list */ DOM_ul.appendChild(DOM_li); /* add a space to get line breaks */ if (this.spaceTabs) { DOM_ul.appendChild(document.createTextNode(" ")); } } /* Add the UL list to the beginning of the tabber div */ e.insertBefore(DOM_ul, e.firstChild); /* Make the tabber div "live" so different CSS can be applied */ e.className = e.className.replace(this.REclassMain, this.classMainLive); /* Activate the default tab, and do not call the onclick handler */ this.tabShow(defaultTab); /* If the user specified an onLoad function, call it now. */ if (typeof this.onLoad == 'function') { this.onLoad({tabber:this}); } return this; }; tabberObj.prototype.navClick = function(event) { /* This method should only be called by the onClick event of an <A> element, in which case we will determine which tab was clicked by examining a property that we previously attached to the <A> element. Since this was triggered from an onClick event, the variable "this" refers to the <A> element that triggered the onClick event (and not to the tabberObj). When tabberObj was initialized, we added some extra properties to the <A> element, for the purpose of retrieving them now. Get the tabberObj object, plus the tab number that was clicked. */ var rVal, /* Return value from the user onclick function */ a, /* element that triggered the onclick event */ self, /* the tabber object */ tabberIndex, /* index of the tab that triggered the event */ onClickArgs; /* args to send the onclick function */ a = this; if (!a.tabber) { return false; } self = a.tabber; tabberIndex = a.tabberIndex; /* Remove focus from the link because it looks ugly. I don't know if this is a good idea... */ a.blur(); /* If the user specified an onClick function, call it now. If the function returns false then do not continue. */ if (typeof self.onClick == 'function') { onClickArgs = {'tabber':self, 'index':tabberIndex, 'event':event}; /* IE uses a different way to access the event object */ if (!event) { onClickArgs.event = window.event; } rVal = self.onClick(onClickArgs); if (rVal === false) { return false; } } self.tabShow(tabberIndex); return false; }; tabberObj.prototype.tabHideAll = function() { var i; /* counter */ /* Hide all tabs and make all navigation links inactive */ for (i = 0; i < this.tabs.length; i++) { this.tabHide(i); } }; tabberObj.prototype.tabHide = function(tabberIndex) { var div; if (!this.tabs[tabberIndex]) { return false; } /* Hide a single tab and make its navigation link inactive */ div = this.tabs[tabberIndex].div; /* Hide the tab contents by adding classTabHide to the div */ if (!div.className.match(this.REclassTabHide)) { div.className += ' ' + this.classTabHide; } this.navClearActive(tabberIndex); return this; }; tabberObj.prototype.tabShow = function(tabberIndex) { /* Show the tabberIndex tab and hide all the other tabs */ var div; if (!this.tabs[tabberIndex]) { return false; } /* Hide all the tabs first */ this.tabHideAll(); /* Get the div that holds this tab */ div = this.tabs[tabberIndex].div; /* Remove classTabHide from the div */ div.className = div.className.replace(this.REclassTabHide, ''); /* Mark this tab navigation link as "active" */ this.navSetActive(tabberIndex); /* If the user specified an onTabDisplay function, call it now. */ if (typeof this.onTabDisplay == 'function') { this.onTabDisplay({'tabber':this, 'index':tabberIndex}); } return this; }; tabberObj.prototype.navSetActive = function(tabberIndex) { /* Note: this method does *not* enforce the rule that only one nav item can be active at a time. */ /* Set classNavActive for the navigation list item */ this.tabs[tabberIndex].li.className = this.classNavActive; return this; }; tabberObj.prototype.navClearActive = function(tabberIndex) { /* Note: this method does *not* enforce the rule that one nav should always be active. */ /* Remove classNavActive from the navigation list item */ this.tabs[tabberIndex].li.className = ''; return this; }; /*==================================================*/ function tabberAutomatic(tabberArgs) { /* This function finds all DIV elements in the document where class=tabber.classMain, then converts them to use the tabber interface. tabberArgs = an object to send to "new tabber()" */ var tempObj, /* Temporary tabber object */ divs, /* Array of all divs on the page */ i; /* Loop index */ if (!tabberArgs) { tabberArgs = {}; } /* Create a tabber object so we can get the value of classMain */ tempObj = new tabberObj(tabberArgs); /* Find all DIV elements in the document that have class=tabber */ /* First get an array of all DIV elements and loop through them */ divs = document.getElementsByTagName("div"); for (i=0; i < divs.length; i++) { /* Is this DIV the correct class? */ if (divs[i].className && hasClass(divs[i], tempObj.classMain)) { if (hasClass(divs[i], "UseTabBreaks")) { tabberArgs.spaceTabs = true; } /* Now tabify the DIV */ tabberArgs.div = divs[i]; divs[i].tabber = new tabberObj(tabberArgs); } } /****** Begin special case links for the howdy template. This is kind of ugly, but as good a place as any to stick the code. Creates magic links for certain ids, in certain tab boxes */ var howdy = document.getElementById('HowdyWelcomeTemplate'); if (howdy) { var policy = document.getElementById('HowdyWelcomeTemplatePolicy'); var talk = document.getElementById('HowdyWelcomeTemplateDiscussions'); var a; if (talk) { a = document.createElement('a'); a.href = "#"; a.onclick = function() {howdy.tabber.tabShow(2); return false;} //show tab 3 a.appendChild(talk.firstChild); talk.appendChild(a); } if (policy) { a = document.createElement('a'); a.href = "#"; a.onclick = function() {howdy.tabber.tabShow(1); return false;} //show tab 2 a.appendChild(policy.firstChild); policy.appendChild(a); } } /******* End special case code for special links *****/ return this; } /*==================================================*/ function tabberAutomaticOnLoad(tabberArgs) { /* This function adds tabberAutomatic to the window.onload event, so it will run after the document has finished loading. */ // var oldOnLoad; if (!tabberArgs) { tabberArgs = {}; } /* Taken from: http://simon.incutio.com/archive/2004/05/26/addLoadEvent */ /*oldOnLoad = window.onload; if (typeof window.onload != 'function') { window.onload = function() { tabberAutomatic(tabberArgs); }; } else { window.onload = function() { oldOnLoad(); tabberAutomatic(tabberArgs); }; }*/ //Use the wiki onload addOnloadHook(function() { tabberAutomatic(tabberArgs); }) } /*==================================================*/ /* Run tabberAutomaticOnload() unless the "manualStartup" option was specified */ if (typeof tabberOptions == 'undefined') { tabberAutomaticOnLoad(); } else { if (!tabberOptions['manualStartup']) { tabberAutomaticOnLoad(tabberOptions); } } /* End Tabber. Note, code after this line probably is not under the MIT license. */ /* == Miscellaneous/Other == */ // use [[User:TheFearow]]'s perpage css/js code. Includes [[MediaWiki:common.css/PAGENAME]] and [[MediaWiki:common.js/PAGENAME]] importStylesheet("MediaWiki:common.css/" + wgPageName); importScript("MediaWiki:common.js/" + wgPageName); //Bawolff's modified ticker. if all goes well, will switch over shortly addLoadEvent(function () {if ((window.disable_ticker2 !== true) && (document.getElementById("singleTickerForPage") || document.getElementById('enableTickers'))) importScript("MediaWiki:ticker2.js");}); // fix for the football portal if (wgPageName == "Portal:Football") { NavigationBarShowDefault = 50; } var load_extratabs = true; // edit tools selectbox (see [[MediaWiki:Edittools]] and [[MediaWiki:Edittools.js]]) var load_edittools = true; importScript("MediaWiki:Edittools.js"); //Twitter/facebook etc. See [[template:Social bookmarks]] //makes stuff in id="social_bookmarks" open in new window //and dynamically re-writes links to twitter to shorten urls var newSmallPopup = function(url) { return (function () { window.open(url, "_blank", "width=640,height=480,menubar,resizable,scrollbars,status,toolbar"); return false; }); } addOnloadHook(function () { var soc = document.getElementById('social_bookmarks'); if (soc) { var links = soc.getElementsByTagName('a') for (i=0;i<links.length;i++) { if ( links[i].href.indexOf("http://twitter.com/?status") === 0) { /*isTwitter*/ links[i].href = "http://twitter.com/?status=" + encodeURIComponent("Look what I found on Wikinews: http://enwn.net/+" + wgArticleId); //enwn.net is owned by ShakataGaNai } links[i].onclick = newSmallPopup(links[i].href); }}}); /****************** Begin editintro stuff This makes a custom editintro for people editing old pages, or coming directly from 'pedia maintainer: User:bawolff *****************/ function addEditIntro(template) { //This function assumes that all edit links are in proper order (as in the title arg is first argument), and proper case //This function appends &editintro=template to any link that edits the CURRENT page. //template parameter should already be escaped //var as = document.getElementsByTagName('a'); var bodyContent = document.getElementById('bodyContent'); var list = getElementsByClassName((bodyContent ? bodyContent : document), "span", "editsection"); list[list.length] = document.getElementById('ca-edit'); for (var i = 0; i < list.length; i++) { var a = list[i].getElementsByTagName('a')[0]; if (!a) { continue; //just in case } if (a.href.indexOf('&action=edit') === -1) { //if not an edit link continue; } if (a.href.indexOf('?title=' + wgPageName) === -1) { //not a link to this page continue; } if (a.href.indexOf('&editintro') !== -1) { //if it already has an editintro don't add another continue; } a.href = a.href + '&editintro=' + template; } } function doEditIntro() { //called onload try { if (wgNamespaceNumber !== 0 || wgPageName === 'Main_Page') { return; } var notCurrent = doEditIntro.oldNews(); var fromPedia = (document.referrer.indexOf('http://en.wikipedia.org') === 0); if (notCurrent) { addEditIntro('Template:Editintro_notcurrent'); } else if (fromPedia) { addEditIntro('Template:Editintro_from_wikipedia'); } } catch (e) { //in case of different skin and can't find cat links or something. } } doEditIntro.oldNews = function () { var cats = document.getElementById('catlinks').getElementsByTagName('a'); var pubDate, pubCat, archiveCat, tmp, catName; for (var i = 0; i < cats.length; i++) { catName = cats[i].title; tmp = doEditIntro.parseDate(catName); if (!isNaN(tmp)) { pubDate = tmp; } if (catName === "Category:Published") { pubCat = true; } if (catName === "Category:Archived" || catName === "Category:AutoArchived") { archiveCat = true; } } //end getting cats if (!pubDate || !pubCat || archiveCat) { //not in a date category, not published, or already archived. return false; } if (((new Date()).getTime() - pubDate) > 48 * 60 * 60 * 1000) { //if more than 48h elasped return true; } else { return false; } } doEditIntro.parseDate = function (datestring) { // + sign converts to number //Returns NaN in even of parse failure. var date = datestring.replace(doEditIntro.dateRegex, doEditIntro.dateFunc); if (date === datestring) { return NaN; } return +date; } doEditIntro.dateRegex = /^Category:(January|February|March|April|May|June|July|August|September|October|November|December) (\d\d?), (20\d\d)$/; doEditIntro.dateFunc = function (str, month, day, year) { //Since JS month starts at month 0 var months = {'January' : 0, 'February': 1, 'March': 2, 'April': 3, 'May': 4, 'June': 5, 'July': 6, 'August': 7, 'September': 8, 'October': 9, 'November': 10, 'December': 11}; return Date.UTC(year, months[month], day); } addOnloadHook(doEditIntro); /*extern api, importScript, wgPageName */ /**** function to automate removing {{tl|develop}} and adding {{tl|review}} Apperently people actually have problems with this. Also removes {{tl|tasks}} maintainers: [[user:Bawolff]] ****/ addOnloadHook(function () { var changeDevelopToReviewButton = document.getElementById('develop_to_review_link'); if (changeDevelopToReviewButton) { try { //in a try since this makes some assumptions about the format of //the {{tl|develop}} template, which could change. importScript('User:Bawolff/mwapilib2.js'); var button = document.createElement('button'); button.type = 'button'; button.appendChild(changeDevelopToReviewButton.firstChild.firstChild); changeDevelopToReviewButton.replaceChild(button, changeDevelopToReviewButton.firstChild); button.onclick = function () { if (this && this.firstChild && this.firstChild.data) this.firstChild.data = "Loading..."; api(wgPageName).getPage(). setDefaultSummary("Please review this article. (moved using js from button)"). replace(/\{\{(?:[dD]evelop(?:ing|ment)?|[tT]asks)(?:\|[^}]*)?\}\}/g, ""). replace(/^/, "\{\{review}}\n"). savePage(). lift(function () { alert("The article is now listed as needing review."); location.reload(); }). exec(); } } catch (e) {} } }); //See [[User:ShakataGaNai/Enwn.net]] //based on http://enwn.net/bookmark.php //adds a button to the toolbar to shorten the url of the page. addOnloadHook(function () {addPortletLink('p-tb', "javascript:open('http://enwn.net/api.php?m=create&url='+escape(document.URL),%20'_new','width=300,height=100');void%200;", 'Shorten URL', 'enwn-url-shortener', 'Make a enwn.net shortcut for this page')}); //Load EasyPeerReview for editors (since everyone uses it, might as well put it in here) if (wgUserGroups && wgUserGroups.join(' ').indexOf('editor') !== -1) { if (!(window.Bawolff && Bawolff.review)) { importScript('MediaWiki:Gadget-easyPeerReview.js'); } } if (wgIsArticle) importScript('MediaWiki:Gadget-Feedbackhack.js'); //load feedback form styles /* MediaWiki:Vector.js */ /* Any JavaScript here will be loaded for users using the Vector skin */ // !!'''Alternate stylesheets'''!! Can select from view->page style in firefox. document.write('<link type="text/css" href="http://en.wikinews.org/w/index.php?title=Wikinews:Skins/vector-newspaper-back.css&action=raw&ctype=text/css" rel="alternate stylesheet" title="Newspaper background" media="screen,projection" \/>'); //to allow adding portlets easier for the namespace tabs function addVectorNSTab (href, text, id, tooltip, accesskey, nextnode) { return addPortletLink('p-namespaces', href, text, id, tooltip, accesskey, nextnode) } //some vector specific stuff for the comment namespace. addOnloadHook(function() { if (wgNamespaceNumber === 102) { var before = document.getElementById('ca-nstab-comments') ; var talk = addVectorNSTab(encodeURI(wgArticlePath.replace("$1", "talk:" + wgTitle)), "Discussion", "ca-main-talk", undefined, undefined, before); addVectorNSTab(encodeURI(wgArticlePath.replace("$1", wgTitle)), "Article", "ca-nstab-main", undefined, undefined, talk); } if (wgNamespaceNumber === 90) { var page = wgTitle.replace(/\/.*$/, ''); page = page.replace(/^Comments:/, ''); var before = document.getElementById('ca-article'); var talk = addVectorNSTab(encodeURI(wgArticlePath.replace("$1", "Talk:" + page)), "Discussion", "ca-main-talk", undefined, undefined, before); addVectorNSTab(encodeURI(wgArticlePath.replace("$1", page)), "Article", "ca-nstab-main", undefined, undefined, talk); } }); ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline; filename=flaggedrevs.js Content-Type: application/x-javascript; charset=UTF-8; name=flaggedrevs.js Content-Location: http://en.wikinews.org/w/extensions/FlaggedRevs/flaggedrevs.js?60 Content-Transfer-Encoding: Base64 LyogLS0gKGMpIEFhcm9uIFNjaHVseiwgRGFuaWVsIEFybm9sZCAyMDA4ICovCgov KiBFdmVyeSB0aW1lIHlvdSBjaGFuZ2UgdGhpcyBKUyBwbGVhc2UgYnVtcCAkd2dG bGFnZ2VkUmV2U3R5bGVWZXJzaW9uIGluIEZsYWdnZWRSZXZzLnBocCAqLwoKLyog SGlkZSByYXRpbmcgY2x1dHRlciAqLwpmdW5jdGlvbiBlbmFibGVfc2hvd2hpZGUo KSB7Cgl2YXIgdG9nZ2xlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ213LXJl dmlzaW9udG9nZ2xlJyk7CglpZiggIXRvZ2dsZSApIHJldHVybjsKCXRvZ2dsZS5z dHlsZS5kaXNwbGF5ID0gJ2lubGluZSc7Cgl2YXIgcmF0aW5ncyA9IGRvY3VtZW50 LmdldEVsZW1lbnRCeUlkKCdtdy1yZXZpc2lvbnJhdGluZ3MnKTsKCWlmKCAhcmF0 aW5ncyApIHJldHVybjsKCXJhdGluZ3Muc3R5bGUuZGlzcGxheSA9ICdub25lJzsK fQoKLyogVG9nZ2xlcyByYXRpbmdzICovCmZ1bmN0aW9uIHRvZ2dsZVJldlJhdGlu Z3MoKSB7Cgl2YXIgcmF0aW5ncyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdt dy1yZXZpc2lvbnJhdGluZ3MnKTsKCWlmKCAhcmF0aW5ncyApIHJldHVybjsKCWlm KCByYXRpbmdzLnN0eWxlLmRpc3BsYXkgPT0gJ25vbmUnICkgewoJCXJhdGluZ3Mu c3R5bGUuZGlzcGxheSA9ICdpbmxpbmUnOwoJfSBlbHNlIHsKCQlyYXRpbmdzLnN0 eWxlLmRpc3BsYXkgPSAnbm9uZSc7Cgl9Cn0KCi8qCiogYSkgRGlzYWJsZSBzdWJt aXQgaW4gY2FzZSBvZiBpbnZhbGlkIGlucHV0LgoqIGIpIFVwZGF0ZSBjb2xvcnMg d2hlbiBzZWxlY3QgY2hhbmdlcyAoT3BlcmEgYWxyZWFkeSBkb2VzIHRoaXMpLgoq IGMpIEFsc28gcmVtb3ZlIGNvbW1lbnQgYm94IGNsdXR0ZXIgaW4gY2FzZSBvZiBp bnZhbGlkIGlucHV0LgoqLwpmdW5jdGlvbiB1cGRhdGVSYXRpbmdGb3JtKCkgewoJ dmFyIHJhdGluZ2Zvcm0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXctcmF0 aW5nc2VsZWN0cycpOwoJaWYoICFyYXRpbmdmb3JtICkgcmV0dXJuOwoJdmFyIGRp c2FibGVkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZyLXJhdGluZy1jb250 cm9scy1kaXNhYmxlZCcpOwoJaWYoIGRpc2FibGVkICkgcmV0dXJuOwoKCXZhciBx dWFsaXR5ID0gdHJ1ZTsKCXZhciBhbGx6ZXJvID0gdHJ1ZTsKCXZhciBzb21lemVy byA9IGZhbHNlOwoKCWZvciggdGFnIGluIHdnRmxhZ2dlZFJldnNQYXJhbXMudGFn cyApIHsKCQl2YXIgY29udHJvbE5hbWUgPSAid3AiICsgdGFnOwoJCXZhciBsZXZl bHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShjb250cm9sTmFtZSk7CgkJ dmFyIHNlbGVjdGVkbGV2ZWwgPSAwOyAvLyBkZWZhdWx0CgoJCWlmKCBsZXZlbHNb MF0ubm9kZU5hbWUgPT0gJ1NFTEVDVCcgKSB7CgkJCXNlbGVjdGVkbGV2ZWwgPSBs ZXZlbHNbMF0uc2VsZWN0ZWRJbmRleDsKCQkJLy8gVXBkYXRlIGNvbG9yLiBPcGVy YSBkb2VzIHRoaXMgYWxyZWFkeSwgYW5kIGRvaW5nIHNvCgkJCS8vIHNlZW1zIHRv IGtpbGwgY3VzdG9tIHByZXR0eSBvcGVyYSBza2luIGZvcm0gc3R5bGluZy4KCQkJ aWYoIG5hdmlnYXRvci5hcHBOYW1lICE9ICdPcGVyYScpIHsKCQkJCXZhbHVlID0g bGV2ZWxzWzBdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdvcHRpb24nKVtzZWxlY3Rl ZGxldmVsXS52YWx1ZTsKCQkJCWxldmVsc1swXS5jbGFzc05hbWUgPSAnZnItcmF0 aW5nLW9wdGlvbi0nICsgdmFsdWU7CgkJCX0KCQl9IGVsc2UgaWYoIGxldmVsc1sw XS50eXBlID09ICdyYWRpbycgKSB7CgkJCWZvciggaSA9IDA7IGkgPCBsZXZlbHMu bGVuZ3RoOyBpKysgKSB7CgkJCQlpZiggbGV2ZWxzW2ldLmNoZWNrZWQgKSB7CgkJ CQkJc2VsZWN0ZWRsZXZlbCA9IGk7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCX0KCQl9 IGVsc2UgaWYoIGxldmVsc1swXS50eXBlID09ICdjaGVja2JveCcgKSB7CgkJCXNl bGVjdGVkbGV2ZWwgPSAobGV2ZWxzWzBdLmNoZWNrZWQpID8gMTogMDsKCQl9IGVs c2UgewoJCQlyZXR1cm47IC8vIGVycm9yOiBzaG91bGQgbm90IGhhcHBlbgoJCX0K CgkJLy8gR2V0IHF1YWxpdHkgbGV2ZWwgZm9yIHRoaXMgdGFnCgkJcXVhbGl0eUxl dmVsID0gd2dGbGFnZ2VkUmV2c1BhcmFtcy50YWdzW3RhZ107CgoJCWlmKCBzZWxl Y3RlZGxldmVsIDwgcXVhbGl0eUxldmVsICkgewoJCQlxdWFsaXR5ID0gZmFsc2U7 IC8vIG5vdCBhIHF1YWxpdHkgcmV2aWV3CgkJfQoJCWlmKCBzZWxlY3RlZGxldmVs ID4gMCApIHsKCQkJYWxsemVybyA9IGZhbHNlOwoJCX0gZWxzZSB7CgkJCXNvbWV6 ZXJvID0gdHJ1ZTsKCQl9Cgl9CgkvLyBTaG93IG5vdGUgYm94IG9ubHkgZm9yIHF1 YWxpdHkgcmV2cwoJdmFyIG5vdGVib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ ZCgnbXctbm90ZWJveCcpOwoJaWYoIG5vdGVib3ggKSB7CgkJbm90ZWJveC5zdHls ZS5kaXNwbGF5ID0gcXVhbGl0eSA/ICdpbmxpbmUnIDogJ25vbmUnOwoJfQoJLy8g SWYgb25seSBhIGZldyBsZXZlbHMgYXJlIHplcm8sIGRvbid0IHNob3cgc3VibWl0 IGxpbmsKCXZhciBzdWJtaXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3Vi bWl0cmV2aWV3Jyk7CglzdWJtaXQuZGlzYWJsZWQgPSAoIHNvbWV6ZXJvICYmICFh bGx6ZXJvICkgPyAnZGlzYWJsZWQnIDogJyc7CgkvLyBDbGVhciBub3RlIGJveCBk YXRhIGlmIG5vdCBzaG93bgoJdmFyIG5vdGVzID0gZG9jdW1lbnQuZ2V0RWxlbWVu dEJ5SWQoJ3dwTm90ZXMnKTsKCWlmKCBub3RlcyApIHsKCQlub3Rlcy52YWx1ZSA9 IHF1YWxpdHkgPyBub3Rlcy52YWx1ZSA6ICcnOwoJfQp9CgphZGRPbmxvYWRIb29r KGVuYWJsZV9zaG93aGlkZSk7CmFkZE9ubG9hZEhvb2sodXBkYXRlUmF0aW5nRm9y bSk7CgovLyBkZXBlbmRlbmNpZXM6Ci8vICogYWpheC5qczoKICAvKmV4dGVybiBz YWpheF9pbml0X29iamVjdCwgc2FqYXhfZG9fY2FsbCAqLwovLyAqIHdpa2liaXRz LmpzOgogIC8qZXh0ZXJuIGhvb2tFdmVudCwganNNc2cgKi8KLy8gVGhlc2Ugc2hv dWxkIGhhdmUgYmVlbiBpbml0aWFsaXplZCBpbiB0aGUgZ2VuZXJhdGVkIGpzCmlm KCB0eXBlb2Ygd2dBamF4UmV2aWV3ID09PSAidW5kZWZpbmVkIiB8fCAhd2dBamF4 UmV2aWV3ICkgewoJd2dBamF4UmV2aWV3ID0gewoJCXNlbmRpbmdNc2c6ICJTdWJt aXR0aW5nLi4uIiwKCQlzZW50TXNnT2s6ICJSZXZpZXcgY29tcGxldGUhIiwKCQlz ZW50TXNnQmFkOiAiUmV2aWV3IGZhaWxlZCEiLAoJCWFjdGlvbmNvbXBsZXRlOiAi QWN0aW9uIGNvbXBsZXRlIiwKCQlhY3Rpb25mYWlsZWQ6ICJBY3Rpb24gZmFpbGVk IgoJfTsKfQoKd2dBamF4UmV2aWV3LnN1cHBvcnRlZCA9IHRydWU7IC8vIHN1cHBv cnRlZCBvbiBjdXJyZW50IHBhZ2UgYW5kIGJ5IGJyb3dzZXIKd2dBamF4UmV2aWV3 LmlucHJvZ3Jlc3MgPSBmYWxzZTsgLy8gYWpheCByZXF1ZXN0IGluIHByb2dyZXNz CndnQWpheFJldmlldy50aW1lb3V0SUQgPSBudWxsOyAvLyBzZWUgd2dBamF4UmV2 aWV3LmFqYXhDYWxsCgp3Z0FqYXhSZXZpZXcuYWpheENhbGwgPSBmdW5jdGlvbigp IHsKCWlmKCAhd2dBamF4UmV2aWV3LnN1cHBvcnRlZCApIHsKCQlyZXR1cm4gdHJ1 ZTsKCX0gZWxzZSBpZiggd2dBamF4UmV2aWV3LmlucHJvZ3Jlc3MgKSB7CgkJcmV0 dXJuIGZhbHNlOwoJfQoJaWYoICF3ZlN1cHBvcnRzQWpheCgpICkgewoJCS8vIExh enkgaW5pdGlhbGl6YXRpb24gc28gd2UgZG9uJ3QgdG9zcyB1cAoJCS8vIEFjdGl2 ZVggd2FybmluZ3Mgb24gaW5pdGlhbCBwYWdlIGxvYWQKCQkvLyBmb3IgSUUgNiB1 c2VycyB3aXRoIHNlY3VyaXR5IHNldHRpbmdzLgoJCXdnQWpheFJldmlldy5zdXBw b3J0ZWQgPSBmYWxzZTsKCQlyZXR1cm4gdHJ1ZTsKCX0KCXZhciBmb3JtID0gZG9j dW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm13LXJldmlld2Zvcm0iKTsKCXZhciBub3Rl cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ3cE5vdGVzIik7Cgl2YXIgcmVh c29uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIndwUmVhc29uIik7CglpZigg IWZvcm0gKSB7CgkJcmV0dXJuIGZhbHNlOwoJfQoJd2dBamF4UmV2aWV3LmlucHJv Z3Jlc3MgPSB0cnVlOwoJLy8gQnVpbGQgdXAgYXJndW1lbnRzCgl2YXIgYXJncyA9 IFtdOwoJdmFyIGlucHV0cyA9IGZvcm0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlu cHV0Iik7Cglmb3IoIHZhciBpPTA7IGkgPCBpbnB1dHMubGVuZ3RoOyBpKyspIHsK CQkvLyBEaWZmZXJlbnQgaW5wdXQgdHlwZXMgbWF5IG9jY3VyIGRlcGVuZGluZyBv biB0YWdzLi4uCgkJaWYoIGlucHV0c1tpXS5uYW1lID09ICJ0aXRsZSIgfHwgaW5w dXRzW2ldLm5hbWUgPT0gImFjdGlvbiIgKSB7CgkJCS8vIE5vIG5lZWQgdG8gc2Vu ZCB0aGVzZS4uLgoJCX0gZWxzZSBpZiggaW5wdXRzW2ldLnR5cGUgPT0gInN1Ym1p dCIgKSB7CgkJCWlucHV0c1tpXS52YWx1ZSA9IHdnQWpheFJldmlldy5zZW5kaW5n TXNnOwoJCX0gZWxzZSBpZiggaW5wdXRzW2ldLnR5cGUgPT0gImNoZWNrYm94IiAp IHsKCQkJYXJncy5wdXNoKCBpbnB1dHNbaV0ubmFtZSArICJ8IiArIChpbnB1dHNb aV0uY2hlY2tlZCA/IDEgOiAwKSApOwoJCX0gZWxzZSBpZiggaW5wdXRzW2ldLnR5 cGUgIT0gInJhZGlvIiB8fCBpbnB1dHNbaV0uY2hlY2tlZCApIHsKCQkJYXJncy5w dXNoKCBpbnB1dHNbaV0ubmFtZSArICJ8IiArIGlucHV0c1tpXS52YWx1ZSApOwoJ CX0KCQlpbnB1dHNbaV0uZGlzYWJsZWQgPSAiZGlzYWJsZWQiOwoJfQoJaWYoIG5v dGVzICkgewoJCWFyZ3MucHVzaCggbm90ZXMubmFtZSArICJ8IiArIG5vdGVzLnZh bHVlICk7CgkJbm90ZXMuZGlzYWJsZWQgPSAiZGlzYWJsZWQiOwoJfQoJdmFyIHNl bGVjdHMgPSBmb3JtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzZWxlY3QiKTsKCWZv ciggdmFyIGk9MDsgaSA8IHNlbGVjdHMubGVuZ3RoOyBpKyspIHsKCQkvLyBHZXQg dGhlIHNlbGVjdGVkIHRhZyBsZXZlbC4uLgoJCWlmKCBzZWxlY3RzW2ldLnNlbGVj dGVkSW5kZXggPj0gMCApIHsKCQkJdmFyIHNvcHRpb24gPSBzZWxlY3RzW2ldLmdl dEVsZW1lbnRzQnlUYWdOYW1lKCJvcHRpb24iKVtzZWxlY3RzW2ldLnNlbGVjdGVk SW5kZXhdOwoJCQlhcmdzLnB1c2goIHNlbGVjdHNbaV0ubmFtZSArICJ8IiArIHNv cHRpb24udmFsdWUgKTsKCQl9CgkJc2VsZWN0c1tpXS5kaXNhYmxlZCA9ICJkaXNh YmxlZCI7Cgl9CgkvLyBTZW5kIQoJdmFyIG9sZCA9IHNhamF4X3JlcXVlc3RfdHlw ZTsKCXNhamF4X3JlcXVlc3RfdHlwZSA9ICJQT1NUIjsKCXNhamF4X2RvX2NhbGwo ICJSZXZpc2lvblJldmlldzo6QWpheFJldmlldyIsIGFyZ3MsIHdnQWpheFJldmll dy5wcm9jZXNzUmVzdWx0ICk7CglzYWpheF9yZXF1ZXN0X3R5cGUgPSBvbGQ7Cgkv LyBJZiB0aGUgcmVxdWVzdCBpc24ndCBkb25lIGluIDMwIHNlY29uZHMsIGFsbG93 IHVzZXIgdG8gdHJ5IGFnYWluCgl3Z0FqYXhSZXZpZXcudGltZW91dElEID0gd2lu ZG93LnNldFRpbWVvdXQoCgkJZnVuY3Rpb24oKSB7IHdnQWpheFJldmlldy5pbnBy b2dyZXNzID0gZmFsc2U7IHdnQWpheFJldmlldy51bmxvY2tGb3JtKCk7IH0sCgkJ MzAwMDAKCSk7CglyZXR1cm4gZmFsc2U7Cn07Cgp3Z0FqYXhSZXZpZXcudW5sb2Nr Rm9ybSA9IGZ1bmN0aW9uKCkgewoJdmFyIGZvcm0gPSBkb2N1bWVudC5nZXRFbGVt ZW50QnlJZCgibXctcmV2aWV3Zm9ybSIpOwoJdmFyIHN1Ym1pdCA9IGRvY3VtZW50 LmdldEVsZW1lbnRCeUlkKCJzdWJtaXRyZXZpZXciKTsKCXZhciBub3RlcyA9IGRv Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJ3cE5vdGVzIik7Cgl2YXIgcmVhc29uID0g ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIndwUmVhc29uIik7CglpZiggIWZvcm0g fHwgIXN1Ym1pdCApIHsKCQlyZXR1cm4gZmFsc2U7Cgl9CglzdWJtaXQuZGlzYWJs ZWQgPSAiIjsKCXZhciBpbnB1dHMgPSBmb3JtLmdldEVsZW1lbnRzQnlUYWdOYW1l KCJpbnB1dCIpOwoJZm9yKCB2YXIgaT0wOyBpIDwgaW5wdXRzLmxlbmd0aDsgaSsr KSB7CgkJaW5wdXRzW2ldLmRpc2FibGVkID0gIiI7Cgl9CglpZiggbm90ZXMgKSB7 CgkJbm90ZXMuZGlzYWJsZWQgPSAiIjsKCX0KCWlmKCByZWFzb24gKSB7CgkJcmVh c29uLmRpc2FibGVkID0gIiI7Cgl9Cgl2YXIgc2VsZWN0cyA9IGZvcm0uZ2V0RWxl bWVudHNCeVRhZ05hbWUoInNlbGVjdCIpOwoJZm9yKCB2YXIgaT0wOyBpIDwgc2Vs ZWN0cy5sZW5ndGg7IGkrKykgewoJCXNlbGVjdHNbaV0uZGlzYWJsZWQgPSAiIjsK CX0KfTsKCndnQWpheFJldmlldy5wcm9jZXNzUmVzdWx0ID0gZnVuY3Rpb24ocmVx dWVzdCkgewoJaWYoICF3Z0FqYXhSZXZpZXcuc3VwcG9ydGVkICkgewoJCXJldHVy bjsKCX0KCXZhciByZXNwb25zZSA9IHJlcXVlc3QucmVzcG9uc2VUZXh0OwoJaWYo IG1zZyA9IHJlc3BvbnNlLnN1YnN0cig2KSApIHsKCQlqc01zZyggbXNnLCAncmV2 aWV3JyApOyAvLyBzdWNjZXNzIG5vdGljZQoJCXdpbmRvdy5zY3JvbGwoMCwwKTsg Ly8gc2Nyb2xsIHVwIHRvIG5vdGljZQoJCXRhZ0JveCA9IGRvY3VtZW50LmdldEVs ZW1lbnRCeUlkKCdtdy1yZXZpc2lvbnRhZycpOwoJCWlmKCB0YWdCb3ggKSB0YWdC b3guc3R5bGUuZGlzcGxheSA9ICdub25lJzsgLy8gcmVtb3ZlIHRhZyBmcm9tIGRy YWZ0Cgl9Cgl3Z0FqYXhSZXZpZXcuaW5wcm9ncmVzcyA9IGZhbHNlOwoJaWYoIHdn QWpheFJldmlldy50aW1lb3V0SUQgKSB7CgkJd2luZG93LmNsZWFyVGltZW91dCh3 Z0FqYXhSZXZpZXcudGltZW91dElEKTsKCX0KCXZhciBzdWJtaXQgPSBkb2N1bWVu dC5nZXRFbGVtZW50QnlJZCgic3VibWl0cmV2aWV3Iik7CglpZiggcmVzcG9uc2Uu aW5kZXhPZignPHN1YyM+JykgPT0gMCApIHsKCQlkb2N1bWVudC50aXRsZSA9IHdn QWpheFJldmlldy5hY3Rpb25jb21wbGV0ZTsKCQlpZiggc3VibWl0ICkgc3VibWl0 LnZhbHVlID0gd2dBamF4UmV2aWV3LnNlbnRNc2dPazsKCX0gZWxzZSB7CgkJZG9j dW1lbnQudGl0bGUgPSB3Z0FqYXhSZXZpZXcuYWN0aW9uZmFpbGVkOwoJCWlmKCBz dWJtaXQgKSBzdWJtaXQudmFsdWUgPSB3Z0FqYXhSZXZpZXcuc2VudE1zZ0JhZDsK CX0KCXdnQWpheFJldmlldy51bmxvY2tGb3JtKCk7Cn07Cgp3Z0FqYXhSZXZpZXcu b25Mb2FkID0gZnVuY3Rpb24oKSB7Cgl2YXIgc3VibWl0ID0gZG9jdW1lbnQuZ2V0 RWxlbWVudEJ5SWQoInN1Ym1pdHJldmlldyIpOwoJaWYoIHN1Ym1pdCApIHsKCQlz dWJtaXQub25jbGljayA9IHdnQWpheFJldmlldy5hamF4Q2FsbDsKCX0KfTsKCmhv b2tFdmVudCgibG9hZCIsIHdnQWpheFJldmlldy5vbkxvYWQpOwo= ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline; filename=readerfeedback.js Content-Type: application/x-javascript; charset=UTF-8; name=readerfeedback.js Content-Location: http://en.wikinews.org/w/extensions/ReaderFeedback/readerfeedback.js?1 Content-Transfer-Encoding: Base64 LyogLS0gKGMpIEFhcm9uIFNjaHVseiAyMDA4ICovCgovKiBFdmVyeSB0aW1lIHlv dSBjaGFuZ2UgdGhpcyBKUyBwbGVhc2UgYnVtcCAkd2dGZWVkYmFja1N0eWxlVmVy c2lvbiBpbiBSZWFkZXJGZWVkYmFjay5waHAgKi8KCi8qCiogVXBkYXRlIGNvbG9y cyB3aGVuIHNlbGVjdCBjaGFuZ2VzIChPcGVyYSBhbHJlYWR5IGRvZXMgdGhpcyku CiovCmZ1bmN0aW9uIHVwZGF0ZUZlZWRiYWNrRm9ybSgpIHsKCXZhciBhbGx6ZXJv ID0gdHJ1ZTsKCXZhciByYXRpbmdmb3JtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5 SWQoJ213LWZlZWRiYWNrc2VsZWN0cycpOwoJaWYoICFyYXRpbmdmb3JtICkgcmV0 dXJuOwoJZm9yKCB0YWcgaW4gd2dGZWVkYmFja1BhcmFtcy50YWdzICkgewoJCXZh ciBjb250cm9sTmFtZSA9ICJ3cCIgKyB0YWc7CgkJdmFyIGxldmVscyA9IGRvY3Vt ZW50LmdldEVsZW1lbnRzQnlOYW1lKGNvbnRyb2xOYW1lKTsKCQl2YXIgc2VsZWN0 ZWRsZXZlbCA9IDI7IC8vIGRlZmF1bHQKCQlpZiggbGV2ZWxzWzBdLm5vZGVOYW1l ID09ICdTRUxFQ1QnICkgewoJCQlzZWxlY3RlZGxldmVsID0gbGV2ZWxzWzBdLnNl bGVjdGVkSW5kZXg7CgkJCS8vIFVwZGF0ZSBjb2xvci4gT3BlcmEgZG9lcyB0aGlz IGFscmVhZHksIGFuZCBkb2luZyBzbwoJCQkvLyBzZWVtcyB0byBraWxsIGN1c3Rv bSBwcmV0dHkgb3BlcmEgc2tpbiBmb3JtIHN0eWxpbmcuCgkJCWlmKCBuYXZpZ2F0 b3IuYXBwTmFtZSAhPSAnT3BlcmEnKSB7CgkJCQlsZXZlbHNbMF0uY2xhc3NOYW1l ID0gJ3JmYi1yYXRpbmctb3B0aW9uLScgKyAoNCAtIHNlbGVjdGVkbGV2ZWwpOwoJ CQl9CgkJCWlmKCBzZWxlY3RlZGxldmVsIDw9IDQgKSB7CgkJCQlhbGx6ZXJvID0g ZmFsc2U7CgkJCX0KCQl9Cgl9Cgl2YXIgc3VibWl0ID0gZG9jdW1lbnQuZ2V0RWxl bWVudEJ5SWQoJ3N1Ym1pdGZlZWRiYWNrJyk7CglzdWJtaXQuZGlzYWJsZWQgPSBh bGx6ZXJvID8gJ2Rpc2FibGVkJyA6ICcnOwp9CgphZGRPbmxvYWRIb29rKHVwZGF0 ZUZlZWRiYWNrRm9ybSk7CgovLyBkZXBlbmRlbmNpZXM6Ci8vICogYWpheC5qczoK ICAvKmV4dGVybiBzYWpheF9pbml0X29iamVjdCwgc2FqYXhfZG9fY2FsbCAqLwov LyAqIHdpa2liaXRzLmpzOgogIC8qZXh0ZXJuIGhvb2tFdmVudCwganNNc2cgKi8K Ci8vIFRoZXNlIHNob3VsZCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQgaW4gdGhlIGdl bmVyYXRlZCBqcwppZiggdHlwZW9mIHdnQWpheEZlZWRiYWNrID09PSAidW5kZWZp bmVkIiB8fCAhd2dBamF4RmVlZGJhY2sgKSB7Cgl3Z0FqYXhGZWVkYmFjayA9IHsK CQlzZW5kaW5nTXNnOiAiU3VibWl0dGluZy4uLiIsCgkJc2VudE1zZzogIlRoYW5r IHlvdSEiCgl9Owp9Cgp3Z0FqYXhGZWVkYmFjay5zdXBwb3J0ZWQgPSB0cnVlOyAv LyBzdXBwb3J0ZWQgb24gY3VycmVudCBwYWdlIGFuZCBieSBicm93c2VyCndnQWph eEZlZWRiYWNrLmlucHJvZ3Jlc3MgPSBmYWxzZTsgLy8gYWpheCByZXF1ZXN0IGlu IHByb2dyZXNzCndnQWpheEZlZWRiYWNrLnRpbWVvdXRJRCA9IG51bGw7IC8vIHNl ZSB3Z0FqYXhGZWVkYmFjay5hamF4Q2FsbAoKd2dBamF4RmVlZGJhY2suYWpheENh bGwgPSBmdW5jdGlvbigpIHsKCWlmKCAhd2dBamF4RmVlZGJhY2suc3VwcG9ydGVk ICkgewoJCXJldHVybiB0cnVlOwoJfSBlbHNlIGlmKCB3Z0FqYXhGZWVkYmFjay5p bnByb2dyZXNzICkgewoJCXJldHVybiBmYWxzZTsKCX0KCWlmKCAhd2ZTdXBwb3J0 c0FqYXgoKSApIHsKCQkvLyBMYXp5IGluaXRpYWxpemF0aW9uIHNvIHdlIGRvbid0 IHRvc3MgdXAKCQkvLyBBY3RpdmVYIHdhcm5pbmdzIG9uIGluaXRpYWwgcGFnZSBs b2FkCgkJLy8gZm9yIElFIDYgdXNlcnMgd2l0aCBzZWN1cml0eSBzZXR0aW5ncy4K CQl3Z0FqYXhGZWVkYmFjay5zdXBwb3J0ZWQgPSBmYWxzZTsKCQlyZXR1cm4gdHJ1 ZTsKCX0KCXZhciBmb3JtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm13LWZl ZWRiYWNrZm9ybSIpOwoJdmFyIHN1Ym1pdCA9IGRvY3VtZW50LmdldEVsZW1lbnRC eUlkKCJzdWJtaXRmZWVkYmFjayIpOwoJaWYoICFmb3JtIHx8ICFzdWJtaXQgKSB7 CgkJcmV0dXJuIGZhbHNlOwoJfQoJd2dBamF4RmVlZGJhY2suaW5wcm9ncmVzcyA9 IHRydWU7CglzdWJtaXQuZGlzYWJsZWQgPSAiZGlzYWJsZWQiOwoJc3VibWl0LnZh bHVlID0gd2dBamF4RmVlZGJhY2suc2VuZGluZ01zZzsKCS8vIEJ1aWxkIHVwIGFy Z3VtZW50cwoJdmFyIGFyZ3MgPSBbXTsKCXZhciBpbnB1dHMgPSBmb3JtLmdldEVs ZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpOwoJZm9yKCB2YXIgaT0wOyBpIDwgaW5w dXRzLmxlbmd0aDsgaSsrKSB7CgkJLy8gSWdub3JlIHNvbWUgdXNlbGVzcyBpdGVt cy4uLgoJCWlmKCBpbnB1dHNbaV0ubmFtZSAhPSAidGl0bGUiICYmIGlucHV0c1tp XS50eXBlICE9ICJzdWJtaXQiICkgewoJCQlhcmdzLnB1c2goIGlucHV0c1tpXS5u YW1lICsgInwiICsgaW5wdXRzW2ldLnZhbHVlICk7CgkJfQoJfQoJdmFyIHNlbGVj dHMgPSBmb3JtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzZWxlY3QiKTsKCWZvcigg dmFyIGk9MDsgaSA8IHNlbGVjdHMubGVuZ3RoOyBpKyspIHsKCQkvLyBHZXQgdGhl IHNlbGVjdGVkIHRhZyBsZXZlbC4uLgoJCWlmKCBzZWxlY3RzW2ldLnNlbGVjdGVk SW5kZXggPj0gMCApIHsKCQkJdmFyIHNvcHRpb24gPSBzZWxlY3RzW2ldLmdldEVs ZW1lbnRzQnlUYWdOYW1lKCJvcHRpb24iKVtzZWxlY3RzW2ldLnNlbGVjdGVkSW5k ZXhdOwoJCQlhcmdzLnB1c2goIHNlbGVjdHNbaV0ubmFtZSArICJ8IiArIHNvcHRp b24udmFsdWUgKTsKCQl9CgkJc2VsZWN0c1tpXS5kaXNhYmxlZCA9ICJkaXNhYmxl ZCI7Cgl9CgkvLyBTZW5kIQoJc2FqYXhfZG9fY2FsbCggIlJlYWRlckZlZWRiYWNr UGFnZTo6QWpheFJldmlldyIsIGFyZ3MsIHdnQWpheEZlZWRiYWNrLnByb2Nlc3NS ZXN1bHQgKTsKCS8vIElmIHRoZSByZXF1ZXN0IGlzbid0IGRvbmUgaW4gMTAgc2Vj b25kcywgYWxsb3cgdXNlciB0byB0cnkgYWdhaW4KCXdnQWpheEZlZWRiYWNrLnRp bWVvdXRJRCA9IHdpbmRvdy5zZXRUaW1lb3V0KAoJCWZ1bmN0aW9uKCkgeyB3Z0Fq YXhGZWVkYmFjay5pbnByb2dyZXNzID0gZmFsc2U7IHdnQWpheEZlZWRiYWNrLnVu bG9ja0Zvcm0oKTsgfSwKCQkxMDAwMAoJKTsKCXJldHVybiBmYWxzZTsKfTsKCndn QWpheEZlZWRiYWNrLnVubG9ja0Zvcm0gPSBmdW5jdGlvbigpIHsKCXZhciBmb3Jt ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm13LWZlZWRiYWNrZm9ybSIpOwoJ dmFyIHN1Ym1pdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzdWJtaXRmZWVk YmFjayIpOwoJaWYoICFmb3JtIHx8ICFzdWJtaXQgKSB7CgkJcmV0dXJuIGZhbHNl OwoJfQoJc3VibWl0LmRpc2FibGVkID0gIiI7Cgl2YXIgc2VsZWN0cyA9IGZvcm0u Z2V0RWxlbWVudHNCeVRhZ05hbWUoInNlbGVjdCIpOwoJZm9yKCB2YXIgaT0wOyBp IDwgc2VsZWN0cy5sZW5ndGg7IGkrKykgewoJCXNlbGVjdHNbaV0uZGlzYWJsZWQg PSAiIjsKCX0KfTsKCndnQWpheEZlZWRiYWNrLnByb2Nlc3NSZXN1bHQgPSBmdW5j dGlvbihyZXF1ZXN0KSB7CglpZiggIXdnQWpheEZlZWRiYWNrLnN1cHBvcnRlZCAp IHsKCQlyZXR1cm47Cgl9Cgl2YXIgcmVzcG9uc2UgPSByZXF1ZXN0LnJlc3BvbnNl VGV4dDsKCWlmKCBtc2cgPSByZXNwb25zZS5zdWJzdHIoNikgKSB7CgkJanNNc2co IG1zZywgJ2ZlZWRiYWNrJyApOwoJCXdpbmRvdy5zY3JvbGwoMCwwKTsKCX0KCXdn QWpheEZlZWRiYWNrLmlucHJvZ3Jlc3MgPSBmYWxzZTsKCWlmKCB3Z0FqYXhGZWVk YmFjay50aW1lb3V0SUQgKSB7CgkJd2luZG93LmNsZWFyVGltZW91dCh3Z0FqYXhG ZWVkYmFjay50aW1lb3V0SUQpOwoJfQoJdmFyIHN1Ym1pdCA9IGRvY3VtZW50Lmdl dEVsZW1lbnRCeUlkKCJzdWJtaXRmZWVkYmFjayIpOwoJaWYoIHN1Ym1pdCApIHsK CQlzdWJtaXQudmFsdWUgPSB3Z0FqYXhGZWVkYmFjay5zZW50TXNnOwoJfQp9OwoK d2dBamF4RmVlZGJhY2sub25Mb2FkID0gZnVuY3Rpb24oKSB7Cgl2YXIgc3VibWl0 ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN1Ym1pdGZlZWRiYWNrIik7Cglp Ziggc3VibWl0ICkgewoJCXN1Ym1pdC5vbmNsaWNrID0gd2dBamF4RmVlZGJhY2su YWpheENhbGw7Cgl9Cn07Cgpob29rRXZlbnQoImxvYWQiLCB3Z0FqYXhGZWVkYmFj ay5vbkxvYWQpOwo= ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline; filename=196px-LocationFrance.png Content-Type: image/png; name=196px-LocationFrance.png Content-Location: http://upload.wikimedia.org/wikipedia/commons/thumb/4/47/LocationFrance.png/196px-LocationFrance.png Content-Transfer-Encoding: Base64 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 vOgARwAAAABJRU5ErkJggg== ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline; filename=60px-Flag_of_France.svg.png Content-Type: image/png; name=60px-Flag_of_France.svg.png Content-Location: http://upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Flag_of_France.svg/60px-Flag_of_France.svg.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAADwAAAAoCAYAAACiu5n/AAAABmJLR0QA/wD/AP+g vaeTAAAAB3RJTUUH2QoLFB8p8JPluQAAAF5JREFUaIHtz0ENACAMwMCBFX5IQBJ+ cIcGLICJfWh6Apq0RFs3Et09M3Nx+kjt1dTaBxymc5jOYTqH6Rymc5jOYTqH6Rym c5jOYTqH6Rymc5jOYTqH6Rymc5jOYboHQFYFnv6lFGwAAAAASUVORK5CYII= ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline; filename=180px-PICASSO_Le_pigeon_aux_petits_pois_1911.jpg Content-Type: image/jpeg; name=180px-PICASSO_Le_pigeon_aux_petits_pois_1911.jpg Content-Location: http://upload.wikimedia.org/wikinews/en/thumb/4/45/PICASSO_Le_pigeon_aux_petits_pois_1911.jpg/180px-PICASSO_Le_pigeon_aux_petits_pois_1911.jpg Content-Transfer-Encoding: Base64 /9j/4AAQSkZJRgABAQEASABIAAD//gBaRmlsZSBzb3VyY2U6IGh0dHA6Ly9lbi53 aWtpbmV3cy5vcmcvd2lraS9GaWxlOlBJQ0FTU09fTGVfcGlnZW9uX2F1eF9wZXRp dHNfcG9pc18xOTExLmpwZ//bAEMABgQFBgUEBgYFBgcHBggKEAoKCQkKFA4PDBAX FBgYFxQWFhodJR8aGyMcFhYgLCAjJicpKikZHy0wLSgwJSgpKP/bAEMBBwcHCggK EwoKEygaFhooKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo KCgoKCgoKCgoKP/AABEIAN4AtAMBIgACEQEDEQH/xAAcAAACAgMBAQAAAAAAAAAA AAAFBgMEAAIHAQj/xAA/EAACAQMDAgQEAwYDCAMBAQABAgMEBREAEiEGMRMiQVEU YXGBBzKRFSNCUqGxJMHRFiVicoLh8PEzQ5Jzsv/EABoBAAMBAQEBAAAAAAAAAAAA AAIDBAUBAAb/xAAvEQACAgEEAQIDCAIDAAAAAAABAgARAwQSITFBE1EiYXEFFDKB kbHR8KHBI0Lh/9oADAMBAAIRAxEAPwDqEF6vs0iRrcqqRnYgECMcHn+TsNe3O7Xm mQL+0avxM8gEMy5PHYYI+evYZJm89K24HG+Mr5caJXGpqJaRA8AgUOCp7k+3fWJZ 2kFjLv8At1FaC/XjYoa51zbjt5l5BB+mpBcbrJKWa6V5YoBhahwByT2B7/PUsNsK J4jBSGzjjHOf+2poqdQVJ4I9NZz5ci/DuMqAU+JznrvqbqS0ogpb7d4i/IPxJOBn B/7aG/hF1L1Lfuu2o67qG61FO1BUSKslbKqgrtwcA9x/rpr/ABDtb3WekpaWPK+C ZCwwOA+OP10K/CXph7V13HXTwTCCeiuFJHI2NkpjIV9uDnuD39jrU0DFkAbuR5++ J5fOsOoKC6JSyUnUscskL1Mccd53lol7sRnI9eD/AJa0/D/qi+9QdU1qQ1d5njko 6Vo6aSveQRZLhnJDbRwBk+uffV66W2gu/wCK97WrhzSU8cFJIjvnc6pvbkdv/lHH /CBrz8PbvQdO9JU1PDFQW+okmjo6yaQ7WkmVmQtLk7yARjA4XccDTsgXaQ3H0gKS DYj9cIqihoJp6qvqZqkxsVWOqk2Rnaefzcn9BrmvRHU9bc7Zbfj6mtmnqATK4qnG OSCfzfLT7U3MVcdXR1MSRVscBmxE5ZJYWBAdCQM85BUjIP66E/hJ0x09c/wrtVXU 2KgkqYoWAmqKZXkJEjfxEZx2A9tROqZCUx9Cv9x4LCmPn/yAbJfzdaiKlSprFkJK 7mmfaDnsSDpsuVnq6SMtLUtKrANuWR9uPlnn/wBjVU9KWtesenIrbSrb4BTTPL8J EsJeUOuM4HJx6+2ui9ZSwRUIpJI3ZyNkec/LnPqOMZ0ttMvps99fvCGQ7gs5a6CA srtKwHONxA/X76v2+NZ1KouAo+Z5IOP10YtlmjuVQVMbvEiEsFODnPcn21LHbUiV PBjMas4GcklsE4z+p1Emmfhz1KGyqBQ7gSq3QyRBoTKzkjcuNqnHYn0/114EM5wE XJwCQBj2PPtnVa63u41fW01isdPa2paArHWzVG5pN5UM23BAAXK8+bk9tG7eqtLU KygvGEXlvEySMsc+3bjR/dzuowQ4IhO30SNR4VEdio80gyufkPUDWtRY0dQVmjWZ wGZFi53EZzkduMfrovSt4QaGp/kyuPTPf+2i0NwtsddTW+OppUr5VEngF1Eu0jg7 e/YcfTVuPAriiZOzlTYnOYKB0kUtuZQPzdyDkcHH0Or8lGknmOe3ocAfPjTNe6AU xR6cq25mLAADGoLbblqKcyzJz4m3YfXjP9yNLGDa2yuYz1ARui+KdDtEyZzgZBOV +WfrqKeI+dA6OnoHHI+WdWSGYOiKSC525PcZOM6hSPamWPOT2+ukulHiF9YFuFMw qPKUHAzsXGs1LdTJ8SNm/aFGMMBrNSONrEVHqCR3/mO9viipWV5IpDLj24Hr+ur1 XmR4vGUMrAYX25xzqlXs2YvDQuMEMcHvnA1tVVLhIwoLMyqS3bnvrZfIBaSELfMF PEXQI4Y7JWCj/hz/AO9eyAAHAxkkEn0GrdxdGkDo2CTnB1C3nABUkZ7DWbnB3UJQ nUX+oGCXmzqoJV6eXyj/AJwc/wDntqlcprbWUPS9DTdTvZahpq7ZNR1UUcuGkkIV t2QFJx6ZJGNXOr6cw9QWqQKXf4KRAFP8Rl7fPSD+MsUFOnTE60NKr/FSyuywoGlI iwA5xyc4HOda+mUqlD2keQ83BV96cuVrnjqaW+3BLbcLpWUokmuDyF3pxJmSTCLy zRNjDdiB89Vel6Or/bFsnWRY/GhnqpDFCokDKyL+YqW58Q5yefqNOPXfRENH0t0v FHWXOeZqoRLBPVtJBE3hs26OM8LzxqjRUkT9a2VYW/cPS1qKGbPmJjJG3uBkA5Pv q1sYsAiJs8mdIFPS1k8LJOs/wtJUNKRJuKCRUVQT7kqTg/yk+uiH4L26J/wk6dSd mRjBufDYyd7cH399VLLQ01JTVlPDGkStRRs8aAeYmWQFj7njvpz6HtqW3pa20oIc QowQ44ALE8frj7aRhwKrFa/txjuauDZrN41wpBTzrDVJDIUlkQyLnxAOVBXPHzGg fVvRfUFcklU3UlIZcjAFufCjB4/+Y/00+yOEvNMnHmhkz/8AoamuZIptqoXLnZx6 ZHfTGwIUIIg7zuE5h0DZa+119VS3G5x1hqIDNIYomiAUOoAwWPfze3bHrnTbPSzF pJRGWKvhcDjv/bUNnjgTr6RFjkM6WlC7lfLtMzBBnsTlX9j9c8Md0kjEDCQA5Bxk 4H/vSRgUYiTDL/HQnz10dMJfxG6ojV1cwhw/AG5nlJIPHO3GOcn7a6BTU80aMWjS KM+qrlifrnHy0sz0UXTn4l11zmiWK23dDvqeAkU3GA/HlBwcHscnPbR+O9QUcnU0 tUYzQ2mKKZgHG3IieRkHuxwP11mOwsFef7/MpU0Dct2y+UNzuNxpoDKKik8sglQr zlkzkgAgOrrx/KffWnST0NzrrxT1FDOakXaolapekZAGjf8AdMspGNyoqgAHKgAE aAQ0k3TK2y53O4W9aNR8PVusXhr/AIhvEMrSFj2k8x7dz740U6Mr4JOpeqKOF8zx Vss6lW3HZJCrBlUZJHOMjTMNBrHvBYXClqNO9qt1ZV3u4mSo8OLwzdX/ADuSADg8 E9ufXA7nTLBTPQ2IwPK8skau3jFeWLE4J5PIBA+2lPpussn+zVBTV9trYKiOGFZ9 loqMBkYE7pFiIK5HJ3EEZye+nCirEr6Gap82x3YBXQqSFYrnBAPODq9RfPyiInTx vG0QZWTkOB88a1MbbDtYhMkjHO7nOmaspI6mBmcg7B+750BYMrEso4A2c+nqT/TU DYtrG5UGsQXXI4n8qnBAORrNe1ZkZ0xPHENowpAJ/rrNcOMeIQJj3NEzUTxwqSxO MKe+NUqnMJCOuQR2J76ORfu37cBsZ9tCrjV05rMTHkHG3BydXZ8fIbzJcbeIHlTc xIUeueCNWKSD/Eq+RtTzcDntx/XUFwulso0mlkNQ0cSbn2REkAev9deU13pVmaNY Kw4YAnwgAD9c6j9Ik2RHFxUodVUqNerS3mAWGVRgZz51J0kfitQx1lf0bDLmOCSu liZ1jL7AEDjgeuV04XC6NVXilmlpJaSlpEkV5KhgPELHK7AOT8/bSj1RU0M3VPQ9 T4kaxrW1KSPIMFA0OeeD7a09Om1LMkc2Yz/iOgqOnum37OLkWTevp4LdxpTpoN/X fT0NM6t4UFZJIidwP3K5b25HH00y9fXq1VdhtQoaxauSG5qzJAjsVBhdewUke3p3 0G6MpB/tfbalKSWGiFvqgdkEimOSSSNlDlwO6q+MZxj0yNUPRYQBfM6JYqVZK+oW ZiUaljQrj18SQnn7jTlEwFMigkYUAY7jGufP1vQU1dLRtauoUliVnb/dh2+Gv/2b t2Nnfza1X8Uem4p4IKhrpTyzRJOi1FA8eY3Plfn0Ou2o5nuTxHStmjguFLmQA7WY bj7nn9dXKp3k8NoSRGASTnHftx+ul56tLoad6RZDGOdzHZuGc4+n+mriT1AQqyrh MjynJP66SHBuuozaeLla1uP9vbhkTgm3QJ5iPD8ssxyvz85z9B76OXVC9K4U4ONA aGrip+pZpaguviwKijBPmXJPb5EaOT1MU1OXhYODwQR/loXYHEwv3ntpDAwE1Kk7 Ms0ayRsuCrqCpHzHrr1bbRxHMVLAg8JYdixgJsBJA2/l4JOOPU++pYpAy7s4ySQP bU0m0qp8xycAgZ518/i5aVNBxhMbFYY02rwFUBQo+3bUVBTwUt1apFNAtSyMrTLE qyMD6F8ZP3Or2SrMWwvPJIx9tbMgdyV7BfbVuNSDawSfBkfUVWrdJ3+TeSqUEhBJ 5HkP/n30Ptc7zTsDH+6iLEOWzwDjGvOrj4fQ15RGG1qWTzZxxgDv99KlkrzHVU42 P+83o43HJIIySPrjVRa6gAVcfUZRnszE9h/fQi+QiGdvDlypUHHtxzonSLFFH4kz HbIQSxHIyM4OgNWskjksCfdSRx9flpb1tpYaXdmD3h3EEoW47hwNZrV5zAfDcZx2 PPbWal3IO5QAZ0MyAMWAwCcn31DNTLKhZkGSc5B51ZiV/EYquVJPPHvrarYRIyMd u79dbgWxzMy+YndXUAk6YvUIRcvRSgAN5zx25+mh9qQy00b48rrlh24+X9NHeoZI 2oauIOnjSQSAc/L/AMGk/paurK67wUNqSEiRMM0ikgALy3BHr/ppZX2h3LnVUO2j VpKiNX8JioeVUyQPTJGdeVVPRCt6GpqG4RvGteN3g1MZaQtTuHLbTnOe+Mc6u3Hp uon656TS+Q2yrpdlQTDsZlDCPnAYYPOCPv8ALWde9PR0VxoqvpqlprbW05DpNT06 KAeQdwxhhz6++nICV5EBqB4lyts0jVMai9X+Eufyw15GQT8x/Y62tFhpap6eavrb 3NFGmFjmus5Qn+Y4bcxPsTt+Wgr9WXejpTU3fp6KqgpwGmqaWqWIgDnIR+M/Lf34 1HYutJDQUzLblbKja9TUCFDknAJCsc8gYCnnsTpKqFZi44hk2BXcrfitSm3XC2y/ HLDbKqN4GEkBnMYDI+XXIMsYYRnBOcE5JGdJfX1DVX7rS33W2o9XQva4B8aiEJId zZ2g5OcenzA09/srrDqme7/GVXT9MlNVRwQRPSzsY1AWQH/5MZO85BXOeCQPKGOr 6Sr6yo3zJRqgIKrBVNn6ANHj+vpocjNtrEO55av4jAXT1wqkpoYEtNXLGi4yksSg 88/mYfXto+1zu/gfubZb4JRwBNXMwx7nanPp/wCc6Vekwlzrbulqu9TJR00qwPLT pGVllIJ8pdG3qAPzLjJI7jTBHb7kJI4oblTxJM2xJK23FtzYyF3RyqAccjK4PYan wo6jniNZwZQmquo/BlaSssa1O4+HiCUqmcfr68fTka0Spv05laS8W2MqoLGloN2A fTLvyf7H00RqenOohOjRVVjcY8ykyxkgHIIOGwPcc/XQe7W272mkPi26jkllIw1J WhmYAZOQ6p6dvqBnnXWTm2H+Zzf7GTOtdWOEh6rq12kFvh6WFPsMg/Id9ELXZqK5 X00NfU3SvMFH4olmqmGxt4XI2EAMe5xxpFtXWNumrpKSsxT1izGMUkjo0uB+YgIT zzn6a6N0U0cvUTzwSRvE9EyEbvMGWUHt/KVYHPfR4sWMMAAP0gMzVdy0lhprKGFH CoQkbCAMge2fX051aFQuH8wdgvmA51Z6qQtbth2hN/JBP5cZ9ORpKq6yHlVlFOpO druFPPfJP9tDqQmJr6hYiWEI9UOX6OuMJYAJCxywG1iASB9M4zpNsK0/xUYRWVEi 8vnzvyRn19x3+epOrOq7dQ2Opiklaqeq/wAMkaSjc7n+Hdny+gyATz21BSTRFSUV oZSduFbhlz+XIHbI+3z0vSk5RwLEPJS+eY+G4+PTgIDt4II9capTTEkgKwJ4yQT9 NVlqt8SgMBhcAAeutjGzqXdskDGSxAPqefTVLaYEUIsZTPKhFeQ7kiGOAeDkeh1m ot8kCIhSnIAyC4OcZOs1E6gMRcoDEidDOFfs6ec5x2zqhc0IjWZX/eBsDPY/r7aJ BgXbEmV3FSMeo1WuIMkcanAUcZxyOdaoMiifcQjBtpOZEYPu/i47fT30N/Cmjxda mqld4sUuwYPG0OpJ+o40RvSLSysvilwAT5fUe3y0E6dvX7IvVAwkWSOR2gaJQS77 8ABSPXO0+5x6DJ1xTzOmdFukY/2v6YZ1JYfFbRnO3yd/8vvqx1T4aULzTuEiRSWb bkgAZyAOT9PXQa93ihg60tJqPjDNRRziQR0FTICHChWUpGVPPz9de/ibVFekZKqA 4XdA2Wj52mWPOVIyPKTx305SPEXOG9Q9VX+7XQPF0h1ALdTMDBT/AALHJz+eQDhm PcAcAe/J0f8AwcobjUXKG5X2lqLdTUsnwtJFVRmOSacqxyFOCFUep7n6afEgZqmS GM+d2CKBxx7/AKa3vlBFRTdNu44p7mM7ctk+FJwR2yf76zc7FiRKEXiWmuE9krr3 USKHp6m4nwt3OcQITjHpwR9dV+seokm6Jvy0xkSpFI2/KkBYyyqxz77Sx98a5n1x YKKTqm7U1JClHUtO7JUwDa0b5ypwMAgHkjjS7Yqm73GsFp8WWK4VMqUVSuSzBidr nnuu0k/8vOmgG7EGxXM6Z0XZ6tPwttNpt80tFW30y1bTxrgwRMMhuO27ESj38Rsc 4OmXoWrF06PWqeaSRqmk8cK5OEYDd688MNL/AFfbDeKyTp+xW+oW5UCRoHWuMCil WYMmFz5gPDAzwQV0Q6Z6dnsFVW2o1zzGeGMzCVy3hSSvM7rH7LjavvnJPfTiRUED mo2Q1Hxwpq2CNnSeLfkDsx5I/qdCeoKs0VlrJphGkbJsSRuDuPOFP2Pb20ldeRdQ W10Tp24VtKhXKiBwqZJAzyDjBz+p+WudT9T9ZS1rWq4XKpuEm3Pws6xuihsgPIdg wMZ47nPGoFfd32I5hRgG1XMW3q0V8lMXWWeQiBWJ3oQRhTx7jk9sc8a+hfwnWonq WuFXNveopZPDgjP7mFQ6eVB3z23Me5HprnPR1iqarqOStvVEKqqmjIJCrCDgYUAA +RF9eM8+p12np20JbbrATJumehZQiHCRqHXyont8zznvp+El8gYDiAwpSDLF/hUE t4uGJyBg/Ya5/wBRiOjUSfDxTVZRnVHC7SR23MRkDn6+2nPqutlWlqaikMP7tDnx T+XkYYDsT8j9fTB5Dcq+rqrxbLVS1McUtfVurVNRE1QiAQyPv25Az5e2eB3AzqLX OXzDEvZlWnw1jORuh3AN8q7dPZ7qtwq4a+4QVFOlXHEnhJEhmQ7U2jCL6cEnPLHR +10FjvNvUWxDaKgoDHUxO7NFkeXfGxw4+Xt2PbS/fekusZ1qSWtkdteaFpqpqJKe WVg+Q5QMeAQCck5z8zqKjo6PoeWSqvPUFFMCQZY/AL1lRgcRxgN5c8AZAUfLV2iw thBD+Tf+B8h+km1GQORt8fyZWtPV3WKV1bbjPQRVtG00MplpQ4jZDtwBjBBYAbif XOm/p7ra9XGiWpnhpoZE3pLD4IfDggMo5zkc9+Dx6aUbFM1zu8t1kp6uK+3gzVUk SMhRIhINqKG5I/Ku7OfKTphtoSPqK4QU889POwWrq6VlTw0c5VvMDxIwXJH/AA59 dezObIU9TiD3nQaerNzhWoYo4xtUllGAPTk/XWahpGWKkh8IEo67xiIMOT6Z9NZr PJB5I5lIHE6Jc7lb6WpeGqqIIZMbjuYDj7aCVt/sQw/7Zt6ueAfG7Z/tpnqqKKaZ mYIWb1Kgn66F1VnhnyGSLPckIOfqNbDLzIgYp1dzscy7Wv1lCnht1ag/z1Ssclgp OpUrp73Z4oEppEic3CJT4pKjP5s527wD89Hp7FRqzwTW+k5HLiBMc+vbSNXW+kk6 hp6GGhoAuSjt8Mg5wTtzj5c6SNqmjGGyOI8QXzpUAxp1ZCkcZyD+395xnsSzk/11 X66vlou3TZpbbfLXUOJImYisjbyq6kknd3wO/wBdJUXRdtluklPFSQIMtJKWiURx oMkngZ9NOK/h9YKS3SsYqXxliYoTEo2kA4PH6nOdMTJY4MErzzCvTlfZ2qJJjX0D MygKTVRH58Dd31F1RWwVn7KNJPC0C3Bf3qyBlACtnDDtzxpNt1j6XjVJ7hS0EMjK SXZYwZGxj1+g4z66P9JT9PQWivkkahMYY+KiMrZGAdqqD7kjgcknSXJrbDHvFfql UXqO4TNGRBJUSFXILBhwcj5c6odIpBH1pLfGR1jpFRpiwIV5MGMMM/Jjz8hpBudg pLv+IHUFN4ciQx3CZYjuYbAACBjvjkDXS/wx6XFNaKyind5Y6sh8OxPlXKhufQHk fMZ10g1ODudRgp/huuIakw81lvkiaQdwI5iyg/aQ6HVMaVXVPUBMrIYRDGMcYYRK 4IP/AFj9NXK956CxWCsSAPPSuquCSoCMpVif6aTr5dG/bHU9VSswVZoj5TkoUjhD j+mNNyMNtfSCo5uGr5HLV2JWt1ZFSXOEYWSQLJtB/N5SeeO3t89JfT/T1NE5Sjqd uZC7zSuGeXOMvI/dmz2x+gGNdIhrGUIzLDsByW8MZPy+Wi8M0IQTvFGEfythBx7f 6am+7hmrd+UaXIF1BFgpKK3hVSWEKAFDeIASfr/l/wC9GRtN/ikSSMhKORWwwJBM in6+miSxxkDyRle4woxr3wowpAjTnvhQM6tXHt6k5e4hVqTUfUdWjkNb6hfGiy35 TjEkePb8rj/mb2Gk3qG3Sr1RY4owEllnq0RCPzq1FO6nIPHMYBx2I11S/W2WrcNG qmVcGMk4wR8/TvpPrqYx3bo+aXaJKe8MqEjJcNSVAK49jkZ9jrJZCurFjzYP9/v6 y4PeHg/KXJbdB1NZUE430NwpgDgcjeOSffDZ/TXzx010JST9Uw2isA8RDIJ9qhHO 1iufoSM8d867NZxVJbWiFbV08VPNJFH8NVOgCFtyAqDgHkj7aCWOwRy/ifPU1MtT ClYFrI38X/6+N2SckkFTnPvqs5jkc41sECT7KAYyOjt9Jabl1bXXV5pLdRQQ24kn G0IolYK31ZFBHZsDVLoCjqDUy186BKqdmnqJZpMLlvQH1Cjaoz7fLW88f7VsdDRU 8tSf2xUG+VkSvwYpJWMCZbnLBQxHsnHppztXTtFa7WRWQ1MonIAi8UjJPucDjsdc 9Mqpud3AmbyBpNpbYxAxnfjWaNUNleGmVEqVhUdkwT/bWaR91J7Eb6g94yVVakFW /jEooJTnscnVCK8UtekktHPFKkbbH8N1OD6Z50n9cqL7fHteZvg45N1U8ZMbjkgR xvjuedzDsOO51T6BtdNZqmteFYAVMke9WLMEV225+gxyR6fPVjZxe2ThD3GnqKta kpQ9Mq/ESsEiwuctycH5DvpTpIlgvNseTlxJ+8Y8nc2Qc/U40U8Z7lVmqdcRgeHT qVxhefNx6nVFYWS80RKM0fxCoRjv6j/PQnm/pO9VCV4s71Tmejnkpp4xJIrLghj4 ZG1s/wAJ7H5H5a2rOqbYKCanu5qLbcSrFo5Y2EbZyMq4BBHGNWa640iUNUIvGedY JSEaCRQD4bEEkqB6DQ7qZbfXW+KMyoZYSc7c5BySTj/PXMYHp8wm/FE6tutjqvhq Vm+P8V1wEjyIQe5bIwDzyASflro/RfSVpo50qIqOnzG3l/dDcTk4JOOceg++kY0d lADJW29VEeHcTKST6559ONdD6HusNWkUcFRBKEwrmKRZAT/DyOwxzoEyW9czjLxO N2mGWr/FXrB4RhWukoEo9cAD79hpz6wuFZ0pRRXC2yQ74BHROki7kkDElmCjuQ2S PbOoei6JZ+q+oqydo3kgutQwKLjs2V/qRx9dCfxenb9mw0qZeTxVZQO+cn/tqgCw WMDriM1H1ZernUUdurWttNQ1EW4yrSMSQuO2ZMd/r9NS19salvlb41VDPFU0P7xR T+GWdi4ByG7gjgn+Y86XWhkpIKOSSeERwkCCSQFvGV1VgqIOTgnn6auVt7ujdb2y laBB48VPGYEp3V5ELSkyAvyNuP8AlO7vnSsTNkw3kFGMcBHpTxGNaj/dVI5famxR uxkcDt/TRuy1izUzRFlLAEjB4bHOl+p6VuVdTRJUXiG10kZ4ip4hUSsM8ZZvID8g p+upqXoWaiqKapo+o615oOVWrgjKN8iECnRKCH3CCTxU6HTzpUQxyRMCrDI1LpQq L3LZ0WGenBkZPFJL5jii8VEZi3BIAdm+QXnHfVGr6oq56JTJG1Ok9VVUysh8w8J2 XBHccL39z7Y0xtQFFmAMRJh2/wB6WDfBQlJqxe+T5Iz6FiP7Dn6a5J1hfRRXayVY Se8XWmuHxUlPAQHMfhSoMA+WNSzjGeTgnnnWdRdUzi21FPZRIXYNvrBGSIz6qpxh mz69h8z2XelSacU4lhqBKX8RmnO4u2fzMcZJ7cfMc6z/AFmY+o35CUbABtEN2y9V 0tvvk1msdbV32BfFqIZKfw6dJF5MUbKz7nKlsLnORk4yAQtB1rZ6yzxz10/wtetD PbTEuQ6iQLyB3JG58DHcjU9BcaFmT9r3CopqCLqCenMkE0kcMaM0hZZdmNu4qhUk d0btg5J3mqhrqq6y26oSuWgajr4I5aV5ZK5RE2F3ABiuRu3H82B3GqsQ2jcfMW3J qH/w8stVcaj9p3SnEMk7eJ4agfu1UbY4+PREAXPrgn1043qpja4JGVKwQAKVHly3 f1+2pVulHFGIlm8MFQfLBISM/wDTqhNNbaiWSZJDvkOSy00oBIGOfL37aLI25aU8 zyrRsy8lyVkXDw8cHO8n/wDyNZobTeF4Q/xYjHoBnn56zQ+o0LaJPXRbLvUsDvYy u2NuDjceM6U7IXnq7lSRoUU3SqjkbbyEE5O3I/myPtpprrOv7VrKhq65kvO7CMVI VRkngALnA9s6W7HQJPcrw8wqAq3Oox4dS6f/AGtyxVgTnAOD/bUfrpbFR1GBSQBC VDZ4JLZTmaWtdnTOTUupyeP4cY1KbNS0NzoKmDxWc1kQkDVDuMHjsxI747DOicKR QJDDEpEaABOScY9ycn7nRejQCFpEI3LgktgAajwZsuTJ3xDdVCwdd5zDaK1uWKQs 4jznPlPGrqpT06KS4+Hb8oJ599uO51QvJElqrI6ZZGcwnL9kUnjGfX7antFJspqY zztU1kUKAzkbdwK9wvYc59z89WYkKYqPv/EWTzIrqJ5ZqeWAvTRAyKX2qWOVxkDB A++oN4oJIKzYAqSr8S38Tx/zM3c7Tg/IZA76L16YpI/mWzx99Cp3BhaIgFCu1g3b Hz+2p/VZMtH2hgBllakpKLpmK8VNTLHGsk8tRNJIwAALFuT6d9K1y6fqOs5kqqeO SKgKqY5KlTEr+uQp8zA++Bn0Oi9vEVRXftK61dRCjMFt9H4Svs8p/eFSDmRu4GDt GPUk6OJUSV2+CkuNxirFTxiKmlVTtB7hSoyDnGc8Y1uUKoyTzEe/dL19qhstVLWw TQW+ohhdUi27YXJTuxycHHf3053i31Zd7nR3e4ULmniheOnEZRlTdg4dTg+Y9vYa q3ime49P1lL8dJVy1aqEDxBGQq4bGB8wdGpnd7Y0cyATIo3r3wcf9tTuyhDsjADY 3RRapvMjRSQ9T3GKIcKz0ULZzjg+X+2NaT1nU4iPg9TLIvBDSUMYb6Ej/TVCretp q34egp3qpdjsyIwDgAgYVT+bhvQ5HGifTwV6H4+XBhVnSNO5QZ8w+R9MED7ax/Wz FgCCAfMsOJALubLH1ZVxI1RU2ydo0ZkEltUMOCWAxJkEgYx2OcHjQrqm4RUfUVjh mERiq7Wah2CFMHdH+UDOMhsduwAJIxozd7ytPdWS3M5EkaBVjUk8ck8c88dtLnXe ZusulahIy0ZtEyKY0O0qXiwR8u3bV2C2JB5r+JO/HUbKKCz1lEXXf4DeWQNFIhGP Tayg/TA+moEuHSjVEMENY0spkWKNPCkxuPAGSoA59+dGI6zbRwSSHEgOMYYqR6jP v/bS7188/wCzmqrXMZnppoqqGPYNpZW5yfcZ7HPbT2VMiGhRgi1MQLjNPR1RHT7y R18V6ra2SWTmmWJZHRDIOGzveQKVION2cgjDx0ZcLbbblfKq+3mjhno5o7UwmQU8 BWKIMrKpyScMfMx5AGMdtKtytd2tz009LdY6qpmqDFLRPTpClQrOZ5V8QE7eY2IO PUj11pdrXfbpcobjTdLGGsQkTCskikirF/hjbZnODnEh5TOBkEjXhkVALr85zaTd TpT9b9GTOIouo7O0gU4CybiT9hzq9S3S0tClTSXOGcMoK7M4YZIGMjHp/TXE/gqC 99WWOAWlbaYnleSlMaxyrtQbo3VRwQ2MejDkH10/01tYJAr03EShfB5baobkD7HP 20z1wKIE4MZPZjHRVzU1JFH8LLIMZDCOMg574yc4znWajSCmhBSNGRATgLjGs0v1 Gjdixgr0zV1BB5DE86VaOUU1yuaNhRLWvKWx5SCAQR78d/ppsuXmnqEBwSxHfStV W2TdOEdoyVZvLwDxjB+o1lsVV3+f8w0FgSepvVNSU4mLoyscAF1UH55PGPnqOz3u hu9zFK11oqiXlhS08wy2Mnkd2HbOkql6bNZbXStWWpqpN48MgHG0eVVz2+WBqzce n6O3UccaWK4S1UEqbHgjeOWF+4eNwvGOOxwexzosA9PoQm5nS795LBUYCmNYi2FA AGOc4+g1BVVAp5qSWIBYlVYZQv8AK3AOPk2P10hVX4hXGK2CHqDpq40tPNHLHLK8 UgbAyN4ygwNpzz2z8tZR9ewXJpaSW0VMI8LJxNuJQjBIG0Hsc+v21azUtVFKBc6Z WuTb4gRg7yCO/poHdUkWiBjRGMsiwKWbGWc4498Z57ca3tNeaykpEYFiDtct/Ecc H7jB++vKyVmpOkmg3SRyVcUsrbCc7ySD8vN/ppOHAufNbdATzsca0IMuUF36bqqa rW42iqmOafd+zHDIMDJH7/v+Uduw/UvZLncKuf4q4SwSiGlkwIojGFZio9Wbjy/b 56pdZbY6ag82Q0sjt+iDVizUwkpZ18wEiDLIMkcnnWyBRAEl7gkXSaGlrL1SIphp 6loHi7NuwuGJ/lLMoJ9O/Or3Rt3lvfSCXirQCoqAWeNScKwJG0fTOPtn11R+GstF S3OlqLnJVWa6vsdw6kwy4wCpXkAkA9jyo9M60pm6X6f6cloKC/S1tNh5Vp4apHlk JHKgquRkj7aiyYqJFx6sTXEgM/hdWWp22hZaOpdmPcFXhxk/Q6bqqnt1wPjoDHVs ozOoHnGOAw7MOfXn2I0h9ZVIqLn0nX9MXB5jNTVDLUTT71jUtCO/OMHuMc4xxp46 WkjqErhTpso46lhC4wqyDA3FB/Ju3Y5x7ca8E59OxPFr+KKE/T5nv00dcqpTzjwo HDZVgUweOOc48p0CtvRVPU3K4W8V8dGtHtSJktkBdowVkR0Y8jGUHHBwc55Gu1Tx xNC0MqI0bjBDYOud9dL+zOubVVFvBiu1IaRnxnbJC25MfPa7fYY0WPTemxIPcFsm 4dS/B0lc6iWVh1lVzyHLpE9DSoCuOM4jOee5Hy40vApaOpjYrrPUzJPkq8kgYpNx nB2jK4ZGGR6tnngdIsldTr4SyMgaUAwFRxtJwQpPPf00qfivTBupOkatApdJplcD G51wpA+YBPb56c2MAbhADG6MrVViii6itUU9fXM8UdRUPh1UKPKi9l9cv+mrD/h3 09UOZTLdgOCIxWuFU/TH986mqqhanqy4qGJNLDDAwOOCV3t9e+jUNanxMEY3q+zZ z3OB3OuJj4BIud3QZbvw76et16iuFPHWitjheMSvVM/lfuCD6ew7D0xpijtFKsil fGAI/n41NBVJIxTcC5xgk4Bz7fpq6mDjLDA070l9oG8jzBn7KphxtlP/AF6zRJ1I PHI1mvbB7Tu8+8oyRh6+o3fzHVGqVCXU/wAQZT8gRjVqtkMVdMf+LOh1TIGUse2v n9W647A7syrECamtHFFTfBo2CsW1S3qR20dE0byDDgAYyQcc6XIZfIDyV7Zx66tq SoJCuvv5SNL0+qbHYIsXDyYw0NTTLDT4LtucYUAZ9NKFRXbwwpY551UkZj7ZzyNx IBPuAdEKoSSKQgY54OAcj3++NVqmCeVInhp5Fjfy72jfCkdvLjP9NVnIdQPgWCoG PswNbbg0V3RKiJ4A77F8TkO+MAg/Qn9BondaoRWJljkeWstQFT4KDz7UcMuBjkbQ f00M6mss8wgohJuklZQh8IrsI9Rk9wcH251ZqaGC+0NBV1VLC1bGpjLqpR0YcMAw IYA47Z+um6UHE53QctOLEt9WCCZqR4SHp3Jkj54ZWVSCP6a8ikmhstWKfe8xj2BY yASM+bGSBnBOASMnGku6016s1RS09luFRQ2uPEYQ0y1MMW7bhcvkqM7uPTPtqT8O esrxWXVobtPFUUQjj3SJTCFo2kbahyvDLuwpGP4ge2daDOALk6jmTWuzJRVcbVMs twAxBQT1xRTSU8RB8KSJU43EtgnORtPB7tlpijqquVjQ0+6oiimjRoFPhhsg8Ef8 J0eqKuZEidXyN+yQFRwD2I++gl/qfg7zQyNVVCfEw7dyEKQVcZXODx5xx/bU+TIv 4gYxQeppeqfp5aou1to8KwSZ/CA8TH8Jx3HAznOe3bVqlr7Kyk/B0Xl2qQqgYycA Y/y0szdLWqRzmuvbAsQf8aCDknPdDxnS1JQ09rv9A1BPcyprIoylRU+IrZcA8bR8 sHOuY8wJ75M8y8dTt8UFIkwUU8KknBwO/pr50u4mqOkLlcfGnlqrVc4ZUWWR32I5 aNgATjHK67xcj/iEkMm2OJtzkH0+uuYdPWgV1g6goHVt1crIoGMltvkJHodwXv7a tPJqJAoS10B1Mo+FasoaqZo12hoqR2IZiTkcd/Q4OPX10Ra+x9Uda2siGSKnp4Ha KOoTa53yAbyPTPhMR8se+kzpu5RwWgTTyR0kSRgyMzBQuBgk+vAB4HfsO+ovw4uE lfX3+/TBUDxuI42/MFRQqAe+ARn5n56lbK1la4jAo4McbZVieS73WRsLUVEs6EDk qDtQAe+F/rofXX+ee70cy1Hh0ks0nhuTt34UYX5jk+2Ne1ENX8RSWKmt8klRHavi lHxAiACOUL5IOTliNvyzkcaTeo5Y2tVvqxSNSmWm8WlmapEe4eGjA7jgBlTHOSeS NEc21wlTwSxc7ZaGCinikdmYxgMSORx249tH1KeMu0jPoT+mP6a5N+HXVL9TVNdA kLRvSJF5ih2SbgSWBOARx/3Pr02OUK5AORkLgDgH01YDfUURC8j4bWaqsd2CTrNc gwZdXPx84PYN/lqkowcMMg+51duR3XSpBHZ/8hquycZHfjj318lqwWytfuf3mhjN KJvAv76E43BZUf8ArppwV9c40rRnayB+25c/TjTSe/3Otj7J/Aw+cn1PYnjjIBGc 5HbjWw759ffWrAHHtka3wMca1pNFXq47LpbZHdkQZywPbzDOdChUASySRZSN5jIu OOD66vdb1dPHWUkUs0SMiMx3uBwSP9NL/wAbRFiyVtMecEeIDj5axNWxGVgP7xLs X4Bcnp+lLLXQ1T1Vsop56iQb5niUuPmCc4PPJ7nSLUdNU9kqjeoHp0oFhrYqyN/K RCSVfYQMhiowB74xrqnTlRT1VE7wSLKEm2kqOAeNKFNfOnZY5aS8XSCnENRMXV0J BbxmwORjjGdEGdgAPM9S83L8Et9qbDTw1Bty1MlMvinx2LE4G7O0Fc5yDg9840r9 W1NZbKehjuTUMCh2WnWMsqhMDjkfQ6YrfF0xWzTwWSSlrIfDDTIsO1fzjB7c86Hd adHwVtIWtlop2qCNjGGLLFT/AKHnQtSttYETwNjiUoupoFDhrjQKWU4xOuScd854 0Jlvtnnvdq3XamlrEqk2U1KpmkcbhwFHHoO5Gua3bp2ppKqejqIPCZG2yRvECw9v T7/fV/oa0rbOqrG8zwwLDXQPMTt8qrIGOcE4BA09cShwd0WXNVU6R1hdup7vUIF6 dvdNRF8xQJEDuOc7ndWyW7bVXyjuSTjCJV2C6x1HjJ0h1NGZNzysWchj/MSG7Yzn P9dfS1K9Fc1+It1RFUxKxQvEwIBB5X/mHtqappkjpZmKgMFYKc98njVpHmK74nyr flrYw1tradqGkplEgpGbfJIpUOryPyCoJODk4xzlsARWKnS50rI1LTttZEkAhZwm eRg87eMsRkntnknTv+MVsC3WjuO1hFLTilLbN4DqSyYXOGbltoOFBOSeNJdiss0a W2va10Mttrar4NI5W3Egjb3ypZizAs5xyB2AAEocMgbqMqmqdJ6V/Dpqopdqinpd +yRYN8U6GSMnys22TI4GMEc9zng6r2joOKCi6VY09hnD07GZpqQkysYUyxLsQ2D2 yMZOcYONGeiOnLZ+wqP42hikrYEaJ33sW7ngtnk4PJ9c6OR9J9OeHBFHZqVFhQpG oBAQEAY749Bj2xqNtUosUY0JAXSNBP0v1DWvFbqiajrqWEypT0SR7HjYgMFRiG8r YJGAcdhrqVHJDU0scsG5Vl8+1l2sM+4Okm+2m22+xXGrpqWCN46Z2y7sqen5iD25 51c6Hq1/2dpovhlp2iTDxhshWOCSD3OSx5+erdLqN4N9ReVB4jWzFDtzjHy1mpoR G4Y4BwcZBzrNXcGTyhdsLcJ8d93+Q1X47+3I1vd5t9zrI1RyI3ClthxnYpxn17jV eMu4XEbnPA8p18lqgwzPx5P7y7H+ET2o/dhcAk5B5PzGm4nzH66UK5dtM8rsyqCC CVJGc8DTcDuOcY9da/2RdPfyidT4mM2APqBrcailbCbiSPMv9xqTPHfWxJYv9a0s VTbIy8aMySqQSuSNAbUpp0CVJinmACKUVVz9SRjOmXqfd+yWIBADqcn2z89Kqzsq hXfcvJ2kggayNcn/ACgj2lmA/BUZqKTwQGlz5m2jkH6dvpjXMoWRtzSRqWa41Kbs ZON5OmiW8Gnj8NZ6cTNLlTP5UGeeSCD8tJDVAjQKs9JOy1tTVb4JQyDcAcHPbkkc +2uDKMam+53YSY6WimWGoEgVAXQjy/XTFD5kwccc6XLLUR1FPTywjKyDeHz+YFcj j76ZqYeUk9/bSMr7n3Qq2ipzXr7pme6V6VtskCV8MjKFYAgjdnP1BJ/XGl2n/Dfq SvmD3S8tb7dTxHdFTpEksijJwPDGADk8k5+WusVC/wCOZveRhj76tSALbqjLqcQv jzcnjtrVx4wQGPtJmJ6mdIUdDZ7PSW22UyUtHGNqgt6n+Ik8sxPcnknR2aJkhl8w kyCAGb19tLVpvdjSCNKi7WyNowCoeqjHIHPc+2dEj1JYQpK3m3Mr5KlKqMhh2Jzn 300keYH0iv1JYoL/AGn4CqB8N2VwT/CytuBxpW/ESijpbdaIKaOJBS1NIyJtwvmq Bnj57c6dZLxaoaVpWuVEsSKSXNShAHv30mdaVAu0F0azVNPLLSS0zLKjBwhjKMSf T1PfGdYmAk8HoSthDfT1O1HJUxCJvDL71Y8ZJ4Oeee2jkWGTcThVHJ9tULcs7RO8 6xrUFjuQHyjP09NEqcFPQAHkkHOoSwIjale+KhslyjlA8M077wcYK7fNnPHbOgHS EkcFtpQJGeWpiUAgAho8DaQo7cAffOmG8AT2m4QgLiSklUZGe8baAdIUNDHYLOaS khgj+GSRVjRQASoPBHpk60vs8FwaPUTlNRrWqjhHh+LEoXsCwGPtnWao7NnljK8d +PXWa0PR+cXvlDqzqaptnUlxoxTLNGsqurbypGYoz6ce/wCumO2XNa5InWRFjkJK nOecZAPseT/XSL+ISH/bK5YBO4xnj/8Aknf9NUrO6wTyCRiodMA+m7uN2sc6l11D q3VmU+kpxqR3U6D1dPILJVwkCVHwuAp45Bz9c/300wN/h4uCPIvfuOBrmNVcJ/gP BlVn3oH3s4ySre3btjXTlkEyBh6gH6ZGdaukcOzEfL/ckzLtAlO8zFbTWsjEOsbY I7g+n31tPAYwSk8yxpktmQkt99b1yb6GpTAOYnG338p1ZY+Z89hqwrcUDUCXenpJ I6cVDeNEZlykkzsuTwD+b3xqulJblSTFBTrIwAJ2A4Ptzq7dYykdMYdibZFJBAwR 7fL30Plc+cjGdZWrdsTcSnGAwkVfarHUMzT2egldxjMlOr4P3GqUFmtMUoaO129W bjIpowfbOce2rDVGDhkyAf4T316JgGA24Ycg6y8mofIeY9UAgbpKgrl6ftBp6T4l Uj8J3SRV2leOVPOOBjB7aYFNyG3/AHTVAZy2XT+nOiPTMUcFvaOIEIs8hC99ucHH 6nRbaoH01t4tLjyorm+RJnzMCREO5XKegq1FVaK/xJWZoxG0ZBwQOeeM9wdRzXmR /GiNluWSABt8Mq+fnu4wPfR3qVYzWUhlQOmx8qfUZGhBRYI1aaJ6iMGMeXALZBVT ye3mCnPtpOXVthyekvih+VQ1xh13GDYKaKVlkk6bqSe5B8HIx6d8Z1aoTRLV7E6Y q0O3zPJTREfLzAnUcl+p6eqkp5CkVQGhEg8eIlPFYImVzxkn1x2J9NMc9alHGqSU dwkC+VvApGkz79tUYMmTKLPEW4VDxL9PbKGYKTR0+AcgNAvlJ49tDXoDL0/dUqIi PiWqZ3jcAZUt5B/+VXUdV1dRUNPUstPdjLBC8u1rdKF4Unk47caLWp1rrDFlnIlp wC0iFCdy98Hn11UaYxXIi3FLFIRICpLgHgasjYNxGM/L31vX0VPT1kISFA4gVCwG DtHA/rnUeAqElwMnueNfLanCcOQqxuXo24XIrjGailmiJ2q8LqW5BGVIzkc6DdCA L0fYi6EMlFEgTH8WAAv/AJ7aOs27egyw2kAL35GhfQo8Tpq1SyKsR+FTCI24JxyM nv8AXWj9lNe78orOOpfUmEbBIu4E7iT3OdZqCYZqJSJWILcd/b5azVbZGswQgqQd aUit1JVyinDOSvn3kZGxe40u1FLvkbGQyfmHp2079VRhrtUs2cDaeOP4RpckT9+E LHdtBJx35/vnUmow27H5w8WSlEoxW1RRbmQeNtbk5OMnjv8ATXWYWBpYu2Cijg8d hpCamJhykhT6DOjsfUkchES07ALgZJHpjGNU6RRiJvzF5iXqoeqSGpakd8IwP1xq d2yGPvpWqr5JJDMhXCSDCgAZCnvk++sS+VG5GlIKc5AUDOq/vC3Fekahe8sRb5CB kqQcffQISNMD6HtnBA1vXXN6mNkCBYy2Mg86oPVMIwUGMDPJzrP11ZeR4lGEFRzC VNTeKwR5CoUckDOrkdupXB3VExPbhQNA4LgU35BJwSMcY40SFcGiDYIywzwOM+36 6Tp8WJltl5hOWB4MO25YIomWlJKB+cnJDYGf8tWHkAX+ulm23dYoKlyHOHLHgH5e /sBqROoqecL4cco3A4yB7/XWxidQgAkrKblbrGUiqtzDPO8Zx8x/robUVSwWtpgz R+HJCWfP5V3qTj2HGqvWd53S0u1WGwthuxzxqhFXLsVJI98b7sowBDL7Eeuvndbk 26tj9P2Al+FbxiLlze1UrQ2e6RPVTT11fWJTU0S1D3B2UrCUypjbyu/LcKUOcHGn roi5XGumWGvq69p6Sjh+LSrolp2aocfmXygsnlcj1z3J0MoZYz1Fc5aaNIKeJYqU QxxqikKpYkhQM+ZvX+mithr4ke4VjRsXq6ttvbKJH+6VM+wKyEe2/HprZ0+Ude0j dT3Gq5zzLaqzduK+BISMkZ8hP+WrFqLNSwtJwrRqQP8ApGgtbdIZLRWYWXcYJRgY HAQjv/nrS3XyJ7bTMsD+aJcBmz6DVfqKOTF7SZY6jlCXGhVQSZIJh/8Alk/1OhUr 7lXPOT66jvFdPIadqggLTmR/3fc+Xnk/b9NUp2lZBJG4YId4Vx6YJxnWF9pKc53J LMHwijCJnVWUr7jHt/60v9NVqJYKZKfcIwrIvuBuOiqwM8iF3xhgOB8++orfbh4E GNuQACAMAHGONc0WLLgDFvM9lKtVTanlO07lw2eeT7DWamajkZiVZQp/4m/yxrNU U09Yn//Z ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline; filename=magnify-clip.png Content-Type: image/png; name=magnify-clip.png Content-Location: http://bits.wikimedia.org/skins-1.5/common/images/magnify-clip.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAAA8AAAALCAAAAACFLIiAAAAAAnRSTlMA/1uRIrUA AAACYktHRAD/h4/MvwAAAAlwSFlzAAAK8AAACvABQqw0mAAAAAd0SU1FB9UEAhIR EfdlPYsAAABPSURBVAjXY/j///+5vXDwjAHIr26ZAgXZe8H8a/+hoIcw/9nevdVL 9+79DuPvzQYZFPUezu8BMZLXgkExnD8HAu6hqv//n+HZVjD4DuUDAKlChD3fj6aP AAAAAElFTkSuQmCC ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline; filename=25px-Bookmark-new.svg.png Content-Type: image/png; name=25px-Bookmark-new.svg.png Content-Location: http://upload.wikimedia.org/wikipedia/commons/thumb/f/fb/Bookmark-new.svg/25px-Bookmark-new.svg.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAABmJLR0QA/wD/AP+g vaeTAAAAB3RJTUUH2QYCETYP2OufzwAAA8VJREFUSImNlM9rXFUUxz/n/niTmSk2 NmnSJlHQJq0Y1BIqgrZ1o4Io6LLoxo0ibgUXLly7FvwHglKkuJHiQrCCMa4EqWCh Vi1ZpLFN0zSZzLw3b+4PF8mM701mag4c7uW9c+7nnu857wlD7IU3P3n1zDMnPouR ev+7tTub62wsL1y6dMkXn8fIKK1ajay1I2Nsd59LMWhxcfE5Y8zbWmu+/n7lwsTk kcMnn3g86YesrKyltXz1q8OHVMM5x8jIVnLqsd9mxsc3H7amY8ePrP80fXz9O9aa P8gcbVNMnp2d/WJ+fn7WOcfZcx0+/vQiN1c38D6UIK1Gq3rm9Nw7r7x0HghYuUyi NzCqhQg0d8afIrZqTMYEWt+UINVq1TQaDfI8x1oLCFs7LdKsU4IkISfLMtI0xag/ SSq/Y+RXxJxFZJqR+nWL3HkRld+KTX5R/VKICCK7KmotGIkQXMmtUuR5zs7ODu1s leDvgJpG1AJi30KZBUEmHgI7CZ3JUiUhhBJIiUDo7HrRlCLGSAiBEAwhWGJoQtwg +qvEcBdoRmLMiJKVIDHGHkBEUEqBd+DLkGhsb9/xj5C7aZy/hfJXIFwluJWA3rpG 7Nygka+UIN77EkRrwdZqOMqqmr3LKKUI8Qhp+2m0DiCrKGlx714tPXa09S1J+qNM 0dpXSVEuEUW1XsdLKQzaGTHGXnyazyPqOCZZQ6s2q7f/3j529PJFqXAbYKBcXZAS oVatEcth5N5jre71ECB3E7h4ihAV/9z9OZVDu4B9kGLjAbTRWGtJfCxBvFZUKpW9 Md81rXVpMkvyDqqk1xOlsEZjjUEpIYRdWK41xpSrK+Z1ZexaqaP9I6yVxhhNrZqQ N5scqiUYo1F7TXfO9dx7j1JqIGRg47sgJcJIYrhx/SaHbc71q2ucmD+JMZqpqSlm Zmb25R5IrmKgj5E/rv3FuYVHefb0CZwLfL54hbQTqVQqpQMHVTBQruJ0AQiR187P 8eTcMdI0xbmcdy88Tydt0Wg0WF9f7/nm5ubBGu+9L1Xy0Qevs729TZZlhBB6h3z4 3suEEHDO9WK7/RhkAyFFCfrtv5+n3ifXMMgD5eo/uLj27x8EGTpdB7F6vc7Y2Biw O/7D8gd+8UUbHR3t6d1di/uDXGxfJYOSujIW5eyPG5a7D3L//n1njCn98otVFm8+ TH8RYWtrKx8KWVpaen95efkNAOdc0m63a865EedcJcZoY4wmxigiEkUkKKVyrXVu rc2stVmSJKmIxE6n82UJPPA6g00Bem+NgN/z/7V/AX1z3bPPcliJAAAAAElFTkSu QmCC ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline; filename=Facebook.png Content-Type: image/png; name=Facebook.png Content-Location: http://upload.wikimedia.org/wikinews/en/5/55/Facebook.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK 6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGFSURBVHja Yvz//78oAwODHBDrAvElILYD4nNALMAAAXxAzAHEjAxYAAsQiwCxeP3cM3VANUxA ZYwM////BbJBGpiA+B9IBK7jP1iMoTHZ+BCQusYIdIE+UPP641deKTIQAEC1QGMh DvG0kGUoDNddAHJBKDcnqyi6AhgfBPSVRRl6cs3g4q4FW2HMZyDnTGZjYeJBtwkG QAYia0aIgykpkAv4P3399RhIy8JsB9HorgEBt8JtcHGYHSAXiP399/8Ppg3YAh3T UJAL7mMLJBDY1e+FonhXvzfcJTBlIBfYg6MPp634AcgFV4F2/8MmCbIJ2SWg0IeF DwyAbFbAFgPIitDDBcmlC0EGfAfymfAowgfA0SjB8J/xoa2BrDwsbv4jG4bkElt9 GXACALmOj4cNJOQNsnkzPEgZkRM9A4phyKkHzITkLRZQXlAB5bgJqy6fJTbkQY4C 5oMlsMwEykQg91QAsRIQ1wNxDBDvAOIvQGwMxDeB+BcQfwPiSGj2XwzEOwECDAA3 Jn7jy0UdxwAAAABJRU5ErkJggg== ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline; filename=Digg-icon.png Content-Type: image/png; name=Digg-icon.png Content-Location: http://upload.wikimedia.org/wikinews/en/9/95/Digg-icon.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAABAAAAAOCAYAAAAmL5yKAAAABGdBTUEAAK/INwWK 6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAEZSURBVHja jFM9qoYwEIwf9l7FS1hYW3gD76SdnZ7BAwheQbAQLGwEBX9R932bx4aNkccbCHHX mXE3Gy0AEH8hz3ODMI6jiKLIwmebkkmSKCK9JIRhqBl8uerZJvFXJBPHcVCsmSzL IrZtk4vDforXdRW+70sTx3EUkcT7vmutfYhA4mmaxDzPMhcEgWaAYqrAdV15FuoM uJhI931LEu/5CWXAxdd1yRzunucJXuUTFo6RT4BA/eMEhmEQ53nKhaa4F0XxS0QD WnEcA4+zLMMY+r6HruugbVtomgbqugbifsQ/wL+MO7WoTYHaeGuHxFVVGQbGRWKx 9ayAzAwDBM4YTxnJbxVwAxyvYZCmqXj7aZ53oCxLLf4RYAAwSxt0Re9DqAAAAABJ RU5ErkJggg== ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline; filename=Del.icio.us-icon.png Content-Type: image/png; name=Del.icio.us-icon.png Content-Location: http://upload.wikimedia.org/wikinews/en/8/87/Del.icio.us-icon.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAABGdBTUEAAK/INwWK 6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAvSURBVHja YvwPBAwEACMjA0HAxEAlMGrQiDYIlNQIJsi7d+8yjgb2qEH0MAggwACkHAe4Cksm wwAAAABJRU5ErkJggg== ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline; filename=Reddit.png Content-Type: image/png; name=Reddit.png Content-Location: http://upload.wikimedia.org/wikinews/en/1/10/Reddit.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAABmJLR0QA/wD/AP+g vaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1gMXEhsTsPe9PgAAA09J REFUeNqFk01IY3cUxX8vxilvqG40MYWUIg24qxIxqW60usvGRTextLioWNSFXciI s3Kmgp3KQEEQswxEG0HciCBI6lgUrBBt1UQRJn6UxPEDTZSoecl7tws/YZz2wF38 z//ecw+XexURAXgCaHwA8Xhc/H4/paWluN1u1tfXGR0dxeFw8OzZMwoLC1XTTe4H RQBGR0c5Pz8nnU7j8/no7+9naGgIk8lEKBQC0Mz8D7LZbH48Hqenp+d5SUnJn8An 3d3dgbGxsV/39vbweDw/AoLIo/GxiOSLSOna2lq4q6tLRMQsIoqIKKenp9/6/X7X 0tLSlyJSLCKKIiIKoNwYMGualp2fnzei0SjJZJKtrS3Ozs5wuVxYLBaqqqr+qqio eA0EHjpXjo6OlMHBQSOVSlFQUEAqlUJVVaqqqigrK8NqtQKwu7tLJBIhEomg6zpF RUXs7+9TVlZGR0dHndLX1yc2m43NzU0SiQQvXrzE4fj8P+c2NzdHb28v7e3txGIx 7HY7pqurKxKJBACBQOBa5E0QfvkeEm/vqyPz8NM3sPYHtbW1BINBpqen0TSNZDIJ MzMzUl5eLjs7OyIiIlpG5IdykVJExn6WO7z8WuRTRF59d0cFAgFxu92yu7v7FBFx trS03BcYhsjvv4m8bhFJvL3n/34j8qpFZDl0Ry0tLcnAwICIiGIGlouKigiHw1RW VoKiwFfe63iIL2qv4wHC4TDFxcXXDxFhYWFBvF6vnJyciIjI5eWlDA8Py+Liohwc HMj+/r5MTk7KyMjInZtoNCper1cODw8/u3VETU2NsrGxIW1tbXR2dlJdXY3T6WRq agpN08jlchQWFtLU1ARAMBhkfHycnp4eLBbLP4AoN0erAh8tLy+f+nw+0uk0Ho8H h8NBXl4ehmGg6zqrq6tMTEzgcrlobW3FbrdbgSOA21u7Ai6dTqctm82+y2QyZLNZ ZmdnMZlM6LqOqqpYrVaOj48pKCjAbrc/BS5v5/XwaJ+MjIy8S6fT1NXV0dzc/N4i GobBxsYG29vbhEKhi4aGhnwgB2B6kCSxWIzGxkZyudyjG61pGqqqUl9fz8rKCkDe 7Z/pVkzXdcxmM6qqYhjGo0IXFxdkMhlsNtt7zf4FP9ABWkYHYaoAAAAASUVORK5C YII= ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline; filename=Stumbleupon.png Content-Type: image/png; name=Stumbleupon.png Content-Location: http://upload.wikimedia.org/wikinews/en/6/64/Stumbleupon.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAABIAAAAQCAYAAAAbBi9cAAAABGdBTUEAAK/INwWK 6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAMuSURBVHja fJRLTBNRGIXPzLT0kVpKw/AQEBXFRzSi+ELFBNyQoCFGg3GtCxduVRIXJi7UhYkx LsRofCSiuCE+gonoAsWY+FigGBQCqNii0BfQaWc605nrf0trkIUz+drbO3fOnP/O +SswxpYDmCbqiHVEklAIG5FHOPH/o5OY4IubiBFiG1FNOIKTQW/YFU53pR7FVady wNDTkNOFnQ1iA8q1clRUVMwXshMXBXK0gwYniRY+G0tO4550H8+1ZwgoAcRTcehp HQ7mgGyX0ZDXiDb/Kbjd7vliLVzoKg0auRsucsE6j55IDybUCcT1ONJ0QgAkJsEl uFAUL8brjW/gJuF5YjW8tONEOhwL46Z5G49/PkEyaYNHWgyPKILBgiCJGDe/YDY1 C8M0IDlsGByNoNKXgCzLXGg9FyrIlERn93g3rq/uwBZXDRSTZR4lkJt8UcCAOYba F6ugWhpMEo8wN9yzSczpoJQL0VKEB1IDhV6hEDtJpLVrCE9fjcBQkyQkoGlLCR4e 2YUSaQV+JYYzd2pphncjE1hbldn4pSJ9ePgr71P68G3mG1TouNRcjY4Te3Bwbw30 cBifvocyN3vzvFQqy5TLDb8PpnJ7VChmX3u+QPYVNYzNb+txZeo8WR7EnX0rIVcX g9kdmdU2G5nPDAUwSaIvMSeU4KUZBNvv2I8P/iH8SARw6/MtTBsx1C3fBMMyMKna oZKD1tJWFOTJ9FQPhkJB1JQ6ckJkk3JE/EgkEixtWX/RTIu1D0eZcPguw+EOdqY/ wpI0p5sm65tS2O5Lr9mnr6Mse1zkjlTeBpqm4cbHEB70BzAeU/A7NAMzOAvmywdS Bs5e68XlyhL4nQLswUm0rvGhTPblHMlciPdazO/3Fx3d4MSH7woiUQuLnBLUJQW0 qVSTh0GiLAmBEPWDTiV70XZo6z/p5kKrCZ3/4BfaW5bhXLeGl5/jCBkGVNPiO0Cp FiHnS2ioLkHbwdqFLWLwFjlNg0M8nbnZaDSKX9NJ9A5HMTgWneuBMge2rypCWVEB yP3Cf4B6LsSlm4ljRBUxRYhZeFBmCFc2uC+zVdiy63gGechSfwQYAGTdYpzbbzXJ AAAAAElFTkSuQmCC ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline; filename=Yahoo_buzz.png Content-Type: image/png; name=Yahoo_buzz.png Content-Location: http://upload.wikimedia.org/wikinews/en/d/de/Yahoo_buzz.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAA7DAAAO wwHHb6hkAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYA AICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAA0pJREFUOE81k2tsVFUU hU8x0UR+mvhTozERjD9ME6qJYEKsCKVViZWKgNgYELEOL9sCWkp1+kyHEOqr+MNI jYoEQ2nvFMuMQpvSqS06fT8cKDhtpU5n6HQqU1rufK5p4knWPWefc9e6a+99bgoa RiPgLjT3pswZzH3GTu4swaQoSsFWkDCGhNYJc88S28ybpebRda4kTfsaPU1V8E8z zHXC7R6hD/7tFrqENsWtMPsrxDww8zOMnaGvqTxJxVx1H4KwDu+MSGCScO8AJ4ur OHmkVISwiNckMij0K5Z4TMIzHfpgA6Pu/ZgJzwER2yVwA+JxxrvGqM0/QW1BDUTi ItwUJDIbEHFY6yGYltPwWcatXEzQc1DqshjXC7Fpgr5RPtv9KTWOSgnEICrhmBxE +0lM94osBxG9H/qRCWsbZsyrFKIX9YUBzSGCbQFcuRUc3V4Mk7OyOiUEYUpCIaUR 8Wnt1tk3EsjBjHuVwrSKE/XrcILgpWEqNpVQ8Ua+ijVPdXYprtfKaKiqI97fjT1q wbUvIOAk5M7CTP5SCLekGFEdQgFueP188nI+pRvegaEpKjMOULm2mPL1h6nbU4I9 VA8jR2HgIBErXQLevbJ0RlAbxzu5al3CmZWHM3ML9A9ws/ksvi+/onztR5Sv28fA qWPQdxx684k0PocJeXbB31/DX99iB84TOOem5MW3KMvcit3Thd1Xr9nLiW0uytYU ctGllP1y4N/DtPUMJnJhM1yvVk7HSYycZvin7zn8wusUpW8m5PWw0P0Dd/2NfP6m kyOr8/BU5JH4XZfoynZm3KmYsLUehtXKP53KuZYZ32kKVz9Lwcps6vYVcautngvV HyrewqFVr+CrycXu3A2dG4lZj0ugYRUMamPwA+X8MQs9NXxX8BLvpaWzc8Um4VV2 rcjCkZaxeEMXOtSdjgy4vJI56yHdRHc29h8OFeV9Qfb8+5m/UsWp/BwcqU/x9rIn 2LH8EY7lpBFuLsJu34B9OY07LWvUBRUx+UOMNO3lbtdO5bVR1nLgt63Q/i52m4NE q0RbdkCrutKSqTmV+dbnuX5ebU7+TItPjUl3JlHrSWKNy5l1L2PWekx4eNHmbetB zQ8IS4X7mbKe/p/Gf54NDzh1wykkAAAAAElFTkSuQmCC ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline; filename=Buzz_icon.png Content-Type: image/png; name=Buzz_icon.png Content-Location: http://upload.wikimedia.org/wikinews/en/4/4e/Buzz_icon.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAABAAAAAPCAIAAABiEdh4AAAAAXNSR0IArs4c6QAA AARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAA OpgAABdwnLpRPAAAAl1JREFUKFNj/P//PwNJAKgBAr79/n/k0b/MbX/0p/8Q7fjM VfeGufypXteT+q2vXnz89fffX4gyBgj16OO/ol1/VKf8ker7xdXyjbXuI0vVa+ay J0yFd5lyrtq0Hb/z+Pr/vz+gGr5/+FS0/p1g5w++9p+sTd9ZGz6z1L5nqXzJXPqI Kf+2Vs2erXs7/z3r+P9hO1TDy3WrQlPmC9e/BCplrf8EUg0y/ilT0X3Nul3b9zb8 fZD5/5rZ/zuhUA33U6OOB/tmNu6QbHrBUv2GpeIFc+ljoGq5yn2rt9f8vRPy/7La /4sy/y/JQTXc8ne+42V5qbygeuJB6dr7zPm3gO7mLDzUtqrz++2k/+cF/p/j+X+G /f9pZqiG6+62N2y0HwTZXa0pKW3ZLJR2mDN9k9ucBVnb0+5cdPt/1ez/KeZ/J1n/ HeOCarjm43rFUOWWg/6DYLsLRdlxhRPcJk91Wlsgv9jPZaXznRvV/87b/T0o/nef JlTDo5aGS8ZaV41Vb9nr7g2xrp6Qa70yU3y+F/cMB5YpViYLfW4dTvx9KPLPvjCo ht8fP171dj2vKb/VXLmsOshsaTzHNDvmyVYME8wZ+swZe8zMJts83eT598oURMR9 u3Vzb5BHboaL8cI4hl4zEOoxY+g2ZegwZWw1Feq0b9ze9v/Pd4SGpx9e9O6dYzYn nqHNhLnDnLvHVqjfWbjXWabfy2J2/OLzW+EpCJQ07r1+nLGmhbPWgrXOTLzT1XFB evnuSbPOrpt/buPZp9fgShFpadPF/ZELyiMXV6SsbpxybMW9t0/QFCFzAdEhqzVw sFITAAAAAElFTkSuQmCC ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline; filename=Twitter.png Content-Type: image/png; name=Twitter.png Content-Location: http://upload.wikimedia.org/wikinews/en/f/f7/Twitter.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAACXBIWXMAAAsTAAAL EwEAmpwYAAAKTWlDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVN3WJP3Fj7f 92UPVkLY8LGXbIEAIiOsCMgQWaIQkgBhhBASQMWFiApWFBURnEhVxILVCkidiOKg KLhnQYqIWotVXDjuH9yntX167+3t+9f7vOec5/zOec8PgBESJpHmomoAOVKFPDrY H49PSMTJvYACFUjgBCAQ5svCZwXFAADwA3l4fnSwP/wBr28AAgBw1S4kEsfh/4O6 UCZXACCRAOAiEucLAZBSAMguVMgUAMgYALBTs2QKAJQAAGx5fEIiAKoNAOz0ST4F ANipk9wXANiiHKkIAI0BAJkoRyQCQLsAYFWBUiwCwMIAoKxAIi4EwK4BgFm2MkcC gL0FAHaOWJAPQGAAgJlCLMwAIDgCAEMeE80DIEwDoDDSv+CpX3CFuEgBAMDLlc2X S9IzFLiV0Bp38vDg4iHiwmyxQmEXKRBmCeQinJebIxNI5wNMzgwAABr50cH+OD+Q 5+bk4eZm52zv9MWi/mvwbyI+IfHf/ryMAgQAEE7P79pf5eXWA3DHAbB1v2upWwDa VgBo3/ldM9sJoFoK0Hr5i3k4/EAenqFQyDwdHAoLC+0lYqG9MOOLPv8z4W/gi372 /EAe/tt68ABxmkCZrcCjg/1xYW52rlKO58sEQjFu9+cj/seFf/2OKdHiNLFcLBWK 8ViJuFAiTcd5uVKRRCHJleIS6X8y8R+W/QmTdw0ArIZPwE62B7XLbMB+7gECiw5Y 0nYAQH7zLYwaC5EAEGc0Mnn3AACTv/mPQCsBAM2XpOMAALzoGFyolBdMxggAAESg gSqwQQcMwRSswA6cwR28wBcCYQZEQAwkwDwQQgbkgBwKoRiWQRlUwDrYBLWwAxqg EZrhELTBMTgN5+ASXIHrcBcGYBiewhi8hgkEQcgIE2EhOogRYo7YIs4IF5mOBCJh SDSSgKQg6YgUUSLFyHKkAqlCapFdSCPyLXIUOY1cQPqQ28ggMor8irxHMZSBslED 1AJ1QLmoHxqKxqBz0XQ0D12AlqJr0Rq0Hj2AtqKn0UvodXQAfYqOY4DRMQ5mjNlh XIyHRWCJWBomxxZj5Vg1Vo81Yx1YN3YVG8CeYe8IJAKLgBPsCF6EEMJsgpCQR1hM WEOoJewjtBK6CFcJg4Qxwicik6hPtCV6EvnEeGI6sZBYRqwm7iEeIZ4lXicOE1+T SCQOyZLkTgohJZAySQtJa0jbSC2kU6Q+0hBpnEwm65Btyd7kCLKArCCXkbeQD5BP kvvJw+S3FDrFiOJMCaIkUqSUEko1ZT/lBKWfMkKZoKpRzame1AiqiDqfWkltoHZQ L1OHqRM0dZolzZsWQ8ukLaPV0JppZ2n3aC/pdLoJ3YMeRZfQl9Jr6Afp5+mD9HcM DYYNg8dIYigZaxl7GacYtxkvmUymBdOXmchUMNcyG5lnmA+Yb1VYKvYqfBWRyhKV OpVWlX6V56pUVXNVP9V5qgtUq1UPq15WfaZGVbNQ46kJ1Bar1akdVbupNq7OUndS j1DPUV+jvl/9gvpjDbKGhUaghkijVGO3xhmNIRbGMmXxWELWclYD6yxrmE1iW7L5 7Ex2Bfsbdi97TFNDc6pmrGaRZp3mcc0BDsax4PA52ZxKziHODc57LQMtPy2x1mqt Zq1+rTfaetq+2mLtcu0W7eva73VwnUCdLJ31Om0693UJuja6UbqFutt1z+o+02Pr eekJ9cr1Dund0Uf1bfSj9Rfq79bv0R83MDQINpAZbDE4Y/DMkGPoa5hpuNHwhOGo EctoupHEaKPRSaMnuCbuh2fjNXgXPmasbxxirDTeZdxrPGFiaTLbpMSkxeS+Kc2U a5pmutG003TMzMgs3KzYrMnsjjnVnGueYb7ZvNv8jYWlRZzFSos2i8eW2pZ8ywWW TZb3rJhWPlZ5VvVW16xJ1lzrLOtt1ldsUBtXmwybOpvLtqitm63Edptt3xTiFI8p 0in1U27aMez87ArsmuwG7Tn2YfYl9m32zx3MHBId1jt0O3xydHXMdmxwvOuk4TTD qcSpw+lXZxtnoXOd8zUXpkuQyxKXdpcXU22niqdun3rLleUa7rrStdP1o5u7m9yt 2W3U3cw9xX2r+00umxvJXcM970H08PdY4nHM452nm6fC85DnL152Xlle+70eT7Oc Jp7WMG3I28Rb4L3Le2A6Pj1l+s7pAz7GPgKfep+Hvqa+It89viN+1n6Zfgf8nvs7 +sv9j/i/4XnyFvFOBWABwQHlAb2BGoGzA2sDHwSZBKUHNQWNBbsGLww+FUIMCQ1Z H3KTb8AX8hv5YzPcZyya0RXKCJ0VWhv6MMwmTB7WEY6GzwjfEH5vpvlM6cy2CIjg R2yIuB9pGZkX+X0UKSoyqi7qUbRTdHF09yzWrORZ+2e9jvGPqYy5O9tqtnJ2Z6xq bFJsY+ybuIC4qriBeIf4RfGXEnQTJAntieTE2MQ9ieNzAudsmjOc5JpUlnRjruXc orkX5unOy553PFk1WZB8OIWYEpeyP+WDIEJQLxhP5aduTR0T8oSbhU9FvqKNolGx t7hKPJLmnVaV9jjdO31D+miGT0Z1xjMJT1IreZEZkrkj801WRNberM/ZcdktOZSc lJyjUg1plrQr1zC3KLdPZisrkw3keeZtyhuTh8r35CP5c/PbFWyFTNGjtFKuUA4W TC+oK3hbGFt4uEi9SFrUM99m/ur5IwuCFny9kLBQuLCz2Lh4WfHgIr9FuxYji1MX dy4xXVK6ZHhp8NJ9y2jLspb9UOJYUlXyannc8o5Sg9KlpUMrglc0lamUycturvRa uWMVYZVkVe9ql9VbVn8qF5VfrHCsqK74sEa45uJXTl/VfPV5bdra3kq3yu3rSOuk 626s91m/r0q9akHV0IbwDa0b8Y3lG19tSt50oXpq9Y7NtM3KzQM1YTXtW8y2rNvy oTaj9nqdf13LVv2tq7e+2Sba1r/dd3vzDoMdFTve75TsvLUreFdrvUV99W7S7oLd jxpiG7q/5n7duEd3T8Wej3ulewf2Re/ranRvbNyvv7+yCW1SNo0eSDpw5ZuAb9qb 7Zp3tXBaKg7CQeXBJ9+mfHvjUOihzsPcw83fmX+39QjrSHkr0jq/dawto22gPaG9 7+iMo50dXh1Hvrf/fu8x42N1xzWPV56gnSg98fnkgpPjp2Snnp1OPz3Umdx590z8 mWtdUV29Z0PPnj8XdO5Mt1/3yfPe549d8Lxw9CL3Ytslt0utPa49R35w/eFIr1tv 62X3y+1XPK509E3rO9Hv03/6asDVc9f41y5dn3m978bsG7duJt0cuCW69fh29u0X dwruTNxdeo94r/y+2v3qB/oP6n+0/rFlwG3g+GDAYM/DWQ/vDgmHnv6U/9OH4dJH zEfVI0YjjY+dHx8bDRq98mTOk+GnsqcTz8p+Vv9563Or59/94vtLz1j82PAL+YvP v655qfNy76uprzrHI8cfvM55PfGm/K3O233vuO+638e9H5ko/ED+UPPR+mPHp9BP 9z7nfP78L/eE8/sl0p8zAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMA APn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAACc0lEQVR42pSSO2hUURCGv3N2 766JxGQ3vgM+gopaaBEIKEHQ+EC0EyuxF1QUC7GxEQSVVIKoWKmdhaBiYRFBJIIW PrEQX1F8ocYQyWP3nnvOb7F3400iogMDB2bmY/7/DJJIM5J0WNIzSR8k3ZG0NVP/ a9YfiyWdkqTvTno2IlWCJKkiacv/gE5IGng1Km15ErTsftCBl0GuBrv5L6A8tVgN lG//8Dwf8jTl4dY32DMvYvl00wnsByqABQzwBrgLjKXz4yAAvA/YJEYy5AwE5QEz EzjN1OgFdgOfsyABKHi8c0iGBDjfD+XI4PW7SYJ1rRGbZ0fdQE+ajyZsFHwgiR1e BoAr72J8qmV8a8Hlt3B1TYmOUrQReP0HkCeJYxIZjIEoTNKexvdK4OOoo6MUNQKl KR6F4HEuJsECMCNvyBmDMvqTIDa1NbB+zjSAfuD+FJB8wDtHLIs1cHZtG6vLRSqp SQKsMZQKlsgaBxwHrv1ho5pHToZ8OtBcyNEMSdpi0hO4BxwCHtRn7cTv97i4ipxj aKTCw28j2T6b8X0RsB0oTL4jWzM7IcQxMnlyQRzp6+fN4AhzGwvWS0g1UvfC5rYV pcajQAScAT7UQZ8Bt3RGMTLOEVthgcFhx7G+fjBmwv8vaCnSu3MVS1oadgEDQE9d 2nXg0fb2Vja0NTE2OMxYpYp3MXk8OSXjaa3n/ZchHn/6CVAG2rMe3QBOFnJGF7et YMfKWRScI6nEhGqMMhnGqnTOb6JrQUtdyVMAIynr9z6gJwkqvhgYZqjqsRlV9c5l 5UZaGwoAB4FLwOBkEEAXsBfoBIqZeTIn8BU4B1yo138NAEHLpAJRyOb4AAAAAElF TkSuQmCC ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline; filename=Newstrust.gif Content-Type: image/gif; name=Newstrust.gif Content-Location: http://upload.wikimedia.org/wikinews/en/0/00/Newstrust.gif Content-Transfer-Encoding: Base64 R0lGODlhEAAQAMQAAP///zZayjmYAM3W8s3lv2iD15zLf0JkzYGX3rPB6+by33SN 2k5u0PL1/Ft41Obq+MDL7qjSj42i4dng9ae36AAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAQABAAAAViICCOZGmeZBBAYhEMhiDP hrq0bzzLtfoAroGCEJERCApVgAJ8iQiykZLRHDyjItsreBVIA4kAAuEEQL3ZQONw kJTPXwCZ8cYCVICJ0mq24wEOKnxwaSJhdWh3ASJriCiPIiEAOw== ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline Content-Type: image/png Content-Location: http://upload.wikimedia.org/wikinews/en/b/bc/Wiki.png Content-Transfer-Encoding: Base64 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 ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline; filename=CCBY_yellow.png Content-Type: image/png; name=CCBY_yellow.png Content-Location: http://upload.wikimedia.org/wikipedia/commons/d/d3/CCBY_yellow.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAAFcAAAAjCAYAAADhe5a7AAAABGdBTUEAANbY1E9Y MgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAA+bSURBVHja 7FoJcBzVmf56eu57RhqNRoclWT4ky0ayY/ApWzgEOxscy5AlmCp8hRy14RDLVvaC jYHAlhNSlkMqRbJAcKgsUGQLySZk4zhYPmIw8SHJgGxHt4QkSyPNpblnevZ/3TOj 0WE7pmqrtHhf1VOPut+86f7e977/e/9rDtcuXPIoS34uobqF6jqqRdVVqlvSjejP hY5ot8srNNN/x6i+TbUHN3HhrnONSwJ7O9Un19yiqt60NgsblwvIz5FLF+mqnOeg 0NigsKxA/4iAE386i4OHP0bjiSADup7qgf8Hd/J5Bupcqi/f9yVt9aO7bkN24WoE R88i4m5FXEhQIwJVmw913mZobSuhiXwIVfQSFJE2yIUR9F6J45mX3Tjwrp+BvJNq y80ObgrYXcUO/kc/fsRqXrLmm/DE58F9eT98rgEEwwlEYwnILDVQ21bBEPsQJoGq NgKDloNGJYNKCSjknMjq1r9EsPtZJ1r+Eq2jfvffrOCmgN1HEvDwz/8pC4KxBk7Z Bgy3vYSRgctw+QT4QzyiurXgCThN+ENYdEFkmXhkm2WwGmUw6mQEsoxA5qBWErvl ENt+4wdOxuIG6r/5c4qnm2pTaoZyMwC7Z9ud2if2ftcCZ9CBIeVu9F88hIHO9zE0 FkeQvl4szEdBhENFyId+RRS/L1TAZi9ETo4DtmwDsq0GWM16mLVBGPkuaKPnoZIH RRYfPx8CN3VI1RQnjSsB1x+B6LB0TpEDWL4IeD8AQl3JczZAUwoEO6jdyKxDtnsw hld/O45j58KMQDu5KcBuJca+9foz2RhxCxiQ3Y+eAR96LryBwBCPO/12bIAFiVgM AlV2PB+PYI8+LLLXZvDDZuGRY5EhN4uO9nzk5FfAUngH9Fwn1N7fQM4FIaNfmwZw /qMEMkl8178Agl86V/KcBPLlB6X/eSPg2A34P6GBODxr6Vv/hheP1bvq+QxXUGrW c4fe3puj9gUTGPAWoMszDx2tB1HQp8JDkblYmNBAlh+Gcm0ImjupbgyhpCaCXatj qC6Nw6pOkFuIoccpIBxNIB4dB8Ld4L1HIVcawc+pAx/phSwmsW4SwL7TgJkcnqoA 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 8j8CDAC26pP/FDpuTQAAAABJRU5ErkJggg== ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline; filename=poweredby_mediawiki_88x31.png Content-Type: image/png; name=poweredby_mediawiki_88x31.png Content-Location: http://bits.wikimedia.org/skins-1.5/common/images/poweredby_mediawiki_88x31.png Content-Transfer-Encoding: Base64 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 RU5ErkJggg== ------------wBRcxkVmIBvi9JFBgjE4oA Content-Disposition: inline; filename=wikimedia-button.png Content-Type: image/png; name=wikimedia-button.png Content-Location: http://en.wikinews.org/images/wikimedia-button.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAAFgAAAAfCAMAAABUFvrSAAAAA3NCSVQICAjb4U/g AAAAilBMVEVjZGeGh4nn6+yZmZni5uTW1taAgYNtbnGkpKYBhbLd3t1svZdCroKt rq/Cv79ztMs7ncDMzMy5t7enzL3Hx8h6e37l5eXw8PDK0dOVwtOozdsfkrnKk47E 1tUNiba8RjxKs4bN3eKawM2SybIslr5Yp8TV4N+80dbY5Oek08O5zNJ+wqW20cf2 9vZ09tAFAAAACXBIWXMAAArwAAAK8AFCrDSYAAACh0lEQVR4Xs3RiZKbMAwGYMu3 zX2T+072fP/XqwSUppM0bLfdmf1DxlhmvhGCRV8UFmVfkm8Ig/0beLnZbJYfcuNK T8Htr6BLcvuBCAv5o/Pf4HjTJ/4AbCyICVhRXk6JUssBXiqVpK16FCvyXJcPHvgJ n5xLVD7CydqdHsKEWjsN7x3B2QC3Kun2k5mE29Rhh4eiH3JcHOgN1vt/h/fIXN7C bZEtl8us2IbFauH6YRirFBO0Wqa6K1bM5gzLQDvGtNKMGdEqrcmrRth7fyIlCMPt M26et2EYUGlxwZ0w3jKDz2WWeVSZ9Z5glltGBY8B8LERtHgwLPeUHsZJ7FfoYc/o 0vq2X+Ms8Chj1gD+he/gCjzBMasMq6hgbdSJwtCSsaiCK3jh1i8FgWFwfg0pxQXh mceAYZkwLO5hMGUPx2DtLWxZLlg2wFJKhC9FBwZ+gFcES0zOhGxZJaVleKmqUrKD VV+QGACJo6ClqgDwDjPC87cRHjveS0rVSimiAZalAdXBQ4ExkEAfTyGcd2WjRhhn PDv3o5AdvN3N6OPJT4fguq4T51J5uIJf65RK9efTw3Pn3PwcjHBwnq+dS+qHiadg zvkT9nc8o9zDwWp3xEns+MOU412W3Z72MKcG0119CF7lITjIXepw6nesSliuhS0B Ig48ByEzDaXW+Z9gnqC0QOoJf3x+xN3pXpMRt23FJXAuFHBdRpFQXEbl3Y4bCj85 TJrMZrMkXXduc5syaoSHpsGLVl2WStRNE5XNTQjuQj1TEKUk5N7CGiypNApcc4BY aVClju7CQ+bY6YCn8+ZusmsArk8ewEQn6WKxOCZz3kzDXEzB71fhT7sn/v4/QvBN vjv8RfkBEHe0Bwh42FAAAAAASUVORK5CYII= ------------wBRcxkVmIBvi9JFBgjE4oA--